@libs-ui/components-inputs-quill 0.2.85 → 0.2.88
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.
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, model, output, signal } from '@angular/core';
|
|
2
2
|
import { LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs-valid';
|
|
3
3
|
import { LibsUiComponentsModalComponent } from '@libs-ui/components-modal';
|
|
4
|
-
import {
|
|
4
|
+
import { patternUrl } from '@libs-ui/utils';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export class LibsUiComponentsInputsQuillLinkComponent {
|
|
7
7
|
dataLink = signal({ title: '', link: '' });
|
|
8
|
-
patternLink = signal(
|
|
8
|
+
patternLink = signal(patternUrl());
|
|
9
9
|
inputValidFunctionControl = signal([]);
|
|
10
10
|
zIndex = model(1200);
|
|
11
11
|
title = model();
|
|
@@ -51,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
51
51
|
LibsUiComponentsInputsValidComponent
|
|
52
52
|
], template: "<libs_ui-components-modal [title]=\"'i18n_insert_link'\"\n [mode]=\"'center'\"\n [height]=\"'auto'\"\n [width]=\"'598px'\"\n [headerConfig]=\"{ignoreHeaderTheme: true}\"\n [zIndex]=\"zIndex()\"\n (outEvent)=\"handlerEvent($event)\">\n <div class=\"libs-ui-modal-body-custom\">\n <libs_ui-components-inputs-valid [labelConfig]=\"{labelLeft: 'i18n_content', required: true}\"\n [(item)]=\"dataLink\"\n [fieldNameBind]=\"'title'\"\n [placeholder]=\"'i18n_import_content'\"\n [validRequired]=\"{isRequired: true}\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\" />\n <div class=\"mt-[16px]\">\n <libs_ui-components-inputs-valid [labelConfig]=\"{labelLeft: 'Link', required: true}\"\n [(item)]=\"dataLink\"\n [fieldNameBind]=\"'link'\"\n [placeholder]=\"'https:/\u2026'\"\n [validRequired]=\"{isRequired: true}\"\n [validPattern]=\"[{pattern: patternLink(), valuePatternShowError: false}]\"\n [keySelectedUnitLeft]=\"'1'\"\n [unitsLeft]=\"[{id:'1',label:'URL'}]\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\" />\n </div>\n </div>\n</libs_ui-components-modal>\n" }]
|
|
53
53
|
}] });
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3F1aWxsL3NyYy9saW5rL2xpbmsuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9xdWlsbC9zcmMvbGluay9saW5rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFtQyxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3pILE9BQU8sRUFBRSw4QkFBOEIsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBYTVDLE1BQU0sT0FBTyx3Q0FBd0M7SUFFekMsUUFBUSxHQUFHLE1BQU0sQ0FBa0MsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLFdBQVcsR0FBRyxNQUFNLENBQVMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUU3Qyx5QkFBeUIsR0FBRyxNQUFNLENBQXlDLEVBQUUsQ0FBQyxDQUFDO0lBRXZGLE1BQU0sR0FBRyxLQUFLLENBQVMsSUFBSSxDQUFDLENBQUM7SUFDN0IsS0FBSyxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQ3hCLElBQUksR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUVkLFFBQVEsR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUMxQixXQUFXLEdBQUcsTUFBTSxFQUFtQyxDQUFDO0lBRWpFLFFBQVE7UUFDTixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7SUFDSCxDQUFDO0lBRVMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLEtBQXNDO1FBQzVFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVPLEtBQUssQ0FBQyxRQUFRO1FBQ3BCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLENBQUMsTUFBTSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRVMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUF1QjtRQUNsRCxJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7d0dBN0NVLHdDQUF3Qzs0RkFBeEMsd0NBQXdDLHFsQkNoQnJELG9xQ0EyQkEsNENEZkksOEJBQThCLG10QkFDOUIsb0NBQW9DOzs0RkFHM0Isd0NBQXdDO2tCQVhwRCxTQUFTOytCQUVFLHNDQUFzQyxjQUVwQyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsOEJBQThCO3dCQUM5QixvQ0FBb0M7cUJBQ3JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgbW9kZWwsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXZhbGlkJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNNb2RhbENvbXBvbmVudCwgVFlQRV9NT0RBTF9FVkVOVCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbW9kYWwnO1xuaW1wb3J0IHsgcGF0dGVyblVybCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWlucHV0cy1xdWlsbC1saW5rJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpbmsuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIExpYnNVaUNvbXBvbmVudHNNb2RhbENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzSW5wdXRzVmFsaWRDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzUXVpbGxMaW5rQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwcm90ZWN0ZWQgZGF0YUxpbmsgPSBzaWduYWw8eyB0aXRsZTogc3RyaW5nLCBsaW5rOiBzdHJpbmcgfT4oeyB0aXRsZTogJycsIGxpbms6ICcnIH0pO1xuICBwcm90ZWN0ZWQgcGF0dGVybkxpbmsgPSBzaWduYWw8UmVnRXhwPihwYXR0ZXJuVXJsKCkpO1xuXG4gIHByaXZhdGUgaW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbCA9IHNpZ25hbDxBcnJheTxJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50Pj4oW10pO1xuXG4gIHpJbmRleCA9IG1vZGVsPG51bWJlcj4oMTIwMCk7XG4gIHRpdGxlID0gbW9kZWw8c3RyaW5nPigpO1xuICBsaW5rID0gbW9kZWw8c3RyaW5nPigpO1xuXG4gIHJlYWRvbmx5IG91dENsb3NlID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG91dFNhdmVMaW5rID0gb3V0cHV0PHsgdGl0bGU6IHN0cmluZywgbGluazogc3RyaW5nIH0+KCk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLnRpdGxlKCk7XG4gICAgY29uc3QgbGluayA9IHRoaXMubGluaygpO1xuICAgIGlmICh0aXRsZSB8fCBsaW5rKSB7XG4gICAgICB0aGlzLmRhdGFMaW5rLnVwZGF0ZShpdGVtID0+ICh7IC4uLml0ZW0sIHRpdGxlOiB0aXRsZSB8fCAnJywgbGluazogbGluayB8fCAnJyB9KSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJGdW5jdGlvbnNDb250cm9sKGV2ZW50OiBJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5pbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sLnVwZGF0ZShpdGVtcyA9PiBbLi4uaXRlbXMsIGV2ZW50XSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKCkge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuaW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbCgpKSB7XG4gICAgICBpZiAoIShhd2FpdCBjb250cm9sLmNoZWNrSXNWYWxpZCgpKSkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckV2ZW50KGV2ZW50OiBUWVBFX01PREFMX0VWRU5UKSB7XG4gICAgaWYgKGV2ZW50ICE9PSAnYWdyZWUnKSB7XG4gICAgICB0aGlzLm91dENsb3NlLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGF3YWl0IHRoaXMudmFsaWRhdGUoKSkge1xuICAgICAgdGhpcy5vdXRTYXZlTGluay5lbWl0KHRoaXMuZGF0YUxpbmsoKSk7XG4gICAgICB0aGlzLm91dENsb3NlLmVtaXQoKTtcbiAgICB9XG4gIH1cblxufVxuIiwiPGxpYnNfdWktY29tcG9uZW50cy1tb2RhbCBbdGl0bGVdPVwiJ2kxOG5faW5zZXJ0X2xpbmsnXCJcbiAgW21vZGVdPVwiJ2NlbnRlcidcIlxuICBbaGVpZ2h0XT1cIidhdXRvJ1wiXG4gIFt3aWR0aF09XCInNTk4cHgnXCJcbiAgW2hlYWRlckNvbmZpZ109XCJ7aWdub3JlSGVhZGVyVGhlbWU6IHRydWV9XCJcbiAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gIChvdXRFdmVudCk9XCJoYW5kbGVyRXZlbnQoJGV2ZW50KVwiPlxuICA8ZGl2IGNsYXNzPVwibGlicy11aS1tb2RhbC1ib2R5LWN1c3RvbVwiPlxuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXZhbGlkIFtsYWJlbENvbmZpZ109XCJ7bGFiZWxMZWZ0OiAnaTE4bl9jb250ZW50JywgcmVxdWlyZWQ6IHRydWV9XCJcbiAgICAgIFsoaXRlbSldPVwiZGF0YUxpbmtcIlxuICAgICAgW2ZpZWxkTmFtZUJpbmRdPVwiJ3RpdGxlJ1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ2kxOG5faW1wb3J0X2NvbnRlbnQnXCJcbiAgICAgIFt2YWxpZFJlcXVpcmVkXT1cIntpc1JlcXVpcmVkOiB0cnVlfVwiXG4gICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25zQ29udHJvbCgkZXZlbnQpXCIgLz5cbiAgICA8ZGl2IGNsYXNzPVwibXQtWzE2cHhdXCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZCBbbGFiZWxDb25maWddPVwie2xhYmVsTGVmdDogJ0xpbmsnLCByZXF1aXJlZDogdHJ1ZX1cIlxuICAgICAgICBbKGl0ZW0pXT1cImRhdGFMaW5rXCJcbiAgICAgICAgW2ZpZWxkTmFtZUJpbmRdPVwiJ2xpbmsnXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidodHRwczov4oCmJ1wiXG4gICAgICAgIFt2YWxpZFJlcXVpcmVkXT1cIntpc1JlcXVpcmVkOiB0cnVlfVwiXG4gICAgICAgIFt2YWxpZFBhdHRlcm5dPVwiW3twYXR0ZXJuOiBwYXR0ZXJuTGluaygpLCB2YWx1ZVBhdHRlcm5TaG93RXJyb3I6IGZhbHNlfV1cIlxuICAgICAgICBba2V5U2VsZWN0ZWRVbml0TGVmdF09XCInMSdcIlxuICAgICAgICBbdW5pdHNMZWZ0XT1cIlt7aWQ6JzEnLGxhYmVsOidVUkwnfV1cIlxuICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25zQ29udHJvbCgkZXZlbnQpXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2xpYnNfdWktY29tcG9uZW50cy1tb2RhbD5cbiJdfQ==
|
|
@@ -9,7 +9,7 @@ import { LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs
|
|
|
9
9
|
import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
|
|
10
10
|
import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
|
|
11
11
|
import { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';
|
|
12
|
-
import { ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_LENGTH, ERROR_MESSAGE_MIN_LENGTH, get, isNil,
|
|
12
|
+
import { ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_LENGTH, ERROR_MESSAGE_MIN_LENGTH, get, isNil, patternUrl, set, xssFilter } from '@libs-ui/utils';
|
|
13
13
|
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
14
14
|
import Quill from 'quill';
|
|
15
15
|
import { fromEvent, Subject, takeUntil } from 'rxjs';
|
|
@@ -321,7 +321,7 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
321
321
|
const links = await this.uploadImageConfig().functionUploadImage?.(images);
|
|
322
322
|
if (links && links.length) {
|
|
323
323
|
links.forEach(link => {
|
|
324
|
-
if (!link || (this.uploadImageConfig().onlyAcceptImageHttpsLink && (link instanceof ArrayBuffer || !new RegExp(
|
|
324
|
+
if (!link || (this.uploadImageConfig().onlyAcceptImageHttpsLink && (link instanceof ArrayBuffer || !new RegExp(patternUrl()).test(link)))) {
|
|
325
325
|
return;
|
|
326
326
|
}
|
|
327
327
|
this.insertHtml('image', link);
|
|
@@ -652,4 +652,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
652
652
|
LibsUiComponentsButtonsButtonComponent
|
|
653
653
|
], template: "<div class=\"flex flex-col w-full h-full\">\n @if (label(); as label) {\n <libs_ui-components-label [classInclude]=\"label.classInclude\"\n [required]=\"label.required\"\n [labelLeft]=\"label.labelLeft\" />\n }\n <div #wrapperEditor\n [attr.heightAuto]=\"heightAuto()\"\n [attr.hiddenToolBar]=\"onlyShowContent()\"\n class=\"libs-ui-quill-wrapper w-full h-full relative flex flex-col\"\n [class.libs-ui-border-error-general]=\"messageError() && showErrorBorder() && !onlyShowErrorBorderInContent()\"\n [class.rounded-[4px]]=\"messageError() && showErrorBorder() && !onlyShowErrorBorderInContent()\">\n <div #editor\n class=\"libs-ui-quill\"\n [attr.showError]=\"messageError() && showErrorBorder() && onlyShowErrorBorderInContent()\"\n [class.!hidden]=\"!display()\">\n @if (!onlyShowContent()) {\n <div #quillOption\n class=\"'ql-toolbar ql-snow bg-[#f8f9fa] {{ classIncludeToolbar() }}\">\n <ng-container *ngTemplateOutlet=\"toolbar\"></ng-container>\n </div>\n }\n <div #quillEditor\n LibsUiComponentsInputsMentionDirective\n [mentionConfig]=\"dataConfigMention()\"\n (outToggle)=\"handleToggleMention($event)\"\n (outInsertMention)=\"handlerInsertMention($event)\"></div>\n </div>\n @if (template(); as template) {\n <div [class]=\"classIncludeTemplate()\">\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n </div>\n }\n </div>\n @if (messageError() && showErrorLabel()) {\n <div class=\"flex items-center leading-normal mt-[8px]\">\n <span class=\"text-[#ff5454] libs-ui-font-h7r\"> {{ messageError() | translate }}</span>\n </div>\n }\n</div>\n@if (showToolBar()) {\n <div #quillToolbar\n [class]=\"'ql-snow absolute px-[8px] py-[4px] p-0 w-[500px] rounded-[4px] bg-[#ffffff] libs-ui-quill-toolbar-animation ' + classIncludeToolbar()\">\n <ng-container *ngTemplateOutlet=\"toolbar\"></ng-container>\n </div>\n}\n\n<ng-template #toolbar>\n <div class=\"toolbar\"\n #toolbarItems>\n <div class=\"ql-formats items-center\">\n @for (option of optionsToolbar(); track option) {\n <div #item\n [id]=\"option.type+'_'+$index\"\n class=\"items-center\"\n [class.hidden]=\"itemHidden().includes($index) || itemHiddenExpand().includes($index)\"\n [class.flex]=\"!itemHidden().includes($index)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate;context:{option, $index, $last}\"></ng-container>\n </div>\n }\n <div class=\"relative\">\n @if (itemHidden().length) {\n <libs_ui-components-buttons-button [type]=\"showMoreAction() ? 'button-secondary' : 'button-third'\"\n [iconOnlyType]=\"true\"\n [classInclude]=\"'!p-[1px] !h-[20px] ml-[8px]'\"\n [classIconLeft]=\"'libs-ui-icon-move-right rotate-90'\"\n (outClick)=\"handlerChangeShowMoreAction($event)\" />\n }\n <div [class.hidden]=\"!showMoreAction()\"\n class=\"absolute bg-[#ffffff] top-[10px] shadow-md z-[1] flex items-center pl-[8px] pr-[16px] py-[4px] rounded-[8px] top-[31px] right-[0px]\">\n @for (option of optionsToolbar(); track option) {\n <div class=\"items-center\"\n [class.hidden]=\"!itemHidden().includes($index)\"\n [class.flex]=\"itemHidden().includes($index)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate;context:{option, $index, $last}\"></ng-container>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n\n\n<ng-template #itemTemplate\n let-$index=\"$index\"\n let-$last=\"$last\"\n let-option=\"option\">\n @if (option.type === 'undo') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content: 'i18n_undo', zIndex: 1250}\"\n class=\"ql-undo\"></button>\n </div>\n }\n @if (option.type === 'redo') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content: 'i18n_redo', zIndex: 1250}\"\n class=\"ql-redo\"></button>\n </div>\n }\n @if (option.type === 'fontFamily') {\n <div class=\"relative w-[117px] h-full bg-[#ffffff] rounded-[4px] libs-ui-border-general {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [labelPopoverFullWidth]=\"true\"\n [listConfig]=\"listConfigFont()\"\n [listHasButtonUnSelectOption]=\"false\"\n [listHiddenInputSearch]=\"true\"\n [listMaxItemShow]=\"8\"\n [zIndex]=\"1250\"\n (outSelectKey)=\"handleSelectFont($event)\">\n @if (fontSelected(); as fontSelected) {\n <div class=\"flex items-center cursor-pointer py-[8px] libs-ui-font-h5r pl-[16px] pr-[40px] {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [type]=\"'text'\"\n [ignoreStopPropagationEvent]=\"true\"\n [config]=\"{zIndex:1250}\">\n {{ labelFontSelectedComputed() }}\n </libs_ui-components-popover>\n <i class=\"libs-ui-icon-move-right rotate-90 absolute right-[12px] text-[#6a7383] text-[16px]\"></i>\n </div>\n }\n </libs_ui-components-dropdown>\n </div>\n }\n @if (option.type === 'fontSize') {\n <div class=\"ql-picker {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-inputs-valid [dataType]=\"'int'\"\n [(item)]=\"size\"\n [fieldNameBind]=\"'value'\"\n [valueUpDownNumber]=\"1\"\n [maxValueNumber]=\"72\"\n [minValueNumber]=\"8\"\n [readonly]=\"readonly()\"\n [classContainerInput]=\"'w-[72px] h-[32px]'\"\n (outValueChange)=\"handlerValueChange($event)\" />\n </div>\n }\n @if (option.type === 'color') {\n <div class=\"ql-color ql-picker ql-color-picker !flex items-center {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [config]=\"{content:'i18n_text_color', zIndex:1250}\">\n <libs_ui-components-buttons-select_color [zIndex]=\"zIndex()\"\n [direction]=\"'top'\"\n [externalContent]=\"true\"\n [applyNow]=\"true\"\n (outColorChange)=\"setStyle('color', $event)\">\n <div class=\"libs-ui-icon-editor-color-text libs-ui-buttons-select-color text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]\">\n </div>\n </libs_ui-components-buttons-select_color>\n </libs_ui-components-popover>\n </div>\n }\n @if (option.type === 'background') {\n <div class=\"ql-background ql-picker ql-color-picker !flex items-center {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [config]=\"{content:'i18n_background_color', zIndex:1250}\">\n <libs_ui-components-buttons-select_color [zIndex]=\"zIndex()\"\n [direction]=\"'top'\"\n [externalContent]=\"true\"\n [applyNow]=\"true\"\n (outColorChange)=\"setStyle('background', $event)\">\n <div class=\"libs-ui-icon-editor-color-background libs-ui-buttons-select-color text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]\">\n </div>\n </libs_ui-components-buttons-select_color>\n </libs_ui-components-popover>\n </div>\n }\n @if (option.type === 'bold') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_font_weight_bold', zIndex:1250}\"\n class=\"ql-bold\"></button>\n </div>\n }\n @if (option.type === 'italic') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_font_style_italic', zIndex:1250}\"\n class=\"ql-italic\"></button>\n </div>\n }\n @if (option.type === 'underline') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_text_decoration_underline', zIndex:1250}\"\n class=\"ql-underline\"></button>\n </div>\n }\n @if (option.type === 'strikeThrough') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_text_line_through', zIndex:1250}\"\n class=\"ql-strike\"></button>\n </div>\n }\n @if (option.type === 'adjust') {\n <div class=\"relative !flex items-center ql-align ql-picker ql-icon-picker !w-max {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [config]=\"{content:'i18n_adjust', zIndex:1250}\">\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [ignoreStopPropagationEvent]=\"true\"\n [labelPopoverFullWidth]=\"true\"\n [listConfig]=\"listConfigAlign()\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"{ignoreArrow: true, classInclude: '!w-[32px] overflow-hidden !py-[4px]', position: {mode: 'start', distance: 0}, paddingLeftItem: false}\"\n [listHasButtonUnSelectOption]=\"false\"\n [listMaxItemShow]=\"8\"\n [zIndex]=\"1250\"\n (outSelectKey)=\"handleSelectAlign($event)\">\n @if (alignSelected(); as alignSelected) {\n <div class=\"flex items-center cursor-pointer\">\n <i [class]=\"iconAlignSelectedComputed()\"></i>\n <i class=\"libs-ui-icon-move-right rotate-90 text-[#6a7383] text-[16px] ml-[4px]\"></i>\n </div>\n }\n </libs_ui-components-dropdown>\n </libs_ui-components-popover>\n </div>\n }\n @if (option.type === 'indentIncrease') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_indent_increase', zIndex:1250}\"\n class=\"ql-indent\"\n value=\"+1\"></button>\n </div>\n }\n @if (option.type === 'indentDecrease') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_indent_decrease', zIndex:1250}\"\n class=\"ql-indent\"\n value=\"-1\"></button>\n </div>\n }\n @if (option.type === 'listBulleted') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_list_bulleted', zIndex:1250}\"\n class=\"ql-list ql-bullet\"\n value=\"bullet\"></button>\n </div>\n }\n @if (option.type === 'listNumbered') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_list_numbered', zIndex:1250}\"\n class=\"ql-list ql-ordered\"\n value=\"ordered\"></button>\n </div>\n }\n @if (option.type === 'personalize' && templateToolBarPersonalize(); as templateToolBarPersonalize) {\n <div class=\"flex items-center {{ option.classInclude || 'mx-[8px]' }}\">\n <ng-container *ngTemplateOutlet=\"templateToolBarPersonalize\"></ng-container>\n </div>\n }\n @if (option.type === 'blockquote') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_quote', zIndex:1250}\"\n class=\"ql-blockquote\"></button>\n </div>\n }\n @if (option.type === 'link') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_insert_link', zIndex:1250}\"\n class=\"ql-link\"></button>\n </div>\n }\n @if (option.type === 'unLink') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_unlink', zIndex:1250}\"\n class=\"ql-unLink\"></button>\n </div>\n }\n @if (option.type === 'image' && uploadImageConfig().showIcon) {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_image', zIndex:1250}\"\n class=\"ql-image\"></button>\n </div>\n }\n @if (option.type === 'emoji') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <libs_ui-components-emoji [zIndex]=\"1250\"\n [isNgContent]=\"true\"\n (outEventEmoji)=\"handlerAddEmoji($event)\">\n <button class=\"ql-emoji\"></button>\n </libs_ui-components-emoji>\n </div>\n }\n @if (option.type === 'line') {\n <div class=\"w-[1px] h-[16px] libs-ui-border-right-general\"></div>\n }\n</ng-template>\n\n<libs_ui-components-popover [mode]=\"'click'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{template: viewLink, whiteTheme: true, ignoreArrow: true}\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outFunctionsControl)=\"handlerPopoverFunctionControl($event)\" />\n\n<ng-template #viewLink>\n <div class=\"flex justify-between items-center px-[16px] py-[8px] rounded-[8px]\">\n <div class=\"w-full min-w-0 libs-ui-font-h5r\"\n [type]=\"'text'\"\n LibsUiComponentsPopoverDirective>{{ link().url }}</div>\n <div class=\"flex items-center ml-[16px]\">\n <libs_ui-components-buttons-button [type]=\"'button-link-primary'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerEdit($event)\" />\n <libs_ui-components-buttons-button [type]=\"'button-link-custom'\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#071631',\n text_hover: '#ee2d41',\n text_active: '#ee2d41',\n text_disable: '071631'\n },\n rootColor: '#071631'\n }\"\n [classInclude]=\"'!p-0 ml-[12px]'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-link-broken'\"\n (outClick)=\"handlerUnlink($event)\" />\n </div>\n </div>\n</ng-template>\n", styles: ["@-webkit-keyframes animation-move{0%{transform:translateY(-12px)}to{transform:translateY(0)}}@keyframes animation-move{0%{transform:translateY(-12px)}to{transform:translateY(0)}}.libs-ui-quill{height:100%;width:100%;display:flex;flex-direction:column}.libs-ui-quill-toolbar-animation{animation:animation-move .4s ease}.libs-ui-quill-wrapper[heightAuto=true]{overflow:auto}.libs-ui-quill-wrapper[heightAuto=true] .libs-ui-quill{height:auto}.libs-ui-quill-wrapper[heightAuto=true] .libs-ui-quill ::ng-deep .ql-container{height:auto}.libs-ui-quill-wrapper[heightAuto=true] .libs-ui-quill ::ng-deep .ql-container .ql-editor{position:relative!important}.libs-ui-quill-wrapper[hiddenToolBar=true] .libs-ui-quill ::ng-deep .ql-container.ql-snow{border:0px!important}.libs-ui-quill-wrapper[hiddenToolBar=false] .libs-ui-quill ::ng-deep .ql-container.ql-snow{border:solid 1px #e6e8ed!important;border-radius:0 0 4px 4px}.libs-ui-quill-wrapper[hiddenToolBar=false] .libs-ui-quill ::ng-deep .ql-toolbar.ql-snow{border:solid 1px #e6e8ed!important;border-radius:4px 4px 0 0;border-bottom:unset!important}.libs-ui-quill-wrapper[hiddenToolBar=false] .libs-ui-quill[showError=true] ::ng-deep .ql-container.ql-snow{border:solid 1px #ee2d41!important}:host ::ng-deep .toolbar,:host ::ng-deep .ql-formats{position:relative;width:100%}:host ::ng-deep .ql-toolbar.ql-snow .ql-formats{display:flex}:host ::ng-deep .ql-container.ql-snow{width:100%;height:100%;position:relative}:host ::ng-deep .ql-editor{font-family:var(--libs-ui-font-family-name),\"Arial, Helvetica, sans-serif\"!important;font-weight:400}:host ::ng-deep .ql-editor b{font-family:var(--libs-ui-font-family-name),\"Arial, Helvetica, sans-serif\"!important;font-weight:600}:host ::ng-deep .ql-toolbar.ql-snow{border:none;border-radius:8px;padding:4px 16px}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker-label{color:#071631;border:none!important;margin-top:5px}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker-label:hover{color:var(--libs-ui-color-light-1)!important}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker-label:hover .ql-stroke{stroke:var(--libs-ui-color-light-1)!important}:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item:hover{color:var(--libs-ui-color-light-1)!important}:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label.ql-active{color:#071631}:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke{stroke:#071631}:host ::ng-deep .ql-editor{height:100%;width:100%;position:absolute;line-height:1.42!important}:host ::ng-deep .ql-editor:before{font-family:var(--libs-ui-font-family-name),\"Arial, Helvetica, sans-serif\"!important;color:#9ca2ad!important;font-size:12px}:host ::ng-deep .ql-editor img{height:auto;max-width:100%}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label{border:none!important}:host ::ng-deep .ql-snow .ql-picker.ql-bold{width:36px!important}:host ::ng-deep .ql-editor.ql-blank{font-size:11px!important;letter-spacing:.05px;font-family:var(--libs-ui-font-family-name),\"Arial, Helvetica, sans-serif\"!important;line-height:16px}:host ::ng-deep .ql-editor.ql-blank:before{font-style:normal!important;color:#9ca2ad!important}:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label :hover{color:red!important}:host ::ng-deep .ql-formats{margin-right:12px!important}:host ::ng-deep .ql-formats .ql-size.ql-picker,:host ::ng-deep .ql-formats .ql-header.ql-picker,:host ::ng-deep .ql-formats .ql-font.ql-picker{border:solid 1px #e6e8ed!important;border-radius:4px}:host ::ng-deep .ql-formats .ql-align.ql-picker .ql-picker-label{width:24px}:host ::ng-deep .ql-formats .ql-align.ql-picker .ql-picker-label:hover{color:red!important}:host ::ng-deep .ql-formats .ql-header.ql-picker .ql-picker-label:before{font-size:12px}:host ::ng-deep .ql-picker-item:before{font-size:12px}:host ::ng-deep .ql-picker-label:before{font-size:12px}:host ::ng-deep .ql-snow.ql-toolbar button,:host ::ng-deep .ql-snow .ql-toolbar button{background:none;border:none;cursor:pointer;display:flex;align-items:center;float:none;padding:0;width:inherit}:host ::ng-deep ul{padding-left:1rem!important}:host ::ng-deep li{padding-left:0!important}:host ::ng-deep .ql-tooltip{display:none!important}.ql-picker-options{max-height:130px;overflow-y:auto}.ql-snow .ql-picker.ql-size{border:1px solid #e6e7ea;box-shadow:#00000005 0 1px 3px,#1b1f2326 0 0 0 1px;border-radius:2px}.ql-snow .ql-picker.ql-font{border:1px solid #e6e7ea!important;margin-right:8px;border-radius:4px}.ql-snow .ql-picker.ql-font .ql-picker-options:before{font-size:12px}.ql-snow .ql-picker.ql-font .ql-picker-label:before{font-size:12px}.ql-font-Arial{font-family:Arial}.ql-font-sans-serif{font-family:\"sans-serif\"}.ql-font-Helvetica{font-family:Helvetica}.libs-ui-quill-mention{font-weight:500!important;color:#7239ea;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--libs-ui-font-family-name),\"Arial, Helvetica, sans-serif\"!important;font-weight:600}.ql-snow .ql-picker.ql-expanded .ql-picker-options{overflow:hidden}.ql-formats{margin-right:0!important}.ql-formats .ql-header{position:relative!important}.ql-formats .ql-header .ql-picker-options{position:absolute!important;top:-151px!important}.ql-formats .ql-font{position:relative!important}.ql-formats .ql-font .ql-picker-options{position:absolute!important;top:-93px!important}.ql-formats .ql-color{position:relative!important}.ql-formats .ql-color .ql-picker-options{position:absolute!important;top:-108px}.ql-formats .ql-background{position:relative!important}.ql-formats .ql-background .ql-picker-options{position:absolute!important;top:-108px}.ql-formats .ql-align{position:relative!important}.ql-formats .ql-align .ql-picker-label{padding:3px 4px!important}.ql-formats .ql-align .ql-picker-options{position:absolute!important;top:-106px}.ql-snow .ql-picker{font-size:12px!important;height:32px;float:none;width:auto}\n"] }]
|
|
654
654
|
}] });
|
|
655
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9xdWlsbC9zcmMvcXVpbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9xdWlsbC9zcmMvcXVpbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQWdCLFFBQVEsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBZSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JOLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSwyQ0FBMkMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBa0IsaUNBQWlDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRixPQUFPLEVBQWtDLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUgsT0FBTyxFQUFnQyxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RILE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRW5GLE9BQU8sRUFBZ0MsZ0NBQWdDLEVBQXNCLE1BQU0sNkJBQTZCLENBQUM7QUFFakksT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLHdCQUF3QixFQUFFLEdBQUcsRUFBRSxLQUFL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TUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeGhCLEtBQUssQ0FBQyxTQUFTLEdBQUcsNEJBQTRCLENBQUM7UUFDL0MsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbkIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUIsS0FBSyxDQUFDLFFBQVEsQ0FB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QUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFhLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRVMsMkJBQTJCLENBQUMsS0FBWTtRQUNoRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQzt3R0F6cEJVLG9DQUFvQzs0RkFBcEMsb0NBQW9DLDB3SkN2Q2pELHEyYkEwVUEsK3lMRDFTSSxlQUFlLDRGQUFFLGdCQUFnQixvSkFBRSxzQ0FBc0MsNk9BQ3pFLDhCQUE4Qiw0cUJBQUUsaUNBQWlDLG16REFDakUsZ0NBQWdDLHFlQUFFLDJDQUEyQyw0TkFDN0Usb0NBQW9DLHF6REFBRSw4QkFBOEIsb1BBQ3BFLHNDQUFzQzs7NEZBRzdCLG9DQUFvQztrQkFmaEQsU0FBUzsrQkFFRSxpQ0FBaUMsY0FDL0IsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBR3RDO3dCQUNQLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxzQ0FBc0M7d0JBQ3pFLDhCQUE4QixFQUFFLGlDQUFpQzt3QkFDakUsZ0NBQWdDLEVBQUUsMkNBQTJDO3dCQUM3RSxvQ0FBb0MsRUFBRSw4QkFBOEI7d0JBQ3BFLHNDQUFzQztxQkFDdkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgY29tcHV0ZWQsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIFRlbXBsYXRlUmVmLCB2aWV3Q2hpbGQsIHZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zU2VsZWN0Q29sb3JDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtc2VsZWN0LWNvbG9yJztcbmltcG9ydCB7IElFbWl0U2VsZWN0S2V5LCBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNFbW9qaUNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLWVtb2ppJztcbmltcG9ydCB7IElNZW50aW9uQ29uZmlnLCBJTWVudGlvbkluc2VydCwgTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25EaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWlucHV0cy1tZW50aW9uJztcbmltcG9ydCB7IElWYWxpZExlbmd0aCwgSVZhbGlkUmVxdWlyZWQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXZhbGlkJztcbmltcG9ydCB7IElMYWJlbCwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1sYWJlbCc7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW0gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxpc3QnO1xuaW1wb3J0IHsgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBUWVBFX1RFTVBMQVRFX1JFRiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1keW5hbWljLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElELCBFUlJPUl9NRVNTQUdFX01BWF9MRU5HVEgsIEVSUk9SX01FU1NBR0VfTUlOX0xFTkdUSCwgZ2V0LCBpc05pbCwgUEFUVEVSTl9VUkwsIHNldCwgeHNzRmlsdGVyIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgUXVpbGwsIHsgUmFuZ2VTdGF0aWMsIFNvdXJjZXMsIFN0cmluZ01hcCB9IGZyb20gJ3F1aWxsJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpbmRlbnRTdHlsZSB9IGZyb20gJy4vaW5kZW50LWF0dHJpYnV0b3IvaW5kZW50LWF0dHJpYnV0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IElMaW5rLCBJUXVpbGxGdW5jdGlvbkNvbnRyb2xFdmVudCwgSVRvb2xiYXJDb25maWcsIElVcGxvYWRJbWFnZUNvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9xdWlsbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c1F1aWxsTGlua0NvbXBvbmVudCB9IGZyb20gJy4vbGluay9saW5rLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWlsbE1lbnRpb25CbG90IH0gZnJvbSAnLi9tZW50aW9uL21lbnRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNJbnB1dHNRdWlsbFVwbG9hZEltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi91cGxvYWQtaW1hZ2UvdXBsb2FkLWltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpY29uTGlzdCwgbGlua0RlZmF1bHQsIGxpc3RDb25maWdBbGlnbiwgbGlzdENvbmZpZ0ZvbnQsIGxpc3RGb250LCB0b29sQmFyT3B0aW9uRGVmYXVsdCwgdXBsb2FkSW1hZ2VDb25maWdEZWZhdWx0IH0gZnJvbSAnLi91dGlscy9xdWlsbC5kZWZpbmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXF1aWxsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWlsbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9xdWlsbC5jb21wb25lbnQuc2NzcycsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsIE5nVGVtcGxhdGVPdXRsZXQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNNZW50aW9uRGlyZWN0aXZlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc1NlbGVjdENvbG9yQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0Vtb2ppQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c1F1aWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByb3RlY3RlZCBtZXNzYWdlRXJyb3IgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByb3RlY3RlZCBkaXNwbGF5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGxpc3RDb25maWdBbGlnbiA9IHNpZ25hbDxJTGlzdENvbmZpZ0l0ZW0+KGxpc3RDb25maWdBbGlnbigpKTtcbiAgcHJvdGVjdGVkIGFsaWduU2VsZWN0ZWQgPSBzaWduYWw8SUVtaXRTZWxlY3RLZXkgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBpY29uQWxpZ25TZWxlY3RlZENvbXB1dGVkID0gY29tcHV0ZWQoKCkgPT4gZ2V0KHRoaXMuYWxpZ25TZWxlY3RlZCgpLCAnaXRlbS5pY29uJykpO1xuICBwcm90ZWN0ZWQgbGlzdENvbmZpZ0ZvbnQgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtPihsaXN0Q29uZmlnRm9udCgpKTtcbiAgcHJvdGVjdGVkIGZvbnRTZWxlY3RlZCA9IHNpZ25hbDxJRW1pdFNlbGVjdEtleSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxhYmVsRm9udFNlbGVjdGVkQ29tcHV0ZWQgPSBjb21wdXRlZCgoKSA9PiBnZXQodGhpcy5mb250U2VsZWN0ZWQoKSwgJ2l0ZW0ubGFiZWwnKSB8fCAnU2FucyBTZXJpZicpO1xuICBwcm90ZWN0ZWQgc2l6ZSA9IHNpZ25hbDx7IHZhbHVlOiBudW1iZXIgfT4oeyB2YWx1ZTogMTQgfSk7XG4gIHByb3RlY3RlZCBpdGVtSGlkZGVuRXhwYW5kID0gc2lnbmFsPEFycmF5PG51bWJlcj4+KFtdKTtcbiAgcHJvdGVjdGVkIGl0ZW1IaWRkZW4gPSBzaWduYWw8QXJyYXk8bnVtYmVyPj4oW10pO1xuICBwcm90ZWN0ZWQgc2hvd01vcmVBY3Rpb24gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgbGluayA9IHNpZ25hbDxJTGluaz4obGlua0RlZmF1bHQoKSk7XG5cbiAgcHJpdmF0ZSBwb3BvdmVyRnVuY3Rpb25Db250cm9sID0gc2lnbmFsPElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcXVpbGwgPSBzaWduYWw8UXVpbGwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgaGFuZGxlcnMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgKC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IHZvaWQ+Pih7IHVuZG86IHRoaXMuaGFuZGxlVW5kby5iaW5kKHRoaXMpLCByZWRvOiB0aGlzLmhhbmRsZVJlZG8uYmluZCh0aGlzKSB9KTtcbiAgcHJpdmF0ZSBzaG93TWVudGlvbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgYWRkRWRpdExpbmtDb21wb25lbnRSZWYgPSBzaWduYWw8Q29tcG9uZW50UmVmPExpYnNVaUNvbXBvbmVudHNJbnB1dHNRdWlsbExpbmtDb21wb25lbnQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHVwbG9hZEltYWdlQ29tcG9uZW50UmVmID0gc2lnbmFsPENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzSW5wdXRzUXVpbGxVcGxvYWRJbWFnZUNvbXBvbmVudD4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudFNlcnZpY2UgPSBpbmplY3QoTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UpO1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IG9wdGlvbnNUb29sYmFyID0gaW5wdXQ8QXJyYXk8SVRvb2xiYXJDb25maWc+LCBBcnJheTxJVG9vbGJhckNvbmZpZz4gfCB1bmRlZmluZWQ+KHRvb2xCYXJPcHRpb25EZWZhdWx0KCksIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSB8fCB0b29sQmFyT3B0aW9uRGVmYXVsdCgpIH0pO1xuICByZWFkb25seSBzaG93VG9vbEJhciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZVRvb2xiYXIgPSBpbnB1dDxzdHJpbmc+KCdib3R0b20tWy02NnB4XSBsZWZ0LVsxOHB4XScpO1xuICByZWFkb25seSBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl9pbXBvcnRfY29udGVudCcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICdpMThuX2ltcG9ydF9jb250ZW50JyB9KTtcbiAgcmVhZG9ubHkgbGFiZWwgPSBpbnB1dDxJTGFiZWwgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGl0ZW0gPSBtb2RlbDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTtcbiAgcmVhZG9ubHkgZmllbGROYW1lQmluZCA9IGlucHV0PHN0cmluZz4oJ3ZhbHVlJyk7XG4gIHJlYWRvbmx5IHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgc2hvd0Vycm9yTGFiZWwgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgc2hvd0Vycm9yQm9yZGVyID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBvbmx5U2hvd0Vycm9yQm9yZGVySW5Db250ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVUZW1wbGF0ZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBoYW5kbGVyc0V4cGFuZCA9IGlucHV0PEFycmF5PHsgdGl0bGU6IHN0cmluZywgYWN0aW9uOiAoKSA9PiB2b2lkIH0+PigpO1xuICByZWFkb25seSB2YWxpZFJlcXVpcmVkID0gaW5wdXQ8SVZhbGlkUmVxdWlyZWQ+KCk7XG4gIHJlYWRvbmx5IHZhbGlkTWluTGVuZ3RoID0gaW5wdXQ8SVZhbGlkTGVuZ3RoPigpO1xuICByZWFkb25seSB2YWxpZE1heExlbmd0aCA9IGlucHV0PElWYWxpZExlbmd0aD4oKTtcbiAgcmVhZG9ubHkgb25seVNob3dDb250ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTIwMSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgMTIwMSB9KTtcbiAgcmVhZG9ubHkgZGF0YUNvbmZpZ01lbnRpb24gPSBpbnB1dDxJTWVudGlvbkNvbmZpZz4oKTtcbiAgcmVhZG9ubHkgaGVpZ2h0QXV0byA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGF1dG9Gb2N1cyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGF1dG9Gb2N1c0JvdHRvbSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlVG9vbEJhclBlcnNvbmFsaXplID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuICByZWFkb25seSB0ZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPj4oKTtcbiAgcmVhZG9ubHkgdXBsb2FkSW1hZ2VDb25maWcgPSBpbnB1dDxJVXBsb2FkSW1hZ2VDb25maWcsIElVcGxvYWRJbWFnZUNvbmZpZyB8IHVuZGVmaW5lZD4odXBsb2FkSW1hZ2VDb25maWdEZWZhdWx0KCksIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IHVwbG9hZEltYWdlQ29uZmlnRGVmYXVsdCgpIH0pO1xuXG4gIHJlYWRvbmx5IG91dE1lc3NhZ2VFcnJvciA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dEJsdXIgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0Rm9jdXMgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdlID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJUXVpbGxGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2VsZWN0aW9uQ2hhbmdlID0gb3V0cHV0PGJvb2xlYW4+KCk7XG5cbiAgcmVhZG9ubHkgd3JhcHBlckVkaXRvckVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCd3cmFwcGVyRWRpdG9yJyk7XG4gIHJlYWRvbmx5IGVkaXRvckVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdlZGl0b3InKTtcbiAgcmVhZG9ubHkgcXVpbGxPcHRpb25FbCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigncXVpbGxPcHRpb24nKTtcbiAgcmVhZG9ubHkgcXVpbGxFZGl0b3JFbCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigncXVpbGxFZGl0b3InKTtcbiAgcmVhZG9ubHkgcXVpbGxUb29sYmFyRWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3F1aWxsVG9vbGJhcicpO1xuICByZWFkb25seSB0b29sYmFySXRlbXNFbCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndG9vbGJhckl0ZW1zJyk7XG4gIHJlYWRvbmx5IGl0ZW1zRWwgPSB2aWV3Q2hpbGRyZW48RWxlbWVudFJlZj4oJ2l0ZW0nKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh7XG4gICAgICBjaGVja0lzVmFsaWQ6IHRoaXMudmFsaWRhdGUuYmluZCh0aGlzKSxcbiAgICAgIHNldENvbnRlbnQ6IHRoaXMuc2V0Q29udGVudC5iaW5kKHRoaXMpLFxuICAgICAgaW5zZXJ0VGV4dDogdGhpcy5pbnNlcnRUZXh0LmJpbmQodGhpcyksXG4gICAgICBpbnNlcnRMaW5rOiB0aGlzLmluc2VydExpbmsuYmluZCh0aGlzKSxcbiAgICAgIGluc2VydEh0bWw6IHRoaXMuaW5zZXJ0SHRtbC5iaW5kKHRoaXMpLFxuICAgICAgc2V0Rm9udFNpemU6IHRoaXMuc2V0Rm9udFNpemUuYmluZCh0aGlzKSxcbiAgICAgIHNldENvbG9yOiB0aGlzLnNldENvbG9yLmJpbmQodGhpcyksXG4gICAgICBzZXRCYWNrZ3JvdW5kOiB0aGlzLnNldEJhY2tncm91bmQuYmluZCh0aGlzKVxuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2FsY3VsYXRvclRvb2xiYXIoKTtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMoKSkge1xuICAgICAgdGhpcy5kaXNwbGF5LnNldCh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5zZXRIYW5kbGVyRnVuY3Rpb24oKTtcbiAgICB0aGlzLmluaXRRdWlsbCgpO1xuICAgIGlmICghdGhpcy5hdXRvRm9jdXMoKSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRpc3BsYXkuc2V0KHRydWUpLCAyMDApO1xuICAgIH1cbiAgICB0aGlzLnNldENsYXNzSW5jbHVkZUFuZFJlYWRPbmx5KCk7XG4gICAgdGhpcy5zZXRDb250ZW50KGdldCh0aGlzLml0ZW0oKSwgdGhpcy5maWVsZE5hbWVCaW5kKCksICcnKSk7XG4gICAgdGhpcy5oYW5kbGVyVGV4dENoYW5nZSgpO1xuICAgIHRoaXMuaGFuZGxlclNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIHRoaXMuaGFuZGxlclBhc3RlKCk7XG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKCkpIHtcbiAgICAgIHRoaXMucXVpbGwoKT8uZm9jdXMoKTtcbiAgICB9XG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKHRoaXMuY2FsY3VsYXRvclRvb2xiYXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRRdWlsbCgpIHtcbiAgICBjb25zdCBzaXplID0gUXVpbGwuaW1wb3J0KCdhdHRyaWJ1dG9ycy9zdHlsZS9zaXplJyk7XG4gICAgY29uc3QgaW1hZ2UgPSBRdWlsbC5pbXBvcnQoJ2Zvcm1hdHMvaW1hZ2UnKTtcbiAgICBjb25zdCBwYXJjaG1lbnQgPSBRdWlsbC5pbXBvcnQoJ3BhcmNobWVudCcpO1xuICAgIGNvbnN0IGFsaWduU3R5bGUgPSBRdWlsbC5pbXBvcnQoJ2F0dHJpYnV0b3JzL3N0eWxlL2FsaWduJyk7XG4gICAgY29uc3QgaWNvbnMgPSBRdWlsbC5pbXBvcnQoJ3VpL2ljb25zJyk7XG4gICAgY29uc3QgYmxvY2sgPSBwYXJjaG1lbnQucXVlcnkoJ2Jsb2NrJyk7XG4gICAgY29uc3QgaXRhbGljID0gUXVpbGwuaW1wb3J0KCdmb3JtYXRzL2l0YWxpYycpO1xuICAgIGNvbnN0IGJvbGQgPSBRdWlsbC5pbXBvcnQoJ2Zvcm1hdHMvYm9sZCcpO1xuICAgIHNpemUud2hpdGVsaXN0ID0gWyc4cHgnLCAnOXB4JywgJzEwcHgnLCAnMTFweCcsICcxMnB4JywgJzEzcHgnLCAnMTRweCcsICcxNXB4JywgJzE2cHgnLCAnMTdweCcsICcxOHB4JywgJzE5cHgnLCAnMjBweCcsICcyMXB4JywgJzIycHgnLCAnMjNweCcsICcyNHB4JywgJzI1cHgnLCAnMjZweCcsICcyN3B4JywgJzI4cHgnLCAnMjlweCcsICczMHB4JywgJzMxcHgnLCAnMzJweCcsICczM3B4JywgJzM0cHgnLCAnMzVweCcsICczNnB4JywgJzM3cHgnLCAnMzhweCcsICczOXB4JywgJzQwcHgnLCAnNDFweCcsICc0MnB4JywgJzQzcHgnLCAnNDRweCcsICc0NXB4JywgJzQ2cHgnLCAnNDdweCcsICc0OHB4JywgJzQ5cHgnLCAnNTBweCcsICc1MXB4JywgJzUycHgnLCAnNTNweCcsICc1NHB4JywgJzU1cHgnLCAnNTZweCcsICc1N3B4JywgJzU4cHgnLCAnNTlweCcsICc2MHB4JywgJzYxcHgnLCAnNjJweCcsICc2M3B4JywgJzY0cHgnLCAnNjVweCcsICc2NnB4JywgJzY3cHgnLCAnNjhweCcsICc2OXB4JywgJzcwcHgnLCAnNzFweCcsICc3MnB4J107XG4gICAgaW1hZ2UuY2xhc3NOYW1lID0gJ2xpYnMtdWktcXVpbGwtZm9ybWF0LWltYWdlJztcbiAgICBibG9jay50YWdOYW1lID0gJ0RJVic7XG4gICAgaXRhbGljLnRhZ05hbWUgPSAnaSc7XG4gICAgYm9sZC50YWdOYW1lID0gJ0InO1xuICAgIFF1aWxsLnJlZ2lzdGVyKGJvbGQsIHRydWUpO1xuICAgIFF1aWxsLnJlZ2lzdGVyKGl0YWxpYywgdHJ1ZSk7XG4gICAgUXVpbGwucmVnaXN0ZXIoc2l6ZSwgdHJ1ZSk7XG4gICAgUXVpbGwucmVnaXN0ZXIoaW1hZ2UsIHRydWUpO1xuICAgIFF1aWxsLnJlZ2lzdGVyKGJsb2NrLCB0cnVlKTtcbiAgICBRdWlsbC5yZWdpc3RlcihhbGlnblN0eWxlLCB0cnVlKTtcbiAgICBRdWlsbC5yZWdpc3RlcihRdWlsbE1lbnRpb25CbG90LCB0cnVlKTtcbiAgICBRdWlsbC5yZWdpc3Rlcih7ICdmb3JtYXRzL2luZGVudCc6IGluZGVudFN0eWxlIH0sIHRydWUpO1xuICAgIGljb25MaXN0KCkuZm9yRWFjaChlbGVtZW50ID0+IHNldChpY29ucywgZWxlbWVudC5rZXksIGA8c3BhbiBjbGFzcz1cIiR7ZWxlbWVudC5pY29ufSBob3Zlcjp0ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWxpZ2h0LTEpXSB0ZXh0LVsxNnB4XSB0ZXh0LVsjNmE3MzgzXVwiPjwvc3Bhbj5gKSk7XG4gICAgdGhpcy5xdWlsbC5zZXQobmV3IFF1aWxsKHRoaXMucXVpbGxFZGl0b3JFbCgpPy5uYXRpdmVFbGVtZW50LCB7XG4gICAgICBtb2R1bGVzOiB7XG4gICAgICAgIHRvb2xiYXI6IHtcbiAgICAgICAgICBjb250YWluZXI6IHRoaXMub25seVNob3dDb250ZW50KCkgJiYgdGhpcy5xdWlsbFRvb2xiYXJFbCgpID8gdGhpcy5xdWlsbFRvb2xiYXJFbCgpPy5uYXRpdmVFbGVtZW50IDogdGhpcy5xdWlsbE9wdGlvbkVsKCk/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgaGFuZGxlcnM6IHRoaXMuaGFuZGxlcnMoKVxuICAgICAgICB9LFxuICAgICAgICBjbGlwYm9hcmQ6IHtcbiAgICAgICAgICBtYXRjaFZpc3VhbDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgaGlzdG9yeToge1xuICAgICAgICAgIGRlbGF5OiAxMDAwLFxuICAgICAgICAgIG1heFN0YWNrOiAxMDAsXG4gICAgICAgICAgdXNlck9ubHk6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIGtleWJvYXJkOiB7XG4gICAgICAgICAgYmluZGluZ3M6IHtcbiAgICAgICAgICAgIGVudGVyOiB7XG4gICAgICAgICAgICAgIGtleTogMTMsXG4gICAgICAgICAgICAgIGhhbmRsZXI6ICgpID0+IHRoaXMuc2hvd01lbnRpb24oKSA/IGZhbHNlIDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlYWRPbmx5OiB0aGlzLnJlYWRvbmx5KCksXG4gICAgICBwbGFjZWhvbGRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0aGlzLnBsYWNlaG9sZGVyKCkpLFxuICAgICAgdGhlbWU6ICdzbm93JyxcbiAgICAgIGJvdW5kczogdGhpcy5oZWlnaHRBdXRvKCkgPyB0aGlzLndyYXBwZXJFZGl0b3JFbCgpPy5uYXRpdmVFbGVtZW50IDogdGhpcy5xdWlsbEVkaXRvckVsKCk/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICBzY3JvbGxpbmdDb250YWluZXI6IHRoaXMuaGVpZ2h0QXV0bygpID8gdGhpcy53cmFwcGVyRWRpdG9yRWwoKT8ubmF0aXZlRWxlbWVudCA6IG51bGxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNldEhhbmRsZXJGdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy51cGxvYWRJbWFnZUNvbmZpZygpLm1vZGVDdXN0b20pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMudXBkYXRlKGl0ZW0gPT4gKHsgLi4uaXRlbSwgaW1hZ2U6IHRoaXMuaGFuZGxlclNob3dVcGxvYWRJbWFnZS5iaW5kKHRoaXMpLCBlbW9qaTogKCkgPT4geyByZXR1cm4gfSB9KSk7XG4gICAgfVxuICAgIGxldCBsaW5rID0gZmFsc2U7XG4gICAgY29uc3QgaGFuZGxlcnNFeHBhbmQgPSB0aGlzLmhhbmRsZXJzRXhwYW5kKCk7XG4gICAgaWYgKGhhbmRsZXJzRXhwYW5kICYmIGhhbmRsZXJzRXhwYW5kLmxlbmd0aCkge1xuICAgICAgaGFuZGxlcnNFeHBhbmQuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQudGl0bGUgJiYgZWxlbWVudC5hY3Rpb24pIHtcbiAgICAgICAgICBpZiAoZWxlbWVudC50aXRsZSA9PT0gJ2xpbmsnKSB7XG4gICAgICAgICAgICBsaW5rID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5oYW5kbGVycy51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCBbZWxlbWVudC50aXRsZV06IGVsZW1lbnQuYWN0aW9uIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghbGluaykge1xuICAgICAgdGhpcy5oYW5kbGVycy51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCBsaW5rOiB0aGlzLmhhbmRsZVNob3dVcGxvYWRMaW5rLmJpbmQodGhpcyksIHVuTGluazogdGhpcy5oYW5kbGVyVW5JbnNlcnRMaW5rLmJpbmQodGhpcykgfSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2xhc3NJbmNsdWRlQW5kUmVhZE9ubHkoKSB7XG4gICAgY29uc3QgZWRpdG9yRWwgPSB0aGlzLmVkaXRvckVsKCk7XG4gICAgY29uc3QgY2xhc3NJbmNsdWRlID0gdGhpcy5jbGFzc0luY2x1ZGUoKTtcbiAgICBjb25zdCByZWFkb25seSA9IHRoaXMucmVhZG9ubHkoKTtcbiAgICBpZiAoZWRpdG9yRWwpIHtcbiAgICAgIGlmIChjbGFzc0luY2x1ZGUgfHwgcmVhZG9ubHkpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50Tm9kZSBvZiBlZGl0b3JFbC5uYXRpdmVFbGVtZW50Lmxhc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoIWVsZW1lbnROb2RlLmNsYXNzTmFtZS5pbmNsdWRlcygncWwtZWRpdG9yJykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2xhc3NJbmNsdWRlKSB7XG4gICAgICAgICAgICBlbGVtZW50Tm9kZS5jbGFzc0xpc3QuYWRkKGNsYXNzSW5jbHVkZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZWFkb25seSkge1xuICAgICAgICAgICAgZWxlbWVudE5vZGUuY2xhc3NMaXN0LmFkZCgnIWJnLVsjZjhmOWZhXScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlYWRvbmx5KSB7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudE5vZGUgb2YgZWRpdG9yRWwubmF0aXZlRWxlbWVudC5jaGlsZHJlbikge1xuICAgICAgICAgIGlmIChlbGVtZW50Tm9kZS5jbGFzc05hbWUuaW5jbHVkZXMoJ3FsLXRvb2xiYXInKSkge1xuICAgICAgICAgICAgZWxlbWVudE5vZGUuY2xhc3NMaXN0LmFkZCgncG9pbnRlci1ldmVudHMtbm9uZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRqdXN0SW5kZXhGb3JJbWFnZXMoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnF1aWxsKCk/LnJvb3Q7XG4gICAgbGV0IGltYWdlQ291bnQgPSAwO1xuICAgIGxldCBhZGp1c3RlZEluZGV4ID0gMDtcbiAgICBjb25zdCBhZGp1c3RUZXh0SW5kZXggPSAobm9kZTogTm9kZSkgPT4ge1xuICAgICAgaWYgKGFkanVzdGVkSW5kZXggPiBpbmRleCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgYWRqdXN0ZWRJbmRleCArPSBub2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUubm9kZU5hbWUgPT09ICdJTUcnKSB7XG4gICAgICAgIGlmIChhZGp1c3RlZEluZGV4IDw9IGluZGV4KSB7XG4gICAgICAgICAgaW1hZ2VDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICBBcnJheS5mcm9tKG5vZGUuY2hpbGROb2RlcykuZm9yRWFjaChhZGp1c3RUZXh0SW5kZXgpO1xuICAgICAgfVxuICAgIH07XG4gICAgYWRqdXN0VGV4dEluZGV4KGNvbnRlbnQgYXMgTm9kZSk7XG4gICAgcmV0dXJuIGltYWdlQ291bnQ7XG4gIH07XG5cblxuICBwcml2YXRlIGhhbmRsZXJTZWxlY3Rpb25DaGFuZ2UoKSB7XG4gICAgdGhpcy5xdWlsbCgpPy5vbignc2VsZWN0aW9uLWNoYW5nZScsIChyYW5nZTogUmFuZ2VTdGF0aWMsIG9sZFJhbmdlOiBSYW5nZVN0YXRpYywgc291cmNlOiBTb3VyY2VzKSA9PiB7XG4gICAgICBpZiAodGhpcy5yZWFkb25seSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChyYW5nZSA9PT0gbnVsbCAmJiBvbGRSYW5nZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm91dEJsdXIuZW1pdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocmFuZ2UgIT09IG51bGwgJiYgb2xkUmFuZ2UgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5vdXRGb2N1cy5lbWl0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMucXVpbGwoKT8uZ2V0Rm9ybWF0KCk7XG4gICAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgIHRoaXMuZ2V0Rm9udChmb3JtYXQpO1xuICAgICAgICB0aGlzLmdldEZvbnRTaXplKGZvcm1hdCk7XG4gICAgICB9XG4gICAgICB0aGlzLm91dFNlbGVjdGlvbkNoYW5nZS5lbWl0KHJhbmdlLmxlbmd0aCA/IHRydWUgOiBmYWxzZSk7XG4gICAgICBpZiAocmFuZ2UubGVuZ3RoID09PSAwICYmIGZvcm1hdD8ubGluayAmJiBzb3VyY2UgPT09ICd1c2VyJykge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgY29uc3QgYW5jaG9yTm9kZSA9IHNlbGVjdGlvbj8uYW5jaG9yTm9kZTtcbiAgICAgICAgbGV0IGxpbmtOb2RlID0gYW5jaG9yTm9kZSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcbiAgICAgICAgd2hpbGUgKGxpbmtOb2RlICYmIGxpbmtOb2RlLnRhZ05hbWUgIT09ICdBJykge1xuICAgICAgICAgIGxpbmtOb2RlID0gbGlua05vZGUucGFyZW50Tm9kZSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGlua05vZGUgJiYgbGlua05vZGUudGFnTmFtZSA9PT0gJ0EnKSB7XG4gICAgICAgICAgY29uc3QgbGlua1RleHQgPSBsaW5rTm9kZS5pbm5lclRleHQ7XG4gICAgICAgICAgY29uc3QgbGlua3NJbmRpY2VzOiBBcnJheTxudW1iZXI+ID0gW107XG4gICAgICAgICAgbGV0IGluZGV4UmV0dXJuOiBudW1iZXIgfCB1bmRlZmluZWQgPSAtMTtcbiAgICAgICAgICB3aGlsZSAoIWlzTmlsKGluZGV4UmV0dXJuKSAmJiBpbmRleFJldHVybiA8IHJhbmdlLmluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0Q29udGVudCA9IHRoaXMucXVpbGwoKT8uZ2V0VGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgbGlua0luZGV4ID0gdGV4dENvbnRlbnQ/LmluZGV4T2YobGlua1RleHQsIGxpbmtzSW5kaWNlcy5sZW5ndGggPiAwID8gbGlua3NJbmRpY2VzW2xpbmtzSW5kaWNlcy5sZW5ndGggLSAxXSArIGxpbmtUZXh0Lmxlbmd0aCA6IDApO1xuICAgICAgICAgICAgaWYgKCFpc05pbChsaW5rSW5kZXgpKSB7XG4gICAgICAgICAgICAgIGlmIChsaW5rSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGlua3NJbmRpY2VzLnB1c2gobGlua0luZGV4KTtcbiAgICAgICAgICAgICAgICBpbmRleFJldHVybiA9IGxpbmtJbmRleCArIGxpbmtUZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAobGlua0luZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGluZGV4UmV0dXJuID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsaW5rc0luZGljZXMgJiYgbGlua3NJbmRpY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2VJbmRleCA9IGxpbmtzSW5kaWNlc1tsaW5rc0luZGljZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBjb3VudEltYWdlID0gdGhpcy5hZGp1c3RJbmRleEZvckltYWdlcyhyYW5nZUluZGV4KVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubGluay5zZXQoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBsaW5rVGV4dCxcbiAgICAgICAgICAgICAgICB1cmw6IGxpbmtOb2RlLmhyZWYsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IHtcbiAgICAgICAgICAgICAgICAgIGluZGV4OiByYW5nZUluZGV4ICsgY291bnRJbWFnZSxcbiAgICAgICAgICAgICAgICAgIGxlbmd0aDogbGlua1RleHQubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2woKT8uc2hvd1BvcG92ZXIobGlua05vZGUpXG4gICAgICAgICAgICB9LCAyNTApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyUGFzdGUoKSB7XG4gICAgc2V0KHRoaXMucXVpbGwsICdyb290Lm9ucGFzdGUnLCBhc3luYyAoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5jbGlwYm9hcmREYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuY2xpcGJvYXJkRGF0YS5maWxlcztcbiAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBpbWFnZXM6IEFycmF5PEZpbGU+ID0gW107XG4gICAgICBBcnJheS5mcm9tKGZpbGVzKS5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgIGlmIChmaWxlICYmIGZpbGUudHlwZS5zcGxpdCgnLycpWzBdID09PSAnaW1hZ2UnKSB7XG4gICAgICAgICAgaW1hZ2VzLnB1c2goZmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgbGlua3MgPSBhd2FpdCB0aGlzLnVwbG9hZEltYWdlQ29uZmlnKCkuZnVuY3Rpb25VcGxvYWRJbWFnZT8uKGltYWdlcyk7XG4gICAgICBpZiAobGlua3MgJiYgbGlua3MubGVuZ3RoKSB7XG4gICAgICAgIGxpbmtzLmZvckVhY2gobGluayA9PiB7XG4gICAgICAgICAgaWYgKCFsaW5rIHx8ICh0aGlzLnVwbG9hZEltYWdlQ29uZmlnKCkub25seUFjY2VwdEltYWdlSHR0cHNMaW5rICYmIChsaW5rIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgIW5ldyBSZWdFeHAoUEFUVEVSTl9VUkwoKSkudGVzdChsaW5rKSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaW5zZXJ0SHRtbCgnaW1hZ2UnLCBsaW5rIGFzIHN0cmluZyk7XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJUZXh0Q2hhbmdlKCkge1xuICAgIHRoaXMucXVpbGwoKT8ub24oJ3RleHQtY2hhbmdlJywgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBodG1sID0gdGhpcy5xdWlsbCgpPy5yb290LmlubmVySFRNTDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQ/Lm9wc1sxXT8uaW5zZXJ0ID09PSAnXFxuJykge1xuICAgICAgICAgIGNvbnN0IHJhbmdlID0geyBpbmRleDogZXZlbnQ/Lm9wc1swXS5yZXRhaW4gYXMgbnVtYmVyIH07XG4gICAgICAgICAgY29uc3QgY3VycmVudExlYWYgPSB0aGlzLnF1aWxsKCk/LmdldExlYWYocmFuZ2UuaW5kZXgpWzBdO1xuICAgICAgICAgIGNvbnN0IG5leHRMZWFmID0gdGhpcy5xdWlsbCgpPy5nZXRMZWFmKHJhbmdlLmluZGV4ICsgMSlbMF07XG4gICAgICAgICAgdGhpcy5xdWlsbCgpPy5pbnNlcnRFbWJlZChyYW5nZS5pbmRleCwgJ2JyZWFrJywgdHJ1ZSwgJ3VzZXInKTtcbiAgICAgICAgICBpZiAobmV4dExlYWYgPT09IG51bGwgfHwgY3VycmVudExlYWYucGFyZW50ICE9PSBuZXh0TGVhZi5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucXVpbGwoKT8uaW5zZXJ0RW1iZWQocmFuZ2UuaW5kZXgsICdicmVhaycsIHRydWUsICd1c2VyJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKChyYW5nZS5pbmRleCB8fCAwKSArIDEsIDAsIFF1aWxsLnNvdXJjZXMuU0lMRU5UKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoaHRtbCA9PT0gJzxkaXY+PGJyPjwvZGl2PicgfHwgaHRtbCA9PT0gJzxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBqdXN0aWZ5O1wiPjxicj48L2Rpdj4nIHx8ICF0aGlzLnF1aWxsKCk/LmdldFRleHQoKSkge1xuICAgICAgICBzZXQodGhpcy5pdGVtKCksIHRoaXMuZmllbGROYW1lQmluZCgpLCAnJyk7XG4gICAgICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICAgICAgdGhpcy5vdXRDaGFuZ2UuZW1pdChnZXQodGhpcy5pdGVtKCksIHRoaXMuZmllbGROYW1lQmluZCgpKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udmVydElubmVySFRNTCgpO1xuICAgICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgICAgdGhpcy5vdXRDaGFuZ2UuZW1pdChnZXQodGhpcy5pdGVtKCksIHRoaXMuZmllbGROYW1lQmluZCgpKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2woZXZlbnQ6IElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2wuc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckV2ZW50KGV2ZW50OiBUWVBFX1BPUE9WRVJfRVZFTlQpIHtcbiAgICBpZiAoZXZlbnQgPT09ICdyZW1vdmUnKSB7XG4gICAgICB0aGlzLmxpbmsuc2V0KGxpbmtEZWZhdWx0KCkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyVW5saW5rKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmxpbmsoKTtcbiAgICB0aGlzLnF1aWxsKCk/LmZvcm1hdFRleHQobGluay5yYW5nZS5pbmRleCwgbGluay5yYW5nZS5sZW5ndGgsIHsgbGluazogZmFsc2UgfSk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckVkaXQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgbGluayA9IHRoaXMubGluaygpO1xuICAgIHRoaXMuaGFuZGxlU2hvd1VwbG9hZExpbmsobGluayk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0b3JUb29sYmFyKCkge1xuICAgIHRoaXMuaXRlbUhpZGRlbi5zZXQoW10pO1xuICAgIHRoaXMuaXRlbUhpZGRlbkV4cGFuZC5zZXQoW10pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdG9vbGJhcldpZHRoID0gdGhpcy50b29sYmFySXRlbXNFbCgpPy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIHx8IDA7XG4gICAgICBsZXQgaXRlbVdpZHRoID0gMjg7XG4gICAgICBjb25zdCBoaWRkZW5JdGVtczogQXJyYXk8bnVtYmVyPiA9IFtdO1xuICAgICAgY29uc3QgaGlkZGVuSXRlbXNFeHBhbmQ6IEFycmF5PG51bWJlcj4gPSBbXTtcbiAgICAgIGNvbnN0IGl0ZW1zSGFzV2lkdGggPSB0aGlzLml0ZW1zRWwoKS5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zSGFzV2lkdGgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBpdGVtc0hhc1dpZHRoW2luZGV4XTtcbiAgICAgICAgY29uc3QgaWQgPSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaWQ7XG4gICAgICAgIGNvbnN0IHRydWVJbmRleCA9IE51bWJlcihpZC5zcGxpdCgnXycpWzFdKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGlkLnNwbGl0KCdfJylbMF07XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIHx8IDA7XG4gICAgICAgIGl0ZW1XaWR0aCArPSB3aWR0aDtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdsaW5lJykge1xuICAgICAgICAgIGNvbnN0IG5leHRFbGVtZW50ID0gaXRlbXNIYXNXaWR0aFtpbmRleCArIDFdO1xuICAgICAgICAgIGNvbnN0IG5leHRXaWR0aCA9IG5leHRFbGVtZW50Py5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIHx8IDA7XG4gICAgICAgICAgY29uc3QgbmV4dEl0ZW1XaWR0aCA9IGl0ZW1XaWR0aCArIG5leHRXaWR0aDtcbiAgICAgICAgICBpZiAobmV4dEl0ZW1XaWR0aCA+IHRvb2xiYXJXaWR0aCkge1xuICAgICAgICAgICAgaGlkZGVuSXRlbXNFeHBhbmQucHVzaCh0cnVlSW5kZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbVdpZHRoID4gdG9vbGJhcldpZHRoKSB7XG4gICAgICAgICAgaGlkZGVuSXRlbXMucHVzaCh0cnVlSW5kZXgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLml0ZW1IaWRkZW4uc2V0KGhpZGRlbkl0ZW1zKTtcbiAgICAgIHRoaXMuaXRlbUhpZGRlbkV4cGFuZC5zZXQoaGlkZGVuSXRlbXNFeHBhbmQpO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0U3R5bGUodHlwZTogc3RyaW5nLCBkYXRhOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICB0aGlzLnF1aWxsKCk/LmZvcm1hdCh0eXBlLCBkYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9udFNpemUoZm9ybWF0OiBTdHJpbmdNYXApIHtcbiAgICBjb25zdCBmb250U2l6ZSA9IGZvcm1hdD8uc2l6ZT8udG9TdHJpbmcoKT8ucmVwbGFjZSgncHgnLCAnJyk7XG4gICAgaWYgKGlzTmFOKHBhcnNlRmxvYXQoZm9udFNpemUpKSkge1xuICAgICAgdGhpcy5zaXplLnNldCh7IHZhbHVlOiAxNCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaXplLnNldCh7IHZhbHVlOiBwYXJzZUZsb2F0KGZvbnRTaXplKSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9udChmb3JtYXQ6IFN0cmluZ01hcCkge1xuICAgIGNvbnN0IGZvbnQgPSBsaXN0Rm9udCgpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ua2V5ID09PSBmb3JtYXQuZm9udCk7XG4gICAgaWYgKCFmb250KSB7XG4gICAgICB0aGlzLmZvbnRTZWxlY3RlZC5zZXQoeyBrZXk6ICcnLCBpdGVtOiBsaXN0Rm9udCgpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ua2V5ID09PSAnJykgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZm9udFNlbGVjdGVkLnNldCh7IGtleTogZm9ybWF0LmZvbnQsIGl0ZW06IGZvbnQgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlVW5kbygpIHtcbiAgICB0aGlzLnF1aWxsKCk/Lmhpc3Rvcnk/LnVuZG8oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVSZWRvKCkge1xuICAgIHRoaXMucXVpbGwoKT8uaGlzdG9yeT8ucmVkbygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNldENvbnRlbnQoY29udGVudDogc3RyaW5nKSB7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHNldCh0aGlzLnF1aWxsLCAncm9vdC5pbm5lckhUTUwnLCAnJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb250ZW50WHNzRmlsdGVyID0gYXdhaXQgeHNzRmlsdGVyKGNvbnRlbnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0KHRoaXMucXVpbGwsICdyb290LmlubmVySFRNTCcsIGNvbnRlbnRYc3NGaWx0ZXIpKTtcbiAgICBpZiAoIXRoaXMuYXV0b0ZvY3VzQm90dG9tKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnF1aWxsKCk/LmJsdXIoKTtcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucXVpbGxFZGl0b3JFbCgpPy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJyk7XG4gICAgICBjb25zdCBjb250ZW50U2Nyb2xsID0gdGhpcy5oZWlnaHRBdXRvKCkgPyB0aGlzLndyYXBwZXJFZGl0b3JFbCgpPy5uYXRpdmVFbGVtZW50IDogdGFyZ2V0O1xuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHRhcmdldCk7XG4gICAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7XG4gICAgICBzZWw/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgICB0YXJnZXQuZm9jdXMoKTtcbiAgICAgIGNvbnRlbnRTY3JvbGwuc2Nyb2xsVG9wID0gY29udGVudFNjcm9sbC5zY3JvbGxIZWlnaHQ7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQWRkRW1vamkoZW1vamk6IHVua25vd24pIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLnF1aWxsKCk/LmdldFNlbGVjdGlvbih0cnVlKS5pbmRleDtcbiAgICBpZiAoIWlzTmlsKHNlbGVjdGlvbikpIHtcbiAgICAgIHRoaXMucXVpbGwoKT8uaW5zZXJ0VGV4dChzZWxlY3Rpb24sIGVtb2ppIGFzIHN0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVNob3dVcGxvYWRMaW5rKGV2ZW50OiB1bmtub3duKSB7XG4gICAgdGhpcy5hZGRFZGl0TGlua0NvbXBvbmVudFJlZi5zZXQodGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMaWJzVWlDb21wb25lbnRzSW5wdXRzUXVpbGxMaW5rQ29tcG9uZW50KSk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmFkZEVkaXRMaW5rQ29tcG9uZW50UmVmKCk/Lmluc3RhbmNlO1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMucXVpbGwoKT8uZ2V0U2VsZWN0aW9uKCk7XG4gICAgY29uc3QgdGV4dFNlbGVjdGVkID0gc2VsZWN0aW9uPy5sZW5ndGggPyB0aGlzLnF1aWxsKCk/LmdldFRleHQoc2VsZWN0aW9uPy5pbmRleCwgc2VsZWN0aW9uPy5sZW5ndGgpIDogJyc7XG4gICAgY29uc3QgZGF0YSA9IGV2ZW50IGFzIElMaW5rIHwgdW5kZWZpbmVkO1xuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgaW5zdGFuY2UuekluZGV4LnNldCh0aGlzLnpJbmRleCgpKTtcbiAgICAgIGluc3RhbmNlLnRpdGxlLnNldChkYXRhPy50aXRsZSB8fCB0ZXh0U2VsZWN0ZWQpO1xuICAgICAgaW5zdGFuY2UubGluay5zZXQoZGF0YT8udXJsIHx8ICcnKTtcbiAgICAgIGluc3RhbmNlLm91dFNhdmVMaW5rLnN1YnNjcmliZSgoaXRlbTogeyB0aXRsZTogc3RyaW5nLCBsaW5rOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCAmJiBkYXRhLnVybCkge1xuICAgICAgICAgIHRoaXMucXVpbGwoKT8uZGVsZXRlVGV4dChkYXRhLnJhbmdlLmluZGV4LCBkYXRhLnJhbmdlLmxlbmd0aCwgUXVpbGwuc291cmNlcy5VU0VSKTtcbiAgICAgICAgICB0aGlzLnF1aWxsKCk/Lmluc2VydFRleHQoZGF0YS5yYW5nZS5pbmRleCwgaXRlbS50aXRsZSwgJ2xpbmsnLCBpdGVtLmxpbmspO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluc2VydExpbmsoaXRlbS50aXRsZSwgaXRlbS5saW5rKTtcbiAgICAgIH0pO1xuICAgICAgaW5zdGFuY2Uub3V0Q2xvc2Uuc3Vic2NyaWJlKCgpID0+IHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMuYWRkRWRpdExpbmtDb21wb25lbnRSZWYoKSkpO1xuICAgIH1cbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmFkZFRvQm9keSh0aGlzLmFkZEVkaXRMaW5rQ29tcG9uZW50UmVmKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJVbkluc2VydExpbmsoKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5xdWlsbCgpPy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgaWYgKCFpc05pbChzZWxlY3Rpb24pKSB7XG4gICAgICB0aGlzLnF1aWxsKCk/LmZvcm1hdFRleHQoc2VsZWN0aW9uLCAnbGluaycsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgdmFsaWRhdGUoKSB7XG4gICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KCcnKTtcbiAgICBjb25zdCB2YWxpZFJlcXVpcmVkID0gdGhpcy52YWxpZFJlcXVpcmVkKCk7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbSgpO1xuICAgIGNvbnN0IGZpZWxkTmFtZUJpbmQgPSB0aGlzLmZpZWxkTmFtZUJpbmQoKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldChpdGVtLCBmaWVsZE5hbWVCaW5kKTtcbiAgICBpZiAodmFsaWRSZXF1aXJlZCAmJiB2YWxpZFJlcXVpcmVkLmlzUmVxdWlyZWQgJiYgKCFmaWVsZE5hbWVCaW5kIHx8ICF2YWx1ZSB8fCAhdmFsdWUudHJpbSgpKSkge1xuICAgICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHZhbGlkUmVxdWlyZWQubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEKTtcbiAgICAgIHRoaXMub3V0TWVzc2FnZUVycm9yLmVtaXQodGhpcy5tZXNzYWdlRXJyb3IoKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkTWluTGVuZ3RoID0gdGhpcy52YWxpZE1pbkxlbmd0aCgpO1xuICAgIGlmICh2YWxpZE1pbkxlbmd0aCAmJiBmaWVsZE5hbWVCaW5kICYmIHZhbHVlICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPCB2YWxpZE1pbkxlbmd0aC5sZW5ndGgpIHtcbiAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh2YWxpZE1pbkxlbmd0aC5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfTUlOX0xFTkdUSCk7XG4gICAgICB0aGlzLm91dE1lc3NhZ2VFcnJvci5lbWl0KHRoaXMubWVzc2FnZUVycm9yKCkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZE1heExlbmd0aCA9IHRoaXMudmFsaWRNYXhMZW5ndGgoKTtcbiAgICBpZiAodmFsaWRNYXhMZW5ndGggJiYgZmllbGROYW1lQmluZCAmJiB2YWx1ZSAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID4gdGhpcy52YWxpZE1heExlbmd0aC5sZW5ndGgpIHtcbiAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh2YWxpZE1heExlbmd0aC5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfTUFYX0xFTkdUSCk7XG4gICAgICB0aGlzLm91dE1lc3NhZ2VFcnJvci5lbWl0KHRoaXMubWVzc2FnZUVycm9yKCkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLm91dE1lc3NhZ2VFcnJvci5lbWl0KHRoaXMubWVzc2FnZUVycm9yKCkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGluc2VydEh0bWwodGFnTmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gKGluZGV4IHx8IGluZGV4ID09PSAwKSA/IGluZGV4IDogdGhpcy5xdWlsbCgpPy5nZXRTZWxlY3Rpb24odHJ1ZSkuaW5kZXg7XG4gICAgaWYgKCFpc05pbChzZWxlY3Rpb24pKSB7XG4gICAgICB0aGlzLnF1aWxsKCk/Lmluc2VydEVtYmVkKHNlbGVjdGlvbiwgdGFnTmFtZSwgY29udGVudCk7XG4gICAgICB0aGlzLnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIGNvbnRlbnQubGVuZ3RoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluc2VydFRleHQoY29udGVudDogc3RyaW5nLCBpbmRleD86IG51bWJlcikge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IChpbmRleCB8fCBpbmRleCA9PT0gMCkgPyBpbmRleCA6IHRoaXMucXVpbGwoKT8uZ2V0U2VsZWN0aW9uKHRydWUpLmluZGV4O1xuICAgIGlmICghaXNOaWwoc2VsZWN0aW9uKSkge1xuICAgICAgdGhpcy5xdWlsbCgpPy5pbnNlcnRUZXh0KHNlbGVjdGlvbiwgY29udGVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbnNlcnRMaW5rKHRleHQ6IHN0cmluZywgdXJsOiBzdHJpbmcsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5xdWlsbCgpPy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgY29uc3QgaW5kZXhJbnNlcnQgPSAoaW5kZXggfHwgaW5kZXggPT09IDApID8gaW5kZXggOiBzZWxlY3Rpb24/LmluZGV4O1xuICAgIGlmIChzZWxlY3Rpb24/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5xdWlsbCgpPy5kZWxldGVUZXh0KHNlbGVjdGlvbi5pbmRleCwgc2VsZWN0aW9uLmxlbmd0aCwgUXVpbGwuc291cmNlcy5VU0VSKTtcbiAgICB9XG4gICAgaWYgKCFpc05pbChpbmRleEluc2VydCkpIHtcbiAgICAgIHRoaXMucXVpbGwoKT8uaW5zZXJ0VGV4dChpbmRleEluc2VydCwgdGV4dCwgJ2xpbmsnLCB1cmwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29udmVydElubmVySFRNTCgpIHtcbiAgICB0aGlzLnNldFN0eWxlRm9yQ29udGVudCgpO1xuICAgIHNldCh0aGlzLml0ZW0oKSwgdGhpcy5maWVsZE5hbWVCaW5kKCksIHRoaXMucXVpbGwoKT8ucm9vdC5pbm5lckhUTUwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdHlsZUZvckNvbnRlbnQoKSB7XG4gICAgY29uc3Qgc3R5bGVBcnJheSA9IFtcbiAgICAgIHsgc2VsZWN0b3I6ICcucWwtZm9udC1BcmlhbCcsIHN0eWxlOiAnZm9udC1mYW1pbHk6IEFyaWFsJyB9LFxuICAgICAgeyBzZWxlY3RvcjogJy5xbC1mb250LXNhbnMtc2VyaWYnLCBzdHlsZTogJ2ZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmJyB9LFxuICAgICAgeyBzZWxlY3RvcjogJy5xbC1mb250LXNlcmlmJywgc3R5bGU6ICdmb250LWZhbWlseTogc2VyaWYnIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnLnFsLWZvbnQtbW9ub3NwYWNlJywgc3R5bGU6ICdmb250LWZhbWlseTogbW9ub3NwYWNlJyB9LFxuICAgICAgeyBzZWxlY3RvcjogJy5xbC1mb250LUhlbHZldGljYScsIHN0eWxlOiAnZm9udC1mYW1pbHk6IEhlbHZldGljYScgfSxcbiAgICAgIHsgc2VsZWN0b3I6ICcubGlicy11aS1xdWlsbC1mb3JtYXQtaW1hZ2UnLCBzdHlsZTogJ21heC13aWR0aDogMTAwJTsgaGVpZ2h0OiBhdXRvJyB9LFxuICAgICAgeyBzZWxlY3RvcjogJy5saWJzLXVpLXF1aWxsLW1lbnRpb24nLCBzdHlsZTogJ2ZvbnQtd2VpZ2h0OiA2MDA7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsgY29sb3I6ICM3MjM5RUEnIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnYmxvY2txdW90ZScsIHN0eWxlOiAnYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjY2NjOyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi10b3A6IDVweDsgcGFkZGluZy1sZWZ0OiAxNnB4JyB9XG4gICAgXTtcbiAgICBzdHlsZUFycmF5LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5xdWlsbCgpPy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoaXRlbS5zZWxlY3Rvcik7XG4gICAgICBlbGVtZW50cz8uZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5zZWxlY3RvciA9PT0gJy5saWJzLXVpLXF1aWxsLWZvcm1hdC1pbWFnZScgfHwgaXRlbS5zZWxlY3RvciA9PT0gJy5saWJzLXVpLXF1aWxsLW1lbnRpb24nIHx8IGl0ZW0uc2VsZWN0b3IgPT09ICdibG9ja3F1b3RlJykge1xuICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsIGl0ZW0uc3R5bGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaXhidWcgaXNzdWU6IGh0dHBzOi8vYWRtaW4tY3YubW9iaW8udm4vaXNzdWVzLzQ5MDkyXG4gICAgICAgIGxldCBzdHlsZUV4aXN0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICAgIGlmIChzdHlsZUV4aXN0KSB7XG4gICAgICAgICAgWydmb250LWZhbWlseTogQXJpYWwnLCAnZm9udC1mYW1pbHk6IHNhbnMtc2VyaWYnLCAnZm9udC1mYW1pbHk6IHNlcmlmJywgJ2ZvbnQtZmFtaWx5OiBtb25vc3BhY2UnLCAnZm9udC1mYW1pbHk6IEhlbHZldGljYSddLmZvckVhY2goZm9udCA9PiB7XG4gICAgICAgICAgICBzdHlsZUV4aXN0ID0gKHN0eWxlRXhpc3Q/LmluY2x1ZGVzKGAke2ZvbnR9O2ApID8gc3R5bGVFeGlzdD8ucmVwbGFjZShgJHtmb250fTtgLCAnJykgOiBzdHlsZUV4aXN0Py5yZXBsYWNlKGZvbnQsICcnKSkgYXMgc3RyaW5nO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsIHN0eWxlRXhpc3QgPyBgJHtzdHlsZUV4aXN0fSR7c3R5bGVFeGlzdFtzdHlsZUV4aXN0Lmxlbmd0aCAtIDFdID09PSAnOycgPyAnJyA6ICc7J30ke2l0ZW0uc3R5bGV9O2AgOiBpdGVtLnN0eWxlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVRvZ2dsZU1lbnRpb24oc2hvdzogYm9vbGVhbikge1xuICAgIHRoaXMuc2hvd01lbnRpb24uc2V0KHNob3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyU2hvd1VwbG9hZEltYWdlKCkge1xuICAgIHRoaXMudXBsb2FkSW1hZ2VDb21wb25lbnRSZWYuc2V0KHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGlic1VpQ29tcG9uZW50c0lucHV0c1F1aWxsVXBsb2FkSW1hZ2VDb21wb25lbnQpKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMudXBsb2FkSW1hZ2VDb21wb25lbnRSZWYoKT8uaW5zdGFuY2U7XG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICBpbnN0YW5jZS51cGxvYWRJbWFnZUNvbmZpZy5zZXQodGhpcy51cGxvYWRJbWFnZUNvbmZpZygpKTtcbiAgICAgIGluc3RhbmNlLm91dENsb3NlLnN1YnNjcmliZSgoZXZlbnQ6IHN0cmluZyB8IHZvaWQpID0+IHtcbiAgICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZW1vdmUodGhpcy51cGxvYWRJbWFnZUNvbXBvbmVudFJlZigpKTtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5pbnNlcnRIdG1sKCdpbWFnZScsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuYWRkVG9Cb2R5KHRoaXMudXBsb2FkSW1hZ2VDb21wb25lbnRSZWYoKSk7XG4gIH1cblxuICBwcml2YXRlIHNldFNlbGVjdGlvbihpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlciwgc291cmNlcz86IFNvdXJjZXMpIHtcbiAgICB0aGlzLnF1aWxsKCk/LnNldFNlbGVjdGlvbihpbmRleCwgbGVuZ3RoLCBzb3VyY2VzKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0TWVudGlvbihldmVudDogSU1lbnRpb25JbnNlcnQpIHtcbiAgICBjb25zdCByYW5nZSA9IHRoaXMucXVpbGwoKT8uZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFyYW5nZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjdXJzb3JQb3MgPSByYW5nZS5pbmRleDtcbiAgICBjb25zdCBzdGFydFBvc0luc2VydCA9IGN1cnNvclBvcyAtIGV2ZW50Lmxlbmd0aEtleTtcbiAgICB0aGlzLnF1aWxsKCk/LmRlbGV0ZVRleHQoc3RhcnRQb3NJbnNlcnQsIGV2ZW50Lmxlbmd0aEtleSwgUXVpbGwuc291cmNlcy5VU0VSKTtcbiAgICB0aGlzLnF1aWxsKCk/Lmluc2VydEVtYmVkKHN0YXJ0UG9zSW5zZXJ0LCAnbWVudGlvbicsIGV2ZW50LmRhdGEsIFF1aWxsLnNvdXJjZXMuVVNFUik7XG4gICAgdGhpcy5xdWlsbCgpPy5pbnNlcnRUZXh0KHN0YXJ0UG9zSW5zZXJ0ICsgMSwgJyAnLCBRdWlsbC5zb3VyY2VzLlVTRVIpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHN0YXJ0UG9zSW5zZXJ0ICsgMiwgMCwgUXVpbGwuc291cmNlcy5VU0VSKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySW5zZXJ0TWVudGlvbihkYXRhOiBJTWVudGlvbkluc2VydCkge1xuICAgIHRoaXMuaW5zZXJ0TWVudGlvbihkYXRhKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzZXRGb250U2l6ZShzaXplOiBudW1iZXIpIHtcbiAgICB0aGlzLnF1aWxsKCk/LmZvcm1hdCgnc2l6ZScsIGAke3NpemV9cHhgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzZXRDb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgdGhpcy5xdWlsbCgpPy5mb3JtYXQoJ2NvbG9yJywgY29sb3IpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNldEJhY2tncm91bmQoY29sb3I6IHN0cmluZykge1xuICAgIHRoaXMucXVpbGwoKT8uZm9ybWF0KCdiYWNrZ3JvdW5kJywgY29sb3IpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJWYWx1ZUNoYW5nZSh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgdGhpcy5zaXplLnVwZGF0ZShpdGVtID0+ICh7IC4uLml0ZW0sIHZhbHVlOiB2YWx1ZSBhcyBudW1iZXIgfSkpO1xuICAgIHRoaXMucXVpbGwoKT8uZm9ybWF0KCdzaXplJywgYCR7dGhpcy5zaXplKCkudmFsdWV9cHhgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVTZWxlY3RBbGlnbihldmVudDogSUVtaXRTZWxlY3RLZXkgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmFsaWduU2VsZWN0ZWQuc2V0KGV2ZW50KTtcbiAgICB0aGlzLnNldFN0eWxlKCdhbGlnbicsIGV2ZW50Py5rZXkgYXMgc3RyaW5nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVTZWxlY3RGb250KGV2ZW50OiBJRW1pdFNlbGVjdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZm9udFNlbGVjdGVkLnNldChldmVudCk7XG4gICAgdGhpcy5zZXRTdHlsZSgnZm9udCcsIGV2ZW50Py5rZXkgYXMgc3RyaW5nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlU2hvd01vcmVBY3Rpb24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zaG93TW9yZUFjdGlvbi51cGRhdGUoaXRlbSA9PiAhaXRlbSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLmFkZEVkaXRMaW5rQ29tcG9uZW50UmVmKCkpO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMudXBsb2FkSW1hZ2VDb21wb25lbnRSZWYoKSk7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiPlxuICBAaWYgKGxhYmVsKCk7IGFzIGxhYmVsKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbCBbY2xhc3NJbmNsdWRlXT1cImxhYmVsLmNsYXNzSW5jbHVkZVwiXG4gICAgICBbcmVxdWlyZWRdPVwibGFiZWwucmVxdWlyZWRcIlxuICAgICAgW2xhYmVsTGVmdF09XCJsYWJlbC5sYWJlbExlZnRcIiAvPlxuICB9XG4gIDxkaXYgI3dyYXBwZXJFZGl0b3JcbiAgICBbYXR0ci5oZWlnaHRBdXRvXT1cImhlaWdodEF1dG8oKVwiXG4gICAgW2F0dHIuaGlkZGVuVG9vbEJhcl09XCJvbmx5U2hvd0NvbnRlbnQoKVwiXG4gICAgY2xhc3M9XCJsaWJzLXVpLXF1aWxsLXdyYXBwZXIgdy1mdWxsIGgtZnVsbCByZWxhdGl2ZSBmbGV4IGZsZXgtY29sXCJcbiAgICBbY2xhc3MubGlicy11aS1ib3JkZXItZXJyb3ItZ2VuZXJhbF09XCJtZXNzYWdlRXJyb3IoKSAmJiBzaG93RXJyb3JCb3JkZXIoKSAmJiAhb25seVNob3dFcnJvckJvcmRlckluQ29udGVudCgpXCJcbiAgICBbY2xhc3Mucm91bmRlZC1bNHB4XV09XCJtZXNzYWdlRXJyb3IoKSAmJiBzaG93RXJyb3JCb3JkZXIoKSAmJiAhb25seVNob3dFcnJvckJvcmRlckluQ29udGVudCgpXCI+XG4gICAgPGRpdiAjZWRpdG9yXG4gICAgICBjbGFzcz1cImxpYnMtdWktcXVpbGxcIlxuICAgICAgW2F0dHIuc2hvd0Vycm9yXT1cIm1lc3NhZ2VFcnJvcigpICYmIHNob3dFcnJvckJvcmRlcigpICYmIG9ubHlTaG93RXJyb3JCb3JkZXJJbkNvbnRlbnQoKVwiXG4gICAgICBbY2xhc3MuIWhpZGRlbl09XCIhZGlzcGxheSgpXCI+XG4gICAgICBAaWYgKCFvbmx5U2hvd0NvbnRlbnQoKSkge1xuICAgICAgICA8ZGl2ICNxdWlsbE9wdGlvblxuICAgICAgICAgIGNsYXNzPVwiJ3FsLXRvb2xiYXIgcWwtc25vdyBiZy1bI2Y4ZjlmYV0ge3sgY2xhc3NJbmNsdWRlVG9vbGJhcigpIH19XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvb2xiYXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2ICNxdWlsbEVkaXRvclxuICAgICAgICBMaWJzVWlDb21wb25lbnRzSW5wdXRzTWVudGlvbkRpcmVjdGl2ZVxuICAgICAgICBbbWVudGlvbkNvbmZpZ109XCJkYXRhQ29uZmlnTWVudGlvbigpXCJcbiAgICAgICAgKG91dFRvZ2dsZSk9XCJoYW5kbGVUb2dnbGVNZW50aW9uKCRldmVudClcIlxuICAgICAgICAob3V0SW5zZXJ0TWVudGlvbik9XCJoYW5kbGVySW5zZXJ0TWVudGlvbigkZXZlbnQpXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgQGlmICh0ZW1wbGF0ZSgpOyBhcyB0ZW1wbGF0ZSkge1xuICAgICAgPGRpdiBbY2xhc3NdPVwiY2xhc3NJbmNsdWRlVGVtcGxhdGUoKVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZiAobWVzc2FnZUVycm9yKCkgJiYgc2hvd0Vycm9yTGFiZWwoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBsZWFkaW5nLW5vcm1hbCBtdC1bOHB4XVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LVsjZmY1NDU0XSBsaWJzLXVpLWZvbnQtaDdyXCI+IHt7IG1lc3NhZ2VFcnJvcigpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbkBpZiAoc2hvd1Rvb2xCYXIoKSkge1xuICA8ZGl2ICNxdWlsbFRvb2xiYXJcbiAgICBbY2xhc3NdPVwiJ3FsLXNub3cgYWJzb2x1dGUgcHgtWzhweF0gcHktWzRweF0gcC0wIHctWzUwMHB4XSByb3VuZGVkLVs0cHhdIGJnLVsjZmZmZmZmXSBsaWJzLXVpLXF1aWxsLXRvb2xiYXItYW5pbWF0aW9uICcgKyBjbGFzc0luY2x1ZGVUb29sYmFyKClcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9vbGJhclwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbn1cblxuPG5nLXRlbXBsYXRlICN0b29sYmFyPlxuICA8ZGl2IGNsYXNzPVwidG9vbGJhclwiXG4gICAgI3Rvb2xiYXJJdGVtcz5cbiAgICA8ZGl2IGNsYXNzPVwicWwtZm9ybWF0cyBpdGVtcy1jZW50ZXJcIj5cbiAgICAgIEBmb3IgKG9wdGlvbiBvZiBvcHRpb25zVG9vbGJhcigpOyB0cmFjayBvcHRpb24pIHtcbiAgICAgICAgPGRpdiAjaXRlbVxuICAgICAgICAgIFtpZF09XCJvcHRpb24udHlwZSsnXycrJGluZGV4XCJcbiAgICAgICAgICBjbGFzcz1cIml0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJpdGVtSGlkZGVuKCkuaW5jbHVkZXMoJGluZGV4KSB8fCBpdGVtSGlkZGVuRXhwYW5kKCkuaW5jbHVkZXMoJGluZGV4KVwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiIWl0ZW1IaWRkZW4oKS5pbmNsdWRlcygkaW5kZXgpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTtjb250ZXh0OntvcHRpb24sICRpbmRleCwgJGxhc3R9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgICAgIEBpZiAoaXRlbUhpZGRlbigpLmxlbmd0aCkge1xuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwic2hvd01vcmVBY3Rpb24oKSA/ICdidXR0b24tc2Vjb25kYXJ5JyA6ICdidXR0b24tdGhpcmQnXCJcbiAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichcC1bMXB4XSAhaC1bMjBweF0gbWwtWzhweF0nXCJcbiAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tbW92ZS1yaWdodCByb3RhdGUtOTAnXCJcbiAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2hhbmdlU2hvd01vcmVBY3Rpb24oJGV2ZW50KVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBbY2xhc3MuaGlkZGVuXT1cIiFzaG93TW9yZUFjdGlvbigpXCJcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGJnLVsjZmZmZmZmXSB0b3AtWzEwcHhdIHNoYWRvdy1tZCB6LVsxXSBmbGV4IGl0ZW1zLWNlbnRlciBwbC1bOHB4XSBwci1bMTZweF0gcHktWzRweF0gcm91bmRlZC1bOHB4XSB0b3AtWzMxcHhdIHJpZ2h0LVswcHhdXCI+XG4gICAgICAgICAgQGZvciAob3B0aW9uIG9mIG9wdGlvbnNUb29sYmFyKCk7IHRyYWNrIG9wdGlvbikge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWl0ZW1IaWRkZW4oKS5pbmNsdWRlcygkaW5kZXgpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmZsZXhdPVwiaXRlbUhpZGRlbigpLmluY2x1ZGVzKCRpbmRleClcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTtjb250ZXh0OntvcHRpb24sICRpbmRleCwgJGxhc3R9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZVxuICBsZXQtJGluZGV4PVwiJGluZGV4XCJcbiAgbGV0LSRsYXN0PVwiJGxhc3RcIlxuICBsZXQtb3B0aW9uPVwib3B0aW9uXCI+XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICd1bmRvJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OiAnaTE4bl91bmRvJywgekluZGV4OiAxMjUwfVwiXG4gICAgICAgIGNsYXNzPVwicWwtdW5kb1wiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdyZWRvJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OiAnaTE4bl9yZWRvJywgekluZGV4OiAxMjUwfVwiXG4gICAgICAgIGNsYXNzPVwicWwtcmVkb1wiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdmb250RmFtaWx5Jykge1xuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LVsxMTdweF0gaC1mdWxsIGJnLVsjZmZmZmZmXSByb3VuZGVkLVs0cHhdIGxpYnMtdWktYm9yZGVyLWdlbmVyYWwge3sgb3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nIH19XCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgW2xhYmVsUG9wb3ZlckZ1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2xpc3RDb25maWddPVwibGlzdENvbmZpZ0ZvbnQoKVwiXG4gICAgICAgIFtsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwiZmFsc2VcIlxuICAgICAgICBbbGlzdEhpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgICAgICBbbGlzdE1heEl0ZW1TaG93XT1cIjhcIlxuICAgICAgICBbekluZGV4XT1cIjEyNTBcIlxuICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZVNlbGVjdEZvbnQoJGV2ZW50KVwiPlxuICAgICAgICBAaWYgKGZvbnRTZWxlY3RlZCgpOyBhcyBmb250U2VsZWN0ZWQpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgcHktWzhweF0gbGlicy11aS1mb250LWg1ciBwbC1bMTZweF0gcHItWzQwcHhdIHt7IG9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJyB9fVwiPlxuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7ekluZGV4OjEyNTB9XCI+XG4gICAgICAgICAgICAgIHt7IGxhYmVsRm9udFNlbGVjdGVkQ29tcHV0ZWQoKSB9fVxuICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLW1vdmUtcmlnaHQgcm90YXRlLTkwIGFic29sdXRlIHJpZ2h0LVsxMnB4XSB0ZXh0LVsjNmE3MzgzXSB0ZXh0LVsxNnB4XVwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2ZvbnRTaXplJykge1xuICAgIDxkaXYgY2xhc3M9XCJxbC1waWNrZXIge3sgb3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nIH19XCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZCBbZGF0YVR5cGVdPVwiJ2ludCdcIlxuICAgICAgICBbKGl0ZW0pXT1cInNpemVcIlxuICAgICAgICBbZmllbGROYW1lQmluZF09XCIndmFsdWUnXCJcbiAgICAgICAgW3ZhbHVlVXBEb3duTnVtYmVyXT1cIjFcIlxuICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwiNzJcIlxuICAgICAgICBbbWluVmFsdWVOdW1iZXJdPVwiOFwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgW2NsYXNzQ29udGFpbmVySW5wdXRdPVwiJ3ctWzcycHhdIGgtWzMycHhdJ1wiXG4gICAgICAgIChvdXRWYWx1ZUNoYW5nZSk9XCJoYW5kbGVyVmFsdWVDaGFuZ2UoJGV2ZW50KVwiIC8+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2NvbG9yJykge1xuICAgIDxkaXYgY2xhc3M9XCJxbC1jb2xvciBxbC1waWNrZXIgcWwtY29sb3ItcGlja2VyICFmbGV4IGl0ZW1zLWNlbnRlciB7eyBvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XScgfX1cIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cIntjb250ZW50OidpMThuX3RleHRfY29sb3InLCB6SW5kZXg6MTI1MH1cIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLXNlbGVjdF9jb2xvciBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgICBbZGlyZWN0aW9uXT1cIid0b3AnXCJcbiAgICAgICAgICBbZXh0ZXJuYWxDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgIFthcHBseU5vd109XCJ0cnVlXCJcbiAgICAgICAgICAob3V0Q29sb3JDaGFuZ2UpPVwic2V0U3R5bGUoJ2NvbG9yJywgJGV2ZW50KVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWljb24tZWRpdG9yLWNvbG9yLXRleHQgbGlicy11aS1idXR0b25zLXNlbGVjdC1jb2xvciB0ZXh0LVsjNmE3MzgzXSB0ZXh0LVsxNnB4XSBob3Zlcjp0ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWxpZ2h0LTEpXVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1idXR0b25zLXNlbGVjdF9jb2xvcj5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2JhY2tncm91bmQnKSB7XG4gICAgPGRpdiBjbGFzcz1cInFsLWJhY2tncm91bmQgcWwtcGlja2VyIHFsLWNvbG9yLXBpY2tlciAhZmxleCBpdGVtcy1jZW50ZXIge3sgb3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nIH19XCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl9iYWNrZ3JvdW5kX2NvbG9yJywgekluZGV4OjEyNTB9XCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1zZWxlY3RfY29sb3IgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgW2RpcmVjdGlvbl09XCIndG9wJ1wiXG4gICAgICAgICAgW2V4dGVybmFsQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICBbYXBwbHlOb3ddPVwidHJ1ZVwiXG4gICAgICAgICAgKG91dENvbG9yQ2hhbmdlKT1cInNldFN0eWxlKCdiYWNrZ3JvdW5kJywgJGV2ZW50KVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWljb24tZWRpdG9yLWNvbG9yLWJhY2tncm91bmQgbGlicy11aS1idXR0b25zLXNlbGVjdC1jb2xvciB0ZXh0LVsjNmE3MzgzXSB0ZXh0LVsxNnB4XSBob3Zlcjp0ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWxpZ2h0LTEpXVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1idXR0b25zLXNlbGVjdF9jb2xvcj5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2JvbGQnKSB7XG4gICAgPGRpdiBbY2xhc3NdPVwib3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nXCI+XG4gICAgICA8YnV0dG9uIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgIFtjb25maWddPVwie2NvbnRlbnQ6J2kxOG5fZm9udF93ZWlnaHRfYm9sZCcsIHpJbmRleDoxMjUwfVwiXG4gICAgICAgIGNsYXNzPVwicWwtYm9sZFwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdpdGFsaWMnKSB7XG4gICAgPGRpdiBbY2xhc3NdPVwib3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nXCI+XG4gICAgICA8YnV0dG9uIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgIFtjb25maWddPVwie2NvbnRlbnQ6J2kxOG5fZm9udF9zdHlsZV9pdGFsaWMnLCB6SW5kZXg6MTI1MH1cIlxuICAgICAgICBjbGFzcz1cInFsLWl0YWxpY1wiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICd1bmRlcmxpbmUnKSB7XG4gICAgPGRpdiBbY2xhc3NdPVwib3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nXCI+XG4gICAgICA8YnV0dG9uIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgIFtjb25maWddPVwie2NvbnRlbnQ6J2kxOG5fdGV4dF9kZWNvcmF0aW9uX3VuZGVybGluZScsIHpJbmRleDoxMjUwfVwiXG4gICAgICAgIGNsYXNzPVwicWwtdW5kZXJsaW5lXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ3N0cmlrZVRocm91Z2gnKSB7XG4gICAgPGRpdiBbY2xhc3NdPVwib3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nXCI+XG4gICAgICA8YnV0dG9uIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgIFtjb25maWddPVwie2NvbnRlbnQ6J2kxOG5fdGV4dF9saW5lX3Rocm91Z2gnLCB6SW5kZXg6MTI1MH1cIlxuICAgICAgICBjbGFzcz1cInFsLXN0cmlrZVwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdhZGp1c3QnKSB7XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlICFmbGV4IGl0ZW1zLWNlbnRlciBxbC1hbGlnbiBxbC1waWNrZXIgcWwtaWNvbi1waWNrZXIgIXctbWF4IHt7IG9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJyB9fVwiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFtjb25maWddPVwie2NvbnRlbnQ6J2kxOG5fYWRqdXN0JywgekluZGV4OjEyNTB9XCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24gW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCJcbiAgICAgICAgICBbbGFiZWxQb3BvdmVyRnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgIFtsaXN0Q29uZmlnXT1cImxpc3RDb25maWdBbGlnbigpXCJcbiAgICAgICAgICBbbGlzdEhpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgICAgICAgIFtwb3BvdmVyQ3VzdG9tQ29uZmlnXT1cIntpZ25vcmVBcnJvdzogdHJ1ZSwgY2xhc3NJbmNsdWRlOiAnIXctWzMycHhdIG92ZXJmbG93LWhpZGRlbiAhcHktWzRweF0nLCBwb3NpdGlvbjoge21vZGU6ICdzdGFydCcsIGRpc3RhbmNlOiAwfSwgcGFkZGluZ0xlZnRJdGVtOiBmYWxzZX1cIlxuICAgICAgICAgIFtsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiOFwiXG4gICAgICAgICAgW3pJbmRleF09XCIxMjUwXCJcbiAgICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZVNlbGVjdEFsaWduKCRldmVudClcIj5cbiAgICAgICAgICBAaWYgKGFsaWduU2VsZWN0ZWQoKTsgYXMgYWxpZ25TZWxlY3RlZCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgIDxpIFtjbGFzc109XCJpY29uQWxpZ25TZWxlY3RlZENvbXB1dGVkKClcIj48L2k+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLW1vdmUtcmlnaHQgcm90YXRlLTkwIHRleHQtWyM2YTczODNdIHRleHQtWzE2cHhdIG1sLVs0cHhdXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bj5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2luZGVudEluY3JlYXNlJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2luZGVudF9pbmNyZWFzZScsIHpJbmRleDoxMjUwfVwiXG4gICAgICAgIGNsYXNzPVwicWwtaW5kZW50XCJcbiAgICAgICAgdmFsdWU9XCIrMVwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdpbmRlbnREZWNyZWFzZScpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl9pbmRlbnRfZGVjcmVhc2UnLCB6SW5kZXg6MTI1MH1cIlxuICAgICAgICBjbGFzcz1cInFsLWluZGVudFwiXG4gICAgICAgIHZhbHVlPVwiLTFcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnbGlzdEJ1bGxldGVkJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2xpc3RfYnVsbGV0ZWQnLCB6SW5kZXg6MTI1MH1cIlxuICAgICAgICBjbGFzcz1cInFsLWxpc3QgcWwtYnVsbGV0XCJcbiAgICAgICAgdmFsdWU9XCJidWxsZXRcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnbGlzdE51bWJlcmVkJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2xpc3RfbnVtYmVyZWQnLCB6SW5kZXg6MTI1MH1cIlxuICAgICAgICBjbGFzcz1cInFsLWxpc3QgcWwtb3JkZXJlZFwiXG4gICAgICAgIHZhbHVlPVwib3JkZXJlZFwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdwZXJzb25hbGl6ZScgJiYgdGVtcGxhdGVUb29sQmFyUGVyc29uYWxpemUoKTsgYXMgdGVtcGxhdGVUb29sQmFyUGVyc29uYWxpemUpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIge3sgb3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nIH19XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVUb29sQmFyUGVyc29uYWxpemVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnYmxvY2txdW90ZScpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl9xdW90ZScsIHpJbmRleDoxMjUwfVwiXG4gICAgICAgIGNsYXNzPVwicWwtYmxvY2txdW90ZVwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdsaW5rJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2luc2VydF9saW5rJywgekluZGV4OjEyNTB9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1saW5rXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ3VuTGluaycpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl91bmxpbmsnLCB6SW5kZXg6MTI1MH1cIlxuICAgICAgICBjbGFzcz1cInFsLXVuTGlua1wiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdpbWFnZScgJiYgdXBsb2FkSW1hZ2VDb25maWcoKS5zaG93SWNvbikge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2ltYWdlJywgekluZGV4OjEyNTB9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1pbWFnZVwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdlbW9qaScpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZW1vamkgW3pJbmRleF09XCIxMjUwXCJcbiAgICAgICAgW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAob3V0RXZlbnRFbW9qaSk9XCJoYW5kbGVyQWRkRW1vamkoJGV2ZW50KVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtZW1vamlcIj48L2J1dHRvbj5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWVtb2ppPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdsaW5lJykge1xuICAgIDxkaXYgY2xhc3M9XCJ3LVsxcHhdIGgtWzE2cHhdIGxpYnMtdWktYm9yZGVyLXJpZ2h0LWdlbmVyYWxcIj48L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFttb2RlXT1cIidjbGljaydcIlxuICBbaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZV09XCJ0cnVlXCJcbiAgW2NvbmZpZ109XCJ7dGVtcGxhdGU6IHZpZXdMaW5rLCB3aGl0ZVRoZW1lOiB0cnVlLCBpZ25vcmVBcnJvdzogdHJ1ZX1cIlxuICAob3V0RXZlbnQpPVwiaGFuZGxlclBvcG92ZXJFdmVudCgkZXZlbnQpXCJcbiAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50KVwiIC8+XG5cbjxuZy10ZW1wbGF0ZSAjdmlld0xpbms+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHgtWzE2cHhdIHB5LVs4cHhdIHJvdW5kZWQtWzhweF1cIj5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1pbi13LTAgbGlicy11aS1mb250LWg1clwiXG4gICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmU+e3sgbGluaygpLnVybCB9fTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBtbC1bMTZweF1cIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1lZGl0LWxpbmUnXCJcbiAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIXAtMCdcIlxuICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckVkaXQoJGV2ZW50KVwiIC8+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cIididXR0b24tbGluay1jdXN0b20nXCJcbiAgICAgICAgW2J1dHRvbkN1c3RvbV09XCJ7XG4gICAgICAgICAgY29uZmlnU3RlcENvbG9yOiB7XG4gICAgICAgICAgICB0ZXh0OiAnIzA3MTYzMScsXG4gICAgICAgICAgICB0ZXh0X2hvdmVyOiAnI2VlMmQ0MScsXG4gICAgICAgICAgICB0ZXh0X2FjdGl2ZTogJyNlZTJkNDEnLFxuICAgICAgICAgICAgdGV4dF9kaXNhYmxlOiAnMDcxNjMxJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcm9vdENvbG9yOiAnIzA3MTYzMSdcbiAgICAgICAgfVwiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAgbWwtWzEycHhdJ1wiXG4gICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tbGluay1icm9rZW4nXCJcbiAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJVbmxpbmsoJGV2ZW50KVwiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
655
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9xdWlsbC9zcmMvcXVpbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9xdWlsbC9zcmMvcXVpbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQWdCLFFBQVEsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBZSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JOLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSwyQ0FBMkMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBa0IsaUNBQWlDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRixPQUFPLEVBQWtDLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUgsT0FBTyxFQUFnQyxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RILE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRW5GLE9BQU8sRUFBZ0MsZ0NBQWdDLEVBQXNCLE1BQU0sNkJBQTZCLENBQUM7QUFFakksT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLHdCQUF3QixFQUFFLEdBQUcsRUFBRSxLQUFL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TUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeGhCLEtBQUssQ0FBQyxTQUFTLEdBQUcsNEJBQTRCLENBQUM7UUFDL0MsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbkIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUIsS0FBSyxDQUFDLFFBQVEsQ0FB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QUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFhLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRVMsMkJBQTJCLENBQUMsS0FBWTtRQUNoRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQzt3R0F6cEJVLG9DQUFvQzs0RkFBcEMsb0NBQW9DLDB3SkN2Q2pELHEyYkEwVUEsK3lMRDFTSSxlQUFlLDRGQUFFLGdCQUFnQixvSkFBRSxzQ0FBc0MsNk9BQ3pFLDhCQUE4Qiw0cUJBQUUsaUNBQWlDLG16REFDakUsZ0NBQWdDLHFlQUFFLDJDQUEyQyw0TkFDN0Usb0NBQW9DLHF6REFBRSw4QkFBOEIsb1BBQ3BFLHNDQUFzQzs7NEZBRzdCLG9DQUFvQztrQkFmaEQsU0FBUzsrQkFFRSxpQ0FBaUMsY0FDL0IsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBR3RDO3dCQUNQLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxzQ0FBc0M7d0JBQ3pFLDhCQUE4QixFQUFFLGlDQUFpQzt3QkFDakUsZ0NBQWdDLEVBQUUsMkNBQTJDO3dCQUM3RSxvQ0FBb0MsRUFBRSw4QkFBOEI7d0JBQ3BFLHNDQUFzQztxQkFDdkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgY29tcHV0ZWQsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIFRlbXBsYXRlUmVmLCB2aWV3Q2hpbGQsIHZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zU2VsZWN0Q29sb3JDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtc2VsZWN0LWNvbG9yJztcbmltcG9ydCB7IElFbWl0U2VsZWN0S2V5LCBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNFbW9qaUNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLWVtb2ppJztcbmltcG9ydCB7IElNZW50aW9uQ29uZmlnLCBJTWVudGlvbkluc2VydCwgTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25EaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWlucHV0cy1tZW50aW9uJztcbmltcG9ydCB7IElWYWxpZExlbmd0aCwgSVZhbGlkUmVxdWlyZWQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXZhbGlkJztcbmltcG9ydCB7IElMYWJlbCwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1sYWJlbCc7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW0gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxpc3QnO1xuaW1wb3J0IHsgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBUWVBFX1RFTVBMQVRFX1JFRiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1keW5hbWljLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElELCBFUlJPUl9NRVNTQUdFX01BWF9MRU5HVEgsIEVSUk9SX01FU1NBR0VfTUlOX0xFTkdUSCwgZ2V0LCBpc05pbCwgcGF0dGVyblVybCwgc2V0LCB4c3NGaWx0ZXIgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCBRdWlsbCwgeyBSYW5nZVN0YXRpYywgU291cmNlcywgU3RyaW5nTWFwIH0gZnJvbSAncXVpbGwnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGluZGVudFN0eWxlIH0gZnJvbSAnLi9pbmRlbnQtYXR0cmlidXRvci9pbmRlbnQtYXR0cmlidXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUxpbmssIElRdWlsbEZ1bmN0aW9uQ29udHJvbEV2ZW50LCBJVG9vbGJhckNvbmZpZywgSVVwbG9hZEltYWdlQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3F1aWxsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzUXVpbGxMaW5rQ29tcG9uZW50IH0gZnJvbSAnLi9saW5rL2xpbmsuY29tcG9uZW50JztcbmltcG9ydCB7IFF1aWxsTWVudGlvbkJsb3QgfSBmcm9tICcuL21lbnRpb24vbWVudGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c1F1aWxsVXBsb2FkSW1hZ2VDb21wb25lbnQgfSBmcm9tICcuL3VwbG9hZC1pbWFnZS91cGxvYWQtaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IGljb25MaXN0LCBsaW5rRGVmYXVsdCwgbGlzdENvbmZpZ0FsaWduLCBsaXN0Q29uZmlnRm9udCwgbGlzdEZvbnQsIHRvb2xCYXJPcHRpb25EZWZhdWx0LCB1cGxvYWRJbWFnZUNvbmZpZ0RlZmF1bHQgfSBmcm9tICcuL3V0aWxzL3F1aWxsLmRlZmluZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtcXVpbGwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1aWxsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3F1aWxsLmNvbXBvbmVudC5zY3NzJyxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCwgTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25EaXJlY3RpdmUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zU2VsZWN0Q29sb3JDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzRW1vamlDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzUXVpbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJvdGVjdGVkIG1lc3NhZ2VFcnJvciA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIGRpc3BsYXkgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgbGlzdENvbmZpZ0FsaWduID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbT4obGlzdENvbmZpZ0FsaWduKCkpO1xuICBwcm90ZWN0ZWQgYWxpZ25TZWxlY3RlZCA9IHNpZ25hbDxJRW1pdFNlbGVjdEtleSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGljb25BbGlnblNlbGVjdGVkQ29tcHV0ZWQgPSBjb21wdXRlZCgoKSA9PiBnZXQodGhpcy5hbGlnblNlbGVjdGVkKCksICdpdGVtLmljb24nKSk7XG4gIHByb3RlY3RlZCBsaXN0Q29uZmlnRm9udCA9IHNpZ25hbDxJTGlzdENvbmZpZ0l0ZW0+KGxpc3RDb25maWdGb250KCkpO1xuICBwcm90ZWN0ZWQgZm9udFNlbGVjdGVkID0gc2lnbmFsPElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgbGFiZWxGb250U2VsZWN0ZWRDb21wdXRlZCA9IGNvbXB1dGVkKCgpID0+IGdldCh0aGlzLmZvbnRTZWxlY3RlZCgpLCAnaXRlbS5sYWJlbCcpIHx8ICdTYW5zIFNlcmlmJyk7XG4gIHByb3RlY3RlZCBzaXplID0gc2lnbmFsPHsgdmFsdWU6IG51bWJlciB9Pih7IHZhbHVlOiAxNCB9KTtcbiAgcHJvdGVjdGVkIGl0ZW1IaWRkZW5FeHBhbmQgPSBzaWduYWw8QXJyYXk8bnVtYmVyPj4oW10pO1xuICBwcm90ZWN0ZWQgaXRlbUhpZGRlbiA9IHNpZ25hbDxBcnJheTxudW1iZXI+PihbXSk7XG4gIHByb3RlY3RlZCBzaG93TW9yZUFjdGlvbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBsaW5rID0gc2lnbmFsPElMaW5rPihsaW5rRGVmYXVsdCgpKTtcblxuICBwcml2YXRlIHBvcG92ZXJGdW5jdGlvbkNvbnRyb2wgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBxdWlsbCA9IHNpZ25hbDxRdWlsbCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBoYW5kbGVycyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCAoLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gdm9pZD4+KHsgdW5kbzogdGhpcy5oYW5kbGVVbmRvLmJpbmQodGhpcyksIHJlZG86IHRoaXMuaGFuZGxlUmVkby5iaW5kKHRoaXMpIH0pO1xuICBwcml2YXRlIHNob3dNZW50aW9uID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBhZGRFZGl0TGlua0NvbXBvbmVudFJlZiA9IHNpZ25hbDxDb21wb25lbnRSZWY8TGlic1VpQ29tcG9uZW50c0lucHV0c1F1aWxsTGlua0NvbXBvbmVudD4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgdXBsb2FkSW1hZ2VDb21wb25lbnRSZWYgPSBzaWduYWw8Q29tcG9uZW50UmVmPExpYnNVaUNvbXBvbmVudHNJbnB1dHNRdWlsbFVwbG9hZEltYWdlQ29tcG9uZW50PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50U2VydmljZSA9IGluamVjdChMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgb3B0aW9uc1Rvb2xiYXIgPSBpbnB1dDxBcnJheTxJVG9vbGJhckNvbmZpZz4sIEFycmF5PElUb29sYmFyQ29uZmlnPiB8IHVuZGVmaW5lZD4odG9vbEJhck9wdGlvbkRlZmF1bHQoKSwgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlIHx8IHRvb2xCYXJPcHRpb25EZWZhdWx0KCkgfSk7XG4gIHJlYWRvbmx5IHNob3dUb29sQmFyID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlVG9vbGJhciA9IGlucHV0PHN0cmluZz4oJ2JvdHRvbS1bLTY2cHhdIGxlZnQtWzE4cHhdJyk7XG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdpMThuX2ltcG9ydF9jb250ZW50JywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJ2kxOG5faW1wb3J0X2NvbnRlbnQnIH0pO1xuICByZWFkb25seSBsYWJlbCA9IGlucHV0PElMYWJlbCB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgaXRlbSA9IG1vZGVsPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpO1xuICByZWFkb25seSBmaWVsZE5hbWVCaW5kID0gaW5wdXQ8c3RyaW5nPigndmFsdWUnKTtcbiAgcmVhZG9ubHkgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBzaG93RXJyb3JMYWJlbCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBzaG93RXJyb3JCb3JkZXIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IG9ubHlTaG93RXJyb3JCb3JkZXJJbkNvbnRlbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZVRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGhhbmRsZXJzRXhwYW5kID0gaW5wdXQ8QXJyYXk8eyB0aXRsZTogc3RyaW5nLCBhY3Rpb246ICgpID0+IHZvaWQgfT4+KCk7XG4gIHJlYWRvbmx5IHZhbGlkUmVxdWlyZWQgPSBpbnB1dDxJVmFsaWRSZXF1aXJlZD4oKTtcbiAgcmVhZG9ubHkgdmFsaWRNaW5MZW5ndGggPSBpbnB1dDxJVmFsaWRMZW5ndGg+KCk7XG4gIHJlYWRvbmx5IHZhbGlkTWF4TGVuZ3RoID0gaW5wdXQ8SVZhbGlkTGVuZ3RoPigpO1xuICByZWFkb25seSBvbmx5U2hvd0NvbnRlbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMjAxLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAxMjAxIH0pO1xuICByZWFkb25seSBkYXRhQ29uZmlnTWVudGlvbiA9IGlucHV0PElNZW50aW9uQ29uZmlnPigpO1xuICByZWFkb25seSBoZWlnaHRBdXRvID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYXV0b0ZvY3VzID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYXV0b0ZvY3VzQm90dG9tID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdGVtcGxhdGVUb29sQmFyUGVyc29uYWxpemUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuICByZWFkb25seSB1cGxvYWRJbWFnZUNvbmZpZyA9IGlucHV0PElVcGxvYWRJbWFnZUNvbmZpZywgSVVwbG9hZEltYWdlQ29uZmlnIHwgdW5kZWZpbmVkPih1cGxvYWRJbWFnZUNvbmZpZ0RlZmF1bHQoKSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgdXBsb2FkSW1hZ2VDb25maWdEZWZhdWx0KCkgfSk7XG5cbiAgcmVhZG9ubHkgb3V0TWVzc2FnZUVycm9yID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3V0Qmx1ciA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBvdXRGb2N1cyA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBvdXRDaGFuZ2UgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElRdWlsbEZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuICByZWFkb25seSBvdXRTZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcblxuICByZWFkb25seSB3cmFwcGVyRWRpdG9yRWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3dyYXBwZXJFZGl0b3InKTtcbiAgcmVhZG9ubHkgZWRpdG9yRWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2VkaXRvcicpO1xuICByZWFkb25seSBxdWlsbE9wdGlvbkVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdxdWlsbE9wdGlvbicpO1xuICByZWFkb25seSBxdWlsbEVkaXRvckVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdxdWlsbEVkaXRvcicpO1xuICByZWFkb25seSBxdWlsbFRvb2xiYXJFbCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigncXVpbGxUb29sYmFyJyk7XG4gIHJlYWRvbmx5IHRvb2xiYXJJdGVtc0VsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCd0b29sYmFySXRlbXMnKTtcbiAgcmVhZG9ubHkgaXRlbXNFbCA9IHZpZXdDaGlsZHJlbjxFbGVtZW50UmVmPignaXRlbScpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIGNoZWNrSXNWYWxpZDogdGhpcy52YWxpZGF0ZS5iaW5kKHRoaXMpLFxuICAgICAgc2V0Q29udGVudDogdGhpcy5zZXRDb250ZW50LmJpbmQodGhpcyksXG4gICAgICBpbnNlcnRUZXh0OiB0aGlzLmluc2VydFRleHQuYmluZCh0aGlzKSxcbiAgICAgIGluc2VydExpbms6IHRoaXMuaW5zZXJ0TGluay5iaW5kKHRoaXMpLFxuICAgICAgaW5zZXJ0SHRtbDogdGhpcy5pbnNlcnRIdG1sLmJpbmQodGhpcyksXG4gICAgICBzZXRGb250U2l6ZTogdGhpcy5zZXRGb250U2l6ZS5iaW5kKHRoaXMpLFxuICAgICAgc2V0Q29sb3I6IHRoaXMuc2V0Q29sb3IuYmluZCh0aGlzKSxcbiAgICAgIHNldEJhY2tncm91bmQ6IHRoaXMuc2V0QmFja2dyb3VuZC5iaW5kKHRoaXMpXG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jYWxjdWxhdG9yVG9vbGJhcigpO1xuICAgIGlmICh0aGlzLmF1dG9Gb2N1cygpKSB7XG4gICAgICB0aGlzLmRpc3BsYXkuc2V0KHRydWUpO1xuICAgIH1cbiAgICB0aGlzLnNldEhhbmRsZXJGdW5jdGlvbigpO1xuICAgIHRoaXMuaW5pdFF1aWxsKCk7XG4gICAgaWYgKCF0aGlzLmF1dG9Gb2N1cygpKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGlzcGxheS5zZXQodHJ1ZSksIDIwMCk7XG4gICAgfVxuICAgIHRoaXMuc2V0Q2xhc3NJbmNsdWRlQW5kUmVhZE9ubHkoKTtcbiAgICB0aGlzLnNldENvbnRlbnQoZ2V0KHRoaXMuaXRlbSgpLCB0aGlzLmZpZWxkTmFtZUJpbmQoKSwgJycpKTtcbiAgICB0aGlzLmhhbmRsZXJUZXh0Q2hhbmdlKCk7XG4gICAgdGhpcy5oYW5kbGVyU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgdGhpcy5oYW5kbGVyUGFzdGUoKTtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMoKSkge1xuICAgICAgdGhpcy5xdWlsbCgpPy5mb2N1cygpO1xuICAgIH1cbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUodGhpcy5jYWxjdWxhdG9yVG9vbGJhci5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFF1aWxsKCkge1xuICAgIGNvbnN0IHNpemUgPSBRdWlsbC5pbXBvcnQoJ2F0dHJpYnV0b3JzL3N0eWxlL3NpemUnKTtcbiAgICBjb25zdCBpbWFnZSA9IFF1aWxsLmltcG9ydCgnZm9ybWF0cy9pbWFnZScpO1xuICAgIGNvbnN0IHBhcmNobWVudCA9IFF1aWxsLmltcG9ydCgncGFyY2htZW50Jyk7XG4gICAgY29uc3QgYWxpZ25TdHlsZSA9IFF1aWxsLmltcG9ydCgnYXR0cmlidXRvcnMvc3R5bGUvYWxpZ24nKTtcbiAgICBjb25zdCBpY29ucyA9IFF1aWxsLmltcG9ydCgndWkvaWNvbnMnKTtcbiAgICBjb25zdCBibG9jayA9IHBhcmNobWVudC5xdWVyeSgnYmxvY2snKTtcbiAgICBjb25zdCBpdGFsaWMgPSBRdWlsbC5pbXBvcnQoJ2Zvcm1hdHMvaXRhbGljJyk7XG4gICAgY29uc3QgYm9sZCA9IFF1aWxsLmltcG9ydCgnZm9ybWF0cy9ib2xkJyk7XG4gICAgc2l6ZS53aGl0ZWxpc3QgPSBbJzhweCcsICc5cHgnLCAnMTBweCcsICcxMXB4JywgJzEycHgnLCAnMTNweCcsICcxNHB4JywgJzE1cHgnLCAnMTZweCcsICcxN3B4JywgJzE4cHgnLCAnMTlweCcsICcyMHB4JywgJzIxcHgnLCAnMjJweCcsICcyM3B4JywgJzI0cHgnLCAnMjVweCcsICcyNnB4JywgJzI3cHgnLCAnMjhweCcsICcyOXB4JywgJzMwcHgnLCAnMzFweCcsICczMnB4JywgJzMzcHgnLCAnMzRweCcsICczNXB4JywgJzM2cHgnLCAnMzdweCcsICczOHB4JywgJzM5cHgnLCAnNDBweCcsICc0MXB4JywgJzQycHgnLCAnNDNweCcsICc0NHB4JywgJzQ1cHgnLCAnNDZweCcsICc0N3B4JywgJzQ4cHgnLCAnNDlweCcsICc1MHB4JywgJzUxcHgnLCAnNTJweCcsICc1M3B4JywgJzU0cHgnLCAnNTVweCcsICc1NnB4JywgJzU3cHgnLCAnNThweCcsICc1OXB4JywgJzYwcHgnLCAnNjFweCcsICc2MnB4JywgJzYzcHgnLCAnNjRweCcsICc2NXB4JywgJzY2cHgnLCAnNjdweCcsICc2OHB4JywgJzY5cHgnLCAnNzBweCcsICc3MXB4JywgJzcycHgnXTtcbiAgICBpbWFnZS5jbGFzc05hbWUgPSAnbGlicy11aS1xdWlsbC1mb3JtYXQtaW1hZ2UnO1xuICAgIGJsb2NrLnRhZ05hbWUgPSAnRElWJztcbiAgICBpdGFsaWMudGFnTmFtZSA9ICdpJztcbiAgICBib2xkLnRhZ05hbWUgPSAnQic7XG4gICAgUXVpbGwucmVnaXN0ZXIoYm9sZCwgdHJ1ZSk7XG4gICAgUXVpbGwucmVnaXN0ZXIoaXRhbGljLCB0cnVlKTtcbiAgICBRdWlsbC5yZWdpc3RlcihzaXplLCB0cnVlKTtcbiAgICBRdWlsbC5yZWdpc3RlcihpbWFnZSwgdHJ1ZSk7XG4gICAgUXVpbGwucmVnaXN0ZXIoYmxvY2ssIHRydWUpO1xuICAgIFF1aWxsLnJlZ2lzdGVyKGFsaWduU3R5bGUsIHRydWUpO1xuICAgIFF1aWxsLnJlZ2lzdGVyKFF1aWxsTWVudGlvbkJsb3QsIHRydWUpO1xuICAgIFF1aWxsLnJlZ2lzdGVyKHsgJ2Zvcm1hdHMvaW5kZW50JzogaW5kZW50U3R5bGUgfSwgdHJ1ZSk7XG4gICAgaWNvbkxpc3QoKS5mb3JFYWNoKGVsZW1lbnQgPT4gc2V0KGljb25zLCBlbGVtZW50LmtleSwgYDxzcGFuIGNsYXNzPVwiJHtlbGVtZW50Lmljb259IGhvdmVyOnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItbGlnaHQtMSldIHRleHQtWzE2cHhdIHRleHQtWyM2YTczODNdXCI+PC9zcGFuPmApKTtcbiAgICB0aGlzLnF1aWxsLnNldChuZXcgUXVpbGwodGhpcy5xdWlsbEVkaXRvckVsKCk/Lm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIG1vZHVsZXM6IHtcbiAgICAgICAgdG9vbGJhcjoge1xuICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5vbmx5U2hvd0NvbnRlbnQoKSAmJiB0aGlzLnF1aWxsVG9vbGJhckVsKCkgPyB0aGlzLnF1aWxsVG9vbGJhckVsKCk/Lm5hdGl2ZUVsZW1lbnQgOiB0aGlzLnF1aWxsT3B0aW9uRWwoKT8ubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICBoYW5kbGVyczogdGhpcy5oYW5kbGVycygpXG4gICAgICAgIH0sXG4gICAgICAgIGNsaXBib2FyZDoge1xuICAgICAgICAgIG1hdGNoVmlzdWFsOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBoaXN0b3J5OiB7XG4gICAgICAgICAgZGVsYXk6IDEwMDAsXG4gICAgICAgICAgbWF4U3RhY2s6IDEwMCxcbiAgICAgICAgICB1c2VyT25seTogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAga2V5Ym9hcmQ6IHtcbiAgICAgICAgICBiaW5kaW5nczoge1xuICAgICAgICAgICAgZW50ZXI6IHtcbiAgICAgICAgICAgICAga2V5OiAxMyxcbiAgICAgICAgICAgICAgaGFuZGxlcjogKCkgPT4gdGhpcy5zaG93TWVudGlvbigpID8gZmFsc2UgOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVhZE9ubHk6IHRoaXMucmVhZG9ubHkoKSxcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRoaXMucGxhY2Vob2xkZXIoKSksXG4gICAgICB0aGVtZTogJ3Nub3cnLFxuICAgICAgYm91bmRzOiB0aGlzLmhlaWdodEF1dG8oKSA/IHRoaXMud3JhcHBlckVkaXRvckVsKCk/Lm5hdGl2ZUVsZW1lbnQgOiB0aGlzLnF1aWxsRWRpdG9yRWwoKT8ubmF0aXZlRWxlbWVudCxcbiAgICAgIHNjcm9sbGluZ0NvbnRhaW5lcjogdGhpcy5oZWlnaHRBdXRvKCkgPyB0aGlzLndyYXBwZXJFZGl0b3JFbCgpPy5uYXRpdmVFbGVtZW50IDogbnVsbFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SGFuZGxlckZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLnVwbG9hZEltYWdlQ29uZmlnKCkubW9kZUN1c3RvbSkge1xuICAgICAgdGhpcy5oYW5kbGVycy51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCBpbWFnZTogdGhpcy5oYW5kbGVyU2hvd1VwbG9hZEltYWdlLmJpbmQodGhpcyksIGVtb2ppOiAoKSA9PiB7IHJldHVybiB9IH0pKTtcbiAgICB9XG4gICAgbGV0IGxpbmsgPSBmYWxzZTtcbiAgICBjb25zdCBoYW5kbGVyc0V4cGFuZCA9IHRoaXMuaGFuZGxlcnNFeHBhbmQoKTtcbiAgICBpZiAoaGFuZGxlcnNFeHBhbmQgJiYgaGFuZGxlcnNFeHBhbmQubGVuZ3RoKSB7XG4gICAgICBoYW5kbGVyc0V4cGFuZC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC50aXRsZSAmJiBlbGVtZW50LmFjdGlvbikge1xuICAgICAgICAgIGlmIChlbGVtZW50LnRpdGxlID09PSAnbGluaycpIHtcbiAgICAgICAgICAgIGxpbmsgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhhbmRsZXJzLnVwZGF0ZShpdGVtID0+ICh7IC4uLml0ZW0sIFtlbGVtZW50LnRpdGxlXTogZWxlbWVudC5hY3Rpb24gfSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCFsaW5rKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzLnVwZGF0ZShpdGVtID0+ICh7IC4uLml0ZW0sIGxpbms6IHRoaXMuaGFuZGxlU2hvd1VwbG9hZExpbmsuYmluZCh0aGlzKSwgdW5MaW5rOiB0aGlzLmhhbmRsZXJVbkluc2VydExpbmsuYmluZCh0aGlzKSB9KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDbGFzc0luY2x1ZGVBbmRSZWFkT25seSgpIHtcbiAgICBjb25zdCBlZGl0b3JFbCA9IHRoaXMuZWRpdG9yRWwoKTtcbiAgICBjb25zdCBjbGFzc0luY2x1ZGUgPSB0aGlzLmNsYXNzSW5jbHVkZSgpO1xuICAgIGNvbnN0IHJlYWRvbmx5ID0gdGhpcy5yZWFkb25seSgpO1xuICAgIGlmIChlZGl0b3JFbCkge1xuICAgICAgaWYgKGNsYXNzSW5jbHVkZSB8fCByZWFkb25seSkge1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnROb2RlIG9mIGVkaXRvckVsLm5hdGl2ZUVsZW1lbnQubGFzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbikge1xuICAgICAgICAgIGlmICghZWxlbWVudE5vZGUuY2xhc3NOYW1lLmluY2x1ZGVzKCdxbC1lZGl0b3InKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjbGFzc0luY2x1ZGUpIHtcbiAgICAgICAgICAgIGVsZW1lbnROb2RlLmNsYXNzTGlzdC5hZGQoY2xhc3NJbmNsdWRlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlYWRvbmx5KSB7XG4gICAgICAgICAgICBlbGVtZW50Tm9kZS5jbGFzc0xpc3QuYWRkKCchYmctWyNmOGY5ZmFdJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVhZG9ubHkpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50Tm9kZSBvZiBlZGl0b3JFbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnROb2RlLmNsYXNzTmFtZS5pbmNsdWRlcygncWwtdG9vbGJhcicpKSB7XG4gICAgICAgICAgICBlbGVtZW50Tm9kZS5jbGFzc0xpc3QuYWRkKCdwb2ludGVyLWV2ZW50cy1ub25lJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGp1c3RJbmRleEZvckltYWdlcyhpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucXVpbGwoKT8ucm9vdDtcbiAgICBsZXQgaW1hZ2VDb3VudCA9IDA7XG4gICAgbGV0IGFkanVzdGVkSW5kZXggPSAwO1xuICAgIGNvbnN0IGFkanVzdFRleHRJbmRleCA9IChub2RlOiBOb2RlKSA9PiB7XG4gICAgICBpZiAoYWRqdXN0ZWRJbmRleCA+IGluZGV4KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICBhZGp1c3RlZEluZGV4ICs9IG5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZS5ub2RlTmFtZSA9PT0gJ0lNRycpIHtcbiAgICAgICAgaWYgKGFkanVzdGVkSW5kZXggPD0gaW5kZXgpIHtcbiAgICAgICAgICBpbWFnZUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIEFycmF5LmZyb20obm9kZS5jaGlsZE5vZGVzKS5mb3JFYWNoKGFkanVzdFRleHRJbmRleCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBhZGp1c3RUZXh0SW5kZXgoY29udGVudCBhcyBOb2RlKTtcbiAgICByZXR1cm4gaW1hZ2VDb3VudDtcbiAgfTtcblxuXG4gIHByaXZhdGUgaGFuZGxlclNlbGVjdGlvbkNoYW5nZSgpIHtcbiAgICB0aGlzLnF1aWxsKCk/Lm9uKCdzZWxlY3Rpb24tY2hhbmdlJywgKHJhbmdlOiBSYW5nZVN0YXRpYywgb2xkUmFuZ2U6IFJhbmdlU3RhdGljLCBzb3VyY2U6IFNvdXJjZXMpID0+IHtcbiAgICAgIGlmICh0aGlzLnJlYWRvbmx5KCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHJhbmdlID09PSBudWxsICYmIG9sZFJhbmdlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMub3V0Qmx1ci5lbWl0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChyYW5nZSAhPT0gbnVsbCAmJiBvbGRSYW5nZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLm91dEZvY3VzLmVtaXQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5xdWlsbCgpPy5nZXRGb3JtYXQoKTtcbiAgICAgIGlmIChmb3JtYXQpIHtcbiAgICAgICAgdGhpcy5nZXRGb250KGZvcm1hdCk7XG4gICAgICAgIHRoaXMuZ2V0Rm9udFNpemUoZm9ybWF0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3V0U2VsZWN0aW9uQ2hhbmdlLmVtaXQocmFuZ2UubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlKTtcbiAgICAgIGlmIChyYW5nZS5sZW5ndGggPT09IDAgJiYgZm9ybWF0Py5saW5rICYmIHNvdXJjZSA9PT0gJ3VzZXInKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigpO1xuICAgICAgICBjb25zdCBhbmNob3JOb2RlID0gc2VsZWN0aW9uPy5hbmNob3JOb2RlO1xuICAgICAgICBsZXQgbGlua05vZGUgPSBhbmNob3JOb2RlIGFzIEhUTUxBbmNob3JFbGVtZW50O1xuICAgICAgICB3aGlsZSAobGlua05vZGUgJiYgbGlua05vZGUudGFnTmFtZSAhPT0gJ0EnKSB7XG4gICAgICAgICAgbGlua05vZGUgPSBsaW5rTm9kZS5wYXJlbnROb2RlIGFzIEhUTUxBbmNob3JFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW5rTm9kZSAmJiBsaW5rTm9kZS50YWdOYW1lID09PSAnQScpIHtcbiAgICAgICAgICBjb25zdCBsaW5rVGV4dCA9IGxpbmtOb2RlLmlubmVyVGV4dDtcbiAgICAgICAgICBjb25zdCBsaW5rc0luZGljZXM6IEFycmF5PG51bWJlcj4gPSBbXTtcbiAgICAgICAgICBsZXQgaW5kZXhSZXR1cm46IG51bWJlciB8IHVuZGVmaW5lZCA9IC0xO1xuICAgICAgICAgIHdoaWxlICghaXNOaWwoaW5kZXhSZXR1cm4pICYmIGluZGV4UmV0dXJuIDwgcmFuZ2UuaW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDb250ZW50ID0gdGhpcy5xdWlsbCgpPy5nZXRUZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBsaW5rSW5kZXggPSB0ZXh0Q29udGVudD8uaW5kZXhPZihsaW5rVGV4dCwgbGlua3NJbmRpY2VzLmxlbmd0aCA+IDAgPyBsaW5rc0luZGljZXNbbGlua3NJbmRpY2VzLmxlbmd0aCAtIDFdICsgbGlua1RleHQubGVuZ3RoIDogMCk7XG4gICAgICAgICAgICBpZiAoIWlzTmlsKGxpbmtJbmRleCkpIHtcbiAgICAgICAgICAgICAgaWYgKGxpbmtJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsaW5rc0luZGljZXMucHVzaChsaW5rSW5kZXgpO1xuICAgICAgICAgICAgICAgIGluZGV4UmV0dXJuID0gbGlua0luZGV4ICsgbGlua1RleHQubGVuZ3RoO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChsaW5rSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaW5kZXhSZXR1cm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxpbmtzSW5kaWNlcyAmJiBsaW5rc0luZGljZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZUluZGV4ID0gbGlua3NJbmRpY2VzW2xpbmtzSW5kaWNlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50SW1hZ2UgPSB0aGlzLmFkanVzdEluZGV4Rm9ySW1hZ2VzKHJhbmdlSW5kZXgpXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5saW5rLnNldCh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGxpbmtUZXh0LFxuICAgICAgICAgICAgICAgIHVybDogbGlua05vZGUuaHJlZixcbiAgICAgICAgICAgICAgICByYW5nZToge1xuICAgICAgICAgICAgICAgICAgaW5kZXg6IHJhbmdlSW5kZXggKyBjb3VudEltYWdlLFxuICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBsaW5rVGV4dC5sZW5ndGhcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy5zaG93UG9wb3ZlcihsaW5rTm9kZSlcbiAgICAgICAgICAgIH0sIDI1MCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJQYXN0ZSgpIHtcbiAgICBzZXQodGhpcy5xdWlsbCwgJ3Jvb3Qub25wYXN0ZScsIGFzeW5jIChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmNsaXBib2FyZERhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsZXMgPSBldmVudC5jbGlwYm9hcmREYXRhLmZpbGVzO1xuICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGltYWdlczogQXJyYXk8RmlsZT4gPSBbXTtcbiAgICAgIEFycmF5LmZyb20oZmlsZXMpLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgaWYgKGZpbGUgJiYgZmlsZS50eXBlLnNwbGl0KCcvJylbMF0gPT09ICdpbWFnZScpIHtcbiAgICAgICAgICBpbWFnZXMucHVzaChmaWxlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBsaW5rcyA9IGF3YWl0IHRoaXMudXBsb2FkSW1hZ2VDb25maWcoKS5mdW5jdGlvblVwbG9hZEltYWdlPy4oaW1hZ2VzKTtcbiAgICAgIGlmIChsaW5rcyAmJiBsaW5rcy5sZW5ndGgpIHtcbiAgICAgICAgbGlua3MuZm9yRWFjaChsaW5rID0+IHtcbiAgICAgICAgICBpZiAoIWxpbmsgfHwgKHRoaXMudXBsb2FkSW1hZ2VDb25maWcoKS5vbmx5QWNjZXB0SW1hZ2VIdHRwc0xpbmsgJiYgKGxpbmsgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCAhbmV3IFJlZ0V4cChwYXR0ZXJuVXJsKCkpLnRlc3QobGluaykpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmluc2VydEh0bWwoJ2ltYWdlJywgbGluayBhcyBzdHJpbmcpO1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyVGV4dENoYW5nZSgpIHtcbiAgICB0aGlzLnF1aWxsKCk/Lm9uKCd0ZXh0LWNoYW5nZScsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgaHRtbCA9IHRoaXMucXVpbGwoKT8ucm9vdC5pbm5lckhUTUw7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50Py5vcHNbMV0/Lmluc2VydCA9PT0gJ1xcbicpIHtcbiAgICAgICAgICBjb25zdCByYW5nZSA9IHsgaW5kZXg6IGV2ZW50Py5vcHNbMF0ucmV0YWluIGFzIG51bWJlciB9O1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRMZWFmID0gdGhpcy5xdWlsbCgpPy5nZXRMZWFmKHJhbmdlLmluZGV4KVswXTtcbiAgICAgICAgICBjb25zdCBuZXh0TGVhZiA9IHRoaXMucXVpbGwoKT8uZ2V0TGVhZihyYW5nZS5pbmRleCArIDEpWzBdO1xuICAgICAgICAgIHRoaXMucXVpbGwoKT8uaW5zZXJ0RW1iZWQocmFuZ2UuaW5kZXgsICdicmVhaycsIHRydWUsICd1c2VyJyk7XG4gICAgICAgICAgaWYgKG5leHRMZWFmID09PSBudWxsIHx8IGN1cnJlbnRMZWFmLnBhcmVudCAhPT0gbmV4dExlYWYucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnF1aWxsKCk/Lmluc2VydEVtYmVkKHJhbmdlLmluZGV4LCAnYnJlYWsnLCB0cnVlLCAndXNlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbigocmFuZ2UuaW5kZXggfHwgMCkgKyAxLCAwLCBRdWlsbC5zb3VyY2VzLlNJTEVOVCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGh0bWwgPT09ICc8ZGl2Pjxicj48L2Rpdj4nIHx8IGh0bWwgPT09ICc8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjoganVzdGlmeTtcIj48YnI+PC9kaXY+JyB8fCAhdGhpcy5xdWlsbCgpPy5nZXRUZXh0KCkpIHtcbiAgICAgICAgc2V0KHRoaXMuaXRlbSgpLCB0aGlzLmZpZWxkTmFtZUJpbmQoKSwgJycpO1xuICAgICAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQoZ2V0KHRoaXMuaXRlbSgpLCB0aGlzLmZpZWxkTmFtZUJpbmQoKSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmNvbnZlcnRJbm5lckhUTUwoKTtcbiAgICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQoZ2V0KHRoaXMuaXRlbSgpLCB0aGlzLmZpZWxkTmFtZUJpbmQoKSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQb3BvdmVyRnVuY3Rpb25Db250cm9sKGV2ZW50OiBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sLnNldChldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBvcG92ZXJFdmVudChldmVudDogVFlQRV9QT1BPVkVSX0VWRU5UKSB7XG4gICAgaWYgKGV2ZW50ID09PSAncmVtb3ZlJykge1xuICAgICAgdGhpcy5saW5rLnNldChsaW5rRGVmYXVsdCgpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclVubGluayhldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBsaW5rID0gdGhpcy5saW5rKCk7XG4gICAgdGhpcy5xdWlsbCgpPy5mb3JtYXRUZXh0KGxpbmsucmFuZ2UuaW5kZXgsIGxpbmsucmFuZ2UubGVuZ3RoLCB7IGxpbms6IGZhbHNlIH0pO1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFZGl0KGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmxpbmsoKTtcbiAgICB0aGlzLmhhbmRsZVNob3dVcGxvYWRMaW5rKGxpbmspO1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdG9yVG9vbGJhcigpIHtcbiAgICB0aGlzLml0ZW1IaWRkZW4uc2V0KFtdKTtcbiAgICB0aGlzLml0ZW1IaWRkZW5FeHBhbmQuc2V0KFtdKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHRvb2xiYXJXaWR0aCA9IHRoaXMudG9vbGJhckl0ZW1zRWwoKT8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCB8fCAwO1xuICAgICAgbGV0IGl0ZW1XaWR0aCA9IDI4O1xuICAgICAgY29uc3QgaGlkZGVuSXRlbXM6IEFycmF5PG51bWJlcj4gPSBbXTtcbiAgICAgIGNvbnN0IGhpZGRlbkl0ZW1zRXhwYW5kOiBBcnJheTxudW1iZXI+ID0gW107XG4gICAgICBjb25zdCBpdGVtc0hhc1dpZHRoID0gdGhpcy5pdGVtc0VsKCkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtc0hhc1dpZHRoLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gaXRlbXNIYXNXaWR0aFtpbmRleF07XG4gICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5uYXRpdmVFbGVtZW50LmlkO1xuICAgICAgICBjb25zdCB0cnVlSW5kZXggPSBOdW1iZXIoaWQuc3BsaXQoJ18nKVsxXSk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBpZC5zcGxpdCgnXycpWzBdO1xuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCB8fCAwO1xuICAgICAgICBpdGVtV2lkdGggKz0gd2lkdGg7XG4gICAgICAgIGlmICh0eXBlID09PSAnbGluZScpIHtcbiAgICAgICAgICBjb25zdCBuZXh0RWxlbWVudCA9IGl0ZW1zSGFzV2lkdGhbaW5kZXggKyAxXTtcbiAgICAgICAgICBjb25zdCBuZXh0V2lkdGggPSBuZXh0RWxlbWVudD8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCB8fCAwO1xuICAgICAgICAgIGNvbnN0IG5leHRJdGVtV2lkdGggPSBpdGVtV2lkdGggKyBuZXh0V2lkdGg7XG4gICAgICAgICAgaWYgKG5leHRJdGVtV2lkdGggPiB0b29sYmFyV2lkdGgpIHtcbiAgICAgICAgICAgIGhpZGRlbkl0ZW1zRXhwYW5kLnB1c2godHJ1ZUluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW1XaWR0aCA+IHRvb2xiYXJXaWR0aCkge1xuICAgICAgICAgIGhpZGRlbkl0ZW1zLnB1c2godHJ1ZUluZGV4KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pdGVtSGlkZGVuLnNldChoaWRkZW5JdGVtcyk7XG4gICAgICB0aGlzLml0ZW1IaWRkZW5FeHBhbmQuc2V0KGhpZGRlbkl0ZW1zRXhwYW5kKTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFN0eWxlKHR5cGU6IHN0cmluZywgZGF0YTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5xdWlsbCgpPy5mb3JtYXQodHlwZSwgZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGdldEZvbnRTaXplKGZvcm1hdDogU3RyaW5nTWFwKSB7XG4gICAgY29uc3QgZm9udFNpemUgPSBmb3JtYXQ/LnNpemU/LnRvU3RyaW5nKCk/LnJlcGxhY2UoJ3B4JywgJycpO1xuICAgIGlmIChpc05hTihwYXJzZUZsb2F0KGZvbnRTaXplKSkpIHtcbiAgICAgIHRoaXMuc2l6ZS5zZXQoeyB2YWx1ZTogMTQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2l6ZS5zZXQoeyB2YWx1ZTogcGFyc2VGbG9hdChmb250U2l6ZSkgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEZvbnQoZm9ybWF0OiBTdHJpbmdNYXApIHtcbiAgICBjb25zdCBmb250ID0gbGlzdEZvbnQoKS5maW5kKChpdGVtKSA9PiBpdGVtLmtleSA9PT0gZm9ybWF0LmZvbnQpO1xuICAgIGlmICghZm9udCkge1xuICAgICAgdGhpcy5mb250U2VsZWN0ZWQuc2V0KHsga2V5OiAnJywgaXRlbTogbGlzdEZvbnQoKS5maW5kKChpdGVtKSA9PiBpdGVtLmtleSA9PT0gJycpIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZvbnRTZWxlY3RlZC5zZXQoeyBrZXk6IGZvcm1hdC5mb250LCBpdGVtOiBmb250IH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVVuZG8oKSB7XG4gICAgdGhpcy5xdWlsbCgpPy5oaXN0b3J5Py51bmRvKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlUmVkbygpIHtcbiAgICB0aGlzLnF1aWxsKCk/Lmhpc3Rvcnk/LnJlZG8oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzZXRDb250ZW50KGNvbnRlbnQ6IHN0cmluZykge1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXQodGhpcy5xdWlsbCwgJ3Jvb3QuaW5uZXJIVE1MJywgJycpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGVudFhzc0ZpbHRlciA9IGF3YWl0IHhzc0ZpbHRlcihjb250ZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldCh0aGlzLnF1aWxsLCAncm9vdC5pbm5lckhUTUwnLCBjb250ZW50WHNzRmlsdGVyKSk7XG4gICAgaWYgKCF0aGlzLmF1dG9Gb2N1c0JvdHRvbSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5xdWlsbCgpPy5ibHVyKCk7XG4gICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnF1aWxsRWRpdG9yRWwoKT8ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXScpO1xuICAgICAgY29uc3QgY29udGVudFNjcm9sbCA9IHRoaXMuaGVpZ2h0QXV0bygpID8gdGhpcy53cmFwcGVyRWRpdG9yRWwoKT8ubmF0aXZlRWxlbWVudCA6IHRhcmdldDtcbiAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyh0YXJnZXQpO1xuICAgICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuICAgICAgc2VsPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbD8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgdGFyZ2V0LmZvY3VzKCk7XG4gICAgICBjb250ZW50U2Nyb2xsLnNjcm9sbFRvcCA9IGNvbnRlbnRTY3JvbGwuc2Nyb2xsSGVpZ2h0O1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckFkZEVtb2ppKGVtb2ppOiB1bmtub3duKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5xdWlsbCgpPy5nZXRTZWxlY3Rpb24odHJ1ZSkuaW5kZXg7XG4gICAgaWYgKCFpc05pbChzZWxlY3Rpb24pKSB7XG4gICAgICB0aGlzLnF1aWxsKCk/Lmluc2VydFRleHQoc2VsZWN0aW9uLCBlbW9qaSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVTaG93VXBsb2FkTGluayhldmVudDogdW5rbm93bikge1xuICAgIHRoaXMuYWRkRWRpdExpbmtDb21wb25lbnRSZWYuc2V0KHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGlic1VpQ29tcG9uZW50c0lucHV0c1F1aWxsTGlua0NvbXBvbmVudCkpO1xuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5hZGRFZGl0TGlua0NvbXBvbmVudFJlZigpPy5pbnN0YW5jZTtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLnF1aWxsKCk/LmdldFNlbGVjdGlvbigpO1xuICAgIGNvbnN0IHRleHRTZWxlY3RlZCA9IHNlbGVjdGlvbj8ubGVuZ3RoID8gdGhpcy5xdWlsbCgpPy5nZXRUZXh0KHNlbGVjdGlvbj8uaW5kZXgsIHNlbGVjdGlvbj8ubGVuZ3RoKSA6ICcnO1xuICAgIGNvbnN0IGRhdGEgPSBldmVudCBhcyBJTGluayB8IHVuZGVmaW5lZDtcbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgIGluc3RhbmNlLnpJbmRleC5zZXQodGhpcy56SW5kZXgoKSk7XG4gICAgICBpbnN0YW5jZS50aXRsZS5zZXQoZGF0YT8udGl0bGUgfHwgdGV4dFNlbGVjdGVkKTtcbiAgICAgIGluc3RhbmNlLmxpbmsuc2V0KGRhdGE/LnVybCB8fCAnJyk7XG4gICAgICBpbnN0YW5jZS5vdXRTYXZlTGluay5zdWJzY3JpYmUoKGl0ZW06IHsgdGl0bGU6IHN0cmluZywgbGluazogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QgJiYgZGF0YS51cmwpIHtcbiAgICAgICAgICB0aGlzLnF1aWxsKCk/LmRlbGV0ZVRleHQoZGF0YS5yYW5nZS5pbmRleCwgZGF0YS5yYW5nZS5sZW5ndGgsIFF1aWxsLnNvdXJjZXMuVVNFUik7XG4gICAgICAgICAgdGhpcy5xdWlsbCgpPy5pbnNlcnRUZXh0KGRhdGEucmFuZ2UuaW5kZXgsIGl0ZW0udGl0bGUsICdsaW5rJywgaXRlbS5saW5rKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnNlcnRMaW5rKGl0ZW0udGl0bGUsIGl0ZW0ubGluayk7XG4gICAgICB9KTtcbiAgICAgIGluc3RhbmNlLm91dENsb3NlLnN1YnNjcmliZSgoKSA9PiB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLmFkZEVkaXRMaW5rQ29tcG9uZW50UmVmKCkpKTtcbiAgICB9XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5hZGRFZGl0TGlua0NvbXBvbmVudFJlZigpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyVW5JbnNlcnRMaW5rKCkge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMucXVpbGwoKT8uZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghaXNOaWwoc2VsZWN0aW9uKSkge1xuICAgICAgdGhpcy5xdWlsbCgpPy5mb3JtYXRUZXh0KHNlbGVjdGlvbiwgJ2xpbmsnLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHZhbGlkYXRlKCkge1xuICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCgnJyk7XG4gICAgY29uc3QgdmFsaWRSZXF1aXJlZCA9IHRoaXMudmFsaWRSZXF1aXJlZCgpO1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW0oKTtcbiAgICBjb25zdCBmaWVsZE5hbWVCaW5kID0gdGhpcy5maWVsZE5hbWVCaW5kKCk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXQoaXRlbSwgZmllbGROYW1lQmluZCk7XG4gICAgaWYgKHZhbGlkUmVxdWlyZWQgJiYgdmFsaWRSZXF1aXJlZC5pc1JlcXVpcmVkICYmICghZmllbGROYW1lQmluZCB8fCAhdmFsdWUgfHwgIXZhbHVlLnRyaW0oKSkpIHtcbiAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh2YWxpZFJlcXVpcmVkLm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCk7XG4gICAgICB0aGlzLm91dE1lc3NhZ2VFcnJvci5lbWl0KHRoaXMubWVzc2FnZUVycm9yKCkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZE1pbkxlbmd0aCA9IHRoaXMudmFsaWRNaW5MZW5ndGgoKTtcbiAgICBpZiAodmFsaWRNaW5MZW5ndGggJiYgZmllbGROYW1lQmluZCAmJiB2YWx1ZSAmJiB2YWx1ZS50cmltKCkubGVuZ3RoIDwgdmFsaWRNaW5MZW5ndGgubGVuZ3RoKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VFcnJvci5zZXQodmFsaWRNaW5MZW5ndGgubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01JTl9MRU5HVEgpO1xuICAgICAgdGhpcy5vdXRNZXNzYWdlRXJyb3IuZW1pdCh0aGlzLm1lc3NhZ2VFcnJvcigpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdmFsaWRNYXhMZW5ndGggPSB0aGlzLnZhbGlkTWF4TGVuZ3RoKCk7XG4gICAgaWYgKHZhbGlkTWF4TGVuZ3RoICYmIGZpZWxkTmFtZUJpbmQgJiYgdmFsdWUgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA+IHRoaXMudmFsaWRNYXhMZW5ndGgubGVuZ3RoKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VFcnJvci5zZXQodmFsaWRNYXhMZW5ndGgubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01BWF9MRU5HVEgpO1xuICAgICAgdGhpcy5vdXRNZXNzYWdlRXJyb3IuZW1pdCh0aGlzLm1lc3NhZ2VFcnJvcigpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5vdXRNZXNzYWdlRXJyb3IuZW1pdCh0aGlzLm1lc3NhZ2VFcnJvcigpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBpbnNlcnRIdG1sKHRhZ05hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBpbmRleD86IG51bWJlcikge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IChpbmRleCB8fCBpbmRleCA9PT0gMCkgPyBpbmRleCA6IHRoaXMucXVpbGwoKT8uZ2V0U2VsZWN0aW9uKHRydWUpLmluZGV4O1xuICAgIGlmICghaXNOaWwoc2VsZWN0aW9uKSkge1xuICAgICAgdGhpcy5xdWlsbCgpPy5pbnNlcnRFbWJlZChzZWxlY3Rpb24sIHRhZ05hbWUsIGNvbnRlbnQpO1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBjb250ZW50Lmxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbnNlcnRUZXh0KGNvbnRlbnQ6IHN0cmluZywgaW5kZXg/OiBudW1iZXIpIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSAoaW5kZXggfHwgaW5kZXggPT09IDApID8gaW5kZXggOiB0aGlzLnF1aWxsKCk/LmdldFNlbGVjdGlvbih0cnVlKS5pbmRleDtcbiAgICBpZiAoIWlzTmlsKHNlbGVjdGlvbikpIHtcbiAgICAgIHRoaXMucXVpbGwoKT8uaW5zZXJ0VGV4dChzZWxlY3Rpb24sIGNvbnRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5zZXJ0TGluayh0ZXh0OiBzdHJpbmcsIHVybDogc3RyaW5nLCBpbmRleD86IG51bWJlcikge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMucXVpbGwoKT8uZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGNvbnN0IGluZGV4SW5zZXJ0ID0gKGluZGV4IHx8IGluZGV4ID09PSAwKSA/IGluZGV4IDogc2VsZWN0aW9uPy5pbmRleDtcbiAgICBpZiAoc2VsZWN0aW9uPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucXVpbGwoKT8uZGVsZXRlVGV4dChzZWxlY3Rpb24uaW5kZXgsIHNlbGVjdGlvbi5sZW5ndGgsIFF1aWxsLnNvdXJjZXMuVVNFUik7XG4gICAgfVxuICAgIGlmICghaXNOaWwoaW5kZXhJbnNlcnQpKSB7XG4gICAgICB0aGlzLnF1aWxsKCk/Lmluc2VydFRleHQoaW5kZXhJbnNlcnQsIHRleHQsICdsaW5rJywgdXJsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJbm5lckhUTUwoKSB7XG4gICAgdGhpcy5zZXRTdHlsZUZvckNvbnRlbnQoKTtcbiAgICBzZXQodGhpcy5pdGVtKCksIHRoaXMuZmllbGROYW1lQmluZCgpLCB0aGlzLnF1aWxsKCk/LnJvb3QuaW5uZXJIVE1MKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3R5bGVGb3JDb250ZW50KCkge1xuICAgIGNvbnN0IHN0eWxlQXJyYXkgPSBbXG4gICAgICB7IHNlbGVjdG9yOiAnLnFsLWZvbnQtQXJpYWwnLCBzdHlsZTogJ2ZvbnQtZmFtaWx5OiBBcmlhbCcgfSxcbiAgICAgIHsgc2VsZWN0b3I6ICcucWwtZm9udC1zYW5zLXNlcmlmJywgc3R5bGU6ICdmb250LWZhbWlseTogc2Fucy1zZXJpZicgfSxcbiAgICAgIHsgc2VsZWN0b3I6ICcucWwtZm9udC1zZXJpZicsIHN0eWxlOiAnZm9udC1mYW1pbHk6IHNlcmlmJyB9LFxuICAgICAgeyBzZWxlY3RvcjogJy5xbC1mb250LW1vbm9zcGFjZScsIHN0eWxlOiAnZm9udC1mYW1pbHk6IG1vbm9zcGFjZScgfSxcbiAgICAgIHsgc2VsZWN0b3I6ICcucWwtZm9udC1IZWx2ZXRpY2EnLCBzdHlsZTogJ2ZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EnIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnLmxpYnMtdWktcXVpbGwtZm9ybWF0LWltYWdlJywgc3R5bGU6ICdtYXgtd2lkdGg6IDEwMCU7IGhlaWdodDogYXV0bycgfSxcbiAgICAgIHsgc2VsZWN0b3I6ICcubGlicy11aS1xdWlsbC1tZW50aW9uJywgc3R5bGU6ICdmb250LXdlaWdodDogNjAwOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7IGNvbG9yOiAjNzIzOUVBJyB9LFxuICAgICAgeyBzZWxlY3RvcjogJ2Jsb2NrcXVvdGUnLCBzdHlsZTogJ2JvcmRlci1sZWZ0OiA0cHggc29saWQgI2NjYzsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tdG9wOiA1cHg7IHBhZGRpbmctbGVmdDogMTZweCcgfVxuICAgIF07XG4gICAgc3R5bGVBcnJheS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMucXVpbGwoKT8ucm9vdC5xdWVyeVNlbGVjdG9yQWxsKGl0ZW0uc2VsZWN0b3IpO1xuICAgICAgZWxlbWVudHM/LmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uc2VsZWN0b3IgPT09ICcubGlicy11aS1xdWlsbC1mb3JtYXQtaW1hZ2UnIHx8IGl0ZW0uc2VsZWN0b3IgPT09ICcubGlicy11aS1xdWlsbC1tZW50aW9uJyB8fCBpdGVtLnNlbGVjdG9yID09PSAnYmxvY2txdW90ZScpIHtcbiAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBpdGVtLnN0eWxlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRml4YnVnIGlzc3VlOiBodHRwczovL2FkbWluLWN2Lm1vYmlvLnZuL2lzc3Vlcy80OTA5MlxuICAgICAgICBsZXQgc3R5bGVFeGlzdCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgICBpZiAoc3R5bGVFeGlzdCkge1xuICAgICAgICAgIFsnZm9udC1mYW1pbHk6IEFyaWFsJywgJ2ZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmJywgJ2ZvbnQtZmFtaWx5OiBzZXJpZicsICdmb250LWZhbWlseTogbW9ub3NwYWNlJywgJ2ZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EnXS5mb3JFYWNoKGZvbnQgPT4ge1xuICAgICAgICAgICAgc3R5bGVFeGlzdCA9IChzdHlsZUV4aXN0Py5pbmNsdWRlcyhgJHtmb250fTtgKSA/IHN0eWxlRXhpc3Q/LnJlcGxhY2UoYCR7Zm9udH07YCwgJycpIDogc3R5bGVFeGlzdD8ucmVwbGFjZShmb250LCAnJykpIGFzIHN0cmluZztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBzdHlsZUV4aXN0ID8gYCR7c3R5bGVFeGlzdH0ke3N0eWxlRXhpc3Rbc3R5bGVFeGlzdC5sZW5ndGggLSAxXSA9PT0gJzsnID8gJycgOiAnOyd9JHtpdGVtLnN0eWxlfTtgIDogaXRlbS5zdHlsZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVUb2dnbGVNZW50aW9uKHNob3c6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNob3dNZW50aW9uLnNldChzaG93KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlclNob3dVcGxvYWRJbWFnZSgpIHtcbiAgICB0aGlzLnVwbG9hZEltYWdlQ29tcG9uZW50UmVmLnNldCh0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KExpYnNVaUNvbXBvbmVudHNJbnB1dHNRdWlsbFVwbG9hZEltYWdlQ29tcG9uZW50KSk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLnVwbG9hZEltYWdlQ29tcG9uZW50UmVmKCk/Lmluc3RhbmNlO1xuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgaW5zdGFuY2UudXBsb2FkSW1hZ2VDb25maWcuc2V0KHRoaXMudXBsb2FkSW1hZ2VDb25maWcoKSk7XG4gICAgICBpbnN0YW5jZS5vdXRDbG9zZS5zdWJzY3JpYmUoKGV2ZW50OiBzdHJpbmcgfCB2b2lkKSA9PiB7XG4gICAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMudXBsb2FkSW1hZ2VDb21wb25lbnRSZWYoKSk7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIHRoaXMuaW5zZXJ0SHRtbCgnaW1hZ2UnLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmFkZFRvQm9keSh0aGlzLnVwbG9hZEltYWdlQ29tcG9uZW50UmVmKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTZWxlY3Rpb24oaW5kZXg6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIsIHNvdXJjZXM/OiBTb3VyY2VzKSB7XG4gICAgdGhpcy5xdWlsbCgpPy5zZXRTZWxlY3Rpb24oaW5kZXgsIGxlbmd0aCwgc291cmNlcyk7XG4gIH1cblxuICBwcml2YXRlIGluc2VydE1lbnRpb24oZXZlbnQ6IElNZW50aW9uSW5zZXJ0KSB7XG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLnF1aWxsKCk/LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3Vyc29yUG9zID0gcmFuZ2UuaW5kZXg7XG4gICAgY29uc3Qgc3RhcnRQb3NJbnNlcnQgPSBjdXJzb3JQb3MgLSBldmVudC5sZW5ndGhLZXk7XG4gICAgdGhpcy5xdWlsbCgpPy5kZWxldGVUZXh0KHN0YXJ0UG9zSW5zZXJ0LCBldmVudC5sZW5ndGhLZXksIFF1aWxsLnNvdXJjZXMuVVNFUik7XG4gICAgdGhpcy5xdWlsbCgpPy5pbnNlcnRFbWJlZChzdGFydFBvc0luc2VydCwgJ21lbnRpb24nLCBldmVudC5kYXRhLCBRdWlsbC5zb3VyY2VzLlVTRVIpO1xuICAgIHRoaXMucXVpbGwoKT8uaW5zZXJ0VGV4dChzdGFydFBvc0luc2VydCArIDEsICcgJywgUXVpbGwuc291cmNlcy5VU0VSKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbihzdGFydFBvc0luc2VydCArIDIsIDAsIFF1aWxsLnNvdXJjZXMuVVNFUik7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckluc2VydE1lbnRpb24oZGF0YTogSU1lbnRpb25JbnNlcnQpIHtcbiAgICB0aGlzLmluc2VydE1lbnRpb24oZGF0YSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2V0Rm9udFNpemUoc2l6ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5xdWlsbCgpPy5mb3JtYXQoJ3NpemUnLCBgJHtzaXplfXB4YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2V0Q29sb3IoY29sb3I6IHN0cmluZykge1xuICAgIHRoaXMucXVpbGwoKT8uZm9ybWF0KCdjb2xvcicsIGNvbG9yKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzZXRCYWNrZ3JvdW5kKGNvbG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLnF1aWxsKCk/LmZvcm1hdCgnYmFja2dyb3VuZCcsIGNvbG9yKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyVmFsdWVDaGFuZ2UodmFsdWU6IG51bWJlciB8IHN0cmluZykge1xuICAgIHRoaXMuc2l6ZS51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCB2YWx1ZTogdmFsdWUgYXMgbnVtYmVyIH0pKTtcbiAgICB0aGlzLnF1aWxsKCk/LmZvcm1hdCgnc2l6ZScsIGAke3RoaXMuc2l6ZSgpLnZhbHVlfXB4YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlU2VsZWN0QWxpZ24oZXZlbnQ6IElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5hbGlnblNlbGVjdGVkLnNldChldmVudCk7XG4gICAgdGhpcy5zZXRTdHlsZSgnYWxpZ24nLCBldmVudD8ua2V5IGFzIHN0cmluZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlU2VsZWN0Rm9udChldmVudDogSUVtaXRTZWxlY3RLZXkgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmZvbnRTZWxlY3RlZC5zZXQoZXZlbnQpO1xuICAgIHRoaXMuc2V0U3R5bGUoJ2ZvbnQnLCBldmVudD8ua2V5IGFzIHN0cmluZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVNob3dNb3JlQWN0aW9uKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc2hvd01vcmVBY3Rpb24udXBkYXRlKGl0ZW0gPT4gIWl0ZW0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZW1vdmUodGhpcy5hZGRFZGl0TGlua0NvbXBvbmVudFJlZigpKTtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLnVwbG9hZEltYWdlQ29tcG9uZW50UmVmKCkpO1xuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGxcIj5cbiAgQGlmIChsYWJlbCgpOyBhcyBsYWJlbCkge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGFiZWwgW2NsYXNzSW5jbHVkZV09XCJsYWJlbC5jbGFzc0luY2x1ZGVcIlxuICAgICAgW3JlcXVpcmVkXT1cImxhYmVsLnJlcXVpcmVkXCJcbiAgICAgIFtsYWJlbExlZnRdPVwibGFiZWwubGFiZWxMZWZ0XCIgLz5cbiAgfVxuICA8ZGl2ICN3cmFwcGVyRWRpdG9yXG4gICAgW2F0dHIuaGVpZ2h0QXV0b109XCJoZWlnaHRBdXRvKClcIlxuICAgIFthdHRyLmhpZGRlblRvb2xCYXJdPVwib25seVNob3dDb250ZW50KClcIlxuICAgIGNsYXNzPVwibGlicy11aS1xdWlsbC13cmFwcGVyIHctZnVsbCBoLWZ1bGwgcmVsYXRpdmUgZmxleCBmbGV4LWNvbFwiXG4gICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLWVycm9yLWdlbmVyYWxdPVwibWVzc2FnZUVycm9yKCkgJiYgc2hvd0Vycm9yQm9yZGVyKCkgJiYgIW9ubHlTaG93RXJyb3JCb3JkZXJJbkNvbnRlbnQoKVwiXG4gICAgW2NsYXNzLnJvdW5kZWQtWzRweF1dPVwibWVzc2FnZUVycm9yKCkgJiYgc2hvd0Vycm9yQm9yZGVyKCkgJiYgIW9ubHlTaG93RXJyb3JCb3JkZXJJbkNvbnRlbnQoKVwiPlxuICAgIDxkaXYgI2VkaXRvclxuICAgICAgY2xhc3M9XCJsaWJzLXVpLXF1aWxsXCJcbiAgICAgIFthdHRyLnNob3dFcnJvcl09XCJtZXNzYWdlRXJyb3IoKSAmJiBzaG93RXJyb3JCb3JkZXIoKSAmJiBvbmx5U2hvd0Vycm9yQm9yZGVySW5Db250ZW50KClcIlxuICAgICAgW2NsYXNzLiFoaWRkZW5dPVwiIWRpc3BsYXkoKVwiPlxuICAgICAgQGlmICghb25seVNob3dDb250ZW50KCkpIHtcbiAgICAgICAgPGRpdiAjcXVpbGxPcHRpb25cbiAgICAgICAgICBjbGFzcz1cIidxbC10b29sYmFyIHFsLXNub3cgYmctWyNmOGY5ZmFdIHt7IGNsYXNzSW5jbHVkZVRvb2xiYXIoKSB9fVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPGRpdiAjcXVpbGxFZGl0b3JcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25EaXJlY3RpdmVcbiAgICAgICAgW21lbnRpb25Db25maWddPVwiZGF0YUNvbmZpZ01lbnRpb24oKVwiXG4gICAgICAgIChvdXRUb2dnbGUpPVwiaGFuZGxlVG9nZ2xlTWVudGlvbigkZXZlbnQpXCJcbiAgICAgICAgKG91dEluc2VydE1lbnRpb24pPVwiaGFuZGxlckluc2VydE1lbnRpb24oJGV2ZW50KVwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIEBpZiAodGVtcGxhdGUoKTsgYXMgdGVtcGxhdGUpIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cImNsYXNzSW5jbHVkZVRlbXBsYXRlKClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuICBAaWYgKG1lc3NhZ2VFcnJvcigpICYmIHNob3dFcnJvckxhYmVsKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbGVhZGluZy1ub3JtYWwgbXQtWzhweF1cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1bI2ZmNTQ1NF0gbGlicy11aS1mb250LWg3clwiPiB7eyBtZXNzYWdlRXJyb3IoKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5AaWYgKHNob3dUb29sQmFyKCkpIHtcbiAgPGRpdiAjcXVpbGxUb29sYmFyXG4gICAgW2NsYXNzXT1cIidxbC1zbm93IGFic29sdXRlIHB4LVs4cHhdIHB5LVs0cHhdIHAtMCB3LVs1MDBweF0gcm91bmRlZC1bNHB4XSBiZy1bI2ZmZmZmZl0gbGlicy11aS1xdWlsbC10b29sYmFyLWFuaW1hdGlvbiAnICsgY2xhc3NJbmNsdWRlVG9vbGJhcigpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvb2xiYXJcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG59XG5cbjxuZy10ZW1wbGF0ZSAjdG9vbGJhcj5cbiAgPGRpdiBjbGFzcz1cInRvb2xiYXJcIlxuICAgICN0b29sYmFySXRlbXM+XG4gICAgPGRpdiBjbGFzcz1cInFsLWZvcm1hdHMgaXRlbXMtY2VudGVyXCI+XG4gICAgICBAZm9yIChvcHRpb24gb2Ygb3B0aW9uc1Rvb2xiYXIoKTsgdHJhY2sgb3B0aW9uKSB7XG4gICAgICAgIDxkaXYgI2l0ZW1cbiAgICAgICAgICBbaWRdPVwib3B0aW9uLnR5cGUrJ18nKyRpbmRleFwiXG4gICAgICAgICAgY2xhc3M9XCJpdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiaXRlbUhpZGRlbigpLmluY2x1ZGVzKCRpbmRleCkgfHwgaXRlbUhpZGRlbkV4cGFuZCgpLmluY2x1ZGVzKCRpbmRleClcIlxuICAgICAgICAgIFtjbGFzcy5mbGV4XT1cIiFpdGVtSGlkZGVuKCkuaW5jbHVkZXMoJGluZGV4KVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7Y29udGV4dDp7b3B0aW9uLCAkaW5kZXgsICRsYXN0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxuICAgICAgICBAaWYgKGl0ZW1IaWRkZW4oKS5sZW5ndGgpIHtcbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cInNob3dNb3JlQWN0aW9uKCkgPyAnYnV0dG9uLXNlY29uZGFyeScgOiAnYnV0dG9uLXRoaXJkJ1wiXG4gICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIXAtWzFweF0gIWgtWzIwcHhdIG1sLVs4cHhdJ1wiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLW1vdmUtcmlnaHQgcm90YXRlLTkwJ1wiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNoYW5nZVNob3dNb3JlQWN0aW9uKCRldmVudClcIiAvPlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgW2NsYXNzLmhpZGRlbl09XCIhc2hvd01vcmVBY3Rpb24oKVwiXG4gICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBiZy1bI2ZmZmZmZl0gdG9wLVsxMHB4XSBzaGFkb3ctbWQgei1bMV0gZmxleCBpdGVtcy1jZW50ZXIgcGwtWzhweF0gcHItWzE2cHhdIHB5LVs0cHhdIHJvdW5kZWQtWzhweF0gdG9wLVszMXB4XSByaWdodC1bMHB4XVwiPlxuICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBvcHRpb25zVG9vbGJhcigpOyB0cmFjayBvcHRpb24pIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFpdGVtSGlkZGVuKCkuaW5jbHVkZXMoJGluZGV4KVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5mbGV4XT1cIml0ZW1IaWRkZW4oKS5pbmNsdWRlcygkaW5kZXgpXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7Y29udGV4dDp7b3B0aW9uLCAkaW5kZXgsICRsYXN0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cblxuPG5nLXRlbXBsYXRlICNpdGVtVGVtcGxhdGVcbiAgbGV0LSRpbmRleD1cIiRpbmRleFwiXG4gIGxldC0kbGFzdD1cIiRsYXN0XCJcbiAgbGV0LW9wdGlvbj1cIm9wdGlvblwiPlxuICBAaWYgKG9wdGlvbi50eXBlID09PSAndW5kbycpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDogJ2kxOG5fdW5kbycsIHpJbmRleDogMTI1MH1cIlxuICAgICAgICBjbGFzcz1cInFsLXVuZG9cIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAncmVkbycpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDogJ2kxOG5fcmVkbycsIHpJbmRleDogMTI1MH1cIlxuICAgICAgICBjbGFzcz1cInFsLXJlZG9cIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnZm9udEZhbWlseScpIHtcbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgdy1bMTE3cHhdIGgtZnVsbCBiZy1bI2ZmZmZmZl0gcm91bmRlZC1bNHB4XSBsaWJzLXVpLWJvcmRlci1nZW5lcmFsIHt7IG9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJyB9fVwiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93biBbaXNOZ0NvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgIFtsYWJlbFBvcG92ZXJGdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtsaXN0Q29uZmlnXT1cImxpc3RDb25maWdGb250KClcIlxuICAgICAgICBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgW2xpc3RIaWRkZW5JbnB1dFNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgW2xpc3RNYXhJdGVtU2hvd109XCI4XCJcbiAgICAgICAgW3pJbmRleF09XCIxMjUwXCJcbiAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVTZWxlY3RGb250KCRldmVudClcIj5cbiAgICAgICAgQGlmIChmb250U2VsZWN0ZWQoKTsgYXMgZm9udFNlbGVjdGVkKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyIHB5LVs4cHhdIGxpYnMtdWktZm9udC1oNXIgcGwtWzE2cHhdIHByLVs0MHB4XSB7eyBvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XScgfX1cIj5cbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwie3pJbmRleDoxMjUwfVwiPlxuICAgICAgICAgICAgICB7eyBsYWJlbEZvbnRTZWxlY3RlZENvbXB1dGVkKCkgfX1cbiAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1tb3ZlLXJpZ2h0IHJvdGF0ZS05MCBhYnNvbHV0ZSByaWdodC1bMTJweF0gdGV4dC1bIzZhNzM4M10gdGV4dC1bMTZweF1cIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdmb250U2l6ZScpIHtcbiAgICA8ZGl2IGNsYXNzPVwicWwtcGlja2VyIHt7IG9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJyB9fVwiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdmFsaWQgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgWyhpdGVtKV09XCJzaXplXCJcbiAgICAgICAgW2ZpZWxkTmFtZUJpbmRdPVwiJ3ZhbHVlJ1wiXG4gICAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCIxXCJcbiAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjcyXCJcbiAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIjhcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgIFtjbGFzc0NvbnRhaW5lcklucHV0XT1cIid3LVs3MnB4XSBoLVszMnB4XSdcIlxuICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlclZhbHVlQ2hhbmdlKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICA8ZGl2IGNsYXNzPVwicWwtY29sb3IgcWwtcGlja2VyIHFsLWNvbG9yLXBpY2tlciAhZmxleCBpdGVtcy1jZW50ZXIge3sgb3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nIH19XCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl90ZXh0X2NvbG9yJywgekluZGV4OjEyNTB9XCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1zZWxlY3RfY29sb3IgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgW2RpcmVjdGlvbl09XCIndG9wJ1wiXG4gICAgICAgICAgW2V4dGVybmFsQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICBbYXBwbHlOb3ddPVwidHJ1ZVwiXG4gICAgICAgICAgKG91dENvbG9yQ2hhbmdlKT1cInNldFN0eWxlKCdjb2xvcicsICRldmVudClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1pY29uLWVkaXRvci1jb2xvci10ZXh0IGxpYnMtdWktYnV0dG9ucy1zZWxlY3QtY29sb3IgdGV4dC1bIzZhNzM4M10gdGV4dC1bMTZweF0gaG92ZXI6dGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0xKV1cIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1zZWxlY3RfY29sb3I+XG4gICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdiYWNrZ3JvdW5kJykge1xuICAgIDxkaXYgY2xhc3M9XCJxbC1iYWNrZ3JvdW5kIHFsLXBpY2tlciBxbC1jb2xvci1waWNrZXIgIWZsZXggaXRlbXMtY2VudGVyIHt7IG9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJyB9fVwiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFtjb25maWddPVwie2NvbnRlbnQ6J2kxOG5fYmFja2dyb3VuZF9jb2xvcicsIHpJbmRleDoxMjUwfVwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtc2VsZWN0X2NvbG9yIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICAgIFtkaXJlY3Rpb25dPVwiJ3RvcCdcIlxuICAgICAgICAgIFtleHRlcm5hbENvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2FwcGx5Tm93XT1cInRydWVcIlxuICAgICAgICAgIChvdXRDb2xvckNoYW5nZSk9XCJzZXRTdHlsZSgnYmFja2dyb3VuZCcsICRldmVudClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1pY29uLWVkaXRvci1jb2xvci1iYWNrZ3JvdW5kIGxpYnMtdWktYnV0dG9ucy1zZWxlY3QtY29sb3IgdGV4dC1bIzZhNzM4M10gdGV4dC1bMTZweF0gaG92ZXI6dGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0xKV1cIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1zZWxlY3RfY29sb3I+XG4gICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdib2xkJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2ZvbnRfd2VpZ2h0X2JvbGQnLCB6SW5kZXg6MTI1MH1cIlxuICAgICAgICBjbGFzcz1cInFsLWJvbGRcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnaXRhbGljJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2ZvbnRfc3R5bGVfaXRhbGljJywgekluZGV4OjEyNTB9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1pdGFsaWNcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAndW5kZXJsaW5lJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX3RleHRfZGVjb3JhdGlvbl91bmRlcmxpbmUnLCB6SW5kZXg6MTI1MH1cIlxuICAgICAgICBjbGFzcz1cInFsLXVuZGVybGluZVwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdzdHJpa2VUaHJvdWdoJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX3RleHRfbGluZV90aHJvdWdoJywgekluZGV4OjEyNTB9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1zdHJpa2VcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnYWRqdXN0Jykge1xuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSAhZmxleCBpdGVtcy1jZW50ZXIgcWwtYWxpZ24gcWwtcGlja2VyIHFsLWljb24tcGlja2VyICF3LW1heCB7eyBvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XScgfX1cIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2FkanVzdCcsIHpJbmRleDoxMjUwfVwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2xhYmVsUG9wb3ZlckZ1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICBbbGlzdENvbmZpZ109XCJsaXN0Q29uZmlnQWxpZ24oKVwiXG4gICAgICAgICAgW2xpc3RIaWRkZW5JbnB1dFNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICBbcG9wb3ZlckN1c3RvbUNvbmZpZ109XCJ7aWdub3JlQXJyb3c6IHRydWUsIGNsYXNzSW5jbHVkZTogJyF3LVszMnB4XSBvdmVyZmxvdy1oaWRkZW4gIXB5LVs0cHhdJywgcG9zaXRpb246IHttb2RlOiAnc3RhcnQnLCBkaXN0YW5jZTogMH0sIHBhZGRpbmdMZWZ0SXRlbTogZmFsc2V9XCJcbiAgICAgICAgICBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbbGlzdE1heEl0ZW1TaG93XT1cIjhcIlxuICAgICAgICAgIFt6SW5kZXhdPVwiMTI1MFwiXG4gICAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVTZWxlY3RBbGlnbigkZXZlbnQpXCI+XG4gICAgICAgICAgQGlmIChhbGlnblNlbGVjdGVkKCk7IGFzIGFsaWduU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiaWNvbkFsaWduU2VsZWN0ZWRDb21wdXRlZCgpXCI+PC9pPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1tb3ZlLXJpZ2h0IHJvdGF0ZS05MCB0ZXh0LVsjNmE3MzgzXSB0ZXh0LVsxNnB4XSBtbC1bNHB4XVwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdpbmRlbnRJbmNyZWFzZScpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl9pbmRlbnRfaW5jcmVhc2UnLCB6SW5kZXg6MTI1MH1cIlxuICAgICAgICBjbGFzcz1cInFsLWluZGVudFwiXG4gICAgICAgIHZhbHVlPVwiKzFcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnaW5kZW50RGVjcmVhc2UnKSB7XG4gICAgPGRpdiBbY2xhc3NdPVwib3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nXCI+XG4gICAgICA8YnV0dG9uIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgIFtjb25maWddPVwie2NvbnRlbnQ6J2kxOG5faW5kZW50X2RlY3JlYXNlJywgekluZGV4OjEyNTB9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1pbmRlbnRcIlxuICAgICAgICB2YWx1ZT1cIi0xXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2xpc3RCdWxsZXRlZCcpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl9saXN0X2J1bGxldGVkJywgekluZGV4OjEyNTB9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1saXN0IHFsLWJ1bGxldFwiXG4gICAgICAgIHZhbHVlPVwiYnVsbGV0XCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2xpc3ROdW1iZXJlZCcpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl9saXN0X251bWJlcmVkJywgekluZGV4OjEyNTB9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1saXN0IHFsLW9yZGVyZWRcIlxuICAgICAgICB2YWx1ZT1cIm9yZGVyZWRcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAncGVyc29uYWxpemUnICYmIHRlbXBsYXRlVG9vbEJhclBlcnNvbmFsaXplKCk7IGFzIHRlbXBsYXRlVG9vbEJhclBlcnNvbmFsaXplKSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHt7IG9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJyB9fVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlVG9vbEJhclBlcnNvbmFsaXplXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2Jsb2NrcXVvdGUnKSB7XG4gICAgPGRpdiBbY2xhc3NdPVwib3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nXCI+XG4gICAgICA8YnV0dG9uIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgIFtjb25maWddPVwie2NvbnRlbnQ6J2kxOG5fcXVvdGUnLCB6SW5kZXg6MTI1MH1cIlxuICAgICAgICBjbGFzcz1cInFsLWJsb2NrcXVvdGVcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnbGluaycpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl9pbnNlcnRfbGluaycsIHpJbmRleDoxMjUwfVwiXG4gICAgICAgIGNsYXNzPVwicWwtbGlua1wiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICd1bkxpbmsnKSB7XG4gICAgPGRpdiBbY2xhc3NdPVwib3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nXCI+XG4gICAgICA8YnV0dG9uIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgIFtjb25maWddPVwie2NvbnRlbnQ6J2kxOG5fdW5saW5rJywgekluZGV4OjEyNTB9XCJcbiAgICAgICAgY2xhc3M9XCJxbC11bkxpbmtcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnaW1hZ2UnICYmIHVwbG9hZEltYWdlQ29uZmlnKCkuc2hvd0ljb24pIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl9pbWFnZScsIHpJbmRleDoxMjUwfVwiXG4gICAgICAgIGNsYXNzPVwicWwtaW1hZ2VcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnZW1vamknKSB7XG4gICAgPGRpdiBbY2xhc3NdPVwib3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nXCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWVtb2ppIFt6SW5kZXhdPVwiMTI1MFwiXG4gICAgICAgIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgKG91dEV2ZW50RW1vamkpPVwiaGFuZGxlckFkZEVtb2ppKCRldmVudClcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWVtb2ppXCI+PC9idXR0b24+XG4gICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1lbW9qaT5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnbGluZScpIHtcbiAgICA8ZGl2IGNsYXNzPVwidy1bMXB4XSBoLVsxNnB4XSBsaWJzLXVpLWJvcmRlci1yaWdodC1nZW5lcmFsXCI+PC9kaXY+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbbW9kZV09XCInY2xpY2snXCJcbiAgW2lnbm9yZUhpZGRlblBvcG92ZXJDb250ZW50V2hlbk1vdXNlTGVhdmVdPVwidHJ1ZVwiXG4gIFtjb25maWddPVwie3RlbXBsYXRlOiB2aWV3TGluaywgd2hpdGVUaGVtZTogdHJ1ZSwgaWdub3JlQXJyb3c6IHRydWV9XCJcbiAgKG91dEV2ZW50KT1cImhhbmRsZXJQb3BvdmVyRXZlbnQoJGV2ZW50KVwiXG4gIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJQb3BvdmVyRnVuY3Rpb25Db250cm9sKCRldmVudClcIiAvPlxuXG48bmctdGVtcGxhdGUgI3ZpZXdMaW5rPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHB4LVsxNnB4XSBweS1bOHB4XSByb3VuZGVkLVs4cHhdXCI+XG4gICAgPGRpdiBjbGFzcz1cInctZnVsbCBtaW4tdy0wIGxpYnMtdWktZm9udC1oNXJcIlxuICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlPnt7IGxpbmsoKS51cmwgfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbWwtWzE2cHhdXCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cIididXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tZWRpdC1saW5lJ1wiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAnXCJcbiAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJFZGl0KCRldmVudClcIiAvPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCInYnV0dG9uLWxpbmstY3VzdG9tJ1wiXG4gICAgICAgIFtidXR0b25DdXN0b21dPVwie1xuICAgICAgICAgIGNvbmZpZ1N0ZXBDb2xvcjoge1xuICAgICAgICAgICAgdGV4dDogJyMwNzE2MzEnLFxuICAgICAgICAgICAgdGV4dF9ob3ZlcjogJyNlZTJkNDEnLFxuICAgICAgICAgICAgdGV4dF9hY3RpdmU6ICcjZWUyZDQxJyxcbiAgICAgICAgICAgIHRleHRfZGlzYWJsZTogJzA3MTYzMSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJvb3RDb2xvcjogJyMwNzE2MzEnXG4gICAgICAgIH1cIlxuICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichcC0wIG1sLVsxMnB4XSdcIlxuICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWxpbmstYnJva2VuJ1wiXG4gICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyVW5saW5rKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -10,7 +10,7 @@ import { LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs
|
|
|
10
10
|
import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
|
|
11
11
|
import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
|
|
12
12
|
import { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';
|
|
13
|
-
import {
|
|
13
|
+
import { patternUrl, convertFileToBase64, get, set, isNil, xssFilter, ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MIN_LENGTH, ERROR_MESSAGE_MAX_LENGTH } from '@libs-ui/utils';
|
|
14
14
|
import * as i1 from '@ngx-translate/core';
|
|
15
15
|
import { TranslateService, TranslateModule } from '@ngx-translate/core';
|
|
16
16
|
import Quill from 'quill';
|
|
@@ -39,7 +39,7 @@ const indentStyle = new IndentAttributor('indent', 'margin-left', {
|
|
|
39
39
|
|
|
40
40
|
class LibsUiComponentsInputsQuillLinkComponent {
|
|
41
41
|
dataLink = signal({ title: '', link: '' });
|
|
42
|
-
patternLink = signal(
|
|
42
|
+
patternLink = signal(patternUrl());
|
|
43
43
|
inputValidFunctionControl = signal([]);
|
|
44
44
|
zIndex = model(1200);
|
|
45
45
|
title = model();
|
|
@@ -736,7 +736,7 @@ class LibsUiComponentsInputsQuillComponent {
|
|
|
736
736
|
const links = await this.uploadImageConfig().functionUploadImage?.(images);
|
|
737
737
|
if (links && links.length) {
|
|
738
738
|
links.forEach(link => {
|
|
739
|
-
if (!link || (this.uploadImageConfig().onlyAcceptImageHttpsLink && (link instanceof ArrayBuffer || !new RegExp(
|
|
739
|
+
if (!link || (this.uploadImageConfig().onlyAcceptImageHttpsLink && (link instanceof ArrayBuffer || !new RegExp(patternUrl()).test(link)))) {
|
|
740
740
|
return;
|
|
741
741
|
}
|
|
742
742
|
this.insertHtml('image', link);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-components-inputs-quill.mjs","sources":["../../../../../../libs-ui/components/inputs/quill/src/indent-attributor/indent-attributor.component.ts","../../../../../../libs-ui/components/inputs/quill/src/link/link.component.ts","../../../../../../libs-ui/components/inputs/quill/src/link/link.component.html","../../../../../../libs-ui/components/inputs/quill/src/mention/mention.component.ts","../../../../../../libs-ui/components/inputs/quill/src/upload-image/upload-image.component.ts","../../../../../../libs-ui/components/inputs/quill/src/upload-image/upload-image.component.html","../../../../../../libs-ui/components/inputs/quill/src/utils/quill.define.ts","../../../../../../libs-ui/components/inputs/quill/src/quill.component.ts","../../../../../../libs-ui/components/inputs/quill/src/quill.component.html","../../../../../../libs-ui/components/inputs/quill/src/libs-ui-components-inputs-quill.ts"],"sourcesContent":["import Quill from \"quill\";\n\nconst parchment = Quill.import('parchment');\nconst pixelLevels = [1, 2, 3, 4, 5, 6, 7, 8];\nconst tabMultiplier = 3;\n\nclass IndentAttributor extends (parchment.Attributor.Style as {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new(formatName: string, styleProperty: string, attributorOptions: unknown): any;\n}) {\n constructor(formatName: string, styleProperty: string, attributorOptions: unknown) {\n super(formatName, styleProperty, attributorOptions);\n }\n\n public add(node: HTMLElement, value: string): boolean {\n return super.add(node, `${+value * tabMultiplier}em`);\n }\n\n public value(node: HTMLElement): number | undefined {\n return parseFloat(super.value(node)) / tabMultiplier || undefined; // Don't return NaN\n }\n}\n\nexport const indentStyle = new IndentAttributor('indent', 'margin-left', {\n scope: parchment.Scope.BLOCK,\n whitelist: pixelLevels.map(value => `${value * tabMultiplier}em`),\n});","import { ChangeDetectionStrategy, Component, model, OnInit, output, signal } from '@angular/core';\nimport { IInputValidFunctionControlEvent, LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs-valid';\nimport { LibsUiComponentsModalComponent, TYPE_MODAL_EVENT } from '@libs-ui/components-modal';\nimport { PATTERN_URL } from '@libs-ui/utils';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-quill-link',\n templateUrl: './link.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n LibsUiComponentsModalComponent,\n LibsUiComponentsInputsValidComponent\n ]\n})\nexport class LibsUiComponentsInputsQuillLinkComponent implements OnInit {\n\n protected dataLink = signal<{ title: string, link: string }>({ title: '', link: '' });\n protected patternLink = signal<RegExp>(PATTERN_URL());\n\n private inputValidFunctionControl = signal<Array<IInputValidFunctionControlEvent>>([]);\n\n zIndex = model<number>(1200);\n title = model<string>();\n link = model<string>();\n\n readonly outClose = output<void>();\n readonly outSaveLink = output<{ title: string, link: string }>();\n\n ngOnInit() {\n const title = this.title();\n const link = this.link();\n if (title || link) {\n this.dataLink.update(item => ({ ...item, title: title || '', link: link || '' }));\n }\n }\n\n protected async handlerFunctionsControl(event: IInputValidFunctionControlEvent) {\n this.inputValidFunctionControl.update(items => [...items, event]);\n }\n\n private async validate() {\n let valid = true;\n for (const control of this.inputValidFunctionControl()) {\n if (!(await control.checkIsValid())) {\n valid = false;\n }\n }\n return valid;\n }\n\n protected async handlerEvent(event: TYPE_MODAL_EVENT) {\n if (event !== 'agree') {\n this.outClose.emit();\n return;\n }\n if (await this.validate()) {\n this.outSaveLink.emit(this.dataLink());\n this.outClose.emit();\n }\n }\n\n}\n","<libs_ui-components-modal [title]=\"'i18n_insert_link'\"\n [mode]=\"'center'\"\n [height]=\"'auto'\"\n [width]=\"'598px'\"\n [headerConfig]=\"{ignoreHeaderTheme: true}\"\n [zIndex]=\"zIndex()\"\n (outEvent)=\"handlerEvent($event)\">\n <div class=\"libs-ui-modal-body-custom\">\n <libs_ui-components-inputs-valid [labelConfig]=\"{labelLeft: 'i18n_content', required: true}\"\n [(item)]=\"dataLink\"\n [fieldNameBind]=\"'title'\"\n [placeholder]=\"'i18n_import_content'\"\n [validRequired]=\"{isRequired: true}\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\" />\n <div class=\"mt-[16px]\">\n <libs_ui-components-inputs-valid [labelConfig]=\"{labelLeft: 'Link', required: true}\"\n [(item)]=\"dataLink\"\n [fieldNameBind]=\"'link'\"\n [placeholder]=\"'https:/…'\"\n [validRequired]=\"{isRequired: true}\"\n [validPattern]=\"[{pattern: patternLink(), valuePatternShowError: false}]\"\n [keySelectedUnitLeft]=\"'1'\"\n [unitsLeft]=\"[{id:'1',label:'URL'}]\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\" />\n </div>\n </div>\n</libs_ui-components-modal>\n","import Quill from \"quill\";\n\nconst Embed = Quill.import(\"blots/embed\");\n\nexport class QuillMentionBlot extends Embed {\n static create(data: { id: string, feId: string, value: string }) {\n const node = super.create();\n node.innerText += data.value;\n node.setAttribute('id', data.id);\n node.setAttribute('feId', data.feId);\n node.setAttribute('value', data.value);\n return node;\n }\n\n static value(domNode: HTMLElement) {\n return {\n id: domNode.getAttribute('id'),\n feId: domNode.getAttribute('feId'),\n value: domNode.getAttribute('value')\n };\n }\n\n attach() {\n super.attach();\n if (!this.mounted) {\n this.mounted = true;\n this.clickHandler = this.getClickHandler;\n this.domNode.addEventListener(\"click\", this.clickHandler, false);\n }\n }\n\n getClickHandler(event: Event) {\n event.stopPropagation();\n }\n}\n\nQuillMentionBlot.blotName = \"mention\";\nQuillMentionBlot.tagName = \"span\";\nQuillMentionBlot.className = \"libs-ui-quill-mention\";","import { ChangeDetectionStrategy, Component, model, output, signal } from '@angular/core';\nimport { IButton } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsModalComponent, TYPE_MODAL_EVENT } from '@libs-ui/components-modal';\nimport { IUploadImageConfig } from '../interfaces/quill.interface';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-quill-upload_image',\n templateUrl: './upload-image.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n LibsUiComponentsModalComponent\n ]\n})\nexport class LibsUiComponentsInputsQuillUploadImageComponent {\n\n protected buttonFooter = signal<Array<IButton>>([\n {\n type: 'button-third',\n label: 'i18n_cancel',\n action: async () => this.outClose.emit()\n },\n {\n label: 'i18n_save',\n action: () => this.handlerSaveImage()\n }]);\n protected disable = signal<boolean>(false);\n\n // private mediaFile =signal<IMediaFile | undefined>(undefined);\n // private mediaUploadFunctionControl =signal<IMediaUploadBaseFunctionControlEvent | undefined>(undefined);\n\n uploadImageConfig = model.required<IUploadImageConfig>();\n\n readonly outClose = output<string | void>();\n\n // protected handlerFunctionsControl(event: IMediaUploadBaseFunctionControlEvent) {\n // this.mediaUploadFunctionControl.set(event);\n // }\n\n // protected handlerChangeFile(event: IChangeFile) {\n // this.mediaFile.set(event.files[0]);\n // }\n\n private async handlerSaveImage() {\n // if (!await this.mediaUploadFunctionControl()?.valid()) {\n // return;\n // }\n // if (this.mediaFile?.origin_url) {\n // this.moClose.emit(this.mediaFile.origin_url);\n\n // return;\n // }\n // const body: IOptionsUploadMedia = {\n // do_not_delete: true,\n // file: this.mediaFile?.file,\n // option: 'thumb',\n // size: [{ 'width': '200', 'height': '200' }]\n // };\n\n // this.disable = true;\n // try {\n // const params = new HttpParamsRequest({ fromObject: { pem: BUILD_PEM_OBJECT({ isCheck: 0, action: DefineConstants.PERMISSION_ACTION_VIEW, pathCheck: '/other' }) } });\n // const res = await this.mediaService.uploadImage(params, body);\n\n // this.moClose.emit(res.data?.url);\n // } catch (error) {\n // console.log(error);\n\n // this.pushMessageService.showCompTypeText('i18n_notification_manipulation_not_success', undefined, undefined, { timeRemove: 2000, type: 'error' });\n // this.moClose.emit();\n // } finally {\n // this.disable = false;\n // }\n }\n\n protected handlerEventModal(event: TYPE_MODAL_EVENT) {\n if (event === 'close') {\n this.outClose.emit();\n }\n }\n}\n","<libs_ui-components-modal [title]=\"'i18n_download_image'\"\n [mode]=\"'center'\"\n [width]=\"'598px'\"\n [headerConfig]=\"{ignoreHeaderTheme:true}\"\n [maxHeight]=\"'calc(100% - 100px)'\"\n [height]=\"'auto'\"\n [zIndex]=\"uploadImageConfig().zIndex || 1203\"\n [disable]=\"disable()\"\n [buttonsFooter]=\"buttonFooter()\"\n (outEvent)=\"handlerEventModal($event)\">\n <div class=\"libs-ui-modal-body-custom\">\n <!-- <mo-libs-shared-components-media-upload [zIndex]=\"zIndex+1\"\n [labelConfig]=\"labelConfig\"\n [multiple]=\"false\"\n [fileType]=\"'image'\"\n [doNotDelete]=\"true\"\n [maxImageSize]=\"maxImageSize || 1048576\"\n [limitFile]=\"10\"\n [validRequired]=\"{isRequired: true}\"\n (moChangeFile)=\"handlerChangeFile($event)\"\n (moFunctionsControl)=\"handlerFunctionsControl($event)\">\n </mo-libs-shared-components-media-upload> -->\n </div>\n</libs_ui-components-modal>\n","import { signal } from '@angular/core';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { returnListObject } from '@libs-ui/services-http-request';\nimport { ILink, IToolbarConfig, IUploadImageConfig } from '../interfaces/quill.interface';\nimport { convertFileToBase64 } from '@libs-ui/utils';\n\nexport const listDataAlign = () => {\n return [\n { key: '', icon: 'libs-ui-icon-align-left text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]' },\n { key: 'right', icon: 'libs-ui-icon-align-right text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]' },\n { key: 'center', icon: 'libs-ui-icon-align-center text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]' },\n { key: 'justify', icon: 'libs-ui-icon-align-justify text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]' },\n ];\n};\n\nexport const listFont = () => {\n return [\n { key: '', label: 'Sans Serif' },\n { key: 'serif', label: 'Serif' },\n { key: 'monospace', label: 'Monospace' },\n ];\n};\n\nexport const listConfigAlign = (): IListConfigItem => {\n return {\n type: 'text',\n autoSelectFirstItem: true,\n httpRequestData: signal({\n serviceOther: returnListObject(listDataAlign()),\n functionName: 'list',\n argumentsValue: []\n }),\n configTemplateText: signal({\n fieldKey: 'key',\n getClassItem: () => '!px-[8px] !py-[4px]',\n getValue: item => `<i class='flex ${item.icon}'></i>`,\n ignoreIconSelected: true\n })\n };\n};\n\nexport const listConfigFont = (): IListConfigItem => {\n return {\n type: 'text',\n autoSelectFirstItem: true,\n httpRequestData: signal({\n serviceOther: returnListObject(listFont()),\n functionName: 'list',\n argumentsValue: []\n }),\n configTemplateText: signal({\n fieldKey: 'key',\n getValue: item => item.label,\n ignoreIconSelected: true\n })\n };\n};\n\nexport const toolBarOptionDefault = (): Array<IToolbarConfig> => {\n return [\n {\n type: 'undo',\n classInclude: 'mr-[8px]'\n },\n {\n type: 'redo'\n },\n {\n type: 'line'\n },\n {\n type: 'fontFamily',\n classInclude: 'ml-[8px] mr-[2px]'\n },\n {\n type: 'fontSize',\n classInclude: 'ml-[2px] mr-[8px]'\n },\n {\n type: 'line'\n },\n {\n type: 'color'\n },\n {\n type: 'background'\n },\n {\n type: 'line'\n },\n {\n type: 'bold'\n },\n {\n type: 'italic'\n },\n {\n type: 'underline'\n },\n {\n type: 'strikeThrough'\n },\n {\n type: 'line'\n },\n {\n type: 'adjust'\n },\n {\n type: 'line'\n },\n {\n type: 'indentIncrease'\n },\n {\n type: 'indentDecrease'\n },\n {\n type: 'listBulleted'\n },\n {\n type: 'listNumbered'\n },\n {\n type: 'line'\n },\n {\n type: 'personalize'\n },\n {\n type: 'blockquote'\n },\n {\n type: 'link'\n },\n {\n type: 'unLink'\n },\n {\n type: 'image'\n },\n {\n type: 'emoji',\n classInclude: 'ml-[8px]'\n }\n ];\n}\n\nexport const iconList = (): Array<{ key: string, icon: string }> => {\n return [\n {\n key: 'bold',\n icon: 'libs-ui-icon-editor-bold',\n },\n {\n key: 'italic',\n icon: 'libs-ui-icon-editor-italic',\n },\n {\n key: 'underline',\n icon: 'libs-ui-icon-editor-underlined',\n },\n {\n key: 'image',\n icon: 'libs-ui-icon-image-solid'\n },\n {\n key: 'link',\n icon: 'libs-ui-icon-link'\n },\n {\n key: 'undo',\n icon: 'libs-ui-icon-undo'\n },\n {\n key: 'redo',\n icon: 'libs-ui-icon-undo scale-x-[-1]'\n },\n {\n key: 'strike',\n icon: 'libs-ui-icon-editor-strike-through'\n },\n {\n key: 'blockquote',\n icon: 'libs-ui-icon-quote'\n },\n {\n key: 'ordered',\n icon: 'libs-ui-icon-list-numbered'\n },\n {\n key: 'bullet',\n icon: 'libs-ui-icon-list-bulleted'\n },\n {\n key: 'background',\n icon: 'libs-ui-icon-editor-color-background'\n },\n {\n key: 'color',\n icon: 'libs-ui-icon-editor-color-text'\n },\n {\n key: \"indent.-1\",\n icon: 'libs-ui-icon-indent-decrease'\n },\n {\n key: \"indent.+1\",\n icon: 'libs-ui-icon-indent-increase'\n },\n {\n key: \"align.\",\n icon: 'align-quill libs-ui-icon-align-left'\n },\n {\n key: \"align.center\",\n icon: 'align-quill libs-ui-icon-align-center'\n },\n {\n key: \"align.right\",\n icon: 'align-quill libs-ui-icon-align-right'\n },\n {\n key: \"align.justify\",\n icon: 'align-quill libs-ui-icon-align-justify'\n },\n {\n key: 'unLink',\n icon: 'libs-ui-icon-link-broken'\n },\n {\n key: 'emoji',\n icon: 'libs-ui-icon-face-smile'\n }\n ];\n}\n\nexport const uploadImageConfigDefault = (): IUploadImageConfig => {\n return {\n modeCustom: true,\n zIndex: 1202,\n showIcon: true,\n onlyAcceptImageHttpsLink: false,\n functionUploadImage: async (links) => {\n const data = [];\n for (const element of links) {\n data.push(await convertFileToBase64(element))\n }\n return data;\n }\n }\n}\n\nexport const linkDefault = (): ILink => {\n return {\n title: '',\n url: '',\n range: {\n index: 0,\n length: 0\n }\n };\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ComponentRef, computed, ElementRef, inject, input, model, OnDestroy, OnInit, output, signal, TemplateRef, viewChild, viewChildren } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsButtonsSelectColorComponent } from '@libs-ui/components-buttons-select-color';\nimport { IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { LibsUiComponentsEmojiComponent } from '@libs-ui/components-inputs-emoji';\nimport { IMentionConfig, IMentionInsert, LibsUiComponentsInputsMentionDirective } from '@libs-ui/components-inputs-mention';\nimport { IValidLength, IValidRequired, LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs-valid';\nimport { ILabel, LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { IPopoverFunctionControlEvent, LibsUiComponentsPopoverComponent, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\nimport { TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_LENGTH, ERROR_MESSAGE_MIN_LENGTH, get, isNil, PATTERN_URL, set, xssFilter } from '@libs-ui/utils';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport Quill, { RangeStatic, Sources, StringMap } from 'quill';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { indentStyle } from './indent-attributor/indent-attributor.component';\nimport { ILink, IQuillFunctionControlEvent, IToolbarConfig, IUploadImageConfig } from './interfaces/quill.interface';\nimport { LibsUiComponentsInputsQuillLinkComponent } from './link/link.component';\nimport { QuillMentionBlot } from './mention/mention.component';\nimport { LibsUiComponentsInputsQuillUploadImageComponent } from './upload-image/upload-image.component';\nimport { iconList, linkDefault, listConfigAlign, listConfigFont, listFont, toolBarOptionDefault, uploadImageConfigDefault } from './utils/quill.define';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-quill',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './quill.component.html',\n styleUrl: './quill.component.scss',\n imports: [\n TranslateModule, NgTemplateOutlet, LibsUiComponentsInputsMentionDirective,\n LibsUiComponentsLabelComponent, LibsUiComponentsDropdownComponent,\n LibsUiComponentsPopoverComponent, LibsUiComponentsButtonsSelectColorComponent,\n LibsUiComponentsInputsValidComponent, LibsUiComponentsEmojiComponent,\n LibsUiComponentsButtonsButtonComponent\n ]\n})\nexport class LibsUiComponentsInputsQuillComponent implements OnInit, AfterViewInit, OnDestroy {\n\n protected messageError = signal<string>('');\n protected display = signal<boolean>(false);\n protected listConfigAlign = signal<IListConfigItem>(listConfigAlign());\n protected alignSelected = signal<IEmitSelectKey | undefined>(undefined);\n protected iconAlignSelectedComputed = computed(() => get(this.alignSelected(), 'item.icon'));\n protected listConfigFont = signal<IListConfigItem>(listConfigFont());\n protected fontSelected = signal<IEmitSelectKey | undefined>(undefined);\n protected labelFontSelectedComputed = computed(() => get(this.fontSelected(), 'item.label') || 'Sans Serif');\n protected size = signal<{ value: number }>({ value: 14 });\n protected itemHiddenExpand = signal<Array<number>>([]);\n protected itemHidden = signal<Array<number>>([]);\n protected showMoreAction = signal<boolean>(false);\n protected link = signal<ILink>(linkDefault());\n\n private popoverFunctionControl = signal<IPopoverFunctionControlEvent | undefined>(undefined);\n private quill = signal<Quill | undefined>(undefined);\n private handlers = signal<Record<string, (...params: Array<unknown>) => void>>({ undo: this.handleUndo.bind(this), redo: this.handleRedo.bind(this) });\n private showMention = signal<boolean>(false);\n private addEditLinkComponentRef = signal<ComponentRef<LibsUiComponentsInputsQuillLinkComponent> | undefined>(undefined);\n private uploadImageComponentRef = signal<ComponentRef<LibsUiComponentsInputsQuillUploadImageComponent> | undefined>(undefined);\n private dynamicComponentService = inject(LibsUiDynamicComponentService);\n private translate = inject(TranslateService);\n private onDestroy = new Subject<void>();\n\n readonly optionsToolbar = input<Array<IToolbarConfig>, Array<IToolbarConfig> | undefined>(toolBarOptionDefault(), { transform: value => value || toolBarOptionDefault() });\n readonly showToolBar = input<boolean>();\n readonly classIncludeToolbar = input<string>('bottom-[-66px] left-[18px]');\n readonly placeholder = input<string, string | undefined>('i18n_import_content', { transform: (value) => value || 'i18n_import_content' });\n readonly label = input<ILabel | undefined>();\n readonly item = model<Record<string, unknown>>();\n readonly fieldNameBind = input<string>('value');\n readonly readonly = input<boolean>();\n readonly showErrorLabel = input<boolean>(true);\n readonly showErrorBorder = input<boolean>(false);\n readonly onlyShowErrorBorderInContent = input<boolean>(false);\n readonly classIncludeTemplate = input<string>();\n readonly classInclude = input<string>();\n readonly handlersExpand = input<Array<{ title: string, action: () => void }>>();\n readonly validRequired = input<IValidRequired>();\n readonly validMinLength = input<IValidLength>();\n readonly validMaxLength = input<IValidLength>();\n readonly onlyShowContent = input<boolean>(false);\n readonly zIndex = input<number, number | undefined>(1201, { transform: (value) => value || 1201 });\n readonly dataConfigMention = input<IMentionConfig>();\n readonly heightAuto = input<boolean>();\n readonly autoFocus = input<boolean>();\n readonly autoFocusBottom = input<boolean>();\n readonly templateToolBarPersonalize = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly template = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly uploadImageConfig = input<IUploadImageConfig, IUploadImageConfig | undefined>(uploadImageConfigDefault(), { transform: (value) => value || uploadImageConfigDefault() });\n\n readonly outMessageError = output<string>();\n readonly outBlur = output<void>();\n readonly outFocus = output<void>();\n readonly outChange = output<string>();\n readonly outFunctionsControl = output<IQuillFunctionControlEvent>();\n readonly outSelectionChange = output<boolean>();\n\n readonly wrapperEditorEl = viewChild<ElementRef>('wrapperEditor');\n readonly editorEl = viewChild<ElementRef>('editor');\n readonly quillOptionEl = viewChild<ElementRef>('quillOption');\n readonly quillEditorEl = viewChild<ElementRef>('quillEditor');\n readonly quillToolbarEl = viewChild<ElementRef>('quillToolbar');\n readonly toolbarItemsEl = viewChild<ElementRef>('toolbarItems');\n readonly itemsEl = viewChildren<ElementRef>('item');\n\n ngOnInit() {\n this.outFunctionsControl.emit({\n checkIsValid: this.validate.bind(this),\n setContent: this.setContent.bind(this),\n insertText: this.insertText.bind(this),\n insertLink: this.insertLink.bind(this),\n insertHtml: this.insertHtml.bind(this),\n setFontSize: this.setFontSize.bind(this),\n setColor: this.setColor.bind(this),\n setBackground: this.setBackground.bind(this)\n });\n }\n\n ngAfterViewInit(): void {\n this.calculatorToolbar();\n if (this.autoFocus()) {\n this.display.set(true);\n }\n this.setHandlerFunction();\n this.initQuill();\n if (!this.autoFocus()) {\n setTimeout(() => this.display.set(true), 200);\n }\n this.setClassIncludeAndReadOnly();\n this.setContent(get(this.item(), this.fieldNameBind(), ''));\n this.handlerTextChange();\n this.handlerSelectionChange();\n this.handlerPaste();\n if (this.autoFocus()) {\n this.quill()?.focus();\n }\n fromEvent(window, 'resize').pipe(takeUntil(this.onDestroy)).subscribe(this.calculatorToolbar.bind(this));\n }\n\n private initQuill() {\n const size = Quill.import('attributors/style/size');\n const image = Quill.import('formats/image');\n const parchment = Quill.import('parchment');\n const alignStyle = Quill.import('attributors/style/align');\n const icons = Quill.import('ui/icons');\n const block = parchment.query('block');\n const italic = Quill.import('formats/italic');\n const bold = Quill.import('formats/bold');\n size.whitelist = ['8px', '9px', '10px', '11px', '12px', '13px', '14px', '15px', '16px', '17px', '18px', '19px', '20px', '21px', '22px', '23px', '24px', '25px', '26px', '27px', '28px', '29px', '30px', '31px', '32px', '33px', '34px', '35px', '36px', '37px', '38px', '39px', '40px', '41px', '42px', '43px', '44px', '45px', '46px', '47px', '48px', '49px', '50px', '51px', '52px', '53px', '54px', '55px', '56px', '57px', '58px', '59px', '60px', '61px', '62px', '63px', '64px', '65px', '66px', '67px', '68px', '69px', '70px', '71px', '72px'];\n image.className = 'libs-ui-quill-format-image';\n block.tagName = 'DIV';\n italic.tagName = 'i';\n bold.tagName = 'B';\n Quill.register(bold, true);\n Quill.register(italic, true);\n Quill.register(size, true);\n Quill.register(image, true);\n Quill.register(block, true);\n Quill.register(alignStyle, true);\n Quill.register(QuillMentionBlot, true);\n Quill.register({ 'formats/indent': indentStyle }, true);\n iconList().forEach(element => set(icons, element.key, `<span class=\"${element.icon} hover:text-[var(--libs-ui-color-light-1)] text-[16px] text-[#6a7383]\"></span>`));\n this.quill.set(new Quill(this.quillEditorEl()?.nativeElement, {\n modules: {\n toolbar: {\n container: this.onlyShowContent() && this.quillToolbarEl() ? this.quillToolbarEl()?.nativeElement : this.quillOptionEl()?.nativeElement,\n handlers: this.handlers()\n },\n clipboard: {\n matchVisual: false\n },\n history: {\n delay: 1000,\n maxStack: 100,\n userOnly: false\n },\n keyboard: {\n bindings: {\n enter: {\n key: 13,\n handler: () => this.showMention() ? false : true\n }\n }\n }\n },\n readOnly: this.readonly(),\n placeholder: this.translate.instant(this.placeholder()),\n theme: 'snow',\n bounds: this.heightAuto() ? this.wrapperEditorEl()?.nativeElement : this.quillEditorEl()?.nativeElement,\n scrollingContainer: this.heightAuto() ? this.wrapperEditorEl()?.nativeElement : null\n }));\n }\n\n private setHandlerFunction() {\n if (this.uploadImageConfig().modeCustom) {\n this.handlers.update(item => ({ ...item, image: this.handlerShowUploadImage.bind(this), emoji: () => { return } }));\n }\n let link = false;\n const handlersExpand = this.handlersExpand();\n if (handlersExpand && handlersExpand.length) {\n handlersExpand.forEach(element => {\n if (element.title && element.action) {\n if (element.title === 'link') {\n link = true;\n }\n this.handlers.update(item => ({ ...item, [element.title]: element.action }));\n }\n });\n }\n if (!link) {\n this.handlers.update(item => ({ ...item, link: this.handleShowUploadLink.bind(this), unLink: this.handlerUnInsertLink.bind(this) }));\n }\n }\n\n private setClassIncludeAndReadOnly() {\n const editorEl = this.editorEl();\n const classInclude = this.classInclude();\n const readonly = this.readonly();\n if (editorEl) {\n if (classInclude || readonly) {\n for (const elementNode of editorEl.nativeElement.lastElementChild.children) {\n if (!elementNode.className.includes('ql-editor')) {\n continue;\n }\n if (classInclude) {\n elementNode.classList.add(classInclude);\n }\n if (readonly) {\n elementNode.classList.add('!bg-[#f8f9fa]');\n }\n }\n }\n if (readonly) {\n for (const elementNode of editorEl.nativeElement.children) {\n if (elementNode.className.includes('ql-toolbar')) {\n elementNode.classList.add('pointer-events-none');\n }\n }\n }\n }\n }\n\n private adjustIndexForImages(index: number) {\n const content = this.quill()?.root;\n let imageCount = 0;\n let adjustedIndex = 0;\n const adjustTextIndex = (node: Node) => {\n if (adjustedIndex > index) {\n return;\n }\n if (node.nodeType === Node.TEXT_NODE) {\n adjustedIndex += node.textContent?.length || 0;\n return;\n }\n if (node.nodeType === Node.ELEMENT_NODE && node.nodeName === 'IMG') {\n if (adjustedIndex <= index) {\n imageCount++;\n }\n return;\n }\n if (node.nodeType === Node.ELEMENT_NODE) {\n Array.from(node.childNodes).forEach(adjustTextIndex);\n }\n };\n adjustTextIndex(content as Node);\n return imageCount;\n };\n\n\n private handlerSelectionChange() {\n this.quill()?.on('selection-change', (range: RangeStatic, oldRange: RangeStatic, source: Sources) => {\n if (this.readonly()) {\n return;\n }\n if (range === null && oldRange !== null) {\n this.outBlur.emit();\n return;\n }\n if (range !== null && oldRange === null) {\n this.outFocus.emit();\n return;\n }\n const format = this.quill()?.getFormat();\n if (format) {\n this.getFont(format);\n this.getFontSize(format);\n }\n this.outSelectionChange.emit(range.length ? true : false);\n if (range.length === 0 && format?.link && source === 'user') {\n const selection = document.getSelection();\n const anchorNode = selection?.anchorNode;\n let linkNode = anchorNode as HTMLAnchorElement;\n while (linkNode && linkNode.tagName !== 'A') {\n linkNode = linkNode.parentNode as HTMLAnchorElement;\n }\n if (linkNode && linkNode.tagName === 'A') {\n const linkText = linkNode.innerText;\n const linksIndices: Array<number> = [];\n let indexReturn: number | undefined = -1;\n while (!isNil(indexReturn) && indexReturn < range.index) {\n const textContent = this.quill()?.getText();\n const linkIndex = textContent?.indexOf(linkText, linksIndices.length > 0 ? linksIndices[linksIndices.length - 1] + linkText.length : 0);\n if (!isNil(linkIndex)) {\n if (linkIndex !== -1) {\n linksIndices.push(linkIndex);\n indexReturn = linkIndex + linkText.length;\n }\n if (linkIndex === -1) {\n indexReturn = undefined;\n }\n }\n }\n if (linksIndices && linksIndices.length) {\n const rangeIndex = linksIndices[linksIndices.length - 1];\n const countImage = this.adjustIndexForImages(rangeIndex)\n setTimeout(() => {\n this.link.set({\n title: linkText,\n url: linkNode.href,\n range: {\n index: rangeIndex + countImage,\n length: linkText.length\n }\n })\n this.popoverFunctionControl()?.showPopover(linkNode)\n }, 250);\n }\n }\n }\n });\n }\n\n private handlerPaste() {\n set(this.quill, 'root.onpaste', async (event: ClipboardEvent) => {\n if (!event || !event.clipboardData) {\n return;\n }\n const files = event.clipboardData.files;\n if (!files.length) {\n return;\n }\n event.preventDefault();\n const images: Array<File> = [];\n Array.from(files).forEach((file) => {\n if (file && file.type.split('/')[0] === 'image') {\n images.push(file);\n }\n });\n const links = await this.uploadImageConfig().functionUploadImage?.(images);\n if (links && links.length) {\n links.forEach(link => {\n if (!link || (this.uploadImageConfig().onlyAcceptImageHttpsLink && (link instanceof ArrayBuffer || !new RegExp(PATTERN_URL()).test(link)))) {\n return;\n }\n this.insertHtml('image', link as string);\n })\n }\n });\n }\n\n private handlerTextChange() {\n this.quill()?.on('text-change', (event) => {\n const html = this.quill()?.root.innerHTML;\n setTimeout(() => {\n if (event?.ops[1]?.insert === '\\n') {\n const range = { index: event?.ops[0].retain as number };\n const currentLeaf = this.quill()?.getLeaf(range.index)[0];\n const nextLeaf = this.quill()?.getLeaf(range.index + 1)[0];\n this.quill()?.insertEmbed(range.index, 'break', true, 'user');\n if (nextLeaf === null || currentLeaf.parent !== nextLeaf.parent) {\n this.quill()?.insertEmbed(range.index, 'break', true, 'user');\n }\n this.setSelection((range.index || 0) + 1, 0, Quill.sources.SILENT);\n }\n });\n if (html === '<div><br></div>' || html === '<div style=\"text-align: justify;\"><br></div>' || !this.quill()?.getText()) {\n set(this.item(), this.fieldNameBind(), '');\n this.validate();\n this.outChange.emit(get(this.item(), this.fieldNameBind()));\n return;\n }\n this.convertInnerHTML();\n this.validate();\n this.outChange.emit(get(this.item(), this.fieldNameBind()));\n });\n }\n\n protected handlerPopoverFunctionControl(event: IPopoverFunctionControlEvent) {\n this.popoverFunctionControl.set(event);\n }\n\n protected handlerPopoverEvent(event: TYPE_POPOVER_EVENT) {\n if (event === 'remove') {\n this.link.set(linkDefault());\n }\n }\n\n protected handlerUnlink(event: Event) {\n event.stopPropagation();\n const link = this.link();\n this.quill()?.formatText(link.range.index, link.range.length, { link: false });\n this.popoverFunctionControl()?.removePopoverOverlay();\n }\n\n protected handlerEdit(event: Event) {\n event.stopPropagation();\n const link = this.link();\n this.handleShowUploadLink(link);\n this.popoverFunctionControl()?.removePopoverOverlay();\n }\n\n private calculatorToolbar() {\n this.itemHidden.set([]);\n this.itemHiddenExpand.set([]);\n setTimeout(() => {\n const toolbarWidth = this.toolbarItemsEl()?.nativeElement.offsetWidth || 0;\n let itemWidth = 28;\n const hiddenItems: Array<number> = [];\n const hiddenItemsExpand: Array<number> = [];\n const itemsHasWidth = this.itemsEl().filter(item => item.nativeElement.offsetWidth);\n for (let index = 0; index < itemsHasWidth.length; index++) {\n const element = itemsHasWidth[index];\n const id = element.nativeElement.id;\n const trueIndex = Number(id.split('_')[1]);\n const type = id.split('_')[0];\n const width = element.nativeElement.offsetWidth || 0;\n itemWidth += width;\n if (type === 'line') {\n const nextElement = itemsHasWidth[index + 1];\n const nextWidth = nextElement?.nativeElement.offsetWidth || 0;\n const nextItemWidth = itemWidth + nextWidth;\n if (nextItemWidth > toolbarWidth) {\n hiddenItemsExpand.push(trueIndex);\n }\n }\n if (itemWidth > toolbarWidth) {\n hiddenItems.push(trueIndex);\n continue;\n }\n }\n this.itemHidden.set(hiddenItems);\n this.itemHiddenExpand.set(hiddenItemsExpand);\n }, 500);\n }\n\n protected setStyle(type: string, data: string | number) {\n this.quill()?.format(type, data);\n }\n\n private getFontSize(format: StringMap) {\n const fontSize = format?.size?.toString()?.replace('px', '');\n if (isNaN(parseFloat(fontSize))) {\n this.size.set({ value: 14 });\n return;\n }\n this.size.set({ value: parseFloat(fontSize) });\n }\n\n private getFont(format: StringMap) {\n const font = listFont().find((item) => item.key === format.font);\n if (!font) {\n this.fontSelected.set({ key: '', item: listFont().find((item) => item.key === '') });\n return;\n }\n this.fontSelected.set({ key: format.font, item: font });\n }\n\n protected handleUndo() {\n this.quill()?.history?.undo();\n }\n\n protected handleRedo() {\n this.quill()?.history?.redo();\n }\n\n protected async setContent(content: string) {\n if (!content) {\n setTimeout(() => set(this.quill, 'root.innerHTML', ''));\n return;\n }\n const contentXssFilter = await xssFilter(content);\n setTimeout(() => set(this.quill, 'root.innerHTML', contentXssFilter));\n if (!this.autoFocusBottom()) {\n return;\n }\n setTimeout(() => {\n this.quill()?.blur();\n const range = document.createRange();\n const sel = window.getSelection();\n const target = this.quillEditorEl()?.nativeElement.querySelector('[contenteditable=\"true\"]');\n const contentScroll = this.heightAuto() ? this.wrapperEditorEl()?.nativeElement : target;\n range.selectNodeContents(target);\n range.collapse(false);\n sel?.removeAllRanges();\n sel?.addRange(range);\n target.focus();\n contentScroll.scrollTop = contentScroll.scrollHeight;\n }, 100);\n }\n\n protected handlerAddEmoji(emoji: unknown) {\n const selection = this.quill()?.getSelection(true).index;\n if (!isNil(selection)) {\n this.quill()?.insertText(selection, emoji as string);\n }\n }\n\n protected handleShowUploadLink(event: unknown) {\n this.addEditLinkComponentRef.set(this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsInputsQuillLinkComponent));\n const instance = this.addEditLinkComponentRef()?.instance;\n const selection = this.quill()?.getSelection();\n const textSelected = selection?.length ? this.quill()?.getText(selection?.index, selection?.length) : '';\n const data = event as ILink | undefined;\n if (instance) {\n instance.zIndex.set(this.zIndex());\n instance.title.set(data?.title || textSelected);\n instance.link.set(data?.url || '');\n instance.outSaveLink.subscribe((item: { title: string, link: string }) => {\n if (data instanceof Object && data.url) {\n this.quill()?.deleteText(data.range.index, data.range.length, Quill.sources.USER);\n this.quill()?.insertText(data.range.index, item.title, 'link', item.link);\n return;\n }\n this.insertLink(item.title, item.link);\n });\n instance.outClose.subscribe(() => this.dynamicComponentService.remove(this.addEditLinkComponentRef()));\n }\n this.dynamicComponentService.addToBody(this.addEditLinkComponentRef());\n }\n\n protected handlerUnInsertLink() {\n const selection = this.quill()?.getSelection(true);\n if (!isNil(selection)) {\n this.quill()?.formatText(selection, 'link', false);\n }\n }\n\n protected async validate() {\n this.messageError.set('');\n const validRequired = this.validRequired();\n const item = this.item();\n const fieldNameBind = this.fieldNameBind();\n const value = get(item, fieldNameBind);\n if (validRequired && validRequired.isRequired && (!fieldNameBind || !value || !value.trim())) {\n this.messageError.set(validRequired.message || ERROR_MESSAGE_EMPTY_VALID);\n this.outMessageError.emit(this.messageError());\n return false;\n }\n const validMinLength = this.validMinLength();\n if (validMinLength && fieldNameBind && value && value.trim().length < validMinLength.length) {\n this.messageError.set(validMinLength.message || ERROR_MESSAGE_MIN_LENGTH);\n this.outMessageError.emit(this.messageError());\n return false;\n }\n const validMaxLength = this.validMaxLength();\n if (validMaxLength && fieldNameBind && value && value.trim().length > this.validMaxLength.length) {\n this.messageError.set(validMaxLength.message || ERROR_MESSAGE_MAX_LENGTH);\n this.outMessageError.emit(this.messageError());\n return false;\n }\n this.outMessageError.emit(this.messageError());\n return true;\n }\n\n protected async insertHtml(tagName: string, content: string, index?: number) {\n const selection = (index || index === 0) ? index : this.quill()?.getSelection(true).index;\n if (!isNil(selection)) {\n this.quill()?.insertEmbed(selection, tagName, content);\n this.setSelection(selection, content.length);\n }\n }\n\n private async insertText(content: string, index?: number) {\n const selection = (index || index === 0) ? index : this.quill()?.getSelection(true).index;\n if (!isNil(selection)) {\n this.quill()?.insertText(selection, content);\n }\n }\n\n private async insertLink(text: string, url: string, index?: number) {\n const selection = this.quill()?.getSelection(true);\n const indexInsert = (index || index === 0) ? index : selection?.index;\n if (selection?.length) {\n this.quill()?.deleteText(selection.index, selection.length, Quill.sources.USER);\n }\n if (!isNil(indexInsert)) {\n this.quill()?.insertText(indexInsert, text, 'link', url);\n }\n }\n\n private convertInnerHTML() {\n this.setStyleForContent();\n set(this.item(), this.fieldNameBind(), this.quill()?.root.innerHTML);\n }\n\n private setStyleForContent() {\n const styleArray = [\n { selector: '.ql-font-Arial', style: 'font-family: Arial' },\n { selector: '.ql-font-sans-serif', style: 'font-family: sans-serif' },\n { selector: '.ql-font-serif', style: 'font-family: serif' },\n { selector: '.ql-font-monospace', style: 'font-family: monospace' },\n { selector: '.ql-font-Helvetica', style: 'font-family: Helvetica' },\n { selector: '.libs-ui-quill-format-image', style: 'max-width: 100%; height: auto' },\n { selector: '.libs-ui-quill-mention', style: 'font-weight: 600;-moz-osx-font-smoothing: grayscale;-webkit-font-smoothing: antialiased; color: #7239EA' },\n { selector: 'blockquote', style: 'border-left: 4px solid #ccc; margin-bottom: 5px; margin-top: 5px; padding-left: 16px' }\n ];\n styleArray.forEach((item) => {\n const elements = this.quill()?.root.querySelectorAll(item.selector);\n elements?.forEach((element) => {\n if (item.selector === '.libs-ui-quill-format-image' || item.selector === '.libs-ui-quill-mention' || item.selector === 'blockquote') {\n element.setAttribute('style', item.style);\n return;\n }\n // Fixbug issue: https://admin-cv.mobio.vn/issues/49092\n let styleExist = element.getAttribute('style');\n if (styleExist) {\n ['font-family: Arial', 'font-family: sans-serif', 'font-family: serif', 'font-family: monospace', 'font-family: Helvetica'].forEach(font => {\n styleExist = (styleExist?.includes(`${font};`) ? styleExist?.replace(`${font};`, '') : styleExist?.replace(font, '')) as string;\n });\n }\n element.setAttribute('style', styleExist ? `${styleExist}${styleExist[styleExist.length - 1] === ';' ? '' : ';'}${item.style};` : item.style);\n });\n });\n }\n\n protected handleToggleMention(show: boolean) {\n this.showMention.set(show);\n }\n\n private handlerShowUploadImage() {\n this.uploadImageComponentRef.set(this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsInputsQuillUploadImageComponent));\n const instance = this.uploadImageComponentRef()?.instance;\n if (instance) {\n instance.uploadImageConfig.set(this.uploadImageConfig());\n instance.outClose.subscribe((event: string | void) => {\n this.dynamicComponentService.remove(this.uploadImageComponentRef());\n if (event) {\n this.insertHtml('image', event);\n }\n });\n }\n this.dynamicComponentService.addToBody(this.uploadImageComponentRef());\n }\n\n private setSelection(index: number, length: number, sources?: Sources) {\n this.quill()?.setSelection(index, length, sources);\n }\n\n private insertMention(event: IMentionInsert) {\n const range = this.quill()?.getSelection();\n if (!range) {\n return;\n }\n const cursorPos = range.index;\n const startPosInsert = cursorPos - event.lengthKey;\n this.quill()?.deleteText(startPosInsert, event.lengthKey, Quill.sources.USER);\n this.quill()?.insertEmbed(startPosInsert, 'mention', event.data, Quill.sources.USER);\n this.quill()?.insertText(startPosInsert + 1, ' ', Quill.sources.USER);\n this.setSelection(startPosInsert + 2, 0, Quill.sources.USER);\n }\n\n protected handlerInsertMention(data: IMentionInsert) {\n this.insertMention(data);\n }\n\n protected async setFontSize(size: number) {\n this.quill()?.format('size', `${size}px`);\n }\n\n protected async setColor(color: string) {\n this.quill()?.format('color', color);\n }\n\n protected async setBackground(color: string) {\n this.quill()?.format('background', color);\n }\n\n protected handlerValueChange(value: number | string) {\n this.size.update(item => ({ ...item, value: value as number }));\n this.quill()?.format('size', `${this.size().value}px`);\n }\n\n protected handleSelectAlign(event: IEmitSelectKey | undefined) {\n this.alignSelected.set(event);\n this.setStyle('align', event?.key as string);\n }\n\n protected handleSelectFont(event: IEmitSelectKey | undefined) {\n this.fontSelected.set(event);\n this.setStyle('font', event?.key as string);\n }\n\n protected handlerChangeShowMoreAction(event: Event) {\n event.stopPropagation();\n this.showMoreAction.update(item => !item);\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n this.dynamicComponentService.remove(this.addEditLinkComponentRef());\n this.dynamicComponentService.remove(this.uploadImageComponentRef());\n }\n}\n\n","<div class=\"flex flex-col w-full h-full\">\n @if (label(); as label) {\n <libs_ui-components-label [classInclude]=\"label.classInclude\"\n [required]=\"label.required\"\n [labelLeft]=\"label.labelLeft\" />\n }\n <div #wrapperEditor\n [attr.heightAuto]=\"heightAuto()\"\n [attr.hiddenToolBar]=\"onlyShowContent()\"\n class=\"libs-ui-quill-wrapper w-full h-full relative flex flex-col\"\n [class.libs-ui-border-error-general]=\"messageError() && showErrorBorder() && !onlyShowErrorBorderInContent()\"\n [class.rounded-[4px]]=\"messageError() && showErrorBorder() && !onlyShowErrorBorderInContent()\">\n <div #editor\n class=\"libs-ui-quill\"\n [attr.showError]=\"messageError() && showErrorBorder() && onlyShowErrorBorderInContent()\"\n [class.!hidden]=\"!display()\">\n @if (!onlyShowContent()) {\n <div #quillOption\n class=\"'ql-toolbar ql-snow bg-[#f8f9fa] {{ classIncludeToolbar() }}\">\n <ng-container *ngTemplateOutlet=\"toolbar\"></ng-container>\n </div>\n }\n <div #quillEditor\n LibsUiComponentsInputsMentionDirective\n [mentionConfig]=\"dataConfigMention()\"\n (outToggle)=\"handleToggleMention($event)\"\n (outInsertMention)=\"handlerInsertMention($event)\"></div>\n </div>\n @if (template(); as template) {\n <div [class]=\"classIncludeTemplate()\">\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n </div>\n }\n </div>\n @if (messageError() && showErrorLabel()) {\n <div class=\"flex items-center leading-normal mt-[8px]\">\n <span class=\"text-[#ff5454] libs-ui-font-h7r\"> {{ messageError() | translate }}</span>\n </div>\n }\n</div>\n@if (showToolBar()) {\n <div #quillToolbar\n [class]=\"'ql-snow absolute px-[8px] py-[4px] p-0 w-[500px] rounded-[4px] bg-[#ffffff] libs-ui-quill-toolbar-animation ' + classIncludeToolbar()\">\n <ng-container *ngTemplateOutlet=\"toolbar\"></ng-container>\n </div>\n}\n\n<ng-template #toolbar>\n <div class=\"toolbar\"\n #toolbarItems>\n <div class=\"ql-formats items-center\">\n @for (option of optionsToolbar(); track option) {\n <div #item\n [id]=\"option.type+'_'+$index\"\n class=\"items-center\"\n [class.hidden]=\"itemHidden().includes($index) || itemHiddenExpand().includes($index)\"\n [class.flex]=\"!itemHidden().includes($index)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate;context:{option, $index, $last}\"></ng-container>\n </div>\n }\n <div class=\"relative\">\n @if (itemHidden().length) {\n <libs_ui-components-buttons-button [type]=\"showMoreAction() ? 'button-secondary' : 'button-third'\"\n [iconOnlyType]=\"true\"\n [classInclude]=\"'!p-[1px] !h-[20px] ml-[8px]'\"\n [classIconLeft]=\"'libs-ui-icon-move-right rotate-90'\"\n (outClick)=\"handlerChangeShowMoreAction($event)\" />\n }\n <div [class.hidden]=\"!showMoreAction()\"\n class=\"absolute bg-[#ffffff] top-[10px] shadow-md z-[1] flex items-center pl-[8px] pr-[16px] py-[4px] rounded-[8px] top-[31px] right-[0px]\">\n @for (option of optionsToolbar(); track option) {\n <div class=\"items-center\"\n [class.hidden]=\"!itemHidden().includes($index)\"\n [class.flex]=\"itemHidden().includes($index)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate;context:{option, $index, $last}\"></ng-container>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n\n\n<ng-template #itemTemplate\n let-$index=\"$index\"\n let-$last=\"$last\"\n let-option=\"option\">\n @if (option.type === 'undo') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content: 'i18n_undo', zIndex: 1250}\"\n class=\"ql-undo\"></button>\n </div>\n }\n @if (option.type === 'redo') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content: 'i18n_redo', zIndex: 1250}\"\n class=\"ql-redo\"></button>\n </div>\n }\n @if (option.type === 'fontFamily') {\n <div class=\"relative w-[117px] h-full bg-[#ffffff] rounded-[4px] libs-ui-border-general {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [labelPopoverFullWidth]=\"true\"\n [listConfig]=\"listConfigFont()\"\n [listHasButtonUnSelectOption]=\"false\"\n [listHiddenInputSearch]=\"true\"\n [listMaxItemShow]=\"8\"\n [zIndex]=\"1250\"\n (outSelectKey)=\"handleSelectFont($event)\">\n @if (fontSelected(); as fontSelected) {\n <div class=\"flex items-center cursor-pointer py-[8px] libs-ui-font-h5r pl-[16px] pr-[40px] {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [type]=\"'text'\"\n [ignoreStopPropagationEvent]=\"true\"\n [config]=\"{zIndex:1250}\">\n {{ labelFontSelectedComputed() }}\n </libs_ui-components-popover>\n <i class=\"libs-ui-icon-move-right rotate-90 absolute right-[12px] text-[#6a7383] text-[16px]\"></i>\n </div>\n }\n </libs_ui-components-dropdown>\n </div>\n }\n @if (option.type === 'fontSize') {\n <div class=\"ql-picker {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-inputs-valid [dataType]=\"'int'\"\n [(item)]=\"size\"\n [fieldNameBind]=\"'value'\"\n [valueUpDownNumber]=\"1\"\n [maxValueNumber]=\"72\"\n [minValueNumber]=\"8\"\n [readonly]=\"readonly()\"\n [classContainerInput]=\"'w-[72px] h-[32px]'\"\n (outValueChange)=\"handlerValueChange($event)\" />\n </div>\n }\n @if (option.type === 'color') {\n <div class=\"ql-color ql-picker ql-color-picker !flex items-center {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [config]=\"{content:'i18n_text_color', zIndex:1250}\">\n <libs_ui-components-buttons-select_color [zIndex]=\"zIndex()\"\n [direction]=\"'top'\"\n [externalContent]=\"true\"\n [applyNow]=\"true\"\n (outColorChange)=\"setStyle('color', $event)\">\n <div class=\"libs-ui-icon-editor-color-text libs-ui-buttons-select-color text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]\">\n </div>\n </libs_ui-components-buttons-select_color>\n </libs_ui-components-popover>\n </div>\n }\n @if (option.type === 'background') {\n <div class=\"ql-background ql-picker ql-color-picker !flex items-center {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [config]=\"{content:'i18n_background_color', zIndex:1250}\">\n <libs_ui-components-buttons-select_color [zIndex]=\"zIndex()\"\n [direction]=\"'top'\"\n [externalContent]=\"true\"\n [applyNow]=\"true\"\n (outColorChange)=\"setStyle('background', $event)\">\n <div class=\"libs-ui-icon-editor-color-background libs-ui-buttons-select-color text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]\">\n </div>\n </libs_ui-components-buttons-select_color>\n </libs_ui-components-popover>\n </div>\n }\n @if (option.type === 'bold') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_font_weight_bold', zIndex:1250}\"\n class=\"ql-bold\"></button>\n </div>\n }\n @if (option.type === 'italic') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_font_style_italic', zIndex:1250}\"\n class=\"ql-italic\"></button>\n </div>\n }\n @if (option.type === 'underline') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_text_decoration_underline', zIndex:1250}\"\n class=\"ql-underline\"></button>\n </div>\n }\n @if (option.type === 'strikeThrough') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_text_line_through', zIndex:1250}\"\n class=\"ql-strike\"></button>\n </div>\n }\n @if (option.type === 'adjust') {\n <div class=\"relative !flex items-center ql-align ql-picker ql-icon-picker !w-max {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [config]=\"{content:'i18n_adjust', zIndex:1250}\">\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [ignoreStopPropagationEvent]=\"true\"\n [labelPopoverFullWidth]=\"true\"\n [listConfig]=\"listConfigAlign()\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"{ignoreArrow: true, classInclude: '!w-[32px] overflow-hidden !py-[4px]', position: {mode: 'start', distance: 0}, paddingLeftItem: false}\"\n [listHasButtonUnSelectOption]=\"false\"\n [listMaxItemShow]=\"8\"\n [zIndex]=\"1250\"\n (outSelectKey)=\"handleSelectAlign($event)\">\n @if (alignSelected(); as alignSelected) {\n <div class=\"flex items-center cursor-pointer\">\n <i [class]=\"iconAlignSelectedComputed()\"></i>\n <i class=\"libs-ui-icon-move-right rotate-90 text-[#6a7383] text-[16px] ml-[4px]\"></i>\n </div>\n }\n </libs_ui-components-dropdown>\n </libs_ui-components-popover>\n </div>\n }\n @if (option.type === 'indentIncrease') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_indent_increase', zIndex:1250}\"\n class=\"ql-indent\"\n value=\"+1\"></button>\n </div>\n }\n @if (option.type === 'indentDecrease') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_indent_decrease', zIndex:1250}\"\n class=\"ql-indent\"\n value=\"-1\"></button>\n </div>\n }\n @if (option.type === 'listBulleted') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_list_bulleted', zIndex:1250}\"\n class=\"ql-list ql-bullet\"\n value=\"bullet\"></button>\n </div>\n }\n @if (option.type === 'listNumbered') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_list_numbered', zIndex:1250}\"\n class=\"ql-list ql-ordered\"\n value=\"ordered\"></button>\n </div>\n }\n @if (option.type === 'personalize' && templateToolBarPersonalize(); as templateToolBarPersonalize) {\n <div class=\"flex items-center {{ option.classInclude || 'mx-[8px]' }}\">\n <ng-container *ngTemplateOutlet=\"templateToolBarPersonalize\"></ng-container>\n </div>\n }\n @if (option.type === 'blockquote') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_quote', zIndex:1250}\"\n class=\"ql-blockquote\"></button>\n </div>\n }\n @if (option.type === 'link') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_insert_link', zIndex:1250}\"\n class=\"ql-link\"></button>\n </div>\n }\n @if (option.type === 'unLink') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_unlink', zIndex:1250}\"\n class=\"ql-unLink\"></button>\n </div>\n }\n @if (option.type === 'image' && uploadImageConfig().showIcon) {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_image', zIndex:1250}\"\n class=\"ql-image\"></button>\n </div>\n }\n @if (option.type === 'emoji') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <libs_ui-components-emoji [zIndex]=\"1250\"\n [isNgContent]=\"true\"\n (outEventEmoji)=\"handlerAddEmoji($event)\">\n <button class=\"ql-emoji\"></button>\n </libs_ui-components-emoji>\n </div>\n }\n @if (option.type === 'line') {\n <div class=\"w-[1px] h-[16px] libs-ui-border-right-general\"></div>\n }\n</ng-template>\n\n<libs_ui-components-popover [mode]=\"'click'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{template: viewLink, whiteTheme: true, ignoreArrow: true}\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outFunctionsControl)=\"handlerPopoverFunctionControl($event)\" />\n\n<ng-template #viewLink>\n <div class=\"flex justify-between items-center px-[16px] py-[8px] rounded-[8px]\">\n <div class=\"w-full min-w-0 libs-ui-font-h5r\"\n [type]=\"'text'\"\n LibsUiComponentsPopoverDirective>{{ link().url }}</div>\n <div class=\"flex items-center ml-[16px]\">\n <libs_ui-components-buttons-button [type]=\"'button-link-primary'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerEdit($event)\" />\n <libs_ui-components-buttons-button [type]=\"'button-link-custom'\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#071631',\n text_hover: '#ee2d41',\n text_active: '#ee2d41',\n text_disable: '071631'\n },\n rootColor: '#071631'\n }\"\n [classInclude]=\"'!p-0 ml-[12px]'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-link-broken'\"\n (outClick)=\"handlerUnlink($event)\" />\n </div>\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"libs-ui-components-inputs-quill.mjs","sources":["../../../../../../libs-ui/components/inputs/quill/src/indent-attributor/indent-attributor.component.ts","../../../../../../libs-ui/components/inputs/quill/src/link/link.component.ts","../../../../../../libs-ui/components/inputs/quill/src/link/link.component.html","../../../../../../libs-ui/components/inputs/quill/src/mention/mention.component.ts","../../../../../../libs-ui/components/inputs/quill/src/upload-image/upload-image.component.ts","../../../../../../libs-ui/components/inputs/quill/src/upload-image/upload-image.component.html","../../../../../../libs-ui/components/inputs/quill/src/utils/quill.define.ts","../../../../../../libs-ui/components/inputs/quill/src/quill.component.ts","../../../../../../libs-ui/components/inputs/quill/src/quill.component.html","../../../../../../libs-ui/components/inputs/quill/src/libs-ui-components-inputs-quill.ts"],"sourcesContent":["import Quill from \"quill\";\n\nconst parchment = Quill.import('parchment');\nconst pixelLevels = [1, 2, 3, 4, 5, 6, 7, 8];\nconst tabMultiplier = 3;\n\nclass IndentAttributor extends (parchment.Attributor.Style as {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new(formatName: string, styleProperty: string, attributorOptions: unknown): any;\n}) {\n constructor(formatName: string, styleProperty: string, attributorOptions: unknown) {\n super(formatName, styleProperty, attributorOptions);\n }\n\n public add(node: HTMLElement, value: string): boolean {\n return super.add(node, `${+value * tabMultiplier}em`);\n }\n\n public value(node: HTMLElement): number | undefined {\n return parseFloat(super.value(node)) / tabMultiplier || undefined; // Don't return NaN\n }\n}\n\nexport const indentStyle = new IndentAttributor('indent', 'margin-left', {\n scope: parchment.Scope.BLOCK,\n whitelist: pixelLevels.map(value => `${value * tabMultiplier}em`),\n});","import { ChangeDetectionStrategy, Component, model, OnInit, output, signal } from '@angular/core';\nimport { IInputValidFunctionControlEvent, LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs-valid';\nimport { LibsUiComponentsModalComponent, TYPE_MODAL_EVENT } from '@libs-ui/components-modal';\nimport { patternUrl } from '@libs-ui/utils';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-quill-link',\n templateUrl: './link.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n LibsUiComponentsModalComponent,\n LibsUiComponentsInputsValidComponent\n ]\n})\nexport class LibsUiComponentsInputsQuillLinkComponent implements OnInit {\n\n protected dataLink = signal<{ title: string, link: string }>({ title: '', link: '' });\n protected patternLink = signal<RegExp>(patternUrl());\n\n private inputValidFunctionControl = signal<Array<IInputValidFunctionControlEvent>>([]);\n\n zIndex = model<number>(1200);\n title = model<string>();\n link = model<string>();\n\n readonly outClose = output<void>();\n readonly outSaveLink = output<{ title: string, link: string }>();\n\n ngOnInit() {\n const title = this.title();\n const link = this.link();\n if (title || link) {\n this.dataLink.update(item => ({ ...item, title: title || '', link: link || '' }));\n }\n }\n\n protected async handlerFunctionsControl(event: IInputValidFunctionControlEvent) {\n this.inputValidFunctionControl.update(items => [...items, event]);\n }\n\n private async validate() {\n let valid = true;\n for (const control of this.inputValidFunctionControl()) {\n if (!(await control.checkIsValid())) {\n valid = false;\n }\n }\n return valid;\n }\n\n protected async handlerEvent(event: TYPE_MODAL_EVENT) {\n if (event !== 'agree') {\n this.outClose.emit();\n return;\n }\n if (await this.validate()) {\n this.outSaveLink.emit(this.dataLink());\n this.outClose.emit();\n }\n }\n\n}\n","<libs_ui-components-modal [title]=\"'i18n_insert_link'\"\n [mode]=\"'center'\"\n [height]=\"'auto'\"\n [width]=\"'598px'\"\n [headerConfig]=\"{ignoreHeaderTheme: true}\"\n [zIndex]=\"zIndex()\"\n (outEvent)=\"handlerEvent($event)\">\n <div class=\"libs-ui-modal-body-custom\">\n <libs_ui-components-inputs-valid [labelConfig]=\"{labelLeft: 'i18n_content', required: true}\"\n [(item)]=\"dataLink\"\n [fieldNameBind]=\"'title'\"\n [placeholder]=\"'i18n_import_content'\"\n [validRequired]=\"{isRequired: true}\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\" />\n <div class=\"mt-[16px]\">\n <libs_ui-components-inputs-valid [labelConfig]=\"{labelLeft: 'Link', required: true}\"\n [(item)]=\"dataLink\"\n [fieldNameBind]=\"'link'\"\n [placeholder]=\"'https:/…'\"\n [validRequired]=\"{isRequired: true}\"\n [validPattern]=\"[{pattern: patternLink(), valuePatternShowError: false}]\"\n [keySelectedUnitLeft]=\"'1'\"\n [unitsLeft]=\"[{id:'1',label:'URL'}]\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\" />\n </div>\n </div>\n</libs_ui-components-modal>\n","import Quill from \"quill\";\n\nconst Embed = Quill.import(\"blots/embed\");\n\nexport class QuillMentionBlot extends Embed {\n static create(data: { id: string, feId: string, value: string }) {\n const node = super.create();\n node.innerText += data.value;\n node.setAttribute('id', data.id);\n node.setAttribute('feId', data.feId);\n node.setAttribute('value', data.value);\n return node;\n }\n\n static value(domNode: HTMLElement) {\n return {\n id: domNode.getAttribute('id'),\n feId: domNode.getAttribute('feId'),\n value: domNode.getAttribute('value')\n };\n }\n\n attach() {\n super.attach();\n if (!this.mounted) {\n this.mounted = true;\n this.clickHandler = this.getClickHandler;\n this.domNode.addEventListener(\"click\", this.clickHandler, false);\n }\n }\n\n getClickHandler(event: Event) {\n event.stopPropagation();\n }\n}\n\nQuillMentionBlot.blotName = \"mention\";\nQuillMentionBlot.tagName = \"span\";\nQuillMentionBlot.className = \"libs-ui-quill-mention\";","import { ChangeDetectionStrategy, Component, model, output, signal } from '@angular/core';\nimport { IButton } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsModalComponent, TYPE_MODAL_EVENT } from '@libs-ui/components-modal';\nimport { IUploadImageConfig } from '../interfaces/quill.interface';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-quill-upload_image',\n templateUrl: './upload-image.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n LibsUiComponentsModalComponent\n ]\n})\nexport class LibsUiComponentsInputsQuillUploadImageComponent {\n\n protected buttonFooter = signal<Array<IButton>>([\n {\n type: 'button-third',\n label: 'i18n_cancel',\n action: async () => this.outClose.emit()\n },\n {\n label: 'i18n_save',\n action: () => this.handlerSaveImage()\n }]);\n protected disable = signal<boolean>(false);\n\n // private mediaFile =signal<IMediaFile | undefined>(undefined);\n // private mediaUploadFunctionControl =signal<IMediaUploadBaseFunctionControlEvent | undefined>(undefined);\n\n uploadImageConfig = model.required<IUploadImageConfig>();\n\n readonly outClose = output<string | void>();\n\n // protected handlerFunctionsControl(event: IMediaUploadBaseFunctionControlEvent) {\n // this.mediaUploadFunctionControl.set(event);\n // }\n\n // protected handlerChangeFile(event: IChangeFile) {\n // this.mediaFile.set(event.files[0]);\n // }\n\n private async handlerSaveImage() {\n // if (!await this.mediaUploadFunctionControl()?.valid()) {\n // return;\n // }\n // if (this.mediaFile?.origin_url) {\n // this.moClose.emit(this.mediaFile.origin_url);\n\n // return;\n // }\n // const body: IOptionsUploadMedia = {\n // do_not_delete: true,\n // file: this.mediaFile?.file,\n // option: 'thumb',\n // size: [{ 'width': '200', 'height': '200' }]\n // };\n\n // this.disable = true;\n // try {\n // const params = new HttpParamsRequest({ fromObject: { pem: BUILD_PEM_OBJECT({ isCheck: 0, action: DefineConstants.PERMISSION_ACTION_VIEW, pathCheck: '/other' }) } });\n // const res = await this.mediaService.uploadImage(params, body);\n\n // this.moClose.emit(res.data?.url);\n // } catch (error) {\n // console.log(error);\n\n // this.pushMessageService.showCompTypeText('i18n_notification_manipulation_not_success', undefined, undefined, { timeRemove: 2000, type: 'error' });\n // this.moClose.emit();\n // } finally {\n // this.disable = false;\n // }\n }\n\n protected handlerEventModal(event: TYPE_MODAL_EVENT) {\n if (event === 'close') {\n this.outClose.emit();\n }\n }\n}\n","<libs_ui-components-modal [title]=\"'i18n_download_image'\"\n [mode]=\"'center'\"\n [width]=\"'598px'\"\n [headerConfig]=\"{ignoreHeaderTheme:true}\"\n [maxHeight]=\"'calc(100% - 100px)'\"\n [height]=\"'auto'\"\n [zIndex]=\"uploadImageConfig().zIndex || 1203\"\n [disable]=\"disable()\"\n [buttonsFooter]=\"buttonFooter()\"\n (outEvent)=\"handlerEventModal($event)\">\n <div class=\"libs-ui-modal-body-custom\">\n <!-- <mo-libs-shared-components-media-upload [zIndex]=\"zIndex+1\"\n [labelConfig]=\"labelConfig\"\n [multiple]=\"false\"\n [fileType]=\"'image'\"\n [doNotDelete]=\"true\"\n [maxImageSize]=\"maxImageSize || 1048576\"\n [limitFile]=\"10\"\n [validRequired]=\"{isRequired: true}\"\n (moChangeFile)=\"handlerChangeFile($event)\"\n (moFunctionsControl)=\"handlerFunctionsControl($event)\">\n </mo-libs-shared-components-media-upload> -->\n </div>\n</libs_ui-components-modal>\n","import { signal } from '@angular/core';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { returnListObject } from '@libs-ui/services-http-request';\nimport { ILink, IToolbarConfig, IUploadImageConfig } from '../interfaces/quill.interface';\nimport { convertFileToBase64 } from '@libs-ui/utils';\n\nexport const listDataAlign = () => {\n return [\n { key: '', icon: 'libs-ui-icon-align-left text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]' },\n { key: 'right', icon: 'libs-ui-icon-align-right text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]' },\n { key: 'center', icon: 'libs-ui-icon-align-center text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]' },\n { key: 'justify', icon: 'libs-ui-icon-align-justify text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]' },\n ];\n};\n\nexport const listFont = () => {\n return [\n { key: '', label: 'Sans Serif' },\n { key: 'serif', label: 'Serif' },\n { key: 'monospace', label: 'Monospace' },\n ];\n};\n\nexport const listConfigAlign = (): IListConfigItem => {\n return {\n type: 'text',\n autoSelectFirstItem: true,\n httpRequestData: signal({\n serviceOther: returnListObject(listDataAlign()),\n functionName: 'list',\n argumentsValue: []\n }),\n configTemplateText: signal({\n fieldKey: 'key',\n getClassItem: () => '!px-[8px] !py-[4px]',\n getValue: item => `<i class='flex ${item.icon}'></i>`,\n ignoreIconSelected: true\n })\n };\n};\n\nexport const listConfigFont = (): IListConfigItem => {\n return {\n type: 'text',\n autoSelectFirstItem: true,\n httpRequestData: signal({\n serviceOther: returnListObject(listFont()),\n functionName: 'list',\n argumentsValue: []\n }),\n configTemplateText: signal({\n fieldKey: 'key',\n getValue: item => item.label,\n ignoreIconSelected: true\n })\n };\n};\n\nexport const toolBarOptionDefault = (): Array<IToolbarConfig> => {\n return [\n {\n type: 'undo',\n classInclude: 'mr-[8px]'\n },\n {\n type: 'redo'\n },\n {\n type: 'line'\n },\n {\n type: 'fontFamily',\n classInclude: 'ml-[8px] mr-[2px]'\n },\n {\n type: 'fontSize',\n classInclude: 'ml-[2px] mr-[8px]'\n },\n {\n type: 'line'\n },\n {\n type: 'color'\n },\n {\n type: 'background'\n },\n {\n type: 'line'\n },\n {\n type: 'bold'\n },\n {\n type: 'italic'\n },\n {\n type: 'underline'\n },\n {\n type: 'strikeThrough'\n },\n {\n type: 'line'\n },\n {\n type: 'adjust'\n },\n {\n type: 'line'\n },\n {\n type: 'indentIncrease'\n },\n {\n type: 'indentDecrease'\n },\n {\n type: 'listBulleted'\n },\n {\n type: 'listNumbered'\n },\n {\n type: 'line'\n },\n {\n type: 'personalize'\n },\n {\n type: 'blockquote'\n },\n {\n type: 'link'\n },\n {\n type: 'unLink'\n },\n {\n type: 'image'\n },\n {\n type: 'emoji',\n classInclude: 'ml-[8px]'\n }\n ];\n}\n\nexport const iconList = (): Array<{ key: string, icon: string }> => {\n return [\n {\n key: 'bold',\n icon: 'libs-ui-icon-editor-bold',\n },\n {\n key: 'italic',\n icon: 'libs-ui-icon-editor-italic',\n },\n {\n key: 'underline',\n icon: 'libs-ui-icon-editor-underlined',\n },\n {\n key: 'image',\n icon: 'libs-ui-icon-image-solid'\n },\n {\n key: 'link',\n icon: 'libs-ui-icon-link'\n },\n {\n key: 'undo',\n icon: 'libs-ui-icon-undo'\n },\n {\n key: 'redo',\n icon: 'libs-ui-icon-undo scale-x-[-1]'\n },\n {\n key: 'strike',\n icon: 'libs-ui-icon-editor-strike-through'\n },\n {\n key: 'blockquote',\n icon: 'libs-ui-icon-quote'\n },\n {\n key: 'ordered',\n icon: 'libs-ui-icon-list-numbered'\n },\n {\n key: 'bullet',\n icon: 'libs-ui-icon-list-bulleted'\n },\n {\n key: 'background',\n icon: 'libs-ui-icon-editor-color-background'\n },\n {\n key: 'color',\n icon: 'libs-ui-icon-editor-color-text'\n },\n {\n key: \"indent.-1\",\n icon: 'libs-ui-icon-indent-decrease'\n },\n {\n key: \"indent.+1\",\n icon: 'libs-ui-icon-indent-increase'\n },\n {\n key: \"align.\",\n icon: 'align-quill libs-ui-icon-align-left'\n },\n {\n key: \"align.center\",\n icon: 'align-quill libs-ui-icon-align-center'\n },\n {\n key: \"align.right\",\n icon: 'align-quill libs-ui-icon-align-right'\n },\n {\n key: \"align.justify\",\n icon: 'align-quill libs-ui-icon-align-justify'\n },\n {\n key: 'unLink',\n icon: 'libs-ui-icon-link-broken'\n },\n {\n key: 'emoji',\n icon: 'libs-ui-icon-face-smile'\n }\n ];\n}\n\nexport const uploadImageConfigDefault = (): IUploadImageConfig => {\n return {\n modeCustom: true,\n zIndex: 1202,\n showIcon: true,\n onlyAcceptImageHttpsLink: false,\n functionUploadImage: async (links) => {\n const data = [];\n for (const element of links) {\n data.push(await convertFileToBase64(element))\n }\n return data;\n }\n }\n}\n\nexport const linkDefault = (): ILink => {\n return {\n title: '',\n url: '',\n range: {\n index: 0,\n length: 0\n }\n };\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ComponentRef, computed, ElementRef, inject, input, model, OnDestroy, OnInit, output, signal, TemplateRef, viewChild, viewChildren } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsButtonsSelectColorComponent } from '@libs-ui/components-buttons-select-color';\nimport { IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { LibsUiComponentsEmojiComponent } from '@libs-ui/components-inputs-emoji';\nimport { IMentionConfig, IMentionInsert, LibsUiComponentsInputsMentionDirective } from '@libs-ui/components-inputs-mention';\nimport { IValidLength, IValidRequired, LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs-valid';\nimport { ILabel, LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { IPopoverFunctionControlEvent, LibsUiComponentsPopoverComponent, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\nimport { TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_LENGTH, ERROR_MESSAGE_MIN_LENGTH, get, isNil, patternUrl, set, xssFilter } from '@libs-ui/utils';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport Quill, { RangeStatic, Sources, StringMap } from 'quill';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { indentStyle } from './indent-attributor/indent-attributor.component';\nimport { ILink, IQuillFunctionControlEvent, IToolbarConfig, IUploadImageConfig } from './interfaces/quill.interface';\nimport { LibsUiComponentsInputsQuillLinkComponent } from './link/link.component';\nimport { QuillMentionBlot } from './mention/mention.component';\nimport { LibsUiComponentsInputsQuillUploadImageComponent } from './upload-image/upload-image.component';\nimport { iconList, linkDefault, listConfigAlign, listConfigFont, listFont, toolBarOptionDefault, uploadImageConfigDefault } from './utils/quill.define';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-quill',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './quill.component.html',\n styleUrl: './quill.component.scss',\n imports: [\n TranslateModule, NgTemplateOutlet, LibsUiComponentsInputsMentionDirective,\n LibsUiComponentsLabelComponent, LibsUiComponentsDropdownComponent,\n LibsUiComponentsPopoverComponent, LibsUiComponentsButtonsSelectColorComponent,\n LibsUiComponentsInputsValidComponent, LibsUiComponentsEmojiComponent,\n LibsUiComponentsButtonsButtonComponent\n ]\n})\nexport class LibsUiComponentsInputsQuillComponent implements OnInit, AfterViewInit, OnDestroy {\n\n protected messageError = signal<string>('');\n protected display = signal<boolean>(false);\n protected listConfigAlign = signal<IListConfigItem>(listConfigAlign());\n protected alignSelected = signal<IEmitSelectKey | undefined>(undefined);\n protected iconAlignSelectedComputed = computed(() => get(this.alignSelected(), 'item.icon'));\n protected listConfigFont = signal<IListConfigItem>(listConfigFont());\n protected fontSelected = signal<IEmitSelectKey | undefined>(undefined);\n protected labelFontSelectedComputed = computed(() => get(this.fontSelected(), 'item.label') || 'Sans Serif');\n protected size = signal<{ value: number }>({ value: 14 });\n protected itemHiddenExpand = signal<Array<number>>([]);\n protected itemHidden = signal<Array<number>>([]);\n protected showMoreAction = signal<boolean>(false);\n protected link = signal<ILink>(linkDefault());\n\n private popoverFunctionControl = signal<IPopoverFunctionControlEvent | undefined>(undefined);\n private quill = signal<Quill | undefined>(undefined);\n private handlers = signal<Record<string, (...params: Array<unknown>) => void>>({ undo: this.handleUndo.bind(this), redo: this.handleRedo.bind(this) });\n private showMention = signal<boolean>(false);\n private addEditLinkComponentRef = signal<ComponentRef<LibsUiComponentsInputsQuillLinkComponent> | undefined>(undefined);\n private uploadImageComponentRef = signal<ComponentRef<LibsUiComponentsInputsQuillUploadImageComponent> | undefined>(undefined);\n private dynamicComponentService = inject(LibsUiDynamicComponentService);\n private translate = inject(TranslateService);\n private onDestroy = new Subject<void>();\n\n readonly optionsToolbar = input<Array<IToolbarConfig>, Array<IToolbarConfig> | undefined>(toolBarOptionDefault(), { transform: value => value || toolBarOptionDefault() });\n readonly showToolBar = input<boolean>();\n readonly classIncludeToolbar = input<string>('bottom-[-66px] left-[18px]');\n readonly placeholder = input<string, string | undefined>('i18n_import_content', { transform: (value) => value || 'i18n_import_content' });\n readonly label = input<ILabel | undefined>();\n readonly item = model<Record<string, unknown>>();\n readonly fieldNameBind = input<string>('value');\n readonly readonly = input<boolean>();\n readonly showErrorLabel = input<boolean>(true);\n readonly showErrorBorder = input<boolean>(false);\n readonly onlyShowErrorBorderInContent = input<boolean>(false);\n readonly classIncludeTemplate = input<string>();\n readonly classInclude = input<string>();\n readonly handlersExpand = input<Array<{ title: string, action: () => void }>>();\n readonly validRequired = input<IValidRequired>();\n readonly validMinLength = input<IValidLength>();\n readonly validMaxLength = input<IValidLength>();\n readonly onlyShowContent = input<boolean>(false);\n readonly zIndex = input<number, number | undefined>(1201, { transform: (value) => value || 1201 });\n readonly dataConfigMention = input<IMentionConfig>();\n readonly heightAuto = input<boolean>();\n readonly autoFocus = input<boolean>();\n readonly autoFocusBottom = input<boolean>();\n readonly templateToolBarPersonalize = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly template = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly uploadImageConfig = input<IUploadImageConfig, IUploadImageConfig | undefined>(uploadImageConfigDefault(), { transform: (value) => value || uploadImageConfigDefault() });\n\n readonly outMessageError = output<string>();\n readonly outBlur = output<void>();\n readonly outFocus = output<void>();\n readonly outChange = output<string>();\n readonly outFunctionsControl = output<IQuillFunctionControlEvent>();\n readonly outSelectionChange = output<boolean>();\n\n readonly wrapperEditorEl = viewChild<ElementRef>('wrapperEditor');\n readonly editorEl = viewChild<ElementRef>('editor');\n readonly quillOptionEl = viewChild<ElementRef>('quillOption');\n readonly quillEditorEl = viewChild<ElementRef>('quillEditor');\n readonly quillToolbarEl = viewChild<ElementRef>('quillToolbar');\n readonly toolbarItemsEl = viewChild<ElementRef>('toolbarItems');\n readonly itemsEl = viewChildren<ElementRef>('item');\n\n ngOnInit() {\n this.outFunctionsControl.emit({\n checkIsValid: this.validate.bind(this),\n setContent: this.setContent.bind(this),\n insertText: this.insertText.bind(this),\n insertLink: this.insertLink.bind(this),\n insertHtml: this.insertHtml.bind(this),\n setFontSize: this.setFontSize.bind(this),\n setColor: this.setColor.bind(this),\n setBackground: this.setBackground.bind(this)\n });\n }\n\n ngAfterViewInit(): void {\n this.calculatorToolbar();\n if (this.autoFocus()) {\n this.display.set(true);\n }\n this.setHandlerFunction();\n this.initQuill();\n if (!this.autoFocus()) {\n setTimeout(() => this.display.set(true), 200);\n }\n this.setClassIncludeAndReadOnly();\n this.setContent(get(this.item(), this.fieldNameBind(), ''));\n this.handlerTextChange();\n this.handlerSelectionChange();\n this.handlerPaste();\n if (this.autoFocus()) {\n this.quill()?.focus();\n }\n fromEvent(window, 'resize').pipe(takeUntil(this.onDestroy)).subscribe(this.calculatorToolbar.bind(this));\n }\n\n private initQuill() {\n const size = Quill.import('attributors/style/size');\n const image = Quill.import('formats/image');\n const parchment = Quill.import('parchment');\n const alignStyle = Quill.import('attributors/style/align');\n const icons = Quill.import('ui/icons');\n const block = parchment.query('block');\n const italic = Quill.import('formats/italic');\n const bold = Quill.import('formats/bold');\n size.whitelist = ['8px', '9px', '10px', '11px', '12px', '13px', '14px', '15px', '16px', '17px', '18px', '19px', '20px', '21px', '22px', '23px', '24px', '25px', '26px', '27px', '28px', '29px', '30px', '31px', '32px', '33px', '34px', '35px', '36px', '37px', '38px', '39px', '40px', '41px', '42px', '43px', '44px', '45px', '46px', '47px', '48px', '49px', '50px', '51px', '52px', '53px', '54px', '55px', '56px', '57px', '58px', '59px', '60px', '61px', '62px', '63px', '64px', '65px', '66px', '67px', '68px', '69px', '70px', '71px', '72px'];\n image.className = 'libs-ui-quill-format-image';\n block.tagName = 'DIV';\n italic.tagName = 'i';\n bold.tagName = 'B';\n Quill.register(bold, true);\n Quill.register(italic, true);\n Quill.register(size, true);\n Quill.register(image, true);\n Quill.register(block, true);\n Quill.register(alignStyle, true);\n Quill.register(QuillMentionBlot, true);\n Quill.register({ 'formats/indent': indentStyle }, true);\n iconList().forEach(element => set(icons, element.key, `<span class=\"${element.icon} hover:text-[var(--libs-ui-color-light-1)] text-[16px] text-[#6a7383]\"></span>`));\n this.quill.set(new Quill(this.quillEditorEl()?.nativeElement, {\n modules: {\n toolbar: {\n container: this.onlyShowContent() && this.quillToolbarEl() ? this.quillToolbarEl()?.nativeElement : this.quillOptionEl()?.nativeElement,\n handlers: this.handlers()\n },\n clipboard: {\n matchVisual: false\n },\n history: {\n delay: 1000,\n maxStack: 100,\n userOnly: false\n },\n keyboard: {\n bindings: {\n enter: {\n key: 13,\n handler: () => this.showMention() ? false : true\n }\n }\n }\n },\n readOnly: this.readonly(),\n placeholder: this.translate.instant(this.placeholder()),\n theme: 'snow',\n bounds: this.heightAuto() ? this.wrapperEditorEl()?.nativeElement : this.quillEditorEl()?.nativeElement,\n scrollingContainer: this.heightAuto() ? this.wrapperEditorEl()?.nativeElement : null\n }));\n }\n\n private setHandlerFunction() {\n if (this.uploadImageConfig().modeCustom) {\n this.handlers.update(item => ({ ...item, image: this.handlerShowUploadImage.bind(this), emoji: () => { return } }));\n }\n let link = false;\n const handlersExpand = this.handlersExpand();\n if (handlersExpand && handlersExpand.length) {\n handlersExpand.forEach(element => {\n if (element.title && element.action) {\n if (element.title === 'link') {\n link = true;\n }\n this.handlers.update(item => ({ ...item, [element.title]: element.action }));\n }\n });\n }\n if (!link) {\n this.handlers.update(item => ({ ...item, link: this.handleShowUploadLink.bind(this), unLink: this.handlerUnInsertLink.bind(this) }));\n }\n }\n\n private setClassIncludeAndReadOnly() {\n const editorEl = this.editorEl();\n const classInclude = this.classInclude();\n const readonly = this.readonly();\n if (editorEl) {\n if (classInclude || readonly) {\n for (const elementNode of editorEl.nativeElement.lastElementChild.children) {\n if (!elementNode.className.includes('ql-editor')) {\n continue;\n }\n if (classInclude) {\n elementNode.classList.add(classInclude);\n }\n if (readonly) {\n elementNode.classList.add('!bg-[#f8f9fa]');\n }\n }\n }\n if (readonly) {\n for (const elementNode of editorEl.nativeElement.children) {\n if (elementNode.className.includes('ql-toolbar')) {\n elementNode.classList.add('pointer-events-none');\n }\n }\n }\n }\n }\n\n private adjustIndexForImages(index: number) {\n const content = this.quill()?.root;\n let imageCount = 0;\n let adjustedIndex = 0;\n const adjustTextIndex = (node: Node) => {\n if (adjustedIndex > index) {\n return;\n }\n if (node.nodeType === Node.TEXT_NODE) {\n adjustedIndex += node.textContent?.length || 0;\n return;\n }\n if (node.nodeType === Node.ELEMENT_NODE && node.nodeName === 'IMG') {\n if (adjustedIndex <= index) {\n imageCount++;\n }\n return;\n }\n if (node.nodeType === Node.ELEMENT_NODE) {\n Array.from(node.childNodes).forEach(adjustTextIndex);\n }\n };\n adjustTextIndex(content as Node);\n return imageCount;\n };\n\n\n private handlerSelectionChange() {\n this.quill()?.on('selection-change', (range: RangeStatic, oldRange: RangeStatic, source: Sources) => {\n if (this.readonly()) {\n return;\n }\n if (range === null && oldRange !== null) {\n this.outBlur.emit();\n return;\n }\n if (range !== null && oldRange === null) {\n this.outFocus.emit();\n return;\n }\n const format = this.quill()?.getFormat();\n if (format) {\n this.getFont(format);\n this.getFontSize(format);\n }\n this.outSelectionChange.emit(range.length ? true : false);\n if (range.length === 0 && format?.link && source === 'user') {\n const selection = document.getSelection();\n const anchorNode = selection?.anchorNode;\n let linkNode = anchorNode as HTMLAnchorElement;\n while (linkNode && linkNode.tagName !== 'A') {\n linkNode = linkNode.parentNode as HTMLAnchorElement;\n }\n if (linkNode && linkNode.tagName === 'A') {\n const linkText = linkNode.innerText;\n const linksIndices: Array<number> = [];\n let indexReturn: number | undefined = -1;\n while (!isNil(indexReturn) && indexReturn < range.index) {\n const textContent = this.quill()?.getText();\n const linkIndex = textContent?.indexOf(linkText, linksIndices.length > 0 ? linksIndices[linksIndices.length - 1] + linkText.length : 0);\n if (!isNil(linkIndex)) {\n if (linkIndex !== -1) {\n linksIndices.push(linkIndex);\n indexReturn = linkIndex + linkText.length;\n }\n if (linkIndex === -1) {\n indexReturn = undefined;\n }\n }\n }\n if (linksIndices && linksIndices.length) {\n const rangeIndex = linksIndices[linksIndices.length - 1];\n const countImage = this.adjustIndexForImages(rangeIndex)\n setTimeout(() => {\n this.link.set({\n title: linkText,\n url: linkNode.href,\n range: {\n index: rangeIndex + countImage,\n length: linkText.length\n }\n })\n this.popoverFunctionControl()?.showPopover(linkNode)\n }, 250);\n }\n }\n }\n });\n }\n\n private handlerPaste() {\n set(this.quill, 'root.onpaste', async (event: ClipboardEvent) => {\n if (!event || !event.clipboardData) {\n return;\n }\n const files = event.clipboardData.files;\n if (!files.length) {\n return;\n }\n event.preventDefault();\n const images: Array<File> = [];\n Array.from(files).forEach((file) => {\n if (file && file.type.split('/')[0] === 'image') {\n images.push(file);\n }\n });\n const links = await this.uploadImageConfig().functionUploadImage?.(images);\n if (links && links.length) {\n links.forEach(link => {\n if (!link || (this.uploadImageConfig().onlyAcceptImageHttpsLink && (link instanceof ArrayBuffer || !new RegExp(patternUrl()).test(link)))) {\n return;\n }\n this.insertHtml('image', link as string);\n })\n }\n });\n }\n\n private handlerTextChange() {\n this.quill()?.on('text-change', (event) => {\n const html = this.quill()?.root.innerHTML;\n setTimeout(() => {\n if (event?.ops[1]?.insert === '\\n') {\n const range = { index: event?.ops[0].retain as number };\n const currentLeaf = this.quill()?.getLeaf(range.index)[0];\n const nextLeaf = this.quill()?.getLeaf(range.index + 1)[0];\n this.quill()?.insertEmbed(range.index, 'break', true, 'user');\n if (nextLeaf === null || currentLeaf.parent !== nextLeaf.parent) {\n this.quill()?.insertEmbed(range.index, 'break', true, 'user');\n }\n this.setSelection((range.index || 0) + 1, 0, Quill.sources.SILENT);\n }\n });\n if (html === '<div><br></div>' || html === '<div style=\"text-align: justify;\"><br></div>' || !this.quill()?.getText()) {\n set(this.item(), this.fieldNameBind(), '');\n this.validate();\n this.outChange.emit(get(this.item(), this.fieldNameBind()));\n return;\n }\n this.convertInnerHTML();\n this.validate();\n this.outChange.emit(get(this.item(), this.fieldNameBind()));\n });\n }\n\n protected handlerPopoverFunctionControl(event: IPopoverFunctionControlEvent) {\n this.popoverFunctionControl.set(event);\n }\n\n protected handlerPopoverEvent(event: TYPE_POPOVER_EVENT) {\n if (event === 'remove') {\n this.link.set(linkDefault());\n }\n }\n\n protected handlerUnlink(event: Event) {\n event.stopPropagation();\n const link = this.link();\n this.quill()?.formatText(link.range.index, link.range.length, { link: false });\n this.popoverFunctionControl()?.removePopoverOverlay();\n }\n\n protected handlerEdit(event: Event) {\n event.stopPropagation();\n const link = this.link();\n this.handleShowUploadLink(link);\n this.popoverFunctionControl()?.removePopoverOverlay();\n }\n\n private calculatorToolbar() {\n this.itemHidden.set([]);\n this.itemHiddenExpand.set([]);\n setTimeout(() => {\n const toolbarWidth = this.toolbarItemsEl()?.nativeElement.offsetWidth || 0;\n let itemWidth = 28;\n const hiddenItems: Array<number> = [];\n const hiddenItemsExpand: Array<number> = [];\n const itemsHasWidth = this.itemsEl().filter(item => item.nativeElement.offsetWidth);\n for (let index = 0; index < itemsHasWidth.length; index++) {\n const element = itemsHasWidth[index];\n const id = element.nativeElement.id;\n const trueIndex = Number(id.split('_')[1]);\n const type = id.split('_')[0];\n const width = element.nativeElement.offsetWidth || 0;\n itemWidth += width;\n if (type === 'line') {\n const nextElement = itemsHasWidth[index + 1];\n const nextWidth = nextElement?.nativeElement.offsetWidth || 0;\n const nextItemWidth = itemWidth + nextWidth;\n if (nextItemWidth > toolbarWidth) {\n hiddenItemsExpand.push(trueIndex);\n }\n }\n if (itemWidth > toolbarWidth) {\n hiddenItems.push(trueIndex);\n continue;\n }\n }\n this.itemHidden.set(hiddenItems);\n this.itemHiddenExpand.set(hiddenItemsExpand);\n }, 500);\n }\n\n protected setStyle(type: string, data: string | number) {\n this.quill()?.format(type, data);\n }\n\n private getFontSize(format: StringMap) {\n const fontSize = format?.size?.toString()?.replace('px', '');\n if (isNaN(parseFloat(fontSize))) {\n this.size.set({ value: 14 });\n return;\n }\n this.size.set({ value: parseFloat(fontSize) });\n }\n\n private getFont(format: StringMap) {\n const font = listFont().find((item) => item.key === format.font);\n if (!font) {\n this.fontSelected.set({ key: '', item: listFont().find((item) => item.key === '') });\n return;\n }\n this.fontSelected.set({ key: format.font, item: font });\n }\n\n protected handleUndo() {\n this.quill()?.history?.undo();\n }\n\n protected handleRedo() {\n this.quill()?.history?.redo();\n }\n\n protected async setContent(content: string) {\n if (!content) {\n setTimeout(() => set(this.quill, 'root.innerHTML', ''));\n return;\n }\n const contentXssFilter = await xssFilter(content);\n setTimeout(() => set(this.quill, 'root.innerHTML', contentXssFilter));\n if (!this.autoFocusBottom()) {\n return;\n }\n setTimeout(() => {\n this.quill()?.blur();\n const range = document.createRange();\n const sel = window.getSelection();\n const target = this.quillEditorEl()?.nativeElement.querySelector('[contenteditable=\"true\"]');\n const contentScroll = this.heightAuto() ? this.wrapperEditorEl()?.nativeElement : target;\n range.selectNodeContents(target);\n range.collapse(false);\n sel?.removeAllRanges();\n sel?.addRange(range);\n target.focus();\n contentScroll.scrollTop = contentScroll.scrollHeight;\n }, 100);\n }\n\n protected handlerAddEmoji(emoji: unknown) {\n const selection = this.quill()?.getSelection(true).index;\n if (!isNil(selection)) {\n this.quill()?.insertText(selection, emoji as string);\n }\n }\n\n protected handleShowUploadLink(event: unknown) {\n this.addEditLinkComponentRef.set(this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsInputsQuillLinkComponent));\n const instance = this.addEditLinkComponentRef()?.instance;\n const selection = this.quill()?.getSelection();\n const textSelected = selection?.length ? this.quill()?.getText(selection?.index, selection?.length) : '';\n const data = event as ILink | undefined;\n if (instance) {\n instance.zIndex.set(this.zIndex());\n instance.title.set(data?.title || textSelected);\n instance.link.set(data?.url || '');\n instance.outSaveLink.subscribe((item: { title: string, link: string }) => {\n if (data instanceof Object && data.url) {\n this.quill()?.deleteText(data.range.index, data.range.length, Quill.sources.USER);\n this.quill()?.insertText(data.range.index, item.title, 'link', item.link);\n return;\n }\n this.insertLink(item.title, item.link);\n });\n instance.outClose.subscribe(() => this.dynamicComponentService.remove(this.addEditLinkComponentRef()));\n }\n this.dynamicComponentService.addToBody(this.addEditLinkComponentRef());\n }\n\n protected handlerUnInsertLink() {\n const selection = this.quill()?.getSelection(true);\n if (!isNil(selection)) {\n this.quill()?.formatText(selection, 'link', false);\n }\n }\n\n protected async validate() {\n this.messageError.set('');\n const validRequired = this.validRequired();\n const item = this.item();\n const fieldNameBind = this.fieldNameBind();\n const value = get(item, fieldNameBind);\n if (validRequired && validRequired.isRequired && (!fieldNameBind || !value || !value.trim())) {\n this.messageError.set(validRequired.message || ERROR_MESSAGE_EMPTY_VALID);\n this.outMessageError.emit(this.messageError());\n return false;\n }\n const validMinLength = this.validMinLength();\n if (validMinLength && fieldNameBind && value && value.trim().length < validMinLength.length) {\n this.messageError.set(validMinLength.message || ERROR_MESSAGE_MIN_LENGTH);\n this.outMessageError.emit(this.messageError());\n return false;\n }\n const validMaxLength = this.validMaxLength();\n if (validMaxLength && fieldNameBind && value && value.trim().length > this.validMaxLength.length) {\n this.messageError.set(validMaxLength.message || ERROR_MESSAGE_MAX_LENGTH);\n this.outMessageError.emit(this.messageError());\n return false;\n }\n this.outMessageError.emit(this.messageError());\n return true;\n }\n\n protected async insertHtml(tagName: string, content: string, index?: number) {\n const selection = (index || index === 0) ? index : this.quill()?.getSelection(true).index;\n if (!isNil(selection)) {\n this.quill()?.insertEmbed(selection, tagName, content);\n this.setSelection(selection, content.length);\n }\n }\n\n private async insertText(content: string, index?: number) {\n const selection = (index || index === 0) ? index : this.quill()?.getSelection(true).index;\n if (!isNil(selection)) {\n this.quill()?.insertText(selection, content);\n }\n }\n\n private async insertLink(text: string, url: string, index?: number) {\n const selection = this.quill()?.getSelection(true);\n const indexInsert = (index || index === 0) ? index : selection?.index;\n if (selection?.length) {\n this.quill()?.deleteText(selection.index, selection.length, Quill.sources.USER);\n }\n if (!isNil(indexInsert)) {\n this.quill()?.insertText(indexInsert, text, 'link', url);\n }\n }\n\n private convertInnerHTML() {\n this.setStyleForContent();\n set(this.item(), this.fieldNameBind(), this.quill()?.root.innerHTML);\n }\n\n private setStyleForContent() {\n const styleArray = [\n { selector: '.ql-font-Arial', style: 'font-family: Arial' },\n { selector: '.ql-font-sans-serif', style: 'font-family: sans-serif' },\n { selector: '.ql-font-serif', style: 'font-family: serif' },\n { selector: '.ql-font-monospace', style: 'font-family: monospace' },\n { selector: '.ql-font-Helvetica', style: 'font-family: Helvetica' },\n { selector: '.libs-ui-quill-format-image', style: 'max-width: 100%; height: auto' },\n { selector: '.libs-ui-quill-mention', style: 'font-weight: 600;-moz-osx-font-smoothing: grayscale;-webkit-font-smoothing: antialiased; color: #7239EA' },\n { selector: 'blockquote', style: 'border-left: 4px solid #ccc; margin-bottom: 5px; margin-top: 5px; padding-left: 16px' }\n ];\n styleArray.forEach((item) => {\n const elements = this.quill()?.root.querySelectorAll(item.selector);\n elements?.forEach((element) => {\n if (item.selector === '.libs-ui-quill-format-image' || item.selector === '.libs-ui-quill-mention' || item.selector === 'blockquote') {\n element.setAttribute('style', item.style);\n return;\n }\n // Fixbug issue: https://admin-cv.mobio.vn/issues/49092\n let styleExist = element.getAttribute('style');\n if (styleExist) {\n ['font-family: Arial', 'font-family: sans-serif', 'font-family: serif', 'font-family: monospace', 'font-family: Helvetica'].forEach(font => {\n styleExist = (styleExist?.includes(`${font};`) ? styleExist?.replace(`${font};`, '') : styleExist?.replace(font, '')) as string;\n });\n }\n element.setAttribute('style', styleExist ? `${styleExist}${styleExist[styleExist.length - 1] === ';' ? '' : ';'}${item.style};` : item.style);\n });\n });\n }\n\n protected handleToggleMention(show: boolean) {\n this.showMention.set(show);\n }\n\n private handlerShowUploadImage() {\n this.uploadImageComponentRef.set(this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsInputsQuillUploadImageComponent));\n const instance = this.uploadImageComponentRef()?.instance;\n if (instance) {\n instance.uploadImageConfig.set(this.uploadImageConfig());\n instance.outClose.subscribe((event: string | void) => {\n this.dynamicComponentService.remove(this.uploadImageComponentRef());\n if (event) {\n this.insertHtml('image', event);\n }\n });\n }\n this.dynamicComponentService.addToBody(this.uploadImageComponentRef());\n }\n\n private setSelection(index: number, length: number, sources?: Sources) {\n this.quill()?.setSelection(index, length, sources);\n }\n\n private insertMention(event: IMentionInsert) {\n const range = this.quill()?.getSelection();\n if (!range) {\n return;\n }\n const cursorPos = range.index;\n const startPosInsert = cursorPos - event.lengthKey;\n this.quill()?.deleteText(startPosInsert, event.lengthKey, Quill.sources.USER);\n this.quill()?.insertEmbed(startPosInsert, 'mention', event.data, Quill.sources.USER);\n this.quill()?.insertText(startPosInsert + 1, ' ', Quill.sources.USER);\n this.setSelection(startPosInsert + 2, 0, Quill.sources.USER);\n }\n\n protected handlerInsertMention(data: IMentionInsert) {\n this.insertMention(data);\n }\n\n protected async setFontSize(size: number) {\n this.quill()?.format('size', `${size}px`);\n }\n\n protected async setColor(color: string) {\n this.quill()?.format('color', color);\n }\n\n protected async setBackground(color: string) {\n this.quill()?.format('background', color);\n }\n\n protected handlerValueChange(value: number | string) {\n this.size.update(item => ({ ...item, value: value as number }));\n this.quill()?.format('size', `${this.size().value}px`);\n }\n\n protected handleSelectAlign(event: IEmitSelectKey | undefined) {\n this.alignSelected.set(event);\n this.setStyle('align', event?.key as string);\n }\n\n protected handleSelectFont(event: IEmitSelectKey | undefined) {\n this.fontSelected.set(event);\n this.setStyle('font', event?.key as string);\n }\n\n protected handlerChangeShowMoreAction(event: Event) {\n event.stopPropagation();\n this.showMoreAction.update(item => !item);\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n this.dynamicComponentService.remove(this.addEditLinkComponentRef());\n this.dynamicComponentService.remove(this.uploadImageComponentRef());\n }\n}\n\n","<div class=\"flex flex-col w-full h-full\">\n @if (label(); as label) {\n <libs_ui-components-label [classInclude]=\"label.classInclude\"\n [required]=\"label.required\"\n [labelLeft]=\"label.labelLeft\" />\n }\n <div #wrapperEditor\n [attr.heightAuto]=\"heightAuto()\"\n [attr.hiddenToolBar]=\"onlyShowContent()\"\n class=\"libs-ui-quill-wrapper w-full h-full relative flex flex-col\"\n [class.libs-ui-border-error-general]=\"messageError() && showErrorBorder() && !onlyShowErrorBorderInContent()\"\n [class.rounded-[4px]]=\"messageError() && showErrorBorder() && !onlyShowErrorBorderInContent()\">\n <div #editor\n class=\"libs-ui-quill\"\n [attr.showError]=\"messageError() && showErrorBorder() && onlyShowErrorBorderInContent()\"\n [class.!hidden]=\"!display()\">\n @if (!onlyShowContent()) {\n <div #quillOption\n class=\"'ql-toolbar ql-snow bg-[#f8f9fa] {{ classIncludeToolbar() }}\">\n <ng-container *ngTemplateOutlet=\"toolbar\"></ng-container>\n </div>\n }\n <div #quillEditor\n LibsUiComponentsInputsMentionDirective\n [mentionConfig]=\"dataConfigMention()\"\n (outToggle)=\"handleToggleMention($event)\"\n (outInsertMention)=\"handlerInsertMention($event)\"></div>\n </div>\n @if (template(); as template) {\n <div [class]=\"classIncludeTemplate()\">\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n </div>\n }\n </div>\n @if (messageError() && showErrorLabel()) {\n <div class=\"flex items-center leading-normal mt-[8px]\">\n <span class=\"text-[#ff5454] libs-ui-font-h7r\"> {{ messageError() | translate }}</span>\n </div>\n }\n</div>\n@if (showToolBar()) {\n <div #quillToolbar\n [class]=\"'ql-snow absolute px-[8px] py-[4px] p-0 w-[500px] rounded-[4px] bg-[#ffffff] libs-ui-quill-toolbar-animation ' + classIncludeToolbar()\">\n <ng-container *ngTemplateOutlet=\"toolbar\"></ng-container>\n </div>\n}\n\n<ng-template #toolbar>\n <div class=\"toolbar\"\n #toolbarItems>\n <div class=\"ql-formats items-center\">\n @for (option of optionsToolbar(); track option) {\n <div #item\n [id]=\"option.type+'_'+$index\"\n class=\"items-center\"\n [class.hidden]=\"itemHidden().includes($index) || itemHiddenExpand().includes($index)\"\n [class.flex]=\"!itemHidden().includes($index)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate;context:{option, $index, $last}\"></ng-container>\n </div>\n }\n <div class=\"relative\">\n @if (itemHidden().length) {\n <libs_ui-components-buttons-button [type]=\"showMoreAction() ? 'button-secondary' : 'button-third'\"\n [iconOnlyType]=\"true\"\n [classInclude]=\"'!p-[1px] !h-[20px] ml-[8px]'\"\n [classIconLeft]=\"'libs-ui-icon-move-right rotate-90'\"\n (outClick)=\"handlerChangeShowMoreAction($event)\" />\n }\n <div [class.hidden]=\"!showMoreAction()\"\n class=\"absolute bg-[#ffffff] top-[10px] shadow-md z-[1] flex items-center pl-[8px] pr-[16px] py-[4px] rounded-[8px] top-[31px] right-[0px]\">\n @for (option of optionsToolbar(); track option) {\n <div class=\"items-center\"\n [class.hidden]=\"!itemHidden().includes($index)\"\n [class.flex]=\"itemHidden().includes($index)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate;context:{option, $index, $last}\"></ng-container>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n\n\n<ng-template #itemTemplate\n let-$index=\"$index\"\n let-$last=\"$last\"\n let-option=\"option\">\n @if (option.type === 'undo') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content: 'i18n_undo', zIndex: 1250}\"\n class=\"ql-undo\"></button>\n </div>\n }\n @if (option.type === 'redo') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content: 'i18n_redo', zIndex: 1250}\"\n class=\"ql-redo\"></button>\n </div>\n }\n @if (option.type === 'fontFamily') {\n <div class=\"relative w-[117px] h-full bg-[#ffffff] rounded-[4px] libs-ui-border-general {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [labelPopoverFullWidth]=\"true\"\n [listConfig]=\"listConfigFont()\"\n [listHasButtonUnSelectOption]=\"false\"\n [listHiddenInputSearch]=\"true\"\n [listMaxItemShow]=\"8\"\n [zIndex]=\"1250\"\n (outSelectKey)=\"handleSelectFont($event)\">\n @if (fontSelected(); as fontSelected) {\n <div class=\"flex items-center cursor-pointer py-[8px] libs-ui-font-h5r pl-[16px] pr-[40px] {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [type]=\"'text'\"\n [ignoreStopPropagationEvent]=\"true\"\n [config]=\"{zIndex:1250}\">\n {{ labelFontSelectedComputed() }}\n </libs_ui-components-popover>\n <i class=\"libs-ui-icon-move-right rotate-90 absolute right-[12px] text-[#6a7383] text-[16px]\"></i>\n </div>\n }\n </libs_ui-components-dropdown>\n </div>\n }\n @if (option.type === 'fontSize') {\n <div class=\"ql-picker {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-inputs-valid [dataType]=\"'int'\"\n [(item)]=\"size\"\n [fieldNameBind]=\"'value'\"\n [valueUpDownNumber]=\"1\"\n [maxValueNumber]=\"72\"\n [minValueNumber]=\"8\"\n [readonly]=\"readonly()\"\n [classContainerInput]=\"'w-[72px] h-[32px]'\"\n (outValueChange)=\"handlerValueChange($event)\" />\n </div>\n }\n @if (option.type === 'color') {\n <div class=\"ql-color ql-picker ql-color-picker !flex items-center {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [config]=\"{content:'i18n_text_color', zIndex:1250}\">\n <libs_ui-components-buttons-select_color [zIndex]=\"zIndex()\"\n [direction]=\"'top'\"\n [externalContent]=\"true\"\n [applyNow]=\"true\"\n (outColorChange)=\"setStyle('color', $event)\">\n <div class=\"libs-ui-icon-editor-color-text libs-ui-buttons-select-color text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]\">\n </div>\n </libs_ui-components-buttons-select_color>\n </libs_ui-components-popover>\n </div>\n }\n @if (option.type === 'background') {\n <div class=\"ql-background ql-picker ql-color-picker !flex items-center {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [config]=\"{content:'i18n_background_color', zIndex:1250}\">\n <libs_ui-components-buttons-select_color [zIndex]=\"zIndex()\"\n [direction]=\"'top'\"\n [externalContent]=\"true\"\n [applyNow]=\"true\"\n (outColorChange)=\"setStyle('background', $event)\">\n <div class=\"libs-ui-icon-editor-color-background libs-ui-buttons-select-color text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]\">\n </div>\n </libs_ui-components-buttons-select_color>\n </libs_ui-components-popover>\n </div>\n }\n @if (option.type === 'bold') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_font_weight_bold', zIndex:1250}\"\n class=\"ql-bold\"></button>\n </div>\n }\n @if (option.type === 'italic') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_font_style_italic', zIndex:1250}\"\n class=\"ql-italic\"></button>\n </div>\n }\n @if (option.type === 'underline') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_text_decoration_underline', zIndex:1250}\"\n class=\"ql-underline\"></button>\n </div>\n }\n @if (option.type === 'strikeThrough') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_text_line_through', zIndex:1250}\"\n class=\"ql-strike\"></button>\n </div>\n }\n @if (option.type === 'adjust') {\n <div class=\"relative !flex items-center ql-align ql-picker ql-icon-picker !w-max {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [config]=\"{content:'i18n_adjust', zIndex:1250}\">\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [ignoreStopPropagationEvent]=\"true\"\n [labelPopoverFullWidth]=\"true\"\n [listConfig]=\"listConfigAlign()\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"{ignoreArrow: true, classInclude: '!w-[32px] overflow-hidden !py-[4px]', position: {mode: 'start', distance: 0}, paddingLeftItem: false}\"\n [listHasButtonUnSelectOption]=\"false\"\n [listMaxItemShow]=\"8\"\n [zIndex]=\"1250\"\n (outSelectKey)=\"handleSelectAlign($event)\">\n @if (alignSelected(); as alignSelected) {\n <div class=\"flex items-center cursor-pointer\">\n <i [class]=\"iconAlignSelectedComputed()\"></i>\n <i class=\"libs-ui-icon-move-right rotate-90 text-[#6a7383] text-[16px] ml-[4px]\"></i>\n </div>\n }\n </libs_ui-components-dropdown>\n </libs_ui-components-popover>\n </div>\n }\n @if (option.type === 'indentIncrease') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_indent_increase', zIndex:1250}\"\n class=\"ql-indent\"\n value=\"+1\"></button>\n </div>\n }\n @if (option.type === 'indentDecrease') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_indent_decrease', zIndex:1250}\"\n class=\"ql-indent\"\n value=\"-1\"></button>\n </div>\n }\n @if (option.type === 'listBulleted') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_list_bulleted', zIndex:1250}\"\n class=\"ql-list ql-bullet\"\n value=\"bullet\"></button>\n </div>\n }\n @if (option.type === 'listNumbered') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_list_numbered', zIndex:1250}\"\n class=\"ql-list ql-ordered\"\n value=\"ordered\"></button>\n </div>\n }\n @if (option.type === 'personalize' && templateToolBarPersonalize(); as templateToolBarPersonalize) {\n <div class=\"flex items-center {{ option.classInclude || 'mx-[8px]' }}\">\n <ng-container *ngTemplateOutlet=\"templateToolBarPersonalize\"></ng-container>\n </div>\n }\n @if (option.type === 'blockquote') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_quote', zIndex:1250}\"\n class=\"ql-blockquote\"></button>\n </div>\n }\n @if (option.type === 'link') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_insert_link', zIndex:1250}\"\n class=\"ql-link\"></button>\n </div>\n }\n @if (option.type === 'unLink') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_unlink', zIndex:1250}\"\n class=\"ql-unLink\"></button>\n </div>\n }\n @if (option.type === 'image' && uploadImageConfig().showIcon) {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_image', zIndex:1250}\"\n class=\"ql-image\"></button>\n </div>\n }\n @if (option.type === 'emoji') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <libs_ui-components-emoji [zIndex]=\"1250\"\n [isNgContent]=\"true\"\n (outEventEmoji)=\"handlerAddEmoji($event)\">\n <button class=\"ql-emoji\"></button>\n </libs_ui-components-emoji>\n </div>\n }\n @if (option.type === 'line') {\n <div class=\"w-[1px] h-[16px] libs-ui-border-right-general\"></div>\n }\n</ng-template>\n\n<libs_ui-components-popover [mode]=\"'click'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{template: viewLink, whiteTheme: true, ignoreArrow: true}\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outFunctionsControl)=\"handlerPopoverFunctionControl($event)\" />\n\n<ng-template #viewLink>\n <div class=\"flex justify-between items-center px-[16px] py-[8px] rounded-[8px]\">\n <div class=\"w-full min-w-0 libs-ui-font-h5r\"\n [type]=\"'text'\"\n LibsUiComponentsPopoverDirective>{{ link().url }}</div>\n <div class=\"flex items-center ml-[16px]\">\n <libs_ui-components-buttons-button [type]=\"'button-link-primary'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerEdit($event)\" />\n <libs_ui-components-buttons-button [type]=\"'button-link-custom'\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#071631',\n text_hover: '#ee2d41',\n text_active: '#ee2d41',\n text_disable: '071631'\n },\n rootColor: '#071631'\n }\"\n [classInclude]=\"'!p-0 ml-[12px]'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-link-broken'\"\n (outClick)=\"handlerUnlink($event)\" />\n </div>\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|