keevo-components 2.0.293 → 2.0.295

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.
@@ -727,11 +727,11 @@ export class KvEditorComponent extends BaseComponentInput {
727
727
  }, 10);
728
728
  }
729
729
  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 }); }
730
- 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\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"] }] }); }
730
+ 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 <div #mentionAnchor style=\"position: fixed; width: 1px; height: 1px; opacity: 0\"></div>\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n\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<p-overlayPanel #opVariables [appendTo]=\"'body'\" styleClass=\"kv-mention-overlay\" (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 @if(variable.value){\r\n (<span class=\"text-gray-400\">{{ variable.value }}</span>)\r\n }\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}::ng-deep .kv-mention-overlay{z-index:10001!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"] }] }); }
731
731
  }
732
732
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorComponent, decorators: [{
733
733
  type: Component,
734
- 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\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"] }]
734
+ 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 <div #mentionAnchor style=\"position: fixed; width: 1px; height: 1px; opacity: 0\"></div>\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n\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<p-overlayPanel #opVariables [appendTo]=\"'body'\" styleClass=\"kv-mention-overlay\" (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 @if(variable.value){\r\n (<span class=\"text-gray-400\">{{ variable.value }}</span>)\r\n }\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}::ng-deep .kv-mention-overlay{z-index:10001!important}\n"] }]
735
735
  }], ctorParameters: () => [{ type: i1.ComponentService }, { type: i2.DomSanitizer }], propDecorators: { canvaHeigth: [{
736
736
  type: Input
737
737
  }], contentType: [{
@@ -763,4 +763,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
763
763
  type: ViewChild,
764
764
  args: ['buttonNameInput']
765
765
  }] } });
