Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

angular-monaco-editor

Package Overview
Dependencies
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

angular-monaco-editor - npm Package Compare versions

Comparing version 1.6.0 to 1.7.0

esm2015/lib/editor/constant/events.js

5

angular-monaco-editor.d.ts

@@ -6,3 +6,4 @@ /**

export { AngularMonacoEditorComponent as ɵb, CODE_EDITOR_INPUT_VALUE_ACCESSOR as ɵa } from './lib/editor/angular-monaco-editor/angular-monaco-editor.component';
export { BaseMonacoEditor as ɵc } from './lib/editor/base-monaco-editor';
export { CodeEditorEventService as ɵd } from './lib/editor/services/code-editor.event.service';
export { BaseMonacoEditor as ɵc } from './lib/editor/model/base-monaco-editor';
export { AngularMonacoEditorService as ɵe } from './lib/editor/service/angular-monaco-editor.service';
export { CodeEditorEventService as ɵd } from './lib/editor/service/code-editor.event.service';

2

angular-monaco-editor.metadata.json

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":4,"metadata":{"AngularMonacoEditorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":6,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":8,"character":4}],"declarations":[{"__symbolic":"reference","name":"ɵb"}],"exports":[{"__symbolic":"reference","name":"ɵb"}],"providers":[]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"defaults":[{}],"value":{"ngModule":{"__symbolic":"reference","name":"AngularMonacoEditorModule"},"providers":[{"provide":{"__symbolic":"reference","name":"ANGULAR_MONACO_EDITOR_CONFIG"},"useValue":{"__symbolic":"reference","name":"config"}}]}}}},"ANGULAR_MONACO_EDITOR_CONFIG":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":4,"character":48},"arguments":["ANGULAR_MONACO_EDITOR_CONFIG"]},"AngularMonacoEditorConfig":{"__symbolic":"interface"},"AngularEditorModel":{"__symbolic":"interface"},"ɵa":{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":16,"character":11},"useExisting":{"__symbolic":"reference","name":"ɵb"},"multi":true},"ɵb":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵc"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":21,"character":1},"arguments":[{"selector":"angular-monaco-editor","template":"<div class=\"editor\" #codeEditor></div>","styles":[":host{display:block;min-height:200px}.editor{width:100%;height:100%}"],"providers":[{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","name":"ɵd"}]}]}],"members":{"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":32,"character":3},"arguments":["model"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":49,"character":89},"arguments":[{"__symbolic":"reference","name":"ANGULAR_MONACO_EDITOR_CONFIG"}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":49,"character":28},{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"AngularMonacoEditorConfig"}]}],"initMonaco":[{"__symbolic":"method"}],"acitveModelMarkers":[{"__symbolic":"method"}],"refreshLayoutWhenWindowResize":[{"__symbolic":"method"}],"onChangeModelContentHandler":[{"__symbolic":"method"}],"onBlurEditorTextHandler":[{"__symbolic":"method"}],"onLayoutChangeHandler":[{"__symbolic":"method"}],"localEditor":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}]}},"ɵc":{"__symbolic":"class","members":{"_editorComponent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":24,"character":3},"arguments":["codeEditor"]}]}],"onInit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":27,"character":3}}]}],"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":29,"character":3},"arguments":["options"]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"AngularMonacoEditorConfig"}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"initMonaco":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"ɵd":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1}}],"members":{"addEvent":[{"__symbolic":"method"}],"fireEvent":[{"__symbolic":"method"}]}}},"origins":{"AngularMonacoEditorModule":"./lib/editor/editor.module","ANGULAR_MONACO_EDITOR_CONFIG":"./lib/editor/config","AngularMonacoEditorConfig":"./lib/editor/config","AngularEditorModel":"./lib/editor/types","ɵa":"./lib/editor/angular-monaco-editor/angular-monaco-editor.component","ɵb":"./lib/editor/angular-monaco-editor/angular-monaco-editor.component","ɵc":"./lib/editor/base-monaco-editor","ɵd":"./lib/editor/services/code-editor.event.service"},"importAs":"angular-monaco-editor"}
{"__symbolic":"module","version":4,"metadata":{"AngularMonacoEditorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":6,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":8,"character":4}],"declarations":[{"__symbolic":"reference","name":"ɵb"}],"exports":[{"__symbolic":"reference","name":"ɵb"}],"providers":[]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"defaults":[{}],"value":{"ngModule":{"__symbolic":"reference","name":"AngularMonacoEditorModule"},"providers":[{"provide":{"__symbolic":"reference","name":"ANGULAR_MONACO_EDITOR_CONFIG"},"useValue":{"__symbolic":"reference","name":"config"}}]}}}},"ANGULAR_MONACO_EDITOR_CONFIG":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":4,"character":48},"arguments":["ANGULAR_MONACO_EDITOR_CONFIG"]},"AngularMonacoEditorConfig":{"__symbolic":"interface"},"AngularEditorModel":{"__symbolic":"interface"},"ɵa":{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":18,"character":11},"useExisting":{"__symbolic":"reference","name":"ɵb"},"multi":true},"ɵb":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵc"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":23,"character":1},"arguments":[{"selector":"angular-monaco-editor","template":"<div class=\"editor\" #codeEditor></div>","styles":[":host{display:block;min-height:200px}.editor{width:100%;height:100%}"],"providers":[{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","name":"ɵd"}]}]}],"members":{"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":40,"character":3},"arguments":["model"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":55,"character":5},"arguments":[{"__symbolic":"reference","name":"ANGULAR_MONACO_EDITOR_CONFIG"}]}]],"parameters":[{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":53,"character":18},{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"AngularMonacoEditorConfig"}]}],"initMonaco":[{"__symbolic":"method"}],"refreshLayoutWhenWindowResize":[{"__symbolic":"method"}],"onChangeModelContentHandler":[{"__symbolic":"method"}],"onBlurEditorTextHandler":[{"__symbolic":"method"}],"onLayoutChangeHandler":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}]}},"ɵc":{"__symbolic":"class","members":{"_editorComponent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":17,"character":3},"arguments":["codeEditor"]}]}],"onInit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":20,"character":3}}]}],"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":22,"character":3},"arguments":["options"]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"AngularMonacoEditorConfig"}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"initMonaco":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"ɵd":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1}}],"members":{"addEvent":[{"__symbolic":"method"}],"fireEvent":[{"__symbolic":"method"}]}},"ɵe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1}}],"members":{"handleModelMarkers":[{"__symbolic":"method"}]}}},"origins":{"AngularMonacoEditorModule":"./lib/editor/editor.module","ANGULAR_MONACO_EDITOR_CONFIG":"./lib/editor/model/config","AngularMonacoEditorConfig":"./lib/editor/model/config","AngularEditorModel":"./lib/editor/model/types","ɵa":"./lib/editor/angular-monaco-editor/angular-monaco-editor.component","ɵb":"./lib/editor/angular-monaco-editor/angular-monaco-editor.component","ɵc":"./lib/editor/model/base-monaco-editor","ɵd":"./lib/editor/service/code-editor.event.service","ɵe":"./lib/editor/service/angular-monaco-editor.service"},"importAs":"angular-monaco-editor"}

@@ -119,17 +119,2 @@ (function (global, factory) {

}
Object.defineProperty(BaseMonacoEditor.prototype, "editor", {
get: /**
* @return {?}
*/ function () {
return this._editor;
},
set: /**
* @param {?} value
* @return {?}
*/ function (value) {
this._editor = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BaseMonacoEditor.prototype, "options", {

@@ -145,3 +130,3 @@ get: /**

*/ function (options) {
// default options(this.config.defaultOptions) + custom options(options)
// 默认options(this.config.defaultOptions) + 自定义options(options)
this._options = Object.assign({}, this.config.defaultOptions, options);

@@ -230,2 +215,45 @@ if (this._editor) {

*/
var AngularMonacoEditorService = (function () {
function AngularMonacoEditorService() {
this._existError = false;
}
Object.defineProperty(AngularMonacoEditorService.prototype, "existError", {
get: /**
* @return {?}
*/ function () {
return this._existError;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
AngularMonacoEditorService.prototype.handleModelMarkers = /**
* @return {?}
*/
function () {
var /** @type {?} */ self = this;
// https://github.com/Microsoft/monaco-editor/issues/30
var /** @type {?} */ setModelMarkers = monaco.editor.setModelMarkers;
monaco.editor.setModelMarkers = function (model, owner, markers) {
setModelMarkers.call(monaco.editor, model, owner, markers);
if (markers.length === 0) ;
else {
// there are errors
self._existError = true;
}
};
};
AngularMonacoEditorService.decorators = [
{ type: core.Injectable },
];
return AngularMonacoEditorService;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
// 自定义输入控件:1.封装ControlValueAccessor
// https://code-examples.net/zh-CN/q/2154761

@@ -241,4 +269,5 @@ var /** @type {?} */ CODE_EDITOR_INPUT_VALUE_ACCESSOR = {

// tslint:disable-next-line:max-line-length
function AngularMonacoEditorComponent(zone, editorEventService, angularEditorconfig) {
function AngularMonacoEditorComponent(angularMonacoEditorService, zone, editorEventService, angularEditorconfig) {
var _this = _super.call(this, editorEventService, angularEditorconfig) || this;
_this.angularMonacoEditorService = angularMonacoEditorService;
_this.zone = zone;

@@ -248,3 +277,2 @@ _this.editorEventService = editorEventService;

_this._value = '';
_this._errorInModelMarker = false;
// ControlValueAccessor提供的事件回调

@@ -264,4 +292,4 @@ _this.onControlValueChange = function (_) {

this.options.model = model;
if (this.editor) {
this.editor.dispose();
if (this._editor) {
this._editor.dispose();
this.initMonaco(this.options);

@@ -273,11 +301,2 @@ }

});
Object.defineProperty(AngularMonacoEditorComponent.prototype, "errorInModelMarker", {
get: /**
* @return {?}
*/ function () {
return this._errorInModelMarker;
},
enumerable: true,
configurable: true
});
/**

@@ -294,14 +313,13 @@ * @param {?} options

var /** @type {?} */ hasModel = !!options.model;
var /** @type {?} */ acitveMarkers = !!options.acitveMarkers; //自定义option
if (hasModel) {
options.model = monaco.editor.createModel(options.model.value, options.model.language, options.model.uri);
}
this.editor = monaco.editor.create(this._editorComponent.nativeElement, options);
this._editor = monaco.editor.create(this._editorComponent.nativeElement, options);
if (!hasModel) {
this.editor.setValue(this._value);
this._editor.setValue(this._value);
}
// monaco editor -> outside component
this.editor.onDidChangeModelContent(function (e) { return _this.onChangeModelContentHandler(e); });
this.editor.onDidBlurEditorText(function (e) { return _this.onBlurEditorTextHandler(e); });
this.editor.onDidLayoutChange(function (e) { return _this.onLayoutChangeHandler(e); });
this._editor.onDidChangeModelContent(function (e) { return _this.onChangeModelContentHandler(e); });
this._editor.onDidBlurEditorText(function (e) { return _this.onBlurEditorTextHandler(e); });
this._editor.onDidLayoutChange(function (e) { return _this.onLayoutChangeHandler(e); });
// refresh layout on resize event.

@@ -312,34 +330,9 @@ this.refreshLayoutWhenWindowResize();

target: this,
editor: this.editor
editor: this._editor
});
// active model markers
if (hasModel && acitveMarkers) {
this.acitveModelMarkers();
if (hasModel) {
this.angularMonacoEditorService.handleModelMarkers();
}
};
/**
* Acitve Model markers to get markers' results
*/
/**
* Acitve Model markers to get markers' results
* @return {?}
*/
AngularMonacoEditorComponent.prototype.acitveModelMarkers = /**
* Acitve Model markers to get markers' results
* @return {?}
*/
function () {
var /** @type {?} */ self = this;
// https://github.com/Microsoft/monaco-editor/issues/30
var /** @type {?} */ setModelMarkers = monaco.editor.setModelMarkers;
monaco.editor.setModelMarkers = function (model, owner, markers) {
setModelMarkers.call(monaco.editor, model, owner, markers);
if (markers.length === 0) ;
else {
// there are errors
self._errorInModelMarker = true;
}
};
};
/**
* refresh layout when resized the window

@@ -362,3 +355,3 @@ */

// https://www.jianshu.com/p/46894deb870a
this._windowResizeSubscription = fromEvent.fromEvent(window, 'resize').subscribe(function () { return _this.editor.layout(); });
this._windowResizeSubscription = fromEvent.fromEvent(window, 'resize').subscribe(function () { return _this._editor.layout(); });
};

@@ -375,3 +368,3 @@ /**

var _this = this;
var /** @type {?} */ _value = this.editor.getValue();
var /** @type {?} */ _value = this._editor.getValue();
// monaco editor -> outside component

@@ -424,12 +417,3 @@ // https://github.com/JTangming/tm/issues/4 ngZone详解

});
/**
* @return {?}
*/
AngularMonacoEditorComponent.prototype.localEditor = /**
* @return {?}
*/
function () {
// Demo: outside component -> monaco editor
this.writeValue('test');
};
// 自定义输入控件:3.2 implements ControlValueAccesso
// outside component -> monaco editor

@@ -448,6 +432,6 @@ // From ControlValueAccessor interface

self.value = value || '';
// Fix for value change while dispose in process
// Fix for value change while dispose in process.
setTimeout(function () {
if (self.editor /*&& !this.options.model*/) {
self.editor.setValue(self._value);
if (self._editor /*&& !this.options.model*/) {
self._editor.setValue(self._value);
}

@@ -486,3 +470,7 @@ });

styles: [":host{display:block;min-height:200px}.editor{width:100%;height:100%}"],
providers: [CODE_EDITOR_INPUT_VALUE_ACCESSOR, CodeEditorEventService]
// 自定义输入控件:2.引入依赖服务ControlValueAccessor
providers: [
CODE_EDITOR_INPUT_VALUE_ACCESSOR,
CodeEditorEventService
]
},] },

@@ -493,2 +481,3 @@ ];

return [
{ type: AngularMonacoEditorService, },
{ type: core.NgZone, },

@@ -563,2 +552,3 @@ { type: CodeEditorEventService, },

exports.ɵc = BaseMonacoEditor;
exports.ɵe = AngularMonacoEditorService;
exports.ɵd = CodeEditorEventService;

@@ -570,2 +560,2 @@

//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tb25hY28tZWRpdG9yLnVtZC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vYW5ndWxhci1tb25hY28tZWRpdG9yL2xpYi9lZGl0b3IvY29uZmlnLnRzIixudWxsLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2NvbnN0YW50cy9ldmVudHMudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL3NlcnZpY2VzL2NvZGUtZWRpdG9yLmV2ZW50LnNlcnZpY2UudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2Jhc2UtbW9uYWNvLWVkaXRvci50cyIsIm5nOi8vYW5ndWxhci1tb25hY28tZWRpdG9yL2xpYi9lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yL2FuZ3VsYXItbW9uYWNvLWVkaXRvci5jb21wb25lbnQudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2VkaXRvci5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLy8gaW5qZWN0aW9uVG9rZW7DpMK9wpzDp8KUwqjDqMKvwrTDpsKYwo5cbi8vIGh0dHBzOi8vc2VnbWVudGZhdWx0LmNvbS9hLzExOTAwMDAwMDg2MjYzNDhcbmV4cG9ydCBjb25zdCBBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuKCdBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5ndWxhck1vbmFjb0VkaXRvckNvbmZpZyB7XG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIGRlZmF1bHRPcHRpb25zPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gIG9uTW9uYWNvTG9hZD86IEZ1bmN0aW9uO1xufVxuIiwiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcclxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXHJcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xyXG4gICAgcmVzdWx0LmRlZmF1bHQgPSBtb2Q7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG4iLCJleHBvcnQgY29uc3QgQ09ERV9FRElUT1JfRVZFTlRTID0ge1xuICAgIG9uSW5pdDogJ29uSW5pdCdcbn07XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IENPREVfRURJVE9SX0VWRU5UUyB9IGZyb20gJy4uL2NvbnN0YW50cy9ldmVudHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29kZUVkaXRvckV2ZW50U2VydmljZSB7XG4gICAgcHVibGljIGV2ZW50TmFtZXMgPSBPYmplY3Qua2V5cyhDT0RFX0VESVRPUl9FVkVOVFMpO1xuICAgIHByaXZhdGUgX2V2ZW50czogYW55ID0ge307IC8vIMOkwr3Cv8OnwpTCqMOkwrrCi8OkwrvCtlxuXG4gICAgLyoqXG4gICAgICogw6jCrsK+w6fCvcKuw6XCkMKvw6fClMKow6TCusKLw6TCu8K2XG4gICAgICogQHBhcmFtICDDpMK6wovDpMK7wrZcbiAgICAgKi9cbiAgICBhZGRFdmVudChldmVudCkge1xuICAgICAgICBhc3NpZ24odGhpcy5fZXZlbnRzLCBldmVudCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZXZlbnRzKTtcbiAgICB9XG5cbiAgICBmaXJlRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fZXZlbnRzW2V2ZW50LmV2ZW50TmFtZV0uZW1pdChldmVudCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRW1pdCBFdmVudDpcIiArIGV2ZW50KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgcGljayB9IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jb2RlLWVkaXRvci5ldmVudC5zZXJ2aWNlJztcblxubGV0IGxvYWRlZE1vbmFjbyA9IGZhbHNlO1xubGV0IGxvYWRQcm9taXNlOiBQcm9taXNlPHZvaWQ+O1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZU1vbmFjb0VkaXRvciBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBfZWRpdG9yOiBhbnk7XG4gIGdldCBlZGl0b3IoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdG9yO1xuICB9XG4gIHNldCBlZGl0b3IodmFsdWUpIHtcbiAgICB0aGlzLl9lZGl0b3IgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX29wdGlvbnM6IGFueTtcbiAgcHJvdGVjdGVkIF93aW5kb3dSZXNpemVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBAVmlld0NoaWxkKCdjb2RlRWRpdG9yJykgX2VkaXRvckNvbXBvbmVudDogRWxlbWVudFJlZjsgLy8gw6XCisKow6bCgMKBw6bCt8K7w6XCisKgw6TCu8Kjw6fCoMKBw6fCvMKWw6jCvsKRw6XCmcKoXG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW91dHB1dC1vbi1wcmVmaXhcbiAgQE91dHB1dCgpIG9uSW5pdDtcblxuICBASW5wdXQoJ29wdGlvbnMnKVxuICBzZXQgb3B0aW9ucyhvcHRpb25zOiBhbnkpIHtcbiAgICAvLyBkZWZhdWx0IG9wdGlvbnModGhpcy5jb25maWcuZGVmYXVsdE9wdGlvbnMpICsgY3VzdG9tIG9wdGlvbnMob3B0aW9ucylcbiAgICB0aGlzLl9vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25maWcuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIGlmICh0aGlzLl9lZGl0b3IpIHtcbiAgICAgIHRoaXMuX2VkaXRvci5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmluaXRNb25hY28ob3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIGdldCBvcHRpb25zKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvZGVFZGl0b3JFdmVudFNlcnZpY2U6IENvZGVFZGl0b3JFdmVudFNlcnZpY2UsIHByaXZhdGUgY29uZmlnOiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnKSB7XG4gICAgLy8gw6XCiMKdw6XCp8KLw6XCjMKWw6jCh8Kqw6XCrsKaw6TCucKJw6TCusKLw6TCu8K2XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29kZUVkaXRvckV2ZW50U2VydmljZS5ldmVudE5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgIC8vIMOlwojCm8OlwrvCusOowofCqsOlwq7CmsOkwrnCicOkwrrCi8OkwrvCtsOvwrzCjMOmwq3CpMOlwqTChMOkwr3CnMOnwpTCqMOnwq3CicOmwpXCiMOkwrrCjjogQE91dHB1dCgpIG9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gICAgICBzZWxmW25hbWVdID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgICBjb25zdCBldmVudFBhaXIgPSBwaWNrKHNlbGYsIG5hbWUpO1xuICAgICAgY29kZUVkaXRvckV2ZW50U2VydmljZS5hZGRFdmVudChldmVudFBhaXIpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmIChsb2FkZWRNb25hY28pIHtcbiAgICAgIC8vIFdhaXQgdW50aWwgbW9uYWNvIGVkaXRvciBpcyBhdmFpbGFibGVcbiAgICAgIGxvYWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmluaXRNb25hY28odGhpcy5vcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2FkZWRNb25hY28gPSB0cnVlO1xuICAgICAgbG9hZFByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvbmZpZy5iYXNlVXJsIHx8ICcvYXNzZXRzJztcbiAgICAgICAgLy8gaWYgKHR5cGVvZigoPGFueT53aW5kb3cpLm1vbmFjbykgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vICAgcmVzb2x2ZSgpO1xuICAgICAgICAvLyAgIHJldHVybjtcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zdCBvbkdvdEFtZExvYWRlcjogYW55ID0gKCkgPT4ge1xuICAgICAgICAgIC8vIExvYWQgbW9uYWNvXG4gICAgICAgICAgKDxhbnk+d2luZG93KS5yZXF1aXJlLmNvbmZpZyh7IHBhdGhzOiB7ICd2cyc6IGAke2Jhc2VVcmx9L21vbmFjby92c2AgfSB9KTtcbiAgICAgICAgICAoPGFueT53aW5kb3cpLnJlcXVpcmUoWyd2cy9lZGl0b3IvZWRpdG9yLm1haW4nXSwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy5vbk1vbmFjb0xvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcub25Nb25hY29Mb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluaXRNb25hY28odGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBMb2FkIEFNRCBsb2FkZXIgaWYgbmVjZXNzYXJ5XG4gICAgICAgIGlmICghKDxhbnk+d2luZG93KS5yZXF1aXJlKSB7XG4gICAgICAgICAgY29uc3QgbG9hZGVyU2NyaXB0OiBIVE1MU2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgIGxvYWRlclNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICAgICAgbG9hZGVyU2NyaXB0LnNyYyA9IGAke2Jhc2VVcmx9L21vbmFjby92cy9sb2FkZXIuanNgO1xuICAgICAgICAgIGxvYWRlclNjcmlwdC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgb25Hb3RBbWRMb2FkZXIpO1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobG9hZGVyU2NyaXB0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbkdvdEFtZExvYWRlcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBNb25hY28gRWRpdG9yIEluaXRpYWxpemVyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpbml0TW9uYWNvKG9wdGlvbnM6IGFueSk6IHZvaWQ7XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fd2luZG93UmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2VkaXRvcikge1xuICAgICAgdGhpcy5fZWRpdG9yLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX2VkaXRvciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcndhcmRSZWYsIEluamVjdCwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzL29ic2VydmFibGUvZnJvbUV2ZW50JztcblxuaW1wb3J0IHsgQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRywgQW5ndWxhck1vbmFjb0VkaXRvckNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29kZS1lZGl0b3IuZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBDT0RFX0VESVRPUl9FVkVOVFMgfSBmcm9tICcuLi9jb25zdGFudHMvZXZlbnRzJztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3JNb2RlbCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEJhc2VNb25hY29FZGl0b3IgfSBmcm9tICcuLi9iYXNlLW1vbmFjby1lZGl0b3InO1xuXG5kZWNsYXJlIGNvbnN0IG1vbmFjbzogYW55O1xuXG4vLyBodHRwczovL2NvZGUtZXhhbXBsZXMubmV0L3poLUNOL3EvMjE1NDc2MVxuZXhwb3J0IGNvbnN0IENPREVfRURJVE9SX0lOUFVUX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gIC8vIGh0dHBzOi8vYmxvZy5jc2RuLm5ldC93YW5nZGFuXzIwMTMvYXJ0aWNsZS9kZXRhaWxzLzgxMzE0OTU5XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYW5ndWxhci1tb25hY28tZWRpdG9yJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiZWRpdG9yXCIgI2NvZGVFZGl0b3I+PC9kaXY+YCxcbiAgc3R5bGVzOiBbYDpob3N0e2Rpc3BsYXk6YmxvY2s7bWluLWhlaWdodDoyMDBweH0uZWRpdG9ye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9YF0sXG5cbiAgcHJvdmlkZXJzOiBbQ09ERV9FRElUT1JfSU5QVVRfVkFMVUVfQUNDRVNTT1IsIENvZGVFZGl0b3JFdmVudFNlcnZpY2VdXG59KVxuXG5leHBvcnQgY2xhc3MgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudCBleHRlbmRzIEJhc2VNb25hY29FZGl0b3IgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgQElucHV0KCdtb2RlbCcpXG4gIHNldCBtb2RlbChtb2RlbDogQW5ndWxhckVkaXRvck1vZGVsKSB7XG4gICAgdGhpcy5vcHRpb25zLm1vZGVsID0gbW9kZWw7XG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvci5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmluaXRNb25hY28odGhpcy5vcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZSA9ICcnO1xuXG4gIHByaXZhdGUgX2Vycm9ySW5Nb2RlbE1hcmtlciA9IGZhbHNlO1xuICBnZXQgZXJyb3JJbk1vZGVsTWFya2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lcnJvckluTW9kZWxNYXJrZXI7XG4gIH1cblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgem9uZTogTmdab25lLCBwcml2YXRlIGVkaXRvckV2ZW50U2VydmljZTogQ29kZUVkaXRvckV2ZW50U2VydmljZSwgQEluamVjdChBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHKSBwcml2YXRlIGFuZ3VsYXJFZGl0b3Jjb25maWc6IEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcpIHtcbiAgICBzdXBlcihlZGl0b3JFdmVudFNlcnZpY2UsIGFuZ3VsYXJFZGl0b3Jjb25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRNb25hY28ob3B0aW9uczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaGFzTW9kZWwgPSAhIW9wdGlvbnMubW9kZWw7XG4gICAgY29uc3QgYWNpdHZlTWFya2VycyA9ICEhb3B0aW9ucy5hY2l0dmVNYXJrZXJzOy8vw6jCh8Kqw6XCrsKaw6TCucKJb3B0aW9uXG5cbiAgICBpZiAoaGFzTW9kZWwpIHtcbiAgICAgIG9wdGlvbnMubW9kZWwgPSBtb25hY28uZWRpdG9yLmNyZWF0ZU1vZGVsKG9wdGlvbnMubW9kZWwudmFsdWUsIG9wdGlvbnMubW9kZWwubGFuZ3VhZ2UsIG9wdGlvbnMubW9kZWwudXJpKTtcbiAgICB9XG5cbiAgICB0aGlzLmVkaXRvciA9IG1vbmFjby5lZGl0b3IuY3JlYXRlKHRoaXMuX2VkaXRvckNvbXBvbmVudC5uYXRpdmVFbGVtZW50LCBvcHRpb25zKTtcblxuICAgIGlmICghaGFzTW9kZWwpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldFZhbHVlKHRoaXMuX3ZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBtb25hY28gZWRpdG9yIC0+IG91dHNpZGUgY29tcG9uZW50XG4gICAgdGhpcy5lZGl0b3Iub25EaWRDaGFuZ2VNb2RlbENvbnRlbnQoKGU6IGFueSkgPT4gdGhpcy5vbkNoYW5nZU1vZGVsQ29udGVudEhhbmRsZXIoZSkpO1xuXG4gICAgdGhpcy5lZGl0b3Iub25EaWRCbHVyRWRpdG9yVGV4dCgoZTogYW55KSA9PiB0aGlzLm9uQmx1ckVkaXRvclRleHRIYW5kbGVyKGUpKTtcblxuICAgIHRoaXMuZWRpdG9yLm9uRGlkTGF5b3V0Q2hhbmdlKChlOiBhbnkpID0+IHRoaXMub25MYXlvdXRDaGFuZ2VIYW5kbGVyKGUpKTtcblxuICAgIC8vIHJlZnJlc2ggbGF5b3V0IG9uIHJlc2l6ZSBldmVudC5cbiAgICB0aGlzLnJlZnJlc2hMYXlvdXRXaGVuV2luZG93UmVzaXplKCk7XG5cbiAgICB0aGlzLmVkaXRvckV2ZW50U2VydmljZS5maXJlRXZlbnQoe1xuICAgICAgZXZlbnROYW1lOiBDT0RFX0VESVRPUl9FVkVOVFMub25Jbml0LFxuICAgICAgdGFyZ2V0OiB0aGlzLFxuICAgICAgZWRpdG9yOiB0aGlzLmVkaXRvclxuICAgIH0pO1xuXG4gICAgLy8gYWN0aXZlIG1vZGVsIG1hcmtlcnNcbiAgICBpZiAoaGFzTW9kZWwgJiYgYWNpdHZlTWFya2Vycykge1xuICAgICAgdGhpcy5hY2l0dmVNb2RlbE1hcmtlcnMoKTtcbiAgICB9XG5cbiAgfVxuICBcbiAgLyoqXG4gICAqIEFjaXR2ZSBNb2RlbCBtYXJrZXJzIHRvIGdldCBtYXJrZXJzJyByZXN1bHRzXG4gICAqL1xuICBhY2l0dmVNb2RlbE1hcmtlcnMoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvbW9uYWNvLWVkaXRvci9pc3N1ZXMvMzBcbiAgICBjb25zdCBzZXRNb2RlbE1hcmtlcnMgPSBtb25hY28uZWRpdG9yLnNldE1vZGVsTWFya2VycztcbiAgICBtb25hY28uZWRpdG9yLnNldE1vZGVsTWFya2VycyA9IGZ1bmN0aW9uIChtb2RlbCwgb3duZXIsIG1hcmtlcnMpIHtcbiAgICAgIHNldE1vZGVsTWFya2Vycy5jYWxsKG1vbmFjby5lZGl0b3IsIG1vZGVsLCBvd25lciwgbWFya2Vycyk7XG4gICAgICBpZiAobWFya2Vycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gdGhlcmUgYXJlIG5vIGVycm9ycyhzeW54IGVycm9yIGFuZCB2YWxpZGF0ZSBlcnJvcilcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NvbnRpbnVlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGVyZSBhcmUgZXJyb3JzXG4gICAgICAgIHNlbGYuX2Vycm9ySW5Nb2RlbE1hcmtlciA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGxheW91dCB3aGVuIHJlc2l6ZWQgdGhlIHdpbmRvd1xuICAgKi9cbiAgcmVmcmVzaExheW91dFdoZW5XaW5kb3dSZXNpemUoKSB7XG4gICAgaWYgKHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fd2luZG93UmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIC8vIGZyb21FdmVudMOnwpTCqMOkwrrCjsOlwoXCvMOlwpDCrMOkwrrCi8OkwrvCtsOvwrzCjMOkwrrCi8OkwrvCtsOowqfCpsOlwo/CkcOmwpfCtsOvwrzCjMOlwrDChsOkwrrCi8OkwrvCtmV2ZW50w6jCvcKsw6bCiMKQw6XCj8Kvw6bCtcKBw6XCisKow6fCmsKET2JzZXJ2YWJsZcOowr/Cm8OowqHCjMOkwrzCoMOowr7Ck1xuICAgIC8vIGh0dHBzOi8vd3d3LmppYW5zaHUuY29tL3AvNDY4OTRkZWI4NzBhXG4gICAgdGhpcy5fd2luZG93UmVzaXplU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmVkaXRvci5sYXlvdXQoKSk7XG4gIH1cblxuICBvbkNoYW5nZU1vZGVsQ29udGVudEhhbmRsZXIoZSkge1xuICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMuZWRpdG9yLmdldFZhbHVlKCk7XG5cbiAgICAvLyBtb25hY28gZWRpdG9yIC0+IG91dHNpZGUgY29tcG9uZW50XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0pUYW5nbWluZy90bS9pc3N1ZXMvNCBuZ1pvbmXDqMKvwqbDqMKnwqNcbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMudmFsdWUgPSBfdmFsdWUpOyAvLyB2YWx1ZSBpcyBub3QgcHJvcGFnYXRlZCB0byBwYXJlbnQgd2hlbiBleGVjdXRpbmcgb3V0c2lkZSB6b25lLlxuICB9XG5cbiAgb25CbHVyRWRpdG9yVGV4dEhhbmRsZXIoZSkge1xuXG4gICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkKCk7XG4gIH1cblxuICBvbkxheW91dENoYW5nZUhhbmRsZXIoZSkge1xuICAgIGNvbnNvbGUubG9nKCdMYXlvdXQgY2hhbmdlZDpcXG4nICsgZSk7XG4gIH1cblxuICAvLyBnZXQgYWNjZXNzb3JcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgLy8gc2V0IGFjY2Vzc29yIGluY2x1ZGluZyBjYWxsIHRoZSBvbmNoYW5nZSBjYWxsYmFja1xuICBzZXQgdmFsdWUodjogYW55KSB7XG4gICAgaWYgKHYgIT09IHRoaXMudmFsdWUpIHsvLyDDpsKzwqjDpsKEwo/DqMK/wpnDp8Knwo3DpcKGwpnDpsKzwpXDr8K8wozDpcKAwrzDpcK+wpfDpcKtwqbDpMK5wqBcbiAgICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB9XG5cbiAgICB0aGlzLm9uQ29udHJvbFZhbHVlQ2hhbmdlKHRoaXMudmFsdWUpOyAvLyDDpcKcwqjDpcKxwp7DpsKAwqfDpMK/wq7DqcKlwrDDpcKZwqjDqcKHwozDqMKwwoPDp8KUwqhvbkNvbnRyb2xWYWx1ZUNoYW5nZcOmwpbCucOmwrPClVxuICB9XG5cbiAgbG9jYWxFZGl0b3IoKSB7Ly8gRGVtbzogb3V0c2lkZSBjb21wb25lbnQgLT4gbW9uYWNvIGVkaXRvclxuICAgIHRoaXMud3JpdGVWYWx1ZSgndGVzdCcpO1xuICB9XG5cbiAgLy8gb3V0c2lkZSBjb21wb25lbnQgLT4gbW9uYWNvIGVkaXRvclxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNlbGYudmFsdWUgPSB2YWx1ZSB8fCAnJztcblxuICAgIC8vIEZpeCBmb3IgdmFsdWUgY2hhbmdlIHdoaWxlIGRpc3Bvc2UgaW4gcHJvY2Vzc1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHNlbGYuZWRpdG9yIC8qJiYgIXRoaXMub3B0aW9ucy5tb2RlbCovKSB7XG4gICAgICAgIHNlbGYuZWRpdG9yLnNldFZhbHVlKHNlbGYuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25Db250cm9sVmFsdWVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yw6bCj8KQw6TCvsKbw6fCmsKEw6TCusKLw6TCu8K2w6XCm8Kew6jCsMKDXG4gIG9uQ29udHJvbFZhbHVlQ2hhbmdlID0gKF86IGFueSkgPT4ge1xuICB9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3LDpsKPwpDDpMK+wpvDp8KawoTDpMK6wovDpMK7wrbDpcKbwp7DqMKwwoNcbiAgb25Db250cm9sVG91Y2hlZCA9ICgpID0+IHtcbiAgfVxuXG59XG4iLCJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRywgQW5ndWxhck1vbmFjb0VkaXRvckNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IEFuZ3VsYXJNb25hY29FZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9hbmd1bGFyLW1vbmFjby1lZGl0b3IuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50XG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICBdXG59KVxuXG5leHBvcnQgY2xhc3MgQW5ndWxhck1vbmFjb0VkaXRvck1vZHVsZSB7XG4gIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChjb25maWc6IEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgPSB7fSk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQW5ndWxhck1vbmFjb0VkaXRvck1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJJbmplY3Rpb25Ub2tlbiIsImFzc2lnbiIsIkluamVjdGFibGUiLCJFdmVudEVtaXR0ZXIiLCJwaWNrIiwiVmlld0NoaWxkIiwiT3V0cHV0IiwiSW5wdXQiLCJOR19WQUxVRV9BQ0NFU1NPUiIsImZvcndhcmRSZWYiLCJ0c2xpYl8xLl9fZXh0ZW5kcyIsImZyb21FdmVudCIsIkNvbXBvbmVudCIsIk5nWm9uZSIsIkluamVjdCIsIk5nTW9kdWxlIiwiQ29tbW9uTW9kdWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7O0FBSUEseUJBQWEsNEJBQTRCLEdBQUcsSUFBSUEsbUJBQWMsQ0FBQyw4QkFBOEIsQ0FBQzs7SUNKOUY7Ozs7Ozs7Ozs7Ozs7O0lBY0E7SUFFQSxJQUFJLGFBQWEsR0FBRyxVQUFTLENBQUMsRUFBRSxDQUFDO1FBQzdCLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYzthQUNoQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM1RSxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUFFLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7b0JBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0UsT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQztBQUVGLHVCQUEwQixDQUFDLEVBQUUsQ0FBQztRQUMxQixhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLGdCQUFnQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ3ZDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekYsQ0FBQzs7Ozs7O0FDM0JELElBQU8scUJB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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tb25hY28tZWRpdG9yLnVtZC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vYW5ndWxhci1tb25hY28tZWRpdG9yL2xpYi9lZGl0b3IvbW9kZWwvY29uZmlnLnRzIixudWxsLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2NvbnN0YW50L2V2ZW50cy50cyIsIm5nOi8vYW5ndWxhci1tb25hY28tZWRpdG9yL2xpYi9lZGl0b3Ivc2VydmljZS9jb2RlLWVkaXRvci5ldmVudC5zZXJ2aWNlLnRzIiwibmc6Ly9hbmd1bGFyLW1vbmFjby1lZGl0b3IvbGliL2VkaXRvci9tb2RlbC9iYXNlLW1vbmFjby1lZGl0b3IudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL3NlcnZpY2UvYW5ndWxhci1tb25hY28tZWRpdG9yLnNlcnZpY2UudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9hbmd1bGFyLW1vbmFjby1lZGl0b3IuY29tcG9uZW50LnRzIiwibmc6Ly9hbmd1bGFyLW1vbmFjby1lZGl0b3IvbGliL2VkaXRvci9lZGl0b3IubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8vIGluamVjdGlvblRva2Vuw6TCvcKcw6fClMKow6jCr8K0w6bCmMKOXG4vLyBodHRwczovL3NlZ21lbnRmYXVsdC5jb20vYS8xMTkwMDAwMDA4NjI2MzQ4XG5leHBvcnQgY29uc3QgQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbignQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcge1xuICBiYXNlVXJsPzogc3RyaW5nO1xuICBkZWZhdWx0T3B0aW9ucz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICBvbk1vbmFjb0xvYWQ/OiBGdW5jdGlvbjtcbn1cbiIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMClcclxuICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcclxuICAgIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuIiwiZXhwb3J0IGNvbnN0IENPREVfRURJVE9SX0VWRU5UUyA9IHtcbiAgICBvbkluaXQ6ICdvbkluaXQnXG59O1xuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBDT0RFX0VESVRPUl9FVkVOVFMgfSBmcm9tICcuLi9jb25zdGFudC9ldmVudHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29kZUVkaXRvckV2ZW50U2VydmljZSB7XG4gICAgcHVibGljIGV2ZW50TmFtZXMgPSBPYmplY3Qua2V5cyhDT0RFX0VESVRPUl9FVkVOVFMpO1xuICAgIHByaXZhdGUgX2V2ZW50czogYW55ID0ge307IC8vIMOkwr3Cv8OnwpTCqMOkwrrCi8OkwrvCtlxuXG4gICAgLyoqXG4gICAgICogw6jCrsK+w6fCvcKuw6XCkMKvw6fClMKow6TCusKLw6TCu8K2XG4gICAgICogQHBhcmFtICDDpMK6wovDpMK7wrZcbiAgICAgKi9cbiAgICBhZGRFdmVudChldmVudCkge1xuICAgICAgICBhc3NpZ24odGhpcy5fZXZlbnRzLCBldmVudCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZXZlbnRzKTtcbiAgICB9XG5cbiAgICBmaXJlRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fZXZlbnRzW2V2ZW50LmV2ZW50TmFtZV0uZW1pdChldmVudCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRW1pdCBFdmVudDpcIiArIGV2ZW50KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgcGljayB9IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9jb2RlLWVkaXRvci5ldmVudC5zZXJ2aWNlJztcblxubGV0IGxvYWRlZE1vbmFjbyA9IGZhbHNlO1xubGV0IGxvYWRQcm9taXNlOiBQcm9taXNlPHZvaWQ+O1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZU1vbmFjb0VkaXRvciBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJvdGVjdGVkIF9lZGl0b3I6IGFueTtcbiAgcHJpdmF0ZSBfb3B0aW9uczogYW55O1xuICBwcm90ZWN0ZWQgX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvZGVFZGl0b3InKSBfZWRpdG9yQ29tcG9uZW50OiBFbGVtZW50UmVmOyAvLyDDpcKKwqjDpsKAwoHDpsK3wrvDpcKKwqDDpMK7wqPDp8KgwoHDp8K8wpbDqMK+wpHDpcKZwqhcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tb3V0cHV0LW9uLXByZWZpeFxuICBAT3V0cHV0KCkgb25Jbml0O1xuXG4gIEBJbnB1dCgnb3B0aW9ucycpXG4gIHNldCBvcHRpb25zKG9wdGlvbnM6IGFueSkge1xuICAgIC8vIMOpwrvCmMOowq7CpG9wdGlvbnModGhpcy5jb25maWcuZGVmYXVsdE9wdGlvbnMpICsgw6jCh8Kqw6XCrsKaw6TCucKJb3B0aW9ucyhvcHRpb25zKVxuICAgIHRoaXMuX29wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbmZpZy5kZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgaWYgKHRoaXMuX2VkaXRvcikge1xuICAgICAgdGhpcy5fZWRpdG9yLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuaW5pdE1vbmFjbyhvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29kZUVkaXRvckV2ZW50U2VydmljZTogQ29kZUVkaXRvckV2ZW50U2VydmljZSwgcHJpdmF0ZSBjb25maWc6IEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcpIHtcbiAgICAgICAgLy8gw6XCiMKdw6XCp8KLw6XCjMKWw6jCh8Kqw6XCrsKaw6TCucKJw6TCusKLw6TCu8K2XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb2RlRWRpdG9yRXZlbnRTZXJ2aWNlLmV2ZW50TmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgIC8vIMOlwojCm8OlwrvCusOowofCqsOlwq7CmsOkwrnCicOkwrrCi8OkwrvCtsOvwrzCjMOmwq3CpMOlwqTChMOkwr3CnMOnwpTCqMOnwq3CicOmwpXCiMOkwrrCjjogQE91dHB1dCgpIG9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gICAgICAgICAgc2VsZltuYW1lXSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgICAgICAgIGNvbnN0IGV2ZW50UGFpciA9IHBpY2soc2VsZiwgbmFtZSk7XG4gICAgICAgICAgY29kZUVkaXRvckV2ZW50U2VydmljZS5hZGRFdmVudChldmVudFBhaXIpO1xuICAgICAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAobG9hZGVkTW9uYWNvKSB7XG4gICAgICAvLyBXYWl0IHVudGlsIG1vbmFjbyBlZGl0b3IgaXMgYXZhaWxhYmxlXG4gICAgICBsb2FkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5pbml0TW9uYWNvKHRoaXMub3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9hZGVkTW9uYWNvID0gdHJ1ZTtcbiAgICAgIGxvYWRQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5jb25maWcuYmFzZVVybCB8fCAnL2Fzc2V0cyc7XG4gICAgICAgIC8vIGlmICh0eXBlb2YoKDxhbnk+d2luZG93KS5tb25hY28pID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyAgIHJlc29sdmUoKTtcbiAgICAgICAgLy8gICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgY29uc3Qgb25Hb3RBbWRMb2FkZXI6IGFueSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBMb2FkIG1vbmFjb1xuICAgICAgICAgICg8YW55PndpbmRvdykucmVxdWlyZS5jb25maWcoeyBwYXRoczogeyAndnMnOiBgJHtiYXNlVXJsfS9tb25hY28vdnNgIH0gfSk7XG4gICAgICAgICAgKDxhbnk+d2luZG93KS5yZXF1aXJlKFsndnMvZWRpdG9yL2VkaXRvci5tYWluJ10sICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcub25Nb25hY29Mb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLm9uTW9uYWNvTG9hZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbml0TW9uYWNvKHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gTG9hZCBBTUQgbG9hZGVyIGlmIG5lY2Vzc2FyeVxuICAgICAgICBpZiAoISg8YW55PndpbmRvdykucmVxdWlyZSkge1xuICAgICAgICAgIGNvbnN0IGxvYWRlclNjcmlwdDogSFRNTFNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICBsb2FkZXJTY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgICAgIGxvYWRlclNjcmlwdC5zcmMgPSBgJHtiYXNlVXJsfS9tb25hY28vdnMvbG9hZGVyLmpzYDtcbiAgICAgICAgICBsb2FkZXJTY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIG9uR290QW1kTG9hZGVyKTtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxvYWRlclNjcmlwdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb25Hb3RBbWRMb2FkZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gTW9uYWNvIEVkaXRvciBJbml0aWFsaXplclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW5pdE1vbmFjbyhvcHRpb25zOiBhbnkpOiB2b2lkIDtcblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fd2luZG93UmVzaXplU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl93aW5kb3dSZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZWRpdG9yKSB7XG4gICAgICB0aGlzLl9lZGl0b3IuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fZWRpdG9yID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZGVjbGFyZSBjb25zdCBtb25hY286IGFueTtcclxuXHJcbi8vIEFuZ3VsYXIgTW9uYWNvIEVkaXRvciBDb21wb25lbnQgVmFyaWFibGVzXHJcbi8vIMOmwrHCh8OmwoDCu0FuZ3VsYXIgbW9uYWNvIGVkaXRvciBjb21wb25lbnQgw6fCu8KEw6TCu8K2w6bCmsK0w6nCnMKyw6fCmsKEw6XCj8KYw6nCh8KPXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJNb25hY29FZGl0b3JTZXJ2aWNlIHtcclxuXHJcbiAgICBwcml2YXRlIF9leGlzdEVycm9yID0gZmFsc2U7Ly/DqcK7wpjDqMKuwqTDpsKywqHDpsKcwonDqcKUwpnDqMKvwq9cclxuICAgIGdldCBleGlzdEVycm9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leGlzdEVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZU1vZGVsTWFya2VycygpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9tb25hY28tZWRpdG9yL2lzc3Vlcy8zMFxyXG4gICAgICAgIGNvbnN0IHNldE1vZGVsTWFya2VycyA9IG1vbmFjby5lZGl0b3Iuc2V0TW9kZWxNYXJrZXJzO1xyXG4gICAgICAgIG1vbmFjby5lZGl0b3Iuc2V0TW9kZWxNYXJrZXJzID0gZnVuY3Rpb24gKG1vZGVsLCBvd25lciwgbWFya2Vycykge1xyXG4gICAgICAgICAgICBzZXRNb2RlbE1hcmtlcnMuY2FsbChtb25hY28uZWRpdG9yLCBtb2RlbCwgb3duZXIsIG1hcmtlcnMpO1xyXG4gICAgICAgICAgICBpZiAobWFya2Vycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIHRoZXJlIGFyZSBubyBlcnJvcnMoc3lueCBlcnJvciBhbmQgdmFsaWRhdGUgZXJyb3IpXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY29udGludWUnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIHRoZXJlIGFyZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHNlbGYuX2V4aXN0RXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcndhcmRSZWYsIEluamVjdCwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzL29ic2VydmFibGUvZnJvbUV2ZW50JztcblxuaW1wb3J0IHsgQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRywgQW5ndWxhck1vbmFjb0VkaXRvckNvbmZpZyB9IGZyb20gJy4uL21vZGVsL2NvbmZpZyc7XG5pbXBvcnQgeyBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9jb2RlLWVkaXRvci5ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IENPREVfRURJVE9SX0VWRU5UUyB9IGZyb20gJy4uL2NvbnN0YW50L2V2ZW50cyc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yTW9kZWwgfSBmcm9tICcuLi9tb2RlbC90eXBlcyc7XG5pbXBvcnQgeyBCYXNlTW9uYWNvRWRpdG9yIH0gZnJvbSAnLi4vbW9kZWwvYmFzZS1tb25hY28tZWRpdG9yJztcbmltcG9ydCB7IEFuZ3VsYXJNb25hY29FZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9hbmd1bGFyLW1vbmFjby1lZGl0b3Iuc2VydmljZSc7XG5cbmRlY2xhcmUgY29uc3QgbW9uYWNvOiBhbnk7XG5cbi8vIMOowofCqsOlwq7CmsOkwrnCicOowr7Ck8OlwoXCpcOmwo7Cp8OkwrvCtjoxLsOlwrDCgcOowqPChUNvbnRyb2xWYWx1ZUFjY2Vzc29yXG4vLyBodHRwczovL2NvZGUtZXhhbXBsZXMubmV0L3poLUNOL3EvMjE1NDc2MVxuZXhwb3J0IGNvbnN0IENPREVfRURJVE9SX0lOUFVUX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gIC8vIGh0dHBzOi8vYmxvZy5jc2RuLm5ldC93YW5nZGFuXzIwMTMvYXJ0aWNsZS9kZXRhaWxzLzgxMzE0OTU5XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYW5ndWxhci1tb25hY28tZWRpdG9yJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiZWRpdG9yXCIgI2NvZGVFZGl0b3I+PC9kaXY+YCxcbiAgc3R5bGVzOiBbYDpob3N0e2Rpc3BsYXk6YmxvY2s7bWluLWhlaWdodDoyMDBweH0uZWRpdG9ye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9YF0sXG4gIC8vIMOowofCqsOlwq7CmsOkwrnCicOowr7Ck8OlwoXCpcOmwo7Cp8OkwrvCtjoyLsOlwrzClcOlwoXCpcOkwr7CncOowrXClsOmwpzCjcOlworCoUNvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIHByb3ZpZGVyczogW1xuICAgIENPREVfRURJVE9SX0lOUFVUX1ZBTFVFX0FDQ0VTU09SLCBcbiAgICBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlXG4gIF1cbn0pXG5cbi8vIMOowofCqsOlwq7CmsOkwrnCicOowr7Ck8OlwoXCpcOmwo7Cp8OkwrvCtiA8LT4gTW9uYWNvIEVkdG9yXG5cbi8vIMOowofCqsOlwq7CmsOkwrnCicOowr7Ck8OlwoXCpcOmwo7Cp8OkwrvCtjozLjEgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvclxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJNb25hY29FZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBCYXNlTW9uYWNvRWRpdG9yIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIEBJbnB1dCgnbW9kZWwnKVxuICBzZXQgbW9kZWwobW9kZWw6IEFuZ3VsYXJFZGl0b3JNb2RlbCkge1xuICAgIHRoaXMub3B0aW9ucy5tb2RlbCA9IG1vZGVsO1xuICAgIGlmICh0aGlzLl9lZGl0b3IpIHtcbiAgICAgIHRoaXMuX2VkaXRvci5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmluaXRNb25hY28odGhpcy5vcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZSA9ICcnO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhbmd1bGFyTW9uYWNvRWRpdG9yU2VydmljZTogQW5ndWxhck1vbmFjb0VkaXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBlZGl0b3JFdmVudFNlcnZpY2U6IENvZGVFZGl0b3JFdmVudFNlcnZpY2UsXG4gICAgQEluamVjdChBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHKSBwcml2YXRlIGFuZ3VsYXJFZGl0b3Jjb25maWc6IEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcpIHtcbiAgICBzdXBlcihlZGl0b3JFdmVudFNlcnZpY2UsIGFuZ3VsYXJFZGl0b3Jjb25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRNb25hY28ob3B0aW9uczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaGFzTW9kZWwgPSAhIW9wdGlvbnMubW9kZWw7XG5cbiAgICBpZiAoaGFzTW9kZWwpIHtcbiAgICAgIG9wdGlvbnMubW9kZWwgPSBtb25hY28uZWRpdG9yLmNyZWF0ZU1vZGVsKG9wdGlvbnMubW9kZWwudmFsdWUsIG9wdGlvbnMubW9kZWwubGFuZ3VhZ2UsIG9wdGlvbnMubW9kZWwudXJpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9lZGl0b3IgPSBtb25hY28uZWRpdG9yLmNyZWF0ZSh0aGlzLl9lZGl0b3JDb21wb25lbnQubmF0aXZlRWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWhhc01vZGVsKSB7XG4gICAgICB0aGlzLl9lZGl0b3Iuc2V0VmFsdWUodGhpcy5fdmFsdWUpO1xuICAgIH1cblxuICAgIC8vIG1vbmFjbyBlZGl0b3IgLT4gb3V0c2lkZSBjb21wb25lbnRcbiAgICB0aGlzLl9lZGl0b3Iub25EaWRDaGFuZ2VNb2RlbENvbnRlbnQoKGU6IGFueSkgPT4gdGhpcy5vbkNoYW5nZU1vZGVsQ29udGVudEhhbmRsZXIoZSkpO1xuXG4gICAgdGhpcy5fZWRpdG9yLm9uRGlkQmx1ckVkaXRvclRleHQoKGU6IGFueSkgPT4gdGhpcy5vbkJsdXJFZGl0b3JUZXh0SGFuZGxlcihlKSk7XG5cbiAgICB0aGlzLl9lZGl0b3Iub25EaWRMYXlvdXRDaGFuZ2UoKGU6IGFueSkgPT4gdGhpcy5vbkxheW91dENoYW5nZUhhbmRsZXIoZSkpO1xuXG4gICAgLy8gcmVmcmVzaCBsYXlvdXQgb24gcmVzaXplIGV2ZW50LlxuICAgIHRoaXMucmVmcmVzaExheW91dFdoZW5XaW5kb3dSZXNpemUoKTtcblxuICAgIHRoaXMuZWRpdG9yRXZlbnRTZXJ2aWNlLmZpcmVFdmVudCh7XG4gICAgICBldmVudE5hbWU6IENPREVfRURJVE9SX0VWRU5UUy5vbkluaXQsXG4gICAgICB0YXJnZXQ6IHRoaXMsXG4gICAgICBlZGl0b3I6IHRoaXMuX2VkaXRvclxuICAgIH0pO1xuXG4gICAgaWYgKGhhc01vZGVsKSB7XG4gICAgICB0aGlzLmFuZ3VsYXJNb25hY29FZGl0b3JTZXJ2aWNlLmhhbmRsZU1vZGVsTWFya2VycygpO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIHJlZnJlc2ggbGF5b3V0IHdoZW4gcmVzaXplZCB0aGUgd2luZG93XG4gICAqL1xuICByZWZyZXNoTGF5b3V0V2hlbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICBpZiAodGhpcy5fd2luZG93UmVzaXplU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl93aW5kb3dSZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgLy8gZnJvbUV2ZW50w6fClMKow6TCusKOw6XChcK8w6XCkMKsw6TCusKLw6TCu8K2w6/CvMKMw6TCusKLw6TCu8K2w6jCp8Kmw6XCj8KRw6bCl8K2w6/CvMKMw6XCsMKGw6TCusKLw6TCu8K2ZXZlbnTDqMK9wqzDpsKIwpDDpcKPwq/DpsK1woHDpcKKwqjDp8KawoRPYnNlcnZhYmxlw6jCv8Kbw6jCocKMw6TCvMKgw6jCvsKTXG4gICAgLy8gaHR0cHM6Ly93d3cuamlhbnNodS5jb20vcC80Njg5NGRlYjg3MGFcbiAgICB0aGlzLl93aW5kb3dSZXNpemVTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2VkaXRvci5sYXlvdXQoKSk7XG4gIH1cblxuICBvbkNoYW5nZU1vZGVsQ29udGVudEhhbmRsZXIoZSkge1xuICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMuX2VkaXRvci5nZXRWYWx1ZSgpO1xuXG4gICAgLy8gbW9uYWNvIGVkaXRvciAtPiBvdXRzaWRlIGNvbXBvbmVudFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KVGFuZ21pbmcvdG0vaXNzdWVzLzQgbmdab25lw6jCr8Kmw6jCp8KjXG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLnZhbHVlID0gX3ZhbHVlKTsgLy8gdmFsdWUgaXMgbm90IHByb3BhZ2F0ZWQgdG8gcGFyZW50IHdoZW4gZXhlY3V0aW5nIG91dHNpZGUgem9uZS5cbiAgfVxuXG4gIG9uQmx1ckVkaXRvclRleHRIYW5kbGVyKGUpIHtcblxuICAgIHRoaXMub25Db250cm9sVG91Y2hlZCgpO1xuICB9XG5cbiAgb25MYXlvdXRDaGFuZ2VIYW5kbGVyKGUpIHtcbiAgICBjb25zb2xlLmxvZygnTGF5b3V0IGNoYW5nZWQ6XFxuJyArIGUpO1xuICB9XG5cbiAgLy8gZ2V0IGFjY2Vzc29yXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIC8vIHNldCBhY2Nlc3NvciBpbmNsdWRpbmcgY2FsbCB0aGUgb25jaGFuZ2UgY2FsbGJhY2tcbiAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgIGlmICh2ICE9PSB0aGlzLnZhbHVlKSB7Ly8gw6bCs8Kow6bChMKPw6jCv8KZw6fCp8KNw6XChsKZw6bCs8KVw6/CvMKMw6XCgMK8w6XCvsKXw6XCrcKmw6TCucKgXG4gICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgfVxuXG4gICAgdGhpcy5vbkNvbnRyb2xWYWx1ZUNoYW5nZSh0aGlzLnZhbHVlKTsgLy8gw6XCnMKow6XCscKew6bCgMKnw6TCv8Kuw6nCpcKww6XCmcKow6nCh8KMw6jCsMKDw6fClMKob25Db250cm9sVmFsdWVDaGFuZ2XDpsKWwrnDpsKzwpVcbiAgfVxuXG4gIC8vIMOowofCqsOlwq7CmsOkwrnCicOowr7Ck8OlwoXCpcOmwo7Cp8OkwrvCtjozLjIgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvXG5cbiAgLy8gb3V0c2lkZSBjb21wb25lbnQgLT4gbW9uYWNvIGVkaXRvclxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNlbGYudmFsdWUgPSB2YWx1ZSB8fCAnJztcblxuICAgIC8vIEZpeCBmb3IgdmFsdWUgY2hhbmdlIHdoaWxlIGRpc3Bvc2UgaW4gcHJvY2Vzcy5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChzZWxmLl9lZGl0b3IgLyomJiAhdGhpcy5vcHRpb25zLm1vZGVsKi8pIHtcbiAgICAgICAgc2VsZi5fZWRpdG9yLnNldFZhbHVlKHNlbGYuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25Db250cm9sVmFsdWVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yw6bCj8KQw6TCvsKbw6fCmsKEw6TCusKLw6TCu8K2w6XCm8Kew6jCsMKDXG4gIG9uQ29udHJvbFZhbHVlQ2hhbmdlID0gKF86IGFueSkgPT4ge1xuICB9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3LDpsKPwpDDpMK+wpvDp8KawoTDpMK6wovDpMK7wrbDpcKbwp7DqMKwwoNcbiAgb25Db250cm9sVG91Y2hlZCA9ICgpID0+IHtcbiAgfVxuXG59XG4iLCJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRywgQW5ndWxhck1vbmFjb0VkaXRvckNvbmZpZyB9IGZyb20gJy4vbW9kZWwvY29uZmlnJztcbmltcG9ydCB7IEFuZ3VsYXJNb25hY29FZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9hbmd1bGFyLW1vbmFjby1lZGl0b3IuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50XG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICBdXG59KVxuXG5leHBvcnQgY2xhc3MgQW5ndWxhck1vbmFjb0VkaXRvck1vZHVsZSB7XG4gIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChjb25maWc6IEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgPSB7fSk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQW5ndWxhck1vbmFjb0VkaXRvck1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJJbmplY3Rpb25Ub2tlbiIsImFzc2lnbiIsIkluamVjdGFibGUiLCJFdmVudEVtaXR0ZXIiLCJwaWNrIiwiVmlld0NoaWxkIiwiT3V0cHV0IiwiSW5wdXQiLCJOR19WQUxVRV9BQ0NFU1NPUiIsImZvcndhcmRSZWYiLCJ0c2xpYl8xLl9fZXh0ZW5kcyIsImZyb21FdmVudCIsIkNvbXBvbmVudCIsIk5nWm9uZSIs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

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("lodash"),require("@angular/forms"),require("rxjs/observable/fromEvent"),require("@angular/common")):"function"==typeof define&&define.amd?define("angular-monaco-editor",["exports","@angular/core","lodash","@angular/forms","rxjs/observable/fromEvent","@angular/common"],t):t(e["angular-monaco-editor"]={},e.ng.core,null,e.ng.forms,e.rxjs["observable/fromEvent"],e.ng.common)}(this,function(e,i,r,t,o,n){"use strict";var s=new i.InjectionToken("ANGULAR_MONACO_EDITOR_CONFIG"),a=function(e,t){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)};var u,c={onInit:"onInit"},d=function(){function e(){this.eventNames=Object.keys(c),this._events={}}return e.prototype.addEvent=function(e){r.assign(this._events,e)},e.prototype.fireEvent=function(e){this._events[e.eventName].emit(e)},e.decorators=[{type:i.Injectable}],e}(),l=!1,p=function(){function e(o,e){this.codeEditorEventService=o,this.config=e;var n=this;o.eventNames.forEach(function(e){n[e]=new i.EventEmitter;var t=r.pick(n,e);o.addEvent(t)})}return Object.defineProperty(e.prototype,"editor",{get:function(){return this._editor},set:function(e){this._editor=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"options",{get:function(){return this._options},set:function(e){this._options=Object.assign({},this.config.defaultOptions,e),this._editor&&(this._editor.dispose(),this.initMonaco(e))},enumerable:!0,configurable:!0}),e.prototype.ngAfterViewInit=function(){var r=this;l?u.then(function(){r.initMonaco(r.options)}):(l=!0,u=new Promise(function(e){var t=r.config.baseUrl||"/assets",o=function(){window.require.config({paths:{vs:t+"/monaco/vs"}}),window.require(["vs/editor/editor.main"],function(){"function"==typeof r.config.onMonacoLoad&&r.config.onMonacoLoad(),r.initMonaco(r.options),e()})};if(window.require)o();else{var n=document.createElement("script");n.type="text/javascript",n.src=t+"/monaco/vs/loader.js",n.addEventListener("load",o),document.body.appendChild(n)}}))},e.prototype.ngOnDestroy=function(){this._windowResizeSubscription&&this._windowResizeSubscription.unsubscribe(),this._editor&&(this._editor.dispose(),this._editor=undefined)},e.propDecorators={_editorComponent:[{type:i.ViewChild,args:["codeEditor"]}],onInit:[{type:i.Output}],options:[{type:i.Input,args:["options"]}]},e}(),f={provide:t.NG_VALUE_ACCESSOR,useExisting:i.forwardRef(function(){return h}),multi:!0},h=function(r){function e(e,t,o){var n=r.call(this,t,o)||this;return n.zone=e,n.editorEventService=t,n.angularEditorconfig=o,n._value="",n._errorInModelMarker=!1,n.onControlValueChange=function(e){},n.onControlTouched=function(){},n}return function n(e,t){function o(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}(e,r),Object.defineProperty(e.prototype,"model",{set:function(e){this.options.model=e,this.editor&&(this.editor.dispose(),this.initMonaco(this.options))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"errorInModelMarker",{get:function(){return this._errorInModelMarker},enumerable:!0,configurable:!0}),e.prototype.initMonaco=function(e){var t=this,o=!!e.model,n=!!e.acitveMarkers;o&&(e.model=monaco.editor.createModel(e.model.value,e.model.language,e.model.uri)),this.editor=monaco.editor.create(this._editorComponent.nativeElement,e),o||this.editor.setValue(this._value),this.editor.onDidChangeModelContent(function(e){return t.onChangeModelContentHandler(e)}),this.editor.onDidBlurEditorText(function(e){return t.onBlurEditorTextHandler(e)}),this.editor.onDidLayoutChange(function(e){return t.onLayoutChangeHandler(e)}),this.refreshLayoutWhenWindowResize(),this.editorEventService.fireEvent({eventName:c.onInit,target:this,editor:this.editor}),o&&n&&this.acitveModelMarkers()},e.prototype.acitveModelMarkers=function(){var n=this,r=monaco.editor.setModelMarkers;monaco.editor.setModelMarkers=function(e,t,o){r.call(monaco.editor,e,t,o),0===o.length||(n._errorInModelMarker=!0)}},e.prototype.refreshLayoutWhenWindowResize=function(){var e=this;this._windowResizeSubscription&&this._windowResizeSubscription.unsubscribe(),this._windowResizeSubscription=o.fromEvent(window,"resize").subscribe(function(){return e.editor.layout()})},e.prototype.onChangeModelContentHandler=function(e){var t=this,o=this.editor.getValue();this.zone.run(function(){return t.value=o})},e.prototype.onBlurEditorTextHandler=function(e){this.onControlTouched()},e.prototype.onLayoutChangeHandler=function(e){console.log("Layout changed:\n"+e)},Object.defineProperty(e.prototype,"value",{get:function(){return this._value},set:function(e){e!==this.value&&(this._value=e),this.onControlValueChange(this.value)},enumerable:!0,configurable:!0}),e.prototype.localEditor=function(){this.writeValue("test")},e.prototype.writeValue=function(e){var t=this;t.value=e||"",setTimeout(function(){t.editor&&t.editor.setValue(t._value)})},e.prototype.registerOnChange=function(e){this.onControlValueChange=e},e.prototype.registerOnTouched=function(e){this.onControlTouched=e},e.decorators=[{type:i.Component,args:[{selector:"angular-monaco-editor",template:'<div class="editor" #codeEditor></div>',styles:[":host{display:block;min-height:200px}.editor{width:100%;height:100%}"],providers:[f,d]}]}],e.ctorParameters=function(){return[{type:i.NgZone},{type:d},{type:undefined,decorators:[{type:i.Inject,args:[s]}]}]},e.propDecorators={model:[{type:i.Input,args:["model"]}]},e}(p),v=function(){function t(){}return t.forRoot=function(e){return void 0===e&&(e={}),{ngModule:t,providers:[{provide:s,useValue:e}]}},t.decorators=[{type:i.NgModule,args:[{imports:[n.CommonModule],declarations:[h],exports:[h],providers:[]}]}],t}();e.AngularMonacoEditorModule=v,e.ANGULAR_MONACO_EDITOR_CONFIG=s,e.ɵb=h,e.ɵa=f,e.ɵc=p,e.ɵd=d,Object.defineProperty(e,"__esModule",{value:!0})});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("lodash"),require("@angular/forms"),require("rxjs/observable/fromEvent"),require("@angular/common")):"function"==typeof define&&define.amd?define("angular-monaco-editor",["exports","@angular/core","lodash","@angular/forms","rxjs/observable/fromEvent","@angular/common"],t):t(e["angular-monaco-editor"]={},e.ng.core,null,e.ng.forms,e.rxjs["observable/fromEvent"],e.ng.common)}(this,function(e,r,i,t,o,n){"use strict";var s=new r.InjectionToken("ANGULAR_MONACO_EDITOR_CONFIG"),a=function(e,t){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)};var u,c={onInit:"onInit"},d=function(){function e(){this.eventNames=Object.keys(c),this._events={}}return e.prototype.addEvent=function(e){i.assign(this._events,e)},e.prototype.fireEvent=function(e){this._events[e.eventName].emit(e)},e.decorators=[{type:r.Injectable}],e}(),l=!1,p=function(){function e(o,e){this.codeEditorEventService=o,this.config=e;var n=this;o.eventNames.forEach(function(e){n[e]=new r.EventEmitter;var t=i.pick(n,e);o.addEvent(t)})}return Object.defineProperty(e.prototype,"options",{get:function(){return this._options},set:function(e){this._options=Object.assign({},this.config.defaultOptions,e),this._editor&&(this._editor.dispose(),this.initMonaco(e))},enumerable:!0,configurable:!0}),e.prototype.ngAfterViewInit=function(){var r=this;l?u.then(function(){r.initMonaco(r.options)}):(l=!0,u=new Promise(function(e){var t=r.config.baseUrl||"/assets",o=function(){window.require.config({paths:{vs:t+"/monaco/vs"}}),window.require(["vs/editor/editor.main"],function(){"function"==typeof r.config.onMonacoLoad&&r.config.onMonacoLoad(),r.initMonaco(r.options),e()})};if(window.require)o();else{var n=document.createElement("script");n.type="text/javascript",n.src=t+"/monaco/vs/loader.js",n.addEventListener("load",o),document.body.appendChild(n)}}))},e.prototype.ngOnDestroy=function(){this._windowResizeSubscription&&this._windowResizeSubscription.unsubscribe(),this._editor&&(this._editor.dispose(),this._editor=undefined)},e.propDecorators={_editorComponent:[{type:r.ViewChild,args:["codeEditor"]}],onInit:[{type:r.Output}],options:[{type:r.Input,args:["options"]}]},e}(),f=function(){function e(){this._existError=!1}return Object.defineProperty(e.prototype,"existError",{get:function(){return this._existError},enumerable:!0,configurable:!0}),e.prototype.handleModelMarkers=function(){var n=this,r=monaco.editor.setModelMarkers;monaco.editor.setModelMarkers=function(e,t,o){r.call(monaco.editor,e,t,o),0===o.length||(n._existError=!0)}},e.decorators=[{type:r.Injectable}],e}(),h={provide:t.NG_VALUE_ACCESSOR,useExisting:r.forwardRef(function(){return v}),multi:!0},v=function(i){function e(e,t,o,n){var r=i.call(this,o,n)||this;return r.angularMonacoEditorService=e,r.zone=t,r.editorEventService=o,r.angularEditorconfig=n,r._value="",r.onControlValueChange=function(e){},r.onControlTouched=function(){},r}return function n(e,t){function o(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}(e,i),Object.defineProperty(e.prototype,"model",{set:function(e){this.options.model=e,this._editor&&(this._editor.dispose(),this.initMonaco(this.options))},enumerable:!0,configurable:!0}),e.prototype.initMonaco=function(e){var t=this,o=!!e.model;o&&(e.model=monaco.editor.createModel(e.model.value,e.model.language,e.model.uri)),this._editor=monaco.editor.create(this._editorComponent.nativeElement,e),o||this._editor.setValue(this._value),this._editor.onDidChangeModelContent(function(e){return t.onChangeModelContentHandler(e)}),this._editor.onDidBlurEditorText(function(e){return t.onBlurEditorTextHandler(e)}),this._editor.onDidLayoutChange(function(e){return t.onLayoutChangeHandler(e)}),this.refreshLayoutWhenWindowResize(),this.editorEventService.fireEvent({eventName:c.onInit,target:this,editor:this._editor}),o&&this.angularMonacoEditorService.handleModelMarkers()},e.prototype.refreshLayoutWhenWindowResize=function(){var e=this;this._windowResizeSubscription&&this._windowResizeSubscription.unsubscribe(),this._windowResizeSubscription=o.fromEvent(window,"resize").subscribe(function(){return e._editor.layout()})},e.prototype.onChangeModelContentHandler=function(e){var t=this,o=this._editor.getValue();this.zone.run(function(){return t.value=o})},e.prototype.onBlurEditorTextHandler=function(e){this.onControlTouched()},e.prototype.onLayoutChangeHandler=function(e){console.log("Layout changed:\n"+e)},Object.defineProperty(e.prototype,"value",{get:function(){return this._value},set:function(e){e!==this.value&&(this._value=e),this.onControlValueChange(this.value)},enumerable:!0,configurable:!0}),e.prototype.writeValue=function(e){var t=this;t.value=e||"",setTimeout(function(){t._editor&&t._editor.setValue(t._value)})},e.prototype.registerOnChange=function(e){this.onControlValueChange=e},e.prototype.registerOnTouched=function(e){this.onControlTouched=e},e.decorators=[{type:r.Component,args:[{selector:"angular-monaco-editor",template:'<div class="editor" #codeEditor></div>',styles:[":host{display:block;min-height:200px}.editor{width:100%;height:100%}"],providers:[h,d]}]}],e.ctorParameters=function(){return[{type:f},{type:r.NgZone},{type:d},{type:undefined,decorators:[{type:r.Inject,args:[s]}]}]},e.propDecorators={model:[{type:r.Input,args:["model"]}]},e}(p),g=function(){function t(){}return t.forRoot=function(e){return void 0===e&&(e={}),{ngModule:t,providers:[{provide:s,useValue:e}]}},t.decorators=[{type:r.NgModule,args:[{imports:[n.CommonModule],declarations:[v],exports:[v],providers:[]}]}],t}();e.AngularMonacoEditorModule=g,e.ANGULAR_MONACO_EDITOR_CONFIG=s,e.ɵb=v,e.ɵa=h,e.ɵc=p,e.ɵe=f,e.ɵd=d,Object.defineProperty(e,"__esModule",{value:!0})});
//# sourceMappingURL=angular-monaco-editor.umd.min.js.map

@@ -10,5 +10,6 @@ /**

export { AngularMonacoEditorComponent as ɵb, CODE_EDITOR_INPUT_VALUE_ACCESSOR as ɵa } from './lib/editor/angular-monaco-editor/angular-monaco-editor.component';
export { BaseMonacoEditor as ɵc } from './lib/editor/base-monaco-editor';
export { CodeEditorEventService as ɵd } from './lib/editor/services/code-editor.event.service';
export { BaseMonacoEditor as ɵc } from './lib/editor/model/base-monaco-editor';
export { AngularMonacoEditorService as ɵe } from './lib/editor/service/angular-monaco-editor.service';
export { CodeEditorEventService as ɵd } from './lib/editor/service/code-editor.event.service';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tb25hY28tZWRpdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1tb25hY28tZWRpdG9yLyIsInNvdXJjZXMiOlsiYW5ndWxhci1tb25hY28tZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQSx3RUFBYyxjQUFjLENBQUM7QUFFN0IsT0FBTyxFQUFDLDRCQUE0QixJQUFJLEVBQUUsRUFBQyxnQ0FBZ0MsSUFBSSxFQUFFLEVBQUMsTUFBTSxvRUFBb0UsQ0FBQztBQUM3SixPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFBQyxNQUFNLGlEQUFpRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuXG5leHBvcnQge0FuZ3VsYXJNb25hY29FZGl0b3JDb21wb25lbnQgYXMgybViLENPREVfRURJVE9SX0lOUFVUX1ZBTFVFX0FDQ0VTU09SIGFzIMm1YX0gZnJvbSAnLi9saWIvZWRpdG9yL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9hbmd1bGFyLW1vbmFjby1lZGl0b3IuY29tcG9uZW50JztcbmV4cG9ydCB7QmFzZU1vbmFjb0VkaXRvciBhcyDJtWN9IGZyb20gJy4vbGliL2VkaXRvci9iYXNlLW1vbmFjby1lZGl0b3InO1xuZXhwb3J0IHtDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlIGFzIMm1ZH0gZnJvbSAnLi9saWIvZWRpdG9yL3NlcnZpY2VzL2NvZGUtZWRpdG9yLmV2ZW50LnNlcnZpY2UnOyJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tb25hY28tZWRpdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1tb25hY28tZWRpdG9yLyIsInNvdXJjZXMiOlsiYW5ndWxhci1tb25hY28tZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQSx3RUFBYyxjQUFjLENBQUM7QUFFN0IsT0FBTyxFQUFDLDRCQUE0QixJQUFJLEVBQUUsRUFBQyxnQ0FBZ0MsSUFBSSxFQUFFLEVBQUMsTUFBTSxvRUFBb0UsQ0FBQztBQUM3SixPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFDLDBCQUEwQixJQUFJLEVBQUUsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQ3BHLE9BQU8sRUFBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcblxuZXhwb3J0IHtBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50IGFzIMm1YixDT0RFX0VESVRPUl9JTlBVVF9WQUxVRV9BQ0NFU1NPUiBhcyDJtWF9IGZyb20gJy4vbGliL2VkaXRvci9hbmd1bGFyLW1vbmFjby1lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yLmNvbXBvbmVudCc7XG5leHBvcnQge0Jhc2VNb25hY29FZGl0b3IgYXMgybVjfSBmcm9tICcuL2xpYi9lZGl0b3IvbW9kZWwvYmFzZS1tb25hY28tZWRpdG9yJztcbmV4cG9ydCB7QW5ndWxhck1vbmFjb0VkaXRvclNlcnZpY2UgYXMgybVlfSBmcm9tICcuL2xpYi9lZGl0b3Ivc2VydmljZS9hbmd1bGFyLW1vbmFjby1lZGl0b3Iuc2VydmljZSc7XG5leHBvcnQge0NvZGVFZGl0b3JFdmVudFNlcnZpY2UgYXMgybVkfSBmcm9tICcuL2xpYi9lZGl0b3Ivc2VydmljZS9jb2RlLWVkaXRvci5ldmVudC5zZXJ2aWNlJzsiXX0=

@@ -9,6 +9,8 @@ /**

import { fromEvent } from 'rxjs/observable/fromEvent';
import { ANGULAR_MONACO_EDITOR_CONFIG } from '../config';
import { CodeEditorEventService } from '../services/code-editor.event.service';
import { CODE_EDITOR_EVENTS } from '../constants/events';
import { BaseMonacoEditor } from '../base-monaco-editor';
import { ANGULAR_MONACO_EDITOR_CONFIG } from '../model/config';
import { CodeEditorEventService } from '../service/code-editor.event.service';
import { CODE_EDITOR_EVENTS } from '../constant/events';
import { BaseMonacoEditor } from '../model/base-monaco-editor';
import { AngularMonacoEditorService } from '../service/angular-monaco-editor.service';
// 自定义输入控件:1.封装ControlValueAccessor
// https://code-examples.net/zh-CN/q/2154761

@@ -21,4 +23,7 @@ export const /** @type {?} */ CODE_EDITOR_INPUT_VALUE_ACCESSOR = {

};
// 自定义输入控件 <-> Monaco Edtor
// 自定义输入控件:3.1 implements ControlValueAccessor
export class AngularMonacoEditorComponent extends BaseMonacoEditor {
/**
* @param {?} angularMonacoEditorService
* @param {?} zone

@@ -28,4 +33,5 @@ * @param {?} editorEventService

*/
constructor(zone, editorEventService, angularEditorconfig) {
constructor(angularMonacoEditorService, zone, editorEventService, angularEditorconfig) {
super(editorEventService, angularEditorconfig);
this.angularMonacoEditorService = angularMonacoEditorService;
this.zone = zone;

@@ -35,3 +41,2 @@ this.editorEventService = editorEventService;

this._value = '';
this._errorInModelMarker = false;
// ControlValueAccessor提供的事件回调

@@ -50,4 +55,4 @@ this.onControlValueChange = (_) => {

this.options.model = model;
if (this.editor) {
this.editor.dispose();
if (this._editor) {
this._editor.dispose();
this.initMonaco(this.options);

@@ -57,8 +62,2 @@ }

/**
* @return {?}
*/
get errorInModelMarker() {
return this._errorInModelMarker;
}
/**
* @param {?} options

@@ -69,14 +68,13 @@ * @return {?}

const /** @type {?} */ hasModel = !!options.model;
const /** @type {?} */ acitveMarkers = !!options.acitveMarkers; //自定义option
if (hasModel) {
options.model = monaco.editor.createModel(options.model.value, options.model.language, options.model.uri);
}
this.editor = monaco.editor.create(this._editorComponent.nativeElement, options);
this._editor = monaco.editor.create(this._editorComponent.nativeElement, options);
if (!hasModel) {
this.editor.setValue(this._value);
this._editor.setValue(this._value);
}
// monaco editor -> outside component
this.editor.onDidChangeModelContent((e) => this.onChangeModelContentHandler(e));
this.editor.onDidBlurEditorText((e) => this.onBlurEditorTextHandler(e));
this.editor.onDidLayoutChange((e) => this.onLayoutChangeHandler(e));
this._editor.onDidChangeModelContent((e) => this.onChangeModelContentHandler(e));
this._editor.onDidBlurEditorText((e) => this.onBlurEditorTextHandler(e));
this._editor.onDidLayoutChange((e) => this.onLayoutChangeHandler(e));
// refresh layout on resize event.

@@ -87,30 +85,9 @@ this.refreshLayoutWhenWindowResize();

target: this,
editor: this.editor
editor: this._editor
});
// active model markers
if (hasModel && acitveMarkers) {
this.acitveModelMarkers();
if (hasModel) {
this.angularMonacoEditorService.handleModelMarkers();
}
}
/**
* Acitve Model markers to get markers' results
* @return {?}
*/
acitveModelMarkers() {
var /** @type {?} */ self = this;
// https://github.com/Microsoft/monaco-editor/issues/30
const /** @type {?} */ setModelMarkers = monaco.editor.setModelMarkers;
monaco.editor.setModelMarkers = function (model, owner, markers) {
setModelMarkers.call(monaco.editor, model, owner, markers);
if (markers.length === 0) {
// there are no errors(synx error and validate error)
// console.log('continue');
}
else {
// there are errors
self._errorInModelMarker = true;
}
};
}
/**
* refresh layout when resized the window

@@ -125,3 +102,3 @@ * @return {?}

// https://www.jianshu.com/p/46894deb870a
this._windowResizeSubscription = fromEvent(window, 'resize').subscribe(() => this.editor.layout());
this._windowResizeSubscription = fromEvent(window, 'resize').subscribe(() => this._editor.layout());
}

@@ -133,3 +110,3 @@ /**

onChangeModelContentHandler(e) {
const /** @type {?} */ _value = this.editor.getValue();
const /** @type {?} */ _value = this._editor.getValue();
// monaco editor -> outside component

@@ -171,9 +148,2 @@ // https://github.com/JTangming/tm/issues/4 ngZone详解

/**
* @return {?}
*/
localEditor() {
// Demo: outside component -> monaco editor
this.writeValue('test');
}
/**
* @param {?} value

@@ -185,6 +155,6 @@ * @return {?}

self.value = value || '';
// Fix for value change while dispose in process
// Fix for value change while dispose in process.
setTimeout(() => {
if (self.editor /*&& !this.options.model*/) {
self.editor.setValue(self._value);
if (self._editor /*&& !this.options.model*/) {
self._editor.setValue(self._value);
}

@@ -214,3 +184,7 @@ });

styles: [`:host{display:block;min-height:200px}.editor{width:100%;height:100%}`],
providers: [CODE_EDITOR_INPUT_VALUE_ACCESSOR, CodeEditorEventService]
// 自定义输入控件:2.引入依赖服务ControlValueAccessor
providers: [
CODE_EDITOR_INPUT_VALUE_ACCESSOR,
CodeEditorEventService
]
},] },

@@ -220,2 +194,3 @@ ];

AngularMonacoEditorComponent.ctorParameters = () => [
{ type: AngularMonacoEditorService, },
{ type: NgZone, },

@@ -241,4 +216,2 @@ { type: CodeEditorEventService, },

/** @type {?} */
AngularMonacoEditorComponent.prototype._errorInModelMarker;
/** @type {?} */
AngularMonacoEditorComponent.prototype.onControlValueChange;

@@ -248,2 +221,4 @@ /** @type {?} */

/** @type {?} */
AngularMonacoEditorComponent.prototype.angularMonacoEditorService;
/** @type {?} */
AngularMonacoEditorComponent.prototype.zone;

@@ -256,2 +231,2 @@ /** @type {?} */

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tb25hY28tZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci8iLCJzb3VyY2VzIjpbImxpYi9lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yL2FuZ3VsYXItbW9uYWNvLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXRELE9BQU8sRUFBRSw0QkFBNEIsRUFBNkIsTUFBTSxXQUFXLENBQUM7QUFDcEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBS3pELE1BQU0sQ0FBQyx1QkFBTSxnQ0FBZ0MsR0FBUTs7SUFFbkQsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDRCQUE0QixDQUFDO0lBQzNELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQVdGLE1BQU0sbUNBQW9DLFNBQVEsZ0JBQWdCOzs7Ozs7SUFtQmhFLFlBQW9CLElBQVksRUFBVSxrQkFBMEMsRUFBZ0Q7UUFDbEksS0FBSyxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFEN0IsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFVLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FB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LENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3ZDOzs7O0lBRUQsV0FBVzs7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3pCOzs7OztJQUtELFVBQVUsQ0FBQyxLQUFVO1FBQ25CLHVCQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDOztRQUd6QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sMkJBQTJCLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkM7U0FDRixDQUFDLENBQUM7S0FDSjs7Ozs7SUFHRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7S0FDaEM7Ozs7O0lBR0QsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0tBQzVCOzs7WUE5SkYsU0FBUyxTQUFDOztnQkFFVCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxRQUFRLEVBQUUsd0NBQXdDO2dCQUNsRCxNQUFNLEVBQUUsQ0FBQyxzRUFBc0UsQ0FBQztnQkFFaEYsU0FBUyxFQUFFLENBQUMsZ0NBQWdDLEVBQUUsc0JBQXNCLENBQUM7YUFDdEU7Ozs7WUEzQjRCLE1BQU07WUFLMUIsc0JBQXNCOzRDQTJDMEQsTUFBTSxTQUFDLDRCQUE0Qjs7O3NCQWpCekgsS0FBSyxTQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3J3YXJkUmVmLCBJbmplY3QsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcy9vYnNlcnZhYmxlL2Zyb21FdmVudCc7XG5cbmltcG9ydCB7IEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcsIEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgQ29kZUVkaXRvckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvZGUtZWRpdG9yLmV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09ERV9FRElUT1JfRVZFTlRTIH0gZnJvbSAnLi4vY29uc3RhbnRzL2V2ZW50cyc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yTW9kZWwgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBCYXNlTW9uYWNvRWRpdG9yIH0gZnJvbSAnLi4vYmFzZS1tb25hY28tZWRpdG9yJztcblxuZGVjbGFyZSBjb25zdCBtb25hY286IGFueTtcblxuLy8gaHR0cHM6Ly9jb2RlLWV4YW1wbGVzLm5ldC96aC1DTi9xLzIxNTQ3NjFcbmV4cG9ydCBjb25zdCBDT0RFX0VESVRPUl9JTlBVVF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICAvLyBodHRwczovL2Jsb2cuY3Nkbi5uZXQvd2FuZ2Rhbl8yMDEzL2FydGljbGUvZGV0YWlscy84MTMxNDk1OVxuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FuZ3VsYXItbW9uYWNvLWVkaXRvcicsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImVkaXRvclwiICNjb2RlRWRpdG9yPjwvZGl2PmAsXG4gIHN0eWxlczogW2A6aG9zdHtkaXNwbGF5OmJsb2NrO21pbi1oZWlnaHQ6MjAwcHh9LmVkaXRvcnt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfWBdLFxuXG4gIHByb3ZpZGVyczogW0NPREVfRURJVE9SX0lOUFVUX1ZBTFVFX0FDQ0VTU09SLCBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlXVxufSlcblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJNb25hY29FZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBCYXNlTW9uYWNvRWRpdG9yIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIEBJbnB1dCgnbW9kZWwnKVxuICBzZXQgbW9kZWwobW9kZWw6IEFuZ3VsYXJFZGl0b3JNb2RlbCkge1xuICAgIHRoaXMub3B0aW9ucy5tb2RlbCA9IG1vZGVsO1xuICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgdGhpcy5lZGl0b3IuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5pbml0TW9uYWNvKHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcblxuICBwcml2YXRlIF9lcnJvckluTW9kZWxNYXJrZXIgPSBmYWxzZTtcbiAgZ2V0IGVycm9ySW5Nb2RlbE1hcmtlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JJbk1vZGVsTWFya2VyO1xuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSwgcHJpdmF0ZSBlZGl0b3JFdmVudFNlcnZpY2U6IENvZGVFZGl0b3JFdmVudFNlcnZpY2UsIEBJbmplY3QoQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRykgcHJpdmF0ZSBhbmd1bGFyRWRpdG9yY29uZmlnOiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnKSB7XG4gICAgc3VwZXIoZWRpdG9yRXZlbnRTZXJ2aWNlLCBhbmd1bGFyRWRpdG9yY29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0TW9uYWNvKG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGhhc01vZGVsID0gISFvcHRpb25zLm1vZGVsO1xuICAgIGNvbnN0IGFjaXR2ZU1hcmtlcnMgPSAhIW9wdGlvbnMuYWNpdHZlTWFya2VyczsvL+iHquWumuS5iW9wdGlvblxuXG4gICAgaWYgKGhhc01vZGVsKSB7XG4gICAgICBvcHRpb25zLm1vZGVsID0gbW9uYWNvLmVkaXRvci5jcmVhdGVNb2RlbChvcHRpb25zLm1vZGVsLnZhbHVlLCBvcHRpb25zLm1vZGVsLmxhbmd1YWdlLCBvcHRpb25zLm1vZGVsLnVyaSk7XG4gICAgfVxuXG4gICAgdGhpcy5lZGl0b3IgPSBtb25hY28uZWRpdG9yLmNyZWF0ZSh0aGlzLl9lZGl0b3JDb21wb25lbnQubmF0aXZlRWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWhhc01vZGVsKSB7XG4gICAgICB0aGlzLmVkaXRvci5zZXRWYWx1ZSh0aGlzLl92YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gbW9uYWNvIGVkaXRvciAtPiBvdXRzaWRlIGNvbXBvbmVudFxuICAgIHRoaXMuZWRpdG9yLm9uRGlkQ2hhbmdlTW9kZWxDb250ZW50KChlOiBhbnkpID0+IHRoaXMub25DaGFuZ2VNb2RlbENvbnRlbnRIYW5kbGVyKGUpKTtcblxuICAgIHRoaXMuZWRpdG9yLm9uRGlkQmx1ckVkaXRvclRleHQoKGU6IGFueSkgPT4gdGhpcy5vbkJsdXJFZGl0b3JUZXh0SGFuZGxlcihlKSk7XG5cbiAgICB0aGlzLmVkaXRvci5vbkRpZExheW91dENoYW5nZSgoZTogYW55KSA9PiB0aGlzLm9uTGF5b3V0Q2hhbmdlSGFuZGxlcihlKSk7XG5cbiAgICAvLyByZWZyZXNoIGxheW91dCBvbiByZXNpemUgZXZlbnQuXG4gICAgdGhpcy5yZWZyZXNoTGF5b3V0V2hlbldpbmRvd1Jlc2l6ZSgpO1xuXG4gICAgdGhpcy5lZGl0b3JFdmVudFNlcnZpY2UuZmlyZUV2ZW50KHtcbiAgICAgIGV2ZW50TmFtZTogQ09ERV9FRElUT1JfRVZFTlRTLm9uSW5pdCxcbiAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgIGVkaXRvcjogdGhpcy5lZGl0b3JcbiAgICB9KTtcblxuICAgIC8vIGFjdGl2ZSBtb2RlbCBtYXJrZXJzXG4gICAgaWYgKGhhc01vZGVsICYmIGFjaXR2ZU1hcmtlcnMpIHtcbiAgICAgIHRoaXMuYWNpdHZlTW9kZWxNYXJrZXJzKCk7XG4gICAgfVxuXG4gIH1cbiAgXG4gIC8qKlxuICAgKiBBY2l0dmUgTW9kZWwgbWFya2VycyB0byBnZXQgbWFya2VycycgcmVzdWx0c1xuICAgKi9cbiAgYWNpdHZlTW9kZWxNYXJrZXJzKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L21vbmFjby1lZGl0b3IvaXNzdWVzLzMwXG4gICAgY29uc3Qgc2V0TW9kZWxNYXJrZXJzID0gbW9uYWNvLmVkaXRvci5zZXRNb2RlbE1hcmtlcnM7XG4gICAgbW9uYWNvLmVkaXRvci5zZXRNb2RlbE1hcmtlcnMgPSBmdW5jdGlvbiAobW9kZWwsIG93bmVyLCBtYXJrZXJzKSB7XG4gICAgICBzZXRNb2RlbE1hcmtlcnMuY2FsbChtb25hY28uZWRpdG9yLCBtb2RlbCwgb3duZXIsIG1hcmtlcnMpO1xuICAgICAgaWYgKG1hcmtlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIHRoZXJlIGFyZSBubyBlcnJvcnMoc3lueCBlcnJvciBhbmQgdmFsaWRhdGUgZXJyb3IpXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjb250aW51ZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlcmUgYXJlIGVycm9yc1xuICAgICAgICBzZWxmLl9lcnJvckluTW9kZWxNYXJrZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogcmVmcmVzaCBsYXlvdXQgd2hlbiByZXNpemVkIHRoZSB3aW5kb3dcbiAgICovXG4gIHJlZnJlc2hMYXlvdXRXaGVuV2luZG93UmVzaXplKCkge1xuICAgIGlmICh0aGlzLl93aW5kb3dSZXNpemVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvLyBmcm9tRXZlbnTnlKjkuo7lhbzlkKzkuovku7bvvIzkuovku7bop6blj5Hml7bvvIzlsIbkuovku7ZldmVudOi9rOaIkOWPr+a1geWKqOeahE9ic2VydmFibGXov5vooYzkvKDovpNcbiAgICAvLyBodHRwczovL3d3dy5qaWFuc2h1LmNvbS9wLzQ2ODk0ZGViODcwYVxuICAgIHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5lZGl0b3IubGF5b3V0KCkpO1xuICB9XG5cbiAgb25DaGFuZ2VNb2RlbENvbnRlbnRIYW5kbGVyKGUpIHtcbiAgICBjb25zdCBfdmFsdWUgPSB0aGlzLmVkaXRvci5nZXRWYWx1ZSgpO1xuXG4gICAgLy8gbW9uYWNvIGVkaXRvciAtPiBvdXRzaWRlIGNvbXBvbmVudFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KVGFuZ21pbmcvdG0vaXNzdWVzLzQgbmdab25l6K+m6KejXG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLnZhbHVlID0gX3ZhbHVlKTsgLy8gdmFsdWUgaXMgbm90IHByb3BhZ2F0ZWQgdG8gcGFyZW50IHdoZW4gZXhlY3V0aW5nIG91dHNpZGUgem9uZS5cbiAgfVxuXG4gIG9uQmx1ckVkaXRvclRleHRIYW5kbGVyKGUpIHtcblxuICAgIHRoaXMub25Db250cm9sVG91Y2hlZCgpO1xuICB9XG5cbiAgb25MYXlvdXRDaGFuZ2VIYW5kbGVyKGUpIHtcbiAgICBjb25zb2xlLmxvZygnTGF5b3V0IGNoYW5nZWQ6XFxuJyArIGUpO1xuICB9XG5cbiAgLy8gZ2V0IGFjY2Vzc29yXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIC8vIHNldCBhY2Nlc3NvciBpbmNsdWRpbmcgY2FsbCB0aGUgb25jaGFuZ2UgY2FsbGJhY2tcbiAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgIGlmICh2ICE9PSB0aGlzLnZhbHVlKSB7Ly8g5rOo5oSP6L+Z56eN5YaZ5rOV77yM5YC85b6X5a2m5LmgXG4gICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgfVxuXG4gICAgdGhpcy5vbkNvbnRyb2xWYWx1ZUNoYW5nZSh0aGlzLnZhbHVlKTsgLy8g5Zyo5bGe5oCn5L+u6aWw5Zmo6YeM6LCD55Sob25Db250cm9sVmFsdWVDaGFuZ2Xmlrnms5VcbiAgfVxuXG4gIGxvY2FsRWRpdG9yKCkgey8vIERlbW86IG91dHNpZGUgY29tcG9uZW50IC0+IG1vbmFjbyBlZGl0b3JcbiAgICB0aGlzLndyaXRlVmFsdWUoJ3Rlc3QnKTtcbiAgfVxuXG4gIC8vIG91dHNpZGUgY29tcG9uZW50IC0+IG1vbmFjbyBlZGl0b3JcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBzZWxmLnZhbHVlID0gdmFsdWUgfHwgJyc7XG5cbiAgICAvLyBGaXggZm9yIHZhbHVlIGNoYW5nZSB3aGlsZSBkaXNwb3NlIGluIHByb2Nlc3NcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChzZWxmLmVkaXRvciAvKiYmICF0aGlzLm9wdGlvbnMubW9kZWwqLykge1xuICAgICAgICBzZWxmLmVkaXRvci5zZXRWYWx1ZShzZWxmLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ29udHJvbFZhbHVlQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkID0gZm47XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvcuaPkOS+m+eahOS6i+S7tuWbnuiwg1xuICBvbkNvbnRyb2xWYWx1ZUNoYW5nZSA9IChfOiBhbnkpID0+IHtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29y5o+Q5L6b55qE5LqL5Lu25Zue6LCDXG4gIG9uQ29udHJvbFRvdWNoZWQgPSAoKSA9PiB7XG4gIH1cblxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tb25hY28tZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci8iLCJzb3VyY2VzIjpbImxpYi9lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yL2FuZ3VsYXItbW9uYWNvLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXRELE9BQU8sRUFBRSw0QkFBNEIsRUFBNkIsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7O0FBTXRGLE1BQU0sQ0FBQyx1QkFBTSxnQ0FBZ0MsR0FBUTs7SUFFbkQsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDRCQUE0QixDQUFDO0lBQzNELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGOztBQWVBLE1BQU0sbUNBQW9DLFNBQVEsZ0JBQWdCOzs7Ozs7O0lBY2hFLFlBQW9CLDBCQUFzRCxFQUNoRSxNQUNBLG9CQUNzQztRQUM5QyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLENBQUMsQ0FB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RUFBRSxDQUFDO0tBQzVCOzs7WUEzSUYsU0FBUyxTQUFDOztnQkFFVCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxRQUFRLEVBQUUsd0NBQXdDO2dCQUNsRCxNQUFNLEVBQUUsQ0FBQyxzRUFBc0UsQ0FBQzs7Z0JBRWhGLFNBQVMsRUFBRTtvQkFDVCxnQ0FBZ0M7b0JBQ2hDLHNCQUFzQjtpQkFDdkI7YUFDRjs7OztZQXZCUSwwQkFBMEI7WUFUTixNQUFNO1lBSzFCLHNCQUFzQjs0Q0FpRDFCLE1BQU0sU0FBQyw0QkFBNEI7OztzQkFmckMsS0FBSyxTQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcndhcmRSZWYsIEluamVjdCwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzL29ic2VydmFibGUvZnJvbUV2ZW50JztcblxuaW1wb3J0IHsgQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRywgQW5ndWxhck1vbmFjb0VkaXRvckNvbmZpZyB9IGZyb20gJy4uL21vZGVsL2NvbmZpZyc7XG5pbXBvcnQgeyBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9jb2RlLWVkaXRvci5ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IENPREVfRURJVE9SX0VWRU5UUyB9IGZyb20gJy4uL2NvbnN0YW50L2V2ZW50cyc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yTW9kZWwgfSBmcm9tICcuLi9tb2RlbC90eXBlcyc7XG5pbXBvcnQgeyBCYXNlTW9uYWNvRWRpdG9yIH0gZnJvbSAnLi4vbW9kZWwvYmFzZS1tb25hY28tZWRpdG9yJztcbmltcG9ydCB7IEFuZ3VsYXJNb25hY29FZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9hbmd1bGFyLW1vbmFjby1lZGl0b3Iuc2VydmljZSc7XG5cbmRlY2xhcmUgY29uc3QgbW9uYWNvOiBhbnk7XG5cbi8vIOiHquWumuS5iei+k+WFpeaOp+S7tjoxLuWwgeijhUNvbnRyb2xWYWx1ZUFjY2Vzc29yXG4vLyBodHRwczovL2NvZGUtZXhhbXBsZXMubmV0L3poLUNOL3EvMjE1NDc2MVxuZXhwb3J0IGNvbnN0IENPREVfRURJVE9SX0lOUFVUX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gIC8vIGh0dHBzOi8vYmxvZy5jc2RuLm5ldC93YW5nZGFuXzIwMTMvYXJ0aWNsZS9kZXRhaWxzLzgxMzE0OTU5XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYW5ndWxhci1tb25hY28tZWRpdG9yJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiZWRpdG9yXCIgI2NvZGVFZGl0b3I+PC9kaXY+YCxcbiAgc3R5bGVzOiBbYDpob3N0e2Rpc3BsYXk6YmxvY2s7bWluLWhlaWdodDoyMDBweH0uZWRpdG9ye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9YF0sXG4gIC8vIOiHquWumuS5iei+k+WFpeaOp+S7tjoyLuW8leWFpeS+nei1luacjeWKoUNvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIHByb3ZpZGVyczogW1xuICAgIENPREVfRURJVE9SX0lOUFVUX1ZBTFVFX0FDQ0VTU09SLCBcbiAgICBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlXG4gIF1cbn0pXG5cbi8vIOiHquWumuS5iei+k+WFpeaOp+S7tiA8LT4gTW9uYWNvIEVkdG9yXG5cbi8vIOiHquWumuS5iei+k+WFpeaOp+S7tjozLjEgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvclxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJNb25hY29FZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBCYXNlTW9uYWNvRWRpdG9yIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIEBJbnB1dCgnbW9kZWwnKVxuICBzZXQgbW9kZWwobW9kZWw6IEFuZ3VsYXJFZGl0b3JNb2RlbCkge1xuICAgIHRoaXMub3B0aW9ucy5tb2RlbCA9IG1vZGVsO1xuICAgIGlmICh0aGlzLl9lZGl0b3IpIHtcbiAgICAgIHRoaXMuX2VkaXRvci5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmluaXRNb25hY28odGhpcy5vcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZSA9ICcnO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhbmd1bGFyTW9uYWNvRWRpdG9yU2VydmljZTogQW5ndWxhck1vbmFjb0VkaXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBlZGl0b3JFdmVudFNlcnZpY2U6IENvZGVFZGl0b3JFdmVudFNlcnZpY2UsXG4gICAgQEluamVjdChBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHKSBwcml2YXRlIGFuZ3VsYXJFZGl0b3Jjb25maWc6IEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcpIHtcbiAgICBzdXBlcihlZGl0b3JFdmVudFNlcnZpY2UsIGFuZ3VsYXJFZGl0b3Jjb25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRNb25hY28ob3B0aW9uczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaGFzTW9kZWwgPSAhIW9wdGlvbnMubW9kZWw7XG5cbiAgICBpZiAoaGFzTW9kZWwpIHtcbiAgICAgIG9wdGlvbnMubW9kZWwgPSBtb25hY28uZWRpdG9yLmNyZWF0ZU1vZGVsKG9wdGlvbnMubW9kZWwudmFsdWUsIG9wdGlvbnMubW9kZWwubGFuZ3VhZ2UsIG9wdGlvbnMubW9kZWwudXJpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9lZGl0b3IgPSBtb25hY28uZWRpdG9yLmNyZWF0ZSh0aGlzLl9lZGl0b3JDb21wb25lbnQubmF0aXZlRWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWhhc01vZGVsKSB7XG4gICAgICB0aGlzLl9lZGl0b3Iuc2V0VmFsdWUodGhpcy5fdmFsdWUpO1xuICAgIH1cblxuICAgIC8vIG1vbmFjbyBlZGl0b3IgLT4gb3V0c2lkZSBjb21wb25lbnRcbiAgICB0aGlzLl9lZGl0b3Iub25EaWRDaGFuZ2VNb2RlbENvbnRlbnQoKGU6IGFueSkgPT4gdGhpcy5vbkNoYW5nZU1vZGVsQ29udGVudEhhbmRsZXIoZSkpO1xuXG4gICAgdGhpcy5fZWRpdG9yLm9uRGlkQmx1ckVkaXRvclRleHQoKGU6IGFueSkgPT4gdGhpcy5vbkJsdXJFZGl0b3JUZXh0SGFuZGxlcihlKSk7XG5cbiAgICB0aGlzLl9lZGl0b3Iub25EaWRMYXlvdXRDaGFuZ2UoKGU6IGFueSkgPT4gdGhpcy5vbkxheW91dENoYW5nZUhhbmRsZXIoZSkpO1xuXG4gICAgLy8gcmVmcmVzaCBsYXlvdXQgb24gcmVzaXplIGV2ZW50LlxuICAgIHRoaXMucmVmcmVzaExheW91dFdoZW5XaW5kb3dSZXNpemUoKTtcblxuICAgIHRoaXMuZWRpdG9yRXZlbnRTZXJ2aWNlLmZpcmVFdmVudCh7XG4gICAgICBldmVudE5hbWU6IENPREVfRURJVE9SX0VWRU5UUy5vbkluaXQsXG4gICAgICB0YXJnZXQ6IHRoaXMsXG4gICAgICBlZGl0b3I6IHRoaXMuX2VkaXRvclxuICAgIH0pO1xuXG4gICAgaWYgKGhhc01vZGVsKSB7XG4gICAgICB0aGlzLmFuZ3VsYXJNb25hY29FZGl0b3JTZXJ2aWNlLmhhbmRsZU1vZGVsTWFya2VycygpO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIHJlZnJlc2ggbGF5b3V0IHdoZW4gcmVzaXplZCB0aGUgd2luZG93XG4gICAqL1xuICByZWZyZXNoTGF5b3V0V2hlbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICBpZiAodGhpcy5fd2luZG93UmVzaXplU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl93aW5kb3dSZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgLy8gZnJvbUV2ZW5055So5LqO5YW85ZCs5LqL5Lu277yM5LqL5Lu26Kem5Y+R5pe277yM5bCG5LqL5Lu2ZXZlbnTovazmiJDlj6/mtYHliqjnmoRPYnNlcnZhYmxl6L+b6KGM5Lyg6L6TXG4gICAgLy8gaHR0cHM6Ly93d3cuamlhbnNodS5jb20vcC80Njg5NGRlYjg3MGFcbiAgICB0aGlzLl93aW5kb3dSZXNpemVTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2VkaXRvci5sYXlvdXQoKSk7XG4gIH1cblxuICBvbkNoYW5nZU1vZGVsQ29udGVudEhhbmRsZXIoZSkge1xuICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMuX2VkaXRvci5nZXRWYWx1ZSgpO1xuXG4gICAgLy8gbW9uYWNvIGVkaXRvciAtPiBvdXRzaWRlIGNvbXBvbmVudFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KVGFuZ21pbmcvdG0vaXNzdWVzLzQgbmdab25l6K+m6KejXG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLnZhbHVlID0gX3ZhbHVlKTsgLy8gdmFsdWUgaXMgbm90IHByb3BhZ2F0ZWQgdG8gcGFyZW50IHdoZW4gZXhlY3V0aW5nIG91dHNpZGUgem9uZS5cbiAgfVxuXG4gIG9uQmx1ckVkaXRvclRleHRIYW5kbGVyKGUpIHtcblxuICAgIHRoaXMub25Db250cm9sVG91Y2hlZCgpO1xuICB9XG5cbiAgb25MYXlvdXRDaGFuZ2VIYW5kbGVyKGUpIHtcbiAgICBjb25zb2xlLmxvZygnTGF5b3V0IGNoYW5nZWQ6XFxuJyArIGUpO1xuICB9XG5cbiAgLy8gZ2V0IGFjY2Vzc29yXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIC8vIHNldCBhY2Nlc3NvciBpbmNsdWRpbmcgY2FsbCB0aGUgb25jaGFuZ2UgY2FsbGJhY2tcbiAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgIGlmICh2ICE9PSB0aGlzLnZhbHVlKSB7Ly8g5rOo5oSP6L+Z56eN5YaZ5rOV77yM5YC85b6X5a2m5LmgXG4gICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgfVxuXG4gICAgdGhpcy5vbkNvbnRyb2xWYWx1ZUNoYW5nZSh0aGlzLnZhbHVlKTsgLy8g5Zyo5bGe5oCn5L+u6aWw5Zmo6YeM6LCD55Sob25Db250cm9sVmFsdWVDaGFuZ2Xmlrnms5VcbiAgfVxuXG4gIC8vIOiHquWumuS5iei+k+WFpeaOp+S7tjozLjIgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvXG5cbiAgLy8gb3V0c2lkZSBjb21wb25lbnQgLT4gbW9uYWNvIGVkaXRvclxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNlbGYudmFsdWUgPSB2YWx1ZSB8fCAnJztcblxuICAgIC8vIEZpeCBmb3IgdmFsdWUgY2hhbmdlIHdoaWxlIGRpc3Bvc2UgaW4gcHJvY2Vzcy5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChzZWxmLl9lZGl0b3IgLyomJiAhdGhpcy5vcHRpb25zLm1vZGVsKi8pIHtcbiAgICAgICAgc2VsZi5fZWRpdG9yLnNldFZhbHVlKHNlbGYuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25Db250cm9sVmFsdWVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29y5o+Q5L6b55qE5LqL5Lu25Zue6LCDXG4gIG9uQ29udHJvbFZhbHVlQ2hhbmdlID0gKF86IGFueSkgPT4ge1xuICB9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3Lmj5DkvpvnmoTkuovku7blm57osINcbiAgb25Db250cm9sVG91Y2hlZCA9ICgpID0+IHtcbiAgfVxuXG59XG4iXX0=

@@ -7,3 +7,3 @@ /**

import { NgModule } from '@angular/core';
import { ANGULAR_MONACO_EDITOR_CONFIG } from './config';
import { ANGULAR_MONACO_EDITOR_CONFIG } from './model/config';
import { AngularMonacoEditorComponent } from './angular-monaco-editor/angular-monaco-editor.component';

@@ -48,2 +48,2 @@ export class AngularMonacoEditorModule {

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci8iLCJzb3VyY2VzIjpbImxpYi9lZGl0b3IvZWRpdG9yLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSw0QkFBNEIsRUFBNkIsTUFBTSxVQUFVLENBQUM7QUFDbkYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFnQnZHLE1BQU07Ozs7O0lBQ0csTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFvQyxFQUFFO1FBQzFELE1BQU0sQ0FBQztZQUNMLFFBQVEsRUFBRSx5QkFBeUI7WUFDbkMsU0FBUyxFQUFFO2dCQUNULEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7YUFDNUQ7U0FDRixDQUFDOzs7O1lBckJMLFFBQVEsU0FBQztnQkFDUixPQUFPLEVBQUU7b0JBQ1AsWUFBWTtpQkFDYjtnQkFDRCxZQUFZLEVBQUU7b0JBQ1osNEJBQTRCO2lCQUM3QjtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsNEJBQTRCO2lCQUM3QjtnQkFDRCxTQUFTLEVBQUUsRUFDVjthQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcsIEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9hbmd1bGFyLW1vbmFjby1lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgXVxufSlcblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJNb25hY29FZGl0b3JNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFuZ3VsYXJNb25hY29FZGl0b3JNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci8iLCJzb3VyY2VzIjpbImxpYi9lZGl0b3IvZWRpdG9yLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSw0QkFBNEIsRUFBNkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQWdCdkcsTUFBTTs7Ozs7SUFDRyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQW9DLEVBQUU7UUFDMUQsTUFBTSxDQUFDO1lBQ0wsUUFBUSxFQUFFLHlCQUF5QjtZQUNuQyxTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTthQUM1RDtTQUNGLENBQUM7Ozs7WUFyQkwsUUFBUSxTQUFDO2dCQUNSLE9BQU8sRUFBRTtvQkFDUCxZQUFZO2lCQUNiO2dCQUNELFlBQVksRUFBRTtvQkFDWiw0QkFBNEI7aUJBQzdCO2dCQUNELE9BQU8sRUFBRTtvQkFDUCw0QkFBNEI7aUJBQzdCO2dCQUNELFNBQVMsRUFBRSxFQUNWO2FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRywgQW5ndWxhck1vbmFjb0VkaXRvckNvbmZpZyB9IGZyb20gJy4vbW9kZWwvY29uZmlnJztcbmltcG9ydCB7IEFuZ3VsYXJNb25hY29FZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9hbmd1bGFyLW1vbmFjby1lZGl0b3IuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50XG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICBdXG59KVxuXG5leHBvcnQgY2xhc3MgQW5ndWxhck1vbmFjb0VkaXRvck1vZHVsZSB7XG4gIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChjb25maWc6IEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgPSB7fSk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQW5ndWxhck1vbmFjb0VkaXRvck1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==

@@ -6,4 +6,4 @@ /**

export { AngularMonacoEditorModule } from './lib/editor/editor.module';
export { ANGULAR_MONACO_EDITOR_CONFIG } from './lib/editor/config';
export { ANGULAR_MONACO_EDITOR_CONFIG } from './lib/editor/model/config';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci8iLCJzb3VyY2VzIjpbInB1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDBDQUFjLDRCQUE0QixDQUFDO0FBQzNDLDZDQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvZWRpdG9yL2VkaXRvci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWRpdG9yL2NvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lZGl0b3IvdHlwZXMnOyJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci8iLCJzb3VyY2VzIjpbInB1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDBDQUFjLDRCQUE0QixDQUFDO0FBQzNDLDZDQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvZWRpdG9yL2VkaXRvci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWRpdG9yL21vZGVsL2NvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lZGl0b3IvbW9kZWwvdHlwZXMnOyJdfQ==

@@ -10,5 +10,6 @@ /**

export { AngularMonacoEditorComponent as ɵb, CODE_EDITOR_INPUT_VALUE_ACCESSOR as ɵa } from './lib/editor/angular-monaco-editor/angular-monaco-editor.component';
export { BaseMonacoEditor as ɵc } from './lib/editor/base-monaco-editor';
export { CodeEditorEventService as ɵd } from './lib/editor/services/code-editor.event.service';
export { BaseMonacoEditor as ɵc } from './lib/editor/model/base-monaco-editor';
export { AngularMonacoEditorService as ɵe } from './lib/editor/service/angular-monaco-editor.service';
export { CodeEditorEventService as ɵd } from './lib/editor/service/code-editor.event.service';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tb25hY28tZWRpdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1tb25hY28tZWRpdG9yLyIsInNvdXJjZXMiOlsiYW5ndWxhci1tb25hY28tZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQSx3RUFBYyxjQUFjLENBQUM7QUFFN0IsT0FBTyxFQUFDLDRCQUE0QixJQUFJLEVBQUUsRUFBQyxnQ0FBZ0MsSUFBSSxFQUFFLEVBQUMsTUFBTSxvRUFBb0UsQ0FBQztBQUM3SixPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFBQyxNQUFNLGlEQUFpRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuXG5leHBvcnQge0FuZ3VsYXJNb25hY29FZGl0b3JDb21wb25lbnQgYXMgybViLENPREVfRURJVE9SX0lOUFVUX1ZBTFVFX0FDQ0VTU09SIGFzIMm1YX0gZnJvbSAnLi9saWIvZWRpdG9yL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9hbmd1bGFyLW1vbmFjby1lZGl0b3IuY29tcG9uZW50JztcbmV4cG9ydCB7QmFzZU1vbmFjb0VkaXRvciBhcyDJtWN9IGZyb20gJy4vbGliL2VkaXRvci9iYXNlLW1vbmFjby1lZGl0b3InO1xuZXhwb3J0IHtDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlIGFzIMm1ZH0gZnJvbSAnLi9saWIvZWRpdG9yL3NlcnZpY2VzL2NvZGUtZWRpdG9yLmV2ZW50LnNlcnZpY2UnOyJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tb25hY28tZWRpdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1tb25hY28tZWRpdG9yLyIsInNvdXJjZXMiOlsiYW5ndWxhci1tb25hY28tZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQSx3RUFBYyxjQUFjLENBQUM7QUFFN0IsT0FBTyxFQUFDLDRCQUE0QixJQUFJLEVBQUUsRUFBQyxnQ0FBZ0MsSUFBSSxFQUFFLEVBQUMsTUFBTSxvRUFBb0UsQ0FBQztBQUM3SixPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFDLDBCQUEwQixJQUFJLEVBQUUsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQ3BHLE9BQU8sRUFBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcblxuZXhwb3J0IHtBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50IGFzIMm1YixDT0RFX0VESVRPUl9JTlBVVF9WQUxVRV9BQ0NFU1NPUiBhcyDJtWF9IGZyb20gJy4vbGliL2VkaXRvci9hbmd1bGFyLW1vbmFjby1lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yLmNvbXBvbmVudCc7XG5leHBvcnQge0Jhc2VNb25hY29FZGl0b3IgYXMgybVjfSBmcm9tICcuL2xpYi9lZGl0b3IvbW9kZWwvYmFzZS1tb25hY28tZWRpdG9yJztcbmV4cG9ydCB7QW5ndWxhck1vbmFjb0VkaXRvclNlcnZpY2UgYXMgybVlfSBmcm9tICcuL2xpYi9lZGl0b3Ivc2VydmljZS9hbmd1bGFyLW1vbmFjby1lZGl0b3Iuc2VydmljZSc7XG5leHBvcnQge0NvZGVFZGl0b3JFdmVudFNlcnZpY2UgYXMgybVkfSBmcm9tICcuL2xpYi9lZGl0b3Ivc2VydmljZS9jb2RlLWVkaXRvci5ldmVudC5zZXJ2aWNlJzsiXX0=

@@ -10,6 +10,8 @@ /**

import { fromEvent } from 'rxjs/observable/fromEvent';
import { ANGULAR_MONACO_EDITOR_CONFIG } from '../config';
import { CodeEditorEventService } from '../services/code-editor.event.service';
import { CODE_EDITOR_EVENTS } from '../constants/events';
import { BaseMonacoEditor } from '../base-monaco-editor';
import { ANGULAR_MONACO_EDITOR_CONFIG } from '../model/config';
import { CodeEditorEventService } from '../service/code-editor.event.service';
import { CODE_EDITOR_EVENTS } from '../constant/events';
import { BaseMonacoEditor } from '../model/base-monaco-editor';
import { AngularMonacoEditorService } from '../service/angular-monaco-editor.service';
// 自定义输入控件:1.封装ControlValueAccessor
// https://code-examples.net/zh-CN/q/2154761

@@ -25,4 +27,5 @@ export var /** @type {?} */ CODE_EDITOR_INPUT_VALUE_ACCESSOR = {

// tslint:disable-next-line:max-line-length
function AngularMonacoEditorComponent(zone, editorEventService, angularEditorconfig) {
function AngularMonacoEditorComponent(angularMonacoEditorService, zone, editorEventService, angularEditorconfig) {
var _this = _super.call(this, editorEventService, angularEditorconfig) || this;
_this.angularMonacoEditorService = angularMonacoEditorService;
_this.zone = zone;

@@ -32,3 +35,2 @@ _this.editorEventService = editorEventService;

_this._value = '';
_this._errorInModelMarker = false;
// ControlValueAccessor提供的事件回调

@@ -49,4 +51,4 @@ _this.onControlValueChange = function (_) {

this.options.model = model;
if (this.editor) {
this.editor.dispose();
if (this._editor) {
this._editor.dispose();
this.initMonaco(this.options);

@@ -58,12 +60,2 @@ }

});
Object.defineProperty(AngularMonacoEditorComponent.prototype, "errorInModelMarker", {
get: /**
* @return {?}
*/
function () {
return this._errorInModelMarker;
},
enumerable: true,
configurable: true
});
/**

@@ -80,14 +72,13 @@ * @param {?} options

var /** @type {?} */ hasModel = !!options.model;
var /** @type {?} */ acitveMarkers = !!options.acitveMarkers; //自定义option
if (hasModel) {
options.model = monaco.editor.createModel(options.model.value, options.model.language, options.model.uri);
}
this.editor = monaco.editor.create(this._editorComponent.nativeElement, options);
this._editor = monaco.editor.create(this._editorComponent.nativeElement, options);
if (!hasModel) {
this.editor.setValue(this._value);
this._editor.setValue(this._value);
}
// monaco editor -> outside component
this.editor.onDidChangeModelContent(function (e) { return _this.onChangeModelContentHandler(e); });
this.editor.onDidBlurEditorText(function (e) { return _this.onBlurEditorTextHandler(e); });
this.editor.onDidLayoutChange(function (e) { return _this.onLayoutChangeHandler(e); });
this._editor.onDidChangeModelContent(function (e) { return _this.onChangeModelContentHandler(e); });
this._editor.onDidBlurEditorText(function (e) { return _this.onBlurEditorTextHandler(e); });
this._editor.onDidLayoutChange(function (e) { return _this.onLayoutChangeHandler(e); });
// refresh layout on resize event.

@@ -98,37 +89,9 @@ this.refreshLayoutWhenWindowResize();

target: this,
editor: this.editor
editor: this._editor
});
// active model markers
if (hasModel && acitveMarkers) {
this.acitveModelMarkers();
if (hasModel) {
this.angularMonacoEditorService.handleModelMarkers();
}
};
/**
* Acitve Model markers to get markers' results
*/
/**
* Acitve Model markers to get markers' results
* @return {?}
*/
AngularMonacoEditorComponent.prototype.acitveModelMarkers = /**
* Acitve Model markers to get markers' results
* @return {?}
*/
function () {
var /** @type {?} */ self = this;
// https://github.com/Microsoft/monaco-editor/issues/30
var /** @type {?} */ setModelMarkers = monaco.editor.setModelMarkers;
monaco.editor.setModelMarkers = function (model, owner, markers) {
setModelMarkers.call(monaco.editor, model, owner, markers);
if (markers.length === 0) {
// there are no errors(synx error and validate error)
// console.log('continue');
}
else {
// there are errors
self._errorInModelMarker = true;
}
};
};
/**
* refresh layout when resized the window

@@ -151,3 +114,3 @@ */

// https://www.jianshu.com/p/46894deb870a
this._windowResizeSubscription = fromEvent(window, 'resize').subscribe(function () { return _this.editor.layout(); });
this._windowResizeSubscription = fromEvent(window, 'resize').subscribe(function () { return _this._editor.layout(); });
};

@@ -164,3 +127,3 @@ /**

var _this = this;
var /** @type {?} */ _value = this.editor.getValue();
var /** @type {?} */ _value = this._editor.getValue();
// monaco editor -> outside component

@@ -215,12 +178,3 @@ // https://github.com/JTangming/tm/issues/4 ngZone详解

});
/**
* @return {?}
*/
AngularMonacoEditorComponent.prototype.localEditor = /**
* @return {?}
*/
function () {
// Demo: outside component -> monaco editor
this.writeValue('test');
};
// 自定义输入控件:3.2 implements ControlValueAccesso
// outside component -> monaco editor

@@ -239,6 +193,6 @@ // From ControlValueAccessor interface

self.value = value || '';
// Fix for value change while dispose in process
// Fix for value change while dispose in process.
setTimeout(function () {
if (self.editor /*&& !this.options.model*/) {
self.editor.setValue(self._value);
if (self._editor /*&& !this.options.model*/) {
self._editor.setValue(self._value);
}

@@ -277,3 +231,7 @@ });

styles: [":host{display:block;min-height:200px}.editor{width:100%;height:100%}"],
providers: [CODE_EDITOR_INPUT_VALUE_ACCESSOR, CodeEditorEventService]
// 自定义输入控件:2.引入依赖服务ControlValueAccessor
providers: [
CODE_EDITOR_INPUT_VALUE_ACCESSOR,
CodeEditorEventService
]
},] },

