croco-html 2.4.0 → 2.5.0
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/README.md +2 -2
- package/esm2022/lib/components/add-files-btn/add-files-btn.component.mjs +3 -3
- package/esm2022/lib/components/editor/external-video-block/external-video-block.component.mjs +14 -23
- package/esm2022/lib/components/editor/external-video-block/vk-video-player/vk-video-player.component.mjs +20 -0
- package/esm2022/lib/components/editor/html-raw-editor/html-raw-editor.component.mjs +7 -8
- package/esm2022/lib/components/editor/image-editor/image-editor.component.mjs +9 -10
- package/esm2022/lib/components/editor/index.mjs +1 -1
- package/esm2022/lib/components/editor/main-editor/main-editor.component.mjs +13 -14
- package/esm2022/lib/components/editor/main-editor-block/main-editor-block.component.mjs +12 -13
- package/esm2022/lib/components/editor/text-editor/text-editor.component.mjs +9 -10
- package/esm2022/lib/components/editor/visual-editor/DefaultAligments.mjs +1 -1
- package/esm2022/lib/components/editor/visual-editor/DefaultTags.mjs +2 -2
- package/esm2022/lib/components/editor/visual-editor/visual-editor.component.mjs +27 -24
- package/esm2022/lib/components/file-id-select/file-id-select.component.mjs +3 -3
- package/esm2022/lib/components/index.mjs +1 -1
- package/esm2022/lib/components/upload-files-btn/upload-files-btn.component.mjs +3 -3
- package/esm2022/lib/components/xml-tags/file-image-tag-view/file-image-tag-view.component.mjs +3 -3
- package/esm2022/lib/components/xml-tags/index.mjs +1 -1
- package/esm2022/lib/components/xml-tags/xml-tag-external-video/resize-observable.mjs +1 -1
- package/esm2022/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.mjs +22 -6
- package/esm2022/lib/components/xml-tags/xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component.mjs +3 -4
- package/esm2022/lib/components/xml-tags/xml-tag-header-text-view/xml-tag-header-text-view.component.mjs +4 -5
- package/esm2022/lib/components/xml-tags/xml-tag-html-view/xml-tag-html-view.component.mjs +3 -3
- package/esm2022/lib/components/xml-tags/xml-tag-rich-text-view/xml-tag-rich-text-view.component.mjs +4 -5
- package/esm2022/lib/components/xml-tags/xml-tag-table-view/xml-tag-table-view.component.mjs +4 -5
- package/esm2022/lib/components/xml-tags/xml-tag-text-view/xml-tag-text-view.component.mjs +3 -4
- package/esm2022/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.mjs +12 -11
- package/esm2022/lib/croco-html.module.mjs +6 -3
- package/esm2022/lib/extensions/AngularMaterialTableMethods.mjs +1 -1
- package/esm2022/lib/extensions/BodyTagsExtensions.mjs +8 -7
- package/esm2022/lib/extensions/BootstrapTableMethods.mjs +1 -1
- package/esm2022/lib/extensions/HtmlExtractionMethods.mjs +1 -1
- package/esm2022/lib/extensions/HtmlRawTagDataConsts.mjs +1 -1
- package/esm2022/lib/extensions/ImageMethods.mjs +1 -1
- package/esm2022/lib/extensions/InterfaceBlock.mjs +1 -1
- package/esm2022/lib/extensions/TableBuilder.mjs +1 -1
- package/esm2022/lib/extensions/TableMethods.mjs +1 -1
- package/esm2022/lib/extensions/Tags.mjs +20 -0
- package/esm2022/lib/extensions/TextMethods.mjs +11 -2
- package/esm2022/lib/extensions/TextSimpleMethods.mjs +1 -1
- package/esm2022/lib/extensions/VideoMethods.mjs +12 -1
- package/esm2022/lib/extensions/XmlExtensions.mjs +1 -1
- package/esm2022/lib/extensions/index.mjs +1 -1
- package/esm2022/lib/index.mjs +1 -1
- package/esm2022/lib/models/models.mjs +1 -1
- package/esm2022/lib/pipes/RichTextToHtmlPipe.mjs +1 -1
- package/esm2022/lib/pipes/TagToSpanPipe.mjs +1 -1
- package/esm2022/lib/pipes/ToHtmlBodyTagsPipe.mjs +1 -1
- package/esm2022/lib/pipes/ToPreviewHtmlPipe.mjs +1 -1
- package/esm2022/lib/pipes/index.mjs +1 -1
- package/esm2022/lib/pipes/to-preview.pipe.mjs +1 -1
- package/esm2022/lib/services/file-upload.service.mjs +1 -1
- package/esm2022/lib/services/files-query.service.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/croco-html.mjs +970 -903
- package/fesm2022/croco-html.mjs.map +1 -1
- package/lib/components/editor/external-video-block/external-video-block.component.d.ts +4 -6
- package/lib/components/editor/external-video-block/vk-video-player/vk-video-player.component.d.ts +10 -0
- package/lib/components/editor/main-editor-block/main-editor-block.component.d.ts +0 -1
- package/lib/components/editor/visual-editor/visual-editor.component.d.ts +9 -0
- package/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.d.ts +3 -1
- package/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.d.ts +1 -1
- package/lib/croco-html.module.d.ts +2 -1
- package/lib/extensions/Tags.d.ts +15 -0
- package/lib/extensions/TextMethods.d.ts +10 -1
- package/lib/extensions/VideoMethods.d.ts +5 -0
- package/lib/index.d.ts +4 -4
- package/package.json +1 -1
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { TextTags } from '../../../extensions/TextMethods';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/
|
|
5
|
-
import * as i2 from "@angular/material/
|
|
6
|
-
import * as i3 from "
|
|
7
|
-
import * as i4 from "../
|
|
8
|
-
import * as i5 from "../
|
|
9
|
-
import * as i6 from "../
|
|
10
|
-
import * as i7 from "../html-raw-editor/html-raw-editor.component";
|
|
4
|
+
import * as i1 from "@angular/material/button";
|
|
5
|
+
import * as i2 from "@angular/material/icon";
|
|
6
|
+
import * as i3 from "../text-editor/text-editor.component";
|
|
7
|
+
import * as i4 from "../external-video-block/external-video-block.component";
|
|
8
|
+
import * as i5 from "../image-editor/image-editor.component";
|
|
9
|
+
import * as i6 from "../html-raw-editor/html-raw-editor.component";
|
|
11
10
|
export class MainEditorBlockComponent {
|
|
12
11
|
constructor() {
|
|
13
|
-
this.textTags =
|
|
12
|
+
this.textTags = TextTags.allTextTags;
|
|
14
13
|
this.onTagSaved = new EventEmitter();
|
|
15
14
|
this.onTagRemoved = new EventEmitter();
|
|
16
15
|
}
|
|
@@ -26,16 +25,16 @@ export class MainEditorBlockComponent {
|
|
|
26
25
|
ngOnInit() {
|
|
27
26
|
}
|
|
28
27
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: MainEditorBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
29
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
28
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: MainEditorBlockComponent, selector: "croco-html-main-editor-block", inputs: { tag: "tag" }, outputs: { onTagSaved: "onTagSaved", onTagRemoved: "onTagRemoved" }, ngImport: i0, template: "<div>\n <div>\n @if (textTags.includes(tag.tagDescription.tag)) {\n <div>\n <croco-html-text-editor (onTagUpdated)=\"tagUpdatedHandler($event)\" [tag]=\"tag\">\n </croco-html-text-editor>\n </div>\n }\n\n @if (tag.tagDescription.tag === 'file-image') {\n <div>\n <croco-html-image-editor (onTagUpdated)=\"tagUpdatedHandler($event)\" [tag]=\"tag\">\n </croco-html-image-editor>\n </div>\n }\n\n @if (tag.tagDescription.tag === 'external-video') {\n <div>\n <croco-html-external-video-block (onTagUpdated)=\"tagUpdatedHandler($event)\" [tag]=\"tag\">\n </croco-html-external-video-block>\n </div>\n }\n\n @if (tag.tagDescription.tag === 'html-raw') {\n <div>\n <croco-html-html-raw-editor (onTagUpdated)=\"tagUpdatedHandler($event)\" [tag]=\"tag\">\n </croco-html-html-raw-editor>\n </div>\n }\n\n </div>\n\n <div class=\"d-flex justify-content-between\">\n <div class=\"d-flex justify-content-end align-self-center\">\n <div>\n @if (tag.presentOrEdit) {\n <button (click)=\"tag.presentOrEdit = false\" mat-icon-button>\n <mat-icon>edit</mat-icon>\n </button>\n }\n @if (!tag.presentOrEdit) {\n <button (click)=\"save()\" mat-icon-button>\n <mat-icon>save</mat-icon>\n </button>\n }\n <button (click)=\"deleteItem()\" mat-icon-button color=\"warn\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </div>\n\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.TextEditorComponent, selector: "croco-html-text-editor", inputs: ["tag"], outputs: ["onTagUpdated"] }, { kind: "component", type: i4.ExternalVideoBlockComponent, selector: "croco-html-external-video-block", inputs: ["tag"], outputs: ["onTagUpdated"] }, { kind: "component", type: i5.ImageEditorComponent, selector: "croco-html-image-editor", inputs: ["tag"], outputs: ["onTagUpdated"] }, { kind: "component", type: i6.HtmlRawEditorComponent, selector: "croco-html-html-raw-editor", inputs: ["tag"], outputs: ["onTagUpdated"] }] }); }
|
|
30
29
|
}
|
|
31
30
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: MainEditorBlockComponent, decorators: [{
|
|
32
31
|
type: Component,
|
|
33
|
-
args: [{ selector: 'croco-html-main-editor-block', template: "<div>\
|
|
34
|
-
}],
|
|
32
|
+
args: [{ selector: 'croco-html-main-editor-block', template: "<div>\n <div>\n @if (textTags.includes(tag.tagDescription.tag)) {\n <div>\n <croco-html-text-editor (onTagUpdated)=\"tagUpdatedHandler($event)\" [tag]=\"tag\">\n </croco-html-text-editor>\n </div>\n }\n\n @if (tag.tagDescription.tag === 'file-image') {\n <div>\n <croco-html-image-editor (onTagUpdated)=\"tagUpdatedHandler($event)\" [tag]=\"tag\">\n </croco-html-image-editor>\n </div>\n }\n\n @if (tag.tagDescription.tag === 'external-video') {\n <div>\n <croco-html-external-video-block (onTagUpdated)=\"tagUpdatedHandler($event)\" [tag]=\"tag\">\n </croco-html-external-video-block>\n </div>\n }\n\n @if (tag.tagDescription.tag === 'html-raw') {\n <div>\n <croco-html-html-raw-editor (onTagUpdated)=\"tagUpdatedHandler($event)\" [tag]=\"tag\">\n </croco-html-html-raw-editor>\n </div>\n }\n\n </div>\n\n <div class=\"d-flex justify-content-between\">\n <div class=\"d-flex justify-content-end align-self-center\">\n <div>\n @if (tag.presentOrEdit) {\n <button (click)=\"tag.presentOrEdit = false\" mat-icon-button>\n <mat-icon>edit</mat-icon>\n </button>\n }\n @if (!tag.presentOrEdit) {\n <button (click)=\"save()\" mat-icon-button>\n <mat-icon>save</mat-icon>\n </button>\n }\n <button (click)=\"deleteItem()\" mat-icon-button color=\"warn\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </div>\n\n </div>\n</div>\n" }]
|
|
33
|
+
}], propDecorators: { tag: [{
|
|
35
34
|
type: Input
|
|
36
35
|
}], onTagSaved: [{
|
|
37
36
|
type: Output
|
|
38
37
|
}], onTagRemoved: [{
|
|
39
38
|
type: Output
|
|
40
39
|
}] } });
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1lZGl0b3ItYmxvY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3JvY28taHRtbC9zcmMvbGliL2NvbXBvbmVudHMvZWRpdG9yL21haW4tZWRpdG9yLWJsb2NrL21haW4tZWRpdG9yLWJsb2NrLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvci9tYWluLWVkaXRvci1ibG9jay9tYWluLWVkaXRvci1ibG9jay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7QUFRM0QsTUFBTSxPQUFPLHdCQUF3QjtJQUxyQztRQU9FLGFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBTWhDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBRzdDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztLQWdCaEQ7SUFkQyxpQkFBaUIsQ0FBQyxHQUFlO0lBQ2pDLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsUUFBUTtJQUNSLENBQUM7OEdBMUJVLHdCQUF3QjtrR0FBeEIsd0JBQXdCLGlLQ1RyQywyaURBcURBOzsyRkQ1Q2Esd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLDhCQUE4Qjs4QkFTeEMsR0FBRztzQkFERixLQUFLO2dCQUlOLFVBQVU7c0JBRFQsTUFBTTtnQkFJUCxZQUFZO3NCQURYLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZXh0VGFncyB9IGZyb20gJy4uLy4uLy4uL2V4dGVuc2lvbnMvVGV4dE1ldGhvZHMnO1xuaW1wb3J0IHsgSHRtbEJvZHlUYWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3JvY28taHRtbC1tYWluLWVkaXRvci1ibG9jaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYWluLWVkaXRvci1ibG9jay5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21haW4tZWRpdG9yLWJsb2NrLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBNYWluRWRpdG9yQmxvY2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHRleHRUYWdzID0gVGV4dFRhZ3MuYWxsVGV4dFRhZ3M7XG5cbiAgQElucHV0KClcbiAgdGFnOkh0bWxCb2R5VGFnO1xuXG4gIEBPdXRwdXQoKVxuICBvblRhZ1NhdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxIdG1sQm9keVRhZz4oKTtcblxuICBAT3V0cHV0KClcbiAgb25UYWdSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxIdG1sQm9keVRhZz4oKTtcblxuICB0YWdVcGRhdGVkSGFuZGxlcih0YWc6SHRtbEJvZHlUYWcpOiB2b2lke1xuICB9XG5cbiAgc2F2ZSgpe1xuICAgIHRoaXMudGFnLnByZXNlbnRPckVkaXQgPSB0cnVlO1xuICAgIHRoaXMub25UYWdTYXZlZC5lbWl0KHRoaXMudGFnKTtcbiAgfVxuXG4gIGRlbGV0ZUl0ZW0oKXtcbiAgICB0aGlzLm9uVGFnUmVtb3ZlZC5lbWl0KHRoaXMudGFnKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG59XG4iLCI8ZGl2PlxuICA8ZGl2PlxuICAgIEBpZiAodGV4dFRhZ3MuaW5jbHVkZXModGFnLnRhZ0Rlc2NyaXB0aW9uLnRhZykpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIDxjcm9jby1odG1sLXRleHQtZWRpdG9yIChvblRhZ1VwZGF0ZWQpPVwidGFnVXBkYXRlZEhhbmRsZXIoJGV2ZW50KVwiIFt0YWddPVwidGFnXCI+XG4gICAgICAgIDwvY3JvY28taHRtbC10ZXh0LWVkaXRvcj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAodGFnLnRhZ0Rlc2NyaXB0aW9uLnRhZyA9PT0gJ2ZpbGUtaW1hZ2UnKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8Y3JvY28taHRtbC1pbWFnZS1lZGl0b3IgKG9uVGFnVXBkYXRlZCk9XCJ0YWdVcGRhdGVkSGFuZGxlcigkZXZlbnQpXCIgW3RhZ109XCJ0YWdcIj5cbiAgICAgICAgPC9jcm9jby1odG1sLWltYWdlLWVkaXRvcj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAodGFnLnRhZ0Rlc2NyaXB0aW9uLnRhZyA9PT0gJ2V4dGVybmFsLXZpZGVvJykge1xuICAgICAgPGRpdj5cbiAgICAgICAgPGNyb2NvLWh0bWwtZXh0ZXJuYWwtdmlkZW8tYmxvY2sgKG9uVGFnVXBkYXRlZCk9XCJ0YWdVcGRhdGVkSGFuZGxlcigkZXZlbnQpXCIgW3RhZ109XCJ0YWdcIj5cbiAgICAgICAgPC9jcm9jby1odG1sLWV4dGVybmFsLXZpZGVvLWJsb2NrPlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmICh0YWcudGFnRGVzY3JpcHRpb24udGFnID09PSAnaHRtbC1yYXcnKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8Y3JvY28taHRtbC1odG1sLXJhdy1lZGl0b3IgKG9uVGFnVXBkYXRlZCk9XCJ0YWdVcGRhdGVkSGFuZGxlcigkZXZlbnQpXCIgW3RhZ109XCJ0YWdcIj5cbiAgICAgICAgPC9jcm9jby1odG1sLWh0bWwtcmF3LWVkaXRvcj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLXNlbGYtY2VudGVyXCI+XG4gICAgICA8ZGl2PlxuICAgICAgICBAaWYgKHRhZy5wcmVzZW50T3JFZGl0KSB7XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidGFnLnByZXNlbnRPckVkaXQgPSBmYWxzZVwiIG1hdC1pY29uLWJ1dHRvbj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCF0YWcucHJlc2VudE9yRWRpdCkge1xuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNhdmUoKVwiIG1hdC1pY29uLWJ1dHRvbj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5zYXZlPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkZWxldGVJdGVtKClcIiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJ3YXJuXCI+XG4gICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/
|
|
4
|
-
import * as i2 from "@angular/
|
|
5
|
-
import * as i3 from "@angular/material/
|
|
6
|
-
import * as i4 from "@angular/
|
|
7
|
-
import * as i5 from "@angular/
|
|
8
|
-
import * as i6 from "@angular/material/
|
|
9
|
-
import * as i7 from "@angular/material/button-toggle";
|
|
3
|
+
import * as i1 from "@angular/forms";
|
|
4
|
+
import * as i2 from "@angular/material/form-field";
|
|
5
|
+
import * as i3 from "@angular/material/input";
|
|
6
|
+
import * as i4 from "@angular/cdk/text-field";
|
|
7
|
+
import * as i5 from "@angular/material/icon";
|
|
8
|
+
import * as i6 from "@angular/material/button-toggle";
|
|
10
9
|
export class TextEditorComponent {
|
|
11
10
|
constructor() {
|
|
12
11
|
this.onTagUpdated = new EventEmitter();
|
|
@@ -17,14 +16,14 @@ export class TextEditorComponent {
|
|
|
17
16
|
return `<${this.tag.tagDescription.tag}>${this.tag.innerHtml}<${this.tag.tagDescription.tag}/>`;
|
|
18
17
|
}
|
|
19
18
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: TextEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
20
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
19
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: TextEditorComponent, selector: "croco-html-text-editor", inputs: { tag: "tag" }, outputs: { onTagUpdated: "onTagUpdated" }, ngImport: i0, template: "@if (tag.presentOrEdit) {\n <div>\n <div style=\"height: 10px;\">\n </div>\n @if (tag.attributes['h-align'] === 'left') {\n <div style=\"text-align: left;\" [innerHtml]=\"getInnerHtml()\">\n </div>\n }\n @if (tag.attributes['h-align'] === 'right') {\n <div style=\"text-align: right;\" [innerHtml]=\"getInnerHtml()\">\n </div>\n }\n @if (tag.attributes['h-align'] === 'center') {\n <div style=\"text-align: center;\" [innerHtml]=\"getInnerHtml()\">\n </div>\n }\n </div>\n}\n\n@if (!tag.presentOrEdit) {\n <div>\n <div style=\"overflow-x: auto;\">\n <mat-button-toggle-group [(ngModel)]=\"tag.attributes['h-align']\">\n <mat-button-toggle value=\"center\">\n \u041F\u043E \u0446\u0435\u043D\u0442\u0440\u0443 <mat-icon>format_align_center</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"left\">\n \u0421\u043B\u0435\u0432\u0430 <mat-icon>format_align_left</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"right\">\n \u0421\u043F\u0440\u0430\u0432\u0430 <mat-icon> format_align_right</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"height: 10px;\">\n </div>\n <div>\n <mat-form-field class=\"w-100\">\n <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n placeholder=\"\u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u044F\u044F \u0440\u0430\u0437\u043C\u0435\u0442\u043A\u0430 \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u043E\u0433\u043E \u0442\u0435\u0433\u0430\"\n [(ngModel)]=\"tag.innerHtml\"></textarea>\n </mat-form-field>\n </div>\n </div>\n}", styles: [""], dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i4.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i6.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }] }); }
|
|
21
20
|
}
|
|
22
21
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: TextEditorComponent, decorators: [{
|
|
23
22
|
type: Component,
|
|
24
|
-
args: [{ selector: 'croco-html-text-editor', template: "
|
|
23
|
+
args: [{ selector: 'croco-html-text-editor', template: "@if (tag.presentOrEdit) {\n <div>\n <div style=\"height: 10px;\">\n </div>\n @if (tag.attributes['h-align'] === 'left') {\n <div style=\"text-align: left;\" [innerHtml]=\"getInnerHtml()\">\n </div>\n }\n @if (tag.attributes['h-align'] === 'right') {\n <div style=\"text-align: right;\" [innerHtml]=\"getInnerHtml()\">\n </div>\n }\n @if (tag.attributes['h-align'] === 'center') {\n <div style=\"text-align: center;\" [innerHtml]=\"getInnerHtml()\">\n </div>\n }\n </div>\n}\n\n@if (!tag.presentOrEdit) {\n <div>\n <div style=\"overflow-x: auto;\">\n <mat-button-toggle-group [(ngModel)]=\"tag.attributes['h-align']\">\n <mat-button-toggle value=\"center\">\n \u041F\u043E \u0446\u0435\u043D\u0442\u0440\u0443 <mat-icon>format_align_center</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"left\">\n \u0421\u043B\u0435\u0432\u0430 <mat-icon>format_align_left</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"right\">\n \u0421\u043F\u0440\u0430\u0432\u0430 <mat-icon> format_align_right</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"height: 10px;\">\n </div>\n <div>\n <mat-form-field class=\"w-100\">\n <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n placeholder=\"\u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u044F\u044F \u0440\u0430\u0437\u043C\u0435\u0442\u043A\u0430 \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u043E\u0433\u043E \u0442\u0435\u0433\u0430\"\n [(ngModel)]=\"tag.innerHtml\"></textarea>\n </mat-form-field>\n </div>\n </div>\n}" }]
|
|
25
24
|
}], ctorParameters: () => [], propDecorators: { tag: [{
|
|
26
25
|
type: Input
|
|
27
26
|
}], onTagUpdated: [{
|
|
28
27
|
type: Output
|
|
29
28
|
}] } });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3JvY28taHRtbC9zcmMvbGliL2NvbXBvbmVudHMvZWRpdG9yL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvci90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVEvRSxNQUFNLE9BQU8sbUJBQW1CO0lBUTlCO1FBRkEsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO0lBRS9CLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNsRyxDQUFDOzhHQWZVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLGlJQ1JoQyx1dURBNkNDOzsyRkRyQ1ksbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLHdCQUF3Qjt3REFPbEMsR0FBRztzQkFERixLQUFLO2dCQUlOLFlBQVk7c0JBRFgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0bWxCb2R5VGFnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nyb2NvLWh0bWwtdGV4dC1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZXh0LWVkaXRvci5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGV4dEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KClcbiAgdGFnOiBIdG1sQm9keVRhZztcblxuICBAT3V0cHV0KClcbiAgb25UYWdVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxIdG1sQm9keVRhZz4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgZ2V0SW5uZXJIdG1sKCl7XG4gICAgcmV0dXJuIGA8JHt0aGlzLnRhZy50YWdEZXNjcmlwdGlvbi50YWd9PiR7dGhpcy50YWcuaW5uZXJIdG1sfTwke3RoaXMudGFnLnRhZ0Rlc2NyaXB0aW9uLnRhZ30vPmA7XG4gIH1cbn1cbiIsIkBpZiAodGFnLnByZXNlbnRPckVkaXQpIHtcbiAgPGRpdj5cbiAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMHB4O1wiPlxuICAgIDwvZGl2PlxuICAgIEBpZiAodGFnLmF0dHJpYnV0ZXNbJ2gtYWxpZ24nXSA9PT0gJ2xlZnQnKSB7XG4gICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdDtcIiBbaW5uZXJIdG1sXT1cImdldElubmVySHRtbCgpXCI+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmICh0YWcuYXR0cmlidXRlc1snaC1hbGlnbiddID09PSAncmlnaHQnKSB7XG4gICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7XCIgW2lubmVySHRtbF09XCJnZXRJbm5lckh0bWwoKVwiPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAodGFnLmF0dHJpYnV0ZXNbJ2gtYWxpZ24nXSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCIgW2lubmVySHRtbF09XCJnZXRJbm5lckh0bWwoKVwiPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbn1cblxuQGlmICghdGFnLnByZXNlbnRPckVkaXQpIHtcbiAgPGRpdj5cbiAgICA8ZGl2IHN0eWxlPVwib3ZlcmZsb3cteDogYXV0bztcIj5cbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCBbKG5nTW9kZWwpXT1cInRhZy5hdHRyaWJ1dGVzWydoLWFsaWduJ11cIj5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiY2VudGVyXCI+XG4gICAgICAgICAg0J/QviDRhtC10L3RgtGA0YMgPG1hdC1pY29uPmZvcm1hdF9hbGlnbl9jZW50ZXI8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJsZWZ0XCI+XG4gICAgICAgICAg0KHQu9C10LLQsCA8bWF0LWljb24+Zm9ybWF0X2FsaWduX2xlZnQ8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJyaWdodFwiPlxuICAgICAgICAgINCh0L/RgNCw0LLQsCA8bWF0LWljb24+IGZvcm1hdF9hbGlnbl9yaWdodDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwcHg7XCI+XG4gICAgPC9kaXY+XG4gICAgPGRpdj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBjZGtUZXh0YXJlYUF1dG9zaXplICNhdXRvc2l6ZT1cImNka1RleHRhcmVhQXV0b3NpemVcIlxuICAgICAgICAgIGNka0F1dG9zaXplTWluUm93cz1cIjFcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwi0JLQvdGD0YLRgNC10L3QvdGP0Y8g0YDQsNC30LzQtdGC0LrQsCDRgtC10LrRgdGC0L7QstC+0LPQviDRgtC10LPQsFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwidGFnLmlubmVySHRtbFwiPjwvdGV4dGFyZWE+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbn0iXX0=
|
|
@@ -9,4 +9,4 @@ export const AlignmentsData = [
|
|
|
9
9
|
{ value: EAlignments.Center, text: 'По центру' },
|
|
10
10
|
{ value: EAlignments.Right, text: 'Справа' },
|
|
11
11
|
];
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdEFsaWdtZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvci92aXN1YWwtZWRpdG9yL0RlZmF1bHRBbGlnbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksV0FJWDtBQUpELFdBQVksV0FBVztJQUNyQiw0QkFBYSxDQUFBO0lBQ2IsZ0NBQWlCLENBQUE7SUFDakIsOEJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBSlcsV0FBVyxLQUFYLFdBQVcsUUFJdEI7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRyxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQzNDLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtJQUNoRCxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Q0FDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEVBbGlnbm1lbnRzIHtcbiAgTGVmdCA9ICdsZWZ0JyxcbiAgQ2VudGVyID0gJ2NlbnRlcicsXG4gIFJpZ2h0ID0gJ3JpZ2h0Jyxcbn1cblxuZXhwb3J0IGNvbnN0IEFsaWdubWVudHNEYXRhID0gW1xuICB7IHZhbHVlOiBFQWxpZ25tZW50cy5MZWZ0ICwgdGV4dDogJ9Ch0LvQtdCy0LAnIH0sXG4gIHsgdmFsdWU6IEVBbGlnbm1lbnRzLkNlbnRlciwgdGV4dDogJ9Cf0L4g0YbQtdC90YLRgNGDJyB9LFxuICB7IHZhbHVlOiBFQWxpZ25tZW50cy5SaWdodCwgdGV4dDogJ9Ch0L/RgNCw0LLQsCcgfSxcbl07XG4iXX0=
|
|
@@ -13,7 +13,7 @@ export class DefaultTags {
|
|
|
13
13
|
]; }
|
|
14
14
|
static { this.tags = [
|
|
15
15
|
{ tag: FileImageTagDataConsts.TagName, displayValue: 'Изображение' },
|
|
16
|
-
{ tag: ExternalVideoTagDataConsts.TagName, displayValue: 'Внешнее видео
|
|
16
|
+
{ tag: ExternalVideoTagDataConsts.TagName, displayValue: 'Внешнее видео' },
|
|
17
17
|
...DefaultTags.textTags
|
|
18
18
|
]; }
|
|
19
19
|
static { this.htmlRawTag = {
|
|
@@ -27,4 +27,4 @@ export class DefaultTags {
|
|
|
27
27
|
return result;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdFRhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcm9jby1odG1sL3NyYy9saWIvY29tcG9uZW50cy9lZGl0b3IvdmlzdWFsLWVkaXRvci9EZWZhdWx0VGFncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUc5RSxNQUFNLE9BQU8sV0FBVzthQUVmLGFBQVEsR0FBYztRQUMzQixFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRTtRQUN0QyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFO1FBQ2pELEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUU7UUFDakQsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRTtRQUNqRCxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFO1FBQ2pELEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUU7UUFDakQsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRTtLQUNsRCxDQUFBO2FBRU0sU0FBSSxHQUFjO1FBQ3ZCLEVBQUUsR0FBRyxFQUFFLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFO1FBQ3BFLEVBQUUsR0FBRyxFQUFFLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFO1FBQzFFLEdBQUcsV0FBVyxDQUFDLFFBQVE7S0FDeEIsQ0FBQzthQUVLLGVBQVUsR0FBWTtRQUMzQixHQUFHLEVBQUUsb0JBQW9CLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlO0tBQ2pFLENBQUM7SUFFRixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQW1CO1FBQ2hDLElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHRtbFJhd1RhZ0RhdGFDb25zdHMgfSBmcm9tICcuLi8uLi8uLi9leHRlbnNpb25zL0h0bWxSYXdUYWdEYXRhQ29uc3RzJztcbmltcG9ydCB7IEZpbGVJbWFnZVRhZ0RhdGFDb25zdHMgfSBmcm9tICcuLi8uLi8uLi9leHRlbnNpb25zL0ltYWdlTWV0aG9kcyc7XG5pbXBvcnQgeyBFeHRlcm5hbFZpZGVvVGFnRGF0YUNvbnN0cyB9IGZyb20gJy4uLy4uLy4uL2V4dGVuc2lvbnMvVmlkZW9NZXRob2RzJztcbmltcG9ydCB7IFRhZ0l0ZW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvbW9kZWxzJztcblxuZXhwb3J0IGNsYXNzIERlZmF1bHRUYWdzIHtcblxuICBzdGF0aWMgdGV4dFRhZ3M6IFRhZ0l0ZW1bXSA9IFtcbiAgICB7IHRhZzogJ3RleHQnLCBkaXNwbGF5VmFsdWU6ICfQotC10LrRgdGCJyB9LFxuICAgIHsgdGFnOiAnaDEnLCBkaXNwbGF5VmFsdWU6ICfQl9Cw0LPQvtC70L7QstC+0LogMSDRg9GA0L7QstC90Y8nIH0sXG4gICAgeyB0YWc6ICdoMicsIGRpc3BsYXlWYWx1ZTogJ9CX0LDQs9C+0LvQvtCy0L7QuiAyINGD0YDQvtCy0L3RjycgfSxcbiAgICB7IHRhZzogJ2gzJywgZGlzcGxheVZhbHVlOiAn0JfQsNCz0L7Qu9C+0LLQvtC6IDMg0YPRgNC+0LLQvdGPJyB9LFxuICAgIHsgdGFnOiAnaDQnLCBkaXNwbGF5VmFsdWU6ICfQl9Cw0LPQvtC70L7QstC+0LogNCDRg9GA0L7QstC90Y8nIH0sXG4gICAgeyB0YWc6ICdoNScsIGRpc3BsYXlWYWx1ZTogJ9CX0LDQs9C+0LvQvtCy0L7QuiA1INGD0YDQvtCy0L3RjycgfSxcbiAgICB7IHRhZzogJ2g2JywgZGlzcGxheVZhbHVlOiAn0JfQsNCz0L7Qu9C+0LLQvtC6IDYg0YPRgNC+0LLQvdGPJyB9LFxuICBdXG5cbiAgc3RhdGljIHRhZ3M6IFRhZ0l0ZW1bXSA9IFtcbiAgICB7IHRhZzogRmlsZUltYWdlVGFnRGF0YUNvbnN0cy5UYWdOYW1lLCBkaXNwbGF5VmFsdWU6ICfQmNC30L7QsdGA0LDQttC10L3QuNC1JyB9LFxuICAgIHsgdGFnOiBFeHRlcm5hbFZpZGVvVGFnRGF0YUNvbnN0cy5UYWdOYW1lLCBkaXNwbGF5VmFsdWU6ICfQktC90LXRiNC90LXQtSDQstC40LTQtdC+JyB9LFxuICAgIC4uLkRlZmF1bHRUYWdzLnRleHRUYWdzXG4gIF07XG5cbiAgc3RhdGljIGh0bWxSYXdUYWc6IFRhZ0l0ZW0gPSB7XG4gICAgdGFnOiBIdG1sUmF3VGFnRGF0YUNvbnN0cy5UYWdOYW1lLCBkaXNwbGF5VmFsdWU6ICdIdG1sINGA0LDQt9C80LXRgtC60LAnXG4gIH07XG5cbiAgc3RhdGljIGdldFRhZ3ModXNlSHRtbFJhdzogYm9vbGVhbik6IFRhZ0l0ZW1bXSB7XG4gICAgdmFyIHJlc3VsdCA9IFsuLi5EZWZhdWx0VGFncy50YWdzXTtcblxuICAgIGlmICh1c2VIdG1sUmF3KSB7XG4gICAgICByZXN1bHQucHVzaChEZWZhdWx0VGFncy5odG1sUmF3VGFnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iXX0=
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
2
2
|
import { Component, EventEmitter, Inject, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
-
import { BodyTagsExtensions } from '../../../extensions
|
|
4
|
-
import { FileImageTagDataConsts } from '../../../extensions
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { XmlExtensions } from '../../../extensions/XmlExtensions';
|
|
3
|
+
import { BodyTagsExtensions, ExternalVideoSupportedTypes, TextTags } from '../../../extensions';
|
|
4
|
+
import { FileImageTagDataConsts } from '../../../extensions';
|
|
5
|
+
import { ExternalVideoTagDataConsts, ExternalVideoPlayers } from '../../../extensions';
|
|
6
|
+
import { XmlExtensions } from '../../../extensions';
|
|
8
7
|
import { DefaultTags } from './DefaultTags';
|
|
9
8
|
import { AlignmentsData, EAlignments } from "./DefaultAligments";
|
|
10
9
|
import { CrocoHtmlOptionsToken } from '../../../consts';
|
|
11
10
|
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@angular/
|
|
13
|
-
import * as i2 from "@angular/
|
|
14
|
-
import * as i3 from "@angular/material/
|
|
15
|
-
import * as i4 from "@angular/material/
|
|
16
|
-
import * as i5 from "@angular/material/
|
|
17
|
-
import * as i6 from "@angular/material/
|
|
18
|
-
import * as i7 from "@angular/material/
|
|
19
|
-
import * as i8 from "@angular/material/
|
|
20
|
-
import * as i9 from "@angular/
|
|
21
|
-
import * as i10 from "@angular/cdk/
|
|
22
|
-
import * as i11 from "
|
|
23
|
-
import * as i12 from "
|
|
24
|
-
|
|
11
|
+
import * as i1 from "@angular/forms";
|
|
12
|
+
import * as i2 from "@angular/material/form-field";
|
|
13
|
+
import * as i3 from "@angular/material/progress-spinner";
|
|
14
|
+
import * as i4 from "@angular/material/card";
|
|
15
|
+
import * as i5 from "@angular/material/select";
|
|
16
|
+
import * as i6 from "@angular/material/core";
|
|
17
|
+
import * as i7 from "@angular/material/button";
|
|
18
|
+
import * as i8 from "@angular/material/input";
|
|
19
|
+
import * as i9 from "@angular/cdk/text-field";
|
|
20
|
+
import * as i10 from "@angular/cdk/drag-drop";
|
|
21
|
+
import * as i11 from "../main-editor-block/main-editor-block.component";
|
|
22
|
+
import * as i12 from "../../add-files-btn/add-files-btn.component";
|
|
23
|
+
export const defaultLinkYouTube = "https://youtu.be/jzBneaWSswY";
|
|
24
|
+
export const defaultLinkVk = "https://vk.com/video_ext.php?oid=-22822305&id=456241864&hd=2";
|
|
25
25
|
export class VisualEditorComponent {
|
|
26
26
|
isHtmlSet() {
|
|
27
27
|
return this.html.startsWith("<body>");
|
|
@@ -47,6 +47,8 @@ export class VisualEditorComponent {
|
|
|
47
47
|
this.alignmentOptions = AlignmentsData;
|
|
48
48
|
this.showMarkUp = true;
|
|
49
49
|
this.tags = [];
|
|
50
|
+
this.videoPlayers = ExternalVideoPlayers;
|
|
51
|
+
this.ExternalVideoTagDataConsts = ExternalVideoTagDataConsts;
|
|
50
52
|
this.useHtmlRaw = false;
|
|
51
53
|
this.html = "";
|
|
52
54
|
this.onHtmlChanged = new EventEmitter();
|
|
@@ -65,13 +67,13 @@ export class VisualEditorComponent {
|
|
|
65
67
|
.find(x => x.tag === this.selectedValue);
|
|
66
68
|
let attrs = {};
|
|
67
69
|
let innerHtml = "";
|
|
68
|
-
if (
|
|
70
|
+
if (TextTags.allTextTags.includes(tagDescription.tag)) {
|
|
69
71
|
attrs["h-align"] = EAlignments.Left;
|
|
70
72
|
innerHtml = "Введите ваш текст";
|
|
71
73
|
}
|
|
72
74
|
else if (tagDescription.tag == ExternalVideoTagDataConsts.TagName) {
|
|
73
|
-
attrs[ExternalVideoTagDataConsts.VideoTypeAttrName] =
|
|
74
|
-
attrs[ExternalVideoTagDataConsts.LinkAttrName] =
|
|
75
|
+
attrs[ExternalVideoTagDataConsts.VideoTypeAttrName] = this.selectedVideoPlayer;
|
|
76
|
+
attrs[ExternalVideoTagDataConsts.LinkAttrName] = this.selectedVideoPlayer === ExternalVideoSupportedTypes.VkVideo ? defaultLinkVk : defaultLinkYouTube;
|
|
75
77
|
}
|
|
76
78
|
else {
|
|
77
79
|
attrs[FileImageTagDataConsts.FileIdAttrName] = null;
|
|
@@ -161,13 +163,14 @@ export class VisualEditorComponent {
|
|
|
161
163
|
this.recalculateBodyTags();
|
|
162
164
|
this.tags = DefaultTags.getTags(this.useHtmlRaw);
|
|
163
165
|
this.selectedValue = this.tags[0].tag;
|
|
166
|
+
this.selectedVideoPlayer = this.videoPlayers[0].type;
|
|
164
167
|
}
|
|
165
168
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: VisualEditorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: CrocoHtmlOptionsToken }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
166
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: VisualEditorComponent, selector: "croco-visual-editor", inputs: { showMarkUp: "showMarkUp", useHtmlRaw: "useHtmlRaw", html: "html" }, outputs: { html: "html", onHtmlChanged: "onHtmlChanged", rendered: "rendered" }, viewQueries: [{ propertyName: "textArea", first: true, predicate: ["textArea"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"isLoading\">\r\n <div>\r\n <mat-spinner style=\"margin:0 auto;\"></mat-spinner>\r\n <div style=\"text-align: center;\">{{loadingText}}</div>\r\n </div>\r\n <div style=\"height: 10px;\"></div>\r\n</div>\r\n<div [hidden]=\"isLoading\">\r\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\r\n <mat-card-content>\r\n <div class=\"row d-flex align-items-center\">\r\n <div class=\"col-12\">\r\n <button (click)=\"addText()\" class=\"w-100\" mat-stroked-button *ngIf=\"!isActiveAddText\">\r\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0442\u0435\u043A\u0441\u0442\r\n </button>\r\n <ng-container *ngIf=\"isActiveAddText\">\r\n <mat-form-field class=\"w-100\" >\r\n <textarea\r\n #autosize=\"cdkTextareaAutosize\"\r\n matInput\r\n cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\"\r\n cdkAutosizeMaxRows=\"5\"\r\n placeholder=\"\u0422\u0435\u043A\u0441\u0442\"\r\n #textArea\r\n [(ngModel)]=\"text\"\r\n (ngModelChange)=\"modelChanged()\"\r\n ></textarea>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" class=\"w-100\">\r\n <mat-label>\u0422\u0435\u0433 \u0434\u043B\u044F \u0442\u0435\u043A\u0441\u0442\u0430</mat-label>\r\n <mat-select [(ngModel)]=\"textTag\" (ngModelChange)=\"modelChanged()\">\r\n <mat-option *ngFor=\"let option of textTagOptions\" value=\"{{ option.tag }}\">\r\n {{ option.displayValue }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field appearance=\"outline\" class=\"w-100\">\r\n <mat-label>\u0413\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u044C\u043D\u043E\u0435 \u0432\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435</mat-label>\r\n <mat-select [(ngModel)]=\"alignment\" (ngModelChange)=\"modelChanged()\">\r\n <mat-option *ngFor=\"let option of alignmentOptions\" value=\"{{ option.value }}\">\r\n {{ option.text }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n <div class=\"d-flex flex-nowrap justify-content-end w-100\">\r\n <button (click)=\"addText()\" class=\"w-20\" style=\"margin-right: 10px\" mat-flat-button color=\"primary\" *ngIf=\"isActiveAddText\">\r\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C\r\n </button>\r\n <button (click)=\"closeText()\" class=\"w-20\" mat-flat-button color=\"warn\" *ngIf=\"isActiveAddText\">\r\n \u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n\r\n <div style=\"height: 10px;\">\r\n </div>\r\n</div>\r\n<div [hidden]=\"isLoading\">\r\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\r\n <mat-card-content>\r\n <div class=\"row d-flex align-items-center\">\r\n <div class=\"col-12\">\r\n <mat-form-field class=\"w-100\" appearance=\"outline\">\r\n <mat-label>\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0435\u0433</mat-label>\r\n <mat-select [(ngModel)]=\"selectedValue\">\r\n <mat-option *ngFor=\"let tag of tags\" [value]=\"tag.tag\">\r\n {{tag.displayValue}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-12\">\r\n <button (click)=\"addTag()\" class=\"w-100\" mat-stroked-button>\r\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0442\u0435\u0433\r\n </button>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n\r\n <div style=\"height: 10px;\">\r\n </div>\r\n</div>\r\n<div [hidden]=\"isLoading\">\r\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\r\n <mat-card-content>\r\n <div class=\"row d-flex align-items-center\">\r\n <div class=\"col-12\">\r\n <croco-html-add-files-btn (filesTagsReady)=\"filesTagsReadyHandler($event)\"\r\n (postFilesStarted)=\"postFilesStartedEventHandler($event)\" class=\"w-100\">\r\n </croco-html-add-files-btn>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n\r\n <div style=\"height: 10px;\">\r\n </div>\r\n</div>\r\n<div [hidden]=\"isLoading\">\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n <div *ngFor=\"let tag of bodyTags; let i = index\" cdkDrag>\r\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\r\n <mat-card-content>\r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"example-handle\" cdkDragHandle>\r\n <svg width=\"24px\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path\r\n d=\"M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z\">\r\n </path>\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\r\n </svg>\r\n </div>\r\n <div>\r\n <div class=\"badge\">\r\n {{tag.tagDescription.displayValue}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div style=\"height: 15px;\"></div>\r\n\r\n <croco-html-main-editor-block [tag]=\"tag\" (onTagSaved)=\"onTagSavedHandler($event)\"\r\n (onTagRemoved)=\"onTagRemovedHandler(i)\">\r\n </croco-html-main-editor-block>\r\n </mat-card-content>\r\n </mat-card>\r\n\r\n <div style=\"height: 10px;\">\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n", styles: [".example-list{width:500px;max-width:100%;border:solid 1px #ccc;min-height:60px;display:block;background:#fff;border-radius:4px;overflow:hidden}.example-box{padding:20px 10px;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;cursor:move;background:#fff;font-size:14px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.badge{background-color:#50a450;color:#fff;min-width:55px;height:25px;border-radius:15px;display:flex;align-items:center;justify-content:center;font-weight:400}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i5.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i10.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i11.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i11.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i11.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i12.MainEditorBlockComponent, selector: "croco-html-main-editor-block", inputs: ["tag"], outputs: ["onTagSaved", "onTagRemoved"] }, { kind: "component", type: i13.AddFilesBtnComponent, selector: "croco-html-add-files-btn", outputs: ["postFilesStarted", "filesTagsReady"] }] }); }
|
|
169
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: VisualEditorComponent, selector: "croco-visual-editor", inputs: { showMarkUp: "showMarkUp", useHtmlRaw: "useHtmlRaw", html: "html" }, outputs: { html: "html", onHtmlChanged: "onHtmlChanged", rendered: "rendered" }, viewQueries: [{ propertyName: "textArea", first: true, predicate: ["textArea"], descendants: true }], ngImport: i0, template: "@if (isLoading) {\n <div>\n <div>\n <mat-spinner style=\"margin:0 auto;\"></mat-spinner>\n <div style=\"text-align: center;\">{{loadingText}}</div>\n </div>\n <div style=\"height: 10px;\"></div>\n </div>\n}\n<div [hidden]=\"isLoading\">\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n @if (!isActiveAddText) {\n <button (click)=\"addText()\" class=\"w-100\" mat-stroked-button>\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0442\u0435\u043A\u0441\u0442\n </button>\n }\n @if (isActiveAddText) {\n <mat-form-field class=\"w-100\" >\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"\u0422\u0435\u043A\u0441\u0442\"\n #textArea\n [(ngModel)]=\"text\"\n (ngModelChange)=\"modelChanged()\"\n ></textarea>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"w-100\">\n <mat-label>\u0422\u0435\u0433 \u0434\u043B\u044F \u0442\u0435\u043A\u0441\u0442\u0430</mat-label>\n <mat-select [(ngModel)]=\"textTag\" (ngModelChange)=\"modelChanged()\">\n @for (option of textTagOptions; track option) {\n <mat-option value=\"{{ option.tag }}\">\n {{ option.displayValue }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"w-100\">\n <mat-label>\u0413\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u044C\u043D\u043E\u0435 \u0432\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435</mat-label>\n <mat-select [(ngModel)]=\"alignment\" (ngModelChange)=\"modelChanged()\">\n @for (option of alignmentOptions; track option) {\n <mat-option value=\"{{ option.value }}\">\n {{ option.text }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <div class=\"d-flex flex-nowrap justify-content-end w-100\">\n @if (isActiveAddText) {\n <button (click)=\"addText()\" class=\"w-20\" style=\"margin-right: 10px\" mat-flat-button color=\"primary\">\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C\n </button>\n }\n @if (isActiveAddText) {\n <button (click)=\"closeText()\" class=\"w-20\" mat-flat-button color=\"warn\" >\n \u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C\n </button>\n }\n </div>\n\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div style=\"height: 10px;\">\n </div>\n</div>\n<div [hidden]=\"isLoading\">\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0435\u0433</mat-label>\n <mat-select [(ngModel)]=\"selectedValue\">\n @for (tag of tags; track tag) {\n <mat-option [value]=\"tag.tag\">\n {{tag.displayValue}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (selectedValue === ExternalVideoTagDataConsts.TagName) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u043E\u043F\u043B\u0435\u0435\u0440</mat-label>\n <mat-select [(ngModel)]=\"selectedVideoPlayer\">\n @for (videoPlayer of videoPlayers; track videoPlayer.type) {\n <mat-option [value]=\"videoPlayer.type\">\n {{videoPlayer.displayValue}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n <div class=\"col-12\">\n <button (click)=\"addTag()\" class=\"w-100\" mat-stroked-button>\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0442\u0435\u0433\n </button>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div style=\"height: 10px;\">\n </div>\n</div>\n<div [hidden]=\"isLoading\">\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n <croco-html-add-files-btn (filesTagsReady)=\"filesTagsReadyHandler($event)\"\n (postFilesStarted)=\"postFilesStartedEventHandler($event)\" class=\"w-100\">\n </croco-html-add-files-btn>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div style=\"height: 10px;\">\n </div>\n</div>\n<div [hidden]=\"isLoading\">\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\">\n @for (tag of bodyTags; track tag; let i = $index) {\n <div cdkDrag>\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between\">\n <div class=\"example-handle\" cdkDragHandle>\n <svg width=\"24px\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n d=\"M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z\">\n </path>\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n </svg>\n </div>\n <div>\n <div class=\"badge\">\n {{tag.tagDescription.displayValue}}\n </div>\n </div>\n </div>\n <div style=\"height: 15px;\"></div>\n <croco-html-main-editor-block [tag]=\"tag\" (onTagSaved)=\"onTagSavedHandler($event)\"\n (onTagRemoved)=\"onTagRemovedHandler(i)\">\n </croco-html-main-editor-block>\n </mat-card-content>\n </mat-card>\n <div style=\"height: 10px;\">\n </div>\n </div>\n }\n </div>\n</div>\n\n\n\n\n\n", styles: [".example-list{width:500px;max-width:100%;border:solid 1px #ccc;min-height:60px;display:block;background:#fff;border-radius:4px;overflow:hidden}.example-box{padding:20px 10px;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;cursor:move;background:#fff;font-size:14px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.badge{background-color:#50a450;color:#fff;min-width:55px;height:25px;border-radius:15px;display:flex;align-items:center;justify-content:center;font-weight:400}\n"], dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "component", type: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i9.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i10.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i11.MainEditorBlockComponent, selector: "croco-html-main-editor-block", inputs: ["tag"], outputs: ["onTagSaved", "onTagRemoved"] }, { kind: "component", type: i12.AddFilesBtnComponent, selector: "croco-html-add-files-btn", outputs: ["postFilesStarted", "filesTagsReady"] }] }); }
|
|
167
170
|
}
|
|
168
171
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: VisualEditorComponent, decorators: [{
|
|
169
172
|
type: Component,
|
|
170
|
-
args: [{ selector: 'croco-visual-editor', template: "
|
|
173
|
+
args: [{ selector: 'croco-visual-editor', template: "@if (isLoading) {\n <div>\n <div>\n <mat-spinner style=\"margin:0 auto;\"></mat-spinner>\n <div style=\"text-align: center;\">{{loadingText}}</div>\n </div>\n <div style=\"height: 10px;\"></div>\n </div>\n}\n<div [hidden]=\"isLoading\">\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n @if (!isActiveAddText) {\n <button (click)=\"addText()\" class=\"w-100\" mat-stroked-button>\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0442\u0435\u043A\u0441\u0442\n </button>\n }\n @if (isActiveAddText) {\n <mat-form-field class=\"w-100\" >\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"\u0422\u0435\u043A\u0441\u0442\"\n #textArea\n [(ngModel)]=\"text\"\n (ngModelChange)=\"modelChanged()\"\n ></textarea>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"w-100\">\n <mat-label>\u0422\u0435\u0433 \u0434\u043B\u044F \u0442\u0435\u043A\u0441\u0442\u0430</mat-label>\n <mat-select [(ngModel)]=\"textTag\" (ngModelChange)=\"modelChanged()\">\n @for (option of textTagOptions; track option) {\n <mat-option value=\"{{ option.tag }}\">\n {{ option.displayValue }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"w-100\">\n <mat-label>\u0413\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u044C\u043D\u043E\u0435 \u0432\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435</mat-label>\n <mat-select [(ngModel)]=\"alignment\" (ngModelChange)=\"modelChanged()\">\n @for (option of alignmentOptions; track option) {\n <mat-option value=\"{{ option.value }}\">\n {{ option.text }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <div class=\"d-flex flex-nowrap justify-content-end w-100\">\n @if (isActiveAddText) {\n <button (click)=\"addText()\" class=\"w-20\" style=\"margin-right: 10px\" mat-flat-button color=\"primary\">\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C\n </button>\n }\n @if (isActiveAddText) {\n <button (click)=\"closeText()\" class=\"w-20\" mat-flat-button color=\"warn\" >\n \u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C\n </button>\n }\n </div>\n\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div style=\"height: 10px;\">\n </div>\n</div>\n<div [hidden]=\"isLoading\">\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0435\u0433</mat-label>\n <mat-select [(ngModel)]=\"selectedValue\">\n @for (tag of tags; track tag) {\n <mat-option [value]=\"tag.tag\">\n {{tag.displayValue}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (selectedValue === ExternalVideoTagDataConsts.TagName) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u043E\u043F\u043B\u0435\u0435\u0440</mat-label>\n <mat-select [(ngModel)]=\"selectedVideoPlayer\">\n @for (videoPlayer of videoPlayers; track videoPlayer.type) {\n <mat-option [value]=\"videoPlayer.type\">\n {{videoPlayer.displayValue}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n <div class=\"col-12\">\n <button (click)=\"addTag()\" class=\"w-100\" mat-stroked-button>\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0442\u0435\u0433\n </button>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div style=\"height: 10px;\">\n </div>\n</div>\n<div [hidden]=\"isLoading\">\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n <croco-html-add-files-btn (filesTagsReady)=\"filesTagsReadyHandler($event)\"\n (postFilesStarted)=\"postFilesStartedEventHandler($event)\" class=\"w-100\">\n </croco-html-add-files-btn>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div style=\"height: 10px;\">\n </div>\n</div>\n<div [hidden]=\"isLoading\">\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\">\n @for (tag of bodyTags; track tag; let i = $index) {\n <div cdkDrag>\n <mat-card style=\"margin: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between\">\n <div class=\"example-handle\" cdkDragHandle>\n <svg width=\"24px\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n d=\"M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z\">\n </path>\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n </svg>\n </div>\n <div>\n <div class=\"badge\">\n {{tag.tagDescription.displayValue}}\n </div>\n </div>\n </div>\n <div style=\"height: 15px;\"></div>\n <croco-html-main-editor-block [tag]=\"tag\" (onTagSaved)=\"onTagSavedHandler($event)\"\n (onTagRemoved)=\"onTagRemovedHandler(i)\">\n </croco-html-main-editor-block>\n </mat-card-content>\n </mat-card>\n <div style=\"height: 10px;\">\n </div>\n </div>\n }\n </div>\n</div>\n\n\n\n\n\n", styles: [".example-list{width:500px;max-width:100%;border:solid 1px #ccc;min-height:60px;display:block;background:#fff;border-radius:4px;overflow:hidden}.example-box{padding:20px 10px;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;cursor:move;background:#fff;font-size:14px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.badge{background-color:#50a450;color:#fff;min-width:55px;height:25px;border-radius:15px;display:flex;align-items:center;justify-content:center;font-weight:400}\n"] }]
|
|
171
174
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
|
|
172
175
|
type: Inject,
|
|
173
176
|
args: [CrocoHtmlOptionsToken]
|
|
@@ -187,4 +190,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
|
|
|
187
190
|
}], rendered: [{
|
|
188
191
|
type: Output
|
|
189
192
|
}] } });
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcm9jby1odG1sL3NyYy9saWIvY29tcG9uZW50cy9lZGl0b3IvdmlzdWFsLWVkaXRvci92aXN1YWwtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvci92aXN1YWwtZWRpdG9yL3Zpc3VhbC1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDM0csT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBUXhELE1BQU0sT0FBTyxxQkFBcUI7SUEyQmhDLFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJ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QXFCLGdVQzdCbEMseXNNQWlKQTs7MkZEcEhhLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxxQkFBcUI7OzBCQXdENUIsTUFBTTsyQkFBQyxxQkFBcUI7eUNBbkRSLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFhckIsVUFBVTtzQkFEVCxLQUFLO2dCQVFOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixJQUFJO3NCQUZILEtBQUs7O3NCQUNMLE1BQU07Z0JBa0JQLGFBQWE7c0JBRFosTUFBTTtnQkFJUCxRQUFRO3NCQURQLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCb2R5VGFnc0V4dGVuc2lvbnMgfSBmcm9tICcuLi8uLi8uLi9leHRlbnNpb25zL0JvZHlUYWdzRXh0ZW5zaW9ucyc7XHJcbmltcG9ydCB7IEZpbGVJbWFnZVRhZ0RhdGFDb25zdHMgfSBmcm9tICcuLi8uLi8uLi9leHRlbnNpb25zL0ltYWdlTWV0aG9kcyc7XHJcbmltcG9ydCB7IFRleHRNZXRob2RzIH0gZnJvbSAnLi4vLi4vLi4vZXh0ZW5zaW9ucy9UZXh0TWV0aG9kcyc7XHJcbmltcG9ydCB7IEV4dGVybmFsVmlkZW9UYWdEYXRhQ29uc3RzLCBFeHRlcm5hbFZpZGVvU3VwcG9ydGVkVHlwZXMgfSBmcm9tICcuLi8uLi8uLi9leHRlbnNpb25zL1ZpZGVvTWV0aG9kcyc7XHJcbmltcG9ydCB7IFhtbEV4dGVuc2lvbnMgfSBmcm9tICcuLi8uLi8uLi9leHRlbnNpb25zL1htbEV4dGVuc2lvbnMnO1xyXG5pbXBvcnQgeyBUYWdJdGVtLCBIdG1sQm9keVRhZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGaWxlUG9zdGluZ1N0YXJ0ZWQgfSBmcm9tICcuLi8uLi91cGxvYWQtZmlsZXMtYnRuL3VwbG9hZC1maWxlcy1idG4uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGVmYXVsdFRhZ3MgfSBmcm9tICcuL0RlZmF1bHRUYWdzJztcclxuaW1wb3J0IHsgQWxpZ25tZW50c0RhdGEsIEVBbGlnbm1lbnRzIH0gZnJvbSBcIi4vRGVmYXVsdEFsaWdtZW50c1wiO1xyXG5pbXBvcnQgeyBDcm9jb0h0bWxPcHRpb25zVG9rZW4gfSBmcm9tICcuLi8uLi8uLi9jb25zdHMnO1xyXG5pbXBvcnQgeyBDcm9jb0h0bWxPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vZXh0ZW5zaW9ucy9IdG1sRXh0cmFjdGlvbk1ldGhvZHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjcm9jby12aXN1YWwtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdmlzdWFsLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdmlzdWFsLWVkaXRvci5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFZpc3VhbEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgndGV4dEFyZWEnKSB0ZXh0QXJlYTogRWxlbWVudFJlZjtcclxuXHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgbG9hZGluZ1RleHQgPSBcItCY0LTRkdGCINC30LDQs9GA0YPQt9C60LBcIjtcclxuICBpc0FjdGl2ZUFkZFRleHQgPSBmYWxzZTtcclxuICB0ZXh0ID0gJyc7XHJcblxyXG4gIGFsaWdubWVudCA9IEVBbGlnbm1lbnRzLkxlZnQ7XHJcbiAgdGV4dFRhZyA9IERlZmF1bHRUYWdzLnRleHRUYWdzWzBdLnRhZztcclxuICB0ZXh0VGFnT3B0aW9ucyA9IERlZmF1bHRUYWdzLnRleHRUYWdzXHJcbiAgYWxpZ25tZW50T3B0aW9ucyA9IEFsaWdubWVudHNEYXRhXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2hvd01hcmtVcCA9IHRydWU7XHJcblxyXG4gIHRhZ3M6IFRhZ0l0ZW1bXSA9IFtdO1xyXG5cclxuICBzZWxlY3RlZFZhbHVlOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgdXNlSHRtbFJhdyA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIEBPdXRwdXQoKVxyXG4gIGh0bWw6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIGlzSHRtbFNldCgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0bWwuc3RhcnRzV2l0aChcIjxib2R5PlwiKTtcclxuICB9XHJcblxyXG4gIGNsZWFySHRtbCgpIHtcclxuICAgIHRoaXMuaHRtbCA9IFwiXCI7XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlQm9keVRhZ3MoKTtcclxuICB9XHJcblxyXG4gIGdldEh0bWwoKSB7XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlSHRtbCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHRtbDtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uSHRtbENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcmVuZGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIGJvZHlUYWdzOiBIdG1sQm9keVRhZ1tdID0gW107XHJcbiAgc2F2ZUJvZHlUYWdzOiBIdG1sQm9keVRhZ1tdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2RyZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQEluamVjdChDcm9jb0h0bWxPcHRpb25zVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENyb2NvSHRtbE9wdGlvbnMpIHsgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbmRlcmVkLmVtaXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jZHJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBhZGRUYWcoKTogdm9pZCB7XHJcbiAgICBsZXQgdGFnRGVzY3JpcHRpb24gPSB0aGlzLnRhZ3NcclxuICAgICAgLmZpbmQoeCA9PiB4LnRhZyA9PT0gdGhpcy5zZWxlY3RlZFZhbHVlKTtcclxuXHJcbiAgICBsZXQgYXR0cnMgPSB7fTtcclxuICAgIGxldCBpbm5lckh0bWwgPSBcIlwiO1xyXG5cclxuICAgIGlmIChUZXh0TWV0aG9kcy50ZXh0VGFncy5pbmNsdWRlcyh0YWdEZXNjcmlwdGlvbi50YWcpKSB7XHJcbiAgICAgIGF0dHJzW1wiaC1hbGlnblwiXSA9IEVBbGlnbm1lbnRzLkxlZnQ7XHJcbiAgICAgIGlubmVySHRtbCA9IFwi0JLQstC10LTQuNGC0LUg0LLQsNGIINGC0LXQutGB0YJcIjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRhZ0Rlc2NyaXB0aW9uLnRhZyA9PSBFeHRlcm5hbFZpZGVvVGFnRGF0YUNvbnN0cy5UYWdOYW1lKSB7XHJcbiAgICAgIGF0dHJzW0V4dGVybmFsVmlkZW9UYWdEYXRhQ29uc3RzLlZpZGVvVHlwZUF0dHJOYW1lXSA9IEV4dGVybmFsVmlkZW9TdXBwb3J0ZWRUeXBlcy5Zb3V0dWJlO1xyXG4gICAgICBhdHRyc1tFeHRlcm5hbFZpZGVvVGFnRGF0YUNvbnN0cy5MaW5rQXR0ck5hbWVdID0gbnVsbDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBhdHRyc1tGaWxlSW1hZ2VUYWdEYXRhQ29uc3RzLkZpbGVJZEF0dHJOYW1lXSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ib2R5VGFncy5wdXNoKHtcclxuICAgICAgdGFnRGVzY3JpcHRpb24sXHJcbiAgICAgIGlubmVySHRtbCxcclxuICAgICAgYXR0cmlidXRlczogYXR0cnMsXHJcbiAgICAgIHByZXNlbnRPckVkaXQ6IHRydWVcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVjYWxjdWxhdGVIdG1sKCk7XHJcbiAgfVxyXG5cclxuICBhZGRUZXh0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0FjdGl2ZUFkZFRleHQgPSAhdGhpcy5pc0FjdGl2ZUFkZFRleHQ7XHJcbiAgICB0aGlzLnNhdmVCb2R5VGFncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5VGFncykpO1xyXG4gICAgaWYgKHRoaXMuaXNBY3RpdmVBZGRUZXh0KSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudGV4dEFyZWEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNldFRleHRTdHlsZSgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VUZXh0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0FjdGl2ZUFkZFRleHQgPSAhdGhpcy5pc0FjdGl2ZUFkZFRleHQ7XHJcbiAgICB0aGlzLmJvZHlUYWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNhdmVCb2R5VGFncykpO1xyXG4gICAgdGhpcy5yZXNldFRleHRTdHlsZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRUZXh0U3R5bGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRleHQgPSAnJztcclxuICAgIHRoaXMuYWxpZ25tZW50ID0gRUFsaWdubWVudHMuTGVmdDtcclxuICAgIHRoaXMudGV4dFRhZyA9IERlZmF1bHRUYWdzLnRleHRUYWdzWzBdLnRhZztcclxuICB9XHJcblxyXG4gIG1vZGVsQ2hhbmdlZCgpIHtcclxuICAgIGxldCBsaW5lcyA9IHRoaXMudGV4dC5zcGxpdCgnXFxuJyk7XHJcbiAgICB0aGlzLmJvZHlUYWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNhdmVCb2R5VGFncykpO1xyXG4gICAgbGV0IHRhZ0Rlc2NyaXB0aW9uID0gdGhpcy50YWdzXHJcbiAgICAgIC5maW5kKHggPT4geC50YWcgPT09IHRoaXMudGV4dFRhZyk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAobGluZXNbaV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuYm9keVRhZ3MucHVzaCh7XHJcbiAgICAgICAgICB0YWdEZXNjcmlwdGlvbixcclxuICAgICAgICAgIGlubmVySHRtbDogbGluZXNbaV0sXHJcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgIFwiaC1hbGlnblwiOiBgJHt0aGlzLmFsaWdubWVudH1gXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcHJlc2VudE9yRWRpdDogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVIdG1sKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwb3N0RmlsZXNTdGFydGVkRXZlbnRIYW5kbGVyKG1vZGVsOiBGaWxlUG9zdGluZ1N0YXJ0ZWQpIHtcclxuICAgIHRoaXMubG9hZGluZ1RleHQgPSBcItCk0LDQudC70Ysg0LfQsNCz0YDRg9C20LDRjtGC0YHRjyDQvdCwINGB0LXRgNCy0LXRgFwiO1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYWRkVGFnQ3VzdG9tKHRhZzogSHRtbEJvZHlUYWcpIHtcclxuICAgIHRoaXMuYm9keVRhZ3MucHVzaCh0YWcpO1xyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZUh0bWwoKTtcclxuICB9XHJcblxyXG4gIGZpbGVzVGFnc1JlYWR5SGFuZGxlcih0YWdzOiBIdG1sQm9keVRhZ1tdKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5ib2R5VGFncy5wdXNoKHRhZ3NbaV0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZUh0bWwoKTtcclxuXHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8b2JqZWN0W10+KSB7XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5ib2R5VGFncywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgIHRoaXMucmVjYWxjdWxhdGVIdG1sKCk7XHJcbiAgfVxyXG5cclxuICBvblRhZ1NhdmVkSGFuZGxlcih0YWc6IEh0bWxCb2R5VGFnKSB7XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlSHRtbCgpO1xyXG4gIH1cclxuXHJcbiAgb25UYWdSZW1vdmVkSGFuZGxlcihpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmJvZHlUYWdzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlSHRtbCgpO1xyXG4gIH1cclxuXHJcbiAgcmVjYWxjdWxhdGVIdG1sKCkge1xyXG4gICAgbGV0IHJlc3VsdCA9IEJvZHlUYWdzRXh0ZW5zaW9ucy50b0h0bWwodGhpcy5ib2R5VGFncyk7XHJcbiAgICB0aGlzLmh0bWwgPSBYbWxFeHRlbnNpb25zLmZvcm1hdFhtbChcIjxib2R5PlwiICsgcmVzdWx0ICsgXCI8L2JvZHk+XCIpO1xyXG4gICAgdGhpcy5vbkh0bWxDaGFuZ2VkLmVtaXQodGhpcy5odG1sKTtcclxuICB9XHJcblxyXG4gIHJlY2FsY3VsYXRlQm9keVRhZ3MoKSB7XHJcbiAgICB0aGlzLmJvZHlUYWdzID0gQm9keVRhZ3NFeHRlbnNpb25zLmdldEJvZHlUYWdzKHRoaXMuaHRtbCwgdGhpcy5fb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVjYWxjdWxhdGVCb2R5VGFncygpO1xyXG5cclxuICAgIHRoaXMudGFncyA9IERlZmF1bHRUYWdzLmdldFRhZ3ModGhpcy51c2VIdG1sUmF3KTtcclxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMudGFnc1swXS50YWc7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJpc0xvYWRpbmdcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgICAgPG1hdC1zcGlubmVyIHN0eWxlPVwibWFyZ2luOjAgYXV0bztcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+e3tsb2FkaW5nVGV4dH19PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwcHg7XCI+PC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IFtoaWRkZW5dPVwiaXNMb2FkaW5nXCI+XHJcbiAgPG1hdC1jYXJkIHN0eWxlPVwibWFyZ2luOiAycHg7XCIgY2xhc3M9XCJtYXQtY2FyZFwiPlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZFRleHQoKVwiIGNsYXNzPVwidy0xMDBcIiBtYXQtc3Ryb2tlZC1idXR0b24gKm5nSWY9XCIhaXNBY3RpdmVBZGRUZXh0XCI+XHJcbiAgICAgICAgICAgINCU0L7QsdCw0LLQuNGC0Ywg0YLQtdC60YHRglxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNBY3RpdmVBZGRUZXh0XCI+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCIgPlxyXG4gICAgICAgICAgICA8dGV4dGFyZWFcclxuICAgICAgICAgICAgICAjYXV0b3NpemU9XCJjZGtUZXh0YXJlYUF1dG9zaXplXCJcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIGNka1RleHRhcmVhQXV0b3NpemVcclxuICAgICAgICAgICAgICBjZGtBdXRvc2l6ZU1pblJvd3M9XCIxXCJcclxuICAgICAgICAgICAgICBjZGtBdXRvc2l6ZU1heFJvd3M9XCI1XCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cItCi0LXQutGB0YJcIlxyXG4gICAgICAgICAgICAgICN0ZXh0QXJlYVxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwibW9kZWxDaGFuZ2VkKClcIlxyXG4gICAgICAgICAgICA+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LTEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+0KLQtdCzINC00LvRjyDRgtC10LrRgdGC0LA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInRleHRUYWdcIiAobmdNb2RlbENoYW5nZSk9XCJtb2RlbENoYW5nZWQoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiB0ZXh0VGFnT3B0aW9uc1wiIHZhbHVlPVwie3sgb3B0aW9uLnRhZyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBvcHRpb24uZGlzcGxheVZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LTEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+0JPQvtGA0LjQt9C+0L3RgtCw0LvRjNC90L7QtSDQstGL0YDQsNCy0L3QuNCy0LDQvdC40LU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cImFsaWdubWVudFwiIChuZ01vZGVsQ2hhbmdlKT1cIm1vZGVsQ2hhbmdlZCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGFsaWdubWVudE9wdGlvbnNcIiB2YWx1ZT1cInt7IG9wdGlvbi52YWx1ZSB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBvcHRpb24udGV4dCB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LW5vd3JhcCBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctMTAwXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZFRleHQoKVwiIGNsYXNzPVwidy0yMFwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4XCIgbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiICpuZ0lmPVwiaXNBY3RpdmVBZGRUZXh0XCI+XHJcbiAgICAgICAgICAgICAg0JTQvtCx0LDQstC40YLRjFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2VUZXh0KClcIiBjbGFzcz1cInctMjBcIiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJ3YXJuXCIgICpuZ0lmPVwiaXNBY3RpdmVBZGRUZXh0XCI+XHJcbiAgICAgICAgICAgICAg0J7RgtC80LXQvdC40YLRjFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPC9tYXQtY2FyZD5cclxuXHJcbiAgPGRpdiBzdHlsZT1cImhlaWdodDogMTBweDtcIj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgW2hpZGRlbl09XCJpc0xvYWRpbmdcIj5cclxuICA8bWF0LWNhcmQgc3R5bGU9XCJtYXJnaW46IDJweDtcIiBjbGFzcz1cIm1hdC1jYXJkXCI+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDBcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPtCS0YvQsdC10YDQuNGC0LUg0YLQtdCzPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwic2VsZWN0ZWRWYWx1ZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB0YWcgb2YgdGFnc1wiIFt2YWx1ZV09XCJ0YWcudGFnXCI+XHJcbiAgICAgICAgICAgICAgICB7e3RhZy5kaXNwbGF5VmFsdWV9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRUYWcoKVwiIGNsYXNzPVwidy0xMDBcIiBtYXQtc3Ryb2tlZC1idXR0b24+XHJcbiAgICAgICAgICAgINCU0L7QsdCw0LLQuNGC0Ywg0YLQtdCzXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPC9tYXQtY2FyZD5cclxuXHJcbiAgPGRpdiBzdHlsZT1cImhlaWdodDogMTBweDtcIj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgW2hpZGRlbl09XCJpc0xvYWRpbmdcIj5cclxuICA8bWF0LWNhcmQgc3R5bGU9XCJtYXJnaW46IDJweDtcIiBjbGFzcz1cIm1hdC1jYXJkXCI+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgPGNyb2NvLWh0bWwtYWRkLWZpbGVzLWJ0biAoZmlsZXNUYWdzUmVhZHkpPVwiZmlsZXNUYWdzUmVhZHlIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9zdEZpbGVzU3RhcnRlZCk9XCJwb3N0RmlsZXNTdGFydGVkRXZlbnRIYW5kbGVyKCRldmVudClcIiBjbGFzcz1cInctMTAwXCI+XHJcbiAgICAgICAgICA8L2Nyb2NvLWh0bWwtYWRkLWZpbGVzLWJ0bj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPC9tYXQtY2FyZD5cclxuXHJcbiAgPGRpdiBzdHlsZT1cImhlaWdodDogMTBweDtcIj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgW2hpZGRlbl09XCJpc0xvYWRpbmdcIj5cclxuICAgIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0YWcgb2YgYm9keVRhZ3M7IGxldCBpID0gaW5kZXhcIiBjZGtEcmFnPlxyXG4gICAgICAgICAgICA8bWF0LWNhcmQgc3R5bGU9XCJtYXJnaW46IDJweDtcIiBjbGFzcz1cIm1hdC1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLWhhbmRsZVwiIGNka0RyYWdIYW5kbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRweFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMCA5aDRWNmgzbC01LTUtNSA1aDN2M3ptLTEgMUg2VjdsLTUgNSA1IDV2LTNoM3YtNHptMTQgMmwtNS01djNoLTN2NGgzdjNsNS01em0tOSAzaC00djNIN2w1IDUgNS01aC0zdi0zelwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYWRnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0YWcudGFnRGVzY3JpcHRpb24uZGlzcGxheVZhbHVlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDE1cHg7XCI+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxjcm9jby1odG1sLW1haW4tZWRpdG9yLWJsb2NrIFt0YWddPVwidGFnXCIgKG9uVGFnU2F2ZWQpPVwib25UYWdTYXZlZEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvblRhZ1JlbW92ZWQpPVwib25UYWdSZW1vdmVkSGFuZGxlcihpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY3JvY28taHRtbC1tYWluLWVkaXRvci1ibG9jaz5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgPC9tYXQtY2FyZD5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcbiJdfQ==
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcm9jby1odG1sL3NyYy9saWIvY29tcG9uZW50cy9lZGl0b3IvdmlzdWFsLWVkaXRvci92aXN1YWwtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvci92aXN1YWwtZWRpdG9yL3Zpc3VhbC1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsa0JBQWtCLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDOUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0QsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixvQkFBb0IsRUFDckIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQUd4RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyw4QkFBOEIsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsOERB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RUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN0QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkQsQ0FBQzs4R0EzTFUscUJBQXFCLG1EQXNEdEIscUJBQXFCO2tHQXREcEIscUJBQXFCLGdVQ2xDbEMsMGxOQTJLQTs7MkZEeklhLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxxQkFBcUI7OzBCQTBENUIsTUFBTTsyQkFBQyxxQkFBcUI7eUNBckRSLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFhckIsVUFBVTtzQkFEVCxLQUFLO2dCQVVOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixJQUFJO3NCQUZILEtBQUs7O3NCQUNMLE1BQU07Z0JBa0JQLGFBQWE7c0JBRFosTUFBTTtnQkFJUCxRQUFRO3NCQURQLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LCBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JvZHlUYWdzRXh0ZW5zaW9ucywgRXh0ZXJuYWxWaWRlb1N1cHBvcnRlZFR5cGVzLCBUZXh0VGFnc30gZnJvbSAnLi4vLi4vLi4vZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBGaWxlSW1hZ2VUYWdEYXRhQ29uc3RzIH0gZnJvbSAnLi4vLi4vLi4vZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBUZXh0TWV0aG9kcyB9IGZyb20gJy4uLy4uLy4uL2V4dGVuc2lvbnMnO1xuaW1wb3J0IHtcbiAgRXh0ZXJuYWxWaWRlb1RhZ0RhdGFDb25zdHMsXG4gIEV4dGVybmFsVmlkZW9QbGF5ZXJzXG59IGZyb20gJy4uLy4uLy4uL2V4dGVuc2lvbnMnO1xuaW1wb3J0IHsgWG1sRXh0ZW5zaW9ucyB9IGZyb20gJy4uLy4uLy4uL2V4dGVuc2lvbnMnO1xuaW1wb3J0IHsgVGFnSXRlbSwgSHRtbEJvZHlUYWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvbW9kZWxzJztcbmltcG9ydCB7IEZpbGVQb3N0aW5nU3RhcnRlZCB9IGZyb20gJy4uLy4uL3VwbG9hZC1maWxlcy1idG4vdXBsb2FkLWZpbGVzLWJ0bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVmYXVsdFRhZ3MgfSBmcm9tICcuL0RlZmF1bHRUYWdzJztcbmltcG9ydCB7IEFsaWdubWVudHNEYXRhLCBFQWxpZ25tZW50cyB9IGZyb20gXCIuL0RlZmF1bHRBbGlnbWVudHNcIjtcbmltcG9ydCB7IENyb2NvSHRtbE9wdGlvbnNUb2tlbiB9IGZyb20gJy4uLy4uLy4uL2NvbnN0cyc7XG5pbXBvcnQgeyBDcm9jb0h0bWxPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vZXh0ZW5zaW9ucy9IdG1sRXh0cmFjdGlvbk1ldGhvZHMnO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdExpbmtZb3VUdWJlID0gXCJodHRwczovL3lvdXR1LmJlL2p6Qm5lYVdTc3dZXCI7XG5leHBvcnQgY29uc3QgZGVmYXVsdExpbmtWayA9IFwiaHR0cHM6Ly92ay5jb20vdmlkZW9fZXh0LnBocD9vaWQ9LTIyODIyMzA1JmlkPTQ1NjI0MTg2NCZoZD0yXCI7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcm9jby12aXN1YWwtZWRpdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Zpc3VhbC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92aXN1YWwtZWRpdG9yLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBWaXN1YWxFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCd0ZXh0QXJlYScpIHRleHRBcmVhOiBFbGVtZW50UmVmO1xuXG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuICBsb2FkaW5nVGV4dCA9IFwi0JjQtNGR0YIg0LfQsNCz0YDRg9C30LrQsFwiO1xuICBpc0FjdGl2ZUFkZFRleHQgPSBmYWxzZTtcbiAgdGV4dCA9ICcnO1xuXG4gIGFsaWdubWVudCA9IEVBbGlnbm1lbnRzLkxlZnQ7XG4gIHRleHRUYWcgPSBEZWZhdWx0VGFncy50ZXh0VGFnc1swXS50YWc7XG4gIHRleHRUYWdPcHRpb25zID0gRGVmYXVsdFRhZ3MudGV4dFRhZ3NcbiAgYWxpZ25tZW50T3B0aW9ucyA9IEFsaWdubWVudHNEYXRhXG5cbiAgQElucHV0KClcbiAgc2hvd01hcmtVcCA9IHRydWU7XG5cbiAgdGFnczogVGFnSXRlbVtdID0gW107XG4gIHZpZGVvUGxheWVycyA9IEV4dGVybmFsVmlkZW9QbGF5ZXJzXG4gIHNlbGVjdGVkVmFsdWU6IHN0cmluZztcbiAgc2VsZWN0ZWRWaWRlb1BsYXllcjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRXh0ZXJuYWxWaWRlb1RhZ0RhdGFDb25zdHMgPSBFeHRlcm5hbFZpZGVvVGFnRGF0YUNvbnN0cztcblxuICBASW5wdXQoKVxuICB1c2VIdG1sUmF3ID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgQE91dHB1dCgpXG4gIGh0bWw6IHN0cmluZyA9IFwiXCI7XG5cbiAgaXNIdG1sU2V0KCkge1xuICAgIHJldHVybiB0aGlzLmh0bWwuc3RhcnRzV2l0aChcIjxib2R5PlwiKTtcbiAgfVxuXG4gIGNsZWFySHRtbCgpIHtcbiAgICB0aGlzLmh0bWwgPSBcIlwiO1xuICAgIHRoaXMucmVjYWxjdWxhdGVCb2R5VGFncygpO1xuICB9XG5cbiAgZ2V0SHRtbCgpIHtcbiAgICB0aGlzLnJlY2FsY3VsYXRlSHRtbCgpO1xuICAgIHJldHVybiB0aGlzLmh0bWw7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgb25IdG1sQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBPdXRwdXQoKVxuICByZW5kZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBib2R5VGFnczogSHRtbEJvZHlUYWdbXSA9IFtdO1xuICBzYXZlQm9keVRhZ3M6IEh0bWxCb2R5VGFnW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jZHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChDcm9jb0h0bWxPcHRpb25zVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENyb2NvSHRtbE9wdGlvbnMpIHsgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVkLmVtaXQodHJ1ZSk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5fY2RyZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYWRkVGFnKCk6IHZvaWQge1xuICAgIGxldCB0YWdEZXNjcmlwdGlvbiA9IHRoaXMudGFnc1xuICAgICAgLmZpbmQoeCA9PiB4LnRhZyA9PT0gdGhpcy5zZWxlY3RlZFZhbHVlKTtcblxuICAgIGxldCBhdHRycyA9IHt9O1xuICAgIGxldCBpbm5lckh0bWwgPSBcIlwiO1xuXG4gICAgaWYgKFRleHRUYWdzLmFsbFRleHRUYWdzLmluY2x1ZGVzKHRhZ0Rlc2NyaXB0aW9uLnRhZykpIHtcbiAgICAgIGF0dHJzW1wiaC1hbGlnblwiXSA9IEVBbGlnbm1lbnRzLkxlZnQ7XG4gICAgICBpbm5lckh0bWwgPSBcItCS0LLQtdC00LjRgtC1INCy0LDRiCDRgtC10LrRgdGCXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRhZ0Rlc2NyaXB0aW9uLnRhZyA9PSBFeHRlcm5hbFZpZGVvVGFnRGF0YUNvbnN0cy5UYWdOYW1lKSB7XG4gICAgICBhdHRyc1tFeHRlcm5hbFZpZGVvVGFnRGF0YUNvbnN0cy5WaWRlb1R5cGVBdHRyTmFtZV0gPSB0aGlzLnNlbGVjdGVkVmlkZW9QbGF5ZXI7XG4gICAgICBhdHRyc1tFeHRlcm5hbFZpZGVvVGFnRGF0YUNvbnN0cy5MaW5rQXR0ck5hbWVdID0gdGhpcy5zZWxlY3RlZFZpZGVvUGxheWVyID09PSBFeHRlcm5hbFZpZGVvU3VwcG9ydGVkVHlwZXMuVmtWaWRlbyA/IGRlZmF1bHRMaW5rVmsgOiBkZWZhdWx0TGlua1lvdVR1YmU7XG5cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBhdHRyc1tGaWxlSW1hZ2VUYWdEYXRhQ29uc3RzLkZpbGVJZEF0dHJOYW1lXSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuYm9keVRhZ3MucHVzaCh7XG4gICAgICB0YWdEZXNjcmlwdGlvbixcbiAgICAgIGlubmVySHRtbCxcbiAgICAgIGF0dHJpYnV0ZXM6IGF0dHJzLFxuICAgICAgcHJlc2VudE9yRWRpdDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWNhbGN1bGF0ZUh0bWwoKTtcbiAgfVxuXG4gIGFkZFRleHQoKTogdm9pZCB7XG4gICAgdGhpcy5pc0FjdGl2ZUFkZFRleHQgPSAhdGhpcy5pc0FjdGl2ZUFkZFRleHQ7XG4gICAgdGhpcy5zYXZlQm9keVRhZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYm9keVRhZ3MpKTtcbiAgICBpZiAodGhpcy5pc0FjdGl2ZUFkZFRleHQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRleHRBcmVhLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0pXG4gICAgfVxuICAgIHRoaXMucmVzZXRUZXh0U3R5bGUoKTtcbiAgfVxuXG4gIGNsb3NlVGV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQWN0aXZlQWRkVGV4dCA9ICF0aGlzLmlzQWN0aXZlQWRkVGV4dDtcbiAgICB0aGlzLmJvZHlUYWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNhdmVCb2R5VGFncykpO1xuICAgIHRoaXMucmVzZXRUZXh0U3R5bGUoKTtcbiAgfVxuXG4gIHJlc2V0VGV4dFN0eWxlKCk6IHZvaWQge1xuICAgIHRoaXMudGV4dCA9ICcnO1xuICAgIHRoaXMuYWxpZ25tZW50ID0gRUFsaWdubWVudHMuTGVmdDtcbiAgICB0aGlzLnRleHRUYWcgPSBEZWZhdWx0VGFncy50ZXh0VGFnc1swXS50YWc7XG4gIH1cblxuICBtb2RlbENoYW5nZWQoKSB7XG4gICAgbGV0IGxpbmVzID0gdGhpcy50ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICB0aGlzLmJvZHlUYWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNhdmVCb2R5VGFncykpO1xuICAgIGxldCB0YWdEZXNjcmlwdGlvbiA9IHRoaXMudGFnc1xuICAgICAgLmZpbmQoeCA9PiB4LnRhZyA9PT0gdGhpcy50ZXh0VGFnKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaW5lc1tpXS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYm9keVRhZ3MucHVzaCh7XG4gICAgICAgICAgdGFnRGVzY3JpcHRpb24sXG4gICAgICAgICAgaW5uZXJIdG1sOiBsaW5lc1tpXSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBcImgtYWxpZ25cIjogYCR7dGhpcy5hbGlnbm1lbnR9YFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJlc2VudE9yRWRpdDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZUh0bWwoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIHBvc3RGaWxlc1N0YXJ0ZWRFdmVudEhhbmRsZXIobW9kZWw6IEZpbGVQb3N0aW5nU3RhcnRlZCkge1xuICAgIHRoaXMubG9hZGluZ1RleHQgPSBcItCk0LDQudC70Ysg0LfQsNCz0YDRg9C20LDRjtGC0YHRjyDQvdCwINGB0LXRgNCy0LXRgFwiO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIGFkZFRhZ0N1c3RvbSh0YWc6IEh0bWxCb2R5VGFnKSB7XG4gICAgdGhpcy5ib2R5VGFncy5wdXNoKHRhZyk7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUh0bWwoKTtcbiAgfVxuXG4gIGZpbGVzVGFnc1JlYWR5SGFuZGxlcih0YWdzOiBIdG1sQm9keVRhZ1tdKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmJvZHlUYWdzLnB1c2godGFnc1tpXSk7XG4gICAgfVxuICAgIHRoaXMucmVjYWxjdWxhdGVIdG1sKCk7XG5cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8b2JqZWN0W10+KSB7XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuYm9keVRhZ3MsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUh0bWwoKTtcbiAgfVxuXG4gIG9uVGFnU2F2ZWRIYW5kbGVyKHRhZzogSHRtbEJvZHlUYWcpIHtcbiAgICB0aGlzLnJlY2FsY3VsYXRlSHRtbCgpO1xuICB9XG5cbiAgb25UYWdSZW1vdmVkSGFuZGxlcihpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5ib2R5VGFncy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMucmVjYWxjdWxhdGVIdG1sKCk7XG4gIH1cblxuICByZWNhbGN1bGF0ZUh0bWwoKSB7XG4gICAgbGV0IHJlc3VsdCA9IEJvZHlUYWdzRXh0ZW5zaW9ucy50b0h0bWwodGhpcy5ib2R5VGFncyk7XG4gICAgdGhpcy5odG1sID0gWG1sRXh0ZW5zaW9ucy5mb3JtYXRYbWwoXCI8Ym9keT5cIiArIHJlc3VsdCArIFwiPC9ib2R5PlwiKTtcbiAgICB0aGlzLm9uSHRtbENoYW5nZWQuZW1pdCh0aGlzLmh0bWwpO1xuICB9XG5cbiAgcmVjYWxjdWxhdGVCb2R5VGFncygpIHtcbiAgICB0aGlzLmJvZHlUYWdzID0gQm9keVRhZ3NFeHRlbnNpb25zLmdldEJvZHlUYWdzKHRoaXMuaHRtbCwgdGhpcy5fb3B0aW9ucyk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY2FsY3VsYXRlQm9keVRhZ3MoKTtcblxuICAgIHRoaXMudGFncyA9IERlZmF1bHRUYWdzLmdldFRhZ3ModGhpcy51c2VIdG1sUmF3KTtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLnRhZ3NbMF0udGFnO1xuICAgIHRoaXMuc2VsZWN0ZWRWaWRlb1BsYXllciA9IHRoaXMudmlkZW9QbGF5ZXJzWzBdLnR5cGU7XG4gIH1cbn1cbiIsIkBpZiAoaXNMb2FkaW5nKSB7XG4gIDxkaXY+XG4gICAgPGRpdj5cbiAgICAgIDxtYXQtc3Bpbm5lciBzdHlsZT1cIm1hcmdpbjowIGF1dG87XCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+e3tsb2FkaW5nVGV4dH19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzdHlsZT1cImhlaWdodDogMTBweDtcIj48L2Rpdj5cbiAgPC9kaXY+XG59XG48ZGl2IFtoaWRkZW5dPVwiaXNMb2FkaW5nXCI+XG4gIDxtYXQtY2FyZCBzdHlsZT1cIm1hcmdpbjogMnB4O1wiIGNsYXNzPVwibWF0LWNhcmRcIj5cbiAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgQGlmICghaXNBY3RpdmVBZGRUZXh0KSB7XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRUZXh0KClcIiBjbGFzcz1cInctMTAwXCIgbWF0LXN0cm9rZWQtYnV0dG9uPlxuICAgICAgICAgICAgICDQlNC+0LHQsNCy0LjRgtGMINGC0LXQutGB0YJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGlzQWN0aXZlQWRkVGV4dCkge1xuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDBcIiA+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgICNhdXRvc2l6ZT1cImNka1RleHRhcmVhQXV0b3NpemVcIlxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgY2RrVGV4dGFyZWFBdXRvc2l6ZVxuICAgICAgICAgICAgICAgIGNka0F1dG9zaXplTWluUm93cz1cIjFcIlxuICAgICAgICAgICAgICAgIGNka0F1dG9zaXplTWF4Um93cz1cIjVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi0KLQtdC60YHRglwiXG4gICAgICAgICAgICAgICAgI3RleHRBcmVhXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJtb2RlbENoYW5nZWQoKVwiXG4gICAgICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD7QotC10LMg0LTQu9GPINGC0LXQutGB0YLQsDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInRleHRUYWdcIiAobmdNb2RlbENoYW5nZSk9XCJtb2RlbENoYW5nZWQoKVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiB0ZXh0VGFnT3B0aW9uczsgdHJhY2sgb3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cInt7IG9wdGlvbi50YWcgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLmRpc3BsYXlWYWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD7Qk9C+0YDQuNC30L7QvdGC0LDQu9GM0L3QvtC1INCy0YvRgNCw0LLQvdC40LLQsNC90LjQtTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cImFsaWdubWVudFwiIChuZ01vZGVsQ2hhbmdlKT1cIm1vZGVsQ2hhbmdlZCgpXCI+XG4gICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIGFsaWdubWVudE9wdGlvbnM7IHRyYWNrIG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJ7eyBvcHRpb24udmFsdWUgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLnRleHQgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ub3dyYXAganVzdGlmeS1jb250ZW50LWVuZCB3LTEwMFwiPlxuICAgICAgICAgICAgQGlmIChpc0FjdGl2ZUFkZFRleHQpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkVGV4dCgpXCIgY2xhc3M9XCJ3LTIwXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHhcIiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAg0JTQvtCx0LDQstC40YLRjFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoaXNBY3RpdmVBZGRUZXh0KSB7XG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsb3NlVGV4dCgpXCIgY2xhc3M9XCJ3LTIwXCIgbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwid2FyblwiID5cbiAgICAgICAgICAgICAgICDQntGC0LzQtdC90LjRgtGMXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICA8L21hdC1jYXJkPlxuXG4gIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwcHg7XCI+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IFtoaWRkZW5dPVwiaXNMb2FkaW5nXCI+XG4gIDxtYXQtY2FyZCBzdHlsZT1cIm1hcmdpbjogMnB4O1wiIGNsYXNzPVwibWF0LWNhcmRcIj5cbiAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDBcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD7QktGL0LHQtdGA0LjRgtC1INGC0LXQszwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFZhbHVlXCI+XG4gICAgICAgICAgICAgIEBmb3IgKHRhZyBvZiB0YWdzOyB0cmFjayB0YWcpIHtcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidGFnLnRhZ1wiPlxuICAgICAgICAgICAgICAgICAge3t0YWcuZGlzcGxheVZhbHVlfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChzZWxlY3RlZFZhbHVlID09PSBFeHRlcm5hbFZpZGVvVGFnRGF0YUNvbnN0cy5UYWdOYW1lKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDBcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPtCS0YvQsdC10YDQuNGC0LUg0LLQuNC00LXQvtC/0LvQtdC10YA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFZpZGVvUGxheWVyXCI+XG4gICAgICAgICAgICAgICAgQGZvciAodmlkZW9QbGF5ZXIgb2YgdmlkZW9QbGF5ZXJzOyB0cmFjayB2aWRlb1BsYXllci50eXBlKSB7XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidmlkZW9QbGF5ZXIudHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICB7e3ZpZGVvUGxheWVyLmRpc3BsYXlWYWx1ZX19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRUYWcoKVwiIGNsYXNzPVwidy0xMDBcIiBtYXQtc3Ryb2tlZC1idXR0b24+XG4gICAgICAgICAgICDQlNC+0LHQsNCy0LjRgtGMINGC0LXQs1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cblxuICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMHB4O1wiPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBbaGlkZGVuXT1cImlzTG9hZGluZ1wiPlxuICA8bWF0LWNhcmQgc3R5bGU9XCJtYXJnaW46IDJweDtcIiBjbGFzcz1cIm1hdC1jYXJkXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgIDxjcm9jby1odG1sLWFkZC1maWxlcy1idG4gKGZpbGVzVGFnc1JlYWR5KT1cImZpbGVzVGFnc1JlYWR5SGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgIChwb3N0RmlsZXNTdGFydGVkKT1cInBvc3RGaWxlc1N0YXJ0ZWRFdmVudEhhbmRsZXIoJGV2ZW50KVwiIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICA8L2Nyb2NvLWh0bWwtYWRkLWZpbGVzLWJ0bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIDwvbWF0LWNhcmQ+XG5cbiAgPGRpdiBzdHlsZT1cImhlaWdodDogMTBweDtcIj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgW2hpZGRlbl09XCJpc0xvYWRpbmdcIj5cbiAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiPlxuICAgIEBmb3IgKHRhZyBvZiBib2R5VGFnczsgdHJhY2sgdGFnOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgPGRpdiBjZGtEcmFnPlxuICAgICAgICA8bWF0LWNhcmQgc3R5bGU9XCJtYXJnaW46IDJweDtcIiBjbGFzcz1cIm1hdC1jYXJkXCI+XG4gICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLWhhbmRsZVwiIGNka0RyYWdIYW5kbGU+XG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0cHhcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xMCA5aDRWNmgzbC01LTUtNSA1aDN2M3ptLTEgMUg2VjdsLTUgNSA1IDV2LTNoM3YtNHptMTQgMmwtNS01djNoLTN2NGgzdjNsNS01em0tOSAzaC00djNIN2w1IDUgNS01aC0zdi0zelwiPlxuICAgICAgICAgICAgICAgICAgPC9wYXRoPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhZGdlXCI+XG4gICAgICAgICAgICAgICAgICB7e3RhZy50YWdEZXNjcmlwdGlvbi5kaXNwbGF5VmFsdWV9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImhlaWdodDogMTVweDtcIj48L2Rpdj5cbiAgICAgICAgICAgIDxjcm9jby1odG1sLW1haW4tZWRpdG9yLWJsb2NrIFt0YWddPVwidGFnXCIgKG9uVGFnU2F2ZWQpPVwib25UYWdTYXZlZEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvblRhZ1JlbW92ZWQpPVwib25UYWdSZW1vdmVkSGFuZGxlcihpKVwiPlxuICAgICAgICAgICAgPC9jcm9jby1odG1sLW1haW4tZWRpdG9yLWJsb2NrPlxuICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPC9tYXQtY2FyZD5cbiAgICAgICAgPGRpdiBzdHlsZT1cImhlaWdodDogMTBweDtcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG5cblxuXG5cblxuIl19
|