UNPKG

ontimize-web-ngx

Version:
172 lines 19.7 kB
import { Component, ElementRef, EventEmitter, forwardRef, Input, NgZone, Output, ViewChild } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { Util } from '../../../util/util'; import * as i0 from "@angular/core"; const defaults = { contentsCss: [''], customConfig: '' }; export class CKEditorComponent { get instance() { return this.ckIns; } set readonly(value) { this._readonly = value; setTimeout(() => { if (Util.isDefined(this.ckIns) && Util.isDefined(this.ckIns.editable())) { this.ckIns.setReadOnly(this.readonly); } }); } get readonly() { return this._readonly; } constructor(ngZone) { this.ngZone = ngZone; this.innerValue = ''; this._readonly = false; this.config = {}; this.skin = 'moono-lisa'; this.language = 'en'; this.fullPage = false; this.inline = false; this.change = new EventEmitter(); this.ready = new EventEmitter(); this.blur = new EventEmitter(); this.focus = new EventEmitter(); } static getRandomIdentifier(id = '') { return 'editor-' + (id !== '' ? id : Math.round(Util.randomNumber() * 100000000)); } ngOnDestroy() { this.destroyCKEditor(); } ngAfterViewInit() { this.destroyCKEditor(); this.initCKEditor(CKEditorComponent.getRandomIdentifier(this.id)); } initCKEditor(identifier) { if (typeof CKEDITOR === 'undefined') { return console.warn('CKEditor 4.x is missing (http://ckeditor.com/)'); } this.identifier = identifier; this.ck.nativeElement.setAttribute('name', this.identifier); const opt = Object.assign({}, defaults, this.config, { readOnly: this.readonly, skin: this.skin, language: this.language, fullPage: this.fullPage, inline: this.inline, width: '100%' }); this.ckIns = this.inline ? CKEDITOR.inline(this.ck.nativeElement, opt) : CKEDITOR.replace(this.ck.nativeElement, opt); this.ckIns.setData(this.innerValue); this.ckIns.on('change', () => { const val = this.ckIns.getData(); this.updateValue(val); }); this.ckIns.on('instanceReady', (evt) => { this.ngZone.run(() => { this.ready.emit(evt); }); }); this.ckIns.on('blur', (evt) => { this.ngZone.run(() => { this.blur.emit(evt); this.propagateTouch(); }); }); this.ckIns.on('focus', (evt) => { this.ngZone.run(() => { this.focus.emit(evt); }); }); } destroyCKEditor() { if (this.ckIns) { this.ckIns.removeAllListeners(); if (CKEDITOR.instances.hasOwnProperty(this.ckIns.name)) { CKEDITOR.remove(CKEDITOR.instances[this.ckIns.name]); } this.ckIns.destroy(); this.ckIns = null; const editorEl = document.querySelector('#cke_' + this.identifier); if (Util.isDefined(editorEl) && Util.isDefined(editorEl.parentElement)) { editorEl.parentElement.removeChild(editorEl); } } } updateValue(value) { this.ngZone.run(() => { this.innerValue = value; this.propagateChange(value); this.propagateTouch(); this.change.emit(value); }); } writeValue(value) { this.innerValue = value || ''; if (this.ckIns) { this.ckIns.setData(this.innerValue); const val = this.ckIns.getData(); this.ckIns.setData(val); } } propagateChange(_) { } propagateTouch() { } registerOnChange(fn) { this.propagateChange = fn; } registerOnTouched(fn) { this.propagateTouch = fn; } } CKEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CKEditorComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); CKEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CKEditorComponent, selector: "ck-editor", inputs: { readonly: "readonly", config: "config", skin: "skin", language: "language", fullPage: "fullPage", inline: "inline", id: "id" }, outputs: { change: "change", ready: "ready", blur: "blur", focus: "focus" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CKEditorComponent), multi: true }], viewQueries: [{ propertyName: "ck", first: true, predicate: ["ck"], descendants: true }], exportAs: ["ckEditor"], ngImport: i0, template: `<textarea #ck></textarea>`, isInline: true }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CKEditorComponent, decorators: [{ type: Component, args: [{ selector: 'ck-editor', template: `<textarea #ck></textarea>`, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CKEditorComponent), multi: true }], exportAs: 'ckEditor' }] }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { readonly: [{ type: Input }], config: [{ type: Input }], skin: [{ type: Input }], language: [{ type: Input }], fullPage: [{ type: Input }], inline: [{ type: Input }], id: [{ type: Input }], change: [{ type: Output }], ready: [{ type: Output }], blur: [{ type: Output }], focus: [{ type: Output }], ck: [{ type: ViewChild, args: ['ck'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2stZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL21hdGVyaWFsL2NrZWRpdG9yL2NrLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFJMUMsTUFBTSxRQUFRLEdBQUc7SUFDZixXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDakIsWUFBWSxFQUFFLEVBQUU7Q0FDakIsQ0FBQztBQWFGLE1BQU0sT0FBTyxpQkFBaUI7SUFNNUIsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBSUQsSUFDSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRTtnQkFDdkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3ZDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMs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QU87UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7K0dBdkpVLGlCQUFpQjttR0FBakIsaUJBQWlCLDJQQVBqQixDQUFDO1lBQ1YsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQ2hELEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyw0SUFMUSwyQkFBMkI7NEZBUTFCLGlCQUFpQjtrQkFYN0IsU0FBUzttQkFBQztvQkFFVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsU0FBUyxFQUFFLENBQUM7NEJBQ1YsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7NEJBQ2hELEtBQUssRUFBRSxJQUFJO3lCQUNaLENBQUM7b0JBQ0YsUUFBUSxFQUFFLFVBQVU7aUJBQ3JCOzZGQWNLLFFBQVE7c0JBRFgsS0FBSztnQkFjVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsRUFBRTtzQkFBakIsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU07Z0JBRWlCLEVBQUU7c0JBQXpCLFNBQVM7dUJBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC91dGlsJztcblxuZGVjbGFyZSB2YXIgQ0tFRElUT1I6IGFueTtcblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gIGNvbnRlbnRzQ3NzOiBbJyddLFxuICBjdXN0b21Db25maWc6ICcnXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdjay1lZGl0b3InLFxuICB0ZW1wbGF0ZTogYDx0ZXh0YXJlYSAjY2s+PC90ZXh0YXJlYT5gLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ0tFZGl0b3JDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH1dLFxuICBleHBvcnRBczogJ2NrRWRpdG9yJ1xufSlcbmV4cG9ydCBjbGFzcyBDS0VkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIHByb3RlY3RlZCBja0luczogYW55O1xuICBwcm90ZWN0ZWQgaWRlbnRpZmllcjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgaW5uZXJWYWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgcHVibGljIGdldCBpbnN0YW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ja0lucztcbiAgfVxuXG4gIHByb3RlY3RlZCBfcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgcmVhZG9ubHkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZWFkb25seSA9IHZhbHVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuY2tJbnMpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuY2tJbnMuZWRpdGFibGUoKSkpIHtcbiAgICAgICAgdGhpcy5ja0lucy5zZXRSZWFkT25seSh0aGlzLnJlYWRvbmx5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gIH1cblxuICBASW5wdXQoKSBwdWJsaWMgY29uZmlnOiBhbnkgPSB7fTtcbiAgQElucHV0KCkgcHVibGljIHNraW46IHN0cmluZyA9ICdtb29uby1saXNhJztcbiAgQElucHV0KCkgcHVibGljIGxhbmd1YWdlOiBzdHJpbmcgPSAnZW4nO1xuICBASW5wdXQoKSBwdWJsaWMgZnVsbFBhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGlubGluZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgaWQ6IHN0cmluZztcblxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgnY2snKSBwdWJsaWMgY2s6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG5nWm9uZTogTmdab25lXG4gICkgeyB9XG5cbiAgcHJvdGVjdGVkIHN0YXRpYyBnZXRSYW5kb21JZGVudGlmaWVyKGlkOiBzdHJpbmcgPSAnJykge1xuICAgIHJldHVybiAnZWRpdG9yLScgKyAoaWQgIT09ICcnID8gaWQgOiBNYXRoLnJvdW5kKFV0aWwucmFuZG9tTnVtYmVyKCkgKiAxMDAwMDAwMDApKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveUNLRWRpdG9yKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5kZXN0cm95Q0tFZGl0b3IoKTtcbiAgICB0aGlzLmluaXRDS0VkaXRvcihDS0VkaXRvckNvbXBvbmVudC5nZXRSYW5kb21JZGVudGlmaWVyKHRoaXMuaWQpKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0Q0tFZGl0b3IoaWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBDS0VESVRPUiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBjb25zb2xlLndhcm4oJ0NLRWRpdG9yIDQueCBpcyBtaXNzaW5nIChodHRwOi8vY2tlZGl0b3IuY29tLyknKTtcbiAgICB9XG5cbiAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgIHRoaXMuY2submF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCB0aGlzLmlkZW50aWZpZXIpO1xuXG4gICAgY29uc3Qgb3B0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIHRoaXMuY29uZmlnLCB7XG4gICAgICByZWFkT25seTogdGhpcy5yZWFkb25seSxcbiAgICAgIHNraW46IHRoaXMuc2tpbixcbiAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmd1YWdlLFxuICAgICAgZnVsbFBhZ2U6IHRoaXMuZnVsbFBhZ2UsXG4gICAgICBpbmxpbmU6IHRoaXMuaW5saW5lLFxuICAgICAgd2lkdGg6ICcxMDAlJ1xuICAgIH0pO1xuICAgIHRoaXMuY2tJbnMgPSB0aGlzLmlubGluZVxuICAgICAgPyBDS0VESVRPUi5pbmxpbmUodGhpcy5jay5uYXRpdmVFbGVtZW50LCBvcHQpXG4gICAgICA6IENLRURJVE9SLnJlcGxhY2UodGhpcy5jay5uYXRpdmVFbGVtZW50LCBvcHQpO1xuICAgIHRoaXMuY2tJbnMuc2V0RGF0YSh0aGlzLmlubmVyVmFsdWUpO1xuXG4gICAgdGhpcy5ja0lucy5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdGhpcy5ja0lucy5nZXREYXRhKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNrSW5zLm9uKCdpbnN0YW5jZVJlYWR5JywgKGV2dDogYW55KSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnJlYWR5LmVtaXQoZXZ0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ja0lucy5vbignYmx1cicsIChldnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5ibHVyLmVtaXQoZXZ0KTtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVUb3VjaCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNrSW5zLm9uKCdmb2N1cycsIChldnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5mb2N1cy5lbWl0KGV2dCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95Q0tFZGl0b3IoKSB7XG4gICAgaWYgKHRoaXMuY2tJbnMpIHtcbiAgICAgIHRoaXMuY2tJbnMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICBpZiAoQ0tFRElUT1IuaW5zdGFuY2VzLmhhc093blByb3BlcnR5KHRoaXMuY2tJbnMubmFtZSkpIHtcbiAgICAgICAgQ0tFRElUT1IucmVtb3ZlKENLRURJVE9SLmluc3RhbmNlc1t0aGlzLmNrSW5zLm5hbWVdKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2tJbnMuZGVzdHJveSgpO1xuICAgICAgdGhpcy5ja0lucyA9IG51bGw7XG4gICAgICBjb25zdCBlZGl0b3JFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNja2VfJyArIHRoaXMuaWRlbnRpZmllcik7XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQoZWRpdG9yRWwpICYmIFV0aWwuaXNEZWZpbmVkKGVkaXRvckVsLnBhcmVudEVsZW1lbnQpKSB7XG4gICAgICAgIGVkaXRvckVsLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZWRpdG9yRWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodmFsdWUpO1xuICAgICAgdGhpcy5wcm9wYWdhdGVUb3VjaCgpO1xuICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmlubmVyVmFsdWUgPSB2YWx1ZSB8fCAnJztcbiAgICBpZiAodGhpcy5ja0lucykge1xuICAgICAgLy8gRml4IGJ1ZyB0aGF0IGNhbid0IGVtaXQgY2hhbmdlIGV2ZW50IHdoZW4gc2V0IG5vbi1odG1sIHRhZyB2YWx1ZSB0d2ljZSBpbiBmdWxscGFnZSBtb2RlLlxuICAgICAgdGhpcy5ja0lucy5zZXREYXRhKHRoaXMuaW5uZXJWYWx1ZSk7XG4gICAgICBjb25zdCB2YWwgPSB0aGlzLmNrSW5zLmdldERhdGEoKTtcbiAgICAgIHRoaXMuY2tJbnMuc2V0RGF0YSh2YWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9wYWdhdGVDaGFuZ2UoXzogYW55KSB7XG4gICAgLy8gZG8gbm90aGluZ1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb3BhZ2F0ZVRvdWNoKCkge1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wcm9wYWdhdGVUb3VjaCA9IGZuO1xuICB9XG5cbn1cbiJdfQ==