@@ -283,2 +241,3 @@ ];

AngularMonacoEditorComponent.ctorParameters = function () { return [
{ type: AngularMonacoEditorService, },
{ type: NgZone, },

@@ -307,4 +266,2 @@ { type: CodeEditorEventService, },

/** @type {?} */
AngularMonacoEditorComponent.prototype._errorInModelMarker;
/** @type {?} */
AngularMonacoEditorComponent.prototype.onControlValueChange;

@@ -314,2 +271,4 @@ /** @type {?} */

/** @type {?} */
AngularMonacoEditorComponent.prototype.angularMonacoEditorService;
/** @type {?} */
AngularMonacoEditorComponent.prototype.zone;

@@ -322,2 +281,2 @@ /** @type {?} */

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tb25hY28tZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci8iLCJzb3VyY2VzIjpbImxpYi9lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yL2FuZ3VsYXItbW9uYWNvLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQTZCLE1BQU0sV0FBVyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUt6RCxNQUFNLENBQUMscUJBQU0sZ0NBQWdDLEdBQVE7O0lBRW5ELE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEsNEJBQTRCLEVBQTVCLENBQTRCLENBQUM7SUFDM0QsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDOztJQVdnRCx3REFBZ0I7SUFrQmhFLDJDQUEyQztJQUMzQyxzQ0FBb0IsSUFBWSxFQUFVLGtCQUEwQyxFQUFnRDtRQUFwSSxZQUNFLGtCQUFNLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDLFNBQy9DO1FBRm1CLFVBQUksR0FBSixJQUFJLENBQVE7UUFBVSx3QkFBa0IsR0FBbEIsa0JBQWtC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RSxDQUFDLGdDQUFnQyxFQUFFLHNCQUFzQixDQUFDO2lCQUN0RTs7OztnQkEzQjRCLE1BQU07Z0JBSzFCLHNCQUFzQjtnREEyQzBELE1BQU0sU0FBQyw0QkFBNEI7OzswQkFqQnpILEtBQUssU0FBQyxPQUFPOzt1Q0FoQ2hCO0VBOEJrRCxnQkFBZ0I7U0FBckQsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiwgSW5qZWN0LCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMvb2JzZXJ2YWJsZS9mcm9tRXZlbnQnO1xuXG5pbXBvcnQgeyBBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHLCBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IENvZGVFZGl0b3JFdmVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb2RlLWVkaXRvci5ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IENPREVfRURJVE9SX0VWRU5UUyB9IGZyb20gJy4uL2NvbnN0YW50cy9ldmVudHMnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvck1vZGVsIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQmFzZU1vbmFjb0VkaXRvciB9IGZyb20gJy4uL2Jhc2UtbW9uYWNvLWVkaXRvcic7XG5cbmRlY2xhcmUgY29uc3QgbW9uYWNvOiBhbnk7XG5cbi8vIGh0dHBzOi8vY29kZS1leGFtcGxlcy5uZXQvemgtQ04vcS8yMTU0NzYxXG5leHBvcnQgY29uc3QgQ09ERV9FRElUT1JfSU5QVVRfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgLy8gaHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmdkYW5fMjAxMy9hcnRpY2xlL2RldGFpbHMvODEzMTQ5NTlcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFuZ3VsYXJNb25hY29FZGl0b3JDb21wb25lbnQpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhbmd1bGFyLW1vbmFjby1lZGl0b3InLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJlZGl0b3JcIiAjY29kZUVkaXRvcj48L2Rpdj5gLFxuICBzdHlsZXM6IFtgOmhvc3R7ZGlzcGxheTpibG9jazttaW4taGVpZ2h0OjIwMHB4fS5lZGl0b3J7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX1gXSxcblxuICBwcm92aWRlcnM6IFtDT0RFX0VESVRPUl9JTlBVVF9WQUxVRV9BQ0NFU1NPUiwgQ29kZUVkaXRvckV2ZW50U2VydmljZV1cbn0pXG5cbmV4cG9ydCBjbGFzcyBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQmFzZU1vbmFjb0VkaXRvciBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBASW5wdXQoJ21vZGVsJylcbiAgc2V0IG1vZGVsKG1vZGVsOiBBbmd1bGFyRWRpdG9yTW9kZWwpIHtcbiAgICB0aGlzLm9wdGlvbnMubW9kZWwgPSBtb2RlbDtcbiAgICBpZiAodGhpcy5lZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuaW5pdE1vbmFjbyh0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3ZhbHVlID0gJyc7XG5cbiAgcHJpdmF0ZSBfZXJyb3JJbk1vZGVsTWFya2VyID0gZmFsc2U7XG4gIGdldCBlcnJvckluTW9kZWxNYXJrZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9ySW5Nb2RlbE1hcmtlcjtcbiAgfVxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB6b25lOiBOZ1pvbmUsIHByaXZhdGUgZWRpdG9yRXZlbnRTZXJ2aWNlOiBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlLCBASW5qZWN0KEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcpIHByaXZhdGUgYW5ndWxhckVkaXRvcmNvbmZpZzogQW5ndWxhck1vbmFjb0VkaXRvckNvbmZpZykge1xuICAgIHN1cGVyKGVkaXRvckV2ZW50U2VydmljZSwgYW5ndWxhckVkaXRvcmNvbmZpZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdE1vbmFjbyhvcHRpb25zOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBoYXNNb2RlbCA9ICEhb3B0aW9ucy5tb2RlbDtcbiAgICBjb25zdCBhY2l0dmVNYXJrZXJzID0gISFvcHRpb25zLmFjaXR2ZU1hcmtlcnM7Ly/oh6rlrprkuYlvcHRpb25cblxuICAgIGlmIChoYXNNb2RlbCkge1xuICAgICAgb3B0aW9ucy5tb2RlbCA9IG1vbmFjby5lZGl0b3IuY3JlYXRlTW9kZWwob3B0aW9ucy5tb2RlbC52YWx1ZSwgb3B0aW9ucy5tb2RlbC5sYW5ndWFnZSwgb3B0aW9ucy5tb2RlbC51cmkpO1xuICAgIH1cblxuICAgIHRoaXMuZWRpdG9yID0gbW9uYWNvLmVkaXRvci5jcmVhdGUodGhpcy5fZWRpdG9yQ29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFoYXNNb2RlbCkge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0VmFsdWUodGhpcy5fdmFsdWUpO1xuICAgIH1cblxuICAgIC8vIG1vbmFjbyBlZGl0b3IgLT4gb3V0c2lkZSBjb21wb25lbnRcbiAgICB0aGlzLmVkaXRvci5vbkRpZENoYW5nZU1vZGVsQ29udGVudCgoZTogYW55KSA9PiB0aGlzLm9uQ2hhbmdlTW9kZWxDb250ZW50SGFuZGxlcihlKSk7XG5cbiAgICB0aGlzLmVkaXRvci5vbkRpZEJsdXJFZGl0b3JUZXh0KChlOiBhbnkpID0+IHRoaXMub25CbHVyRWRpdG9yVGV4dEhhbmRsZXIoZSkpO1xuXG4gICAgdGhpcy5lZGl0b3Iub25EaWRMYXlvdXRDaGFuZ2UoKGU6IGFueSkgPT4gdGhpcy5vbkxheW91dENoYW5nZUhhbmRsZXIoZSkpO1xuXG4gICAgLy8gcmVmcmVzaCBsYXlvdXQgb24gcmVzaXplIGV2ZW50LlxuICAgIHRoaXMucmVmcmVzaExheW91dFdoZW5XaW5kb3dSZXNpemUoKTtcblxuICAgIHRoaXMuZWRpdG9yRXZlbnRTZXJ2aWNlLmZpcmVFdmVudCh7XG4gICAgICBldmVudE5hbWU6IENPREVfRURJVE9SX0VWRU5UUy5vbkluaXQsXG4gICAgICB0YXJnZXQ6IHRoaXMsXG4gICAgICBlZGl0b3I6IHRoaXMuZWRpdG9yXG4gICAgfSk7XG5cbiAgICAvLyBhY3RpdmUgbW9kZWwgbWFya2Vyc1xuICAgIGlmIChoYXNNb2RlbCAmJiBhY2l0dmVNYXJrZXJzKSB7XG4gICAgICB0aGlzLmFjaXR2ZU1vZGVsTWFya2VycygpO1xuICAgIH1cblxuICB9XG4gIFxuICAvKipcbiAgICogQWNpdHZlIE1vZGVsIG1hcmtlcnMgdG8gZ2V0IG1hcmtlcnMnIHJlc3VsdHNcbiAgICovXG4gIGFjaXR2ZU1vZGVsTWFya2VycygpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9tb25hY28tZWRpdG9yL2lzc3Vlcy8zMFxuICAgIGNvbnN0IHNldE1vZGVsTWFya2VycyA9IG1vbmFjby5lZGl0b3Iuc2V0TW9kZWxNYXJrZXJzO1xuICAgIG1vbmFjby5lZGl0b3Iuc2V0TW9kZWxNYXJrZXJzID0gZnVuY3Rpb24gKG1vZGVsLCBvd25lciwgbWFya2Vycykge1xuICAgICAgc2V0TW9kZWxNYXJrZXJzLmNhbGwobW9uYWNvLmVkaXRvciwgbW9kZWwsIG93bmVyLCBtYXJrZXJzKTtcbiAgICAgIGlmIChtYXJrZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyB0aGVyZSBhcmUgbm8gZXJyb3JzKHN5bnggZXJyb3IgYW5kIHZhbGlkYXRlIGVycm9yKVxuICAgICAgICAvLyBjb25zb2xlLmxvZygnY29udGludWUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoZXJlIGFyZSBlcnJvcnNcbiAgICAgICAgc2VsZi5fZXJyb3JJbk1vZGVsTWFya2VyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIHJlZnJlc2ggbGF5b3V0IHdoZW4gcmVzaXplZCB0aGUgd2luZG93XG4gICAqL1xuICByZWZyZXNoTGF5b3V0V2hlbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICBpZiAodGhpcy5fd2luZG93UmVzaXplU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl93aW5kb3dSZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgLy8gZnJvbUV2ZW5055So5LqO5YW85ZCs5LqL5Lu277yM5LqL5Lu26Kem5Y+R5pe277yM5bCG5LqL5Lu2ZXZlbnTovazmiJDlj6/mtYHliqjnmoRPYnNlcnZhYmxl6L+b6KGM5Lyg6L6TXG4gICAgLy8gaHR0cHM6Ly93d3cuamlhbnNodS5jb20vcC80Njg5NGRlYjg3MGFcbiAgICB0aGlzLl93aW5kb3dSZXNpemVTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykuc3Vic2NyaWJlKCgpID0+IHRoaXMuZWRpdG9yLmxheW91dCgpKTtcbiAgfVxuXG4gIG9uQ2hhbmdlTW9kZWxDb250ZW50SGFuZGxlcihlKSB7XG4gICAgY29uc3QgX3ZhbHVlID0gdGhpcy5lZGl0b3IuZ2V0VmFsdWUoKTtcblxuICAgIC8vIG1vbmFjbyBlZGl0b3IgLT4gb3V0c2lkZSBjb21wb25lbnRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSlRhbmdtaW5nL3RtL2lzc3Vlcy80IG5nWm9uZeivpuino1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy52YWx1ZSA9IF92YWx1ZSk7IC8vIHZhbHVlIGlzIG5vdCBwcm9wYWdhdGVkIHRvIHBhcmVudCB3aGVuIGV4ZWN1dGluZyBvdXRzaWRlIHpvbmUuXG4gIH1cblxuICBvbkJsdXJFZGl0b3JUZXh0SGFuZGxlcihlKSB7XG5cbiAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQoKTtcbiAgfVxuXG4gIG9uTGF5b3V0Q2hhbmdlSGFuZGxlcihlKSB7XG4gICAgY29uc29sZS5sb2coJ0xheW91dCBjaGFuZ2VkOlxcbicgKyBlKTtcbiAgfVxuXG4gIC8vIGdldCBhY2Nlc3NvclxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICAvLyBzZXQgYWNjZXNzb3IgaW5jbHVkaW5nIGNhbGwgdGhlIG9uY2hhbmdlIGNhbGxiYWNrXG4gIHNldCB2YWx1ZSh2OiBhbnkpIHtcbiAgICBpZiAodiAhPT0gdGhpcy52YWx1ZSkgey8vIOazqOaEj+i/meenjeWGmeazle+8jOWAvOW+l+WtpuS5oFxuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgIH1cblxuICAgIHRoaXMub25Db250cm9sVmFsdWVDaGFuZ2UodGhpcy52YWx1ZSk7IC8vIOWcqOWxnuaAp+S/rumlsOWZqOmHjOiwg+eUqG9uQ29udHJvbFZhbHVlQ2hhbmdl5pa55rOVXG4gIH1cblxuICBsb2NhbEVkaXRvcigpIHsvLyBEZW1vOiBvdXRzaWRlIGNvbXBvbmVudCAtPiBtb25hY28gZWRpdG9yXG4gICAgdGhpcy53cml0ZVZhbHVlKCd0ZXN0Jyk7XG4gIH1cblxuICAvLyBvdXRzaWRlIGNvbXBvbmVudCAtPiBtb25hY28gZWRpdG9yXG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi52YWx1ZSA9IHZhbHVlIHx8ICcnO1xuXG4gICAgLy8gRml4IGZvciB2YWx1ZSBjaGFuZ2Ugd2hpbGUgZGlzcG9zZSBpbiBwcm9jZXNzXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoc2VsZi5lZGl0b3IgLyomJiAhdGhpcy5vcHRpb25zLm1vZGVsKi8pIHtcbiAgICAgICAgc2VsZi5lZGl0b3Iuc2V0VmFsdWUoc2VsZi5fdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5vbkNvbnRyb2xWYWx1ZUNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Db250cm9sVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3Lmj5DkvpvnmoTkuovku7blm57osINcbiAgb25Db250cm9sVmFsdWVDaGFuZ2UgPSAoXzogYW55KSA9PiB7XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvcuaPkOS+m+eahOS6i+S7tuWbnuiwg1xuICBvbkNvbnRyb2xUb3VjaGVkID0gKCkgPT4ge1xuICB9XG5cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tb25hY28tZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci8iLCJzb3VyY2VzIjpbImxpYi9lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yL2FuZ3VsYXItbW9uYWNvLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQTZCLE1BQU0saUJBQWlCLENBQUM7QUFDMUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMENBQTBDLENBQUM7OztBQU10RixNQUFNLENBQUMscUJBQU0sZ0NBQWdDLEdBQVE7O0lBRW5ELE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEsNEJBQTRCLEVBQTVCLENBQTRCLENBQUM7SUFDM0QsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDOztJQWlCZ0Qsd0RBQWdCO0lBYWhFLDJDQUEyQztJQUMzQyxzQ0FBb0IsMEJBQXNELEVBQ2hFLE1BQ0Esb0JBQ3NDO1FBSGhELFlBSUUsa0JBQU0sa0JBQWtCLEVBQUUsbUJBQW1CLENBQUMsU0FDL0M7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QVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDcEM7U0FDRixDQUFDLENBQUM7S0FDSjtJQUVELHNDQUFzQzs7Ozs7SUFDdEMsdURBQWdCOzs7O0lBQWhCLFVBQWlCLEVBQU87UUFDdEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztLQUNoQztJQUVELHNDQUFzQzs7Ozs7SUFDdEMsd0RBQWlCOzs7O0lBQWpCLFVBQWtCLEVBQU87UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztLQUM1Qjs7Z0JBM0lGLFNBQVMsU0FBQzs7b0JBRVQsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsUUFBUSxFQUFFLDBDQUF3QztvQkFDbEQsTUFBTSxFQUFFLENBQUMsc0VBQXNFLENBQUM7O29CQUVoRixTQUFTLEVBQUU7d0JBQ1QsZ0NBQWdDO3dCQUNoQyxzQkFBc0I7cUJBQ3ZCO2lCQUNGOzs7O2dCQXZCUSwwQkFBMEI7Z0JBVE4sTUFBTTtnQkFLMUIsc0JBQXNCO2dEQWlEMUIsTUFBTSxTQUFDLDRCQUE0Qjs7OzBCQWZyQyxLQUFLLFNBQUMsT0FBTzs7dUNBeENoQjtFQXNDa0QsZ0JBQWdCO1NBQXJELDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiwgSW5qZWN0LCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMvb2JzZXJ2YWJsZS9mcm9tRXZlbnQnO1xuXG5pbXBvcnQgeyBBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHLCBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWwvY29uZmlnJztcbmltcG9ydCB7IENvZGVFZGl0b3JFdmVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL2NvZGUtZWRpdG9yLmV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09ERV9FRElUT1JfRVZFTlRTIH0gZnJvbSAnLi4vY29uc3RhbnQvZXZlbnRzJztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3JNb2RlbCB9IGZyb20gJy4uL21vZGVsL3R5cGVzJztcbmltcG9ydCB7IEJhc2VNb25hY29FZGl0b3IgfSBmcm9tICcuLi9tb2RlbC9iYXNlLW1vbmFjby1lZGl0b3InO1xuaW1wb3J0IHsgQW5ndWxhck1vbmFjb0VkaXRvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL2FuZ3VsYXItbW9uYWNvLWVkaXRvci5zZXJ2aWNlJztcblxuZGVjbGFyZSBjb25zdCBtb25hY286IGFueTtcblxuLy8g6Ieq5a6a5LmJ6L6T5YWl5o6n5Lu2OjEu5bCB6KOFQ29udHJvbFZhbHVlQWNjZXNzb3Jcbi8vIGh0dHBzOi8vY29kZS1leGFtcGxlcy5uZXQvemgtQ04vcS8yMTU0NzYxXG5leHBvcnQgY29uc3QgQ09ERV9FRElUT1JfSU5QVVRfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgLy8gaHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmdkYW5fMjAxMy9hcnRpY2xlL2RldGFpbHMvODEzMTQ5NTlcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFuZ3VsYXJNb25hY29FZGl0b3JDb21wb25lbnQpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhbmd1bGFyLW1vbmFjby1lZGl0b3InLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJlZGl0b3JcIiAjY29kZUVkaXRvcj48L2Rpdj5gLFxuICBzdHlsZXM6IFtgOmhvc3R7ZGlzcGxheTpibG9jazttaW4taGVpZ2h0OjIwMHB4fS5lZGl0b3J7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX1gXSxcbiAgLy8g6Ieq5a6a5LmJ6L6T5YWl5o6n5Lu2OjIu5byV5YWl5L6d6LWW5pyN5YqhQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgcHJvdmlkZXJzOiBbXG4gICAgQ09ERV9FRElUT1JfSU5QVVRfVkFMVUVfQUNDRVNTT1IsIFxuICAgIENvZGVFZGl0b3JFdmVudFNlcnZpY2VcbiAgXVxufSlcblxuLy8g6Ieq5a6a5LmJ6L6T5YWl5o6n5Lu2IDwtPiBNb25hY28gRWR0b3JcblxuLy8g6Ieq5a6a5LmJ6L6T5YWl5o6n5Lu2OjMuMSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG5leHBvcnQgY2xhc3MgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudCBleHRlbmRzIEJhc2VNb25hY29FZGl0b3IgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgQElucHV0KCdtb2RlbCcpXG4gIHNldCBtb2RlbChtb2RlbDogQW5ndWxhckVkaXRvck1vZGVsKSB7XG4gICAgdGhpcy5vcHRpb25zLm1vZGVsID0gbW9kZWw7XG4gICAgaWYgKHRoaXMuX2VkaXRvcikge1xuICAgICAgdGhpcy5fZWRpdG9yLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuaW5pdE1vbmFjbyh0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3ZhbHVlID0gJyc7XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFuZ3VsYXJNb25hY29FZGl0b3JTZXJ2aWNlOiBBbmd1bGFyTW9uYWNvRWRpdG9yU2VydmljZSxcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGVkaXRvckV2ZW50U2VydmljZTogQ29kZUVkaXRvckV2ZW50U2VydmljZSxcbiAgICBASW5qZWN0KEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcpIHByaXZhdGUgYW5ndWxhckVkaXRvcmNvbmZpZzogQW5ndWxhck1vbmFjb0VkaXRvckNvbmZpZykge1xuICAgIHN1cGVyKGVkaXRvckV2ZW50U2VydmljZSwgYW5ndWxhckVkaXRvcmNvbmZpZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdE1vbmFjbyhvcHRpb25zOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBoYXNNb2RlbCA9ICEhb3B0aW9ucy5tb2RlbDtcblxuICAgIGlmIChoYXNNb2RlbCkge1xuICAgICAgb3B0aW9ucy5tb2RlbCA9IG1vbmFjby5lZGl0b3IuY3JlYXRlTW9kZWwob3B0aW9ucy5tb2RlbC52YWx1ZSwgb3B0aW9ucy5tb2RlbC5sYW5ndWFnZSwgb3B0aW9ucy5tb2RlbC51cmkpO1xuICAgIH1cblxuICAgIHRoaXMuX2VkaXRvciA9IG1vbmFjby5lZGl0b3IuY3JlYXRlKHRoaXMuX2VkaXRvckNvbXBvbmVudC5uYXRpdmVFbGVtZW50LCBvcHRpb25zKTtcblxuICAgIGlmICghaGFzTW9kZWwpIHtcbiAgICAgIHRoaXMuX2VkaXRvci5zZXRWYWx1ZSh0aGlzLl92YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gbW9uYWNvIGVkaXRvciAtPiBvdXRzaWRlIGNvbXBvbmVudFxuICAgIHRoaXMuX2VkaXRvci5vbkRpZENoYW5nZU1vZGVsQ29udGVudCgoZTogYW55KSA9PiB0aGlzLm9uQ2hhbmdlTW9kZWxDb250ZW50SGFuZGxlcihlKSk7XG5cbiAgICB0aGlzLl9lZGl0b3Iub25EaWRCbHVyRWRpdG9yVGV4dCgoZTogYW55KSA9PiB0aGlzLm9uQmx1ckVkaXRvclRleHRIYW5kbGVyKGUpKTtcblxuICAgIHRoaXMuX2VkaXRvci5vbkRpZExheW91dENoYW5nZSgoZTogYW55KSA9PiB0aGlzLm9uTGF5b3V0Q2hhbmdlSGFuZGxlcihlKSk7XG5cbiAgICAvLyByZWZyZXNoIGxheW91dCBvbiByZXNpemUgZXZlbnQuXG4gICAgdGhpcy5yZWZyZXNoTGF5b3V0V2hlbldpbmRvd1Jlc2l6ZSgpO1xuXG4gICAgdGhpcy5lZGl0b3JFdmVudFNlcnZpY2UuZmlyZUV2ZW50KHtcbiAgICAgIGV2ZW50TmFtZTogQ09ERV9FRElUT1JfRVZFTlRTLm9uSW5pdCxcbiAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgIGVkaXRvcjogdGhpcy5fZWRpdG9yXG4gICAgfSk7XG5cbiAgICBpZiAoaGFzTW9kZWwpIHtcbiAgICAgIHRoaXMuYW5ndWxhck1vbmFjb0VkaXRvclNlcnZpY2UuaGFuZGxlTW9kZWxNYXJrZXJzKCk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogcmVmcmVzaCBsYXlvdXQgd2hlbiByZXNpemVkIHRoZSB3aW5kb3dcbiAgICovXG4gIHJlZnJlc2hMYXlvdXRXaGVuV2luZG93UmVzaXplKCkge1xuICAgIGlmICh0aGlzLl93aW5kb3dSZXNpemVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvLyBmcm9tRXZlbnTnlKjkuo7lhbzlkKzkuovku7bvvIzkuovku7bop6blj5Hml7bvvIzlsIbkuovku7ZldmVudOi9rOaIkOWPr+a1geWKqOeahE9ic2VydmFibGXov5vooYzkvKDovpNcbiAgICAvLyBodHRwczovL3d3dy5qaWFuc2h1LmNvbS9wLzQ2ODk0ZGViODcwYVxuICAgIHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZWRpdG9yLmxheW91dCgpKTtcbiAgfVxuXG4gIG9uQ2hhbmdlTW9kZWxDb250ZW50SGFuZGxlcihlKSB7XG4gICAgY29uc3QgX3ZhbHVlID0gdGhpcy5fZWRpdG9yLmdldFZhbHVlKCk7XG5cbiAgICAvLyBtb25hY28gZWRpdG9yIC0+IG91dHNpZGUgY29tcG9uZW50XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0pUYW5nbWluZy90bS9pc3N1ZXMvNCBuZ1pvbmXor6bop6NcbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMudmFsdWUgPSBfdmFsdWUpOyAvLyB2YWx1ZSBpcyBub3QgcHJvcGFnYXRlZCB0byBwYXJlbnQgd2hlbiBleGVjdXRpbmcgb3V0c2lkZSB6b25lLlxuICB9XG5cbiAgb25CbHVyRWRpdG9yVGV4dEhhbmRsZXIoZSkge1xuXG4gICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkKCk7XG4gIH1cblxuICBvbkxheW91dENoYW5nZUhhbmRsZXIoZSkge1xuICAgIGNvbnNvbGUubG9nKCdMYXlvdXQgY2hhbmdlZDpcXG4nICsgZSk7XG4gIH1cblxuICAvLyBnZXQgYWNjZXNzb3JcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgLy8gc2V0IGFjY2Vzc29yIGluY2x1ZGluZyBjYWxsIHRoZSBvbmNoYW5nZSBjYWxsYmFja1xuICBzZXQgdmFsdWUodjogYW55KSB7XG4gICAgaWYgKHYgIT09IHRoaXMudmFsdWUpIHsvLyDms6jmhI/ov5nnp43lhpnms5XvvIzlgLzlvpflrabkuaBcbiAgICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB9XG5cbiAgICB0aGlzLm9uQ29udHJvbFZhbHVlQ2hhbmdlKHRoaXMudmFsdWUpOyAvLyDlnKjlsZ7mgKfkv67ppbDlmajph4zosIPnlKhvbkNvbnRyb2xWYWx1ZUNoYW5nZeaWueazlVxuICB9XG5cbiAgLy8g6Ieq5a6a5LmJ6L6T5YWl5o6n5Lu2OjMuMiBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29cblxuICAvLyBvdXRzaWRlIGNvbXBvbmVudCAtPiBtb25hY28gZWRpdG9yXG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi52YWx1ZSA9IHZhbHVlIHx8ICcnO1xuXG4gICAgLy8gRml4IGZvciB2YWx1ZSBjaGFuZ2Ugd2hpbGUgZGlzcG9zZSBpbiBwcm9jZXNzLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHNlbGYuX2VkaXRvciAvKiYmICF0aGlzLm9wdGlvbnMubW9kZWwqLykge1xuICAgICAgICBzZWxmLl9lZGl0b3Iuc2V0VmFsdWUoc2VsZi5fdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5vbkNvbnRyb2xWYWx1ZUNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Db250cm9sVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3Lmj5DkvpvnmoTkuovku7blm57osINcbiAgb25Db250cm9sVmFsdWVDaGFuZ2UgPSAoXzogYW55KSA9PiB7XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvcuaPkOS+m+eahOS6i+S7tuWbnuiwg1xuICBvbkNvbnRyb2xUb3VjaGVkID0gKCkgPT4ge1xuICB9XG5cbn1cbiJdfQ==

@@ -7,3 +7,3 @@ /**

import { NgModule } from '@angular/core';
import { ANGULAR_MONACO_EDITOR_CONFIG } from './config';
import { ANGULAR_MONACO_EDITOR_CONFIG } from './model/config';
import { AngularMonacoEditorComponent } from './angular-monaco-editor/angular-monaco-editor.component';

@@ -57,2 +57,2 @@ var AngularMonacoEditorModule = /** @class */ (function () {

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci8iLCJzb3VyY2VzIjpbImxpYi9lZGl0b3IvZWRpdG9yLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSw0QkFBNEIsRUFBNkIsTUFBTSxVQUFVLENBQUM7QUFDbkYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seURBQXlELENBQUM7Ozs7Ozs7O0lBaUJ2RixpQ0FBTzs7OztjQUFDLE1BQXNDO1FBQXRDLHVCQUFBLEVBQUEsV0FBc0M7UUFDMUQsTUFBTSxDQUFDO1lBQ0wsUUFBUSxFQUFFLHlCQUF5QjtZQUNuQyxTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTthQUM1RDtTQUNGLENBQUM7OztnQkFyQkwsUUFBUSxTQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3FCQUNiO29CQUNELFlBQVksRUFBRTt3QkFDWiw0QkFBNEI7cUJBQzdCO29CQUNELE9BQU8sRUFBRTt3QkFDUCw0QkFBNEI7cUJBQzdCO29CQUNELFNBQVMsRUFBRSxFQUNWO2lCQUNGOztvQ0FsQkQ7O1NBb0JhLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHLCBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vYW5ndWxhci1tb25hY28tZWRpdG9yL2FuZ3VsYXItbW9uYWNvLWVkaXRvci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEFuZ3VsYXJNb25hY29FZGl0b3JDb21wb25lbnRcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEFuZ3VsYXJNb25hY29FZGl0b3JDb21wb25lbnRcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBBbmd1bGFyTW9uYWNvRWRpdG9yTW9kdWxlIHtcbiAgcHVibGljIHN0YXRpYyBmb3JSb290KGNvbmZpZzogQW5ndWxhck1vbmFjb0VkaXRvckNvbmZpZyA9IHt9KTogTW9kdWxlV2l0aFByb3ZpZGVycyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBBbmd1bGFyTW9uYWNvRWRpdG9yTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZyB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci8iLCJzb3VyY2VzIjpbImxpYi9lZGl0b3IvZWRpdG9yLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSw0QkFBNEIsRUFBNkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQzs7Ozs7Ozs7SUFpQnZGLGlDQUFPOzs7O2NBQUMsTUFBc0M7UUFBdEMsdUJBQUEsRUFBQSxXQUFzQztRQUMxRCxNQUFNLENBQUM7WUFDTCxRQUFRLEVBQUUseUJBQXlCO1lBQ25DLFNBQVMsRUFBRTtnQkFDVCxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO2FBQzVEO1NBQ0YsQ0FBQzs7O2dCQXJCTCxRQUFRLFNBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7cUJBQ2I7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLDRCQUE0QjtxQkFDN0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLDRCQUE0QjtxQkFDN0I7b0JBQ0QsU0FBUyxFQUFFLEVBQ1Y7aUJBQ0Y7O29DQWxCRDs7U0FvQmEseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcsIEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgfSBmcm9tICcuL21vZGVsL2NvbmZpZyc7XG5pbXBvcnQgeyBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9hbmd1bGFyLW1vbmFjby1lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgXVxufSlcblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJNb25hY29FZGl0b3JNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFuZ3VsYXJNb25hY29FZGl0b3JNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG4iXX0=

@@ -6,4 +6,4 @@ /**

export { AngularMonacoEditorModule } from './lib/editor/editor.module';
export { ANGULAR_MONACO_EDITOR_CONFIG } from './lib/editor/config';
export { ANGULAR_MONACO_EDITOR_CONFIG } from './lib/editor/model/config';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci8iLCJzb3VyY2VzIjpbInB1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDBDQUFjLDRCQUE0QixDQUFDO0FBQzNDLDZDQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvZWRpdG9yL2VkaXRvci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWRpdG9yL2NvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lZGl0b3IvdHlwZXMnOyJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci8iLCJzb3VyY2VzIjpbInB1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDBDQUFjLDRCQUE0QixDQUFDO0FBQzNDLDZDQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvZWRpdG9yL2VkaXRvci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWRpdG9yL21vZGVsL2NvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lZGl0b3IvbW9kZWwvdHlwZXMnOyJdfQ==

@@ -81,15 +81,2 @@ import { InjectionToken, Injectable, Input, Output, ViewChild, EventEmitter, Component, forwardRef, Inject, NgZone, NgModule } from '@angular/core';

/**
* @return {?}
*/
get editor() {
return this._editor;
}
/**
* @param {?} value
* @return {?}
*/
set editor(value) {
this._editor = value;
}
/**
* @param {?} options

@@ -99,3 +86,3 @@ * @return {?}

set options(options) {
// default options(this.config.defaultOptions) + custom options(options)
// 默认options(this.config.defaultOptions) + 自定义options(options)
this._options = Object.assign({}, this.config.defaultOptions, options);

@@ -179,2 +166,38 @@ if (this._editor) {

*/
class AngularMonacoEditorService {
constructor() {
this._existError = false;
}
/**
* @return {?}
*/
get existError() {
return this._existError;
}
/**
* @return {?}
*/
handleModelMarkers() {
var /** @type {?} */ self = this;
// https://github.com/Microsoft/monaco-editor/issues/30
const /** @type {?} */ setModelMarkers = monaco.editor.setModelMarkers;
monaco.editor.setModelMarkers = function (model, owner, markers) {
setModelMarkers.call(monaco.editor, model, owner, markers);
if (markers.length === 0) ;
else {
// there are errors
self._existError = true;
}
};
}
}
AngularMonacoEditorService.decorators = [
{ type: Injectable },
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
// 自定义输入控件:1.封装ControlValueAccessor
// https://code-examples.net/zh-CN/q/2154761

@@ -187,4 +210,7 @@ const /** @type {?} */ CODE_EDITOR_INPUT_VALUE_ACCESSOR = {

};
// 自定义输入控件 <-> Monaco Edtor
// 自定义输入控件:3.1 implements ControlValueAccessor
class AngularMonacoEditorComponent extends BaseMonacoEditor {
/**
* @param {?} angularMonacoEditorService
* @param {?} zone

@@ -194,4 +220,5 @@ * @param {?} editorEventService

*/
constructor(zone, editorEventService, angularEditorconfig) {
constructor(angularMonacoEditorService, zone, editorEventService, angularEditorconfig) {
super(editorEventService, angularEditorconfig);
this.angularMonacoEditorService = angularMonacoEditorService;
this.zone = zone;

@@ -201,3 +228,2 @@ this.editorEventService = editorEventService;

this._value = '';
this._errorInModelMarker = false;
// ControlValueAccessor提供的事件回调

@@ -216,4 +242,4 @@ this.onControlValueChange = (_) => {

this.options.model = model;
if (this.editor) {
this.editor.dispose();
if (this._editor) {
this._editor.dispose();
this.initMonaco(this.options);

@@ -223,8 +249,2 @@ }

/**
* @return {?}
*/
get errorInModelMarker() {
return this._errorInModelMarker;
}
/**
* @param {?} options

@@ -235,14 +255,13 @@ * @return {?}

const /** @type {?} */ hasModel = !!options.model;
const /** @type {?} */ acitveMarkers = !!options.acitveMarkers; //自定义option
if (hasModel) {
options.model = monaco.editor.createModel(options.model.value, options.model.language, options.model.uri);
}
this.editor = monaco.editor.create(this._editorComponent.nativeElement, options);
this._editor = monaco.editor.create(this._editorComponent.nativeElement, options);
if (!hasModel) {
this.editor.setValue(this._value);
this._editor.setValue(this._value);
}
// monaco editor -> outside component
this.editor.onDidChangeModelContent((e) => this.onChangeModelContentHandler(e));
this.editor.onDidBlurEditorText((e) => this.onBlurEditorTextHandler(e));
this.editor.onDidLayoutChange((e) => this.onLayoutChangeHandler(e));
this._editor.onDidChangeModelContent((e) => this.onChangeModelContentHandler(e));
this._editor.onDidBlurEditorText((e) => this.onBlurEditorTextHandler(e));
this._editor.onDidLayoutChange((e) => this.onLayoutChangeHandler(e));
// refresh layout on resize event.

@@ -253,27 +272,9 @@ this.refreshLayoutWhenWindowResize();

target: this,
editor: this.editor
editor: this._editor
});
// active model markers
if (hasModel && acitveMarkers) {
this.acitveModelMarkers();
if (hasModel) {
this.angularMonacoEditorService.handleModelMarkers();
}
}
/**
* Acitve Model markers to get markers' results
* @return {?}
*/
acitveModelMarkers() {
var /** @type {?} */ self = this;
// https://github.com/Microsoft/monaco-editor/issues/30
const /** @type {?} */ setModelMarkers = monaco.editor.setModelMarkers;
monaco.editor.setModelMarkers = function (model, owner, markers) {
setModelMarkers.call(monaco.editor, model, owner, markers);
if (markers.length === 0) ;
else {
// there are errors
self._errorInModelMarker = true;
}
};
}
/**
* refresh layout when resized the window

@@ -288,3 +289,3 @@ * @return {?}

// https://www.jianshu.com/p/46894deb870a
this._windowResizeSubscription = fromEvent(window, 'resize').subscribe(() => this.editor.layout());
this._windowResizeSubscription = fromEvent(window, 'resize').subscribe(() => this._editor.layout());
}

@@ -296,3 +297,3 @@ /**

onChangeModelContentHandler(e) {
const /** @type {?} */ _value = this.editor.getValue();
const /** @type {?} */ _value = this._editor.getValue();
// monaco editor -> outside component

@@ -334,9 +335,2 @@ // https://github.com/JTangming/tm/issues/4 ngZone详解

/**
* @return {?}
*/
localEditor() {
// Demo: outside component -> monaco editor
this.writeValue('test');
}
/**
* @param {?} value

@@ -348,6 +342,6 @@ * @return {?}

self.value = value || '';
// Fix for value change while dispose in process
// Fix for value change while dispose in process.
setTimeout(() => {
if (self.editor /*&& !this.options.model*/) {
self.editor.setValue(self._value);
if (self._editor /*&& !this.options.model*/) {
self._editor.setValue(self._value);
}

@@ -377,3 +371,7 @@ });

styles: [`:host{display:block;min-height:200px}.editor{width:100%;height:100%}`],
providers: [CODE_EDITOR_INPUT_VALUE_ACCESSOR, CodeEditorEventService]
// 自定义输入控件:2.引入依赖服务ControlValueAccessor
providers: [
CODE_EDITOR_INPUT_VALUE_ACCESSOR,
CodeEditorEventService
]
},] },

@@ -383,2 +381,3 @@ ];

AngularMonacoEditorComponent.ctorParameters = () => [
{ type: AngularMonacoEditorService, },
{ type: NgZone, },

@@ -435,4 +434,4 @@ { type: CodeEditorEventService, },

export { AngularMonacoEditorModule, ANGULAR_MONACO_EDITOR_CONFIG, AngularMonacoEditorComponent as ɵb, CODE_EDITOR_INPUT_VALUE_ACCESSOR as ɵa, BaseMonacoEditor as ɵc, CodeEditorEventService as ɵd };
export { AngularMonacoEditorModule, ANGULAR_MONACO_EDITOR_CONFIG, AngularMonacoEditorComponent as ɵb, CODE_EDITOR_INPUT_VALUE_ACCESSOR as ɵa, BaseMonacoEditor as ɵc, AngularMonacoEditorService as ɵe, CodeEditorEventService as ɵd };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tb25hY28tZWRpdG9yLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9hbmd1bGFyLW1vbmFjby1lZGl0b3IvbGliL2VkaXRvci9jb25maWcudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2NvbnN0YW50cy9ldmVudHMudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL3NlcnZpY2VzL2NvZGUtZWRpdG9yLmV2ZW50LnNlcnZpY2UudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2Jhc2UtbW9uYWNvLWVkaXRvci50cyIsIm5nOi8vYW5ndWxhci1tb25hY28tZWRpdG9yL2xpYi9lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yL2FuZ3VsYXItbW9uYWNvLWVkaXRvci5jb21wb25lbnQudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2VkaXRvci5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLy8gaW5qZWN0aW9uVG9rZW7DpMK9wpzDp8KUwqjDqMKvwrTDpsKYwo5cbi8vIGh0dHBzOi8vc2VnbWVudGZhdWx0LmNvbS9hLzExOTAwMDAwMDg2MjYzNDhcbmV4cG9ydCBjb25zdCBBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuKCdBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5ndWxhck1vbmFjb0VkaXRvckNvbmZpZyB7XG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIGRlZmF1bHRPcHRpb25zPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gIG9uTW9uYWNvTG9hZD86IEZ1bmN0aW9uO1xufVxuIiwiZXhwb3J0IGNvbnN0IENPREVfRURJVE9SX0VWRU5UUyA9IHtcbiAgICBvbkluaXQ6ICdvbkluaXQnXG59O1xuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBDT0RFX0VESVRPUl9FVkVOVFMgfSBmcm9tICcuLi9jb25zdGFudHMvZXZlbnRzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvZGVFZGl0b3JFdmVudFNlcnZpY2Uge1xuICAgIHB1YmxpYyBldmVudE5hbWVzID0gT2JqZWN0LmtleXMoQ09ERV9FRElUT1JfRVZFTlRTKTtcbiAgICBwcml2YXRlIF9ldmVudHM6IGFueSA9IHt9OyAvLyDDpMK9wr/Dp8KUwqjDpMK6wovDpMK7wrZcblxuICAgIC8qKlxuICAgICAqIMOowq7CvsOnwr3CrsOlwpDCr8OnwpTCqMOkwrrCi8OkwrvCtlxuICAgICAqIEBwYXJhbSAgw6TCusKLw6TCu8K2XG4gICAgICovXG4gICAgYWRkRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgYXNzaWduKHRoaXMuX2V2ZW50cywgZXZlbnQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmV2ZW50cyk7XG4gICAgfVxuXG4gICAgZmlyZUV2ZW50KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2V2ZW50c1tldmVudC5ldmVudE5hbWVdLmVtaXQoZXZlbnQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkVtaXQgRXZlbnQ6XCIgKyBldmVudCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LCBWaWV3Q2hpbGQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHBpY2sgfSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQ29kZUVkaXRvckV2ZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY29kZS1lZGl0b3IuZXZlbnQuc2VydmljZSc7XG5cbmxldCBsb2FkZWRNb25hY28gPSBmYWxzZTtcbmxldCBsb2FkUHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VNb25hY29FZGl0b3IgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgX2VkaXRvcjogYW55O1xuICBnZXQgZWRpdG9yKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRvcjtcbiAgfVxuICBzZXQgZWRpdG9yKHZhbHVlKSB7XG4gICAgdGhpcy5fZWRpdG9yID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9vcHRpb25zOiBhbnk7XG4gIHByb3RlY3RlZCBfd2luZG93UmVzaXplU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgQFZpZXdDaGlsZCgnY29kZUVkaXRvcicpIF9lZGl0b3JDb21wb25lbnQ6IEVsZW1lbnRSZWY7IC8vIMOlworCqMOmwoDCgcOmwrfCu8OlworCoMOkwrvCo8OnwqDCgcOnwrzClsOowr7CkcOlwpnCqFxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1vdXRwdXQtb24tcHJlZml4XG4gIEBPdXRwdXQoKSBvbkluaXQ7XG5cbiAgQElucHV0KCdvcHRpb25zJylcbiAgc2V0IG9wdGlvbnMob3B0aW9uczogYW55KSB7XG4gICAgLy8gZGVmYXVsdCBvcHRpb25zKHRoaXMuY29uZmlnLmRlZmF1bHRPcHRpb25zKSArIGN1c3RvbSBvcHRpb25zKG9wdGlvbnMpXG4gICAgdGhpcy5fb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnLmRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICBpZiAodGhpcy5fZWRpdG9yKSB7XG4gICAgICB0aGlzLl9lZGl0b3IuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5pbml0TW9uYWNvKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBnZXQgb3B0aW9ucygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb2RlRWRpdG9yRXZlbnRTZXJ2aWNlOiBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlLCBwcml2YXRlIGNvbmZpZzogQW5ndWxhck1vbmFjb0VkaXRvckNvbmZpZykge1xuICAgIC8vIMOlwojCncOlwqfCi8OlwozClsOowofCqsOlwq7CmsOkwrnCicOkwrrCi8OkwrvCtlxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvZGVFZGl0b3JFdmVudFNlcnZpY2UuZXZlbnROYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAvLyDDpcKIwpvDpcK7wrrDqMKHwqrDpcKuwprDpMK5wonDpMK6wovDpMK7wrbDr8K8wozDpsKtwqTDpcKkwoTDpMK9wpzDp8KUwqjDp8KtwonDpsKVwojDpMK6wo46IEBPdXRwdXQoKSBvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICAgICAgc2VsZltuYW1lXSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgICAgY29uc3QgZXZlbnRQYWlyID0gcGljayhzZWxmLCBuYW1lKTtcbiAgICAgIGNvZGVFZGl0b3JFdmVudFNlcnZpY2UuYWRkRXZlbnQoZXZlbnRQYWlyKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAobG9hZGVkTW9uYWNvKSB7XG4gICAgICAvLyBXYWl0IHVudGlsIG1vbmFjbyBlZGl0b3IgaXMgYXZhaWxhYmxlXG4gICAgICBsb2FkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5pbml0TW9uYWNvKHRoaXMub3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9hZGVkTW9uYWNvID0gdHJ1ZTtcbiAgICAgIGxvYWRQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5jb25maWcuYmFzZVVybCB8fCAnL2Fzc2V0cyc7XG4gICAgICAgIC8vIGlmICh0eXBlb2YoKDxhbnk+d2luZG93KS5tb25hY28pID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyAgIHJlc29sdmUoKTtcbiAgICAgICAgLy8gICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgY29uc3Qgb25Hb3RBbWRMb2FkZXI6IGFueSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBMb2FkIG1vbmFjb1xuICAgICAgICAgICg8YW55PndpbmRvdykucmVxdWlyZS5jb25maWcoeyBwYXRoczogeyAndnMnOiBgJHtiYXNlVXJsfS9tb25hY28vdnNgIH0gfSk7XG4gICAgICAgICAgKDxhbnk+d2luZG93KS5yZXF1aXJlKFsndnMvZWRpdG9yL2VkaXRvci5tYWluJ10sICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcub25Nb25hY29Mb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLm9uTW9uYWNvTG9hZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbml0TW9uYWNvKHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gTG9hZCBBTUQgbG9hZGVyIGlmIG5lY2Vzc2FyeVxuICAgICAgICBpZiAoISg8YW55PndpbmRvdykucmVxdWlyZSkge1xuICAgICAgICAgIGNvbnN0IGxvYWRlclNjcmlwdDogSFRNTFNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICBsb2FkZXJTY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgICAgIGxvYWRlclNjcmlwdC5zcmMgPSBgJHtiYXNlVXJsfS9tb25hY28vdnMvbG9hZGVyLmpzYDtcbiAgICAgICAgICBsb2FkZXJTY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIG9uR290QW1kTG9hZGVyKTtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxvYWRlclNjcmlwdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb25Hb3RBbWRMb2FkZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gTW9uYWNvIEVkaXRvciBJbml0aWFsaXplclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW5pdE1vbmFjbyhvcHRpb25zOiBhbnkpOiB2b2lkO1xuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLl93aW5kb3dSZXNpemVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9lZGl0b3IpIHtcbiAgICAgIHRoaXMuX2VkaXRvci5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9lZGl0b3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3J3YXJkUmVmLCBJbmplY3QsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcy9vYnNlcnZhYmxlL2Zyb21FdmVudCc7XG5cbmltcG9ydCB7IEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcsIEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgQ29kZUVkaXRvckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvZGUtZWRpdG9yLmV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09ERV9FRElUT1JfRVZFTlRTIH0gZnJvbSAnLi4vY29uc3RhbnRzL2V2ZW50cyc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yTW9kZWwgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBCYXNlTW9uYWNvRWRpdG9yIH0gZnJvbSAnLi4vYmFzZS1tb25hY28tZWRpdG9yJztcblxuZGVjbGFyZSBjb25zdCBtb25hY286IGFueTtcblxuLy8gaHR0cHM6Ly9jb2RlLWV4YW1wbGVzLm5ldC96aC1DTi9xLzIxNTQ3NjFcbmV4cG9ydCBjb25zdCBDT0RFX0VESVRPUl9JTlBVVF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICAvLyBodHRwczovL2Jsb2cuY3Nkbi5uZXQvd2FuZ2Rhbl8yMDEzL2FydGljbGUvZGV0YWlscy84MTMxNDk1OVxuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FuZ3VsYXItbW9uYWNvLWVkaXRvcicsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImVkaXRvclwiICNjb2RlRWRpdG9yPjwvZGl2PmAsXG4gIHN0eWxlczogW2A6aG9zdHtkaXNwbGF5OmJsb2NrO21pbi1oZWlnaHQ6MjAwcHh9LmVkaXRvcnt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfWBdLFxuXG4gIHByb3ZpZGVyczogW0NPREVfRURJVE9SX0lOUFVUX1ZBTFVFX0FDQ0VTU09SLCBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlXVxufSlcblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJNb25hY29FZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBCYXNlTW9uYWNvRWRpdG9yIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIEBJbnB1dCgnbW9kZWwnKVxuICBzZXQgbW9kZWwobW9kZWw6IEFuZ3VsYXJFZGl0b3JNb2RlbCkge1xuICAgIHRoaXMub3B0aW9ucy5tb2RlbCA9IG1vZGVsO1xuICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgdGhpcy5lZGl0b3IuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5pbml0TW9uYWNvKHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcblxuICBwcml2YXRlIF9lcnJvckluTW9kZWxNYXJrZXIgPSBmYWxzZTtcbiAgZ2V0IGVycm9ySW5Nb2RlbE1hcmtlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JJbk1vZGVsTWFya2VyO1xuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSwgcHJpdmF0ZSBlZGl0b3JFdmVudFNlcnZpY2U6IENvZGVFZGl0b3JFdmVudFNlcnZpY2UsIEBJbmplY3QoQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRykgcHJpdmF0ZSBhbmd1bGFyRWRpdG9yY29uZmlnOiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnKSB7XG4gICAgc3VwZXIoZWRpdG9yRXZlbnRTZXJ2aWNlLCBhbmd1bGFyRWRpdG9yY29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0TW9uYWNvKG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGhhc01vZGVsID0gISFvcHRpb25zLm1vZGVsO1xuICAgIGNvbnN0IGFjaXR2ZU1hcmtlcnMgPSAhIW9wdGlvbnMuYWNpdHZlTWFya2VyczsvL8OowofCqsOlwq7CmsOkwrnCiW9wdGlvblxuXG4gICAgaWYgKGhhc01vZGVsKSB7XG4gICAgICBvcHRpb25zLm1vZGVsID0gbW9uYWNvLmVkaXRvci5jcmVhdGVNb2RlbChvcHRpb25zLm1vZGVsLnZhbHVlLCBvcHRpb25zLm1vZGVsLmxhbmd1YWdlLCBvcHRpb25zLm1vZGVsLnVyaSk7XG4gICAgfVxuXG4gICAgdGhpcy5lZGl0b3IgPSBtb25hY28uZWRpdG9yLmNyZWF0ZSh0aGlzLl9lZGl0b3JDb21wb25lbnQubmF0aXZlRWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWhhc01vZGVsKSB7XG4gICAgICB0aGlzLmVkaXRvci5zZXRWYWx1ZSh0aGlzLl92YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gbW9uYWNvIGVkaXRvciAtPiBvdXRzaWRlIGNvbXBvbmVudFxuICAgIHRoaXMuZWRpdG9yLm9uRGlkQ2hhbmdlTW9kZWxDb250ZW50KChlOiBhbnkpID0+IHRoaXMub25DaGFuZ2VNb2RlbENvbnRlbnRIYW5kbGVyKGUpKTtcblxuICAgIHRoaXMuZWRpdG9yLm9uRGlkQmx1ckVkaXRvclRleHQoKGU6IGFueSkgPT4gdGhpcy5vbkJsdXJFZGl0b3JUZXh0SGFuZGxlcihlKSk7XG5cbiAgICB0aGlzLmVkaXRvci5vbkRpZExheW91dENoYW5nZSgoZTogYW55KSA9PiB0aGlzLm9uTGF5b3V0Q2hhbmdlSGFuZGxlcihlKSk7XG5cbiAgICAvLyByZWZyZXNoIGxheW91dCBvbiByZXNpemUgZXZlbnQuXG4gICAgdGhpcy5yZWZyZXNoTGF5b3V0V2hlbldpbmRvd1Jlc2l6ZSgpO1xuXG4gICAgdGhpcy5lZGl0b3JFdmVudFNlcnZpY2UuZmlyZUV2ZW50KHtcbiAgICAgIGV2ZW50TmFtZTogQ09ERV9FRElUT1JfRVZFTlRTLm9uSW5pdCxcbiAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgIGVkaXRvcjogdGhpcy5lZGl0b3JcbiAgICB9KTtcblxuICAgIC8vIGFjdGl2ZSBtb2RlbCBtYXJrZXJzXG4gICAgaWYgKGhhc01vZGVsICYmIGFjaXR2ZU1hcmtlcnMpIHtcbiAgICAgIHRoaXMuYWNpdHZlTW9kZWxNYXJrZXJzKCk7XG4gICAgfVxuXG4gIH1cbiAgXG4gIC8qKlxuICAgKiBBY2l0dmUgTW9kZWwgbWFya2VycyB0byBnZXQgbWFya2VycycgcmVzdWx0c1xuICAgKi9cbiAgYWNpdHZlTW9kZWxNYXJrZXJzKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L21vbmFjby1lZGl0b3IvaXNzdWVzLzMwXG4gICAgY29uc3Qgc2V0TW9kZWxNYXJrZXJzID0gbW9uYWNvLmVkaXRvci5zZXRNb2RlbE1hcmtlcnM7XG4gICAgbW9uYWNvLmVkaXRvci5zZXRNb2RlbE1hcmtlcnMgPSBmdW5jdGlvbiAobW9kZWwsIG93bmVyLCBtYXJrZXJzKSB7XG4gICAgICBzZXRNb2RlbE1hcmtlcnMuY2FsbChtb25hY28uZWRpdG9yLCBtb2RlbCwgb3duZXIsIG1hcmtlcnMpO1xuICAgICAgaWYgKG1hcmtlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIHRoZXJlIGFyZSBubyBlcnJvcnMoc3lueCBlcnJvciBhbmQgdmFsaWRhdGUgZXJyb3IpXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjb250aW51ZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlcmUgYXJlIGVycm9yc1xuICAgICAgICBzZWxmLl9lcnJvckluTW9kZWxNYXJrZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogcmVmcmVzaCBsYXlvdXQgd2hlbiByZXNpemVkIHRoZSB3aW5kb3dcbiAgICovXG4gIHJlZnJlc2hMYXlvdXRXaGVuV2luZG93UmVzaXplKCkge1xuICAgIGlmICh0aGlzLl93aW5kb3dSZXNpemVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvLyBmcm9tRXZlbnTDp8KUwqjDpMK6wo7DpcKFwrzDpcKQwqzDpMK6wovDpMK7wrbDr8K8wozDpMK6wovDpMK7wrbDqMKnwqbDpcKPwpHDpsKXwrbDr8K8wozDpcKwwobDpMK6wovDpMK7wrZldmVudMOowr3CrMOmwojCkMOlwo/Cr8OmwrXCgcOlworCqMOnwprChE9ic2VydmFibGXDqMK/wpvDqMKhwozDpMK8wqDDqMK+wpNcbiAgICAvLyBodHRwczovL3d3dy5qaWFuc2h1LmNvbS9wLzQ2ODk0ZGViODcwYVxuICAgIHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5lZGl0b3IubGF5b3V0KCkpO1xuICB9XG5cbiAgb25DaGFuZ2VNb2RlbENvbnRlbnRIYW5kbGVyKGUpIHtcbiAgICBjb25zdCBfdmFsdWUgPSB0aGlzLmVkaXRvci5nZXRWYWx1ZSgpO1xuXG4gICAgLy8gbW9uYWNvIGVkaXRvciAtPiBvdXRzaWRlIGNvbXBvbmVudFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KVGFuZ21pbmcvdG0vaXNzdWVzLzQgbmdab25lw6jCr8Kmw6jCp8KjXG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLnZhbHVlID0gX3ZhbHVlKTsgLy8gdmFsdWUgaXMgbm90IHByb3BhZ2F0ZWQgdG8gcGFyZW50IHdoZW4gZXhlY3V0aW5nIG91dHNpZGUgem9uZS5cbiAgfVxuXG4gIG9uQmx1ckVkaXRvclRleHRIYW5kbGVyKGUpIHtcblxuICAgIHRoaXMub25Db250cm9sVG91Y2hlZCgpO1xuICB9XG5cbiAgb25MYXlvdXRDaGFuZ2VIYW5kbGVyKGUpIHtcbiAgICBjb25zb2xlLmxvZygnTGF5b3V0IGNoYW5nZWQ6XFxuJyArIGUpO1xuICB9XG5cbiAgLy8gZ2V0IGFjY2Vzc29yXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIC8vIHNldCBhY2Nlc3NvciBpbmNsdWRpbmcgY2FsbCB0aGUgb25jaGFuZ2UgY2FsbGJhY2tcbiAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgIGlmICh2ICE9PSB0aGlzLnZhbHVlKSB7Ly8gw6bCs8Kow6bChMKPw6jCv8KZw6fCp8KNw6XChsKZw6bCs8KVw6/CvMKMw6XCgMK8w6XCvsKXw6XCrcKmw6TCucKgXG4gICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgfVxuXG4gICAgdGhpcy5vbkNvbnRyb2xWYWx1ZUNoYW5nZSh0aGlzLnZhbHVlKTsgLy8gw6XCnMKow6XCscKew6bCgMKnw6TCv8Kuw6nCpcKww6XCmcKow6nCh8KMw6jCsMKDw6fClMKob25Db250cm9sVmFsdWVDaGFuZ2XDpsKWwrnDpsKzwpVcbiAgfVxuXG4gIGxvY2FsRWRpdG9yKCkgey8vIERlbW86IG91dHNpZGUgY29tcG9uZW50IC0+IG1vbmFjbyBlZGl0b3JcbiAgICB0aGlzLndyaXRlVmFsdWUoJ3Rlc3QnKTtcbiAgfVxuXG4gIC8vIG91dHNpZGUgY29tcG9uZW50IC0+IG1vbmFjbyBlZGl0b3JcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBzZWxmLnZhbHVlID0gdmFsdWUgfHwgJyc7XG5cbiAgICAvLyBGaXggZm9yIHZhbHVlIGNoYW5nZSB3aGlsZSBkaXNwb3NlIGluIHByb2Nlc3NcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChzZWxmLmVkaXRvciAvKiYmICF0aGlzLm9wdGlvbnMubW9kZWwqLykge1xuICAgICAgICBzZWxmLmVkaXRvci5zZXRWYWx1ZShzZWxmLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ29udHJvbFZhbHVlQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkID0gZm47XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvcsOmwo/CkMOkwr7Cm8OnwprChMOkwrrCi8OkwrvCtsOlwpvCnsOowrDCg1xuICBvbkNvbnRyb2xWYWx1ZUNoYW5nZSA9IChfOiBhbnkpID0+IHtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yw6bCj8KQw6TCvsKbw6fCmsKEw6TCusKLw6TCu8K2w6XCm8Kew6jCsMKDXG4gIG9uQ29udHJvbFRvdWNoZWQgPSAoKSA9PiB7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcsIEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9hbmd1bGFyLW1vbmFjby1lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgXVxufSlcblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJNb25hY29FZGl0b3JNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFuZ3VsYXJNb25hY29FZGl0b3JNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUlBLHVCQUFhLDRCQUE0QixHQUFHLElBQUksY0FBYyxDQUFDLDhCQUE4QixDQUFDOzs7Ozs7QUNKOUYsQUFBTyx1QkFBTSxrQkFBa0IsR0FBRztJQUM5QixNQUFNLEVBQUUsUUFBUTtDQUNuQixDQUFDOzs7Ozs7QUNGRjs7MEJBUXdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7dUJBQzVCLEVBQUU7Ozs7Ozs7SUFNekIsUUFBUSxDQUFDLEtBQUs7UUFDVixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQzs7S0FFL0I7Ozs7O0lBRUQsU0FBUyxDQUFDLEtBQUs7UUFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7O0tBRTdDOzs7WUFqQkosVUFBVTs7Ozs7OztBQ05YLEFBUUEscUJBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztBQUN6QixxQkFBSSxXQUEwQixDQUFDOzs7O0FBRS9COzs7OztJQStCRSxZQUFvQixzQkFBOEMsRUFBVSxNQUFpQztRQUF6RiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBMkI7O1FBRTNHLHVCQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFD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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tb25hY28tZWRpdG9yLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9hbmd1bGFyLW1vbmFjby1lZGl0b3IvbGliL2VkaXRvci9tb2RlbC9jb25maWcudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2NvbnN0YW50L2V2ZW50cy50cyIsIm5nOi8vYW5ndWxhci1tb25hY28tZWRpdG9yL2xpYi9lZGl0b3Ivc2VydmljZS9jb2RlLWVkaXRvci5ldmVudC5zZXJ2aWNlLnRzIiwibmc6Ly9hbmd1bGFyLW1vbmFjby1lZGl0b3IvbGliL2VkaXRvci9tb2RlbC9iYXNlLW1vbmFjby1lZGl0b3IudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL3NlcnZpY2UvYW5ndWxhci1tb25hY28tZWRpdG9yLnNlcnZpY2UudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9hbmd1bGFyLW1vbmFjby1lZGl0b3IuY29tcG9uZW50LnRzIiwibmc6Ly9hbmd1bGFyLW1vbmFjby1lZGl0b3IvbGliL2VkaXRvci9lZGl0b3IubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8vIGluamVjdGlvblRva2Vuw6TCvcKcw6fClMKow6jCr8K0w6bCmMKOXG4vLyBodHRwczovL3NlZ21lbnRmYXVsdC5jb20vYS8xMTkwMDAwMDA4NjI2MzQ4XG5leHBvcnQgY29uc3QgQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbignQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcge1xuICBiYXNlVXJsPzogc3RyaW5nO1xuICBkZWZhdWx0T3B0aW9ucz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICBvbk1vbmFjb0xvYWQ/OiBGdW5jdGlvbjtcbn1cbiIsImV4cG9ydCBjb25zdCBDT0RFX0VESVRPUl9FVkVOVFMgPSB7XG4gICAgb25Jbml0OiAnb25Jbml0J1xufTtcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgQ09ERV9FRElUT1JfRVZFTlRTIH0gZnJvbSAnLi4vY29uc3RhbnQvZXZlbnRzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvZGVFZGl0b3JFdmVudFNlcnZpY2Uge1xuICAgIHB1YmxpYyBldmVudE5hbWVzID0gT2JqZWN0LmtleXMoQ09ERV9FRElUT1JfRVZFTlRTKTtcbiAgICBwcml2YXRlIF9ldmVudHM6IGFueSA9IHt9OyAvLyDDpMK9wr/Dp8KUwqjDpMK6wovDpMK7wrZcblxuICAgIC8qKlxuICAgICAqIMOowq7CvsOnwr3CrsOlwpDCr8OnwpTCqMOkwrrCi8OkwrvCtlxuICAgICAqIEBwYXJhbSAgw6TCusKLw6TCu8K2XG4gICAgICovXG4gICAgYWRkRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgYXNzaWduKHRoaXMuX2V2ZW50cywgZXZlbnQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmV2ZW50cyk7XG4gICAgfVxuXG4gICAgZmlyZUV2ZW50KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2V2ZW50c1tldmVudC5ldmVudE5hbWVdLmVtaXQoZXZlbnQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkVtaXQgRXZlbnQ6XCIgKyBldmVudCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LCBWaWV3Q2hpbGQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHBpY2sgfSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQ29kZUVkaXRvckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvY29kZS1lZGl0b3IuZXZlbnQuc2VydmljZSc7XG5cbmxldCBsb2FkZWRNb25hY28gPSBmYWxzZTtcbmxldCBsb2FkUHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VNb25hY29FZGl0b3IgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByb3RlY3RlZCBfZWRpdG9yOiBhbnk7XG4gIHByaXZhdGUgX29wdGlvbnM6IGFueTtcbiAgcHJvdGVjdGVkIF93aW5kb3dSZXNpemVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBAVmlld0NoaWxkKCdjb2RlRWRpdG9yJykgX2VkaXRvckNvbXBvbmVudDogRWxlbWVudFJlZjsgLy8gw6XCisKow6bCgMKBw6bCt8K7w6XCisKgw6TCu8Kjw6fCoMKBw6fCvMKWw6jCvsKRw6XCmcKoXG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW91dHB1dC1vbi1wcmVmaXhcbiAgQE91dHB1dCgpIG9uSW5pdDtcblxuICBASW5wdXQoJ29wdGlvbnMnKVxuICBzZXQgb3B0aW9ucyhvcHRpb25zOiBhbnkpIHtcbiAgICAvLyDDqcK7wpjDqMKuwqRvcHRpb25zKHRoaXMuY29uZmlnLmRlZmF1bHRPcHRpb25zKSArIMOowofCqsOlwq7CmsOkwrnCiW9wdGlvbnMob3B0aW9ucylcbiAgICB0aGlzLl9vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25maWcuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIGlmICh0aGlzLl9lZGl0b3IpIHtcbiAgICAgIHRoaXMuX2VkaXRvci5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmluaXRNb25hY28ob3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIGdldCBvcHRpb25zKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvZGVFZGl0b3JFdmVudFNlcnZpY2U6IENvZGVFZGl0b3JFdmVudFNlcnZpY2UsIHByaXZhdGUgY29uZmlnOiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnKSB7XG4gICAgICAgIC8vIMOlwojCncOlwqfCi8OlwozClsOowofCqsOlwq7CmsOkwrnCicOkwrrCi8OkwrvCtlxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29kZUVkaXRvckV2ZW50U2VydmljZS5ldmVudE5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAvLyDDpcKIwpvDpcK7wrrDqMKHwqrDpcKuwprDpMK5wonDpMK6wovDpMK7wrbDr8K8wozDpsKtwqTDpcKkwoTDpMK9wpzDp8KUwqjDp8KtwonDpsKVwojDpMK6wo46IEBPdXRwdXQoKSBvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICAgICAgICAgIHNlbGZbbmFtZV0gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICAgICAgICBjb25zdCBldmVudFBhaXIgPSBwaWNrKHNlbGYsIG5hbWUpO1xuICAgICAgICAgIGNvZGVFZGl0b3JFdmVudFNlcnZpY2UuYWRkRXZlbnQoZXZlbnRQYWlyKTtcbiAgICAgICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKGxvYWRlZE1vbmFjbykge1xuICAgICAgLy8gV2FpdCB1bnRpbCBtb25hY28gZWRpdG9yIGlzIGF2YWlsYWJsZVxuICAgICAgbG9hZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdE1vbmFjbyh0aGlzLm9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvYWRlZE1vbmFjbyA9IHRydWU7XG4gICAgICBsb2FkUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMuY29uZmlnLmJhc2VVcmwgfHwgJy9hc3NldHMnO1xuICAgICAgICAvLyBpZiAodHlwZW9mKCg8YW55PndpbmRvdykubW9uYWNvKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gICByZXNvbHZlKCk7XG4gICAgICAgIC8vICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG4gICAgICAgIGNvbnN0IG9uR290QW1kTG9hZGVyOiBhbnkgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gTG9hZCBtb25hY29cbiAgICAgICAgICAoPGFueT53aW5kb3cpLnJlcXVpcmUuY29uZmlnKHsgcGF0aHM6IHsgJ3ZzJzogYCR7YmFzZVVybH0vbW9uYWNvL3ZzYCB9IH0pO1xuICAgICAgICAgICg8YW55PndpbmRvdykucmVxdWlyZShbJ3ZzL2VkaXRvci9lZGl0b3IubWFpbiddLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlnLm9uTW9uYWNvTG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5vbk1vbmFjb0xvYWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5pdE1vbmFjbyh0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIExvYWQgQU1EIGxvYWRlciBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKCEoPGFueT53aW5kb3cpLnJlcXVpcmUpIHtcbiAgICAgICAgICBjb25zdCBsb2FkZXJTY3JpcHQ6IEhUTUxTY3JpcHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgICAgbG9hZGVyU2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgICAgICBsb2FkZXJTY3JpcHQuc3JjID0gYCR7YmFzZVVybH0vbW9uYWNvL3ZzL2xvYWRlci5qc2A7XG4gICAgICAgICAgbG9hZGVyU2NyaXB0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBvbkdvdEFtZExvYWRlcik7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsb2FkZXJTY3JpcHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uR290QW1kTG9hZGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1vbmFjbyBFZGl0b3IgSW5pdGlhbGl6ZXJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGluaXRNb25hY28ob3B0aW9uczogYW55KTogdm9pZCA7XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fd2luZG93UmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2VkaXRvcikge1xuICAgICAgdGhpcy5fZWRpdG9yLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX2VkaXRvciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmRlY2xhcmUgY29uc3QgbW9uYWNvOiBhbnk7XHJcblxyXG4vLyBBbmd1bGFyIE1vbmFjbyBFZGl0b3IgQ29tcG9uZW50IFZhcmlhYmxlc1xyXG4vLyDDpsKxwofDpsKAwrtBbmd1bGFyIG1vbmFjbyBlZGl0b3IgY29tcG9uZW50IMOnwrvChMOkwrvCtsOmwprCtMOpwpzCssOnwprChMOlwo/CmMOpwofCj1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBbmd1bGFyTW9uYWNvRWRpdG9yU2VydmljZSB7XHJcblxyXG4gICAgcHJpdmF0ZSBfZXhpc3RFcnJvciA9IGZhbHNlOy8vw6nCu8KYw6jCrsKkw6bCssKhw6bCnMKJw6nClMKZw6jCr8KvXHJcbiAgICBnZXQgZXhpc3RFcnJvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXhpc3RFcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVNb2RlbE1hcmtlcnMoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvbW9uYWNvLWVkaXRvci9pc3N1ZXMvMzBcclxuICAgICAgICBjb25zdCBzZXRNb2RlbE1hcmtlcnMgPSBtb25hY28uZWRpdG9yLnNldE1vZGVsTWFya2VycztcclxuICAgICAgICBtb25hY28uZWRpdG9yLnNldE1vZGVsTWFya2VycyA9IGZ1bmN0aW9uIChtb2RlbCwgb3duZXIsIG1hcmtlcnMpIHtcclxuICAgICAgICAgICAgc2V0TW9kZWxNYXJrZXJzLmNhbGwobW9uYWNvLmVkaXRvciwgbW9kZWwsIG93bmVyLCBtYXJrZXJzKTtcclxuICAgICAgICAgICAgaWYgKG1hcmtlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGVyZSBhcmUgbm8gZXJyb3JzKHN5bnggZXJyb3IgYW5kIHZhbGlkYXRlIGVycm9yKVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NvbnRpbnVlJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGVyZSBhcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICBzZWxmLl9leGlzdEVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3J3YXJkUmVmLCBJbmplY3QsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcy9vYnNlcnZhYmxlL2Zyb21FdmVudCc7XG5cbmltcG9ydCB7IEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcsIEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgfSBmcm9tICcuLi9tb2RlbC9jb25maWcnO1xuaW1wb3J0IHsgQ29kZUVkaXRvckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvY29kZS1lZGl0b3IuZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBDT0RFX0VESVRPUl9FVkVOVFMgfSBmcm9tICcuLi9jb25zdGFudC9ldmVudHMnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvck1vZGVsIH0gZnJvbSAnLi4vbW9kZWwvdHlwZXMnO1xuaW1wb3J0IHsgQmFzZU1vbmFjb0VkaXRvciB9IGZyb20gJy4uL21vZGVsL2Jhc2UtbW9uYWNvLWVkaXRvcic7XG5pbXBvcnQgeyBBbmd1bGFyTW9uYWNvRWRpdG9yU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvYW5ndWxhci1tb25hY28tZWRpdG9yLnNlcnZpY2UnO1xuXG5kZWNsYXJlIGNvbnN0IG1vbmFjbzogYW55O1xuXG4vLyDDqMKHwqrDpcKuwprDpMK5wonDqMK+wpPDpcKFwqXDpsKOwqfDpMK7wrY6MS7DpcKwwoHDqMKjwoVDb250cm9sVmFsdWVBY2Nlc3NvclxuLy8gaHR0cHM6Ly9jb2RlLWV4YW1wbGVzLm5ldC96aC1DTi9xLzIxNTQ3NjFcbmV4cG9ydCBjb25zdCBDT0RFX0VESVRPUl9JTlBVVF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICAvLyBodHRwczovL2Jsb2cuY3Nkbi5uZXQvd2FuZ2Rhbl8yMDEzL2FydGljbGUvZGV0YWlscy84MTMxNDk1OVxuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FuZ3VsYXItbW9uYWNvLWVkaXRvcicsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImVkaXRvclwiICNjb2RlRWRpdG9yPjwvZGl2PmAsXG4gIHN0eWxlczogW2A6aG9zdHtkaXNwbGF5OmJsb2NrO21pbi1oZWlnaHQ6MjAwcHh9LmVkaXRvcnt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfWBdLFxuICAvLyDDqMKHwqrDpcKuwprDpMK5wonDqMK+wpPDpcKFwqXDpsKOwqfDpMK7wrY6Mi7DpcK8wpXDpcKFwqXDpMK+wp3DqMK1wpbDpsKcwo3DpcKKwqFDb250cm9sVmFsdWVBY2Nlc3NvclxuICBwcm92aWRlcnM6IFtcbiAgICBDT0RFX0VESVRPUl9JTlBVVF9WQUxVRV9BQ0NFU1NPUiwgXG4gICAgQ29kZUVkaXRvckV2ZW50U2VydmljZVxuICBdXG59KVxuXG4vLyDDqMKHwqrDpcKuwprDpMK5wonDqMK+wpPDpcKFwqXDpsKOwqfDpMK7wrYgPC0+IE1vbmFjbyBFZHRvclxuXG4vLyDDqMKHwqrDpcKuwprDpMK5wonDqMK+wpPDpcKFwqXDpsKOwqfDpMK7wrY6My4xIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3JcbmV4cG9ydCBjbGFzcyBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQmFzZU1vbmFjb0VkaXRvciBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBASW5wdXQoJ21vZGVsJylcbiAgc2V0IG1vZGVsKG1vZGVsOiBBbmd1bGFyRWRpdG9yTW9kZWwpIHtcbiAgICB0aGlzLm9wdGlvbnMubW9kZWwgPSBtb2RlbDtcbiAgICBpZiAodGhpcy5fZWRpdG9yKSB7XG4gICAgICB0aGlzLl9lZGl0b3IuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5pbml0TW9uYWNvKHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYW5ndWxhck1vbmFjb0VkaXRvclNlcnZpY2U6IEFuZ3VsYXJNb25hY29FZGl0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgZWRpdG9yRXZlbnRTZXJ2aWNlOiBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlLFxuICAgIEBJbmplY3QoQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRykgcHJpdmF0ZSBhbmd1bGFyRWRpdG9yY29uZmlnOiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnKSB7XG4gICAgc3VwZXIoZWRpdG9yRXZlbnRTZXJ2aWNlLCBhbmd1bGFyRWRpdG9yY29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0TW9uYWNvKG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGhhc01vZGVsID0gISFvcHRpb25zLm1vZGVsO1xuXG4gICAgaWYgKGhhc01vZGVsKSB7XG4gICAgICBvcHRpb25zLm1vZGVsID0gbW9uYWNvLmVkaXRvci5jcmVhdGVNb2RlbChvcHRpb25zLm1vZGVsLnZhbHVlLCBvcHRpb25zLm1vZGVsLmxhbmd1YWdlLCBvcHRpb25zLm1vZGVsLnVyaSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZWRpdG9yID0gbW9uYWNvLmVkaXRvci5jcmVhdGUodGhpcy5fZWRpdG9yQ29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFoYXNNb2RlbCkge1xuICAgICAgdGhpcy5fZWRpdG9yLnNldFZhbHVlKHRoaXMuX3ZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBtb25hY28gZWRpdG9yIC0+IG91dHNpZGUgY29tcG9uZW50XG4gICAgdGhpcy5fZWRpdG9yLm9uRGlkQ2hhbmdlTW9kZWxDb250ZW50KChlOiBhbnkpID0+IHRoaXMub25DaGFuZ2VNb2RlbENvbnRlbnRIYW5kbGVyKGUpKTtcblxuICAgIHRoaXMuX2VkaXRvci5vbkRpZEJsdXJFZGl0b3JUZXh0KChlOiBhbnkpID0+IHRoaXMub25CbHVyRWRpdG9yVGV4dEhhbmRsZXIoZSkpO1xuXG4gICAgdGhpcy5fZWRpdG9yLm9uRGlkTGF5b3V0Q2hhbmdlKChlOiBhbnkpID0+IHRoaXMub25MYXlvdXRDaGFuZ2VIYW5kbGVyKGUpKTtcblxuICAgIC8vIHJlZnJlc2ggbGF5b3V0IG9uIHJlc2l6ZSBldmVudC5cbiAgICB0aGlzLnJlZnJlc2hMYXlvdXRXaGVuV2luZG93UmVzaXplKCk7XG5cbiAgICB0aGlzLmVkaXRvckV2ZW50U2VydmljZS5maXJlRXZlbnQoe1xuICAgICAgZXZlbnROYW1lOiBDT0RFX0VESVRPUl9FVkVOVFMub25Jbml0LFxuICAgICAgdGFyZ2V0OiB0aGlzLFxuICAgICAgZWRpdG9yOiB0aGlzLl9lZGl0b3JcbiAgICB9KTtcblxuICAgIGlmIChoYXNNb2RlbCkge1xuICAgICAgdGhpcy5hbmd1bGFyTW9uYWNvRWRpdG9yU2VydmljZS5oYW5kbGVNb2RlbE1hcmtlcnMoKTtcbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGxheW91dCB3aGVuIHJlc2l6ZWQgdGhlIHdpbmRvd1xuICAgKi9cbiAgcmVmcmVzaExheW91dFdoZW5XaW5kb3dSZXNpemUoKSB7XG4gICAgaWYgKHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fd2luZG93UmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIC8vIGZyb21FdmVudMOnwpTCqMOkwrrCjsOlwoXCvMOlwpDCrMOkwrrCi8OkwrvCtsOvwrzCjMOkwrrCi8OkwrvCtsOowqfCpsOlwo/CkcOmwpfCtsOvwrzCjMOlwrDChsOkwrrCi8OkwrvCtmV2ZW50w6jCvcKsw6bCiMKQw6XCj8Kvw6bCtcKBw6XCisKow6fCmsKET2JzZXJ2YWJsZcOowr/Cm8OowqHCjMOkwrzCoMOowr7Ck1xuICAgIC8vIGh0dHBzOi8vd3d3LmppYW5zaHUuY29tL3AvNDY4OTRkZWI4NzBhXG4gICAgdGhpcy5fd2luZG93UmVzaXplU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9lZGl0b3IubGF5b3V0KCkpO1xuICB9XG5cbiAgb25DaGFuZ2VNb2RlbENvbnRlbnRIYW5kbGVyKGUpIHtcbiAgICBjb25zdCBfdmFsdWUgPSB0aGlzLl9lZGl0b3IuZ2V0VmFsdWUoKTtcblxuICAgIC8vIG1vbmFjbyBlZGl0b3IgLT4gb3V0c2lkZSBjb21wb25lbnRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSlRhbmdtaW5nL3RtL2lzc3Vlcy80IG5nWm9uZcOowq/CpsOowqfCo1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy52YWx1ZSA9IF92YWx1ZSk7IC8vIHZhbHVlIGlzIG5vdCBwcm9wYWdhdGVkIHRvIHBhcmVudCB3aGVuIGV4ZWN1dGluZyBvdXRzaWRlIHpvbmUuXG4gIH1cblxuICBvbkJsdXJFZGl0b3JUZXh0SGFuZGxlcihlKSB7XG5cbiAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQoKTtcbiAgfVxuXG4gIG9uTGF5b3V0Q2hhbmdlSGFuZGxlcihlKSB7XG4gICAgY29uc29sZS5sb2coJ0xheW91dCBjaGFuZ2VkOlxcbicgKyBlKTtcbiAgfVxuXG4gIC8vIGdldCBhY2Nlc3NvclxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICAvLyBzZXQgYWNjZXNzb3IgaW5jbHVkaW5nIGNhbGwgdGhlIG9uY2hhbmdlIGNhbGxiYWNrXG4gIHNldCB2YWx1ZSh2OiBhbnkpIHtcbiAgICBpZiAodiAhPT0gdGhpcy52YWx1ZSkgey8vIMOmwrPCqMOmwoTCj8Oowr/CmcOnwqfCjcOlwobCmcOmwrPClcOvwrzCjMOlwoDCvMOlwr7Cl8Olwq3CpsOkwrnCoFxuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgIH1cblxuICAgIHRoaXMub25Db250cm9sVmFsdWVDaGFuZ2UodGhpcy52YWx1ZSk7IC8vIMOlwpzCqMOlwrHCnsOmwoDCp8Okwr/CrsOpwqXCsMOlwpnCqMOpwofCjMOowrDCg8OnwpTCqG9uQ29udHJvbFZhbHVlQ2hhbmdlw6bClsK5w6bCs8KVXG4gIH1cblxuICAvLyDDqMKHwqrDpcKuwprDpMK5wonDqMK+wpPDpcKFwqXDpsKOwqfDpMK7wrY6My4yIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb1xuXG4gIC8vIG91dHNpZGUgY29tcG9uZW50IC0+IG1vbmFjbyBlZGl0b3JcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBzZWxmLnZhbHVlID0gdmFsdWUgfHwgJyc7XG5cbiAgICAvLyBGaXggZm9yIHZhbHVlIGNoYW5nZSB3aGlsZSBkaXNwb3NlIGluIHByb2Nlc3MuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoc2VsZi5fZWRpdG9yIC8qJiYgIXRoaXMub3B0aW9ucy5tb2RlbCovKSB7XG4gICAgICAgIHNlbGYuX2VkaXRvci5zZXRWYWx1ZShzZWxmLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ29udHJvbFZhbHVlQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkID0gZm47XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvcsOmwo/CkMOkwr7Cm8OnwprChMOkwrrCi8OkwrvCtsOlwpvCnsOowrDCg1xuICBvbkNvbnRyb2xWYWx1ZUNoYW5nZSA9IChfOiBhbnkpID0+IHtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yw6bCj8KQw6TCvsKbw6fCmsKEw6TCusKLw6TCu8K2w6XCm8Kew6jCsMKDXG4gIG9uQ29udHJvbFRvdWNoZWQgPSAoKSA9PiB7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcsIEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgfSBmcm9tICcuL21vZGVsL2NvbmZpZyc7XG5pbXBvcnQgeyBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9hbmd1bGFyLW1vbmFjby1lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgXVxufSlcblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJNb25hY29FZGl0b3JNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFuZ3VsYXJNb25hY29FZGl0b3JNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUlBLHVCQUFhLDRCQUE0QixHQUFHLElBQUksY0FBYyxDQUFDLDhCQUE4QixDQUFDOzs7Ozs7QUNKOUYsQUFBTyx1QkFBTSxrQkFBa0IsR0FBRztJQUM5QixNQUFNLEVBQUUsUUFBUTtDQUNuQixDQUFDOzs7Ozs7QUNGRjs7MEJBUXdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7dUJBQzVCLEVBQUU7Ozs7Ozs7SUFNekIsUUFBUSxDQUFDLEtBQUs7UUFDVixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQzs7S0FFL0I7Ozs7O0lBRUQsU0FBUyxDQUFDLEtBQUs7UUFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7O0tBRTdDOzs7WUFqQkosVUFBVTs7Ozs7OztBQ05YLEFBUUEscUJBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztBQUN6QixxQkFBSSxXQUEwQixDQUFDOzs7O0FBRS9COzs7OztJQXdCRSxZQUFvQixzQkFBOEMsRUFBVSxNQUFpQztRQUF6RiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBMkI7O1FBRXZHLHVCQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsc0JBQXNCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUk7O1lBRTdDLElBQUksQ0FB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

@@ -91,19 +91,2 @@ import { InjectionToken, Injectable, Input, Output, ViewChild, EventEmitter, Component, forwardRef, Inject, NgZone, NgModule } from '@angular/core';

}
Object.defineProperty(BaseMonacoEditor.prototype, "editor", {
get: /**
* @return {?}
*/
function () {
return this._editor;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._editor = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BaseMonacoEditor.prototype, "options", {

@@ -121,3 +104,3 @@ get: /**

function (options) {
// default options(this.config.defaultOptions) + custom options(options)
// 默认options(this.config.defaultOptions) + 自定义options(options)
this._options = Object.assign({}, this.config.defaultOptions, options);

@@ -206,2 +189,46 @@ if (this._editor) {

*/
var AngularMonacoEditorService = /** @class */ (function () {
function AngularMonacoEditorService() {
this._existError = false;
}
Object.defineProperty(AngularMonacoEditorService.prototype, "existError", {
get: /**
* @return {?}
*/
function () {
return this._existError;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
AngularMonacoEditorService.prototype.handleModelMarkers = /**
* @return {?}
*/
function () {
var /** @type {?} */ self = this;
// https://github.com/Microsoft/monaco-editor/issues/30
var /** @type {?} */ setModelMarkers = monaco.editor.setModelMarkers;
monaco.editor.setModelMarkers = function (model, owner, markers) {
setModelMarkers.call(monaco.editor, model, owner, markers);
if (markers.length === 0) ;
else {
// there are errors
self._existError = true;
}
};
};
AngularMonacoEditorService.decorators = [
{ type: Injectable },
];
return AngularMonacoEditorService;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
// 自定义输入控件:1.封装ControlValueAccessor
// https://code-examples.net/zh-CN/q/2154761

@@ -217,4 +244,5 @@ var /** @type {?} */ CODE_EDITOR_INPUT_VALUE_ACCESSOR = {

// tslint:disable-next-line:max-line-length
function AngularMonacoEditorComponent(zone, editorEventService, angularEditorconfig) {
function AngularMonacoEditorComponent(angularMonacoEditorService, zone, editorEventService, angularEditorconfig) {
var _this = _super.call(this, editorEventService, angularEditorconfig) || this;
_this.angularMonacoEditorService = angularMonacoEditorService;
_this.zone = zone;

@@ -224,3 +252,2 @@ _this.editorEventService = editorEventService;

_this._value = '';
_this._errorInModelMarker = false;
// ControlValueAccessor提供的事件回调

@@ -241,4 +268,4 @@ _this.onControlValueChange = function (_) {

this.options.model = model;
if (this.editor) {
this.editor.dispose();
if (this._editor) {
this._editor.dispose();
this.initMonaco(this.options);

@@ -250,12 +277,2 @@ }

});
Object.defineProperty(AngularMonacoEditorComponent.prototype, "errorInModelMarker", {
get: /**
* @return {?}
*/
function () {
return this._errorInModelMarker;
},
enumerable: true,
configurable: true
});
/**

@@ -272,14 +289,13 @@ * @param {?} options

var /** @type {?} */ hasModel = !!options.model;
var /** @type {?} */ acitveMarkers = !!options.acitveMarkers; //自定义option
if (hasModel) {
options.model = monaco.editor.createModel(options.model.value, options.model.language, options.model.uri);
}
this.editor = monaco.editor.create(this._editorComponent.nativeElement, options);
this._editor = monaco.editor.create(this._editorComponent.nativeElement, options);
if (!hasModel) {
this.editor.setValue(this._value);
this._editor.setValue(this._value);
}
// monaco editor -> outside component
this.editor.onDidChangeModelContent(function (e) { return _this.onChangeModelContentHandler(e); });
this.editor.onDidBlurEditorText(function (e) { return _this.onBlurEditorTextHandler(e); });
this.editor.onDidLayoutChange(function (e) { return _this.onLayoutChangeHandler(e); });
this._editor.onDidChangeModelContent(function (e) { return _this.onChangeModelContentHandler(e); });
this._editor.onDidBlurEditorText(function (e) { return _this.onBlurEditorTextHandler(e); });
this._editor.onDidLayoutChange(function (e) { return _this.onLayoutChangeHandler(e); });
// refresh layout on resize event.

@@ -290,34 +306,9 @@ this.refreshLayoutWhenWindowResize();

target: this,
editor: this.editor
editor: this._editor
});
// active model markers
if (hasModel && acitveMarkers) {
this.acitveModelMarkers();
if (hasModel) {
this.angularMonacoEditorService.handleModelMarkers();
}
};
/**
* Acitve Model markers to get markers' results
*/
/**
* Acitve Model markers to get markers' results
* @return {?}
*/
AngularMonacoEditorComponent.prototype.acitveModelMarkers = /**
* Acitve Model markers to get markers' results
* @return {?}
*/
function () {
var /** @type {?} */ self = this;
// https://github.com/Microsoft/monaco-editor/issues/30
var /** @type {?} */ setModelMarkers = monaco.editor.setModelMarkers;
monaco.editor.setModelMarkers = function (model, owner, markers) {
setModelMarkers.call(monaco.editor, model, owner, markers);
if (markers.length === 0) ;
else {
// there are errors
self._errorInModelMarker = true;
}
};
};
/**
* refresh layout when resized the window

@@ -340,3 +331,3 @@ */

// https://www.jianshu.com/p/46894deb870a
this._windowResizeSubscription = fromEvent(window, 'resize').subscribe(function () { return _this.editor.layout(); });
this._windowResizeSubscription = fromEvent(window, 'resize').subscribe(function () { return _this._editor.layout(); });
};

@@ -353,3 +344,3 @@ /**

var _this = this;
var /** @type {?} */ _value = this.editor.getValue();
var /** @type {?} */ _value = this._editor.getValue();
// monaco editor -> outside component

@@ -404,12 +395,3 @@ // https://github.com/JTangming/tm/issues/4 ngZone详解

});
/**
* @return {?}
*/
AngularMonacoEditorComponent.prototype.localEditor = /**
* @return {?}
*/
function () {
// Demo: outside component -> monaco editor
this.writeValue('test');
};
// 自定义输入控件:3.2 implements ControlValueAccesso
// outside component -> monaco editor

@@ -428,6 +410,6 @@ // From ControlValueAccessor interface

self.value = value || '';
// Fix for value change while dispose in process
// Fix for value change while dispose in process.
setTimeout(function () {
if (self.editor /*&& !this.options.model*/) {
self.editor.setValue(self._value);
if (self._editor /*&& !this.options.model*/) {
self._editor.setValue(self._value);
}

@@ -466,3 +448,7 @@ });

styles: [":host{display:block;min-height:200px}.editor{width:100%;height:100%}"],
providers: [CODE_EDITOR_INPUT_VALUE_ACCESSOR, CodeEditorEventService]
// 自定义输入控件:2.引入依赖服务ControlValueAccessor
providers: [
CODE_EDITOR_INPUT_VALUE_ACCESSOR,
CodeEditorEventService
]
},] },

@@ -472,2 +458,3 @@ ];

AngularMonacoEditorComponent.ctorParameters = function () { return [
{ type: AngularMonacoEditorService, },
{ type: NgZone, },

@@ -534,4 +521,4 @@ { type: CodeEditorEventService, },

export { AngularMonacoEditorModule, ANGULAR_MONACO_EDITOR_CONFIG, AngularMonacoEditorComponent as ɵb, CODE_EDITOR_INPUT_VALUE_ACCESSOR as ɵa, BaseMonacoEditor as ɵc, CodeEditorEventService as ɵd };
export { AngularMonacoEditorModule, ANGULAR_MONACO_EDITOR_CONFIG, AngularMonacoEditorComponent as ɵb, CODE_EDITOR_INPUT_VALUE_ACCESSOR as ɵa, BaseMonacoEditor as ɵc, AngularMonacoEditorService as ɵe, CodeEditorEventService as ɵd };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tb25hY28tZWRpdG9yLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9hbmd1bGFyLW1vbmFjby1lZGl0b3IvbGliL2VkaXRvci9jb25maWcudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2NvbnN0YW50cy9ldmVudHMudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL3NlcnZpY2VzL2NvZGUtZWRpdG9yLmV2ZW50LnNlcnZpY2UudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2Jhc2UtbW9uYWNvLWVkaXRvci50cyIsIm5nOi8vYW5ndWxhci1tb25hY28tZWRpdG9yL2xpYi9lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yL2FuZ3VsYXItbW9uYWNvLWVkaXRvci5jb21wb25lbnQudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2VkaXRvci5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLy8gaW5qZWN0aW9uVG9rZW7DpMK9wpzDp8KUwqjDqMKvwrTDpsKYwo5cbi8vIGh0dHBzOi8vc2VnbWVudGZhdWx0LmNvbS9hLzExOTAwMDAwMDg2MjYzNDhcbmV4cG9ydCBjb25zdCBBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuKCdBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5ndWxhck1vbmFjb0VkaXRvckNvbmZpZyB7XG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIGRlZmF1bHRPcHRpb25zPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XG4gIG9uTW9uYWNvTG9hZD86IEZ1bmN0aW9uO1xufVxuIiwiZXhwb3J0IGNvbnN0IENPREVfRURJVE9SX0VWRU5UUyA9IHtcbiAgICBvbkluaXQ6ICdvbkluaXQnXG59O1xuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBDT0RFX0VESVRPUl9FVkVOVFMgfSBmcm9tICcuLi9jb25zdGFudHMvZXZlbnRzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvZGVFZGl0b3JFdmVudFNlcnZpY2Uge1xuICAgIHB1YmxpYyBldmVudE5hbWVzID0gT2JqZWN0LmtleXMoQ09ERV9FRElUT1JfRVZFTlRTKTtcbiAgICBwcml2YXRlIF9ldmVudHM6IGFueSA9IHt9OyAvLyDDpMK9wr/Dp8KUwqjDpMK6wovDpMK7wrZcblxuICAgIC8qKlxuICAgICAqIMOowq7CvsOnwr3CrsOlwpDCr8OnwpTCqMOkwrrCi8OkwrvCtlxuICAgICAqIEBwYXJhbSAgw6TCusKLw6TCu8K2XG4gICAgICovXG4gICAgYWRkRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgYXNzaWduKHRoaXMuX2V2ZW50cywgZXZlbnQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmV2ZW50cyk7XG4gICAgfVxuXG4gICAgZmlyZUV2ZW50KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2V2ZW50c1tldmVudC5ldmVudE5hbWVdLmVtaXQoZXZlbnQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkVtaXQgRXZlbnQ6XCIgKyBldmVudCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LCBWaWV3Q2hpbGQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHBpY2sgfSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQ29kZUVkaXRvckV2ZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY29kZS1lZGl0b3IuZXZlbnQuc2VydmljZSc7XG5cbmxldCBsb2FkZWRNb25hY28gPSBmYWxzZTtcbmxldCBsb2FkUHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VNb25hY29FZGl0b3IgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgX2VkaXRvcjogYW55O1xuICBnZXQgZWRpdG9yKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRvcjtcbiAgfVxuICBzZXQgZWRpdG9yKHZhbHVlKSB7XG4gICAgdGhpcy5fZWRpdG9yID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9vcHRpb25zOiBhbnk7XG4gIHByb3RlY3RlZCBfd2luZG93UmVzaXplU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgQFZpZXdDaGlsZCgnY29kZUVkaXRvcicpIF9lZGl0b3JDb21wb25lbnQ6IEVsZW1lbnRSZWY7IC8vIMOlworCqMOmwoDCgcOmwrfCu8OlworCoMOkwrvCo8OnwqDCgcOnwrzClsOowr7CkcOlwpnCqFxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1vdXRwdXQtb24tcHJlZml4XG4gIEBPdXRwdXQoKSBvbkluaXQ7XG5cbiAgQElucHV0KCdvcHRpb25zJylcbiAgc2V0IG9wdGlvbnMob3B0aW9uczogYW55KSB7XG4gICAgLy8gZGVmYXVsdCBvcHRpb25zKHRoaXMuY29uZmlnLmRlZmF1bHRPcHRpb25zKSArIGN1c3RvbSBvcHRpb25zKG9wdGlvbnMpXG4gICAgdGhpcy5fb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnLmRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICBpZiAodGhpcy5fZWRpdG9yKSB7XG4gICAgICB0aGlzLl9lZGl0b3IuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5pbml0TW9uYWNvKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBnZXQgb3B0aW9ucygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb2RlRWRpdG9yRXZlbnRTZXJ2aWNlOiBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlLCBwcml2YXRlIGNvbmZpZzogQW5ndWxhck1vbmFjb0VkaXRvckNvbmZpZykge1xuICAgIC8vIMOlwojCncOlwqfCi8OlwozClsOowofCqsOlwq7CmsOkwrnCicOkwrrCi8OkwrvCtlxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvZGVFZGl0b3JFdmVudFNlcnZpY2UuZXZlbnROYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAvLyDDpcKIwpvDpcK7wrrDqMKHwqrDpcKuwprDpMK5wonDpMK6wovDpMK7wrbDr8K8wozDpsKtwqTDpcKkwoTDpMK9wpzDp8KUwqjDp8KtwonDpsKVwojDpMK6wo46IEBPdXRwdXQoKSBvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICAgICAgc2VsZltuYW1lXSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgICAgY29uc3QgZXZlbnRQYWlyID0gcGljayhzZWxmLCBuYW1lKTtcbiAgICAgIGNvZGVFZGl0b3JFdmVudFNlcnZpY2UuYWRkRXZlbnQoZXZlbnRQYWlyKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAobG9hZGVkTW9uYWNvKSB7XG4gICAgICAvLyBXYWl0IHVudGlsIG1vbmFjbyBlZGl0b3IgaXMgYXZhaWxhYmxlXG4gICAgICBsb2FkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5pbml0TW9uYWNvKHRoaXMub3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9hZGVkTW9uYWNvID0gdHJ1ZTtcbiAgICAgIGxvYWRQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5jb25maWcuYmFzZVVybCB8fCAnL2Fzc2V0cyc7XG4gICAgICAgIC8vIGlmICh0eXBlb2YoKDxhbnk+d2luZG93KS5tb25hY28pID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyAgIHJlc29sdmUoKTtcbiAgICAgICAgLy8gICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgY29uc3Qgb25Hb3RBbWRMb2FkZXI6IGFueSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBMb2FkIG1vbmFjb1xuICAgICAgICAgICg8YW55PndpbmRvdykucmVxdWlyZS5jb25maWcoeyBwYXRoczogeyAndnMnOiBgJHtiYXNlVXJsfS9tb25hY28vdnNgIH0gfSk7XG4gICAgICAgICAgKDxhbnk+d2luZG93KS5yZXF1aXJlKFsndnMvZWRpdG9yL2VkaXRvci5tYWluJ10sICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcub25Nb25hY29Mb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLm9uTW9uYWNvTG9hZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbml0TW9uYWNvKHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gTG9hZCBBTUQgbG9hZGVyIGlmIG5lY2Vzc2FyeVxuICAgICAgICBpZiAoISg8YW55PndpbmRvdykucmVxdWlyZSkge1xuICAgICAgICAgIGNvbnN0IGxvYWRlclNjcmlwdDogSFRNTFNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICBsb2FkZXJTY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgICAgIGxvYWRlclNjcmlwdC5zcmMgPSBgJHtiYXNlVXJsfS9tb25hY28vdnMvbG9hZGVyLmpzYDtcbiAgICAgICAgICBsb2FkZXJTY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIG9uR290QW1kTG9hZGVyKTtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxvYWRlclNjcmlwdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb25Hb3RBbWRMb2FkZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gTW9uYWNvIEVkaXRvciBJbml0aWFsaXplclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW5pdE1vbmFjbyhvcHRpb25zOiBhbnkpOiB2b2lkO1xuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLl93aW5kb3dSZXNpemVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9lZGl0b3IpIHtcbiAgICAgIHRoaXMuX2VkaXRvci5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9lZGl0b3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3J3YXJkUmVmLCBJbmplY3QsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcy9vYnNlcnZhYmxlL2Zyb21FdmVudCc7XG5cbmltcG9ydCB7IEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcsIEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgQ29kZUVkaXRvckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvZGUtZWRpdG9yLmV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09ERV9FRElUT1JfRVZFTlRTIH0gZnJvbSAnLi4vY29uc3RhbnRzL2V2ZW50cyc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yTW9kZWwgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBCYXNlTW9uYWNvRWRpdG9yIH0gZnJvbSAnLi4vYmFzZS1tb25hY28tZWRpdG9yJztcblxuZGVjbGFyZSBjb25zdCBtb25hY286IGFueTtcblxuLy8gaHR0cHM6Ly9jb2RlLWV4YW1wbGVzLm5ldC96aC1DTi9xLzIxNTQ3NjFcbmV4cG9ydCBjb25zdCBDT0RFX0VESVRPUl9JTlBVVF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICAvLyBodHRwczovL2Jsb2cuY3Nkbi5uZXQvd2FuZ2Rhbl8yMDEzL2FydGljbGUvZGV0YWlscy84MTMxNDk1OVxuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FuZ3VsYXItbW9uYWNvLWVkaXRvcicsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImVkaXRvclwiICNjb2RlRWRpdG9yPjwvZGl2PmAsXG4gIHN0eWxlczogW2A6aG9zdHtkaXNwbGF5OmJsb2NrO21pbi1oZWlnaHQ6MjAwcHh9LmVkaXRvcnt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfWBdLFxuXG4gIHByb3ZpZGVyczogW0NPREVfRURJVE9SX0lOUFVUX1ZBTFVFX0FDQ0VTU09SLCBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlXVxufSlcblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJNb25hY29FZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBCYXNlTW9uYWNvRWRpdG9yIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIEBJbnB1dCgnbW9kZWwnKVxuICBzZXQgbW9kZWwobW9kZWw6IEFuZ3VsYXJFZGl0b3JNb2RlbCkge1xuICAgIHRoaXMub3B0aW9ucy5tb2RlbCA9IG1vZGVsO1xuICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgdGhpcy5lZGl0b3IuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5pbml0TW9uYWNvKHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcblxuICBwcml2YXRlIF9lcnJvckluTW9kZWxNYXJrZXIgPSBmYWxzZTtcbiAgZ2V0IGVycm9ySW5Nb2RlbE1hcmtlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JJbk1vZGVsTWFya2VyO1xuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSwgcHJpdmF0ZSBlZGl0b3JFdmVudFNlcnZpY2U6IENvZGVFZGl0b3JFdmVudFNlcnZpY2UsIEBJbmplY3QoQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRykgcHJpdmF0ZSBhbmd1bGFyRWRpdG9yY29uZmlnOiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnKSB7XG4gICAgc3VwZXIoZWRpdG9yRXZlbnRTZXJ2aWNlLCBhbmd1bGFyRWRpdG9yY29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0TW9uYWNvKG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGhhc01vZGVsID0gISFvcHRpb25zLm1vZGVsO1xuICAgIGNvbnN0IGFjaXR2ZU1hcmtlcnMgPSAhIW9wdGlvbnMuYWNpdHZlTWFya2VyczsvL8OowofCqsOlwq7CmsOkwrnCiW9wdGlvblxuXG4gICAgaWYgKGhhc01vZGVsKSB7XG4gICAgICBvcHRpb25zLm1vZGVsID0gbW9uYWNvLmVkaXRvci5jcmVhdGVNb2RlbChvcHRpb25zLm1vZGVsLnZhbHVlLCBvcHRpb25zLm1vZGVsLmxhbmd1YWdlLCBvcHRpb25zLm1vZGVsLnVyaSk7XG4gICAgfVxuXG4gICAgdGhpcy5lZGl0b3IgPSBtb25hY28uZWRpdG9yLmNyZWF0ZSh0aGlzLl9lZGl0b3JDb21wb25lbnQubmF0aXZlRWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWhhc01vZGVsKSB7XG4gICAgICB0aGlzLmVkaXRvci5zZXRWYWx1ZSh0aGlzLl92YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gbW9uYWNvIGVkaXRvciAtPiBvdXRzaWRlIGNvbXBvbmVudFxuICAgIHRoaXMuZWRpdG9yLm9uRGlkQ2hhbmdlTW9kZWxDb250ZW50KChlOiBhbnkpID0+IHRoaXMub25DaGFuZ2VNb2RlbENvbnRlbnRIYW5kbGVyKGUpKTtcblxuICAgIHRoaXMuZWRpdG9yLm9uRGlkQmx1ckVkaXRvclRleHQoKGU6IGFueSkgPT4gdGhpcy5vbkJsdXJFZGl0b3JUZXh0SGFuZGxlcihlKSk7XG5cbiAgICB0aGlzLmVkaXRvci5vbkRpZExheW91dENoYW5nZSgoZTogYW55KSA9PiB0aGlzLm9uTGF5b3V0Q2hhbmdlSGFuZGxlcihlKSk7XG5cbiAgICAvLyByZWZyZXNoIGxheW91dCBvbiByZXNpemUgZXZlbnQuXG4gICAgdGhpcy5yZWZyZXNoTGF5b3V0V2hlbldpbmRvd1Jlc2l6ZSgpO1xuXG4gICAgdGhpcy5lZGl0b3JFdmVudFNlcnZpY2UuZmlyZUV2ZW50KHtcbiAgICAgIGV2ZW50TmFtZTogQ09ERV9FRElUT1JfRVZFTlRTLm9uSW5pdCxcbiAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgIGVkaXRvcjogdGhpcy5lZGl0b3JcbiAgICB9KTtcblxuICAgIC8vIGFjdGl2ZSBtb2RlbCBtYXJrZXJzXG4gICAgaWYgKGhhc01vZGVsICYmIGFjaXR2ZU1hcmtlcnMpIHtcbiAgICAgIHRoaXMuYWNpdHZlTW9kZWxNYXJrZXJzKCk7XG4gICAgfVxuXG4gIH1cbiAgXG4gIC8qKlxuICAgKiBBY2l0dmUgTW9kZWwgbWFya2VycyB0byBnZXQgbWFya2VycycgcmVzdWx0c1xuICAgKi9cbiAgYWNpdHZlTW9kZWxNYXJrZXJzKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L21vbmFjby1lZGl0b3IvaXNzdWVzLzMwXG4gICAgY29uc3Qgc2V0TW9kZWxNYXJrZXJzID0gbW9uYWNvLmVkaXRvci5zZXRNb2RlbE1hcmtlcnM7XG4gICAgbW9uYWNvLmVkaXRvci5zZXRNb2RlbE1hcmtlcnMgPSBmdW5jdGlvbiAobW9kZWwsIG93bmVyLCBtYXJrZXJzKSB7XG4gICAgICBzZXRNb2RlbE1hcmtlcnMuY2FsbChtb25hY28uZWRpdG9yLCBtb2RlbCwgb3duZXIsIG1hcmtlcnMpO1xuICAgICAgaWYgKG1hcmtlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIHRoZXJlIGFyZSBubyBlcnJvcnMoc3lueCBlcnJvciBhbmQgdmFsaWRhdGUgZXJyb3IpXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjb250aW51ZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlcmUgYXJlIGVycm9yc1xuICAgICAgICBzZWxmLl9lcnJvckluTW9kZWxNYXJrZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogcmVmcmVzaCBsYXlvdXQgd2hlbiByZXNpemVkIHRoZSB3aW5kb3dcbiAgICovXG4gIHJlZnJlc2hMYXlvdXRXaGVuV2luZG93UmVzaXplKCkge1xuICAgIGlmICh0aGlzLl93aW5kb3dSZXNpemVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvLyBmcm9tRXZlbnTDp8KUwqjDpMK6wo7DpcKFwrzDpcKQwqzDpMK6wovDpMK7wrbDr8K8wozDpMK6wovDpMK7wrbDqMKnwqbDpcKPwpHDpsKXwrbDr8K8wozDpcKwwobDpMK6wovDpMK7wrZldmVudMOowr3CrMOmwojCkMOlwo/Cr8OmwrXCgcOlworCqMOnwprChE9ic2VydmFibGXDqMK/wpvDqMKhwozDpMK8wqDDqMK+wpNcbiAgICAvLyBodHRwczovL3d3dy5qaWFuc2h1LmNvbS9wLzQ2ODk0ZGViODcwYVxuICAgIHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5lZGl0b3IubGF5b3V0KCkpO1xuICB9XG5cbiAgb25DaGFuZ2VNb2RlbENvbnRlbnRIYW5kbGVyKGUpIHtcbiAgICBjb25zdCBfdmFsdWUgPSB0aGlzLmVkaXRvci5nZXRWYWx1ZSgpO1xuXG4gICAgLy8gbW9uYWNvIGVkaXRvciAtPiBvdXRzaWRlIGNvbXBvbmVudFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KVGFuZ21pbmcvdG0vaXNzdWVzLzQgbmdab25lw6jCr8Kmw6jCp8KjXG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLnZhbHVlID0gX3ZhbHVlKTsgLy8gdmFsdWUgaXMgbm90IHByb3BhZ2F0ZWQgdG8gcGFyZW50IHdoZW4gZXhlY3V0aW5nIG91dHNpZGUgem9uZS5cbiAgfVxuXG4gIG9uQmx1ckVkaXRvclRleHRIYW5kbGVyKGUpIHtcblxuICAgIHRoaXMub25Db250cm9sVG91Y2hlZCgpO1xuICB9XG5cbiAgb25MYXlvdXRDaGFuZ2VIYW5kbGVyKGUpIHtcbiAgICBjb25zb2xlLmxvZygnTGF5b3V0IGNoYW5nZWQ6XFxuJyArIGUpO1xuICB9XG5cbiAgLy8gZ2V0IGFjY2Vzc29yXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIC8vIHNldCBhY2Nlc3NvciBpbmNsdWRpbmcgY2FsbCB0aGUgb25jaGFuZ2UgY2FsbGJhY2tcbiAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgIGlmICh2ICE9PSB0aGlzLnZhbHVlKSB7Ly8gw6bCs8Kow6bChMKPw6jCv8KZw6fCp8KNw6XChsKZw6bCs8KVw6/CvMKMw6XCgMK8w6XCvsKXw6XCrcKmw6TCucKgXG4gICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgfVxuXG4gICAgdGhpcy5vbkNvbnRyb2xWYWx1ZUNoYW5nZSh0aGlzLnZhbHVlKTsgLy8gw6XCnMKow6XCscKew6bCgMKnw6TCv8Kuw6nCpcKww6XCmcKow6nCh8KMw6jCsMKDw6fClMKob25Db250cm9sVmFsdWVDaGFuZ2XDpsKWwrnDpsKzwpVcbiAgfVxuXG4gIGxvY2FsRWRpdG9yKCkgey8vIERlbW86IG91dHNpZGUgY29tcG9uZW50IC0+IG1vbmFjbyBlZGl0b3JcbiAgICB0aGlzLndyaXRlVmFsdWUoJ3Rlc3QnKTtcbiAgfVxuXG4gIC8vIG91dHNpZGUgY29tcG9uZW50IC0+IG1vbmFjbyBlZGl0b3JcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBzZWxmLnZhbHVlID0gdmFsdWUgfHwgJyc7XG5cbiAgICAvLyBGaXggZm9yIHZhbHVlIGNoYW5nZSB3aGlsZSBkaXNwb3NlIGluIHByb2Nlc3NcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChzZWxmLmVkaXRvciAvKiYmICF0aGlzLm9wdGlvbnMubW9kZWwqLykge1xuICAgICAgICBzZWxmLmVkaXRvci5zZXRWYWx1ZShzZWxmLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ29udHJvbFZhbHVlQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkID0gZm47XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvcsOmwo/CkMOkwr7Cm8OnwprChMOkwrrCi8OkwrvCtsOlwpvCnsOowrDCg1xuICBvbkNvbnRyb2xWYWx1ZUNoYW5nZSA9IChfOiBhbnkpID0+IHtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yw6bCj8KQw6TCvsKbw6fCmsKEw6TCusKLw6TCu8K2w6XCm8Kew6jCsMKDXG4gIG9uQ29udHJvbFRvdWNoZWQgPSAoKSA9PiB7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcsIEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9hbmd1bGFyLW1vbmFjby1lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgXVxufSlcblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJNb25hY29FZGl0b3JNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFuZ3VsYXJNb25hY29FZGl0b3JNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsidHNsaWJfMS5fX2V4dGVuZHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBSUEscUJBQWEsNEJBQTRCLEdBQUcsSUFBSSxjQUFjLENBQUMsOEJBQThCLENBQUM7Ozs7OztBQ0o5RixBQUFPLHFCQUFNLGtCQUFrQixHQUFHO0lBQzlCLE1BQU0sRUFBRSxRQUFRO0NBQ25CLENBQUM7Ozs7OztBQ0ZGOzswQkFRd0IsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzt1QkFDNUIsRUFBRTs7Ozs7Ozs7Ozs7SUFNekIseUNBQVE7Ozs7O0lBQVIsVUFBUyxLQUFLO1FBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7O0tBRS9COzs7OztJQUVELDBDQUFTOzs7O0lBQVQsVUFBVSxLQUFLO1FBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOztLQUU3Qzs7Z0JBakJKLFVBQVU7O2lDQU5YOzs7Ozs7O0FDQUEsQUFRQSxxQkFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLHFCQUFJLFdBQTBCLENBQUM7Ozs7O0lBaUM3QiwwQkFBb0Isc0JBQThDLEVBQVUsTUFBaUM7UUFBekYsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUFVLFdBQU0sR0FBTixNQUFN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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tb25hY28tZWRpdG9yLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9hbmd1bGFyLW1vbmFjby1lZGl0b3IvbGliL2VkaXRvci9tb2RlbC9jb25maWcudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2NvbnN0YW50L2V2ZW50cy50cyIsIm5nOi8vYW5ndWxhci1tb25hY28tZWRpdG9yL2xpYi9lZGl0b3Ivc2VydmljZS9jb2RlLWVkaXRvci5ldmVudC5zZXJ2aWNlLnRzIiwibmc6Ly9hbmd1bGFyLW1vbmFjby1lZGl0b3IvbGliL2VkaXRvci9tb2RlbC9iYXNlLW1vbmFjby1lZGl0b3IudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL3NlcnZpY2UvYW5ndWxhci1tb25hY28tZWRpdG9yLnNlcnZpY2UudHMiLCJuZzovL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9saWIvZWRpdG9yL2FuZ3VsYXItbW9uYWNvLWVkaXRvci9hbmd1bGFyLW1vbmFjby1lZGl0b3IuY29tcG9uZW50LnRzIiwibmc6Ly9hbmd1bGFyLW1vbmFjby1lZGl0b3IvbGliL2VkaXRvci9lZGl0b3IubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8vIGluamVjdGlvblRva2Vuw6TCvcKcw6fClMKow6jCr8K0w6bCmMKOXG4vLyBodHRwczovL3NlZ21lbnRmYXVsdC5jb20vYS8xMTkwMDAwMDA4NjI2MzQ4XG5leHBvcnQgY29uc3QgQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbignQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcge1xuICBiYXNlVXJsPzogc3RyaW5nO1xuICBkZWZhdWx0T3B0aW9ucz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICBvbk1vbmFjb0xvYWQ/OiBGdW5jdGlvbjtcbn1cbiIsImV4cG9ydCBjb25zdCBDT0RFX0VESVRPUl9FVkVOVFMgPSB7XG4gICAgb25Jbml0OiAnb25Jbml0J1xufTtcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgYXNzaWduIH0gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgQ09ERV9FRElUT1JfRVZFTlRTIH0gZnJvbSAnLi4vY29uc3RhbnQvZXZlbnRzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvZGVFZGl0b3JFdmVudFNlcnZpY2Uge1xuICAgIHB1YmxpYyBldmVudE5hbWVzID0gT2JqZWN0LmtleXMoQ09ERV9FRElUT1JfRVZFTlRTKTtcbiAgICBwcml2YXRlIF9ldmVudHM6IGFueSA9IHt9OyAvLyDDpMK9wr/Dp8KUwqjDpMK6wovDpMK7wrZcblxuICAgIC8qKlxuICAgICAqIMOowq7CvsOnwr3CrsOlwpDCr8OnwpTCqMOkwrrCi8OkwrvCtlxuICAgICAqIEBwYXJhbSAgw6TCusKLw6TCu8K2XG4gICAgICovXG4gICAgYWRkRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgYXNzaWduKHRoaXMuX2V2ZW50cywgZXZlbnQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmV2ZW50cyk7XG4gICAgfVxuXG4gICAgZmlyZUV2ZW50KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2V2ZW50c1tldmVudC5ldmVudE5hbWVdLmVtaXQoZXZlbnQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkVtaXQgRXZlbnQ6XCIgKyBldmVudCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LCBWaWV3Q2hpbGQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHBpY2sgfSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQ29kZUVkaXRvckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvY29kZS1lZGl0b3IuZXZlbnQuc2VydmljZSc7XG5cbmxldCBsb2FkZWRNb25hY28gPSBmYWxzZTtcbmxldCBsb2FkUHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VNb25hY29FZGl0b3IgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByb3RlY3RlZCBfZWRpdG9yOiBhbnk7XG4gIHByaXZhdGUgX29wdGlvbnM6IGFueTtcbiAgcHJvdGVjdGVkIF93aW5kb3dSZXNpemVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBAVmlld0NoaWxkKCdjb2RlRWRpdG9yJykgX2VkaXRvckNvbXBvbmVudDogRWxlbWVudFJlZjsgLy8gw6XCisKow6bCgMKBw6bCt8K7w6XCisKgw6TCu8Kjw6fCoMKBw6fCvMKWw6jCvsKRw6XCmcKoXG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW91dHB1dC1vbi1wcmVmaXhcbiAgQE91dHB1dCgpIG9uSW5pdDtcblxuICBASW5wdXQoJ29wdGlvbnMnKVxuICBzZXQgb3B0aW9ucyhvcHRpb25zOiBhbnkpIHtcbiAgICAvLyDDqcK7wpjDqMKuwqRvcHRpb25zKHRoaXMuY29uZmlnLmRlZmF1bHRPcHRpb25zKSArIMOowofCqsOlwq7CmsOkwrnCiW9wdGlvbnMob3B0aW9ucylcbiAgICB0aGlzLl9vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25maWcuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIGlmICh0aGlzLl9lZGl0b3IpIHtcbiAgICAgIHRoaXMuX2VkaXRvci5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmluaXRNb25hY28ob3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIGdldCBvcHRpb25zKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvZGVFZGl0b3JFdmVudFNlcnZpY2U6IENvZGVFZGl0b3JFdmVudFNlcnZpY2UsIHByaXZhdGUgY29uZmlnOiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnKSB7XG4gICAgICAgIC8vIMOlwojCncOlwqfCi8OlwozClsOowofCqsOlwq7CmsOkwrnCicOkwrrCi8OkwrvCtlxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29kZUVkaXRvckV2ZW50U2VydmljZS5ldmVudE5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAvLyDDpcKIwpvDpcK7wrrDqMKHwqrDpcKuwprDpMK5wonDpMK6wovDpMK7wrbDr8K8wozDpsKtwqTDpcKkwoTDpMK9wpzDp8KUwqjDp8KtwonDpsKVwojDpMK6wo46IEBPdXRwdXQoKSBvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICAgICAgICAgIHNlbGZbbmFtZV0gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICAgICAgICBjb25zdCBldmVudFBhaXIgPSBwaWNrKHNlbGYsIG5hbWUpO1xuICAgICAgICAgIGNvZGVFZGl0b3JFdmVudFNlcnZpY2UuYWRkRXZlbnQoZXZlbnRQYWlyKTtcbiAgICAgICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKGxvYWRlZE1vbmFjbykge1xuICAgICAgLy8gV2FpdCB1bnRpbCBtb25hY28gZWRpdG9yIGlzIGF2YWlsYWJsZVxuICAgICAgbG9hZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdE1vbmFjbyh0aGlzLm9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvYWRlZE1vbmFjbyA9IHRydWU7XG4gICAgICBsb2FkUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMuY29uZmlnLmJhc2VVcmwgfHwgJy9hc3NldHMnO1xuICAgICAgICAvLyBpZiAodHlwZW9mKCg8YW55PndpbmRvdykubW9uYWNvKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gICByZXNvbHZlKCk7XG4gICAgICAgIC8vICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG4gICAgICAgIGNvbnN0IG9uR290QW1kTG9hZGVyOiBhbnkgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gTG9hZCBtb25hY29cbiAgICAgICAgICAoPGFueT53aW5kb3cpLnJlcXVpcmUuY29uZmlnKHsgcGF0aHM6IHsgJ3ZzJzogYCR7YmFzZVVybH0vbW9uYWNvL3ZzYCB9IH0pO1xuICAgICAgICAgICg8YW55PndpbmRvdykucmVxdWlyZShbJ3ZzL2VkaXRvci9lZGl0b3IubWFpbiddLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlnLm9uTW9uYWNvTG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5vbk1vbmFjb0xvYWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5pdE1vbmFjbyh0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIExvYWQgQU1EIGxvYWRlciBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKCEoPGFueT53aW5kb3cpLnJlcXVpcmUpIHtcbiAgICAgICAgICBjb25zdCBsb2FkZXJTY3JpcHQ6IEhUTUxTY3JpcHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgICAgbG9hZGVyU2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgICAgICBsb2FkZXJTY3JpcHQuc3JjID0gYCR7YmFzZVVybH0vbW9uYWNvL3ZzL2xvYWRlci5qc2A7XG4gICAgICAgICAgbG9hZGVyU2NyaXB0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBvbkdvdEFtZExvYWRlcik7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsb2FkZXJTY3JpcHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uR290QW1kTG9hZGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1vbmFjbyBFZGl0b3IgSW5pdGlhbGl6ZXJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGluaXRNb25hY28ob3B0aW9uczogYW55KTogdm9pZCA7XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fd2luZG93UmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2VkaXRvcikge1xuICAgICAgdGhpcy5fZWRpdG9yLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX2VkaXRvciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmRlY2xhcmUgY29uc3QgbW9uYWNvOiBhbnk7XHJcblxyXG4vLyBBbmd1bGFyIE1vbmFjbyBFZGl0b3IgQ29tcG9uZW50IFZhcmlhYmxlc1xyXG4vLyDDpsKxwofDpsKAwrtBbmd1bGFyIG1vbmFjbyBlZGl0b3IgY29tcG9uZW50IMOnwrvChMOkwrvCtsOmwprCtMOpwpzCssOnwprChMOlwo/CmMOpwofCj1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBbmd1bGFyTW9uYWNvRWRpdG9yU2VydmljZSB7XHJcblxyXG4gICAgcHJpdmF0ZSBfZXhpc3RFcnJvciA9IGZhbHNlOy8vw6nCu8KYw6jCrsKkw6bCssKhw6bCnMKJw6nClMKZw6jCr8KvXHJcbiAgICBnZXQgZXhpc3RFcnJvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXhpc3RFcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVNb2RlbE1hcmtlcnMoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvbW9uYWNvLWVkaXRvci9pc3N1ZXMvMzBcclxuICAgICAgICBjb25zdCBzZXRNb2RlbE1hcmtlcnMgPSBtb25hY28uZWRpdG9yLnNldE1vZGVsTWFya2VycztcclxuICAgICAgICBtb25hY28uZWRpdG9yLnNldE1vZGVsTWFya2VycyA9IGZ1bmN0aW9uIChtb2RlbCwgb3duZXIsIG1hcmtlcnMpIHtcclxuICAgICAgICAgICAgc2V0TW9kZWxNYXJrZXJzLmNhbGwobW9uYWNvLmVkaXRvciwgbW9kZWwsIG93bmVyLCBtYXJrZXJzKTtcclxuICAgICAgICAgICAgaWYgKG1hcmtlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGVyZSBhcmUgbm8gZXJyb3JzKHN5bnggZXJyb3IgYW5kIHZhbGlkYXRlIGVycm9yKVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NvbnRpbnVlJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGVyZSBhcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICBzZWxmLl9leGlzdEVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3J3YXJkUmVmLCBJbmplY3QsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcy9vYnNlcnZhYmxlL2Zyb21FdmVudCc7XG5cbmltcG9ydCB7IEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcsIEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgfSBmcm9tICcuLi9tb2RlbC9jb25maWcnO1xuaW1wb3J0IHsgQ29kZUVkaXRvckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvY29kZS1lZGl0b3IuZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBDT0RFX0VESVRPUl9FVkVOVFMgfSBmcm9tICcuLi9jb25zdGFudC9ldmVudHMnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvck1vZGVsIH0gZnJvbSAnLi4vbW9kZWwvdHlwZXMnO1xuaW1wb3J0IHsgQmFzZU1vbmFjb0VkaXRvciB9IGZyb20gJy4uL21vZGVsL2Jhc2UtbW9uYWNvLWVkaXRvcic7XG5pbXBvcnQgeyBBbmd1bGFyTW9uYWNvRWRpdG9yU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvYW5ndWxhci1tb25hY28tZWRpdG9yLnNlcnZpY2UnO1xuXG5kZWNsYXJlIGNvbnN0IG1vbmFjbzogYW55O1xuXG4vLyDDqMKHwqrDpcKuwprDpMK5wonDqMK+wpPDpcKFwqXDpsKOwqfDpMK7wrY6MS7DpcKwwoHDqMKjwoVDb250cm9sVmFsdWVBY2Nlc3NvclxuLy8gaHR0cHM6Ly9jb2RlLWV4YW1wbGVzLm5ldC96aC1DTi9xLzIxNTQ3NjFcbmV4cG9ydCBjb25zdCBDT0RFX0VESVRPUl9JTlBVVF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICAvLyBodHRwczovL2Jsb2cuY3Nkbi5uZXQvd2FuZ2Rhbl8yMDEzL2FydGljbGUvZGV0YWlscy84MTMxNDk1OVxuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FuZ3VsYXItbW9uYWNvLWVkaXRvcicsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImVkaXRvclwiICNjb2RlRWRpdG9yPjwvZGl2PmAsXG4gIHN0eWxlczogW2A6aG9zdHtkaXNwbGF5OmJsb2NrO21pbi1oZWlnaHQ6MjAwcHh9LmVkaXRvcnt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfWBdLFxuICAvLyDDqMKHwqrDpcKuwprDpMK5wonDqMK+wpPDpcKFwqXDpsKOwqfDpMK7wrY6Mi7DpcK8wpXDpcKFwqXDpMK+wp3DqMK1wpbDpsKcwo3DpcKKwqFDb250cm9sVmFsdWVBY2Nlc3NvclxuICBwcm92aWRlcnM6IFtcbiAgICBDT0RFX0VESVRPUl9JTlBVVF9WQUxVRV9BQ0NFU1NPUiwgXG4gICAgQ29kZUVkaXRvckV2ZW50U2VydmljZVxuICBdXG59KVxuXG4vLyDDqMKHwqrDpcKuwprDpMK5wonDqMK+wpPDpcKFwqXDpsKOwqfDpMK7wrYgPC0+IE1vbmFjbyBFZHRvclxuXG4vLyDDqMKHwqrDpcKuwprDpMK5wonDqMK+wpPDpcKFwqXDpsKOwqfDpMK7wrY6My4xIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3JcbmV4cG9ydCBjbGFzcyBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQmFzZU1vbmFjb0VkaXRvciBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBASW5wdXQoJ21vZGVsJylcbiAgc2V0IG1vZGVsKG1vZGVsOiBBbmd1bGFyRWRpdG9yTW9kZWwpIHtcbiAgICB0aGlzLm9wdGlvbnMubW9kZWwgPSBtb2RlbDtcbiAgICBpZiAodGhpcy5fZWRpdG9yKSB7XG4gICAgICB0aGlzLl9lZGl0b3IuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5pbml0TW9uYWNvKHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYW5ndWxhck1vbmFjb0VkaXRvclNlcnZpY2U6IEFuZ3VsYXJNb25hY29FZGl0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgZWRpdG9yRXZlbnRTZXJ2aWNlOiBDb2RlRWRpdG9yRXZlbnRTZXJ2aWNlLFxuICAgIEBJbmplY3QoQU5HVUxBUl9NT05BQ09fRURJVE9SX0NPTkZJRykgcHJpdmF0ZSBhbmd1bGFyRWRpdG9yY29uZmlnOiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnKSB7XG4gICAgc3VwZXIoZWRpdG9yRXZlbnRTZXJ2aWNlLCBhbmd1bGFyRWRpdG9yY29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0TW9uYWNvKG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGhhc01vZGVsID0gISFvcHRpb25zLm1vZGVsO1xuXG4gICAgaWYgKGhhc01vZGVsKSB7XG4gICAgICBvcHRpb25zLm1vZGVsID0gbW9uYWNvLmVkaXRvci5jcmVhdGVNb2RlbChvcHRpb25zLm1vZGVsLnZhbHVlLCBvcHRpb25zLm1vZGVsLmxhbmd1YWdlLCBvcHRpb25zLm1vZGVsLnVyaSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZWRpdG9yID0gbW9uYWNvLmVkaXRvci5jcmVhdGUodGhpcy5fZWRpdG9yQ29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFoYXNNb2RlbCkge1xuICAgICAgdGhpcy5fZWRpdG9yLnNldFZhbHVlKHRoaXMuX3ZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBtb25hY28gZWRpdG9yIC0+IG91dHNpZGUgY29tcG9uZW50XG4gICAgdGhpcy5fZWRpdG9yLm9uRGlkQ2hhbmdlTW9kZWxDb250ZW50KChlOiBhbnkpID0+IHRoaXMub25DaGFuZ2VNb2RlbENvbnRlbnRIYW5kbGVyKGUpKTtcblxuICAgIHRoaXMuX2VkaXRvci5vbkRpZEJsdXJFZGl0b3JUZXh0KChlOiBhbnkpID0+IHRoaXMub25CbHVyRWRpdG9yVGV4dEhhbmRsZXIoZSkpO1xuXG4gICAgdGhpcy5fZWRpdG9yLm9uRGlkTGF5b3V0Q2hhbmdlKChlOiBhbnkpID0+IHRoaXMub25MYXlvdXRDaGFuZ2VIYW5kbGVyKGUpKTtcblxuICAgIC8vIHJlZnJlc2ggbGF5b3V0IG9uIHJlc2l6ZSBldmVudC5cbiAgICB0aGlzLnJlZnJlc2hMYXlvdXRXaGVuV2luZG93UmVzaXplKCk7XG5cbiAgICB0aGlzLmVkaXRvckV2ZW50U2VydmljZS5maXJlRXZlbnQoe1xuICAgICAgZXZlbnROYW1lOiBDT0RFX0VESVRPUl9FVkVOVFMub25Jbml0LFxuICAgICAgdGFyZ2V0OiB0aGlzLFxuICAgICAgZWRpdG9yOiB0aGlzLl9lZGl0b3JcbiAgICB9KTtcblxuICAgIGlmIChoYXNNb2RlbCkge1xuICAgICAgdGhpcy5hbmd1bGFyTW9uYWNvRWRpdG9yU2VydmljZS5oYW5kbGVNb2RlbE1hcmtlcnMoKTtcbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGxheW91dCB3aGVuIHJlc2l6ZWQgdGhlIHdpbmRvd1xuICAgKi9cbiAgcmVmcmVzaExheW91dFdoZW5XaW5kb3dSZXNpemUoKSB7XG4gICAgaWYgKHRoaXMuX3dpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fd2luZG93UmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIC8vIGZyb21FdmVudMOnwpTCqMOkwrrCjsOlwoXCvMOlwpDCrMOkwrrCi8OkwrvCtsOvwrzCjMOkwrrCi8OkwrvCtsOowqfCpsOlwo/CkcOmwpfCtsOvwrzCjMOlwrDChsOkwrrCi8OkwrvCtmV2ZW50w6jCvcKsw6bCiMKQw6XCj8Kvw6bCtcKBw6XCisKow6fCmsKET2JzZXJ2YWJsZcOowr/Cm8OowqHCjMOkwrzCoMOowr7Ck1xuICAgIC8vIGh0dHBzOi8vd3d3LmppYW5zaHUuY29tL3AvNDY4OTRkZWI4NzBhXG4gICAgdGhpcy5fd2luZG93UmVzaXplU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9lZGl0b3IubGF5b3V0KCkpO1xuICB9XG5cbiAgb25DaGFuZ2VNb2RlbENvbnRlbnRIYW5kbGVyKGUpIHtcbiAgICBjb25zdCBfdmFsdWUgPSB0aGlzLl9lZGl0b3IuZ2V0VmFsdWUoKTtcblxuICAgIC8vIG1vbmFjbyBlZGl0b3IgLT4gb3V0c2lkZSBjb21wb25lbnRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSlRhbmdtaW5nL3RtL2lzc3Vlcy80IG5nWm9uZcOowq/CpsOowqfCo1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy52YWx1ZSA9IF92YWx1ZSk7IC8vIHZhbHVlIGlzIG5vdCBwcm9wYWdhdGVkIHRvIHBhcmVudCB3aGVuIGV4ZWN1dGluZyBvdXRzaWRlIHpvbmUuXG4gIH1cblxuICBvbkJsdXJFZGl0b3JUZXh0SGFuZGxlcihlKSB7XG5cbiAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQoKTtcbiAgfVxuXG4gIG9uTGF5b3V0Q2hhbmdlSGFuZGxlcihlKSB7XG4gICAgY29uc29sZS5sb2coJ0xheW91dCBjaGFuZ2VkOlxcbicgKyBlKTtcbiAgfVxuXG4gIC8vIGdldCBhY2Nlc3NvclxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICAvLyBzZXQgYWNjZXNzb3IgaW5jbHVkaW5nIGNhbGwgdGhlIG9uY2hhbmdlIGNhbGxiYWNrXG4gIHNldCB2YWx1ZSh2OiBhbnkpIHtcbiAgICBpZiAodiAhPT0gdGhpcy52YWx1ZSkgey8vIMOmwrPCqMOmwoTCj8Oowr/CmcOnwqfCjcOlwobCmcOmwrPClcOvwrzCjMOlwoDCvMOlwr7Cl8Olwq3CpsOkwrnCoFxuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgIH1cblxuICAgIHRoaXMub25Db250cm9sVmFsdWVDaGFuZ2UodGhpcy52YWx1ZSk7IC8vIMOlwpzCqMOlwrHCnsOmwoDCp8Okwr/CrsOpwqXCsMOlwpnCqMOpwofCjMOowrDCg8OnwpTCqG9uQ29udHJvbFZhbHVlQ2hhbmdlw6bClsK5w6bCs8KVXG4gIH1cblxuICAvLyDDqMKHwqrDpcKuwprDpMK5wonDqMK+wpPDpcKFwqXDpsKOwqfDpMK7wrY6My4yIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb1xuXG4gIC8vIG91dHNpZGUgY29tcG9uZW50IC0+IG1vbmFjbyBlZGl0b3JcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBzZWxmLnZhbHVlID0gdmFsdWUgfHwgJyc7XG5cbiAgICAvLyBGaXggZm9yIHZhbHVlIGNoYW5nZSB3aGlsZSBkaXNwb3NlIGluIHByb2Nlc3MuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoc2VsZi5fZWRpdG9yIC8qJiYgIXRoaXMub3B0aW9ucy5tb2RlbCovKSB7XG4gICAgICAgIHNlbGYuX2VkaXRvci5zZXRWYWx1ZShzZWxmLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ29udHJvbFZhbHVlQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkID0gZm47XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvcsOmwo/CkMOkwr7Cm8OnwprChMOkwrrCi8OkwrvCtsOlwpvCnsOowrDCg1xuICBvbkNvbnRyb2xWYWx1ZUNoYW5nZSA9IChfOiBhbnkpID0+IHtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yw6bCj8KQw6TCvsKbw6fCmsKEw6TCusKLw6TCu8K2w6XCm8Kew6jCsMKDXG4gIG9uQ29udHJvbFRvdWNoZWQgPSAoKSA9PiB7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFOR1VMQVJfTU9OQUNPX0VESVRPUl9DT05GSUcsIEFuZ3VsYXJNb25hY29FZGl0b3JDb25maWcgfSBmcm9tICcuL21vZGVsL2NvbmZpZyc7XG5pbXBvcnQgeyBBbmd1bGFyTW9uYWNvRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9hbmd1bGFyLW1vbmFjby1lZGl0b3IvYW5ndWxhci1tb25hY28tZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQW5ndWxhck1vbmFjb0VkaXRvckNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgXVxufSlcblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJNb25hY29FZGl0b3JNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBBbmd1bGFyTW9uYWNvRWRpdG9yQ29uZmlnID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFuZ3VsYXJNb25hY29FZGl0b3JNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBBTkdVTEFSX01PTkFDT19FRElUT1JfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsidHNsaWJfMS5fX2V4dGVuZHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBSUEscUJBQWEsNEJBQTRCLEdBQUcsSUFBSSxjQUFjLENBQUMsOEJBQThCLENBQUM7Ozs7OztBQ0o5RixBQUFPLHFCQUFNLGtCQUFrQixHQUFHO0lBQzlCLE1BQU0sRUFBRSxRQUFRO0NBQ25CLENBQUM7Ozs7OztBQ0ZGOzswQkFRd0IsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzt1QkFDNUIsRUFBRTs7Ozs7Ozs7Ozs7SUFNekIseUNBQVE7Ozs7O0lBQVIsVUFBUyxLQUFLO1FBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7O0tBRS9COzs7OztJQUVELDBDQUFTOzs7O0lBQVQsVUFBVSxLQUFLO1FBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOztLQUU3Qzs7Z0JBakJKLFVBQVU7O2lDQU5YOzs7Ozs7O0FDQUEsQUFRQSxxQkFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLHFCQUFJLFdBQTBCLENBQUM7Ozs7O0lBMEI3QiwwQkFBb0Isc0JBQThDLEVBQVUsTUFBaUM7UUFBekYsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQTJCOztRQUV2RyxxQkFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLHNCQUFzQixDQUFDLFVB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
import { NgZone } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { AngularMonacoEditorConfig } from '../config';
import { CodeEditorEventService } from '../services/code-editor.event.service';
import { AngularEditorModel } from '../types';
import { BaseMonacoEditor } from '../base-monaco-editor';
import { AngularMonacoEditorConfig } from '../model/config';
import { CodeEditorEventService } from '../service/code-editor.event.service';
import { AngularEditorModel } from '../model/types';
import { BaseMonacoEditor } from '../model/base-monaco-editor';
import { AngularMonacoEditorService } from '../service/angular-monaco-editor.service';
export declare const CODE_EDITOR_INPUT_VALUE_ACCESSOR: any;
export declare class AngularMonacoEditorComponent extends BaseMonacoEditor implements ControlValueAccessor {
private angularMonacoEditorService;
private zone;

@@ -14,11 +16,5 @@ private editorEventService;

private _value;
private _errorInModelMarker;
readonly errorInModelMarker: boolean;
constructor(zone: NgZone, editorEventService: CodeEditorEventService, angularEditorconfig: AngularMonacoEditorConfig);
constructor(angularMonacoEditorService: AngularMonacoEditorService, zone: NgZone, editorEventService: CodeEditorEventService, angularEditorconfig: AngularMonacoEditorConfig);
protected initMonaco(options: any): void;
/**
* Acitve Model markers to get markers' results
*/
acitveModelMarkers(): void;
/**
* refresh layout when resized the window

@@ -31,3 +27,2 @@ */

value: any;
localEditor(): void;
writeValue(value: any): void;

@@ -34,0 +29,0 @@ registerOnChange(fn: any): void;

import { ModuleWithProviders } from '@angular/core';
import { AngularMonacoEditorConfig } from './config';
import { AngularMonacoEditorConfig } from './model/config';
export declare class AngularMonacoEditorModule {
static forRoot(config?: AngularMonacoEditorConfig): ModuleWithProviders;
}
{
"name": "angular-monaco-editor",
"version": "1.6.0",
"version": "1.7.0",
"description": "To utilize the Monaco Code Editor as an Angular Component.",

@@ -5,0 +5,0 @@ "author": "courage007 <wang_xufa@163.com>",

export * from './lib/editor/editor.module';
export * from './lib/editor/config';
export * from './lib/editor/types';
export * from './lib/editor/model/config';
export * from './lib/editor/model/types';

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc