raise-common-lib-new 0.0.53 → 0.0.54

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.
@@ -344,7 +344,7 @@ export class RichtexteditorComponent {
344
344
  // "none";
345
345
  // (document.getElementById("rightRte") as HTMLElement).style.display =
346
346
  // noResultsFound ? "none" : "";
347
- // this.ref.markForCheck();
347
+ this.ref.markForCheck();
348
348
  });
349
349
  }
350
350
  }
@@ -387,6 +387,7 @@ export class RichtexteditorComponent {
387
387
  document.getElementById("skeletonId").style.display =
388
388
  "none";
389
389
  document.getElementById("rightRte").style.display = "";
390
+ this.ref.detectChanges();
390
391
  const reader = response.body.getReader();
391
392
  const decoder = new TextDecoder();
392
393
  while (true) {
@@ -398,7 +399,7 @@ export class RichtexteditorComponent {
398
399
  const lines = chunk.split("\n");
399
400
  for (const line of lines) {
400
401
  if (line.startsWith("data: ")) {
401
- const data = line.slice(6);
402
+ const data = line.substring(6).trim();
402
403
  if (data === "[DONE]") {
403
404
  return this.fullResponse;
404
405
  }
@@ -407,6 +408,7 @@ export class RichtexteditorComponent {
407
408
  const content = parsed.choices?.[0]?.delta?.content;
408
409
  if (content) {
409
410
  this.fullResponse += content;
411
+ setTimeout(() => this.scrollToBottom(), 0);
410
412
  }
411
413
  }
412
414
  catch (e) {
@@ -624,6 +626,15 @@ export class RichtexteditorComponent {
624
626
  });
625
627
  this.closeDialog();
626
628
  }
629
+ scrollToBottom() {
630
+ const rteContainer = document.getElementById("rightRte");
631
+ const scrollableElement = rteContainer?.querySelector(".e-rte-content");
632
+ if (scrollableElement) {
633
+ scrollableElement.scrollTop =
634
+ scrollableElement.scrollHeight - scrollableElement.clientHeight;
635
+ this.ref.detectChanges();
636
+ }
637
+ }
627
638
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RichtexteditorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.HttpClient }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component });
628
639
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RichtexteditorComponent, selector: "rs-richtext-editor", inputs: { placeholder: "placeholder", value: "value", editorId: "editorId", saveInterval: "saveInterval", height: "height", autoSaveOnIdle: "autoSaveOnIdle", disabled: "disabled", target: "target", insertImageSettings: "insertImageSettings", showTicketAttachment: "showTicketAttachment" }, outputs: { toolbarClick: "toolbarClick", change: "change", created: "created", actionBegin: "actionBegin", input: "input", focus: "focus", blur: "blur", actionComplete: "actionComplete", afterPasteCleanup: "afterPasteCleanup" }, viewQueries: [{ propertyName: "rteObj", first: true, predicate: ["editor"], descendants: true }, { propertyName: "queryCategory", first: true, predicate: ["queryCategory"], descendants: true }, { propertyName: "leftRte", first: true, predicate: ["leftRte"], descendants: true }, { propertyName: "rightRte", first: true, predicate: ["rightRte"], descendants: true }, { propertyName: "AIdialog", first: true, predicate: ["AIdialog"], descendants: true, static: true }, { propertyName: "sentimentButton", first: true, predicate: ["sentimentButton"], descendants: true }, { propertyName: "regenerateButton", first: true, predicate: ["regenerateButton"], descendants: true }, { propertyName: "copyButton", first: true, predicate: ["copyButton"], descendants: true }, { propertyName: "replaceButton", first: true, predicate: ["replaceButton"], descendants: true }], ngImport: i0, template: "<div class=\"editor_box\" id=\"container\">\r\n <ejs-richtexteditor\r\n #editor\r\n [id]=\"editorId\"\r\n [height]=\"height\"\r\n [saveInterval]=\"0\"\r\n [autoSaveOnIdle]=\"autoSaveOnIdle\"\r\n [toolbarSettings]=\"tools\"\r\n [bulletFormatList]=\"bulletFormatList\"\r\n [numberFormatList]=\"numberFormatList\"\r\n [fontFamily]=\"family\"\r\n [fontSize]=\"fontSize\"\r\n [disabled]=\"disabled\"\r\n [insertImageSettings]=\"insertImageSettings\"\r\n [(ngModel)]=\"value\"\r\n (actionBegin)=\"_actionBegin($event)\"\r\n (change)=\"onContentChange($event)\"\r\n (created)=\"onCreate()\"\r\n (toolbarClick)=\"_toolbarClick($event)\"\r\n (input)=\"_input($event)\"\r\n (focus)=\"_focus($event)\"\r\n (blur)=\"_blur($event)\"\r\n (actionComplete)=\"_actionComplete($event)\"\r\n (dialogOpen)=\"_dialogOpen($event)\"\r\n (afterPasteCleanup)=\"_afterPasteCleanup($event)\"\r\n >\r\n </ejs-richtexteditor>\r\n <ejs-dialog\r\n #AIdialog\r\n id=\"AIdialog\"\r\n [ngClass]=\"size\"\r\n [visible]=\"false\"\r\n [target]=\"target\"\r\n [isModal]=\"true\"\r\n [height]=\"dialogHeight\"\r\n [width]=\"dialogWidth\"\r\n maxHeight=\"80%\"\r\n cssClass=\"e-rte-elements custom-dialog-rte\"\r\n zIndex=\"1000\"\r\n (close)=\"closeDialog()\"\r\n (overlayClick)=\"onOverlayClick()\"\r\n (open)=\"dialogShow()\"\r\n >\r\n <ng-template #header>\r\n <div class=\"header-title\">AI Assist</div>\r\n <div class=\"header-buttons\">\r\n <div *ngIf=\"showZoomBtn\" class=\"header-zoom\" (click)=\"onZoom()\">\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size === 'largest'\"\r\n src=\"../../../assets/img/dialog-shrink.svg\"\r\n />\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size !== 'largest'\"\r\n src=\"../../../assets/img/dialog-grow.svg\"\r\n />\r\n </div>\r\n <div class=\"header-btn\" (click)=\"closeDialog()\">\r\n <img class=\"header-icon\" src=\"../../../assets/img/dialog-close.svg\" />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #footerTemplate>\r\n <div id=\"dialog-footer-content\">\r\n <div class=\"custom-row-0\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"width: 100%; align-items: center; justify-content: left\"\r\n ></div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <div style=\"text-align: right; width: 100%\">\r\n <button\r\n ejs-button\r\n #sentimentButton\r\n content=\"\uD83D\uDE0A Neutral\"\r\n disabled=\"false\"\r\n cssClass=\"sentiment\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #copyButton\r\n content=\"Copy\"\r\n disabled=\"false\"\r\n class=\"copy-btn\"\r\n (click)=\"copyClick()\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #replaceButton\r\n content=\"Replace\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"replaceClick()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #content>\r\n <div class=\"dialog-content\" style=\"height: 100%\">\r\n <div class=\"custom-row-0\">\r\n <div class=\"cuscol-0\" style=\"width: 100%\">\r\n <ejs-dropdownlist\r\n #queryCategory\r\n style=\"width: 200px\"\r\n id=\"queryCategory\"\r\n [dataSource]=\"queryList\"\r\n index=\"0\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onQuerySelect($event)\"\r\n >\r\n Rephrase\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Rephrase'\"\r\n id=\"chips-container\"\r\n #chipList\r\n style=\"width: 160px\"\r\n [(ngModel)]=\"chipValue\"\r\n [dataSource]=\"rephraseTyleList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onChipClick($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Translate'\"\r\n #languageCategory\r\n index=\"0\"\r\n id=\"language-Category\"\r\n [dataSource]=\"languageList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onLanguageSelect($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <!-- <ejs-chiplist\r\n id=\"chips-container\"\r\n #chipList\r\n [chips]=\"['Standard', 'Fluent', 'Professional']\"\r\n selection=\"Single\"\r\n cssClass=\"e-outline\"\r\n [selectedChips]=\"[0]\"\r\n (click)=\"onChipClick($event)\"\r\n >\r\n </ejs-chiplist> -->\r\n <button\r\n ejs-button\r\n #regenerateButton\r\n content=\"Regenerate\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"regenerateClick()\"\r\n ></button>\r\n </div>\r\n </div>\r\n <div class=\"custom-row-1\" style=\"height: calc(100% - 40px)\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"\r\n width: 100%;\r\n height: 100%;\r\n align-items: center;\r\n justify-content: left;\r\n \"\r\n >\r\n <div style=\"text-align: left; height: 100%\">\r\n <ejs-richtexteditor\r\n #leftRte\r\n id=\"leftRte\"\r\n height=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n placeholder=\"Analysis of AI Support\"\r\n cssClass=\"e-outline\"\r\n >\r\n </ejs-richtexteditor>\r\n </div>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n display: flex;\r\n justify-content: space-between;\r\n width: 100%;\r\n height: 100%;\r\n \"\r\n >\r\n <div style=\"text-align: left; width: 100%; height: 100%\">\r\n <ejs-richtexteditor\r\n #rightRte\r\n id=\"rightRte\"\r\n height=\"100%\"\r\n [(ngModel)]=\"fullResponse\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n placeholder=\"Analysis of AI Support\"\r\n cssClass=\"e-outline\"\r\n >\r\n </ejs-richtexteditor>\r\n <div\r\n class=\"no-results-found\"\r\n id=\"no-results-found\"\r\n style=\"display: none; height: 244px; align-content: center\"\r\n >\r\n <img\r\n height=\"50\"\r\n width=\"50\"\r\n src=\"https://storage.googleapis.com/cdn-bolddesk/agent-angular-app/images/light/no-records-warning.svg\"\r\n />\r\n <div>No results found</div>\r\n </div>\r\n <div id=\"skeletonId\">\r\n <ejs-skeleton\r\n #skeletonId1\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"100%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId2\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"90%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId3\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"70%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId4\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"50%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId5\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"30%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId6\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"10%\"\r\n ></ejs-skeleton\r\n ><br />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ejs-dialog>\r\n <!-- <div class=\"toast\" *ngIf=\"showMsg\">\r\n <span class=\"toast_text\">First, Select some text</span\r\n ><span class=\"close_icon\" (click)=\"hideToast()\"></span>\r\n </div> -->\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.editor_box{position:relative;width:100%;height:100%}.editor_box .toast{position:absolute;left:35%;top:110px;z-index:1;width:400px;border-radius:4px;border:1px solid #e8f2ff;background:#f4f8ff;padding:4px 12px;color:#1f3f5c;font-size:12px;font-style:normal;font-weight:400;height:32px;font-family:Arial;display:flex;align-items:center;justify-content:space-between}.editor_box .toast .toast_text:before{content:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2217%22 viewBox%3D%220 0 16 17%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Ccircle cx%3D%228%22 cy%3D%228.5%22 r%3D%226.5%22 stroke%3D%22%236B6B6B%22%2F%3E%0D%3Cpath d%3D%22M8 8.5V11.5%22 stroke%3D%22%236B6B6B%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Ccircle cx%3D%228%22 cy%3D%225.5%22 r%3D%221%22 fill%3D%22%236B6B6B%22%2F%3E%0D%3C%2Fsvg%3E%0D\");display:inline-block;width:16px;height:16px;vertical-align:bottom;margin-right:8px}.editor_box .toast .close_icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cpath d%3D%22M3.50021 12.9999L12.5001 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Cpath d%3D%22M12.4999 12.9999L3.50007 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");cursor:pointer;display:inline-block;width:16px;height:16px}.custom-dialog-rte{padding:0 20px;border-radius:10px}.custom-row-0,.custom-row-1,.custom-row-2{display:flex;align-items:center;padding:12px 24px}.e-rte-dropdown-btn-text{padding-left:4px}.no-results-found{text-align:center}.no-results-found img{display:block;margin:0 auto}.e-custom{margin-right:.5rem;border-radius:25px!important}.custom-dialog-rte .skeleton-rectangle{border-radius:4px}@media (max-width: 767px){.cuscol-0,.cuscol-1,.cuscol-2{justify-content:center!important}.custom-row-0,.custom-row-1,.custom-row-2{flex-direction:column!important}.cuscol-1{border-right:none!important}.cuscol-0{width:100%;align-items:center}::ng-deep:host .e-dialog{max-height:80%!important}.custom-dialog-rte .e-dialog .e-dlg-content{overflow-y:auto!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor{height:100px!important}.cuscol-noresult{padding-bottom:20px!important}.e-chip-list{padding:5px!important}.cuscol{padding-right:.2rem!important;width:auto!important}.custom-row-1{height:auto!important}}.cuscol-1{display:flex;flex-direction:row!important}.cuscol-2{display:flex;flex-direction:column!important}.sentiment{color:#000!important}.custom-dialog-rte .e-dialog .e-dlg-content{padding:0!important;overflow-y:hidden}.custom-dialog-rte .e-dialog .e-dlg-header-content{padding:20px 0!important;border:0!important}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header{display:flex;align-items:center;line-height:18px;justify-content:space-between}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header .header-title{font-family:Arial;font-size:15px;font-weight:700;font-style:normal}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons{display:flex}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons img{width:16px;height:16px;cursor:pointer;padding:2px;margin-left:12px}.custom-dialog-rte .e-dialog .e-footer-content{padding:0!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor.e-rte-tb-expand .e-rte-content,.e-richtexteditor.e-rte-tb-expand .e-source-content{border:0;border-bottom:1px solid #dee2e6;border-top:0px solid #dee2e6!important}.custom-dialog-rte .dialog-content .custom-row-0{border-top:0px solid #ddd!important;padding:0;margin-bottom:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-0{justify-content:left;border-right:none!important;padding:0;display:flex;gap:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1{padding:0;margin-left:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1 .e-primary{color:#44566c;border-radius:4px;border:1px solid #dbe1e7;background:#fff;width:87px;margin:0;padding:2px 12px;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:14px;height:28px}.custom-dialog-rte .dialog-content .custom-row-1{padding:0;height:calc(100% - 40px);gap:12px}.custom-dialog-rte .e-footer-content{border:0}.custom-dialog-rte .e-footer-content .custom-row-0{padding:20px 0}.custom-dialog-rte .e-footer-content .e-control.e-btn{font-family:Arial;font-size:12px;line-height:14px;padding:2px 12px;height:28px;background:#fff;color:#44566c}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn{border-color:#dbe1e7}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn:before{content:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Crect width%3D%2216%22 height%3D%2216%22 fill%3D%22white%22%2F%3E%0D%3Crect x%3D%224.5%22 y%3D%224.5%22 width%3D%229%22 height%3D%229%22 rx%3D%221.5%22 stroke%3D%22%236C7C90%22%2F%3E%0D%3Cpath d%3D%22M11.5 2.5H4.5C3.39543 2.5 2.5 3.39543 2.5 4.5V11.5%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");vertical-align:middle;margin-right:6px}.custom-dialog-rte .e-footer-content .e-control.e-btn.e-primary{color:#fff;background:#1364b3}.e-dialog.largest{width:96vw!important;height:88vh!important;max-height:88vh;max-width:2100px}::ng-deep ol.custom-list{list-style:none!important;counter-reset:list-counter}::ng-deep ol.custom-list li{counter-increment:list-counter}::ng-deep ol.parentheses li::marker{content:\"(\" counter(list-counter) \") \"}::ng-deep .e-tiempos-headline{font-family:Tiempos Headline-Semibold!important}::ng-deep .e-avenir-lt-pro-black{font-family:Avenir LT Pro-Black!important}::ng-deep .e-avenir-lt-pro-black-oblique{font-family:Avenir LT Pro-Black Oblique!important}::ng-deep .e-avenir-lt-pro-heavy{font-family:Avenir LT Pro-Heavy!important}::ng-deep .e-avenir-lt-pro-heavy-oblique{font-family:Avenir LT Pro-Heavy Oblique!important}::ng-deep .e-avenir-lt-pro-light{font-family:Avenir LT Pro-Light!important}::ng-deep .e-avenir-lt-pro-light-oblique{font-family:Avenir LT Pro-Light Oblique!important}::ng-deep .e-avenir-lt-pro-medium{font-family:Avenir LT Pro-Medium!important}::ng-deep .e-avenir-lt-pro-medium-oblique{font-family:Avenir LT Pro-Medium Oblique!important}::ng-deep .e-avenir-next-lt-pro-bold{font-family:Avenir Next LT Pro-Bold!important}::ng-deep .e-avenir-next-lt-pro-demi{font-family:Avenir Next LT Pro-Demi!important}::ng-deep .e-avenir-next-lt-pro-demilt{font-family:Avenir Next LT Pro-Demilt!important}::ng-deep .e-avenir-next-lt-pro-heavy{font-family:Avenir Next LT Pro-Heavy!important}::ng-deep .e-avenir-next-lt-pro-heavylt{font-family:Avenir Next LT Pro-Heavylt!important}::ng-deep .e-avenir-next-lt-pro-it{font-family:Avenir Next LT Pro-It!important}::ng-deep .e-avenir-next-lt-pro-light{font-family:Avenir Next LT Pro-Light!important}::ng-deep .e-avenir-next-lt-pro-mediumlt{font-family:Avenir Next LT Pro-Mediumlt!important}::ng-deep .e-avenir-next-lt-pro-regular{font-family:Avenir Next LT Pro-Regular!important}::ng-deep .e-avenir-next-lt-pro-ultlt{font-family:Avenir Next LT Pro-UltLt!important}::ng-deep .e-avenir-next-lt-pro-ultltlt{font-family:Avenir Next LT Pro-UltLtlt!important}::ng-deep .e-source-han-sans-cn-extralight{font-family:Source Han Sans CN-ExtraLight!important}::ng-deep .e-source-han-sans-cn-regular{font-family:Source Han Sans CN-Regular!important}::ng-deep .e-source-han-sans-cn-medium{font-family:Source Han Sans CN-Medium!important}::ng-deep .e-source-han-sans-cn-bold{font-family:Source Han Sans CN-Bold!important}::ng-deep .e-ping-fang-sc-light{font-family:Ping Fang SC-Light!important}::ng-deep .e-ping-fang-sc-medium{font-family:Ping Fang SC-Medium!important}::ng-deep .e-ping-fang-sc-regular{font-family:Ping Fang SC-Regular!important}::ng-deep .e-ping-fang-sc-semibold{font-family:Ping Fang SC-Semibold!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.ButtonComponent, selector: "[ejs-button]", inputs: ["content", "cssClass", "disabled", "enableHtmlSanitizer", "enablePersistence", "enableRtl", "iconCss", "iconPosition", "isPrimary", "isToggle", "locale"], outputs: ["created"] }, { kind: "component", type: i6.DialogComponent, selector: "ejs-dialog", inputs: ["allowDragging", "animationSettings", "buttons", "closeOnEscape", "content", "cssClass", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "footerTemplate", "header", "height", "isModal", "locale", "minHeight", "position", "resizeHandles", "showCloseIcon", "target", "visible", "width", "zIndex"], outputs: ["beforeClose", "beforeOpen", "beforeSanitizeHtml", "close", "created", "destroyed", "drag", "dragStart", "dragStop", "open", "overlayClick", "resizeStart", "resizeStop", "resizing", "visibleChange"] }, { kind: "component", type: i7.DropDownListComponent, selector: "ejs-dropdownlist", inputs: ["actionFailureTemplate", "allowFiltering", "allowObjectBinding", "cssClass", "dataSource", "enablePersistence", "enableRtl", "enableVirtualization", "enabled", "fields", "filterBarPlaceholder", "filterType", "floatLabelType", "footerTemplate", "groupTemplate", "headerTemplate", "htmlAttributes", "ignoreAccent", "ignoreCase", "index", "isDeviceFullScreen", "itemTemplate", "locale", "noRecordsTemplate", "placeholder", "popupHeight", "popupWidth", "query", "readonly", "showClearButton", "sortOrder", "text", "value", "valueTemplate", "width", "zIndex"], outputs: ["actionBegin", "actionComplete", "actionFailure", "beforeOpen", "blur", "change", "close", "created", "dataBound", "destroyed", "filtering", "focus", "open", "select", "valueChange"] }, { kind: "component", type: i8.SkeletonComponent, selector: "ejs-skeleton", inputs: ["cssClass", "enablePersistence", "enableRtl", "height", "label", "locale", "shape", "shimmerEffect", "visible", "width"] }, { kind: "component", type: i9.RichTextEditorComponent, selector: "ejs-richtexteditor", inputs: ["autoSaveOnIdle", "backgroundColor", "bulletFormatList", "cssClass", "editorMode", "emojiPickerSettings", "enableAutoUrl", "enableHtmlEncode", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "enableTabKey", "enableXhtml", "enabled", "enterKey", "exportPdf", "exportWord", "fileManagerSettings", "floatingToolbarOffset", "fontColor", "fontFamily", "fontSize", "format", "formatPainterSettings", "formatter", "height", "htmlAttributes", "iframeSettings", "importWord", "inlineMode", "insertAudioSettings", "insertImageSettings", "insertVideoSettings", "keyConfig", "locale", "maxLength", "numberFormatList", "pasteCleanupSettings", "placeholder", "quickToolbarSettings", "readonly", "saveInterval", "shiftEnterKey", "showCharCount", "showTooltip", "slashMenuSettings", "tableSettings", "toolbarSettings", "undoRedoSteps", "undoRedoTimer", "value", "valueTemplate", "width"], outputs: ["actionBegin", "actionComplete", "afterImageDelete", "afterMediaDelete", "afterPasteCleanup", "beforeDialogClose", "beforeDialogOpen", "beforeFileUpload", "beforeImageDrop", "beforeImageUpload", "beforePasteCleanup", "beforeQuickToolbarOpen", "beforeSanitizeHtml", "blur", "change", "created", "destroyed", "dialogClose", "dialogOpen", "fileRemoving", "fileSelected", "fileUploadFailed", "fileUploadSuccess", "fileUploading", "focus", "imageRemoving", "imageSelected", "imageUploadFailed", "imageUploadSuccess", "imageUploading", "quickToolbarClose", "quickToolbarOpen", "resizeStart", "resizeStop", "resizing", "slashMenuItemSelect", "toolbarClick", "toolbarStatusUpdate", "updatedToolbarStatus", "valueChange"] }] });
629
640
  }
@@ -696,4 +707,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
696
707
  }], afterPasteCleanup: [{
697
708
  type: Output
698
709
  }] } });
699
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vcmljaHRleHRlZGl0b3IvaW5kZXguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vcmljaHRleHRlZGl0b3IvaW5kZXguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBT3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7OztBQVdqRCxNQUFNLE9BQU8sdUJBQXVCO0lBeUl4QjtJQUNBO0lBQ0E7SUF6SUgsTUFBTSxDQUEwQjtJQUVoQyxhQUFhLENBQXlCO0lBRXRDLE9BQU8sQ0FBMkI7SUFFbEMsUUFBUSxDQUEyQjtJQUNNLFFBQVEsQ0FBbUI7SUFFcEUsZUFBZSxDQUFtQjtJQUVsQyxnQkFBZ0IsQ0FBbUI7SUFFbkMsVUFBVSxDQUFtQjtJQUU3QixhQUFhLENBQW1CO0lBQ3ZDLGlGQUFpRjtJQUV4RSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQ3RCLFlBQVksR0FBRyxHQUFHLENBQUM7SUFDbkIsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUNoQixjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLGNBQWM7SUFDcEMsbUJBQW1C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QixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSXBDLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBS0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IERyb3BEb3duTGlzdENvbXBvbmVudCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1kcm9wZG93bnNcIjtcclxuaW1wb3J0IHtcclxuICBSaWNoVGV4dEVkaXRvckNvbXBvbmVudCxcclxuICBUb29sYmFyU2V0dGluZ3NNb2RlbCxcclxufSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItcmljaHRleHRlZGl0b3JcIjtcclxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWJ1dHRvbnNcIjtcclxuaW1wb3J0IHsgRHJvcERvd25CdXR0b24gfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItc3BsaXRidXR0b25zXCI7XHJcbmltcG9ydCB7IERpYWxvZ0NvbXBvbmVudCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1wb3B1cHNcIjtcclxuLy8gc2VydmljZVxyXG4vLyBpbXBvcnQgeyBQYkZ1blNlcnZpY2UgfSBmcm9tIFwiQGFwcC9zZXJ2aWNlcy9wYi1mdW4uc2VydmljZVwiO1xyXG4vLyBpbXBvcnQgeyBTaGFyZWRTeW5jZnVzaW9uTW9kdWxlIH0gZnJvbSBcIkBhcHAvbW9kdWxlL3N5bmNmdXNpb25Nb2R1bGVcIjtcclxuaW1wb3J0IHsgT3BlbkFpTW9kZWxSVEUgfSBmcm9tIFwiLi9vcGVuYXBpXCI7XHJcbmltcG9ydCB7IGxpbmVIZWlnaHRfaXRlbXMgfSBmcm9tIFwiLi9kYXRhLWNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBmb250RmFtaWx5LCBzaXplIH0gZnJvbSBcIi4vZGF0YS1jb25maWdcIjtcclxuaW1wb3J0IHsgZ2V0QUlDb25maWcsIGlzQUlDb25maWdWYWxpZCwgQUlDb25maWcgfSBmcm9tIFwiLi9haS1jb25maWdcIjtcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlL2RpYWxvZy5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJycy1yaWNodGV4dC1lZGl0b3JcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2luZGV4LmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIC8vIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgLy8gaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU2hhcmVkU3luY2Z1c2lvbk1vZHVsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSaWNodGV4dGVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZChcImVkaXRvclwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcnRlT2JqOiBSaWNoVGV4dEVkaXRvckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicXVlcnlDYXRlZ29yeVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcXVlcnlDYXRlZ29yeSE6IERyb3BEb3duTGlzdENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwibGVmdFJ0ZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgbGVmdFJ0ZSE6IFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJyaWdodFJ0ZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmlnaHRSdGUhOiBSaWNoVGV4dEVkaXRvckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiQUlkaWFsb2dcIiwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIEFJZGlhbG9nITogRGlhbG9nQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJzZW50aW1lbnRCdXR0b25cIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgcHVibGljIHNlbnRpbWVudEJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicmVnZW5lcmF0ZUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmVnZW5lcmF0ZUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiY29weUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgY29weUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicmVwbGFjZUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmVwbGFjZUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICAvLyBAVmlld0NoaWxkKFwiY2hpcExpc3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBjaGlwTGlzdCE6IENoaXBMaXN0Q29tcG9uZW50O1xyXG5cclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgQElucHV0KCkgdmFsdWUgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIGVkaXRvcklkID0gXCJlZGl0b3JJZFwiO1xyXG4gIEBJbnB1dCgpIHNhdmVJbnRlcnZhbCA9IDUwMDtcclxuICBASW5wdXQoKSBoZWlnaHQgPSBcImF1dG9cIjtcclxuICBASW5wdXQoKSBhdXRvU2F2ZU9uSWRsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSB0YXJnZXQgPSBcIiNtYWluUGFnZVwiOyAvLyBkaWFsb2cg5by556qX54i257qnXHJcbiAgQElucHV0KCkgaW5zZXJ0SW1hZ2VTZXR0aW5ncyA9IHtcclxuICAgIHNhdmVGb3JtYXQ6IFwiQmxvYlwiLFxyXG4gICAgYWxsb3dlZFR5cGVzOiBbXCIuc3ZnXCIsIFwiLnBuZ1wiXSxcclxuICAgIGRpc3BsYXk6IFwibm9uZVwiLFxyXG4gIH07XHJcbiAgQElucHV0KCkgc2hvd1RpY2tldEF0dGFjaG1lbnQgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHRvb2xiYXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25CZWdpbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaW5wdXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25Db21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJQYXN0ZUNsZWFudXAgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGZhbWlseSA9IGZvbnRGYW1pbHk7XHJcbiAgZm9udFNpemUgPSBzaXplO1xyXG4gIGRpYWxvZ1dpZHRoID0gXCI4MDBweFwiO1xyXG4gIGRpYWxvZ0hlaWdodCA9IFwiNjQycHhcIjtcclxuICBzaG93Wm9vbUJ0biA9IHRydWU7XHJcbiAgc2hvd01zZyA9IGZhbHNlO1xyXG4gIGVkaXRvck1hbmFnZXI6IGFueTtcclxuICBzaXplID0gXCJcIjtcclxuICBzZWxlY3RlZFF1ZXJ5O1xyXG4gIHB1YmxpYyBkcm9wVmFsSW5kZXggPSAwO1xyXG4gIHB1YmxpYyBxdWVyeUxpc3Q6IHsgaWQ6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXSA9IFtcclxuICAgIHsgaWQ6IFwiUmVwaHJhc2VcIiwgdGV4dDogXCJSZXBocmFzZVwiIH0sXHJcbiAgICB7IGlkOiBcIkdyYW1tYXJcIiwgdGV4dDogXCJDb3JyZWN0IEdyYW1tYXJcIiB9LFxyXG4gICAgeyBpZDogXCJTdW1tYXJpemVcIiwgdGV4dDogXCJTdW1tYXJpemVcIiB9LFxyXG4gICAgeyBpZDogXCJFbGFib3JhdGVcIiwgdGV4dDogXCJFbGFib3JhdGVcIiB9LFxyXG4gICAgeyBpZDogXCJUcmFuc2xhdGVcIiwgdGV4dDogXCJUcmFuc2xhdGVcIiB9LFxyXG4gICAgeyBpZDogXCJTZW50aW1lbnRBbmFseXNpc1wiLCB0ZXh0OiBcIlNlbnRpbWVudCBBbmFseXNpc1wiIH0sXHJcbiAgXTtcclxuICBwdWJsaWMgcmVwaHJhc2VUeWxlTGlzdCA9IFtcclxuICAgIHsgdGV4dDogXCJTdGFuZGFyZFwiLCBpZDogXCJTdGFuZGFyZFwiIH0sXHJcbiAgICB7IHRleHQ6IFwiRmx1ZW50XCIsIGlkOiBcIkZsdWVudFwiIH0sXHJcbiAgICB7IHRleHQ6IFwiUHJvZmVzc2lvbmFsXCIsIGlkOiBcIlByb2Zlc3Npb25hbFwiIH0sXHJcbiAgXTtcclxuICBwdWJsaWMgbGFuZ3VhZ2VMaXN0OiB7IGlkOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9W10gPSBbXHJcbiAgICB7IGlkOiBcIkVOXCIsIHRleHQ6IFwiRW5nbGlzaFwiIH0sXHJcbiAgICB7IGlkOiBcIlpIXCIsIHRleHQ6IFwiQ2hpbmVzZSAoU2ltcGxpZmllZClcIiB9LFxyXG4gICAgeyBpZDogXCJFU1wiLCB0ZXh0OiBcIlNwYW5pc2hcIiB9LFxyXG4gICAgeyBpZDogXCJaSFRcIiwgdGV4dDogXCJDaGluZXNlIChUcmFkaXRpb25hbClcIiB9LFxyXG4gICAgeyBpZDogXCJISVwiLCB0ZXh0OiBcIkhpbmRpXCIgfSxcclxuICAgIHsgaWQ6IFwiQVJcIiwgdGV4dDogXCJBcmFiaWNcIiB9LFxyXG4gICAgeyBpZDogXCJCTlwiLCB0ZXh0OiBcIkJlbmdhbGlcIiB9LFxyXG4gICAgeyBpZDogXCJQVFwiLCB0ZXh0OiBcIlBvcnR1Z3Vlc2VcIiB9LFxyXG4gICAgeyBpZDogXCJSVVwiLCB0ZXh0OiBcIlJ1c3NpYW5cIiB9LFxyXG4gICAgeyBpZDogXCJKQVwiLCB0ZXh0OiBcIkphcGFuZXNlXCIgfSxcclxuICAgIHsgaWQ6IFwiREVcIiwgdGV4dDogXCJHZXJtYW5cIiB9LFxyXG4gICAgeyBpZDogXCJLT1wiLCB0ZXh0OiBcIktvcmVhblwiIH0sXHJcbiAgICB7IGlkOiBcIkZSXCIsIHRleHQ6IFwiRnJlbmNoXCIgfSxcclxuICAgIHsgaWQ6IFwiSVRcIiwgdGV4dDogXCJJdGFsaWFuXCIgfSxcclxuICAgIHsgaWQ6IFwiVFJcIiwgdGV4dDogXCJUdXJraXNoXCIgfSxcclxuICBdO1xyXG4gIHB1YmxpYyBwcm9tcHRRdWVyeSA9IFwiXCI7XHJcbiAgcHVibGljIGlzU2VudGltZW50Q2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc3ViUXVlcnkgPSBcIlwiO1xyXG4gIHB1YmxpYyB0cmFuc2xhdGVsYW5ndWFnZSE6IHN0cmluZztcclxuICBwdWJsaWMgY2hpcFZhbHVlID0gXCJTdGFuZGFyZFwiO1xyXG4gIHB1YmxpYyBhcGlSZXN1bHREYXRhOiBhbnk7XHJcbiAgcHVibGljIEFJUmVzdWx0ITogc3RyaW5nO1xyXG4gIHRvb2xzOiBUb29sYmFyU2V0dGluZ3NNb2RlbDtcclxuICBwdWJsaWMgaXNEaWFsb2dWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGJ1bGxldEZvcm1hdExpc3QgPSB7XHJcbiAgICB0eXBlczogW1xyXG4gICAgICB7IHRleHQ6IFwiTm9uZVwiLCB2YWx1ZTogXCJub25lXCIgfSxcclxuICAgICAgeyB0ZXh0OiBcIuKXj1wiLCB2YWx1ZTogXCJkaXNjXCIgfSxcclxuICAgICAgeyB0ZXh0OiBcIuKXi1wiLCB2YWx1ZTogXCJjaXJjbGVcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwi4pagXCIsIHZhbHVlOiBcInNxdWFyZVwiIH0sXHJcbiAgICAgIC8vIEFkZCB5b3VyIGN1c3RvbSBidWxsZXQgc3R5bGUgaGVyZVxyXG4gICAgICB7IHRleHQ6IFwiLVwiLCB2YWx1ZTogXCJkYXNoXCIgfSxcclxuICAgIF0sXHJcbiAgfTtcclxuICBwdWJsaWMgbnVtYmVyRm9ybWF0TGlzdCA9IHtcclxuICAgIHR5cGVzOiBbXHJcbiAgICAgIHsgdGV4dDogXCJOb25lXCIsIHZhbHVlOiBcIm5vbmVcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwiMSwgMiwgMywg4oCmXCIsIHZhbHVlOiBcImRlY2ltYWxcIiB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCLOsSwgzrIsIM6zLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJsb3dlckdyZWVrXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcImksIGlpLCBpaWksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcImxvd2VyUm9tYW5cIixcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRleHQ6IFwiQSwgQiwgQywg4oCmXCIsXHJcbiAgICAgICAgdmFsdWU6IFwidXBwZXJBbHBoYVwiLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCJhLCBiLCBjLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJsb3dlckFscGhhXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcIkksIElJLCBJSUksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcInVwcGVyUm9tYW5cIixcclxuICAgICAgfSxcclxuICAgICAgLy8gQWRkIHlvdXIgY3VzdG9tIGJ1bGxldCBzdHlsZSBoZXJlXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcIigxKSwgKDIpLCAoMyksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcInBhcmVudGhlc2VzXCIsXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IERpYWxvZ1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc3QgZHluYW1pY0FpQnV0dG9uSWQgPSBgYWlfYXNzaXN0YW50X2J1dHRvbl90YmFyXyR7dGhpcy5lZGl0b3JJZH1gO1xyXG4gICAgdGhpcy50b29scyA9IHtcclxuICAgICAgZW5hYmxlRmxvYXRpbmc6IGZhbHNlLFxyXG4gICAgICBpdGVtczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRvb2x0aXBUZXh0OiBcIkFJIEFzc2lzdFwiLFxyXG4gICAgICAgICAgdGVtcGxhdGU6IGA8YnV0dG9uIGNsYXNzPVwiZS10YmFyLWJ0biBlLWJ0blwiIHRhYmluZGV4PVwiLTFcIiBpZD1cIiR7ZHluYW1pY0FpQnV0dG9uSWR9XCIgc3R5bGU9XCJ3aWR0aDoxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlLXJ0ZS1kcm9wZG93bi1idG4tdGV4dFwiPkFJIEFzc2lzdDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgPC9idXR0b24+YCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiQm9sZFwiLFxyXG4gICAgICAgIFwiSXRhbGljXCIsXHJcbiAgICAgICAgXCJVbmRlcmxpbmVcIixcclxuICAgICAgICBcIlN0cmlrZVRocm91Z2hcIixcclxuICAgICAgICBcIkZvbnROYW1lXCIsXHJcbiAgICAgICAgXCJGb250U2l6ZVwiLFxyXG4gICAgICAgIFwiRm9udENvbG9yXCIsXHJcbiAgICAgICAgXCJCYWNrZ3JvdW5kQ29sb3JcIixcclxuICAgICAgICBcIkxvd2VyQ2FzZVwiLFxyXG4gICAgICAgIFwiVXBwZXJDYXNlXCIsXHJcbiAgICAgICAgXCJ8XCIsXHJcbiAgICAgICAgXCJDcmVhdGVUYWJsZVwiLFxyXG4gICAgICAgIFwiRm9ybWF0c1wiLFxyXG4gICAgICAgIFwiQWxpZ25tZW50c1wiLFxyXG4gICAgICAgIC8vIHtcclxuICAgICAgICAvLyAgIHRvb2x0aXBUZXh0OiBcIkxpbmUgSGVpZ2h0XCIsXHJcbiAgICAgICAgLy8gICB0ZW1wbGF0ZTpcclxuICAgICAgICAvLyAgICAgJzxidXR0b24gY2xhc3M9XCJlLXRiYXItYnRuIGUtYnRuXCIgdGFiaW5kZXg9XCItMVwiIGlkPVwibGluZWhlaWdodF90YmFyXCIgIHN0eWxlPVwid2lkdGg6MTAwJVwiPjwvYnV0dG9uPicsXHJcbiAgICAgICAgLy8gfSxcclxuICAgICAgICBcImJ1bGxldEZvcm1hdExpc3RcIixcclxuICAgICAgICBcIk51bWJlckZvcm1hdExpc3RcIixcclxuICAgICAgICBcIk91dGRlbnRcIixcclxuICAgICAgICBcIkluZGVudFwiLFxyXG4gICAgICAgIFwifFwiLFxyXG4gICAgICAgIFwiQ3JlYXRlTGlua1wiLFxyXG4gICAgICAgIC8vIHtcclxuICAgICAgICAvLyAgIHRvb2x0aXBUZXh0OiBcIlwiLFxyXG4gICAgICAgIC8vICAgdGVtcGxhdGU6XHJcbiAgICAgICAgLy8gICAgICc8YnV0dG9uIGNsYXNzPVwiZS10YmFyLWJ0biBlLWJ0blwiIHRhYmluZGV4PVwiLTFcIiBpZD1cImN1c3RvbV90YmFyXCIgIHN0eWxlPVwid2lkdGg6MTAwJVwiPicgK1xyXG4gICAgICAgIC8vICAgICAnPGRpdiBjbGFzcz1cImUtdGJhci1idG4tdGV4dFwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDUwMDtcIj48aW1nIHNyYz1cIi9hc3NldHMvaW1nL2ZpbGUtaWNvbi5zdmdcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTt0b3A6IC0ycHg7XCIvPjxkaXYgY2xhc3M9XCJ1cGxvYWRBY3Rpb25zXCI+PGRpdiBpZD1cInVwbG9hZEZyb21Vc2VyXCI+Q29tcHV0ZXIgRmlsZTwvZGl2PjxkaXYgaWQ9XCJyZWxhdGlvbkRvbVwiPlRpY2tldCBBdHRhY2htZW50PC9kaXY+PC9kaXY+PC9kaXY+PC9idXR0b24+JyxcclxuICAgICAgICAvLyB9LFxyXG4gICAgICAgIFwifFwiLFxyXG4gICAgICAgIFwiRm9ybWF0UGFpbnRlclwiLFxyXG4gICAgICAgIFwiQ2xlYXJGb3JtYXRcIixcclxuICAgICAgICBcInxcIixcclxuICAgICAgICBcIlVuZG9cIixcclxuICAgICAgICBcIlJlZG9cIixcclxuICAgICAgICAvLydTb3VyY2VDb2RlJyxcclxuICAgICAgXSxcclxuICAgIH07XHJcbiAgICBpZiAodGhpcy5zaG93VGlja2V0QXR0YWNobWVudCkge1xyXG4gICAgICBjb25zdCBpdGVtID0ge1xyXG4gICAgICAgIHRvb2x0aXBUZXh0OiBcIlwiLFxyXG4gICAgICAgIHRlbXBsYXRlOlxyXG4gICAgICAgICAgJzxidXR0b24gY2xhc3M9XCJlLXRiYXItYnRuIGUtYnRuXCIgdGFiaW5kZXg9XCItMVwiIGlkPVwiY3VzdG9tX3RiYXJcIiAgc3R5bGU9XCJ3aWR0aDoxMDAlXCI+JyArXHJcbiAgICAgICAgICAnPGRpdiBjbGFzcz1cImUtdGJhci1idG4tdGV4dFwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDUwMDtcIj48aW1nIHNyYz1cIi9hc3NldHMvaW1nL2ZpbGUtaWNvbi5zdmdcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIi8+PGRpdiBjbGFzcz1cInVwbG9hZEFjdGlvbnNcIj48ZGl2IGlkPVwidXBsb2FkRnJvbVVzZXJcIj5Db21wdXRlciBGaWxlPC9kaXY+PGRpdiBpZD1cInJlbGF0aW9uRG9tXCI+VGlja2V0IEF0dGFjaG1lbnQ8L2Rpdj48L2Rpdj48L2Rpdj48L2J1dHRvbj4nLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnRvb2xzLml0ZW1zLnNwbGljZSgyMiwgMCwgaXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNvbnRlbnRDaGFuZ2UoYXJncykge1xyXG4gICAgLy8gY29uc3QgdGFibGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInRhYmxlLmUtcnRlLXRhYmxlXCIpO1xyXG4gICAgLy8gdGFibGVzLmZvckVhY2goKHRhYmxlKSA9PiB7XHJcbiAgICAvLyAgIGNvbnN0IGh0bWxUYWJsZSA9IHRhYmxlIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XHJcbiAgICAvLyAgIGh0bWxUYWJsZS5zdHlsZS5tYXJnaW5Cb3R0b20gPSBcIjEwcHhcIjtcclxuICAgIC8vICAgaHRtbFRhYmxlLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gXCJjb2xsYXBzZVwiO1xyXG4gICAgLy8gICBodG1sVGFibGUuc3R5bGUuZW1wdHlDZWxscyA9IFwic2hvd1wiO1xyXG4gICAgLy8gICBjb25zdCB0ZEVsZW1lbnRzID0gdGFibGUucXVlcnlTZWxlY3RvckFsbChcInRkXCIpO1xyXG4gICAgLy8gICB0ZEVsZW1lbnRzLmZvckVhY2goKHRkKSA9PiB7XHJcbiAgICAvLyAgICAgdGQuc3R5bGUuYm9yZGVyID0gXCIxcHggc29saWQgI2FkYjViZFwiO1xyXG4gICAgLy8gICAgIHRkLnN0eWxlLmhlaWdodCA9IFwiMjBweFwiO1xyXG4gICAgLy8gICAgIHRkLnN0eWxlLm1pbldpZHRoID0gXCIyMHB4XCI7XHJcbiAgICAvLyAgICAgdGQuc3R5bGUucGFkZGluZyA9IFwiMnB4IDVweFwiO1xyXG4gICAgLy8gICAgIHRkLnN0eWxlLmJveFNpemluZyA9IFwiYm9yZGVyLWJveFwiO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH0pO1xyXG4gICAgdGhpcy5jaGFuZ2UuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNyZWF0ZSgpOiB2b2lkIHtcclxuICAgIC8vYWRkIHRoZSBsaW5lIGhlaWdodFxyXG4gICAgLy8gdGhpcy5lZGl0b3JNYW5hZ2VyID0gdGhpcy5ydGVPYmouZm9ybWF0dGVyLmVkaXRvck1hbmFnZXI7XHJcbiAgICAvLyBsZXQgc3BsaXRCdXR0b24gPSBuZXcgRHJvcERvd25CdXR0b24oe1xyXG4gICAgLy8gICBpdGVtczogbGluZUhlaWdodF9pdGVtcyxcclxuICAgIC8vICAgaWNvbkNzczogXCJlLWljb25zIGUtbGluZS1zcGFjaW5nXCIsXHJcbiAgICAvLyAgIHNlbGVjdDogdGhpcy5vblNlbGVjdC5iaW5kKHRoaXMpLFxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyBzcGxpdEJ1dHRvbi5hcHBlbmRUbyhcIiNsaW5laGVpZ2h0X3RiYXJcIik7XHJcbiAgICAvLyBhaSBhc3Npc3RcclxuICAgIGxldCBhaWFzc2lzdGFudEJ1dHRvbiA9IG5ldyBEcm9wRG93bkJ1dHRvbih7XHJcbiAgICAgIGl0ZW1zOiB0aGlzLnF1ZXJ5TGlzdCxcclxuICAgICAgLy8gaWNvbkNzczogXCJlLWJ0bi1pY29uIGUtaWNvbnMgZS1hc3Npc3R2aWV3LWljb24gZS1pY29uLWxlZnRcIixcclxuICAgICAgc2VsZWN0OiAoYXJncykgPT4gdGhpcy5haVF1ZXJ5U2VsZWN0ZWRNZW51KGFyZ3MpLFxyXG4gICAgfSk7XHJcbiAgICBhaWFzc2lzdGFudEJ1dHRvbi5hcHBlbmRUbyhcIiNhaV9hc3Npc3RhbnRfYnV0dG9uX3RiYXJfXCIgKyB0aGlzLmVkaXRvcklkKTtcclxuICAgIHRoaXMuY3JlYXRlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uU2VsZWN0KGFyZ3MpIHtcclxuICAgIGlmICh0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuZ2V0VW5kb1JlZG9TdGFjaygpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuc2F2ZURhdGEoKTtcclxuICAgIH1cclxuICAgIGxldCBub2RlczogTm9kZVtdID0gdGhpcy5lZGl0b3JNYW5hZ2VyLmRvbU5vZGUuYmxvY2tOb2RlcygpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgbm9kZXMubGVuZ3RoID4gaTsgaSsrKSB7XHJcbiAgICAgIChub2Rlc1tpXSBhcyBIVE1MRWxlbWVudCkuc3R5bGUubGluZUhlaWdodCA9IGFyZ3MuaXRlbS50ZXh0O1xyXG4gICAgfVxyXG4gICAgdGhpcy5ydGVPYmouZm9ybWF0dGVyLnNhdmVEYXRhKCk7XHJcbiAgICB0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuZW5hYmxlVW5kbyh0aGlzLnJ0ZU9iaik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFpUXVlcnlTZWxlY3RlZE1lbnUoYXJnczogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ3VlT3BlbihhcmdzLml0ZW0udGV4dCk7XHJcbiAgfVxyXG5cclxuICBkaWFsb2d1ZU9wZW4oc2VsZWN0ZWRRdWVyeTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB2YXIgc2VsZWN0aW9uVGV4dCA9IHRoaXMucnRlT2JqLmdldFNlbGVjdGlvbigpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFF1ZXJ5ID0gc2VsZWN0ZWRRdWVyeTtcclxuICAgIGlmIChzZWxlY3Rpb25UZXh0KSB7XHJcbiAgICAgIGxldCByYW5nZTogUmFuZ2UgPSAoXHJcbiAgICAgICAgdGhpcy5ydGVPYmogYXMgYW55XHJcbiAgICAgICkuZm9ybWF0dGVyLmVkaXRvck1hbmFnZXIubm9kZVNlbGVjdGlvbi5nZXRSYW5nZShcclxuICAgICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5jb250ZW50TW9kdWxlLmdldERvY3VtZW50KClcclxuICAgICAgKTtcclxuICAgICAgKHRoaXMucnRlT2JqIGFzIGFueSkuZm9ybWF0dGVyLmVkaXRvck1hbmFnZXIubm9kZVNlbGVjdGlvbi5zYXZlKFxyXG4gICAgICAgIHJhbmdlLFxyXG4gICAgICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmNvbnRlbnRNb2R1bGUuZ2V0RG9jdW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRyb3BWYWxJbmRleCA9IHRoaXMucXVlcnlMaXN0LmZpbmRJbmRleChcclxuICAgICAgICAocSkgPT4gcS50ZXh0LnRvTG93ZXJDYXNlKCkgPT09IHNlbGVjdGVkUXVlcnkudG9Mb3dlckNhc2UoKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnF1ZXJ5Q2F0ZWdvcnkuaW5kZXggPSB0aGlzLmRyb3BWYWxJbmRleDtcclxuICAgICAgdGhpcy5sZWZ0UnRlLnZhbHVlID0gdGhpcy5wcm9tcHRRdWVyeSA9IHNlbGVjdGlvblRleHQ7XHJcbiAgICAgIHRoaXMubGVmdFJ0ZS5yZWZyZXNoVUkoKTtcclxuICAgICAgdGhpcy5BSWRpYWxvZy5zaG93KCk7XHJcbiAgICAgIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9uc0RhdGEoc2VsZWN0ZWRRdWVyeSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLnNob3dNc2cgPSB0cnVlO1xyXG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gICB0aGlzLnNob3dNc2cgPSBmYWxzZTtcclxuICAgICAgLy8gfSwgMzAwMCk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiUGxlYXNlIHNlbGVjdCB0aGUgY29udGVudCB0byBwZXJmb3JtIHRoZSBBSSBvcGVyYXRpb24uXCIpO1xyXG5cclxuICAgICAgdGhpcy5kaWFsb2cuc2hvd05vdGlmaWNhdGlvbihcIkZpcnN0LCBTZWxlY3Qgc29tZSB0ZXh0XCIsIHtcclxuICAgICAgICBzdGF0dXM6IFwiV2FybmluZ1wiLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKHNlbGVjdGVkUXVlcnk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1NlbnRpbWVudENoZWNrID0gZmFsc2U7XHJcbiAgICBzd2l0Y2ggKHNlbGVjdGVkUXVlcnkpIHtcclxuICAgICAgY2FzZSBcIlN1bW1hcml6ZVwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPSBcIlN1bW1hcml6ZSB0aGUgdXBjb21pbmcgc2VudGVuY2Ugc2hvcnRseS5cIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkVsYWJvcmF0ZVwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPSBcIkVsYWJvcmF0ZSBvbiB0aGUgdXBjb21pbmcgc2VudGVuY2UuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJSZXBocmFzZVwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPSB0aGlzLmNoaXBWYWx1ZSArIFwiIHJlcGhyYXNlIHRoZSB1cGNvbWluZyBzZW50ZW5jZS5cIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkNvcnJlY3QgR3JhbW1hclwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPSBcIkNvcnJlY3QgdGhlIGdyYW1tYXIgb2YgdGhlIHVwY29taW5nIHNlbnRlbmNlLlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiVHJhbnNsYXRlXCI6XHJcbiAgICAgICAgdGhpcy5zdWJRdWVyeSA9XHJcbiAgICAgICAgICBcIlRyYW5zbGF0ZSB0aGUgdXBjb21pbmcgc2VudGVuY2UgdG8gXCIgKyB0aGlzLnRyYW5zbGF0ZWxhbmd1YWdlICsgXCIuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJTZW50aW1lbnQgQW5hbHlzaXNcIjpcclxuICAgICAgICB0aGlzLmlzU2VudGltZW50Q2hlY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPVxyXG4gICAgICAgICAgJ0FuYWx5emUgdGhlIHNlbnRpbWVudCBhbmQgZ3JhbW1hciBvZiB0aGUgZm9sbG93aW5nIHBhcmFncmFwaHMgYW5kIHByb3ZpZGUgdGhlIGV4cHJlc3Npb24gc2NvcmUgd2l0aCBhbiBlbW9qaSBmb2xsb3dlZCBieSB0aGUgc2VudGltZW50IGluIHRoZSBmb3JtYXQ6IFwi8J+YiiBOZXV0cmFsXCIuIFxcblxcbk5PVEU6IEF2b2lkIGFueSBhZGRpdGlvbmFsIHRleHQgb3IgZXhwbGFuYXRpb246JztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQUlTdWdlc3N0aW9ucygpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLnByb21wdFF1ZXJ5KSB7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2tlbGV0b25JZFwiKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9XHJcbiAgICAgICAgICBcIlwiO1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJpZ2h0UnRlXCIpIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID1cclxuICAgICAgICAgIFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMuc2VudGltZW50QnV0dG9uLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMucmVnZW5lcmF0ZUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3B5QnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlcGxhY2VCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlhbG9nVmlzaWJsZSkge1xyXG4gICAgICAgICAgdGhpcy5wcm9tcHRRdWVyeSA9IHRoaXMubGVmdFJ0ZS5nZXRUZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBpUmVzdWx0RGF0YSA9IHRoaXMuZ2V0UmVzcG9uc2VGcm9tT3BlbkFJKFxyXG4gICAgICAgICAgdGhpcy5zdWJRdWVyeSxcclxuICAgICAgICAgIHRoaXMucHJvbXB0UXVlcnlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYXBpUmVzdWx0RGF0YS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmlzRGlhbG9nVmlzaWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzRGlhbG9nVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLkFJUmVzdWx0ID0gdGhpcy5pc1NlbnRpbWVudENoZWNrID8gdGhpcy5wcm9tcHRRdWVyeSA6IHJlc3VsdDtcclxuICAgICAgICAgIHRoaXMuc2VudGltZW50QnV0dG9uLmNvbnRlbnQgPSByZXN1bHRcclxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLmluY2x1ZGVzKFwicG9zaXRpdmVcIilcclxuICAgICAgICAgICAgPyBcIvCfmIogUG9zaXRpdmVcIlxyXG4gICAgICAgICAgICA6IHJlc3VsdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwibmVnYXRpdmVcIilcclxuICAgICAgICAgICAgPyBcIvCfmJ4gTmVnYXRpdmVcIlxyXG4gICAgICAgICAgICA6IFwi8J+YkCBOZXV0cmFsXCI7XHJcbiAgICAgICAgICB0aGlzLnNlbnRpbWVudEJ1dHRvbi5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAhdGhpcy5pc1NlbnRpbWVudENoZWNrXHJcbiAgICAgICAgICAgID8gXCJub25lXCJcclxuICAgICAgICAgICAgOiBcIlwiO1xyXG4gICAgICAgICAgdGhpcy5yaWdodFJ0ZS52YWx1ZSA9IHRoaXMuQUlSZXN1bHQ7XHJcbiAgICAgICAgICB2YXIgbm9SZXN1bHRzRm91bmQgPSAhKHRoaXMuQUlSZXN1bHQgfHwgdGhpcy5wcm9tcHRRdWVyeSk7XHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm8tcmVzdWx0cy1mb3VuZFwiKSBhcyBIVE1MRWxlbWVudFxyXG4gICAgICAgICAgKS5zdHlsZS5kaXNwbGF5ID0gbm9SZXN1bHRzRm91bmQgPyBcIlwiIDogXCJub25lXCI7XHJcbiAgICAgICAgICB0aGlzLnJlZ2VuZXJhdGVCdXR0b24uZGlzYWJsZWQgPSBub1Jlc3VsdHNGb3VuZDtcclxuICAgICAgICAgIHRoaXMuY29weUJ1dHRvbi5kaXNhYmxlZCA9IG5vUmVzdWx0c0ZvdW5kO1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlQnV0dG9uLmRpc2FibGVkID0gbm9SZXN1bHRzRm91bmQ7XHJcbiAgICAgICAgICAvLyAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJza2VsZXRvbklkXCIpIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID1cclxuICAgICAgICAgIC8vICAgXCJub25lXCI7XHJcbiAgICAgICAgICAvLyAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyaWdodFJ0ZVwiKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9XHJcbiAgICAgICAgICAvLyAgIG5vUmVzdWx0c0ZvdW5kID8gXCJub25lXCIgOiBcIlwiO1xyXG4gICAgICAgICAgLy8gdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAvLyB0aGlzLnRvYXN0T2JqLnNob3coKTtcclxuICAgIH1cclxuICB9XHJcbiAgZnVsbFJlc3BvbnNlID0gXCJcIjtcclxuICBhc3luYyBnZXRSZXNwb25zZUZyb21PcGVuQUkoXHJcbiAgICBzdWJRdWVyeTogc3RyaW5nLFxyXG4gICAgcHJvbXB0UXVlcnk6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICB0aGlzLmZ1bGxSZXNwb25zZSA9IFwiXCI7XHJcbiAgICBjb25zdCBtZXNzYWdlcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIHJvbGU6IFwic3lzdGVtXCIsXHJcbiAgICAgICAgY29udGVudDogc3ViUXVlcnkuaW5jbHVkZXMoXHJcbiAgICAgICAgICBcImVtb2ppIGZvbGxvd2VkIGJ5IHRoZSBzZW50aW1lbnQgaW4gdGhlIGZvcm1hdFwiXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyBcIllvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudC4gUGxlYXNlIHJlc3BvbmQgaW4gc3RyaW5nIGZvcm1hdC5cIlxyXG4gICAgICAgICAgOiBcIk5PVEU6IFJldHVybiBzYW1lIGh0bWwgZm9ybWF0IGp1c3QgZG8gY2hhbmdlcyBjb250ZW50IG9ubHkuIGRvbid0IGNoYW5nZSBodG1sIGZvcm1hdHMuXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICByb2xlOiBcInVzZXJcIixcclxuICAgICAgICBjb250ZW50OiBgJHtzdWJRdWVyeX0gJHtwcm9tcHRRdWVyeX1gLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdCBwYXJhbSA9IHtcclxuICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VzLFxyXG4gICAgICBtYXhfdG9rZW5zOiAxMDAwLFxyXG4gICAgICB0ZW1wZXJhdHVyZTogMC43LFxyXG4gICAgICB0b3BfcDogMSxcclxuICAgICAgZnJlcXVlbmN5X3BlbmFsdHk6IDAsXHJcbiAgICAgIHByZXNlbmNlX3BlbmFsdHk6IDAsXHJcbiAgICB9O1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCJhcGkvYWkvY2hhdC1zdHJlYW1cIiwge1xyXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBhcmFtKSxcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCk7XHJcbiAgICAgIH1cclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2tlbGV0b25JZFwiKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9XHJcbiAgICAgICAgXCJub25lXCI7XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJpZ2h0UnRlXCIpIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcclxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xyXG4gICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XHJcbiAgICAgICAgaWYgKGRvbmUpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjaHVuayA9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KTtcclxuICAgICAgICBjb25zdCBsaW5lcyA9IGNodW5rLnNwbGl0KFwiXFxuXCIpO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xyXG4gICAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChcImRhdGE6IFwiKSkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gbGluZS5zbGljZSg2KTtcclxuICAgICAgICAgICAgaWYgKGRhdGEgPT09IFwiW0RPTkVdXCIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mdWxsUmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBwYXJzZWQuY2hvaWNlcz8uWzBdPy5kZWx0YT8uY29udGVudDtcclxuICAgICAgICAgICAgICBpZiAoY29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mdWxsUmVzcG9uc2UgKz0gY29udGVudDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiUGFyc2UgZXJyb3I6XCIsIGUsIFwiRGF0YTpcIiwgZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuZnVsbFJlc3BvbnNlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIlN0cmVhbSBlcnJvcjpcIiwgZXJyb3IpO1xyXG4gICAgICB0aHJvdyBlcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpYWxvZ1Nob3coKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLnJlZ2VuZXJhdGVCdXR0b24hLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgIC8vICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zKCk7XHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHRoaXMuY29weUJ1dHRvbiEuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLmNvcHlUZXh0VG9DbGlwYm9hcmQodGhpcy5BSVJlc3VsdCk7XHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHRoaXMucmVwbGFjZUJ1dHRvbiEuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgLy8gICBsZXQgcmFuZ2U6IFJhbmdlID0gKFxyXG4gICAgLy8gICAgIHRoaXMucnRlT2JqIGFzIGFueVxyXG4gICAgLy8gICApLmZvcm1hdHRlci5lZGl0b3JNYW5hZ2VyLm5vZGVTZWxlY3Rpb24uZ2V0UmFuZ2UoXHJcbiAgICAvLyAgICAgKHRoaXMucnRlT2JqIGFzIGFueSkuY29udGVudE1vZHVsZS5nZXREb2N1bWVudCgpXHJcbiAgICAvLyAgICk7XHJcbiAgICAvLyAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmZvcm1hdHRlci5lZGl0b3JNYW5hZ2VyLm5vZGVTZWxlY3Rpb24ucmVzdG9yZShyYW5nZSk7XHJcbiAgICAvLyAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmV4ZWN1dGVDb21tYW5kKFwiaW5zZXJ0SFRNTFwiLCB0aGlzLkFJUmVzdWx0LCB7XHJcbiAgICAvLyAgICAgdW5kbzogdHJ1ZSxcclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyAgIHRoaXMuY2xvc2VEaWFsb2coKTtcclxuICAgIC8vIH0pO1xyXG4gICAgKHRoaXMuQUlkaWFsb2cgYXMgRGlhbG9nQ29tcG9uZW50KS5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VEaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLkFJZGlhbG9nLmhpZGUoKTtcclxuICAgIHRoaXMuaXNEaWFsb2dWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLnJpZ2h0UnRlLnZhbHVlID0gXCJcIjtcclxuICAgIHRoaXMubGVmdFJ0ZS52YWx1ZSA9IFwiXCI7XHJcbiAgICB0aGlzLnByb21wdFF1ZXJ5ID0gXCJcIjtcclxuICAgIHRoaXMuY2hpcFZhbHVlID0gXCJTdGFuZGFyZFwiO1xyXG4gICAgdGhpcy5BSVJlc3VsdCA9IFwiXCI7XHJcbiAgICB0aGlzLmRyb3BWYWxJbmRleCA9IDA7XHJcbiAgICB0aGlzLnNlbGVjdGVkUXVlcnkgPSBcIlJlcGhyYXNlXCI7XHJcbiAgICB0aGlzLnNlbnRpbWVudEJ1dHRvbi5jb250ZW50ID0gXCLwn5iKIE5ldXRyYWxcIjtcclxuICAgIHRoaXMuc2l6ZSA9IFwiXCI7XHJcbiAgfVxyXG5cclxuICBjb3B5VGV4dFRvQ2xpcGJvYXJkKHRleHQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnJpZ2h0UnRlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucmlnaHRSdGUuc2VsZWN0QWxsKCk7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiTm8gc2VsZWN0ZWQgY29udGVudFwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICBjb25zdCBzdWNjZXNzID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xyXG4gICAgICBpZiAoc3VjY2Vzcykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiVGV4dCBjb3BpZWQgdG8gY2xpcGJvYXJkIHN1Y2Nlc3NmdWxseSFcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjb3B5IHRleHRcIik7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNvcHkgdGV4dDogXCIsIGVycik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHtcclxuICAgIC8vICAgbmF2aWdhdG9yLmNsaXBib2FyZFxyXG4gICAgLy8gICAgIC53cml0ZVRleHQodGV4dClcclxuICAgIC8vICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZyhcIlRleHQgY29waWVkIHRvIGNsaXBib2FyZCBzdWNjZXNzZnVsbHkhXCIpO1xyXG4gICAgLy8gICAgIH0pXHJcbiAgICAvLyAgICAgLmNhdGNoKChlcnIpID0+IHtcclxuICAgIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY29weSB0ZXh0OiBcIiwgZXJyKTtcclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIC8vIEZhbGxiYWNrIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHRoZSBDbGlwYm9hcmQgQVBJXHJcbiAgICAvLyAgIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIpO1xyXG4gICAgLy8gICB0ZXh0YXJlYS52YWx1ZSA9IHRleHQ7XHJcbiAgICAvLyAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dGFyZWEpO1xyXG4gICAgLy8gICB0ZXh0YXJlYS5zZWxlY3QoKTtcclxuICAgIC8vICAgdHJ5IHtcclxuICAgIC8vICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJUZXh0IGNvcGllZCB0byBjbGlwYm9hcmQgdXNpbmcgZXhlY0NvbW1hbmRcIik7XHJcbiAgICAvLyAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgLy8gICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY29weSB0ZXh0OiBcIiwgZXJyKTtcclxuICAgIC8vICAgfSBmaW5hbGx5IHtcclxuICAgIC8vICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRleHRhcmVhKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgb25PdmVybGF5Q2xpY2soKTogdm9pZCB7XHJcbiAgICBsZXQgYWN0aXZlRWxlOiBIVE1MRWxlbWVudCB8IG51bGwgPSB0aGlzLkFJZGlhbG9nLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgXCIuY2hhcl9ibG9jay5lLWFjdGl2ZVwiXHJcbiAgICApO1xyXG4gICAgaWYgKGFjdGl2ZUVsZSkge1xyXG4gICAgICBhY3RpdmVFbGUuY2xhc3NMaXN0LnJlbW92ZShcImUtYWN0aXZlXCIpO1xyXG4gICAgfVxyXG4gICAgLy90aGlzLmNsb3NlRGlhbG9nKCk7XHJcbiAgfVxyXG5cclxuICBvblF1ZXJ5U2VsZWN0KGFyZ3MpIHtcclxuICAgIC8vIHRoaXMuY2hpcExpc3Quc2VsZWN0ZWRDaGlwcyA9IDA7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZWxhbmd1YWdlID0gXCJFTlwiO1xyXG4gICAgdGhpcy5zZWxlY3RlZFF1ZXJ5ID0gYXJncy5pdGVtRGF0YS50ZXh0O1xyXG4gICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShhcmdzLml0ZW1EYXRhLnRleHQpO1xyXG4gIH1cclxuXHJcbiAgb25MYW5ndWFnZVNlbGVjdChhcmdzOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudHJhbnNsYXRlbGFuZ3VhZ2UgPSBhcmdzLml0ZW1EYXRhLmlkO1xyXG4gICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShcIlRyYW5zbGF0ZVwiKTtcclxuICB9XHJcblxyXG4gIG9uQ2hpcENsaWNrKGFyZ3M6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGlwVmFsdWUgPSBhcmdzLml0ZW1EYXRhLnRleHQ7XHJcbiAgICAvLyDkuovku7bkvJrop6blj5HkuKTmrKEg5b+F6aG75Yik5patYXJncy50ZXh05piv5ZCm5pyJ5YC8XHJcbiAgICBpZiAoYXJncy5pdGVtRGF0YS50ZXh0KSB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKFwiUmVwaHJhc2VcIik7XHJcbiAgfVxyXG5cclxuICBfdG9vbGJhckNsaWNrKGFyZ3MpIHtcclxuICAgIHRoaXMudG9vbGJhckNsaWNrLmVtaXQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBfYWN0aW9uQmVnaW4oYXJncykge1xyXG4gICAgdGhpcy5hY3Rpb25CZWdpbi5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuICBfaW5wdXQoYXJncykge1xyXG4gICAgdGhpcy5pbnB1dC5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuICBfYWN0aW9uQ29tcGxldGUoYXJncykge1xyXG4gICAgaWYgKGFyZ3MucmVxdWVzdFR5cGUgPT0gXCJVTFwiKSB7XHJcbiAgICAgIGlmIChhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuc3R5bGUubGlzdFN0eWxlVHlwZSA9PSBcImRhc2hcIikge1xyXG4gICAgICAgIC8vIEFwcGx5IGN1c3RvbSBzdHlsaW5nIGZvciBkYXNoIGJ1bGxldHNcclxuICAgICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuc3R5bGUubGlzdFN0eWxlSW1hZ2UgPVxyXG4gICAgICAgICAgXCJ1cmwoJy4uLy4uLy4uL2Fzc2V0cy9pbWcvYnVsbGV0LWRhc2guc3ZnJylcIjtcclxuICAgICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuc3R5bGUubGlzdFN0eWxlVHlwZSA9IFwibm9uZVwiO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGFyZ3MucmVxdWVzdFR5cGUgPT0gXCJPTFwiKSB7XHJcbiAgICAgIGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFxyXG4gICAgICAgIFwiY3VzdG9tLWxpc3RcIixcclxuICAgICAgICBcInBhcmVudGhlc2VzXCJcclxuICAgICAgKTtcclxuICAgICAgaWYgKGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5zdHlsZS5saXN0U3R5bGVUeXBlID09IFwicGFyZW50aGVzZXNcIikge1xyXG4gICAgICAgIGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QgPSBcImN1c3RvbS1saXN0XCI7XHJcbiAgICAgICAgYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJwYXJlbnRoZXNlc1wiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5hY3Rpb25Db21wbGV0ZS5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgX2ZvY3VzKGFyZ3MpIHtcclxuICAgIHRoaXMuZm9jdXMuZW1pdChhcmdzKTtcclxuICB9XHJcbiAgX2JsdXIoYXJncykge1xyXG4gICAgdGhpcy5ibHVyLmVtaXQoYXJncyk7XHJcbiAgfVxyXG4gIF9kaWFsb2dPcGVuKGFyZ3MpIHtcclxuICAgIGlmIChhcmdzLmVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZS1ydGUtZWRpdC10YWJsZVwiKSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB2YXIgcm93Qm94ID0gKFxyXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5lLXRhYmxlLXJvdy5lLW51bWVyaWN0ZXh0Ym94XCIpWzBdIGFzIGFueVxyXG4gICAgICAgICkuZWoyX2luc3RhbmNlc1swXTtcclxuICAgICAgICB2YXIgY29sdW1uQm94ID0gKFxyXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgXCIuZS10YWJsZS1jb2x1bW4uZS1udW1lcmljdGV4dGJveFwiXHJcbiAgICAgICAgICApWzBdIGFzIGFueVxyXG4gICAgICAgICkuZWoyX2luc3RhbmNlc1swXTtcclxuICAgICAgICByb3dCb3guY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJvd0JveC52YWx1ZSA+IDUwKSB7XHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgICAgICAgXCIuZS1ydGUtZWxlbWVudHMuZS1pbnNlcnQtdGFibGVcIlxyXG4gICAgICAgICAgICAgIClbMF0gYXMgYW55XHJcbiAgICAgICAgICAgICkuZWoyX2luc3RhbmNlc1swXS5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nLnNob3dOb3RpZmljYXRpb24oXHJcbiAgICAgICAgICAgICAgXCJUaGUgcm93IG51bWJlciBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNTAuXCIsXHJcbiAgICAgICAgICAgICAgeyBzdGF0dXM6IFwiV2FybmluZ1wiIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgICAgICAgXCIuZS1ydGUtZWxlbWVudHMuZS1pbnNlcnQtdGFibGVcIlxyXG4gICAgICAgICAgICAgIClbMF0gYXMgYW55XHJcbiAgICAgICAgICAgICkuZWoyX2luc3RhbmNlc1swXS5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sdW1uQm94LmNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICAgIGlmIChjb2x1bW5Cb3gudmFsdWUgPiAyNSkge1xyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgICAgIFwiLmUtcnRlLWVsZW1lbnRzLmUtaW5zZXJ0LXRhYmxlXCJcclxuICAgICAgICAgICAgICApWzBdIGFzIGFueVxyXG4gICAgICAgICAgICApLmVqMl9pbnN0YW5jZXNbMF0uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5zaG93Tm90aWZpY2F0aW9uKFxyXG4gICAgICAgICAgICAgIFwiVGhlIGNvbHVtbiBudW1iZXIgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1LlwiLFxyXG4gICAgICAgICAgICAgIHsgc3RhdHVzOiBcIldhcm5pbmdcIiB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgICAgIFwiLmUtcnRlLWVsZW1lbnRzLmUtaW5zZXJ0LXRhYmxlXCJcclxuICAgICAgICAgICAgICApWzBdIGFzIGFueVxyXG4gICAgICAgICAgICApLmVqMl9pbnN0YW5jZXNbMF0uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9hZnRlclBhc3RlQ2xlYW51cChhcmdzKSB7XHJcbiAgICBhcmdzLnZhbHVlID0gdGhpcy51bmVzY2FwZUh0bWwoYXJncy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICB1bmVzY2FwZUh0bWwoZXNjYXBlZEh0bWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZXNjYXBlZEh0bWxcclxuICAgICAgLnJlcGxhY2UoLyZsdDsvZywgXCI8XCIpXHJcbiAgICAgIC5yZXBsYWNlKC8mZ3Q7L2csIFwiPlwiKVxyXG4gICAgICAucmVwbGFjZSgvJmFtcDsvZywgXCImXCIpXHJcbiAgICAgIC5yZXBsYWNlKC8mcXVvdDsvZywgJ1wiJylcclxuICAgICAgLnJlcGxhY2UoLyZhcG9zOy9nLCBcIidcIik7XHJcbiAgfVxyXG4gIGhpZGVUb2FzdCgpIHtcclxuICAgIHRoaXMuc2hvd01zZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25ab29tKCkge1xyXG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gXCJsYXJnZXN0XCIpIHtcclxuICAgICAgdGhpcy5zaXplID0gXCJcIjsgLy8g5oGi5aSN5Yiw5Y6f5aeL5aSn5bCPXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNpemUgPSBcImxhcmdlc3RcIjsgLy8g6K6+572u5Li65pyA5aSn5YyWXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdlbmVyYXRlQ2xpY2soKSB7XHJcbiAgICB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIGNvcHlDbGljaygpIHtcclxuICAgIHRoaXMuY29weVRleHRUb0NsaXBib2FyZCh0aGlzLkFJUmVzdWx0KTtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VDbGljaygpIHtcclxuICAgIGxldCByYW5nZTogUmFuZ2UgPSAoXHJcbiAgICAgIHRoaXMucnRlT2JqIGFzIGFueVxyXG4gICAgKS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLmdldFJhbmdlKFxyXG4gICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5jb250ZW50TW9kdWxlLmdldERvY3VtZW50KClcclxuICAgICk7XHJcbiAgICAodGhpcy5ydGVPYmogYXMgYW55KS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLnJlc3RvcmUocmFuZ2UpO1xyXG4gICAgKHRoaXMucnRlT2JqIGFzIGFueSkuZXhlY3V0ZUNvbW1hbmQoXCJpbnNlcnRIVE1MXCIsIHRoaXMuQUlSZXN1bHQsIHtcclxuICAgICAgdW5kbzogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jbG9zZURpYWxvZygpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZWRpdG9yX2JveFwiIGlkPVwiY29udGFpbmVyXCI+XHJcbiAgPGVqcy1yaWNodGV4dGVkaXRvclxyXG4gICAgI2VkaXRvclxyXG4gICAgW2lkXT1cImVkaXRvcklkXCJcclxuICAgIFtoZWlnaHRdPVwiaGVpZ2h0XCJcclxuICAgIFtzYXZlSW50ZXJ2YWxdPVwiMFwiXHJcbiAgICBbYXV0b1NhdmVPbklkbGVdPVwiYXV0b1NhdmVPbklkbGVcIlxyXG4gICAgW3Rvb2xiYXJTZXR0aW5nc109XCJ0b29sc1wiXHJcbiAgICBbYnVsbGV0Rm9ybWF0TGlzdF09XCJidWxsZXRGb3JtYXRMaXN0XCJcclxuICAgIFtudW1iZXJGb3JtYXRMaXN0XT1cIm51bWJlckZvcm1hdExpc3RcIlxyXG4gICAgW2ZvbnRGYW1pbHldPVwiZmFtaWx5XCJcclxuICAgIFtmb250U2l6ZV09XCJmb250U2l6ZVwiXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgW2luc2VydEltYWdlU2V0dGluZ3NdPVwiaW5zZXJ0SW1hZ2VTZXR0aW5nc1wiXHJcbiAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgIChhY3Rpb25CZWdpbik9XCJfYWN0aW9uQmVnaW4oJGV2ZW50KVwiXHJcbiAgICAoY2hhbmdlKT1cIm9uQ29udGVudENoYW5nZSgkZXZlbnQpXCJcclxuICAgIChjcmVhdGVkKT1cIm9uQ3JlYXRlKClcIlxyXG4gICAgKHRvb2xiYXJDbGljayk9XCJfdG9vbGJhckNsaWNrKCRldmVudClcIlxyXG4gICAgKGlucHV0KT1cIl9pbnB1dCgkZXZlbnQpXCJcclxuICAgIChmb2N1cyk9XCJfZm9jdXMoJGV2ZW50KVwiXHJcbiAgICAoYmx1cik9XCJfYmx1cigkZXZlbnQpXCJcclxuICAgIChhY3Rpb25Db21wbGV0ZSk9XCJfYWN0aW9uQ29tcGxldGUoJGV2ZW50KVwiXHJcbiAgICAoZGlhbG9nT3Blbik9XCJfZGlhbG9nT3BlbigkZXZlbnQpXCJcclxuICAgIChhZnRlclBhc3RlQ2xlYW51cCk9XCJfYWZ0ZXJQYXN0ZUNsZWFudXAoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvZWpzLXJpY2h0ZXh0ZWRpdG9yPlxyXG4gIDxlanMtZGlhbG9nXHJcbiAgICAjQUlkaWFsb2dcclxuICAgIGlkPVwiQUlkaWFsb2dcIlxyXG4gICAgW25nQ2xhc3NdPVwic2l6ZVwiXHJcbiAgICBbdmlzaWJsZV09XCJmYWxzZVwiXHJcbiAgICBbdGFyZ2V0XT1cInRhcmdldFwiXHJcbiAgICBbaXNNb2RhbF09XCJ0cnVlXCJcclxuICAgIFtoZWlnaHRdPVwiZGlhbG9nSGVpZ2h0XCJcclxuICAgIFt3aWR0aF09XCJkaWFsb2dXaWR0aFwiXHJcbiAgICBtYXhIZWlnaHQ9XCI4MCVcIlxyXG4gICAgY3NzQ2xhc3M9XCJlLXJ0ZS1lbGVtZW50cyBjdXN0b20tZGlhbG9nLXJ0ZVwiXHJcbiAgICB6SW5kZXg9XCIxMDAwXCJcclxuICAgIChjbG9zZSk9XCJjbG9zZURpYWxvZygpXCJcclxuICAgIChvdmVybGF5Q2xpY2spPVwib25PdmVybGF5Q2xpY2soKVwiXHJcbiAgICAob3Blbik9XCJkaWFsb2dTaG93KClcIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+QUkgQXNzaXN0PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYnV0dG9uc1wiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93Wm9vbUJ0blwiIGNsYXNzPVwiaGVhZGVyLXpvb21cIiAoY2xpY2spPVwib25ab29tKClcIj5cclxuICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItaWNvblwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2l6ZSA9PT0gJ2xhcmdlc3QnXCJcclxuICAgICAgICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL2ltZy9kaWFsb2ctc2hyaW5rLnN2Z1wiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICBjbGFzcz1cImhlYWRlci1pY29uXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJzaXplICE9PSAnbGFyZ2VzdCdcIlxyXG4gICAgICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvaW1nL2RpYWxvZy1ncm93LnN2Z1wiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYnRuXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cclxuICAgICAgICAgIDxpbWcgY2xhc3M9XCJoZWFkZXItaWNvblwiIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9pbWcvZGlhbG9nLWNsb3NlLnN2Z1wiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZm9vdGVyVGVtcGxhdGU+XHJcbiAgICAgIDxkaXYgaWQ9XCJkaWFsb2ctZm9vdGVyLWNvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXJvdy0wXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3VzY29sLTBcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGxlZnRcIlxyXG4gICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImN1c2NvbC0xXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJcclxuICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0OyB3aWR0aDogMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGVqcy1idXR0b25cclxuICAgICAgICAgICAgICAgICNzZW50aW1lbnRCdXR0b25cclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ9XCLwn5iKIE5ldXRyYWxcIlxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBjc3NDbGFzcz1cInNlbnRpbWVudFwiXHJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGVqcy1idXR0b25cclxuICAgICAgICAgICAgICAgICNjb3B5QnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjb250ZW50PVwiQ29weVwiXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29weS1idG5cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvcHlDbGljaygpXCJcclxuICAgICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgZWpzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgI3JlcGxhY2VCdXR0b25cclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ9XCJSZXBsYWNlXCJcclxuICAgICAgICAgICAgICAgIGlzUHJpbWFyeT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVwbGFjZUNsaWNrKClcIlxyXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWNvbnRlbnRcIiBzdHlsZT1cImhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tcm93LTBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXNjb2wtMFwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cclxuICAgICAgICAgICAgPGVqcy1kcm9wZG93bmxpc3RcclxuICAgICAgICAgICAgICAjcXVlcnlDYXRlZ29yeVxyXG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDIwMHB4XCJcclxuICAgICAgICAgICAgICBpZD1cInF1ZXJ5Q2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInF1ZXJ5TGlzdFwiXHJcbiAgICAgICAgICAgICAgaW5kZXg9XCIwXCJcclxuICAgICAgICAgICAgICBbZmllbGRzXT1cInsgdGV4dDogJ3RleHQnLCB2YWx1ZTogJ2lkJyB9XCJcclxuICAgICAgICAgICAgICAoc2VsZWN0KT1cIm9uUXVlcnlTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBSZXBocmFzZVxyXG4gICAgICAgICAgICA8L2Vqcy1kcm9wZG93bmxpc3Q+XHJcbiAgICAgICAgICAgIDxlanMtZHJvcGRvd25saXN0XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFF1ZXJ5ID09ICdSZXBocmFzZSdcIlxyXG4gICAgICAgICAgICAgIGlkPVwiY2hpcHMtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAjY2hpcExpc3RcclxuICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNjBweFwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjaGlwVmFsdWVcIlxyXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInJlcGhyYXNlVHlsZUxpc3RcIlxyXG4gICAgICAgICAgICAgIFtmaWVsZHNdPVwieyB0ZXh0OiAndGV4dCcsIHZhbHVlOiAnaWQnIH1cIlxyXG4gICAgICAgICAgICAgIChzZWxlY3QpPVwib25DaGlwQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9lanMtZHJvcGRvd25saXN0PlxyXG4gICAgICAgICAgICA8ZWpzLWRyb3Bkb3dubGlzdFxyXG4gICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRRdWVyeSA9PSAnVHJhbnNsYXRlJ1wiXHJcbiAgICAgICAgICAgICAgI2xhbmd1YWdlQ2F0ZWdvcnlcclxuICAgICAgICAgICAgICBpbmRleD1cIjBcIlxyXG4gICAgICAgICAgICAgIGlkPVwibGFuZ3VhZ2UtQ2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImxhbmd1YWdlTGlzdFwiXHJcbiAgICAgICAgICAgICAgW2ZpZWxkc109XCJ7IHRleHQ6ICd0ZXh0JywgdmFsdWU6ICdpZCcgfVwiXHJcbiAgICAgICAgICAgICAgKHNlbGVjdCk9XCJvbkxhbmd1YWdlU2VsZWN0KCRldmVudClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvZWpzLWRyb3Bkb3dubGlzdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImN1c2NvbC0xXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJcclxuICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPCEtLSA8ZWpzLWNoaXBsaXN0XHJcbiAgICAgICAgICAgICAgaWQ9XCJjaGlwcy1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICNjaGlwTGlzdFxyXG4gICAgICAgICAgICAgIFtjaGlwc109XCJbJ1N0YW5kYXJkJywgJ0ZsdWVudCcsICdQcm9mZXNzaW9uYWwnXVwiXHJcbiAgICAgICAgICAgICAgc2VsZWN0aW9uPVwiU2luZ2xlXCJcclxuICAgICAgICAgICAgICBjc3NDbGFzcz1cImUtb3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkQ2hpcHNdPVwiWzBdXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGlwQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9lanMtY2hpcGxpc3Q+IC0tPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgZWpzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICNyZWdlbmVyYXRlQnV0dG9uXHJcbiAgICAgICAgICAgICAgY29udGVudD1cIlJlZ2VuZXJhdGVcIlxyXG4gICAgICAgICAgICAgIGlzUHJpbWFyeT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIGRpc2FibGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZWdlbmVyYXRlQ2xpY2soKVwiXHJcbiAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tcm93LTFcIiBzdHlsZT1cImhlaWdodDogY2FsYygxMDAlIC0gNDBweClcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjdXNjb2wtMFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwiXHJcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBsZWZ0O1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdDsgaGVpZ2h0OiAxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPGVqcy1yaWNodGV4dGVkaXRvclxyXG4gICAgICAgICAgICAgICAgI2xlZnRSdGVcclxuICAgICAgICAgICAgICAgIGlkPVwibGVmdFJ0ZVwiXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxMDAlXCJcclxuICAgICAgICAgICAgICAgIFt0b29sYmFyU2V0dGluZ3NdPVwieyBlbmFibGU6IGZhbHNlIH1cIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBbmFseXNpcyBvZiBBSSBTdXBwb3J0XCJcclxuICAgICAgICAgICAgICAgIGNzc0NsYXNzPVwiZS1vdXRsaW5lXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9lanMtcmljaHRleHRlZGl0b3I+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3VzY29sLTFcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IGxlZnQ7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCVcIj5cclxuICAgICAgICAgICAgICA8ZWpzLXJpY2h0ZXh0ZWRpdG9yXHJcbiAgICAgICAgICAgICAgICAjcmlnaHRSdGVcclxuICAgICAgICAgICAgICAgIGlkPVwicmlnaHRSdGVcIlxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZ1bGxSZXNwb25zZVwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbGJhclNldHRpbmdzXT1cInsgZW5hYmxlOiBmYWxzZSB9XCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQW5hbHlzaXMgb2YgQUkgU3VwcG9ydFwiXHJcbiAgICAgICAgICAgICAgICBjc3NDbGFzcz1cImUtb3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvZWpzLXJpY2h0ZXh0ZWRpdG9yPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibm8tcmVzdWx0cy1mb3VuZFwiXHJcbiAgICAgICAgICAgICAgICBpZD1cIm5vLXJlc3VsdHMtZm91bmRcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lOyBoZWlnaHQ6IDI0NHB4OyBhbGlnbi1jb250ZW50OiBjZW50ZXJcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNTBcIlxyXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjUwXCJcclxuICAgICAgICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Nkbi1ib2xkZGVzay9hZ2VudC1hbmd1bGFyLWFwcC9pbWFnZXMvbGlnaHQvbm8tcmVjb3Jkcy13YXJuaW5nLnN2Z1wiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5ObyByZXN1bHRzIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBpZD1cInNrZWxldG9uSWRcIj5cclxuICAgICAgICAgICAgICAgIDxlanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgICAgI3NrZWxldG9uSWQxXHJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwiUmVjdGFuZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICAgICAgICA+PC9lanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgIDxlanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgICAgI3NrZWxldG9uSWQyXHJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwiUmVjdGFuZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiOTAlXCJcclxuICAgICAgICAgICAgICAgID48L2Vqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGVqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAjc2tlbGV0b25JZDNcclxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJSZWN0YW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCI3MCVcIlxyXG4gICAgICAgICAgICAgICAgPjwvZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICAgICNza2VsZXRvbklkNFxyXG4gICAgICAgICAgICAgICAgICBzaGFwZT1cIlJlY3RhbmdsZVwiXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjUwJVwiXHJcbiAgICAgICAgICAgICAgICA+PC9lanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgIDxlanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgICAgI3NrZWxldG9uSWQ1XHJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwiUmVjdGFuZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMzAlXCJcclxuICAgICAgICAgICAgICAgID48L2Vqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGVqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAjc2tlbGV0b25JZDZcclxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJSZWN0YW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMCVcIlxyXG4gICAgICAgICAgICAgICAgPjwvZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2Vqcy1kaWFsb2c+XHJcbiAgPCEtLSA8ZGl2IGNsYXNzPVwidG9hc3RcIiAqbmdJZj1cInNob3dNc2dcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwidG9hc3RfdGV4dFwiPkZpcnN0LCBTZWxlY3Qgc29tZSB0ZXh0PC9zcGFuXHJcbiAgICA+PHNwYW4gY2xhc3M9XCJjbG9zZV9pY29uXCIgKGNsaWNrKT1cImhpZGVUb2FzdCgpXCI+PC9zcGFuPlxyXG4gIDwvZGl2PiAtLT5cclxuPC9kaXY+XHJcbiJdfQ==
710
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vcmljaHRleHRlZGl0b3IvaW5kZXguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vcmljaHRleHRlZGl0b3IvaW5kZXguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBT3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7OztBQVdqRCxNQUFNLE9BQU8sdUJBQXVCO0lBeUl4QjtJQUNBO0lBQ0E7SUF6SUgsTUFBTSxDQUEwQjtJQUVoQyxhQUFhLENBQXlCO0lBRXRDLE9BQU8sQ0FBMkI7SUFFbEMsUUFBUSxDQUEyQjtJQUNNLFFBQVEsQ0FBbUI7SUFFcEUsZUFBZSxDQUFtQjtJQUVsQyxnQkFBZ0IsQ0FBbUI7SUFFbkMsVUFBVSxDQUFtQjtJQUU3QixhQUFhLENBQW1CO0lBQ3ZDLGlGQUFpRjtJQUV4RSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQ3RCLFlBQVksR0FBRyxHQUFHLENBQUM7SUFDbkIsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUNoQixjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLGNBQWM7SUFDcEMsbUJBQW1C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LGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IERyb3BEb3duTGlzdENvbXBvbmVudCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1kcm9wZG93bnNcIjtcclxuaW1wb3J0IHtcclxuICBSaWNoVGV4dEVkaXRvckNvbXBvbmVudCxcclxuICBUb29sYmFyU2V0dGluZ3NNb2RlbCxcclxufSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItcmljaHRleHRlZGl0b3JcIjtcclxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWJ1dHRvbnNcIjtcclxuaW1wb3J0IHsgRHJvcERvd25CdXR0b24gfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItc3BsaXRidXR0b25zXCI7XHJcbmltcG9ydCB7IERpYWxvZ0NvbXBvbmVudCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1wb3B1cHNcIjtcclxuLy8gc2VydmljZVxyXG4vLyBpbXBvcnQgeyBQYkZ1blNlcnZpY2UgfSBmcm9tIFwiQGFwcC9zZXJ2aWNlcy9wYi1mdW4uc2VydmljZVwiO1xyXG4vLyBpbXBvcnQgeyBTaGFyZWRTeW5jZnVzaW9uTW9kdWxlIH0gZnJvbSBcIkBhcHAvbW9kdWxlL3N5bmNmdXNpb25Nb2R1bGVcIjtcclxuaW1wb3J0IHsgT3BlbkFpTW9kZWxSVEUgfSBmcm9tIFwiLi9vcGVuYXBpXCI7XHJcbmltcG9ydCB7IGxpbmVIZWlnaHRfaXRlbXMgfSBmcm9tIFwiLi9kYXRhLWNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBmb250RmFtaWx5LCBzaXplIH0gZnJvbSBcIi4vZGF0YS1jb25maWdcIjtcclxuaW1wb3J0IHsgZ2V0QUlDb25maWcsIGlzQUlDb25maWdWYWxpZCwgQUlDb25maWcgfSBmcm9tIFwiLi9haS1jb25maWdcIjtcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlL2RpYWxvZy5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJycy1yaWNodGV4dC1lZGl0b3JcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2luZGV4LmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIC8vIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgLy8gaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU2hhcmVkU3luY2Z1c2lvbk1vZHVsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSaWNodGV4dGVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZChcImVkaXRvclwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcnRlT2JqOiBSaWNoVGV4dEVkaXRvckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicXVlcnlDYXRlZ29yeVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcXVlcnlDYXRlZ29yeSE6IERyb3BEb3duTGlzdENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwibGVmdFJ0ZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgbGVmdFJ0ZSE6IFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJyaWdodFJ0ZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmlnaHRSdGUhOiBSaWNoVGV4dEVkaXRvckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiQUlkaWFsb2dcIiwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIEFJZGlhbG9nITogRGlhbG9nQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJzZW50aW1lbnRCdXR0b25cIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgcHVibGljIHNlbnRpbWVudEJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicmVnZW5lcmF0ZUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmVnZW5lcmF0ZUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiY29weUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgY29weUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicmVwbGFjZUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmVwbGFjZUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICAvLyBAVmlld0NoaWxkKFwiY2hpcExpc3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBjaGlwTGlzdCE6IENoaXBMaXN0Q29tcG9uZW50O1xyXG5cclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgQElucHV0KCkgdmFsdWUgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIGVkaXRvcklkID0gXCJlZGl0b3JJZFwiO1xyXG4gIEBJbnB1dCgpIHNhdmVJbnRlcnZhbCA9IDUwMDtcclxuICBASW5wdXQoKSBoZWlnaHQgPSBcImF1dG9cIjtcclxuICBASW5wdXQoKSBhdXRvU2F2ZU9uSWRsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSB0YXJnZXQgPSBcIiNtYWluUGFnZVwiOyAvLyBkaWFsb2cg5by556qX54i257qnXHJcbiAgQElucHV0KCkgaW5zZXJ0SW1hZ2VTZXR0aW5ncyA9IHtcclxuICAgIHNhdmVGb3JtYXQ6IFwiQmxvYlwiLFxyXG4gICAgYWxsb3dlZFR5cGVzOiBbXCIuc3ZnXCIsIFwiLnBuZ1wiXSxcclxuICAgIGRpc3BsYXk6IFwibm9uZVwiLFxyXG4gIH07XHJcbiAgQElucHV0KCkgc2hvd1RpY2tldEF0dGFjaG1lbnQgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHRvb2xiYXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25CZWdpbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaW5wdXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25Db21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJQYXN0ZUNsZWFudXAgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGZhbWlseSA9IGZvbnRGYW1pbHk7XHJcbiAgZm9udFNpemUgPSBzaXplO1xyXG4gIGRpYWxvZ1dpZHRoID0gXCI4MDBweFwiO1xyXG4gIGRpYWxvZ0hlaWdodCA9IFwiNjQycHhcIjtcclxuICBzaG93Wm9vbUJ0biA9IHRydWU7XHJcbiAgc2hvd01zZyA9IGZhbHNlO1xyXG4gIGVkaXRvck1hbmFnZXI6IGFueTtcclxuICBzaXplID0gXCJcIjtcclxuICBzZWxlY3RlZFF1ZXJ5O1xyXG4gIHB1YmxpYyBkcm9wVmFsSW5kZXggPSAwO1xyXG4gIHB1YmxpYyBxdWVyeUxpc3Q6IHsgaWQ6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXSA9IFtcclxuICAgIHsgaWQ6IFwiUmVwaHJhc2VcIiwgdGV4dDogXCJSZXBocmFzZVwiIH0sXHJcbiAgICB7IGlkOiBcIkdyYW1tYXJcIiwgdGV4dDogXCJDb3JyZWN0IEdyYW1tYXJcIiB9LFxyXG4gICAgeyBpZDogXCJTdW1tYXJpemVcIiwgdGV4dDogXCJTdW1tYXJpemVcIiB9LFxyXG4gICAgeyBpZDogXCJFbGFib3JhdGVcIiwgdGV4dDogXCJFbGFib3JhdGVcIiB9LFxyXG4gICAgeyBpZDogXCJUcmFuc2xhdGVcIiwgdGV4dDogXCJUcmFuc2xhdGVcIiB9LFxyXG4gICAgeyBpZDogXCJTZW50aW1lbnRBbmFseXNpc1wiLCB0ZXh0OiBcIlNlbnRpbWVudCBBbmFseXNpc1wiIH0sXHJcbiAgXTtcclxuICBwdWJsaWMgcmVwaHJhc2VUeWxlTGlzdCA9IFtcclxuICAgIHsgdGV4dDogXCJTdGFuZGFyZFwiLCBpZDogXCJTdGFuZGFyZFwiIH0sXHJcbiAgICB7IHRleHQ6IFwiRmx1ZW50XCIsIGlkOiBcIkZsdWVudFwiIH0sXHJcbiAgICB7IHRleHQ6IFwiUHJvZmVzc2lvbmFsXCIsIGlkOiBcIlByb2Zlc3Npb25hbFwiIH0sXHJcbiAgXTtcclxuICBwdWJsaWMgbGFuZ3VhZ2VMaXN0OiB7IGlkOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9W10gPSBbXHJcbiAgICB7IGlkOiBcIkVOXCIsIHRleHQ6IFwiRW5nbGlzaFwiIH0sXHJcbiAgICB7IGlkOiBcIlpIXCIsIHRleHQ6IFwiQ2hpbmVzZSAoU2ltcGxpZmllZClcIiB9LFxyXG4gICAgeyBpZDogXCJFU1wiLCB0ZXh0OiBcIlNwYW5pc2hcIiB9LFxyXG4gICAgeyBpZDogXCJaSFRcIiwgdGV4dDogXCJDaGluZXNlIChUcmFkaXRpb25hbClcIiB9LFxyXG4gICAgeyBpZDogXCJISVwiLCB0ZXh0OiBcIkhpbmRpXCIgfSxcclxuICAgIHsgaWQ6IFwiQVJcIiwgdGV4dDogXCJBcmFiaWNcIiB9LFxyXG4gICAgeyBpZDogXCJCTlwiLCB0ZXh0OiBcIkJlbmdhbGlcIiB9LFxyXG4gICAgeyBpZDogXCJQVFwiLCB0ZXh0OiBcIlBvcnR1Z3Vlc2VcIiB9LFxyXG4gICAgeyBpZDogXCJSVVwiLCB0ZXh0OiBcIlJ1c3NpYW5cIiB9LFxyXG4gICAgeyBpZDogXCJKQVwiLCB0ZXh0OiBcIkphcGFuZXNlXCIgfSxcclxuICAgIHsgaWQ6IFwiREVcIiwgdGV4dDogXCJHZXJtYW5cIiB9LFxyXG4gICAgeyBpZDogXCJLT1wiLCB0ZXh0OiBcIktvcmVhblwiIH0sXHJcbiAgICB7IGlkOiBcIkZSXCIsIHRleHQ6IFwiRnJlbmNoXCIgfSxcclxuICAgIHsgaWQ6IFwiSVRcIiwgdGV4dDogXCJJdGFsaWFuXCIgfSxcclxuICAgIHsgaWQ6IFwiVFJcIiwgdGV4dDogXCJUdXJraXNoXCIgfSxcclxuICBdO1xyXG4gIHB1YmxpYyBwcm9tcHRRdWVyeSA9IFwiXCI7XHJcbiAgcHVibGljIGlzU2VudGltZW50Q2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc3ViUXVlcnkgPSBcIlwiO1xyXG4gIHB1YmxpYyB0cmFuc2xhdGVsYW5ndWFnZSE6IHN0cmluZztcclxuICBwdWJsaWMgY2hpcFZhbHVlID0gXCJTdGFuZGFyZFwiO1xyXG4gIHB1YmxpYyBhcGlSZXN1bHREYXRhOiBhbnk7XHJcbiAgcHVibGljIEFJUmVzdWx0ITogc3RyaW5nO1xyXG4gIHRvb2xzOiBUb29sYmFyU2V0dGluZ3NNb2RlbDtcclxuICBwdWJsaWMgaXNEaWFsb2dWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGJ1bGxldEZvcm1hdExpc3QgPSB7XHJcbiAgICB0eXBlczogW1xyXG4gICAgICB7IHRleHQ6IFwiTm9uZVwiLCB2YWx1ZTogXCJub25lXCIgfSxcclxuICAgICAgeyB0ZXh0OiBcIuKXj1wiLCB2YWx1ZTogXCJkaXNjXCIgfSxcclxuICAgICAgeyB0ZXh0OiBcIuKXi1wiLCB2YWx1ZTogXCJjaXJjbGVcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwi4pagXCIsIHZhbHVlOiBcInNxdWFyZVwiIH0sXHJcbiAgICAgIC8vIEFkZCB5b3VyIGN1c3RvbSBidWxsZXQgc3R5bGUgaGVyZVxyXG4gICAgICB7IHRleHQ6IFwiLVwiLCB2YWx1ZTogXCJkYXNoXCIgfSxcclxuICAgIF0sXHJcbiAgfTtcclxuICBwdWJsaWMgbnVtYmVyRm9ybWF0TGlzdCA9IHtcclxuICAgIHR5cGVzOiBbXHJcbiAgICAgIHsgdGV4dDogXCJOb25lXCIsIHZhbHVlOiBcIm5vbmVcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwiMSwgMiwgMywg4oCmXCIsIHZhbHVlOiBcImRlY2ltYWxcIiB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCLOsSwgzrIsIM6zLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJsb3dlckdyZWVrXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcImksIGlpLCBpaWksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcImxvd2VyUm9tYW5cIixcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRleHQ6IFwiQSwgQiwgQywg4oCmXCIsXHJcbiAgICAgICAgdmFsdWU6IFwidXBwZXJBbHBoYVwiLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCJhLCBiLCBjLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJsb3dlckFscGhhXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcIkksIElJLCBJSUksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcInVwcGVyUm9tYW5cIixcclxuICAgICAgfSxcclxuICAgICAgLy8gQWRkIHlvdXIgY3VzdG9tIGJ1bGxldCBzdHlsZSBoZXJlXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcIigxKSwgKDIpLCAoMyksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcInBhcmVudGhlc2VzXCIsXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IERpYWxvZ1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc3QgZHluYW1pY0FpQnV0dG9uSWQgPSBgYWlfYXNzaXN0YW50X2J1dHRvbl90YmFyXyR7dGhpcy5lZGl0b3JJZH1gO1xyXG4gICAgdGhpcy50b29scyA9IHtcclxuICAgICAgZW5hYmxlRmxvYXRpbmc6IGZhbHNlLFxyXG4gICAgICBpdGVtczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRvb2x0aXBUZXh0OiBcIkFJIEFzc2lzdFwiLFxyXG4gICAgICAgICAgdGVtcGxhdGU6IGA8YnV0dG9uIGNsYXNzPVwiZS10YmFyLWJ0biBlLWJ0blwiIHRhYmluZGV4PVwiLTFcIiBpZD1cIiR7ZHluYW1pY0FpQnV0dG9uSWR9XCIgc3R5bGU9XCJ3aWR0aDoxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlLXJ0ZS1kcm9wZG93bi1idG4tdGV4dFwiPkFJIEFzc2lzdDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgPC9idXR0b24+YCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiQm9sZFwiLFxyXG4gICAgICAgIFwiSXRhbGljXCIsXHJcbiAgICAgICAgXCJVbmRlcmxpbmVcIixcclxuICAgICAgICBcIlN0cmlrZVRocm91Z2hcIixcclxuICAgICAgICBcIkZvbnROYW1lXCIsXHJcbiAgICAgICAgXCJGb250U2l6ZVwiLFxyXG4gICAgICAgIFwiRm9udENvbG9yXCIsXHJcbiAgICAgICAgXCJCYWNrZ3JvdW5kQ29sb3JcIixcclxuICAgICAgICBcIkxvd2VyQ2FzZVwiLFxyXG4gICAgICAgIFwiVXBwZXJDYXNlXCIsXHJcbiAgICAgICAgXCJ8XCIsXHJcbiAgICAgICAgXCJDcmVhdGVUYWJsZVwiLFxyXG4gICAgICAgIFwiRm9ybWF0c1wiLFxyXG4gICAgICAgIFwiQWxpZ25tZW50c1wiLFxyXG4gICAgICAgIC8vIHtcclxuICAgICAgICAvLyAgIHRvb2x0aXBUZXh0OiBcIkxpbmUgSGVpZ2h0XCIsXHJcbiAgICAgICAgLy8gICB0ZW1wbGF0ZTpcclxuICAgICAgICAvLyAgICAgJzxidXR0b24gY2xhc3M9XCJlLXRiYXItYnRuIGUtYnRuXCIgdGFiaW5kZXg9XCItMVwiIGlkPVwibGluZWhlaWdodF90YmFyXCIgIHN0eWxlPVwid2lkdGg6MTAwJVwiPjwvYnV0dG9uPicsXHJcbiAgICAgICAgLy8gfSxcclxuICAgICAgICBcImJ1bGxldEZvcm1hdExpc3RcIixcclxuICAgICAgICBcIk51bWJlckZvcm1hdExpc3RcIixcclxuICAgICAgICBcIk91dGRlbnRcIixcclxuICAgICAgICBcIkluZGVudFwiLFxyXG4gICAgICAgIFwifFwiLFxyXG4gICAgICAgIFwiQ3JlYXRlTGlua1wiLFxyXG4gICAgICAgIC8vIHtcclxuICAgICAgICAvLyAgIHRvb2x0aXBUZXh0OiBcIlwiLFxyXG4gICAgICAgIC8vICAgdGVtcGxhdGU6XHJcbiAgICAgICAgLy8gICAgICc8YnV0dG9uIGNsYXNzPVwiZS10YmFyLWJ0biBlLWJ0blwiIHRhYmluZGV4PVwiLTFcIiBpZD1cImN1c3RvbV90YmFyXCIgIHN0eWxlPVwid2lkdGg6MTAwJVwiPicgK1xyXG4gICAgICAgIC8vICAgICAnPGRpdiBjbGFzcz1cImUtdGJhci1idG4tdGV4dFwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDUwMDtcIj48aW1nIHNyYz1cIi9hc3NldHMvaW1nL2ZpbGUtaWNvbi5zdmdcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTt0b3A6IC0ycHg7XCIvPjxkaXYgY2xhc3M9XCJ1cGxvYWRBY3Rpb25zXCI+PGRpdiBpZD1cInVwbG9hZEZyb21Vc2VyXCI+Q29tcHV0ZXIgRmlsZTwvZGl2PjxkaXYgaWQ9XCJyZWxhdGlvbkRvbVwiPlRpY2tldCBBdHRhY2htZW50PC9kaXY+PC9kaXY+PC9kaXY+PC9idXR0b24+JyxcclxuICAgICAgICAvLyB9LFxyXG4gICAgICAgIFwifFwiLFxyXG4gICAgICAgIFwiRm9ybWF0UGFpbnRlclwiLFxyXG4gICAgICAgIFwiQ2xlYXJGb3JtYXRcIixcclxuICAgICAgICBcInxcIixcclxuICAgICAgICBcIlVuZG9cIixcclxuICAgICAgICBcIlJlZG9cIixcclxuICAgICAgICAvLydTb3VyY2VDb2RlJyxcclxuICAgICAgXSxcclxuICAgIH07XHJcbiAgICBpZiAodGhpcy5zaG93VGlja2V0QXR0YWNobWVudCkge1xyXG4gICAgICBjb25zdCBpdGVtID0ge1xyXG4gICAgICAgIHRvb2x0aXBUZXh0OiBcIlwiLFxyXG4gICAgICAgIHRlbXBsYXRlOlxyXG4gICAgICAgICAgJzxidXR0b24gY2xhc3M9XCJlLXRiYXItYnRuIGUtYnRuXCIgdGFiaW5kZXg9XCItMVwiIGlkPVwiY3VzdG9tX3RiYXJcIiAgc3R5bGU9XCJ3aWR0aDoxMDAlXCI+JyArXHJcbiAgICAgICAgICAnPGRpdiBjbGFzcz1cImUtdGJhci1idG4tdGV4dFwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDUwMDtcIj48aW1nIHNyYz1cIi9hc3NldHMvaW1nL2ZpbGUtaWNvbi5zdmdcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIi8+PGRpdiBjbGFzcz1cInVwbG9hZEFjdGlvbnNcIj48ZGl2IGlkPVwidXBsb2FkRnJvbVVzZXJcIj5Db21wdXRlciBGaWxlPC9kaXY+PGRpdiBpZD1cInJlbGF0aW9uRG9tXCI+VGlja2V0IEF0dGFjaG1lbnQ8L2Rpdj48L2Rpdj48L2Rpdj48L2J1dHRvbj4nLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnRvb2xzLml0ZW1zLnNwbGljZSgyMiwgMCwgaXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNvbnRlbnRDaGFuZ2UoYXJncykge1xyXG4gICAgLy8gY29uc3QgdGFibGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInRhYmxlLmUtcnRlLXRhYmxlXCIpO1xyXG4gICAgLy8gdGFibGVzLmZvckVhY2goKHRhYmxlKSA9PiB7XHJcbiAgICAvLyAgIGNvbnN0IGh0bWxUYWJsZSA9IHRhYmxlIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XHJcbiAgICAvLyAgIGh0bWxUYWJsZS5zdHlsZS5tYXJnaW5Cb3R0b20gPSBcIjEwcHhcIjtcclxuICAgIC8vICAgaHRtbFRhYmxlLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gXCJjb2xsYXBzZVwiO1xyXG4gICAgLy8gICBodG1sVGFibGUuc3R5bGUuZW1wdHlDZWxscyA9IFwic2hvd1wiO1xyXG4gICAgLy8gICBjb25zdCB0ZEVsZW1lbnRzID0gdGFibGUucXVlcnlTZWxlY3RvckFsbChcInRkXCIpO1xyXG4gICAgLy8gICB0ZEVsZW1lbnRzLmZvckVhY2goKHRkKSA9PiB7XHJcbiAgICAvLyAgICAgdGQuc3R5bGUuYm9yZGVyID0gXCIxcHggc29saWQgI2FkYjViZFwiO1xyXG4gICAgLy8gICAgIHRkLnN0eWxlLmhlaWdodCA9IFwiMjBweFwiO1xyXG4gICAgLy8gICAgIHRkLnN0eWxlLm1pbldpZHRoID0gXCIyMHB4XCI7XHJcbiAgICAvLyAgICAgdGQuc3R5bGUucGFkZGluZyA9IFwiMnB4IDVweFwiO1xyXG4gICAgLy8gICAgIHRkLnN0eWxlLmJveFNpemluZyA9IFwiYm9yZGVyLWJveFwiO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH0pO1xyXG4gICAgdGhpcy5jaGFuZ2UuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNyZWF0ZSgpOiB2b2lkIHtcclxuICAgIC8vYWRkIHRoZSBsaW5lIGhlaWdodFxyXG4gICAgLy8gdGhpcy5lZGl0b3JNYW5hZ2VyID0gdGhpcy5ydGVPYmouZm9ybWF0dGVyLmVkaXRvck1hbmFnZXI7XHJcbiAgICAvLyBsZXQgc3BsaXRCdXR0b24gPSBuZXcgRHJvcERvd25CdXR0b24oe1xyXG4gICAgLy8gICBpdGVtczogbGluZUhlaWdodF9pdGVtcyxcclxuICAgIC8vICAgaWNvbkNzczogXCJlLWljb25zIGUtbGluZS1zcGFjaW5nXCIsXHJcbiAgICAvLyAgIHNlbGVjdDogdGhpcy5vblNlbGVjdC5iaW5kKHRoaXMpLFxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyBzcGxpdEJ1dHRvbi5hcHBlbmRUbyhcIiNsaW5laGVpZ2h0X3RiYXJcIik7XHJcbiAgICAvLyBhaSBhc3Npc3RcclxuICAgIGxldCBhaWFzc2lzdGFudEJ1dHRvbiA9IG5ldyBEcm9wRG93bkJ1dHRvbih7XHJcbiAgICAgIGl0ZW1zOiB0aGlzLnF1ZXJ5TGlzdCxcclxuICAgICAgLy8gaWNvbkNzczogXCJlLWJ0bi1pY29uIGUtaWNvbnMgZS1hc3Npc3R2aWV3LWljb24gZS1pY29uLWxlZnRcIixcclxuICAgICAgc2VsZWN0OiAoYXJncykgPT4gdGhpcy5haVF1ZXJ5U2VsZWN0ZWRNZW51KGFyZ3MpLFxyXG4gICAgfSk7XHJcbiAgICBhaWFzc2lzdGFudEJ1dHRvbi5hcHBlbmRUbyhcIiNhaV9hc3Npc3RhbnRfYnV0dG9uX3RiYXJfXCIgKyB0aGlzLmVkaXRvcklkKTtcclxuICAgIHRoaXMuY3JlYXRlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uU2VsZWN0KGFyZ3MpIHtcclxuICAgIGlmICh0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuZ2V0VW5kb1JlZG9TdGFjaygpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuc2F2ZURhdGEoKTtcclxuICAgIH1cclxuICAgIGxldCBub2RlczogTm9kZVtdID0gdGhpcy5lZGl0b3JNYW5hZ2VyLmRvbU5vZGUuYmxvY2tOb2RlcygpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgbm9kZXMubGVuZ3RoID4gaTsgaSsrKSB7XHJcbiAgICAgIChub2Rlc1tpXSBhcyBIVE1MRWxlbWVudCkuc3R5bGUubGluZUhlaWdodCA9IGFyZ3MuaXRlbS50ZXh0O1xyXG4gICAgfVxyXG4gICAgdGhpcy5ydGVPYmouZm9ybWF0dGVyLnNhdmVEYXRhKCk7XHJcbiAgICB0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuZW5hYmxlVW5kbyh0aGlzLnJ0ZU9iaik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFpUXVlcnlTZWxlY3RlZE1lbnUoYXJnczogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ3VlT3BlbihhcmdzLml0ZW0udGV4dCk7XHJcbiAgfVxyXG5cclxuICBkaWFsb2d1ZU9wZW4oc2VsZWN0ZWRRdWVyeTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB2YXIgc2VsZWN0aW9uVGV4dCA9IHRoaXMucnRlT2JqLmdldFNlbGVjdGlvbigpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFF1ZXJ5ID0gc2VsZWN0ZWRRdWVyeTtcclxuICAgIGlmIChzZWxlY3Rpb25UZXh0KSB7XHJcbiAgICAgIGxldCByYW5nZTogUmFuZ2UgPSAoXHJcbiAgICAgICAgdGhpcy5ydGVPYmogYXMgYW55XHJcbiAgICAgICkuZm9ybWF0dGVyLmVkaXRvck1hbmFnZXIubm9kZVNlbGVjdGlvbi5nZXRSYW5nZShcclxuICAgICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5jb250ZW50TW9kdWxlLmdldERvY3VtZW50KClcclxuICAgICAgKTtcclxuICAgICAgKHRoaXMucnRlT2JqIGFzIGFueSkuZm9ybWF0dGVyLmVkaXRvck1hbmFnZXIubm9kZVNlbGVjdGlvbi5zYXZlKFxyXG4gICAgICAgIHJhbmdlLFxyXG4gICAgICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmNvbnRlbnRNb2R1bGUuZ2V0RG9jdW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRyb3BWYWxJbmRleCA9IHRoaXMucXVlcnlMaXN0LmZpbmRJbmRleChcclxuICAgICAgICAocSkgPT4gcS50ZXh0LnRvTG93ZXJDYXNlKCkgPT09IHNlbGVjdGVkUXVlcnkudG9Mb3dlckNhc2UoKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnF1ZXJ5Q2F0ZWdvcnkuaW5kZXggPSB0aGlzLmRyb3BWYWxJbmRleDtcclxuICAgICAgdGhpcy5sZWZ0UnRlLnZhbHVlID0gdGhpcy5wcm9tcHRRdWVyeSA9IHNlbGVjdGlvblRleHQ7XHJcbiAgICAgIHRoaXMubGVmdFJ0ZS5yZWZyZXNoVUkoKTtcclxuICAgICAgdGhpcy5BSWRpYWxvZy5zaG93KCk7XHJcbiAgICAgIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9uc0RhdGEoc2VsZWN0ZWRRdWVyeSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLnNob3dNc2cgPSB0cnVlO1xyXG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gICB0aGlzLnNob3dNc2cgPSBmYWxzZTtcclxuICAgICAgLy8gfSwgMzAwMCk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiUGxlYXNlIHNlbGVjdCB0aGUgY29udGVudCB0byBwZXJmb3JtIHRoZSBBSSBvcGVyYXRpb24uXCIpO1xyXG5cclxuICAgICAgdGhpcy5kaWFsb2cuc2hvd05vdGlmaWNhdGlvbihcIkZpcnN0LCBTZWxlY3Qgc29tZSB0ZXh0XCIsIHtcclxuICAgICAgICBzdGF0dXM6IFwiV2FybmluZ1wiLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKHNlbGVjdGVkUXVlcnk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1NlbnRpbWVudENoZWNrID0gZmFsc2U7XHJcbiAgICBzd2l0Y2ggKHNlbGVjdGVkUXVlcnkpIHtcclxuICAgICAgY2FzZSBcIlN1bW1hcml6ZVwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPSBcIlN1bW1hcml6ZSB0aGUgdXBjb21pbmcgc2VudGVuY2Ugc2hvcnRseS5cIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkVsYWJvcmF0ZVwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPSBcIkVsYWJvcmF0ZSBvbiB0aGUgdXBjb21pbmcgc2VudGVuY2UuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJSZXBocmFzZVwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPSB0aGlzLmNoaXBWYWx1ZSArIFwiIHJlcGhyYXNlIHRoZSB1cGNvbWluZyBzZW50ZW5jZS5cIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkNvcnJlY3QgR3JhbW1hclwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPSBcIkNvcnJlY3QgdGhlIGdyYW1tYXIgb2YgdGhlIHVwY29taW5nIHNlbnRlbmNlLlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiVHJhbnNsYXRlXCI6XHJcbiAgICAgICAgdGhpcy5zdWJRdWVyeSA9XHJcbiAgICAgICAgICBcIlRyYW5zbGF0ZSB0aGUgdXBjb21pbmcgc2VudGVuY2UgdG8gXCIgKyB0aGlzLnRyYW5zbGF0ZWxhbmd1YWdlICsgXCIuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJTZW50aW1lbnQgQW5hbHlzaXNcIjpcclxuICAgICAgICB0aGlzLmlzU2VudGltZW50Q2hlY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPVxyXG4gICAgICAgICAgJ0FuYWx5emUgdGhlIHNlbnRpbWVudCBhbmQgZ3JhbW1hciBvZiB0aGUgZm9sbG93aW5nIHBhcmFncmFwaHMgYW5kIHByb3ZpZGUgdGhlIGV4cHJlc3Npb24gc2NvcmUgd2l0aCBhbiBlbW9qaSBmb2xsb3dlZCBieSB0aGUgc2VudGltZW50IGluIHRoZSBmb3JtYXQ6IFwi8J+YiiBOZXV0cmFsXCIuIFxcblxcbk5PVEU6IEF2b2lkIGFueSBhZGRpdGlvbmFsIHRleHQgb3IgZXhwbGFuYXRpb246JztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQUlTdWdlc3N0aW9ucygpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLnByb21wdFF1ZXJ5KSB7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2tlbGV0b25JZFwiKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9XHJcbiAgICAgICAgICBcIlwiO1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJpZ2h0UnRlXCIpIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID1cclxuICAgICAgICAgIFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMuc2VudGltZW50QnV0dG9uLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMucmVnZW5lcmF0ZUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb3B5QnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlcGxhY2VCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlhbG9nVmlzaWJsZSkge1xyXG4gICAgICAgICAgdGhpcy5wcm9tcHRRdWVyeSA9IHRoaXMubGVmdFJ0ZS5nZXRUZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBpUmVzdWx0RGF0YSA9IHRoaXMuZ2V0UmVzcG9uc2VGcm9tT3BlbkFJKFxyXG4gICAgICAgICAgdGhpcy5zdWJRdWVyeSxcclxuICAgICAgICAgIHRoaXMucHJvbXB0UXVlcnlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYXBpUmVzdWx0RGF0YS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmlzRGlhbG9nVmlzaWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzRGlhbG9nVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLkFJUmVzdWx0ID0gdGhpcy5pc1NlbnRpbWVudENoZWNrID8gdGhpcy5wcm9tcHRRdWVyeSA6IHJlc3VsdDtcclxuICAgICAgICAgIHRoaXMuc2VudGltZW50QnV0dG9uLmNvbnRlbnQgPSByZXN1bHRcclxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLmluY2x1ZGVzKFwicG9zaXRpdmVcIilcclxuICAgICAgICAgICAgPyBcIvCfmIogUG9zaXRpdmVcIlxyXG4gICAgICAgICAgICA6IHJlc3VsdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwibmVnYXRpdmVcIilcclxuICAgICAgICAgICAgPyBcIvCfmJ4gTmVnYXRpdmVcIlxyXG4gICAgICAgICAgICA6IFwi8J+YkCBOZXV0cmFsXCI7XHJcbiAgICAgICAgICB0aGlzLnNlbnRpbWVudEJ1dHRvbi5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAhdGhpcy5pc1NlbnRpbWVudENoZWNrXHJcbiAgICAgICAgICAgID8gXCJub25lXCJcclxuICAgICAgICAgICAgOiBcIlwiO1xyXG4gICAgICAgICAgdGhpcy5yaWdodFJ0ZS52YWx1ZSA9IHRoaXMuQUlSZXN1bHQ7XHJcbiAgICAgICAgICB2YXIgbm9SZXN1bHRzRm91bmQgPSAhKHRoaXMuQUlSZXN1bHQgfHwgdGhpcy5wcm9tcHRRdWVyeSk7XHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm8tcmVzdWx0cy1mb3VuZFwiKSBhcyBIVE1MRWxlbWVudFxyXG4gICAgICAgICAgKS5zdHlsZS5kaXNwbGF5ID0gbm9SZXN1bHRzRm91bmQgPyBcIlwiIDogXCJub25lXCI7XHJcbiAgICAgICAgICB0aGlzLnJlZ2VuZXJhdGVCdXR0b24uZGlzYWJsZWQgPSBub1Jlc3VsdHNGb3VuZDtcclxuICAgICAgICAgIHRoaXMuY29weUJ1dHRvbi5kaXNhYmxlZCA9IG5vUmVzdWx0c0ZvdW5kO1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlQnV0dG9uLmRpc2FibGVkID0gbm9SZXN1bHRzRm91bmQ7XHJcbiAgICAgICAgICAvLyAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJza2VsZXRvbklkXCIpIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID1cclxuICAgICAgICAgIC8vICAgXCJub25lXCI7XHJcbiAgICAgICAgICAvLyAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyaWdodFJ0ZVwiKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9XHJcbiAgICAgICAgICAvLyAgIG5vUmVzdWx0c0ZvdW5kID8gXCJub25lXCIgOiBcIlwiO1xyXG4gICAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAvLyB0aGlzLnRvYXN0T2JqLnNob3coKTtcclxuICAgIH1cclxuICB9XHJcbiAgZnVsbFJlc3BvbnNlID0gXCJcIjtcclxuICBhc3luYyBnZXRSZXNwb25zZUZyb21PcGVuQUkoXHJcbiAgICBzdWJRdWVyeTogc3RyaW5nLFxyXG4gICAgcHJvbXB0UXVlcnk6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICB0aGlzLmZ1bGxSZXNwb25zZSA9IFwiXCI7XHJcbiAgICBjb25zdCBtZXNzYWdlcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIHJvbGU6IFwic3lzdGVtXCIsXHJcbiAgICAgICAgY29udGVudDogc3ViUXVlcnkuaW5jbHVkZXMoXHJcbiAgICAgICAgICBcImVtb2ppIGZvbGxvd2VkIGJ5IHRoZSBzZW50aW1lbnQgaW4gdGhlIGZvcm1hdFwiXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyBcIllvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudC4gUGxlYXNlIHJlc3BvbmQgaW4gc3RyaW5nIGZvcm1hdC5cIlxyXG4gICAgICAgICAgOiBcIk5PVEU6IFJldHVybiBzYW1lIGh0bWwgZm9ybWF0IGp1c3QgZG8gY2hhbmdlcyBjb250ZW50IG9ubHkuIGRvbid0IGNoYW5nZSBodG1sIGZvcm1hdHMuXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICByb2xlOiBcInVzZXJcIixcclxuICAgICAgICBjb250ZW50OiBgJHtzdWJRdWVyeX0gJHtwcm9tcHRRdWVyeX1gLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdCBwYXJhbSA9IHtcclxuICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VzLFxyXG4gICAgICBtYXhfdG9rZW5zOiAxMDAwLFxyXG4gICAgICB0ZW1wZXJhdHVyZTogMC43LFxyXG4gICAgICB0b3BfcDogMSxcclxuICAgICAgZnJlcXVlbmN5X3BlbmFsdHk6IDAsXHJcbiAgICAgIHByZXNlbmNlX3BlbmFsdHk6IDAsXHJcbiAgICB9O1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCJhcGkvYWkvY2hhdC1zdHJlYW1cIiwge1xyXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBhcmFtKSxcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCk7XHJcbiAgICAgIH1cclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2tlbGV0b25JZFwiKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9XHJcbiAgICAgICAgXCJub25lXCI7XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJpZ2h0UnRlXCIpIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xyXG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XHJcbiAgICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcclxuICAgICAgICBpZiAoZG9uZSkge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNodW5rID0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pO1xyXG4gICAgICAgIGNvbnN0IGxpbmVzID0gY2h1bmsuc3BsaXQoXCJcXG5cIik7XHJcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XHJcbiAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKFwiZGF0YTogXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBsaW5lLnN1YnN0cmluZyg2KS50cmltKCk7XHJcbiAgICAgICAgICAgIGlmIChkYXRhID09PSBcIltET05FXVwiKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnVsbFJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gcGFyc2VkLmNob2ljZXM/LlswXT8uZGVsdGE/LmNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVsbFJlc3BvbnNlICs9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsVG9Cb3R0b20oKSwgMCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlBhcnNlIGVycm9yOlwiLCBlLCBcIkRhdGE6XCIsIGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmZ1bGxSZXNwb25zZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJTdHJlYW0gZXJyb3I6XCIsIGVycm9yKTtcclxuICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaWFsb2dTaG93KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5yZWdlbmVyYXRlQnV0dG9uIS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9ucygpO1xyXG4gICAgLy8gfSk7XHJcbiAgICAvLyB0aGlzLmNvcHlCdXR0b24hLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgIC8vICAgdGhpcy5jb3B5VGV4dFRvQ2xpcGJvYXJkKHRoaXMuQUlSZXN1bHQpO1xyXG4gICAgLy8gfSk7XHJcbiAgICAvLyB0aGlzLnJlcGxhY2VCdXR0b24hLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgIC8vICAgbGV0IHJhbmdlOiBSYW5nZSA9IChcclxuICAgIC8vICAgICB0aGlzLnJ0ZU9iaiBhcyBhbnlcclxuICAgIC8vICAgKS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLmdldFJhbmdlKFxyXG4gICAgLy8gICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmNvbnRlbnRNb2R1bGUuZ2V0RG9jdW1lbnQoKVxyXG4gICAgLy8gICApO1xyXG4gICAgLy8gICAodGhpcy5ydGVPYmogYXMgYW55KS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLnJlc3RvcmUocmFuZ2UpO1xyXG4gICAgLy8gICAodGhpcy5ydGVPYmogYXMgYW55KS5leGVjdXRlQ29tbWFuZChcImluc2VydEhUTUxcIiwgdGhpcy5BSVJlc3VsdCwge1xyXG4gICAgLy8gICAgIHVuZG86IHRydWUsXHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gICB0aGlzLmNsb3NlRGlhbG9nKCk7XHJcbiAgICAvLyB9KTtcclxuICAgICh0aGlzLkFJZGlhbG9nIGFzIERpYWxvZ0NvbXBvbmVudCkuZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuICB9XHJcblxyXG4gIGNsb3NlRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5BSWRpYWxvZy5oaWRlKCk7XHJcbiAgICB0aGlzLmlzRGlhbG9nVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5yaWdodFJ0ZS52YWx1ZSA9IFwiXCI7XHJcbiAgICB0aGlzLmxlZnRSdGUudmFsdWUgPSBcIlwiO1xyXG4gICAgdGhpcy5wcm9tcHRRdWVyeSA9IFwiXCI7XHJcbiAgICB0aGlzLmNoaXBWYWx1ZSA9IFwiU3RhbmRhcmRcIjtcclxuICAgIHRoaXMuQUlSZXN1bHQgPSBcIlwiO1xyXG4gICAgdGhpcy5kcm9wVmFsSW5kZXggPSAwO1xyXG4gICAgdGhpcy5zZWxlY3RlZFF1ZXJ5ID0gXCJSZXBocmFzZVwiO1xyXG4gICAgdGhpcy5zZW50aW1lbnRCdXR0b24uY29udGVudCA9IFwi8J+YiiBOZXV0cmFsXCI7XHJcbiAgICB0aGlzLnNpemUgPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgY29weVRleHRUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5yaWdodFJ0ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnJpZ2h0UnRlLnNlbGVjdEFsbCgpO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIk5vIHNlbGVjdGVkIGNvbnRlbnRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgICAgY29uc3Qgc3VjY2VzcyA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtcclxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRleHQgY29waWVkIHRvIGNsaXBib2FyZCBzdWNjZXNzZnVsbHkhXCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY29weSB0ZXh0XCIpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjb3B5IHRleHQ6IFwiLCBlcnIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7XHJcbiAgICAvLyAgIG5hdmlnYXRvci5jbGlwYm9hcmRcclxuICAgIC8vICAgICAud3JpdGVUZXh0KHRleHQpXHJcbiAgICAvLyAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgLy8gICAgICAgY29uc29sZS5sb2coXCJUZXh0IGNvcGllZCB0byBjbGlwYm9hcmQgc3VjY2Vzc2Z1bGx5IVwiKTtcclxuICAgIC8vICAgICB9KVxyXG4gICAgLy8gICAgIC5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAvLyAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNvcHkgdGV4dDogXCIsIGVycik7XHJcbiAgICAvLyAgICAgfSk7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICAvLyBGYWxsYmFjayBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB0aGUgQ2xpcGJvYXJkIEFQSVxyXG4gICAgLy8gICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcclxuICAgIC8vICAgdGV4dGFyZWEudmFsdWUgPSB0ZXh0O1xyXG4gICAgLy8gICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRleHRhcmVhKTtcclxuICAgIC8vICAgdGV4dGFyZWEuc2VsZWN0KCk7XHJcbiAgICAvLyAgIHRyeSB7XHJcbiAgICAvLyAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKFwiVGV4dCBjb3BpZWQgdG8gY2xpcGJvYXJkIHVzaW5nIGV4ZWNDb21tYW5kXCIpO1xyXG4gICAgLy8gICB9IGNhdGNoIChlcnIpIHtcclxuICAgIC8vICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNvcHkgdGV4dDogXCIsIGVycik7XHJcbiAgICAvLyAgIH0gZmluYWxseSB7XHJcbiAgICAvLyAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0YXJlYSk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIG9uT3ZlcmxheUNsaWNrKCk6IHZvaWQge1xyXG4gICAgbGV0IGFjdGl2ZUVsZTogSFRNTEVsZW1lbnQgfCBudWxsID0gdGhpcy5BSWRpYWxvZy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgIFwiLmNoYXJfYmxvY2suZS1hY3RpdmVcIlxyXG4gICAgKTtcclxuICAgIGlmIChhY3RpdmVFbGUpIHtcclxuICAgICAgYWN0aXZlRWxlLmNsYXNzTGlzdC5yZW1vdmUoXCJlLWFjdGl2ZVwiKTtcclxuICAgIH1cclxuICAgIC8vdGhpcy5jbG9zZURpYWxvZygpO1xyXG4gIH1cclxuXHJcbiAgb25RdWVyeVNlbGVjdChhcmdzKSB7XHJcbiAgICAvLyB0aGlzLmNoaXBMaXN0LnNlbGVjdGVkQ2hpcHMgPSAwO1xyXG4gICAgdGhpcy50cmFuc2xhdGVsYW5ndWFnZSA9IFwiRU5cIjtcclxuICAgIHRoaXMuc2VsZWN0ZWRRdWVyeSA9IGFyZ3MuaXRlbURhdGEudGV4dDtcclxuICAgIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9uc0RhdGEoYXJncy5pdGVtRGF0YS50ZXh0KTtcclxuICB9XHJcblxyXG4gIG9uTGFuZ3VhZ2VTZWxlY3QoYXJnczogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZWxhbmd1YWdlID0gYXJncy5pdGVtRGF0YS5pZDtcclxuICAgIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9uc0RhdGEoXCJUcmFuc2xhdGVcIik7XHJcbiAgfVxyXG5cclxuICBvbkNoaXBDbGljayhhcmdzOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hpcFZhbHVlID0gYXJncy5pdGVtRGF0YS50ZXh0O1xyXG4gICAgLy8g5LqL5Lu25Lya6Kem5Y+R5Lik5qyhIOW/hemhu+WIpOaWrWFyZ3MudGV4dOaYr+WQpuacieWAvFxyXG4gICAgaWYgKGFyZ3MuaXRlbURhdGEudGV4dCkgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShcIlJlcGhyYXNlXCIpO1xyXG4gIH1cclxuXHJcbiAgX3Rvb2xiYXJDbGljayhhcmdzKSB7XHJcbiAgICB0aGlzLnRvb2xiYXJDbGljay5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgX2FjdGlvbkJlZ2luKGFyZ3MpIHtcclxuICAgIHRoaXMuYWN0aW9uQmVnaW4uZW1pdChhcmdzKTtcclxuICB9XHJcbiAgX2lucHV0KGFyZ3MpIHtcclxuICAgIHRoaXMuaW5wdXQuZW1pdChhcmdzKTtcclxuICB9XHJcbiAgX2FjdGlvbkNvbXBsZXRlKGFyZ3MpIHtcclxuICAgIGlmIChhcmdzLnJlcXVlc3RUeXBlID09IFwiVUxcIikge1xyXG4gICAgICBpZiAoYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LnN0eWxlLmxpc3RTdHlsZVR5cGUgPT0gXCJkYXNoXCIpIHtcclxuICAgICAgICAvLyBBcHBseSBjdXN0b20gc3R5bGluZyBmb3IgZGFzaCBidWxsZXRzXHJcbiAgICAgICAgYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LnN0eWxlLmxpc3RTdHlsZUltYWdlID1cclxuICAgICAgICAgIFwidXJsKCcuLi8uLi8uLi9hc3NldHMvaW1nL2J1bGxldC1kYXNoLnN2ZycpXCI7XHJcbiAgICAgICAgYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LnN0eWxlLmxpc3RTdHlsZVR5cGUgPSBcIm5vbmVcIjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChhcmdzLnJlcXVlc3RUeXBlID09IFwiT0xcIikge1xyXG4gICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcclxuICAgICAgICBcImN1c3RvbS1saXN0XCIsXHJcbiAgICAgICAgXCJwYXJlbnRoZXNlc1wiXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuc3R5bGUubGlzdFN0eWxlVHlwZSA9PSBcInBhcmVudGhlc2VzXCIpIHtcclxuICAgICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0ID0gXCJjdXN0b20tbGlzdFwiO1xyXG4gICAgICAgIGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwicGFyZW50aGVzZXNcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYWN0aW9uQ29tcGxldGUuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIF9mb2N1cyhhcmdzKSB7XHJcbiAgICB0aGlzLmZvY3VzLmVtaXQoYXJncyk7XHJcbiAgfVxyXG4gIF9ibHVyKGFyZ3MpIHtcclxuICAgIHRoaXMuYmx1ci5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuICBfZGlhbG9nT3BlbihhcmdzKSB7XHJcbiAgICBpZiAoYXJncy5lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImUtcnRlLWVkaXQtdGFibGVcIikpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdmFyIHJvd0JveCA9IChcclxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZS10YWJsZS1yb3cuZS1udW1lcmljdGV4dGJveFwiKVswXSBhcyBhbnlcclxuICAgICAgICApLmVqMl9pbnN0YW5jZXNbMF07XHJcbiAgICAgICAgdmFyIGNvbHVtbkJveCA9IChcclxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICAgICAgIFwiLmUtdGFibGUtY29sdW1uLmUtbnVtZXJpY3RleHRib3hcIlxyXG4gICAgICAgICAgKVswXSBhcyBhbnlcclxuICAgICAgICApLmVqMl9pbnN0YW5jZXNbMF07XHJcbiAgICAgICAgcm93Qm94LmNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICAgIGlmIChyb3dCb3gudmFsdWUgPiA1MCkge1xyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgICAgIFwiLmUtcnRlLWVsZW1lbnRzLmUtaW5zZXJ0LXRhYmxlXCJcclxuICAgICAgICAgICAgICApWzBdIGFzIGFueVxyXG4gICAgICAgICAgICApLmVqMl9pbnN0YW5jZXNbMF0uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5zaG93Tm90aWZpY2F0aW9uKFxyXG4gICAgICAgICAgICAgIFwiVGhlIHJvdyBudW1iZXIgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDUwLlwiLFxyXG4gICAgICAgICAgICAgIHsgc3RhdHVzOiBcIldhcm5pbmdcIiB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgICAgIFwiLmUtcnRlLWVsZW1lbnRzLmUtaW5zZXJ0LXRhYmxlXCJcclxuICAgICAgICAgICAgICApWzBdIGFzIGFueVxyXG4gICAgICAgICAgICApLmVqMl9pbnN0YW5jZXNbMF0uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHVtbkJveC5jaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29sdW1uQm94LnZhbHVlID4gMjUpIHtcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICAgICAgICAgICBcIi5lLXJ0ZS1lbGVtZW50cy5lLWluc2VydC10YWJsZVwiXHJcbiAgICAgICAgICAgICAgKVswXSBhcyBhbnlcclxuICAgICAgICAgICAgKS5lajJfaW5zdGFuY2VzWzBdLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2cuc2hvd05vdGlmaWNhdGlvbihcclxuICAgICAgICAgICAgICBcIlRoZSBjb2x1bW4gbnVtYmVyIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNS5cIixcclxuICAgICAgICAgICAgICB7IHN0YXR1czogXCJXYXJuaW5nXCIgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICAgICAgICAgICBcIi5lLXJ0ZS1lbGVtZW50cy5lLWluc2VydC10YWJsZVwiXHJcbiAgICAgICAgICAgICAgKVswXSBhcyBhbnlcclxuICAgICAgICAgICAgKS5lajJfaW5zdGFuY2VzWzBdLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfYWZ0ZXJQYXN0ZUNsZWFudXAoYXJncykge1xyXG4gICAgYXJncy52YWx1ZSA9IHRoaXMudW5lc2NhcGVIdG1sKGFyZ3MudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgdW5lc2NhcGVIdG1sKGVzY2FwZWRIdG1sOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGVzY2FwZWRIdG1sXHJcbiAgICAgIC5yZXBsYWNlKC8mbHQ7L2csIFwiPFwiKVxyXG4gICAgICAucmVwbGFjZSgvJmd0Oy9nLCBcIj5cIilcclxuICAgICAgLnJlcGxhY2UoLyZhbXA7L2csIFwiJlwiKVxyXG4gICAgICAucmVwbGFjZSgvJnF1b3Q7L2csICdcIicpXHJcbiAgICAgIC5yZXBsYWNlKC8mYXBvczsvZywgXCInXCIpO1xyXG4gIH1cclxuICBoaWRlVG9hc3QoKSB7XHJcbiAgICB0aGlzLnNob3dNc2cgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uWm9vbSgpIHtcclxuICAgIGlmICh0aGlzLnNpemUgPT09IFwibGFyZ2VzdFwiKSB7XHJcbiAgICAgIHRoaXMuc2l6ZSA9IFwiXCI7IC8vIOaBouWkjeWIsOWOn+Wni+Wkp+Wwj1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaXplID0gXCJsYXJnZXN0XCI7IC8vIOiuvue9ruS4uuacgOWkp+WMllxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnZW5lcmF0ZUNsaWNrKCkge1xyXG4gICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBjb3B5Q2xpY2soKSB7XHJcbiAgICB0aGlzLmNvcHlUZXh0VG9DbGlwYm9hcmQodGhpcy5BSVJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICByZXBsYWNlQ2xpY2soKSB7XHJcbiAgICBsZXQgcmFuZ2U6IFJhbmdlID0gKFxyXG4gICAgICB0aGlzLnJ0ZU9iaiBhcyBhbnlcclxuICAgICkuZm9ybWF0dGVyLmVkaXRvck1hbmFnZXIubm9kZVNlbGVjdGlvbi5nZXRSYW5nZShcclxuICAgICAgKHRoaXMucnRlT2JqIGFzIGFueSkuY29udGVudE1vZHVsZS5nZXREb2N1bWVudCgpXHJcbiAgICApO1xyXG4gICAgKHRoaXMucnRlT2JqIGFzIGFueSkuZm9ybWF0dGVyLmVkaXRvck1hbmFnZXIubm9kZVNlbGVjdGlvbi5yZXN0b3JlKHJhbmdlKTtcclxuICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmV4ZWN1dGVDb21tYW5kKFwiaW5zZXJ0SFRNTFwiLCB0aGlzLkFJUmVzdWx0LCB7XHJcbiAgICAgIHVuZG86IHRydWUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2xvc2VEaWFsb2coKTtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvQm90dG9tKCkge1xyXG4gICAgY29uc3QgcnRlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyaWdodFJ0ZVwiKTtcclxuICAgIGNvbnN0IHNjcm9sbGFibGVFbGVtZW50ID0gcnRlQ29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKFwiLmUtcnRlLWNvbnRlbnRcIik7XHJcbiAgICBpZiAoc2Nyb2xsYWJsZUVsZW1lbnQpIHtcclxuICAgICAgc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wID1cclxuICAgICAgICBzY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxIZWlnaHQgLSBzY3JvbGxhYmxlRWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImVkaXRvcl9ib3hcIiBpZD1cImNvbnRhaW5lclwiPlxyXG4gIDxlanMtcmljaHRleHRlZGl0b3JcclxuICAgICNlZGl0b3JcclxuICAgIFtpZF09XCJlZGl0b3JJZFwiXHJcbiAgICBbaGVpZ2h0XT1cImhlaWdodFwiXHJcbiAgICBbc2F2ZUludGVydmFsXT1cIjBcIlxyXG4gICAgW2F1dG9TYXZlT25JZGxlXT1cImF1dG9TYXZlT25JZGxlXCJcclxuICAgIFt0b29sYmFyU2V0dGluZ3NdPVwidG9vbHNcIlxyXG4gICAgW2J1bGxldEZvcm1hdExpc3RdPVwiYnVsbGV0Rm9ybWF0TGlzdFwiXHJcbiAgICBbbnVtYmVyRm9ybWF0TGlzdF09XCJudW1iZXJGb3JtYXRMaXN0XCJcclxuICAgIFtmb250RmFtaWx5XT1cImZhbWlseVwiXHJcbiAgICBbZm9udFNpemVdPVwiZm9udFNpemVcIlxyXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgIFtpbnNlcnRJbWFnZVNldHRpbmdzXT1cImluc2VydEltYWdlU2V0dGluZ3NcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXHJcbiAgICAoYWN0aW9uQmVnaW4pPVwiX2FjdGlvbkJlZ2luKCRldmVudClcIlxyXG4gICAgKGNoYW5nZSk9XCJvbkNvbnRlbnRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAoY3JlYXRlZCk9XCJvbkNyZWF0ZSgpXCJcclxuICAgICh0b29sYmFyQ2xpY2spPVwiX3Rvb2xiYXJDbGljaygkZXZlbnQpXCJcclxuICAgIChpbnB1dCk9XCJfaW5wdXQoJGV2ZW50KVwiXHJcbiAgICAoZm9jdXMpPVwiX2ZvY3VzKCRldmVudClcIlxyXG4gICAgKGJsdXIpPVwiX2JsdXIoJGV2ZW50KVwiXHJcbiAgICAoYWN0aW9uQ29tcGxldGUpPVwiX2FjdGlvbkNvbXBsZXRlKCRldmVudClcIlxyXG4gICAgKGRpYWxvZ09wZW4pPVwiX2RpYWxvZ09wZW4oJGV2ZW50KVwiXHJcbiAgICAoYWZ0ZXJQYXN0ZUNsZWFudXApPVwiX2FmdGVyUGFzdGVDbGVhbnVwKCRldmVudClcIlxyXG4gID5cclxuICA8L2Vqcy1yaWNodGV4dGVkaXRvcj5cclxuICA8ZWpzLWRpYWxvZ1xyXG4gICAgI0FJZGlhbG9nXHJcbiAgICBpZD1cIkFJZGlhbG9nXCJcclxuICAgIFtuZ0NsYXNzXT1cInNpemVcIlxyXG4gICAgW3Zpc2libGVdPVwiZmFsc2VcIlxyXG4gICAgW3RhcmdldF09XCJ0YXJnZXRcIlxyXG4gICAgW2lzTW9kYWxdPVwidHJ1ZVwiXHJcbiAgICBbaGVpZ2h0XT1cImRpYWxvZ0hlaWdodFwiXHJcbiAgICBbd2lkdGhdPVwiZGlhbG9nV2lkdGhcIlxyXG4gICAgbWF4SGVpZ2h0PVwiODAlXCJcclxuICAgIGNzc0NsYXNzPVwiZS1ydGUtZWxlbWVudHMgY3VzdG9tLWRpYWxvZy1ydGVcIlxyXG4gICAgekluZGV4PVwiMTAwMFwiXHJcbiAgICAoY2xvc2UpPVwiY2xvc2VEaWFsb2coKVwiXHJcbiAgICAob3ZlcmxheUNsaWNrKT1cIm9uT3ZlcmxheUNsaWNrKClcIlxyXG4gICAgKG9wZW4pPVwiZGlhbG9nU2hvdygpXCJcclxuICA+XHJcbiAgICA8bmctdGVtcGxhdGUgI2hlYWRlcj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZVwiPkFJIEFzc2lzdDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWJ1dHRvbnNcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1pvb21CdG5cIiBjbGFzcz1cImhlYWRlci16b29tXCIgKGNsaWNrKT1cIm9uWm9vbSgpXCI+XHJcbiAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWljb25cIlxyXG4gICAgICAgICAgICAqbmdJZj1cInNpemUgPT09ICdsYXJnZXN0J1wiXHJcbiAgICAgICAgICAgIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9pbWcvZGlhbG9nLXNocmluay5zdmdcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItaWNvblwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2l6ZSAhPT0gJ2xhcmdlc3QnXCJcclxuICAgICAgICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL2ltZy9kaWFsb2ctZ3Jvdy5zdmdcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWJ0blwiIChjbGljayk9XCJjbG9zZURpYWxvZygpXCI+XHJcbiAgICAgICAgICA8aW1nIGNsYXNzPVwiaGVhZGVyLWljb25cIiBzcmM9XCIuLi8uLi8uLi9hc3NldHMvaW1nL2RpYWxvZy1jbG9zZS5zdmdcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlPlxyXG4gICAgICA8ZGl2IGlkPVwiZGlhbG9nLWZvb3Rlci1jb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1yb3ctMFwiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImN1c2NvbC0wXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBsZWZ0XCJcclxuICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjdXNjb2wtMVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwiXHJcbiAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodDsgd2lkdGg6IDEwMCVcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBlanMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAjc2VudGltZW50QnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjb250ZW50PVwi8J+YiiBOZXV0cmFsXCJcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJzZW50aW1lbnRcIlxyXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBlanMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAjY29weUJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY29udGVudD1cIkNvcHlcIlxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvcHktYnRuXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjb3B5Q2xpY2soKVwiXHJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGVqcy1idXR0b25cclxuICAgICAgICAgICAgICAgICNyZXBsYWNlQnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjb250ZW50PVwiUmVwbGFjZVwiXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlcGxhY2VDbGljaygpXCJcclxuICAgICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cclxuICAgICAgPGRpdiBjbGFzcz1cImRpYWxvZy1jb250ZW50XCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXJvdy0wXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzY29sLTBcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XHJcbiAgICAgICAgICAgIDxlanMtZHJvcGRvd25saXN0XHJcbiAgICAgICAgICAgICAgI3F1ZXJ5Q2F0ZWdvcnlcclxuICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyMDBweFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJxdWVyeUNhdGVnb3J5XCJcclxuICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJxdWVyeUxpc3RcIlxyXG4gICAgICAgICAgICAgIGluZGV4PVwiMFwiXHJcbiAgICAgICAgICAgICAgW2ZpZWxkc109XCJ7IHRleHQ6ICd0ZXh0JywgdmFsdWU6ICdpZCcgfVwiXHJcbiAgICAgICAgICAgICAgKHNlbGVjdCk9XCJvblF1ZXJ5U2VsZWN0KCRldmVudClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgUmVwaHJhc2VcclxuICAgICAgICAgICAgPC9lanMtZHJvcGRvd25saXN0PlxyXG4gICAgICAgICAgICA8ZWpzLWRyb3Bkb3dubGlzdFxyXG4gICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRRdWVyeSA9PSAnUmVwaHJhc2UnXCJcclxuICAgICAgICAgICAgICBpZD1cImNoaXBzLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgI2NoaXBMaXN0XHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTYwcHhcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY2hpcFZhbHVlXCJcclxuICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJyZXBocmFzZVR5bGVMaXN0XCJcclxuICAgICAgICAgICAgICBbZmllbGRzXT1cInsgdGV4dDogJ3RleHQnLCB2YWx1ZTogJ2lkJyB9XCJcclxuICAgICAgICAgICAgICAoc2VsZWN0KT1cIm9uQ2hpcENsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvZWpzLWRyb3Bkb3dubGlzdD5cclxuICAgICAgICAgICAgPGVqcy1kcm9wZG93bmxpc3RcclxuICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkUXVlcnkgPT0gJ1RyYW5zbGF0ZSdcIlxyXG4gICAgICAgICAgICAgICNsYW5ndWFnZUNhdGVnb3J5XHJcbiAgICAgICAgICAgICAgaW5kZXg9XCIwXCJcclxuICAgICAgICAgICAgICBpZD1cImxhbmd1YWdlLUNhdGVnb3J5XCJcclxuICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJsYW5ndWFnZUxpc3RcIlxyXG4gICAgICAgICAgICAgIFtmaWVsZHNdPVwieyB0ZXh0OiAndGV4dCcsIHZhbHVlOiAnaWQnIH1cIlxyXG4gICAgICAgICAgICAgIChzZWxlY3QpPVwib25MYW5ndWFnZVNlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L2Vqcy1kcm9wZG93bmxpc3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjdXNjb2wtMVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwiXHJcbiAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwhLS0gPGVqcy1jaGlwbGlzdFxyXG4gICAgICAgICAgICAgIGlkPVwiY2hpcHMtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAjY2hpcExpc3RcclxuICAgICAgICAgICAgICBbY2hpcHNdPVwiWydTdGFuZGFyZCcsICdGbHVlbnQnLCAnUHJvZmVzc2lvbmFsJ11cIlxyXG4gICAgICAgICAgICAgIHNlbGVjdGlvbj1cIlNpbmdsZVwiXHJcbiAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJlLW91dGxpbmVcIlxyXG4gICAgICAgICAgICAgIFtzZWxlY3RlZENoaXBzXT1cIlswXVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hpcENsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvZWpzLWNoaXBsaXN0PiAtLT5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIGVqcy1idXR0b25cclxuICAgICAgICAgICAgICAjcmVnZW5lcmF0ZUJ1dHRvblxyXG4gICAgICAgICAgICAgIGNvbnRlbnQ9XCJSZWdlbmVyYXRlXCJcclxuICAgICAgICAgICAgICBpc1ByaW1hcnk9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBkaXNhYmxlZD1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVnZW5lcmF0ZUNsaWNrKClcIlxyXG4gICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXJvdy0xXCIgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwJSAtIDQwcHgpXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3VzY29sLTBcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogbGVmdDtcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IGxlZnQ7IGhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDxlanMtcmljaHRleHRlZGl0b3JcclxuICAgICAgICAgICAgICAgICNsZWZ0UnRlXHJcbiAgICAgICAgICAgICAgICBpZD1cImxlZnRSdGVcIlxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbGJhclNldHRpbmdzXT1cInsgZW5hYmxlOiBmYWxzZSB9XCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQW5hbHlzaXMgb2YgQUkgU3VwcG9ydFwiXHJcbiAgICAgICAgICAgICAgICBjc3NDbGFzcz1cImUtb3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvZWpzLXJpY2h0ZXh0ZWRpdG9yPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImN1c2NvbC0xXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJcclxuICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0OyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPGVqcy1yaWNodGV4dGVkaXRvclxyXG4gICAgICAgICAgICAgICAgI3JpZ2h0UnRlXHJcbiAgICAgICAgICAgICAgICBpZD1cInJpZ2h0UnRlXCJcclxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmdWxsUmVzcG9uc2VcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2xiYXJTZXR0aW5nc109XCJ7IGVuYWJsZTogZmFsc2UgfVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFuYWx5c2lzIG9mIEFJIFN1cHBvcnRcIlxyXG4gICAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJlLW91dGxpbmVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L2Vqcy1yaWNodGV4dGVkaXRvcj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5vLXJlc3VsdHMtZm91bmRcIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJuby1yZXN1bHRzLWZvdW5kXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgaGVpZ2h0OiAyNDRweDsgYWxpZ24tY29udGVudDogY2VudGVyXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjUwXCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCI1MFwiXHJcbiAgICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9jZG4tYm9sZGRlc2svYWdlbnQtYW5ndWxhci1hcHAvaW1hZ2VzL2xpZ2h0L25vLXJlY29yZHMtd2FybmluZy5zdmdcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDxkaXY+Tm8gcmVzdWx0cyBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgaWQ9XCJza2VsZXRvbklkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICAgICNza2VsZXRvbklkMVxyXG4gICAgICAgICAgICAgICAgICBzaGFwZT1cIlJlY3RhbmdsZVwiXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgPjwvZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICAgICNza2VsZXRvbklkMlxyXG4gICAgICAgICAgICAgICAgICBzaGFwZT1cIlJlY3RhbmdsZVwiXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjkwJVwiXHJcbiAgICAgICAgICAgICAgICA+PC9lanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgIDxlanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgICAgI3NrZWxldG9uSWQzXHJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwiUmVjdGFuZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNzAlXCJcclxuICAgICAgICAgICAgICAgID48L2Vqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGVqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAjc2tlbGV0b25JZDRcclxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJSZWN0YW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCI1MCVcIlxyXG4gICAgICAgICAgICAgICAgPjwvZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICAgICNza2VsZXRvbklkNVxyXG4gICAgICAgICAgICAgICAgICBzaGFwZT1cIlJlY3RhbmdsZVwiXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjMwJVwiXHJcbiAgICAgICAgICAgICAgICA+PC9lanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgIDxlanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgICAgI3NrZWxldG9uSWQ2XHJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwiUmVjdGFuZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAlXCJcclxuICAgICAgICAgICAgICAgID48L2Vqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9lanMtZGlhbG9nPlxyXG4gIDwhLS0gPGRpdiBjbGFzcz1cInRvYXN0XCIgKm5nSWY9XCJzaG93TXNnXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cInRvYXN0X3RleHRcIj5GaXJzdCwgU2VsZWN0IHNvbWUgdGV4dDwvc3BhblxyXG4gICAgPjxzcGFuIGNsYXNzPVwiY2xvc2VfaWNvblwiIChjbGljayk9XCJoaWRlVG9hc3QoKVwiPjwvc3Bhbj5cclxuICA8L2Rpdj4gLS0+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -20713,7 +20713,7 @@ class RichtexteditorComponent {
20713
20713
  // "none";
20714
20714
  // (document.getElementById("rightRte") as HTMLElement).style.display =
20715
20715
  // noResultsFound ? "none" : "";
20716
- // this.ref.markForCheck();
20716
+ this.ref.markForCheck();
20717
20717
  });
20718
20718
  }
20719
20719
  }
@@ -20756,6 +20756,7 @@ class RichtexteditorComponent {
20756
20756
  document.getElementById("skeletonId").style.display =
20757
20757
  "none";
20758
20758
  document.getElementById("rightRte").style.display = "";
20759
+ this.ref.detectChanges();
20759
20760
  const reader = response.body.getReader();
20760
20761
  const decoder = new TextDecoder();
20761
20762
  while (true) {
@@ -20767,7 +20768,7 @@ class RichtexteditorComponent {
20767
20768
  const lines = chunk.split("\n");
20768
20769
  for (const line of lines) {
20769
20770
  if (line.startsWith("data: ")) {
20770
- const data = line.slice(6);
20771
+ const data = line.substring(6).trim();
20771
20772
  if (data === "[DONE]") {
20772
20773
  return this.fullResponse;
20773
20774
  }
@@ -20776,6 +20777,7 @@ class RichtexteditorComponent {
20776
20777
  const content = parsed.choices?.[0]?.delta?.content;
20777
20778
  if (content) {
20778
20779
  this.fullResponse += content;
20780
+ setTimeout(() => this.scrollToBottom(), 0);
20779
20781
  }
20780
20782
  }
20781
20783
  catch (e) {
@@ -20993,6 +20995,15 @@ class RichtexteditorComponent {
20993
20995
  });
20994
20996
  this.closeDialog();
20995
20997
  }
20998
+ scrollToBottom() {
20999
+ const rteContainer = document.getElementById("rightRte");
21000
+ const scrollableElement = rteContainer?.querySelector(".e-rte-content");
21001
+ if (scrollableElement) {
21002
+ scrollableElement.scrollTop =
21003
+ scrollableElement.scrollHeight - scrollableElement.clientHeight;
21004
+ this.ref.detectChanges();
21005
+ }
21006
+ }
20996
21007
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RichtexteditorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$4.HttpClient }, { token: DialogService }], target: i0.ɵɵFactoryTarget.Component });
20997
21008
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RichtexteditorComponent, selector: "rs-richtext-editor", inputs: { placeholder: "placeholder", value: "value", editorId: "editorId", saveInterval: "saveInterval", height: "height", autoSaveOnIdle: "autoSaveOnIdle", disabled: "disabled", target: "target", insertImageSettings: "insertImageSettings", showTicketAttachment: "showTicketAttachment" }, outputs: { toolbarClick: "toolbarClick", change: "change", created: "created", actionBegin: "actionBegin", input: "input", focus: "focus", blur: "blur", actionComplete: "actionComplete", afterPasteCleanup: "afterPasteCleanup" }, viewQueries: [{ propertyName: "rteObj", first: true, predicate: ["editor"], descendants: true }, { propertyName: "queryCategory", first: true, predicate: ["queryCategory"], descendants: true }, { propertyName: "leftRte", first: true, predicate: ["leftRte"], descendants: true }, { propertyName: "rightRte", first: true, predicate: ["rightRte"], descendants: true }, { propertyName: "AIdialog", first: true, predicate: ["AIdialog"], descendants: true, static: true }, { propertyName: "sentimentButton", first: true, predicate: ["sentimentButton"], descendants: true }, { propertyName: "regenerateButton", first: true, predicate: ["regenerateButton"], descendants: true }, { propertyName: "copyButton", first: true, predicate: ["copyButton"], descendants: true }, { propertyName: "replaceButton", first: true, predicate: ["replaceButton"], descendants: true }], ngImport: i0, template: "<div class=\"editor_box\" id=\"container\">\r\n <ejs-richtexteditor\r\n #editor\r\n [id]=\"editorId\"\r\n [height]=\"height\"\r\n [saveInterval]=\"0\"\r\n [autoSaveOnIdle]=\"autoSaveOnIdle\"\r\n [toolbarSettings]=\"tools\"\r\n [bulletFormatList]=\"bulletFormatList\"\r\n [numberFormatList]=\"numberFormatList\"\r\n [fontFamily]=\"family\"\r\n [fontSize]=\"fontSize\"\r\n [disabled]=\"disabled\"\r\n [insertImageSettings]=\"insertImageSettings\"\r\n [(ngModel)]=\"value\"\r\n (actionBegin)=\"_actionBegin($event)\"\r\n (change)=\"onContentChange($event)\"\r\n (created)=\"onCreate()\"\r\n (toolbarClick)=\"_toolbarClick($event)\"\r\n (input)=\"_input($event)\"\r\n (focus)=\"_focus($event)\"\r\n (blur)=\"_blur($event)\"\r\n (actionComplete)=\"_actionComplete($event)\"\r\n (dialogOpen)=\"_dialogOpen($event)\"\r\n (afterPasteCleanup)=\"_afterPasteCleanup($event)\"\r\n >\r\n </ejs-richtexteditor>\r\n <ejs-dialog\r\n #AIdialog\r\n id=\"AIdialog\"\r\n [ngClass]=\"size\"\r\n [visible]=\"false\"\r\n [target]=\"target\"\r\n [isModal]=\"true\"\r\n [height]=\"dialogHeight\"\r\n [width]=\"dialogWidth\"\r\n maxHeight=\"80%\"\r\n cssClass=\"e-rte-elements custom-dialog-rte\"\r\n zIndex=\"1000\"\r\n (close)=\"closeDialog()\"\r\n (overlayClick)=\"onOverlayClick()\"\r\n (open)=\"dialogShow()\"\r\n >\r\n <ng-template #header>\r\n <div class=\"header-title\">AI Assist</div>\r\n <div class=\"header-buttons\">\r\n <div *ngIf=\"showZoomBtn\" class=\"header-zoom\" (click)=\"onZoom()\">\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size === 'largest'\"\r\n src=\"../../../assets/img/dialog-shrink.svg\"\r\n />\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size !== 'largest'\"\r\n src=\"../../../assets/img/dialog-grow.svg\"\r\n />\r\n </div>\r\n <div class=\"header-btn\" (click)=\"closeDialog()\">\r\n <img class=\"header-icon\" src=\"../../../assets/img/dialog-close.svg\" />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #footerTemplate>\r\n <div id=\"dialog-footer-content\">\r\n <div class=\"custom-row-0\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"width: 100%; align-items: center; justify-content: left\"\r\n ></div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <div style=\"text-align: right; width: 100%\">\r\n <button\r\n ejs-button\r\n #sentimentButton\r\n content=\"\uD83D\uDE0A Neutral\"\r\n disabled=\"false\"\r\n cssClass=\"sentiment\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #copyButton\r\n content=\"Copy\"\r\n disabled=\"false\"\r\n class=\"copy-btn\"\r\n (click)=\"copyClick()\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #replaceButton\r\n content=\"Replace\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"replaceClick()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #content>\r\n <div class=\"dialog-content\" style=\"height: 100%\">\r\n <div class=\"custom-row-0\">\r\n <div class=\"cuscol-0\" style=\"width: 100%\">\r\n <ejs-dropdownlist\r\n #queryCategory\r\n style=\"width: 200px\"\r\n id=\"queryCategory\"\r\n [dataSource]=\"queryList\"\r\n index=\"0\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onQuerySelect($event)\"\r\n >\r\n Rephrase\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Rephrase'\"\r\n id=\"chips-container\"\r\n #chipList\r\n style=\"width: 160px\"\r\n [(ngModel)]=\"chipValue\"\r\n [dataSource]=\"rephraseTyleList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onChipClick($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Translate'\"\r\n #languageCategory\r\n index=\"0\"\r\n id=\"language-Category\"\r\n [dataSource]=\"languageList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onLanguageSelect($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <!-- <ejs-chiplist\r\n id=\"chips-container\"\r\n #chipList\r\n [chips]=\"['Standard', 'Fluent', 'Professional']\"\r\n selection=\"Single\"\r\n cssClass=\"e-outline\"\r\n [selectedChips]=\"[0]\"\r\n (click)=\"onChipClick($event)\"\r\n >\r\n </ejs-chiplist> -->\r\n <button\r\n ejs-button\r\n #regenerateButton\r\n content=\"Regenerate\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"regenerateClick()\"\r\n ></button>\r\n </div>\r\n </div>\r\n <div class=\"custom-row-1\" style=\"height: calc(100% - 40px)\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"\r\n width: 100%;\r\n height: 100%;\r\n align-items: center;\r\n justify-content: left;\r\n \"\r\n >\r\n <div style=\"text-align: left; height: 100%\">\r\n <ejs-richtexteditor\r\n #leftRte\r\n id=\"leftRte\"\r\n height=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n placeholder=\"Analysis of AI Support\"\r\n cssClass=\"e-outline\"\r\n >\r\n </ejs-richtexteditor>\r\n </div>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n display: flex;\r\n justify-content: space-between;\r\n width: 100%;\r\n height: 100%;\r\n \"\r\n >\r\n <div style=\"text-align: left; width: 100%; height: 100%\">\r\n <ejs-richtexteditor\r\n #rightRte\r\n id=\"rightRte\"\r\n height=\"100%\"\r\n [(ngModel)]=\"fullResponse\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n placeholder=\"Analysis of AI Support\"\r\n cssClass=\"e-outline\"\r\n >\r\n </ejs-richtexteditor>\r\n <div\r\n class=\"no-results-found\"\r\n id=\"no-results-found\"\r\n style=\"display: none; height: 244px; align-content: center\"\r\n >\r\n <img\r\n height=\"50\"\r\n width=\"50\"\r\n src=\"https://storage.googleapis.com/cdn-bolddesk/agent-angular-app/images/light/no-records-warning.svg\"\r\n />\r\n <div>No results found</div>\r\n </div>\r\n <div id=\"skeletonId\">\r\n <ejs-skeleton\r\n #skeletonId1\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"100%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId2\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"90%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId3\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"70%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId4\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"50%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId5\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"30%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId6\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"10%\"\r\n ></ejs-skeleton\r\n ><br />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ejs-dialog>\r\n <!-- <div class=\"toast\" *ngIf=\"showMsg\">\r\n <span class=\"toast_text\">First, Select some text</span\r\n ><span class=\"close_icon\" (click)=\"hideToast()\"></span>\r\n </div> -->\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.editor_box{position:relative;width:100%;height:100%}.editor_box .toast{position:absolute;left:35%;top:110px;z-index:1;width:400px;border-radius:4px;border:1px solid #e8f2ff;background:#f4f8ff;padding:4px 12px;color:#1f3f5c;font-size:12px;font-style:normal;font-weight:400;height:32px;font-family:Arial;display:flex;align-items:center;justify-content:space-between}.editor_box .toast .toast_text:before{content:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2217%22 viewBox%3D%220 0 16 17%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Ccircle cx%3D%228%22 cy%3D%228.5%22 r%3D%226.5%22 stroke%3D%22%236B6B6B%22%2F%3E%0D%3Cpath d%3D%22M8 8.5V11.5%22 stroke%3D%22%236B6B6B%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Ccircle cx%3D%228%22 cy%3D%225.5%22 r%3D%221%22 fill%3D%22%236B6B6B%22%2F%3E%0D%3C%2Fsvg%3E%0D\");display:inline-block;width:16px;height:16px;vertical-align:bottom;margin-right:8px}.editor_box .toast .close_icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cpath d%3D%22M3.50021 12.9999L12.5001 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Cpath d%3D%22M12.4999 12.9999L3.50007 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");cursor:pointer;display:inline-block;width:16px;height:16px}.custom-dialog-rte{padding:0 20px;border-radius:10px}.custom-row-0,.custom-row-1,.custom-row-2{display:flex;align-items:center;padding:12px 24px}.e-rte-dropdown-btn-text{padding-left:4px}.no-results-found{text-align:center}.no-results-found img{display:block;margin:0 auto}.e-custom{margin-right:.5rem;border-radius:25px!important}.custom-dialog-rte .skeleton-rectangle{border-radius:4px}@media (max-width: 767px){.cuscol-0,.cuscol-1,.cuscol-2{justify-content:center!important}.custom-row-0,.custom-row-1,.custom-row-2{flex-direction:column!important}.cuscol-1{border-right:none!important}.cuscol-0{width:100%;align-items:center}::ng-deep:host .e-dialog{max-height:80%!important}.custom-dialog-rte .e-dialog .e-dlg-content{overflow-y:auto!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor{height:100px!important}.cuscol-noresult{padding-bottom:20px!important}.e-chip-list{padding:5px!important}.cuscol{padding-right:.2rem!important;width:auto!important}.custom-row-1{height:auto!important}}.cuscol-1{display:flex;flex-direction:row!important}.cuscol-2{display:flex;flex-direction:column!important}.sentiment{color:#000!important}.custom-dialog-rte .e-dialog .e-dlg-content{padding:0!important;overflow-y:hidden}.custom-dialog-rte .e-dialog .e-dlg-header-content{padding:20px 0!important;border:0!important}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header{display:flex;align-items:center;line-height:18px;justify-content:space-between}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header .header-title{font-family:Arial;font-size:15px;font-weight:700;font-style:normal}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons{display:flex}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons img{width:16px;height:16px;cursor:pointer;padding:2px;margin-left:12px}.custom-dialog-rte .e-dialog .e-footer-content{padding:0!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor.e-rte-tb-expand .e-rte-content,.e-richtexteditor.e-rte-tb-expand .e-source-content{border:0;border-bottom:1px solid #dee2e6;border-top:0px solid #dee2e6!important}.custom-dialog-rte .dialog-content .custom-row-0{border-top:0px solid #ddd!important;padding:0;margin-bottom:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-0{justify-content:left;border-right:none!important;padding:0;display:flex;gap:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1{padding:0;margin-left:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1 .e-primary{color:#44566c;border-radius:4px;border:1px solid #dbe1e7;background:#fff;width:87px;margin:0;padding:2px 12px;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:14px;height:28px}.custom-dialog-rte .dialog-content .custom-row-1{padding:0;height:calc(100% - 40px);gap:12px}.custom-dialog-rte .e-footer-content{border:0}.custom-dialog-rte .e-footer-content .custom-row-0{padding:20px 0}.custom-dialog-rte .e-footer-content .e-control.e-btn{font-family:Arial;font-size:12px;line-height:14px;padding:2px 12px;height:28px;background:#fff;color:#44566c}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn{border-color:#dbe1e7}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn:before{content:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Crect width%3D%2216%22 height%3D%2216%22 fill%3D%22white%22%2F%3E%0D%3Crect x%3D%224.5%22 y%3D%224.5%22 width%3D%229%22 height%3D%229%22 rx%3D%221.5%22 stroke%3D%22%236C7C90%22%2F%3E%0D%3Cpath d%3D%22M11.5 2.5H4.5C3.39543 2.5 2.5 3.39543 2.5 4.5V11.5%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");vertical-align:middle;margin-right:6px}.custom-dialog-rte .e-footer-content .e-control.e-btn.e-primary{color:#fff;background:#1364b3}.e-dialog.largest{width:96vw!important;height:88vh!important;max-height:88vh;max-width:2100px}::ng-deep ol.custom-list{list-style:none!important;counter-reset:list-counter}::ng-deep ol.custom-list li{counter-increment:list-counter}::ng-deep ol.parentheses li::marker{content:\"(\" counter(list-counter) \") \"}::ng-deep .e-tiempos-headline{font-family:Tiempos Headline-Semibold!important}::ng-deep .e-avenir-lt-pro-black{font-family:Avenir LT Pro-Black!important}::ng-deep .e-avenir-lt-pro-black-oblique{font-family:Avenir LT Pro-Black Oblique!important}::ng-deep .e-avenir-lt-pro-heavy{font-family:Avenir LT Pro-Heavy!important}::ng-deep .e-avenir-lt-pro-heavy-oblique{font-family:Avenir LT Pro-Heavy Oblique!important}::ng-deep .e-avenir-lt-pro-light{font-family:Avenir LT Pro-Light!important}::ng-deep .e-avenir-lt-pro-light-oblique{font-family:Avenir LT Pro-Light Oblique!important}::ng-deep .e-avenir-lt-pro-medium{font-family:Avenir LT Pro-Medium!important}::ng-deep .e-avenir-lt-pro-medium-oblique{font-family:Avenir LT Pro-Medium Oblique!important}::ng-deep .e-avenir-next-lt-pro-bold{font-family:Avenir Next LT Pro-Bold!important}::ng-deep .e-avenir-next-lt-pro-demi{font-family:Avenir Next LT Pro-Demi!important}::ng-deep .e-avenir-next-lt-pro-demilt{font-family:Avenir Next LT Pro-Demilt!important}::ng-deep .e-avenir-next-lt-pro-heavy{font-family:Avenir Next LT Pro-Heavy!important}::ng-deep .e-avenir-next-lt-pro-heavylt{font-family:Avenir Next LT Pro-Heavylt!important}::ng-deep .e-avenir-next-lt-pro-it{font-family:Avenir Next LT Pro-It!important}::ng-deep .e-avenir-next-lt-pro-light{font-family:Avenir Next LT Pro-Light!important}::ng-deep .e-avenir-next-lt-pro-mediumlt{font-family:Avenir Next LT Pro-Mediumlt!important}::ng-deep .e-avenir-next-lt-pro-regular{font-family:Avenir Next LT Pro-Regular!important}::ng-deep .e-avenir-next-lt-pro-ultlt{font-family:Avenir Next LT Pro-UltLt!important}::ng-deep .e-avenir-next-lt-pro-ultltlt{font-family:Avenir Next LT Pro-UltLtlt!important}::ng-deep .e-source-han-sans-cn-extralight{font-family:Source Han Sans CN-ExtraLight!important}::ng-deep .e-source-han-sans-cn-regular{font-family:Source Han Sans CN-Regular!important}::ng-deep .e-source-han-sans-cn-medium{font-family:Source Han Sans CN-Medium!important}::ng-deep .e-source-han-sans-cn-bold{font-family:Source Han Sans CN-Bold!important}::ng-deep .e-ping-fang-sc-light{font-family:Ping Fang SC-Light!important}::ng-deep .e-ping-fang-sc-medium{font-family:Ping Fang SC-Medium!important}::ng-deep .e-ping-fang-sc-regular{font-family:Ping Fang SC-Regular!important}::ng-deep .e-ping-fang-sc-semibold{font-family:Ping Fang SC-Semibold!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3$2.ButtonComponent, selector: "[ejs-button]", inputs: ["content", "cssClass", "disabled", "enableHtmlSanitizer", "enablePersistence", "enableRtl", "iconCss", "iconPosition", "isPrimary", "isToggle", "locale"], outputs: ["created"] }, { kind: "component", type: i6.DialogComponent, selector: "ejs-dialog", inputs: ["allowDragging", "animationSettings", "buttons", "closeOnEscape", "content", "cssClass", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "footerTemplate", "header", "height", "isModal", "locale", "minHeight", "position", "resizeHandles", "showCloseIcon", "target", "visible", "width", "zIndex"], outputs: ["beforeClose", "beforeOpen", "beforeSanitizeHtml", "close", "created", "destroyed", "drag", "dragStart", "dragStop", "open", "overlayClick", "resizeStart", "resizeStop", "resizing", "visibleChange"] }, { kind: "component", type: i6$1.DropDownListComponent, selector: "ejs-dropdownlist", inputs: ["actionFailureTemplate", "allowFiltering", "allowObjectBinding", "cssClass", "dataSource", "enablePersistence", "enableRtl", "enableVirtualization", "enabled", "fields", "filterBarPlaceholder", "filterType", "floatLabelType", "footerTemplate", "groupTemplate", "headerTemplate", "htmlAttributes", "ignoreAccent", "ignoreCase", "index", "isDeviceFullScreen", "itemTemplate", "locale", "noRecordsTemplate", "placeholder", "popupHeight", "popupWidth", "query", "readonly", "showClearButton", "sortOrder", "text", "value", "valueTemplate", "width", "zIndex"], outputs: ["actionBegin", "actionComplete", "actionFailure", "beforeOpen", "blur", "change", "close", "created", "dataBound", "destroyed", "filtering", "focus", "open", "select", "valueChange"] }, { kind: "component", type: i8.SkeletonComponent, selector: "ejs-skeleton", inputs: ["cssClass", "enablePersistence", "enableRtl", "height", "label", "locale", "shape", "shimmerEffect", "visible", "width"] }, { kind: "component", type: i9.RichTextEditorComponent, selector: "ejs-richtexteditor", inputs: ["autoSaveOnIdle", "backgroundColor", "bulletFormatList", "cssClass", "editorMode", "emojiPickerSettings", "enableAutoUrl", "enableHtmlEncode", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "enableTabKey", "enableXhtml", "enabled", "enterKey", "exportPdf", "exportWord", "fileManagerSettings", "floatingToolbarOffset", "fontColor", "fontFamily", "fontSize", "format", "formatPainterSettings", "formatter", "height", "htmlAttributes", "iframeSettings", "importWord", "inlineMode", "insertAudioSettings", "insertImageSettings", "insertVideoSettings", "keyConfig", "locale", "maxLength", "numberFormatList", "pasteCleanupSettings", "placeholder", "quickToolbarSettings", "readonly", "saveInterval", "shiftEnterKey", "showCharCount", "showTooltip", "slashMenuSettings", "tableSettings", "toolbarSettings", "undoRedoSteps", "undoRedoTimer", "value", "valueTemplate", "width"], outputs: ["actionBegin", "actionComplete", "afterImageDelete", "afterMediaDelete", "afterPasteCleanup", "beforeDialogClose", "beforeDialogOpen", "beforeFileUpload", "beforeImageDrop", "beforeImageUpload", "beforePasteCleanup", "beforeQuickToolbarOpen", "beforeSanitizeHtml", "blur", "change", "created", "destroyed", "dialogClose", "dialogOpen", "fileRemoving", "fileSelected", "fileUploadFailed", "fileUploadSuccess", "fileUploading", "focus", "imageRemoving", "imageSelected", "imageUploadFailed", "imageUploadSuccess", "imageUploading", "quickToolbarClose", "quickToolbarOpen", "resizeStart", "resizeStop", "resizing", "slashMenuItemSelect", "toolbarClick", "toolbarStatusUpdate", "updatedToolbarStatus", "valueChange"] }] });
20998
21009
  }