766
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFFTixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUdMLE1BQU0sRUFFTixNQUFNLEVBRU4sU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFOUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFFL0csT0FBTyxFQUdMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNuQixNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRckIsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGtCQUEwQjtJQUUvRCxZQUNFLGdCQUFrQyxFQUMxQixTQUF1QjtRQUUvQixLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUZoQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBeUJqQyxzQkFB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TUFBTTtnQkEyRW1CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDSSxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ00saUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDQSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIGNvbXB1dGVkLFxyXG4gIGVmZmVjdCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBpbmplY3QsXHJcbiAgaW5wdXQsXHJcbiAgSW5wdXQsXHJcbiAgbW9kZWwsXHJcbiAgT25Jbml0LFxyXG4gIG91dHB1dCxcclxuICBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIHNpZ25hbCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgU2VjdXJpdHlDb250ZXh0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcblxyXG5pbXBvcnQgUXVpbGwgZnJvbSAncXVpbGwnO1xyXG5pbXBvcnQgeyBPdmVybGF5UGFuZWwgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudElucHV0IH0gZnJvbSAnLi4vLi4vLi4vYXBpL2Jhc2UtY29tcG9uZW50cy9iYXNlLWNvbXBvbmVudC1pbnB1dCc7XHJcbmltcG9ydCB7IENvbXBvbmVudFByb3ZpZGVycyB9IGZyb20gJy4uLy4uLy4uL2FwaS9oZWxwZXJzL2NvbXBvbmVudC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBpL3NlcnZpY2VzL2NvbXBvbmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgS3ZJbnN0cnVjb2VzUmVwb3J0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2t2LWluc3RydWNvZXMtcmVwb3J0L2t2LWluc3RydWNvZXMtcmVwb3J0LmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEt2RWRpdG9yUmVsYXRvcmlvLFxyXG4gIEt2RWRpdG9yVmFyaWF2ZWwsXHJcbiAgS3ZFZGl0b3JRdWlsbFNlcnZpY2UsXHJcbiAgS3ZFZGl0b3JSZWxhdG9yaW9TZXJ2aWNlLFxyXG4gIEt2RWRpdG9yTWVudGlvblNlcnZpY2UsXHJcbiAgS3ZFZGl0b3JQZGZTZXJ2aWNlXHJcbn0gZnJvbSAnLi9rdi1lZGl0b3InO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogQ29tcG9uZW50UHJvdmlkZXJzKEt2RWRpdG9yQ29tcG9uZW50KSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEt2RWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudElucHV0PHN0cmluZz4gaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGNvbXBvbmVudFNlcnZpY2U6IENvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBsZXQgcmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5KCk7XHJcbiAgICAgIGlmICh0aGlzLnF1aWxsKSB7XHJcbiAgICAgICAgdGhpcy5xdWlsbC5lbmFibGUoIXJlYWRvbmx5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgbGV0IGRpc2FibGVkID0gdGhpcy5kaXNhYmxlZEVkaXRvcigpO1xyXG4gICAgICBpZiAodGhpcy5xdWlsbCkge1xyXG4gICAgICAgIHRoaXMucXVpbGwuZW5hYmxlKCFkaXNhYmxlZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVByZXZpZXdNb2RlKCkpIHtcclxuICAgICAgICB0aGlzLmF0dWFsaXphclByZXZpZXcoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBJbmplw6fDo28gZGUgc2VydmnDp29zXHJcbiAgcHJpdmF0ZSBxdWlsbFNlcnZpY2UgPSBpbmplY3QoS3ZFZGl0b3JRdWlsbFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgcmVsYXRvcmlvU2VydmljZSA9IGluamVjdChLdkVkaXRvclJlbGF0b3Jpb1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgbWVudGlvblNlcnZpY2UgPSBpbmplY3QoS3ZFZGl0b3JNZW50aW9uU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBwZGZTZXJ2aWNlID0gaW5qZWN0KEt2RWRpdG9yUGRmU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xyXG5cclxuICAvLyBQcm9wcmllZGFkZXMgZGUgY29uZmlndXJhw6fDo29cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBFc3NhIHByb3ByaWVkYWRlIG7Do28gc2Vyw6EgbWFpcyB1dGlsaXphZGEgcG9yIGVzc2UgY29tcG9uZW50ZSBuYXMgcHLDs3hpbWFzIHZlcnPDtWVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNhbnZhSGVpZ3RoOiBzdHJpbmcgPSAnMzgwcHgnO1xyXG5cclxuICBASW5wdXQoKSBjb250ZW50VHlwZTogJ2h0bWwnIHwgJ3RleHQnID0gJ2h0bWwnO1xyXG4gIEBJbnB1dCgpIGRlYnVnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIEV2ZW50b3NcclxuICBAT3V0cHV0KCkgb25UZXh0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvdXRwdXRSYXc6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvdXRwdXRIdG1sOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcHJldmlld0h0bWxPdXRwdXQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkN1c3RvbUJ1dHRvbkNsaWNrOiBFdmVudEVtaXR0ZXI8eyBidXR0b25OYW1lOiBzdHJpbmc7IGZ1bmN0aW9uTmFtZTogc3RyaW5nOyBidXR0b25JZDogc3RyaW5nIH0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBQcm9wcmllZGFkZXMgaW50ZXJuYXNcclxuICBwcml2YXRlIHVwZGF0aW5nRWRpdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBsYXN0U2VsZWN0aW9uUmFuZ2U6IGFueSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBlZGl0b3JSZWFkeVJlc29sdmVyITogKCkgPT4gdm9pZDtcclxuICBwcml2YXRlIGVkaXRvclJlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XHJcbiAgICB0aGlzLmVkaXRvclJlYWR5UmVzb2x2ZXIgPSByZXNvbHZlO1xyXG4gIH0pO1xyXG5cclxuICAvLyBJbnN0w6JuY2lhIGRvIFF1aWxsXHJcbiAgcXVpbGwhOiBRdWlsbDtcclxuICBodG1sRG9FZGl0b3IgPSAnJztcclxuICBcclxuICBnZXQgcXVpbGxDbGFzcygpOiBhbnkge1xyXG4gICAgLy8gTm9ybWFsaXphw6fDo28gcm9idXN0YSBkbyBRdWlsbFxyXG4gICAgbGV0IHF1aWxsQ2xhc3M6IGFueSA9IFF1aWxsO1xyXG4gICAgaWYgKHR5cGVvZiAocXVpbGxDbGFzcyBhcyBhbnkpLnJlZ2lzdGVyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGlmICgocXVpbGxDbGFzcyBhcyBhbnkpLmRlZmF1bHQgJiYgdHlwZW9mIChxdWlsbENsYXNzIGFzIGFueSkuZGVmYXVsdC5yZWdpc3RlciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHF1aWxsQ2xhc3MgPSAocXVpbGxDbGFzcyBhcyBhbnkpLmRlZmF1bHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBxdWlsbENsYXNzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHF1aWxsRGVsdGEoKTogYW55IHtcclxuICAgIGNvbnN0IHEgPSB0aGlzLnF1aWxsQ2xhc3M7XHJcbiAgICByZXR1cm4gcS5pbXBvcnQgPyBxLmltcG9ydCgnZGVsdGEnKSA6IChxLkRlbHRhIHx8IHEuZGVmYXVsdD8uRGVsdGEpO1xyXG4gIH1cclxuXHJcbiAgLy8gU2lnbmFsIHBhcmEgZXNwZWxoYW1lbnRvIGRvIGNvbnRlw7pkbyBkbyBlZGl0b3JcclxuICBodG1sRXNwZWxobyA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuICBwcmV2aWV3Q29udGVudCA9IHNpZ25hbDxTYWZlSHRtbD4oJycpO1xyXG5cclxuICAvLyBTaWduYWxzIHBhcmEgY29udHJvbGUgZGUgZXN0YWRvXHJcbiAgaW5pdExvYWRDb21wbGV0ZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNMb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xyXG4gIGVkaXRvclRvb2xiYXJIZWlnaHQgPSBzaWduYWw8c3RyaW5nPignM3JlbScpO1xyXG4gIC8vIHRpcG9WaXN1YWxpemFjYW8gPSBzaWduYWw8J3ZhbG9yJyB8ICdkZXNjcmljYW8nPignZGVzY3JpY2FvJyk7XHJcbiAgZmlsdGVyZWRWYXJpYWJsZXMgPSBzaWduYWw8S3ZFZGl0b3JWYXJpYXZlbFtdPihbXSk7XHJcbiAgY2xlYXJlZFRlbXBsYXRlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0Z1bGxzY3JlZW4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICB0b2dnbGVGdWxsc2NyZWVuKCkge1xyXG4gICAgdGhpcy5pc0Z1bGxzY3JlZW4udXBkYXRlKHYgPT4gIXYpO1xyXG4gIH1cclxuXHJcbiAgLy9JbnB1dCBwYXJhIGhhYmlsaXRhciBwcmV2aWV3XHJcbiAgZW5hYmxlUHJldmlld01vZGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgc2hvd1ZhcmlhYmxlVmFsdWVzSW5QcmV2aWV3ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHNob3dWYXJpYWJsZVZhbHVlRmlyc3QgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8vIElucHV0cyBwYXJhIHJlbGF0w7NyaW9zXHJcbiAgcmVsYXRvcmlvcyA9IGlucHV0PEt2RWRpdG9yUmVsYXRvcmlvW10+KFtdKTtcclxuICBpZFJlbGF0b3Jpb0luaXRpYWwgPSBtb2RlbDxhbnk+KDApO1xyXG4gIHByaW50QnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgbGFiZWxFbXB0eURyb3Bkb3duID0gaW5wdXQ8c3RyaW5nPignU2VsZWNpb25lIHVtIHJlbGF0w7NyaW8nKTtcclxuICBpbnN0cnVjb2VzVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHNob3dIZWFkZXIgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuICByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBkaXNhYmxlZEVkaXRvciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBzaG93SGVhZGVyQnV0dG9ucyA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICAvLyBJbnB1dHMgcGFyYSBib3TDtWVzIGVzcGVjw61maWNvcyBkbyBhbWJpZW50ZSBBbHBoYVxyXG4gIHNob3dBbHBoYUNybUJ1dHRvbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgc2hvd0FscGhhQ29udHJhdG9CdXR0b25zID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBlbmFibGVCdXR0b25JbnNlcnQgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgLy8gQ29tcHV0ZWQgcHJvcGVydGllcyBwYXJhIHJlbGF0w7NyaW9zXHJcbiAgaWRSZWxhdG9yaW9TZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVsYXRvcmlvU2VydmljZS5nZXRJZFJlbGF0b3Jpb1NlbGVjdGVkKCkpO1xyXG4gIHJlbGF0b3JpbyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVsYXRvcmlvU2VydmljZS5nZXRSZWxhdG9yaW9TZWxlY3RlZCgpKTtcclxuICBpc0xvYWRpbmdQZGYgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBkZlNlcnZpY2UuZ2V0SXNMb2FkaW5nUGRmKCkpO1xyXG5cclxuICAvLyBWaWV3Q2hpbGQgcGFyYSBvdmVybGF5IHBhbmVsc1xyXG4gIEBWaWV3Q2hpbGQoJ29wVmFyaWFibGVzJykgb3BWYXJpYWJsZXMhOiBPdmVybGF5UGFuZWw7XHJcbiAgQFZpZXdDaGlsZCgnbWVudGlvbkFuY2hvcicpIG1lbnRpb25BbmNob3IhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2J1dHRvbk5hbWVUb29sdGlwJykgYnV0dG9uTmFtZVRvb2x0aXAhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2J1dHRvbk5hbWVJbnB1dCcpIGJ1dHRvbk5hbWVJbnB1dCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8vIFNpZ25hbHMgcGFyYSBjb250cm9sYXIgbyB0b29sdGlwIGRlIG5vbWUgZG8gYm90w6NvXHJcbiAgc2hvd0J1dHRvblRvb2x0aXAgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHRvb2x0aXBQb3NpdGlvbiA9IHNpZ25hbDx7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfT4oeyB0b3A6IDAsIGxlZnQ6IDAgfSk7XHJcbiAgYnV0dG9uTmFtZVZhbHVlOiBzdHJpbmcgPSAnJztcclxuICBwcml2YXRlIHBlbmRpbmdCdXR0b25SYW5nZTogYW55ID0gbnVsbDtcclxuXHJcbiAgbWVzc2FnZXMgPSBbeyBzZXZlcml0eTogJ2luZm8nLCBkZXRhaWw6ICdNZXNzYWdlIENvbnRlbnQnIH1dO1xyXG5cclxuICAvLyBNw6l0b2RvcyBwYXJhIGdlcmVuY2lhciByZWxhdMOzcmlvc1xyXG4gIHNldFJlbGF0b3Jpb1BvcklkKGlkOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlbGF0b3JpbyA9IHRoaXMucmVsYXRvcmlvU2VydmljZS5zZXRSZWxhdG9yaW9Qb3JJZChpZCk7XHJcbiAgICBpZiAocmVsYXRvcmlvKSB7XHJcbiAgICAgIHRoaXMuc2V0UmVsYXRvcmlvKHJlbGF0b3Jpbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRSZWxhdG9yaW8ocmVsYXRvcmlvOiBLdkVkaXRvclJlbGF0b3Jpbyk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGVhcmVkVGVtcGxhdGUuc2V0KGZhbHNlKTtcclxuICAgIHRoaXMucmVsYXRvcmlvU2VydmljZS5zZXRSZWxhdG9yaW8ocmVsYXRvcmlvKTtcclxuICAgIGNvbnN0IG1vZGVsbyA9IHJlbGF0b3Jpby5tb2RlbG9SZWxhdG9yaW8gfHwgJyc7XHJcbiAgICBjb25zdCB2YXJpYXZlaXMgPSByZWxhdG9yaW8udmFyaWF2ZWlzIHx8IFtdO1xyXG5cclxuICAgIHRoaXMuaHRtbERvRWRpdG9yID0gdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLnJlbmRlckNvbnRyYXRvKG1vZGVsbywgdmFyaWF2ZWlzKTtcclxuICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSB0cnVlO1xyXG4gICAgdGhpcy5lc2NyZXZhVmFsb3IodGhpcy5odG1sRG9FZGl0b3IpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgIC8vIEluaWNpYWxpemEgb3MgcmVsYXTDs3Jpb3Mgbm8gc2VydmnDp29cclxuICAgIHRoaXMucmVsYXRvcmlvU2VydmljZS5zZXRSZWxhdG9yaW9zKHRoaXMucmVsYXRvcmlvcygpKTtcclxuXHJcbiAgICBpZiAoIXRoaXMucXVpbGwpIHtcclxuICAgICAgdGhpcy5oYW5kbGVJbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XHJcbiAgICB9LCAxMDAwKTtcclxuXHJcbiAgICBpZiAodGhpcy5pZFJlbGF0b3Jpb0luaXRpYWwoKSkge1xyXG4gICAgICB0aGlzLmNsZWFyZWRUZW1wbGF0ZS5zZXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLnNldFJlbGF0b3Jpb1BvcklkKHRoaXMuaWRSZWxhdG9yaW9Jbml0aWFsKCkpO1xyXG4gICAgfSBlbHNlIHRoaXMuY2xlYXJlZFRlbXBsYXRlLnNldCh0cnVlKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlUHJldmlld01vZGUoKSkge1xyXG4gICAgICAgIHRoaXMuYXR1YWxpemFyUHJldmlldygpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxNTAwKTtcclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnNob3dCdXR0b25Ub29sdGlwKCkgJiYgdGhpcy5idXR0b25OYW1lVG9vbHRpcCkge1xyXG4gICAgICAgIGNvbnN0IHRvb2x0aXBFbGVtZW50ID0gdGhpcy5idXR0b25OYW1lVG9vbHRpcC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGluc2VydEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNpbnNlcnQtY3VzdG9tLWJ1dHRvbicpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghdG9vbHRpcEVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkgJiYgXHJcbiAgICAgICAgICAgICFpbnNlcnRCdXR0b24/LmNvbnRhaW5zKGUudGFyZ2V0IGFzIE5vZGUpKSB7XHJcbiAgICAgICAgICB0aGlzLmNhbmNlbEJ1dHRvbk5hbWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaGFuZGxlSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMucXVpbGxTZXJ2aWNlLmxvYWRDc3MoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVF1aWxsRWRpdG9yKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplUXVpbGxFZGl0b3IoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb25maWcgPSB7XHJcbiAgICAgIHRoZW1lOiAnc25vdycsXHJcbiAgICAgIG1vZHVsZXM6IHtcclxuICAgICAgICB0b29sYmFyOiAnI2t2LWVkaXRvci10b29sYmFyJyxcclxuICAgICAgICBjbGlwYm9hcmQ6IHtcclxuICAgICAgICAgIG1hdGNoVmlzdWFsOiBmYWxzZSxcclxuICAgICAgICAgIG1hdGNoZXJzOiBbXHJcbiAgICAgICAgICAgIFsnKicsIChub2RlOiBhbnksIGRlbHRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gZGVsdGE7XHJcbiAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBrZXlib2FyZDoge1xyXG4gICAgICAgICAgYmluZGluZ3M6IHtcclxuICAgICAgICAgICAgYmFja3NwYWNlVmFyaWFibGU6IHtcclxuICAgICAgICAgICAgICBrZXk6ICdCYWNrc3BhY2UnLFxyXG4gICAgICAgICAgICAgIGNvbGxhcHNlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICBoYW5kbGVyOiAocmFuZ2U6IGFueSwgY29udGV4dDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuaW5kZXggPT09IDApIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2xlYWZdID0gdGhpcy5xdWlsbC5nZXRMZWFmKHJhbmdlLmluZGV4IC0gMSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGVhZiAmJiBsZWFmLnBhcmVudCAmJiBsZWFmLnBhcmVudC5zdGF0aWNzLmJsb3ROYW1lID09PSAndmFyaWF2ZWwnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb3RPZmZzZXQgPSB0aGlzLnF1aWxsLmdldEluZGV4KGxlYWYucGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYmxvdExlbmd0aCA9IGxlYWYucGFyZW50Lmxlbmd0aCgpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnF1aWxsLmRlbGV0ZVRleHQoYmxvdE9mZnNldCwgYmxvdExlbmd0aCwgJ3VzZXInKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZWxldGVWYXJpYWJsZToge1xyXG4gICAgICAgICAgICAgIGtleTogJ0RlbGV0ZScsXHJcbiAgICAgICAgICAgICAgY29sbGFwc2VkOiB0cnVlLFxyXG4gICAgICAgICAgICAgIGhhbmRsZXI6IChyYW5nZTogYW55LCBjb250ZXh0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtsZWFmXSA9IHRoaXMucXVpbGwuZ2V0TGVhZihyYW5nZS5pbmRleCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGVhZiAmJiBsZWFmLnBhcmVudCAmJiBsZWFmLnBhcmVudC5zdGF0aWNzLmJsb3ROYW1lID09PSAndmFyaWF2ZWwnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb3RPZmZzZXQgPSB0aGlzLnF1aWxsLmdldEluZGV4KGxlYWYucGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYmxvdExlbmd0aCA9IGxlYWYucGFyZW50Lmxlbmd0aCgpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnF1aWxsLmRlbGV0ZVRleHQoYmxvdE9mZnNldCwgYmxvdExlbmd0aCwgJ3VzZXInKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzcGFjZVZhcmlhYmxlOiB7XHJcbiAgICAgICAgICAgICAga2V5OiAnICcsXHJcbiAgICAgICAgICAgICAgY29sbGFwc2VkOiB0cnVlLFxyXG4gICAgICAgICAgICAgIGhhbmRsZXI6IChyYW5nZTogYW55LCBjb250ZXh0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtsZWFmXSA9IHRoaXMucXVpbGwuZ2V0TGVhZihyYW5nZS5pbmRleCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGVhZiAmJiBsZWFmLnBhcmVudCAmJiBsZWFmLnBhcmVudC5zdGF0aWNzLmJsb3ROYW1lID09PSAndmFyaWF2ZWwnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmZvcm1hdCAmJiBjb250ZXh0LmZvcm1hdC52YXJpYXZlbCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxhYmVsID8gdGhpcy5sYWJlbCA6ICcnLFxyXG4gICAgICByZWFkT25seTogdGhpcy5yZWFkb25seSgpIHx8IHRoaXMuZGlzYWJsZWRFZGl0b3IoKSxcclxuICAgICAgZGVidWc6IHRoaXMuZGVidWcsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucXVpbGwgPSB0aGlzLnF1aWxsU2VydmljZS5jcmVhdGVRdWlsbEluc3RhbmNlKCcja3YtZWRpdG9yJywgY29uZmlnKTtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyYXJIdG1sQ2xpcGJvYXJkKCk7XHJcblxyXG4gICAgdGhpcy5zZXR1cEN1c3RvbVRvb2xiYXJCdXR0b25zKCk7XHJcbiAgICB0aGlzLnNldHVwUXVpbGxFdmVudHMoKTtcclxuICAgIHRoaXMuZWRpdG9yUmVhZHlSZXNvbHZlcigpO1xyXG4gICAgdGhpcy5pbml0TG9hZENvbXBsZXRlLnNldCh0cnVlKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2w7XHJcbiAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wubWFya0FzUHJpc3RpbmUpIHtcclxuICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwQ3VzdG9tVG9vbGJhckJ1dHRvbnMoKSB7XHJcbiAgICBjb25zdCBpbnNlcnRDdXN0b21CdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjaW5zZXJ0LWN1c3RvbS1idXR0b24nKTtcclxuICAgIGluc2VydEN1c3RvbUJ1dHRvbj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHJhbmdlKSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQnV0dG9uUmFuZ2UgPSByYW5nZTtcclxuICAgICAgICB0aGlzLmJ1dHRvbk5hbWVWYWx1ZSA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGJ1dHRvblJlY3QgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCdidXR0b24nKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgaWYgKGJ1dHRvblJlY3QpIHtcclxuICAgICAgICAgIHRoaXMudG9vbHRpcFBvc2l0aW9uLnNldCh7XHJcbiAgICAgICAgICAgIHRvcDogYnV0dG9uUmVjdC5ib3R0b20gKyA1LFxyXG4gICAgICAgICAgICBsZWZ0OiBidXR0b25SZWN0LmxlZnRcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNob3dCdXR0b25Ub29sdGlwLnNldCh0cnVlKTtcclxuICAgICAgICBcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmJ1dHRvbk5hbWVJbnB1dCkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbk5hbWVJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYnRuQWxwaGFBY2VpdGFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2J0bi1hbHBoYS1hY2VpdGFyJyk7XHJcbiAgICBidG5BbHBoYUFjZWl0YXI/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmluc2VyaXJCb3RvZXNBbHBoYSgnQWNlaXRhciBQcm9wb3N0YScsICdhY2VpdGFyQnV0dG9uQWN0aW9uJywgJ2JsdWUnKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJ0bkFscGhhQ2FuY2VsYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYnRuLWFscGhhLWNhbmNlbGFyJyk7XHJcbiAgICBidG5BbHBoYUNhbmNlbGFyPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgdGhpcy5pbnNlcmlyQm90b2VzQWxwaGEoJ0NhbmNlbGFyIFByb3Bvc3RhJywgJ2NhbmNlbGFyQnV0dG9uQWN0aW9uJywgJ2dyYXknKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJ0bkFscGhhQWNlaXRhckFzc2luYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYnRuLWFscGhhLWFjZWl0YXItYXNzaW5hcicpO1xyXG4gICAgYnRuQWxwaGFBY2VpdGFyQXNzaW5hcj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5zZXJpckJvdG9lc0FscGhhKCdBY2VpdGFyIFByb3Bvc3RhIGUgQXNzaW5hciBDb250cmF0bycsICdhY2VpdGFyQXNzaW5hckFjdGlvbicsICdibHVlJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBidG5BbHBoYUNvbnRyYXRvQXNzaW5hciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNidG4tYWxwaGEtY29udHJhdG8tYXNzaW5hcicpO1xyXG4gICAgYnRuQWxwaGFDb250cmF0b0Fzc2luYXI/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmluc2VyaXJCb3RvZXNBbHBoYSgnQXNzaW5hciBDb250cmF0bycsICdhc3NpbmFyQ29udHJhdG9BY3Rpb24nLCAnYmx1ZScpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYnRuQWxwaGFDb250cmF0b1JlY3VzYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYnRuLWFscGhhLWNvbnRyYXRvLXJlY3VzYXInKTtcclxuICAgIGJ0bkFscGhhQ29udHJhdG9SZWN1c2FyPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgdGhpcy5pbnNlcmlyQm90b2VzQWxwaGEoJ1JlY3VzYXIgQ29udHJhdG8nLCAncmVjdXNhckNvbnRyYXRvQWN0aW9uJywgJ2dyYXknKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW5zZXJpckJvdG9lc0FscGhhKGJ1dHRvbk5hbWU6IHN0cmluZywgZnVuY3Rpb25OYW1lOiBzdHJpbmcsIGNvbG9yOiAnYmx1ZScgfCAnZ3JheScpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJhbmdlID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmICghcmFuZ2UpIHJldHVybjtcclxuICAgIFxyXG4gICAgdGhpcy5xdWlsbC5mb2N1cygpO1xyXG4gICAgXHJcbiAgICBjb25zdCBidXR0b25JZCA9IHRoaXMuZ2VuZXJhdGVCdXR0b25JZChidXR0b25OYW1lKTtcclxuICAgIGNvbnN0IHBsYWNlaG9sZGVyVGV4dCA9IGBbQk9Uw4NPOiAke2J1dHRvbk5hbWV9XWA7XHJcbiAgICBcclxuICAgIGNvbnN0IHN0eWxlcyA9IGNvbG9yID09PSAnYmx1ZScgXHJcbiAgICAgID8geyAnY29sb3InOiAnIzFlM2E4YScsICdib2xkJzogdHJ1ZSwgJ2JhY2tncm91bmQnOiAnI2RiZWFmZScgfVxyXG4gICAgICA6IHsgJ2NvbG9yJzogJyM0NDQ0NDQnLCAnYm9sZCc6IHRydWUsICdiYWNrZ3JvdW5kJzogJyNlMGUwZTAnIH07XHJcblxyXG4gICAgdGhpcy5xdWlsbC5pbnNlcnRUZXh0KHJhbmdlLmluZGV4LCBwbGFjZWhvbGRlclRleHQsIHN0eWxlcywgJ3VzZXInKTtcclxuXHJcbiAgICBjb25zdCBkZWx0YSA9IG5ldyB0aGlzLnF1aWxsRGVsdGEoKVxyXG4gICAgICAucmV0YWluKHJhbmdlLmluZGV4KVxyXG4gICAgICAucmV0YWluKHBsYWNlaG9sZGVyVGV4dC5sZW5ndGgsIHsgXHJcbiAgICAgICAgJ2J1dHRvbi1pZCc6IGJ1dHRvbklkLFxyXG4gICAgICAgICdidXR0b24tb25jbGljayc6IGZ1bmN0aW9uTmFtZSxcclxuICAgICAgICAnYnV0dG9uLXRleHQnOiBidXR0b25OYW1lXHJcbiAgICAgIH0pO1xyXG4gICAgXHJcbiAgICB0aGlzLnF1aWxsLnVwZGF0ZUNvbnRlbnRzKGRlbHRhLCAnc2lsZW50Jyk7XHJcbiAgICB0aGlzLnF1aWxsLnNldFNlbGVjdGlvbihyYW5nZS5pbmRleCArIHBsYWNlaG9sZGVyVGV4dC5sZW5ndGgsIDApO1xyXG4gICAgXHJcbiAgICB0aGlzLnJlZ2lzdGVyQnV0dG9uQ2FsbGJhY2soZnVuY3Rpb25OYW1lLCBidXR0b25OYW1lLCBidXR0b25JZCk7XHJcbiAgfVxyXG5cclxuICBjb25maXJtQnV0dG9uTmFtZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGJ1dHRvbk5hbWUgPSB0aGlzLmJ1dHRvbk5hbWVWYWx1ZS50cmltKCk7XHJcbiAgICBcclxuICAgIGlmICghYnV0dG9uTmFtZSkge1xyXG4gICAgICB0aGlzLmNhbmNlbEJ1dHRvbk5hbWUoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAodGhpcy5wZW5kaW5nQnV0dG9uUmFuZ2UpIHtcclxuICAgICAgdGhpcy5xdWlsbC5mb2N1cygpO1xyXG4gICAgICBcclxuICAgICAgY29uc3QgYnV0dG9uSWQgPSB0aGlzLmdlbmVyYXRlQnV0dG9uSWQoYnV0dG9uTmFtZSk7XHJcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2VuZXJhdGVCdXR0b25GdW5jdGlvbk5hbWUoYnV0dG9uTmFtZSk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBwbGFjZWhvbGRlclRleHQgPSBgW0JPVMODTzogJHtidXR0b25OYW1lfV1gO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5xdWlsbC5pbnNlcnRUZXh0KHRoaXMucGVuZGluZ0J1dHRvblJhbmdlLmluZGV4LCBwbGFjZWhvbGRlclRleHQsIHtcclxuICAgICAgICAnY29sb3InOiAnIzFlM2E4YScsXHJcbiAgICAgICAgJ2JvbGQnOiB0cnVlLFxyXG4gICAgICAgICdiYWNrZ3JvdW5kJzogJyNkYmVhZmUnLFxyXG4gICAgICB9LCAndXNlcicpO1xyXG5cclxuICAgICAgY29uc3QgZGVsdGEgPSBuZXcgdGhpcy5xdWlsbERlbHRhKClcclxuICAgICAgICAucmV0YWluKHRoaXMucGVuZGluZ0J1dHRvblJhbmdlLmluZGV4KVxyXG4gICAgICAgIC5yZXRhaW4ocGxhY2Vob2xkZXJUZXh0Lmxlbmd0aCwgeyBcclxuICAgICAgICAgICdidXR0b24taWQnOiBidXR0b25JZCxcclxuICAgICAgICAgICdidXR0b24tb25jbGljayc6IGZ1bmN0aW9uTmFtZSxcclxuICAgICAgICAgICdidXR0b24tdGV4dCc6IGJ1dHRvbk5hbWVcclxuICAgICAgICB9KTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMucXVpbGwudXBkYXRlQ29udGVudHMoZGVsdGEsICdzaWxlbnQnKTtcclxuICAgICAgdGhpcy5xdWlsbC5zZXRTZWxlY3Rpb24odGhpcy5wZW5kaW5nQnV0dG9uUmFuZ2UuaW5kZXggKyBwbGFjZWhvbGRlclRleHQubGVuZ3RoLCAwKTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMucmVnaXN0ZXJCdXR0b25DYWxsYmFjayhmdW5jdGlvbk5hbWUsIGJ1dHRvbk5hbWUsIGJ1dHRvbklkKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5jYW5jZWxCdXR0b25OYW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZ2lzdGVyQnV0dG9uQ2FsbGJhY2soZnVuY3Rpb25OYW1lOiBzdHJpbmcsIGJ1dHRvbk5hbWU6IHN0cmluZywgYnV0dG9uSWQ/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNsZWFuRnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lLnJlcGxhY2UoJygpJywgJycpO1xyXG4gICAgY29uc3QgaWQgPSBidXR0b25JZCB8fCB0aGlzLmdlbmVyYXRlQnV0dG9uSWQoYnV0dG9uTmFtZSk7XHJcbiAgICBcclxuICAgICh3aW5kb3cgYXMgYW55KVtjbGVhbkZ1bmN0aW9uTmFtZV0gPSAoKSA9PiB7ICAgICAgXHJcbiAgICAgIHRoaXMub25DdXN0b21CdXR0b25DbGljay5lbWl0KHtcclxuICAgICAgICBidXR0b25OYW1lOiBidXR0b25OYW1lLFxyXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogY2xlYW5GdW5jdGlvbk5hbWUsXHJcbiAgICAgICAgYnV0dG9uSWQ6IGlkXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICB9XHJcbiBcclxuICBjYW5jZWxCdXR0b25OYW1lKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93QnV0dG9uVG9vbHRpcC5zZXQoZmFsc2UpO1xyXG4gICAgdGhpcy5idXR0b25OYW1lVmFsdWUgPSAnJztcclxuICAgIHRoaXMucGVuZGluZ0J1dHRvblJhbmdlID0gbnVsbDtcclxuICAgIHRoaXMucXVpbGwuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVCdXR0b25JZChidXR0b25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2FuaXRpemVkID0gYnV0dG9uTmFtZVxyXG4gICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXHJcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOVxcc10vZywgJycpXHJcbiAgICAgIC50cmltKClcclxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJ18nKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIGBib3Rhb18ke3Nhbml0aXplZH1fJHtEYXRlLm5vdygpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlQnV0dG9uRnVuY3Rpb25OYW1lKGJ1dHRvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB3b3JkcyA9IGJ1dHRvbk5hbWVcclxuICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxyXG4gICAgICAucmVwbGFjZSgvW15hLXpBLVowLTlcXHNdL2csICcnKVxyXG4gICAgICAudHJpbSgpXHJcbiAgICAgIC5zcGxpdCgvXFxzKy8pO1xyXG4gICAgXHJcbiAgICBpZiAod29yZHMubGVuZ3RoID09PSAwKSByZXR1cm4gJ2J1dHRvbkFjdGlvbigpJztcclxuICAgIFxyXG4gICAgY29uc3QgY2FtZWxDYXNlID0gd29yZHNcclxuICAgICAgLm1hcCgod29yZCwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBsb3dlcldvcmQgPSB3b3JkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID09PSAwIFxyXG4gICAgICAgICAgPyBsb3dlcldvcmQgXHJcbiAgICAgICAgICA6IGxvd2VyV29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGxvd2VyV29yZC5zbGljZSgxKTtcclxuICAgICAgfSlcclxuICAgICAgLmpvaW4oJycpO1xyXG4gICAgXHJcbiAgICByZXR1cm4gYCR7Y2FtZWxDYXNlfUJ1dHRvbkFjdGlvbigpYDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBRdWlsbEV2ZW50cygpOiB2b2lkIHtcclxuICAgIHRoaXMucXVpbGwub24oJ3NlbGVjdGlvbi1jaGFuZ2UnLCAocmFuZ2U6IGFueSwgb2xkUmFuZ2U6IGFueSwgc291cmNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJhbmdlKSB7XHJcbiAgICAgICAgdGhpcy5sYXN0U2VsZWN0aW9uUmFuZ2UgPSByYW5nZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xyXG4gICAgICAgIHJhbmdlOiByYW5nZSxcclxuICAgICAgICBvbGRSYW5nZTogb2xkUmFuZ2UsXHJcbiAgICAgICAgc291cmNlOiBzb3VyY2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5xdWlsbC5vbigndGV4dC1jaGFuZ2UnLCAoZGVsdGE6IGFueSwgb2xkQ29udGVudHM6IGFueSwgc291cmNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHNvdXJjZSA9PT0gJ3VzZXInICYmIGRlbHRhLm9wcykge1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJhckh0bWxBdXRvQ29tcGxldGVUYWcoZGVsdGEpO1xyXG5cclxuICAgICAgICBjb25zdCBkaWdpdG91SGFzaCA9IGRlbHRhLm9wcy5zb21lKChvcDogYW55KSA9PiBvcC5pbnNlcnQgPT09ICcjJyk7XHJcbiAgICAgICAgaWYgKGRpZ2l0b3VIYXNoKSB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUhhc2hJbnNlcnRpb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnJlbGF0b3Jpb3MoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVNZW50aW9uKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGhpcy51cGRhdGluZ0VkaXRvcikge1xyXG4gICAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVzY3JldmFWYWxvcih0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTCgpLCB0aGlzLnF1aWxsLmdldFRleHQoKSk7XHJcblxyXG4gICAgICAgIHRoaXMub25UZXh0Q2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgZGVsdGE6IGRlbHRhLFxyXG4gICAgICAgICAgb2xkQ29udGVudHM6IG9sZENvbnRlbnRzLFxyXG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMub3V0cHV0UmF3LmVtaXQodGhpcy5xdWlsbC5nZXRUZXh0KCkpO1xyXG4gICAgICAgIHRoaXMub3V0cHV0SHRtbC5lbWl0KHRoaXMucXVpbGwuZ2V0U2VtYW50aWNIVE1MKCkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5lbmFibGVQcmV2aWV3TW9kZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmF0dWFsaXphclByZXZpZXcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gdHJ1ZTtcclxuICAgIHRoaXMuZXNjcmV2YVZhbG9yKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGVzY3JldmFWYWxvcihodG1sdmFsdWU6IGFueSwgcmF3dmFsdWU/OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5pbml0TG9hZENvbXBsZXRlKCkpIHtcclxuICAgICAgYXdhaXQgdGhpcy5lZGl0b3JSZWFkeVByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucXVpbGwpIHtcclxuICAgICAgaWYgKHRoaXMudXBkYXRpbmdFZGl0b3IpIHtcclxuICAgICAgICB0aGlzLnF1aWxsLmNsaXBib2FyZC5kYW5nZXJvdXNseVBhc3RlSFRNTChodG1sdmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy52YWx1ZSA9IGh0bWx2YWx1ZTtcclxuXHJcbiAgICAgIGlmIChyYXd2YWx1ZSA9PSBcIlxcblwiIHx8IHRoaXMudmFsdWUgPT0gXCJcXG5cIikge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZW5hYmxlUHJldmlld01vZGUoKSkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdHVhbGl6YXJQcmV2aWV3KCksIDEwMCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm91dHB1dEh0bWwuZW1pdCh0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTCgpKTtcclxuICB9XHJcblxyXG4gIGdldEVkaXRvclNpemUoKTogdm9pZCB7XHJcbiAgICBsZXQgZWRpdG9yRmllbGRIZWlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna3YtZWRpdG9yLXRvb2xiYXInKT8ub2Zmc2V0SGVpZ2h0O1xyXG4gICAgaWYgKGVkaXRvckZpZWxkSGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yVG9vbGJhckhlaWdodC5zZXQoYCR7ZWRpdG9yRmllbGRIZWlnaHR9cHhgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9wZW5SZWxhdG9yaW8oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdQZGYoKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGh0bWxDb250ZW50ID0gdGhpcy5xdWlsbC5nZXRTZW1hbnRpY0hUTUwoKTtcclxuICAgIGNvbnN0IHJlbGF0b3JpbyA9IHRoaXMucmVsYXRvcmlvKCk7XHJcbiAgICAvLyBjb25zdCB0aXBvVmlzdWFsaXphY2FvID0gdGhpcy50aXBvVmlzdWFsaXphY2FvKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5wZGZTZXJ2aWNlLm9wZW5SZWxhdG9yaW8oaHRtbENvbnRlbnQsIHJlbGF0b3JpbywgJ3ZhbG9yJyk7XHJcbiAgfVxyXG5cclxuICAvLyBNw6l0b2RvcyBwYXJhIHNpc3RlbWEgZGUgbWVuw6fDtWVzXHJcbiAgaGFuZGxlTWVudGlvbigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5yZWxhdG9yaW8oKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWVudGlvblNlcnZpY2UuaGFuZGxlTWVudGlvbih0aGlzLnF1aWxsLCB0aGlzLnJlbGF0b3JpbygpIS52YXJpYXZlaXMpO1xyXG4gICAgdGhpcy5maWx0ZXJlZFZhcmlhYmxlcy5zZXQocmVzdWx0LmZpbHRlcmVkVmFyaWFibGVzKTtcclxuXHJcbiAgICBpZiAocmVzdWx0LnNob3VsZFNob3dQYW5lbCAmJiByZXN1bHQubWVudGlvbkJvdW5kcykge1xyXG4gICAgICB0aGlzLnNob3dWYXJpYWJsZXNQYW5lbChyZXN1bHQubWVudGlvbkJvdW5kcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsb3NlVmFyaWFibGVzUGFuZWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2hvd1ZhcmlhYmxlc1BhbmVsKGJvdW5kczogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0pOiB2b2lkIHtcclxuICAgIGNvbnN0IGFuY2hvckVsID0gdGhpcy5tZW50aW9uQW5jaG9yLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBhbmNob3JFbC5zdHlsZS50b3AgPSBgJHtib3VuZHMudG9wfXB4YDtcclxuICAgIGFuY2hvckVsLnN0eWxlLmxlZnQgPSBgJHtib3VuZHMubGVmdH1weGA7XHJcbiAgICB0aGlzLm9wVmFyaWFibGVzLnNob3cobnVsbCwgYW5jaG9yRWwpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0VmFyaWFibGVGcm9tUGFuZWwodmFyaWFibGU6IEt2RWRpdG9yVmFyaWF2ZWwpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudGlvblNlcnZpY2UuaW5zZXJ0VmFyaWFibGUodGhpcy5xdWlsbCwgdmFyaWFibGUpO1xyXG4gICAgdGhpcy5jbG9zZVZhcmlhYmxlc1BhbmVsKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVZhcmlhYmxlc1BhbmVsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub3BWYXJpYWJsZXMpIHtcclxuICAgICAgdGhpcy5vcFZhcmlhYmxlcy5oaWRlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1lbnRpb25TZXJ2aWNlLmNsb3NlTWVudGlvbigpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0luc3RydWNvZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihLdkluc3RydWNvZXNSZXBvcnRDb21wb25lbnQsIHtcclxuICAgICAgaGVhZGVyOiAnSW5zdHJ1w6fDtWVzJyxcclxuICAgICAgd2lkdGg6ICc0MCUnLFxyXG4gICAgICBoZWlnaHQ6ICczMCUnLFxyXG4gICAgICBtb2RhbDogdHJ1ZSxcclxuICAgICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0ZW1wbGF0ZTogdGhpcy5pbnN0cnVjb2VzVGVtcGxhdGUoKVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyVGVtcGxhdGUoKSB7XHJcbiAgICAvLyBMaW1wYSBvIHRlbXBsYXRlIGRvIGVkaXRvclxyXG4gICAgdGhpcy5jbGVhcmVkVGVtcGxhdGUuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5zZXRSZWxhdG9yaW9Qb3JJZCgwKTtcclxuICAgIHRoaXMud3JpdGVWYWx1ZSgnJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyYXJIdG1sQ2xpcGJvYXJkKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5xdWlsbC5yb290O1xyXG4gICAgXHJcbiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCAoZTogQ2xpcGJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgaWYgKGUuY2xpcGJvYXJkRGF0YSkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9odG1sJyk7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChodG1sICYmIGh0bWwudHJpbSgpKSB7XHJcbiAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gc2VsZWN0aW9uLmluZGV4O1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvL2EgcGFydGlyIGRhcXVpIMOpIHBhcmEgZXZpdGFyIHF1ZSBvIGNvcGlhciBzZWphIGR1cGxpY2Fkb1xyXG4gICAgICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IHRydWU7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHRoaXMucXVpbGwuY2xpcGJvYXJkLmRhbmdlcm91c2x5UGFzdGVIVE1MKHN0YXJ0SW5kZXgsIGh0bWwpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgbmV3TGVuZ3RoID0gdGhpcy5xdWlsbC5nZXRMZW5ndGgoKTtcclxuICAgICAgICAgICAgdGhpcy5xdWlsbC5zZXRTZWxlY3Rpb24obmV3TGVuZ3RoLCAwKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVByZXZpZXdNb2RlKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmF0dWFsaXphclByZXZpZXcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgMTApO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgZWxzZSBpZiAodGV4dCAmJiB0ZXh0LnRyaW0oKSkge1xyXG4gICAgICAgICAgdGhpcy5xdWlsbC5pbnNlcnRUZXh0KHNlbGVjdGlvbi5pbmRleCwgdGV4dCwgJ3VzZXInKTtcclxuICAgICAgICAgIHRoaXMucXVpbGwuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbi5pbmRleCArIHRleHQubGVuZ3RoLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIE3DqXRvZG9zIG1vZG8gcHJldmlld1xyXG5cclxuICBwcml2YXRlIGF0dWFsaXphclByZXZpZXcoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMucXVpbGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQgY29udGV1ZG9IdG1sID0gdGhpcy5xdWlsbC5yb290LmlubmVySFRNTDtcclxuXHJcbiAgICBjb250ZXVkb0h0bWwgPSB0aGlzLmRlY29kaWZpY2FyRW50aWRhZGVzSHRtbChjb250ZXVkb0h0bWwpO1xyXG4gICAgXHJcbiAgICB0aGlzLmh0bWxFc3BlbGhvLnNldChjb250ZXVkb0h0bWwpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRldWRvUHJvY2Vzc2FkbyA9IHRoaXMucHJvY2Vzc2FyQ29udGV1ZG9QcmV2aWV3KGNvbnRldWRvSHRtbCk7XHJcbiAgICB0aGlzLnByZXZpZXdDb250ZW50LnNldChjb250ZXVkb1Byb2Nlc3NhZG8pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZWNvZGlmaWNhckVudGlkYWRlc0h0bWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgIHRleHRhcmVhLmlubmVySFRNTCA9IHRleHQ7XHJcbiAgICByZXR1cm4gdGV4dGFyZWEudmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyYXJIdG1sQXV0b0NvbXBsZXRlVGFnKGRlbHRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghZGVsdGEub3BzIHx8IGRlbHRhLm9wcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB1bHRpbW9PcCA9IGRlbHRhLm9wc1tkZWx0YS5vcHMubGVuZ3RoIC0gMV07XHJcbiAgICBpZiAodWx0aW1vT3AuaW5zZXJ0ICYmIHR5cGVvZiB1bHRpbW9PcC5pbnNlcnQgPT09ICdzdHJpbmcnICYmIHVsdGltb09wLmluc2VydCA9PT0gJz4nKSB7XHJcbiAgICAgIGNvbnN0IHRleHRvQXR1YWwgPSB0aGlzLnF1aWxsLmdldFRleHQoKTtcclxuICAgICAgY29uc3QgcG9zaWNhb0N1cnNvciA9IHRoaXMucXVpbGwuZ2V0U2VsZWN0aW9uKCk/LmluZGV4IHx8IDA7XHJcblxyXG4gICAgICBjb25zdCB0ZXh0b0FudGVzQ3Vyc29yID0gdGV4dG9BdHVhbC5zdWJzdHJpbmcoMCwgcG9zaWNhb0N1cnNvcik7XHJcblxyXG4gICAgICBjb25zdCByZWdleFRhZ0FiZXJ0YSA9IC88KFxcdyspKD86XFxzK1tePl0qKT8oPzwhXFwvKVxcPiQvO1xyXG4gICAgICBjb25zdCB2ZXJpZmljYXJUYWcgPSB0ZXh0b0FudGVzQ3Vyc29yLm1hdGNoKHJlZ2V4VGFnQWJlcnRhKTtcclxuXHJcbiAgICAgIGlmICh2ZXJpZmljYXJUYWcpIHtcclxuICAgICAgICBjb25zdCB0YWdOYW1lID0gdmVyaWZpY2FyVGFnWzFdO1xyXG5cclxuICAgICAgICBjb25zdCB0YWdzSW5saW5lID0gWydpbWcnLCAnYnInLCAnaHInLCAnaW5wdXQnLCAnbWV0YScsICdsaW5rJywgJ2FyZWEnLCAnYmFzZScsICdjb2wnLCAnZW1iZWQnLCAnc291cmNlJywgJ3RyYWNrJywgJ3diciddO1xyXG5cclxuICAgICAgICBpZiAoIXRhZ3NJbmxpbmUuaW5jbHVkZXModGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgY29uc3QgdGV4dG9EZXBvaXNDdXJzb3IgPSB0ZXh0b0F0dWFsLnN1YnN0cmluZyhwb3NpY2FvQ3Vyc29yKTtcclxuICAgICAgICAgIGNvbnN0IGZlY2hhclRhZ1JlZ2V4ID0gbmV3IFJlZ0V4cChgXjxcXC8ke3RhZ05hbWV9PmAsICdpJyk7XHJcblxyXG4gICAgICAgICAgaWYgKCFmZWNoYXJUYWdSZWdleC50ZXN0KHRleHRvRGVwb2lzQ3Vyc29yKSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5xdWlsbC5pbnNlcnRUZXh0KHBvc2ljYW9DdXJzb3IsIGA8LyR7dGFnTmFtZX0+YCwgJ3VzZXInKTtcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucXVpbGwuc2V0U2VsZWN0aW9uKHBvc2ljYW9DdXJzb3IsIDApO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2Nlc3NhckNvbnRldWRvUHJldmlldyhjb250ZW50OiBzdHJpbmcpOiBTYWZlSHRtbCB7XHJcbiAgICBpZiAoIWNvbnRlbnQgfHwgY29udGVudCA9PT0gJ1xcbicpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKCc8cCBjbGFzcz1cInRleHQtZ3JheS00MDAgdGV4dC1zbVwiPk8gY29udGXDumRvIGFwYXJlY2Vyw6EgYXF1aS4uLjwvcD4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdHlsZVJlZ2V4ID0gLzxzdHlsZVtePl0qPihbXFxzXFxTXSo/KTxcXC9zdHlsZT4vZ2k7XHJcbiAgICBjb25zdCBzdHlsZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBsZXQgY29udGV1ZG9Qcm9jZXNzYWRvID0gY29udGVudDtcclxuXHJcbiAgICBsZXQgbWF0Y2g7XHJcbiAgICB3aGlsZSAoKG1hdGNoID0gc3R5bGVSZWdleC5leGVjKGNvbnRlbnQpKSAhPT0gbnVsbCkge1xyXG4gICAgICBzdHlsZXMucHVzaChtYXRjaFsxXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29udGV1ZG9Qcm9jZXNzYWRvID0gdGhpcy5yZW1vdmVySW5kZW50YWNhb0h0bWwoY29udGV1ZG9Qcm9jZXNzYWRvKTtcclxuICAgIFxyXG4gICAgY29udGV1ZG9Qcm9jZXNzYWRvID0gdGhpcy5wcm9jZXNzYXJWYXJpYXZlaXNDb21IdG1sKGNvbnRldWRvUHJvY2Vzc2Fkbyk7XHJcblxyXG4gICAgbGV0IGNvbnRldWRvRmluYWwgPSAnPGRpdiBjbGFzcz1cImt2LWVkaXRvci1wcmV2aWV3LXdyYXBwZXJcIj4nO1xyXG5cclxuICAgIGlmIChzdHlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb250ZXVkb0ZpbmFsICs9ICc8c3R5bGU+JyArIHN0eWxlcy5qb2luKCdcXG4nKSArICc8L3N0eWxlPic7XHJcbiAgICB9XHJcblxyXG4gICAgY29udGV1ZG9GaW5hbCArPSBjb250ZXVkb1Byb2Nlc3NhZG87XHJcbiAgICBjb250ZXVkb0ZpbmFsICs9ICc8L2Rpdj4nO1xyXG5cclxuICAgIHRoaXMucHJldmlld0h0bWxPdXRwdXQuZW1pdChjb250ZXVkb0ZpbmFsKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoY29udGV1ZG9GaW5hbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZXJJbmRlbnRhY2FvSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdGFnc1BlcnNvbmFsaXphZGFzID0gWydkaXYnLCAnc2VjdGlvbicsICdhcnRpY2xlJywgJ2hlYWRlcicsICdmb290ZXInLCAnbmF2JywgJ2FzaWRlJywgJ21haW4nLCAnZm9ybScsICd0YWJsZScsICd1bCcsICdvbCcsICdib2R5JywgJ29wdGlvbicsICdzZWxlY3QnLCAnYmxvY2txdW90ZSddO1xyXG4gICAgXHJcbiAgICBsZXQgcmVzdWx0YWRvID0gaHRtbDtcclxuICAgIFxyXG4gICAgdGFnc1BlcnNvbmFsaXphZGFzLmZvckVhY2godGFnID0+IHtcclxuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAoPCR7dGFnfVtePl0qPikoW1xcXFxzXFxcXFNdKj8pKDxcXFxcLyR7dGFnfT4pYCwgJ2dpJyk7XHJcbiAgICAgIFxyXG4gICAgICByZXN1bHRhZG8gPSByZXN1bHRhZG8ucmVwbGFjZShyZWdleCwgKG1hdGNoLCBhYmVydHVyYSwgY29udGV1ZG8sIGZlY2hhbWVudG8pID0+IHtcclxuICAgICAgICBjb25zdCBjb250ZXVkb0xpbXBvID0gY29udGV1ZG8ucmVwbGFjZSgvPlxccys8L2csICc+PCcpO1xyXG4gICAgICAgIHJldHVybiBhYmVydHVyYSArIGNvbnRldWRvTGltcG8gKyBmZWNoYW1lbnRvO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICByZXR1cm4gcmVzdWx0YWRvO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0h0bWxTdHJpbmcoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghc3RyIHx8IHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XHJcbiAgICBcclxuICAgIGNvbnN0IHRyaW1tZWQgPSBzdHIudHJpbSgpO1xyXG4gICAgXHJcbiAgICBpZiAoIXRyaW1tZWQuc3RhcnRzV2l0aCgnPCcpIHx8ICF0cmltbWVkLmVuZHNXaXRoKCc+JykpIHJldHVybiBmYWxzZTtcclxuICAgIFxyXG4gICAgY29uc3QgaHRtbFRhZ1JlZ2V4ID0gLzxcXC8/W2Etel1bXFxzXFxTXSo/Pi9pO1xyXG4gICAgY29uc3QgaGFzT3BlbmluZ1RhZyA9IC88W2Etel1bXFxzXFxTXSo/Pi9pLnRlc3QodHJpbW1lZCk7XHJcbiAgICBjb25zdCBoYXNDbG9zaW5nVGFnID0gLzxcXC9bYS16XVtcXHNcXFNdKj8+L2kudGVzdCh0cmltbWVkKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIGh0bWxUYWdSZWdleC50ZXN0KHRyaW1tZWQpICYmIChoYXNPcGVuaW5nVGFnIHx8IGhhc0Nsb3NpbmdUYWcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcm9jZXNzYXJWYXJpYXZlaXNDb21IdG1sKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY29udGV1ZG9Qcm9jZXNzYWRvID0gY29udGVudDtcclxuICAgIFxyXG4gICAgY29udGV1ZG9Qcm9jZXNzYWRvID0gdGhpcy5wcm9jZXNzYXJCb3RvZXNDdXN0b21pemFkb3MoY29udGV1ZG9Qcm9jZXNzYWRvKTtcclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLnJlbGF0b3JpbygpIHx8ICF0aGlzLnJlbGF0b3JpbygpIS52YXJpYXZlaXMpIHtcclxuICAgICAgcmV0dXJuIGNvbnRldWRvUHJvY2Vzc2FkbztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2YXJpYXZlaXMgPSB0aGlzLnJlbGF0b3JpbygpIS52YXJpYXZlaXM7XHJcbiAgICBjb25zdCBtb3N0cmFyVmFsb3JlcyA9IHRoaXMuc2hvd1ZhcmlhYmxlVmFsdWVzSW5QcmV2aWV3KCk7XHJcblxyXG4gICAgdmFyaWF2ZWlzLmZvckVhY2godmFyaWF2ZWwgPT4ge1xyXG4gICAgICBpZiAoIW1vc3RyYXJWYWxvcmVzICYmICF0aGlzLmlzSHRtbFN0cmluZyh2YXJpYXZlbC52YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVySWQgPSBgeyR7dmFyaWF2ZWwuaWR9fWA7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoY29udGV1ZG9Qcm9jZXNzYWRvLmluY2x1ZGVzKHBsYWNlaG9sZGVySWQpKSB7XHJcbiAgICAgICAgY29udGV1ZG9Qcm9jZXNzYWRvID0gY29udGV1ZG9Qcm9jZXNzYWRvLnNwbGl0KHBsYWNlaG9sZGVySWQpLmpvaW4odmFyaWF2ZWwudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG5cclxuICAgICAgY29uc3QgcGF0dGVybnMgPSBbXHJcbiAgICAgICAgYDxzcGFuW14+XSpjbGFzcz1cIlteXCJdKm1lbnRpb25bXlwiXSpcIltePl0qPlxcXFxzKiR7dGhpcy5lc2NhcGVSZWdleCh2YXJpYXZlbC5kZXNjcmljYW8pfVxcXFxzKjwvc3Bhbj5gLFxyXG4gICAgICAgIGA8c3BhbltePl0qZGF0YS1tZW50aW9uW14+XSo+XFxcXHMqJHt0aGlzLmVzY2FwZVJlZ2V4KHZhcmlhdmVsLmRlc2NyaWNhbyl9XFxcXHMqPC9zcGFuPmAsXHJcbiAgICAgICAgYD5cXFxccyoke3RoaXMuZXNjYXBlUmVnZXgodmFyaWF2ZWwuZGVzY3JpY2FvKX1cXFxccyo8YCxcclxuICAgICAgICBgPFtePl0rPlxcXFxzKiR7dGhpcy5lc2NhcGVSZWdleCh2YXJpYXZlbC5kZXNjcmljYW8pfVxcXFxzKjwvW14+XSs+YFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgbGV0IHN1YnN0aXR1aWRvID0gZmFsc2U7XHJcbiAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xyXG4gICAgICAgIGNvbnN0IHJlZ2V4TWVudGlvbiA9IG5ldyBSZWdFeHAocGF0dGVybiwgJ2dpJyk7XHJcbiAgICAgICAgaWYgKHJlZ2V4TWVudGlvbi50ZXN0KGNvbnRldWRvUHJvY2Vzc2FkbykpIHtcclxuICAgICAgICAgIGNvbnRldWRvUHJvY2Vzc2FkbyA9IGNvbnRldWRvUHJvY2Vzc2Fkby5yZXBsYWNlKHJlZ2V4TWVudGlvbiwgXHJcbiAgICAgICAgICAgIHBhdHRlcm4uc3RhcnRzV2l0aCgnPicpID8gYD4ke3ZhcmlhdmVsLnZhbHVlfTxgIDogdmFyaWF2ZWwudmFsdWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBzdWJzdGl0dWlkbyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmICghc3Vic3RpdHVpZG8gJiYgY29udGV1ZG9Qcm9jZXNzYWRvLmluY2x1ZGVzKHZhcmlhdmVsLmRlc2NyaWNhbykpIHtcclxuICAgICAgICBjb250ZXVkb1Byb2Nlc3NhZG8gPSBjb250ZXVkb1Byb2Nlc3NhZG8uc3BsaXQodmFyaWF2ZWwuZGVzY3JpY2FvKS5qb2luKHZhcmlhdmVsLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbnRldWRvUHJvY2Vzc2FkbztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvY2Vzc2FyQm90b2VzQ3VzdG9taXphZG9zKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZWdleEJvdGFvID0gL1xcW0JPVMODTzpcXHMqKFteXFxdXSspXFxdL2c7XHJcbiAgICBcclxuICAgIHJldHVybiBjb250ZW50LnJlcGxhY2UocmVnZXhCb3RhbywgKG1hdGNoLCB0ZXh0b0JvdGFvKSA9PiB7XHJcbiAgICAgIGNvbnN0IGJ1dHRvbklkID0gdGhpcy5nZW5lcmF0ZUJ1dHRvbklkKHRleHRvQm90YW8pO1xyXG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSB0aGlzLmdlbmVyYXRlQnV0dG9uRnVuY3Rpb25OYW1lKHRleHRvQm90YW8pO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5yZWdpc3RlckJ1dHRvbkNhbGxiYWNrKGZ1bmN0aW9uTmFtZSwgdGV4dG9Cb3RhbywgYnV0dG9uSWQpO1xyXG4gICAgICBcclxuICAgICAgY29uc3QgYnV0dG9uSHRtbCA9IGA8YnV0dG9uIGNsYXNzPVwiYmctYmx1ZS04MDAgYm9yZGVyLW5vbmUgYm9yZGVyLXJvdW5kIGN1cnNvci1wb2ludGVyIGZvbnQtc2VtaWJvbGQgcC0yIHNoYWRvdy0zIHRleHQtd2hpdGUtYWxwaGEtOTAgYWN0aXZlOmJnLWJsdWUtOTAwXCIgaWQ9XCIke2J1dHRvbklkfVwiIG9uY2xpY2s9XCIke2Z1bmN0aW9uTmFtZX1cIiBzdHlsZT1cImZvbnQtZmFtaWx5OkludGVyLEludGVyIHZhcixzYW5zLXNlcmlmIWltcG9ydGFudDtkaXNwbGF5OmlubGluZS1ibG9jaztcIj4ke3RleHRvQm90YW99PC9idXR0b24+YDtcclxuICAgICAgcmV0dXJuIGJ1dHRvbkh0bWw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXNjYXBlUmVnZXgoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldFByZXZpZXdDb250ZW50KCk6IFNhZmVIdG1sIHtcclxuICAgIHJldHVybiB0aGlzLnByZXZpZXdDb250ZW50KCk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBwYXJhIGxpZGFyIGNvbSBpbnNlcsOnw6NvIGRlICcjJyBlbSBsaW5oYSB2YXppYVxyXG4gICAqIEluc2VyZSB0ZW1wb3JhcmlhbWVudGUgdW0gY2FyYWN0ZXJlIGludmlzw612ZWwgcGFyYSBmb3LDp2FyIG8gb3ZlcmxheSBhcGFyZWNlclxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlSGFzaEluc2VydGlvbigpOiB2b2lkIHtcclxuICAgIC8vIEFkaWEgYSBleGVjdcOnw6NvIHBhcmEgZ2FyYW50aXIgcXVlIG8gUXVpbGwgcHJvY2Vzc291IGEgaW5zZXLDp8OjbyBkbyAnIydcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucXVpbGwuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgIGlmICghcmFuZ2UpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnF1aWxsLmdldFRleHQoMCwgcmFuZ2UuaW5kZXgpO1xyXG4gICAgICBjb25zdCBsYXN0SGFzaEluZGV4ID0gdGV4dC5sYXN0SW5kZXhPZignIycpO1xyXG4gICAgICBcclxuICAgICAgLy8gVmVyaWZpY2Egc2UgbyAnIycgZXN0w6Egbm8gaW7DrWNpbyBkZSB1bWEgbGluaGFcclxuICAgICAgaWYgKGxhc3RIYXNoSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgY29uc3QgY2hhckJlZm9yZSA9IGxhc3RIYXNoSW5kZXggPiAwID8gdGV4dFtsYXN0SGFzaEluZGV4IC0gMV0gOiBudWxsO1xyXG4gICAgICAgIC8vIFBlZ2EgbyBjYXJhY3RlcmUgbG9nbyBhcMOzcyBvIGN1cnNvciBwYXJhIHZlcmlmaWNhciBzZSBlc3TDoSB2YXppb1xyXG4gICAgICAgIGNvbnN0IGNoYXJBZnRlciA9IHRoaXMucXVpbGwuZ2V0VGV4dChyYW5nZS5pbmRleCwgMSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgaXNBdFN0YXJ0T2ZMaW5lID0gKGxhc3RIYXNoSW5kZXggPT09IDAgfHwgY2hhckJlZm9yZSA9PT0gJ1xcbicpO1xyXG4gICAgICAgIGNvbnN0IGlzRW1wdHlBZnRlciA9ICghY2hhckFmdGVyIHx8IGNoYXJBZnRlciA9PT0gJ1xcbicgfHwgY2hhckFmdGVyID09PSAnJyB8fCBjaGFyQWZ0ZXIudHJpbSgpID09PSAnJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gU2UgZXN0aXZlciBubyBpbsOtY2lvIGRlIGxpbmhhIHZhemlhLCBmYXogbyBcInRydXF1ZVwiIGRlIGluc2VyaXIgZSBhcGFnYXJcclxuICAgICAgICBpZiAoaXNBdFN0YXJ0T2ZMaW5lICYmIGlzRW1wdHlBZnRlcikge1xyXG4gICAgICAgICAgLy8gSW5zZXJlIHVtIHBvbnRvIHRlbXBvcmFyaWFtZW50ZSAobW9kbyBzaWxlbmNpb3NvIHBhcmEgbsOjbyBkaXNwYXJhciBldmVudG9zIHJlY3Vyc2l2b3MsIHNlIG7Do28gZm9zc2UgY29udHJvbGFkbylcclxuICAgICAgICAgIC8vIE1hcyBhcXVpIHVzYW1vcyBzaWxlbnQgZSBjaGFtYW1vcyBoYW5kbGVNZW50aW9uIG1hbnVhbG1lbnRlXHJcbiAgICAgICAgICB0aGlzLnF1aWxsLmluc2VydFRleHQocmFuZ2UuaW5kZXgsICcuJywgJ3NpbGVudCcpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBSZW1vdmUgaW1lZGlhdGFtZW50ZVxyXG4gICAgICAgICAgdGhpcy5xdWlsbC5kZWxldGVUZXh0KHJhbmdlLmluZGV4LCAxLCAnc2lsZW50Jyk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIEZvcsOnYSBhIHZlcmlmaWNhw6fDo28gZG8gbWVudGlvbiBhZ29yYSBxdWUgbyBsYXlvdXQgZm9pIFwicHJvdm9jYWRvXCJcclxuICAgICAgICAgIHRoaXMuaGFuZGxlTWVudGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgMTApO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwia3YtZWRpdG9yLWNvbnRhaW5lciBoLWZ1bGwgdy1mdWxsIG1heC1oLWZ1bGwgZmxleCBmbGV4LWNvbHVtbiBvdmVyZmxvdy1oaWRkZW5cIlxyXG4gIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImRpc2FibGVkRWRpdG9yKClcIiBbY2xhc3Mub3BhY2l0eS02MF09XCJkaXNhYmxlZEVkaXRvcigpXCJcclxuICBbY2xhc3Mua3YtZWRpdG9yLWZ1bGxzY3JlZW5dPVwiaXNGdWxsc2NyZWVuKClcIj5cclxuICA8ZGl2ICNlZGl0b3IgaWQ9XCJrdi1lZGl0b3ItdG9vbGJhclwiIFtuZ0NsYXNzXT1cInsgJ2Vycm9yLWJvcmRlci10b29sYmFyJzogaGFzQ29udHJvbEVycm9yKCkgfVwiXHJcbiAgICBjbGFzcz1cInt7IHNob3dIZWFkZXIoKSA/ICdmbGV4JyA6ICdoaWRkZW4nIH19IGZsZXgtY29sdW1uIGZsZXgtaW5pdGlhbCBxbC10b29sYmFyIHFsLXNub3dcIj5cclxuICAgIEBpZihzaG93SGVhZGVyQnV0dG9ucygpKSB7XHJcbiAgICBAaWYocmVsYXRvcmlvcygpLmxlbmd0aCA+IDApIHtcclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHt7KHJlYWRvbmx5KCkgfHwgZGlzYWJsZWRFZGl0b3IoKSkgJiYgJ3BvaW50ZXItZXZlbnRzLW5vbmUgb3BhY2l0eS05MCd9fVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMlwiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcC0yIGJvcmRlci1yb3VuZC1sZyBib3JkZXItMSBib3JkZXItZ3JheS0yMDAgaG92ZXI6c2hhZG93LTEgaG92ZXI6YmctZ3JheS0xMDAgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1hbGwgdHJhbnNpdGlvbi1kdXJhdGlvbi0zMDBcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wLnRvZ2dsZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZyB0ZXh0LWdyZWVuLTYwMCBmb250LW1lZGl1bVwiPlxyXG4gICAgICAgICAgICBjb250cmFjdFxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQteHMgdGV4dC1ncmF5LTYwMFwiPnt7XHJcbiAgICAgICAgICAgICFjbGVhcmVkVGVtcGxhdGUoKVxyXG4gICAgICAgICAgICA/IHJlbGF0b3JpbygpPy5sYWJlbCB8fCBsYWJlbEVtcHR5RHJvcGRvd24oKVxyXG4gICAgICAgICAgICA6IGxhYmVsRW1wdHlEcm9wZG93bigpXHJcbiAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtbGdcIj5cclxuICAgICAgICAgICAga2V5Ym9hcmRfYXJyb3dfZG93blxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICBAaWYoIWNsZWFyZWRUZW1wbGF0ZSgpKSB7XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgYm9yZGVyLXJvdW5kLWxnIGJvcmRlci0xIGJvcmRlci1ncmF5LTIwMCBob3ZlcjpzaGFkb3ctMSBob3ZlcjpiZy1ncmF5LTEwMCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWFsbCB0cmFuc2l0aW9uLWR1cmF0aW9uLTMwMFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJUZW1wbGF0ZSgpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZyB0ZXh0LW9yYW5nZS02MDAgZm9udC1tZWRpdW1cIiBbcFRvb2x0aXBdPVwiJ0xpbXBhciBUZW1wbGF0ZSdcIj5cclxuICAgICAgICAgICAgbGF5ZXJzX2NsZWFyXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHAtMiBib3JkZXItcm91bmQtbGcgYm9yZGVyLTEgYm9yZGVyLWdyYXktMjAwIGhvdmVyOnNoYWRvdy0xIGhvdmVyOmJnLWdyYXktMTAwIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tYWxsIHRyYW5zaXRpb24tZHVyYXRpb24tMzAwXCJcclxuICAgICAgICAgIChjbGljayk9XCJzaG93SW5zdHJ1Y29lcygpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZyB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtXCI+XHJcbiAgICAgICAgICAgIGluZm9cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj5JbnN0cnXDp8O1ZXM8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBAaWYocHJpbnRCdXR0b24oKSkge1xyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHAtMiBib3JkZXItcm91bmQtbGcgYm9yZGVyLTEgYm9yZGVyLWdyYXktMjAwIGhvdmVyOnNoYWRvdy0xIGhvdmVyOmJnLWdyYXktMTAwIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tYWxsIHRyYW5zaXRpb24tZHVyYXRpb24tMzAwXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5SZWxhdG9yaW8oKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnIGZvbnQtbWVkaXVtXCI+XHJcbiAgICAgICAgICAgICAgcHJpbnRcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC14cyB0ZXh0LWdyYXktNjAwXCI+SW1wcmltaXI8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH0gLS0+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8cC1kaXZpZGVyIGNsYXNzPVwidy1mdWxsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy1mdWxsIGZsZXgtaW5pdGlhbFwiPlxyXG4gICAgICBAaWYoaXNMb2FkaW5nKCkpIHtcclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyB3LWZ1bGxcIj5cclxuICAgICAgICA8cC1za2VsZXRvbiBzdHlsZUNsYXNzPVwidy02cmVtXCIgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgICAgPHAtc2tlbGV0b24gc3R5bGVDbGFzcz1cInctNnJlbVwiIFtzdHlsZV09XCJ7IGhlaWdodDogJzJyZW0nIH1cIj48L3Atc2tlbGV0b24+XHJcblxyXG4gICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIiBbc3R5bGVdPVwieyBoZWlnaHQ6ICcycmVtJyB9XCI+PC9wLXNrZWxldG9uPlxyXG5cclxuICAgICAgICA8cC1za2VsZXRvbiBzdHlsZUNsYXNzPVwidy02cmVtXCIgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgICAgPHAtc2tlbGV0b24gc3R5bGVDbGFzcz1cInctNnJlbVwiIFtzdHlsZV09XCJ7IGhlaWdodDogJzJyZW0nIH1cIj48L3Atc2tlbGV0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBnYXAtMiB7e1xyXG4gICAgICAgICAgaXNMb2FkaW5nKCkgPyAnaGlkZGVuJyA6ICdmbGV4J1xyXG4gICAgICAgIH19IHctZnVsbFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1mb250XCI+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyb2JvdG9cIj5Sb2JvdG88L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFyaWFsXCI+QXJpYWw8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInRpbWVzLW5ldy1yb21hblwiPlRpbWVzIE5ldyBSb21hbjwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibW9ub3NwYWNlXCI+TW9ub3NwYWNlPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJpbnRlclwiPkludGVyPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+U2FucyBTZXJpZjwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2VyaWZcIj5TZXJpZjwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMVwiPlRpdHVsbzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMlwiPlN1YnRpdHVsbzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkPk5vcm1hbDwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgPHNlbGVjdCB0aXRsZT1cIlNpemVcIiBjbGFzcz1cInFsLXNpemVcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTVweFwiPjE1cHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMjBweFwiPjIwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMzBweFwiPjMwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNDBweFwiPjQwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNTBweFwiPjUwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNzBweFwiPjcwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiOTBweFwiPjkwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1ib2xkXCIgcFRvb2x0aXA9XCJOZWdyaXRvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaXRhbGljXCIgcFRvb2x0aXA9XCJJdMOhbGljb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLXVuZGVybGluZVwiIHBUb29sdGlwPVwiU3VibGluaGFkb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLXN0cmlrZVwiIHBUb29sdGlwPVwiVGFjaGFkb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgPHAtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwicWwtY29sb3JcIiBwVG9vbHRpcD1cIkNvciBkYSBmb250ZVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWJhY2tncm91bmRcIiBwVG9vbHRpcD1cIkNvciBkZSBmdW5kb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvc2VsZWN0PlxyXG4gICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgQGlmKHRydWUpIHtcclxuICAgICAgICA8IS0tIDxwLWRpdmlkZXIgbGF5b3V0PVwidmVydGljYWxcIj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaGVhZGVyXCIgdmFsdWU9XCIxXCI+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWhlYWRlclwiIHZhbHVlPVwiMlwiPjwvYnV0dG9uPlxyXG4gICAgICA8L3NwYW4+IC0tPlxyXG5cclxuICAgICAgICA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1saW5rXCIgcFRvb2x0aXA9XCJJbnNlcmlyIGxpbmtcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1pbWFnZVwiIHBUb29sdGlwPVwiSW5zZXJpciBpbWFnZW1cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC12aWRlb1wiIHBUb29sdGlwPVwiSW5zZXJpciB2w61kZW9cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICBAaWYoZW5hYmxlQnV0dG9uSW5zZXJ0KCkpIHtcclxuICAgICAgICAgIDxidXR0b24gaWQ9XCJpbnNlcnQtY3VzdG9tLWJ1dHRvblwiIHBUb29sdGlwPVwiSW5zZXJpciBib3TDo29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cInRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgLTEuN3B4KTsgZm9udC1zaXplOiAyMnB4O1wiPmJ1dHRvbnNfYWx0PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgQGlmKHNob3dBbHBoYUNybUJ1dHRvbnMoKSkge1xyXG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImJ0bi1hbHBoYS1hY2VpdGFyXCIgcFRvb2x0aXA9XCJJbnNlcmlyIGJvdMOjbyBBY2VpdGFyXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIC0xLjdweCk7IGZvbnQtc2l6ZTogMjJweDtcIj52YXJpYWJsZV9hZGQ8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuLWFscGhhLWNhbmNlbGFyXCIgcFRvb2x0aXA9XCJJbnNlcmlyIGJvdMOjbyBDYW5jZWxhclwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwidHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAtMS43cHgpOyBmb250LXNpemU6IDIycHg7XCI+dmFyaWFibGVfcmVtb3ZlPC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImJ0bi1hbHBoYS1hY2VpdGFyLWFzc2luYXJcIiBwVG9vbHRpcD1cIkluc2VyaXIgYm90w6NvIEFjZWl0YXIgZSBBc3NpbmFyIENvbnRyYXRvXCJcclxuICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIC0xcHgpOyBmb250LXNpemU6IDIwcHg7XCI+bmV3X2xhYmVsPC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgQGlmKHNob3dBbHBoYUNvbnRyYXRvQnV0dG9ucygpKSB7XHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuLWFscGhhLWNvbnRyYXRvLWFzc2luYXJcIiBwVG9vbHRpcD1cIkluc2VyaXIgYm90w6NvIEFzc2luYXIgQ29udHJhdG9cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cInRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgLTEuN3B4KTsgZm9udC1zaXplOiAyMHB4O1wiPmNvbnRyYWN0X2VkaXQ8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuLWFscGhhLWNvbnRyYXRvLXJlY3VzYXJcIiBwVG9vbHRpcD1cIkluc2VyaXIgYm90w6NvIFJlY3VzYXIgQ29udHJhdG9cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cInRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgLTEuN3B4KTsgZm9udC1zaXplOiAyMHB4O1wiPmNvbnRyYWN0X2RlbGV0ZTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxwLWRpdmlkZXIgbGF5b3V0PVwidmVydGljYWxcIj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWxpc3RcIiB2YWx1ZT1cIm9yZGVyZWRcIiBwVG9vbHRpcD1cIkxpc3RhIG9yZGVuYWRhXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtbGlzdFwiIHZhbHVlPVwiYnVsbGV0XCIgcFRvb2x0aXA9XCJMaXN0YSBjb20gbWFyY2Fkb3Jlc1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWFsaWduXCIgcFRvb2x0aXA9XCJBbGluaGFtZW50b1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvc2VsZWN0PlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEgbWluLXctMFwiPjwvZGl2PlxyXG4gICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIG0tMCBtbC1hdXRvIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIHByLTJcIj5cclxuICAgICAgICAgIDxidXR0b24gcEJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cInAtMSBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9ycyB0cmFuc2l0aW9uLWR1cmF0aW9uLTIwMCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LWdyYXktNzAwIGhvdmVyOnRleHQtYmx1ZS02MDBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRnVsbHNjcmVlbigpXCI+XHJcblxyXG4gICAgICAgICAgICB7e2lzRnVsbHNjcmVlbigpID8gJ0V4cGFuZGlyJyA6ICdSZWR1emlyJ319XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHN0eWxlPVwiZm9udC1zaXplOiAyNHB4O1wiPnt7IGlzRnVsbHNjcmVlbigpID8gJ2Z1bGxzY3JlZW5fZXhpdCcgOlxyXG4gICAgICAgICAgICAgICdmdWxsc2NyZWVuJyB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvc3Bhbj4gLS0+XHJcblxyXG4gICAgICAgIDxrdi1idXR0b24gc2V2ZXJpdHk9XCJ0ZXJ0aWFyeVwiIFtpY29uXT1cImlzRnVsbHNjcmVlbigpID8gJ2Z1bGxzY3JlZW5fZXhpdCcgOlxyXG4gICAgICAgICAgICAgICdmdWxsc2NyZWVuJ1wiIFtsYWJlbF09XCJpc0Z1bGxzY3JlZW4oKSA/ICdSZWR1emlyJyA6ICdFeHBhbmRpcidcIiAob25DbGljayk9XCJ0b2dnbGVGdWxsc2NyZWVuKClcIj5cclxuXHJcbiAgICAgICAgPC9rdi1idXR0b24+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDNweDsgYm9yZGVyLXRvcDogbm9uZTsgYm9yZGVyLWJvdHRvbTogbm9uZVwiXHJcbiAgICBbc3R5bGUuYm9yZGVyUmlnaHRdPVwic2hvd0hlYWRlcigpID8gJzFweCBzb2xpZCAjZTVlN2ViJyA6ICdub25lJ1wiXHJcbiAgICBbc3R5bGUuYm9yZGVyTGVmdF09XCJzaG93SGVhZGVyKCkgPyAnMXB4IHNvbGlkICNlNWU3ZWInIDogJ25vbmUnXCI+XHJcbiAgICBAaWYoaXNMb2FkaW5nUGRmKCkpIHtcclxuICAgIDxwLXByb2dyZXNzQmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgW3N0eWxlXT1cInsgaGVpZ2h0OiAnM3B4JyB9XCIgLz5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC0xIGdhcC0wIG92ZXJmbG93LWF1dG9cIj5cclxuICAgIDxkaXYgaWQ9XCJrdi1lZGl0b3JcIiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZmxleC0xIHNjcm9sbHN0eWxlIHFsLWNvbnRhaW5lciBxbC1zbm93XCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICdlcnJvci1ib3JkZXInOiBoYXNDb250cm9sRXJyb3IoKSxcclxuICAgICAgICAncG9pbnRlci1ldmVudHMtbm9uZSBvcGFjaXR5LTYwJzogaXNMb2FkaW5nUGRmKClcclxuICAgICAgfVwiIFtzdHlsZS5ib3JkZXJUb3BdPVwic2hvd0hlYWRlcigpID8gJ25vbmUnIDogJzFweCBzb2xpZCAjZTVlN2ViJ1wiXHJcbiAgICAgIFtzdHlsZS5ib3JkZXJSaWdodF09XCJlbmFibGVQcmV2aWV3TW9kZSgpID8gJ25vbmUnIDogJzFweCBzb2xpZCAjZTVlN2ViJ1wiPjwvZGl2PlxyXG5cclxuICAgIEBpZihlbmFibGVQcmV2aWV3TW9kZSgpKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBmbGV4LTFcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHB4LTMgcHktMlwiIFtzdHlsZS5ib3JkZXJSaWdodF09XCInMXB4IHNvbGlkICNlNWU3ZWInXCJcclxuICAgICAgICBbc3R5bGUuYm9yZGVyTGVmdF09XCInMXB4IHNvbGlkICNlNWU3ZWInXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtYmx1ZS02MDAgdGV4dC1sZ1wiPnZpc2liaWxpdHk8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDAgdGV4dC1zbVwiPlByZXZpZXc8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBpZD1cImt2LWVkaXRvci1wcmV2aWV3XCIgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGZsZXgtMSBzY3JvbGxzdHlsZVwiIFtpbm5lckhUTUxdPVwiZ2V0UHJldmlld0NvbnRlbnRcIlxyXG4gICAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJzFweCBzb2xpZCAjZTVlN2ViJ1wiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuPGt2LWVycm9yIFtoYXNFcnJvcl09XCJoYXNDb250cm9sRXJyb3IoKVwiPnt7IGVycm9NZXNzYWdlKCkgfX08L2t2LWVycm9yPlxyXG5cclxuXHJcblxyXG48cC1vdmVybGF5UGFuZWwgI29wIHN0eWxlQ2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIj5cclxuICA8ZGl2IGNsYXNzPVwiZ3JpZCBtLTAgZ2FwLTIgcC0yIG1heC13LTIwcmVtIG92ZXJmbG93LXktYXV0byBzY3JvbGxzdHlsZVwiIHN0eWxlPVwibWF4LWhlaWdodDogMTZyZW1cIj5cclxuICAgIEBmb3IoaXRlbSBvZiByZWxhdG9yaW9zKCk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImNvbC0xMiBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1ncmF5LTEwMCB0cmFuc2l0aW9uLWNvbG9ycyB0cmFuc2l0aW9uLWR1cmF0aW9uLTIwMCBib3JkZXItcm91bmQtbGcgc2hhZG93LTIgZmxleCBmbGV4LWNvbHVtbiBnYXAtMlwiXHJcbiAgICAgIChjbGljayk9XCJzZXRSZWxhdG9yaW8oaXRlbSlcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHctZnVsbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XHJcblxyXG4gICAgICAgIDxrdi10YWdzIGNsYXNzPVwidHJhbnNpdGlvbi1vcGFjaXR5IHRyYW5zaXRpb24tZHVyYXRpb24tMzAwIHt7XHJcbiAgICAgICAgICAgIGl0ZW0/LmlkID09IGlkUmVsYXRvcmlvU2VsZWN0ZWQoKSA/ICdvcGFjaXR5LTEwMCcgOiAnb3BhY2l0eS0wJ1xyXG4gICAgICAgICAgfX1cIiBbdGFnc109XCJbeyBsYWJlbDogJ1NlbGVjaW9uYWRvJywgc2V2ZXJpdHk6ICdwcmltYXJ5JyB9XVwiPjwva3YtdGFncz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC14cyB0ZXh0LWdyYXktNTAwXCI+e3sgaXRlbS5kZXNjcmljYW8gfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9wLW92ZXJsYXlQYW5lbD5cclxuXHJcbjxkaXYgY2xhc3M9XCJrdi1lZGl0b3ItY29udGFpbmVyIGZsZXggZmxleC1jb2x1bW4gb3ZlcmZsb3ctaGlkZGVuIHJlbGF0aXZlXCI+XHJcbiAgPGRpdiAjbWVudGlvbkFuY2hvciBzdHlsZT1cInBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7IG9wYWNpdHk6IDBcIj48L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48cC1vdmVybGF5UGFuZWwgI29wVmFyaWFibGVzIFthcHBlbmRUb109XCInYm9keSdcIiAob25IaWRlKT1cImNsb3NlVmFyaWFibGVzUGFuZWwoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0xIHAtMSBvdmVyZmxvdy15LWF1dG8gc2Nyb2xsLXZpcnR1YWwgYm9yZGVyLXJvdW5kLWxnXCJcclxuICAgIHN0eWxlPVwibWF4LWhlaWdodDogMjUwcHg7IG1pbi13aWR0aDogMjUwcHg7IGJhY2tncm91bmQtY29sb3I6ICMzMzMzMzNcIj5cclxuICAgIEBmb3IodmFyaWFibGUgb2YgZmlsdGVyZWRWYXJpYWJsZXMoKTsgdHJhY2sgdmFyaWFibGUuaWQpIHtcclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJwLTIgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1jb2xvcnMgdHJhbnNpdGlvbi1kdXJhdGlvbi0yMDAgYm9yZGVyLXJvdW5kLWxnIHRleHQtc20gdGV4dC13aGl0ZSBvcHRpb24tZHJvcGRvd25cIlxyXG4gICAgICAoY2xpY2spPVwic2VsZWN0VmFyaWFibGVGcm9tUGFuZWwodmFyaWFibGUpXCI+XHJcbiAgICAgIEBpZiAoc2hvd1ZhcmlhYmxlVmFsdWVGaXJzdCgpKSB7XHJcbiAgICAgIHt7IHZhcmlhYmxlLnZhbHVlIH19IChcclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWdyYXktNDAwXCI+e3sgdmFyaWFibGUuZGVzY3JpY2FvIH19PC9zcGFuPiApXHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICB7eyB2YXJpYWJsZS5kZXNjcmljYW8gfX0gKFxyXG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQtZ3JheS00MDBcIj57eyB2YXJpYWJsZS52YWx1ZSB9fTwvc3Bhbj4gKVxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIH0gQGVtcHR5IHtcclxuICAgIDxkaXYgY2xhc3M9XCJwLTIgdGV4dC1zbSB0ZXh0LWdyYXktNTAwXCI+TmVuaHVtYSB2YXJpw6F2ZWwgZW5jb250cmFkYS48L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9wLW92ZXJsYXlQYW5lbD5cclxuXHJcbjxkaXYgI2J1dHRvbk5hbWVUb29sdGlwIGNsYXNzPVwiYnV0dG9uLW5hbWUtdG9vbHRpcFwiIFtjbGFzcy5zaG93XT1cInNob3dCdXR0b25Ub29sdGlwKClcIlxyXG4gIFtzdHlsZS50b3AucHhdPVwidG9vbHRpcFBvc2l0aW9uKCkudG9wXCIgW3N0eWxlLmxlZnQucHhdPVwidG9vbHRpcFBvc2l0aW9uKCkubGVmdFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0yIHAtMyBiZy13aGl0ZSBib3JkZXItcm91bmQtbGcgc2hhZG93LTNcIiBzdHlsZT1cIm1pbi13aWR0aDogMjgwcHhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0xXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwXCI+Tm9tZSBkbyBCb3TDo288L2xhYmVsPlxyXG4gICAgICA8aW5wdXQgI2J1dHRvbk5hbWVJbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwicC0yIGJvcmRlci0xIGJvcmRlci1ncmF5LTMwMCBib3JkZXItcm91bmQtbWQgdGV4dC1zbVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJFeDogQWNlaXRhciBQcm9wb3N0YVwiIFsobmdNb2RlbCldPVwiYnV0dG9uTmFtZVZhbHVlXCIgKGtleWRvd24uZW50ZXIpPVwiY29uZmlybUJ1dHRvbk5hbWUoKVwiXHJcbiAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImNhbmNlbEJ1dHRvbk5hbWUoKVwiIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwicHgtMyBweS0yIGJvcmRlci0xIGJvcmRlci1ncmF5LTMwMCBiZy13aGl0ZSB0ZXh0LWdyYXktNzAwIGJvcmRlci1yb3VuZC1tZCBjdXJzb3ItcG9pbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtIGhvdmVyOmJnLWdyYXktMTAwIHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgICAgICAoY2xpY2spPVwiY2FuY2VsQnV0dG9uTmFtZSgpXCI+XHJcbiAgICAgICAgQ2FuY2VsYXJcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cInB4LTMgcHktMiBib3JkZXItbm9uZSBiZy1ibHVlLTYwMCB0ZXh0LXdoaXRlIGJvcmRlci1yb3VuZC1tZCBjdXJzb3ItcG9pbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtIGhvdmVyOmJnLWJsdWUtNzAwIHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgICAgICAoY2xpY2spPVwiY29uZmlybUJ1dHRvbk5hbWUoKVwiPlxyXG4gICAgICAgIEluc2VyaXJcclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
766
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFFTixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUdMLE1BQU0sRUFFTixNQUFNLEVBRU4sU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFOUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFFL0csT0FBTyxFQUdMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNuQixNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRckIsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGtCQUEwQjtJQUUvRCxZQUNFLGdCQUFrQyxFQUMxQixTQUF1QjtRQUUvQixLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUZoQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBeUJqQyxzQkFB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TUFBTTtnQkEyRW1CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDSSxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ00saUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDQSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIGNvbXB1dGVkLFxyXG4gIGVmZmVjdCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBpbmplY3QsXHJcbiAgaW5wdXQsXHJcbiAgSW5wdXQsXHJcbiAgbW9kZWwsXHJcbiAgT25Jbml0LFxyXG4gIG91dHB1dCxcclxuICBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIHNpZ25hbCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgU2VjdXJpdHlDb250ZXh0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcblxyXG5pbXBvcnQgUXVpbGwgZnJvbSAncXVpbGwnO1xyXG5pbXBvcnQgeyBPdmVybGF5UGFuZWwgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudElucHV0IH0gZnJvbSAnLi4vLi4vLi4vYXBpL2Jhc2UtY29tcG9uZW50cy9iYXNlLWNvbXBvbmVudC1pbnB1dCc7XHJcbmltcG9ydCB7IENvbXBvbmVudFByb3ZpZGVycyB9IGZyb20gJy4uLy4uLy4uL2FwaS9oZWxwZXJzL2NvbXBvbmVudC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBpL3NlcnZpY2VzL2NvbXBvbmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgS3ZJbnN0cnVjb2VzUmVwb3J0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2t2LWluc3RydWNvZXMtcmVwb3J0L2t2LWluc3RydWNvZXMtcmVwb3J0LmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEt2RWRpdG9yUmVsYXRvcmlvLFxyXG4gIEt2RWRpdG9yVmFyaWF2ZWwsXHJcbiAgS3ZFZGl0b3JRdWlsbFNlcnZpY2UsXHJcbiAgS3ZFZGl0b3JSZWxhdG9yaW9TZXJ2aWNlLFxyXG4gIEt2RWRpdG9yTWVudGlvblNlcnZpY2UsXHJcbiAgS3ZFZGl0b3JQZGZTZXJ2aWNlXHJcbn0gZnJvbSAnLi9rdi1lZGl0b3InO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogQ29tcG9uZW50UHJvdmlkZXJzKEt2RWRpdG9yQ29tcG9uZW50KSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEt2RWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudElucHV0PHN0cmluZz4gaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGNvbXBvbmVudFNlcnZpY2U6IENvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBsZXQgcmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5KCk7XHJcbiAgICAgIGlmICh0aGlzLnF1aWxsKSB7XHJcbiAgICAgICAgdGhpcy5xdWlsbC5lbmFibGUoIXJlYWRvbmx5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgbGV0IGRpc2FibGVkID0gdGhpcy5kaXNhYmxlZEVkaXRvcigpO1xyXG4gICAgICBpZiAodGhpcy5xdWlsbCkge1xyXG4gICAgICAgIHRoaXMucXVpbGwuZW5hYmxlKCFkaXNhYmxlZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVByZXZpZXdNb2RlKCkpIHtcclxuICAgICAgICB0aGlzLmF0dWFsaXphclByZXZpZXcoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBJbmplw6fDo28gZGUgc2VydmnDp29zXHJcbiAgcHJpdmF0ZSBxdWlsbFNlcnZpY2UgPSBpbmplY3QoS3ZFZGl0b3JRdWlsbFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgcmVsYXRvcmlvU2VydmljZSA9IGluamVjdChLdkVkaXRvclJlbGF0b3Jpb1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgbWVudGlvblNlcnZpY2UgPSBpbmplY3QoS3ZFZGl0b3JNZW50aW9uU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBwZGZTZXJ2aWNlID0gaW5qZWN0KEt2RWRpdG9yUGRmU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xyXG5cclxuICAvLyBQcm9wcmllZGFkZXMgZGUgY29uZmlndXJhw6fDo29cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBFc3NhIHByb3ByaWVkYWRlIG7Do28gc2Vyw6EgbWFpcyB1dGlsaXphZGEgcG9yIGVzc2UgY29tcG9uZW50ZSBuYXMgcHLDs3hpbWFzIHZlcnPDtWVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNhbnZhSGVpZ3RoOiBzdHJpbmcgPSAnMzgwcHgnO1xyXG5cclxuICBASW5wdXQoKSBjb250ZW50VHlwZTogJ2h0bWwnIHwgJ3RleHQnID0gJ2h0bWwnO1xyXG4gIEBJbnB1dCgpIGRlYnVnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIEV2ZW50b3NcclxuICBAT3V0cHV0KCkgb25UZXh0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvdXRwdXRSYXc6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvdXRwdXRIdG1sOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcHJldmlld0h0bWxPdXRwdXQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkN1c3RvbUJ1dHRvbkNsaWNrOiBFdmVudEVtaXR0ZXI8eyBidXR0b25OYW1lOiBzdHJpbmc7IGZ1bmN0aW9uTmFtZTogc3RyaW5nOyBidXR0b25JZDogc3RyaW5nIH0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBQcm9wcmllZGFkZXMgaW50ZXJuYXNcclxuICBwcml2YXRlIHVwZGF0aW5nRWRpdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBsYXN0U2VsZWN0aW9uUmFuZ2U6IGFueSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBlZGl0b3JSZWFkeVJlc29sdmVyITogKCkgPT4gdm9pZDtcclxuICBwcml2YXRlIGVkaXRvclJlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XHJcbiAgICB0aGlzLmVkaXRvclJlYWR5UmVzb2x2ZXIgPSByZXNvbHZlO1xyXG4gIH0pO1xyXG5cclxuICAvLyBJbnN0w6JuY2lhIGRvIFF1aWxsXHJcbiAgcXVpbGwhOiBRdWlsbDtcclxuICBodG1sRG9FZGl0b3IgPSAnJztcclxuICBcclxuICBnZXQgcXVpbGxDbGFzcygpOiBhbnkge1xyXG4gICAgLy8gTm9ybWFsaXphw6fDo28gcm9idXN0YSBkbyBRdWlsbFxyXG4gICAgbGV0IHF1aWxsQ2xhc3M6IGFueSA9IFF1aWxsO1xyXG4gICAgaWYgKHR5cGVvZiAocXVpbGxDbGFzcyBhcyBhbnkpLnJlZ2lzdGVyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGlmICgocXVpbGxDbGFzcyBhcyBhbnkpLmRlZmF1bHQgJiYgdHlwZW9mIChxdWlsbENsYXNzIGFzIGFueSkuZGVmYXVsdC5yZWdpc3RlciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHF1aWxsQ2xhc3MgPSAocXVpbGxDbGFzcyBhcyBhbnkpLmRlZmF1bHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBxdWlsbENsYXNzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHF1aWxsRGVsdGEoKTogYW55IHtcclxuICAgIGNvbnN0IHEgPSB0aGlzLnF1aWxsQ2xhc3M7XHJcbiAgICByZXR1cm4gcS5pbXBvcnQgPyBxLmltcG9ydCgnZGVsdGEnKSA6IChxLkRlbHRhIHx8IHEuZGVmYXVsdD8uRGVsdGEpO1xyXG4gIH1cclxuXHJcbiAgLy8gU2lnbmFsIHBhcmEgZXNwZWxoYW1lbnRvIGRvIGNvbnRlw7pkbyBkbyBlZGl0b3JcclxuICBodG1sRXNwZWxobyA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuICBwcmV2aWV3Q29udGVudCA9IHNpZ25hbDxTYWZlSHRtbD4oJycpO1xyXG5cclxuICAvLyBTaWduYWxzIHBhcmEgY29udHJvbGUgZGUgZXN0YWRvXHJcbiAgaW5pdExvYWRDb21wbGV0ZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNMb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xyXG4gIGVkaXRvclRvb2xiYXJIZWlnaHQgPSBzaWduYWw8c3RyaW5nPignM3JlbScpO1xyXG4gIC8vIHRpcG9WaXN1YWxpemFjYW8gPSBzaWduYWw8J3ZhbG9yJyB8ICdkZXNjcmljYW8nPignZGVzY3JpY2FvJyk7XHJcbiAgZmlsdGVyZWRWYXJpYWJsZXMgPSBzaWduYWw8S3ZFZGl0b3JWYXJpYXZlbFtdPihbXSk7XHJcbiAgY2xlYXJlZFRlbXBsYXRlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0Z1bGxzY3JlZW4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICB0b2dnbGVGdWxsc2NyZWVuKCkge1xyXG4gICAgdGhpcy5pc0Z1bGxzY3JlZW4udXBkYXRlKHYgPT4gIXYpO1xyXG4gIH1cclxuXHJcbiAgLy9JbnB1dCBwYXJhIGhhYmlsaXRhciBwcmV2aWV3XHJcbiAgZW5hYmxlUHJldmlld01vZGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgc2hvd1ZhcmlhYmxlVmFsdWVzSW5QcmV2aWV3ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHNob3dWYXJpYWJsZVZhbHVlRmlyc3QgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8vIElucHV0cyBwYXJhIHJlbGF0w7NyaW9zXHJcbiAgcmVsYXRvcmlvcyA9IGlucHV0PEt2RWRpdG9yUmVsYXRvcmlvW10+KFtdKTtcclxuICBpZFJlbGF0b3Jpb0luaXRpYWwgPSBtb2RlbDxhbnk+KDApO1xyXG4gIHByaW50QnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgbGFiZWxFbXB0eURyb3Bkb3duID0gaW5wdXQ8c3RyaW5nPignU2VsZWNpb25lIHVtIHJlbGF0w7NyaW8nKTtcclxuICBpbnN0cnVjb2VzVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHNob3dIZWFkZXIgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuICByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBkaXNhYmxlZEVkaXRvciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBzaG93SGVhZGVyQnV0dG9ucyA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICAvLyBJbnB1dHMgcGFyYSBib3TDtWVzIGVzcGVjw61maWNvcyBkbyBhbWJpZW50ZSBBbHBoYVxyXG4gIHNob3dBbHBoYUNybUJ1dHRvbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgc2hvd0FscGhhQ29udHJhdG9CdXR0b25zID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBlbmFibGVCdXR0b25JbnNlcnQgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgLy8gQ29tcHV0ZWQgcHJvcGVydGllcyBwYXJhIHJlbGF0w7NyaW9zXHJcbiAgaWRSZWxhdG9yaW9TZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVsYXRvcmlvU2VydmljZS5nZXRJZFJlbGF0b3Jpb1NlbGVjdGVkKCkpO1xyXG4gIHJlbGF0b3JpbyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVsYXRvcmlvU2VydmljZS5nZXRSZWxhdG9yaW9TZWxlY3RlZCgpKTtcclxuICBpc0xvYWRpbmdQZGYgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBkZlNlcnZpY2UuZ2V0SXNMb2FkaW5nUGRmKCkpO1xyXG5cclxuICAvLyBWaWV3Q2hpbGQgcGFyYSBvdmVybGF5IHBhbmVsc1xyXG4gIEBWaWV3Q2hpbGQoJ29wVmFyaWFibGVzJykgb3BWYXJpYWJsZXMhOiBPdmVybGF5UGFuZWw7XHJcbiAgQFZpZXdDaGlsZCgnbWVudGlvbkFuY2hvcicpIG1lbnRpb25BbmNob3IhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2J1dHRvbk5hbWVUb29sdGlwJykgYnV0dG9uTmFtZVRvb2x0aXAhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2J1dHRvbk5hbWVJbnB1dCcpIGJ1dHRvbk5hbWVJbnB1dCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8vIFNpZ25hbHMgcGFyYSBjb250cm9sYXIgbyB0b29sdGlwIGRlIG5vbWUgZG8gYm90w6NvXHJcbiAgc2hvd0J1dHRvblRvb2x0aXAgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHRvb2x0aXBQb3NpdGlvbiA9IHNpZ25hbDx7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfT4oeyB0b3A6IDAsIGxlZnQ6IDAgfSk7XHJcbiAgYnV0dG9uTmFtZVZhbHVlOiBzdHJpbmcgPSAnJztcclxuICBwcml2YXRlIHBlbmRpbmdCdXR0b25SYW5nZTogYW55ID0gbnVsbDtcclxuXHJcbiAgbWVzc2FnZXMgPSBbeyBzZXZlcml0eTogJ2luZm8nLCBkZXRhaWw6ICdNZXNzYWdlIENvbnRlbnQnIH1dO1xyXG5cclxuICAvLyBNw6l0b2RvcyBwYXJhIGdlcmVuY2lhciByZWxhdMOzcmlvc1xyXG4gIHNldFJlbGF0b3Jpb1BvcklkKGlkOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlbGF0b3JpbyA9IHRoaXMucmVsYXRvcmlvU2VydmljZS5zZXRSZWxhdG9yaW9Qb3JJZChpZCk7XHJcbiAgICBpZiAocmVsYXRvcmlvKSB7XHJcbiAgICAgIHRoaXMuc2V0UmVsYXRvcmlvKHJlbGF0b3Jpbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRSZWxhdG9yaW8ocmVsYXRvcmlvOiBLdkVkaXRvclJlbGF0b3Jpbyk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGVhcmVkVGVtcGxhdGUuc2V0KGZhbHNlKTtcclxuICAgIHRoaXMucmVsYXRvcmlvU2VydmljZS5zZXRSZWxhdG9yaW8ocmVsYXRvcmlvKTtcclxuICAgIGNvbnN0IG1vZGVsbyA9IHJlbGF0b3Jpby5tb2RlbG9SZWxhdG9yaW8gfHwgJyc7XHJcbiAgICBjb25zdCB2YXJpYXZlaXMgPSByZWxhdG9yaW8udmFyaWF2ZWlzIHx8IFtdO1xyXG5cclxuICAgIHRoaXMuaHRtbERvRWRpdG9yID0gdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLnJlbmRlckNvbnRyYXRvKG1vZGVsbywgdmFyaWF2ZWlzKTtcclxuICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSB0cnVlO1xyXG4gICAgdGhpcy5lc2NyZXZhVmFsb3IodGhpcy5odG1sRG9FZGl0b3IpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgIC8vIEluaWNpYWxpemEgb3MgcmVsYXTDs3Jpb3Mgbm8gc2VydmnDp29cclxuICAgIHRoaXMucmVsYXRvcmlvU2VydmljZS5zZXRSZWxhdG9yaW9zKHRoaXMucmVsYXRvcmlvcygpKTtcclxuXHJcbiAgICBpZiAoIXRoaXMucXVpbGwpIHtcclxuICAgICAgdGhpcy5oYW5kbGVJbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XHJcbiAgICB9LCAxMDAwKTtcclxuXHJcbiAgICBpZiAodGhpcy5pZFJlbGF0b3Jpb0luaXRpYWwoKSkge1xyXG4gICAgICB0aGlzLmNsZWFyZWRUZW1wbGF0ZS5zZXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLnNldFJlbGF0b3Jpb1BvcklkKHRoaXMuaWRSZWxhdG9yaW9Jbml0aWFsKCkpO1xyXG4gICAgfSBlbHNlIHRoaXMuY2xlYXJlZFRlbXBsYXRlLnNldCh0cnVlKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlUHJldmlld01vZGUoKSkge1xyXG4gICAgICAgIHRoaXMuYXR1YWxpemFyUHJldmlldygpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxNTAwKTtcclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnNob3dCdXR0b25Ub29sdGlwKCkgJiYgdGhpcy5idXR0b25OYW1lVG9vbHRpcCkge1xyXG4gICAgICAgIGNvbnN0IHRvb2x0aXBFbGVtZW50ID0gdGhpcy5idXR0b25OYW1lVG9vbHRpcC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGluc2VydEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNpbnNlcnQtY3VzdG9tLWJ1dHRvbicpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghdG9vbHRpcEVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkgJiYgXHJcbiAgICAgICAgICAgICFpbnNlcnRCdXR0b24/LmNvbnRhaW5zKGUudGFyZ2V0IGFzIE5vZGUpKSB7XHJcbiAgICAgICAgICB0aGlzLmNhbmNlbEJ1dHRvbk5hbWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaGFuZGxlSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMucXVpbGxTZXJ2aWNlLmxvYWRDc3MoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVF1aWxsRWRpdG9yKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplUXVpbGxFZGl0b3IoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb25maWcgPSB7XHJcbiAgICAgIHRoZW1lOiAnc25vdycsXHJcbiAgICAgIG1vZHVsZXM6IHtcclxuICAgICAgICB0b29sYmFyOiAnI2t2LWVkaXRvci10b29sYmFyJyxcclxuICAgICAgICBjbGlwYm9hcmQ6IHtcclxuICAgICAgICAgIG1hdGNoVmlzdWFsOiBmYWxzZSxcclxuICAgICAgICAgIG1hdGNoZXJzOiBbXHJcbiAgICAgICAgICAgIFsnKicsIChub2RlOiBhbnksIGRlbHRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gZGVsdGE7XHJcbiAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBrZXlib2FyZDoge1xyXG4gICAgICAgICAgYmluZGluZ3M6IHtcclxuICAgICAgICAgICAgYmFja3NwYWNlVmFyaWFibGU6IHtcclxuICAgICAgICAgICAgICBrZXk6ICdCYWNrc3BhY2UnLFxyXG4gICAgICAgICAgICAgIGNvbGxhcHNlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICBoYW5kbGVyOiAocmFuZ2U6IGFueSwgY29udGV4dDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuaW5kZXggPT09IDApIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2xlYWZdID0gdGhpcy5xdWlsbC5nZXRMZWFmKHJhbmdlLmluZGV4IC0gMSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGVhZiAmJiBsZWFmLnBhcmVudCAmJiBsZWFmLnBhcmVudC5zdGF0aWNzLmJsb3ROYW1lID09PSAndmFyaWF2ZWwnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb3RPZmZzZXQgPSB0aGlzLnF1aWxsLmdldEluZGV4KGxlYWYucGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYmxvdExlbmd0aCA9IGxlYWYucGFyZW50Lmxlbmd0aCgpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnF1aWxsLmRlbGV0ZVRleHQoYmxvdE9mZnNldCwgYmxvdExlbmd0aCwgJ3VzZXInKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZWxldGVWYXJpYWJsZToge1xyXG4gICAgICAgICAgICAgIGtleTogJ0RlbGV0ZScsXHJcbiAgICAgICAgICAgICAgY29sbGFwc2VkOiB0cnVlLFxyXG4gICAgICAgICAgICAgIGhhbmRsZXI6IChyYW5nZTogYW55LCBjb250ZXh0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtsZWFmXSA9IHRoaXMucXVpbGwuZ2V0TGVhZihyYW5nZS5pbmRleCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGVhZiAmJiBsZWFmLnBhcmVudCAmJiBsZWFmLnBhcmVudC5zdGF0aWNzLmJsb3ROYW1lID09PSAndmFyaWF2ZWwnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb3RPZmZzZXQgPSB0aGlzLnF1aWxsLmdldEluZGV4KGxlYWYucGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYmxvdExlbmd0aCA9IGxlYWYucGFyZW50Lmxlbmd0aCgpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnF1aWxsLmRlbGV0ZVRleHQoYmxvdE9mZnNldCwgYmxvdExlbmd0aCwgJ3VzZXInKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzcGFjZVZhcmlhYmxlOiB7XHJcbiAgICAgICAgICAgICAga2V5OiAnICcsXHJcbiAgICAgICAgICAgICAgY29sbGFwc2VkOiB0cnVlLFxyXG4gICAgICAgICAgICAgIGhhbmRsZXI6IChyYW5nZTogYW55LCBjb250ZXh0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtsZWFmXSA9IHRoaXMucXVpbGwuZ2V0TGVhZihyYW5nZS5pbmRleCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGVhZiAmJiBsZWFmLnBhcmVudCAmJiBsZWFmLnBhcmVudC5zdGF0aWNzLmJsb3ROYW1lID09PSAndmFyaWF2ZWwnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmZvcm1hdCAmJiBjb250ZXh0LmZvcm1hdC52YXJpYXZlbCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxhYmVsID8gdGhpcy5sYWJlbCA6ICcnLFxyXG4gICAgICByZWFkT25seTogdGhpcy5yZWFkb25seSgpIHx8IHRoaXMuZGlzYWJsZWRFZGl0b3IoKSxcclxuICAgICAgZGVidWc6IHRoaXMuZGVidWcsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucXVpbGwgPSB0aGlzLnF1aWxsU2VydmljZS5jcmVhdGVRdWlsbEluc3RhbmNlKCcja3YtZWRpdG9yJywgY29uZmlnKTtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyYXJIdG1sQ2xpcGJvYXJkKCk7XHJcblxyXG4gICAgdGhpcy5zZXR1cEN1c3RvbVRvb2xiYXJCdXR0b25zKCk7XHJcbiAgICB0aGlzLnNldHVwUXVpbGxFdmVudHMoKTtcclxuICAgIHRoaXMuZWRpdG9yUmVhZHlSZXNvbHZlcigpO1xyXG4gICAgdGhpcy5pbml0TG9hZENvbXBsZXRlLnNldCh0cnVlKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2w7XHJcbiAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wubWFya0FzUHJpc3RpbmUpIHtcclxuICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwQ3VzdG9tVG9vbGJhckJ1dHRvbnMoKSB7XHJcbiAgICBjb25zdCBpbnNlcnRDdXN0b21CdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjaW5zZXJ0LWN1c3RvbS1idXR0b24nKTtcclxuICAgIGluc2VydEN1c3RvbUJ1dHRvbj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHJhbmdlKSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQnV0dG9uUmFuZ2UgPSByYW5nZTtcclxuICAgICAgICB0aGlzLmJ1dHRvbk5hbWVWYWx1ZSA9ICcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGJ1dHRvblJlY3QgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCdidXR0b24nKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgaWYgKGJ1dHRvblJlY3QpIHtcclxuICAgICAgICAgIHRoaXMudG9vbHRpcFBvc2l0aW9uLnNldCh7XHJcbiAgICAgICAgICAgIHRvcDogYnV0dG9uUmVjdC5ib3R0b20gKyA1LFxyXG4gICAgICAgICAgICBsZWZ0OiBidXR0b25SZWN0LmxlZnRcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnNob3dCdXR0b25Ub29sdGlwLnNldCh0cnVlKTtcclxuICAgICAgICBcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmJ1dHRvbk5hbWVJbnB1dCkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbk5hbWVJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYnRuQWxwaGFBY2VpdGFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2J0bi1hbHBoYS1hY2VpdGFyJyk7XHJcbiAgICBidG5BbHBoYUFjZWl0YXI/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmluc2VyaXJCb3RvZXNBbHBoYSgnQWNlaXRhciBQcm9wb3N0YScsICdhY2VpdGFyQnV0dG9uQWN0aW9uJywgJ2JsdWUnKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJ0bkFscGhhQ2FuY2VsYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYnRuLWFscGhhLWNhbmNlbGFyJyk7XHJcbiAgICBidG5BbHBoYUNhbmNlbGFyPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgdGhpcy5pbnNlcmlyQm90b2VzQWxwaGEoJ0NhbmNlbGFyIFByb3Bvc3RhJywgJ2NhbmNlbGFyQnV0dG9uQWN0aW9uJywgJ2dyYXknKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJ0bkFscGhhQWNlaXRhckFzc2luYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYnRuLWFscGhhLWFjZWl0YXItYXNzaW5hcicpO1xyXG4gICAgYnRuQWxwaGFBY2VpdGFyQXNzaW5hcj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5zZXJpckJvdG9lc0FscGhhKCdBY2VpdGFyIFByb3Bvc3RhIGUgQXNzaW5hciBDb250cmF0bycsICdhY2VpdGFyQXNzaW5hckFjdGlvbicsICdibHVlJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBidG5BbHBoYUNvbnRyYXRvQXNzaW5hciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNidG4tYWxwaGEtY29udHJhdG8tYXNzaW5hcicpO1xyXG4gICAgYnRuQWxwaGFDb250cmF0b0Fzc2luYXI/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmluc2VyaXJCb3RvZXNBbHBoYSgnQXNzaW5hciBDb250cmF0bycsICdhc3NpbmFyQ29udHJhdG9BY3Rpb24nLCAnYmx1ZScpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYnRuQWxwaGFDb250cmF0b1JlY3VzYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYnRuLWFscGhhLWNvbnRyYXRvLXJlY3VzYXInKTtcclxuICAgIGJ0bkFscGhhQ29udHJhdG9SZWN1c2FyPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgdGhpcy5pbnNlcmlyQm90b2VzQWxwaGEoJ1JlY3VzYXIgQ29udHJhdG8nLCAncmVjdXNhckNvbnRyYXRvQWN0aW9uJywgJ2dyYXknKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW5zZXJpckJvdG9lc0FscGhhKGJ1dHRvbk5hbWU6IHN0cmluZywgZnVuY3Rpb25OYW1lOiBzdHJpbmcsIGNvbG9yOiAnYmx1ZScgfCAnZ3JheScpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJhbmdlID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmICghcmFuZ2UpIHJldHVybjtcclxuICAgIFxyXG4gICAgdGhpcy5xdWlsbC5mb2N1cygpO1xyXG4gICAgXHJcbiAgICBjb25zdCBidXR0b25JZCA9IHRoaXMuZ2VuZXJhdGVCdXR0b25JZChidXR0b25OYW1lKTtcclxuICAgIGNvbnN0IHBsYWNlaG9sZGVyVGV4dCA9IGBbQk9Uw4NPOiAke2J1dHRvbk5hbWV9XWA7XHJcbiAgICBcclxuICAgIGNvbnN0IHN0eWxlcyA9IGNvbG9yID09PSAnYmx1ZScgXHJcbiAgICAgID8geyAnY29sb3InOiAnIzFlM2E4YScsICdib2xkJzogdHJ1ZSwgJ2JhY2tncm91bmQnOiAnI2RiZWFmZScgfVxyXG4gICAgICA6IHsgJ2NvbG9yJzogJyM0NDQ0NDQnLCAnYm9sZCc6IHRydWUsICdiYWNrZ3JvdW5kJzogJyNlMGUwZTAnIH07XHJcblxyXG4gICAgdGhpcy5xdWlsbC5pbnNlcnRUZXh0KHJhbmdlLmluZGV4LCBwbGFjZWhvbGRlclRleHQsIHN0eWxlcywgJ3VzZXInKTtcclxuXHJcbiAgICBjb25zdCBkZWx0YSA9IG5ldyB0aGlzLnF1aWxsRGVsdGEoKVxyXG4gICAgICAucmV0YWluKHJhbmdlLmluZGV4KVxyXG4gICAgICAucmV0YWluKHBsYWNlaG9sZGVyVGV4dC5sZW5ndGgsIHsgXHJcbiAgICAgICAgJ2J1dHRvbi1pZCc6IGJ1dHRvbklkLFxyXG4gICAgICAgICdidXR0b24tb25jbGljayc6IGZ1bmN0aW9uTmFtZSxcclxuICAgICAgICAnYnV0dG9uLXRleHQnOiBidXR0b25OYW1lXHJcbiAgICAgIH0pO1xyXG4gICAgXHJcbiAgICB0aGlzLnF1aWxsLnVwZGF0ZUNvbnRlbnRzKGRlbHRhLCAnc2lsZW50Jyk7XHJcbiAgICB0aGlzLnF1aWxsLnNldFNlbGVjdGlvbihyYW5nZS5pbmRleCArIHBsYWNlaG9sZGVyVGV4dC5sZW5ndGgsIDApO1xyXG4gICAgXHJcbiAgICB0aGlzLnJlZ2lzdGVyQnV0dG9uQ2FsbGJhY2soZnVuY3Rpb25OYW1lLCBidXR0b25OYW1lLCBidXR0b25JZCk7XHJcbiAgfVxyXG5cclxuICBjb25maXJtQnV0dG9uTmFtZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGJ1dHRvbk5hbWUgPSB0aGlzLmJ1dHRvbk5hbWVWYWx1ZS50cmltKCk7XHJcbiAgICBcclxuICAgIGlmICghYnV0dG9uTmFtZSkge1xyXG4gICAgICB0aGlzLmNhbmNlbEJ1dHRvbk5hbWUoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAodGhpcy5wZW5kaW5nQnV0dG9uUmFuZ2UpIHtcclxuICAgICAgdGhpcy5xdWlsbC5mb2N1cygpO1xyXG4gICAgICBcclxuICAgICAgY29uc3QgYnV0dG9uSWQgPSB0aGlzLmdlbmVyYXRlQnV0dG9uSWQoYnV0dG9uTmFtZSk7XHJcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2VuZXJhdGVCdXR0b25GdW5jdGlvbk5hbWUoYnV0dG9uTmFtZSk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBwbGFjZWhvbGRlclRleHQgPSBgW0JPVMODTzogJHtidXR0b25OYW1lfV1gO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5xdWlsbC5pbnNlcnRUZXh0KHRoaXMucGVuZGluZ0J1dHRvblJhbmdlLmluZGV4LCBwbGFjZWhvbGRlclRleHQsIHtcclxuICAgICAgICAnY29sb3InOiAnIzFlM2E4YScsXHJcbiAgICAgICAgJ2JvbGQnOiB0cnVlLFxyXG4gICAgICAgICdiYWNrZ3JvdW5kJzogJyNkYmVhZmUnLFxyXG4gICAgICB9LCAndXNlcicpO1xyXG5cclxuICAgICAgY29uc3QgZGVsdGEgPSBuZXcgdGhpcy5xdWlsbERlbHRhKClcclxuICAgICAgICAucmV0YWluKHRoaXMucGVuZGluZ0J1dHRvblJhbmdlLmluZGV4KVxyXG4gICAgICAgIC5yZXRhaW4ocGxhY2Vob2xkZXJUZXh0Lmxlbmd0aCwgeyBcclxuICAgICAgICAgICdidXR0b24taWQnOiBidXR0b25JZCxcclxuICAgICAgICAgICdidXR0b24tb25jbGljayc6IGZ1bmN0aW9uTmFtZSxcclxuICAgICAgICAgICdidXR0b24tdGV4dCc6IGJ1dHRvbk5hbWVcclxuICAgICAgICB9KTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMucXVpbGwudXBkYXRlQ29udGVudHMoZGVsdGEsICdzaWxlbnQnKTtcclxuICAgICAgdGhpcy5xdWlsbC5zZXRTZWxlY3Rpb24odGhpcy5wZW5kaW5nQnV0dG9uUmFuZ2UuaW5kZXggKyBwbGFjZWhvbGRlclRleHQubGVuZ3RoLCAwKTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMucmVnaXN0ZXJCdXR0b25DYWxsYmFjayhmdW5jdGlvbk5hbWUsIGJ1dHRvbk5hbWUsIGJ1dHRvbklkKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5jYW5jZWxCdXR0b25OYW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZ2lzdGVyQnV0dG9uQ2FsbGJhY2soZnVuY3Rpb25OYW1lOiBzdHJpbmcsIGJ1dHRvbk5hbWU6IHN0cmluZywgYnV0dG9uSWQ/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNsZWFuRnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lLnJlcGxhY2UoJygpJywgJycpO1xyXG4gICAgY29uc3QgaWQgPSBidXR0b25JZCB8fCB0aGlzLmdlbmVyYXRlQnV0dG9uSWQoYnV0dG9uTmFtZSk7XHJcbiAgICBcclxuICAgICh3aW5kb3cgYXMgYW55KVtjbGVhbkZ1bmN0aW9uTmFtZV0gPSAoKSA9PiB7ICAgICAgXHJcbiAgICAgIHRoaXMub25DdXN0b21CdXR0b25DbGljay5lbWl0KHtcclxuICAgICAgICBidXR0b25OYW1lOiBidXR0b25OYW1lLFxyXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogY2xlYW5GdW5jdGlvbk5hbWUsXHJcbiAgICAgICAgYnV0dG9uSWQ6IGlkXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICB9XHJcbiBcclxuICBjYW5jZWxCdXR0b25OYW1lKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93QnV0dG9uVG9vbHRpcC5zZXQoZmFsc2UpO1xyXG4gICAgdGhpcy5idXR0b25OYW1lVmFsdWUgPSAnJztcclxuICAgIHRoaXMucGVuZGluZ0J1dHRvblJhbmdlID0gbnVsbDtcclxuICAgIHRoaXMucXVpbGwuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVCdXR0b25JZChidXR0b25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2FuaXRpemVkID0gYnV0dG9uTmFtZVxyXG4gICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXHJcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOVxcc10vZywgJycpXHJcbiAgICAgIC50cmltKClcclxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJ18nKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIGBib3Rhb18ke3Nhbml0aXplZH1fJHtEYXRlLm5vdygpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlQnV0dG9uRnVuY3Rpb25OYW1lKGJ1dHRvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB3b3JkcyA9IGJ1dHRvbk5hbWVcclxuICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxyXG4gICAgICAucmVwbGFjZSgvW15hLXpBLVowLTlcXHNdL2csICcnKVxyXG4gICAgICAudHJpbSgpXHJcbiAgICAgIC5zcGxpdCgvXFxzKy8pO1xyXG4gICAgXHJcbiAgICBpZiAod29yZHMubGVuZ3RoID09PSAwKSByZXR1cm4gJ2J1dHRvbkFjdGlvbigpJztcclxuICAgIFxyXG4gICAgY29uc3QgY2FtZWxDYXNlID0gd29yZHNcclxuICAgICAgLm1hcCgod29yZCwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBsb3dlcldvcmQgPSB3b3JkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID09PSAwIFxyXG4gICAgICAgICAgPyBsb3dlcldvcmQgXHJcbiAgICAgICAgICA6IGxvd2VyV29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGxvd2VyV29yZC5zbGljZSgxKTtcclxuICAgICAgfSlcclxuICAgICAgLmpvaW4oJycpO1xyXG4gICAgXHJcbiAgICByZXR1cm4gYCR7Y2FtZWxDYXNlfUJ1dHRvbkFjdGlvbigpYDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBRdWlsbEV2ZW50cygpOiB2b2lkIHtcclxuICAgIHRoaXMucXVpbGwub24oJ3NlbGVjdGlvbi1jaGFuZ2UnLCAocmFuZ2U6IGFueSwgb2xkUmFuZ2U6IGFueSwgc291cmNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJhbmdlKSB7XHJcbiAgICAgICAgdGhpcy5sYXN0U2VsZWN0aW9uUmFuZ2UgPSByYW5nZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xyXG4gICAgICAgIHJhbmdlOiByYW5nZSxcclxuICAgICAgICBvbGRSYW5nZTogb2xkUmFuZ2UsXHJcbiAgICAgICAgc291cmNlOiBzb3VyY2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5xdWlsbC5vbigndGV4dC1jaGFuZ2UnLCAoZGVsdGE6IGFueSwgb2xkQ29udGVudHM6IGFueSwgc291cmNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHNvdXJjZSA9PT0gJ3VzZXInICYmIGRlbHRhLm9wcykge1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJhckh0bWxBdXRvQ29tcGxldGVUYWcoZGVsdGEpO1xyXG5cclxuICAgICAgICBjb25zdCBkaWdpdG91SGFzaCA9IGRlbHRhLm9wcy5zb21lKChvcDogYW55KSA9PiBvcC5pbnNlcnQgPT09ICcjJyk7XHJcbiAgICAgICAgaWYgKGRpZ2l0b3VIYXNoKSB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUhhc2hJbnNlcnRpb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnJlbGF0b3Jpb3MoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVNZW50aW9uKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGhpcy51cGRhdGluZ0VkaXRvcikge1xyXG4gICAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVzY3JldmFWYWxvcih0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTCgpLCB0aGlzLnF1aWxsLmdldFRleHQoKSk7XHJcblxyXG4gICAgICAgIHRoaXMub25UZXh0Q2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgZGVsdGE6IGRlbHRhLFxyXG4gICAgICAgICAgb2xkQ29udGVudHM6IG9sZENvbnRlbnRzLFxyXG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMub3V0cHV0UmF3LmVtaXQodGhpcy5xdWlsbC5nZXRUZXh0KCkpO1xyXG4gICAgICAgIHRoaXMub3V0cHV0SHRtbC5lbWl0KHRoaXMucXVpbGwuZ2V0U2VtYW50aWNIVE1MKCkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5lbmFibGVQcmV2aWV3TW9kZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmF0dWFsaXphclByZXZpZXcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gdHJ1ZTtcclxuICAgIHRoaXMuZXNjcmV2YVZhbG9yKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGVzY3JldmFWYWxvcihodG1sdmFsdWU6IGFueSwgcmF3dmFsdWU/OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5pbml0TG9hZENvbXBsZXRlKCkpIHtcclxuICAgICAgYXdhaXQgdGhpcy5lZGl0b3JSZWFkeVByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucXVpbGwpIHtcclxuICAgICAgaWYgKHRoaXMudXBkYXRpbmdFZGl0b3IpIHtcclxuICAgICAgICB0aGlzLnF1aWxsLmNsaXBib2FyZC5kYW5nZXJvdXNseVBhc3RlSFRNTChodG1sdmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy52YWx1ZSA9IGh0bWx2YWx1ZTtcclxuXHJcbiAgICAgIGlmIChyYXd2YWx1ZSA9PSBcIlxcblwiIHx8IHRoaXMudmFsdWUgPT0gXCJcXG5cIikge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZW5hYmxlUHJldmlld01vZGUoKSkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdHVhbGl6YXJQcmV2aWV3KCksIDEwMCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm91dHB1dEh0bWwuZW1pdCh0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTCgpKTtcclxuICB9XHJcblxyXG4gIGdldEVkaXRvclNpemUoKTogdm9pZCB7XHJcbiAgICBsZXQgZWRpdG9yRmllbGRIZWlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna3YtZWRpdG9yLXRvb2xiYXInKT8ub2Zmc2V0SGVpZ2h0O1xyXG4gICAgaWYgKGVkaXRvckZpZWxkSGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yVG9vbGJhckhlaWdodC5zZXQoYCR7ZWRpdG9yRmllbGRIZWlnaHR9cHhgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9wZW5SZWxhdG9yaW8oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdQZGYoKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGh0bWxDb250ZW50ID0gdGhpcy5xdWlsbC5nZXRTZW1hbnRpY0hUTUwoKTtcclxuICAgIGNvbnN0IHJlbGF0b3JpbyA9IHRoaXMucmVsYXRvcmlvKCk7XHJcbiAgICAvLyBjb25zdCB0aXBvVmlzdWFsaXphY2FvID0gdGhpcy50aXBvVmlzdWFsaXphY2FvKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5wZGZTZXJ2aWNlLm9wZW5SZWxhdG9yaW8oaHRtbENvbnRlbnQsIHJlbGF0b3JpbywgJ3ZhbG9yJyk7XHJcbiAgfVxyXG5cclxuICAvLyBNw6l0b2RvcyBwYXJhIHNpc3RlbWEgZGUgbWVuw6fDtWVzXHJcbiAgaGFuZGxlTWVudGlvbigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5yZWxhdG9yaW8oKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWVudGlvblNlcnZpY2UuaGFuZGxlTWVudGlvbih0aGlzLnF1aWxsLCB0aGlzLnJlbGF0b3JpbygpIS52YXJpYXZlaXMpO1xyXG4gICAgdGhpcy5maWx0ZXJlZFZhcmlhYmxlcy5zZXQocmVzdWx0LmZpbHRlcmVkVmFyaWFibGVzKTtcclxuXHJcbiAgICBpZiAocmVzdWx0LnNob3VsZFNob3dQYW5lbCAmJiByZXN1bHQubWVudGlvbkJvdW5kcykge1xyXG4gICAgICB0aGlzLnNob3dWYXJpYWJsZXNQYW5lbChyZXN1bHQubWVudGlvbkJvdW5kcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsb3NlVmFyaWFibGVzUGFuZWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2hvd1ZhcmlhYmxlc1BhbmVsKGJvdW5kczogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0pOiB2b2lkIHtcclxuICAgIGNvbnN0IGFuY2hvckVsID0gdGhpcy5tZW50aW9uQW5jaG9yLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBhbmNob3JFbC5zdHlsZS50b3AgPSBgJHtib3VuZHMudG9wfXB4YDtcclxuICAgIGFuY2hvckVsLnN0eWxlLmxlZnQgPSBgJHtib3VuZHMubGVmdH1weGA7XHJcbiAgICB0aGlzLm9wVmFyaWFibGVzLnNob3cobnVsbCwgYW5jaG9yRWwpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0VmFyaWFibGVGcm9tUGFuZWwodmFyaWFibGU6IEt2RWRpdG9yVmFyaWF2ZWwpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudGlvblNlcnZpY2UuaW5zZXJ0VmFyaWFibGUodGhpcy5xdWlsbCwgdmFyaWFibGUpO1xyXG4gICAgdGhpcy5jbG9zZVZhcmlhYmxlc1BhbmVsKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVZhcmlhYmxlc1BhbmVsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub3BWYXJpYWJsZXMpIHtcclxuICAgICAgdGhpcy5vcFZhcmlhYmxlcy5oaWRlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1lbnRpb25TZXJ2aWNlLmNsb3NlTWVudGlvbigpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0luc3RydWNvZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihLdkluc3RydWNvZXNSZXBvcnRDb21wb25lbnQsIHtcclxuICAgICAgaGVhZGVyOiAnSW5zdHJ1w6fDtWVzJyxcclxuICAgICAgd2lkdGg6ICc0MCUnLFxyXG4gICAgICBoZWlnaHQ6ICczMCUnLFxyXG4gICAgICBtb2RhbDogdHJ1ZSxcclxuICAgICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0ZW1wbGF0ZTogdGhpcy5pbnN0cnVjb2VzVGVtcGxhdGUoKVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyVGVtcGxhdGUoKSB7XHJcbiAgICAvLyBMaW1wYSBvIHRlbXBsYXRlIGRvIGVkaXRvclxyXG4gICAgdGhpcy5jbGVhcmVkVGVtcGxhdGUuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5zZXRSZWxhdG9yaW9Qb3JJZCgwKTtcclxuICAgIHRoaXMud3JpdGVWYWx1ZSgnJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyYXJIdG1sQ2xpcGJvYXJkKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5xdWlsbC5yb290O1xyXG4gICAgXHJcbiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCAoZTogQ2xpcGJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgaWYgKGUuY2xpcGJvYXJkRGF0YSkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9odG1sJyk7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChodG1sICYmIGh0bWwudHJpbSgpKSB7XHJcbiAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gc2VsZWN0aW9uLmluZGV4O1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvL2EgcGFydGlyIGRhcXVpIMOpIHBhcmEgZXZpdGFyIHF1ZSBvIGNvcGlhciBzZWphIGR1cGxpY2Fkb1xyXG4gICAgICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IHRydWU7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHRoaXMucXVpbGwuY2xpcGJvYXJkLmRhbmdlcm91c2x5UGFzdGVIVE1MKHN0YXJ0SW5kZXgsIGh0bWwpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgbmV3TGVuZ3RoID0gdGhpcy5xdWlsbC5nZXRMZW5ndGgoKTtcclxuICAgICAgICAgICAgdGhpcy5xdWlsbC5zZXRTZWxlY3Rpb24obmV3TGVuZ3RoLCAwKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVByZXZpZXdNb2RlKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmF0dWFsaXphclByZXZpZXcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgMTApO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgZWxzZSBpZiAodGV4dCAmJiB0ZXh0LnRyaW0oKSkge1xyXG4gICAgICAgICAgdGhpcy5xdWlsbC5pbnNlcnRUZXh0KHNlbGVjdGlvbi5pbmRleCwgdGV4dCwgJ3VzZXInKTtcclxuICAgICAgICAgIHRoaXMucXVpbGwuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbi5pbmRleCArIHRleHQubGVuZ3RoLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIE3DqXRvZG9zIG1vZG8gcHJldmlld1xyXG5cclxuICBwcml2YXRlIGF0dWFsaXphclByZXZpZXcoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMucXVpbGwpIHJldHVybjtcclxuXHJcbiAgICBsZXQgY29udGV1ZG9IdG1sID0gdGhpcy5xdWlsbC5yb290LmlubmVySFRNTDtcclxuXHJcbiAgICBjb250ZXVkb0h0bWwgPSB0aGlzLmRlY29kaWZpY2FyRW50aWRhZGVzSHRtbChjb250ZXVkb0h0bWwpO1xyXG4gICAgXHJcbiAgICB0aGlzLmh0bWxFc3BlbGhvLnNldChjb250ZXVkb0h0bWwpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRldWRvUHJvY2Vzc2FkbyA9IHRoaXMucHJvY2Vzc2FyQ29udGV1ZG9QcmV2aWV3KGNvbnRldWRvSHRtbCk7XHJcbiAgICB0aGlzLnByZXZpZXdDb250ZW50LnNldChjb250ZXVkb1Byb2Nlc3NhZG8pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZWNvZGlmaWNhckVudGlkYWRlc0h0bWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgIHRleHRhcmVhLmlubmVySFRNTCA9IHRleHQ7XHJcbiAgICByZXR1cm4gdGV4dGFyZWEudmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyYXJIdG1sQXV0b0NvbXBsZXRlVGFnKGRlbHRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghZGVsdGEub3BzIHx8IGRlbHRhLm9wcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB1bHRpbW9PcCA9IGRlbHRhLm9wc1tkZWx0YS5vcHMubGVuZ3RoIC0gMV07XHJcbiAgICBpZiAodWx0aW1vT3AuaW5zZXJ0ICYmIHR5cGVvZiB1bHRpbW9PcC5pbnNlcnQgPT09ICdzdHJpbmcnICYmIHVsdGltb09wLmluc2VydCA9PT0gJz4nKSB7XHJcbiAgICAgIGNvbnN0IHRleHRvQXR1YWwgPSB0aGlzLnF1aWxsLmdldFRleHQoKTtcclxuICAgICAgY29uc3QgcG9zaWNhb0N1cnNvciA9IHRoaXMucXVpbGwuZ2V0U2VsZWN0aW9uKCk/LmluZGV4IHx8IDA7XHJcblxyXG4gICAgICBjb25zdCB0ZXh0b0FudGVzQ3Vyc29yID0gdGV4dG9BdHVhbC5zdWJzdHJpbmcoMCwgcG9zaWNhb0N1cnNvcik7XHJcblxyXG4gICAgICBjb25zdCByZWdleFRhZ0FiZXJ0YSA9IC88KFxcdyspKD86XFxzK1tePl0qKT8oPzwhXFwvKVxcPiQvO1xyXG4gICAgICBjb25zdCB2ZXJpZmljYXJUYWcgPSB0ZXh0b0FudGVzQ3Vyc29yLm1hdGNoKHJlZ2V4VGFnQWJlcnRhKTtcclxuXHJcbiAgICAgIGlmICh2ZXJpZmljYXJUYWcpIHtcclxuICAgICAgICBjb25zdCB0YWdOYW1lID0gdmVyaWZpY2FyVGFnWzFdO1xyXG5cclxuICAgICAgICBjb25zdCB0YWdzSW5saW5lID0gWydpbWcnLCAnYnInLCAnaHInLCAnaW5wdXQnLCAnbWV0YScsICdsaW5rJywgJ2FyZWEnLCAnYmFzZScsICdjb2wnLCAnZW1iZWQnLCAnc291cmNlJywgJ3RyYWNrJywgJ3diciddO1xyXG5cclxuICAgICAgICBpZiAoIXRhZ3NJbmxpbmUuaW5jbHVkZXModGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgY29uc3QgdGV4dG9EZXBvaXNDdXJzb3IgPSB0ZXh0b0F0dWFsLnN1YnN0cmluZyhwb3NpY2FvQ3Vyc29yKTtcclxuICAgICAgICAgIGNvbnN0IGZlY2hhclRhZ1JlZ2V4ID0gbmV3IFJlZ0V4cChgXjxcXC8ke3RhZ05hbWV9PmAsICdpJyk7XHJcblxyXG4gICAgICAgICAgaWYgKCFmZWNoYXJUYWdSZWdleC50ZXN0KHRleHRvRGVwb2lzQ3Vyc29yKSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5xdWlsbC5pbnNlcnRUZXh0KHBvc2ljYW9DdXJzb3IsIGA8LyR7dGFnTmFtZX0+YCwgJ3VzZXInKTtcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucXVpbGwuc2V0U2VsZWN0aW9uKHBvc2ljYW9DdXJzb3IsIDApO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2Nlc3NhckNvbnRldWRvUHJldmlldyhjb250ZW50OiBzdHJpbmcpOiBTYWZlSHRtbCB7XHJcbiAgICBpZiAoIWNvbnRlbnQgfHwgY29udGVudCA9PT0gJ1xcbicpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKCc8cCBjbGFzcz1cInRleHQtZ3JheS00MDAgdGV4dC1zbVwiPk8gY29udGXDumRvIGFwYXJlY2Vyw6EgYXF1aS4uLjwvcD4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdHlsZVJlZ2V4ID0gLzxzdHlsZVtePl0qPihbXFxzXFxTXSo/KTxcXC9zdHlsZT4vZ2k7XHJcbiAgICBjb25zdCBzdHlsZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBsZXQgY29udGV1ZG9Qcm9jZXNzYWRvID0gY29udGVudDtcclxuXHJcbiAgICBsZXQgbWF0Y2g7XHJcbiAgICB3aGlsZSAoKG1hdGNoID0gc3R5bGVSZWdleC5leGVjKGNvbnRlbnQpKSAhPT0gbnVsbCkge1xyXG4gICAgICBzdHlsZXMucHVzaChtYXRjaFsxXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29udGV1ZG9Qcm9jZXNzYWRvID0gdGhpcy5yZW1vdmVySW5kZW50YWNhb0h0bWwoY29udGV1ZG9Qcm9jZXNzYWRvKTtcclxuICAgIFxyXG4gICAgY29udGV1ZG9Qcm9jZXNzYWRvID0gdGhpcy5wcm9jZXNzYXJWYXJpYXZlaXNDb21IdG1sKGNvbnRldWRvUHJvY2Vzc2Fkbyk7XHJcblxyXG4gICAgbGV0IGNvbnRldWRvRmluYWwgPSAnPGRpdiBjbGFzcz1cImt2LWVkaXRvci1wcmV2aWV3LXdyYXBwZXJcIj4nO1xyXG5cclxuICAgIGlmIChzdHlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb250ZXVkb0ZpbmFsICs9ICc8c3R5bGU+JyArIHN0eWxlcy5qb2luKCdcXG4nKSArICc8L3N0eWxlPic7XHJcbiAgICB9XHJcblxyXG4gICAgY29udGV1ZG9GaW5hbCArPSBjb250ZXVkb1Byb2Nlc3NhZG87XHJcbiAgICBjb250ZXVkb0ZpbmFsICs9ICc8L2Rpdj4nO1xyXG5cclxuICAgIHRoaXMucHJldmlld0h0bWxPdXRwdXQuZW1pdChjb250ZXVkb0ZpbmFsKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoY29udGV1ZG9GaW5hbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZXJJbmRlbnRhY2FvSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdGFnc1BlcnNvbmFsaXphZGFzID0gWydkaXYnLCAnc2VjdGlvbicsICdhcnRpY2xlJywgJ2hlYWRlcicsICdmb290ZXInLCAnbmF2JywgJ2FzaWRlJywgJ21haW4nLCAnZm9ybScsICd0YWJsZScsICd1bCcsICdvbCcsICdib2R5JywgJ29wdGlvbicsICdzZWxlY3QnLCAnYmxvY2txdW90ZSddO1xyXG4gICAgXHJcbiAgICBsZXQgcmVzdWx0YWRvID0gaHRtbDtcclxuICAgIFxyXG4gICAgdGFnc1BlcnNvbmFsaXphZGFzLmZvckVhY2godGFnID0+IHtcclxuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAoPCR7dGFnfVtePl0qPikoW1xcXFxzXFxcXFNdKj8pKDxcXFxcLyR7dGFnfT4pYCwgJ2dpJyk7XHJcbiAgICAgIFxyXG4gICAgICByZXN1bHRhZG8gPSByZXN1bHRhZG8ucmVwbGFjZShyZWdleCwgKG1hdGNoLCBhYmVydHVyYSwgY29udGV1ZG8sIGZlY2hhbWVudG8pID0+IHtcclxuICAgICAgICBjb25zdCBjb250ZXVkb0xpbXBvID0gY29udGV1ZG8ucmVwbGFjZSgvPlxccys8L2csICc+PCcpO1xyXG4gICAgICAgIHJldHVybiBhYmVydHVyYSArIGNvbnRldWRvTGltcG8gKyBmZWNoYW1lbnRvO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICByZXR1cm4gcmVzdWx0YWRvO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0h0bWxTdHJpbmcoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghc3RyIHx8IHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XHJcbiAgICBcclxuICAgIGNvbnN0IHRyaW1tZWQgPSBzdHIudHJpbSgpO1xyXG4gICAgXHJcbiAgICBpZiAoIXRyaW1tZWQuc3RhcnRzV2l0aCgnPCcpIHx8ICF0cmltbWVkLmVuZHNXaXRoKCc+JykpIHJldHVybiBmYWxzZTtcclxuICAgIFxyXG4gICAgY29uc3QgaHRtbFRhZ1JlZ2V4ID0gLzxcXC8/W2Etel1bXFxzXFxTXSo/Pi9pO1xyXG4gICAgY29uc3QgaGFzT3BlbmluZ1RhZyA9IC88W2Etel1bXFxzXFxTXSo/Pi9pLnRlc3QodHJpbW1lZCk7XHJcbiAgICBjb25zdCBoYXNDbG9zaW5nVGFnID0gLzxcXC9bYS16XVtcXHNcXFNdKj8+L2kudGVzdCh0cmltbWVkKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIGh0bWxUYWdSZWdleC50ZXN0KHRyaW1tZWQpICYmIChoYXNPcGVuaW5nVGFnIHx8IGhhc0Nsb3NpbmdUYWcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcm9jZXNzYXJWYXJpYXZlaXNDb21IdG1sKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY29udGV1ZG9Qcm9jZXNzYWRvID0gY29udGVudDtcclxuICAgIFxyXG4gICAgY29udGV1ZG9Qcm9jZXNzYWRvID0gdGhpcy5wcm9jZXNzYXJCb3RvZXNDdXN0b21pemFkb3MoY29udGV1ZG9Qcm9jZXNzYWRvKTtcclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLnJlbGF0b3JpbygpIHx8ICF0aGlzLnJlbGF0b3JpbygpIS52YXJpYXZlaXMpIHtcclxuICAgICAgcmV0dXJuIGNvbnRldWRvUHJvY2Vzc2FkbztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2YXJpYXZlaXMgPSB0aGlzLnJlbGF0b3JpbygpIS52YXJpYXZlaXM7XHJcbiAgICBjb25zdCBtb3N0cmFyVmFsb3JlcyA9IHRoaXMuc2hvd1ZhcmlhYmxlVmFsdWVzSW5QcmV2aWV3KCk7XHJcblxyXG4gICAgdmFyaWF2ZWlzLmZvckVhY2godmFyaWF2ZWwgPT4ge1xyXG4gICAgICBpZiAoIW1vc3RyYXJWYWxvcmVzICYmICF0aGlzLmlzSHRtbFN0cmluZyh2YXJpYXZlbC52YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVySWQgPSBgeyR7dmFyaWF2ZWwuaWR9fWA7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoY29udGV1ZG9Qcm9jZXNzYWRvLmluY2x1ZGVzKHBsYWNlaG9sZGVySWQpKSB7XHJcbiAgICAgICAgY29udGV1ZG9Qcm9jZXNzYWRvID0gY29udGV1ZG9Qcm9jZXNzYWRvLnNwbGl0KHBsYWNlaG9sZGVySWQpLmpvaW4odmFyaWF2ZWwudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG5cclxuICAgICAgY29uc3QgcGF0dGVybnMgPSBbXHJcbiAgICAgICAgYDxzcGFuW14+XSpjbGFzcz1cIlteXCJdKm1lbnRpb25bXlwiXSpcIltePl0qPlxcXFxzKiR7dGhpcy5lc2NhcGVSZWdleCh2YXJpYXZlbC5kZXNjcmljYW8pfVxcXFxzKjwvc3Bhbj5gLFxyXG4gICAgICAgIGA8c3BhbltePl0qZGF0YS1tZW50aW9uW14+XSo+XFxcXHMqJHt0aGlzLmVzY2FwZVJlZ2V4KHZhcmlhdmVsLmRlc2NyaWNhbyl9XFxcXHMqPC9zcGFuPmAsXHJcbiAgICAgICAgYD5cXFxccyoke3RoaXMuZXNjYXBlUmVnZXgodmFyaWF2ZWwuZGVzY3JpY2FvKX1cXFxccyo8YCxcclxuICAgICAgICBgPFtePl0rPlxcXFxzKiR7dGhpcy5lc2NhcGVSZWdleCh2YXJpYXZlbC5kZXNjcmljYW8pfVxcXFxzKjwvW14+XSs+YFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgbGV0IHN1YnN0aXR1aWRvID0gZmFsc2U7XHJcbiAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xyXG4gICAgICAgIGNvbnN0IHJlZ2V4TWVudGlvbiA9IG5ldyBSZWdFeHAocGF0dGVybiwgJ2dpJyk7XHJcbiAgICAgICAgaWYgKHJlZ2V4TWVudGlvbi50ZXN0KGNvbnRldWRvUHJvY2Vzc2FkbykpIHtcclxuICAgICAgICAgIGNvbnRldWRvUHJvY2Vzc2FkbyA9IGNvbnRldWRvUHJvY2Vzc2Fkby5yZXBsYWNlKHJlZ2V4TWVudGlvbiwgXHJcbiAgICAgICAgICAgIHBhdHRlcm4uc3RhcnRzV2l0aCgnPicpID8gYD4ke3ZhcmlhdmVsLnZhbHVlfTxgIDogdmFyaWF2ZWwudmFsdWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBzdWJzdGl0dWlkbyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmICghc3Vic3RpdHVpZG8gJiYgY29udGV1ZG9Qcm9jZXNzYWRvLmluY2x1ZGVzKHZhcmlhdmVsLmRlc2NyaWNhbykpIHtcclxuICAgICAgICBjb250ZXVkb1Byb2Nlc3NhZG8gPSBjb250ZXVkb1Byb2Nlc3NhZG8uc3BsaXQodmFyaWF2ZWwuZGVzY3JpY2FvKS5qb2luKHZhcmlhdmVsLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbnRldWRvUHJvY2Vzc2FkbztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvY2Vzc2FyQm90b2VzQ3VzdG9taXphZG9zKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZWdleEJvdGFvID0gL1xcW0JPVMODTzpcXHMqKFteXFxdXSspXFxdL2c7XHJcbiAgICBcclxuICAgIHJldHVybiBjb250ZW50LnJlcGxhY2UocmVnZXhCb3RhbywgKG1hdGNoLCB0ZXh0b0JvdGFvKSA9PiB7XHJcbiAgICAgIGNvbnN0IGJ1dHRvbklkID0gdGhpcy5nZW5lcmF0ZUJ1dHRvbklkKHRleHRvQm90YW8pO1xyXG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSB0aGlzLmdlbmVyYXRlQnV0dG9uRnVuY3Rpb25OYW1lKHRleHRvQm90YW8pO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5yZWdpc3RlckJ1dHRvbkNhbGxiYWNrKGZ1bmN0aW9uTmFtZSwgdGV4dG9Cb3RhbywgYnV0dG9uSWQpO1xyXG4gICAgICBcclxuICAgICAgY29uc3QgYnV0dG9uSHRtbCA9IGA8YnV0dG9uIGNsYXNzPVwiYmctYmx1ZS04MDAgYm9yZGVyLW5vbmUgYm9yZGVyLXJvdW5kIGN1cnNvci1wb2ludGVyIGZvbnQtc2VtaWJvbGQgcC0yIHNoYWRvdy0zIHRleHQtd2hpdGUtYWxwaGEtOTAgYWN0aXZlOmJnLWJsdWUtOTAwXCIgaWQ9XCIke2J1dHRvbklkfVwiIG9uY2xpY2s9XCIke2Z1bmN0aW9uTmFtZX1cIiBzdHlsZT1cImZvbnQtZmFtaWx5OkludGVyLEludGVyIHZhcixzYW5zLXNlcmlmIWltcG9ydGFudDtkaXNwbGF5OmlubGluZS1ibG9jaztcIj4ke3RleHRvQm90YW99PC9idXR0b24+YDtcclxuICAgICAgcmV0dXJuIGJ1dHRvbkh0bWw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXNjYXBlUmVnZXgoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldFByZXZpZXdDb250ZW50KCk6IFNhZmVIdG1sIHtcclxuICAgIHJldHVybiB0aGlzLnByZXZpZXdDb250ZW50KCk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBwYXJhIGxpZGFyIGNvbSBpbnNlcsOnw6NvIGRlICcjJyBlbSBsaW5oYSB2YXppYVxyXG4gICAqIEluc2VyZSB0ZW1wb3JhcmlhbWVudGUgdW0gY2FyYWN0ZXJlIGludmlzw612ZWwgcGFyYSBmb3LDp2FyIG8gb3ZlcmxheSBhcGFyZWNlclxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlSGFzaEluc2VydGlvbigpOiB2b2lkIHtcclxuICAgIC8vIEFkaWEgYSBleGVjdcOnw6NvIHBhcmEgZ2FyYW50aXIgcXVlIG8gUXVpbGwgcHJvY2Vzc291IGEgaW5zZXLDp8OjbyBkbyAnIydcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucXVpbGwuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgIGlmICghcmFuZ2UpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnF1aWxsLmdldFRleHQoMCwgcmFuZ2UuaW5kZXgpO1xyXG4gICAgICBjb25zdCBsYXN0SGFzaEluZGV4ID0gdGV4dC5sYXN0SW5kZXhPZignIycpO1xyXG4gICAgICBcclxuICAgICAgLy8gVmVyaWZpY2Egc2UgbyAnIycgZXN0w6Egbm8gaW7DrWNpbyBkZSB1bWEgbGluaGFcclxuICAgICAgaWYgKGxhc3RIYXNoSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgY29uc3QgY2hhckJlZm9yZSA9IGxhc3RIYXNoSW5kZXggPiAwID8gdGV4dFtsYXN0SGFzaEluZGV4IC0gMV0gOiBudWxsO1xyXG4gICAgICAgIC8vIFBlZ2EgbyBjYXJhY3RlcmUgbG9nbyBhcMOzcyBvIGN1cnNvciBwYXJhIHZlcmlmaWNhciBzZSBlc3TDoSB2YXppb1xyXG4gICAgICAgIGNvbnN0IGNoYXJBZnRlciA9IHRoaXMucXVpbGwuZ2V0VGV4dChyYW5nZS5pbmRleCwgMSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgaXNBdFN0YXJ0T2ZMaW5lID0gKGxhc3RIYXNoSW5kZXggPT09IDAgfHwgY2hhckJlZm9yZSA9PT0gJ1xcbicpO1xyXG4gICAgICAgIGNvbnN0IGlzRW1wdHlBZnRlciA9ICghY2hhckFmdGVyIHx8IGNoYXJBZnRlciA9PT0gJ1xcbicgfHwgY2hhckFmdGVyID09PSAnJyB8fCBjaGFyQWZ0ZXIudHJpbSgpID09PSAnJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gU2UgZXN0aXZlciBubyBpbsOtY2lvIGRlIGxpbmhhIHZhemlhLCBmYXogbyBcInRydXF1ZVwiIGRlIGluc2VyaXIgZSBhcGFnYXJcclxuICAgICAgICBpZiAoaXNBdFN0YXJ0T2ZMaW5lICYmIGlzRW1wdHlBZnRlcikge1xyXG4gICAgICAgICAgLy8gSW5zZXJlIHVtIHBvbnRvIHRlbXBvcmFyaWFtZW50ZSAobW9kbyBzaWxlbmNpb3NvIHBhcmEgbsOjbyBkaXNwYXJhciBldmVudG9zIHJlY3Vyc2l2b3MsIHNlIG7Do28gZm9zc2UgY29udHJvbGFkbylcclxuICAgICAgICAgIC8vIE1hcyBhcXVpIHVzYW1vcyBzaWxlbnQgZSBjaGFtYW1vcyBoYW5kbGVNZW50aW9uIG1hbnVhbG1lbnRlXHJcbiAgICAgICAgICB0aGlzLnF1aWxsLmluc2VydFRleHQocmFuZ2UuaW5kZXgsICcuJywgJ3NpbGVudCcpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBSZW1vdmUgaW1lZGlhdGFtZW50ZVxyXG4gICAgICAgICAgdGhpcy5xdWlsbC5kZWxldGVUZXh0KHJhbmdlLmluZGV4LCAxLCAnc2lsZW50Jyk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIEZvcsOnYSBhIHZlcmlmaWNhw6fDo28gZG8gbWVudGlvbiBhZ29yYSBxdWUgbyBsYXlvdXQgZm9pIFwicHJvdm9jYWRvXCJcclxuICAgICAgICAgIHRoaXMuaGFuZGxlTWVudGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgMTApO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwia3YtZWRpdG9yLWNvbnRhaW5lciBoLWZ1bGwgdy1mdWxsIG1heC1oLWZ1bGwgZmxleCBmbGV4LWNvbHVtbiBvdmVyZmxvdy1oaWRkZW5cIlxyXG4gIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImRpc2FibGVkRWRpdG9yKClcIiBbY2xhc3Mub3BhY2l0eS02MF09XCJkaXNhYmxlZEVkaXRvcigpXCJcclxuICBbY2xhc3Mua3YtZWRpdG9yLWZ1bGxzY3JlZW5dPVwiaXNGdWxsc2NyZWVuKClcIj5cclxuICA8ZGl2ICNlZGl0b3IgaWQ9XCJrdi1lZGl0b3ItdG9vbGJhclwiIFtuZ0NsYXNzXT1cInsgJ2Vycm9yLWJvcmRlci10b29sYmFyJzogaGFzQ29udHJvbEVycm9yKCkgfVwiXHJcbiAgICBjbGFzcz1cInt7IHNob3dIZWFkZXIoKSA/ICdmbGV4JyA6ICdoaWRkZW4nIH19IGZsZXgtY29sdW1uIGZsZXgtaW5pdGlhbCBxbC10b29sYmFyIHFsLXNub3dcIj5cclxuICAgIEBpZihzaG93SGVhZGVyQnV0dG9ucygpKSB7XHJcbiAgICBAaWYocmVsYXRvcmlvcygpLmxlbmd0aCA+IDApIHtcclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHt7KHJlYWRvbmx5KCkgfHwgZGlzYWJsZWRFZGl0b3IoKSkgJiYgJ3BvaW50ZXItZXZlbnRzLW5vbmUgb3BhY2l0eS05MCd9fVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMlwiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcC0yIGJvcmRlci1yb3VuZC1sZyBib3JkZXItMSBib3JkZXItZ3JheS0yMDAgaG92ZXI6c2hhZG93LTEgaG92ZXI6YmctZ3JheS0xMDAgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1hbGwgdHJhbnNpdGlvbi1kdXJhdGlvbi0zMDBcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wLnRvZ2dsZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZyB0ZXh0LWdyZWVuLTYwMCBmb250LW1lZGl1bVwiPlxyXG4gICAgICAgICAgICBjb250cmFjdFxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQteHMgdGV4dC1ncmF5LTYwMFwiPnt7XHJcbiAgICAgICAgICAgICFjbGVhcmVkVGVtcGxhdGUoKVxyXG4gICAgICAgICAgICA/IHJlbGF0b3JpbygpPy5sYWJlbCB8fCBsYWJlbEVtcHR5RHJvcGRvd24oKVxyXG4gICAgICAgICAgICA6IGxhYmVsRW1wdHlEcm9wZG93bigpXHJcbiAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtbGdcIj5cclxuICAgICAgICAgICAga2V5Ym9hcmRfYXJyb3dfZG93blxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICBAaWYoIWNsZWFyZWRUZW1wbGF0ZSgpKSB7XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgYm9yZGVyLXJvdW5kLWxnIGJvcmRlci0xIGJvcmRlci1ncmF5LTIwMCBob3ZlcjpzaGFkb3ctMSBob3ZlcjpiZy1ncmF5LTEwMCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWFsbCB0cmFuc2l0aW9uLWR1cmF0aW9uLTMwMFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJUZW1wbGF0ZSgpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZyB0ZXh0LW9yYW5nZS02MDAgZm9udC1tZWRpdW1cIiBbcFRvb2x0aXBdPVwiJ0xpbXBhciBUZW1wbGF0ZSdcIj5cclxuICAgICAgICAgICAgbGF5ZXJzX2NsZWFyXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHAtMiBib3JkZXItcm91bmQtbGcgYm9yZGVyLTEgYm9yZGVyLWdyYXktMjAwIGhvdmVyOnNoYWRvdy0xIGhvdmVyOmJnLWdyYXktMTAwIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tYWxsIHRyYW5zaXRpb24tZHVyYXRpb24tMzAwXCJcclxuICAgICAgICAgIChjbGljayk9XCJzaG93SW5zdHJ1Y29lcygpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZyB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtXCI+XHJcbiAgICAgICAgICAgIGluZm9cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj5JbnN0cnXDp8O1ZXM8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBAaWYocHJpbnRCdXR0b24oKSkge1xyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHAtMiBib3JkZXItcm91bmQtbGcgYm9yZGVyLTEgYm9yZGVyLWdyYXktMjAwIGhvdmVyOnNoYWRvdy0xIGhvdmVyOmJnLWdyYXktMTAwIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tYWxsIHRyYW5zaXRpb24tZHVyYXRpb24tMzAwXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5SZWxhdG9yaW8oKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnIGZvbnQtbWVkaXVtXCI+XHJcbiAgICAgICAgICAgICAgcHJpbnRcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC14cyB0ZXh0LWdyYXktNjAwXCI+SW1wcmltaXI8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH0gLS0+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8cC1kaXZpZGVyIGNsYXNzPVwidy1mdWxsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy1mdWxsIGZsZXgtaW5pdGlhbFwiPlxyXG4gICAgICBAaWYoaXNMb2FkaW5nKCkpIHtcclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyB3LWZ1bGxcIj5cclxuICAgICAgICA8cC1za2VsZXRvbiBzdHlsZUNsYXNzPVwidy02cmVtXCIgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgICAgPHAtc2tlbGV0b24gc3R5bGVDbGFzcz1cInctNnJlbVwiIFtzdHlsZV09XCJ7IGhlaWdodDogJzJyZW0nIH1cIj48L3Atc2tlbGV0b24+XHJcblxyXG4gICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LTZyZW1cIiBbc3R5bGVdPVwieyBoZWlnaHQ6ICcycmVtJyB9XCI+PC9wLXNrZWxldG9uPlxyXG5cclxuICAgICAgICA8cC1za2VsZXRvbiBzdHlsZUNsYXNzPVwidy02cmVtXCIgW3N0eWxlXT1cInsgaGVpZ2h0OiAnMnJlbScgfVwiPjwvcC1za2VsZXRvbj5cclxuXHJcbiAgICAgICAgPHAtc2tlbGV0b24gc3R5bGVDbGFzcz1cInctNnJlbVwiIFtzdHlsZV09XCJ7IGhlaWdodDogJzJyZW0nIH1cIj48L3Atc2tlbGV0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBnYXAtMiB7e1xyXG4gICAgICAgICAgaXNMb2FkaW5nKCkgPyAnaGlkZGVuJyA6ICdmbGV4J1xyXG4gICAgICAgIH19IHctZnVsbFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1mb250XCI+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyb2JvdG9cIj5Sb2JvdG88L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFyaWFsXCI+QXJpYWw8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInRpbWVzLW5ldy1yb21hblwiPlRpbWVzIE5ldyBSb21hbjwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibW9ub3NwYWNlXCI+TW9ub3NwYWNlPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJpbnRlclwiPkludGVyPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+U2FucyBTZXJpZjwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2VyaWZcIj5TZXJpZjwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMVwiPlRpdHVsbzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMlwiPlN1YnRpdHVsbzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkPk5vcm1hbDwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgPHNlbGVjdCB0aXRsZT1cIlNpemVcIiBjbGFzcz1cInFsLXNpemVcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTVweFwiPjE1cHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMjBweFwiPjIwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMzBweFwiPjMwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNDBweFwiPjQwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNTBweFwiPjUwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNzBweFwiPjcwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiOTBweFwiPjkwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1ib2xkXCIgcFRvb2x0aXA9XCJOZWdyaXRvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaXRhbGljXCIgcFRvb2x0aXA9XCJJdMOhbGljb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLXVuZGVybGluZVwiIHBUb29sdGlwPVwiU3VibGluaGFkb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLXN0cmlrZVwiIHBUb29sdGlwPVwiVGFjaGFkb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgPHAtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwicWwtY29sb3JcIiBwVG9vbHRpcD1cIkNvciBkYSBmb250ZVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWJhY2tncm91bmRcIiBwVG9vbHRpcD1cIkNvciBkZSBmdW5kb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvc2VsZWN0PlxyXG4gICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgQGlmKHRydWUpIHtcclxuICAgICAgICA8IS0tIDxwLWRpdmlkZXIgbGF5b3V0PVwidmVydGljYWxcIj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaGVhZGVyXCIgdmFsdWU9XCIxXCI+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWhlYWRlclwiIHZhbHVlPVwiMlwiPjwvYnV0dG9uPlxyXG4gICAgICA8L3NwYW4+IC0tPlxyXG5cclxuICAgICAgICA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1saW5rXCIgcFRvb2x0aXA9XCJJbnNlcmlyIGxpbmtcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1pbWFnZVwiIHBUb29sdGlwPVwiSW5zZXJpciBpbWFnZW1cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC12aWRlb1wiIHBUb29sdGlwPVwiSW5zZXJpciB2w61kZW9cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICBAaWYoZW5hYmxlQnV0dG9uSW5zZXJ0KCkpIHtcclxuICAgICAgICAgIDxidXR0b24gaWQ9XCJpbnNlcnQtY3VzdG9tLWJ1dHRvblwiIHBUb29sdGlwPVwiSW5zZXJpciBib3TDo29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cInRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgLTEuN3B4KTsgZm9udC1zaXplOiAyMnB4O1wiPmJ1dHRvbnNfYWx0PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgQGlmKHNob3dBbHBoYUNybUJ1dHRvbnMoKSkge1xyXG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImJ0bi1hbHBoYS1hY2VpdGFyXCIgcFRvb2x0aXA9XCJJbnNlcmlyIGJvdMOjbyBBY2VpdGFyXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIC0xLjdweCk7IGZvbnQtc2l6ZTogMjJweDtcIj52YXJpYWJsZV9hZGQ8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuLWFscGhhLWNhbmNlbGFyXCIgcFRvb2x0aXA9XCJJbnNlcmlyIGJvdMOjbyBDYW5jZWxhclwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwidHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAtMS43cHgpOyBmb250LXNpemU6IDIycHg7XCI+dmFyaWFibGVfcmVtb3ZlPC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiBpZD1cImJ0bi1hbHBoYS1hY2VpdGFyLWFzc2luYXJcIiBwVG9vbHRpcD1cIkluc2VyaXIgYm90w6NvIEFjZWl0YXIgZSBBc3NpbmFyIENvbnRyYXRvXCJcclxuICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIC0xcHgpOyBmb250LXNpemU6IDIwcHg7XCI+bmV3X2xhYmVsPC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgQGlmKHNob3dBbHBoYUNvbnRyYXRvQnV0dG9ucygpKSB7XHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuLWFscGhhLWNvbnRyYXRvLWFzc2luYXJcIiBwVG9vbHRpcD1cIkluc2VyaXIgYm90w6NvIEFzc2luYXIgQ29udHJhdG9cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cInRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgLTEuN3B4KTsgZm9udC1zaXplOiAyMHB4O1wiPmNvbnRyYWN0X2VkaXQ8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuLWFscGhhLWNvbnRyYXRvLXJlY3VzYXJcIiBwVG9vbHRpcD1cIkluc2VyaXIgYm90w6NvIFJlY3VzYXIgQ29udHJhdG9cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cInRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgLTEuN3B4KTsgZm9udC1zaXplOiAyMHB4O1wiPmNvbnRyYWN0X2RlbGV0ZTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxwLWRpdmlkZXIgbGF5b3V0PVwidmVydGljYWxcIj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWxpc3RcIiB2YWx1ZT1cIm9yZGVyZWRcIiBwVG9vbHRpcD1cIkxpc3RhIG9yZGVuYWRhXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtbGlzdFwiIHZhbHVlPVwiYnVsbGV0XCIgcFRvb2x0aXA9XCJMaXN0YSBjb20gbWFyY2Fkb3Jlc1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWFsaWduXCIgcFRvb2x0aXA9XCJBbGluaGFtZW50b1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvc2VsZWN0PlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEgbWluLXctMFwiPjwvZGl2PlxyXG4gICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIG0tMCBtbC1hdXRvIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIHByLTJcIj5cclxuICAgICAgICAgIDxidXR0b24gcEJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cInAtMSBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9ycyB0cmFuc2l0aW9uLWR1cmF0aW9uLTIwMCBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LWdyYXktNzAwIGhvdmVyOnRleHQtYmx1ZS02MDBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRnVsbHNjcmVlbigpXCI+XHJcblxyXG4gICAgICAgICAgICB7e2lzRnVsbHNjcmVlbigpID8gJ0V4cGFuZGlyJyA6ICdSZWR1emlyJ319XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHN0eWxlPVwiZm9udC1zaXplOiAyNHB4O1wiPnt7IGlzRnVsbHNjcmVlbigpID8gJ2Z1bGxzY3JlZW5fZXhpdCcgOlxyXG4gICAgICAgICAgICAgICdmdWxsc2NyZWVuJyB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvc3Bhbj4gLS0+XHJcblxyXG4gICAgICAgIDxrdi1idXR0b24gc2V2ZXJpdHk9XCJ0ZXJ0aWFyeVwiIFtpY29uXT1cImlzRnVsbHNjcmVlbigpID8gJ2Z1bGxzY3JlZW5fZXhpdCcgOlxyXG4gICAgICAgICAgICAgICdmdWxsc2NyZWVuJ1wiIFtsYWJlbF09XCJpc0Z1bGxzY3JlZW4oKSA/ICdSZWR1emlyJyA6ICdFeHBhbmRpcidcIiAob25DbGljayk9XCJ0b2dnbGVGdWxsc2NyZWVuKClcIj5cclxuXHJcbiAgICAgICAgPC9rdi1idXR0b24+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDNweDsgYm9yZGVyLXRvcDogbm9uZTsgYm9yZGVyLWJvdHRvbTogbm9uZVwiXHJcbiAgICBbc3R5bGUuYm9yZGVyUmlnaHRdPVwic2hvd0hlYWRlcigpID8gJzFweCBzb2xpZCAjZTVlN2ViJyA6ICdub25lJ1wiXHJcbiAgICBbc3R5bGUuYm9yZGVyTGVmdF09XCJzaG93SGVhZGVyKCkgPyAnMXB4IHNvbGlkICNlNWU3ZWInIDogJ25vbmUnXCI+XHJcbiAgICBAaWYoaXNMb2FkaW5nUGRmKCkpIHtcclxuICAgIDxwLXByb2dyZXNzQmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgW3N0eWxlXT1cInsgaGVpZ2h0OiAnM3B4JyB9XCIgLz5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC0xIGdhcC0wIG92ZXJmbG93LWF1dG9cIj5cclxuICAgIDxkaXYgaWQ9XCJrdi1lZGl0b3JcIiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZmxleC0xIHNjcm9sbHN0eWxlIHFsLWNvbnRhaW5lciBxbC1zbm93XCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICdlcnJvci1ib3JkZXInOiBoYXNDb250cm9sRXJyb3IoKSxcclxuICAgICAgICAncG9pbnRlci1ldmVudHMtbm9uZSBvcGFjaXR5LTYwJzogaXNMb2FkaW5nUGRmKClcclxuICAgICAgfVwiIFtzdHlsZS5ib3JkZXJUb3BdPVwic2hvd0hlYWRlcigpID8gJ25vbmUnIDogJzFweCBzb2xpZCAjZTVlN2ViJ1wiXHJcbiAgICAgIFtzdHlsZS5ib3JkZXJSaWdodF09XCJlbmFibGVQcmV2aWV3TW9kZSgpID8gJ25vbmUnIDogJzFweCBzb2xpZCAjZTVlN2ViJ1wiPjwvZGl2PlxyXG5cclxuICAgIEBpZiAoZW5hYmxlUHJldmlld01vZGUoKSkge1xyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZmxleC0xXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBweC0zIHB5LTJcIiBbc3R5bGUuYm9yZGVyUmlnaHRdPVwiJzFweCBzb2xpZCAjZTVlN2ViJ1wiXHJcbiAgICAgICAgW3N0eWxlLmJvcmRlckxlZnRdPVwiJzFweCBzb2xpZCAjZTVlN2ViJ1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWJsdWUtNjAwIHRleHQtbGdcIj52aXNpYmlsaXR5PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIHRleHQtc21cIj5QcmV2aWV3PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgaWQ9XCJrdi1lZGl0b3ItcHJldmlld1wiIGNsYXNzPVwib3ZlcmZsb3ctYXV0byBmbGV4LTEgc2Nyb2xsc3R5bGVcIiBbaW5uZXJIVE1MXT1cImdldFByZXZpZXdDb250ZW50XCJcclxuICAgICAgICBbc3R5bGUuYm9yZGVyXT1cIicxcHggc29saWQgI2U1ZTdlYidcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgI21lbnRpb25BbmNob3Igc3R5bGU9XCJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAxcHg7IGhlaWdodDogMXB4OyBvcGFjaXR5OiAwXCI+PC9kaXY+XHJcbjwvZGl2PlxyXG48a3YtZXJyb3IgW2hhc0Vycm9yXT1cImhhc0NvbnRyb2xFcnJvcigpXCI+e3sgZXJyb01lc3NhZ2UoKSB9fTwva3YtZXJyb3I+XHJcblxyXG5cclxuXHJcbjxwLW92ZXJsYXlQYW5lbCAjb3Agc3R5bGVDbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxyXG4gIDxkaXYgY2xhc3M9XCJncmlkIG0tMCBnYXAtMiBwLTIgbWF4LXctMjByZW0gb3ZlcmZsb3cteS1hdXRvIHNjcm9sbHN0eWxlXCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiAxNnJlbVwiPlxyXG4gICAgQGZvcihpdGVtIG9mIHJlbGF0b3Jpb3MoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiY29sLTEyIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLWdyYXktMTAwIHRyYW5zaXRpb24tY29sb3JzIHRyYW5zaXRpb24tZHVyYXRpb24tMjAwIGJvcmRlci1yb3VuZC1sZyBzaGFkb3ctMiBmbGV4IGZsZXgtY29sdW1uIGdhcC0yXCJcclxuICAgICAgKGNsaWNrKT1cInNldFJlbGF0b3JpbyhpdGVtKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW0gdy1mdWxsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgPGt2LXRhZ3MgY2xhc3M9XCJ0cmFuc2l0aW9uLW9wYWNpdHkgdHJhbnNpdGlvbi1kdXJhdGlvbi0zMDAge3tcclxuICAgICAgICAgICAgaXRlbT8uaWQgPT0gaWRSZWxhdG9yaW9TZWxlY3RlZCgpID8gJ29wYWNpdHktMTAwJyA6ICdvcGFjaXR5LTAnXHJcbiAgICAgICAgICB9fVwiIFt0YWdzXT1cIlt7IGxhYmVsOiAnU2VsZWNpb25hZG8nLCBzZXZlcml0eTogJ3ByaW1hcnknIH1dXCI+PC9rdi10YWdzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIHRleHQtZ3JheS01MDBcIj57eyBpdGVtLmRlc2NyaWNhbyB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L3Atb3ZlcmxheVBhbmVsPlxyXG5cclxuPHAtb3ZlcmxheVBhbmVsICNvcFZhcmlhYmxlcyBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgc3R5bGVDbGFzcz1cImt2LW1lbnRpb24tb3ZlcmxheVwiIChvbkhpZGUpPVwiY2xvc2VWYXJpYWJsZXNQYW5lbCgpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTEgcC0xIG92ZXJmbG93LXktYXV0byBzY3JvbGwtdmlydHVhbCBib3JkZXItcm91bmQtbGdcIlxyXG4gICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAyNTBweDsgbWluLXdpZHRoOiAyNTBweDsgYmFja2dyb3VuZC1jb2xvcjogIzMzMzMzM1wiPlxyXG4gICAgQGZvcih2YXJpYWJsZSBvZiBmaWx0ZXJlZFZhcmlhYmxlcygpOyB0cmFjayB2YXJpYWJsZS5pZCkge1xyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cInAtMiBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9ycyB0cmFuc2l0aW9uLWR1cmF0aW9uLTIwMCBib3JkZXItcm91bmQtbGcgdGV4dC1zbSB0ZXh0LXdoaXRlIG9wdGlvbi1kcm9wZG93blwiXHJcbiAgICAgIChjbGljayk9XCJzZWxlY3RWYXJpYWJsZUZyb21QYW5lbCh2YXJpYWJsZSlcIj5cclxuICAgICAgQGlmIChzaG93VmFyaWFibGVWYWx1ZUZpcnN0KCkpIHtcclxuICAgICAge3sgdmFyaWFibGUudmFsdWUgfX0gKFxyXG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQtZ3JheS00MDBcIj57eyB2YXJpYWJsZS5kZXNjcmljYW8gfX08L3NwYW4+IClcclxuICAgICAgfSBAZWxzZSB7XHJcbiAgICAgIHt7IHZhcmlhYmxlLmRlc2NyaWNhbyB9fVxyXG4gICAgICBAaWYodmFyaWFibGUudmFsdWUpe1xyXG4gICAgICAoPHNwYW4gY2xhc3M9XCJ0ZXh0LWdyYXktNDAwXCI+e3sgdmFyaWFibGUudmFsdWUgfX08L3NwYW4+KVxyXG4gICAgICB9XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgfSBAZW1wdHkge1xyXG4gICAgPGRpdiBjbGFzcz1cInAtMiB0ZXh0LXNtIHRleHQtZ3JheS01MDBcIj5OZW5odW1hIHZhcmnDoXZlbCBlbmNvbnRyYWRhLjwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L3Atb3ZlcmxheVBhbmVsPlxyXG5cclxuPGRpdiAjYnV0dG9uTmFtZVRvb2x0aXAgY2xhc3M9XCJidXR0b24tbmFtZS10b29sdGlwXCIgW2NsYXNzLnNob3ddPVwic2hvd0J1dHRvblRvb2x0aXAoKVwiXHJcbiAgW3N0eWxlLnRvcC5weF09XCJ0b29sdGlwUG9zaXRpb24oKS50b3BcIiBbc3R5bGUubGVmdC5weF09XCJ0b29sdGlwUG9zaXRpb24oKS5sZWZ0XCI+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTIgcC0zIGJnLXdoaXRlIGJvcmRlci1yb3VuZC1sZyBzaGFkb3ctM1wiIHN0eWxlPVwibWluLXdpZHRoOiAyODBweFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTFcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDBcIj5Ob21lIGRvIEJvdMOjbzwvbGFiZWw+XHJcbiAgICAgIDxpbnB1dCAjYnV0dG9uTmFtZUlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJwLTIgYm9yZGVyLTEgYm9yZGVyLWdyYXktMzAwIGJvcmRlci1yb3VuZC1tZCB0ZXh0LXNtXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIkV4OiBBY2VpdGFyIFByb3Bvc3RhXCIgWyhuZ01vZGVsKV09XCJidXR0b25OYW1lVmFsdWVcIiAoa2V5ZG93bi5lbnRlcik9XCJjb25maXJtQnV0dG9uTmFtZSgpXCJcclxuICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwiY2FuY2VsQnV0dG9uTmFtZSgpXCIgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTIganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJweC0zIHB5LTIgYm9yZGVyLTEgYm9yZGVyLWdyYXktMzAwIGJnLXdoaXRlIHRleHQtZ3JheS03MDAgYm9yZGVyLXJvdW5kLW1kIGN1cnNvci1wb2ludGVyIHRleHQtc20gZm9udC1tZWRpdW0gaG92ZXI6YmctZ3JheS0xMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxyXG4gICAgICAgIChjbGljayk9XCJjYW5jZWxCdXR0b25OYW1lKClcIj5cclxuICAgICAgICBDYW5jZWxhclxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwicHgtMyBweS0yIGJvcmRlci1ub25lIGJnLWJsdWUtNjAwIHRleHQtd2hpdGUgYm9yZGVyLXJvdW5kLW1kIGN1cnNvci1wb2ludGVyIHRleHQtc20gZm9udC1tZWRpdW0gaG92ZXI6YmctYmx1ZS03MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxyXG4gICAgICAgIChjbGljayk9XCJjb25maXJtQnV0dG9uTmFtZSgpXCI+XHJcbiAgICAgICAgSW5zZXJpclxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=