keevo-components 2.0.285 → 2.0.286
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/api/base-components/base-component-dropdown.mjs +6 -15
- package/esm2022/lib/components/kv-avatar/kv-avatar.component.mjs +2 -2
- package/esm2022/lib/components/kv-button/kv-button.component.mjs +3 -3
- package/esm2022/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.mjs +2 -2
- package/esm2022/lib/components/kv-chart/kv-chart.component.mjs +2 -2
- package/esm2022/lib/components/kv-icon/kv-icon.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-check/kv-check.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +6 -12
- package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.mjs +3 -4
- package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.mjs +13 -18
- package/esm2022/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-input-number/kv-input-number.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-input-password/kv-input-password.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-input-text/kv-input-text.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-input-time/kv-input-time.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-inputs.module.mjs +4 -8
- package/esm2022/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-switch/kv-switch.component.mjs +2 -2
- package/esm2022/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.mjs +2 -2
- package/esm2022/lib/components/kv-instruction-page/kv-instruction-page.component.mjs +3 -3
- package/esm2022/lib/components/kv-layout/layout/kv-layout.component.mjs +2 -2
- package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.component.mjs +2 -2
- package/esm2022/lib/components/kv-pick-list/kv-pick-list.component.mjs +2 -2
- package/esm2022/lib/components/kv-stepper/kv-stepper.component.mjs +2 -2
- package/esm2022/lib/components/kv-table/kv-table.component.mjs +2 -2
- package/esm2022/lib/components/kv-widget-card/kv-widget-card.component.mjs +3 -3
- package/fesm2022/keevo-components.mjs +80 -103
- package/fesm2022/keevo-components.mjs.map +1 -1
- package/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.d.ts +1 -1
- package/lib/components/kv-inputs/kv-editor/kv-editor.component.d.ts +3 -4
- package/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.d.ts +3 -2
- package/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.d.ts +3 -3
- package/lib/components/kv-inputs/kv-inputs.module.d.ts +1 -2
- package/lib/components/kv-table-viewer/kv-table-viewer.component.d.ts +1 -1
- package/lib/components/kv-tag/kv-tag.component.d.ts +1 -1
- package/package.json +1 -1
- package/src/lib/components/keevo-components-styles.scss +0 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, computed, effect, EventEmitter, inject, input, Input, model, Output, signal, ViewChild, } from '@angular/core';
|
|
2
|
-
import
|
|
2
|
+
import Quill from 'quill';
|
|
3
3
|
import { DialogService } from 'primeng/dynamicdialog';
|
|
4
4
|
import { BaseComponentInput } from '../../../api/base-components/base-component-input';
|
|
5
5
|
import { ComponentProviders } from '../../../api/helpers/component-providers';
|
|
@@ -16,9 +16,7 @@ import * as i7 from "primeng/divider";
|
|
|
16
16
|
import * as i8 from "primeng/progressbar";
|
|
17
17
|
import * as i9 from "primeng/overlaypanel";
|
|
18
18
|
import * as i10 from "primeng/skeleton";
|
|
19
|
-
import * as i11 from "../../kv-
|
|
20
|
-
import * as i12 from "../../kv-tags/kv-tags.component";
|
|
21
|
-
const QuillClass = QuillNamespace.default || QuillNamespace;
|
|
19
|
+
import * as i11 from "../../kv-tags/kv-tags.component";
|
|
22
20
|
export class KvEditorComponent extends BaseComponentInput {
|
|
23
21
|
constructor(componentService, sanitizer) {
|
|
24
22
|
super(componentService);
|
|
@@ -50,7 +48,7 @@ export class KvEditorComponent extends BaseComponentInput {
|
|
|
50
48
|
this.editorReadyResolver = resolve;
|
|
51
49
|
});
|
|
52
50
|
this.htmlDoEditor = '';
|
|
53
|
-
this.quillDelta =
|
|
51
|
+
this.quillDelta = Quill.import('delta');
|
|
54
52
|
// Signal para espelhamento do conteúdo do editor
|
|
55
53
|
this.htmlEspelho = signal('');
|
|
56
54
|
this.previewContent = signal('');
|
|
@@ -61,7 +59,6 @@ export class KvEditorComponent extends BaseComponentInput {
|
|
|
61
59
|
// tipoVisualizacao = signal<'valor' | 'descricao'>('descricao');
|
|
62
60
|
this.filteredVariables = signal([]);
|
|
63
61
|
this.clearedTemplate = signal(false);
|
|
64
|
-
this.isFullscreen = signal(false);
|
|
65
62
|
//Input para habilitar preview
|
|
66
63
|
this.enablePreviewMode = input(false);
|
|
67
64
|
this.showVariableValuesInPreview = input(false);
|
|
@@ -108,9 +105,6 @@ export class KvEditorComponent extends BaseComponentInput {
|
|
|
108
105
|
}
|
|
109
106
|
});
|
|
110
107
|
}
|
|
111
|
-
toggleFullscreen() {
|
|
112
|
-
this.isFullscreen.update(v => !v);
|
|
113
|
-
}
|
|
114
108
|
// Métodos para gerenciar relatórios
|
|
115
109
|
setRelatorioPorId(id) {
|
|
116
110
|
const relatorio = this.relatorioService.setRelatorioPorId(id);
|
|
@@ -715,11 +709,11 @@ export class KvEditorComponent extends BaseComponentInput {
|
|
|
715
709
|
}, 10);
|
|
716
710
|
}
|
|
717
711
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorComponent, deps: [{ token: i1.ComponentService }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
718
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvEditorComponent, selector: "kv-editor", inputs: { canvaHeigth: { classPropertyName: "canvaHeigth", publicName: "canvaHeigth", isSignal: false, isRequired: false, transformFunction: null }, contentType: { classPropertyName: "contentType", publicName: "contentType", isSignal: false, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: false, isRequired: false, transformFunction: null }, enablePreviewMode: { classPropertyName: "enablePreviewMode", publicName: "enablePreviewMode", isSignal: true, isRequired: false, transformFunction: null }, showVariableValuesInPreview: { classPropertyName: "showVariableValuesInPreview", publicName: "showVariableValuesInPreview", isSignal: true, isRequired: false, transformFunction: null }, showVariableValueFirst: { classPropertyName: "showVariableValueFirst", publicName: "showVariableValueFirst", isSignal: true, isRequired: false, transformFunction: null }, relatorios: { classPropertyName: "relatorios", publicName: "relatorios", isSignal: true, isRequired: false, transformFunction: null }, idRelatorioInitial: { classPropertyName: "idRelatorioInitial", publicName: "idRelatorioInitial", isSignal: true, isRequired: false, transformFunction: null }, printButton: { classPropertyName: "printButton", publicName: "printButton", isSignal: true, isRequired: false, transformFunction: null }, labelEmptyDropdown: { classPropertyName: "labelEmptyDropdown", publicName: "labelEmptyDropdown", isSignal: true, isRequired: false, transformFunction: null }, instrucoesTemplate: { classPropertyName: "instrucoesTemplate", publicName: "instrucoesTemplate", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disabledEditor: { classPropertyName: "disabledEditor", publicName: "disabledEditor", isSignal: true, isRequired: false, transformFunction: null }, showHeaderButtons: { classPropertyName: "showHeaderButtons", publicName: "showHeaderButtons", isSignal: true, isRequired: false, transformFunction: null }, showAlphaCrmButtons: { classPropertyName: "showAlphaCrmButtons", publicName: "showAlphaCrmButtons", isSignal: true, isRequired: false, transformFunction: null }, showAlphaContratoButtons: { classPropertyName: "showAlphaContratoButtons", publicName: "showAlphaContratoButtons", isSignal: true, isRequired: false, transformFunction: null }, enableButtonInsert: { classPropertyName: "enableButtonInsert", publicName: "enableButtonInsert", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onTextChange: "onTextChange", onSelectionChange: "onSelectionChange", outputRaw: "outputRaw", outputHtml: "outputHtml", previewHtmlOutput: "previewHtmlOutput", onCustomButtonClick: "onCustomButtonClick", idRelatorioInitial: "idRelatorioInitialChange" }, providers: ComponentProviders(KvEditorComponent), viewQueries: [{ propertyName: "opVariables", first: true, predicate: ["opVariables"], descendants: true }, { propertyName: "mentionAnchor", first: true, predicate: ["mentionAnchor"], descendants: true }, { propertyName: "buttonNameTooltip", first: true, predicate: ["buttonNameTooltip"], descendants: true }, { propertyName: "buttonNameInput", first: true, predicate: ["buttonNameInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"kv-editor-container h-full w-full max-h-full flex flex-column overflow-hidden\"\r\n [class.pointer-events-none]=\"disabledEditor()\" [class.opacity-60]=\"disabledEditor()\"\r\n [class.kv-editor-fullscreen]=\"isFullscreen()\">\r\n <div #editor id=\"kv-editor-toolbar\" [ngClass]=\"{ 'error-border-toolbar': hasControlError() }\"\r\n class=\"{{ showHeader() ? 'flex' : 'hidden' }} flex-column flex-initial ql-toolbar ql-snow\">\r\n @if(showHeaderButtons()) {\r\n @if(relatorios().length > 0) {\r\n <div\r\n class=\"flex flex-row justify-content-between {{(readonly() || disabledEditor()) && 'pointer-events-none opacity-90'}}\">\r\n <div class=\"flex flex-row gap-2\">\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"op.toggle($event)\">\r\n <span class=\"material-symbols-outlined text-lg text-green-600 font-medium\">\r\n contract\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">{{\r\n !clearedTemplate()\r\n ? relatorio()?.label || labelEmptyDropdown()\r\n : labelEmptyDropdown()\r\n }}</span>\r\n <span class=\"material-symbols-outlined text-lg\">\r\n keyboard_arrow_down\r\n </span>\r\n </div>\r\n\r\n @if(!clearedTemplate()) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"clearTemplate()\">\r\n <span class=\"material-symbols-outlined text-lg text-orange-600 font-medium\" [pTooltip]=\"'Limpar Template'\">\r\n layers_clear\r\n </span>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"showInstrucoes()\">\r\n <span class=\"material-symbols-outlined text-lg text-blue-600 font-medium\">\r\n info\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Instru\u00E7\u00F5es</span>\r\n </div>\r\n </div>\r\n\r\n <!-- @if(printButton()) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"openRelatorio()\"\r\n >\r\n <span class=\"material-symbols-outlined text-lg font-medium\">\r\n print\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Imprimir</span>\r\n </div>\r\n } -->\r\n </div>\r\n\r\n <p-divider class=\"w-full\"></p-divider>\r\n\r\n }\r\n }\r\n\r\n\r\n <div class=\"flex flex-row align-items-center justify-content-between w-full flex-initial\">\r\n @if(isLoading()) {\r\n\r\n <div class=\"flex flex-row align-items-center gap-3 w-full\">\r\n <p-skeleton styleClass=\"w-6rem\" [style]=\"{ height: '2rem' }\"></p-skeleton>\r\n\r\n <p-skeleton styleClass=\"w-6rem\" [style]=\"{ height: '2rem' }\"></p-skeleton>\r\n\r\n <p-skeleton styleClass=\"w-6rem\" [style]=\"{ height: '2rem' }\"></p-skeleton>\r\n\r\n <p-skeleton styleClass=\"w-6rem\" [style]=\"{ height: '2rem' }\"></p-skeleton>\r\n\r\n <p-skeleton styleClass=\"w-6rem\" [style]=\"{ height: '2rem' }\"></p-skeleton>\r\n </div>\r\n }\r\n\r\n <div class=\"flex-row align-items-center flex-wrap gap-2 {{\r\n isLoading() ? 'hidden' : 'flex'\r\n }} w-full\">\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-font\">\r\n <option value=\"roboto\">Roboto</option>\r\n <option value=\"arial\">Arial</option>\r\n <option value=\"times-new-roman\">Times New Roman</option>\r\n <option value=\"monospace\">Monospace</option>\r\n <option value=\"inter\">Inter</option>\r\n <option selected>Sans Serif</option>\r\n <option value=\"serif\">Serif</option>\r\n </select>\r\n\r\n <select class=\"ql-header\">\r\n <option value=\"1\">Titulo</option>\r\n <option value=\"2\">Subtitulo</option>\r\n <option selected>Normal</option>\r\n </select>\r\n\r\n <span class=\"ql-format-group\">\r\n <select title=\"Size\" class=\"ql-size\">\r\n <option value=\"15px\">15px</option>\r\n <option value=\"20px\">20px</option>\r\n <option value=\"30px\">30px</option>\r\n <option value=\"40px\">40px</option>\r\n <option value=\"50px\">50px</option>\r\n <option value=\"70px\">70px</option>\r\n <option value=\"90px\">90px</option>\r\n </select>\r\n </span>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-bold\" pTooltip=\"Negrito\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-italic\" pTooltip=\"It\u00E1lico\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-underline\" pTooltip=\"Sublinhado\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-strike\" pTooltip=\"Tachado\" tooltipPosition=\"top\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-color\" pTooltip=\"Cor da fonte\" tooltipPosition=\"top\"></select>\r\n <select class=\"ql-background\" pTooltip=\"Cor de fundo\" tooltipPosition=\"top\"></select>\r\n </span>\r\n\r\n @if(true) {\r\n <!-- <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-header\" value=\"1\"></button>\r\n <button class=\"ql-header\" value=\"2\"></button>\r\n </span> -->\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-link\" pTooltip=\"Inserir link\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-image\" pTooltip=\"Inserir imagem\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-video\" pTooltip=\"Inserir v\u00EDdeo\" tooltipPosition=\"top\"></button>\r\n\r\n @if(enableButtonInsert()) {\r\n <button id=\"insert-custom-button\" pTooltip=\"Inserir bot\u00E3o\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\"\r\n style=\"transform: translate(0px, -1.7px); font-size: 22px;\">buttons_alt</span>\r\n </button>\r\n }\r\n\r\n @if(showAlphaCrmButtons()) {\r\n <button id=\"btn-alpha-aceitar\" pTooltip=\"Inserir bot\u00E3o Aceitar\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\"\r\n style=\"transform: translate(0px, -1.7px); font-size: 22px;\">variable_add</span>\r\n </button>\r\n\r\n <button id=\"btn-alpha-cancelar\" pTooltip=\"Inserir bot\u00E3o Cancelar\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\"\r\n style=\"transform: translate(0px, -1.7px); font-size: 22px;\">variable_remove</span>\r\n </button>\r\n\r\n <button id=\"btn-alpha-aceitar-assinar\" pTooltip=\"Inserir bot\u00E3o Aceitar e Assinar Contrato\"\r\n tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\"\r\n style=\"transform: translate(0px, -1px); font-size: 20px;\">new_label</span>\r\n </button>\r\n }\r\n\r\n @if(showAlphaContratoButtons()) {\r\n <button id=\"btn-alpha-contrato-assinar\" pTooltip=\"Inserir bot\u00E3o Assinar Contrato\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\"\r\n style=\"transform: translate(0px, -1.7px); font-size: 20px;\">contract_edit</span>\r\n </button>\r\n\r\n <button id=\"btn-alpha-contrato-recusar\" pTooltip=\"Inserir bot\u00E3o Recusar Contrato\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\"\r\n style=\"transform: translate(0px, -1.7px); font-size: 20px;\">contract_delete</span>\r\n </button>\r\n }\r\n\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-list\" value=\"ordered\" pTooltip=\"Lista ordenada\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-list\" value=\"bullet\" pTooltip=\"Lista com marcadores\" tooltipPosition=\"top\"></button>\r\n <select class=\"ql-align\" pTooltip=\"Alinhamento\" tooltipPosition=\"top\"></select>\r\n </span>\r\n }\r\n\r\n <div class=\"flex-1 min-w-0\"></div>\r\n <!-- <span class=\"ql-formats m-0 ml-auto flex align-items-center pr-2\">\r\n <button pButton\r\n class=\"p-1 cursor-pointer transition-colors transition-duration-200 bg-transparent border-none text-gray-700 hover:text-blue-600\"\r\n (click)=\"toggleFullscreen()\">\r\n\r\n {{isFullscreen() ? 'Expandir' : 'Reduzir'}}\r\n <span class=\"material-symbols-outlined\" style=\"font-size: 24px;\">{{ isFullscreen() ? 'fullscreen_exit' :\r\n 'fullscreen' }}</span>\r\n </button>\r\n </span> -->\r\n\r\n <kv-button severity=\"tertiary\" [icon]=\"isFullscreen() ? 'fullscreen_exit' :\r\n 'fullscreen'\" [label]=\"isFullscreen() ? 'Reduzir' : 'Expandir'\" (onClick)=\"toggleFullscreen()\">\r\n\r\n </kv-button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"height: 3px; border-top: none; border-bottom: none\"\r\n [style.borderRight]=\"showHeader() ? '1px solid #e5e7eb' : 'none'\"\r\n [style.borderLeft]=\"showHeader() ? '1px solid #e5e7eb' : 'none'\">\r\n @if(isLoadingPdf()) {\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" />\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-row flex-1 gap-0 overflow-auto\">\r\n <div id=\"kv-editor\" class=\"overflow-auto flex-1 scrollstyle ql-container ql-snow\" [ngClass]=\"{\r\n 'error-border': hasControlError(),\r\n 'pointer-events-none opacity-60': isLoadingPdf()\r\n }\" [style.borderTop]=\"showHeader() ? 'none' : '1px solid #e5e7eb'\"\r\n [style.borderRight]=\"enablePreviewMode() ? 'none' : '1px solid #e5e7eb'\"></div>\r\n\r\n @if(enablePreviewMode()) {\r\n <div class=\"flex flex-column flex-1\">\r\n <div class=\"flex align-items-center gap-2 px-3 py-2\" [style.borderRight]=\"'1px solid #e5e7eb'\"\r\n [style.borderLeft]=\"'1px solid #e5e7eb'\">\r\n <span class=\"material-symbols-outlined text-blue-600 text-lg\">visibility</span>\r\n <span class=\"font-semibold text-gray-700 text-sm\">Preview</span>\r\n </div>\r\n\r\n <div id=\"kv-editor-preview\" class=\"overflow-auto flex-1 scrollstyle\" [innerHTML]=\"getPreviewContent\"\r\n [style.border]=\"'1px solid #e5e7eb'\"></div>\r\n </div>\r\n }\r\n </div>\r\n\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n\r\n<link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\" />\r\n<script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\"></script>\r\n\r\n<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.bubble.css\" />\r\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css\" />\r\n<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css\" />\r\n\r\n<p-overlayPanel #op styleClass=\"overflow-hidden\">\r\n <div class=\"grid m-0 gap-2 p-2 max-w-20rem overflow-y-auto scrollstyle\" style=\"max-height: 16rem\">\r\n @for(item of relatorios(); track $index) {\r\n <div\r\n class=\"col-12 cursor-pointer hover:bg-gray-100 transition-colors transition-duration-200 border-round-lg shadow-2 flex flex-column gap-2\"\r\n (click)=\"setRelatorio(item)\">\r\n <div class=\"flex flex-row align-items-center gap-2 justify-content-between\">\r\n <span class=\"text-sm font-medium w-full\">{{ item.label }}</span>\r\n\r\n <kv-tags class=\"transition-opacity transition-duration-300 {{\r\n item?.id == idRelatorioSelected() ? 'opacity-100' : 'opacity-0'\r\n }}\" [tags]=\"[{ label: 'Selecionado', severity: 'primary' }]\"></kv-tags>\r\n </div>\r\n <span class=\"text-xs text-gray-500\">{{ item.descricao }}</span>\r\n </div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n\r\n<div class=\"kv-editor-container flex flex-column overflow-hidden relative\">\r\n <div #mentionAnchor style=\"position: fixed; width: 1px; height: 1px; opacity: 0\"></div>\r\n</div>\r\n\r\n<p-overlayPanel #opVariables [appendTo]=\"'body'\" (onHide)=\"closeVariablesPanel()\">\r\n <div class=\"flex flex-column gap-1 p-1 overflow-y-auto scroll-virtual border-round-lg\"\r\n style=\"max-height: 250px; min-width: 250px; background-color: #333333\">\r\n @for(variable of filteredVariables(); track variable.id) {\r\n <div\r\n class=\"p-2 cursor-pointer transition-colors transition-duration-200 border-round-lg text-sm text-white option-dropdown\"\r\n (click)=\"selectVariableFromPanel(variable)\">\r\n @if (showVariableValueFirst()) {\r\n {{ variable.value }} (\r\n <span class=\"text-gray-400\">{{ variable.descricao }}</span> )\r\n } @else {\r\n {{ variable.descricao }} (\r\n <span class=\"text-gray-400\">{{ variable.value }}</span> )\r\n }\r\n </div>\r\n } @empty {\r\n <div class=\"p-2 text-sm text-gray-500\">Nenhuma vari\u00E1vel encontrada.</div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n\r\n<div #buttonNameTooltip class=\"button-name-tooltip\" [class.show]=\"showButtonTooltip()\"\r\n [style.top.px]=\"tooltipPosition().top\" [style.left.px]=\"tooltipPosition().left\">\r\n <div class=\"flex flex-column gap-2 p-3 bg-white border-round-lg shadow-3\" style=\"min-width: 280px\">\r\n <div class=\"flex flex-column gap-1\">\r\n <label class=\"text-sm font-semibold text-gray-700\">Nome do Bot\u00E3o</label>\r\n <input #buttonNameInput type=\"text\" class=\"p-2 border-1 border-gray-300 border-round-md text-sm\"\r\n placeholder=\"Ex: Aceitar Proposta\" [(ngModel)]=\"buttonNameValue\" (keydown.enter)=\"confirmButtonName()\"\r\n (keydown.escape)=\"cancelButtonName()\" />\r\n </div>\r\n <div class=\"flex flex-row gap-2 justify-content-end\">\r\n <button\r\n class=\"px-3 py-2 border-1 border-gray-300 bg-white text-gray-700 border-round-md cursor-pointer text-sm font-medium hover:bg-gray-100 transition-colors\"\r\n (click)=\"cancelButtonName()\">\r\n Cancelar\r\n </button>\r\n <button\r\n class=\"px-3 py-2 border-none bg-blue-600 text-white border-round-md cursor-pointer text-sm font-medium hover:bg-blue-700 transition-colors\"\r\n (click)=\"confirmButtonName()\">\r\n Inserir\r\n </button>\r\n </div>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";:host ::ng-deep .ql-font-roboto{font-family:Roboto,sans-serif}:host ::ng-deep .ql-font-inter{font-family:Inter var,sans-serif}:host ::ng-deep .ql-font-arial{font-family:Arial,Arial,sans-serif}:host ::ng-deep .ql-font-times-new-roman{font-family:Times New Roman,Times,serif}:host ::ng-deep .ql-tooltip.ql-editing[data-mode=video]{transform:translate(40%)}:host ::ng-deep #kv-editor-toolbar{border-radius:6px 6px 0 0;border:1px solid #e5e7eb}:host ::ng-deep #kv-editor{border-radius:0 0 6px 6px;border:1px solid #e5e7eb}.error-border-toolbar{transition:all ease-in .2s;border-top-color:#e24c4c!important;border-bottom-color:#e24c4c!important;border-left-color:#e24c4c!important;border-right-color:#e24c4c!important}.error-border{border-color:#e24c4c!important;transition:all ease-in .2s}:host ::ng-deep .blot-formatter__resize-handle{background:#eaeaea!important}:host ::ng-deep #kv-editor-preview{border-radius:0 0 6px 6px;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper{font-family:Helvetica,Arial,sans-serif;font-size:13px;line-height:1.42;color:#000;padding:12px 15px;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper p{margin:0;padding:0;white-space:pre-wrap}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper *{white-space:pre-wrap}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper strong,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper b{font-weight:700!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper em,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper i{font-style:italic!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper u{text-decoration:underline!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper s,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper strike{text-decoration:line-through!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h1,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h2,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h3,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h4,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h5,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h6{font-weight:700;margin:0;padding:0}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h1{font-size:2em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h2{font-size:1.5em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h3{font-size:1.17em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h4{font-size:1em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h5{font-size:.83em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h6{font-size:.67em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper a{color:#06c;text-decoration:underline}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper code{background-color:#f0f0f0;border-radius:3px;padding:2px 4px;font-family:monospace;font-size:85%}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper pre{background-color:#23241f;color:#f8f8f2;overflow:visible;border-radius:3px;padding:5px 10px;white-space:pre-wrap;margin-bottom:5px;margin-top:5px}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper pre code{background-color:transparent;border-radius:0;color:inherit;font-size:100%;padding:0}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper ol,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper ul{margin:0;padding-left:1.5em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper img{max-width:100%;height:auto}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table{width:100%;border-collapse:collapse;margin-bottom:1rem}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table th,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table td{border:1px solid #e5e7eb;padding:.5rem;text-align:left}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table th{background-color:#f9fafb;font-weight:600}:ng-deep p{text-align:justify!important}:host ::ng-deep .editor-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffff80;display:flex;justify-content:center;align-items:center;z-index:100000;border-radius:inherit}:host ::ng-deep .ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}:host ::ng-deep .ql-container.ql-disabled .ql-tooltip{visibility:hidden}:host ::ng-deep .ql-container:not(.ql-disabled) li[data-list=checked]>.ql-ui,:host ::ng-deep .ql-container:not(.ql-disabled) li[data-list=unchecked]>.ql-ui{cursor:pointer}:host ::ng-deep .ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}:host ::ng-deep .ql-clipboard p{margin:0;padding:0}:host ::ng-deep .ql-editor{box-sizing:border-box;counter-reset:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;line-height:1.42;height:100%;outline:none;overflow-y:auto;padding:12px 15px;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}:host ::ng-deep .ql-editor>*{cursor:text}:host ::ng-deep .ql-editor p,:host ::ng-deep .ql-editor ol,:host ::ng-deep .ql-editor pre,:host ::ng-deep .ql-editor blockquote,:host ::ng-deep .ql-editor h1,:host ::ng-deep .ql-editor h2,:host ::ng-deep .ql-editor h3,:host ::ng-deep .ql-editor h4,:host ::ng-deep .ql-editor h5,:host ::ng-deep .ql-editor h6{margin:0;padding:0}@supports (counter-set: none){:host ::ng-deep .ql-editor p,:host ::ng-deep .ql-editor h1,:host ::ng-deep .ql-editor h2,:host ::ng-deep .ql-editor h3,:host ::ng-deep .ql-editor h4,:host ::ng-deep .ql-editor h5,:host ::ng-deep .ql-editor h6{counter-set:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor p,:host ::ng-deep .ql-editor h1,:host ::ng-deep .ql-editor h2,:host ::ng-deep .ql-editor h3,:host ::ng-deep .ql-editor h4,:host ::ng-deep .ql-editor h5,:host ::ng-deep .ql-editor h6{counter-reset:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}:host ::ng-deep .ql-editor table{border-collapse:collapse}:host ::ng-deep .ql-editor td{border:1px solid #000;padding:2px 5px}:host ::ng-deep .ql-editor ol{padding-left:1.5em}:host ::ng-deep .ql-editor li{list-style-type:none;padding-left:1.5em;position:relative}:host ::ng-deep .ql-editor li>.ql-ui:before{display:inline-block;margin-left:-1.5em;margin-right:.3em;text-align:right;white-space:nowrap;width:1.2em}:host ::ng-deep .ql-editor li[data-list=checked]>.ql-ui,:host ::ng-deep .ql-editor li[data-list=unchecked]>.ql-ui{color:#777}:host ::ng-deep .ql-editor li[data-list=bullet]>.ql-ui:before{content:\"\\2022\"}:host ::ng-deep .ql-editor li[data-list=checked]>.ql-ui:before{content:\"\\2611\"}:host ::ng-deep .ql-editor li[data-list=unchecked]>.ql-ui:before{content:\"\\2610\"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list]{counter-set:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list]{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered]{counter-increment:list-0}:host ::ng-deep .ql-editor li[data-list=ordered]>.ql-ui:before{content:counter(list-0,decimal) \". \"}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-1{counter-increment:list-1}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-1>.ql-ui:before{content:counter(list-1,lower-alpha) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-1{counter-set:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-2{counter-increment:list-2}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-2>.ql-ui:before{content:counter(list-2,lower-roman) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-2{counter-set:list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-3{counter-increment:list-3}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-3>.ql-ui:before{content:counter(list-3,decimal) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-3{counter-set:list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-4{counter-increment:list-4}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-4>.ql-ui:before{content:counter(list-4,lower-alpha) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-4{counter-set:list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-5{counter-increment:list-5}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-5>.ql-ui:before{content:counter(list-5,lower-roman) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-5{counter-set:list-6 list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-6{counter-increment:list-6}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-6>.ql-ui:before{content:counter(list-6,decimal) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-6{counter-set:list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-6{counter-reset:list-7 list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-7{counter-increment:list-7}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-7>.ql-ui:before{content:counter(list-7,lower-alpha) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-7{counter-set:list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-7{counter-reset:list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-8{counter-increment:list-8}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-8>.ql-ui:before{content:counter(list-8,lower-roman) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-8{counter-set:list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-8{counter-reset:list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-9{counter-increment:list-9}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-9>.ql-ui:before{content:counter(list-9,decimal) \". \"}:host ::ng-deep .ql-editor .ql-indent-1:not(.ql-direction-rtl){padding-left:3em}:host ::ng-deep .ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}:host ::ng-deep .ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}:host ::ng-deep .ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}:host ::ng-deep .ql-editor .ql-indent-2:not(.ql-direction-rtl){padding-left:6em}:host ::ng-deep .ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}:host ::ng-deep .ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}:host ::ng-deep .ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}:host ::ng-deep .ql-editor .ql-indent-3:not(.ql-direction-rtl){padding-left:9em}:host ::ng-deep .ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}:host ::ng-deep .ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}:host ::ng-deep .ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}:host ::ng-deep .ql-editor .ql-indent-4:not(.ql-direction-rtl){padding-left:12em}:host ::ng-deep .ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}:host ::ng-deep .ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}:host ::ng-deep .ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}:host ::ng-deep .ql-editor .ql-indent-5:not(.ql-direction-rtl){padding-left:15em}:host ::ng-deep .ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}:host ::ng-deep .ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}:host ::ng-deep .ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}:host ::ng-deep .ql-editor .ql-indent-6:not(.ql-direction-rtl){padding-left:18em}:host ::ng-deep .ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}:host ::ng-deep .ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}:host ::ng-deep .ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}:host ::ng-deep .ql-editor .ql-indent-7:not(.ql-direction-rtl){padding-left:21em}:host ::ng-deep .ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}:host ::ng-deep .ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}:host ::ng-deep .ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}:host ::ng-deep .ql-editor .ql-indent-8:not(.ql-direction-rtl){padding-left:24em}:host ::ng-deep .ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}:host ::ng-deep .ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}:host ::ng-deep .ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}:host ::ng-deep .ql-editor .ql-indent-9:not(.ql-direction-rtl){padding-left:27em}:host ::ng-deep .ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}:host ::ng-deep .ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}:host ::ng-deep .ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}:host ::ng-deep .ql-editor li.ql-direction-rtl{padding-right:1.5em}:host ::ng-deep .ql-editor li.ql-direction-rtl>.ql-ui:before{margin-left:.3em;margin-right:-1.5em;text-align:left}:host ::ng-deep .ql-editor table{table-layout:fixed;width:100%}:host ::ng-deep .ql-editor table td{outline:none}:host ::ng-deep .ql-editor .ql-code-block-container{font-family:monospace}:host ::ng-deep .ql-editor .ql-video{display:block;max-width:100%}:host ::ng-deep .ql-editor .ql-video.ql-align-center{margin:0 auto}:host ::ng-deep .ql-editor .ql-video.ql-align-right{margin:0 0 0 auto}:host ::ng-deep .ql-editor .ql-bg-black{background-color:#000}:host ::ng-deep .ql-editor .ql-bg-red{background-color:#e60000}:host ::ng-deep .ql-editor .ql-bg-orange{background-color:#f90}:host ::ng-deep .ql-editor .ql-bg-yellow{background-color:#ff0}:host ::ng-deep .ql-editor .ql-bg-green{background-color:#008a00}:host ::ng-deep .ql-editor .ql-bg-blue{background-color:#06c}:host ::ng-deep .ql-editor .ql-bg-purple{background-color:#93f}:host ::ng-deep .ql-editor .ql-color-white{color:#fff}:host ::ng-deep .ql-editor .ql-color-red{color:#e60000}:host ::ng-deep .ql-editor .ql-color-orange{color:#f90}:host ::ng-deep .ql-editor .ql-color-yellow{color:#ff0}:host ::ng-deep .ql-editor .ql-color-green{color:#008a00}:host ::ng-deep .ql-editor .ql-color-blue{color:#06c}:host ::ng-deep .ql-editor .ql-color-purple{color:#93f}:host ::ng-deep .ql-editor .ql-font-serif{font-family:Georgia,Times New Roman,serif}:host ::ng-deep .ql-editor .ql-font-monospace{font-family:Monaco,Courier New,monospace}:host ::ng-deep .ql-editor .ql-size-small{font-size:.75em}:host ::ng-deep .ql-editor .ql-size-large{font-size:1.5em}:host ::ng-deep .ql-editor .ql-size-huge{font-size:2.5em}:host ::ng-deep .ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}:host ::ng-deep .ql-editor .ql-align-center{text-align:center}:host ::ng-deep .ql-editor .ql-align-justify{text-align:justify}:host ::ng-deep .ql-editor .ql-align-right{text-align:right}:host ::ng-deep .ql-editor .ql-ui{position:absolute}:host ::ng-deep .ql-editor.ql-blank:before{color:#0009;content:attr(data-placeholder);font-style:italic;left:15px;pointer-events:none;position:absolute;right:15px}:host ::ng-deep .ql-snow.ql-toolbar:after,:host ::ng-deep .ql-snow .ql-toolbar:after{clear:both;content:\"\";display:table}:host ::ng-deep .ql-snow.ql-toolbar button,:host ::ng-deep .ql-snow .ql-toolbar button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}:host ::ng-deep .ql-snow.ql-toolbar button svg,:host ::ng-deep .ql-snow .ql-toolbar button svg{float:left;height:100%}:host ::ng-deep .ql-snow.ql-toolbar button:active:hover,:host ::ng-deep .ql-snow .ql-toolbar button:active:hover{outline:none}:host ::ng-deep .ql-snow.ql-toolbar input.ql-image[type=file],:host ::ng-deep .ql-snow .ql-toolbar input.ql-image[type=file]{display:none}:host ::ng-deep .ql-snow.ql-toolbar button:hover,:host ::ng-deep .ql-snow .ql-toolbar button:hover,:host ::ng-deep .ql-snow.ql-toolbar button:focus,:host ::ng-deep .ql-snow .ql-toolbar button:focus,:host ::ng-deep .ql-snow.ql-toolbar button.ql-active,:host ::ng-deep .ql-snow .ql-toolbar button.ql-active,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label:hover,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label:hover,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label.ql-active,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label.ql-active,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item:hover,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item:hover,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item.ql-selected,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item.ql-selected{color:#06c}:host ::ng-deep .ql-snow.ql-toolbar button:hover .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button:hover .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar button:focus .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button:focus .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar button.ql-active .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button.ql-active .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill,:host ::ng-deep .ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill,:host ::ng-deep .ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill{fill:#06c}:host ::ng-deep .ql-snow.ql-toolbar button:hover .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar button:hover .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar button:focus .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar button:focus .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar button.ql-active .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar button.ql-active .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar button:hover .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar button:hover .ql-stroke-miter,:host ::ng-deep .ql-snow.ql-toolbar button:focus .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar button:focus .ql-stroke-miter,:host ::ng-deep .ql-snow.ql-toolbar button.ql-active .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar button.ql-active .ql-stroke-miter,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter{stroke:#06c}@media (pointer: coarse){:host ::ng-deep .ql-snow.ql-toolbar button:hover:not(.ql-active),:host ::ng-deep .ql-snow .ql-toolbar button:hover:not(.ql-active){color:#444}:host ::ng-deep .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill{fill:#444}:host ::ng-deep .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter{stroke:#444}}:host ::ng-deep .ql-snow{box-sizing:border-box}:host ::ng-deep .ql-snow *{box-sizing:border-box}:host ::ng-deep .ql-snow .ql-hidden{display:none}:host ::ng-deep .ql-snow .ql-out-bottom,:host ::ng-deep .ql-snow .ql-out-top{visibility:hidden}:host ::ng-deep .ql-snow .ql-tooltip{position:absolute;transform:translateY(10px)}:host ::ng-deep .ql-snow .ql-tooltip a{cursor:pointer;text-decoration:none}:host ::ng-deep .ql-snow .ql-tooltip.ql-flip{transform:translateY(-10px)}:host ::ng-deep .ql-snow .ql-formats{display:inline-block;vertical-align:middle}:host ::ng-deep .ql-snow .ql-formats:after{clear:both;content:\"\";display:table}:host ::ng-deep .ql-snow .ql-stroke{fill:none;stroke:#444;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}:host ::ng-deep .ql-snow .ql-stroke-miter{fill:none;stroke:#444;stroke-miterlimit:10;stroke-width:2}:host ::ng-deep .ql-snow .ql-fill,:host ::ng-deep .ql-snow .ql-stroke.ql-fill{fill:#444}:host ::ng-deep .ql-snow .ql-empty{fill:none}:host ::ng-deep .ql-snow .ql-even{fill-rule:evenodd}:host ::ng-deep .ql-snow .ql-thin,:host ::ng-deep .ql-snow .ql-stroke.ql-thin{stroke-width:1}:host ::ng-deep .ql-snow .ql-transparent{opacity:.4}:host ::ng-deep .ql-snow .ql-direction svg:last-child{display:none}:host ::ng-deep .ql-snow .ql-direction.ql-active svg:last-child{display:inline}:host ::ng-deep .ql-snow .ql-direction.ql-active svg:first-child{display:none}:host ::ng-deep .ql-snow .ql-editor h1{font-size:2em}:host ::ng-deep .ql-snow .ql-editor h2{font-size:1.5em}:host ::ng-deep .ql-snow .ql-editor h3{font-size:1.17em}:host ::ng-deep .ql-snow .ql-editor h4{font-size:1em}:host ::ng-deep .ql-snow .ql-editor h5{font-size:.83em}:host ::ng-deep .ql-snow .ql-editor h6{font-size:.67em}:host ::ng-deep .ql-snow .ql-editor a{text-decoration:underline}:host ::ng-deep .ql-snow .ql-editor blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}:host ::ng-deep .ql-snow .ql-editor code,:host ::ng-deep .ql-snow .ql-editor .ql-code-block-container{background-color:#f0f0f0;border-radius:3px}:host ::ng-deep .ql-snow .ql-editor .ql-code-block-container{margin-bottom:5px;margin-top:5px;padding:5px 10px}:host ::ng-deep .ql-snow .ql-editor code{font-size:85%;padding:2px 4px}:host ::ng-deep .ql-snow .ql-editor .ql-code-block-container{background-color:#23241f;color:#f8f8f2;overflow:visible}:host ::ng-deep .ql-snow .ql-editor img{max-width:100%}:host ::ng-deep .ql-snow .ql-picker{color:#444;display:inline-block;float:left;font-size:14px;font-weight:500;height:24px;position:relative;vertical-align:middle}:host ::ng-deep .ql-snow .ql-picker-label{cursor:pointer;display:inline-block;height:100%;padding-left:8px;padding-right:2px;position:relative;width:100%}:host ::ng-deep .ql-snow .ql-picker-label:before{display:inline-block;line-height:22px}:host ::ng-deep .ql-snow .ql-picker-options{background-color:#fff;display:none;min-width:100%;padding:4px 8px;position:absolute;white-space:nowrap}:host ::ng-deep .ql-snow .ql-picker-options .ql-picker-item{cursor:pointer;display:block;padding-bottom:5px;padding-top:5px}:host ::ng-deep .ql-snow .ql-picker.ql-expanded .ql-picker-label{color:#ccc;z-index:2}:host ::ng-deep .ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill{fill:#ccc}:host ::ng-deep .ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke{stroke:#ccc}:host ::ng-deep .ql-snow .ql-picker.ql-expanded .ql-picker-options{display:block;margin-top:-1px;top:100%;z-index:1}:host ::ng-deep .ql-snow .ql-color-picker,:host ::ng-deep .ql-snow .ql-icon-picker{width:28px}:host ::ng-deep .ql-snow .ql-color-picker .ql-picker-label,:host ::ng-deep .ql-snow .ql-icon-picker .ql-picker-label{padding:2px 4px}:host ::ng-deep .ql-snow .ql-color-picker .ql-picker-label svg,:host ::ng-deep .ql-snow .ql-icon-picker .ql-picker-label svg{right:4px}:host ::ng-deep .ql-snow .ql-icon-picker .ql-picker-options{padding:4px 0}:host ::ng-deep .ql-snow .ql-icon-picker .ql-picker-item{height:24px;width:24px;padding:2px 4px}:host ::ng-deep .ql-snow .ql-color-picker .ql-picker-options{padding:3px 5px;width:152px}:host ::ng-deep .ql-snow .ql-color-picker .ql-picker-item{border:1px solid transparent;float:left;height:16px;margin:2px;padding:0;width:16px}:host ::ng-deep .ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg{position:absolute;margin-top:-9px;right:0;top:50%;width:18px}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=\"\"]):before,:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=\"\"]):before,:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=\"\"]):before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=\"\"]):before,:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=\"\"]):before,:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=\"\"]):before{content:attr(data-label)}:host ::ng-deep .ql-snow .ql-picker.ql-header{width:98px}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label:before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item:before{content:\"Normal\"}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"1\"]:before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]:before{content:\"Heading 1\"}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"2\"]:before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]:before{content:\"Heading 2\"}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"3\"]:before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]:before{content:\"Heading 3\"}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"4\"]:before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]:before{content:\"Heading 4\"}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"5\"]:before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]:before{content:\"Heading 5\"}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"6\"]:before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]:before{content:\"Heading 6\"}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]:before{font-size:2em}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]:before{font-size:1.5em}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]:before{font-size:1.17em}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]:before{font-size:1em}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]:before{font-size:.83em}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]:before{font-size:.67em}:host ::ng-deep .ql-snow .ql-picker.ql-font{width:108px}:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-label:before,:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-item:before{content:\"Sans Serif\"}:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]:before,:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]:before{content:\"Serif\"}:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]:before,:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before{content:\"Monospace\"}:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]:before{font-family:Georgia,Times New Roman,serif}:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before{font-family:Monaco,Courier New,monospace}:host ::ng-deep .ql-snow .ql-picker.ql-size{width:98px}:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-label:before,:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item:before{content:\"Normal\"}:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]:before,:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]:before{content:\"Small\"}:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]:before,:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]:before{content:\"Large\"}:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]:before,:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]:before{content:\"Huge\"}:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]:before{font-size:10px}:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]:before{font-size:18px}:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]:before{font-size:32px}:host ::ng-deep .ql-snow .ql-color-picker.ql-background .ql-picker-item{background-color:#fff}:host ::ng-deep .ql-snow .ql-color-picker.ql-color .ql-picker-item{background-color:#000}:host ::ng-deep .ql-code-block-container{position:relative}:host ::ng-deep .ql-code-block-container .ql-ui{right:5px;top:5px}:host ::ng-deep .ql-toolbar.ql-snow{border:1px solid #ccc;box-sizing:border-box;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding:8px}:host ::ng-deep .ql-toolbar.ql-snow .ql-formats{margin-right:15px}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker-label{border:1px solid transparent}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker-options{border:1px solid transparent;box-shadow:#0003 0 2px 8px}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label{border-color:#ccc}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options{border-color:#ccc}:host ::ng-deep .ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected,:host ::ng-deep .ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover{border-color:#000}:host ::ng-deep .ql-toolbar.ql-snow+.ql-container.ql-snow{border-top:0}:host ::ng-deep .ql-snow .ql-tooltip{background-color:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ddd;color:#444;padding:5px 12px;white-space:nowrap}:host ::ng-deep .ql-snow .ql-tooltip:before{content:\"Visit URL:\";line-height:26px;margin-right:8px}:host ::ng-deep .ql-snow .ql-tooltip input[type=text]{display:none;border:1px solid #ccc;font-size:13px;height:26px;margin:0;padding:3px 5px;width:170px}:host ::ng-deep .ql-snow .ql-tooltip a.ql-preview{display:inline-block;max-width:200px;overflow-x:hidden;text-overflow:ellipsis;vertical-align:top}:host ::ng-deep .ql-snow .ql-tooltip a.ql-action:after{border-right:1px solid #ccc;content:\"Edit\";margin-left:16px;padding-right:8px}:host ::ng-deep .ql-snow .ql-tooltip a.ql-remove:before{content:\"Remove\";margin-left:8px}:host ::ng-deep .ql-snow .ql-tooltip a{line-height:26px}:host ::ng-deep .ql-snow .ql-tooltip.ql-editing a.ql-preview,:host ::ng-deep .ql-snow .ql-tooltip.ql-editing a.ql-remove{display:none}:host ::ng-deep .ql-snow .ql-tooltip.ql-editing input[type=text]{display:inline-block}:host ::ng-deep .ql-snow .ql-tooltip.ql-editing a.ql-action:after{border-right:0;content:\"Save\";padding-right:0}:host ::ng-deep .ql-snow .ql-tooltip[data-mode=link]:before{content:\"Enter link:\"}:host ::ng-deep .ql-snow .ql-tooltip[data-mode=formula]:before{content:\"Enter formula:\"}:host ::ng-deep .ql-snow .ql-tooltip[data-mode=video]:before{content:\"Enter video:\"}:host ::ng-deep .ql-snow a{color:#06c}:host ::ng-deep .ql-container.ql-snow{border:1px solid #ccc}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:after{background:#002542}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:before{background:#002542}::ng-deep .scroll-virtual{overflow-x:hidden}::ng-deep .scroll-virtual::-webkit-scrollbar{width:8px}::ng-deep .scroll-virtual::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scroll-virtual::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scroll-virtual:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scroll-virtual::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.option-dropdown{background-color:#333;transition:all ease-in .2s}.option-dropdown:hover{background-color:#444}.button-name-tooltip{position:fixed;z-index:10000;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all .2s ease-in-out;pointer-events:none}.button-name-tooltip.show{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.button-name-tooltip input{outline:none;transition:border-color .2s}.button-name-tooltip input:focus{border-color:#3b82f6!important;box-shadow:0 0 0 3px #3b82f61a}.button-name-tooltip button{transition:all .2s}.button-name-tooltip button:hover{transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.button-name-tooltip button:active{transform:translateY(0)}.kv-editor-fullscreen{position:fixed!important;top:0!important;left:0!important;width:100vw!important;height:100vh!important;max-height:100vh!important;z-index:9999!important;background-color:var(--surface-card, #ffffff)!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.KvErrorComponent, selector: "kv-error", inputs: ["formControl", "hasError"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i8.ProgressBar, selector: "p-progressBar", inputs: ["value", "showValue", "styleClass", "style", "unit", "mode", "color"] }, { kind: "component", type: i9.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i10.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i11.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled", "items", "popup", "popupIcon"], outputs: ["iconChange", "onClick"] }, { kind: "component", type: i12.KvTagsComponent, selector: "kv-tags", inputs: ["tags", "hover", "clickable"], outputs: ["onClickTag"] }] }); }
|
|
712
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvEditorComponent, selector: "kv-editor", inputs: { canvaHeigth: { classPropertyName: "canvaHeigth", publicName: "canvaHeigth", isSignal: false, isRequired: false, transformFunction: null }, contentType: { classPropertyName: "contentType", publicName: "contentType", isSignal: false, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: false, isRequired: false, transformFunction: null }, enablePreviewMode: { classPropertyName: "enablePreviewMode", publicName: "enablePreviewMode", isSignal: true, isRequired: false, transformFunction: null }, showVariableValuesInPreview: { classPropertyName: "showVariableValuesInPreview", publicName: "showVariableValuesInPreview", isSignal: true, isRequired: false, transformFunction: null }, showVariableValueFirst: { classPropertyName: "showVariableValueFirst", publicName: "showVariableValueFirst", isSignal: true, isRequired: false, transformFunction: null }, relatorios: { classPropertyName: "relatorios", publicName: "relatorios", isSignal: true, isRequired: false, transformFunction: null }, idRelatorioInitial: { classPropertyName: "idRelatorioInitial", publicName: "idRelatorioInitial", isSignal: true, isRequired: false, transformFunction: null }, printButton: { classPropertyName: "printButton", publicName: "printButton", isSignal: true, isRequired: false, transformFunction: null }, labelEmptyDropdown: { classPropertyName: "labelEmptyDropdown", publicName: "labelEmptyDropdown", isSignal: true, isRequired: false, transformFunction: null }, instrucoesTemplate: { classPropertyName: "instrucoesTemplate", publicName: "instrucoesTemplate", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disabledEditor: { classPropertyName: "disabledEditor", publicName: "disabledEditor", isSignal: true, isRequired: false, transformFunction: null }, showHeaderButtons: { classPropertyName: "showHeaderButtons", publicName: "showHeaderButtons", isSignal: true, isRequired: false, transformFunction: null }, showAlphaCrmButtons: { classPropertyName: "showAlphaCrmButtons", publicName: "showAlphaCrmButtons", isSignal: true, isRequired: false, transformFunction: null }, showAlphaContratoButtons: { classPropertyName: "showAlphaContratoButtons", publicName: "showAlphaContratoButtons", isSignal: true, isRequired: false, transformFunction: null }, enableButtonInsert: { classPropertyName: "enableButtonInsert", publicName: "enableButtonInsert", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onTextChange: "onTextChange", onSelectionChange: "onSelectionChange", outputRaw: "outputRaw", outputHtml: "outputHtml", previewHtmlOutput: "previewHtmlOutput", onCustomButtonClick: "onCustomButtonClick", idRelatorioInitial: "idRelatorioInitialChange" }, providers: ComponentProviders(KvEditorComponent), viewQueries: [{ propertyName: "opVariables", first: true, predicate: ["opVariables"], descendants: true }, { propertyName: "mentionAnchor", first: true, predicate: ["mentionAnchor"], descendants: true }, { propertyName: "buttonNameTooltip", first: true, predicate: ["buttonNameTooltip"], descendants: true }, { propertyName: "buttonNameInput", first: true, predicate: ["buttonNameInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"kv-editor-container h-full w-full max-h-full flex flex-column overflow-hidden\"\r\n [class.pointer-events-none]=\"disabledEditor()\"\r\n [class.opacity-60]=\"disabledEditor()\"\r\n>\r\n <div\r\n #editor\r\n id=\"kv-editor-toolbar\"\r\n [ngClass]=\"{ 'error-border-toolbar': hasControlError() }\"\r\n class=\"{{ showHeader() ? 'flex' : 'hidden' }} flex-column flex-initial\"\r\n >\r\n @if(showHeaderButtons()) {\r\n @if(relatorios().length > 0) {\r\n <div class=\"flex flex-row justify-content-between {{(readonly() || disabledEditor()) && 'pointer-events-none opacity-90'}}\">\r\n <div class=\"flex flex-row gap-2\">\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"op.toggle($event)\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-green-600 font-medium\"\r\n >\r\n contract\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">{{\r\n !clearedTemplate()\r\n ? relatorio()?.label || labelEmptyDropdown()\r\n : labelEmptyDropdown()\r\n }}</span>\r\n <span class=\"material-symbols-outlined text-lg\">\r\n keyboard_arrow_down\r\n </span>\r\n </div>\r\n\r\n @if(!clearedTemplate()) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"clearTemplate()\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-orange-600 font-medium\"\r\n [pTooltip]=\"'Limpar Template'\"\r\n >\r\n layers_clear\r\n </span>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"showInstrucoes()\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-blue-600 font-medium\"\r\n >\r\n info\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Instru\u00E7\u00F5es</span>\r\n </div>\r\n </div>\r\n\r\n <!-- @if(printButton()) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"openRelatorio()\"\r\n >\r\n <span class=\"material-symbols-outlined text-lg font-medium\">\r\n print\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Imprimir</span>\r\n </div>\r\n } -->\r\n </div>\r\n\r\n <p-divider class=\"w-full\"></p-divider>\r\n\r\n }\r\n }\r\n \r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between w-full flex-initial\"\r\n >\r\n @if(isLoading()) {\r\n\r\n <div class=\"flex flex-row align-items-center gap-3 w-full\">\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex-row align-items-center flex-wrap gap-2 {{\r\n isLoading() ? 'hidden' : 'flex'\r\n }} w-full\"\r\n >\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-font\">\r\n <option value=\"roboto\">Roboto</option>\r\n <option value=\"arial\">Arial</option>\r\n <option value=\"times-new-roman\">Times New Roman</option>\r\n <option value=\"monospace\">Monospace</option>\r\n <option value=\"inter\">Inter</option>\r\n <option selected>Sans Serif</option>\r\n <option value=\"serif\">Serif</option>\r\n </select>\r\n\r\n <select class=\"ql-header\">\r\n <option value=\"1\">Titulo</option>\r\n <option value=\"2\">Subtitulo</option>\r\n <option selected>Normal</option>\r\n </select>\r\n\r\n <span class=\"ql-format-group\">\r\n <select title=\"Size\" class=\"ql-size\">\r\n <option value=\"15px\">15px</option>\r\n <option value=\"20px\">20px</option>\r\n <option value=\"30px\">30px</option>\r\n <option value=\"40px\">40px</option>\r\n <option value=\"50px\">50px</option>\r\n <option value=\"70px\">70px</option>\r\n <option value=\"90px\">90px</option>\r\n </select>\r\n </span>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-bold\" pTooltip=\"Negrito\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-italic\" pTooltip=\"It\u00E1lico\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-underline\" pTooltip=\"Sublinhado\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-strike\" pTooltip=\"Tachado\" tooltipPosition=\"top\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-color\" pTooltip=\"Cor da fonte\" tooltipPosition=\"top\"></select>\r\n <select class=\"ql-background\" pTooltip=\"Cor de fundo\" tooltipPosition=\"top\"></select>\r\n </span>\r\n\r\n @if(true) {\r\n <!-- <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-header\" value=\"1\"></button>\r\n <button class=\"ql-header\" value=\"2\"></button>\r\n </span> -->\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-link\" pTooltip=\"Inserir link\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-image\" pTooltip=\"Inserir imagem\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-video\" pTooltip=\"Inserir v\u00EDdeo\" tooltipPosition=\"top\"></button>\r\n\r\n @if(enableButtonInsert()) {\r\n <button id=\"insert-custom-button\" pTooltip=\"Inserir bot\u00E3o\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\" style=\"transform: translate(0px, -1.7px); font-size: 22px;\">buttons_alt</span>\r\n </button>\r\n }\r\n \r\n @if(showAlphaCrmButtons()) {\r\n <button id=\"btn-alpha-aceitar\" pTooltip=\"Inserir bot\u00E3o Aceitar\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\" style=\"transform: translate(0px, -1.7px); font-size: 22px;\">variable_add</span>\r\n </button>\r\n\r\n <button id=\"btn-alpha-cancelar\" pTooltip=\"Inserir bot\u00E3o Cancelar\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\" style=\"transform: translate(0px, -1.7px); font-size: 22px;\">variable_remove</span>\r\n </button>\r\n\r\n <button id=\"btn-alpha-aceitar-assinar\" pTooltip=\"Inserir bot\u00E3o Aceitar e Assinar Contrato\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\" style=\"transform: translate(0px, -1px); font-size: 20px;\">new_label</span>\r\n </button>\r\n }\r\n\r\n @if(showAlphaContratoButtons()) {\r\n <button id=\"btn-alpha-contrato-assinar\" pTooltip=\"Inserir bot\u00E3o Assinar Contrato\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\" style=\"transform: translate(0px, -1.7px); font-size: 20px;\">contract_edit</span>\r\n </button>\r\n\r\n <button id=\"btn-alpha-contrato-recusar\" pTooltip=\"Inserir bot\u00E3o Recusar Contrato\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\" style=\"transform: translate(0px, -1.7px); font-size: 20px;\">contract_delete</span>\r\n </button>\r\n }\r\n\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-list\" value=\"ordered\" pTooltip=\"Lista ordenada\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-list\" value=\"bullet\" pTooltip=\"Lista com marcadores\" tooltipPosition=\"top\"></button>\r\n <select class=\"ql-align\" pTooltip=\"Alinhamento\" tooltipPosition=\"top\"></select>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n style=\"height: 3px; border-top: none; border-bottom: none\"\r\n [style.borderRight]=\"showHeader() ? '1px solid #e5e7eb' : 'none'\"\r\n [style.borderLeft]=\"showHeader() ? '1px solid #e5e7eb' : 'none'\"\r\n >\r\n @if(isLoadingPdf()) {\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" />\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-row flex-1 gap-0 overflow-auto\">\r\n <div\r\n id=\"kv-editor\"\r\n class=\"overflow-auto flex-1 scrollstyle\"\r\n [ngClass]=\"{\r\n 'error-border': hasControlError(),\r\n 'pointer-events-none opacity-60': isLoadingPdf()\r\n }\"\r\n [style.borderTop]=\"showHeader() ? 'none' : '1px solid #e5e7eb'\"\r\n [style.borderRight]=\"enablePreviewMode() ? 'none' : '1px solid #e5e7eb'\"\r\n ></div>\r\n\r\n @if(enablePreviewMode()) {\r\n <div class=\"flex flex-column flex-1\">\r\n <div \r\n class=\"flex align-items-center gap-2 px-3 py-2\" \r\n [style.borderRight]=\"'1px solid #e5e7eb'\"\r\n [style.borderLeft]=\"'1px solid #e5e7eb'\"\r\n >\r\n <span class=\"material-symbols-outlined text-blue-600 text-lg\">visibility</span>\r\n <span class=\"font-semibold text-gray-700 text-sm\">Preview</span>\r\n </div>\r\n \r\n <div\r\n id=\"kv-editor-preview\"\r\n class=\"overflow-auto flex-1 scrollstyle\"\r\n [innerHTML]=\"getPreviewContent\"\r\n [style.border]=\"'1px solid #e5e7eb'\"\r\n ></div>\r\n </div>\r\n }\r\n </div>\r\n\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n<!-- <link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css\" rel=\"stylesheet\" /> -->\r\n<link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\" />\r\n<script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\"></script>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.bubble.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css\"\r\n/>\r\n\r\n<p-overlayPanel #op styleClass=\"overflow-hidden\">\r\n <div\r\n class=\"grid m-0 gap-2 p-2 max-w-20rem overflow-y-auto scrollstyle\"\r\n style=\"max-height: 16rem\"\r\n >\r\n @for(item of relatorios(); track $index) {\r\n <div\r\n class=\"col-12 cursor-pointer hover:bg-gray-100 transition-colors transition-duration-200 border-round-lg shadow-2 flex flex-column gap-2\"\r\n (click)=\"setRelatorio(item)\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 justify-content-between\"\r\n >\r\n <span class=\"text-sm font-medium w-full\">{{ item.label }}</span>\r\n\r\n <kv-tags\r\n class=\"transition-opacity transition-duration-300 {{\r\n item?.id == idRelatorioSelected() ? 'opacity-100' : 'opacity-0'\r\n }}\"\r\n [tags]=\"[{ label: 'Selecionado', severity: 'primary' }]\"\r\n ></kv-tags>\r\n </div>\r\n <span class=\"text-xs text-gray-500\">{{ item.descricao }}</span>\r\n </div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n\r\n<div class=\"kv-editor-container flex flex-column overflow-hidden relative\">\r\n <div\r\n #mentionAnchor\r\n style=\"position: fixed; width: 1px; height: 1px; opacity: 0\"\r\n ></div>\r\n</div>\r\n\r\n<p-overlayPanel\r\n #opVariables\r\n [appendTo]=\"'body'\"\r\n (onHide)=\"closeVariablesPanel()\"\r\n>\r\n <div\r\n class=\"flex flex-column gap-1 p-1 overflow-y-auto scroll-virtual border-round-lg\"\r\n style=\"max-height: 250px; min-width: 250px; background-color: #333333\"\r\n >\r\n @for(variable of filteredVariables(); track variable.id) {\r\n <div\r\n class=\"p-2 cursor-pointer transition-colors transition-duration-200 border-round-lg text-sm text-white option-dropdown\"\r\n (click)=\"selectVariableFromPanel(variable)\"\r\n >\r\n @if (showVariableValueFirst()) {\r\n {{ variable.value }} (\r\n <span class=\"text-gray-400\">{{ variable.descricao }}</span> )\r\n } @else {\r\n {{ variable.descricao }} (\r\n <span class=\"text-gray-400\">{{ variable.value }}</span> )\r\n }\r\n </div>\r\n } @empty {\r\n <div class=\"p-2 text-sm text-gray-500\">Nenhuma vari\u00E1vel encontrada.</div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n\r\n<div\r\n #buttonNameTooltip\r\n class=\"button-name-tooltip\"\r\n [class.show]=\"showButtonTooltip()\"\r\n [style.top.px]=\"tooltipPosition().top\"\r\n [style.left.px]=\"tooltipPosition().left\"\r\n>\r\n <div class=\"flex flex-column gap-2 p-3 bg-white border-round-lg shadow-3\" style=\"min-width: 280px\">\r\n <div class=\"flex flex-column gap-1\">\r\n <label class=\"text-sm font-semibold text-gray-700\">Nome do Bot\u00E3o</label>\r\n <input\r\n #buttonNameInput\r\n type=\"text\"\r\n class=\"p-2 border-1 border-gray-300 border-round-md text-sm\"\r\n placeholder=\"Ex: Aceitar Proposta\"\r\n [(ngModel)]=\"buttonNameValue\"\r\n (keydown.enter)=\"confirmButtonName()\"\r\n (keydown.escape)=\"cancelButtonName()\"\r\n />\r\n </div>\r\n <div class=\"flex flex-row gap-2 justify-content-end\">\r\n <button\r\n class=\"px-3 py-2 border-1 border-gray-300 bg-white text-gray-700 border-round-md cursor-pointer text-sm font-medium hover:bg-gray-100 transition-colors\"\r\n (click)=\"cancelButtonName()\"\r\n >\r\n Cancelar\r\n </button>\r\n <button\r\n class=\"px-3 py-2 border-none bg-blue-600 text-white border-round-md cursor-pointer text-sm font-medium hover:bg-blue-700 transition-colors\"\r\n (click)=\"confirmButtonName()\"\r\n >\r\n Inserir\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep .ql-font-roboto{font-family:Roboto,sans-serif}:host ::ng-deep .ql-font-inter{font-family:Inter var,sans-serif}:host ::ng-deep .ql-font-arial{font-family:Arial,Arial,sans-serif}:host ::ng-deep .ql-font-times-new-roman{font-family:Times New Roman,Times,serif}:host ::ng-deep .ql-tooltip.ql-editing[data-mode=video]{transform:translate(40%)}:host ::ng-deep #kv-editor-toolbar{border-radius:6px 6px 0 0;border:1px solid #e5e7eb}:host ::ng-deep #kv-editor{border-radius:0 0 6px 6px;border:1px solid #e5e7eb}.error-border-toolbar{transition:all ease-in .2s;border-top-color:#e24c4c!important;border-bottom-color:#e24c4c!important;border-left-color:#e24c4c!important;border-right-color:#e24c4c!important}.error-border{border-color:#e24c4c!important;transition:all ease-in .2s}:host ::ng-deep .blot-formatter__resize-handle{background:#eaeaea!important}:host ::ng-deep #kv-editor-preview{border-radius:0 0 6px 6px;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper{font-family:Helvetica,Arial,sans-serif;font-size:13px;line-height:1.42;color:#000;padding:12px 15px;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper p{margin:0;padding:0;white-space:pre-wrap}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper *{white-space:pre-wrap}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper strong,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper b{font-weight:700!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper em,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper i{font-style:italic!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper u{text-decoration:underline!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper s,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper strike{text-decoration:line-through!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h1,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h2,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h3,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h4,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h5,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h6{font-weight:700;margin:0;padding:0}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h1{font-size:2em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h2{font-size:1.5em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h3{font-size:1.17em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h4{font-size:1em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h5{font-size:.83em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h6{font-size:.67em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper a{color:#06c;text-decoration:underline}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper code{background-color:#f0f0f0;border-radius:3px;padding:2px 4px;font-family:monospace;font-size:85%}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper pre{background-color:#23241f;color:#f8f8f2;overflow:visible;border-radius:3px;padding:5px 10px;white-space:pre-wrap;margin-bottom:5px;margin-top:5px}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper pre code{background-color:transparent;border-radius:0;color:inherit;font-size:100%;padding:0}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper ol,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper ul{margin:0;padding-left:1.5em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper img{max-width:100%;height:auto}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table{width:100%;border-collapse:collapse;margin-bottom:1rem}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table th,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table td{border:1px solid #e5e7eb;padding:.5rem;text-align:left}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table th{background-color:#f9fafb;font-weight:600}:ng-deep p{text-align:justify!important}:host ::ng-deep .editor-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffff80;display:flex;justify-content:center;align-items:center;z-index:100000;border-radius:inherit}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:after{background:#002542}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:before{background:#002542}::ng-deep .scroll-virtual{overflow-x:hidden}::ng-deep .scroll-virtual::-webkit-scrollbar{width:8px}::ng-deep .scroll-virtual::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scroll-virtual::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scroll-virtual:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scroll-virtual::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.option-dropdown{background-color:#333;transition:all ease-in .2s}.option-dropdown:hover{background-color:#444}.button-name-tooltip{position:fixed;z-index:10000;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all .2s ease-in-out;pointer-events:none}.button-name-tooltip.show{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.button-name-tooltip input{outline:none;transition:border-color .2s}.button-name-tooltip input:focus{border-color:#3b82f6!important;box-shadow:0 0 0 3px #3b82f61a}.button-name-tooltip button{transition:all .2s}.button-name-tooltip button:hover{transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.button-name-tooltip button:active{transform:translateY(0)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.KvErrorComponent, selector: "kv-error", inputs: ["formControl", "hasError"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i8.ProgressBar, selector: "p-progressBar", inputs: ["value", "showValue", "styleClass", "style", "unit", "mode", "color"] }, { kind: "component", type: i9.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i10.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i11.KvTagsComponent, selector: "kv-tags", inputs: ["tags", "hover", "clickable"], outputs: ["onClickTag"] }] }); }
|
|
719
713
|
}
|
|
720
714
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorComponent, decorators: [{
|
|
721
715
|
type: Component,
|
|
722
|
-
args: [{ selector: 'kv-editor', providers: ComponentProviders(KvEditorComponent), template: "<div class=\"kv-editor-container h-full w-full max-h-full flex flex-column overflow-hidden\"\r\n [class.pointer-events-none]=\"disabledEditor()\" [class.opacity-60]=\"disabledEditor()\"\r\n [class.kv-editor-fullscreen]=\"isFullscreen()\">\r\n <div #editor id=\"kv-editor-toolbar\" [ngClass]=\"{ 'error-border-toolbar': hasControlError() }\"\r\n class=\"{{ showHeader() ? 'flex' : 'hidden' }} flex-column flex-initial ql-toolbar ql-snow\">\r\n @if(showHeaderButtons()) {\r\n @if(relatorios().length > 0) {\r\n <div\r\n class=\"flex flex-row justify-content-between {{(readonly() || disabledEditor()) && 'pointer-events-none opacity-90'}}\">\r\n <div class=\"flex flex-row gap-2\">\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"op.toggle($event)\">\r\n <span class=\"material-symbols-outlined text-lg text-green-600 font-medium\">\r\n contract\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">{{\r\n !clearedTemplate()\r\n ? relatorio()?.label || labelEmptyDropdown()\r\n : labelEmptyDropdown()\r\n }}</span>\r\n <span class=\"material-symbols-outlined text-lg\">\r\n keyboard_arrow_down\r\n </span>\r\n </div>\r\n\r\n @if(!clearedTemplate()) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"clearTemplate()\">\r\n <span class=\"material-symbols-outlined text-lg text-orange-600 font-medium\" [pTooltip]=\"'Limpar Template'\">\r\n layers_clear\r\n </span>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"showInstrucoes()\">\r\n <span class=\"material-symbols-outlined text-lg text-blue-600 font-medium\">\r\n info\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Instru\u00E7\u00F5es</span>\r\n </div>\r\n </div>\r\n\r\n <!-- @if(printButton()) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"openRelatorio()\"\r\n >\r\n <span class=\"material-symbols-outlined text-lg font-medium\">\r\n print\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Imprimir</span>\r\n </div>\r\n } -->\r\n </div>\r\n\r\n <p-divider class=\"w-full\"></p-divider>\r\n\r\n }\r\n }\r\n\r\n\r\n <div class=\"flex flex-row align-items-center justify-content-between w-full flex-initial\">\r\n @if(isLoading()) {\r\n\r\n <div class=\"flex flex-row align-items-center gap-3 w-full\">\r\n <p-skeleton styleClass=\"w-6rem\" [style]=\"{ height: '2rem' }\"></p-skeleton>\r\n\r\n <p-skeleton styleClass=\"w-6rem\" [style]=\"{ height: '2rem' }\"></p-skeleton>\r\n\r\n <p-skeleton styleClass=\"w-6rem\" [style]=\"{ height: '2rem' }\"></p-skeleton>\r\n\r\n <p-skeleton styleClass=\"w-6rem\" [style]=\"{ height: '2rem' }\"></p-skeleton>\r\n\r\n <p-skeleton styleClass=\"w-6rem\" [style]=\"{ height: '2rem' }\"></p-skeleton>\r\n </div>\r\n }\r\n\r\n <div class=\"flex-row align-items-center flex-wrap gap-2 {{\r\n isLoading() ? 'hidden' : 'flex'\r\n }} w-full\">\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-font\">\r\n <option value=\"roboto\">Roboto</option>\r\n <option value=\"arial\">Arial</option>\r\n <option value=\"times-new-roman\">Times New Roman</option>\r\n <option value=\"monospace\">Monospace</option>\r\n <option value=\"inter\">Inter</option>\r\n <option selected>Sans Serif</option>\r\n <option value=\"serif\">Serif</option>\r\n </select>\r\n\r\n <select class=\"ql-header\">\r\n <option value=\"1\">Titulo</option>\r\n <option value=\"2\">Subtitulo</option>\r\n <option selected>Normal</option>\r\n </select>\r\n\r\n <span class=\"ql-format-group\">\r\n <select title=\"Size\" class=\"ql-size\">\r\n <option value=\"15px\">15px</option>\r\n <option value=\"20px\">20px</option>\r\n <option value=\"30px\">30px</option>\r\n <option value=\"40px\">40px</option>\r\n <option value=\"50px\">50px</option>\r\n <option value=\"70px\">70px</option>\r\n <option value=\"90px\">90px</option>\r\n </select>\r\n </span>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-bold\" pTooltip=\"Negrito\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-italic\" pTooltip=\"It\u00E1lico\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-underline\" pTooltip=\"Sublinhado\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-strike\" pTooltip=\"Tachado\" tooltipPosition=\"top\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-color\" pTooltip=\"Cor da fonte\" tooltipPosition=\"top\"></select>\r\n <select class=\"ql-background\" pTooltip=\"Cor de fundo\" tooltipPosition=\"top\"></select>\r\n </span>\r\n\r\n @if(true) {\r\n <!-- <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-header\" value=\"1\"></button>\r\n <button class=\"ql-header\" value=\"2\"></button>\r\n </span> -->\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-link\" pTooltip=\"Inserir link\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-image\" pTooltip=\"Inserir imagem\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-video\" pTooltip=\"Inserir v\u00EDdeo\" tooltipPosition=\"top\"></button>\r\n\r\n @if(enableButtonInsert()) {\r\n <button id=\"insert-custom-button\" pTooltip=\"Inserir bot\u00E3o\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\"\r\n style=\"transform: translate(0px, -1.7px); font-size: 22px;\">buttons_alt</span>\r\n </button>\r\n }\r\n\r\n @if(showAlphaCrmButtons()) {\r\n <button id=\"btn-alpha-aceitar\" pTooltip=\"Inserir bot\u00E3o Aceitar\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\"\r\n style=\"transform: translate(0px, -1.7px); font-size: 22px;\">variable_add</span>\r\n </button>\r\n\r\n <button id=\"btn-alpha-cancelar\" pTooltip=\"Inserir bot\u00E3o Cancelar\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\"\r\n style=\"transform: translate(0px, -1.7px); font-size: 22px;\">variable_remove</span>\r\n </button>\r\n\r\n <button id=\"btn-alpha-aceitar-assinar\" pTooltip=\"Inserir bot\u00E3o Aceitar e Assinar Contrato\"\r\n tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\"\r\n style=\"transform: translate(0px, -1px); font-size: 20px;\">new_label</span>\r\n </button>\r\n }\r\n\r\n @if(showAlphaContratoButtons()) {\r\n <button id=\"btn-alpha-contrato-assinar\" pTooltip=\"Inserir bot\u00E3o Assinar Contrato\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\"\r\n style=\"transform: translate(0px, -1.7px); font-size: 20px;\">contract_edit</span>\r\n </button>\r\n\r\n <button id=\"btn-alpha-contrato-recusar\" pTooltip=\"Inserir bot\u00E3o Recusar Contrato\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\"\r\n style=\"transform: translate(0px, -1.7px); font-size: 20px;\">contract_delete</span>\r\n </button>\r\n }\r\n\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-list\" value=\"ordered\" pTooltip=\"Lista ordenada\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-list\" value=\"bullet\" pTooltip=\"Lista com marcadores\" tooltipPosition=\"top\"></button>\r\n <select class=\"ql-align\" pTooltip=\"Alinhamento\" tooltipPosition=\"top\"></select>\r\n </span>\r\n }\r\n\r\n <div class=\"flex-1 min-w-0\"></div>\r\n <!-- <span class=\"ql-formats m-0 ml-auto flex align-items-center pr-2\">\r\n <button pButton\r\n class=\"p-1 cursor-pointer transition-colors transition-duration-200 bg-transparent border-none text-gray-700 hover:text-blue-600\"\r\n (click)=\"toggleFullscreen()\">\r\n\r\n {{isFullscreen() ? 'Expandir' : 'Reduzir'}}\r\n <span class=\"material-symbols-outlined\" style=\"font-size: 24px;\">{{ isFullscreen() ? 'fullscreen_exit' :\r\n 'fullscreen' }}</span>\r\n </button>\r\n </span> -->\r\n\r\n <kv-button severity=\"tertiary\" [icon]=\"isFullscreen() ? 'fullscreen_exit' :\r\n 'fullscreen'\" [label]=\"isFullscreen() ? 'Reduzir' : 'Expandir'\" (onClick)=\"toggleFullscreen()\">\r\n\r\n </kv-button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"height: 3px; border-top: none; border-bottom: none\"\r\n [style.borderRight]=\"showHeader() ? '1px solid #e5e7eb' : 'none'\"\r\n [style.borderLeft]=\"showHeader() ? '1px solid #e5e7eb' : 'none'\">\r\n @if(isLoadingPdf()) {\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" />\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-row flex-1 gap-0 overflow-auto\">\r\n <div id=\"kv-editor\" class=\"overflow-auto flex-1 scrollstyle ql-container ql-snow\" [ngClass]=\"{\r\n 'error-border': hasControlError(),\r\n 'pointer-events-none opacity-60': isLoadingPdf()\r\n }\" [style.borderTop]=\"showHeader() ? 'none' : '1px solid #e5e7eb'\"\r\n [style.borderRight]=\"enablePreviewMode() ? 'none' : '1px solid #e5e7eb'\"></div>\r\n\r\n @if(enablePreviewMode()) {\r\n <div class=\"flex flex-column flex-1\">\r\n <div class=\"flex align-items-center gap-2 px-3 py-2\" [style.borderRight]=\"'1px solid #e5e7eb'\"\r\n [style.borderLeft]=\"'1px solid #e5e7eb'\">\r\n <span class=\"material-symbols-outlined text-blue-600 text-lg\">visibility</span>\r\n <span class=\"font-semibold text-gray-700 text-sm\">Preview</span>\r\n </div>\r\n\r\n <div id=\"kv-editor-preview\" class=\"overflow-auto flex-1 scrollstyle\" [innerHTML]=\"getPreviewContent\"\r\n [style.border]=\"'1px solid #e5e7eb'\"></div>\r\n </div>\r\n }\r\n </div>\r\n\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n\r\n<link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\" />\r\n<script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\"></script>\r\n\r\n<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.bubble.css\" />\r\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css\" />\r\n<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css\" />\r\n\r\n<p-overlayPanel #op styleClass=\"overflow-hidden\">\r\n <div class=\"grid m-0 gap-2 p-2 max-w-20rem overflow-y-auto scrollstyle\" style=\"max-height: 16rem\">\r\n @for(item of relatorios(); track $index) {\r\n <div\r\n class=\"col-12 cursor-pointer hover:bg-gray-100 transition-colors transition-duration-200 border-round-lg shadow-2 flex flex-column gap-2\"\r\n (click)=\"setRelatorio(item)\">\r\n <div class=\"flex flex-row align-items-center gap-2 justify-content-between\">\r\n <span class=\"text-sm font-medium w-full\">{{ item.label }}</span>\r\n\r\n <kv-tags class=\"transition-opacity transition-duration-300 {{\r\n item?.id == idRelatorioSelected() ? 'opacity-100' : 'opacity-0'\r\n }}\" [tags]=\"[{ label: 'Selecionado', severity: 'primary' }]\"></kv-tags>\r\n </div>\r\n <span class=\"text-xs text-gray-500\">{{ item.descricao }}</span>\r\n </div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n\r\n<div class=\"kv-editor-container flex flex-column overflow-hidden relative\">\r\n <div #mentionAnchor style=\"position: fixed; width: 1px; height: 1px; opacity: 0\"></div>\r\n</div>\r\n\r\n<p-overlayPanel #opVariables [appendTo]=\"'body'\" (onHide)=\"closeVariablesPanel()\">\r\n <div class=\"flex flex-column gap-1 p-1 overflow-y-auto scroll-virtual border-round-lg\"\r\n style=\"max-height: 250px; min-width: 250px; background-color: #333333\">\r\n @for(variable of filteredVariables(); track variable.id) {\r\n <div\r\n class=\"p-2 cursor-pointer transition-colors transition-duration-200 border-round-lg text-sm text-white option-dropdown\"\r\n (click)=\"selectVariableFromPanel(variable)\">\r\n @if (showVariableValueFirst()) {\r\n {{ variable.value }} (\r\n <span class=\"text-gray-400\">{{ variable.descricao }}</span> )\r\n } @else {\r\n {{ variable.descricao }} (\r\n <span class=\"text-gray-400\">{{ variable.value }}</span> )\r\n }\r\n </div>\r\n } @empty {\r\n <div class=\"p-2 text-sm text-gray-500\">Nenhuma vari\u00E1vel encontrada.</div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n\r\n<div #buttonNameTooltip class=\"button-name-tooltip\" [class.show]=\"showButtonTooltip()\"\r\n [style.top.px]=\"tooltipPosition().top\" [style.left.px]=\"tooltipPosition().left\">\r\n <div class=\"flex flex-column gap-2 p-3 bg-white border-round-lg shadow-3\" style=\"min-width: 280px\">\r\n <div class=\"flex flex-column gap-1\">\r\n <label class=\"text-sm font-semibold text-gray-700\">Nome do Bot\u00E3o</label>\r\n <input #buttonNameInput type=\"text\" class=\"p-2 border-1 border-gray-300 border-round-md text-sm\"\r\n placeholder=\"Ex: Aceitar Proposta\" [(ngModel)]=\"buttonNameValue\" (keydown.enter)=\"confirmButtonName()\"\r\n (keydown.escape)=\"cancelButtonName()\" />\r\n </div>\r\n <div class=\"flex flex-row gap-2 justify-content-end\">\r\n <button\r\n class=\"px-3 py-2 border-1 border-gray-300 bg-white text-gray-700 border-round-md cursor-pointer text-sm font-medium hover:bg-gray-100 transition-colors\"\r\n (click)=\"cancelButtonName()\">\r\n Cancelar\r\n </button>\r\n <button\r\n class=\"px-3 py-2 border-none bg-blue-600 text-white border-round-md cursor-pointer text-sm font-medium hover:bg-blue-700 transition-colors\"\r\n (click)=\"confirmButtonName()\">\r\n Inserir\r\n </button>\r\n </div>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";:host ::ng-deep .ql-font-roboto{font-family:Roboto,sans-serif}:host ::ng-deep .ql-font-inter{font-family:Inter var,sans-serif}:host ::ng-deep .ql-font-arial{font-family:Arial,Arial,sans-serif}:host ::ng-deep .ql-font-times-new-roman{font-family:Times New Roman,Times,serif}:host ::ng-deep .ql-tooltip.ql-editing[data-mode=video]{transform:translate(40%)}:host ::ng-deep #kv-editor-toolbar{border-radius:6px 6px 0 0;border:1px solid #e5e7eb}:host ::ng-deep #kv-editor{border-radius:0 0 6px 6px;border:1px solid #e5e7eb}.error-border-toolbar{transition:all ease-in .2s;border-top-color:#e24c4c!important;border-bottom-color:#e24c4c!important;border-left-color:#e24c4c!important;border-right-color:#e24c4c!important}.error-border{border-color:#e24c4c!important;transition:all ease-in .2s}:host ::ng-deep .blot-formatter__resize-handle{background:#eaeaea!important}:host ::ng-deep #kv-editor-preview{border-radius:0 0 6px 6px;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper{font-family:Helvetica,Arial,sans-serif;font-size:13px;line-height:1.42;color:#000;padding:12px 15px;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper p{margin:0;padding:0;white-space:pre-wrap}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper *{white-space:pre-wrap}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper strong,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper b{font-weight:700!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper em,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper i{font-style:italic!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper u{text-decoration:underline!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper s,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper strike{text-decoration:line-through!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h1,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h2,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h3,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h4,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h5,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h6{font-weight:700;margin:0;padding:0}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h1{font-size:2em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h2{font-size:1.5em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h3{font-size:1.17em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h4{font-size:1em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h5{font-size:.83em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h6{font-size:.67em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper a{color:#06c;text-decoration:underline}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper code{background-color:#f0f0f0;border-radius:3px;padding:2px 4px;font-family:monospace;font-size:85%}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper pre{background-color:#23241f;color:#f8f8f2;overflow:visible;border-radius:3px;padding:5px 10px;white-space:pre-wrap;margin-bottom:5px;margin-top:5px}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper pre code{background-color:transparent;border-radius:0;color:inherit;font-size:100%;padding:0}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper ol,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper ul{margin:0;padding-left:1.5em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper img{max-width:100%;height:auto}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table{width:100%;border-collapse:collapse;margin-bottom:1rem}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table th,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table td{border:1px solid #e5e7eb;padding:.5rem;text-align:left}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table th{background-color:#f9fafb;font-weight:600}:ng-deep p{text-align:justify!important}:host ::ng-deep .editor-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffff80;display:flex;justify-content:center;align-items:center;z-index:100000;border-radius:inherit}:host ::ng-deep .ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}:host ::ng-deep .ql-container.ql-disabled .ql-tooltip{visibility:hidden}:host ::ng-deep .ql-container:not(.ql-disabled) li[data-list=checked]>.ql-ui,:host ::ng-deep .ql-container:not(.ql-disabled) li[data-list=unchecked]>.ql-ui{cursor:pointer}:host ::ng-deep .ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}:host ::ng-deep .ql-clipboard p{margin:0;padding:0}:host ::ng-deep .ql-editor{box-sizing:border-box;counter-reset:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;line-height:1.42;height:100%;outline:none;overflow-y:auto;padding:12px 15px;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}:host ::ng-deep .ql-editor>*{cursor:text}:host ::ng-deep .ql-editor p,:host ::ng-deep .ql-editor ol,:host ::ng-deep .ql-editor pre,:host ::ng-deep .ql-editor blockquote,:host ::ng-deep .ql-editor h1,:host ::ng-deep .ql-editor h2,:host ::ng-deep .ql-editor h3,:host ::ng-deep .ql-editor h4,:host ::ng-deep .ql-editor h5,:host ::ng-deep .ql-editor h6{margin:0;padding:0}@supports (counter-set: none){:host ::ng-deep .ql-editor p,:host ::ng-deep .ql-editor h1,:host ::ng-deep .ql-editor h2,:host ::ng-deep .ql-editor h3,:host ::ng-deep .ql-editor h4,:host ::ng-deep .ql-editor h5,:host ::ng-deep .ql-editor h6{counter-set:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor p,:host ::ng-deep .ql-editor h1,:host ::ng-deep .ql-editor h2,:host ::ng-deep .ql-editor h3,:host ::ng-deep .ql-editor h4,:host ::ng-deep .ql-editor h5,:host ::ng-deep .ql-editor h6{counter-reset:list-0 list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}:host ::ng-deep .ql-editor table{border-collapse:collapse}:host ::ng-deep .ql-editor td{border:1px solid #000;padding:2px 5px}:host ::ng-deep .ql-editor ol{padding-left:1.5em}:host ::ng-deep .ql-editor li{list-style-type:none;padding-left:1.5em;position:relative}:host ::ng-deep .ql-editor li>.ql-ui:before{display:inline-block;margin-left:-1.5em;margin-right:.3em;text-align:right;white-space:nowrap;width:1.2em}:host ::ng-deep .ql-editor li[data-list=checked]>.ql-ui,:host ::ng-deep .ql-editor li[data-list=unchecked]>.ql-ui{color:#777}:host ::ng-deep .ql-editor li[data-list=bullet]>.ql-ui:before{content:\"\\2022\"}:host ::ng-deep .ql-editor li[data-list=checked]>.ql-ui:before{content:\"\\2611\"}:host ::ng-deep .ql-editor li[data-list=unchecked]>.ql-ui:before{content:\"\\2610\"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list]{counter-set:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list]{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered]{counter-increment:list-0}:host ::ng-deep .ql-editor li[data-list=ordered]>.ql-ui:before{content:counter(list-0,decimal) \". \"}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-1{counter-increment:list-1}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-1>.ql-ui:before{content:counter(list-1,lower-alpha) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-1{counter-set:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-2{counter-increment:list-2}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-2>.ql-ui:before{content:counter(list-2,lower-roman) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-2{counter-set:list-3 list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-3{counter-increment:list-3}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-3>.ql-ui:before{content:counter(list-3,decimal) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-3{counter-set:list-4 list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-4{counter-increment:list-4}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-4>.ql-ui:before{content:counter(list-4,lower-alpha) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-4{counter-set:list-5 list-6 list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-5{counter-increment:list-5}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-5>.ql-ui:before{content:counter(list-5,lower-roman) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-5{counter-set:list-6 list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-6{counter-increment:list-6}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-6>.ql-ui:before{content:counter(list-6,decimal) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-6{counter-set:list-7 list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-6{counter-reset:list-7 list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-7{counter-increment:list-7}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-7>.ql-ui:before{content:counter(list-7,lower-alpha) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-7{counter-set:list-8 list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-7{counter-reset:list-8 list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-8{counter-increment:list-8}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-8>.ql-ui:before{content:counter(list-8,lower-roman) \". \"}@supports (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-8{counter-set:list-9}}@supports not (counter-set: none){:host ::ng-deep .ql-editor li[data-list].ql-indent-8{counter-reset:list-9}}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-9{counter-increment:list-9}:host ::ng-deep .ql-editor li[data-list=ordered].ql-indent-9>.ql-ui:before{content:counter(list-9,decimal) \". \"}:host ::ng-deep .ql-editor .ql-indent-1:not(.ql-direction-rtl){padding-left:3em}:host ::ng-deep .ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}:host ::ng-deep .ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}:host ::ng-deep .ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}:host ::ng-deep .ql-editor .ql-indent-2:not(.ql-direction-rtl){padding-left:6em}:host ::ng-deep .ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}:host ::ng-deep .ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}:host ::ng-deep .ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}:host ::ng-deep .ql-editor .ql-indent-3:not(.ql-direction-rtl){padding-left:9em}:host ::ng-deep .ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}:host ::ng-deep .ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}:host ::ng-deep .ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}:host ::ng-deep .ql-editor .ql-indent-4:not(.ql-direction-rtl){padding-left:12em}:host ::ng-deep .ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}:host ::ng-deep .ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}:host ::ng-deep .ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}:host ::ng-deep .ql-editor .ql-indent-5:not(.ql-direction-rtl){padding-left:15em}:host ::ng-deep .ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}:host ::ng-deep .ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}:host ::ng-deep .ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}:host ::ng-deep .ql-editor .ql-indent-6:not(.ql-direction-rtl){padding-left:18em}:host ::ng-deep .ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}:host ::ng-deep .ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}:host ::ng-deep .ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}:host ::ng-deep .ql-editor .ql-indent-7:not(.ql-direction-rtl){padding-left:21em}:host ::ng-deep .ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}:host ::ng-deep .ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}:host ::ng-deep .ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}:host ::ng-deep .ql-editor .ql-indent-8:not(.ql-direction-rtl){padding-left:24em}:host ::ng-deep .ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}:host ::ng-deep .ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}:host ::ng-deep .ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}:host ::ng-deep .ql-editor .ql-indent-9:not(.ql-direction-rtl){padding-left:27em}:host ::ng-deep .ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}:host ::ng-deep .ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}:host ::ng-deep .ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}:host ::ng-deep .ql-editor li.ql-direction-rtl{padding-right:1.5em}:host ::ng-deep .ql-editor li.ql-direction-rtl>.ql-ui:before{margin-left:.3em;margin-right:-1.5em;text-align:left}:host ::ng-deep .ql-editor table{table-layout:fixed;width:100%}:host ::ng-deep .ql-editor table td{outline:none}:host ::ng-deep .ql-editor .ql-code-block-container{font-family:monospace}:host ::ng-deep .ql-editor .ql-video{display:block;max-width:100%}:host ::ng-deep .ql-editor .ql-video.ql-align-center{margin:0 auto}:host ::ng-deep .ql-editor .ql-video.ql-align-right{margin:0 0 0 auto}:host ::ng-deep .ql-editor .ql-bg-black{background-color:#000}:host ::ng-deep .ql-editor .ql-bg-red{background-color:#e60000}:host ::ng-deep .ql-editor .ql-bg-orange{background-color:#f90}:host ::ng-deep .ql-editor .ql-bg-yellow{background-color:#ff0}:host ::ng-deep .ql-editor .ql-bg-green{background-color:#008a00}:host ::ng-deep .ql-editor .ql-bg-blue{background-color:#06c}:host ::ng-deep .ql-editor .ql-bg-purple{background-color:#93f}:host ::ng-deep .ql-editor .ql-color-white{color:#fff}:host ::ng-deep .ql-editor .ql-color-red{color:#e60000}:host ::ng-deep .ql-editor .ql-color-orange{color:#f90}:host ::ng-deep .ql-editor .ql-color-yellow{color:#ff0}:host ::ng-deep .ql-editor .ql-color-green{color:#008a00}:host ::ng-deep .ql-editor .ql-color-blue{color:#06c}:host ::ng-deep .ql-editor .ql-color-purple{color:#93f}:host ::ng-deep .ql-editor .ql-font-serif{font-family:Georgia,Times New Roman,serif}:host ::ng-deep .ql-editor .ql-font-monospace{font-family:Monaco,Courier New,monospace}:host ::ng-deep .ql-editor .ql-size-small{font-size:.75em}:host ::ng-deep .ql-editor .ql-size-large{font-size:1.5em}:host ::ng-deep .ql-editor .ql-size-huge{font-size:2.5em}:host ::ng-deep .ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}:host ::ng-deep .ql-editor .ql-align-center{text-align:center}:host ::ng-deep .ql-editor .ql-align-justify{text-align:justify}:host ::ng-deep .ql-editor .ql-align-right{text-align:right}:host ::ng-deep .ql-editor .ql-ui{position:absolute}:host ::ng-deep .ql-editor.ql-blank:before{color:#0009;content:attr(data-placeholder);font-style:italic;left:15px;pointer-events:none;position:absolute;right:15px}:host ::ng-deep .ql-snow.ql-toolbar:after,:host ::ng-deep .ql-snow .ql-toolbar:after{clear:both;content:\"\";display:table}:host ::ng-deep .ql-snow.ql-toolbar button,:host ::ng-deep .ql-snow .ql-toolbar button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}:host ::ng-deep .ql-snow.ql-toolbar button svg,:host ::ng-deep .ql-snow .ql-toolbar button svg{float:left;height:100%}:host ::ng-deep .ql-snow.ql-toolbar button:active:hover,:host ::ng-deep .ql-snow .ql-toolbar button:active:hover{outline:none}:host ::ng-deep .ql-snow.ql-toolbar input.ql-image[type=file],:host ::ng-deep .ql-snow .ql-toolbar input.ql-image[type=file]{display:none}:host ::ng-deep .ql-snow.ql-toolbar button:hover,:host ::ng-deep .ql-snow .ql-toolbar button:hover,:host ::ng-deep .ql-snow.ql-toolbar button:focus,:host ::ng-deep .ql-snow .ql-toolbar button:focus,:host ::ng-deep .ql-snow.ql-toolbar button.ql-active,:host ::ng-deep .ql-snow .ql-toolbar button.ql-active,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label:hover,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label:hover,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label.ql-active,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label.ql-active,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item:hover,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item:hover,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item.ql-selected,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item.ql-selected{color:#06c}:host ::ng-deep .ql-snow.ql-toolbar button:hover .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button:hover .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar button:focus .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button:focus .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar button.ql-active .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button.ql-active .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill,:host ::ng-deep .ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill,:host ::ng-deep .ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill{fill:#06c}:host ::ng-deep .ql-snow.ql-toolbar button:hover .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar button:hover .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar button:focus .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar button:focus .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar button.ql-active .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar button.ql-active .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar button:hover .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar button:hover .ql-stroke-miter,:host ::ng-deep .ql-snow.ql-toolbar button:focus .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar button:focus .ql-stroke-miter,:host ::ng-deep .ql-snow.ql-toolbar button.ql-active .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar button.ql-active .ql-stroke-miter,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter{stroke:#06c}@media (pointer: coarse){:host ::ng-deep .ql-snow.ql-toolbar button:hover:not(.ql-active),:host ::ng-deep .ql-snow .ql-toolbar button:hover:not(.ql-active){color:#444}:host ::ng-deep .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-fill,:host ::ng-deep .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,:host ::ng-deep .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill{fill:#444}:host ::ng-deep .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke,:host ::ng-deep .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke,:host ::ng-deep .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,:host ::ng-deep .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter{stroke:#444}}:host ::ng-deep .ql-snow{box-sizing:border-box}:host ::ng-deep .ql-snow *{box-sizing:border-box}:host ::ng-deep .ql-snow .ql-hidden{display:none}:host ::ng-deep .ql-snow .ql-out-bottom,:host ::ng-deep .ql-snow .ql-out-top{visibility:hidden}:host ::ng-deep .ql-snow .ql-tooltip{position:absolute;transform:translateY(10px)}:host ::ng-deep .ql-snow .ql-tooltip a{cursor:pointer;text-decoration:none}:host ::ng-deep .ql-snow .ql-tooltip.ql-flip{transform:translateY(-10px)}:host ::ng-deep .ql-snow .ql-formats{display:inline-block;vertical-align:middle}:host ::ng-deep .ql-snow .ql-formats:after{clear:both;content:\"\";display:table}:host ::ng-deep .ql-snow .ql-stroke{fill:none;stroke:#444;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}:host ::ng-deep .ql-snow .ql-stroke-miter{fill:none;stroke:#444;stroke-miterlimit:10;stroke-width:2}:host ::ng-deep .ql-snow .ql-fill,:host ::ng-deep .ql-snow .ql-stroke.ql-fill{fill:#444}:host ::ng-deep .ql-snow .ql-empty{fill:none}:host ::ng-deep .ql-snow .ql-even{fill-rule:evenodd}:host ::ng-deep .ql-snow .ql-thin,:host ::ng-deep .ql-snow .ql-stroke.ql-thin{stroke-width:1}:host ::ng-deep .ql-snow .ql-transparent{opacity:.4}:host ::ng-deep .ql-snow .ql-direction svg:last-child{display:none}:host ::ng-deep .ql-snow .ql-direction.ql-active svg:last-child{display:inline}:host ::ng-deep .ql-snow .ql-direction.ql-active svg:first-child{display:none}:host ::ng-deep .ql-snow .ql-editor h1{font-size:2em}:host ::ng-deep .ql-snow .ql-editor h2{font-size:1.5em}:host ::ng-deep .ql-snow .ql-editor h3{font-size:1.17em}:host ::ng-deep .ql-snow .ql-editor h4{font-size:1em}:host ::ng-deep .ql-snow .ql-editor h5{font-size:.83em}:host ::ng-deep .ql-snow .ql-editor h6{font-size:.67em}:host ::ng-deep .ql-snow .ql-editor a{text-decoration:underline}:host ::ng-deep .ql-snow .ql-editor blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}:host ::ng-deep .ql-snow .ql-editor code,:host ::ng-deep .ql-snow .ql-editor .ql-code-block-container{background-color:#f0f0f0;border-radius:3px}:host ::ng-deep .ql-snow .ql-editor .ql-code-block-container{margin-bottom:5px;margin-top:5px;padding:5px 10px}:host ::ng-deep .ql-snow .ql-editor code{font-size:85%;padding:2px 4px}:host ::ng-deep .ql-snow .ql-editor .ql-code-block-container{background-color:#23241f;color:#f8f8f2;overflow:visible}:host ::ng-deep .ql-snow .ql-editor img{max-width:100%}:host ::ng-deep .ql-snow .ql-picker{color:#444;display:inline-block;float:left;font-size:14px;font-weight:500;height:24px;position:relative;vertical-align:middle}:host ::ng-deep .ql-snow .ql-picker-label{cursor:pointer;display:inline-block;height:100%;padding-left:8px;padding-right:2px;position:relative;width:100%}:host ::ng-deep .ql-snow .ql-picker-label:before{display:inline-block;line-height:22px}:host ::ng-deep .ql-snow .ql-picker-options{background-color:#fff;display:none;min-width:100%;padding:4px 8px;position:absolute;white-space:nowrap}:host ::ng-deep .ql-snow .ql-picker-options .ql-picker-item{cursor:pointer;display:block;padding-bottom:5px;padding-top:5px}:host ::ng-deep .ql-snow .ql-picker.ql-expanded .ql-picker-label{color:#ccc;z-index:2}:host ::ng-deep .ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill{fill:#ccc}:host ::ng-deep .ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke{stroke:#ccc}:host ::ng-deep .ql-snow .ql-picker.ql-expanded .ql-picker-options{display:block;margin-top:-1px;top:100%;z-index:1}:host ::ng-deep .ql-snow .ql-color-picker,:host ::ng-deep .ql-snow .ql-icon-picker{width:28px}:host ::ng-deep .ql-snow .ql-color-picker .ql-picker-label,:host ::ng-deep .ql-snow .ql-icon-picker .ql-picker-label{padding:2px 4px}:host ::ng-deep .ql-snow .ql-color-picker .ql-picker-label svg,:host ::ng-deep .ql-snow .ql-icon-picker .ql-picker-label svg{right:4px}:host ::ng-deep .ql-snow .ql-icon-picker .ql-picker-options{padding:4px 0}:host ::ng-deep .ql-snow .ql-icon-picker .ql-picker-item{height:24px;width:24px;padding:2px 4px}:host ::ng-deep .ql-snow .ql-color-picker .ql-picker-options{padding:3px 5px;width:152px}:host ::ng-deep .ql-snow .ql-color-picker .ql-picker-item{border:1px solid transparent;float:left;height:16px;margin:2px;padding:0;width:16px}:host ::ng-deep .ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg{position:absolute;margin-top:-9px;right:0;top:50%;width:18px}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=\"\"]):before,:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=\"\"]):before,:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=\"\"]):before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=\"\"]):before,:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=\"\"]):before,:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=\"\"]):before{content:attr(data-label)}:host ::ng-deep .ql-snow .ql-picker.ql-header{width:98px}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label:before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item:before{content:\"Normal\"}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"1\"]:before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]:before{content:\"Heading 1\"}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"2\"]:before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]:before{content:\"Heading 2\"}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"3\"]:before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]:before{content:\"Heading 3\"}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"4\"]:before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]:before{content:\"Heading 4\"}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"5\"]:before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]:before{content:\"Heading 5\"}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"6\"]:before,:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]:before{content:\"Heading 6\"}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]:before{font-size:2em}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]:before{font-size:1.5em}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]:before{font-size:1.17em}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]:before{font-size:1em}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]:before{font-size:.83em}:host ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]:before{font-size:.67em}:host ::ng-deep .ql-snow .ql-picker.ql-font{width:108px}:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-label:before,:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-item:before{content:\"Sans Serif\"}:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]:before,:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]:before{content:\"Serif\"}:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]:before,:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before{content:\"Monospace\"}:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]:before{font-family:Georgia,Times New Roman,serif}:host ::ng-deep .ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before{font-family:Monaco,Courier New,monospace}:host ::ng-deep .ql-snow .ql-picker.ql-size{width:98px}:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-label:before,:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item:before{content:\"Normal\"}:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]:before,:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]:before{content:\"Small\"}:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]:before,:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]:before{content:\"Large\"}:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]:before,:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]:before{content:\"Huge\"}:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]:before{font-size:10px}:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]:before{font-size:18px}:host ::ng-deep .ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]:before{font-size:32px}:host ::ng-deep .ql-snow .ql-color-picker.ql-background .ql-picker-item{background-color:#fff}:host ::ng-deep .ql-snow .ql-color-picker.ql-color .ql-picker-item{background-color:#000}:host ::ng-deep .ql-code-block-container{position:relative}:host ::ng-deep .ql-code-block-container .ql-ui{right:5px;top:5px}:host ::ng-deep .ql-toolbar.ql-snow{border:1px solid #ccc;box-sizing:border-box;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding:8px}:host ::ng-deep .ql-toolbar.ql-snow .ql-formats{margin-right:15px}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker-label{border:1px solid transparent}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker-options{border:1px solid transparent;box-shadow:#0003 0 2px 8px}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label{border-color:#ccc}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options{border-color:#ccc}:host ::ng-deep .ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected,:host ::ng-deep .ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover{border-color:#000}:host ::ng-deep .ql-toolbar.ql-snow+.ql-container.ql-snow{border-top:0}:host ::ng-deep .ql-snow .ql-tooltip{background-color:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ddd;color:#444;padding:5px 12px;white-space:nowrap}:host ::ng-deep .ql-snow .ql-tooltip:before{content:\"Visit URL:\";line-height:26px;margin-right:8px}:host ::ng-deep .ql-snow .ql-tooltip input[type=text]{display:none;border:1px solid #ccc;font-size:13px;height:26px;margin:0;padding:3px 5px;width:170px}:host ::ng-deep .ql-snow .ql-tooltip a.ql-preview{display:inline-block;max-width:200px;overflow-x:hidden;text-overflow:ellipsis;vertical-align:top}:host ::ng-deep .ql-snow .ql-tooltip a.ql-action:after{border-right:1px solid #ccc;content:\"Edit\";margin-left:16px;padding-right:8px}:host ::ng-deep .ql-snow .ql-tooltip a.ql-remove:before{content:\"Remove\";margin-left:8px}:host ::ng-deep .ql-snow .ql-tooltip a{line-height:26px}:host ::ng-deep .ql-snow .ql-tooltip.ql-editing a.ql-preview,:host ::ng-deep .ql-snow .ql-tooltip.ql-editing a.ql-remove{display:none}:host ::ng-deep .ql-snow .ql-tooltip.ql-editing input[type=text]{display:inline-block}:host ::ng-deep .ql-snow .ql-tooltip.ql-editing a.ql-action:after{border-right:0;content:\"Save\";padding-right:0}:host ::ng-deep .ql-snow .ql-tooltip[data-mode=link]:before{content:\"Enter link:\"}:host ::ng-deep .ql-snow .ql-tooltip[data-mode=formula]:before{content:\"Enter formula:\"}:host ::ng-deep .ql-snow .ql-tooltip[data-mode=video]:before{content:\"Enter video:\"}:host ::ng-deep .ql-snow a{color:#06c}:host ::ng-deep .ql-container.ql-snow{border:1px solid #ccc}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:after{background:#002542}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:before{background:#002542}::ng-deep .scroll-virtual{overflow-x:hidden}::ng-deep .scroll-virtual::-webkit-scrollbar{width:8px}::ng-deep .scroll-virtual::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scroll-virtual::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scroll-virtual:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scroll-virtual::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.option-dropdown{background-color:#333;transition:all ease-in .2s}.option-dropdown:hover{background-color:#444}.button-name-tooltip{position:fixed;z-index:10000;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all .2s ease-in-out;pointer-events:none}.button-name-tooltip.show{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.button-name-tooltip input{outline:none;transition:border-color .2s}.button-name-tooltip input:focus{border-color:#3b82f6!important;box-shadow:0 0 0 3px #3b82f61a}.button-name-tooltip button{transition:all .2s}.button-name-tooltip button:hover{transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.button-name-tooltip button:active{transform:translateY(0)}.kv-editor-fullscreen{position:fixed!important;top:0!important;left:0!important;width:100vw!important;height:100vh!important;max-height:100vh!important;z-index:9999!important;background-color:var(--surface-card, #ffffff)!important}\n"] }]
|
|
716
|
+
args: [{ selector: 'kv-editor', providers: ComponentProviders(KvEditorComponent), template: "<div\r\n class=\"kv-editor-container h-full w-full max-h-full flex flex-column overflow-hidden\"\r\n [class.pointer-events-none]=\"disabledEditor()\"\r\n [class.opacity-60]=\"disabledEditor()\"\r\n>\r\n <div\r\n #editor\r\n id=\"kv-editor-toolbar\"\r\n [ngClass]=\"{ 'error-border-toolbar': hasControlError() }\"\r\n class=\"{{ showHeader() ? 'flex' : 'hidden' }} flex-column flex-initial\"\r\n >\r\n @if(showHeaderButtons()) {\r\n @if(relatorios().length > 0) {\r\n <div class=\"flex flex-row justify-content-between {{(readonly() || disabledEditor()) && 'pointer-events-none opacity-90'}}\">\r\n <div class=\"flex flex-row gap-2\">\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"op.toggle($event)\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-green-600 font-medium\"\r\n >\r\n contract\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">{{\r\n !clearedTemplate()\r\n ? relatorio()?.label || labelEmptyDropdown()\r\n : labelEmptyDropdown()\r\n }}</span>\r\n <span class=\"material-symbols-outlined text-lg\">\r\n keyboard_arrow_down\r\n </span>\r\n </div>\r\n\r\n @if(!clearedTemplate()) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"clearTemplate()\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-orange-600 font-medium\"\r\n [pTooltip]=\"'Limpar Template'\"\r\n >\r\n layers_clear\r\n </span>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"showInstrucoes()\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-blue-600 font-medium\"\r\n >\r\n info\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Instru\u00E7\u00F5es</span>\r\n </div>\r\n </div>\r\n\r\n <!-- @if(printButton()) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"openRelatorio()\"\r\n >\r\n <span class=\"material-symbols-outlined text-lg font-medium\">\r\n print\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Imprimir</span>\r\n </div>\r\n } -->\r\n </div>\r\n\r\n <p-divider class=\"w-full\"></p-divider>\r\n\r\n }\r\n }\r\n \r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between w-full flex-initial\"\r\n >\r\n @if(isLoading()) {\r\n\r\n <div class=\"flex flex-row align-items-center gap-3 w-full\">\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex-row align-items-center flex-wrap gap-2 {{\r\n isLoading() ? 'hidden' : 'flex'\r\n }} w-full\"\r\n >\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-font\">\r\n <option value=\"roboto\">Roboto</option>\r\n <option value=\"arial\">Arial</option>\r\n <option value=\"times-new-roman\">Times New Roman</option>\r\n <option value=\"monospace\">Monospace</option>\r\n <option value=\"inter\">Inter</option>\r\n <option selected>Sans Serif</option>\r\n <option value=\"serif\">Serif</option>\r\n </select>\r\n\r\n <select class=\"ql-header\">\r\n <option value=\"1\">Titulo</option>\r\n <option value=\"2\">Subtitulo</option>\r\n <option selected>Normal</option>\r\n </select>\r\n\r\n <span class=\"ql-format-group\">\r\n <select title=\"Size\" class=\"ql-size\">\r\n <option value=\"15px\">15px</option>\r\n <option value=\"20px\">20px</option>\r\n <option value=\"30px\">30px</option>\r\n <option value=\"40px\">40px</option>\r\n <option value=\"50px\">50px</option>\r\n <option value=\"70px\">70px</option>\r\n <option value=\"90px\">90px</option>\r\n </select>\r\n </span>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-bold\" pTooltip=\"Negrito\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-italic\" pTooltip=\"It\u00E1lico\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-underline\" pTooltip=\"Sublinhado\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-strike\" pTooltip=\"Tachado\" tooltipPosition=\"top\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-color\" pTooltip=\"Cor da fonte\" tooltipPosition=\"top\"></select>\r\n <select class=\"ql-background\" pTooltip=\"Cor de fundo\" tooltipPosition=\"top\"></select>\r\n </span>\r\n\r\n @if(true) {\r\n <!-- <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-header\" value=\"1\"></button>\r\n <button class=\"ql-header\" value=\"2\"></button>\r\n </span> -->\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-link\" pTooltip=\"Inserir link\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-image\" pTooltip=\"Inserir imagem\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-video\" pTooltip=\"Inserir v\u00EDdeo\" tooltipPosition=\"top\"></button>\r\n\r\n @if(enableButtonInsert()) {\r\n <button id=\"insert-custom-button\" pTooltip=\"Inserir bot\u00E3o\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\" style=\"transform: translate(0px, -1.7px); font-size: 22px;\">buttons_alt</span>\r\n </button>\r\n }\r\n \r\n @if(showAlphaCrmButtons()) {\r\n <button id=\"btn-alpha-aceitar\" pTooltip=\"Inserir bot\u00E3o Aceitar\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\" style=\"transform: translate(0px, -1.7px); font-size: 22px;\">variable_add</span>\r\n </button>\r\n\r\n <button id=\"btn-alpha-cancelar\" pTooltip=\"Inserir bot\u00E3o Cancelar\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\" style=\"transform: translate(0px, -1.7px); font-size: 22px;\">variable_remove</span>\r\n </button>\r\n\r\n <button id=\"btn-alpha-aceitar-assinar\" pTooltip=\"Inserir bot\u00E3o Aceitar e Assinar Contrato\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\" style=\"transform: translate(0px, -1px); font-size: 20px;\">new_label</span>\r\n </button>\r\n }\r\n\r\n @if(showAlphaContratoButtons()) {\r\n <button id=\"btn-alpha-contrato-assinar\" pTooltip=\"Inserir bot\u00E3o Assinar Contrato\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\" style=\"transform: translate(0px, -1.7px); font-size: 20px;\">contract_edit</span>\r\n </button>\r\n\r\n <button id=\"btn-alpha-contrato-recusar\" pTooltip=\"Inserir bot\u00E3o Recusar Contrato\" tooltipPosition=\"top\">\r\n <span class=\"material-symbols-outlined\" style=\"transform: translate(0px, -1.7px); font-size: 20px;\">contract_delete</span>\r\n </button>\r\n }\r\n\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-list\" value=\"ordered\" pTooltip=\"Lista ordenada\" tooltipPosition=\"top\"></button>\r\n <button class=\"ql-list\" value=\"bullet\" pTooltip=\"Lista com marcadores\" tooltipPosition=\"top\"></button>\r\n <select class=\"ql-align\" pTooltip=\"Alinhamento\" tooltipPosition=\"top\"></select>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n style=\"height: 3px; border-top: none; border-bottom: none\"\r\n [style.borderRight]=\"showHeader() ? '1px solid #e5e7eb' : 'none'\"\r\n [style.borderLeft]=\"showHeader() ? '1px solid #e5e7eb' : 'none'\"\r\n >\r\n @if(isLoadingPdf()) {\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" />\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-row flex-1 gap-0 overflow-auto\">\r\n <div\r\n id=\"kv-editor\"\r\n class=\"overflow-auto flex-1 scrollstyle\"\r\n [ngClass]=\"{\r\n 'error-border': hasControlError(),\r\n 'pointer-events-none opacity-60': isLoadingPdf()\r\n }\"\r\n [style.borderTop]=\"showHeader() ? 'none' : '1px solid #e5e7eb'\"\r\n [style.borderRight]=\"enablePreviewMode() ? 'none' : '1px solid #e5e7eb'\"\r\n ></div>\r\n\r\n @if(enablePreviewMode()) {\r\n <div class=\"flex flex-column flex-1\">\r\n <div \r\n class=\"flex align-items-center gap-2 px-3 py-2\" \r\n [style.borderRight]=\"'1px solid #e5e7eb'\"\r\n [style.borderLeft]=\"'1px solid #e5e7eb'\"\r\n >\r\n <span class=\"material-symbols-outlined text-blue-600 text-lg\">visibility</span>\r\n <span class=\"font-semibold text-gray-700 text-sm\">Preview</span>\r\n </div>\r\n \r\n <div\r\n id=\"kv-editor-preview\"\r\n class=\"overflow-auto flex-1 scrollstyle\"\r\n [innerHTML]=\"getPreviewContent\"\r\n [style.border]=\"'1px solid #e5e7eb'\"\r\n ></div>\r\n </div>\r\n }\r\n </div>\r\n\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n<!-- <link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css\" rel=\"stylesheet\" /> -->\r\n<link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\" />\r\n<script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\"></script>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.bubble.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css\"\r\n/>\r\n\r\n<p-overlayPanel #op styleClass=\"overflow-hidden\">\r\n <div\r\n class=\"grid m-0 gap-2 p-2 max-w-20rem overflow-y-auto scrollstyle\"\r\n style=\"max-height: 16rem\"\r\n >\r\n @for(item of relatorios(); track $index) {\r\n <div\r\n class=\"col-12 cursor-pointer hover:bg-gray-100 transition-colors transition-duration-200 border-round-lg shadow-2 flex flex-column gap-2\"\r\n (click)=\"setRelatorio(item)\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 justify-content-between\"\r\n >\r\n <span class=\"text-sm font-medium w-full\">{{ item.label }}</span>\r\n\r\n <kv-tags\r\n class=\"transition-opacity transition-duration-300 {{\r\n item?.id == idRelatorioSelected() ? 'opacity-100' : 'opacity-0'\r\n }}\"\r\n [tags]=\"[{ label: 'Selecionado', severity: 'primary' }]\"\r\n ></kv-tags>\r\n </div>\r\n <span class=\"text-xs text-gray-500\">{{ item.descricao }}</span>\r\n </div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n\r\n<div class=\"kv-editor-container flex flex-column overflow-hidden relative\">\r\n <div\r\n #mentionAnchor\r\n style=\"position: fixed; width: 1px; height: 1px; opacity: 0\"\r\n ></div>\r\n</div>\r\n\r\n<p-overlayPanel\r\n #opVariables\r\n [appendTo]=\"'body'\"\r\n (onHide)=\"closeVariablesPanel()\"\r\n>\r\n <div\r\n class=\"flex flex-column gap-1 p-1 overflow-y-auto scroll-virtual border-round-lg\"\r\n style=\"max-height: 250px; min-width: 250px; background-color: #333333\"\r\n >\r\n @for(variable of filteredVariables(); track variable.id) {\r\n <div\r\n class=\"p-2 cursor-pointer transition-colors transition-duration-200 border-round-lg text-sm text-white option-dropdown\"\r\n (click)=\"selectVariableFromPanel(variable)\"\r\n >\r\n @if (showVariableValueFirst()) {\r\n {{ variable.value }} (\r\n <span class=\"text-gray-400\">{{ variable.descricao }}</span> )\r\n } @else {\r\n {{ variable.descricao }} (\r\n <span class=\"text-gray-400\">{{ variable.value }}</span> )\r\n }\r\n </div>\r\n } @empty {\r\n <div class=\"p-2 text-sm text-gray-500\">Nenhuma vari\u00E1vel encontrada.</div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n\r\n<div\r\n #buttonNameTooltip\r\n class=\"button-name-tooltip\"\r\n [class.show]=\"showButtonTooltip()\"\r\n [style.top.px]=\"tooltipPosition().top\"\r\n [style.left.px]=\"tooltipPosition().left\"\r\n>\r\n <div class=\"flex flex-column gap-2 p-3 bg-white border-round-lg shadow-3\" style=\"min-width: 280px\">\r\n <div class=\"flex flex-column gap-1\">\r\n <label class=\"text-sm font-semibold text-gray-700\">Nome do Bot\u00E3o</label>\r\n <input\r\n #buttonNameInput\r\n type=\"text\"\r\n class=\"p-2 border-1 border-gray-300 border-round-md text-sm\"\r\n placeholder=\"Ex: Aceitar Proposta\"\r\n [(ngModel)]=\"buttonNameValue\"\r\n (keydown.enter)=\"confirmButtonName()\"\r\n (keydown.escape)=\"cancelButtonName()\"\r\n />\r\n </div>\r\n <div class=\"flex flex-row gap-2 justify-content-end\">\r\n <button\r\n class=\"px-3 py-2 border-1 border-gray-300 bg-white text-gray-700 border-round-md cursor-pointer text-sm font-medium hover:bg-gray-100 transition-colors\"\r\n (click)=\"cancelButtonName()\"\r\n >\r\n Cancelar\r\n </button>\r\n <button\r\n class=\"px-3 py-2 border-none bg-blue-600 text-white border-round-md cursor-pointer text-sm font-medium hover:bg-blue-700 transition-colors\"\r\n (click)=\"confirmButtonName()\"\r\n >\r\n Inserir\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep .ql-font-roboto{font-family:Roboto,sans-serif}:host ::ng-deep .ql-font-inter{font-family:Inter var,sans-serif}:host ::ng-deep .ql-font-arial{font-family:Arial,Arial,sans-serif}:host ::ng-deep .ql-font-times-new-roman{font-family:Times New Roman,Times,serif}:host ::ng-deep .ql-tooltip.ql-editing[data-mode=video]{transform:translate(40%)}:host ::ng-deep #kv-editor-toolbar{border-radius:6px 6px 0 0;border:1px solid #e5e7eb}:host ::ng-deep #kv-editor{border-radius:0 0 6px 6px;border:1px solid #e5e7eb}.error-border-toolbar{transition:all ease-in .2s;border-top-color:#e24c4c!important;border-bottom-color:#e24c4c!important;border-left-color:#e24c4c!important;border-right-color:#e24c4c!important}.error-border{border-color:#e24c4c!important;transition:all ease-in .2s}:host ::ng-deep .blot-formatter__resize-handle{background:#eaeaea!important}:host ::ng-deep #kv-editor-preview{border-radius:0 0 6px 6px;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper{font-family:Helvetica,Arial,sans-serif;font-size:13px;line-height:1.42;color:#000;padding:12px 15px;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper p{margin:0;padding:0;white-space:pre-wrap}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper *{white-space:pre-wrap}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper strong,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper b{font-weight:700!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper em,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper i{font-style:italic!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper u{text-decoration:underline!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper s,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper strike{text-decoration:line-through!important}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h1,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h2,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h3,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h4,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h5,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h6{font-weight:700;margin:0;padding:0}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h1{font-size:2em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h2{font-size:1.5em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h3{font-size:1.17em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h4{font-size:1em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h5{font-size:.83em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper h6{font-size:.67em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper a{color:#06c;text-decoration:underline}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper code{background-color:#f0f0f0;border-radius:3px;padding:2px 4px;font-family:monospace;font-size:85%}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper pre{background-color:#23241f;color:#f8f8f2;overflow:visible;border-radius:3px;padding:5px 10px;white-space:pre-wrap;margin-bottom:5px;margin-top:5px}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper pre code{background-color:transparent;border-radius:0;color:inherit;font-size:100%;padding:0}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper ol,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper ul{margin:0;padding-left:1.5em}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper img{max-width:100%;height:auto}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table{width:100%;border-collapse:collapse;margin-bottom:1rem}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table th,:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table td{border:1px solid #e5e7eb;padding:.5rem;text-align:left}:host ::ng-deep #kv-editor-preview .kv-editor-preview-wrapper table th{background-color:#f9fafb;font-weight:600}:ng-deep p{text-align:justify!important}:host ::ng-deep .editor-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffff80;display:flex;justify-content:center;align-items:center;z-index:100000;border-radius:inherit}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:after{background:#002542}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:before{background:#002542}::ng-deep .scroll-virtual{overflow-x:hidden}::ng-deep .scroll-virtual::-webkit-scrollbar{width:8px}::ng-deep .scroll-virtual::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scroll-virtual::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scroll-virtual:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scroll-virtual::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.option-dropdown{background-color:#333;transition:all ease-in .2s}.option-dropdown:hover{background-color:#444}.button-name-tooltip{position:fixed;z-index:10000;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all .2s ease-in-out;pointer-events:none}.button-name-tooltip.show{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.button-name-tooltip input{outline:none;transition:border-color .2s}.button-name-tooltip input:focus{border-color:#3b82f6!important;box-shadow:0 0 0 3px #3b82f61a}.button-name-tooltip button{transition:all .2s}.button-name-tooltip button:hover{transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.button-name-tooltip button:active{transform:translateY(0)}\n"] }]
|
|
723
717
|
}], ctorParameters: () => [{ type: i1.ComponentService }, { type: i2.DomSanitizer }], propDecorators: { canvaHeigth: [{
|
|
724
718
|
type: Input
|
|
725
719
|
}], contentType: [{
|
|
@@ -751,4 +745,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
751
745
|
type: ViewChild,
|
|
752
746
|
args: ['buttonNameInput']
|
|
753
747
|
}] } });
|
|
754
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFFTixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUdMLE1BQU0sRUFFTixNQUFNLEVBRU4sU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sS0FBSyxjQUFjLE1BQU0sT0FBTyxDQUFDO0FBR3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN2RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUUvRyxPQUFPLEVBR0wsb0JBQW9CLEVBQ3BCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ25CLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQWhCckIsTUFBTSxVQUFVLEdBQVMsY0FBc0IsQ0FBQyxPQUFPLElBQUksY0FBYyxDQUFDO0FBd0IxRSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsa0JBQTBCO0lBRS9ELFlBQ0UsZ0JBQWtDLEVBQzFCLFNBQXVCO1FBRS9CLEtBQUss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QUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBRWhELG9FQUFvRTtvQkFDcEUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7OEdBLzFCVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixnK0ZBRmpCLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLDRjQzVDbEQsbWpmQWdVTTs7MkZEbFJPLGlCQUFpQjtrQkFON0IsU0FBUzsrQkFDRSxXQUFXLGFBR1Ysa0JBQWtCLG1CQUFtQjtnSEEwQ3ZDLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBR0ksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBNERtQixXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ0ksYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNNLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0EsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBjb21wdXRlZCxcclxuICBlZmZlY3QsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgaW5qZWN0LFxyXG4gIGlucHV0LFxyXG4gIElucHV0LFxyXG4gIG1vZGVsLFxyXG4gIE9uSW5pdCxcclxuICBvdXRwdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBzaWduYWwsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFNlY3VyaXR5Q29udGV4dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5cclxuaW1wb3J0ICogYXMgUXVpbGxOYW1lc3BhY2UgZnJvbSAncXVpbGwnO1xyXG5jb25zdCBRdWlsbENsYXNzOiBhbnkgPSAoUXVpbGxOYW1lc3BhY2UgYXMgYW55KS5kZWZhdWx0IHx8IFF1aWxsTmFtZXNwYWNlO1xyXG5pbXBvcnQgeyBPdmVybGF5UGFuZWwgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudElucHV0IH0gZnJvbSAnLi4vLi4vLi4vYXBpL2Jhc2UtY29tcG9uZW50cy9iYXNlLWNvbXBvbmVudC1pbnB1dCc7XHJcbmltcG9ydCB7IENvbXBvbmVudFByb3ZpZGVycyB9IGZyb20gJy4uLy4uLy4uL2FwaS9oZWxwZXJzL2NvbXBvbmVudC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBpL3NlcnZpY2VzL2NvbXBvbmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgS3ZJbnN0cnVjb2VzUmVwb3J0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2t2LWluc3RydWNvZXMtcmVwb3J0L2t2LWluc3RydWNvZXMtcmVwb3J0LmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEt2RWRpdG9yUmVsYXRvcmlvLFxyXG4gIEt2RWRpdG9yVmFyaWF2ZWwsXHJcbiAgS3ZFZGl0b3JRdWlsbFNlcnZpY2UsXHJcbiAgS3ZFZGl0b3JSZWxhdG9yaW9TZXJ2aWNlLFxyXG4gIEt2RWRpdG9yTWVudGlvblNlcnZpY2UsXHJcbiAgS3ZFZGl0b3JQZGZTZXJ2aWNlXHJcbn0gZnJvbSAnLi9rdi1lZGl0b3InO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogQ29tcG9uZW50UHJvdmlkZXJzKEt2RWRpdG9yQ29tcG9uZW50KSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEt2RWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudElucHV0PHN0cmluZz4gaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGNvbXBvbmVudFNlcnZpY2U6IENvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBsZXQgcmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5KCk7XHJcbiAgICAgIGlmICh0aGlzLnF1aWxsKSB7XHJcbiAgICAgICAgdGhpcy5xdWlsbC5lbmFibGUoIXJlYWRvbmx5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgbGV0IGRpc2FibGVkID0gdGhpcy5kaXNhYmxlZEVkaXRvcigpO1xyXG4gICAgICBpZiAodGhpcy5xdWlsbCkge1xyXG4gICAgICAgIHRoaXMucXVpbGwuZW5hYmxlKCFkaXNhYmxlZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVByZXZpZXdNb2RlKCkpIHtcclxuICAgICAgICB0aGlzLmF0dWFsaXphclByZXZpZXcoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBJbmplw6fDo28gZGUgc2VydmnDp29zXHJcbiAgcHJpdmF0ZSBxdWlsbFNlcnZpY2UgPSBpbmplY3QoS3ZFZGl0b3JRdWlsbFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgcmVsYXRvcmlvU2VydmljZSA9IGluamVjdChLdkVkaXRvclJlbGF0b3Jpb1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgbWVudGlvblNlcnZpY2UgPSBpbmplY3QoS3ZFZGl0b3JNZW50aW9uU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBwZGZTZXJ2aWNlID0gaW5qZWN0KEt2RWRpdG9yUGRmU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xyXG5cclxuICAvLyBQcm9wcmllZGFkZXMgZGUgY29uZmlndXJhw6fDo29cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBFc3NhIHByb3ByaWVkYWRlIG7Do28gc2Vyw6EgbWFpcyB1dGlsaXphZGEgcG9yIGVzc2UgY29tcG9uZW50ZSBuYXMgcHLDs3hpbWFzIHZlcnPDtWVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNhbnZhSGVpZ3RoOiBzdHJpbmcgPSAnMzgwcHgnO1xyXG5cclxuICBASW5wdXQoKSBjb250ZW50VHlwZTogJ2h0bWwnIHwgJ3RleHQnID0gJ2h0bWwnO1xyXG4gIEBJbnB1dCgpIGRlYnVnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIEV2ZW50b3NcclxuICBAT3V0cHV0KCkgb25UZXh0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvdXRwdXRSYXc6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvdXRwdXRIdG1sOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcHJldmlld0h0bWxPdXRwdXQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkN1c3RvbUJ1dHRvbkNsaWNrOiBFdmVudEVtaXR0ZXI8eyBidXR0b25OYW1lOiBzdHJpbmc7IGZ1bmN0aW9uTmFtZTogc3RyaW5nOyBidXR0b25JZDogc3RyaW5nIH0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBQcm9wcmllZGFkZXMgaW50ZXJuYXNcclxuICBwcml2YXRlIHVwZGF0aW5nRWRpdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBsYXN0U2VsZWN0aW9uUmFuZ2U6IGFueSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBlZGl0b3JSZWFkeVJlc29sdmVyITogKCkgPT4gdm9pZDtcclxuICBwcml2YXRlIGVkaXRvclJlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XHJcbiAgICB0aGlzLmVkaXRvclJlYWR5UmVzb2x2ZXIgPSByZXNvbHZlO1xyXG4gIH0pO1xyXG5cclxuICAvLyBJbnN0w6JuY2lhIGRvIFF1aWxsXHJcbiAgcXVpbGwhOiBhbnk7XHJcbiAgaHRtbERvRWRpdG9yID0gJyc7XHJcbiAgcXVpbGxEZWx0YSA9IFF1aWxsQ2xhc3MuaW1wb3J0KCdkZWx0YScpO1xyXG5cclxuICAvLyBTaWduYWwgcGFyYSBlc3BlbGhhbWVudG8gZG8gY29udGXDumRvIGRvIGVkaXRvclxyXG4gIGh0bWxFc3BlbGhvID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG4gIHByZXZpZXdDb250ZW50ID0gc2lnbmFsPFNhZmVIdG1sPignJyk7XHJcblxyXG4gIC8vIFNpZ25hbHMgcGFyYSBjb250cm9sZSBkZSBlc3RhZG9cclxuICBpbml0TG9hZENvbXBsZXRlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgZWRpdG9yVG9vbGJhckhlaWdodCA9IHNpZ25hbDxzdHJpbmc+KCczcmVtJyk7XHJcbiAgLy8gdGlwb1Zpc3VhbGl6YWNhbyA9IHNpZ25hbDwndmFsb3InIHwgJ2Rlc2NyaWNhbyc+KCdkZXNjcmljYW8nKTtcclxuICBmaWx0ZXJlZFZhcmlhYmxlcyA9IHNpZ25hbDxLdkVkaXRvclZhcmlhdmVsW10+KFtdKTtcclxuICBjbGVhcmVkVGVtcGxhdGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzRnVsbHNjcmVlbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHRvZ2dsZUZ1bGxzY3JlZW4oKSB7XHJcbiAgICB0aGlzLmlzRnVsbHNjcmVlbi51cGRhdGUodiA9PiAhdik7XHJcbiAgfVxyXG5cclxuICAvL0lucHV0IHBhcmEgaGFiaWxpdGFyIHByZXZpZXdcclxuICBlbmFibGVQcmV2aWV3TW9kZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBzaG93VmFyaWFibGVWYWx1ZXNJblByZXZpZXcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgc2hvd1ZhcmlhYmxlVmFsdWVGaXJzdCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgLy8gSW5wdXRzIHBhcmEgcmVsYXTDs3Jpb3NcclxuICByZWxhdG9yaW9zID0gaW5wdXQ8S3ZFZGl0b3JSZWxhdG9yaW9bXT4oW10pO1xyXG4gIGlkUmVsYXRvcmlvSW5pdGlhbCA9IG1vZGVsPGFueT4oMCk7XHJcbiAgcHJpbnRCdXR0b24gPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuICBsYWJlbEVtcHR5RHJvcGRvd24gPSBpbnB1dDxzdHJpbmc+KCdTZWxlY2lvbmUgdW0gcmVsYXTDs3JpbycpO1xyXG4gIGluc3RydWNvZXNUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgc2hvd0hlYWRlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gIHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGRpc2FibGVkRWRpdG9yID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHNob3dIZWFkZXJCdXR0b25zID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIC8vIElucHV0cyBwYXJhIGJvdMO1ZXMgZXNwZWPDrWZpY29zIGRvIGFtYmllbnRlIEFscGhhXHJcbiAgc2hvd0FscGhhQ3JtQnV0dG9ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBzaG93QWxwaGFDb250cmF0b0J1dHRvbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGVuYWJsZUJ1dHRvbkluc2VydCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICAvLyBDb21wdXRlZCBwcm9wZXJ0aWVzIHBhcmEgcmVsYXTDs3Jpb3NcclxuICBpZFJlbGF0b3Jpb1NlbGVjdGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLmdldElkUmVsYXRvcmlvU2VsZWN0ZWQoKSk7XHJcbiAgcmVsYXRvcmlvID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLmdldFJlbGF0b3Jpb1NlbGVjdGVkKCkpO1xyXG4gIGlzTG9hZGluZ1BkZiA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGRmU2VydmljZS5nZXRJc0xvYWRpbmdQZGYoKSk7XHJcblxyXG4gIC8vIFZpZXdDaGlsZCBwYXJhIG92ZXJsYXkgcGFuZWxzXHJcbiAgQFZpZXdDaGlsZCgnb3BWYXJpYWJsZXMnKSBvcFZhcmlhYmxlcyE6IE92ZXJsYXlQYW5lbDtcclxuICBAVmlld0NoaWxkKCdtZW50aW9uQW5jaG9yJykgbWVudGlvbkFuY2hvciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnYnV0dG9uTmFtZVRvb2x0aXAnKSBidXR0b25OYW1lVG9vbHRpcCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnYnV0dG9uTmFtZUlucHV0JykgYnV0dG9uTmFtZUlucHV0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgLy8gU2lnbmFscyBwYXJhIGNvbnRyb2xhciBvIHRvb2x0aXAgZGUgbm9tZSBkbyBib3TDo29cclxuICBzaG93QnV0dG9uVG9vbHRpcCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgdG9vbHRpcFBvc2l0aW9uID0gc2lnbmFsPHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9Pih7IHRvcDogMCwgbGVmdDogMCB9KTtcclxuICBidXR0b25OYW1lVmFsdWU6IHN0cmluZyA9ICcnO1xyXG4gIHByaXZhdGUgcGVuZGluZ0J1dHRvblJhbmdlOiBhbnkgPSBudWxsO1xyXG5cclxuICBtZXNzYWdlcyA9IFt7IHNldmVyaXR5OiAnaW5mbycsIGRldGFpbDogJ01lc3NhZ2UgQ29udGVudCcgfV07XHJcblxyXG4gIC8vIE3DqXRvZG9zIHBhcmEgZ2VyZW5jaWFyIHJlbGF0w7NyaW9zXHJcbiAgc2V0UmVsYXRvcmlvUG9ySWQoaWQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgcmVsYXRvcmlvID0gdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLnNldFJlbGF0b3Jpb1BvcklkKGlkKTtcclxuICAgIGlmIChyZWxhdG9yaW8pIHtcclxuICAgICAgdGhpcy5zZXRSZWxhdG9yaW8ocmVsYXRvcmlvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFJlbGF0b3JpbyhyZWxhdG9yaW86IEt2RWRpdG9yUmVsYXRvcmlvKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyZWRUZW1wbGF0ZS5zZXQoZmFsc2UpO1xyXG4gICAgdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLnNldFJlbGF0b3JpbyhyZWxhdG9yaW8pO1xyXG4gICAgY29uc3QgbW9kZWxvID0gcmVsYXRvcmlvLm1vZGVsb1JlbGF0b3JpbyB8fCAnJztcclxuICAgIGNvbnN0IHZhcmlhdmVpcyA9IHJlbGF0b3Jpby52YXJpYXZlaXMgfHwgW107XHJcblxyXG4gICAgdGhpcy5odG1sRG9FZGl0b3IgPSB0aGlzLnJlbGF0b3Jpb1NlcnZpY2UucmVuZGVyQ29udHJhdG8obW9kZWxvLCB2YXJpYXZlaXMpO1xyXG4gICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IHRydWU7XHJcbiAgICB0aGlzLmVzY3JldmFWYWxvcih0aGlzLmh0bWxEb0VkaXRvcik7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgLy8gSW5pY2lhbGl6YSBvcyByZWxhdMOzcmlvcyBubyBzZXJ2acOnb1xyXG4gICAgdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLnNldFJlbGF0b3Jpb3ModGhpcy5yZWxhdG9yaW9zKCkpO1xyXG5cclxuICAgIGlmICghdGhpcy5xdWlsbCkge1xyXG4gICAgICB0aGlzLmhhbmRsZUluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcclxuICAgIH0sIDEwMDApO1xyXG5cclxuICAgIGlmICh0aGlzLmlkUmVsYXRvcmlvSW5pdGlhbCgpKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJlZFRlbXBsYXRlLnNldChmYWxzZSk7XHJcbiAgICAgIHRoaXMuc2V0UmVsYXRvcmlvUG9ySWQodGhpcy5pZFJlbGF0b3Jpb0luaXRpYWwoKSk7XHJcbiAgICB9IGVsc2UgdGhpcy5jbGVhcmVkVGVtcGxhdGUuc2V0KHRydWUpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVQcmV2aWV3TW9kZSgpKSB7XHJcbiAgICAgICAgdGhpcy5hdHVhbGl6YXJQcmV2aWV3KCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDE1MDApO1xyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2hvd0J1dHRvblRvb2x0aXAoKSAmJiB0aGlzLmJ1dHRvbk5hbWVUb29sdGlwKSB7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcEVsZW1lbnQgPSB0aGlzLmJ1dHRvbk5hbWVUb29sdGlwLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgaW5zZXJ0QnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2luc2VydC1jdXN0b20tYnV0dG9uJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCF0b29sdGlwRWxlbWVudC5jb250YWlucyhlLnRhcmdldCBhcyBOb2RlKSAmJiBcclxuICAgICAgICAgICAgIWluc2VydEJ1dHRvbj8uY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHtcclxuICAgICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uTmFtZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBoYW5kbGVJbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5xdWlsbFNlcnZpY2UubG9hZENzcygpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplUXVpbGxFZGl0b3IoKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVRdWlsbEVkaXRvcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHtcclxuICAgICAgdGhlbWU6ICdzbm93JyxcclxuICAgICAgbW9kdWxlczoge1xyXG4gICAgICAgIHRvb2xiYXI6ICcja3YtZWRpdG9yLXRvb2xiYXInLFxyXG4gICAgICAgIGNsaXBib2FyZDoge1xyXG4gICAgICAgICAgbWF0Y2hWaXN1YWw6IGZhbHNlLFxyXG4gICAgICAgICAgbWF0Y2hlcnM6IFtcclxuICAgICAgICAgICAgWycqJywgKG5vZGU6IGFueSwgZGVsdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkZWx0YTtcclxuICAgICAgICAgICAgfV1cclxuICAgICAgICAgIF1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGtleWJvYXJkOiB7XHJcbiAgICAgICAgICBiaW5kaW5nczoge1xyXG4gICAgICAgICAgICBiYWNrc3BhY2VWYXJpYWJsZToge1xyXG4gICAgICAgICAgICAgIGtleTogJ0JhY2tzcGFjZScsXHJcbiAgICAgICAgICAgICAgY29sbGFwc2VkOiB0cnVlLFxyXG4gICAgICAgICAgICAgIGhhbmRsZXI6IChyYW5nZTogYW55LCBjb250ZXh0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5pbmRleCA9PT0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbbGVhZl0gPSB0aGlzLnF1aWxsLmdldExlYWYocmFuZ2UuaW5kZXggLSAxKTtcclxuICAgICAgICAgICAgICAgIGlmIChsZWFmICYmIGxlYWYucGFyZW50ICYmIGxlYWYucGFyZW50LnN0YXRpY3MuYmxvdE5hbWUgPT09ICd2YXJpYXZlbCcpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYmxvdE9mZnNldCA9IHRoaXMucXVpbGwuZ2V0SW5kZXgobGVhZi5wYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBibG90TGVuZ3RoID0gbGVhZi5wYXJlbnQubGVuZ3RoKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucXVpbGwuZGVsZXRlVGV4dChibG90T2Zmc2V0LCBibG90TGVuZ3RoLCAndXNlcicpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRlbGV0ZVZhcmlhYmxlOiB7XHJcbiAgICAgICAgICAgICAga2V5OiAnRGVsZXRlJyxcclxuICAgICAgICAgICAgICBjb2xsYXBzZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgaGFuZGxlcjogKHJhbmdlOiBhbnksIGNvbnRleHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2xlYWZdID0gdGhpcy5xdWlsbC5nZXRMZWFmKHJhbmdlLmluZGV4KTtcclxuICAgICAgICAgICAgICAgIGlmIChsZWFmICYmIGxlYWYucGFyZW50ICYmIGxlYWYucGFyZW50LnN0YXRpY3MuYmxvdE5hbWUgPT09ICd2YXJpYXZlbCcpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYmxvdE9mZnNldCA9IHRoaXMucXVpbGwuZ2V0SW5kZXgobGVhZi5wYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBibG90TGVuZ3RoID0gbGVhZi5wYXJlbnQubGVuZ3RoKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucXVpbGwuZGVsZXRlVGV4dChibG90T2Zmc2V0LCBibG90TGVuZ3RoLCAndXNlcicpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNwYWNlVmFyaWFibGU6IHtcclxuICAgICAgICAgICAgICBrZXk6ICcgJyxcclxuICAgICAgICAgICAgICBjb2xsYXBzZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgaGFuZGxlcjogKHJhbmdlOiBhbnksIGNvbnRleHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2xlYWZdID0gdGhpcy5xdWlsbC5nZXRMZWFmKHJhbmdlLmluZGV4KTtcclxuICAgICAgICAgICAgICAgIGlmIChsZWFmICYmIGxlYWYucGFyZW50ICYmIGxlYWYucGFyZW50LnN0YXRpY3MuYmxvdE5hbWUgPT09ICd2YXJpYXZlbCcpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZm9ybWF0ICYmIGNvbnRleHQuZm9ybWF0LnZhcmlhdmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubGFiZWwgPyB0aGlzLmxhYmVsIDogJycsXHJcbiAgICAgIHJlYWRPbmx5OiB0aGlzLnJlYWRvbmx5KCkgfHwgdGhpcy5kaXNhYmxlZEVkaXRvcigpLFxyXG4gICAgICBkZWJ1ZzogdGhpcy5kZWJ1ZyxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5xdWlsbCA9IHRoaXMucXVpbGxTZXJ2aWNlLmNyZWF0ZVF1aWxsSW5zdGFuY2UoJyNrdi1lZGl0b3InLCBjb25maWcpO1xyXG5cclxuICAgIHRoaXMuY29uZmlndXJhckh0bWxDbGlwYm9hcmQoKTtcclxuXHJcbiAgICB0aGlzLnNldHVwQ3VzdG9tVG9vbGJhckJ1dHRvbnMoKTtcclxuICAgIHRoaXMuc2V0dXBRdWlsbEV2ZW50cygpO1xyXG4gICAgdGhpcy5lZGl0b3JSZWFkeVJlc29sdmVyKCk7XHJcbiAgICB0aGlzLmluaXRMb2FkQ29tcGxldGUuc2V0KHRydWUpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtQ29udHJvbDtcclxuICAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC5tYXJrQXNQcmlzdGluZSkge1xyXG4gICAgICAgIGNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBDdXN0b21Ub29sYmFyQnV0dG9ucygpIHtcclxuICAgIGNvbnN0IGluc2VydEN1c3RvbUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNpbnNlcnQtY3VzdG9tLWJ1dHRvbicpO1xyXG4gICAgaW5zZXJ0Q3VzdG9tQnV0dG9uPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudDogRXZlbnQpID0+IHtcclxuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnF1aWxsLmdldFNlbGVjdGlvbigpO1xyXG4gICAgICBpZiAocmFuZ2UpIHtcclxuICAgICAgICB0aGlzLnBlbmRpbmdCdXR0b25SYW5nZSA9IHJhbmdlO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTmFtZVZhbHVlID0gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgYnV0dG9uUmVjdCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ2J1dHRvbicpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBpZiAoYnV0dG9uUmVjdCkge1xyXG4gICAgICAgICAgdGhpcy50b29sdGlwUG9zaXRpb24uc2V0KHtcclxuICAgICAgICAgICAgdG9wOiBidXR0b25SZWN0LmJvdHRvbSArIDUsXHJcbiAgICAgICAgICAgIGxlZnQ6IGJ1dHRvblJlY3QubGVmdFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2hvd0J1dHRvblRvb2x0aXAuc2V0KHRydWUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuYnV0dG9uTmFtZUlucHV0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uTmFtZUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBidG5BbHBoYUFjZWl0YXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYnRuLWFscGhhLWFjZWl0YXInKTtcclxuICAgIGJ0bkFscGhhQWNlaXRhcj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5zZXJpckJvdG9lc0FscGhhKCdBY2VpdGFyIFByb3Bvc3RhJywgJ2FjZWl0YXJCdXR0b25BY3Rpb24nLCAnYmx1ZScpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYnRuQWxwaGFDYW5jZWxhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNidG4tYWxwaGEtY2FuY2VsYXInKTtcclxuICAgIGJ0bkFscGhhQ2FuY2VsYXI/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmluc2VyaXJCb3RvZXNBbHBoYSgnQ2FuY2VsYXIgUHJvcG9zdGEnLCAnY2FuY2VsYXJCdXR0b25BY3Rpb24nLCAnZ3JheScpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYnRuQWxwaGFBY2VpdGFyQXNzaW5hciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNidG4tYWxwaGEtYWNlaXRhci1hc3NpbmFyJyk7XHJcbiAgICBidG5BbHBoYUFjZWl0YXJBc3NpbmFyPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgdGhpcy5pbnNlcmlyQm90b2VzQWxwaGEoJ0FjZWl0YXIgUHJvcG9zdGEgZSBBc3NpbmFyIENvbnRyYXRvJywgJ2FjZWl0YXJBc3NpbmFyQWN0aW9uJywgJ2JsdWUnKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJ0bkFscGhhQ29udHJhdG9Bc3NpbmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2J0bi1hbHBoYS1jb250cmF0by1hc3NpbmFyJyk7XHJcbiAgICBidG5BbHBoYUNvbnRyYXRvQXNzaW5hcj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5zZXJpckJvdG9lc0FscGhhKCdBc3NpbmFyIENvbnRyYXRvJywgJ2Fzc2luYXJDb250cmF0b0FjdGlvbicsICdibHVlJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBidG5BbHBoYUNvbnRyYXRvUmVjdXNhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNidG4tYWxwaGEtY29udHJhdG8tcmVjdXNhcicpO1xyXG4gICAgYnRuQWxwaGFDb250cmF0b1JlY3VzYXI/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmluc2VyaXJCb3RvZXNBbHBoYSgnUmVjdXNhciBDb250cmF0bycsICdyZWN1c2FyQ29udHJhdG9BY3Rpb24nLCAnZ3JheScpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbnNlcmlyQm90b2VzQWxwaGEoYnV0dG9uTmFtZTogc3RyaW5nLCBmdW5jdGlvbk5hbWU6IHN0cmluZywgY29sb3I6ICdibHVlJyB8ICdncmF5Jyk6IHZvaWQge1xyXG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLnF1aWxsLmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFyYW5nZSkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICB0aGlzLnF1aWxsLmZvY3VzKCk7XHJcbiAgICBcclxuICAgIGNvbnN0IGJ1dHRvbklkID0gdGhpcy5nZW5lcmF0ZUJ1dHRvbklkKGJ1dHRvbk5hbWUpO1xyXG4gICAgY29uc3QgcGxhY2Vob2xkZXJUZXh0ID0gYFtCT1TDg086ICR7YnV0dG9uTmFtZX1dYDtcclxuICAgIFxyXG4gICAgY29uc3Qgc3R5bGVzID0gY29sb3IgPT09ICdibHVlJyBcclxuICAgICAgPyB7ICdjb2xvcic6ICcjMWUzYThhJywgJ2JvbGQnOiB0cnVlLCAnYmFja2dyb3VuZCc6ICcjZGJlYWZlJyB9XHJcbiAgICAgIDogeyAnY29sb3InOiAnIzQ0NDQ0NCcsICdib2xkJzogdHJ1ZSwgJ2JhY2tncm91bmQnOiAnI2UwZTBlMCcgfTtcclxuXHJcbiAgICB0aGlzLnF1aWxsLmluc2VydFRleHQocmFuZ2UuaW5kZXgsIHBsYWNlaG9sZGVyVGV4dCwgc3R5bGVzLCAndXNlcicpO1xyXG5cclxuICAgIGNvbnN0IGRlbHRhID0gbmV3IHRoaXMucXVpbGxEZWx0YSgpXHJcbiAgICAgIC5yZXRhaW4ocmFuZ2UuaW5kZXgpXHJcbiAgICAgIC5yZXRhaW4ocGxhY2Vob2xkZXJUZXh0Lmxlbmd0aCwgeyBcclxuICAgICAgICAnYnV0dG9uLWlkJzogYnV0dG9uSWQsXHJcbiAgICAgICAgJ2J1dHRvbi1vbmNsaWNrJzogZnVuY3Rpb25OYW1lLFxyXG4gICAgICAgICdidXR0b24tdGV4dCc6IGJ1dHRvbk5hbWVcclxuICAgICAgfSk7XHJcbiAgICBcclxuICAgIHRoaXMucXVpbGwudXBkYXRlQ29udGVudHMoZGVsdGEsICdzaWxlbnQnKTtcclxuICAgIHRoaXMucXVpbGwuc2V0U2VsZWN0aW9uKHJhbmdlLmluZGV4ICsgcGxhY2Vob2xkZXJUZXh0Lmxlbmd0aCwgMCk7XHJcbiAgICBcclxuICAgIHRoaXMucmVnaXN0ZXJCdXR0b25DYWxsYmFjayhmdW5jdGlvbk5hbWUsIGJ1dHRvbk5hbWUsIGJ1dHRvbklkKTtcclxuICB9XHJcblxyXG4gIGNvbmZpcm1CdXR0b25OYW1lKCk6IHZvaWQge1xyXG4gICAgY29uc3QgYnV0dG9uTmFtZSA9IHRoaXMuYnV0dG9uTmFtZVZhbHVlLnRyaW0oKTtcclxuICAgIFxyXG4gICAgaWYgKCFidXR0b25OYW1lKSB7XHJcbiAgICAgIHRoaXMuY2FuY2VsQnV0dG9uTmFtZSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0aGlzLnBlbmRpbmdCdXR0b25SYW5nZSkge1xyXG4gICAgICB0aGlzLnF1aWxsLmZvY3VzKCk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBidXR0b25JZCA9IHRoaXMuZ2VuZXJhdGVCdXR0b25JZChidXR0b25OYW1lKTtcclxuICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gdGhpcy5nZW5lcmF0ZUJ1dHRvbkZ1bmN0aW9uTmFtZShidXR0b25OYW1lKTtcclxuICAgICAgXHJcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyVGV4dCA9IGBbQk9Uw4NPOiAke2J1dHRvbk5hbWV9XWA7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLnF1aWxsLmluc2VydFRleHQodGhpcy5wZW5kaW5nQnV0dG9uUmFuZ2UuaW5kZXgsIHBsYWNlaG9sZGVyVGV4dCwge1xyXG4gICAgICAgICdjb2xvcic6ICcjMWUzYThhJyxcclxuICAgICAgICAnYm9sZCc6IHRydWUsXHJcbiAgICAgICAgJ2JhY2tncm91bmQnOiAnI2RiZWFmZScsXHJcbiAgICAgIH0sICd1c2VyJyk7XHJcblxyXG4gICAgICBjb25zdCBkZWx0YSA9IG5ldyB0aGlzLnF1aWxsRGVsdGEoKVxyXG4gICAgICAgIC5yZXRhaW4odGhpcy5wZW5kaW5nQnV0dG9uUmFuZ2UuaW5kZXgpXHJcbiAgICAgICAgLnJldGFpbihwbGFjZWhvbGRlclRleHQubGVuZ3RoLCB7IFxyXG4gICAgICAgICAgJ2J1dHRvbi1pZCc6IGJ1dHRvbklkLFxyXG4gICAgICAgICAgJ2J1dHRvbi1vbmNsaWNrJzogZnVuY3Rpb25OYW1lLFxyXG4gICAgICAgICAgJ2J1dHRvbi10ZXh0JzogYnV0dG9uTmFtZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5xdWlsbC51cGRhdGVDb250ZW50cyhkZWx0YSwgJ3NpbGVudCcpO1xyXG4gICAgICB0aGlzLnF1aWxsLnNldFNlbGVjdGlvbih0aGlzLnBlbmRpbmdCdXR0b25SYW5nZS5pbmRleCArIHBsYWNlaG9sZGVyVGV4dC5sZW5ndGgsIDApO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5yZWdpc3RlckJ1dHRvbkNhbGxiYWNrKGZ1bmN0aW9uTmFtZSwgYnV0dG9uTmFtZSwgYnV0dG9uSWQpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbk5hbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVnaXN0ZXJCdXR0b25DYWxsYmFjayhmdW5jdGlvbk5hbWU6IHN0cmluZywgYnV0dG9uTmFtZTogc3RyaW5nLCBidXR0b25JZD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgY2xlYW5GdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWUucmVwbGFjZSgnKCknLCAnJyk7XHJcbiAgICBjb25zdCBpZCA9IGJ1dHRvbklkIHx8IHRoaXMuZ2VuZXJhdGVCdXR0b25JZChidXR0b25OYW1lKTtcclxuICAgIFxyXG4gICAgKHdpbmRvdyBhcyBhbnkpW2NsZWFuRnVuY3Rpb25OYW1lXSA9ICgpID0+IHsgICAgICBcclxuICAgICAgdGhpcy5vbkN1c3RvbUJ1dHRvbkNsaWNrLmVtaXQoe1xyXG4gICAgICAgIGJ1dHRvbk5hbWU6IGJ1dHRvbk5hbWUsXHJcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBjbGVhbkZ1bmN0aW9uTmFtZSxcclxuICAgICAgICBidXR0b25JZDogaWRcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuIFxyXG4gIGNhbmNlbEJ1dHRvbk5hbWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dCdXR0b25Ub29sdGlwLnNldChmYWxzZSk7XHJcbiAgICB0aGlzLmJ1dHRvbk5hbWVWYWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5wZW5kaW5nQnV0dG9uUmFuZ2UgPSBudWxsO1xyXG4gICAgdGhpcy5xdWlsbC5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUJ1dHRvbklkKGJ1dHRvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSBidXR0b25OYW1lXHJcbiAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcclxuICAgICAgLnJlcGxhY2UoL1teYS16MC05XFxzXS9nLCAnJylcclxuICAgICAgLnRyaW0oKVxyXG4gICAgICAucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xyXG4gICAgXHJcbiAgICByZXR1cm4gYGJvdGFvXyR7c2FuaXRpemVkfV8ke0RhdGUubm93KCl9YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVCdXR0b25GdW5jdGlvbk5hbWUoYnV0dG9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHdvcmRzID0gYnV0dG9uTmFtZVxyXG4gICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXHJcbiAgICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOVxcc10vZywgJycpXHJcbiAgICAgIC50cmltKClcclxuICAgICAgLnNwbGl0KC9cXHMrLyk7XHJcbiAgICBcclxuICAgIGlmICh3b3Jkcy5sZW5ndGggPT09IDApIHJldHVybiAnYnV0dG9uQWN0aW9uKCknO1xyXG4gICAgXHJcbiAgICBjb25zdCBjYW1lbENhc2UgPSB3b3Jkc1xyXG4gICAgICAubWFwKCh3b3JkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxvd2VyV29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICByZXR1cm4gaW5kZXggPT09IDAgXHJcbiAgICAgICAgICA/IGxvd2VyV29yZCBcclxuICAgICAgICAgIDogbG93ZXJXb3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbG93ZXJXb3JkLnNsaWNlKDEpO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignJyk7XHJcbiAgICBcclxuICAgIHJldHVybiBgJHtjYW1lbENhc2V9QnV0dG9uQWN0aW9uKClgO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFF1aWxsRXZlbnRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5xdWlsbC5vbignc2VsZWN0aW9uLWNoYW5nZScsIChyYW5nZTogYW55LCBvbGRSYW5nZTogYW55LCBzb3VyY2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmFuZ2UpIHtcclxuICAgICAgICB0aGlzLmxhc3RTZWxlY3Rpb25SYW5nZSA9IHJhbmdlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgcmFuZ2U6IHJhbmdlLFxyXG4gICAgICAgIG9sZFJhbmdlOiBvbGRSYW5nZSxcclxuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnF1aWxsLm9uKCd0ZXh0LWNoYW5nZScsIChkZWx0YTogYW55LCBvbGRDb250ZW50czogYW55LCBzb3VyY2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoc291cmNlID09PSAndXNlcicgJiYgZGVsdGEub3BzKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmFySHRtbEF1dG9Db21wbGV0ZVRhZyhkZWx0YSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRpZ2l0b3VIYXNoID0gZGVsdGEub3BzLnNvbWUoKG9wOiBhbnkpID0+IG9wLmluc2VydCA9PT0gJyMnKTtcclxuICAgICAgICBpZiAoZGlnaXRvdUhhc2gpIHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlSGFzaEluc2VydGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucmVsYXRvcmlvcygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmhhbmRsZU1lbnRpb24oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGlzLnVwZGF0aW5nRWRpdG9yKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXNjcmV2YVZhbG9yKHRoaXMucXVpbGwuZ2V0U2VtYW50aWNIVE1MKCksIHRoaXMucXVpbGwuZ2V0VGV4dCgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5vblRleHRDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgICBkZWx0YTogZGVsdGEsXHJcbiAgICAgICAgICBvbGRDb250ZW50czogb2xkQ29udGVudHMsXHJcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5vdXRwdXRSYXcuZW1pdCh0aGlzLnF1aWxsLmdldFRleHQoKSk7XHJcbiAgICAgICAgdGhpcy5vdXRwdXRIdG1sLmVtaXQodGhpcy5xdWlsbC5nZXRTZW1hbnRpY0hUTUwoKSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVByZXZpZXdNb2RlKCkpIHtcclxuICAgICAgICAgIHRoaXMuYXR1YWxpemFyUHJldmlldygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSB0cnVlO1xyXG4gICAgdGhpcy5lc2NyZXZhVmFsb3IodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZXNjcmV2YVZhbG9yKGh0bWx2YWx1ZTogYW55LCByYXd2YWx1ZT86IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmluaXRMb2FkQ29tcGxldGUoKSkge1xyXG4gICAgICBhd2FpdCB0aGlzLmVkaXRvclJlYWR5UHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5xdWlsbCkge1xyXG4gICAgICBpZiAodGhpcy51cGRhdGluZ0VkaXRvcikge1xyXG4gICAgICAgIHRoaXMucXVpbGwuY2xpcGJvYXJkLmRhbmdlcm91c2x5UGFzdGVIVE1MKGh0bWx2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnZhbHVlID0gaHRtbHZhbHVlO1xyXG5cclxuICAgICAgaWYgKHJhd3ZhbHVlID09IFwiXFxuXCIgfHwgdGhpcy52YWx1ZSA9PSBcIlxcblwiKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5lbmFibGVQcmV2aWV3TW9kZSgpKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF0dWFsaXphclByZXZpZXcoKSwgMTAwKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub3V0cHV0SHRtbC5lbWl0KHRoaXMucXVpbGwuZ2V0U2VtYW50aWNIVE1MKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdG9yU2l6ZSgpOiB2b2lkIHtcclxuICAgIGxldCBlZGl0b3JGaWVsZEhlaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrdi1lZGl0b3ItdG9vbGJhcicpPy5vZmZzZXRIZWlnaHQ7XHJcbiAgICBpZiAoZWRpdG9yRmllbGRIZWlnaHQpIHtcclxuICAgICAgdGhpcy5lZGl0b3JUb29sYmFySGVpZ2h0LnNldChgJHtlZGl0b3JGaWVsZEhlaWdodH1weGApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb3BlblJlbGF0b3JpbygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmlzTG9hZGluZ1BkZigpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgaHRtbENvbnRlbnQgPSB0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTCgpO1xyXG4gICAgY29uc3QgcmVsYXRvcmlvID0gdGhpcy5yZWxhdG9yaW8oKTtcclxuICAgIC8vIGNvbnN0IHRpcG9WaXN1YWxpemFjYW8gPSB0aGlzLnRpcG9WaXN1YWxpemFjYW8oKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnBkZlNlcnZpY2Uub3BlblJlbGF0b3JpbyhodG1sQ29udGVudCwgcmVsYXRvcmlvLCAndmFsb3InKTtcclxuICB9XHJcblxyXG4gIC8vIE3DqXRvZG9zIHBhcmEgc2lzdGVtYSBkZSBtZW7Dp8O1ZXNcclxuICBoYW5kbGVNZW50aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnJlbGF0b3JpbygpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tZW50aW9uU2VydmljZS5oYW5kbGVNZW50aW9uKHRoaXMucXVpbGwsIHRoaXMucmVsYXRvcmlvKCkhLnZhcmlhdmVpcyk7XHJcbiAgICB0aGlzLmZpbHRlcmVkVmFyaWFibGVzLnNldChyZXN1bHQuZmlsdGVyZWRWYXJpYWJsZXMpO1xyXG5cclxuICAgIGlmIChyZXN1bHQuc2hvdWxkU2hvd1BhbmVsICYmIHJlc3VsdC5tZW50aW9uQm91bmRzKSB7XHJcbiAgICAgIHRoaXMuc2hvd1ZhcmlhYmxlc1BhbmVsKHJlc3VsdC5tZW50aW9uQm91bmRzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2xvc2VWYXJpYWJsZXNQYW5lbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93VmFyaWFibGVzUGFuZWwoYm91bmRzOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSk6IHZvaWQge1xyXG4gICAgY29uc3QgYW5jaG9yRWwgPSB0aGlzLm1lbnRpb25BbmNob3IubmF0aXZlRWxlbWVudDtcclxuICAgIGFuY2hvckVsLnN0eWxlLnRvcCA9IGAke2JvdW5kcy50b3B9cHhgO1xyXG4gICAgYW5jaG9yRWwuc3R5bGUubGVmdCA9IGAke2JvdW5kcy5sZWZ0fXB4YDtcclxuICAgIHRoaXMub3BWYXJpYWJsZXMuc2hvdyhudWxsLCBhbmNob3JFbCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RWYXJpYWJsZUZyb21QYW5lbCh2YXJpYWJsZTogS3ZFZGl0b3JWYXJpYXZlbCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZW50aW9uU2VydmljZS5pbnNlcnRWYXJpYWJsZSh0aGlzLnF1aWxsLCB2YXJpYWJsZSk7XHJcbiAgICB0aGlzLmNsb3NlVmFyaWFibGVzUGFuZWwoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlVmFyaWFibGVzUGFuZWwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vcFZhcmlhYmxlcykge1xyXG4gICAgICB0aGlzLm9wVmFyaWFibGVzLmhpZGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMubWVudGlvblNlcnZpY2UuY2xvc2VNZW50aW9uKCk7XHJcbiAgfVxyXG5cclxuICBzaG93SW5zdHJ1Y29lcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKEt2SW5zdHJ1Y29lc1JlcG9ydENvbXBvbmVudCwge1xyXG4gICAgICBoZWFkZXI6ICdJbnN0cnXDp8O1ZXMnLFxyXG4gICAgICB3aWR0aDogJzQwJScsXHJcbiAgICAgIGhlaWdodDogJzMwJScsXHJcbiAgICAgIG1vZGFsOiB0cnVlLFxyXG4gICAgICBjbG9zYWJsZTogdHJ1ZSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHRlbXBsYXRlOiB0aGlzLmluc3RydWNvZXNUZW1wbGF0ZSgpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJUZW1wbGF0ZSgpIHtcclxuICAgIC8vIExpbXBhIG8gdGVtcGxhdGUgZG8gZWRpdG9yXHJcbiAgICB0aGlzLmNsZWFyZWRUZW1wbGF0ZS5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLnNldFJlbGF0b3Jpb1BvcklkKDApO1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKCcnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uZmlndXJhckh0bWxDbGlwYm9hcmQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnF1aWxsLnJvb3Q7XHJcbiAgICBcclxuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIChlOiBDbGlwYm9hcmRFdmVudCkgPT4ge1xyXG4gICAgICBpZiAoZS5jbGlwYm9hcmREYXRhKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L2h0bWwnKTtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLnF1aWxsLmdldFNlbGVjdGlvbigpO1xyXG4gICAgICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGh0bWwgJiYgaHRtbC50cmltKCkpIHtcclxuICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBzZWxlY3Rpb24uaW5kZXg7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vYSBwYXJ0aXIgZGFxdWkgw6kgcGFyYSBldml0YXIgcXVlIG8gY29waWFyIHNlamEgZHVwbGljYWRvXHJcbiAgICAgICAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gdHJ1ZTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgdGhpcy5xdWlsbC5jbGlwYm9hcmQuZGFuZ2Vyb3VzbHlQYXN0ZUhUTUwoc3RhcnRJbmRleCwgaHRtbCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBuZXdMZW5ndGggPSB0aGlzLnF1aWxsLmdldExlbmd0aCgpO1xyXG4gICAgICAgICAgICB0aGlzLnF1aWxsLnNldFNlbGVjdGlvbihuZXdMZW5ndGgsIDApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUHJldmlld01vZGUoKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYXR1YWxpemFyUHJldmlldygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAxMCk7XHJcbiAgICAgICAgfSBcclxuICAgICAgICBlbHNlIGlmICh0ZXh0ICYmIHRleHQudHJpbSgpKSB7XHJcbiAgICAgICAgICB0aGlzLnF1aWxsLmluc2VydFRleHQoc2VsZWN0aW9uLmluZGV4LCB0ZXh0LCAndXNlcicpO1xyXG4gICAgICAgICAgdGhpcy5xdWlsbC5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLmluZGV4ICsgdGV4dC5sZW5ndGgsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gTcOpdG9kb3MgbW9kbyBwcmV2aWV3XHJcblxyXG4gIHByaXZhdGUgYXR1YWxpemFyUHJldmlldygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5xdWlsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBjb250ZXVkb0h0bWwgPSB0aGlzLnF1aWxsLnJvb3QuaW5uZXJIVE1MO1xyXG5cclxuICAgIGNvbnRldWRvSHRtbCA9IHRoaXMuZGVjb2RpZmljYXJFbnRpZGFkZXNIdG1sKGNvbnRldWRvSHRtbCk7XHJcbiAgICBcclxuICAgIHRoaXMuaHRtbEVzcGVsaG8uc2V0KGNvbnRldWRvSHRtbCk7XHJcblxyXG4gICAgY29uc3QgY29udGV1ZG9Qcm9jZXNzYWRvID0gdGhpcy5wcm9jZXNzYXJDb250ZXVkb1ByZXZpZXcoY29udGV1ZG9IdG1sKTtcclxuICAgIHRoaXMucHJldmlld0NvbnRlbnQuc2V0KGNvbnRldWRvUHJvY2Vzc2Fkbyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlY29kaWZpY2FyRW50aWRhZGVzSHRtbCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xyXG4gICAgdGV4dGFyZWEuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiB0ZXh0YXJlYS52YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uZmlndXJhckh0bWxBdXRvQ29tcGxldGVUYWcoZGVsdGE6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCFkZWx0YS5vcHMgfHwgZGVsdGEub3BzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHVsdGltb09wID0gZGVsdGEub3BzW2RlbHRhLm9wcy5sZW5ndGggLSAxXTtcclxuICAgIGlmICh1bHRpbW9PcC5pbnNlcnQgJiYgdHlwZW9mIHVsdGltb09wLmluc2VydCA9PT0gJ3N0cmluZycgJiYgdWx0aW1vT3AuaW5zZXJ0ID09PSAnPicpIHtcclxuICAgICAgY29uc3QgdGV4dG9BdHVhbCA9IHRoaXMucXVpbGwuZ2V0VGV4dCgpO1xyXG4gICAgICBjb25zdCBwb3NpY2FvQ3Vyc29yID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24oKT8uaW5kZXggfHwgMDtcclxuXHJcbiAgICAgIGNvbnN0IHRleHRvQW50ZXNDdXJzb3IgPSB0ZXh0b0F0dWFsLnN1YnN0cmluZygwLCBwb3NpY2FvQ3Vyc29yKTtcclxuXHJcbiAgICAgIGNvbnN0IHJlZ2V4VGFnQWJlcnRhID0gLzwoXFx3KykoPzpcXHMrW14+XSopPyg/PCFcXC8pXFw+JC87XHJcbiAgICAgIGNvbnN0IHZlcmlmaWNhclRhZyA9IHRleHRvQW50ZXNDdXJzb3IubWF0Y2gocmVnZXhUYWdBYmVydGEpO1xyXG5cclxuICAgICAgaWYgKHZlcmlmaWNhclRhZykge1xyXG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSB2ZXJpZmljYXJUYWdbMV07XHJcblxyXG4gICAgICAgIGNvbnN0IHRhZ3NJbmxpbmUgPSBbJ2ltZycsICdicicsICdocicsICdpbnB1dCcsICdtZXRhJywgJ2xpbmsnLCAnYXJlYScsICdiYXNlJywgJ2NvbCcsICdlbWJlZCcsICdzb3VyY2UnLCAndHJhY2snLCAnd2JyJ107XHJcblxyXG4gICAgICAgIGlmICghdGFnc0lubGluZS5pbmNsdWRlcyh0YWdOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0b0RlcG9pc0N1cnNvciA9IHRleHRvQXR1YWwuc3Vic3RyaW5nKHBvc2ljYW9DdXJzb3IpO1xyXG4gICAgICAgICAgY29uc3QgZmVjaGFyVGFnUmVnZXggPSBuZXcgUmVnRXhwKGBePFxcLyR7dGFnTmFtZX0+YCwgJ2knKTtcclxuXHJcbiAgICAgICAgICBpZiAoIWZlY2hhclRhZ1JlZ2V4LnRlc3QodGV4dG9EZXBvaXNDdXJzb3IpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnF1aWxsLmluc2VydFRleHQocG9zaWNhb0N1cnNvciwgYDwvJHt0YWdOYW1lfT5gLCAndXNlcicpO1xyXG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWlsbC5zZXRTZWxlY3Rpb24ocG9zaWNhb0N1cnNvciwgMCk7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvY2Vzc2FyQ29udGV1ZG9QcmV2aWV3KGNvbnRlbnQ6IHN0cmluZyk6IFNhZmVIdG1sIHtcclxuICAgIGlmICghY29udGVudCB8fCBjb250ZW50ID09PSAnXFxuJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoJzxwIGNsYXNzPVwidGV4dC1ncmF5LTQwMCB0ZXh0LXNtXCI+TyBjb250ZcO6ZG8gYXBhcmVjZXLDoSBhcXVpLi4uPC9wPicpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0eWxlUmVnZXggPSAvPHN0eWxlW14+XSo+KFtcXHNcXFNdKj8pPFxcL3N0eWxlPi9naTtcclxuICAgIGNvbnN0IHN0eWxlczogc3RyaW5nW10gPSBbXTtcclxuICAgIGxldCBjb250ZXVkb1Byb2Nlc3NhZG8gPSBjb250ZW50O1xyXG5cclxuICAgIGxldCBtYXRjaDtcclxuICAgIHdoaWxlICgobWF0Y2ggPSBzdHlsZVJlZ2V4LmV4ZWMoY29udGVudCkpICE9PSBudWxsKSB7XHJcbiAgICAgIHN0eWxlcy5wdXNoKG1hdGNoWzFdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb250ZXVkb1Byb2Nlc3NhZG8gPSB0aGlzLnJlbW92ZXJJbmRlbnRhY2FvSHRtbChjb250ZXVkb1Byb2Nlc3NhZG8pO1xyXG4gICAgXHJcbiAgICBjb250ZXVkb1Byb2Nlc3NhZG8gPSB0aGlzLnByb2Nlc3NhclZhcmlhdmVpc0NvbUh0bWwoY29udGV1ZG9Qcm9jZXNzYWRvKTtcclxuXHJcbiAgICBsZXQgY29udGV1ZG9GaW5hbCA9ICc8ZGl2IGNsYXNzPVwia3YtZWRpdG9yLXByZXZpZXctd3JhcHBlclwiPic7XHJcblxyXG4gICAgaWYgKHN0eWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnRldWRvRmluYWwgKz0gJzxzdHlsZT4nICsgc3R5bGVzLmpvaW4oJ1xcbicpICsgJzwvc3R5bGU+JztcclxuICAgIH1cclxuXHJcbiAgICBjb250ZXVkb0ZpbmFsICs9IGNvbnRldWRvUHJvY2Vzc2FkbztcclxuICAgIGNvbnRldWRvRmluYWwgKz0gJzwvZGl2Pic7XHJcblxyXG4gICAgdGhpcy5wcmV2aWV3SHRtbE91dHB1dC5lbWl0KGNvbnRldWRvRmluYWwpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChjb250ZXVkb0ZpbmFsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlckluZGVudGFjYW9IdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0YWdzUGVyc29uYWxpemFkYXMgPSBbJ2RpdicsICdzZWN0aW9uJywgJ2FydGljbGUnLCAnaGVhZGVyJywgJ2Zvb3RlcicsICduYXYnLCAnYXNpZGUnLCAnbWFpbicsICdmb3JtJywgJ3RhYmxlJywgJ3VsJywgJ29sJywgJ2JvZHknLCAnb3B0aW9uJywgJ3NlbGVjdCcsICdibG9ja3F1b3RlJ107XHJcbiAgICBcclxuICAgIGxldCByZXN1bHRhZG8gPSBodG1sO1xyXG4gICAgXHJcbiAgICB0YWdzUGVyc29uYWxpemFkYXMuZm9yRWFjaCh0YWcgPT4ge1xyXG4gICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYCg8JHt0YWd9W14+XSo+KShbXFxcXHNcXFxcU10qPykoPFxcXFwvJHt0YWd9PilgLCAnZ2knKTtcclxuICAgICAgXHJcbiAgICAgIHJlc3VsdGFkbyA9IHJlc3VsdGFkby5yZXBsYWNlKHJlZ2V4LCAobWF0Y2gsIGFiZXJ0dXJhLCBjb250ZXVkbywgZmVjaGFtZW50bykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRldWRvTGltcG8gPSBjb250ZXVkby5yZXBsYWNlKC8+XFxzKzwvZywgJz48Jyk7XHJcbiAgICAgICAgcmV0dXJuIGFiZXJ0dXJhICsgY29udGV1ZG9MaW1wbyArIGZlY2hhbWVudG87XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIHJldHVybiByZXN1bHRhZG87XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzSHRtbFN0cmluZyhzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFzdHIgfHwgdHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcclxuICAgIFxyXG4gICAgY29uc3QgdHJpbW1lZCA9IHN0ci50cmltKCk7XHJcbiAgICBcclxuICAgIGlmICghdHJpbW1lZC5zdGFydHNXaXRoKCc8JykgfHwgIXRyaW1tZWQuZW5kc1dpdGgoJz4nKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgXHJcbiAgICBjb25zdCBodG1sVGFnUmVnZXggPSAvPFxcLz9bYS16XVtcXHNcXFNdKj8+L2k7XHJcbiAgICBjb25zdCBoYXNPcGVuaW5nVGFnID0gLzxbYS16XVtcXHNcXFNdKj8+L2kudGVzdCh0cmltbWVkKTtcclxuICAgIGNvbnN0IGhhc0Nsb3NpbmdUYWcgPSAvPFxcL1thLXpdW1xcc1xcU10qPz4vaS50ZXN0KHRyaW1tZWQpO1xyXG4gICAgXHJcbiAgICByZXR1cm4gaHRtbFRhZ1JlZ2V4LnRlc3QodHJpbW1lZCkgJiYgKGhhc09wZW5pbmdUYWcgfHwgaGFzQ2xvc2luZ1RhZyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2Nlc3NhclZhcmlhdmVpc0NvbUh0bWwoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBjb250ZXVkb1Byb2Nlc3NhZG8gPSBjb250ZW50O1xyXG4gICAgXHJcbiAgICBjb250ZXVkb1Byb2Nlc3NhZG8gPSB0aGlzLnByb2Nlc3NhckJvdG9lc0N1c3RvbWl6YWRvcyhjb250ZXVkb1Byb2Nlc3NhZG8pO1xyXG4gICAgXHJcbiAgICBpZiAoIXRoaXMucmVsYXRvcmlvKCkgfHwgIXRoaXMucmVsYXRvcmlvKCkhLnZhcmlhdmVpcykge1xyXG4gICAgICByZXR1cm4gY29udGV1ZG9Qcm9jZXNzYWRvO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhcmlhdmVpcyA9IHRoaXMucmVsYXRvcmlvKCkhLnZhcmlhdmVpcztcclxuICAgIGNvbnN0IG1vc3RyYXJWYWxvcmVzID0gdGhpcy5zaG93VmFyaWFibGVWYWx1ZXNJblByZXZpZXcoKTtcclxuXHJcbiAgICB2YXJpYXZlaXMuZm9yRWFjaCh2YXJpYXZlbCA9PiB7XHJcbiAgICAgIGlmICghbW9zdHJhclZhbG9yZXMgJiYgIXRoaXMuaXNIdG1sU3RyaW5nKHZhcmlhdmVsLnZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcGxhY2Vob2xkZXJJZCA9IGB7JHt2YXJpYXZlbC5pZH19YDtcclxuICAgICAgXHJcbiAgICAgIGlmIChjb250ZXVkb1Byb2Nlc3NhZG8uaW5jbHVkZXMocGxhY2Vob2xkZXJJZCkpIHtcclxuICAgICAgICBjb250ZXVkb1Byb2Nlc3NhZG8gPSBjb250ZXVkb1Byb2Nlc3NhZG8uc3BsaXQocGxhY2Vob2xkZXJJZCkuam9pbih2YXJpYXZlbC52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcblxyXG4gICAgICBjb25zdCBwYXR0ZXJucyA9IFtcclxuICAgICAgICBgPHNwYW5bXj5dKmNsYXNzPVwiW15cIl0qbWVudGlvblteXCJdKlwiW14+XSo+XFxcXHMqJHt0aGlzLmVzY2FwZVJlZ2V4KHZhcmlhdmVsLmRlc2NyaWNhbyl9XFxcXHMqPC9zcGFuPmAsXHJcbiAgICAgICAgYDxzcGFuW14+XSpkYXRhLW1lbnRpb25bXj5dKj5cXFxccyoke3RoaXMuZXNjYXBlUmVnZXgodmFyaWF2ZWwuZGVzY3JpY2FvKX1cXFxccyo8L3NwYW4+YCxcclxuICAgICAgICBgPlxcXFxzKiR7dGhpcy5lc2NhcGVSZWdleCh2YXJpYXZlbC5kZXNjcmljYW8pfVxcXFxzKjxgLFxyXG4gICAgICAgIGA8W14+XSs+XFxcXHMqJHt0aGlzLmVzY2FwZVJlZ2V4KHZhcmlhdmVsLmRlc2NyaWNhbyl9XFxcXHMqPC9bXj5dKz5gXHJcbiAgICAgIF07XHJcblxyXG4gICAgICBsZXQgc3Vic3RpdHVpZG8gPSBmYWxzZTtcclxuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XHJcbiAgICAgICAgY29uc3QgcmVnZXhNZW50aW9uID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCAnZ2knKTtcclxuICAgICAgICBpZiAocmVnZXhNZW50aW9uLnRlc3QoY29udGV1ZG9Qcm9jZXNzYWRvKSkge1xyXG4gICAgICAgICAgY29udGV1ZG9Qcm9jZXNzYWRvID0gY29udGV1ZG9Qcm9jZXNzYWRvLnJlcGxhY2UocmVnZXhNZW50aW9uLCBcclxuICAgICAgICAgICAgcGF0dGVybi5zdGFydHNXaXRoKCc+JykgPyBgPiR7dmFyaWF2ZWwudmFsdWV9PGAgOiB2YXJpYXZlbC52YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHN1YnN0aXR1aWRvID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgaWYgKCFzdWJzdGl0dWlkbyAmJiBjb250ZXVkb1Byb2Nlc3NhZG8uaW5jbHVkZXModmFyaWF2ZWwuZGVzY3JpY2FvKSkge1xyXG4gICAgICAgIGNvbnRldWRvUHJvY2Vzc2FkbyA9IGNvbnRldWRvUHJvY2Vzc2Fkby5zcGxpdCh2YXJpYXZlbC5kZXNjcmljYW8pLmpvaW4odmFyaWF2ZWwudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY29udGV1ZG9Qcm9jZXNzYWRvO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcm9jZXNzYXJCb3RvZXNDdXN0b21pemFkb3MoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4Qm90YW8gPSAvXFxbQk9Uw4NPOlxccyooW15cXF1dKylcXF0vZztcclxuICAgIFxyXG4gICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZShyZWdleEJvdGFvLCAobWF0Y2gsIHRleHRvQm90YW8pID0+IHtcclxuICAgICAgY29uc3QgYnV0dG9uSWQgPSB0aGlzLmdlbmVyYXRlQnV0dG9uSWQodGV4dG9Cb3Rhbyk7XHJcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2VuZXJhdGVCdXR0b25GdW5jdGlvbk5hbWUodGV4dG9Cb3Rhbyk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLnJlZ2lzdGVyQnV0dG9uQ2FsbGJhY2soZnVuY3Rpb25OYW1lLCB0ZXh0b0JvdGFvLCBidXR0b25JZCk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBidXR0b25IdG1sID0gYDxidXR0b24gY2xhc3M9XCJiZy1ibHVlLTgwMCBib3JkZXItbm9uZSBib3JkZXItcm91bmQgY3Vyc29yLXBvaW50ZXIgZm9udC1zZW1pYm9sZCBwLTIgc2hhZG93LTMgdGV4dC13aGl0ZS1hbHBoYS05MCBhY3RpdmU6YmctYmx1ZS05MDBcIiBpZD1cIiR7YnV0dG9uSWR9XCIgb25jbGljaz1cIiR7ZnVuY3Rpb25OYW1lfVwiIHN0eWxlPVwiZm9udC1mYW1pbHk6SW50ZXIsSW50ZXIgdmFyLHNhbnMtc2VyaWYhaW1wb3J0YW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO1wiPiR7dGV4dG9Cb3Rhb308L2J1dHRvbj5gO1xyXG4gICAgICByZXR1cm4gYnV0dG9uSHRtbDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlc2NhcGVSZWdleChzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0UHJldmlld0NvbnRlbnQoKTogU2FmZUh0bWwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJldmlld0NvbnRlbnQoKTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHBhcmEgbGlkYXIgY29tIGluc2Vyw6fDo28gZGUgJyMnIGVtIGxpbmhhIHZhemlhXHJcbiAgICogSW5zZXJlIHRlbXBvcmFyaWFtZW50ZSB1bSBjYXJhY3RlcmUgaW52aXPDrXZlbCBwYXJhIGZvcsOnYXIgbyBvdmVybGF5IGFwYXJlY2VyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYW5kbGVIYXNoSW5zZXJ0aW9uKCk6IHZvaWQge1xyXG4gICAgLy8gQWRpYSBhIGV4ZWN1w6fDo28gcGFyYSBnYXJhbnRpciBxdWUgbyBRdWlsbCBwcm9jZXNzb3UgYSBpbnNlcsOnw6NvIGRvICcjJ1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKCFyYW5nZSkgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgdGV4dCA9IHRoaXMucXVpbGwuZ2V0VGV4dCgwLCByYW5nZS5pbmRleCk7XHJcbiAgICAgIGNvbnN0IGxhc3RIYXNoSW5kZXggPSB0ZXh0Lmxhc3RJbmRleE9mKCcjJyk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBWZXJpZmljYSBzZSBvICcjJyBlc3TDoSBubyBpbsOtY2lvIGRlIHVtYSBsaW5oYVxyXG4gICAgICBpZiAobGFzdEhhc2hJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBjb25zdCBjaGFyQmVmb3JlID0gbGFzdEhhc2hJbmRleCA+IDAgPyB0ZXh0W2xhc3RIYXNoSW5kZXggLSAxXSA6IG51bGw7XHJcbiAgICAgICAgLy8gUGVnYSBvIGNhcmFjdGVyZSBsb2dvIGFww7NzIG8gY3Vyc29yIHBhcmEgdmVyaWZpY2FyIHNlIGVzdMOhIHZhemlvXHJcbiAgICAgICAgY29uc3QgY2hhckFmdGVyID0gdGhpcy5xdWlsbC5nZXRUZXh0KHJhbmdlLmluZGV4LCAxKTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBpc0F0U3RhcnRPZkxpbmUgPSAobGFzdEhhc2hJbmRleCA9PT0gMCB8fCBjaGFyQmVmb3JlID09PSAnXFxuJyk7XHJcbiAgICAgICAgY29uc3QgaXNFbXB0eUFmdGVyID0gKCFjaGFyQWZ0ZXIgfHwgY2hhckFmdGVyID09PSAnXFxuJyB8fCBjaGFyQWZ0ZXIgPT09ICcnIHx8IGNoYXJBZnRlci50cmltKCkgPT09ICcnKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBTZSBlc3RpdmVyIG5vIGluw61jaW8gZGUgbGluaGEgdmF6aWEsIGZheiBvIFwidHJ1cXVlXCIgZGUgaW5zZXJpciBlIGFwYWdhclxyXG4gICAgICAgIGlmIChpc0F0U3RhcnRPZkxpbmUgJiYgaXNFbXB0eUFmdGVyKSB7XHJcbiAgICAgICAgICAvLyBJbnNlcmUgdW0gcG9udG8gdGVtcG9yYXJpYW1lbnRlIChtb2RvIHNpbGVuY2lvc28gcGFyYSBuw6NvIGRpc3BhcmFyIGV2ZW50b3MgcmVjdXJzaXZvcywgc2UgbsOjbyBmb3NzZSBjb250cm9sYWRvKVxyXG4gICAgICAgICAgLy8gTWFzIGFxdWkgdXNhbW9zIHNpbGVudCBlIGNoYW1hbW9zIGhhbmRsZU1lbnRpb24gbWFudWFsbWVudGVcclxuICAgICAgICAgIHRoaXMucXVpbGwuaW5zZXJ0VGV4dChyYW5nZS5pbmRleCwgJy4nLCAnc2lsZW50Jyk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIFJlbW92ZSBpbWVkaWF0YW1lbnRlXHJcbiAgICAgICAgICB0aGlzLnF1aWxsLmRlbGV0ZVRleHQocmFuZ2UuaW5kZXgsIDEsICdzaWxlbnQnKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gRm9yw6dhIGEgdmVyaWZpY2HDp8OjbyBkbyBtZW50aW9uIGFnb3JhIHF1ZSBvIGxheW91dCBmb2kgXCJwcm92b2NhZG9cIlxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVNZW50aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJrdi1lZGl0b3ItY29udGFpbmVyIGgtZnVsbCB3LWZ1bGwgbWF4LWgtZnVsbCBmbGV4IGZsZXgtY29sdW1uIG92ZXJmbG93LWhpZGRlblwiXHJcbiAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwiZGlzYWJsZWRFZGl0b3IoKVwiIFtjbGFzcy5vcGFjaXR5LTYwXT1cImRpc2FibGVkRWRpdG9yKClcIlxyXG4gIFtjbGFzcy5rdi1lZGl0b3ItZnVsbHNjcmVlbl09XCJpc0Z1bGxzY3JlZW4oKVwiPlxyXG4gIDxkaXYgI2VkaXRvciBpZD1cImt2LWVkaXRvci10b29sYmFyXCIgW25nQ2xhc3NdPVwieyAnZXJyb3ItYm9yZGVyLXRvb2xiYXInOiBoYXNDb250cm9sRXJyb3IoKSB9XCJcclxuICAgIGNsYXNzPVwie3sgc2hvd0hlYWRlcigpID8gJ2ZsZXgnIDogJ2hpZGRlbicgfX0gZmxleC1jb2x1bW4gZmxleC1pbml0aWFsIHFsLXRvb2xiYXIgcWwtc25vd1wiPlxyXG4gICAgQGlmKHNob3dIZWFkZXJCdXR0b25zKCkpIHtcclxuICAgIEBpZihyZWxhdG9yaW9zKCkubGVuZ3RoID4gMCkge1xyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4ge3socmVhZG9ubHkoKSB8fCBkaXNhYmxlZEVkaXRvcigpKSAmJiAncG9pbnRlci1ldmVudHMtbm9uZSBvcGFjaXR5LTkwJ319XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgYm9yZGVyLXJvdW5kLWxnIGJvcmRlci0xIGJvcmRlci1ncmF5LTIwMCBob3ZlcjpzaGFkb3ctMSBob3ZlcjpiZy1ncmF5LTEwMCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWFsbCB0cmFuc2l0aW9uLWR1cmF0aW9uLTMwMFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3AudG9nZ2xlKCRldmVudClcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnIHRleHQtZ3JlZW4tNjAwIGZvbnQtbWVkaXVtXCI+XHJcbiAgICAgICAgICAgIGNvbnRyYWN0XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC14cyB0ZXh0LWdyYXktNjAwXCI+e3tcclxuICAgICAgICAgICAgIWNsZWFyZWRUZW1wbGF0ZSgpXHJcbiAgICAgICAgICAgID8gcmVsYXRvcmlvKCk/LmxhYmVsIHx8IGxhYmVsRW1wdHlEcm9wZG93bigpXHJcbiAgICAgICAgICAgIDogbGFiZWxFbXB0eURyb3Bkb3duKClcclxuICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZ1wiPlxyXG4gICAgICAgICAgICBrZXlib2FyZF9hcnJvd19kb3duXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIEBpZighY2xlYXJlZFRlbXBsYXRlKCkpIHtcclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHAtMiBib3JkZXItcm91bmQtbGcgYm9yZGVyLTEgYm9yZGVyLWdyYXktMjAwIGhvdmVyOnNoYWRvdy0xIGhvdmVyOmJnLWdyYXktMTAwIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tYWxsIHRyYW5zaXRpb24tZHVyYXRpb24tMzAwXCJcclxuICAgICAgICAgIChjbGljayk9XCJjbGVhclRlbXBsYXRlKClcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnIHRleHQtb3JhbmdlLTYwMCBmb250LW1lZGl1bVwiIFtwVG9vbHRpcF09XCInTGltcGFyIFRlbXBsYXRlJ1wiPlxyXG4gICAgICAgICAgICBsYXllcnNfY2xlYXJcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcC0yIGJvcmRlci1yb3VuZC1sZyBib3JkZXItMSBib3JkZXItZ3JheS0yMDAgaG92ZXI6c2hhZG93LTEgaG92ZXI6YmctZ3JheS0xMDAgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1hbGwgdHJhbnNpdGlvbi1kdXJhdGlvbi0zMDBcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dJbnN0cnVjb2VzKClcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnIHRleHQtYmx1ZS02MDAgZm9udC1tZWRpdW1cIj5cclxuICAgICAgICAgICAgaW5mb1xyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQteHMgdGV4dC1ncmF5LTYwMFwiPkluc3RydcOnw7Vlczwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIEBpZihwcmludEJ1dHRvbigpKSB7XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcC0yIGJvcmRlci1yb3VuZC1sZyBib3JkZXItMSBib3JkZXItZ3JheS0yMDAgaG92ZXI6c2hhZG93LTEgaG92ZXI6YmctZ3JheS0xMDAgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1hbGwgdHJhbnNpdGlvbi1kdXJhdGlvbi0zMDBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblJlbGF0b3JpbygpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtbGcgZm9udC1tZWRpdW1cIj5cclxuICAgICAgICAgICAgICBwcmludFxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj5JbXByaW1pcjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfSAtLT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxwLWRpdmlkZXIgY2xhc3M9XCJ3LWZ1bGxcIj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LWZ1bGwgZmxleC1pbml0aWFsXCI+XHJcbiAgICAgIEBpZihpc0xvYWRpbmcoKSkge1xyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIHctZnVsbFwiPlxyXG4gICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIiBbc3R5bGVdPVwieyBoZWlnaHQ6ICcycmVtJyB9XCI+PC9wLXNrZWxldG9uPlxyXG5cclxuICAgICAgICA8cC1za2VsZXRvbiBzdHlsZUNsYXNzPVwidy02cmVtXCIgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgICAgPHAtc2tlbGV0b24gc3R5bGVDbGFzcz1cInctNnJlbVwiIFtzdHlsZV09XCJ7IGhlaWdodDogJzJyZW0nIH1cIj48L3Atc2tlbGV0b24+XHJcblxyXG4gICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIiBbc3R5bGVdPVwieyBoZWlnaHQ6ICcycmVtJyB9XCI+PC9wLXNrZWxldG9uPlxyXG5cclxuICAgICAgICA8cC1za2VsZXRvbiBzdHlsZUNsYXNzPVwidy02cmVtXCIgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwIGdhcC0yIHt7XHJcbiAgICAgICAgICBpc0xvYWRpbmcoKSA/ICdoaWRkZW4nIDogJ2ZsZXgnXHJcbiAgICAgICAgfX0gdy1mdWxsXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWZvbnRcIj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJvYm90b1wiPlJvYm90bzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYXJpYWxcIj5BcmlhbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidGltZXMtbmV3LXJvbWFuXCI+VGltZXMgTmV3IFJvbWFuPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJtb25vc3BhY2VcIj5Nb25vc3BhY2U8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImludGVyXCI+SW50ZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiBzZWxlY3RlZD5TYW5zIFNlcmlmPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzZXJpZlwiPlNlcmlmPC9vcHRpb24+XHJcbiAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwicWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxXCI+VGl0dWxvPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyXCI+U3VidGl0dWxvPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+Tm9ybWFsPC9vcHRpb24+XHJcbiAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdC1ncm91cFwiPlxyXG4gICAgICAgICAgICA8c2VsZWN0IHRpdGxlPVwiU2l6ZVwiIGNsYXNzPVwicWwtc2l6ZVwiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxNXB4XCI+MTVweDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyMHB4XCI+MjBweDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIzMHB4XCI+MzBweDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI0MHB4XCI+NDBweDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI1MHB4XCI+NTBweDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI3MHB4XCI+NzBweDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI5MHB4XCI+OTBweDwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxwLWRpdmlkZXIgbGF5b3V0PVwidmVydGljYWxcIj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWJvbGRcIiBwVG9vbHRpcD1cIk5lZ3JpdG9cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1pdGFsaWNcIiBwVG9vbHRpcD1cIkl0w6FsaWNvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtdW5kZXJsaW5lXCIgcFRvb2x0aXA9XCJTdWJsaW5oYWRvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtc3RyaWtlXCIgcFRvb2x0aXA9XCJUYWNoYWRvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1jb2xvclwiIHBUb29sdGlwPVwiQ29yIGRhIGZvbnRlXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwicWwtYmFja2dyb3VuZFwiIHBUb29sdGlwPVwiQ29yIGRlIGZ1bmRvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICBAaWYodHJ1ZSkge1xyXG4gICAgICAgIDwhLS0gPHAtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1oZWFkZXJcIiB2YWx1ZT1cIjFcIj48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaGVhZGVyXCIgdmFsdWU9XCIyXCI+PC9idXR0b24+XHJcbiAgICAgIDwvc3Bhbj4gLS0+XHJcblxyXG4gICAgICAgIDxwLWRpdmlkZXIgbGF5b3V0PVwidmVydGljYWxcIj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWxpbmtcIiBwVG9vbHRpcD1cIkluc2VyaXIgbGlua1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWltYWdlXCIgcFRvb2x0aXA9XCJJbnNlcmlyIGltYWdlbVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLXZpZGVvXCIgcFRvb2x0aXA9XCJJbnNlcmlyIHbDrWRlb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIEBpZihlbmFibGVCdXR0b25JbnNlcnQoKSkge1xyXG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImluc2VydC1jdXN0b20tYnV0dG9uXCIgcFRvb2x0aXA9XCJJbnNlcmlyIGJvdMOjb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwidHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAtMS43cHgpOyBmb250LXNpemU6IDIycHg7XCI+YnV0dG9uc19hbHQ8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBAaWYoc2hvd0FscGhhQ3JtQnV0dG9ucygpKSB7XHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuLWFscGhhLWFjZWl0YXJcIiBwVG9vbHRpcD1cIkluc2VyaXIgYm90w6NvIEFjZWl0YXJcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cInRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgLTEuN3B4KTsgZm9udC1zaXplOiAyMnB4O1wiPnZhcmlhYmxlX2FkZDwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDxidXR0b24gaWQ9XCJidG4tYWxwaGEtY2FuY2VsYXJcIiBwVG9vbHRpcD1cIkluc2VyaXIgYm90w6NvIENhbmNlbGFyXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIC0xLjdweCk7IGZvbnQtc2l6ZTogMjJweDtcIj52YXJpYWJsZV9yZW1vdmU8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuLWFscGhhLWFjZWl0YXItYXNzaW5hclwiIHBUb29sdGlwPVwiSW5zZXJpciBib3TDo28gQWNlaXRhciBlIEFzc2luYXIgQ29udHJhdG9cIlxyXG4gICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cInRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgLTFweCk7IGZvbnQtc2l6ZTogMjBweDtcIj5uZXdfbGFiZWw8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBAaWYoc2hvd0FscGhhQ29udHJhdG9CdXR0b25zKCkpIHtcclxuICAgICAgICAgIDxidXR0b24gaWQ9XCJidG4tYWxwaGEtY29udHJhdG8tYXNzaW5hclwiIHBUb29sdGlwPVwiSW5zZXJpciBib3TDo28gQXNzaW5hciBDb250cmF0b1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwidHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAtMS43cHgpOyBmb250LXNpemU6IDIwcHg7XCI+Y29udHJhY3RfZWRpdDwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDxidXR0b24gaWQ9XCJidG4tYWxwaGEtY29udHJhdG8tcmVjdXNhclwiIHBUb29sdGlwPVwiSW5zZXJpciBib3TDo28gUmVjdXNhciBDb250cmF0b1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwidHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAtMS43cHgpOyBmb250LXNpemU6IDIwcHg7XCI+Y29udHJhY3RfZGVsZXRlPC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgPHAtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtbGlzdFwiIHZhbHVlPVwib3JkZXJlZFwiIHBUb29sdGlwPVwiTGlzdGEgb3JkZW5hZGFcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1saXN0XCIgdmFsdWU9XCJidWxsZXRcIiBwVG9vbHRpcD1cIkxpc3RhIGNvbSBtYXJjYWRvcmVzXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwicWwtYWxpZ25cIiBwVG9vbHRpcD1cIkFsaW5oYW1lbnRvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMSBtaW4tdy0wXCI+PC9kaXY+XHJcbiAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgbS0wIG1sLWF1dG8gZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcHItMlwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC0xIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tY29sb3JzIHRyYW5zaXRpb24tZHVyYXRpb24tMjAwIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtZ3JheS03MDAgaG92ZXI6dGV4dC1ibHVlLTYwMFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGdWxsc2NyZWVuKClcIj5cclxuXHJcbiAgICAgICAgICAgIHt7aXNGdWxsc2NyZWVuKCkgPyAnRXhwYW5kaXInIDogJ1JlZHV6aXInfX1cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgc3R5bGU9XCJmb250LXNpemU6IDI0cHg7XCI+e3sgaXNGdWxsc2NyZWVuKCkgPyAnZnVsbHNjcmVlbl9leGl0JyA6XHJcbiAgICAgICAgICAgICAgJ2Z1bGxzY3JlZW4nIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9zcGFuPiAtLT5cclxuXHJcbiAgICAgICAgPGt2LWJ1dHRvbiBzZXZlcml0eT1cInRlcnRpYXJ5XCIgW2ljb25dPVwiaXNGdWxsc2NyZWVuKCkgPyAnZnVsbHNjcmVlbl9leGl0JyA6XHJcbiAgICAgICAgICAgICAgJ2Z1bGxzY3JlZW4nXCIgW2xhYmVsXT1cImlzRnVsbHNjcmVlbigpID8gJ1JlZHV6aXInIDogJ0V4cGFuZGlyJ1wiIChvbkNsaWNrKT1cInRvZ2dsZUZ1bGxzY3JlZW4oKVwiPlxyXG5cclxuICAgICAgICA8L2t2LWJ1dHRvbj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBzdHlsZT1cImhlaWdodDogM3B4OyBib3JkZXItdG9wOiBub25lOyBib3JkZXItYm90dG9tOiBub25lXCJcclxuICAgIFtzdHlsZS5ib3JkZXJSaWdodF09XCJzaG93SGVhZGVyKCkgPyAnMXB4IHNvbGlkICNlNWU3ZWInIDogJ25vbmUnXCJcclxuICAgIFtzdHlsZS5ib3JkZXJMZWZ0XT1cInNob3dIZWFkZXIoKSA/ICcxcHggc29saWQgI2U1ZTdlYicgOiAnbm9uZSdcIj5cclxuICAgIEBpZihpc0xvYWRpbmdQZGYoKSkge1xyXG4gICAgPHAtcHJvZ3Jlc3NCYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBbc3R5bGVdPVwieyBoZWlnaHQ6ICczcHgnIH1cIiAvPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LTEgZ2FwLTAgb3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgPGRpdiBpZD1cImt2LWVkaXRvclwiIGNsYXNzPVwib3ZlcmZsb3ctYXV0byBmbGV4LTEgc2Nyb2xsc3R5bGUgcWwtY29udGFpbmVyIHFsLXNub3dcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJ2Vycm9yLWJvcmRlcic6IGhhc0NvbnRyb2xFcnJvcigpLFxyXG4gICAgICAgICdwb2ludGVyLWV2ZW50cy1ub25lIG9wYWNpdHktNjAnOiBpc0xvYWRpbmdQZGYoKVxyXG4gICAgICB9XCIgW3N0eWxlLmJvcmRlclRvcF09XCJzaG93SGVhZGVyKCkgPyAnbm9uZScgOiAnMXB4IHNvbGlkICNlNWU3ZWInXCJcclxuICAgICAgW3N0eWxlLmJvcmRlclJpZ2h0XT1cImVuYWJsZVByZXZpZXdNb2RlKCkgPyAnbm9uZScgOiAnMXB4IHNvbGlkICNlNWU3ZWInXCI+PC9kaXY+XHJcblxyXG4gICAgQGlmKGVuYWJsZVByZXZpZXdNb2RlKCkpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGZsZXgtMVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0yXCIgW3N0eWxlLmJvcmRlclJpZ2h0XT1cIicxcHggc29saWQgI2U1ZTdlYidcIlxyXG4gICAgICAgIFtzdHlsZS5ib3JkZXJMZWZ0XT1cIicxcHggc29saWQgI2U1ZTdlYidcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1ibHVlLTYwMCB0ZXh0LWxnXCI+dmlzaWJpbGl0eTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMCB0ZXh0LXNtXCI+UHJldmlldzwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGlkPVwia3YtZWRpdG9yLXByZXZpZXdcIiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZmxleC0xIHNjcm9sbHN0eWxlXCIgW2lubmVySFRNTF09XCJnZXRQcmV2aWV3Q29udGVudFwiXHJcbiAgICAgICAgW3N0eWxlLmJvcmRlcl09XCInMXB4IHNvbGlkICNlNWU3ZWInXCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG48a3YtZXJyb3IgW2hhc0Vycm9yXT1cImhhc0NvbnRyb2xFcnJvcigpXCI+e3sgZXJyb01lc3NhZ2UoKSB9fTwva3YtZXJyb3I+XHJcblxyXG5cclxuPGxpbmsgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG9cIiByZWw9XCJzdHlsZXNoZWV0XCIgLz5cclxuPHNjcmlwdCBzcmM9XCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3F1aWxsQDIuMC4yL2Rpc3QvcXVpbGwuanNcIj48L3NjcmlwdD5cclxuPHNjcmlwdCBzcmM9XCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2thdGV4QDAuMTYuOS9kaXN0L2thdGV4Lm1pbi5qc1wiPjwvc2NyaXB0PlxyXG5cclxuPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3F1aWxsQDIuMC4yL2Rpc3QvcXVpbGwuYnViYmxlLmNzc1wiIC8+XHJcbjxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvaGlnaGxpZ2h0LmpzLzExLjkuMC9zdHlsZXMvYXRvbS1vbmUtZGFyay5taW4uY3NzXCIgLz5cclxuPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2thdGV4QDAuMTYuOS9kaXN0L2thdGV4Lm1pbi5jc3NcIiAvPlxyXG5cclxuPHAtb3ZlcmxheVBhbmVsICNvcCBzdHlsZUNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgPGRpdiBjbGFzcz1cImdyaWQgbS0wIGdhcC0yIHAtMiBtYXgtdy0yMHJlbSBvdmVyZmxvdy15LWF1dG8gc2Nyb2xsc3R5bGVcIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDE2cmVtXCI+XHJcbiAgICBAZm9yKGl0ZW0gb2YgcmVsYXRvcmlvcygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJjb2wtMTIgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctZ3JheS0xMDAgdHJhbnNpdGlvbi1jb2xvcnMgdHJhbnNpdGlvbi1kdXJhdGlvbi0yMDAgYm9yZGVyLXJvdW5kLWxnIHNoYWRvdy0yIGZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIlxyXG4gICAgICAoY2xpY2spPVwic2V0UmVsYXRvcmlvKGl0ZW0pXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bSB3LWZ1bGxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxyXG5cclxuICAgICAgICA8a3YtdGFncyBjbGFzcz1cInRyYW5zaXRpb24tb3BhY2l0eSB0cmFuc2l0aW9uLWR1cmF0aW9uLTMwMCB7e1xyXG4gICAgICAgICAgICBpdGVtPy5pZCA9PSBpZFJlbGF0b3Jpb1NlbGVjdGVkKCkgPyAnb3BhY2l0eS0xMDAnIDogJ29wYWNpdHktMCdcclxuICAgICAgICAgIH19XCIgW3RhZ3NdPVwiW3sgbGFiZWw6ICdTZWxlY2lvbmFkbycsIHNldmVyaXR5OiAncHJpbWFyeScgfV1cIj48L2t2LXRhZ3M+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgdGV4dC1ncmF5LTUwMFwiPnt7IGl0ZW0uZGVzY3JpY2FvIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvcC1vdmVybGF5UGFuZWw+XHJcblxyXG48ZGl2IGNsYXNzPVwia3YtZWRpdG9yLWNvbnRhaW5lciBmbGV4IGZsZXgtY29sdW1uIG92ZXJmbG93LWhpZGRlbiByZWxhdGl2ZVwiPlxyXG4gIDxkaXYgI21lbnRpb25BbmNob3Igc3R5bGU9XCJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAxcHg7IGhlaWdodDogMXB4OyBvcGFjaXR5OiAwXCI+PC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPHAtb3ZlcmxheVBhbmVsICNvcFZhcmlhYmxlcyBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgKG9uSGlkZSk9XCJjbG9zZVZhcmlhYmxlc1BhbmVsKClcIj5cclxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBnYXAtMSBwLTEgb3ZlcmZsb3cteS1hdXRvIHNjcm9sbC12aXJ0dWFsIGJvcmRlci1yb3VuZC1sZ1wiXHJcbiAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDI1MHB4OyBtaW4td2lkdGg6IDI1MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzXCI+XHJcbiAgICBAZm9yKHZhcmlhYmxlIG9mIGZpbHRlcmVkVmFyaWFibGVzKCk7IHRyYWNrIHZhcmlhYmxlLmlkKSB7XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwicC0yIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tY29sb3JzIHRyYW5zaXRpb24tZHVyYXRpb24tMjAwIGJvcmRlci1yb3VuZC1sZyB0ZXh0LXNtIHRleHQtd2hpdGUgb3B0aW9uLWRyb3Bkb3duXCJcclxuICAgICAgKGNsaWNrKT1cInNlbGVjdFZhcmlhYmxlRnJvbVBhbmVsKHZhcmlhYmxlKVwiPlxyXG4gICAgICBAaWYgKHNob3dWYXJpYWJsZVZhbHVlRmlyc3QoKSkge1xyXG4gICAgICB7eyB2YXJpYWJsZS52YWx1ZSB9fSAoXHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTQwMFwiPnt7IHZhcmlhYmxlLmRlc2NyaWNhbyB9fTwvc3Bhbj4gKVxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAge3sgdmFyaWFibGUuZGVzY3JpY2FvIH19IChcclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWdyYXktNDAwXCI+e3sgdmFyaWFibGUudmFsdWUgfX08L3NwYW4+IClcclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICB9IEBlbXB0eSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwicC0yIHRleHQtc20gdGV4dC1ncmF5LTUwMFwiPk5lbmh1bWEgdmFyacOhdmVsIGVuY29udHJhZGEuPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvcC1vdmVybGF5UGFuZWw+XHJcblxyXG48ZGl2ICNidXR0b25OYW1lVG9vbHRpcCBjbGFzcz1cImJ1dHRvbi1uYW1lLXRvb2x0aXBcIiBbY2xhc3Muc2hvd109XCJzaG93QnV0dG9uVG9vbHRpcCgpXCJcclxuICBbc3R5bGUudG9wLnB4XT1cInRvb2x0aXBQb3NpdGlvbigpLnRvcFwiIFtzdHlsZS5sZWZ0LnB4XT1cInRvb2x0aXBQb3NpdGlvbigpLmxlZnRcIj5cclxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBnYXAtMiBwLTMgYmctd2hpdGUgYm9yZGVyLXJvdW5kLWxnIHNoYWRvdy0zXCIgc3R5bGU9XCJtaW4td2lkdGg6IDI4MHB4XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBnYXAtMVwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMFwiPk5vbWUgZG8gQm90w6NvPC9sYWJlbD5cclxuICAgICAgPGlucHV0ICNidXR0b25OYW1lSW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cInAtMiBib3JkZXItMSBib3JkZXItZ3JheS0zMDAgYm9yZGVyLXJvdW5kLW1kIHRleHQtc21cIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRXg6IEFjZWl0YXIgUHJvcG9zdGFcIiBbKG5nTW9kZWwpXT1cImJ1dHRvbk5hbWVWYWx1ZVwiIChrZXlkb3duLmVudGVyKT1cImNvbmZpcm1CdXR0b25OYW1lKClcIlxyXG4gICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJjYW5jZWxCdXR0b25OYW1lKClcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cInB4LTMgcHktMiBib3JkZXItMSBib3JkZXItZ3JheS0zMDAgYmctd2hpdGUgdGV4dC1ncmF5LTcwMCBib3JkZXItcm91bmQtbWQgY3Vyc29yLXBvaW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSBob3ZlcjpiZy1ncmF5LTEwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgKGNsaWNrKT1cImNhbmNlbEJ1dHRvbk5hbWUoKVwiPlxyXG4gICAgICAgIENhbmNlbGFyXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJweC0zIHB5LTIgYm9yZGVyLW5vbmUgYmctYmx1ZS02MDAgdGV4dC13aGl0ZSBib3JkZXItcm91bmQtbWQgY3Vyc29yLXBvaW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSBob3ZlcjpiZy1ibHVlLTcwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgKGNsaWNrKT1cImNvbmZpcm1CdXR0b25OYW1lKClcIj5cclxuICAgICAgICBJbnNlcmlyXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
748
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFFTixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUdMLE1BQU0sRUFFTixNQUFNLEVBRU4sU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFOUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFFL0csT0FBTyxFQUdMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNuQixNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVFyQixNQUFNLE9BQU8saUJBQWtCLFNBQVEsa0JBQTBCO0lBRS9ELFlBQ0UsZ0JBQWtDLEVBQzFCLFNBQXVCO1FBRS9CLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRmhCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUF5QmpDLHNCQUFz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RkFGakIsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsNGNDM0NsRCxvcWZBaVlBOzsyRkRwVmEsaUJBQWlCO2tCQU43QixTQUFTOytCQUNFLFdBQVcsYUFHVixrQkFBa0IsbUJBQW1CO2dIQTBDdkMsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFHSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkF1RG1CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDSSxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ00saUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDQSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIGNvbXB1dGVkLFxyXG4gIGVmZmVjdCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBpbmplY3QsXHJcbiAgaW5wdXQsXHJcbiAgSW5wdXQsXHJcbiAgbW9kZWwsXHJcbiAgT25Jbml0LFxyXG4gIG91dHB1dCxcclxuICBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIHNpZ25hbCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgU2VjdXJpdHlDb250ZXh0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcblxyXG5pbXBvcnQgUXVpbGwgZnJvbSAncXVpbGwnO1xyXG5pbXBvcnQgeyBPdmVybGF5UGFuZWwgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudElucHV0IH0gZnJvbSAnLi4vLi4vLi4vYXBpL2Jhc2UtY29tcG9uZW50cy9iYXNlLWNvbXBvbmVudC1pbnB1dCc7XHJcbmltcG9ydCB7IENvbXBvbmVudFByb3ZpZGVycyB9IGZyb20gJy4uLy4uLy4uL2FwaS9oZWxwZXJzL2NvbXBvbmVudC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBpL3NlcnZpY2VzL2NvbXBvbmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgS3ZJbnN0cnVjb2VzUmVwb3J0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2t2LWluc3RydWNvZXMtcmVwb3J0L2t2LWluc3RydWNvZXMtcmVwb3J0LmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEt2RWRpdG9yUmVsYXRvcmlvLFxyXG4gIEt2RWRpdG9yVmFyaWF2ZWwsXHJcbiAgS3ZFZGl0b3JRdWlsbFNlcnZpY2UsXHJcbiAgS3ZFZGl0b3JSZWxhdG9yaW9TZXJ2aWNlLFxyXG4gIEt2RWRpdG9yTWVudGlvblNlcnZpY2UsXHJcbiAgS3ZFZGl0b3JQZGZTZXJ2aWNlXHJcbn0gZnJvbSAnLi9rdi1lZGl0b3InO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogQ29tcG9uZW50UHJvdmlkZXJzKEt2RWRpdG9yQ29tcG9uZW50KSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEt2RWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudElucHV0PHN0cmluZz4gaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGNvbXBvbmVudFNlcnZpY2U6IENvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBsZXQgcmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5KCk7XHJcbiAgICAgIGlmICh0aGlzLnF1aWxsKSB7XHJcbiAgICAgICAgdGhpcy5xdWlsbC5lbmFibGUoIXJlYWRvbmx5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgbGV0IGRpc2FibGVkID0gdGhpcy5kaXNhYmxlZEVkaXRvcigpO1xyXG4gICAgICBpZiAodGhpcy5xdWlsbCkge1xyXG4gICAgICAgIHRoaXMucXVpbGwuZW5hYmxlKCFkaXNhYmxlZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVByZXZpZXdNb2RlKCkpIHtcclxuICAgICAgICB0aGlzLmF0dWFsaXphclByZXZpZXcoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBJbmplw6fDo28gZGUgc2VydmnDp29zXHJcbiAgcHJpdmF0ZSBxdWlsbFNlcnZpY2UgPSBpbmplY3QoS3ZFZGl0b3JRdWlsbFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgcmVsYXRvcmlvU2VydmljZSA9IGluamVjdChLdkVkaXRvclJlbGF0b3Jpb1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgbWVudGlvblNlcnZpY2UgPSBpbmplY3QoS3ZFZGl0b3JNZW50aW9uU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBwZGZTZXJ2aWNlID0gaW5qZWN0KEt2RWRpdG9yUGRmU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xyXG5cclxuICAvLyBQcm9wcmllZGFkZXMgZGUgY29uZmlndXJhw6fDo29cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBFc3NhIHByb3ByaWVkYWRlIG7Do28gc2Vyw6EgbWFpcyB1dGlsaXphZGEgcG9yIGVzc2UgY29tcG9uZW50ZSBuYXMgcHLDs3hpbWFzIHZlcnPDtWVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNhbnZhSGVpZ3RoOiBzdHJpbmcgPSAnMzgwcHgnO1xyXG5cclxuICBASW5wdXQoKSBjb250ZW50VHlwZTogJ2h0bWwnIHwgJ3RleHQnID0gJ2h0bWwnO1xyXG4gIEBJbnB1dCgpIGRlYnVnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIEV2ZW50b3NcclxuICBAT3V0cHV0KCkgb25UZXh0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvdXRwdXRSYXc6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvdXRwdXRIdG1sOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcHJldmlld0h0bWxPdXRwdXQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkN1c3RvbUJ1dHRvbkNsaWNrOiBFdmVudEVtaXR0ZXI8eyBidXR0b25OYW1lOiBzdHJpbmc7IGZ1bmN0aW9uTmFtZTogc3RyaW5nOyBidXR0b25JZDogc3RyaW5nIH0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBQcm9wcmllZGFkZXMgaW50ZXJuYXNcclxuICBwcml2YXRlIHVwZGF0aW5nRWRpdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBsYXN0U2VsZWN0aW9uUmFuZ2U6IGFueSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBlZGl0b3JSZWFkeVJlc29sdmVyITogKCkgPT4gdm9pZDtcclxuICBwcml2YXRlIGVkaXRvclJlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XHJcbiAgICB0aGlzLmVkaXRvclJlYWR5UmVzb2x2ZXIgPSByZXNvbHZlO1xyXG4gIH0pO1xyXG5cclxuICAvLyBJbnN0w6JuY2lhIGRvIFF1aWxsXHJcbiAgcXVpbGwhOiBRdWlsbDtcclxuICBodG1sRG9FZGl0b3IgPSAnJztcclxuICBxdWlsbERlbHRhID0gUXVpbGwuaW1wb3J0KCdkZWx0YScpO1xyXG5cclxuICAvLyBTaWduYWwgcGFyYSBlc3BlbGhhbWVudG8gZG8gY29udGXDumRvIGRvIGVkaXRvclxyXG4gIGh0bWxFc3BlbGhvID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG4gIHByZXZpZXdDb250ZW50ID0gc2lnbmFsPFNhZmVIdG1sPignJyk7XHJcblxyXG4gIC8vIFNpZ25hbHMgcGFyYSBjb250cm9sZSBkZSBlc3RhZG9cclxuICBpbml0TG9hZENvbXBsZXRlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgZWRpdG9yVG9vbGJhckhlaWdodCA9IHNpZ25hbDxzdHJpbmc+KCczcmVtJyk7XHJcbiAgLy8gdGlwb1Zpc3VhbGl6YWNhbyA9IHNpZ25hbDwndmFsb3InIHwgJ2Rlc2NyaWNhbyc+KCdkZXNjcmljYW8nKTtcclxuICBmaWx0ZXJlZFZhcmlhYmxlcyA9IHNpZ25hbDxLdkVkaXRvclZhcmlhdmVsW10+KFtdKTtcclxuICBjbGVhcmVkVGVtcGxhdGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAvL0lucHV0IHBhcmEgaGFiaWxpdGFyIHByZXZpZXdcclxuICBlbmFibGVQcmV2aWV3TW9kZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBzaG93VmFyaWFibGVWYWx1ZXNJblByZXZpZXcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgc2hvd1ZhcmlhYmxlVmFsdWVGaXJzdCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgLy8gSW5wdXRzIHBhcmEgcmVsYXTDs3Jpb3NcclxuICByZWxhdG9yaW9zID0gaW5wdXQ8S3ZFZGl0b3JSZWxhdG9yaW9bXT4oW10pO1xyXG4gIGlkUmVsYXRvcmlvSW5pdGlhbCA9IG1vZGVsPGFueT4oMCk7XHJcbiAgcHJpbnRCdXR0b24gPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuICBsYWJlbEVtcHR5RHJvcGRvd24gPSBpbnB1dDxzdHJpbmc+KCdTZWxlY2lvbmUgdW0gcmVsYXTDs3JpbycpO1xyXG4gIGluc3RydWNvZXNUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgc2hvd0hlYWRlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gIHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGRpc2FibGVkRWRpdG9yID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHNob3dIZWFkZXJCdXR0b25zID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIC8vIElucHV0cyBwYXJhIGJvdMO1ZXMgZXNwZWPDrWZpY29zIGRvIGFtYmllbnRlIEFscGhhXHJcbiAgc2hvd0FscGhhQ3JtQnV0dG9ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBzaG93QWxwaGFDb250cmF0b0J1dHRvbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGVuYWJsZUJ1dHRvbkluc2VydCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICAvLyBDb21wdXRlZCBwcm9wZXJ0aWVzIHBhcmEgcmVsYXTDs3Jpb3NcclxuICBpZFJlbGF0b3Jpb1NlbGVjdGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLmdldElkUmVsYXRvcmlvU2VsZWN0ZWQoKSk7XHJcbiAgcmVsYXRvcmlvID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLmdldFJlbGF0b3Jpb1NlbGVjdGVkKCkpO1xyXG4gIGlzTG9hZGluZ1BkZiA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGRmU2VydmljZS5nZXRJc0xvYWRpbmdQZGYoKSk7XHJcblxyXG4gIC8vIFZpZXdDaGlsZCBwYXJhIG92ZXJsYXkgcGFuZWxzXHJcbiAgQFZpZXdDaGlsZCgnb3BWYXJpYWJsZXMnKSBvcFZhcmlhYmxlcyE6IE92ZXJsYXlQYW5lbDtcclxuICBAVmlld0NoaWxkKCdtZW50aW9uQW5jaG9yJykgbWVudGlvbkFuY2hvciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnYnV0dG9uTmFtZVRvb2x0aXAnKSBidXR0b25OYW1lVG9vbHRpcCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnYnV0dG9uTmFtZUlucHV0JykgYnV0dG9uTmFtZUlucHV0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgLy8gU2lnbmFscyBwYXJhIGNvbnRyb2xhciBvIHRvb2x0aXAgZGUgbm9tZSBkbyBib3TDo29cclxuICBzaG93QnV0dG9uVG9vbHRpcCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgdG9vbHRpcFBvc2l0aW9uID0gc2lnbmFsPHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9Pih7IHRvcDogMCwgbGVmdDogMCB9KTtcclxuICBidXR0b25OYW1lVmFsdWU6IHN0cmluZyA9ICcnO1xyXG4gIHByaXZhdGUgcGVuZGluZ0J1dHRvblJhbmdlOiBhbnkgPSBudWxsO1xyXG5cclxuICBtZXNzYWdlcyA9IFt7IHNldmVyaXR5OiAnaW5mbycsIGRldGFpbDogJ01lc3NhZ2UgQ29udGVudCcgfV07XHJcblxyXG4gIC8vIE3DqXRvZG9zIHBhcmEgZ2VyZW5jaWFyIHJlbGF0w7NyaW9zXHJcbiAgc2V0UmVsYXRvcmlvUG9ySWQoaWQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgcmVsYXRvcmlvID0gdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLnNldFJlbGF0b3Jpb1BvcklkKGlkKTtcclxuICAgIGlmIChyZWxhdG9yaW8pIHtcclxuICAgICAgdGhpcy5zZXRSZWxhdG9yaW8ocmVsYXRvcmlvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFJlbGF0b3JpbyhyZWxhdG9yaW86IEt2RWRpdG9yUmVsYXRvcmlvKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyZWRUZW1wbGF0ZS5zZXQoZmFsc2UpO1xyXG4gICAgdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLnNldFJlbGF0b3JpbyhyZWxhdG9yaW8pO1xyXG4gICAgY29uc3QgbW9kZWxvID0gcmVsYXRvcmlvLm1vZGVsb1JlbGF0b3JpbyB8fCAnJztcclxuICAgIGNvbnN0IHZhcmlhdmVpcyA9IHJlbGF0b3Jpby52YXJpYXZlaXMgfHwgW107XHJcblxyXG4gICAgdGhpcy5odG1sRG9FZGl0b3IgPSB0aGlzLnJlbGF0b3Jpb1NlcnZpY2UucmVuZGVyQ29udHJhdG8obW9kZWxvLCB2YXJpYXZlaXMpO1xyXG4gICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IHRydWU7XHJcbiAgICB0aGlzLmVzY3JldmFWYWxvcih0aGlzLmh0bWxEb0VkaXRvcik7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgLy8gSW5pY2lhbGl6YSBvcyByZWxhdMOzcmlvcyBubyBzZXJ2acOnb1xyXG4gICAgdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLnNldFJlbGF0b3Jpb3ModGhpcy5yZWxhdG9yaW9zKCkpO1xyXG5cclxuICAgIGlmICghdGhpcy5xdWlsbCkge1xyXG4gICAgICB0aGlzLmhhbmRsZUluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcclxuICAgIH0sIDEwMDApO1xyXG5cclxuICAgIGlmICh0aGlzLmlkUmVsYXRvcmlvSW5pdGlhbCgpKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJlZFRlbXBsYXRlLnNldChmYWxzZSk7XHJcbiAgICAgIHRoaXMuc2V0UmVsYXRvcmlvUG9ySWQodGhpcy5pZFJlbGF0b3Jpb0luaXRpYWwoKSk7XHJcbiAgICB9IGVsc2UgdGhpcy5jbGVhcmVkVGVtcGxhdGUuc2V0KHRydWUpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVQcmV2aWV3TW9kZSgpKSB7XHJcbiAgICAgICAgdGhpcy5hdHVhbGl6YXJQcmV2aWV3KCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDE1MDApO1xyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2hvd0J1dHRvblRvb2x0aXAoKSAmJiB0aGlzLmJ1dHRvbk5hbWVUb29sdGlwKSB7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcEVsZW1lbnQgPSB0aGlzLmJ1dHRvbk5hbWVUb29sdGlwLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgaW5zZXJ0QnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2luc2VydC1jdXN0b20tYnV0dG9uJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCF0b29sdGlwRWxlbWVudC5jb250YWlucyhlLnRhcmdldCBhcyBOb2RlKSAmJiBcclxuICAgICAgICAgICAgIWluc2VydEJ1dHRvbj8uY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHtcclxuICAgICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uTmFtZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBoYW5kbGVJbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5xdWlsbFNlcnZpY2UubG9hZENzcygpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplUXVpbGxFZGl0b3IoKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVRdWlsbEVkaXRvcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHtcclxuICAgICAgdGhlbWU6ICdzbm93JyxcclxuICAgICAgbW9kdWxlczoge1xyXG4gICAgICAgIHRvb2xiYXI6ICcja3YtZWRpdG9yLXRvb2xiYXInLFxyXG4gICAgICAgIGNsaXBib2FyZDoge1xyXG4gICAgICAgICAgbWF0Y2hWaXN1YWw6IGZhbHNlLFxyXG4gICAgICAgICAgbWF0Y2hlcnM6IFtcclxuICAgICAgICAgICAgWycqJywgKG5vZGU6IGFueSwgZGVsdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkZWx0YTtcclxuICAgICAgICAgICAgfV1cclxuICAgICAgICAgIF1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGtleWJvYXJkOiB7XHJcbiAgICAgICAgICBiaW5kaW5nczoge1xyXG4gICAgICAgICAgICBiYWNrc3BhY2VWYXJpYWJsZToge1xyXG4gICAgICAgICAgICAgIGtleTogJ0JhY2tzcGFjZScsXHJcbiAgICAgICAgICAgICAgY29sbGFwc2VkOiB0cnVlLFxyXG4gICAgICAgICAgICAgIGhhbmRsZXI6IChyYW5nZTogYW55LCBjb250ZXh0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5pbmRleCA9PT0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbbGVhZl0gPSB0aGlzLnF1aWxsLmdldExlYWYocmFuZ2UuaW5kZXggLSAxKTtcclxuICAgICAgICAgICAgICAgIGlmIChsZWFmICYmIGxlYWYucGFyZW50ICYmIGxlYWYucGFyZW50LnN0YXRpY3MuYmxvdE5hbWUgPT09ICd2YXJpYXZlbCcpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYmxvdE9mZnNldCA9IHRoaXMucXVpbGwuZ2V0SW5kZXgobGVhZi5wYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBibG90TGVuZ3RoID0gbGVhZi5wYXJlbnQubGVuZ3RoKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucXVpbGwuZGVsZXRlVGV4dChibG90T2Zmc2V0LCBibG90TGVuZ3RoLCAndXNlcicpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRlbGV0ZVZhcmlhYmxlOiB7XHJcbiAgICAgICAgICAgICAga2V5OiAnRGVsZXRlJyxcclxuICAgICAgICAgICAgICBjb2xsYXBzZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgaGFuZGxlcjogKHJhbmdlOiBhbnksIGNvbnRleHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2xlYWZdID0gdGhpcy5xdWlsbC5nZXRMZWFmKHJhbmdlLmluZGV4KTtcclxuICAgICAgICAgICAgICAgIGlmIChsZWFmICYmIGxlYWYucGFyZW50ICYmIGxlYWYucGFyZW50LnN0YXRpY3MuYmxvdE5hbWUgPT09ICd2YXJpYXZlbCcpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYmxvdE9mZnNldCA9IHRoaXMucXVpbGwuZ2V0SW5kZXgobGVhZi5wYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBibG90TGVuZ3RoID0gbGVhZi5wYXJlbnQubGVuZ3RoKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucXVpbGwuZGVsZXRlVGV4dChibG90T2Zmc2V0LCBibG90TGVuZ3RoLCAndXNlcicpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNwYWNlVmFyaWFibGU6IHtcclxuICAgICAgICAgICAgICBrZXk6ICcgJyxcclxuICAgICAgICAgICAgICBjb2xsYXBzZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgaGFuZGxlcjogKHJhbmdlOiBhbnksIGNvbnRleHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2xlYWZdID0gdGhpcy5xdWlsbC5nZXRMZWFmKHJhbmdlLmluZGV4KTtcclxuICAgICAgICAgICAgICAgIGlmIChsZWFmICYmIGxlYWYucGFyZW50ICYmIGxlYWYucGFyZW50LnN0YXRpY3MuYmxvdE5hbWUgPT09ICd2YXJpYXZlbCcpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZm9ybWF0ICYmIGNvbnRleHQuZm9ybWF0LnZhcmlhdmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubGFiZWwgPyB0aGlzLmxhYmVsIDogJycsXHJcbiAgICAgIHJlYWRPbmx5OiB0aGlzLnJlYWRvbmx5KCkgfHwgdGhpcy5kaXNhYmxlZEVkaXRvcigpLFxyXG4gICAgICBkZWJ1ZzogdGhpcy5kZWJ1ZyxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5xdWlsbCA9IHRoaXMucXVpbGxTZXJ2aWNlLmNyZWF0ZVF1aWxsSW5zdGFuY2UoJyNrdi1lZGl0b3InLCBjb25maWcpO1xyXG5cclxuICAgIHRoaXMuY29uZmlndXJhckh0bWxDbGlwYm9hcmQoKTtcclxuXHJcbiAgICB0aGlzLnNldHVwQ3VzdG9tVG9vbGJhckJ1dHRvbnMoKTtcclxuICAgIHRoaXMuc2V0dXBRdWlsbEV2ZW50cygpO1xyXG4gICAgdGhpcy5lZGl0b3JSZWFkeVJlc29sdmVyKCk7XHJcbiAgICB0aGlzLmluaXRMb2FkQ29tcGxldGUuc2V0KHRydWUpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtQ29udHJvbDtcclxuICAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC5tYXJrQXNQcmlzdGluZSkge1xyXG4gICAgICAgIGNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBDdXN0b21Ub29sYmFyQnV0dG9ucygpIHtcclxuICAgIGNvbnN0IGluc2VydEN1c3RvbUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNpbnNlcnQtY3VzdG9tLWJ1dHRvbicpO1xyXG4gICAgaW5zZXJ0Q3VzdG9tQnV0dG9uPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudDogRXZlbnQpID0+IHtcclxuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnF1aWxsLmdldFNlbGVjdGlvbigpO1xyXG4gICAgICBpZiAocmFuZ2UpIHtcclxuICAgICAgICB0aGlzLnBlbmRpbmdCdXR0b25SYW5nZSA9IHJhbmdlO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTmFtZVZhbHVlID0gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgYnV0dG9uUmVjdCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ2J1dHRvbicpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBpZiAoYnV0dG9uUmVjdCkge1xyXG4gICAgICAgICAgdGhpcy50b29sdGlwUG9zaXRpb24uc2V0KHtcclxuICAgICAgICAgICAgdG9wOiBidXR0b25SZWN0LmJvdHRvbSArIDUsXHJcbiAgICAgICAgICAgIGxlZnQ6IGJ1dHRvblJlY3QubGVmdFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2hvd0J1dHRvblRvb2x0aXAuc2V0KHRydWUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuYnV0dG9uTmFtZUlucHV0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uTmFtZUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBidG5BbHBoYUFjZWl0YXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYnRuLWFscGhhLWFjZWl0YXInKTtcclxuICAgIGJ0bkFscGhhQWNlaXRhcj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5zZXJpckJvdG9lc0FscGhhKCdBY2VpdGFyIFByb3Bvc3RhJywgJ2FjZWl0YXJCdXR0b25BY3Rpb24nLCAnYmx1ZScpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYnRuQWxwaGFDYW5jZWxhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNidG4tYWxwaGEtY2FuY2VsYXInKTtcclxuICAgIGJ0bkFscGhhQ2FuY2VsYXI/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmluc2VyaXJCb3RvZXNBbHBoYSgnQ2FuY2VsYXIgUHJvcG9zdGEnLCAnY2FuY2VsYXJCdXR0b25BY3Rpb24nLCAnZ3JheScpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYnRuQWxwaGFBY2VpdGFyQXNzaW5hciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNidG4tYWxwaGEtYWNlaXRhci1hc3NpbmFyJyk7XHJcbiAgICBidG5BbHBoYUFjZWl0YXJBc3NpbmFyPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgdGhpcy5pbnNlcmlyQm90b2VzQWxwaGEoJ0FjZWl0YXIgUHJvcG9zdGEgZSBBc3NpbmFyIENvbnRyYXRvJywgJ2FjZWl0YXJBc3NpbmFyQWN0aW9uJywgJ2JsdWUnKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJ0bkFscGhhQ29udHJhdG9Bc3NpbmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2J0bi1hbHBoYS1jb250cmF0by1hc3NpbmFyJyk7XHJcbiAgICBidG5BbHBoYUNvbnRyYXRvQXNzaW5hcj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5zZXJpckJvdG9lc0FscGhhKCdBc3NpbmFyIENvbnRyYXRvJywgJ2Fzc2luYXJDb250cmF0b0FjdGlvbicsICdibHVlJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBidG5BbHBoYUNvbnRyYXRvUmVjdXNhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNidG4tYWxwaGEtY29udHJhdG8tcmVjdXNhcicpO1xyXG4gICAgYnRuQWxwaGFDb250cmF0b1JlY3VzYXI/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmluc2VyaXJCb3RvZXNBbHBoYSgnUmVjdXNhciBDb250cmF0bycsICdyZWN1c2FyQ29udHJhdG9BY3Rpb24nLCAnZ3JheScpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbnNlcmlyQm90b2VzQWxwaGEoYnV0dG9uTmFtZTogc3RyaW5nLCBmdW5jdGlvbk5hbWU6IHN0cmluZywgY29sb3I6ICdibHVlJyB8ICdncmF5Jyk6IHZvaWQge1xyXG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLnF1aWxsLmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFyYW5nZSkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICB0aGlzLnF1aWxsLmZvY3VzKCk7XHJcbiAgICBcclxuICAgIGNvbnN0IGJ1dHRvbklkID0gdGhpcy5nZW5lcmF0ZUJ1dHRvbklkKGJ1dHRvbk5hbWUpO1xyXG4gICAgY29uc3QgcGxhY2Vob2xkZXJUZXh0ID0gYFtCT1TDg086ICR7YnV0dG9uTmFtZX1dYDtcclxuICAgIFxyXG4gICAgY29uc3Qgc3R5bGVzID0gY29sb3IgPT09ICdibHVlJyBcclxuICAgICAgPyB7ICdjb2xvcic6ICcjMWUzYThhJywgJ2JvbGQnOiB0cnVlLCAnYmFja2dyb3VuZCc6ICcjZGJlYWZlJyB9XHJcbiAgICAgIDogeyAnY29sb3InOiAnIzQ0NDQ0NCcsICdib2xkJzogdHJ1ZSwgJ2JhY2tncm91bmQnOiAnI2UwZTBlMCcgfTtcclxuXHJcbiAgICB0aGlzLnF1aWxsLmluc2VydFRleHQocmFuZ2UuaW5kZXgsIHBsYWNlaG9sZGVyVGV4dCwgc3R5bGVzLCAndXNlcicpO1xyXG5cclxuICAgIGNvbnN0IGRlbHRhID0gbmV3IHRoaXMucXVpbGxEZWx0YSgpXHJcbiAgICAgIC5yZXRhaW4ocmFuZ2UuaW5kZXgpXHJcbiAgICAgIC5yZXRhaW4ocGxhY2Vob2xkZXJUZXh0Lmxlbmd0aCwgeyBcclxuICAgICAgICAnYnV0dG9uLWlkJzogYnV0dG9uSWQsXHJcbiAgICAgICAgJ2J1dHRvbi1vbmNsaWNrJzogZnVuY3Rpb25OYW1lLFxyXG4gICAgICAgICdidXR0b24tdGV4dCc6IGJ1dHRvbk5hbWVcclxuICAgICAgfSk7XHJcbiAgICBcclxuICAgIHRoaXMucXVpbGwudXBkYXRlQ29udGVudHMoZGVsdGEsICdzaWxlbnQnKTtcclxuICAgIHRoaXMucXVpbGwuc2V0U2VsZWN0aW9uKHJhbmdlLmluZGV4ICsgcGxhY2Vob2xkZXJUZXh0Lmxlbmd0aCwgMCk7XHJcbiAgICBcclxuICAgIHRoaXMucmVnaXN0ZXJCdXR0b25DYWxsYmFjayhmdW5jdGlvbk5hbWUsIGJ1dHRvbk5hbWUsIGJ1dHRvbklkKTtcclxuICB9XHJcblxyXG4gIGNvbmZpcm1CdXR0b25OYW1lKCk6IHZvaWQge1xyXG4gICAgY29uc3QgYnV0dG9uTmFtZSA9IHRoaXMuYnV0dG9uTmFtZVZhbHVlLnRyaW0oKTtcclxuICAgIFxyXG4gICAgaWYgKCFidXR0b25OYW1lKSB7XHJcbiAgICAgIHRoaXMuY2FuY2VsQnV0dG9uTmFtZSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0aGlzLnBlbmRpbmdCdXR0b25SYW5nZSkge1xyXG4gICAgICB0aGlzLnF1aWxsLmZvY3VzKCk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBidXR0b25JZCA9IHRoaXMuZ2VuZXJhdGVCdXR0b25JZChidXR0b25OYW1lKTtcclxuICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gdGhpcy5nZW5lcmF0ZUJ1dHRvbkZ1bmN0aW9uTmFtZShidXR0b25OYW1lKTtcclxuICAgICAgXHJcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyVGV4dCA9IGBbQk9Uw4NPOiAke2J1dHRvbk5hbWV9XWA7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLnF1aWxsLmluc2VydFRleHQodGhpcy5wZW5kaW5nQnV0dG9uUmFuZ2UuaW5kZXgsIHBsYWNlaG9sZGVyVGV4dCwge1xyXG4gICAgICAgICdjb2xvcic6ICcjMWUzYThhJyxcclxuICAgICAgICAnYm9sZCc6IHRydWUsXHJcbiAgICAgICAgJ2JhY2tncm91bmQnOiAnI2RiZWFmZScsXHJcbiAgICAgIH0sICd1c2VyJyk7XHJcblxyXG4gICAgICBjb25zdCBkZWx0YSA9IG5ldyB0aGlzLnF1aWxsRGVsdGEoKVxyXG4gICAgICAgIC5yZXRhaW4odGhpcy5wZW5kaW5nQnV0dG9uUmFuZ2UuaW5kZXgpXHJcbiAgICAgICAgLnJldGFpbihwbGFjZWhvbGRlclRleHQubGVuZ3RoLCB7IFxyXG4gICAgICAgICAgJ2J1dHRvbi1pZCc6IGJ1dHRvbklkLFxyXG4gICAgICAgICAgJ2J1dHRvbi1vbmNsaWNrJzogZnVuY3Rpb25OYW1lLFxyXG4gICAgICAgICAgJ2J1dHRvbi10ZXh0JzogYnV0dG9uTmFtZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5xdWlsbC51cGRhdGVDb250ZW50cyhkZWx0YSwgJ3NpbGVudCcpO1xyXG4gICAgICB0aGlzLnF1aWxsLnNldFNlbGVjdGlvbih0aGlzLnBlbmRpbmdCdXR0b25SYW5nZS5pbmRleCArIHBsYWNlaG9sZGVyVGV4dC5sZW5ndGgsIDApO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5yZWdpc3RlckJ1dHRvbkNhbGxiYWNrKGZ1bmN0aW9uTmFtZSwgYnV0dG9uTmFtZSwgYnV0dG9uSWQpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbk5hbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVnaXN0ZXJCdXR0b25DYWxsYmFjayhmdW5jdGlvbk5hbWU6IHN0cmluZywgYnV0dG9uTmFtZTogc3RyaW5nLCBidXR0b25JZD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgY2xlYW5GdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWUucmVwbGFjZSgnKCknLCAnJyk7XHJcbiAgICBjb25zdCBpZCA9IGJ1dHRvbklkIHx8IHRoaXMuZ2VuZXJhdGVCdXR0b25JZChidXR0b25OYW1lKTtcclxuICAgIFxyXG4gICAgKHdpbmRvdyBhcyBhbnkpW2NsZWFuRnVuY3Rpb25OYW1lXSA9ICgpID0+IHsgICAgICBcclxuICAgICAgdGhpcy5vbkN1c3RvbUJ1dHRvbkNsaWNrLmVtaXQoe1xyXG4gICAgICAgIGJ1dHRvbk5hbWU6IGJ1dHRvbk5hbWUsXHJcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBjbGVhbkZ1bmN0aW9uTmFtZSxcclxuICAgICAgICBidXR0b25JZDogaWRcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuIFxyXG4gIGNhbmNlbEJ1dHRvbk5hbWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dCdXR0b25Ub29sdGlwLnNldChmYWxzZSk7XHJcbiAgICB0aGlzLmJ1dHRvbk5hbWVWYWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5wZW5kaW5nQnV0dG9uUmFuZ2UgPSBudWxsO1xyXG4gICAgdGhpcy5xdWlsbC5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUJ1dHRvbklkKGJ1dHRvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSBidXR0b25OYW1lXHJcbiAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcclxuICAgICAgLnJlcGxhY2UoL1teYS16MC05XFxzXS9nLCAnJylcclxuICAgICAgLnRyaW0oKVxyXG4gICAgICAucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xyXG4gICAgXHJcbiAgICByZXR1cm4gYGJvdGFvXyR7c2FuaXRpemVkfV8ke0RhdGUubm93KCl9YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVCdXR0b25GdW5jdGlvbk5hbWUoYnV0dG9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHdvcmRzID0gYnV0dG9uTmFtZVxyXG4gICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXHJcbiAgICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOVxcc10vZywgJycpXHJcbiAgICAgIC50cmltKClcclxuICAgICAgLnNwbGl0KC9cXHMrLyk7XHJcbiAgICBcclxuICAgIGlmICh3b3Jkcy5sZW5ndGggPT09IDApIHJldHVybiAnYnV0dG9uQWN0aW9uKCknO1xyXG4gICAgXHJcbiAgICBjb25zdCBjYW1lbENhc2UgPSB3b3Jkc1xyXG4gICAgICAubWFwKCh3b3JkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxvd2VyV29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICByZXR1cm4gaW5kZXggPT09IDAgXHJcbiAgICAgICAgICA/IGxvd2VyV29yZCBcclxuICAgICAgICAgIDogbG93ZXJXb3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbG93ZXJXb3JkLnNsaWNlKDEpO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignJyk7XHJcbiAgICBcclxuICAgIHJldHVybiBgJHtjYW1lbENhc2V9QnV0dG9uQWN0aW9uKClgO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFF1aWxsRXZlbnRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5xdWlsbC5vbignc2VsZWN0aW9uLWNoYW5nZScsIChyYW5nZSwgb2xkUmFuZ2UsIHNvdXJjZSkgPT4ge1xyXG4gICAgICBpZiAocmFuZ2UpIHtcclxuICAgICAgICB0aGlzLmxhc3RTZWxlY3Rpb25SYW5nZSA9IHJhbmdlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgcmFuZ2U6IHJhbmdlLFxyXG4gICAgICAgIG9sZFJhbmdlOiBvbGRSYW5nZSxcclxuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnF1aWxsLm9uKCd0ZXh0LWNoYW5nZScsIChkZWx0YSwgb2xkQ29udGVudHMsIHNvdXJjZSkgPT4ge1xyXG4gICAgICBpZiAoc291cmNlID09PSAndXNlcicgJiYgZGVsdGEub3BzKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmFySHRtbEF1dG9Db21wbGV0ZVRhZyhkZWx0YSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRpZ2l0b3VIYXNoID0gZGVsdGEub3BzLnNvbWUoKG9wOiBhbnkpID0+IG9wLmluc2VydCA9PT0gJyMnKTtcclxuICAgICAgICBpZiAoZGlnaXRvdUhhc2gpIHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlSGFzaEluc2VydGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucmVsYXRvcmlvcygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmhhbmRsZU1lbnRpb24oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGlzLnVwZGF0aW5nRWRpdG9yKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXNjcmV2YVZhbG9yKHRoaXMucXVpbGwuZ2V0U2VtYW50aWNIVE1MKCksIHRoaXMucXVpbGwuZ2V0VGV4dCgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5vblRleHRDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgICBkZWx0YTogZGVsdGEsXHJcbiAgICAgICAgICBvbGRDb250ZW50czogb2xkQ29udGVudHMsXHJcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5vdXRwdXRSYXcuZW1pdCh0aGlzLnF1aWxsLmdldFRleHQoKSk7XHJcbiAgICAgICAgdGhpcy5vdXRwdXRIdG1sLmVtaXQodGhpcy5xdWlsbC5nZXRTZW1hbnRpY0hUTUwoKSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVByZXZpZXdNb2RlKCkpIHtcclxuICAgICAgICAgIHRoaXMuYXR1YWxpemFyUHJldmlldygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSB0cnVlO1xyXG4gICAgdGhpcy5lc2NyZXZhVmFsb3IodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZXNjcmV2YVZhbG9yKGh0bWx2YWx1ZTogYW55LCByYXd2YWx1ZT86IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmluaXRMb2FkQ29tcGxldGUoKSkge1xyXG4gICAgICBhd2FpdCB0aGlzLmVkaXRvclJlYWR5UHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5xdWlsbCkge1xyXG4gICAgICBpZiAodGhpcy51cGRhdGluZ0VkaXRvcikge1xyXG4gICAgICAgIHRoaXMucXVpbGwuY2xpcGJvYXJkLmRhbmdlcm91c2x5UGFzdGVIVE1MKGh0bWx2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnZhbHVlID0gaHRtbHZhbHVlO1xyXG5cclxuICAgICAgaWYgKHJhd3ZhbHVlID09IFwiXFxuXCIgfHwgdGhpcy52YWx1ZSA9PSBcIlxcblwiKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5lbmFibGVQcmV2aWV3TW9kZSgpKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF0dWFsaXphclByZXZpZXcoKSwgMTAwKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub3V0cHV0SHRtbC5lbWl0KHRoaXMucXVpbGwuZ2V0U2VtYW50aWNIVE1MKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdG9yU2l6ZSgpOiB2b2lkIHtcclxuICAgIGxldCBlZGl0b3JGaWVsZEhlaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrdi1lZGl0b3ItdG9vbGJhcicpPy5vZmZzZXRIZWlnaHQ7XHJcbiAgICBpZiAoZWRpdG9yRmllbGRIZWlnaHQpIHtcclxuICAgICAgdGhpcy5lZGl0b3JUb29sYmFySGVpZ2h0LnNldChgJHtlZGl0b3JGaWVsZEhlaWdodH1weGApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb3BlblJlbGF0b3JpbygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmlzTG9hZGluZ1BkZigpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgaHRtbENvbnRlbnQgPSB0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTCgpO1xyXG4gICAgY29uc3QgcmVsYXRvcmlvID0gdGhpcy5yZWxhdG9yaW8oKTtcclxuICAgIC8vIGNvbnN0IHRpcG9WaXN1YWxpemFjYW8gPSB0aGlzLnRpcG9WaXN1YWxpemFjYW8oKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnBkZlNlcnZpY2Uub3BlblJlbGF0b3JpbyhodG1sQ29udGVudCwgcmVsYXRvcmlvLCAndmFsb3InKTtcclxuICB9XHJcblxyXG4gIC8vIE3DqXRvZG9zIHBhcmEgc2lzdGVtYSBkZSBtZW7Dp8O1ZXNcclxuICBoYW5kbGVNZW50aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnJlbGF0b3JpbygpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tZW50aW9uU2VydmljZS5oYW5kbGVNZW50aW9uKHRoaXMucXVpbGwsIHRoaXMucmVsYXRvcmlvKCkhLnZhcmlhdmVpcyk7XHJcbiAgICB0aGlzLmZpbHRlcmVkVmFyaWFibGVzLnNldChyZXN1bHQuZmlsdGVyZWRWYXJpYWJsZXMpO1xyXG5cclxuICAgIGlmIChyZXN1bHQuc2hvdWxkU2hvd1BhbmVsICYmIHJlc3VsdC5tZW50aW9uQm91bmRzKSB7XHJcbiAgICAgIHRoaXMuc2hvd1ZhcmlhYmxlc1BhbmVsKHJlc3VsdC5tZW50aW9uQm91bmRzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2xvc2VWYXJpYWJsZXNQYW5lbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93VmFyaWFibGVzUGFuZWwoYm91bmRzOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSk6IHZvaWQge1xyXG4gICAgY29uc3QgYW5jaG9yRWwgPSB0aGlzLm1lbnRpb25BbmNob3IubmF0aXZlRWxlbWVudDtcclxuICAgIGFuY2hvckVsLnN0eWxlLnRvcCA9IGAke2JvdW5kcy50b3B9cHhgO1xyXG4gICAgYW5jaG9yRWwuc3R5bGUubGVmdCA9IGAke2JvdW5kcy5sZWZ0fXB4YDtcclxuICAgIHRoaXMub3BWYXJpYWJsZXMuc2hvdyhudWxsLCBhbmNob3JFbCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RWYXJpYWJsZUZyb21QYW5lbCh2YXJpYWJsZTogS3ZFZGl0b3JWYXJpYXZlbCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZW50aW9uU2VydmljZS5pbnNlcnRWYXJpYWJsZSh0aGlzLnF1aWxsLCB2YXJpYWJsZSk7XHJcbiAgICB0aGlzLmNsb3NlVmFyaWFibGVzUGFuZWwoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlVmFyaWFibGVzUGFuZWwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vcFZhcmlhYmxlcykge1xyXG4gICAgICB0aGlzLm9wVmFyaWFibGVzLmhpZGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMubWVudGlvblNlcnZpY2UuY2xvc2VNZW50aW9uKCk7XHJcbiAgfVxyXG5cclxuICBzaG93SW5zdHJ1Y29lcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKEt2SW5zdHJ1Y29lc1JlcG9ydENvbXBvbmVudCwge1xyXG4gICAgICBoZWFkZXI6ICdJbnN0cnXDp8O1ZXMnLFxyXG4gICAgICB3aWR0aDogJzQwJScsXHJcbiAgICAgIGhlaWdodDogJzMwJScsXHJcbiAgICAgIG1vZGFsOiB0cnVlLFxyXG4gICAgICBjbG9zYWJsZTogdHJ1ZSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHRlbXBsYXRlOiB0aGlzLmluc3RydWNvZXNUZW1wbGF0ZSgpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJUZW1wbGF0ZSgpIHtcclxuICAgIC8vIExpbXBhIG8gdGVtcGxhdGUgZG8gZWRpdG9yXHJcbiAgICB0aGlzLmNsZWFyZWRUZW1wbGF0ZS5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLnNldFJlbGF0b3Jpb1BvcklkKDApO1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKCcnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uZmlndXJhckh0bWxDbGlwYm9hcmQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnF1aWxsLnJvb3Q7XHJcbiAgICBcclxuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIChlOiBDbGlwYm9hcmRFdmVudCkgPT4ge1xyXG4gICAgICBpZiAoZS5jbGlwYm9hcmREYXRhKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L2h0bWwnKTtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLnF1aWxsLmdldFNlbGVjdGlvbigpO1xyXG4gICAgICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGh0bWwgJiYgaHRtbC50cmltKCkpIHtcclxuICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBzZWxlY3Rpb24uaW5kZXg7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vYSBwYXJ0aXIgZGFxdWkgw6kgcGFyYSBldml0YXIgcXVlIG8gY29waWFyIHNlamEgZHVwbGljYWRvXHJcbiAgICAgICAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gdHJ1ZTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgdGhpcy5xdWlsbC5jbGlwYm9hcmQuZGFuZ2Vyb3VzbHlQYXN0ZUhUTUwoc3RhcnRJbmRleCwgaHRtbCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBuZXdMZW5ndGggPSB0aGlzLnF1aWxsLmdldExlbmd0aCgpO1xyXG4gICAgICAgICAgICB0aGlzLnF1aWxsLnNldFNlbGVjdGlvbihuZXdMZW5ndGgsIDApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUHJldmlld01vZGUoKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYXR1YWxpemFyUHJldmlldygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAxMCk7XHJcbiAgICAgICAgfSBcclxuICAgICAgICBlbHNlIGlmICh0ZXh0ICYmIHRleHQudHJpbSgpKSB7XHJcbiAgICAgICAgICB0aGlzLnF1aWxsLmluc2VydFRleHQoc2VsZWN0aW9uLmluZGV4LCB0ZXh0LCAndXNlcicpO1xyXG4gICAgICAgICAgdGhpcy5xdWlsbC5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLmluZGV4ICsgdGV4dC5sZW5ndGgsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gTcOpdG9kb3MgbW9kbyBwcmV2aWV3XHJcblxyXG4gIHByaXZhdGUgYXR1YWxpemFyUHJldmlldygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5xdWlsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBjb250ZXVkb0h0bWwgPSB0aGlzLnF1aWxsLnJvb3QuaW5uZXJIVE1MO1xyXG5cclxuICAgIGNvbnRldWRvSHRtbCA9IHRoaXMuZGVjb2RpZmljYXJFbnRpZGFkZXNIdG1sKGNvbnRldWRvSHRtbCk7XHJcbiAgICBcclxuICAgIHRoaXMuaHRtbEVzcGVsaG8uc2V0KGNvbnRldWRvSHRtbCk7XHJcblxyXG4gICAgY29uc3QgY29udGV1ZG9Qcm9jZXNzYWRvID0gdGhpcy5wcm9jZXNzYXJDb250ZXVkb1ByZXZpZXcoY29udGV1ZG9IdG1sKTtcclxuICAgIHRoaXMucHJldmlld0NvbnRlbnQuc2V0KGNvbnRldWRvUHJvY2Vzc2Fkbyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlY29kaWZpY2FyRW50aWRhZGVzSHRtbCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xyXG4gICAgdGV4dGFyZWEuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgIHJldHVybiB0ZXh0YXJlYS52YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uZmlndXJhckh0bWxBdXRvQ29tcGxldGVUYWcoZGVsdGE6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCFkZWx0YS5vcHMgfHwgZGVsdGEub3BzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHVsdGltb09wID0gZGVsdGEub3BzW2RlbHRhLm9wcy5sZW5ndGggLSAxXTtcclxuICAgIGlmICh1bHRpbW9PcC5pbnNlcnQgJiYgdHlwZW9mIHVsdGltb09wLmluc2VydCA9PT0gJ3N0cmluZycgJiYgdWx0aW1vT3AuaW5zZXJ0ID09PSAnPicpIHtcclxuICAgICAgY29uc3QgdGV4dG9BdHVhbCA9IHRoaXMucXVpbGwuZ2V0VGV4dCgpO1xyXG4gICAgICBjb25zdCBwb3NpY2FvQ3Vyc29yID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24oKT8uaW5kZXggfHwgMDtcclxuXHJcbiAgICAgIGNvbnN0IHRleHRvQW50ZXNDdXJzb3IgPSB0ZXh0b0F0dWFsLnN1YnN0cmluZygwLCBwb3NpY2FvQ3Vyc29yKTtcclxuXHJcbiAgICAgIGNvbnN0IHJlZ2V4VGFnQWJlcnRhID0gLzwoXFx3KykoPzpcXHMrW14+XSopPyg/PCFcXC8pXFw+JC87XHJcbiAgICAgIGNvbnN0IHZlcmlmaWNhclRhZyA9IHRleHRvQW50ZXNDdXJzb3IubWF0Y2gocmVnZXhUYWdBYmVydGEpO1xyXG5cclxuICAgICAgaWYgKHZlcmlmaWNhclRhZykge1xyXG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSB2ZXJpZmljYXJUYWdbMV07XHJcblxyXG4gICAgICAgIGNvbnN0IHRhZ3NJbmxpbmUgPSBbJ2ltZycsICdicicsICdocicsICdpbnB1dCcsICdtZXRhJywgJ2xpbmsnLCAnYXJlYScsICdiYXNlJywgJ2NvbCcsICdlbWJlZCcsICdzb3VyY2UnLCAndHJhY2snLCAnd2JyJ107XHJcblxyXG4gICAgICAgIGlmICghdGFnc0lubGluZS5pbmNsdWRlcyh0YWdOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0b0RlcG9pc0N1cnNvciA9IHRleHRvQXR1YWwuc3Vic3RyaW5nKHBvc2ljYW9DdXJzb3IpO1xyXG4gICAgICAgICAgY29uc3QgZmVjaGFyVGFnUmVnZXggPSBuZXcgUmVnRXhwKGBePFxcLyR7dGFnTmFtZX0+YCwgJ2knKTtcclxuXHJcbiAgICAgICAgICBpZiAoIWZlY2hhclRhZ1JlZ2V4LnRlc3QodGV4dG9EZXBvaXNDdXJzb3IpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnF1aWxsLmluc2VydFRleHQocG9zaWNhb0N1cnNvciwgYDwvJHt0YWdOYW1lfT5gLCAndXNlcicpO1xyXG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWlsbC5zZXRTZWxlY3Rpb24ocG9zaWNhb0N1cnNvciwgMCk7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvY2Vzc2FyQ29udGV1ZG9QcmV2aWV3KGNvbnRlbnQ6IHN0cmluZyk6IFNhZmVIdG1sIHtcclxuICAgIGlmICghY29udGVudCB8fCBjb250ZW50ID09PSAnXFxuJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoJzxwIGNsYXNzPVwidGV4dC1ncmF5LTQwMCB0ZXh0LXNtXCI+TyBjb250ZcO6ZG8gYXBhcmVjZXLDoSBhcXVpLi4uPC9wPicpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0eWxlUmVnZXggPSAvPHN0eWxlW14+XSo+KFtcXHNcXFNdKj8pPFxcL3N0eWxlPi9naTtcclxuICAgIGNvbnN0IHN0eWxlczogc3RyaW5nW10gPSBbXTtcclxuICAgIGxldCBjb250ZXVkb1Byb2Nlc3NhZG8gPSBjb250ZW50O1xyXG5cclxuICAgIGxldCBtYXRjaDtcclxuICAgIHdoaWxlICgobWF0Y2ggPSBzdHlsZVJlZ2V4LmV4ZWMoY29udGVudCkpICE9PSBudWxsKSB7XHJcbiAgICAgIHN0eWxlcy5wdXNoKG1hdGNoWzFdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb250ZXVkb1Byb2Nlc3NhZG8gPSB0aGlzLnJlbW92ZXJJbmRlbnRhY2FvSHRtbChjb250ZXVkb1Byb2Nlc3NhZG8pO1xyXG4gICAgXHJcbiAgICBjb250ZXVkb1Byb2Nlc3NhZG8gPSB0aGlzLnByb2Nlc3NhclZhcmlhdmVpc0NvbUh0bWwoY29udGV1ZG9Qcm9jZXNzYWRvKTtcclxuXHJcbiAgICBsZXQgY29udGV1ZG9GaW5hbCA9ICc8ZGl2IGNsYXNzPVwia3YtZWRpdG9yLXByZXZpZXctd3JhcHBlclwiPic7XHJcblxyXG4gICAgaWYgKHN0eWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnRldWRvRmluYWwgKz0gJzxzdHlsZT4nICsgc3R5bGVzLmpvaW4oJ1xcbicpICsgJzwvc3R5bGU+JztcclxuICAgIH1cclxuXHJcbiAgICBjb250ZXVkb0ZpbmFsICs9IGNvbnRldWRvUHJvY2Vzc2FkbztcclxuICAgIGNvbnRldWRvRmluYWwgKz0gJzwvZGl2Pic7XHJcblxyXG4gICAgdGhpcy5wcmV2aWV3SHRtbE91dHB1dC5lbWl0KGNvbnRldWRvRmluYWwpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChjb250ZXVkb0ZpbmFsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlckluZGVudGFjYW9IdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0YWdzUGVyc29uYWxpemFkYXMgPSBbJ2RpdicsICdzZWN0aW9uJywgJ2FydGljbGUnLCAnaGVhZGVyJywgJ2Zvb3RlcicsICduYXYnLCAnYXNpZGUnLCAnbWFpbicsICdmb3JtJywgJ3RhYmxlJywgJ3VsJywgJ29sJywgJ2JvZHknLCAnb3B0aW9uJywgJ3NlbGVjdCcsICdibG9ja3F1b3RlJ107XHJcbiAgICBcclxuICAgIGxldCByZXN1bHRhZG8gPSBodG1sO1xyXG4gICAgXHJcbiAgICB0YWdzUGVyc29uYWxpemFkYXMuZm9yRWFjaCh0YWcgPT4ge1xyXG4gICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYCg8JHt0YWd9W14+XSo+KShbXFxcXHNcXFxcU10qPykoPFxcXFwvJHt0YWd9PilgLCAnZ2knKTtcclxuICAgICAgXHJcbiAgICAgIHJlc3VsdGFkbyA9IHJlc3VsdGFkby5yZXBsYWNlKHJlZ2V4LCAobWF0Y2gsIGFiZXJ0dXJhLCBjb250ZXVkbywgZmVjaGFtZW50bykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRldWRvTGltcG8gPSBjb250ZXVkby5yZXBsYWNlKC8+XFxzKzwvZywgJz48Jyk7XHJcbiAgICAgICAgcmV0dXJuIGFiZXJ0dXJhICsgY29udGV1ZG9MaW1wbyArIGZlY2hhbWVudG87XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIHJldHVybiByZXN1bHRhZG87XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzSHRtbFN0cmluZyhzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFzdHIgfHwgdHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcclxuICAgIFxyXG4gICAgY29uc3QgdHJpbW1lZCA9IHN0ci50cmltKCk7XHJcbiAgICBcclxuICAgIGlmICghdHJpbW1lZC5zdGFydHNXaXRoKCc8JykgfHwgIXRyaW1tZWQuZW5kc1dpdGgoJz4nKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgXHJcbiAgICBjb25zdCBodG1sVGFnUmVnZXggPSAvPFxcLz9bYS16XVtcXHNcXFNdKj8+L2k7XHJcbiAgICBjb25zdCBoYXNPcGVuaW5nVGFnID0gLzxbYS16XVtcXHNcXFNdKj8+L2kudGVzdCh0cmltbWVkKTtcclxuICAgIGNvbnN0IGhhc0Nsb3NpbmdUYWcgPSAvPFxcL1thLXpdW1xcc1xcU10qPz4vaS50ZXN0KHRyaW1tZWQpO1xyXG4gICAgXHJcbiAgICByZXR1cm4gaHRtbFRhZ1JlZ2V4LnRlc3QodHJpbW1lZCkgJiYgKGhhc09wZW5pbmdUYWcgfHwgaGFzQ2xvc2luZ1RhZyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2Nlc3NhclZhcmlhdmVpc0NvbUh0bWwoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBjb250ZXVkb1Byb2Nlc3NhZG8gPSBjb250ZW50O1xyXG4gICAgXHJcbiAgICBjb250ZXVkb1Byb2Nlc3NhZG8gPSB0aGlzLnByb2Nlc3NhckJvdG9lc0N1c3RvbWl6YWRvcyhjb250ZXVkb1Byb2Nlc3NhZG8pO1xyXG4gICAgXHJcbiAgICBpZiAoIXRoaXMucmVsYXRvcmlvKCkgfHwgIXRoaXMucmVsYXRvcmlvKCkhLnZhcmlhdmVpcykge1xyXG4gICAgICByZXR1cm4gY29udGV1ZG9Qcm9jZXNzYWRvO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhcmlhdmVpcyA9IHRoaXMucmVsYXRvcmlvKCkhLnZhcmlhdmVpcztcclxuICAgIGNvbnN0IG1vc3RyYXJWYWxvcmVzID0gdGhpcy5zaG93VmFyaWFibGVWYWx1ZXNJblByZXZpZXcoKTtcclxuXHJcbiAgICB2YXJpYXZlaXMuZm9yRWFjaCh2YXJpYXZlbCA9PiB7XHJcbiAgICAgIGlmICghbW9zdHJhclZhbG9yZXMgJiYgIXRoaXMuaXNIdG1sU3RyaW5nKHZhcmlhdmVsLnZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcGxhY2Vob2xkZXJJZCA9IGB7JHt2YXJpYXZlbC5pZH19YDtcclxuICAgICAgXHJcbiAgICAgIGlmIChjb250ZXVkb1Byb2Nlc3NhZG8uaW5jbHVkZXMocGxhY2Vob2xkZXJJZCkpIHtcclxuICAgICAgICBjb250ZXVkb1Byb2Nlc3NhZG8gPSBjb250ZXVkb1Byb2Nlc3NhZG8uc3BsaXQocGxhY2Vob2xkZXJJZCkuam9pbih2YXJpYXZlbC52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcblxyXG4gICAgICBjb25zdCBwYXR0ZXJucyA9IFtcclxuICAgICAgICBgPHNwYW5bXj5dKmNsYXNzPVwiW15cIl0qbWVudGlvblteXCJdKlwiW14+XSo+XFxcXHMqJHt0aGlzLmVzY2FwZVJlZ2V4KHZhcmlhdmVsLmRlc2NyaWNhbyl9XFxcXHMqPC9zcGFuPmAsXHJcbiAgICAgICAgYDxzcGFuW14+XSpkYXRhLW1lbnRpb25bXj5dKj5cXFxccyoke3RoaXMuZXNjYXBlUmVnZXgodmFyaWF2ZWwuZGVzY3JpY2FvKX1cXFxccyo8L3NwYW4+YCxcclxuICAgICAgICBgPlxcXFxzKiR7dGhpcy5lc2NhcGVSZWdleCh2YXJpYXZlbC5kZXNjcmljYW8pfVxcXFxzKjxgLFxyXG4gICAgICAgIGA8W14+XSs+XFxcXHMqJHt0aGlzLmVzY2FwZVJlZ2V4KHZhcmlhdmVsLmRlc2NyaWNhbyl9XFxcXHMqPC9bXj5dKz5gXHJcbiAgICAgIF07XHJcblxyXG4gICAgICBsZXQgc3Vic3RpdHVpZG8gPSBmYWxzZTtcclxuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XHJcbiAgICAgICAgY29uc3QgcmVnZXhNZW50aW9uID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCAnZ2knKTtcclxuICAgICAgICBpZiAocmVnZXhNZW50aW9uLnRlc3QoY29udGV1ZG9Qcm9jZXNzYWRvKSkge1xyXG4gICAgICAgICAgY29udGV1ZG9Qcm9jZXNzYWRvID0gY29udGV1ZG9Qcm9jZXNzYWRvLnJlcGxhY2UocmVnZXhNZW50aW9uLCBcclxuICAgICAgICAgICAgcGF0dGVybi5zdGFydHNXaXRoKCc+JykgPyBgPiR7dmFyaWF2ZWwudmFsdWV9PGAgOiB2YXJpYXZlbC52YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHN1YnN0aXR1aWRvID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgaWYgKCFzdWJzdGl0dWlkbyAmJiBjb250ZXVkb1Byb2Nlc3NhZG8uaW5jbHVkZXModmFyaWF2ZWwuZGVzY3JpY2FvKSkge1xyXG4gICAgICAgIGNvbnRldWRvUHJvY2Vzc2FkbyA9IGNvbnRldWRvUHJvY2Vzc2Fkby5zcGxpdCh2YXJpYXZlbC5kZXNjcmljYW8pLmpvaW4odmFyaWF2ZWwudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY29udGV1ZG9Qcm9jZXNzYWRvO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcm9jZXNzYXJCb3RvZXNDdXN0b21pemFkb3MoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4Qm90YW8gPSAvXFxbQk9Uw4NPOlxccyooW15cXF1dKylcXF0vZztcclxuICAgIFxyXG4gICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZShyZWdleEJvdGFvLCAobWF0Y2gsIHRleHRvQm90YW8pID0+IHtcclxuICAgICAgY29uc3QgYnV0dG9uSWQgPSB0aGlzLmdlbmVyYXRlQnV0dG9uSWQodGV4dG9Cb3Rhbyk7XHJcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2VuZXJhdGVCdXR0b25GdW5jdGlvbk5hbWUodGV4dG9Cb3Rhbyk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLnJlZ2lzdGVyQnV0dG9uQ2FsbGJhY2soZnVuY3Rpb25OYW1lLCB0ZXh0b0JvdGFvLCBidXR0b25JZCk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBidXR0b25IdG1sID0gYDxidXR0b24gY2xhc3M9XCJiZy1ibHVlLTgwMCBib3JkZXItbm9uZSBib3JkZXItcm91bmQgY3Vyc29yLXBvaW50ZXIgZm9udC1zZW1pYm9sZCBwLTIgc2hhZG93LTMgdGV4dC13aGl0ZS1hbHBoYS05MCBhY3RpdmU6YmctYmx1ZS05MDBcIiBpZD1cIiR7YnV0dG9uSWR9XCIgb25jbGljaz1cIiR7ZnVuY3Rpb25OYW1lfVwiIHN0eWxlPVwiZm9udC1mYW1pbHk6SW50ZXIsSW50ZXIgdmFyLHNhbnMtc2VyaWYhaW1wb3J0YW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO1wiPiR7dGV4dG9Cb3Rhb308L2J1dHRvbj5gO1xyXG4gICAgICByZXR1cm4gYnV0dG9uSHRtbDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlc2NhcGVSZWdleChzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0UHJldmlld0NvbnRlbnQoKTogU2FmZUh0bWwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJldmlld0NvbnRlbnQoKTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHBhcmEgbGlkYXIgY29tIGluc2Vyw6fDo28gZGUgJyMnIGVtIGxpbmhhIHZhemlhXHJcbiAgICogSW5zZXJlIHRlbXBvcmFyaWFtZW50ZSB1bSBjYXJhY3RlcmUgaW52aXPDrXZlbCBwYXJhIGZvcsOnYXIgbyBvdmVybGF5IGFwYXJlY2VyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYW5kbGVIYXNoSW5zZXJ0aW9uKCk6IHZvaWQge1xyXG4gICAgLy8gQWRpYSBhIGV4ZWN1w6fDo28gcGFyYSBnYXJhbnRpciBxdWUgbyBRdWlsbCBwcm9jZXNzb3UgYSBpbnNlcsOnw6NvIGRvICcjJ1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKCFyYW5nZSkgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgdGV4dCA9IHRoaXMucXVpbGwuZ2V0VGV4dCgwLCByYW5nZS5pbmRleCk7XHJcbiAgICAgIGNvbnN0IGxhc3RIYXNoSW5kZXggPSB0ZXh0Lmxhc3RJbmRleE9mKCcjJyk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBWZXJpZmljYSBzZSBvICcjJyBlc3TDoSBubyBpbsOtY2lvIGRlIHVtYSBsaW5oYVxyXG4gICAgICBpZiAobGFzdEhhc2hJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBjb25zdCBjaGFyQmVmb3JlID0gbGFzdEhhc2hJbmRleCA+IDAgPyB0ZXh0W2xhc3RIYXNoSW5kZXggLSAxXSA6IG51bGw7XHJcbiAgICAgICAgLy8gUGVnYSBvIGNhcmFjdGVyZSBsb2dvIGFww7NzIG8gY3Vyc29yIHBhcmEgdmVyaWZpY2FyIHNlIGVzdMOhIHZhemlvXHJcbiAgICAgICAgY29uc3QgY2hhckFmdGVyID0gdGhpcy5xdWlsbC5nZXRUZXh0KHJhbmdlLmluZGV4LCAxKTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBpc0F0U3RhcnRPZkxpbmUgPSAobGFzdEhhc2hJbmRleCA9PT0gMCB8fCBjaGFyQmVmb3JlID09PSAnXFxuJyk7XHJcbiAgICAgICAgY29uc3QgaXNFbXB0eUFmdGVyID0gKCFjaGFyQWZ0ZXIgfHwgY2hhckFmdGVyID09PSAnXFxuJyB8fCBjaGFyQWZ0ZXIgPT09ICcnIHx8IGNoYXJBZnRlci50cmltKCkgPT09ICcnKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBTZSBlc3RpdmVyIG5vIGluw61jaW8gZGUgbGluaGEgdmF6aWEsIGZheiBvIFwidHJ1cXVlXCIgZGUgaW5zZXJpciBlIGFwYWdhclxyXG4gICAgICAgIGlmIChpc0F0U3RhcnRPZkxpbmUgJiYgaXNFbXB0eUFmdGVyKSB7XHJcbiAgICAgICAgICAvLyBJbnNlcmUgdW0gcG9udG8gdGVtcG9yYXJpYW1lbnRlIChtb2RvIHNpbGVuY2lvc28gcGFyYSBuw6NvIGRpc3BhcmFyIGV2ZW50b3MgcmVjdXJzaXZvcywgc2UgbsOjbyBmb3NzZSBjb250cm9sYWRvKVxyXG4gICAgICAgICAgLy8gTWFzIGFxdWkgdXNhbW9zIHNpbGVudCBlIGNoYW1hbW9zIGhhbmRsZU1lbnRpb24gbWFudWFsbWVudGVcclxuICAgICAgICAgIHRoaXMucXVpbGwuaW5zZXJ0VGV4dChyYW5nZS5pbmRleCwgJy4nLCAnc2lsZW50Jyk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIFJlbW92ZSBpbWVkaWF0YW1lbnRlXHJcbiAgICAgICAgICB0aGlzLnF1aWxsLmRlbGV0ZVRleHQocmFuZ2UuaW5kZXgsIDEsICdzaWxlbnQnKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gRm9yw6dhIGEgdmVyaWZpY2HDp8OjbyBkbyBtZW50aW9uIGFnb3JhIHF1ZSBvIGxheW91dCBmb2kgXCJwcm92b2NhZG9cIlxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVNZW50aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBjbGFzcz1cImt2LWVkaXRvci1jb250YWluZXIgaC1mdWxsIHctZnVsbCBtYXgtaC1mdWxsIGZsZXggZmxleC1jb2x1bW4gb3ZlcmZsb3ctaGlkZGVuXCJcclxuICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJkaXNhYmxlZEVkaXRvcigpXCJcclxuICBbY2xhc3Mub3BhY2l0eS02MF09XCJkaXNhYmxlZEVkaXRvcigpXCJcclxuPlxyXG4gIDxkaXZcclxuICAgICNlZGl0b3JcclxuICAgIGlkPVwia3YtZWRpdG9yLXRvb2xiYXJcIlxyXG4gICAgW25nQ2xhc3NdPVwieyAnZXJyb3ItYm9yZGVyLXRvb2xiYXInOiBoYXNDb250cm9sRXJyb3IoKSB9XCJcclxuICAgIGNsYXNzPVwie3sgc2hvd0hlYWRlcigpID8gJ2ZsZXgnIDogJ2hpZGRlbicgfX0gZmxleC1jb2x1bW4gZmxleC1pbml0aWFsXCJcclxuICA+XHJcbiAgICBAaWYoc2hvd0hlYWRlckJ1dHRvbnMoKSkge1xyXG4gICAgICBAaWYocmVsYXRvcmlvcygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB7eyhyZWFkb25seSgpIHx8IGRpc2FibGVkRWRpdG9yKCkpICYmICdwb2ludGVyLWV2ZW50cy1ub25lIG9wYWNpdHktOTAnfX1cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHAtMiBib3JkZXItcm91bmQtbGcgYm9yZGVyLTEgYm9yZGVyLWdyYXktMjAwIGhvdmVyOnNoYWRvdy0xIGhvdmVyOmJnLWdyYXktMTAwIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tYWxsIHRyYW5zaXRpb24tZHVyYXRpb24tMzAwXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib3AudG9nZ2xlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnIHRleHQtZ3JlZW4tNjAwIGZvbnQtbWVkaXVtXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBjb250cmFjdFxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC14cyB0ZXh0LWdyYXktNjAwXCI+e3tcclxuICAgICAgICAgICAgICAgICFjbGVhcmVkVGVtcGxhdGUoKVxyXG4gICAgICAgICAgICAgICAgICA/IHJlbGF0b3JpbygpPy5sYWJlbCB8fCBsYWJlbEVtcHR5RHJvcGRvd24oKVxyXG4gICAgICAgICAgICAgICAgICA6IGxhYmVsRW1wdHlEcm9wZG93bigpXHJcbiAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtbGdcIj5cclxuICAgICAgICAgICAgICAgIGtleWJvYXJkX2Fycm93X2Rvd25cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgQGlmKCFjbGVhcmVkVGVtcGxhdGUoKSkge1xyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgYm9yZGVyLXJvdW5kLWxnIGJvcmRlci0xIGJvcmRlci1ncmF5LTIwMCBob3ZlcjpzaGFkb3ctMSBob3ZlcjpiZy1ncmF5LTEwMCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWFsbCB0cmFuc2l0aW9uLWR1cmF0aW9uLTMwMFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyVGVtcGxhdGUoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtbGcgdGV4dC1vcmFuZ2UtNjAwIGZvbnQtbWVkaXVtXCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInTGltcGFyIFRlbXBsYXRlJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgbGF5ZXJzX2NsZWFyXHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcC0yIGJvcmRlci1yb3VuZC1sZyBib3JkZXItMSBib3JkZXItZ3JheS0yMDAgaG92ZXI6c2hhZG93LTEgaG92ZXI6YmctZ3JheS0xMDAgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1hbGwgdHJhbnNpdGlvbi1kdXJhdGlvbi0zMDBcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJzaG93SW5zdHJ1Y29lcygpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZyB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBpbmZvXHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj5JbnN0cnXDp8O1ZXM8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBAaWYocHJpbnRCdXR0b24oKSkge1xyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHAtMiBib3JkZXItcm91bmQtbGcgYm9yZGVyLTEgYm9yZGVyLWdyYXktMjAwIGhvdmVyOnNoYWRvdy0xIGhvdmVyOmJnLWdyYXktMTAwIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tYWxsIHRyYW5zaXRpb24tZHVyYXRpb24tMzAwXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5SZWxhdG9yaW8oKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnIGZvbnQtbWVkaXVtXCI+XHJcbiAgICAgICAgICAgICAgcHJpbnRcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC14cyB0ZXh0LWdyYXktNjAwXCI+SW1wcmltaXI8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH0gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxwLWRpdmlkZXIgY2xhc3M9XCJ3LWZ1bGxcIj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcblxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctZnVsbCBmbGV4LWluaXRpYWxcIlxyXG4gICAgPlxyXG4gICAgICBAaWYoaXNMb2FkaW5nKCkpIHtcclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyB3LWZ1bGxcIj5cclxuICAgICAgICA8cC1za2VsZXRvblxyXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInctNnJlbVwiXHJcbiAgICAgICAgICBbc3R5bGVdPVwieyBoZWlnaHQ6ICcycmVtJyB9XCJcclxuICAgICAgICA+PC9wLXNrZWxldG9uPlxyXG5cclxuICAgICAgICA8cC1za2VsZXRvblxyXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInctNnJlbVwiXHJcbiAgICAgICAgICBbc3R5bGVdPVwieyBoZWlnaHQ6ICcycmVtJyB9XCJcclxuICAgICAgICA+PC9wLXNrZWxldG9uPlxyXG5cclxuICAgICAgICA8cC1za2VsZXRvblxyXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInctNnJlbVwiXHJcbiAgICAgICAgICBbc3R5bGVdPVwieyBoZWlnaHQ6ICcycmVtJyB9XCJcclxuICAgICAgICA+PC9wLXNrZWxldG9uPlxyXG5cclxuICAgICAgICA8cC1za2VsZXRvblxyXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInctNnJlbVwiXHJcbiAgICAgICAgICBbc3R5bGVdPVwieyBoZWlnaHQ6ICcycmVtJyB9XCJcclxuICAgICAgICA+PC9wLXNrZWxldG9uPlxyXG5cclxuICAgICAgICA8cC1za2VsZXRvblxyXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInctNnJlbVwiXHJcbiAgICAgICAgICBbc3R5bGVdPVwieyBoZWlnaHQ6ICcycmVtJyB9XCJcclxuICAgICAgICA+PC9wLXNrZWxldG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBnYXAtMiB7e1xyXG4gICAgICAgICAgaXNMb2FkaW5nKCkgPyAnaGlkZGVuJyA6ICdmbGV4J1xyXG4gICAgICAgIH19IHctZnVsbFwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwicWwtZm9udFwiPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicm9ib3RvXCI+Um9ib3RvPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhcmlhbFwiPkFyaWFsPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ0aW1lcy1uZXctcm9tYW5cIj5UaW1lcyBOZXcgUm9tYW48L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm1vbm9zcGFjZVwiPk1vbm9zcGFjZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaW50ZXJcIj5JbnRlcjwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkPlNhbnMgU2VyaWY8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInNlcmlmXCI+U2VyaWY8L29wdGlvbj5cclxuICAgICAgICAgIDwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjFcIj5UaXR1bG88L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjJcIj5TdWJ0aXR1bG88L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiBzZWxlY3RlZD5Ob3JtYWw8L29wdGlvbj5cclxuICAgICAgICAgIDwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgdGl0bGU9XCJTaXplXCIgY2xhc3M9XCJxbC1zaXplXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjE1cHhcIj4xNXB4PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjIwcHhcIj4yMHB4PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjMwcHhcIj4zMHB4PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjQwcHhcIj40MHB4PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjUwcHhcIj41MHB4PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjcwcHhcIj43MHB4PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjkwcHhcIj45MHB4PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgPHAtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtYm9sZFwiIHBUb29sdGlwPVwiTmVncml0b1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWl0YWxpY1wiIHBUb29sdGlwPVwiSXTDoWxpY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC11bmRlcmxpbmVcIiBwVG9vbHRpcD1cIlN1YmxpbmhhZG9cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1zdHJpa2VcIiBwVG9vbHRpcD1cIlRhY2hhZG9cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L2J1dHRvbj5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxwLWRpdmlkZXIgbGF5b3V0PVwidmVydGljYWxcIj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWNvbG9yXCIgcFRvb2x0aXA9XCJDb3IgZGEgZm9udGVcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L3NlbGVjdD5cclxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1iYWNrZ3JvdW5kXCIgcFRvb2x0aXA9XCJDb3IgZGUgZnVuZG9cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L3NlbGVjdD5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIEBpZih0cnVlKSB7XHJcbiAgICAgICAgPCEtLSA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWhlYWRlclwiIHZhbHVlPVwiMVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1oZWFkZXJcIiB2YWx1ZT1cIjJcIj48L2J1dHRvbj5cclxuICAgICAgPC9zcGFuPiAtLT5cclxuXHJcbiAgICAgICAgPHAtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtbGlua1wiIHBUb29sdGlwPVwiSW5zZXJpciBsaW5rXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaW1hZ2VcIiBwVG9vbHRpcD1cIkluc2VyaXIgaW1hZ2VtXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtdmlkZW9cIiBwVG9vbHRpcD1cIkluc2VyaXIgdsOtZGVvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgQGlmKGVuYWJsZUJ1dHRvbkluc2VydCgpKSB7XHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJpbnNlcnQtY3VzdG9tLWJ1dHRvblwiIHBUb29sdGlwPVwiSW5zZXJpciBib3TDo29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBzdHlsZT1cInRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgLTEuN3B4KTsgZm9udC1zaXplOiAyMnB4O1wiPmJ1dHRvbnNfYWx0PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgQGlmKHNob3dBbHBoYUNybUJ1dHRvbnMoKSkge1xyXG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuLWFscGhhLWFjZWl0YXJcIiBwVG9vbHRpcD1cIkluc2VyaXIgYm90w6NvIEFjZWl0YXJcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBzdHlsZT1cInRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgLTEuN3B4KTsgZm9udC1zaXplOiAyMnB4O1wiPnZhcmlhYmxlX2FkZDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuLWFscGhhLWNhbmNlbGFyXCIgcFRvb2x0aXA9XCJJbnNlcmlyIGJvdMOjbyBDYW5jZWxhclwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHN0eWxlPVwidHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAtMS43cHgpOyBmb250LXNpemU6IDIycHg7XCI+dmFyaWFibGVfcmVtb3ZlPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidG4tYWxwaGEtYWNlaXRhci1hc3NpbmFyXCIgcFRvb2x0aXA9XCJJbnNlcmlyIGJvdMOjbyBBY2VpdGFyIGUgQXNzaW5hciBDb250cmF0b1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHN0eWxlPVwidHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAtMXB4KTsgZm9udC1zaXplOiAyMHB4O1wiPm5ld19sYWJlbDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgQGlmKHNob3dBbHBoYUNvbnRyYXRvQnV0dG9ucygpKSB7XHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidG4tYWxwaGEtY29udHJhdG8tYXNzaW5hclwiIHBUb29sdGlwPVwiSW5zZXJpciBib3TDo28gQXNzaW5hciBDb250cmF0b1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHN0eWxlPVwidHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAtMS43cHgpOyBmb250LXNpemU6IDIwcHg7XCI+Y29udHJhY3RfZWRpdDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuLWFscGhhLWNvbnRyYXRvLXJlY3VzYXJcIiBwVG9vbHRpcD1cIkluc2VyaXIgYm90w6NvIFJlY3VzYXIgQ29udHJhdG9cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBzdHlsZT1cInRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgLTEuN3B4KTsgZm9udC1zaXplOiAyMHB4O1wiPmNvbnRyYWN0X2RlbGV0ZTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgPHAtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtbGlzdFwiIHZhbHVlPVwib3JkZXJlZFwiIHBUb29sdGlwPVwiTGlzdGEgb3JkZW5hZGFcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1saXN0XCIgdmFsdWU9XCJidWxsZXRcIiBwVG9vbHRpcD1cIkxpc3RhIGNvbSBtYXJjYWRvcmVzXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwicWwtYWxpZ25cIiBwVG9vbHRpcD1cIkFsaW5oYW1lbnRvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBzdHlsZT1cImhlaWdodDogM3B4OyBib3JkZXItdG9wOiBub25lOyBib3JkZXItYm90dG9tOiBub25lXCJcclxuICAgIFtzdHlsZS5ib3JkZXJSaWdodF09XCJzaG93SGVhZGVyKCkgPyAnMXB4IHNvbGlkICNlNWU3ZWInIDogJ25vbmUnXCJcclxuICAgIFtzdHlsZS5ib3JkZXJMZWZ0XT1cInNob3dIZWFkZXIoKSA/ICcxcHggc29saWQgI2U1ZTdlYicgOiAnbm9uZSdcIlxyXG4gID5cclxuICAgIEBpZihpc0xvYWRpbmdQZGYoKSkge1xyXG4gICAgPHAtcHJvZ3Jlc3NCYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBbc3R5bGVdPVwieyBoZWlnaHQ6ICczcHgnIH1cIiAvPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LTEgZ2FwLTAgb3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgPGRpdlxyXG4gICAgICBpZD1cImt2LWVkaXRvclwiXHJcbiAgICAgIGNsYXNzPVwib3ZlcmZsb3ctYXV0byBmbGV4LTEgc2Nyb2xsc3R5bGVcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJ2Vycm9yLWJvcmRlcic6IGhhc0NvbnRyb2xFcnJvcigpLFxyXG4gICAgICAgICdwb2ludGVyLWV2ZW50cy1ub25lIG9wYWNpdHktNjAnOiBpc0xvYWRpbmdQZGYoKVxyXG4gICAgICB9XCJcclxuICAgICAgW3N0eWxlLmJvcmRlclRvcF09XCJzaG93SGVhZGVyKCkgPyAnbm9uZScgOiAnMXB4IHNvbGlkICNlNWU3ZWInXCJcclxuICAgICAgW3N0eWxlLmJvcmRlclJpZ2h0XT1cImVuYWJsZVByZXZpZXdNb2RlKCkgPyAnbm9uZScgOiAnMXB4IHNvbGlkICNlNWU3ZWInXCJcclxuICAgID48L2Rpdj5cclxuXHJcbiAgICBAaWYoZW5hYmxlUHJldmlld01vZGUoKSkge1xyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZmxleC0xXCI+XHJcbiAgICAgIDxkaXYgXHJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBweC0zIHB5LTJcIiBcclxuICAgICAgICBbc3R5bGUuYm9yZGVyUmlnaHRdPVwiJzFweCBzb2xpZCAjZTVlN2ViJ1wiXHJcbiAgICAgICAgW3N0eWxlLmJvcmRlckxlZnRdPVwiJzFweCBzb2xpZCAjZTVlN2ViJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1ibHVlLTYwMCB0ZXh0LWxnXCI+dmlzaWJpbGl0eTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMCB0ZXh0LXNtXCI+UHJldmlldzwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgaWQ9XCJrdi1lZGl0b3ItcHJldmlld1wiXHJcbiAgICAgICAgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGZsZXgtMSBzY3JvbGxzdHlsZVwiXHJcbiAgICAgICAgW2lubmVySFRNTF09XCJnZXRQcmV2aWV3Q29udGVudFwiXHJcbiAgICAgICAgW3N0eWxlLmJvcmRlcl09XCInMXB4IHNvbGlkICNlNWU3ZWInXCJcclxuICAgICAgPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuPGt2LWVycm9yIFtoYXNFcnJvcl09XCJoYXNDb250cm9sRXJyb3IoKVwiPnt7IGVycm9NZXNzYWdlKCkgfX08L2t2LWVycm9yPlxyXG5cclxuPCEtLSA8bGluayBocmVmPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9xdWlsbEAyLjAuMi9kaXN0L3F1aWxsLnNub3cuY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiIC8+IC0tPlxyXG48bGluayBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVJvYm90b1wiIHJlbD1cInN0eWxlc2hlZXRcIiAvPlxyXG48c2NyaXB0IHNyYz1cImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcXVpbGxAMi4wLjIvZGlzdC9xdWlsbC5qc1wiPjwvc2NyaXB0PlxyXG48c2NyaXB0IHNyYz1cImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi45L2Rpc3Qva2F0ZXgubWluLmpzXCI+PC9zY3JpcHQ+XHJcblxyXG48bGlua1xyXG4gIHJlbD1cInN0eWxlc2hlZXRcIlxyXG4gIGhyZWY9XCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3F1aWxsQDIuMC4yL2Rpc3QvcXVpbGwuYnViYmxlLmNzc1wiXHJcbi8+XHJcbjxsaW5rXHJcbiAgcmVsPVwic3R5bGVzaGVldFwiXHJcbiAgaHJlZj1cImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2hpZ2hsaWdodC5qcy8xMS45LjAvc3R5bGVzL2F0b20tb25lLWRhcmsubWluLmNzc1wiXHJcbi8+XHJcbjxsaW5rXHJcbiAgcmVsPVwic3R5bGVzaGVldFwiXHJcbiAgaHJlZj1cImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0va2F0ZXhAMC4xNi45L2Rpc3Qva2F0ZXgubWluLmNzc1wiXHJcbi8+XHJcblxyXG48cC1vdmVybGF5UGFuZWwgI29wIHN0eWxlQ2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImdyaWQgbS0wIGdhcC0yIHAtMiBtYXgtdy0yMHJlbSBvdmVyZmxvdy15LWF1dG8gc2Nyb2xsc3R5bGVcIlxyXG4gICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAxNnJlbVwiXHJcbiAgPlxyXG4gICAgQGZvcihpdGVtIG9mIHJlbGF0b3Jpb3MoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiY29sLTEyIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLWdyYXktMTAwIHRyYW5zaXRpb24tY29sb3JzIHRyYW5zaXRpb24tZHVyYXRpb24tMjAwIGJvcmRlci1yb3VuZC1sZyBzaGFkb3ctMiBmbGV4IGZsZXgtY29sdW1uIGdhcC0yXCJcclxuICAgICAgKGNsaWNrKT1cInNldFJlbGF0b3JpbyhpdGVtKVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bSB3LWZ1bGxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxyXG5cclxuICAgICAgICA8a3YtdGFnc1xyXG4gICAgICAgICAgY2xhc3M9XCJ0cmFuc2l0aW9uLW9wYWNpdHkgdHJhbnNpdGlvbi1kdXJhdGlvbi0zMDAge3tcclxuICAgICAgICAgICAgaXRlbT8uaWQgPT0gaWRSZWxhdG9yaW9TZWxlY3RlZCgpID8gJ29wYWNpdHktMTAwJyA6ICdvcGFjaXR5LTAnXHJcbiAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICBbdGFnc109XCJbeyBsYWJlbDogJ1NlbGVjaW9uYWRvJywgc2V2ZXJpdHk6ICdwcmltYXJ5JyB9XVwiXHJcbiAgICAgICAgPjwva3YtdGFncz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC14cyB0ZXh0LWdyYXktNTAwXCI+e3sgaXRlbS5kZXNjcmljYW8gfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9wLW92ZXJsYXlQYW5lbD5cclxuXHJcbjxkaXYgY2xhc3M9XCJrdi1lZGl0b3ItY29udGFpbmVyIGZsZXggZmxleC1jb2x1bW4gb3ZlcmZsb3ctaGlkZGVuIHJlbGF0aXZlXCI+XHJcbiAgPGRpdlxyXG4gICAgI21lbnRpb25BbmNob3JcclxuICAgIHN0eWxlPVwicG9zaXRpb246IGZpeGVkOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFweDsgb3BhY2l0eTogMFwiXHJcbiAgPjwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxwLW92ZXJsYXlQYW5lbFxyXG4gICNvcFZhcmlhYmxlc1xyXG4gIFthcHBlbmRUb109XCInYm9keSdcIlxyXG4gIChvbkhpZGUpPVwiY2xvc2VWYXJpYWJsZXNQYW5lbCgpXCJcclxuPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBnYXAtMSBwLTEgb3ZlcmZsb3cteS1hdXRvIHNjcm9sbC12aXJ0dWFsIGJvcmRlci1yb3VuZC1sZ1wiXHJcbiAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDI1MHB4OyBtaW4td2lkdGg6IDI1MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzXCJcclxuICA+XHJcbiAgICBAZm9yKHZhcmlhYmxlIG9mIGZpbHRlcmVkVmFyaWFibGVzKCk7IHRyYWNrIHZhcmlhYmxlLmlkKSB7XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwicC0yIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tY29sb3JzIHRyYW5zaXRpb24tZHVyYXRpb24tMjAwIGJvcmRlci1yb3VuZC1sZyB0ZXh0LXNtIHRleHQtd2hpdGUgb3B0aW9uLWRyb3Bkb3duXCJcclxuICAgICAgKGNsaWNrKT1cInNlbGVjdFZhcmlhYmxlRnJvbVBhbmVsKHZhcmlhYmxlKVwiXHJcbiAgICA+XHJcbiAgICAgIEBpZiAoc2hvd1ZhcmlhYmxlVmFsdWVGaXJzdCgpKSB7XHJcbiAgICAgICAge3sgdmFyaWFibGUudmFsdWUgfX0gKFxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTQwMFwiPnt7IHZhcmlhYmxlLmRlc2NyaWNhbyB9fTwvc3Bhbj4gKVxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICB7eyB2YXJpYWJsZS5kZXNjcmljYW8gfX0gKFxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTQwMFwiPnt7IHZhcmlhYmxlLnZhbHVlIH19PC9zcGFuPiApXHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgfSBAZW1wdHkge1xyXG4gICAgPGRpdiBjbGFzcz1cInAtMiB0ZXh0LXNtIHRleHQtZ3JheS01MDBcIj5OZW5odW1hIHZhcmnDoXZlbCBlbmNvbnRyYWRhLjwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L3Atb3ZlcmxheVBhbmVsPlxyXG5cclxuPGRpdlxyXG4gICNidXR0b25OYW1lVG9vbHRpcFxyXG4gIGNsYXNzPVwiYnV0dG9uLW5hbWUtdG9vbHRpcFwiXHJcbiAgW2NsYXNzLnNob3ddPVwic2hvd0J1dHRvblRvb2x0aXAoKVwiXHJcbiAgW3N0eWxlLnRvcC5weF09XCJ0b29sdGlwUG9zaXRpb24oKS50b3BcIlxyXG4gIFtzdHlsZS5sZWZ0LnB4XT1cInRvb2x0aXBQb3NpdGlvbigpLmxlZnRcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTIgcC0zIGJnLXdoaXRlIGJvcmRlci1yb3VuZC1sZyBzaGFkb3ctM1wiIHN0eWxlPVwibWluLXdpZHRoOiAyODBweFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTFcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDBcIj5Ob21lIGRvIEJvdMOjbzwvbGFiZWw+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgICNidXR0b25OYW1lSW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLTIgYm9yZGVyLTEgYm9yZGVyLWdyYXktMzAwIGJvcmRlci1yb3VuZC1tZCB0ZXh0LXNtXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIkV4OiBBY2VpdGFyIFByb3Bvc3RhXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cImJ1dHRvbk5hbWVWYWx1ZVwiXHJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY29uZmlybUJ1dHRvbk5hbWUoKVwiXHJcbiAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImNhbmNlbEJ1dHRvbk5hbWUoKVwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwicHgtMyBweS0yIGJvcmRlci0xIGJvcmRlci1ncmF5LTMwMCBiZy13aGl0ZSB0ZXh0LWdyYXktNzAwIGJvcmRlci1yb3VuZC1tZCBjdXJzb3ItcG9pbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtIGhvdmVyOmJnLWdyYXktMTAwIHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgICAgICAoY2xpY2spPVwiY2FuY2VsQnV0dG9uTmFtZSgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIENhbmNlbGFyXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJweC0zIHB5LTIgYm9yZGVyLW5vbmUgYmctYmx1ZS02MDAgdGV4dC13aGl0ZSBib3JkZXItcm91bmQtbWQgY3Vyc29yLXBvaW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSBob3ZlcjpiZy1ibHVlLTcwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgKGNsaWNrKT1cImNvbmZpcm1CdXR0b25OYW1lKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgSW5zZXJpclxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|