@worktile/theia 16.3.8 → 16.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/editor.component.d.ts +3 -3
- package/editor.module.d.ts +2 -2
- package/esm2022/editor.component.mjs +58 -52
- package/esm2022/plugins/align/align.editor.mjs +5 -7
- package/esm2022/plugins/image/image.component.mjs +4 -4
- package/esm2022/plugins/quick-insert/quick-insert.editor.mjs +2 -6
- package/esm2022/services/context.service.mjs +8 -10
- package/fesm2022/worktile-theia.mjs +65 -65
- package/fesm2022/worktile-theia.mjs.map +1 -1
- package/interfaces/editor.d.ts +1 -1
- package/package.json +1 -1
- package/plugins/image/image.component.d.ts +1 -1
- package/services/context.service.d.ts +2 -3
package/editor.component.d.ts
CHANGED
|
@@ -42,9 +42,9 @@ export declare class TheEditorComponent implements OnInit, OnChanges, OnDestroy
|
|
|
42
42
|
visibleQuickInsertPlus: boolean;
|
|
43
43
|
elementToHtml: WeakMap<Element, string>;
|
|
44
44
|
decorate: (nodeEntry: NodeEntry) => Range[];
|
|
45
|
+
get options(): TheOptions;
|
|
45
46
|
get theGlobalToolbarInstance(): TheToolbarComponent;
|
|
46
47
|
get maxHeight(): string;
|
|
47
|
-
get inlineToolbarVisible(): boolean;
|
|
48
48
|
private onChangeCallback;
|
|
49
49
|
private onTouchedCallback;
|
|
50
50
|
constructor(cdr: ChangeDetectorRef, destroyRef: DestroyRef, elementRef: ElementRef, injector: Injector, ngZone: NgZone, viewContainerRef: ViewContainerRef, theContextService: TheContextService, iconRegistry: ThyIconRegistry, presetConfig: ThePresetConfig);
|
|
@@ -52,12 +52,12 @@ export declare class TheEditorComponent implements OnInit, OnChanges, OnDestroy
|
|
|
52
52
|
ngOnChanges(changes: SimpleChanges): void;
|
|
53
53
|
ngOnDestroy(): void;
|
|
54
54
|
private initialize;
|
|
55
|
+
private initializeOptions;
|
|
56
|
+
private initializeContext;
|
|
55
57
|
private getPlugins;
|
|
56
58
|
private initializeMobileMode;
|
|
57
59
|
private toolbarCalculate;
|
|
58
60
|
private initializeGlobalToolbar;
|
|
59
|
-
private initializeContext;
|
|
60
|
-
private initializeOptions;
|
|
61
61
|
private initializeQuickInsert;
|
|
62
62
|
private initializeEvents;
|
|
63
63
|
private subscribeUploadingStatus;
|
package/editor.module.d.ts
CHANGED
|
@@ -101,8 +101,8 @@ import * as i68 from "ngx-tethys/input-number";
|
|
|
101
101
|
import * as i69 from "ngx-tethys/color-picker";
|
|
102
102
|
import * as i70 from "ng-codemirror";
|
|
103
103
|
import * as i71 from "./components/column-resize/column-resize.module";
|
|
104
|
-
export declare const COMPONENTS: (typeof TheTableToolbarItemComponent | typeof TheVerticalToolbarItemComponent | typeof TheColorToolbarItemComponent | typeof TheTextComponent | typeof
|
|
105
|
-
export declare const PLUGIN_COMPONENTS: (typeof
|
|
104
|
+
export declare const COMPONENTS: (typeof TheInlineToolbarComponent | typeof TheTableToolbarItemComponent | typeof TheVerticalToolbarItemComponent | typeof TheColorToolbarItemComponent | typeof TheTextComponent | typeof TheToolbarComponent | typeof TheToolbarDropdownComponent | typeof TheToolbarGroupComponent | typeof TheToolbarItemComponent | typeof TheDefaultElementComponent | typeof TheQuickInsertComponent | typeof ThePluginMenuComponent | typeof TheContextMenuComponent | typeof TheInsertMarkComponent | typeof TheTableSelectComponent | typeof TheConversionHintComponent | typeof TheTableOptionsComponent | typeof TheListboxOptionDirective | typeof TheListboxGroupDirective | typeof TheListboxDirective | typeof ThePreventDefaultDirective)[];
|
|
105
|
+
export declare const PLUGIN_COMPONENTS: (typeof TheImageComponent | typeof TheTemplateComponent | typeof TheBlockquoteComponent | typeof TheTodoItemComponent | typeof TheCodeComponent | typeof TheLinkComponent | typeof TheLinkEditComponent | typeof TheLinkHoverComponent | typeof TheTableToolbarComponent | typeof TheTableComponent | typeof TheTableRowComponent | typeof TheTdComponent)[];
|
|
106
106
|
export declare class TheEditorModule {
|
|
107
107
|
static ɵfac: i0.ɵɵFactoryDeclaration<TheEditorModule, never>;
|
|
108
108
|
static ɵmod: i0.ɵɵNgModuleDeclaration<TheEditorModule, [typeof i1.TheEditorComponent, typeof i2.ElementStylePipe, typeof i2.ElementClassPipe, typeof i3.TableFreezeColumnPipe, typeof i3.TableFreezeRowPipe, typeof i2.PluginMenuPipe, typeof i4.TheToolbarComponent, typeof i5.TheToolbarDropdownComponent, typeof i6.TheToolbarGroupComponent, typeof i7.TheToolbarItemComponent, typeof i8.TheInlineToolbarComponent, typeof i9.TheTextComponent, typeof i10.TheDefaultElementComponent, typeof i11.TheQuickInsertComponent, typeof i12.ThePluginMenuComponent, typeof i13.TheColorToolbarItemComponent, typeof i14.TheContextMenuComponent, typeof i15.TheInsertMarkComponent, typeof i16.TheTableSelectComponent, typeof i17.TheTableToolbarItemComponent, typeof i18.TheConversionHintComponent, typeof i19.TheVerticalToolbarItemComponent, typeof i20.TheTableOptionsComponent, typeof i21.TheListboxOptionDirective, typeof i21.TheListboxGroupDirective, typeof i21.TheListboxDirective, typeof i22.ThePreventDefaultDirective, typeof i23.TheImageComponent, typeof i24.TheTemplateComponent, typeof i25.TheHrComponent, typeof i26.TheBlockquoteComponent, typeof i27.TheTodoItemComponent, typeof i28.TheListItemComponent, typeof i29.TheBulletedListComponent, typeof i30.TheNumberedListComponent, typeof i31.TheCodeComponent, typeof i32.TheLinkComponent, typeof i33.TheLinkEditComponent, typeof i34.TheLinkHoverComponent, typeof i35.TheTableToolbarComponent, typeof i36.TheTableComponent, typeof i37.TheTableRowComponent, typeof i38.TheTdComponent, typeof i39.TheInlineCodeComponent], [typeof i40.CommonModule, typeof i41.ScrollingModule, typeof i42.SlateModule, typeof i43.FormsModule, typeof i44.ThyIconModule, typeof i45.ThyAvatarModule, typeof i46.ThyNavModule, typeof i47.ThyFormModule, typeof i48.ThySharedModule, typeof i49.ThyListModule, typeof i50.ThyTooltipModule, typeof i51.ThyProgressModule, typeof i52.ThyAutocompleteModule, typeof i53.ThyInputModule, typeof i54.ThySelectModule, typeof i55.ThyButtonModule, typeof i56.ThyNotifyModule, typeof i57.ThyAlertModule, typeof i58.ThyResizableModule, typeof i59.ThySwitchModule, typeof i60.ThyImageModule, typeof i61.ThyDialogModule, typeof i62.ThyActionModule, typeof i63.ThyDividerModule, typeof i64.ThyDropdownModule, typeof i65.ThyMenuModule, typeof i66.ThyEmptyModule, typeof i67.ThyPopoverModule, typeof i68.ThyInputNumberModule, typeof i69.ThyColorPickerModule, typeof i70.CodemirrorModule, typeof i71.TheColumnSizeModule], [typeof i1.TheEditorComponent, typeof i4.TheToolbarComponent, typeof i5.TheToolbarDropdownComponent, typeof i7.TheToolbarItemComponent, typeof i10.TheDefaultElementComponent, typeof i12.ThePluginMenuComponent, typeof i21.TheListboxOptionDirective, typeof i21.TheListboxGroupDirective, typeof i21.TheListboxDirective, typeof i22.ThePreventDefaultDirective]>;
|
|
@@ -7,7 +7,7 @@ import { Editor, Path, Range, Transforms, createEditor } from 'slate';
|
|
|
7
7
|
import { AngularEditor, defaultScrollSelectionIntoView, withAngular } from 'slate-angular';
|
|
8
8
|
import { withHistory } from 'slate-history';
|
|
9
9
|
import { TheTextComponent } from './components/text/text.component';
|
|
10
|
-
import { CLIPBOARD_FORMAT_KEY, MarkTypes, initializeDefaultMenuIcons } from './constants';
|
|
10
|
+
import { CLIPBOARD_FORMAT_KEY, DefaultGlobalToolbarDefinition, DefaultInlineToolbarDefinition, DefaultPluginMenu, MarkTypes, initializeDefaultMenuIcons } from './constants';
|
|
11
11
|
import { createToolbar, getPluginOptions, withTheia } from './core';
|
|
12
12
|
import { PluginKeys, THE_MODE_TOKEN, THE_PRESET_CONFIG_TOKEN, TheDataMode, TheMode } from './interfaces';
|
|
13
13
|
import { internalPlugins } from './plugins';
|
|
@@ -29,14 +29,14 @@ import * as i8 from "./components/inline-toolbar/inline-toolbar.component";
|
|
|
29
29
|
import * as i9 from "./plugins/quick-insert/components/quick-insert.component";
|
|
30
30
|
import * as i10 from "./components/template/template.component";
|
|
31
31
|
export class TheEditorComponent {
|
|
32
|
+
get options() {
|
|
33
|
+
return this.editor?.options;
|
|
34
|
+
}
|
|
32
35
|
get theGlobalToolbarInstance() {
|
|
33
36
|
return this.theGlobalToolbar ? this.theGlobalToolbar : this.globalToolbarInstance;
|
|
34
37
|
}
|
|
35
38
|
get maxHeight() {
|
|
36
|
-
return this.
|
|
37
|
-
}
|
|
38
|
-
get inlineToolbarVisible() {
|
|
39
|
-
return this.theOptions?.inlineToolbarVisible ?? this.presetConfig?.options?.inlineToolbarVisible;
|
|
39
|
+
return this.options?.maxHeight ? `${this.options?.maxHeight}px` : null;
|
|
40
40
|
}
|
|
41
41
|
constructor(cdr, destroyRef, elementRef, injector, ngZone, viewContainerRef, theContextService, iconRegistry, presetConfig) {
|
|
42
42
|
this.cdr = cdr;
|
|
@@ -58,7 +58,7 @@ export class TheEditorComponent {
|
|
|
58
58
|
this.onChangeCallback = () => { };
|
|
59
59
|
this.onTouchedCallback = () => { };
|
|
60
60
|
this.scrollSelectionIntoView = (e, domRange) => {
|
|
61
|
-
const { neededScrollIntoView } =
|
|
61
|
+
const { neededScrollIntoView } = e.options;
|
|
62
62
|
if (neededScrollIntoView && !neededScrollIntoView(this.editor)) {
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
@@ -166,6 +166,9 @@ export class TheEditorComponent {
|
|
|
166
166
|
}
|
|
167
167
|
ngOnChanges(changes) {
|
|
168
168
|
const options = changes.theOptions;
|
|
169
|
+
if (options && !options.firstChange) {
|
|
170
|
+
this.initializeOptions(options.currentValue);
|
|
171
|
+
}
|
|
169
172
|
if (options && !options.firstChange && !isEqual(options.currentValue?.toolbar, options.previousValue?.toolbar)) {
|
|
170
173
|
this.toolbarCalculate();
|
|
171
174
|
}
|
|
@@ -185,13 +188,10 @@ export class TheEditorComponent {
|
|
|
185
188
|
initialize() {
|
|
186
189
|
const plugins = this.getPlugins();
|
|
187
190
|
this.editor = withTheia(withHistory(withAngular(createEditor(), CLIPBOARD_FORMAT_KEY)), plugins);
|
|
188
|
-
this.editor.options = this.theOptions;
|
|
189
|
-
this.editor.disabled = this.theOptions?.disabled;
|
|
190
|
-
this.editor.extraElementOptions = this.theOptions?.extraElementOptions;
|
|
191
191
|
setEditorUUID(this.editor, idCreator());
|
|
192
192
|
this.initializeMobileMode();
|
|
193
|
+
this.initializeOptions(this.theOptions);
|
|
193
194
|
this.initializeContext();
|
|
194
|
-
this.initializeOptions();
|
|
195
195
|
this.toolbarCalculate();
|
|
196
196
|
this.initializeQuickInsert();
|
|
197
197
|
this.initializeEvents();
|
|
@@ -205,6 +205,39 @@ export class TheEditorComponent {
|
|
|
205
205
|
this.applyAutoFocus();
|
|
206
206
|
});
|
|
207
207
|
}
|
|
208
|
+
initializeOptions(theOptions) {
|
|
209
|
+
const presetMode = this.presetConfig?.options?.mode;
|
|
210
|
+
const presetInlineToolbarVisible = this.presetConfig?.options?.inlineToolbarVisible;
|
|
211
|
+
const presetMenu = this.presetConfig?.options?.menu;
|
|
212
|
+
const presetToolbarAlign = this.presetConfig?.options?.toolbar?.align;
|
|
213
|
+
const presetGlobalToolbar = this.presetConfig?.options?.toolbar?.global;
|
|
214
|
+
const presetInlineToolbar = this.presetConfig?.options?.toolbar?.inline;
|
|
215
|
+
const optionsGlobalToolbar = theOptions?.toolbar?.global;
|
|
216
|
+
const optionsInlineToolbar = theOptions?.toolbar?.inline;
|
|
217
|
+
const options = {
|
|
218
|
+
readonly: false,
|
|
219
|
+
neededScrollIntoView: () => true,
|
|
220
|
+
...theOptions,
|
|
221
|
+
mode: theOptions?.mode ?? presetMode ?? TheDataMode.html,
|
|
222
|
+
inlineToolbarVisible: theOptions?.inlineToolbarVisible ?? presetInlineToolbarVisible,
|
|
223
|
+
menu: theOptions?.menu ?? presetMenu ?? DefaultPluginMenu,
|
|
224
|
+
toolbar: {
|
|
225
|
+
align: theOptions?.toolbar?.align ?? presetToolbarAlign,
|
|
226
|
+
global: optionsGlobalToolbar ?? presetGlobalToolbar ?? DefaultGlobalToolbarDefinition,
|
|
227
|
+
inline: optionsInlineToolbar ?? presetInlineToolbar ?? DefaultInlineToolbarDefinition
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
this.editor.options = options;
|
|
231
|
+
this.editor.disabled = theOptions?.disabled;
|
|
232
|
+
this.editor.extraElementOptions = options?.extraElementOptions;
|
|
233
|
+
}
|
|
234
|
+
initializeContext() {
|
|
235
|
+
this.theContextService.initialize({
|
|
236
|
+
editor: this.editor,
|
|
237
|
+
nativeElement: this.elementRef.nativeElement,
|
|
238
|
+
viewContainerRef: this.viewContainerRef
|
|
239
|
+
});
|
|
240
|
+
}
|
|
208
241
|
getPlugins() {
|
|
209
242
|
const defaultPlugins = internalPlugins();
|
|
210
243
|
const presetPlugins = this.presetConfig?.plugins ?? [];
|
|
@@ -216,12 +249,8 @@ export class TheEditorComponent {
|
|
|
216
249
|
this.isMobileMode = modeConfig && modeConfig.mode === TheMode.mobile;
|
|
217
250
|
}
|
|
218
251
|
toolbarCalculate() {
|
|
219
|
-
const
|
|
220
|
-
const
|
|
221
|
-
const presetGlobalToolbar = this.presetConfig?.options?.toolbar?.global;
|
|
222
|
-
const presetInlineToolbar = this.presetConfig?.options?.toolbar?.inline;
|
|
223
|
-
const globalToolbar = optionsGlobalToolbar ?? presetGlobalToolbar;
|
|
224
|
-
const inlineToolbar = optionsInlineToolbar ?? presetInlineToolbar;
|
|
252
|
+
const globalToolbar = this.options?.toolbar.global;
|
|
253
|
+
const inlineToolbar = this.options?.toolbar?.inline;
|
|
225
254
|
const { globalToolbarClass, toolbarEntity } = createToolbar(this.editor, globalToolbar, inlineToolbar);
|
|
226
255
|
this.globalToolbarClass = globalToolbarClass;
|
|
227
256
|
this.toolbarEntity = toolbarEntity;
|
|
@@ -231,35 +260,11 @@ export class TheEditorComponent {
|
|
|
231
260
|
this.theGlobalToolbarInstance.editor = this.editor;
|
|
232
261
|
this.theGlobalToolbarInstance.toolbarItems = this.toolbarEntity.global;
|
|
233
262
|
this.theGlobalToolbarInstance.containerClass = this.globalToolbarClass;
|
|
234
|
-
this.theGlobalToolbarInstance.align = this?.
|
|
263
|
+
this.theGlobalToolbarInstance.align = this.options?.toolbar?.align;
|
|
235
264
|
this.theGlobalToolbarInstance.setToolbarClass();
|
|
236
265
|
this.theGlobalToolbarInstance.renderToolbarView();
|
|
237
266
|
}
|
|
238
267
|
}
|
|
239
|
-
initializeContext() {
|
|
240
|
-
this.theContextService.initialize({
|
|
241
|
-
theOptions: this.theOptions,
|
|
242
|
-
nativeElement: this.elementRef.nativeElement,
|
|
243
|
-
viewContainerRef: this.viewContainerRef
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
initializeOptions() {
|
|
247
|
-
const presetMode = this.presetConfig?.options?.mode;
|
|
248
|
-
const defaultMode = this.theOptions?.mode ?? presetMode ?? TheDataMode.html;
|
|
249
|
-
if (!this.theOptions) {
|
|
250
|
-
this.theOptions = {
|
|
251
|
-
readonly: false,
|
|
252
|
-
mode: defaultMode,
|
|
253
|
-
neededScrollIntoView: () => true
|
|
254
|
-
};
|
|
255
|
-
}
|
|
256
|
-
if (!this.theOptions.mode) {
|
|
257
|
-
this.theOptions = {
|
|
258
|
-
...this.theOptions,
|
|
259
|
-
mode: defaultMode
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
268
|
initializeQuickInsert() {
|
|
264
269
|
const quickInsertPlugin = getPluginOptions(this.editor, PluginKeys.quickInsert);
|
|
265
270
|
if (quickInsertPlugin.disabled || quickInsertPlugin.disabledPlus) {
|
|
@@ -288,17 +293,17 @@ export class TheEditorComponent {
|
|
|
288
293
|
});
|
|
289
294
|
}
|
|
290
295
|
applyAutoFocus() {
|
|
291
|
-
if (!this.
|
|
292
|
-
autoFocus(this.editor, this.
|
|
296
|
+
if (!this.options?.disabled && !this.options?.readonly) {
|
|
297
|
+
autoFocus(this.editor, this.options?.autoFocus);
|
|
293
298
|
}
|
|
294
299
|
}
|
|
295
300
|
writeValue(value) {
|
|
296
|
-
const data = dataDeserialize(this.
|
|
301
|
+
const data = dataDeserialize(this.options?.mode, value);
|
|
297
302
|
// data-deserialize
|
|
298
303
|
this.editorValue = data;
|
|
299
304
|
this.cdr.markForCheck();
|
|
300
305
|
setTimeout(() => {
|
|
301
|
-
if (!this.
|
|
306
|
+
if (!this.options.readonly && AngularEditor.isFocused(this.editor) && this.editor.selection) {
|
|
302
307
|
const selection = this.editor.selection;
|
|
303
308
|
Transforms.deselect(this.editor);
|
|
304
309
|
Transforms.select(this.editor, selection);
|
|
@@ -322,14 +327,15 @@ export class TheEditorComponent {
|
|
|
322
327
|
this.onChangeCallback(newValue);
|
|
323
328
|
}
|
|
324
329
|
serializingValue(value) {
|
|
325
|
-
|
|
330
|
+
const mode = this.options?.mode;
|
|
331
|
+
if (mode === TheDataMode.html) {
|
|
326
332
|
let htmlValue = '';
|
|
327
333
|
const isEmptyContent = TheQueries.isEmptyContent(value);
|
|
328
334
|
value.forEach((element) => {
|
|
329
335
|
let elementHtml = this.elementToHtml.get(element);
|
|
330
336
|
if (elementHtml === undefined) {
|
|
331
337
|
// serializing
|
|
332
|
-
elementHtml = dataSerializing(
|
|
338
|
+
elementHtml = dataSerializing(mode, [element]);
|
|
333
339
|
htmlValue += elementHtml;
|
|
334
340
|
this.elementToHtml.set(element, elementHtml);
|
|
335
341
|
return;
|
|
@@ -426,14 +432,14 @@ export class TheEditorComponent {
|
|
|
426
432
|
};
|
|
427
433
|
}
|
|
428
434
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TheEditorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.DestroyRef }, { token: i0.ElementRef }, { token: i0.Injector }, { token: i0.NgZone }, { token: i0.ViewContainerRef }, { token: i1.TheContextService }, { token: i2.ThyIconRegistry }, { token: THE_PRESET_CONFIG_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
429
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TheEditorComponent, selector: "the-editor, theEditor", inputs: { theOptions: "theOptions", thePlugins: "thePlugins", theGlobalToolbar: "theGlobalToolbar", theDecorate: "theDecorate", theOnError: "theOnError" }, outputs: { theOnSave: "theOnSave", theOnDOMEvent: "theOnDOMEvent", theEditorCreated: "theEditorCreated", theUploadingStatus: "theUploadingStatus" }, host: { properties: { "class.the-editor-readonly": "
|
|
435
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TheEditorComponent, selector: "the-editor, theEditor", inputs: { theOptions: "theOptions", thePlugins: "thePlugins", theGlobalToolbar: "theGlobalToolbar", theDecorate: "theDecorate", theOnError: "theOnError" }, outputs: { theOnSave: "theOnSave", theOnDOMEvent: "theOnDOMEvent", theEditorCreated: "theEditorCreated", theUploadingStatus: "theUploadingStatus" }, host: { properties: { "class.the-editor-readonly": "editor.options?.readonly", "class.the-mobile-editor": "isMobileMode" }, classAttribute: "the-editor" }, providers: [
|
|
430
436
|
TheContextService,
|
|
431
437
|
{
|
|
432
438
|
provide: NG_VALUE_ACCESSOR,
|
|
433
439
|
useExisting: forwardRef(() => TheEditorComponent),
|
|
434
440
|
multi: true
|
|
435
441
|
}
|
|
436
|
-
], viewQueries: [{ propertyName: "templateInstance", first: true, predicate: ["templateInstance"], descendants: true, static: true }, { propertyName: "theEditableContainer", first: true, predicate: ["theEditableContainer"], descendants: true, read: ElementRef, static: true }, { propertyName: "globalToolbarInstance", first: true, predicate: ["globalToolbar"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<the-toolbar\n *ngIf=\"!
|
|
442
|
+
], viewQueries: [{ propertyName: "templateInstance", first: true, predicate: ["templateInstance"], descendants: true, static: true }, { propertyName: "theEditableContainer", first: true, predicate: ["theEditableContainer"], descendants: true, read: ElementRef, static: true }, { propertyName: "globalToolbarInstance", first: true, predicate: ["globalToolbar"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<the-toolbar\n *ngIf=\"!options?.readonly && !theGlobalToolbar && !isMobileMode\"\n [ngClass]=\"{\n 'the-toolbar-disabled': options?.disabled\n }\"\n #globalToolbar\n [editor]=\"editor\"\n [toolbarItems]=\"toolbarEntity.global\"\n [containerClass]=\"globalToolbarClass\"\n [align]=\"options?.toolbar?.align\"\n></the-toolbar>\n\n<div\n #theEditableContainer\n class=\"the-editable-container\"\n thyImageGroup\n [ngClass]=\"{\n 'the-editor-disabled': options?.disabled,\n 'max-height': maxHeight\n }\"\n [ngStyle]=\"{ 'max-height': maxHeight }\"\n>\n <slate-editable\n class=\"the-editor-typo\"\n [editor]=\"editor\"\n [ngModel]=\"editorValue\"\n [renderElement]=\"renderElement\"\n [renderText]=\"renderText\"\n [renderLeaf]=\"renderLeaf\"\n [isStrictDecorate]=\"false\"\n [decorate]=\"decorate\"\n [placeholder]=\"options?.placeholder\"\n [placeholderDecorate]=\"options?.placeholderDecorate ? options?.placeholderDecorate : null\"\n [readonly]=\"options?.readonly || options?.disabled\"\n [keydown]=\"onKeyDown\"\n [click]=\"onClick\"\n [paste]=\"onSlaPaste\"\n [blur]=\"onSlaBlur\"\n [focus]=\"onSlaFocus\"\n [copy]=\"onSlaCopy\"\n [cut]=\"onSlaCut\"\n [beforeInput]=\"onSlaBeforeInput\"\n [compositionStart]=\"onSlaCompositionStart\"\n [compositionEnd]=\"onSlaCompositionEnd\"\n [dragStart]=\"onSlaDragStart\"\n [dragOver]=\"onSlaDragOver\"\n [drop]=\"onDrop\"\n [scrollSelectionIntoView]=\"scrollSelectionIntoView\"\n (ngModelChange)=\"valueChange($event)\"\n (mousedown)=\"mousedown($event)\"\n ></slate-editable>\n\n <ng-container *ngIf=\"!isMobileMode\">\n <the-inline-toolbar\n *ngIf=\"!options?.readonly && options?.inlineToolbarVisible\"\n [editor]=\"editor\"\n [toolbarItems]=\"toolbarEntity.inline\"\n ></the-inline-toolbar>\n <div *ngIf=\"!options?.readonly\" theQuickInsert [editor]=\"editor\" [isVisible]=\"visibleQuickInsertPlus\"></div>\n </ng-container>\n\n <the-template #templateInstance></the-template>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.SlateEditable, selector: "slate-editable", inputs: ["editor", "renderElement", "renderLeaf", "renderText", "decorate", "placeholderDecorate", "scrollSelectionIntoView", "isStrictDecorate", "trackBy", "readonly", "placeholder", "beforeInput", "blur", "click", "compositionEnd", "compositionUpdate", "compositionStart", "copy", "cut", "dragOver", "dragStart", "dragEnd", "drop", "focus", "keydown", "paste", "spellCheck", "autoCorrect", "autoCapitalize"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.ThyImageGroupComponent, selector: "thy-image-group, [thyImageGroup]" }, { kind: "component", type: i7.TheToolbarComponent, selector: "the-toolbar", inputs: ["editor", "toolbarItems", "align", "containerClass", "isMore", "afterTemplate"] }, { kind: "component", type: i8.TheInlineToolbarComponent, selector: "the-inline-toolbar", inputs: ["editor", "toolbarItems"] }, { kind: "component", type: i9.TheQuickInsertComponent, selector: "[theQuickInsert]", inputs: ["editor", "isVisible"] }, { kind: "component", type: i10.TheTemplateComponent, selector: "the-template,[theTemplate]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
437
443
|
}
|
|
438
444
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TheEditorComponent, decorators: [{
|
|
439
445
|
type: Component,
|
|
@@ -446,9 +452,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
446
452
|
}
|
|
447
453
|
], host: {
|
|
448
454
|
class: 'the-editor',
|
|
449
|
-
'[class.the-editor-readonly]': '
|
|
455
|
+
'[class.the-editor-readonly]': 'editor.options?.readonly',
|
|
450
456
|
'[class.the-mobile-editor]': 'isMobileMode'
|
|
451
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, template: "<the-toolbar\n *ngIf=\"!
|
|
457
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, template: "<the-toolbar\n *ngIf=\"!options?.readonly && !theGlobalToolbar && !isMobileMode\"\n [ngClass]=\"{\n 'the-toolbar-disabled': options?.disabled\n }\"\n #globalToolbar\n [editor]=\"editor\"\n [toolbarItems]=\"toolbarEntity.global\"\n [containerClass]=\"globalToolbarClass\"\n [align]=\"options?.toolbar?.align\"\n></the-toolbar>\n\n<div\n #theEditableContainer\n class=\"the-editable-container\"\n thyImageGroup\n [ngClass]=\"{\n 'the-editor-disabled': options?.disabled,\n 'max-height': maxHeight\n }\"\n [ngStyle]=\"{ 'max-height': maxHeight }\"\n>\n <slate-editable\n class=\"the-editor-typo\"\n [editor]=\"editor\"\n [ngModel]=\"editorValue\"\n [renderElement]=\"renderElement\"\n [renderText]=\"renderText\"\n [renderLeaf]=\"renderLeaf\"\n [isStrictDecorate]=\"false\"\n [decorate]=\"decorate\"\n [placeholder]=\"options?.placeholder\"\n [placeholderDecorate]=\"options?.placeholderDecorate ? options?.placeholderDecorate : null\"\n [readonly]=\"options?.readonly || options?.disabled\"\n [keydown]=\"onKeyDown\"\n [click]=\"onClick\"\n [paste]=\"onSlaPaste\"\n [blur]=\"onSlaBlur\"\n [focus]=\"onSlaFocus\"\n [copy]=\"onSlaCopy\"\n [cut]=\"onSlaCut\"\n [beforeInput]=\"onSlaBeforeInput\"\n [compositionStart]=\"onSlaCompositionStart\"\n [compositionEnd]=\"onSlaCompositionEnd\"\n [dragStart]=\"onSlaDragStart\"\n [dragOver]=\"onSlaDragOver\"\n [drop]=\"onDrop\"\n [scrollSelectionIntoView]=\"scrollSelectionIntoView\"\n (ngModelChange)=\"valueChange($event)\"\n (mousedown)=\"mousedown($event)\"\n ></slate-editable>\n\n <ng-container *ngIf=\"!isMobileMode\">\n <the-inline-toolbar\n *ngIf=\"!options?.readonly && options?.inlineToolbarVisible\"\n [editor]=\"editor\"\n [toolbarItems]=\"toolbarEntity.inline\"\n ></the-inline-toolbar>\n <div *ngIf=\"!options?.readonly\" theQuickInsert [editor]=\"editor\" [isVisible]=\"visibleQuickInsertPlus\"></div>\n </ng-container>\n\n <the-template #templateInstance></the-template>\n</div>\n" }]
|
|
452
458
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.DestroyRef }, { type: i0.ElementRef }, { type: i0.Injector }, { type: i0.NgZone }, { type: i0.ViewContainerRef }, { type: i1.TheContextService }, { type: i2.ThyIconRegistry }, { type: undefined, decorators: [{
|
|
453
459
|
type: Optional
|
|
454
460
|
}, {
|
|
@@ -482,4 +488,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
482
488
|
type: ViewChild,
|
|
483
489
|
args: ['globalToolbar']
|
|
484
490
|
}] } });
|
|
485
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3NyYy9lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vcGFja2FnZXMvc3JjL2VkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFFTixLQUFLLEVBS0wsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBRVQsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQWMsTUFBTSxFQUFzQixJQUFJLEVBQUUsS0FBSyxFQUFRLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUcsT0FBTyxFQUFFLGFBQWEsRUFBd0IsOEJBQThCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRixPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwRSxPQUFPLEVBRUgsVUFBVSxFQUNWLGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsV0FB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R1AsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUkvQyxvQkFBb0I7c0JBRG5CLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSXJFLHFCQUFxQjtzQkFEcEIsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzS2V5SG90a2V5IH0gZnJvbSAnaXMtaG90a2V5JztcbmltcG9ydCB7IFRoeUljb25SZWdpc3RyeSB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlc2NlbmRhbnQsIEVkaXRvciwgRWxlbWVudCwgTm9kZUVudHJ5LCBQYXRoLCBSYW5nZSwgVGV4dCwgVHJhbnNmb3JtcywgY3JlYXRlRWRpdG9yIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciwgRE9NUmFuZ2UsIFNsYXRlRXJyb3IsIGRlZmF1bHRTY3JvbGxTZWxlY3Rpb25JbnRvVmlldywgd2l0aEFuZ3VsYXIgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IHdpdGhIaXN0b3J5IH0gZnJvbSAnc2xhdGUtaGlzdG9yeSc7XG5pbXBvcnQgeyBUaGVUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90ZW1wbGF0ZS90ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGhlVGV4dENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRoZVRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDTElQQk9BUkRfRk9STUFUX0tFWSwgTWFya1R5cGVzLCBpbml0aWFsaXplRGVmYXVsdE1lbnVJY29ucyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGNyZWF0ZVRvb2xiYXIsIGdldFBsdWdpbk9wdGlvbnMsIHdpdGhUaGVpYSB9IGZyb20gJy4vY29yZSc7XG5pbXBvcnQge1xuICAgIERvbUV2ZW50RGF0YUluZm8sXG4gICAgUGx1Z2luS2V5cyxcbiAgICBUSEVfTU9ERV9UT0tFTixcbiAgICBUSEVfUFJFU0VUX0NPTkZJR19UT0tFTixcbiAgICBUaGVEYXRhTW9kZSxcbiAgICBUaGVFZGl0b3IsXG4gICAgVGhlTW9kZSxcbiAgICBUaGVPcHRpb25zLFxuICAgIFRoZVByZXNldENvbmZpZyxcbiAgICBUb29sYmFyRW50aXR5XG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUaGVQbHVnaW4gfSBmcm9tICcuL2ludGVyZmFjZXMvcGx1Z2lucy9wbHVnaW5zJztcbmltcG9ydCB7IGludGVybmFsUGx1Z2lucyB9IGZyb20gJy4vcGx1Z2lucyc7XG5pbXBvcnQgeyBRdWlja0luc2VydFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuL3BsdWdpbnMvcXVpY2staW5zZXJ0L3F1aWNrLWluc2VydC5wbHVnaW4nO1xuaW1wb3J0ICogYXMgVGhlUXVlcmllcyBmcm9tICcuL3F1ZXJpZXMnO1xuaW1wb3J0IHsgVGhlQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBzaG9ydGN1dHMgfSBmcm9tICcuL3Nob3J0Y3V0cyc7XG5pbXBvcnQgKiBhcyBUaGVUcmFuc2Zvcm1zIGZyb20gJy4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQge1xuICAgIFRIRV9FRElUT1JfUFJFVklPVVNfU0VMRUNUSU9OLFxuICAgIGF1dG9Gb2N1cyxcbiAgICBjb2VyY2VQaXhlbHNGcm9tQ3NzVmFsdWUsXG4gICAgZGF0YURlc2VyaWFsaXplLFxuICAgIGRhdGFTZXJpYWxpemluZyxcbiAgICBpZENyZWF0b3IsXG4gICAgc2V0RWRpdG9yVVVJRFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICcuL3V0aWxzL2xvZGFzaCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGhlLWVkaXRvciwgdGhlRWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2VkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFRoZUNvbnRleHRTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRoZUVkaXRvckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGhlLWVkaXRvcicsXG4gICAgICAgICdbY2xhc3MudGhlLWVkaXRvci1yZWFkb25seV0nOiAndGhlT3B0aW9ucz8ucmVhZG9ubHknLFxuICAgICAgICAnW2NsYXNzLnRoZS1tb2JpbGUtZWRpdG9yXSc6ICdpc01vYmlsZU1vZGUnXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBUaGVFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSB0aGVPcHRpb25zOiBUaGVPcHRpb25zO1xuXG4gICAgQElucHV0KCkgdGhlUGx1Z2luczogVGhlUGx1Z2luW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHRoZUdsb2JhbFRvb2xiYXI/OiBUaGVUb29sYmFyQ29tcG9uZW50O1xuXG4gICAgQElucHV0KCkgdGhlRGVjb3JhdGU6IChlZGl0b3I6IFRoZUVkaXRvciwgbm9kZUVudHJ5OiBOb2RlRW50cnkpID0+IFJhbmdlW107XG5cbiAgICBASW5wdXQoKSB0aGVPbkVycm9yPzogKGVycm9yOiBTbGF0ZUVycm9yKSA9PiB2b2lkO1xuXG4gICAgQE91dHB1dCgpIHRoZU9uU2F2ZTogRXZlbnRFbWl0dGVyPERlc2NlbmRhbnRbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPERlc2NlbmRhbnRbXT4oKTtcblxuICAgIEBPdXRwdXQoKSB0aGVPbkRPTUV2ZW50OiBFdmVudEVtaXR0ZXI8eyBuYXRpdmVFdmVudDogRXZlbnQ7IGRhdGE/OiBEb21FdmVudERhdGFJbmZvIH0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIHRoZUVkaXRvckNyZWF0ZWQ6IEV2ZW50RW1pdHRlcjxFZGl0b3I+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIHRoZVVwbG9hZGluZ1N0YXR1czogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvLyB0cnVlIOS4iuS8oOe7k+adnyBmYWxzZSDkuIrkvKDkuK1cblxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlSW5zdGFuY2UnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHRlbXBsYXRlSW5zdGFuY2U6IFRoZVRlbXBsYXRlQ29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZCgndGhlRWRpdGFibGVDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHRoZUVkaXRhYmxlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2dsb2JhbFRvb2xiYXInKVxuICAgIGdsb2JhbFRvb2xiYXJJbnN0YW5jZTogVGhlVG9vbGJhckNvbXBvbmVudDtcblxuICAgIHRvb2xiYXJFbnRpdHk6IFRvb2xiYXJFbnRpdHk7XG5cbiAgICBlZGl0b3I6IFRoZUVkaXRvcjtcblxuICAgIGVkaXRvclZhbHVlOiBEZXNjZW5kYW50W107XG5cbiAgICBnbG9iYWxUb29sYmFyQ2xhc3M6IHN0cmluZ1tdO1xuXG4gICAgaXNNb2JpbGVNb2RlOiBib29sZWFuO1xuXG4gICAgdmlzaWJsZVF1aWNrSW5zZXJ0UGx1cyA9IHRydWU7XG5cbiAgICBlbGVtZW50VG9IdG1sOiBXZWFrTWFwPEVsZW1lbnQsIHN0cmluZz4gPSBuZXcgV2Vha01hcCgpO1xuXG4gICAgZGVjb3JhdGU6IChub2RlRW50cnk6IE5vZGVFbnRyeSkgPT4gUmFuZ2VbXTtcblxuICAgIGdldCB0aGVHbG9iYWxUb29sYmFySW5zdGFuY2UoKTogVGhlVG9vbGJhckNvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoZUdsb2JhbFRvb2xiYXIgPyB0aGlzLnRoZUdsb2JhbFRvb2xiYXIgOiB0aGlzLmdsb2JhbFRvb2xiYXJJbnN0YW5jZTtcbiAgICB9XG5cbiAgICBnZXQgbWF4SGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aGVPcHRpb25zPy5tYXhIZWlnaHQgPyBgJHt0aGlzLnRoZU9wdGlvbnM/Lm1heEhlaWdodH1weGAgOiBudWxsO1xuICAgIH1cblxuICAgIGdldCBpbmxpbmVUb29sYmFyVmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGhlT3B0aW9ucz8uaW5saW5lVG9vbGJhclZpc2libGUgPz8gdGhpcy5wcmVzZXRDb25maWc/Lm9wdGlvbnM/LmlubGluZVRvb2xiYXJWaXNpYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBkZXN0cm95UmVmOiBEZXN0cm95UmVmLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgdGhlQ29udGV4dFNlcnZpY2U6IFRoZUNvbnRleHRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGljb25SZWdpc3RyeTogVGh5SWNvblJlZ2lzdHJ5LFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFRIRV9QUkVTRVRfQ09ORklHX1RPS0VOKSBwcml2YXRlIHByZXNldENvbmZpZzogVGhlUHJlc2V0Q29uZmlnXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLm9uRXJyb3JIYW5kbGVyKCk7XG4gICAgICAgIGluaXRpYWxpemVEZWZhdWx0TWVudUljb25zKHRoaXMuaWNvblJlZ2lzdHJ5KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBjaGFuZ2VzLnRoZU9wdGlvbnM7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgIW9wdGlvbnMuZmlyc3RDaGFuZ2UgJiYgIWlzRXF1YWwob3B0aW9ucy5jdXJyZW50VmFsdWU/LnRvb2xiYXIsIG9wdGlvbnMucHJldmlvdXNWYWx1ZT8udG9vbGJhcikpIHtcbiAgICAgICAgICAgIHRoaXMudG9vbGJhckNhbGN1bGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY3VycmVudFZhbHVlPy5yZWFkb25seSAhPT0gb3B0aW9ucy5wcmV2aW91c1ZhbHVlPy5yZWFkb25seSkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUF1dG9Gb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzWyd0aGVEZWNvcmF0ZSddKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlRGVjb3JhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lZGl0b3I/LnNlbGVjdGlvbiAmJiAob3B0aW9ucz8uY3VycmVudFZhbHVlPy5yZWFkb25seSB8fCBvcHRpb25zPy5jdXJyZW50VmFsdWU/LmRpc2FibGVkKSkge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5kZXNlbGVjdCh0aGlzLmVkaXRvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgVEhFX0VESVRPUl9QUkVWSU9VU19TRUxFQ1RJT04uZGVsZXRlKHRoaXMuZWRpdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLmdldFBsdWdpbnMoKTtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSB3aXRoVGhlaWEod2l0aEhpc3Rvcnkod2l0aEFuZ3VsYXIoY3JlYXRlRWRpdG9yKCksIENMSVBCT0FSRF9GT1JNQVRfS0VZKSksIHBsdWdpbnMpO1xuICAgICAgICB0aGlzLmVkaXRvci5vcHRpb25zID0gdGhpcy50aGVPcHRpb25zO1xuICAgICAgICB0aGlzLmVkaXRvci5kaXNhYmxlZCA9IHRoaXMudGhlT3B0aW9ucz8uZGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuZWRpdG9yLmV4dHJhRWxlbWVudE9wdGlvbnMgPSB0aGlzLnRoZU9wdGlvbnM/LmV4dHJhRWxlbWVudE9wdGlvbnM7XG5cbiAgICAgICAgc2V0RWRpdG9yVVVJRCh0aGlzLmVkaXRvciwgaWRDcmVhdG9yKCkpO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZU1vYmlsZU1vZGUoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplQ29udGV4dCgpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVPcHRpb25zKCk7XG4gICAgICAgIHRoaXMudG9vbGJhckNhbGN1bGF0ZSgpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVRdWlja0luc2VydCgpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVFdmVudHMoKTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZURlY29yYXRlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVXBsb2FkaW5nU3RhdHVzKCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBZb3UgbmVlZCB0byB3YWl0IGZvciB0aGUgZWRpdG9yIHJlbmRlcmluZyB0byBjb21wbGV0ZVxuICAgICAgICAgICAgLy8gYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGV4dGVybmFsIHRvb2xiYXIgYXNzaWdubWVudCBkZXRlY3Rpb25cbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUdsb2JhbFRvb2xiYXIoKTtcbiAgICAgICAgICAgIHRoaXMudGhlRWRpdG9yQ3JlYXRlZC5lbWl0KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlBdXRvRm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQbHVnaW5zKCkge1xuICAgICAgICBjb25zdCBkZWZhdWx0UGx1Z2lucyA9IGludGVybmFsUGx1Z2lucygpO1xuICAgICAgICBjb25zdCBwcmVzZXRQbHVnaW5zID0gdGhpcy5wcmVzZXRDb25maWc/LnBsdWdpbnMgPz8gW107XG4gICAgICAgIGNvbnN0IGFwcGx5UHJlc2V0UGx1Z2lucyA9IHByZXNldFBsdWdpbnMuZmlsdGVyKHByZXNldFBsdWdpbiA9PiAhdGhpcy50aGVQbHVnaW5zLnNvbWUocGx1Z2luID0+IHByZXNldFBsdWdpbi5rZXkgPT09IHBsdWdpbi5rZXkpKTtcbiAgICAgICAgcmV0dXJuIFsuLi5kZWZhdWx0UGx1Z2lucywgLi4uYXBwbHlQcmVzZXRQbHVnaW5zLCAuLi50aGlzLnRoZVBsdWdpbnNdO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZU1vYmlsZU1vZGUoKSB7XG4gICAgICAgIGNvbnN0IG1vZGVDb25maWcgPSB0aGlzLmluamVjdG9yLmdldChUSEVfTU9ERV9UT0tFTik7XG4gICAgICAgIHRoaXMuaXNNb2JpbGVNb2RlID0gbW9kZUNvbmZpZyAmJiBtb2RlQ29uZmlnLm1vZGUgPT09IFRoZU1vZGUubW9iaWxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9vbGJhckNhbGN1bGF0ZSgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0dsb2JhbFRvb2xiYXIgPSB0aGlzLnRoZU9wdGlvbnM/LnRvb2xiYXI/Lmdsb2JhbDtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0lubGluZVRvb2xiYXIgPSB0aGlzLnRoZU9wdGlvbnM/LnRvb2xiYXI/LmlubGluZTtcbiAgICAgICAgY29uc3QgcHJlc2V0R2xvYmFsVG9vbGJhciA9IHRoaXMucHJlc2V0Q29uZmlnPy5vcHRpb25zPy50b29sYmFyPy5nbG9iYWw7XG4gICAgICAgIGNvbnN0IHByZXNldElubGluZVRvb2xiYXIgPSB0aGlzLnByZXNldENvbmZpZz8ub3B0aW9ucz8udG9vbGJhcj8uaW5saW5lO1xuICAgICAgICBjb25zdCBnbG9iYWxUb29sYmFyID0gb3B0aW9uc0dsb2JhbFRvb2xiYXIgPz8gcHJlc2V0R2xvYmFsVG9vbGJhcjtcbiAgICAgICAgY29uc3QgaW5saW5lVG9vbGJhciA9IG9wdGlvbnNJbmxpbmVUb29sYmFyID8/IHByZXNldElubGluZVRvb2xiYXI7XG4gICAgICAgIGNvbnN0IHsgZ2xvYmFsVG9vbGJhckNsYXNzLCB0b29sYmFyRW50aXR5IH0gPSBjcmVhdGVUb29sYmFyKHRoaXMuZWRpdG9yLCBnbG9iYWxUb29sYmFyLCBpbmxpbmVUb29sYmFyKTtcbiAgICAgICAgdGhpcy5nbG9iYWxUb29sYmFyQ2xhc3MgPSBnbG9iYWxUb29sYmFyQ2xhc3M7XG4gICAgICAgIHRoaXMudG9vbGJhckVudGl0eSA9IHRvb2xiYXJFbnRpdHk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplR2xvYmFsVG9vbGJhcigpIHtcbiAgICAgICAgaWYgKHRoaXMudGhlR2xvYmFsVG9vbGJhcikge1xuICAgICAgICAgICAgdGhpcy50aGVHbG9iYWxUb29sYmFySW5zdGFuY2UuZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgICAgICB0aGlzLnRoZUdsb2JhbFRvb2xiYXJJbnN0YW5jZS50b29sYmFySXRlbXMgPSB0aGlzLnRvb2xiYXJFbnRpdHkuZ2xvYmFsO1xuICAgICAgICAgICAgdGhpcy50aGVHbG9iYWxUb29sYmFySW5zdGFuY2UuY29udGFpbmVyQ2xhc3MgPSB0aGlzLmdsb2JhbFRvb2xiYXJDbGFzcztcbiAgICAgICAgICAgIHRoaXMudGhlR2xvYmFsVG9vbGJhckluc3RhbmNlLmFsaWduID0gdGhpcz8udGhlT3B0aW9ucz8udG9vbGJhcj8uYWxpZ247XG4gICAgICAgICAgICB0aGlzLnRoZUdsb2JhbFRvb2xiYXJJbnN0YW5jZS5zZXRUb29sYmFyQ2xhc3MoKTtcbiAgICAgICAgICAgIHRoaXMudGhlR2xvYmFsVG9vbGJhckluc3RhbmNlLnJlbmRlclRvb2xiYXJWaWV3KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVDb250ZXh0KCkge1xuICAgICAgICB0aGlzLnRoZUNvbnRleHRTZXJ2aWNlLmluaXRpYWxpemUoe1xuICAgICAgICAgICAgdGhlT3B0aW9uczogdGhpcy50aGVPcHRpb25zLFxuICAgICAgICAgICAgbmF0aXZlRWxlbWVudDogdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWZcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplT3B0aW9ucygpIHtcbiAgICAgICAgY29uc3QgcHJlc2V0TW9kZSA9IHRoaXMucHJlc2V0Q29uZmlnPy5vcHRpb25zPy5tb2RlO1xuICAgICAgICBjb25zdCBkZWZhdWx0TW9kZSA9IHRoaXMudGhlT3B0aW9ucz8ubW9kZSA/PyBwcmVzZXRNb2RlID8/IFRoZURhdGFNb2RlLmh0bWw7XG5cbiAgICAgICAgaWYgKCF0aGlzLnRoZU9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMudGhlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICByZWFkb25seTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbW9kZTogZGVmYXVsdE1vZGUsXG4gICAgICAgICAgICAgICAgbmVlZGVkU2Nyb2xsSW50b1ZpZXc6ICgpID0+IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnRoZU9wdGlvbnMubW9kZSkge1xuICAgICAgICAgICAgdGhpcy50aGVPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMudGhlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBtb2RlOiBkZWZhdWx0TW9kZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVF1aWNrSW5zZXJ0KCkge1xuICAgICAgICBjb25zdCBxdWlja0luc2VydFBsdWdpbiA9IGdldFBsdWdpbk9wdGlvbnM8UXVpY2tJbnNlcnRQbHVnaW5PcHRpb25zPih0aGlzLmVkaXRvciwgUGx1Z2luS2V5cy5xdWlja0luc2VydCk7XG4gICAgICAgIGlmIChxdWlja0luc2VydFBsdWdpbi5kaXNhYmxlZCB8fCBxdWlja0luc2VydFBsdWdpbi5kaXNhYmxlZFBsdXMpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZVF1aWNrSW5zZXJ0UGx1cyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplRXZlbnRzKCkge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZWRvd24nKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmdsb2JhbE1vdXNlZG93bihldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVXBsb2FkaW5nU3RhdHVzKCkge1xuICAgICAgICB0aGlzLnRoZUNvbnRleHRTZXJ2aWNlLnVwbG9hZGluZ1N0YXR1cyQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKGlzVXBsb2FkaW5nID0+IHtcbiAgICAgICAgICAgIGlmIChpc1VwbG9hZGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMudGhlVXBsb2FkaW5nU3RhdHVzLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRoZUNvbnRleHRTZXJ2aWNlLnVwbG9hZGluZ0ZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRoZVVwbG9hZGluZ1N0YXR1cy5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlBdXRvRm9jdXMoKSB7XG4gICAgICAgIGlmICghdGhpcy50aGVPcHRpb25zPy5kaXNhYmxlZCAmJiAhdGhpcy50aGVPcHRpb25zPy5yZWFkb25seSkge1xuICAgICAgICAgICAgYXV0b0ZvY3VzKHRoaXMuZWRpdG9yLCB0aGlzLnRoZU9wdGlvbnM/LmF1dG9Gb2N1cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBEZXNjZW5kYW50W10pIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGRhdGFEZXNlcmlhbGl6ZSh0aGlzLnRoZU9wdGlvbnM/Lm1vZGUsIHZhbHVlKTtcbiAgICAgICAgLy8gZGF0YS1kZXNlcmlhbGl6ZVxuICAgICAgICB0aGlzLmVkaXRvclZhbHVlID0gZGF0YTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnRoZU9wdGlvbnMucmVhZG9ubHkgJiYgQW5ndWxhckVkaXRvci5pc0ZvY3VzZWQodGhpcy5lZGl0b3IpICYmIHRoaXMuZWRpdG9yLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmRlc2VsZWN0KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdCh0aGlzLmVkaXRvciwgc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIHNjcm9sbFNlbGVjdGlvbkludG9WaWV3ID0gKGU6IFRoZUVkaXRvciwgZG9tUmFuZ2U6IERPTVJhbmdlKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgbmVlZGVkU2Nyb2xsSW50b1ZpZXcgfSA9IHRoaXMudGhlT3B0aW9ucztcbiAgICAgICAgaWYgKG5lZWRlZFNjcm9sbEludG9WaWV3ICYmICFuZWVkZWRTY3JvbGxJbnRvVmlldyh0aGlzLmVkaXRvcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0U2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcoZSwgZG9tUmFuZ2UpO1xuICAgIH07XG5cbiAgICB2YWx1ZUNoYW5nZSh2YWx1ZTogRGVzY2VuZGFudFtdKSB7XG4gICAgICAgIHRoaXMudGhlR2xvYmFsVG9vbGJhckluc3RhbmNlPy5zZWxlY3Rpb25DaGFuZ2UodGhpcy5lZGl0b3IpO1xuXG4gICAgICAgIGlmICh0aGlzLmVkaXRvclZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdG9yVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICAvLyBzZXJpYWxpemluZ1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSB0aGlzLnNlcmlhbGl6aW5nVmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sobmV3VmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VyaWFsaXppbmdWYWx1ZSh2YWx1ZTogRGVzY2VuZGFudFtdKTogc3RyaW5nIHwgRGVzY2VuZGFudFtdIHtcbiAgICAgICAgaWYgKHRoaXMudGhlT3B0aW9ucz8ubW9kZSA9PT0gVGhlRGF0YU1vZGUuaHRtbCkge1xuICAgICAgICAgICAgbGV0IGh0bWxWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgY29uc3QgaXNFbXB0eUNvbnRlbnQgPSBUaGVRdWVyaWVzLmlzRW1wdHlDb250ZW50KHZhbHVlKTtcbiAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKGVsZW1lbnQ6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudEh0bWwgPSB0aGlzLmVsZW1lbnRUb0h0bWwuZ2V0KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50SHRtbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNlcmlhbGl6aW5nXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRIdG1sID0gZGF0YVNlcmlhbGl6aW5nKHRoaXMudGhlT3B0aW9ucz8ubW9kZSwgW2VsZW1lbnRdKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGh0bWxWYWx1ZSArPSBlbGVtZW50SHRtbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50VG9IdG1sLnNldChlbGVtZW50LCBlbGVtZW50SHRtbCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaHRtbFZhbHVlICs9IGVsZW1lbnRIdG1sO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaXNFbXB0eUNvbnRlbnQgPyAnJyA6IGh0bWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkVycm9ySGFuZGxlcigpIHtcbiAgICAgICAgdGhpcy5lZGl0b3Iub25FcnJvciA9IChlcnJvckRhdGE6IFNsYXRlRXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRoZU9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRoZU9uRXJyb3IoZXJyb3JEYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JEYXRhLm5hdGl2ZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvckRhdGEubmF0aXZlRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJlbmRlckVsZW1lbnQgPSAoZWxlbWVudDogRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVJbnN0YW5jZS5yZW5kZXJFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmVkaXRvci5yZW5kZXJFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gY29tcG9uZW50ID8gY29tcG9uZW50IDogdGVtcGxhdGU7XG4gICAgfTtcblxuICAgIHJlbmRlckxlYWYgPSAodGV4dDogVGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBsZWFmID0gdGhpcy5lZGl0b3IucmVuZGVyTGVhZih0ZXh0KTtcbiAgICAgICAgcmV0dXJuIGxlYWYgPyBsZWFmIDogbnVsbDtcbiAgICB9O1xuXG4gICAgcmVuZGVyVGV4dCA9ICh0ZXh0OiBUZXh0KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIE1hcmtUeXBlcykge1xuICAgICAgICAgICAgaWYgKHRleHRbTWFya1R5cGVzW2tleV1dKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRoZVRleHRDb21wb25lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQudGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlRGVjb3JhdGUoKSB7XG4gICAgICAgIHRoaXMuZGVjb3JhdGUgPSAobm9kZUVudHJ5OiBOb2RlRW50cnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlY29yYXRpb25zID0gW107XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRoZURlY29yYXRlKSB7XG4gICAgICAgICAgICAgICAgZGVjb3JhdGlvbnMucHVzaCguLi50aGlzLnRoZURlY29yYXRlKHRoaXMuZWRpdG9yLCBub2RlRW50cnkpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGRlY29yYXRpb25zO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9uS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBzaG9ydGN1dHModGhpcy5lZGl0b3IsIGV2ZW50KTtcbiAgICAgICAgdGhpcy50aGVPbkRPTUV2ZW50LmVtaXQoe1xuICAgICAgICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGtleTogZXZlbnQua2V5XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIEFuZ3VsYXJFZGl0b3Iub25LZXlkb3duKHRoaXMuZWRpdG9yLCBldmVudCk7XG5cbiAgICAgICAgaWYgKGlzS2V5SG90a2V5KCdtb2QrcycsIGV2ZW50KSAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRoZU9uU2F2ZS5lbWl0KHRoaXMuZWRpdG9yVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzS2V5SG90a2V5KCdtb2QrYScsIGV2ZW50KSAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RBbGwoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBtb3VzZWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUodGhpcy5lZGl0b3IsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgY29uc3QgcmVjdEVkaXRhYmxlID0gZWRpdGFibGVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBhYnNvbHV0ZUVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGV2ZW50LngsIGV2ZW50LnkpO1xuICAgICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudC5pc0VxdWFsTm9kZShhYnNvbHV0ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBibG9ja0NhcmRFbGVtZW50ID0gYWJzb2x1dGVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zbGF0ZS1ibG9jay1jYXJkJyk7XG4gICAgICAgICAgICBpZiAoIWJsb2NrQ2FyZEVsZW1lbnQpIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgeyBwYWRkaW5nUmlnaHQgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVkaXRhYmxlRWxlbWVudCwgbnVsbCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdSaWdodFBpeGVscyA9IGNvZXJjZVBpeGVsc0Zyb21Dc3NWYWx1ZShwYWRkaW5nUmlnaHQpO1xuICAgICAgICBjb25zdCBmYWtlUmlnaHRYID0gcmVjdEVkaXRhYmxlLnJpZ2h0IC0gcGFkZGluZ1JpZ2h0UGl4ZWxzIC0gNTA7XG4gICAgICAgIGxldCByZWxhdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGZha2VSaWdodFgsIGV2ZW50LnkpO1xuICAgICAgICBsZXQgcmVsYXRpdmVCbG9ja0NhcmRFbGVtZW50ID0gcmVsYXRpdmVFbGVtZW50LmNsb3Nlc3QoJy5zbGF0ZS1ibG9jay1jYXJkJyk7XG4gICAgICAgIGlmIChyZWxhdGl2ZUJsb2NrQ2FyZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclggPSByZWN0RWRpdGFibGUueCArIHJlY3RFZGl0YWJsZS53aWR0aCAvIDI7XG4gICAgICAgICAgICBjb25zdCBibG9ja0NhcmRFbnRyeSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZUNhcmRFbnRyeSh0aGlzLmVkaXRvciwgcmVsYXRpdmVCbG9ja0NhcmRFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgICAgICAgIGlmIChibG9ja0NhcmRFbnRyeSAmJiB0aGlzLmVkaXRvci5pc0Jsb2NrQ2FyZChibG9ja0NhcmRFbnRyeVswXSkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIEFuZ3VsYXJFZGl0b3IubW92ZUJsb2NrQ2FyZCh0aGlzLmVkaXRvciwgYmxvY2tDYXJkRW50cnlbMF0sIHsgZGlyZWN0aW9uOiBldmVudC54IDwgY2VudGVyWCA/ICdsZWZ0JyA6ICdyaWdodCcgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVTZWxlY3RBbGwoKSB7XG4gICAgICAgIGxldCBub2RlO1xuICAgICAgICBpZiAoIXRoaXMuZWRpdG9yLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgVGhlVHJhbnNmb3Jtcy5zZXRFbmRTZWxlY3Rpb24odGhpcy5lZGl0b3IpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IFJhbmdlLmVkZ2VzKHRoaXMuZWRpdG9yLnNlbGVjdGlvbik7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblJhbmdlID0gRWRpdG9yLnJhbmdlKHRoaXMuZWRpdG9yLCBzdGFydCwgZW5kKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyQmxvY2tzID0gVGhlUXVlcmllcy5nZXRDb250YWluZXJCbG9ja3ModGhpcy5lZGl0b3IpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRhaW5lckJsb2Nrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgW25vZGVdID0gVGhlUXVlcmllcy5nZXROb2Rlc0J5VHlwZSh0aGlzLmVkaXRvciwgY29udGFpbmVyQmxvY2tzW2ldKTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgWywgcGF0aF0gPSBub2RlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU3RhcnRQYXJlbnQgPSBQYXRoLmVxdWFscyhwYXRoLCBzdGFydC5wYXRoLnNsaWNlKDAsIHBhdGgubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNFbmRQYXJlbnQgPSBQYXRoLmVxdWFscyhwYXRoLCBlbmQucGF0aC5zbGljZSgwLCBwYXRoLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgIGlmIChpc1N0YXJ0UGFyZW50ICYmIGlzRW5kUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVSYW5nZSA9IEVkaXRvci5yYW5nZSh0aGlzLmVkaXRvciwgcGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghUmFuZ2UuZXF1YWxzKG5vZGVSYW5nZSwgc2VsZWN0aW9uUmFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdCh0aGlzLmVkaXRvciwgbm9kZVJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KHRoaXMuZWRpdG9yLCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG9uQ2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgQW5ndWxhckVkaXRvci5vbkNsaWNrKHRoaXMuZWRpdG9yLCBldmVudCk7XG4gICAgICAgIHRoaXMudGhlT25ET01FdmVudC5lbWl0KHtcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50OiBldmVudFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgb25TbGFQYXN0ZSA9IChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy50aGVPbkRPTUV2ZW50LmVtaXQoe1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0VGV4dEFuZEpTT04oZXZlbnQuY2xpcGJvYXJkRGF0YSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYXRpdmVFdmVudDogZXZlbnRcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIG9uU2xhQmVmb3JlSW5wdXQgPSAoXG4gICAgICAgIGV2ZW50OiBFdmVudCAmIHtcbiAgICAgICAgICAgIGlucHV0VHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgZGF0YTogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyIHwgbnVsbDtcbiAgICAgICAgfVxuICAgICkgPT4ge1xuICAgICAgICBsZXQgZGF0YSA9IHtcbiAgICAgICAgICAgIGlucHV0VHlwZTogZXZlbnQuaW5wdXRUeXBlLFxuICAgICAgICAgICAgdGV4dDogKGV2ZW50LmRhdGEgfHwgZXZlbnQuZGF0YVRyYW5zZmVyKSBhcyBzdHJpbmdcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGV2ZW50LmlucHV0VHlwZSA9PT0gJ2luc2VydEZyb21QYXN0ZScpIHtcbiAgICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldFRleHRBbmRKU09OKChldmVudC5kYXRhIHx8IGV2ZW50LmRhdGFUcmFuc2ZlcikgYXMgRGF0YVRyYW5zZmVyKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoZU9uRE9NRXZlbnQuZW1pdCh7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBvblNsYUJsdXIgPSAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy50aGVPbkRPTUV2ZW50LmVtaXQoe1xuICAgICAgICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBvblNsYUZvY3VzID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLnRoZU9uRE9NRXZlbnQuZW1pdCh7XG4gICAgICAgICAgICBuYXRpdmVFdmVudDogZXZlbnRcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIG9uU2xhQ3V0ID0gKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLnRoZU9uRE9NRXZlbnQuZW1pdCh7XG4gICAgICAgICAgICBuYXRpdmVFdmVudDogZXZlbnRcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIG9uU2xhQ29weSA9IChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHt9O1xuXG4gICAgb25TbGFDb21wb3NpdGlvblN0YXJ0ID0gKGV2ZW50OiBDb21wb3NpdGlvbkV2ZW50KSA9PiB7fTtcblxuICAgIG9uU2xhQ29tcG9zaXRpb25FbmQgPSAoZXZlbnQ6IENvbXBvc2l0aW9uRXZlbnQpID0+IHt9O1xuXG4gICAgb25TbGFEcmFnU3RhcnQgPSAoZXZlbnQ6IERyYWdFdmVudCkgPT4ge307XG5cbiAgICBvblNsYURyYWdPdmVyID0gKGV2ZW50OiBEcmFnRXZlbnQpID0+IHt9O1xuXG4gICAgb25Ecm9wID0gKGV2ZW50OiBEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy50aGVPbkRPTUV2ZW50LmVtaXQoe1xuICAgICAgICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGdldFRleHRBbmRKU09OKGRhdGE6IERhdGFUcmFuc2Zlcikge1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IGRhdGEuZ2V0RGF0YShgYXBwbGljYXRpb24vJHtDTElQQk9BUkRfRk9STUFUX0tFWX1gKTtcbiAgICAgICAgbGV0IGpzb24gPSBbXTtcbiAgICAgICAgaWYgKGZyYWdtZW50KSB7XG4gICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQod2luZG93LmF0b2IoZnJhZ21lbnQpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGV4dCA9IGRhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAganNvbixcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCI8dGhlLXRvb2xiYXJcbiAgKm5nSWY9XCIhdGhlT3B0aW9ucz8ucmVhZG9ubHkgJiYgIXRoZUdsb2JhbFRvb2xiYXIgJiYgIWlzTW9iaWxlTW9kZVwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAndGhlLXRvb2xiYXItZGlzYWJsZWQnOiB0aGVPcHRpb25zPy5kaXNhYmxlZFxuICB9XCJcbiAgI2dsb2JhbFRvb2xiYXJcbiAgW2VkaXRvcl09XCJlZGl0b3JcIlxuICBbdG9vbGJhckl0ZW1zXT1cInRvb2xiYXJFbnRpdHkuZ2xvYmFsXCJcbiAgW2NvbnRhaW5lckNsYXNzXT1cImdsb2JhbFRvb2xiYXJDbGFzc1wiXG4gIFthbGlnbl09XCJ0aGVPcHRpb25zPy50b29sYmFyPy5hbGlnblwiXG4+PC90aGUtdG9vbGJhcj5cblxuPGRpdlxuICAjdGhlRWRpdGFibGVDb250YWluZXJcbiAgY2xhc3M9XCJ0aGUtZWRpdGFibGUtY29udGFpbmVyXCJcbiAgdGh5SW1hZ2VHcm91cFxuICBbbmdDbGFzc109XCJ7XG4gICAgJ3RoZS1lZGl0b3ItZGlzYWJsZWQnOiB0aGVPcHRpb25zPy5kaXNhYmxlZCxcbiAgICAnbWF4LWhlaWdodCc6IG1heEhlaWdodFxuICB9XCJcbiAgW25nU3R5bGVdPVwieyAnbWF4LWhlaWdodCc6IG1heEhlaWdodCB9XCJcbj5cbiAgPHNsYXRlLWVkaXRhYmxlXG4gICAgY2xhc3M9XCJ0aGUtZWRpdG9yLXR5cG9cIlxuICAgIFtlZGl0b3JdPVwiZWRpdG9yXCJcbiAgICBbbmdNb2RlbF09XCJlZGl0b3JWYWx1ZVwiXG4gICAgW3JlbmRlckVsZW1lbnRdPVwicmVuZGVyRWxlbWVudFwiXG4gICAgW3JlbmRlclRleHRdPVwicmVuZGVyVGV4dFwiXG4gICAgW3JlbmRlckxlYWZdPVwicmVuZGVyTGVhZlwiXG4gICAgW2lzU3RyaWN0RGVjb3JhdGVdPVwiZmFsc2VcIlxuICAgIFtkZWNvcmF0ZV09XCJkZWNvcmF0ZVwiXG4gICAgW3BsYWNlaG9sZGVyXT1cInRoZU9wdGlvbnM/LnBsYWNlaG9sZGVyXCJcbiAgICBbcGxhY2Vob2xkZXJEZWNvcmF0ZV09XCJ0aGVPcHRpb25zPy5wbGFjZWhvbGRlckRlY29yYXRlID8gdGhlT3B0aW9ucz8ucGxhY2Vob2xkZXJEZWNvcmF0ZSA6IG51bGxcIlxuICAgIFtyZWFkb25seV09XCJ0aGVPcHRpb25zPy5yZWFkb25seSB8fCB0aGVPcHRpb25zPy5kaXNhYmxlZFwiXG4gICAgW2tleWRvd25dPVwib25LZXlEb3duXCJcbiAgICBbY2xpY2tdPVwib25DbGlja1wiXG4gICAgW3Bhc3RlXT1cIm9uU2xhUGFzdGVcIlxuICAgIFtibHVyXT1cIm9uU2xhQmx1clwiXG4gICAgW2ZvY3VzXT1cIm9uU2xhRm9jdXNcIlxuICAgIFtjb3B5XT1cIm9uU2xhQ29weVwiXG4gICAgW2N1dF09XCJvblNsYUN1dFwiXG4gICAgW2JlZm9yZUlucHV0XT1cIm9uU2xhQmVmb3JlSW5wdXRcIlxuICAgIFtjb21wb3NpdGlvblN0YXJ0XT1cIm9uU2xhQ29tcG9zaXRpb25TdGFydFwiXG4gICAgW2NvbXBvc2l0aW9uRW5kXT1cIm9uU2xhQ29tcG9zaXRpb25FbmRcIlxuICAgIFtkcmFnU3RhcnRdPVwib25TbGFEcmFnU3RhcnRcIlxuICAgIFtkcmFnT3Zlcl09XCJvblNsYURyYWdPdmVyXCJcbiAgICBbZHJvcF09XCJvbkRyb3BcIlxuICAgIFtzY3JvbGxTZWxlY3Rpb25JbnRvVmlld109XCJzY3JvbGxTZWxlY3Rpb25JbnRvVmlld1wiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKG1vdXNlZG93bik9XCJtb3VzZWRvd24oJGV2ZW50KVwiXG4gID48L3NsYXRlLWVkaXRhYmxlPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNNb2JpbGVNb2RlXCI+XG4gICAgPHRoZS1pbmxpbmUtdG9vbGJhclxuICAgICAgKm5nSWY9XCIhdGhlT3B0aW9ucz8ucmVhZG9ubHkgJiYgaW5saW5lVG9vbGJhclZpc2libGVcIlxuICAgICAgW2VkaXRvcl09XCJlZGl0b3JcIlxuICAgICAgW3Rvb2xiYXJJdGVtc109XCJ0b29sYmFyRW50aXR5LmlubGluZVwiXG4gICAgPjwvdGhlLWlubGluZS10b29sYmFyPlxuICAgIDxkaXYgKm5nSWY9XCIhdGhlT3B0aW9ucz8ucmVhZG9ubHlcIiB0aGVRdWlja0luc2VydCBbZWRpdG9yXT1cImVkaXRvclwiIFtpc1Zpc2libGVdPVwidmlzaWJsZVF1aWNrSW5zZXJ0UGx1c1wiPjwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8dGhlLXRlbXBsYXRlICN0ZW1wbGF0ZUluc3RhbmNlPjwvdGhlLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|
|
491
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3NyYy9lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vcGFja2FnZXMvc3JjL2VkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFFTixLQUFLLEVBS0wsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBRVQsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQWMsTUFBTSxFQUFzQixJQUFJLEVBQUUsS0FBSyxFQUFRLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUcsT0FBTyxFQUFFLGFBQWEsRUFBd0IsOEJBQThCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFcEUsT0FBTyxFQUNILG9CQUFvQixFQUNwQiw4QkFBOEIsRUFDOUIsOEJBQThCLEVBQzlCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsMEJBQTBCLEVBQzdCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BFLE9BQU8s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SUFBSTt5QkFDZDtxQkFDSixRQUNLO3dCQUNGLEtBQUssRUFBRSxZQUFZO3dCQUNuQiw2QkFBNkIsRUFBRSwwQkFBMEI7d0JBQ3pELDJCQUEyQixFQUFFLGNBQWM7cUJBQzlDLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNOzswQkF1RTFDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsdUJBQXVCOzRDQXBFdEMsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTTtnQkFFRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFFRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBR1AsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUkvQyxvQkFBb0I7c0JBRG5CLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSXJFLHFCQUFxQjtzQkFEcEIsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzS2V5SG90a2V5IH0gZnJvbSAnaXMtaG90a2V5JztcbmltcG9ydCB7IFRoeUljb25SZWdpc3RyeSB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlc2NlbmRhbnQsIEVkaXRvciwgRWxlbWVudCwgTm9kZUVudHJ5LCBQYXRoLCBSYW5nZSwgVGV4dCwgVHJhbnNmb3JtcywgY3JlYXRlRWRpdG9yIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciwgRE9NUmFuZ2UsIFNsYXRlRXJyb3IsIGRlZmF1bHRTY3JvbGxTZWxlY3Rpb25JbnRvVmlldywgd2l0aEFuZ3VsYXIgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IHdpdGhIaXN0b3J5IH0gZnJvbSAnc2xhdGUtaGlzdG9yeSc7XG5pbXBvcnQgeyBUaGVUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90ZW1wbGF0ZS90ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGhlVGV4dENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRoZVRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIENMSVBCT0FSRF9GT1JNQVRfS0VZLFxuICAgIERlZmF1bHRHbG9iYWxUb29sYmFyRGVmaW5pdGlvbixcbiAgICBEZWZhdWx0SW5saW5lVG9vbGJhckRlZmluaXRpb24sXG4gICAgRGVmYXVsdFBsdWdpbk1lbnUsXG4gICAgTWFya1R5cGVzLFxuICAgIGluaXRpYWxpemVEZWZhdWx0TWVudUljb25zXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGNyZWF0ZVRvb2xiYXIsIGdldFBsdWdpbk9wdGlvbnMsIHdpdGhUaGVpYSB9IGZyb20gJy4vY29yZSc7XG5pbXBvcnQge1xuICAgIERvbUV2ZW50RGF0YUluZm8sXG4gICAgUGx1Z2luS2V5cyxcbiAgICBUSEVfTU9ERV9UT0tFTixcbiAgICBUSEVfUFJFU0VUX0NPTkZJR19UT0tFTixcbiAgICBUaGVEYXRhTW9kZSxcbiAgICBUaGVFZGl0b3IsXG4gICAgVGhlTW9kZSxcbiAgICBUaGVPcHRpb25zLFxuICAgIFRoZVByZXNldENvbmZpZyxcbiAgICBUb29sYmFyRW50aXR5XG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUaGVQbHVnaW4gfSBmcm9tICcuL2ludGVyZmFjZXMvcGx1Z2lucy9wbHVnaW5zJztcbmltcG9ydCB7IGludGVybmFsUGx1Z2lucyB9IGZyb20gJy4vcGx1Z2lucyc7XG5pbXBvcnQgeyBRdWlja0luc2VydFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuL3BsdWdpbnMvcXVpY2staW5zZXJ0L3F1aWNrLWluc2VydC5wbHVnaW4nO1xuaW1wb3J0ICogYXMgVGhlUXVlcmllcyBmcm9tICcuL3F1ZXJpZXMnO1xuaW1wb3J0IHsgVGhlQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBzaG9ydGN1dHMgfSBmcm9tICcuL3Nob3J0Y3V0cyc7XG5pbXBvcnQgKiBhcyBUaGVUcmFuc2Zvcm1zIGZyb20gJy4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQge1xuICAgIFRIRV9FRElUT1JfUFJFVklPVVNfU0VMRUNUSU9OLFxuICAgIGF1dG9Gb2N1cyxcbiAgICBjb2VyY2VQaXhlbHNGcm9tQ3NzVmFsdWUsXG4gICAgZGF0YURlc2VyaWFsaXplLFxuICAgIGRhdGFTZXJpYWxpemluZyxcbiAgICBpZENyZWF0b3IsXG4gICAgc2V0RWRpdG9yVVVJRFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICcuL3V0aWxzL2xvZGFzaCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGhlLWVkaXRvciwgdGhlRWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2VkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFRoZUNvbnRleHRTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRoZUVkaXRvckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGhlLWVkaXRvcicsXG4gICAgICAgICdbY2xhc3MudGhlLWVkaXRvci1yZWFkb25seV0nOiAnZWRpdG9yLm9wdGlvbnM/LnJlYWRvbmx5JyxcbiAgICAgICAgJ1tjbGFzcy50aGUtbW9iaWxlLWVkaXRvcl0nOiAnaXNNb2JpbGVNb2RlJ1xuICAgIH0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGhlRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgdGhlT3B0aW9uczogVGhlT3B0aW9ucztcblxuICAgIEBJbnB1dCgpIHRoZVBsdWdpbnM6IFRoZVBsdWdpbltdID0gW107XG5cbiAgICBASW5wdXQoKSB0aGVHbG9iYWxUb29sYmFyPzogVGhlVG9vbGJhckNvbXBvbmVudDtcblxuICAgIEBJbnB1dCgpIHRoZURlY29yYXRlOiAoZWRpdG9yOiBUaGVFZGl0b3IsIG5vZGVFbnRyeTogTm9kZUVudHJ5KSA9PiBSYW5nZVtdO1xuXG4gICAgQElucHV0KCkgdGhlT25FcnJvcj86IChlcnJvcjogU2xhdGVFcnJvcikgPT4gdm9pZDtcblxuICAgIEBPdXRwdXQoKSB0aGVPblNhdmU6IEV2ZW50RW1pdHRlcjxEZXNjZW5kYW50W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxEZXNjZW5kYW50W10+KCk7XG5cbiAgICBAT3V0cHV0KCkgdGhlT25ET01FdmVudDogRXZlbnRFbWl0dGVyPHsgbmF0aXZlRXZlbnQ6IEV2ZW50OyBkYXRhPzogRG9tRXZlbnREYXRhSW5mbyB9PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSB0aGVFZGl0b3JDcmVhdGVkOiBFdmVudEVtaXR0ZXI8RWRpdG9yPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSB0aGVVcGxvYWRpbmdTdGF0dXM6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy8gdHJ1ZSDkuIrkvKDnu5PmnZ8gZmFsc2Ug5LiK5Lyg5LitXG5cbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZUluc3RhbmNlJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICB0ZW1wbGF0ZUluc3RhbmNlOiBUaGVUZW1wbGF0ZUNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ3RoZUVkaXRhYmxlQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICB0aGVFZGl0YWJsZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBAVmlld0NoaWxkKCdnbG9iYWxUb29sYmFyJylcbiAgICBnbG9iYWxUb29sYmFySW5zdGFuY2U6IFRoZVRvb2xiYXJDb21wb25lbnQ7XG5cbiAgICB0b29sYmFyRW50aXR5OiBUb29sYmFyRW50aXR5O1xuXG4gICAgZWRpdG9yOiBUaGVFZGl0b3I7XG5cbiAgICBlZGl0b3JWYWx1ZTogRGVzY2VuZGFudFtdO1xuXG4gICAgZ2xvYmFsVG9vbGJhckNsYXNzOiBzdHJpbmdbXTtcblxuICAgIGlzTW9iaWxlTW9kZTogYm9vbGVhbjtcblxuICAgIHZpc2libGVRdWlja0luc2VydFBsdXMgPSB0cnVlO1xuXG4gICAgZWxlbWVudFRvSHRtbDogV2Vha01hcDxFbGVtZW50LCBzdHJpbmc+ID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIGRlY29yYXRlOiAobm9kZUVudHJ5OiBOb2RlRW50cnkpID0+IFJhbmdlW107XG5cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yPy5vcHRpb25zO1xuICAgIH1cblxuICAgIGdldCB0aGVHbG9iYWxUb29sYmFySW5zdGFuY2UoKTogVGhlVG9vbGJhckNvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoZUdsb2JhbFRvb2xiYXIgPyB0aGlzLnRoZUdsb2JhbFRvb2xiYXIgOiB0aGlzLmdsb2JhbFRvb2xiYXJJbnN0YW5jZTtcbiAgICB9XG5cbiAgICBnZXQgbWF4SGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zPy5tYXhIZWlnaHQgPyBgJHt0aGlzLm9wdGlvbnM/Lm1heEhlaWdodH1weGAgOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBkZXN0cm95UmVmOiBEZXN0cm95UmVmLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgdGhlQ29udGV4dFNlcnZpY2U6IFRoZUNvbnRleHRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGljb25SZWdpc3RyeTogVGh5SWNvblJlZ2lzdHJ5LFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFRIRV9QUkVTRVRfQ09ORklHX1RPS0VOKSBwcml2YXRlIHByZXNldENvbmZpZzogVGhlUHJlc2V0Q29uZmlnXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLm9uRXJyb3JIYW5kbGVyKCk7XG4gICAgICAgIGluaXRpYWxpemVEZWZhdWx0TWVudUljb25zKHRoaXMuaWNvblJlZ2lzdHJ5KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBjaGFuZ2VzLnRoZU9wdGlvbnM7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgIW9wdGlvbnMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZU9wdGlvbnMob3B0aW9ucy5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgIW9wdGlvbnMuZmlyc3RDaGFuZ2UgJiYgIWlzRXF1YWwob3B0aW9ucy5jdXJyZW50VmFsdWU/LnRvb2xiYXIsIG9wdGlvbnMucHJldmlvdXNWYWx1ZT8udG9vbGJhcikpIHtcbiAgICAgICAgICAgIHRoaXMudG9vbGJhckNhbGN1bGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY3VycmVudFZhbHVlPy5yZWFkb25seSAhPT0gb3B0aW9ucy5wcmV2aW91c1ZhbHVlPy5yZWFkb25seSkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUF1dG9Gb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzWyd0aGVEZWNvcmF0ZSddKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlRGVjb3JhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lZGl0b3I/LnNlbGVjdGlvbiAmJiAob3B0aW9ucz8uY3VycmVudFZhbHVlPy5yZWFkb25seSB8fCBvcHRpb25zPy5jdXJyZW50VmFsdWU/LmRpc2FibGVkKSkge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5kZXNlbGVjdCh0aGlzLmVkaXRvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgVEhFX0VESVRPUl9QUkVWSU9VU19TRUxFQ1RJT04uZGVsZXRlKHRoaXMuZWRpdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLmdldFBsdWdpbnMoKTtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSB3aXRoVGhlaWEod2l0aEhpc3Rvcnkod2l0aEFuZ3VsYXIoY3JlYXRlRWRpdG9yKCksIENMSVBCT0FSRF9GT1JNQVRfS0VZKSksIHBsdWdpbnMpO1xuICAgICAgICBzZXRFZGl0b3JVVUlEKHRoaXMuZWRpdG9yLCBpZENyZWF0b3IoKSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZU1vYmlsZU1vZGUoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplT3B0aW9ucyh0aGlzLnRoZU9wdGlvbnMpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVDb250ZXh0KCk7XG4gICAgICAgIHRoaXMudG9vbGJhckNhbGN1bGF0ZSgpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVRdWlja0luc2VydCgpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVFdmVudHMoKTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZURlY29yYXRlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVXBsb2FkaW5nU3RhdHVzKCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBZb3UgbmVlZCB0byB3YWl0IGZvciB0aGUgZWRpdG9yIHJlbmRlcmluZyB0byBjb21wbGV0ZVxuICAgICAgICAgICAgLy8gYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGV4dGVybmFsIHRvb2xiYXIgYXNzaWdubWVudCBkZXRlY3Rpb25cbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUdsb2JhbFRvb2xiYXIoKTtcbiAgICAgICAgICAgIHRoaXMudGhlRWRpdG9yQ3JlYXRlZC5lbWl0KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlBdXRvRm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplT3B0aW9ucyh0aGVPcHRpb25zOiBUaGVPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHByZXNldE1vZGUgPSB0aGlzLnByZXNldENvbmZpZz8ub3B0aW9ucz8ubW9kZTtcbiAgICAgICAgY29uc3QgcHJlc2V0SW5saW5lVG9vbGJhclZpc2libGUgPSB0aGlzLnByZXNldENvbmZpZz8ub3B0aW9ucz8uaW5saW5lVG9vbGJhclZpc2libGU7XG4gICAgICAgIGNvbnN0IHByZXNldE1lbnUgPSB0aGlzLnByZXNldENvbmZpZz8ub3B0aW9ucz8ubWVudTtcbiAgICAgICAgY29uc3QgcHJlc2V0VG9vbGJhckFsaWduID0gdGhpcy5wcmVzZXRDb25maWc/Lm9wdGlvbnM/LnRvb2xiYXI/LmFsaWduO1xuICAgICAgICBjb25zdCBwcmVzZXRHbG9iYWxUb29sYmFyID0gdGhpcy5wcmVzZXRDb25maWc/Lm9wdGlvbnM/LnRvb2xiYXI/Lmdsb2JhbDtcbiAgICAgICAgY29uc3QgcHJlc2V0SW5saW5lVG9vbGJhciA9IHRoaXMucHJlc2V0Q29uZmlnPy5vcHRpb25zPy50b29sYmFyPy5pbmxpbmU7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNHbG9iYWxUb29sYmFyID0gdGhlT3B0aW9ucz8udG9vbGJhcj8uZ2xvYmFsO1xuICAgICAgICBjb25zdCBvcHRpb25zSW5saW5lVG9vbGJhciA9IHRoZU9wdGlvbnM/LnRvb2xiYXI/LmlubGluZTtcblxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgcmVhZG9ubHk6IGZhbHNlLFxuICAgICAgICAgICAgbmVlZGVkU2Nyb2xsSW50b1ZpZXc6ICgpID0+IHRydWUsXG4gICAgICAgICAgICAuLi50aGVPcHRpb25zLFxuICAgICAgICAgICAgbW9kZTogdGhlT3B0aW9ucz8ubW9kZSA/PyBwcmVzZXRNb2RlID8/IFRoZURhdGFNb2RlLmh0bWwsXG4gICAgICAgICAgICBpbmxpbmVUb29sYmFyVmlzaWJsZTogdGhlT3B0aW9ucz8uaW5saW5lVG9vbGJhclZpc2libGUgPz8gcHJlc2V0SW5saW5lVG9vbGJhclZpc2libGUsXG4gICAgICAgICAgICBtZW51OiB0aGVPcHRpb25zPy5tZW51ID8/IHByZXNldE1lbnUgPz8gRGVmYXVsdFBsdWdpbk1lbnUsXG4gICAgICAgICAgICB0b29sYmFyOiB7XG4gICAgICAgICAgICAgICAgYWxpZ246IHRoZU9wdGlvbnM/LnRvb2xiYXI/LmFsaWduID8/IHByZXNldFRvb2xiYXJBbGlnbixcbiAgICAgICAgICAgICAgICBnbG9iYWw6IG9wdGlvbnNHbG9iYWxUb29sYmFyID8/IHByZXNldEdsb2JhbFRvb2xiYXIgPz8gRGVmYXVsdEdsb2JhbFRvb2xiYXJEZWZpbml0aW9uLFxuICAgICAgICAgICAgICAgIGlubGluZTogb3B0aW9uc0lubGluZVRvb2xiYXIgPz8gcHJlc2V0SW5saW5lVG9vbGJhciA/PyBEZWZhdWx0SW5saW5lVG9vbGJhckRlZmluaXRpb25cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmVkaXRvci5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5lZGl0b3IuZGlzYWJsZWQgPSB0aGVPcHRpb25zPy5kaXNhYmxlZDtcbiAgICAgICAgdGhpcy5lZGl0b3IuZXh0cmFFbGVtZW50T3B0aW9ucyA9IG9wdGlvbnM/LmV4dHJhRWxlbWVudE9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplQ29udGV4dCgpIHtcbiAgICAgICAgdGhpcy50aGVDb250ZXh0U2VydmljZS5pbml0aWFsaXplKHtcbiAgICAgICAgICAgIGVkaXRvcjogdGhpcy5lZGl0b3IsXG4gICAgICAgICAgICBuYXRpdmVFbGVtZW50OiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWY6IHRoaXMudmlld0NvbnRhaW5lclJlZlxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBsdWdpbnMoKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRQbHVnaW5zID0gaW50ZXJuYWxQbHVnaW5zKCk7XG4gICAgICAgIGNvbnN0IHByZXNldFBsdWdpbnMgPSB0aGlzLnByZXNldENvbmZpZz8ucGx1Z2lucyA/PyBbXTtcbiAgICAgICAgY29uc3QgYXBwbHlQcmVzZXRQbHVnaW5zID0gcHJlc2V0UGx1Z2lucy5maWx0ZXIocHJlc2V0UGx1Z2luID0+ICF0aGlzLnRoZVBsdWdpbnMuc29tZShwbHVnaW4gPT4gcHJlc2V0UGx1Z2luLmtleSA9PT0gcGx1Z2luLmtleSkpO1xuICAgICAgICByZXR1cm4gWy4uLmRlZmF1bHRQbHVnaW5zLCAuLi5hcHBseVByZXNldFBsdWdpbnMsIC4uLnRoaXMudGhlUGx1Z2luc107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplTW9iaWxlTW9kZSgpIHtcbiAgICAgICAgY29uc3QgbW9kZUNvbmZpZyA9IHRoaXMuaW5qZWN0b3IuZ2V0KFRIRV9NT0RFX1RPS0VOKTtcbiAgICAgICAgdGhpcy5pc01vYmlsZU1vZGUgPSBtb2RlQ29uZmlnICYmIG1vZGVDb25maWcubW9kZSA9PT0gVGhlTW9kZS5tb2JpbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b29sYmFyQ2FsY3VsYXRlKCkge1xuICAgICAgICBjb25zdCBnbG9iYWxUb29sYmFyID0gdGhpcy5vcHRpb25zPy50b29sYmFyLmdsb2JhbDtcbiAgICAgICAgY29uc3QgaW5saW5lVG9vbGJhciA9IHRoaXMub3B0aW9ucz8udG9vbGJhcj8uaW5saW5lO1xuICAgICAgICBjb25zdCB7IGdsb2JhbFRvb2xiYXJDbGFzcywgdG9vbGJhckVudGl0eSB9ID0gY3JlYXRlVG9vbGJhcih0aGlzLmVkaXRvciwgZ2xvYmFsVG9vbGJhciwgaW5saW5lVG9vbGJhcik7XG4gICAgICAgIHRoaXMuZ2xvYmFsVG9vbGJhckNsYXNzID0gZ2xvYmFsVG9vbGJhckNsYXNzO1xuICAgICAgICB0aGlzLnRvb2xiYXJFbnRpdHkgPSB0b29sYmFyRW50aXR5O1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUdsb2JhbFRvb2xiYXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnRoZUdsb2JhbFRvb2xiYXIpIHtcbiAgICAgICAgICAgIHRoaXMudGhlR2xvYmFsVG9vbGJhckluc3RhbmNlLmVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICAgICAgdGhpcy50aGVHbG9iYWxUb29sYmFySW5zdGFuY2UudG9vbGJhckl0ZW1zID0gdGhpcy50b29sYmFyRW50aXR5Lmdsb2JhbDtcbiAgICAgICAgICAgIHRoaXMudGhlR2xvYmFsVG9vbGJhckluc3RhbmNlLmNvbnRhaW5lckNsYXNzID0gdGhpcy5nbG9iYWxUb29sYmFyQ2xhc3M7XG4gICAgICAgICAgICB0aGlzLnRoZUdsb2JhbFRvb2xiYXJJbnN0YW5jZS5hbGlnbiA9IHRoaXMub3B0aW9ucz8udG9vbGJhcj8uYWxpZ247XG4gICAgICAgICAgICB0aGlzLnRoZUdsb2JhbFRvb2xiYXJJbnN0YW5jZS5zZXRUb29sYmFyQ2xhc3MoKTtcbiAgICAgICAgICAgIHRoaXMudGhlR2xvYmFsVG9vbGJhckluc3RhbmNlLnJlbmRlclRvb2xiYXJWaWV3KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVRdWlja0luc2VydCgpIHtcbiAgICAgICAgY29uc3QgcXVpY2tJbnNlcnRQbHVnaW4gPSBnZXRQbHVnaW5PcHRpb25zPFF1aWNrSW5zZXJ0UGx1Z2luT3B0aW9ucz4odGhpcy5lZGl0b3IsIFBsdWdpbktleXMucXVpY2tJbnNlcnQpO1xuICAgICAgICBpZiAocXVpY2tJbnNlcnRQbHVnaW4uZGlzYWJsZWQgfHwgcXVpY2tJbnNlcnRQbHVnaW4uZGlzYWJsZWRQbHVzKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVRdWlja0luc2VydFBsdXMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vkb3duJylcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5nbG9iYWxNb3VzZWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVVwbG9hZGluZ1N0YXR1cygpIHtcbiAgICAgICAgdGhpcy50aGVDb250ZXh0U2VydmljZS51cGxvYWRpbmdTdGF0dXMkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZShpc1VwbG9hZGluZyA9PiB7XG4gICAgICAgICAgICBpZiAoaXNVcGxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRoZVVwbG9hZGluZ1N0YXR1cy5lbWl0KHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50aGVDb250ZXh0U2VydmljZS51cGxvYWRpbmdGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aGVVcGxvYWRpbmdTdGF0dXMuZW1pdChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5QXV0b0ZvY3VzKCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucz8uZGlzYWJsZWQgJiYgIXRoaXMub3B0aW9ucz8ucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIGF1dG9Gb2N1cyh0aGlzLmVkaXRvciwgdGhpcy5vcHRpb25zPy5hdXRvRm9jdXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRGVzY2VuZGFudFtdKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhRGVzZXJpYWxpemUodGhpcy5vcHRpb25zPy5tb2RlLCB2YWx1ZSk7XG4gICAgICAgIC8vIGRhdGEtZGVzZXJpYWxpemVcbiAgICAgICAgdGhpcy5lZGl0b3JWYWx1ZSA9IGRhdGE7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLnJlYWRvbmx5ICYmIEFuZ3VsYXJFZGl0b3IuaXNGb2N1c2VkKHRoaXMuZWRpdG9yKSAmJiB0aGlzLmVkaXRvci5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmVkaXRvci5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5kZXNlbGVjdCh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QodGhpcy5lZGl0b3IsIHNlbGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICBzY3JvbGxTZWxlY3Rpb25JbnRvVmlldyA9IChlOiBUaGVFZGl0b3IsIGRvbVJhbmdlOiBET01SYW5nZSkgPT4ge1xuICAgICAgICBjb25zdCB7IG5lZWRlZFNjcm9sbEludG9WaWV3IH0gPSBlLm9wdGlvbnM7XG4gICAgICAgIGlmIChuZWVkZWRTY3JvbGxJbnRvVmlldyAmJiAhbmVlZGVkU2Nyb2xsSW50b1ZpZXcodGhpcy5lZGl0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdFNjcm9sbFNlbGVjdGlvbkludG9WaWV3KGUsIGRvbVJhbmdlKTtcbiAgICB9O1xuXG4gICAgdmFsdWVDaGFuZ2UodmFsdWU6IERlc2NlbmRhbnRbXSkge1xuICAgICAgICB0aGlzLnRoZUdsb2JhbFRvb2xiYXJJbnN0YW5jZT8uc2VsZWN0aW9uQ2hhbmdlKHRoaXMuZWRpdG9yKTtcblxuICAgICAgICBpZiAodGhpcy5lZGl0b3JWYWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRvclZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgLy8gc2VyaWFsaXppbmdcbiAgICAgICAgbGV0IG5ld1ZhbHVlID0gdGhpcy5zZXJpYWxpemluZ1ZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlcmlhbGl6aW5nVmFsdWUodmFsdWU6IERlc2NlbmRhbnRbXSk6IHN0cmluZyB8IERlc2NlbmRhbnRbXSB7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLm9wdGlvbnM/Lm1vZGU7XG4gICAgICAgIGlmIChtb2RlID09PSBUaGVEYXRhTW9kZS5odG1sKSB7XG4gICAgICAgICAgICBsZXQgaHRtbFZhbHVlID0gJyc7XG4gICAgICAgICAgICBjb25zdCBpc0VtcHR5Q29udGVudCA9IFRoZVF1ZXJpZXMuaXNFbXB0eUNvbnRlbnQodmFsdWUpO1xuICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgoZWxlbWVudDogRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50SHRtbCA9IHRoaXMuZWxlbWVudFRvSHRtbC5nZXQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRIdG1sID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VyaWFsaXppbmdcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudEh0bWwgPSBkYXRhU2VyaWFsaXppbmcobW9kZSwgW2VsZW1lbnRdKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGh0bWxWYWx1ZSArPSBlbGVtZW50SHRtbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50VG9IdG1sLnNldChlbGVtZW50LCBlbGVtZW50SHRtbCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaHRtbFZhbHVlICs9IGVsZW1lbnRIdG1sO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaXNFbXB0eUNvbnRlbnQgPyAnJyA6IGh0bWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkVycm9ySGFuZGxlcigpIHtcbiAgICAgICAgdGhpcy5lZGl0b3Iub25FcnJvciA9IChlcnJvckRhdGE6IFNsYXRlRXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRoZU9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRoZU9uRXJyb3IoZXJyb3JEYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JEYXRhLm5hdGl2ZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvckRhdGEubmF0aXZlRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJlbmRlckVsZW1lbnQgPSAoZWxlbWVudDogRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVJbnN0YW5jZS5yZW5kZXJFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmVkaXRvci5yZW5kZXJFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gY29tcG9uZW50ID8gY29tcG9uZW50IDogdGVtcGxhdGU7XG4gICAgfTtcblxuICAgIHJlbmRlckxlYWYgPSAodGV4dDogVGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBsZWFmID0gdGhpcy5lZGl0b3IucmVuZGVyTGVhZih0ZXh0KTtcbiAgICAgICAgcmV0dXJuIGxlYWYgPyBsZWFmIDogbnVsbDtcbiAgICB9O1xuXG4gICAgcmVuZGVyVGV4dCA9ICh0ZXh0OiBUZXh0KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIE1hcmtUeXBlcykge1xuICAgICAgICAgICAgaWYgKHRleHRbTWFya1R5cGVzW2tleV1dKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRoZVRleHRDb21wb25lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQudGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlRGVjb3JhdGUoKSB7XG4gICAgICAgIHRoaXMuZGVjb3JhdGUgPSAobm9kZUVudHJ5OiBOb2RlRW50cnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlY29yYXRpb25zID0gW107XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRoZURlY29yYXRlKSB7XG4gICAgICAgICAgICAgICAgZGVjb3JhdGlvbnMucHVzaCguLi50aGlzLnRoZURlY29yYXRlKHRoaXMuZWRpdG9yLCBub2RlRW50cnkpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGRlY29yYXRpb25zO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9uS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBzaG9ydGN1dHModGhpcy5lZGl0b3IsIGV2ZW50KTtcbiAgICAgICAgdGhpcy50aGVPbkRPTUV2ZW50LmVtaXQoe1xuICAgICAgICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGtleTogZXZlbnQua2V5XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIEFuZ3VsYXJFZGl0b3Iub25LZXlkb3duKHRoaXMuZWRpdG9yLCBldmVudCk7XG5cbiAgICAgICAgaWYgKGlzS2V5SG90a2V5KCdtb2QrcycsIGV2ZW50KSAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRoZU9uU2F2ZS5lbWl0KHRoaXMuZWRpdG9yVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzS2V5SG90a2V5KCdtb2QrYScsIGV2ZW50KSAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RBbGwoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBtb3VzZWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUodGhpcy5lZGl0b3IsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgY29uc3QgcmVjdEVkaXRhYmxlID0gZWRpdGFibGVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBhYnNvbHV0ZUVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGV2ZW50LngsIGV2ZW50LnkpO1xuICAgICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudC5pc0VxdWFsTm9kZShhYnNvbHV0ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBibG9ja0NhcmRFbGVtZW50ID0gYWJzb2x1dGVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zbGF0ZS1ibG9jay1jYXJkJyk7XG4gICAgICAgICAgICBpZiAoIWJsb2NrQ2FyZEVsZW1lbnQpIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgeyBwYWRkaW5nUmlnaHQgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVkaXRhYmxlRWxlbWVudCwgbnVsbCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdSaWdodFBpeGVscyA9IGNvZXJjZVBpeGVsc0Zyb21Dc3NWYWx1ZShwYWRkaW5nUmlnaHQpO1xuICAgICAgICBjb25zdCBmYWtlUmlnaHRYID0gcmVjdEVkaXRhYmxlLnJpZ2h0IC0gcGFkZGluZ1JpZ2h0UGl4ZWxzIC0gNTA7XG4gICAgICAgIGxldCByZWxhdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGZha2VSaWdodFgsIGV2ZW50LnkpO1xuICAgICAgICBsZXQgcmVsYXRpdmVCbG9ja0NhcmRFbGVtZW50ID0gcmVsYXRpdmVFbGVtZW50LmNsb3Nlc3QoJy5zbGF0ZS1ibG9jay1jYXJkJyk7XG4gICAgICAgIGlmIChyZWxhdGl2ZUJsb2NrQ2FyZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclggPSByZWN0RWRpdGFibGUueCArIHJlY3RFZGl0YWJsZS53aWR0aCAvIDI7XG4gICAgICAgICAgICBjb25zdCBibG9ja0NhcmRFbnRyeSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZUNhcmRFbnRyeSh0aGlzLmVkaXRvciwgcmVsYXRpdmVCbG9ja0NhcmRFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgICAgICAgIGlmIChibG9ja0NhcmRFbnRyeSAmJiB0aGlzLmVkaXRvci5pc0Jsb2NrQ2FyZChibG9ja0NhcmRFbnRyeVswXSkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIEFuZ3VsYXJFZGl0b3IubW92ZUJsb2NrQ2FyZCh0aGlzLmVkaXRvciwgYmxvY2tDYXJkRW50cnlbMF0sIHsgZGlyZWN0aW9uOiBldmVudC54IDwgY2VudGVyWCA/ICdsZWZ0JyA6ICdyaWdodCcgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVTZWxlY3RBbGwoKSB7XG4gICAgICAgIGxldCBub2RlO1xuICAgICAgICBpZiAoIXRoaXMuZWRpdG9yLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgVGhlVHJhbnNmb3Jtcy5zZXRFbmRTZWxlY3Rpb24odGhpcy5lZGl0b3IpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IFJhbmdlLmVkZ2VzKHRoaXMuZWRpdG9yLnNlbGVjdGlvbik7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblJhbmdlID0gRWRpdG9yLnJhbmdlKHRoaXMuZWRpdG9yLCBzdGFydCwgZW5kKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyQmxvY2tzID0gVGhlUXVlcmllcy5nZXRDb250YWluZXJCbG9ja3ModGhpcy5lZGl0b3IpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRhaW5lckJsb2Nrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgW25vZGVdID0gVGhlUXVlcmllcy5nZXROb2Rlc0J5VHlwZSh0aGlzLmVkaXRvciwgY29udGFpbmVyQmxvY2tzW2ldKTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgWywgcGF0aF0gPSBub2RlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU3RhcnRQYXJlbnQgPSBQYXRoLmVxdWFscyhwYXRoLCBzdGFydC5wYXRoLnNsaWNlKDAsIHBhdGgubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNFbmRQYXJlbnQgPSBQYXRoLmVxdWFscyhwYXRoLCBlbmQucGF0aC5zbGljZSgwLCBwYXRoLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgIGlmIChpc1N0YXJ0UGFyZW50ICYmIGlzRW5kUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVSYW5nZSA9IEVkaXRvci5yYW5nZSh0aGlzLmVkaXRvciwgcGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghUmFuZ2UuZXF1YWxzKG5vZGVSYW5nZSwgc2VsZWN0aW9uUmFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdCh0aGlzLmVkaXRvciwgbm9kZVJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KHRoaXMuZWRpdG9yLCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG9uQ2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgQW5ndWxhckVkaXRvci5vbkNsaWNrKHRoaXMuZWRpdG9yLCBldmVudCk7XG4gICAgICAgIHRoaXMudGhlT25ET01FdmVudC5lbWl0KHtcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50OiBldmVudFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgb25TbGFQYXN0ZSA9IChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy50aGVPbkRPTUV2ZW50LmVtaXQoe1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0VGV4dEFuZEpTT04oZXZlbnQuY2xpcGJvYXJkRGF0YSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYXRpdmVFdmVudDogZXZlbnRcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIG9uU2xhQmVmb3JlSW5wdXQgPSAoXG4gICAgICAgIGV2ZW50OiBFdmVudCAmIHtcbiAgICAgICAgICAgIGlucHV0VHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgZGF0YTogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyIHwgbnVsbDtcbiAgICAgICAgfVxuICAgICkgPT4ge1xuICAgICAgICBsZXQgZGF0YSA9IHtcbiAgICAgICAgICAgIGlucHV0VHlwZTogZXZlbnQuaW5wdXRUeXBlLFxuICAgICAgICAgICAgdGV4dDogKGV2ZW50LmRhdGEgfHwgZXZlbnQuZGF0YVRyYW5zZmVyKSBhcyBzdHJpbmdcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGV2ZW50LmlucHV0VHlwZSA9PT0gJ2luc2VydEZyb21QYXN0ZScpIHtcbiAgICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldFRleHRBbmRKU09OKChldmVudC5kYXRhIHx8IGV2ZW50LmRhdGFUcmFuc2ZlcikgYXMgRGF0YVRyYW5zZmVyKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoZU9uRE9NRXZlbnQuZW1pdCh7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBvblNsYUJsdXIgPSAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy50aGVPbkRPTUV2ZW50LmVtaXQoe1xuICAgICAgICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBvblNsYUZvY3VzID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLnRoZU9uRE9NRXZlbnQuZW1pdCh7XG4gICAgICAgICAgICBuYXRpdmVFdmVudDogZXZlbnRcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIG9uU2xhQ3V0ID0gKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLnRoZU9uRE9NRXZlbnQuZW1pdCh7XG4gICAgICAgICAgICBuYXRpdmVFdmVudDogZXZlbnRcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIG9uU2xhQ29weSA9IChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHt9O1xuXG4gICAgb25TbGFDb21wb3NpdGlvblN0YXJ0ID0gKGV2ZW50OiBDb21wb3NpdGlvbkV2ZW50KSA9PiB7fTtcblxuICAgIG9uU2xhQ29tcG9zaXRpb25FbmQgPSAoZXZlbnQ6IENvbXBvc2l0aW9uRXZlbnQpID0+IHt9O1xuXG4gICAgb25TbGFEcmFnU3RhcnQgPSAoZXZlbnQ6IERyYWdFdmVudCkgPT4ge307XG5cbiAgICBvblNsYURyYWdPdmVyID0gKGV2ZW50OiBEcmFnRXZlbnQpID0+IHt9O1xuXG4gICAgb25Ecm9wID0gKGV2ZW50OiBEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy50aGVPbkRPTUV2ZW50LmVtaXQoe1xuICAgICAgICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGdldFRleHRBbmRKU09OKGRhdGE6IERhdGFUcmFuc2Zlcikge1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IGRhdGEuZ2V0RGF0YShgYXBwbGljYXRpb24vJHtDTElQQk9BUkRfRk9STUFUX0tFWX1gKTtcbiAgICAgICAgbGV0IGpzb24gPSBbXTtcbiAgICAgICAgaWYgKGZyYWdtZW50KSB7XG4gICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQod2luZG93LmF0b2IoZnJhZ21lbnQpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGV4dCA9IGRhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAganNvbixcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCI8dGhlLXRvb2xiYXJcbiAgKm5nSWY9XCIhb3B0aW9ucz8ucmVhZG9ubHkgJiYgIXRoZUdsb2JhbFRvb2xiYXIgJiYgIWlzTW9iaWxlTW9kZVwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAndGhlLXRvb2xiYXItZGlzYWJsZWQnOiBvcHRpb25zPy5kaXNhYmxlZFxuICB9XCJcbiAgI2dsb2JhbFRvb2xiYXJcbiAgW2VkaXRvcl09XCJlZGl0b3JcIlxuICBbdG9vbGJhckl0ZW1zXT1cInRvb2xiYXJFbnRpdHkuZ2xvYmFsXCJcbiAgW2NvbnRhaW5lckNsYXNzXT1cImdsb2JhbFRvb2xiYXJDbGFzc1wiXG4gIFthbGlnbl09XCJvcHRpb25zPy50b29sYmFyPy5hbGlnblwiXG4+PC90aGUtdG9vbGJhcj5cblxuPGRpdlxuICAjdGhlRWRpdGFibGVDb250YWluZXJcbiAgY2xhc3M9XCJ0aGUtZWRpdGFibGUtY29udGFpbmVyXCJcbiAgdGh5SW1hZ2VHcm91cFxuICBbbmdDbGFzc109XCJ7XG4gICAgJ3RoZS1lZGl0b3ItZGlzYWJsZWQnOiBvcHRpb25zPy5kaXNhYmxlZCxcbiAgICAnbWF4LWhlaWdodCc6IG1heEhlaWdodFxuICB9XCJcbiAgW25nU3R5bGVdPVwieyAnbWF4LWhlaWdodCc6IG1heEhlaWdodCB9XCJcbj5cbiAgPHNsYXRlLWVkaXRhYmxlXG4gICAgY2xhc3M9XCJ0aGUtZWRpdG9yLXR5cG9cIlxuICAgIFtlZGl0b3JdPVwiZWRpdG9yXCJcbiAgICBbbmdNb2RlbF09XCJlZGl0b3JWYWx1ZVwiXG4gICAgW3JlbmRlckVsZW1lbnRdPVwicmVuZGVyRWxlbWVudFwiXG4gICAgW3JlbmRlclRleHRdPVwicmVuZGVyVGV4dFwiXG4gICAgW3JlbmRlckxlYWZdPVwicmVuZGVyTGVhZlwiXG4gICAgW2lzU3RyaWN0RGVjb3JhdGVdPVwiZmFsc2VcIlxuICAgIFtkZWNvcmF0ZV09XCJkZWNvcmF0ZVwiXG4gICAgW3BsYWNlaG9sZGVyXT1cIm9wdGlvbnM/LnBsYWNlaG9sZGVyXCJcbiAgICBbcGxhY2Vob2xkZXJEZWNvcmF0ZV09XCJvcHRpb25zPy5wbGFjZWhvbGRlckRlY29yYXRlID8gb3B0aW9ucz8ucGxhY2Vob2xkZXJEZWNvcmF0ZSA6IG51bGxcIlxuICAgIFtyZWFkb25seV09XCJvcHRpb25zPy5yZWFkb25seSB8fCBvcHRpb25zPy5kaXNhYmxlZFwiXG4gICAgW2tleWRvd25dPVwib25LZXlEb3duXCJcbiAgICBbY2xpY2tdPVwib25DbGlja1wiXG4gICAgW3Bhc3RlXT1cIm9uU2xhUGFzdGVcIlxuICAgIFtibHVyXT1cIm9uU2xhQmx1clwiXG4gICAgW2ZvY3VzXT1cIm9uU2xhRm9jdXNcIlxuICAgIFtjb3B5XT1cIm9uU2xhQ29weVwiXG4gICAgW2N1dF09XCJvblNsYUN1dFwiXG4gICAgW2JlZm9yZUlucHV0XT1cIm9uU2xhQmVmb3JlSW5wdXRcIlxuICAgIFtjb21wb3NpdGlvblN0YXJ0XT1cIm9uU2xhQ29tcG9zaXRpb25TdGFydFwiXG4gICAgW2NvbXBvc2l0aW9uRW5kXT1cIm9uU2xhQ29tcG9zaXRpb25FbmRcIlxuICAgIFtkcmFnU3RhcnRdPVwib25TbGFEcmFnU3RhcnRcIlxuICAgIFtkcmFnT3Zlcl09XCJvblNsYURyYWdPdmVyXCJcbiAgICBbZHJvcF09XCJvbkRyb3BcIlxuICAgIFtzY3JvbGxTZWxlY3Rpb25JbnRvVmlld109XCJzY3JvbGxTZWxlY3Rpb25JbnRvVmlld1wiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKG1vdXNlZG93bik9XCJtb3VzZWRvd24oJGV2ZW50KVwiXG4gID48L3NsYXRlLWVkaXRhYmxlPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNNb2JpbGVNb2RlXCI+XG4gICAgPHRoZS1pbmxpbmUtdG9vbGJhclxuICAgICAgKm5nSWY9XCIhb3B0aW9ucz8ucmVhZG9ubHkgJiYgb3B0aW9ucz8uaW5saW5lVG9vbGJhclZpc2libGVcIlxuICAgICAgW2VkaXRvcl09XCJlZGl0b3JcIlxuICAgICAgW3Rvb2xiYXJJdGVtc109XCJ0b29sYmFyRW50aXR5LmlubGluZVwiXG4gICAgPjwvdGhlLWlubGluZS10b29sYmFyPlxuICAgIDxkaXYgKm5nSWY9XCIhb3B0aW9ucz8ucmVhZG9ubHlcIiB0aGVRdWlja0luc2VydCBbZWRpdG9yXT1cImVkaXRvclwiIFtpc1Zpc2libGVdPVwidmlzaWJsZVF1aWNrSW5zZXJ0UGx1c1wiPjwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8dGhlLXRlbXBsYXRlICN0ZW1wbGF0ZUluc3RhbmNlPjwvdGhlLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { Transforms } from 'slate';
|
|
2
|
-
import {
|
|
3
|
-
import { TableEditor } from '../table/table.editor';
|
|
4
|
-
import { TheContextService } from '../../services/context.service';
|
|
5
|
-
import * as TheQueries from '../../queries';
|
|
2
|
+
import { ALIGN_BLOCK_TYPES, Alignment, ElementKinds } from '../../constants';
|
|
6
3
|
import { PluginKeys } from '../../interfaces';
|
|
4
|
+
import * as TheQueries from '../../queries';
|
|
5
|
+
import { TableEditor } from '../table/table.editor';
|
|
7
6
|
export const AlignEditor = {
|
|
8
7
|
isActive(editor, alignment) {
|
|
9
8
|
if (!editor?.selection) {
|
|
@@ -23,8 +22,7 @@ export const AlignEditor = {
|
|
|
23
22
|
return false;
|
|
24
23
|
},
|
|
25
24
|
isDisabled(editor) {
|
|
26
|
-
const
|
|
27
|
-
const { theOptions: { richMedia } } = contextService.getOptions();
|
|
25
|
+
const { richMedia } = editor.options;
|
|
28
26
|
return TheQueries.getToolbarItemDisabled(editor, PluginKeys.align, richMedia ? [ElementKinds.image] : []);
|
|
29
27
|
},
|
|
30
28
|
setAlign(editor, alignment) {
|
|
@@ -40,4 +38,4 @@ export const AlignEditor = {
|
|
|
40
38
|
});
|
|
41
39
|
}
|
|
42
40
|
};
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpZ24uZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvYWxpZ24vYWxpZ24uZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxVQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUc7SUFDdkIsUUFBUSxDQUFDLE1BQWMsRUFBRSxTQUFvQjtRQUN6QyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRTtZQUNwQixPQUFPO1NBQ1Y7UUFFRCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELElBQUksWUFBWSxFQUFFO1lBQ2QsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLFlBQVksQ0FBQztZQUMvQixJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUN4QyxPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELFVBQVUsQ0FBQyxNQUFjO1FBQ3JCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3JDLE9BQU8sVUFBVSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFDRCxRQUFRLENBQUMsTUFBYyxFQUFFLFNBQW9CO1FBQ3pDLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDekMsT0FBTztTQUNWO1FBQ0QsTUFBTSxLQUFLLEdBQUc7WUFDVixLQUFLLEVBQUUsU0FBUyxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUN6RCxDQUFDO1FBQ0YsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBQy9CLEVBQUUsRUFBRSxNQUFNLENBQUMsU0FBUztZQUNwQixLQUFLLEVBQUUsQ0FBQyxDQUFVLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQzVELENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWRpdG9yLCBFbGVtZW50LCBUcmFuc2Zvcm1zIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQUxJR05fQkxPQ0tfVFlQRVMsIEFsaWdubWVudCwgRWxlbWVudEtpbmRzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBsdWdpbktleXMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCAqIGFzIFRoZVF1ZXJpZXMgZnJvbSAnLi4vLi4vcXVlcmllcyc7XG5pbXBvcnQgeyBUYWJsZUVkaXRvciB9IGZyb20gJy4uL3RhYmxlL3RhYmxlLmVkaXRvcic7XG5cbmV4cG9ydCBjb25zdCBBbGlnbkVkaXRvciA9IHtcbiAgICBpc0FjdGl2ZShlZGl0b3I6IEVkaXRvciwgYWxpZ25tZW50OiBBbGlnbm1lbnQpIHtcbiAgICAgICAgaWYgKCFlZGl0b3I/LnNlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmxvY2tFbGVtZW50ID0gVGhlUXVlcmllcy5hbmNob3JCbG9jayhlZGl0b3IpO1xuICAgICAgICBpZiAoYmxvY2tFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IGFsaWduIH0gPSBibG9ja0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIWFsaWduICYmIGFsaWdubWVudCA9PT0gQWxpZ25tZW50LmxlZnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhbGlnbiA9PT0gYWxpZ25tZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGlnbm1lbnQgPT09IEFsaWdubWVudC5sZWZ0KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBpc0Rpc2FibGVkKGVkaXRvcjogRWRpdG9yKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgcmljaE1lZGlhIH0gPSBlZGl0b3Iub3B0aW9ucztcbiAgICAgICAgcmV0dXJuIFRoZVF1ZXJpZXMuZ2V0VG9vbGJhckl0ZW1EaXNhYmxlZChlZGl0b3IsIFBsdWdpbktleXMuYWxpZ24sIHJpY2hNZWRpYSA/IFtFbGVtZW50S2luZHMuaW1hZ2VdIDogW10pO1xuICAgIH0sXG4gICAgc2V0QWxpZ24oZWRpdG9yOiBFZGl0b3IsIGFsaWdubWVudDogQWxpZ25tZW50KSB7XG4gICAgICAgIGlmIChUYWJsZUVkaXRvci5zZXRBbGlnbihlZGl0b3IsIGFsaWdubWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgICAgIGFsaWduOiBhbGlnbm1lbnQgIT09IEFsaWdubWVudC5sZWZ0ID8gYWxpZ25tZW50IDogbnVsbFxuICAgICAgICB9O1xuICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGVzKGVkaXRvciwgcHJvcHMsIHtcbiAgICAgICAgICAgIGF0OiBlZGl0b3Iuc2VsZWN0aW9uLFxuICAgICAgICAgICAgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBBTElHTl9CTE9DS19UWVBFUy5pbmNsdWRlcyhuLnR5cGUpXG4gICAgICAgIH0pO1xuICAgIH1cbn07XG4iXX0=
|