@nomadreservations/ngx-codemirror
Version:
`@nomadreservations/ngx-codemirror` [CodeMirror (5.x)](http://codemirror.net/) code editor in your Angular application. Server Side Rendering(SSR) compliant and @angular 6+ Ready.
303 lines (295 loc) • 20.6 kB
JavaScript
import { Injectable, Component, Input, Output, ViewChild, EventEmitter, forwardRef, NgZone, NgModule } from '@angular/core';
import { ReplaySubject } from 'rxjs';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* Main Codemirror import, utilizing window's existence to determine if we're server side or not.
*/
var /** @type {?} */ CodeMirror = typeof window !== 'undefined' && typeof window.navigator !== 'undefined'
? require('codemirror')
: undefined;
/**
* Initialize Event for CodeMirror.Editor instance
*
* Holds a referencable pointer to the code mirror instance for users.
*/
var CodemirrorService = /** @class */ (function () {
function CodemirrorService() {
/**
* Codemirror instance subject
*
* Emits a refrence to the initialized CodeMirror.Editor once it's insantiated.
*/
this.instance$ = new ReplaySubject();
}
CodemirrorService.decorators = [
{ type: Injectable },
];
return CodemirrorService;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* Main Codemirror import, utilizing window's existence to determine if we're server side or not.
*/
var /** @type {?} */ CodeMirror$1 = typeof window !== 'undefined' && typeof window.navigator !== 'undefined'
? require('codemirror')
: undefined;
/**
* CodeMirror component
*
* **Usage** :
* ```html
* <ngx-codemirror [(ngModel)]="data" [config]="{...}" (init)="onInit" (blur)="onBlur" (focus)="onFocus" ...></ngx-codemirror>
* ```
*/
var CodemirrorComponent = /** @class */ (function () {
/**
* Constructor
*
* @param _zone NgZone injected for Initialization
*/
function CodemirrorComponent(_codeMirror, _zone) {
this._codeMirror = _codeMirror;
this._zone = _zone;
/**
* change output event, pass through from codemirror
*/
this.change = new EventEmitter();
/**
* focus output event, pass through from codemirror
*/
this.focus = new EventEmitter();
/**
* blur output event, pass through from codemirror
*/
this.blur = new EventEmitter();
/**
* cursorActivity output event, pass through from codemirror
*/
this.cursorActivity = new EventEmitter();
/**
* Value storage
*/
this._value = '';
}
Object.defineProperty(CodemirrorComponent.prototype, "value", {
/** Implements ControlValueAccessor.value */
get: /**
* Implements ControlValueAccessor.value
* @return {?}
*/
function () { return this._value; },
set: /**
* Implements ControlValueAccessor.value
* @param {?} v
* @return {?}
*/
function (v) {
if (v !== this._value) {
this._value = v;
this.onChange(v);
}
},
enumerable: true,
configurable: true
});
/**
* On component destroy
* @return {?}
*/
CodemirrorComponent.prototype.ngOnDestroy = /**
* On component destroy
* @return {?}
*/
function () {
};
/**
* On component view init
* @return {?}
*/
CodemirrorComponent.prototype.ngAfterViewInit = /**
* On component view init
* @return {?}
*/
function () {
this.config = this.config || {};
this.codemirrorInit(this.config);
};
/**
* Value update process
* @param {?} value
* @return {?}
*/
CodemirrorComponent.prototype.updateValue = /**
* Value update process
* @param {?} value
* @return {?}
*/
function (value) {
this.value = value;
this.onTouched();
this.change.emit(value);
};
/**
* Implements ControlValueAccessor
* @param {?} value
* @return {?}
*/
CodemirrorComponent.prototype.writeValue = /**
* Implements ControlValueAccessor
* @param {?} value
* @return {?}
*/
function (value) {
this._value = value || '';
if (this._instance) {
this._instance.setValue(this._value);
}
};
/**
* Change event trigger
* @param {?} _
* @return {?}
*/
CodemirrorComponent.prototype.onChange = /**
* Change event trigger
* @param {?} _
* @return {?}
*/
function (_) { };
/**
* Dirty/touched event trigger
* @return {?}
*/
CodemirrorComponent.prototype.onTouched = /**
* Dirty/touched event trigger
* @return {?}
*/
function () { };
/**
* Implements ControlValueAccessor.registerOnChange
* @param {?} fn
* @return {?}
*/
CodemirrorComponent.prototype.registerOnChange = /**
* Implements ControlValueAccessor.registerOnChange
* @param {?} fn
* @return {?}
*/
function (fn) { this.onChange = fn; };
/**
* Implements ControlValueAccessor.registerOnTouched
* @param {?} fn
* @return {?}
*/
CodemirrorComponent.prototype.registerOnTouched = /**
* Implements ControlValueAccessor.registerOnTouched
* @param {?} fn
* @return {?}
*/
function (fn) { this.onTouched = fn; };
/**
* Initialize codemirror
* @param {?} config
* @return {?}
*/
CodemirrorComponent.prototype.codemirrorInit = /**
* Initialize codemirror
* @param {?} config
* @return {?}
*/
function (config) {
var _this = this;
if (CodeMirror$1) {
this._zone.runOutsideAngular(function () {
_this._instance = CodeMirror$1.fromTextArea(_this.host.nativeElement, config);
_this._instance.setValue(_this._value);
});
this._instance.on('change', function () {
_this.updateValue(_this._instance.getValue());
});
this._instance.on('focus', function (instance, event) {
_this.focus.emit({ instance: instance, event: event });
});
this._instance.on('cursorActivity', function (instance) {
_this.cursorActivity.emit({ instance: instance });
});
this._instance.on('blur', function (instance, event) {
_this.blur.emit({ instance: instance, event: event });
});
this._codeMirror.instance$.next(this._instance);
}
};
CodemirrorComponent.decorators = [
{ type: Component, args: [{
// tslint:disable-next-line:component-selector
selector: 'ngx-codemirror',
providers: [
{
provide: NG_VALUE_ACCESSOR,
// tslint:disable-next-line:no-forward-ref
useExisting: forwardRef(function () { return CodemirrorComponent; }),
multi: true
}
],
template: '<textarea #host></textarea>',
},] },
];
/** @nocollapse */
CodemirrorComponent.ctorParameters = function () { return [
{ type: CodemirrorService, },
{ type: NgZone, },
]; };
CodemirrorComponent.propDecorators = {
"config": [{ type: Input },],
"change": [{ type: Output },],
"focus": [{ type: Output },],
"blur": [{ type: Output },],
"cursorActivity": [{ type: Output },],
"host": [{ type: ViewChild, args: ['host',] },],
"value": [{ type: Input },],
};
return CodemirrorComponent;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* \@angular 5.x+ SSR ready CodeMirror wrapping module.
*/
var CodemirrorModule = /** @class */ (function () {
function CodemirrorModule() {
}
CodemirrorModule.decorators = [
{ type: NgModule, args: [{
providers: [
CodemirrorService
],
declarations: [CodemirrorComponent],
exports: [CodemirrorComponent],
entryComponents: [CodemirrorComponent]
},] },
];
return CodemirrorModule;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
export { CodemirrorComponent, CodemirrorModule, CodemirrorService };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9tYWRyZXNlcnZhdGlvbnMtbmd4LWNvZGVtaXJyb3IuanMubWFwIiwic291cmNlcyI6WyJuZzovL0Bub21hZHJlc2VydmF0aW9ucy9uZ3gtY29kZW1pcnJvci9uZ3gtY29kZW1pcnJvci9jb2RlbWlycm9yLnNlcnZpY2UudHMiLCJuZzovL0Bub21hZHJlc2VydmF0aW9ucy9uZ3gtY29kZW1pcnJvci9uZ3gtY29kZW1pcnJvci9jb2RlbWlycm9yLmNvbXBvbmVudC50cyIsIm5nOi8vQG5vbWFkcmVzZXJ2YXRpb25zL25neC1jb2RlbWlycm9yL25neC1jb2RlbWlycm9yL2NvZGVtaXJyb3IubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSAnY29kZW1pcnJvcic7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogTWFpbiBDb2RlbWlycm9yIGltcG9ydCwgdXRpbGl6aW5nIHdpbmRvdydzIGV4aXN0ZW5jZSB0byBkZXRlcm1pbmUgaWYgd2UncmUgc2VydmVyIHNpZGUgb3Igbm90LlxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuY29uc3QgQ29kZU1pcnJvcjogYW55ID1cbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnXG4gID8gcmVxdWlyZSgnY29kZW1pcnJvcicpXG4gIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEluaXRpYWxpemUgRXZlbnQgZm9yIENvZGVNaXJyb3IuRWRpdG9yIGluc3RhbmNlXG4gKlxuICogSG9sZHMgYSByZWZlcmVuY2FibGUgcG9pbnRlciB0byB0aGUgY29kZSBtaXJyb3IgaW5zdGFuY2UgZm9yIHVzZXJzLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29kZW1pcnJvclNlcnZpY2Uge1xuICAvKipcbiAgICogQ29kZW1pcnJvciBpbnN0YW5jZSBzdWJqZWN0XG4gICAqXG4gICAqIEVtaXRzIGEgcmVmcmVuY2UgdG8gdGhlIGluaXRpYWxpemVkIENvZGVNaXJyb3IuRWRpdG9yIG9uY2UgaXQncyBpbnNhbnRpYXRlZC5cbiAgICovXG4gIHB1YmxpYyBpbnN0YW5jZSQ6IFJlcGxheVN1YmplY3Q8RWRpdG9yPiA9IG5ldyBSZXBsYXlTdWJqZWN0PEVkaXRvcj4oKTtcbn1cbiIsIi8vIEltcG9ydHNcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uRGVzdHJveSxcbiAgTmdab25lLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBFZGl0b3IgfSBmcm9tICdjb2RlbWlycm9yJztcbmltcG9ydCB7IENvZGVtaXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi9jb2RlbWlycm9yLnNlcnZpY2UnO1xuXG4vKipcbiAqIE1haW4gQ29kZW1pcnJvciBpbXBvcnQsIHV0aWxpemluZyB3aW5kb3cncyBleGlzdGVuY2UgdG8gZGV0ZXJtaW5lIGlmIHdlJ3JlIHNlcnZlciBzaWRlIG9yIG5vdC5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbmNvbnN0IENvZGVNaXJyb3I6IGFueSA9XG4gIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJ1xuICA/IHJlcXVpcmUoJ2NvZGVtaXJyb3InKVxuICA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDb2RlTWlycm9yIGNvbXBvbmVudFxuICpcbiAqICoqVXNhZ2UqKiA6XG4gKiBgYGBodG1sXG4gKiAgIDxuZ3gtY29kZW1pcnJvciBbKG5nTW9kZWwpXT1cImRhdGFcIiBbY29uZmlnXT1cInsuLi59XCIgKGluaXQpPVwib25Jbml0XCIgKGJsdXIpPVwib25CbHVyXCIgKGZvY3VzKT1cIm9uRm9jdXNcIiAuLi4+PC9uZ3gtY29kZW1pcnJvcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ25neC1jb2RlbWlycm9yJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZm9yd2FyZC1yZWZcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvZGVtaXJyb3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIHRlbXBsYXRlOiAnPHRleHRhcmVhICNob3N0PjwvdGV4dGFyZWE+Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29kZW1pcnJvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqIENvZGVtaXJyb3IgY29uZmlnIG9iamVjdCAoc2VlIFtkZXRhaWxzXShodHRwOi8vY29kZW1pcnJvci5uZXQvZG9jL21hbnVhbC5odG1sI2NvbmZpZykpICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjb25maWc6IGFueTtcbiAgLyoqIGNoYW5nZSBvdXRwdXQgZXZlbnQsIHBhc3MgdGhyb3VnaCBmcm9tIGNvZGVtaXJyb3IgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8qKiBmb2N1cyBvdXRwdXQgZXZlbnQsIHBhc3MgdGhyb3VnaCBmcm9tIGNvZGVtaXJyb3IgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBmb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqIGJsdXIgb3V0cHV0IGV2ZW50LCBwYXNzIHRocm91Z2ggZnJvbSBjb2RlbWlycm9yICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgYmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqIGN1cnNvckFjdGl2aXR5IG91dHB1dCBldmVudCwgcGFzcyB0aHJvdWdoIGZyb20gY29kZW1pcnJvciAqL1xuICBAT3V0cHV0KCkgcHVibGljIGN1cnNvckFjdGl2aXR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKiogSG9zdCBlbGVtZW50IGZvciBjb2RlbWlycm9yIHRvIGF0dGFjaCB0byAqL1xuICBAVmlld0NoaWxkKCdob3N0JykgcHVibGljIGhvc3Q6IEVsZW1lbnRSZWY7XG5cbiAgLyoqIEN1cnJlbnQgZWRpdG9yIGluc3RhbmNlICovXG4gIHByaXZhdGUgX2luc3RhbmNlOiBhbnk7XG5cbiAgLyoqIFZhbHVlIHN0b3JhZ2UgKi9cbiAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcblxuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIF96b25lIE5nWm9uZSBpbmplY3RlZCBmb3IgSW5pdGlhbGl6YXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NvZGVNaXJyb3I6IENvZGVtaXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZVxuICApIHt9XG5cbiAgLyoqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IudmFsdWUgKi9cbiAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH1cblxuICAvKiogSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3Nvci52YWx1ZSAqL1xuICBASW5wdXQoKSBzZXQgdmFsdWUodikge1xuICAgIGlmICh2ICE9PSB0aGlzLl92YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgICAgdGhpcy5vbkNoYW5nZSh2KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT24gY29tcG9uZW50IGRlc3Ryb3lcbiAgICovXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcblxuICB9XG5cbiAgLyoqXG4gICAqIE9uIGNvbXBvbmVudCB2aWV3IGluaXRcbiAgICovXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmNvbmZpZyB8fCB7fTtcbiAgICB0aGlzLmNvZGVtaXJyb3JJbml0KHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWx1ZSB1cGRhdGUgcHJvY2Vzc1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB0aGlzLmNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gICAqL1xuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZSB8fCAnJztcbiAgICBpZiAodGhpcy5faW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuX2luc3RhbmNlLnNldFZhbHVlKHRoaXMuX3ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2hhbmdlIGV2ZW50IHRyaWdnZXIgKi9cbiAgcHVibGljICBvbkNoYW5nZShfOiBhbnkpIHt9XG4gIC8qKiBEaXJ0eS90b3VjaGVkIGV2ZW50IHRyaWdnZXIgKi9cbiAgcHVibGljIG9uVG91Y2hlZCgpIHt9XG4gIC8qKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkgeyB0aGlzLm9uQ2hhbmdlID0gZm47IH1cbiAgLyoqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNvZGVtaXJyb3JcbiAgICovXG4gIHByaXZhdGUgY29kZW1pcnJvckluaXQoY29uZmlnOiBhbnkpIHtcbiAgICBpZiAoQ29kZU1pcnJvcikge1xuICAgICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2luc3RhbmNlID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2luc3RhbmNlLnNldFZhbHVlKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9pbnN0YW5jZS5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMuX2luc3RhbmNlLmdldFZhbHVlKCkpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX2luc3RhbmNlLm9uKCdmb2N1cycsIChpbnN0YW5jZTogYW55LCBldmVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZm9jdXMuZW1pdCh7aW5zdGFuY2UsIGV2ZW50fSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5faW5zdGFuY2Uub24oJ2N1cnNvckFjdGl2aXR5JywgKGluc3RhbmNlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jdXJzb3JBY3Rpdml0eS5lbWl0KHtpbnN0YW5jZX0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX2luc3RhbmNlLm9uKCdibHVyJywgKGluc3RhbmNlOiBhbnksIGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5ibHVyLmVtaXQoe2luc3RhbmNlLCBldmVudH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX2NvZGVNaXJyb3IuaW5zdGFuY2UkLm5leHQodGhpcy5faW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ29kZW1pcnJvckNvbXBvbmVudCB9IGZyb20gJy4vY29kZW1pcnJvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29kZW1pcnJvclNlcnZpY2UgfSBmcm9tICcuL2NvZGVtaXJyb3Iuc2VydmljZSc7XG5cbi8qKlxuICogQGFuZ3VsYXIgNS54KyBTU1IgcmVhZHkgQ29kZU1pcnJvciB3cmFwcGluZyBtb2R1bGUuXG4gKi9cbkBOZ01vZHVsZSh7XG4gIHByb3ZpZGVyczogW1xuICAgIENvZGVtaXJyb3JTZXJ2aWNlXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW0NvZGVtaXJyb3JDb21wb25lbnRdLFxuICBleHBvcnRzOiBbQ29kZW1pcnJvckNvbXBvbmVudF0sXG4gIGVudHJ5Q29tcG9uZW50czogW0NvZGVtaXJyb3JDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIENvZGVtaXJyb3JNb2R1bGUge31cbiJdLCJuYW1lcyI6WyJDb2RlTWlycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUVBOzs7QUFPQSxxQkFBTSxVQUFVLEdBQ2QsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE9BQU8sTUFBTSxDQUFDLFNBQVMsS0FBSyxXQUFXO01BQ3RFLE9BQU8sQ0FBQyxZQUFZLENBQUM7TUFDckIsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7O3lCQWM4QixJQUFJLGFBQWEsRUFBVTs7O2dCQVB0RSxVQUFVOzs0QkFuQlg7Ozs7Ozs7QUNDQTs7O0FBc0JBLHFCQUFNQSxZQUFVLEdBQ2QsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE9BQU8sTUFBTSxDQUFDLFNBQVMsS0FBSyxXQUFXO01BQ3RFLE9BQU8sQ0FBQyxZ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