@firestitch/content 12.1.0 → 12.2.1
Sign up to get free protection for your applications and to get access to all the features.
- package/app/interfaces/content-config.d.ts +3 -3
- package/app/modules/content-pages/components/content-page/content-page.component.d.ts +1 -1
- package/app/modules/content-pages/components/content-pages/content-pages.component.d.ts +2 -3
- package/app/modules/editor/components/editor/editor.component.d.ts +26 -7
- package/bundles/firestitch-content.umd.js +296 -210
- package/bundles/firestitch-content.umd.js.map +1 -1
- package/esm2015/app/interfaces/content-config.js +1 -1
- package/esm2015/app/modules/content-layouts/components/content-layout/content-layout.component.js +1 -1
- package/esm2015/app/modules/content-pages/components/content-page/content-page.component.js +6 -5
- package/esm2015/app/modules/content-pages/components/content-pages/content-pages.component.js +28 -28
- package/esm2015/app/modules/editor/components/editor/editor.component.js +114 -28
- package/fesm2015/firestitch-content.js +215 -131
- package/fesm2015/firestitch-content.js.map +1 -1
- package/package.json +1 -1
@@ -1,55 +1,126 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Inject, ViewChild, } from '@angular/core';
|
2
|
+
import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';
|
3
|
+
import { FsFormDirective } from '@firestitch/form';
|
3
4
|
import { FsMessage } from '@firestitch/message';
|
4
5
|
import { FsTextEditorComponent } from '@firestitch/text-editor';
|
5
|
-
import { Subject } from 'rxjs';
|
6
|
-
import { tap } from 'rxjs/operators';
|
6
|
+
import { Subject, fromEvent } from 'rxjs';
|
7
|
+
import { finalize, take, takeUntil, tap } from 'rxjs/operators';
|
8
|
+
import { ContentPageComponent } from '../../../content-pages/components/content-page';
|
7
9
|
import * as i0 from "@angular/core";
|
8
10
|
import * as i1 from "@angular/material/dialog";
|
9
11
|
import * as i2 from "@firestitch/message";
|
10
12
|
import * as i3 from "@firestitch/dialog";
|
11
|
-
import * as i4 from "@angular/material/button
|
12
|
-
import * as i5 from "@
|
13
|
-
import * as i6 from "@firestitch/
|
14
|
-
import * as i7 from "@firestitch/
|
15
|
-
import * as i8 from "@
|
16
|
-
import * as i9 from "@angular/
|
13
|
+
import * as i4 from "@angular/material/button";
|
14
|
+
import * as i5 from "@angular/material/icon";
|
15
|
+
import * as i6 from "@firestitch/label";
|
16
|
+
import * as i7 from "@firestitch/text-editor";
|
17
|
+
import * as i8 from "@firestitch/form";
|
18
|
+
import * as i9 from "@angular/material/button-toggle";
|
19
|
+
import * as i10 from "@angular/forms";
|
20
|
+
import * as i11 from "@angular/common";
|
17
21
|
export class EditorComponent {
|
18
|
-
constructor(_data, _dialogRef, _message) {
|
22
|
+
constructor(_data, _dialogRef, _dialog, _message, _cdRef) {
|
19
23
|
this._data = _data;
|
20
24
|
this._dialogRef = _dialogRef;
|
25
|
+
this._dialog = _dialog;
|
21
26
|
this._message = _message;
|
22
|
-
this.
|
23
|
-
this.
|
27
|
+
this._cdRef = _cdRef;
|
28
|
+
this.resizing = false;
|
24
29
|
this.editors = { content: true, styles: true };
|
25
30
|
this._destroy$ = new Subject();
|
26
31
|
this.save = () => {
|
27
|
-
return this.
|
28
|
-
.
|
32
|
+
return this._config.saveContentPage({
|
33
|
+
id: this.contentPage.id,
|
34
|
+
styles: this.contentPage.styles,
|
35
|
+
content: this.contentPage.content,
|
36
|
+
})
|
37
|
+
.pipe(tap((contentPage) => {
|
38
|
+
this.contentPage = Object.assign(Object.assign({}, this.contentPage), contentPage);
|
39
|
+
this._cdRef.markForCheck();
|
29
40
|
this._message.success('Saved Changes');
|
30
41
|
}));
|
31
42
|
};
|
32
43
|
}
|
33
44
|
ngOnInit() {
|
34
|
-
this.
|
35
|
-
this.
|
36
|
-
this.
|
45
|
+
this.contentPage = this._data.contentPage;
|
46
|
+
this._config = this._data.config;
|
47
|
+
this._initSeparator();
|
37
48
|
}
|
38
49
|
editorToggleChange(event) {
|
39
50
|
this.editors[event.value] = !this.editors[event.value];
|
51
|
+
this.updateEditorLayouts();
|
52
|
+
}
|
53
|
+
updateEditorLayouts() {
|
40
54
|
setTimeout(() => {
|
41
|
-
this.
|
42
|
-
|
43
|
-
}
|
44
|
-
|
55
|
+
if (this.editors.content) {
|
56
|
+
this.contentEditor.updateLayout();
|
57
|
+
}
|
58
|
+
if (this.editors.styles) {
|
59
|
+
this.styleEditor.updateLayout();
|
60
|
+
}
|
61
|
+
});
|
45
62
|
}
|
46
63
|
ngOnDestroy() {
|
47
64
|
this._destroy$.next();
|
48
65
|
this._destroy$.complete();
|
49
66
|
}
|
67
|
+
stylesChanged() {
|
68
|
+
this.form.triggerSubmit();
|
69
|
+
}
|
70
|
+
contentChanged() {
|
71
|
+
this.form.triggerSubmit();
|
72
|
+
}
|
73
|
+
openSettings() {
|
74
|
+
this._dialog.open(ContentPageComponent, {
|
75
|
+
data: {
|
76
|
+
contentPage: this.contentPage,
|
77
|
+
},
|
78
|
+
})
|
79
|
+
.afterClosed()
|
80
|
+
.pipe(takeUntil(this._destroy$))
|
81
|
+
.subscribe((contentPage) => {
|
82
|
+
this.contentPage = Object.assign(Object.assign({}, this.contentPage), contentPage);
|
83
|
+
this._cdRef.markForCheck();
|
84
|
+
});
|
85
|
+
}
|
86
|
+
_initSeparator() {
|
87
|
+
fromEvent(this.separator.nativeElement, 'mousedown')
|
88
|
+
.pipe(takeUntil(this._destroy$))
|
89
|
+
.subscribe((e) => {
|
90
|
+
this._moveSeparator(e);
|
91
|
+
});
|
92
|
+
}
|
93
|
+
_moveSeparator(separatorEvent) {
|
94
|
+
let mouseDown = {
|
95
|
+
clientX: separatorEvent.clientX,
|
96
|
+
clientY: separatorEvent.clientY,
|
97
|
+
offsetLeft: Number(this.separator.nativeElement.offsetLeft),
|
98
|
+
offsetTop: Number(this.separator.nativeElement.offsetTop),
|
99
|
+
firstWidth: Number(this.contentContainer.nativeElement.offsetWidth),
|
100
|
+
secondWidth: Number(this.styleContainer.nativeElement.offsetWidth),
|
101
|
+
};
|
102
|
+
this.resizing = true;
|
103
|
+
this._cdRef.markForCheck();
|
104
|
+
fromEvent(document, 'mousemove')
|
105
|
+
.pipe(finalize(() => {
|
106
|
+
mouseDown = null;
|
107
|
+
this.resizing = false;
|
108
|
+
this._cdRef.markForCheck();
|
109
|
+
this.updateEditorLayouts();
|
110
|
+
}), takeUntil(fromEvent(this.separator.nativeElement, 'mouseup')
|
111
|
+
.pipe(take(1), takeUntil(this._destroy$))), takeUntil(this._destroy$))
|
112
|
+
.subscribe((e) => {
|
113
|
+
const delta = { x: e.clientX - mouseDown.clientX,
|
114
|
+
y: e.clientY - mouseDown.clientY };
|
115
|
+
delta.x = Math.min(Math.max(delta.x, -mouseDown.firstWidth), mouseDown.secondWidth);
|
116
|
+
this.separator.nativeElement.style.left = `${mouseDown.offsetLeft + delta.x}px`;
|
117
|
+
this.contentContainer.nativeElement.style.width = `${mouseDown.firstWidth + delta.x}px`;
|
118
|
+
this.styleContainer.nativeElement.style.width = `${mouseDown.secondWidth - delta.x}px`;
|
119
|
+
});
|
120
|
+
}
|
50
121
|
}
|
51
|
-
EditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EditorComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i2.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
|
52
|
-
EditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: EditorComponent, selector: "ng-component", viewQueries: [{ propertyName: "
|
122
|
+
EditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EditorComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i1.MatDialog }, { token: i2.FsMessage }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
123
|
+
EditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: EditorComponent, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: FsFormDirective, descendants: true }, { propertyName: "styleEditor", first: true, predicate: ["styleEditor"], descendants: true }, { propertyName: "contentEditor", first: true, predicate: ["contentEditor"], descendants: true }, { propertyName: "separator", first: true, predicate: ["separator"], descendants: true, read: ElementRef, static: true }, { propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, static: true }, { propertyName: "styleContainer", first: true, predicate: ["styleContainer"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<form fsForm [submit]=\"save\">\n <fs-dialog>\n <h1 mat-dialog-title>\n <div class=\"title-container\">\n <div class=\"title\">\n Page\n <div class=\"small\">{{contentPage.name}}</div> \n </div>\n <a\n (click)=\"openSettings()\"\n mat-icon-button>\n <mat-icon>settings</mat-icon>\n </a> \n </div>\n </h1>\n <div mat-dialog-content>\n <div class=\"container\">\n <div class=\"editors\" [ngClass]=\"{ resizing: resizing, 'separator-enabled': editors.styles && editors.content }\">\n <div #contentContainer class=\"editor editor-content\" [ngClass]=\"{ 'content-enabled': editors.content }\">\n <fs-label>Content</fs-label>\n <div class=\"editor-container\">\n <fs-text-editor \n #contentEditor\n [(ngModel)]=\"contentPage.content\" \n (blur)=\"contentChanged()\"\n name=\"content\"\n [config]=\"{ tabSize: 2, language: 'html' }\">\n </fs-text-editor> \n </div>\n </div>\n <div \n #separator\n class=\"separator\">\n <mat-icon>drag_indicator</mat-icon>\n </div>\n <div \n #styleContainer \n class=\"editor editor-styles\" \n [ngClass]=\"{ 'styles-enabled': editors.styles }\"\n [style.width]=\"'600px'\">\n <fs-label>Styles</fs-label>\n <div class=\"editor-container\">\n <fs-text-editor \n #styleEditor\n [(ngModel)]=\"contentPage.styles\" \n (blur)=\"stylesChanged()\"\n name=\"styles\"\n [config]=\"{ tabSize: 2, language: 'scss' }\">\n </fs-text-editor> \n </div>\n </div> \n </div>\n </div>\n </div>\n\n <div mat-dialog-actions>\n <fs-form-dialog-actions\n [save]=\"false\"\n [done]=\"true\">\n </fs-form-dialog-actions>\n <div class=\"toggles\">\n <mat-button-toggle-group multiple>\n <mat-button-toggle value=\"content\" [checked]=\"editors.content\" (change)=\"editorToggleChange($event)\">Content</mat-button-toggle>\n <mat-button-toggle value=\"styles\" [checked]=\"editors.styles\" (change)=\"editorToggleChange($event)\">Styles</mat-button-toggle>\n </mat-button-toggle-group> \n </div>\n </div>\n </fs-dialog>\n</form>\n\n", styles: ["form{display:block;height:100%}form fs-dialog{display:flex;flex-direction:column;height:100%}form ::ng-deep .mat-dialog-content{max-height:none;flex:1}.mat-dialog-actions fs-form-dialog-actions{width:auto}.mat-dialog-actions .toggles{display:flex;justify-content:flex-end;justify-self:baseline;flex:1}.container{height:100%;display:flex;flex-direction:column}.editors{width:5000px;max-width:100%;height:100%;display:flex;min-height:0}.editors:not(.separator-enabled) .separator{display:none}.editors:not(.separator-enabled) .editor{width:100%!important}.editors .separator{display:flex;align-items:center;justify-content:center;cursor:col-resize;background-color:#fff;width:40px;height:100%;-webkit-user-select:none;user-select:none;flex-shrink:0}.editors .editor{height:100%;display:flex;min-width:0;width:100%;flex-direction:column}.editors .editor.editor-styles:not(.styles-enabled),.editors .editor.editor-content:not(.content-enabled){display:none}.editors .editor .editor-container{height:100%;overflow:hidden;background:#1E1E1E;border-radius:5px}.editors .editor .editor-container fs-text-editor{display:block}.editors .editor+.editor{margin-left:20px}.editors .editor fs-label{background-color:#fff;padding-bottom:5px}.title-container{display:flex;align-items:center}.title-container .title{flex:1}.title-container .title .small{line-height:normal}\n"], components: [{ type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileActionPlacement", "mobileWidth", "mode"] }, { type: i4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.FsLabelComponent, selector: "fs-label" }, { type: i7.FsTextEditorComponent, selector: "fs-text-editor", inputs: ["config", "scrollable"], outputs: ["init", "blur"] }, { type: i8.FsFormDialogActionsComponent, selector: "fs-form-dialog-actions", inputs: ["save", "create", "close", "done", "closeData", "name"] }, { type: i9.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }], directives: [{ type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i9.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
53
124
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EditorComponent, decorators: [{
|
54
125
|
type: Component,
|
55
126
|
args: [{
|
@@ -60,8 +131,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
60
131
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
61
132
|
type: Inject,
|
62
133
|
args: [MAT_DIALOG_DATA]
|
63
|
-
}] }, { type: i1.MatDialogRef }, { type: i2.FsMessage }]; }, propDecorators: {
|
64
|
-
type:
|
65
|
-
args: [
|
134
|
+
}] }, { type: i1.MatDialogRef }, { type: i1.MatDialog }, { type: i2.FsMessage }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { form: [{
|
135
|
+
type: ViewChild,
|
136
|
+
args: [FsFormDirective]
|
137
|
+
}], styleEditor: [{
|
138
|
+
type: ViewChild,
|
139
|
+
args: ['styleEditor']
|
140
|
+
}], contentEditor: [{
|
141
|
+
type: ViewChild,
|
142
|
+
args: ['contentEditor']
|
143
|
+
}], separator: [{
|
144
|
+
type: ViewChild,
|
145
|
+
args: ['separator', { static: true, read: ElementRef }]
|
146
|
+
}], contentContainer: [{
|
147
|
+
type: ViewChild,
|
148
|
+
args: ['contentContainer', { static: true, read: ElementRef }]
|
149
|
+
}], styleContainer: [{
|
150
|
+
type: ViewChild,
|
151
|
+
args: ['styleContainer', { static: true, read: ElementRef }]
|
66
152
|
}] } });
|
67
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUdOLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7OztBQVFyQyxNQUFNLE9BQU8sZUFBZTtJQVcxQixZQUNtQyxLQUFVLEVBQ25DLFVBQXlDLEVBQ3pDLFFBQW1CO1FBRk0sVUFBSyxHQUFMLEtBQUssQ0FBSztRQUNuQyxlQUFVLEdBQVYsVUFBVSxDQUErQjtRQUN6QyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBVHRCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsWUFBTyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFekMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUE0QmpDLFNBQUksR0FBRyxHQUFHLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQ25FLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDTixDQUFDLENBQUM7SUE3QkMsQ0FBQztJQUVHLFFBQVE7UUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxLQUE0QjtRQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUN0QyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzs7NkdBbkNVLGVBQWUsa0JBWWhCLGVBQWU7aUdBWmQsZUFBZSxvRkFFWixxQkFBcUIsZ0RDM0JyQyx5akRBMENBOzRGRGpCYSxlQUFlO2tCQUwzQixTQUFTO21CQUFDO29CQUNULFdBQVcsRUFBRSx5QkFBeUI7b0JBQ3RDLFNBQVMsRUFBRSxDQUFDLHlCQUF5QixDQUFDO29CQUN0QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OzBCQWFJLE1BQU07MkJBQUMsZUFBZTsrRkFUbEIsV0FBVztzQkFEakIsWUFBWTt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEluamVjdCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZUNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xuXG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzVGV4dEVkaXRvckNvbXBvbmVudCB9IGZyb20gJ0BmaXJlc3RpdGNoL3RleHQtZWRpdG9yJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQFZpZXdDaGlsZHJlbihGc1RleHRFZGl0b3JDb21wb25lbnQpXG4gIHB1YmxpYyB0ZXh0RWRpdG9yczogUXVlcnlMaXN0PEZzVGV4dEVkaXRvckNvbXBvbmVudD47XG5cbiAgcHVibGljIHN0eWxlcyA9IG51bGw7XG4gIHB1YmxpYyBjb250ZW50ID0gbnVsbDtcbiAgcHVibGljIGVkaXRvcnMgPSB7IGNvbnRlbnQ6IHRydWUsIHN0eWxlczogdHJ1ZSB9O1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSBfZGF0YTogYW55LFxuICAgIHByaXZhdGUgX2RpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEVkaXRvckNvbXBvbmVudD4sXG4gICAgcHJpdmF0ZSBfbWVzc2FnZTogRnNNZXNzYWdlLFxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2RpYWxvZ1JlZi51cGRhdGVTaXplKCcxMDAlJywnMTAwJScpO1xuICAgIHRoaXMuY29udGVudCA9IHRoaXMuX2RhdGEuY29udGVudDtcbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuX2RhdGEuc3R5bGVzO1xuICB9XG5cbiAgcHVibGljIGVkaXRvclRvZ2dsZUNoYW5nZShldmVudDogTWF0QnV0dG9uVG9nZ2xlQ2hhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3JzW2V2ZW50LnZhbHVlXSA9ICF0aGlzLmVkaXRvcnNbZXZlbnQudmFsdWVdO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50ZXh0RWRpdG9ycy5mb3JFYWNoKCh0ZXh0RWRpdG9yKSA9PiB7XG4gICAgICAgIHRleHRFZGl0b3IudXBkYXRlTGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIHNhdmUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuc2F2ZSh7IGNvbnRlbnQ6IHRoaXMuY29udGVudCwgc3R5bGVzOiB0aGlzLnN0eWxlcyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTYXZlZCBDaGFuZ2VzJyk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfTtcblxufVxuIiwiPGZvcm0gZnNGb3JtIFtzdWJtaXRdPVwic2F2ZVwiPlxuICA8ZnMtZGlhbG9nPlxuICAgIDxoMSBtYXQtZGlhbG9nLXRpdGxlPkRlc2lnbjwvaDE+XG4gICAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGVzXCI+XG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIG11bHRpcGxlPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiY29udGVudFwiIFtjaGVja2VkXT1cImVkaXRvcnMuY29udGVudFwiIChjaGFuZ2UpPVwiZWRpdG9yVG9nZ2xlQ2hhbmdlKCRldmVudClcIj5Db250ZW50PC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cInN0eWxlc1wiIFtjaGVja2VkXT1cImVkaXRvcnMuc3R5bGVzXCIgKGNoYW5nZSk9XCJlZGl0b3JUb2dnbGVDaGFuZ2UoJGV2ZW50KVwiPlN0eWxlczwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD4gICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0b3JzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVkaXRvclwiICpuZ0lmPVwiZWRpdG9ycy5jb250ZW50XCI+XG4gICAgICAgICAgICA8ZnMtbGFiZWw+Q29udGVudDwvZnMtbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8ZnMtdGV4dC1lZGl0b3IgXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb250ZW50XCIgXG4gICAgICAgICAgICAgICAgbmFtZT1cImNvbnRlbnRcIlxuICAgICAgICAgICAgICAgIFtjb25maWddPVwieyB0YWJTaXplOiAyLCBsYW5ndWFnZTogJ2h0bWwnIH1cIj5cbiAgICAgICAgICAgICAgPC9mcy10ZXh0LWVkaXRvcj4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVkaXRvclwiICpuZ0lmPVwiZWRpdG9ycy5zdHlsZXNcIj5cbiAgICAgICAgICAgIDxmcy1sYWJlbD5TdHlsZXM8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVkaXRvci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPGZzLXRleHQtZWRpdG9yIFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3R5bGVzXCIgXG4gICAgICAgICAgICAgICAgbmFtZT1cInN0eWxlc1wiXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7ICB0YWJTaXplOiAyLCBsYW5ndWFnZTogJ3Njc3MnIH1cIj5cbiAgICAgICAgICAgICAgPC9mcy10ZXh0LWVkaXRvcj4gICAgXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj4gICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICAgIDxmcy1mb3JtLWRpYWxvZy1hY3Rpb25zPlxuICAgICAgPC9mcy1mb3JtLWRpYWxvZy1hY3Rpb25zPlxuICAgIDwvZGl2PlxuICA8L2ZzLWRpYWxvZz5cbjwvZm9ybT5cbiJdfQ==
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVF0RixNQUFNLE9BQU8sZUFBZTtJQTJCMUIsWUFDbUMsS0FBb0QsRUFDN0UsVUFBeUMsRUFDekMsT0FBa0IsRUFDbEIsUUFBbUIsRUFDbkIsTUFBeUI7UUFKQSxVQUFLLEdBQUwsS0FBSyxDQUErQztRQUM3RSxlQUFVLEdBQVYsVUFBVSxDQUErQjtRQUN6QyxZQUFPLEdBQVAsT0FBTyxDQUFX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LGtUQVNvQixVQUFVLDZIQUdILFVBQVUseUhBR1osVUFBVSwyQ0MvQy9ELHdnRkFzRUE7NEZEeENhLGVBQWU7a0JBTDNCLFNBQVM7bUJBQUM7b0JBQ1QsV0FBVyxFQUFFLHlCQUF5QjtvQkFDdEMsU0FBUyxFQUFFLENBQUMseUJBQXlCLENBQUM7b0JBQ3RDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7MEJBNkJJLE1BQU07MkJBQUMsZUFBZTt1SkF6QmxCLElBQUk7c0JBRFYsU0FBUzt1QkFBQyxlQUFlO2dCQUluQixXQUFXO3NCQURqQixTQUFTO3VCQUFDLGFBQWE7Z0JBSWpCLGFBQWE7c0JBRG5CLFNBQVM7dUJBQUMsZUFBZTtnQkFJbkIsU0FBUztzQkFEZixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJbkQsZ0JBQWdCO3NCQUR0QixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUkxRCxjQUFjO3NCQURwQixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZUNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IEZzRm9ybURpcmVjdGl2ZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2Zvcm0nO1xuaW1wb3J0IHsgRnNNZXNzYWdlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVzc2FnZSc7XG5pbXBvcnQgeyBGc1RleHRFZGl0b3JDb21wb25lbnQgfSBmcm9tICdAZmlyZXN0aXRjaC90ZXh0LWVkaXRvcic7XG5cbmltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGc0NvbnRlbnRDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbnRlbnRQYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29udGVudC1wYWdlcy9jb21wb25lbnRzL2NvbnRlbnQtcGFnZSc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKEZzRm9ybURpcmVjdGl2ZSlcbiAgcHVibGljIGZvcm06IEZzRm9ybURpcmVjdGl2ZTtcblxuICBAVmlld0NoaWxkKCdzdHlsZUVkaXRvcicpXG4gIHB1YmxpYyBzdHlsZUVkaXRvcjogRnNUZXh0RWRpdG9yQ29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnRFZGl0b3InKVxuICBwdWJsaWMgY29udGVudEVkaXRvcjogRnNUZXh0RWRpdG9yQ29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ3NlcGFyYXRvcicsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBzZXBhcmF0b3I6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgnY29udGVudENvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBjb250ZW50Q29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3N0eWxlQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHVibGljIHN0eWxlQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIHB1YmxpYyBjb250ZW50UGFnZTtcbiAgcHVibGljIHJlc2l6aW5nID0gZmFsc2U7XG4gIHB1YmxpYyBlZGl0b3JzID0geyBjb250ZW50OiB0cnVlLCBzdHlsZXM6IHRydWUgfTtcblxuICBwcml2YXRlIF9jb25maWc6IEZzQ29udGVudENvbmZpZztcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwcml2YXRlIF9kYXRhOiB7IGNvbnRlbnRQYWdlOiBhbnk7IGNvbmZpZzogRnNDb250ZW50Q29uZmlnIH0sXG4gICAgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RWRpdG9yQ29tcG9uZW50PixcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIF9tZXNzYWdlOiBGc01lc3NhZ2UsXG4gICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudFBhZ2UgPSB0aGlzLl9kYXRhLmNvbnRlbnRQYWdlO1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2RhdGEuY29uZmlnO1xuICAgIHRoaXMuX2luaXRTZXBhcmF0b3IoKTtcbiAgfVxuXG4gIHB1YmxpYyBlZGl0b3JUb2dnbGVDaGFuZ2UoZXZlbnQ6IE1hdEJ1dHRvblRvZ2dsZUNoYW5nZSk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yc1tldmVudC52YWx1ZV0gPSAhdGhpcy5lZGl0b3JzW2V2ZW50LnZhbHVlXTtcbiAgICB0aGlzLnVwZGF0ZUVkaXRvckxheW91dHMoKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVFZGl0b3JMYXlvdXRzKCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYodGhpcy5lZGl0b3JzLmNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5jb250ZW50RWRpdG9yLnVwZGF0ZUxheW91dCgpO1xuICAgICAgfVxuXG4gICAgICBpZih0aGlzLmVkaXRvcnMuc3R5bGVzKSB7XG4gICAgICAgIHRoaXMuc3R5bGVFZGl0b3IudXBkYXRlTGF5b3V0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc3R5bGVzQ2hhbmdlZCgpIHtcbiAgICB0aGlzLmZvcm0udHJpZ2dlclN1Ym1pdCgpO1xuICB9XG5cbiAgcHVibGljIGNvbnRlbnRDaGFuZ2VkKCkge1xuICAgIHRoaXMuZm9ybS50cmlnZ2VyU3VibWl0KCk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnNhdmVDb250ZW50UGFnZSh7XG4gICAgICBpZDogdGhpcy5jb250ZW50UGFnZS5pZCxcbiAgICAgIHN0eWxlczogdGhpcy5jb250ZW50UGFnZS5zdHlsZXMsXG4gICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnRQYWdlLmNvbnRlbnQsXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGNvbnRlbnRQYWdlKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb250ZW50UGFnZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuY29udGVudFBhZ2UsXG4gICAgICAgICAgICAuLi5jb250ZW50UGFnZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnU2F2ZWQgQ2hhbmdlcycpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH07XG5cbiAgcHVibGljIG9wZW5TZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLl9kaWFsb2cub3BlbihDb250ZW50UGFnZUNvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBjb250ZW50UGFnZTogdGhpcy5jb250ZW50UGFnZSxcbiAgICAgIH0sXG4gICAgfSlcbiAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGNvbnRlbnRQYWdlKSA9PiB7XG4gICAgICAgIHRoaXMuY29udGVudFBhZ2UgPSB7XG4gICAgICAgICAgLi4udGhpcy5jb250ZW50UGFnZSxcbiAgICAgICAgICAuLi5jb250ZW50UGFnZSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBfaW5pdFNlcGFyYXRvcigpOiB2b2lkIHtcbiAgICBmcm9tRXZlbnQodGhpcy5zZXBhcmF0b3IubmF0aXZlRWxlbWVudCwgJ21vdXNlZG93bicpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgdGhpcy5fbW92ZVNlcGFyYXRvcihlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbW92ZVNlcGFyYXRvcihzZXBhcmF0b3JFdmVudCk6IHZvaWQge1xuICAgIGxldCBtb3VzZURvd24gPSB7XG4gICAgICBjbGllbnRYOiBzZXBhcmF0b3JFdmVudC5jbGllbnRYLFxuICAgICAgY2xpZW50WTogc2VwYXJhdG9yRXZlbnQuY2xpZW50WSxcbiAgICAgIG9mZnNldExlZnQ6ICBOdW1iZXIodGhpcy5zZXBhcmF0b3IubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0KSxcbiAgICAgIG9mZnNldFRvcDogICBOdW1iZXIodGhpcy5zZXBhcmF0b3IubmF0aXZlRWxlbWVudC5vZmZzZXRUb3ApLFxuICAgICAgZmlyc3RXaWR0aDogIE51bWJlcih0aGlzLmNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCksXG4gICAgICBzZWNvbmRXaWR0aDogTnVtYmVyKHRoaXMuc3R5bGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCksXG4gICAgfTtcblxuICAgIHRoaXMucmVzaXppbmcgPSB0cnVlO1xuICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vtb3ZlJylcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgbW91c2VEb3duID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnJlc2l6aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVFZGl0b3JMYXlvdXRzKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwoXG4gICAgICAgICAgZnJvbUV2ZW50KHRoaXMuc2VwYXJhdG9yLm5hdGl2ZUVsZW1lbnQsICdtb3VzZXVwJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBkZWx0YSA9IHsgeDogZS5jbGllbnRYIC0gbW91c2VEb3duLmNsaWVudFgsXG4gICAgICAgICAgeTogZS5jbGllbnRZIC0gbW91c2VEb3duLmNsaWVudFkgfTtcblxuICAgICAgICBkZWx0YS54ID0gTWF0aC5taW4oTWF0aC5tYXgoZGVsdGEueCwgLW1vdXNlRG93bi5maXJzdFdpZHRoKSxcbiAgICAgICAgICBtb3VzZURvd24uc2Vjb25kV2lkdGgpO1xuXG4gICAgICAgIHRoaXMuc2VwYXJhdG9yLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IGAke21vdXNlRG93bi5vZmZzZXRMZWZ0ICsgZGVsdGEueH1weGA7XG4gICAgICAgIHRoaXMuY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7bW91c2VEb3duLmZpcnN0V2lkdGggKyBkZWx0YS54fXB4YDtcbiAgICAgICAgdGhpcy5zdHlsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7bW91c2VEb3duLnNlY29uZFdpZHRoIC0gZGVsdGEueH1weGA7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGZvcm0gZnNGb3JtIFtzdWJtaXRdPVwic2F2ZVwiPlxuICA8ZnMtZGlhbG9nPlxuICAgIDxoMSBtYXQtZGlhbG9nLXRpdGxlPlxuICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgICBQYWdlXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsXCI+e3tjb250ZW50UGFnZS5uYW1lfX08L2Rpdj4gICBcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxhXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblNldHRpbmdzKClcIlxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+XG4gICAgICAgIDwvYT4gICBcbiAgICAgIDwvZGl2PlxuICAgIDwvaDE+XG4gICAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0b3JzXCIgW25nQ2xhc3NdPVwieyByZXNpemluZzogcmVzaXppbmcsICdzZXBhcmF0b3ItZW5hYmxlZCc6IGVkaXRvcnMuc3R5bGVzICYmIGVkaXRvcnMuY29udGVudCB9XCI+XG4gICAgICAgICAgPGRpdiAjY29udGVudENvbnRhaW5lciBjbGFzcz1cImVkaXRvciBlZGl0b3ItY29udGVudFwiIFtuZ0NsYXNzXT1cInsgJ2NvbnRlbnQtZW5hYmxlZCc6IGVkaXRvcnMuY29udGVudCB9XCI+XG4gICAgICAgICAgICA8ZnMtbGFiZWw+Q29udGVudDwvZnMtbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8ZnMtdGV4dC1lZGl0b3IgXG4gICAgICAgICAgICAgICAgI2NvbnRlbnRFZGl0b3JcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbnRlbnRQYWdlLmNvbnRlbnRcIiBcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJjb250ZW50Q2hhbmdlZCgpXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiY29udGVudFwiXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7IHRhYlNpemU6IDIsIGxhbmd1YWdlOiAnaHRtbCcgfVwiPlxuICAgICAgICAgICAgICA8L2ZzLXRleHQtZWRpdG9yPiAgICAgICAgICAgICAgXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICBcbiAgICAgICAgICAgICNzZXBhcmF0b3JcbiAgICAgICAgICAgIGNsYXNzPVwic2VwYXJhdG9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICAgICNzdHlsZUNvbnRhaW5lciBcbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0b3IgZWRpdG9yLXN0eWxlc1wiIFxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzdHlsZXMtZW5hYmxlZCc6IGVkaXRvcnMuc3R5bGVzIH1cIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiJzYwMHB4J1wiPlxuICAgICAgICAgICAgPGZzLWxhYmVsPlN0eWxlczwvZnMtbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8ZnMtdGV4dC1lZGl0b3IgXG4gICAgICAgICAgICAgICAgI3N0eWxlRWRpdG9yXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb250ZW50UGFnZS5zdHlsZXNcIiBcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJzdHlsZXNDaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJzdHlsZXNcIlxuICAgICAgICAgICAgICAgIFtjb25maWddPVwieyAgdGFiU2l6ZTogMiwgbGFuZ3VhZ2U6ICdzY3NzJyB9XCI+XG4gICAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+ICAgIFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+ICAgIFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgICA8ZnMtZm9ybS1kaWFsb2ctYWN0aW9uc1xuICAgICAgICBbc2F2ZV09XCJmYWxzZVwiXG4gICAgICAgIFtkb25lXT1cInRydWVcIj5cbiAgICAgIDwvZnMtZm9ybS1kaWFsb2ctYWN0aW9ucz5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGVzXCI+XG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCBtdWx0aXBsZT5cbiAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJjb250ZW50XCIgW2NoZWNrZWRdPVwiZWRpdG9ycy5jb250ZW50XCIgKGNoYW5nZSk9XCJlZGl0b3JUb2dnbGVDaGFuZ2UoJGV2ZW50KVwiPkNvbnRlbnQ8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cInN0eWxlc1wiIFtjaGVja2VkXT1cImVkaXRvcnMuc3R5bGVzXCIgKGNoYW5nZSk9XCJlZGl0b3JUb2dnbGVDaGFuZ2UoJGV2ZW50KVwiPlN0eWxlczwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+ICAgICAgXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9mcy1kaWFsb2c+XG48L2Zvcm0+XG5cbiJdfQ==
|