simpo-component-library 3.2.50 → 3.2.52

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.
@@ -19,11 +19,11 @@ export class NavbarButtonElementComponent {
19
19
  this._eventService.pageRedirectionButton.emit({ data: pageData ? pageData : this.buttonData });
20
20
  }
21
21
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: NavbarButtonElementComponent, deps: [{ token: i1.EventsService }], target: i0.ɵɵFactoryTarget.Component }); }
22
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: NavbarButtonElementComponent, isStandalone: true, selector: "simpo-navbar-button-element", inputs: { buttonData: "buttonData", buttonStyle: "buttonStyle", selectedStyle: "selectedStyle", bgColor: "bgColor", sectionId: "sectionId", accentColor: "accentColor" }, ngImport: i0, template: "<div *ngIf=\"false\">\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.TAB\">\r\n <div *ngIf=\"!buttonData?.folder\">\r\n <button mat-stroked-button style=\"border: none; white-space: nowrap;\" [id]=\"sectionId\" [simpoColor]=\"bgColor\"\r\n [ngStyle]=\"{color:buttonStyle?.color}\" class=\"navbar-button\">{{buttonData?.label}}</button>\r\n <div [ngStyle]=\"{'border-bottom':'1px solid'+buttonStyle?.color}\" (click)=\"changePage()\" [id]=\"sectionId\"></div>\r\n </div>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"navbar-button dropdown-toggle\" [simpoColor]=\"bgColor\" style=\"border: none; white-space: nowrap;\"\r\n [ngStyle]=\"{color:buttonStyle?.color}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div [ngStyle]=\"{'border-bottom':'1px solid'+buttonStyle?.color}\" [id]=\"sectionId\"></div>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.ROUND_SUBTLE\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.ROUND_BOLD\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.SQUARE_SUBTLE\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;border-radius: 0px !important;width: max-content!important;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;border-radius: 0px !important;width: max-content!important;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.SQUARE_BOLD\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;width: max-content!important; border-radius: 0px !important;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;width: max-content!important; border-radius: 0px !important;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <button mat-stroked-button color=\"primary btn-lg px-4 me-md-2\">{{buttonData?.content?.label}}</button> -->\r\n\r\n</div>\r\n<div>\r\n <button mat-stroked-button style=\"border: none;width: max-content!important;\" *ngIf=\"!buttonData?.folder\" [simpoColor]=\"buttonData?.status ? '' : bgColor\"\r\n (click)=\"changePage()\" [id]=\"sectionId\" [style.color]=\"buttonData?.status ? accentColor : ''\" [style.fontWeight]=\"buttonData?.status ? '700' : ''\"\r\n class=\"status-navbar-button\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button class=\"status-navbar-button not-selected-dropdown dropdown-toggle\" [style.fontWeight]=\"buttonData?.status ? '700' : ''\" [simpoColor]=\"buttonData?.status ? '' : bgColor\"\r\n style=\"border: none;width: max-content!important;\" [style.color]=\"buttonData?.status ? accentColor : ''\" type=\"button\" id=\"headerDropdownButton\"\r\n data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".navbar-button,.status-navbar-button{font-size:14px!important}@media only screen and (max-width : 475px){.navbar-button{width:100%!important;display:flex;justify-content:flex-start}.status-navbar-button{color:#000!important;display:flex;justify-content:flex-start}.dropdown{padding-left:10px}.dropdown-toggle{display:flex;align-items:center;gap:10px}}.not-selected-dropdown{background:transparent}.dropdown-item{font-size:15px;padding:10px;font-family:Roboto,sans-serif;border-bottom:1px solid #dee2e6}.dropdown-menu{top:40px;border:none;border-radius:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: ColorDirective, selector: "[simpoColor]", inputs: ["simpoColor"] }] }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: NavbarButtonElementComponent, isStandalone: true, selector: "simpo-navbar-button-element", inputs: { buttonData: "buttonData", buttonStyle: "buttonStyle", selectedStyle: "selectedStyle", bgColor: "bgColor", sectionId: "sectionId", accentColor: "accentColor" }, ngImport: i0, template: "<div *ngIf=\"false\">\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.TAB\">\r\n <div *ngIf=\"!buttonData?.folder\">\r\n <button mat-stroked-button style=\"border: none; white-space: nowrap;\" [id]=\"sectionId\" [simpoColor]=\"bgColor\"\r\n [ngStyle]=\"{color:buttonStyle?.color}\" class=\"navbar-button\">{{buttonData?.label}}</button>\r\n <div [ngStyle]=\"{'border-bottom':'1px solid'+buttonStyle?.color}\" (click)=\"changePage()\" [id]=\"sectionId\"></div>\r\n </div>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"navbar-button dropdown-toggle\" [simpoColor]=\"bgColor\" style=\"border: none; white-space: nowrap;\"\r\n [ngStyle]=\"{color:buttonStyle?.color}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div [ngStyle]=\"{'border-bottom':'1px solid'+buttonStyle?.color}\" [id]=\"sectionId\"></div>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.ROUND_SUBTLE\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.ROUND_BOLD\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.SQUARE_SUBTLE\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;border-radius: 0px !important;width: max-content!important;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;border-radius: 0px !important;width: max-content!important;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.SQUARE_BOLD\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;width: max-content!important; border-radius: 0px !important;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;width: max-content!important; border-radius: 0px !important;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <button mat-stroked-button color=\"primary btn-lg px-4 me-md-2\">{{buttonData?.content?.label}}</button> -->\r\n\r\n</div>\r\n<div>\r\n <!-- <button mat-stroked-button style=\"border: none;width: max-content!important;\" *ngIf=\"!buttonData?.folder\" [simpoColor]=\"buttonData?.status ? '' : bgColor\"\r\n (click)=\"changePage()\" [id]=\"sectionId\" [style.color]=\"buttonData?.status ? accentColor : ''\" [style.fontWeight]=\"buttonData?.status ? '700' : ''\"\r\n class=\"status-navbar-button\">{{buttonData?.label}}</button> -->\r\n <button c *ngIf=\"!buttonData?.folder\" [simpoColor]=\"buttonData?.status ? '' : bgColor\"\r\n (click)=\"changePage()\" [id]=\"sectionId\" [style.color]=\"buttonData?.status ? accentColor : ''\" [style.fontWeight]=\"buttonData?.status ? '700' : ''\"\r\n class=\"status-navbar-button button\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button class=\"status-navbar-button not-selected-dropdown dropdown-toggle\" [style.fontWeight]=\"buttonData?.status ? '700' : ''\" [simpoColor]=\"buttonData?.status ? '' : bgColor\"\r\n style=\"border: none;width: max-content!important;\" [style.color]=\"buttonData?.status ? accentColor : ''\" type=\"button\" id=\"headerDropdownButton\"\r\n data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".navbar-button,.status-navbar-button{font-size:14px!important}@media only screen and (max-width : 475px){.navbar-button{width:100%!important;display:flex;justify-content:flex-start}.status-navbar-button{color:#000!important;display:flex;justify-content:flex-start}.dropdown{padding-left:10px}.dropdown-toggle{display:flex;align-items:center;gap:10px}}.not-selected-dropdown{background:transparent;font-size:16px!important}.dropdown-item{font-size:15px;padding:10px;font-family:Roboto,sans-serif;border-bottom:1px solid #dee2e6}.dropdown-menu{top:40px;border:none;border-radius:10px}.button{border:none;background:none;outline:none;font-size:16px!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: ColorDirective, selector: "[simpoColor]", inputs: ["simpoColor"] }] }); }
23
23
  }
24
24
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: NavbarButtonElementComponent, decorators: [{
25
25
  type: Component,
26
- args: [{ selector: 'simpo-navbar-button-element', standalone: true, imports: [CommonModule, MatButtonModule, ColorDirective], template: "<div *ngIf=\"false\">\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.TAB\">\r\n <div *ngIf=\"!buttonData?.folder\">\r\n <button mat-stroked-button style=\"border: none; white-space: nowrap;\" [id]=\"sectionId\" [simpoColor]=\"bgColor\"\r\n [ngStyle]=\"{color:buttonStyle?.color}\" class=\"navbar-button\">{{buttonData?.label}}</button>\r\n <div [ngStyle]=\"{'border-bottom':'1px solid'+buttonStyle?.color}\" (click)=\"changePage()\" [id]=\"sectionId\"></div>\r\n </div>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"navbar-button dropdown-toggle\" [simpoColor]=\"bgColor\" style=\"border: none; white-space: nowrap;\"\r\n [ngStyle]=\"{color:buttonStyle?.color}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div [ngStyle]=\"{'border-bottom':'1px solid'+buttonStyle?.color}\" [id]=\"sectionId\"></div>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.ROUND_SUBTLE\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.ROUND_BOLD\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.SQUARE_SUBTLE\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;border-radius: 0px !important;width: max-content!important;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;border-radius: 0px !important;width: max-content!important;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.SQUARE_BOLD\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;width: max-content!important; border-radius: 0px !important;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;width: max-content!important; border-radius: 0px !important;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <button mat-stroked-button color=\"primary btn-lg px-4 me-md-2\">{{buttonData?.content?.label}}</button> -->\r\n\r\n</div>\r\n<div>\r\n <button mat-stroked-button style=\"border: none;width: max-content!important;\" *ngIf=\"!buttonData?.folder\" [simpoColor]=\"buttonData?.status ? '' : bgColor\"\r\n (click)=\"changePage()\" [id]=\"sectionId\" [style.color]=\"buttonData?.status ? accentColor : ''\" [style.fontWeight]=\"buttonData?.status ? '700' : ''\"\r\n class=\"status-navbar-button\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button class=\"status-navbar-button not-selected-dropdown dropdown-toggle\" [style.fontWeight]=\"buttonData?.status ? '700' : ''\" [simpoColor]=\"buttonData?.status ? '' : bgColor\"\r\n style=\"border: none;width: max-content!important;\" [style.color]=\"buttonData?.status ? accentColor : ''\" type=\"button\" id=\"headerDropdownButton\"\r\n data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".navbar-button,.status-navbar-button{font-size:14px!important}@media only screen and (max-width : 475px){.navbar-button{width:100%!important;display:flex;justify-content:flex-start}.status-navbar-button{color:#000!important;display:flex;justify-content:flex-start}.dropdown{padding-left:10px}.dropdown-toggle{display:flex;align-items:center;gap:10px}}.not-selected-dropdown{background:transparent}.dropdown-item{font-size:15px;padding:10px;font-family:Roboto,sans-serif;border-bottom:1px solid #dee2e6}.dropdown-menu{top:40px;border:none;border-radius:10px}\n"] }]
26
+ args: [{ selector: 'simpo-navbar-button-element', standalone: true, imports: [CommonModule, MatButtonModule, ColorDirective], template: "<div *ngIf=\"false\">\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.TAB\">\r\n <div *ngIf=\"!buttonData?.folder\">\r\n <button mat-stroked-button style=\"border: none; white-space: nowrap;\" [id]=\"sectionId\" [simpoColor]=\"bgColor\"\r\n [ngStyle]=\"{color:buttonStyle?.color}\" class=\"navbar-button\">{{buttonData?.label}}</button>\r\n <div [ngStyle]=\"{'border-bottom':'1px solid'+buttonStyle?.color}\" (click)=\"changePage()\" [id]=\"sectionId\"></div>\r\n </div>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"navbar-button dropdown-toggle\" [simpoColor]=\"bgColor\" style=\"border: none; white-space: nowrap;\"\r\n [ngStyle]=\"{color:buttonStyle?.color}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div [ngStyle]=\"{'border-bottom':'1px solid'+buttonStyle?.color}\" [id]=\"sectionId\"></div>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.ROUND_SUBTLE\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.ROUND_BOLD\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;width: max-content!important; border-radius: 8px;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.SQUARE_SUBTLE\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;border-radius: 0px !important;width: max-content!important;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;border-radius: 0px !important;width: max-content!important;\"\r\n [ngStyle]=\"{color:buttonStyle?.color,'background-color':buttonStyle?.subtleColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"selectedStyle === HeaderButtonStyle.SQUARE_BOLD\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button\" *ngIf=\"!buttonData?.folder\"\r\n style=\"border: none;width: max-content!important; border-radius: 0px !important;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" (click)=\"changePage()\"\r\n [id]=\"sectionId\">{{buttonData?.label}}</button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button mat-stroked-button class=\"primary btn-lg px-4 me-md-2 navbar-button dropdown-toggle\"\r\n style=\"border: none;width: max-content!important; border-radius: 0px !important;\"\r\n [ngStyle]=\"{color:buttonStyle?.boldColor,'background-color':buttonStyle?.backgroundColor}\" type=\"button\"\r\n id=\"headerDropdownButton\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <button mat-stroked-button color=\"primary btn-lg px-4 me-md-2\">{{buttonData?.content?.label}}</button> -->\r\n\r\n</div>\r\n<div>\r\n <!-- <button mat-stroked-button style=\"border: none;width: max-content!important;\" *ngIf=\"!buttonData?.folder\" [simpoColor]=\"buttonData?.status ? '' : bgColor\"\r\n (click)=\"changePage()\" [id]=\"sectionId\" [style.color]=\"buttonData?.status ? accentColor : ''\" [style.fontWeight]=\"buttonData?.status ? '700' : ''\"\r\n class=\"status-navbar-button\">{{buttonData?.label}}</button> -->\r\n <button c *ngIf=\"!buttonData?.folder\" [simpoColor]=\"buttonData?.status ? '' : bgColor\"\r\n (click)=\"changePage()\" [id]=\"sectionId\" [style.color]=\"buttonData?.status ? accentColor : ''\" [style.fontWeight]=\"buttonData?.status ? '700' : ''\"\r\n class=\"status-navbar-button button\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown\" *ngIf=\"buttonData?.folder && (buttonData?.folder?.pages?.length || 0) > 0\">\r\n <button class=\"status-navbar-button not-selected-dropdown dropdown-toggle\" [style.fontWeight]=\"buttonData?.status ? '700' : ''\" [simpoColor]=\"buttonData?.status ? '' : bgColor\"\r\n style=\"border: none;width: max-content!important;\" [style.color]=\"buttonData?.status ? accentColor : ''\" type=\"button\" id=\"headerDropdownButton\"\r\n data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{buttonData?.label}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"headerDropdownButton\">\r\n <a class=\"dropdown-item\" *ngFor=\"let page of buttonData?.folder?.pages\" (click)=\"changePage(page)\">{{page.label}}</a>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".navbar-button,.status-navbar-button{font-size:14px!important}@media only screen and (max-width : 475px){.navbar-button{width:100%!important;display:flex;justify-content:flex-start}.status-navbar-button{color:#000!important;display:flex;justify-content:flex-start}.dropdown{padding-left:10px}.dropdown-toggle{display:flex;align-items:center;gap:10px}}.not-selected-dropdown{background:transparent;font-size:16px!important}.dropdown-item{font-size:15px;padding:10px;font-family:Roboto,sans-serif;border-bottom:1px solid #dee2e6}.dropdown-menu{top:40px;border:none;border-radius:10px}.button{border:none;background:none;outline:none;font-size:16px!important}\n"] }]
27
27
  }], ctorParameters: () => [{ type: i1.EventsService }], propDecorators: { buttonData: [{
28
28
  type: Input
29
29
  }], buttonStyle: [{
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
37
37
  }], accentColor: [{
38
38
  type: Input
39
39
  }] } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLWJ1dHRvbi1lbGVtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvZWxlbWVudHMvbmF2YmFyLWJ1dHRvbi1lbGVtZW50L25hdmJhci1idXR0b24tZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL25hdmJhci1idXR0b24tZWxlbWVudC9uYXZiYXItYnV0dG9uLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7O0FBU2pFLE1BQU0sT0FBTyw0QkFBNEI7SUFTdkMsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFEaEQsc0JBQWlCLEdBQUcsaUJBQWlCLENBQUE7SUFDYSxDQUFDO0lBRW5ELFFBQVE7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQWM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFBO0lBQzlGLENBQUM7OEdBakJVLDRCQUE0QjtrR0FBNUIsNEJBQTRCLGlRQ2Z6QywwdVBBeUdBLHdtQkQ5RlksWUFBWSxvVkFBRSxlQUFlLDROQUFFLGNBQWM7OzJGQUk1Qyw0QkFBNEI7a0JBUHhDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBQzNCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDO2tGQUsvQyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IEhlYWRlckJ1dHRvbk1vZGVsLCBIZWFkZXJCdXR0b25TdHlsZU1vZGVsLCBOYXZiYXJCdXR0b24gfSBmcm9tICcuLy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IEhlYWRlckJ1dHRvblN0eWxlIH0gZnJvbSAnLi8uLi8uLi9zdHlsZXMvaW5kZXgnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb2xvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb2xvci5kaXJlY3RpdmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1uYXZiYXItYnV0dG9uLWVsZW1lbnQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBDb2xvckRpcmVjdGl2ZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25hdmJhci1idXR0b24tZWxlbWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL25hdmJhci1idXR0b24tZWxlbWVudC5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTmF2YmFyQnV0dG9uRWxlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuICBASW5wdXQoKSBidXR0b25EYXRhPzogTmF2YmFyQnV0dG9uO1xyXG4gIEBJbnB1dCgpIGJ1dHRvblN0eWxlPzogSGVhZGVyQnV0dG9uU3R5bGVNb2RlbFxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkU3R5bGU/OiBIZWFkZXJCdXR0b25TdHlsZVxyXG4gIEBJbnB1dCgpIGJnQ29sb3I/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2VjdGlvbklkPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFjY2VudENvbG9yPzogc3RyaW5nO1xyXG5cclxuICBIZWFkZXJCdXR0b25TdHlsZSA9IEhlYWRlckJ1dHRvblN0eWxlXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlKXt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2codGhpcy5hY2NlbnRDb2xvcilcclxuICB9XHJcblxyXG4gIGNoYW5nZVBhZ2UocGFnZURhdGE/OiBhbnkpe1xyXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLnBhZ2VSZWRpcmVjdGlvbkJ1dHRvbi5lbWl0KHtkYXRhOiBwYWdlRGF0YSA/IHBhZ2VEYXRhIDogdGhpcy5idXR0b25EYXRhfSlcclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImZhbHNlXCI+XHJcbiAgPGRpdiAqbmdJZj1cInNlbGVjdGVkU3R5bGUgPT09IEhlYWRlckJ1dHRvblN0eWxlLlRBQlwiPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFidXR0b25EYXRhPy5mb2xkZXJcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gc3R5bGU9XCJib3JkZXI6IG5vbmU7IHdoaXRlLXNwYWNlOiBub3dyYXA7XCIgW2lkXT1cInNlY3Rpb25JZFwiIFtzaW1wb0NvbG9yXT1cImJnQ29sb3JcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7Y29sb3I6YnV0dG9uU3R5bGU/LmNvbG9yfVwiIGNsYXNzPVwibmF2YmFyLWJ1dHRvblwiPnt7YnV0dG9uRGF0YT8ubGFiZWx9fTwvYnV0dG9uPlxyXG4gICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsnYm9yZGVyLWJvdHRvbSc6JzFweCBzb2xpZCcrYnV0dG9uU3R5bGU/LmNvbG9yfVwiIChjbGljayk9XCJjaGFuZ2VQYWdlKClcIiBbaWRdPVwic2VjdGlvbklkXCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiICpuZ0lmPVwiYnV0dG9uRGF0YT8uZm9sZGVyICYmIChidXR0b25EYXRhPy5mb2xkZXI/LnBhZ2VzPy5sZW5ndGggfHwgMCkgPiAwXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwibmF2YmFyLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIiBbc2ltcG9Db2xvcl09XCJiZ0NvbG9yXCIgc3R5bGU9XCJib3JkZXI6IG5vbmU7IHdoaXRlLXNwYWNlOiBub3dyYXA7XCJcclxuICAgICAgW25nU3R5bGVdPVwie2NvbG9yOmJ1dHRvblN0eWxlPy5jb2xvcn1cIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBpZD1cImhlYWRlckRyb3Bkb3duQnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XHJcbiAgICAgICAge3tidXR0b25EYXRhPy5sYWJlbH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsnYm9yZGVyLWJvdHRvbSc6JzFweCBzb2xpZCcrYnV0dG9uU3R5bGU/LmNvbG9yfVwiIFtpZF09XCJzZWN0aW9uSWRcIj48L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJoZWFkZXJEcm9wZG93bkJ1dHRvblwiPlxyXG4gICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiICpuZ0Zvcj1cImxldCBwYWdlIG9mIGJ1dHRvbkRhdGE/LmZvbGRlcj8ucGFnZXNcIiAoY2xpY2spPVwiY2hhbmdlUGFnZShwYWdlKVwiPnt7cGFnZS5sYWJlbH19PC9hPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFN0eWxlID09PSBIZWFkZXJCdXR0b25TdHlsZS5ST1VORF9TVUJUTEVcIj5cclxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tbGcgcHgtNCBtZS1tZC0yIG5hdmJhci1idXR0b25cIiAqbmdJZj1cIiFidXR0b25EYXRhPy5mb2xkZXJcIlxyXG4gICAgICBzdHlsZT1cImJvcmRlcjogbm9uZTt3aWR0aDogbWF4LWNvbnRlbnQhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOiA4cHg7XCJcclxuICAgICAgW25nU3R5bGVdPVwie2NvbG9yOmJ1dHRvblN0eWxlPy5jb2xvciwnYmFja2dyb3VuZC1jb2xvcic6YnV0dG9uU3R5bGU/LnN1YnRsZUNvbG9yfVwiIChjbGljayk9XCJjaGFuZ2VQYWdlKClcIlxyXG4gICAgICBbaWRdPVwic2VjdGlvbklkXCI+e3tidXR0b25EYXRhPy5sYWJlbH19PC9idXR0b24+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIiAqbmdJZj1cImJ1dHRvbkRhdGE/LmZvbGRlciAmJiAoYnV0dG9uRGF0YT8uZm9sZGVyPy5wYWdlcz8ubGVuZ3RoIHx8IDApID4gMFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInByaW1hcnkgYnRuLWxnIHB4LTQgbWUtbWQtMiBuYXZiYXItYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZVwiXHJcbiAgICAgICAgc3R5bGU9XCJib3JkZXI6IG5vbmU7d2lkdGg6IG1heC1jb250ZW50IWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogOHB4O1wiXHJcbiAgICAgICAgW25nU3R5bGVdPVwie2NvbG9yOmJ1dHRvblN0eWxlPy5jb2xvciwnYmFja2dyb3VuZC1jb2xvcic6YnV0dG9uU3R5bGU/LnN1YnRsZUNvbG9yfVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGlkPVwiaGVhZGVyRHJvcGRvd25CdXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICB7e2J1dHRvbkRhdGE/LmxhYmVsfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiaGVhZGVyRHJvcGRvd25CdXR0b25cIj5cclxuICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAqbmdGb3I9XCJsZXQgcGFnZSBvZiBidXR0b25EYXRhPy5mb2xkZXI/LnBhZ2VzXCIgKGNsaWNrKT1cImNoYW5nZVBhZ2UocGFnZSlcIj57e3BhZ2UubGFiZWx9fTwvYT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRTdHlsZSA9PT0gSGVhZGVyQnV0dG9uU3R5bGUuUk9VTkRfQk9MRFwiPlxyXG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJwcmltYXJ5IGJ0bi1sZyBweC00IG1lLW1kLTIgbmF2YmFyLWJ1dHRvblwiICpuZ0lmPVwiIWJ1dHRvbkRhdGE/LmZvbGRlclwiXHJcbiAgICAgIHN0eWxlPVwiYm9yZGVyOiBub25lO3dpZHRoOiBtYXgtY29udGVudCFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6IDhweDtcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7Y29sb3I6YnV0dG9uU3R5bGU/LmJvbGRDb2xvciwnYmFja2dyb3VuZC1jb2xvcic6YnV0dG9uU3R5bGU/LmJhY2tncm91bmRDb2xvcn1cIiAoY2xpY2spPVwiY2hhbmdlUGFnZSgpXCJcclxuICAgICAgW2lkXT1cInNlY3Rpb25JZFwiPnt7YnV0dG9uRGF0YT8ubGFiZWx9fTwvYnV0dG9uPlxyXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgKm5nSWY9XCJidXR0b25EYXRhPy5mb2xkZXIgJiYgKGJ1dHRvbkRhdGE/LmZvbGRlcj8ucGFnZXM/Lmxlbmd0aCB8fCAwKSA+IDBcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJwcmltYXJ5IGJ0bi1sZyBweC00IG1lLW1kLTIgbmF2YmFyLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIlxyXG4gICAgICAgIHN0eWxlPVwiYm9yZGVyOiBub25lO3dpZHRoOiBtYXgtY29udGVudCFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6IDhweDtcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIntjb2xvcjpidXR0b25TdHlsZT8uYm9sZENvbG9yLCdiYWNrZ3JvdW5kLWNvbG9yJzpidXR0b25TdHlsZT8uYmFja2dyb3VuZENvbG9yfVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGlkPVwiaGVhZGVyRHJvcGRvd25CdXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICB7e2J1dHRvbkRhdGE/LmxhYmVsfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiaGVhZGVyRHJvcGRvd25CdXR0b25cIj5cclxuICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAqbmdGb3I9XCJsZXQgcGFnZSBvZiBidXR0b25EYXRhPy5mb2xkZXI/LnBhZ2VzXCIgKGNsaWNrKT1cImNoYW5nZVBhZ2UocGFnZSlcIj57e3BhZ2UubGFiZWx9fTwvYT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRTdHlsZSA9PT0gSGVhZGVyQnV0dG9uU3R5bGUuU1FVQVJFX1NVQlRMRVwiPlxyXG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJwcmltYXJ5IGJ0bi1sZyBweC00IG1lLW1kLTIgbmF2YmFyLWJ1dHRvblwiICpuZ0lmPVwiIWJ1dHRvbkRhdGE/LmZvbGRlclwiXHJcbiAgICAgIHN0eWxlPVwiYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6IDBweCAhaW1wb3J0YW50O3dpZHRoOiBtYXgtY29udGVudCFpbXBvcnRhbnQ7XCJcclxuICAgICAgW25nU3R5bGVdPVwie2NvbG9yOmJ1dHRvblN0eWxlPy5jb2xvciwnYmFja2dyb3VuZC1jb2xvcic6YnV0dG9uU3R5bGU/LnN1YnRsZUNvbG9yfVwiIChjbGljayk9XCJjaGFuZ2VQYWdlKClcIlxyXG4gICAgICBbaWRdPVwic2VjdGlvbklkXCI+e3tidXR0b25EYXRhPy5sYWJlbH19PC9idXR0b24+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIiAqbmdJZj1cImJ1dHRvbkRhdGE/LmZvbGRlciAmJiAoYnV0dG9uRGF0YT8uZm9sZGVyPy5wYWdlcz8ubGVuZ3RoIHx8IDApID4gMFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInByaW1hcnkgYnRuLWxnIHB4LTQgbWUtbWQtMiBuYXZiYXItYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZVwiXHJcbiAgICAgICAgc3R5bGU9XCJib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czogMHB4ICFpbXBvcnRhbnQ7d2lkdGg6IG1heC1jb250ZW50IWltcG9ydGFudDtcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIntjb2xvcjpidXR0b25TdHlsZT8uY29sb3IsJ2JhY2tncm91bmQtY29sb3InOmJ1dHRvblN0eWxlPy5zdWJ0bGVDb2xvcn1cIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBpZD1cImhlYWRlckRyb3Bkb3duQnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XHJcbiAgICAgICAge3tidXR0b25EYXRhPy5sYWJlbH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImhlYWRlckRyb3Bkb3duQnV0dG9uXCI+XHJcbiAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgYnV0dG9uRGF0YT8uZm9sZGVyPy5wYWdlc1wiIChjbGljayk9XCJjaGFuZ2VQYWdlKHBhZ2UpXCI+e3twYWdlLmxhYmVsfX08L2E+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cInNlbGVjdGVkU3R5bGUgPT09IEhlYWRlckJ1dHRvblN0eWxlLlNRVUFSRV9CT0xEXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInByaW1hcnkgYnRuLWxnIHB4LTQgbWUtbWQtMiBuYXZiYXItYnV0dG9uXCIgKm5nSWY9XCIhYnV0dG9uRGF0YT8uZm9sZGVyXCJcclxuICAgICAgc3R5bGU9XCJib3JkZXI6IG5vbmU7d2lkdGg6IG1heC1jb250ZW50IWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogMHB4ICFpbXBvcnRhbnQ7XCJcclxuICAgICAgW25nU3R5bGVdPVwie2NvbG9yOmJ1dHRvblN0eWxlPy5ib2xkQ29sb3IsJ2JhY2tncm91bmQtY29sb3InOmJ1dHRvblN0eWxlPy5iYWNrZ3JvdW5kQ29sb3J9XCIgKGNsaWNrKT1cImNoYW5nZVBhZ2UoKVwiXHJcbiAgICAgIFtpZF09XCJzZWN0aW9uSWRcIj57e2J1dHRvbkRhdGE/LmxhYmVsfX08L2J1dHRvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiICpuZ0lmPVwiYnV0dG9uRGF0YT8uZm9sZGVyICYmIChidXR0b25EYXRhPy5mb2xkZXI/LnBhZ2VzPy5sZW5ndGggfHwgMCkgPiAwXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tbGcgcHgtNCBtZS1tZC0yIG5hdmJhci1idXR0b24gZHJvcGRvd24tdG9nZ2xlXCJcclxuICAgICAgc3R5bGU9XCJib3JkZXI6IG5vbmU7d2lkdGg6IG1heC1jb250ZW50IWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogMHB4ICFpbXBvcnRhbnQ7XCJcclxuICAgICAgW25nU3R5bGVdPVwie2NvbG9yOmJ1dHRvblN0eWxlPy5ib2xkQ29sb3IsJ2JhY2tncm91bmQtY29sb3InOmJ1dHRvblN0eWxlPy5iYWNrZ3JvdW5kQ29sb3J9XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgaWQ9XCJoZWFkZXJEcm9wZG93bkJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxyXG4gICAgICAgIHt7YnV0dG9uRGF0YT8ubGFiZWx9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJoZWFkZXJEcm9wZG93bkJ1dHRvblwiPlxyXG4gICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiICpuZ0Zvcj1cImxldCBwYWdlIG9mIGJ1dHRvbkRhdGE/LmZvbGRlcj8ucGFnZXNcIiAoY2xpY2spPVwiY2hhbmdlUGFnZShwYWdlKVwiPnt7cGFnZS5sYWJlbH19PC9hPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5IGJ0bi1sZyBweC00IG1lLW1kLTJcIj57e2J1dHRvbkRhdGE/LmNvbnRlbnQ/LmxhYmVsfX08L2J1dHRvbj4gLS0+XHJcblxyXG48L2Rpdj5cclxuPGRpdj5cclxuICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBzdHlsZT1cImJvcmRlcjogbm9uZTt3aWR0aDogbWF4LWNvbnRlbnQhaW1wb3J0YW50O1wiICpuZ0lmPVwiIWJ1dHRvbkRhdGE/LmZvbGRlclwiIFtzaW1wb0NvbG9yXT1cImJ1dHRvbkRhdGE/LnN0YXR1cyA/ICcnIDogYmdDb2xvclwiXHJcbiAgICAoY2xpY2spPVwiY2hhbmdlUGFnZSgpXCIgW2lkXT1cInNlY3Rpb25JZFwiIFtzdHlsZS5jb2xvcl09XCJidXR0b25EYXRhPy5zdGF0dXMgPyBhY2NlbnRDb2xvciA6ICcnXCIgIFtzdHlsZS5mb250V2VpZ2h0XT1cImJ1dHRvbkRhdGE/LnN0YXR1cyA/ICc3MDAnIDogJydcIlxyXG4gICAgY2xhc3M9XCJzdGF0dXMtbmF2YmFyLWJ1dHRvblwiPnt7YnV0dG9uRGF0YT8ubGFiZWx9fTwvYnV0dG9uPlxyXG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiICpuZ0lmPVwiYnV0dG9uRGF0YT8uZm9sZGVyICYmIChidXR0b25EYXRhPy5mb2xkZXI/LnBhZ2VzPy5sZW5ndGggfHwgMCkgPiAwXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwic3RhdHVzLW5hdmJhci1idXR0b24gbm90LXNlbGVjdGVkLWRyb3Bkb3duIGRyb3Bkb3duLXRvZ2dsZVwiIFtzdHlsZS5mb250V2VpZ2h0XT1cImJ1dHRvbkRhdGE/LnN0YXR1cyA/ICc3MDAnIDogJydcIiBbc2ltcG9Db2xvcl09XCJidXR0b25EYXRhPy5zdGF0dXMgPyAnJyA6IGJnQ29sb3JcIlxyXG4gICAgICBzdHlsZT1cImJvcmRlcjogbm9uZTt3aWR0aDogbWF4LWNvbnRlbnQhaW1wb3J0YW50O1wiIFtzdHlsZS5jb2xvcl09XCJidXR0b25EYXRhPy5zdGF0dXMgPyBhY2NlbnRDb2xvciA6ICcnXCIgdHlwZT1cImJ1dHRvblwiIGlkPVwiaGVhZGVyRHJvcGRvd25CdXR0b25cIlxyXG4gICAgICBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAge3tidXR0b25EYXRhPy5sYWJlbH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiaGVhZGVyRHJvcGRvd25CdXR0b25cIj5cclxuICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgYnV0dG9uRGF0YT8uZm9sZGVyPy5wYWdlc1wiIChjbGljayk9XCJjaGFuZ2VQYWdlKHBhZ2UpXCI+e3twYWdlLmxhYmVsfX08L2E+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLWJ1dHRvbi1lbGVtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvZWxlbWVudHMvbmF2YmFyLWJ1dHRvbi1lbGVtZW50L25hdmJhci1idXR0b24tZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL25hdmJhci1idXR0b24tZWxlbWVudC9uYXZiYXItYnV0dG9uLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7O0FBU2pFLE1BQU0sT0FBTyw0QkFBNEI7SUFTdkMsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFEaEQsc0JBQWlCLEdBQUcsaUJBQWlCLENBQUE7SUFDYSxDQUFDO0lBRW5ELFFBQVE7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQWM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFBO0lBQzlGLENBQUM7OEdBakJVLDRCQUE0QjtrR0FBNUIsNEJBQTRCLGlRQ2Z6QyxvbFFBOEdBLDJzQkRuR1ksWUFBWSxvVkFBRSxlQUFlLDROQUFFLGNBQWM7OzJGQUk1Qyw0QkFBNEI7a0JBUHhDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBQzNCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDO2tGQUsvQyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IEhlYWRlckJ1dHRvbk1vZGVsLCBIZWFkZXJCdXR0b25TdHlsZU1vZGVsLCBOYXZiYXJCdXR0b24gfSBmcm9tICcuLy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IEhlYWRlckJ1dHRvblN0eWxlIH0gZnJvbSAnLi8uLi8uLi9zdHlsZXMvaW5kZXgnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb2xvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb2xvci5kaXJlY3RpdmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1uYXZiYXItYnV0dG9uLWVsZW1lbnQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBDb2xvckRpcmVjdGl2ZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25hdmJhci1idXR0b24tZWxlbWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL25hdmJhci1idXR0b24tZWxlbWVudC5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTmF2YmFyQnV0dG9uRWxlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuICBASW5wdXQoKSBidXR0b25EYXRhPzogTmF2YmFyQnV0dG9uO1xyXG4gIEBJbnB1dCgpIGJ1dHRvblN0eWxlPzogSGVhZGVyQnV0dG9uU3R5bGVNb2RlbFxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkU3R5bGU/OiBIZWFkZXJCdXR0b25TdHlsZVxyXG4gIEBJbnB1dCgpIGJnQ29sb3I/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2VjdGlvbklkPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFjY2VudENvbG9yPzogc3RyaW5nO1xyXG5cclxuICBIZWFkZXJCdXR0b25TdHlsZSA9IEhlYWRlckJ1dHRvblN0eWxlXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlKXt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2codGhpcy5hY2NlbnRDb2xvcilcclxuICB9XHJcblxyXG4gIGNoYW5nZVBhZ2UocGFnZURhdGE/OiBhbnkpe1xyXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLnBhZ2VSZWRpcmVjdGlvbkJ1dHRvbi5lbWl0KHtkYXRhOiBwYWdlRGF0YSA/IHBhZ2VEYXRhIDogdGhpcy5idXR0b25EYXRhfSlcclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImZhbHNlXCI+XHJcbiAgPGRpdiAqbmdJZj1cInNlbGVjdGVkU3R5bGUgPT09IEhlYWRlckJ1dHRvblN0eWxlLlRBQlwiPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFidXR0b25EYXRhPy5mb2xkZXJcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gc3R5bGU9XCJib3JkZXI6IG5vbmU7IHdoaXRlLXNwYWNlOiBub3dyYXA7XCIgW2lkXT1cInNlY3Rpb25JZFwiIFtzaW1wb0NvbG9yXT1cImJnQ29sb3JcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7Y29sb3I6YnV0dG9uU3R5bGU/LmNvbG9yfVwiIGNsYXNzPVwibmF2YmFyLWJ1dHRvblwiPnt7YnV0dG9uRGF0YT8ubGFiZWx9fTwvYnV0dG9uPlxyXG4gICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsnYm9yZGVyLWJvdHRvbSc6JzFweCBzb2xpZCcrYnV0dG9uU3R5bGU/LmNvbG9yfVwiIChjbGljayk9XCJjaGFuZ2VQYWdlKClcIiBbaWRdPVwic2VjdGlvbklkXCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiICpuZ0lmPVwiYnV0dG9uRGF0YT8uZm9sZGVyICYmIChidXR0b25EYXRhPy5mb2xkZXI/LnBhZ2VzPy5sZW5ndGggfHwgMCkgPiAwXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwibmF2YmFyLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIiBbc2ltcG9Db2xvcl09XCJiZ0NvbG9yXCIgc3R5bGU9XCJib3JkZXI6IG5vbmU7IHdoaXRlLXNwYWNlOiBub3dyYXA7XCJcclxuICAgICAgW25nU3R5bGVdPVwie2NvbG9yOmJ1dHRvblN0eWxlPy5jb2xvcn1cIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBpZD1cImhlYWRlckRyb3Bkb3duQnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XHJcbiAgICAgICAge3tidXR0b25EYXRhPy5sYWJlbH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsnYm9yZGVyLWJvdHRvbSc6JzFweCBzb2xpZCcrYnV0dG9uU3R5bGU/LmNvbG9yfVwiIFtpZF09XCJzZWN0aW9uSWRcIj48L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJoZWFkZXJEcm9wZG93bkJ1dHRvblwiPlxyXG4gICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiICpuZ0Zvcj1cImxldCBwYWdlIG9mIGJ1dHRvbkRhdGE/LmZvbGRlcj8ucGFnZXNcIiAoY2xpY2spPVwiY2hhbmdlUGFnZShwYWdlKVwiPnt7cGFnZS5sYWJlbH19PC9hPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFN0eWxlID09PSBIZWFkZXJCdXR0b25TdHlsZS5ST1VORF9TVUJUTEVcIj5cclxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tbGcgcHgtNCBtZS1tZC0yIG5hdmJhci1idXR0b25cIiAqbmdJZj1cIiFidXR0b25EYXRhPy5mb2xkZXJcIlxyXG4gICAgICBzdHlsZT1cImJvcmRlcjogbm9uZTt3aWR0aDogbWF4LWNvbnRlbnQhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOiA4cHg7XCJcclxuICAgICAgW25nU3R5bGVdPVwie2NvbG9yOmJ1dHRvblN0eWxlPy5jb2xvciwnYmFja2dyb3VuZC1jb2xvcic6YnV0dG9uU3R5bGU/LnN1YnRsZUNvbG9yfVwiIChjbGljayk9XCJjaGFuZ2VQYWdlKClcIlxyXG4gICAgICBbaWRdPVwic2VjdGlvbklkXCI+e3tidXR0b25EYXRhPy5sYWJlbH19PC9idXR0b24+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIiAqbmdJZj1cImJ1dHRvbkRhdGE/LmZvbGRlciAmJiAoYnV0dG9uRGF0YT8uZm9sZGVyPy5wYWdlcz8ubGVuZ3RoIHx8IDApID4gMFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInByaW1hcnkgYnRuLWxnIHB4LTQgbWUtbWQtMiBuYXZiYXItYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZVwiXHJcbiAgICAgICAgc3R5bGU9XCJib3JkZXI6IG5vbmU7d2lkdGg6IG1heC1jb250ZW50IWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogOHB4O1wiXHJcbiAgICAgICAgW25nU3R5bGVdPVwie2NvbG9yOmJ1dHRvblN0eWxlPy5jb2xvciwnYmFja2dyb3VuZC1jb2xvcic6YnV0dG9uU3R5bGU/LnN1YnRsZUNvbG9yfVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGlkPVwiaGVhZGVyRHJvcGRvd25CdXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICB7e2J1dHRvbkRhdGE/LmxhYmVsfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiaGVhZGVyRHJvcGRvd25CdXR0b25cIj5cclxuICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAqbmdGb3I9XCJsZXQgcGFnZSBvZiBidXR0b25EYXRhPy5mb2xkZXI/LnBhZ2VzXCIgKGNsaWNrKT1cImNoYW5nZVBhZ2UocGFnZSlcIj57e3BhZ2UubGFiZWx9fTwvYT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRTdHlsZSA9PT0gSGVhZGVyQnV0dG9uU3R5bGUuUk9VTkRfQk9MRFwiPlxyXG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJwcmltYXJ5IGJ0bi1sZyBweC00IG1lLW1kLTIgbmF2YmFyLWJ1dHRvblwiICpuZ0lmPVwiIWJ1dHRvbkRhdGE/LmZvbGRlclwiXHJcbiAgICAgIHN0eWxlPVwiYm9yZGVyOiBub25lO3dpZHRoOiBtYXgtY29udGVudCFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6IDhweDtcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7Y29sb3I6YnV0dG9uU3R5bGU/LmJvbGRDb2xvciwnYmFja2dyb3VuZC1jb2xvcic6YnV0dG9uU3R5bGU/LmJhY2tncm91bmRDb2xvcn1cIiAoY2xpY2spPVwiY2hhbmdlUGFnZSgpXCJcclxuICAgICAgW2lkXT1cInNlY3Rpb25JZFwiPnt7YnV0dG9uRGF0YT8ubGFiZWx9fTwvYnV0dG9uPlxyXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgKm5nSWY9XCJidXR0b25EYXRhPy5mb2xkZXIgJiYgKGJ1dHRvbkRhdGE/LmZvbGRlcj8ucGFnZXM/Lmxlbmd0aCB8fCAwKSA+IDBcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJwcmltYXJ5IGJ0bi1sZyBweC00IG1lLW1kLTIgbmF2YmFyLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIlxyXG4gICAgICAgIHN0eWxlPVwiYm9yZGVyOiBub25lO3dpZHRoOiBtYXgtY29udGVudCFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6IDhweDtcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIntjb2xvcjpidXR0b25TdHlsZT8uYm9sZENvbG9yLCdiYWNrZ3JvdW5kLWNvbG9yJzpidXR0b25TdHlsZT8uYmFja2dyb3VuZENvbG9yfVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGlkPVwiaGVhZGVyRHJvcGRvd25CdXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICB7e2J1dHRvbkRhdGE/LmxhYmVsfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiaGVhZGVyRHJvcGRvd25CdXR0b25cIj5cclxuICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAqbmdGb3I9XCJsZXQgcGFnZSBvZiBidXR0b25EYXRhPy5mb2xkZXI/LnBhZ2VzXCIgKGNsaWNrKT1cImNoYW5nZVBhZ2UocGFnZSlcIj57e3BhZ2UubGFiZWx9fTwvYT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRTdHlsZSA9PT0gSGVhZGVyQnV0dG9uU3R5bGUuU1FVQVJFX1NVQlRMRVwiPlxyXG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJwcmltYXJ5IGJ0bi1sZyBweC00IG1lLW1kLTIgbmF2YmFyLWJ1dHRvblwiICpuZ0lmPVwiIWJ1dHRvbkRhdGE/LmZvbGRlclwiXHJcbiAgICAgIHN0eWxlPVwiYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6IDBweCAhaW1wb3J0YW50O3dpZHRoOiBtYXgtY29udGVudCFpbXBvcnRhbnQ7XCJcclxuICAgICAgW25nU3R5bGVdPVwie2NvbG9yOmJ1dHRvblN0eWxlPy5jb2xvciwnYmFja2dyb3VuZC1jb2xvcic6YnV0dG9uU3R5bGU/LnN1YnRsZUNvbG9yfVwiIChjbGljayk9XCJjaGFuZ2VQYWdlKClcIlxyXG4gICAgICBbaWRdPVwic2VjdGlvbklkXCI+e3tidXR0b25EYXRhPy5sYWJlbH19PC9idXR0b24+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIiAqbmdJZj1cImJ1dHRvbkRhdGE/LmZvbGRlciAmJiAoYnV0dG9uRGF0YT8uZm9sZGVyPy5wYWdlcz8ubGVuZ3RoIHx8IDApID4gMFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInByaW1hcnkgYnRuLWxnIHB4LTQgbWUtbWQtMiBuYXZiYXItYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZVwiXHJcbiAgICAgICAgc3R5bGU9XCJib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czogMHB4ICFpbXBvcnRhbnQ7d2lkdGg6IG1heC1jb250ZW50IWltcG9ydGFudDtcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIntjb2xvcjpidXR0b25TdHlsZT8uY29sb3IsJ2JhY2tncm91bmQtY29sb3InOmJ1dHRvblN0eWxlPy5zdWJ0bGVDb2xvcn1cIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBpZD1cImhlYWRlckRyb3Bkb3duQnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XHJcbiAgICAgICAge3tidXR0b25EYXRhPy5sYWJlbH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImhlYWRlckRyb3Bkb3duQnV0dG9uXCI+XHJcbiAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgYnV0dG9uRGF0YT8uZm9sZGVyPy5wYWdlc1wiIChjbGljayk9XCJjaGFuZ2VQYWdlKHBhZ2UpXCI+e3twYWdlLmxhYmVsfX08L2E+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cInNlbGVjdGVkU3R5bGUgPT09IEhlYWRlckJ1dHRvblN0eWxlLlNRVUFSRV9CT0xEXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInByaW1hcnkgYnRuLWxnIHB4LTQgbWUtbWQtMiBuYXZiYXItYnV0dG9uXCIgKm5nSWY9XCIhYnV0dG9uRGF0YT8uZm9sZGVyXCJcclxuICAgICAgc3R5bGU9XCJib3JkZXI6IG5vbmU7d2lkdGg6IG1heC1jb250ZW50IWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogMHB4ICFpbXBvcnRhbnQ7XCJcclxuICAgICAgW25nU3R5bGVdPVwie2NvbG9yOmJ1dHRvblN0eWxlPy5ib2xkQ29sb3IsJ2JhY2tncm91bmQtY29sb3InOmJ1dHRvblN0eWxlPy5iYWNrZ3JvdW5kQ29sb3J9XCIgKGNsaWNrKT1cImNoYW5nZVBhZ2UoKVwiXHJcbiAgICAgIFtpZF09XCJzZWN0aW9uSWRcIj57e2J1dHRvbkRhdGE/LmxhYmVsfX08L2J1dHRvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiICpuZ0lmPVwiYnV0dG9uRGF0YT8uZm9sZGVyICYmIChidXR0b25EYXRhPy5mb2xkZXI/LnBhZ2VzPy5sZW5ndGggfHwgMCkgPiAwXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tbGcgcHgtNCBtZS1tZC0yIG5hdmJhci1idXR0b24gZHJvcGRvd24tdG9nZ2xlXCJcclxuICAgICAgc3R5bGU9XCJib3JkZXI6IG5vbmU7d2lkdGg6IG1heC1jb250ZW50IWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogMHB4ICFpbXBvcnRhbnQ7XCJcclxuICAgICAgW25nU3R5bGVdPVwie2NvbG9yOmJ1dHRvblN0eWxlPy5ib2xkQ29sb3IsJ2JhY2tncm91bmQtY29sb3InOmJ1dHRvblN0eWxlPy5iYWNrZ3JvdW5kQ29sb3J9XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgaWQ9XCJoZWFkZXJEcm9wZG93bkJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxyXG4gICAgICAgIHt7YnV0dG9uRGF0YT8ubGFiZWx9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJoZWFkZXJEcm9wZG93bkJ1dHRvblwiPlxyXG4gICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiICpuZ0Zvcj1cImxldCBwYWdlIG9mIGJ1dHRvbkRhdGE/LmZvbGRlcj8ucGFnZXNcIiAoY2xpY2spPVwiY2hhbmdlUGFnZShwYWdlKVwiPnt7cGFnZS5sYWJlbH19PC9hPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5IGJ0bi1sZyBweC00IG1lLW1kLTJcIj57e2J1dHRvbkRhdGE/LmNvbnRlbnQ/LmxhYmVsfX08L2J1dHRvbj4gLS0+XHJcblxyXG48L2Rpdj5cclxuPGRpdj5cclxuICA8IS0tIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIHN0eWxlPVwiYm9yZGVyOiBub25lO3dpZHRoOiBtYXgtY29udGVudCFpbXBvcnRhbnQ7XCIgKm5nSWY9XCIhYnV0dG9uRGF0YT8uZm9sZGVyXCIgW3NpbXBvQ29sb3JdPVwiYnV0dG9uRGF0YT8uc3RhdHVzID8gJycgOiBiZ0NvbG9yXCJcclxuICAgIChjbGljayk9XCJjaGFuZ2VQYWdlKClcIiBbaWRdPVwic2VjdGlvbklkXCIgW3N0eWxlLmNvbG9yXT1cImJ1dHRvbkRhdGE/LnN0YXR1cyA/IGFjY2VudENvbG9yIDogJydcIiAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiYnV0dG9uRGF0YT8uc3RhdHVzID8gJzcwMCcgOiAnJ1wiXHJcbiAgICBjbGFzcz1cInN0YXR1cy1uYXZiYXItYnV0dG9uXCI+e3tidXR0b25EYXRhPy5sYWJlbH19PC9idXR0b24+IC0tPlxyXG4gICAgPGJ1dHRvbiBjICpuZ0lmPVwiIWJ1dHRvbkRhdGE/LmZvbGRlclwiIFtzaW1wb0NvbG9yXT1cImJ1dHRvbkRhdGE/LnN0YXR1cyA/ICcnIDogYmdDb2xvclwiXHJcbiAgICAoY2xpY2spPVwiY2hhbmdlUGFnZSgpXCIgW2lkXT1cInNlY3Rpb25JZFwiIFtzdHlsZS5jb2xvcl09XCJidXR0b25EYXRhPy5zdGF0dXMgPyBhY2NlbnRDb2xvciA6ICcnXCIgIFtzdHlsZS5mb250V2VpZ2h0XT1cImJ1dHRvbkRhdGE/LnN0YXR1cyA/ICc3MDAnIDogJydcIlxyXG4gICAgY2xhc3M9XCJzdGF0dXMtbmF2YmFyLWJ1dHRvbiBidXR0b25cIj5cclxuICAgIHt7YnV0dG9uRGF0YT8ubGFiZWx9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgKm5nSWY9XCJidXR0b25EYXRhPy5mb2xkZXIgJiYgKGJ1dHRvbkRhdGE/LmZvbGRlcj8ucGFnZXM/Lmxlbmd0aCB8fCAwKSA+IDBcIj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJzdGF0dXMtbmF2YmFyLWJ1dHRvbiBub3Qtc2VsZWN0ZWQtZHJvcGRvd24gZHJvcGRvd24tdG9nZ2xlXCIgW3N0eWxlLmZvbnRXZWlnaHRdPVwiYnV0dG9uRGF0YT8uc3RhdHVzID8gJzcwMCcgOiAnJ1wiIFtzaW1wb0NvbG9yXT1cImJ1dHRvbkRhdGE/LnN0YXR1cyA/ICcnIDogYmdDb2xvclwiXHJcbiAgICAgIHN0eWxlPVwiYm9yZGVyOiBub25lO3dpZHRoOiBtYXgtY29udGVudCFpbXBvcnRhbnQ7XCIgW3N0eWxlLmNvbG9yXT1cImJ1dHRvbkRhdGE/LnN0YXR1cyA/IGFjY2VudENvbG9yIDogJydcIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJoZWFkZXJEcm9wZG93bkJ1dHRvblwiXHJcbiAgICAgIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxyXG4gICAgICB7e2J1dHRvbkRhdGE/LmxhYmVsfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJoZWFkZXJEcm9wZG93bkJ1dHRvblwiPlxyXG4gICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAqbmdGb3I9XCJsZXQgcGFnZSBvZiBidXR0b25EYXRhPy5mb2xkZXI/LnBhZ2VzXCIgKGNsaWNrKT1cImNoYW5nZVBhZ2UocGFnZSlcIj57e3BhZ2UubGFiZWx9fTwvYT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -133,6 +133,7 @@ export class TextEditorComponent {
133
133
  htmlElement.style.fontSize = size; // Apply CSS font size
134
134
  });
135
135
  this.toolbarData.selectedSize = size;
136
+ this.valueChange.emit(this.editor.nativeElement.innerHTML);
136
137
  // this.show = false; // Hide toolbar after action
137
138
  }
138
139
  changeColor(event) {
@@ -144,7 +145,8 @@ export class TextEditorComponent {
144
145
  // this.show = false;
145
146
  }
146
147
  updateText(event) {
147
- this.valueChange.emit(this.value);
148
+ // console.log(this.editor.nativeElement.innerHTML)
149
+ this.valueChange.emit(this.editor.nativeElement.innerHTML);
148
150
  }
149
151
  onFormatChange(event) {
150
152
  const selectedValue = event.target.value;
@@ -223,7 +225,7 @@ export class TextEditorComponent {
223
225
  });
224
226
  }
225
227
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: TextEditorComponent, deps: [{ token: i1.ElementServiceService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
226
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: TextEditorComponent, isStandalone: true, selector: "simpo-text-editor", inputs: { value: "value", editable: "editable", sectionId: "sectionId", label: "label" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "editor", first: true, predicate: ["editor"], descendants: true }, { propertyName: "colorPicker", first: true, predicate: ["colorPicker"], descendants: true }, { propertyName: "parentElement", first: true, predicate: ["parentElement"], descendants: true }, { propertyName: "suggestion", first: true, predicate: ["suggestion"], descendants: true }], ngImport: i0, template: "<div class=\"editor-container\" [ngClass]=\"{'border': editable}\" #parentElement>\r\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\" class=\"editable-text\" (mouseup)=\"showToolbar($event)\" #editor\r\n (input)=\"updateText($event)\" (mousedown)=\"hideToolbar($event)\">\r\n </div>\r\n\r\n <div class=\"toolbar\" *ngIf=\"editable && show\" [ngStyle]=\"{'top.px': toolbarY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" #toolbar >\r\n <select class=\"tool\" (change)=\"onFormatChange($event)\" [(ngModel)]=\"toolbarData.selectedHeading\">\r\n <option value=\"H1\">Heading1</option>\r\n <option value=\"H2\">Heading2</option>\r\n <option value=\"H3\">Heading3</option>\r\n <option value=\"div\">Text</option>\r\n </select>\r\n\r\n <button class=\"tool\" (click)=\"formatText('bold')\" [ngClass]=\"{'selectedTool': toolbarData.isBold}\"><mat-icon> format_bold</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('italic')\" [ngClass]=\"{'selectedTool': toolbarData.isItalic}\"><mat-icon> format_italic</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('underline')\" [ngClass]=\"{'selectedTool': toolbarData.isUnderlined}\"><mat-icon> format_underlined</mat-icon></button>\r\n\r\n <select class=\"tool\" (change)=\"changeFontSize($event)\" [(ngModel)]=\"toolbarData.selectedSize\">\r\n <option value=\"\" selected>Default</option>\r\n <option value=\"18px\">Small</option>\r\n <option value=\"24px\">Medium</option>\r\n <option value=\"32px\">Large</option>\r\n <option value=\"48px\">Extra Large</option>\r\n <option value=\"72px\">Huge</option>\r\n </select>\r\n\r\n <button class=\"tool\" (click)=\"formatText('insertOrderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertOrderedList'}\"><mat-icon>format_list_numbered</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('insertUnorderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertUnorderedList'}\"><mat-icon> format_list_bulleted</mat-icon></button>\r\n\r\n <button class=\"tool\" (click)=\"formatText('justifyLeft')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyLeft'}\"><mat-icon> format_align_left</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyCenter')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyCenter'}\"><mat-icon> format_align_center</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyRight')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyRight'}\"><mat-icon> format_align_right</mat-icon></button>\r\n\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker()\">\r\n <mat-icon>format_color_text</mat-icon>\r\n <input type=\"color\" #colorPicker class=\"hidden-color-picker\" (input)=\"changeColor($event)\" [(ngModel)]=\"toolbarData.selectedColor\">\r\n </button>\r\n </div>\r\n\r\n <div class=\"suggestion-box\" [ngStyle]=\"{'top.px': suggestionY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" *ngIf=\"editable && label && showSuggestion\" #suggestion>\r\n <div class=\"suggestion\" (click)=\"regenerateText()\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/887493c1742273970151Frame%201244831740.png\" alt=\"\">\r\n <div>\r\n <p class=\"name\">Regenerate Text</p>\r\n <p class=\"desc\">Get a fresh variation of a current text</p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".toolbar,.tool option{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}.editor-container{position:relative;display:inline-block;width:100%}.editor-container div{outline:none}.editable-text{padding:4px;cursor:text}.toolbar{position:absolute;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #0003;display:flex;gap:5px;align-items:center;z-index:100000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:22px}.toolbar button{background:none;border:none;padding:5px 8px;cursor:pointer;font-weight:700;display:flex;align-items:center}.toolbar button:hover{background:#ddd}.toolbar select{padding:3px;border:none;outline:none;font-size:14px;font-weight:600;cursor:pointer}.toolbar input[type=color]{border:none;width:30px;height:30px;padding:0;cursor:pointer}.color-picker-btn{position:relative;background:none;border:none;cursor:pointer;padding:5px}.hidden-color-picker{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;cursor:pointer}.border{border:1px solid #E9E9E9!important;border-radius:8px}.selectedTool{background:linear-gradient(94.22deg,#283e90 -4.45%,#f000e8 111.88%)!important;color:#fff;border-radius:5px}p{margin-bottom:0rem!important}.suggestion-box{position:absolute;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #0003;z-index:10000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:10px}.suggestion{display:flex;gap:10px;width:307px;align-items:center;cursor:pointer}.suggestion img{border-radius:5px;width:32px;height:32px;background:#faf1fc;padding:3px}.suggestion .name{color:#000;font-family:var(--primary-font-family)}.suggestion .desc{color:#000;font-size:12px;color:#918585;font-family:var(--primary-font-family)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ContenteditableValueAccessor, selector: "[contenteditable][ngModel]", inputs: ["contenteditable"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
228
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: TextEditorComponent, isStandalone: true, selector: "simpo-text-editor", inputs: { value: "value", editable: "editable", sectionId: "sectionId", label: "label" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "editor", first: true, predicate: ["editor"], descendants: true }, { propertyName: "colorPicker", first: true, predicate: ["colorPicker"], descendants: true }, { propertyName: "parentElement", first: true, predicate: ["parentElement"], descendants: true }, { propertyName: "suggestion", first: true, predicate: ["suggestion"], descendants: true }], ngImport: i0, template: "<div class=\"editor-container\" [ngClass]=\"{'border': editable}\" #parentElement>\r\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\" class=\"editable-text\" (mouseup)=\"showToolbar($event)\" #editor\r\n (ngModelChange)=\"updateText($event)\" (mousedown)=\"hideToolbar($event)\">\r\n </div>\r\n\r\n <div class=\"toolbar\" *ngIf=\"editable && show\" [ngStyle]=\"{'top.px': toolbarY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" #toolbar >\r\n <select class=\"tool\" (change)=\"onFormatChange($event)\" [(ngModel)]=\"toolbarData.selectedHeading\">\r\n <option value=\"H1\">Heading1</option>\r\n <option value=\"H2\">Heading2</option>\r\n <option value=\"H3\">Heading3</option>\r\n <option value=\"div\">Text</option>\r\n </select>\r\n\r\n <button class=\"tool\" (click)=\"formatText('bold')\" [ngClass]=\"{'selectedTool': toolbarData.isBold}\"><mat-icon> format_bold</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('italic')\" [ngClass]=\"{'selectedTool': toolbarData.isItalic}\"><mat-icon> format_italic</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('underline')\" [ngClass]=\"{'selectedTool': toolbarData.isUnderlined}\"><mat-icon> format_underlined</mat-icon></button>\r\n\r\n <select class=\"tool\" (change)=\"changeFontSize($event)\" [(ngModel)]=\"toolbarData.selectedSize\">\r\n <option value=\"\" selected>Default</option>\r\n <option value=\"18px\">Small</option>\r\n <option value=\"24px\">Medium</option>\r\n <option value=\"32px\">Large</option>\r\n <option value=\"48px\">Extra Large</option>\r\n <option value=\"72px\">Huge</option>\r\n </select>\r\n\r\n <button class=\"tool\" (click)=\"formatText('insertOrderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertOrderedList'}\"><mat-icon>format_list_numbered</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('insertUnorderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertUnorderedList'}\"><mat-icon> format_list_bulleted</mat-icon></button>\r\n\r\n <button class=\"tool\" (click)=\"formatText('justifyLeft')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyLeft'}\"><mat-icon> format_align_left</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyCenter')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyCenter'}\"><mat-icon> format_align_center</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyRight')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyRight'}\"><mat-icon> format_align_right</mat-icon></button>\r\n\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker()\">\r\n <mat-icon>format_color_text</mat-icon>\r\n <input type=\"color\" #colorPicker class=\"hidden-color-picker\" (input)=\"changeColor($event)\" [(ngModel)]=\"toolbarData.selectedColor\">\r\n </button>\r\n </div>\r\n\r\n <div class=\"suggestion-box\" [ngStyle]=\"{'top.px': suggestionY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" *ngIf=\"editable && label && showSuggestion\" #suggestion>\r\n <div class=\"suggestion\" (click)=\"regenerateText()\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/887493c1742273970151Frame%201244831740.png\" alt=\"\">\r\n <div>\r\n <p class=\"name\">Regenerate Text</p>\r\n <p class=\"desc\">Get a fresh variation of a current text</p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".toolbar,.tool option{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}.editor-container{position:relative;display:inline-block;width:100%}.editor-container div{outline:none}.editable-text{padding:4px;cursor:text}.toolbar{position:absolute;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #0003;display:flex;gap:5px;align-items:center;z-index:100000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:22px}.toolbar button{background:none;border:none;padding:5px 8px;cursor:pointer;font-weight:700;display:flex;align-items:center}.toolbar button:hover{background:#ddd}.toolbar select{padding:3px;border:none;outline:none;font-size:14px;font-weight:600;cursor:pointer}.toolbar input[type=color]{border:none;width:30px;height:30px;padding:0;cursor:pointer}.color-picker-btn{position:relative;background:none;border:none;cursor:pointer;padding:5px}.hidden-color-picker{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;cursor:pointer}.border{border:1px solid #E9E9E9!important;border-radius:8px}.selectedTool{background:linear-gradient(94.22deg,#283e90 -4.45%,#f000e8 111.88%)!important;color:#fff;border-radius:5px}p{margin-bottom:0rem!important}.suggestion-box{position:absolute;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #0003;z-index:10000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:10px}.suggestion{display:flex;gap:10px;width:307px;align-items:center;cursor:pointer}.suggestion img{border-radius:5px;width:32px;height:32px;background:#faf1fc;padding:3px}.suggestion .name{color:#000;font-family:var(--primary-font-family)}.suggestion .desc{color:#000;font-size:12px;color:#918585;font-family:var(--primary-font-family)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ContenteditableValueAccessor, selector: "[contenteditable][ngModel]", inputs: ["contenteditable"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
227
229
  }
228
230
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: TextEditorComponent, decorators: [{
229
231
  type: Component,
@@ -232,7 +234,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
232
234
  FormsModule,
233
235
  ContenteditableValueAccessor,
234
236
  MatIconModule
235
- ], template: "<div class=\"editor-container\" [ngClass]=\"{'border': editable}\" #parentElement>\r\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\" class=\"editable-text\" (mouseup)=\"showToolbar($event)\" #editor\r\n (input)=\"updateText($event)\" (mousedown)=\"hideToolbar($event)\">\r\n </div>\r\n\r\n <div class=\"toolbar\" *ngIf=\"editable && show\" [ngStyle]=\"{'top.px': toolbarY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" #toolbar >\r\n <select class=\"tool\" (change)=\"onFormatChange($event)\" [(ngModel)]=\"toolbarData.selectedHeading\">\r\n <option value=\"H1\">Heading1</option>\r\n <option value=\"H2\">Heading2</option>\r\n <option value=\"H3\">Heading3</option>\r\n <option value=\"div\">Text</option>\r\n </select>\r\n\r\n <button class=\"tool\" (click)=\"formatText('bold')\" [ngClass]=\"{'selectedTool': toolbarData.isBold}\"><mat-icon> format_bold</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('italic')\" [ngClass]=\"{'selectedTool': toolbarData.isItalic}\"><mat-icon> format_italic</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('underline')\" [ngClass]=\"{'selectedTool': toolbarData.isUnderlined}\"><mat-icon> format_underlined</mat-icon></button>\r\n\r\n <select class=\"tool\" (change)=\"changeFontSize($event)\" [(ngModel)]=\"toolbarData.selectedSize\">\r\n <option value=\"\" selected>Default</option>\r\n <option value=\"18px\">Small</option>\r\n <option value=\"24px\">Medium</option>\r\n <option value=\"32px\">Large</option>\r\n <option value=\"48px\">Extra Large</option>\r\n <option value=\"72px\">Huge</option>\r\n </select>\r\n\r\n <button class=\"tool\" (click)=\"formatText('insertOrderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertOrderedList'}\"><mat-icon>format_list_numbered</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('insertUnorderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertUnorderedList'}\"><mat-icon> format_list_bulleted</mat-icon></button>\r\n\r\n <button class=\"tool\" (click)=\"formatText('justifyLeft')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyLeft'}\"><mat-icon> format_align_left</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyCenter')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyCenter'}\"><mat-icon> format_align_center</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyRight')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyRight'}\"><mat-icon> format_align_right</mat-icon></button>\r\n\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker()\">\r\n <mat-icon>format_color_text</mat-icon>\r\n <input type=\"color\" #colorPicker class=\"hidden-color-picker\" (input)=\"changeColor($event)\" [(ngModel)]=\"toolbarData.selectedColor\">\r\n </button>\r\n </div>\r\n\r\n <div class=\"suggestion-box\" [ngStyle]=\"{'top.px': suggestionY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" *ngIf=\"editable && label && showSuggestion\" #suggestion>\r\n <div class=\"suggestion\" (click)=\"regenerateText()\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/887493c1742273970151Frame%201244831740.png\" alt=\"\">\r\n <div>\r\n <p class=\"name\">Regenerate Text</p>\r\n <p class=\"desc\">Get a fresh variation of a current text</p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".toolbar,.tool option{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}.editor-container{position:relative;display:inline-block;width:100%}.editor-container div{outline:none}.editable-text{padding:4px;cursor:text}.toolbar{position:absolute;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #0003;display:flex;gap:5px;align-items:center;z-index:100000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:22px}.toolbar button{background:none;border:none;padding:5px 8px;cursor:pointer;font-weight:700;display:flex;align-items:center}.toolbar button:hover{background:#ddd}.toolbar select{padding:3px;border:none;outline:none;font-size:14px;font-weight:600;cursor:pointer}.toolbar input[type=color]{border:none;width:30px;height:30px;padding:0;cursor:pointer}.color-picker-btn{position:relative;background:none;border:none;cursor:pointer;padding:5px}.hidden-color-picker{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;cursor:pointer}.border{border:1px solid #E9E9E9!important;border-radius:8px}.selectedTool{background:linear-gradient(94.22deg,#283e90 -4.45%,#f000e8 111.88%)!important;color:#fff;border-radius:5px}p{margin-bottom:0rem!important}.suggestion-box{position:absolute;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #0003;z-index:10000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:10px}.suggestion{display:flex;gap:10px;width:307px;align-items:center;cursor:pointer}.suggestion img{border-radius:5px;width:32px;height:32px;background:#faf1fc;padding:3px}.suggestion .name{color:#000;font-family:var(--primary-font-family)}.suggestion .desc{color:#000;font-size:12px;color:#918585;font-family:var(--primary-font-family)}\n"] }]
237
+ ], template: "<div class=\"editor-container\" [ngClass]=\"{'border': editable}\" #parentElement>\r\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\" class=\"editable-text\" (mouseup)=\"showToolbar($event)\" #editor\r\n (ngModelChange)=\"updateText($event)\" (mousedown)=\"hideToolbar($event)\">\r\n </div>\r\n\r\n <div class=\"toolbar\" *ngIf=\"editable && show\" [ngStyle]=\"{'top.px': toolbarY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" #toolbar >\r\n <select class=\"tool\" (change)=\"onFormatChange($event)\" [(ngModel)]=\"toolbarData.selectedHeading\">\r\n <option value=\"H1\">Heading1</option>\r\n <option value=\"H2\">Heading2</option>\r\n <option value=\"H3\">Heading3</option>\r\n <option value=\"div\">Text</option>\r\n </select>\r\n\r\n <button class=\"tool\" (click)=\"formatText('bold')\" [ngClass]=\"{'selectedTool': toolbarData.isBold}\"><mat-icon> format_bold</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('italic')\" [ngClass]=\"{'selectedTool': toolbarData.isItalic}\"><mat-icon> format_italic</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('underline')\" [ngClass]=\"{'selectedTool': toolbarData.isUnderlined}\"><mat-icon> format_underlined</mat-icon></button>\r\n\r\n <select class=\"tool\" (change)=\"changeFontSize($event)\" [(ngModel)]=\"toolbarData.selectedSize\">\r\n <option value=\"\" selected>Default</option>\r\n <option value=\"18px\">Small</option>\r\n <option value=\"24px\">Medium</option>\r\n <option value=\"32px\">Large</option>\r\n <option value=\"48px\">Extra Large</option>\r\n <option value=\"72px\">Huge</option>\r\n </select>\r\n\r\n <button class=\"tool\" (click)=\"formatText('insertOrderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertOrderedList'}\"><mat-icon>format_list_numbered</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('insertUnorderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertUnorderedList'}\"><mat-icon> format_list_bulleted</mat-icon></button>\r\n\r\n <button class=\"tool\" (click)=\"formatText('justifyLeft')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyLeft'}\"><mat-icon> format_align_left</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyCenter')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyCenter'}\"><mat-icon> format_align_center</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyRight')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyRight'}\"><mat-icon> format_align_right</mat-icon></button>\r\n\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker()\">\r\n <mat-icon>format_color_text</mat-icon>\r\n <input type=\"color\" #colorPicker class=\"hidden-color-picker\" (input)=\"changeColor($event)\" [(ngModel)]=\"toolbarData.selectedColor\">\r\n </button>\r\n </div>\r\n\r\n <div class=\"suggestion-box\" [ngStyle]=\"{'top.px': suggestionY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" *ngIf=\"editable && label && showSuggestion\" #suggestion>\r\n <div class=\"suggestion\" (click)=\"regenerateText()\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/887493c1742273970151Frame%201244831740.png\" alt=\"\">\r\n <div>\r\n <p class=\"name\">Regenerate Text</p>\r\n <p class=\"desc\">Get a fresh variation of a current text</p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".toolbar,.tool option{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}.editor-container{position:relative;display:inline-block;width:100%}.editor-container div{outline:none}.editable-text{padding:4px;cursor:text}.toolbar{position:absolute;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #0003;display:flex;gap:5px;align-items:center;z-index:100000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:22px}.toolbar button{background:none;border:none;padding:5px 8px;cursor:pointer;font-weight:700;display:flex;align-items:center}.toolbar button:hover{background:#ddd}.toolbar select{padding:3px;border:none;outline:none;font-size:14px;font-weight:600;cursor:pointer}.toolbar input[type=color]{border:none;width:30px;height:30px;padding:0;cursor:pointer}.color-picker-btn{position:relative;background:none;border:none;cursor:pointer;padding:5px}.hidden-color-picker{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;cursor:pointer}.border{border:1px solid #E9E9E9!important;border-radius:8px}.selectedTool{background:linear-gradient(94.22deg,#283e90 -4.45%,#f000e8 111.88%)!important;color:#fff;border-radius:5px}p{margin-bottom:0rem!important}.suggestion-box{position:absolute;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #0003;z-index:10000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:10px}.suggestion{display:flex;gap:10px;width:307px;align-items:center;cursor:pointer}.suggestion img{border-radius:5px;width:32px;height:32px;background:#faf1fc;padding:3px}.suggestion .name{color:#000;font-family:var(--primary-font-family)}.suggestion .desc{color:#000;font-size:12px;color:#918585;font-family:var(--primary-font-family)}\n"] }]
236
238
  }], ctorParameters: () => [{ type: i1.ElementServiceService }, { type: Object, decorators: [{
237
239
  type: Inject,
238
240
  args: [PLATFORM_ID]
@@ -262,4 +264,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
262
264
  }], label: [{
263
265
  type: Input
264
266
  }] } });
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQWdCdkQsTUFBTSxPQUFPLG1CQUFtQjtJQTZCOUIsWUFBb0IsYUFBcUMsRUFDMUIsVUFBa0I7UUFEN0Isa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQVE7UUF2QnhDLFVBQUssR0FBVyxxQ0FBcUMsQ0FBQztRQUNyRCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDMUMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUluQyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2IsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFDMUIsbUJBQWMsR0FBWSxLQUFL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QVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBQTEFURk9STV9JRCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb250ZW50ZWRpdGFibGVWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnRlZGl0YWJsZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEVsZW1lbnRTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uL2VkaXRvci1zZXJ2aWNlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby10ZXh0LWVkaXRvcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIENvbnRlbnRlZGl0YWJsZVZhbHVlQWNjZXNzb3IsXHJcbiAgICBNYXRJY29uTW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi90ZXh0LWVkaXRvci5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dEVkaXRvckNvbXBvbmVudCB7XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhcicsIHsgc3RhdGljOiBmYWxzZSB9KSB0b29sYmFyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdlZGl0b3InLCB7IHN0YXRpYzogZmFsc2UgfSkgZWRpdG9yITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdjb2xvclBpY2tlcicpIGNvbG9yUGlja2VyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdwYXJlbnRFbGVtZW50JykgcGFyZW50RWxlbWVudCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc3VnZ2VzdGlvbicsIHsgc3RhdGljOiBmYWxzZSB9KSBzdWdnZXN0aW9uITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZyA9ICc8cD5IZWxsbyB0aGlzIGlzIHBhbGFzaCBtYWtoaWphPC9wPic7XHJcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQElucHV0KCkgZWRpdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWN0aW9uSWQ/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbGFiZWw/OiBzdHJpbmc7XHJcblxyXG4gIHNob3cgPSBmYWxzZTtcclxuICB0b29sYmFyWSA9IDA7XHJcbiAgc3VnZ2VzdGlvblkgPSAwO1xyXG4gIHJpZ2h0WmVybzogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2hvd1N1Z2dlc3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0b29sYmFyRGF0YTogYW55ID0ge1xyXG4gICAgc2VsZWN0ZWRIZWFkaW5nOiAnJyxcclxuICAgIGlzQm9sZDogZmFsc2UsXHJcbiAgICBpc0l0YWxpYzogZmFsc2UsXHJcbiAgICBpc1VuZGVybGluZWQ6IGZhbHNlLFxyXG4gICAgc2VsZWN0ZWRTaXplOiAnJyxcclxuICAgIHNlbGVjdGVkTGlzdDogJycsXHJcbiAgICBzZWxlY3RlZEFsaWdubWVudDogJycsXHJcbiAgICBzZWxlY3RlZENvbG9yOiAnJ1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlZGl0b3JTZXJ2aWNlIDogRWxlbWVudFNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3RcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGlkZVRvb2xiYXIuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGlkZVRvb2xiYXIuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc2hvd1Rvb2xiYXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSB8fCAhdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmKHNlbGVjdGlvbiA9PSBudWxsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgIGNvbnN0IHJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHBhcmVudFJlY3QgPSB0aGlzLnBhcmVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHRvcEZyb21QYXJlbnQgPSByZWN0LnRvcCAtIHBhcmVudFJlY3QudG9wO1xyXG5cclxuICAgIGlmKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgdGhpcy5zdWdnZXN0aW9uWSA9IHRvcEZyb21QYXJlbnQgKyAzMDtcclxuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24udG9TdHJpbmcoKS50cmltKCkgIT09ICcnKSB7XHJcbiAgICAgIGNvbnN0IHRvb2xiYXJXaWR0aCA9IDYzMDtcclxuXHJcbiAgICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgICAgY29uc3QgcmlnaHRQb3NpdG9uID0gdmlld3BvcnRXaWR0aCAtIHBhcmVudFJlY3QubGVmdDtcclxuICAgICAgaWYocmlnaHRQb3NpdG9uICsgdG9vbGJhcldpZHRoID4gdmlld3BvcnRXaWR0aCl7XHJcbiAgICAgICAgdGhpcy5yaWdodFplcm8gPSBmYWxzZTtcclxuICAgICAgfSBlbHNle1xyXG4gICAgICAgIHRoaXMucmlnaHRaZXJvID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy50b29sYmFyWSA9IHRvcEZyb21QYXJlbnQgKyAzMDtcclxuXHJcbiAgICAgIHRoaXMucmVGb3JtYXR0aW5nRGF0YSgpO1xyXG4gICAgICB0aGlzLnJlYWRGb3JtYXR0aW5nUHJvcGVydGllcygpO1xyXG5cclxuICAgICAgdGhpcy5zaG93ID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlkZVRvb2xiYXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSB8fCAhdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGVFZGl0b3IgPSB0aGlzLmVkaXRvcj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpO1xyXG4gICAgY29uc3QgY2xpY2tlZEluc2lkZVRvb2xiYXIgPSB0aGlzLnRvb2xiYXI/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcclxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGVTdWdnZXN0aW9uID0gdGhpcy5zdWdnZXN0aW9uPy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XHJcblxyXG4gICAgLy8gSGlkZSB0aGUgdG9vbGJhciBpZiB0aGUgY2xpY2sgaXMgb3V0c2lkZSBib3RoIHRoZSBlZGl0b3IgYW5kIHRvb2xiYXJcclxuICAgIGlmICghY2xpY2tlZEluc2lkZUVkaXRvciAmJiAhY2xpY2tlZEluc2lkZVRvb2xiYXIpIHtcclxuICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZighY2xpY2tlZEluc2lkZUVkaXRvciAmJiAhY2xpY2tlZEluc2lkZVN1Z2dlc3Rpb24pe1xyXG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtYXRUZXh0KGNvbW1hbmQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyA9ICcnKSB7XHJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcclxuXHJcbiAgICAvLyAgIGlmIChjb21tYW5kID09PSAnZm9ybWF0QmxvY2snKSB7XHJcbiAgLy8gICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAvLyAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuXHJcbiAgLy8gICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgLy8gICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xyXG5cclxuICAvLyAgICAgaWYgKHNlbGVjdGVkVGV4dCkge1xyXG4gIC8vICAgICAgICAgY29uc3QgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodmFsdWUpO1xyXG4gIC8vICAgICAgICAgbmV3RWxlbWVudC50ZXh0Q29udGVudCA9IHNlbGVjdGVkVGV4dDtcclxuXHJcbiAgLy8gICAgICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xyXG4gIC8vICAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShuZXdFbGVtZW50KTtcclxuXHJcbiAgLy8gICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkSGVhZGluZyA9IHZhbHVlO1xyXG4gIC8vICAgICAgICAgcmV0dXJuO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gfVxyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIHZhbHVlKTtcclxuXHJcbiAgICBpZihjb21tYW5kID09PSAnYm9sZCcpXHJcbiAgICAgIHRoaXMudG9vbGJhckRhdGEuaXNCb2xkID0gIXRoaXMudG9vbGJhckRhdGEuaXNCb2xkO1xyXG4gICAgaWYoY29tbWFuZCA9PT0gJ2l0YWxpYycpXHJcbiAgICAgIHRoaXMudG9vbGJhckRhdGEuaXNJdGFsaWMgPSAhdGhpcy50b29sYmFyRGF0YS5pc0l0YWxpYztcclxuICAgIGlmKGNvbW1hbmQgPT09ICd1bmRlcmxpbmUnKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZCA9ICF0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZFxyXG4gICAgaWYoY29tbWFuZCA9PT0gJ2luc2VydE9yZGVyZWRMaXN0JyB8fCBjb21tYW5kID09PSAnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXHJcbiAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRMaXN0ID0gY29tbWFuZCA9PT0gdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPyAnJyA6IGNvbW1hbmQ7XHJcbiAgICBpZihjb21tYW5kID09PSAnanVzdGlmeUxlZnQnIHx8IGNvbW1hbmQgPT09ICdqdXN0aWZ5Q2VudGVyJyB8fCBjb21tYW5kID09PSAnanVzdGlmeVJpZ2h0JylcclxuICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZEFsaWdubWVudCA9IGNvbW1hbmQgPT09IHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRBbGlnbm1lbnQgPyAnJyA6IGNvbW1hbmQ7XHJcbiAgICBpZihjb21tYW5kID09PSAnZm9ybWF0QmxvY2snKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkSGVhZGluZyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlRm9udFNpemUoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgc2l6ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuXHJcbiAgICAvLyBBcHBseSBhIGRlZmF1bHQgc2l6ZSBvZiA0IChuZWVkZWQgZm9yIGV4ZWNDb21tYW5kIHRvIHdvcmspXHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9udFNpemUnLCBmYWxzZSwgJzQnKTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHNlbGVjdGVkIGZvbnQgZWxlbWVudHMgdG8gaGF2ZSBhY3R1YWwgZm9udC1zaXplIGluc3RlYWQgb2YgXCJzaXplXCIgYXR0cmlidXRlXHJcbiAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJmb250W3NpemU9JzQnXVwiKTtcclxuICAgIGVsZW1lbnRzLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICBjb25zdCBodG1sRWxlbWVudCA9IGVsIGFzIEhUTUxFbGVtZW50OyAvLyDinIUgRXhwbGljaXRseSBjYXN0IHRvIEhUTUxFbGVtZW50XHJcbiAgICAgIGh0bWxFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnc2l6ZScpOyAvLyBSZW1vdmUgb2xkIHNpemUgYXR0cmlidXRlXHJcbiAgICAgIGh0bWxFbGVtZW50LnN0eWxlLmZvbnRTaXplID0gc2l6ZTsgLy8gQXBwbHkgQ1NTIGZvbnQgc2l6ZVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkU2l6ZSA9IHNpemU7XHJcbiAgICAvLyB0aGlzLnNob3cgPSBmYWxzZTsgLy8gSGlkZSB0b29sYmFyIGFmdGVyIGFjdGlvblxyXG4gIH1cclxuXHJcbiAgY2hhbmdlQ29sb3IoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY29sb3IgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9yZUNvbG9yJywgZmFsc2UsIGNvbG9yKTtcclxuICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRDb2xvciA9IGNvbG9yO1xyXG4gICAgLy8gdGhpcy5zaG93ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUZXh0KGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25Gb3JtYXRDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XHJcbiAgICB0aGlzLmZvcm1hdFRleHQoJ2Zvcm1hdEJsb2NrJywgc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb3BlbkNvbG9yUGlja2VyKCkge1xyXG4gICAgdGhpcy5jb2xvclBpY2tlci5uYXRpdmVFbGVtZW50LmNsaWNrKCk7IC8vIFByb2dyYW1tYXRpY2FsbHkgdHJpZ2dlciBpbnB1dFxyXG4gIH1cclxuXHJcbiAgcmVhZEZvcm1hdHRpbmdQcm9wZXJ0aWVzKCkge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFzZWxlY3Rpb24pIHJldHVybjtcclxuICAgIGNvbnN0IG5vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIC8vIENoZWNrIGlmIG5vZGUgaXMgbnVsbFxyXG4gICAgaWYgKCFub2RlKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGVsZW1lbnQgPSBub2RlLnBhcmVudEVsZW1lbnQ7XHJcbiAgICB3aGlsZSAoZWxlbWVudCkge1xyXG4gICAgICBjb25zdCBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7XHJcblxyXG4gICAgICBpZiAobm9kZU5hbWUgPT09ICdIMScgfHwgbm9kZU5hbWUgPT09ICdIMicgfHwgbm9kZU5hbWUgPT09ICdIMycpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkSGVhZGluZyA9IG5vZGVOYW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGVOYW1lID09PSAnQicgfHwgbm9kZU5hbWUgPT09ICdTVFJPTkcnKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyRGF0YS5pc0JvbGQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGVOYW1lID09PSAnSScgfHwgbm9kZU5hbWUgPT09ICdFTScpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzSXRhbGljID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChub2RlTmFtZSA9PT0gJ1UnKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyRGF0YS5pc1VuZGVybGluZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGVOYW1lID09PSAnT0wnKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPSAnaW5zZXJ0T3JkZXJlZExpc3QnO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGVOYW1lID09PSAnVUwnKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPSAnaW5zZXJ0VW5vcmRlcmVkTGlzdCc7XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5zdHlsZS50ZXh0QWxpZ24pIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQWxpZ25tZW50ID0gYGp1c3RpZnkke2VsZW1lbnQuc3R5bGUudGV4dEFsaWduLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZWxlbWVudC5zdHlsZS50ZXh0QWxpZ24uc2xpY2UoMSl9YDtcclxuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnN0eWxlLmZvbnRTaXplKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZFNpemUgPSBlbGVtZW50LnN0eWxlLmZvbnRTaXplO1xyXG4gICAgICB9IGVsc2UgaWYoZWxlbWVudC5zdHlsZS5jb2xvcikge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRDb2xvciA9IGVsZW1lbnQuc3R5bGUuY29sb3JcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZUZvcm1hdHRpbmdEYXRhKCkge1xyXG4gICAgdGhpcy50b29sYmFyRGF0YSA9IHtcclxuICAgICAgc2VsZWN0ZWRIZWFkaW5nOiAnJyxcclxuICAgICAgaXNCb2xkOiBmYWxzZSxcclxuICAgICAgaXNJdGFsaWM6IGZhbHNlLFxyXG4gICAgICBpc1VuZGVybGluZWQ6IGZhbHNlLFxyXG4gICAgICBzZWxlY3RlZFNpemU6ICcnLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6ICcnLFxyXG4gICAgICBzZWxlY3RlZEFsaWdubWVudDogJycsXHJcbiAgICAgIHNlbGVjdGVkQ29sb3I6ICcnXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdlbmVyYXRlVGV4dCgpIHtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBidXNpbmVzc0lkOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpLFxyXG4gICAgICBkYXRhSWQ6IHRoaXMuc2VjdGlvbklkLFxyXG4gICAgICBzdWJJbmR1c3RyeUlkOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc3ViSW5kdXN0cnlJZCcpLFxyXG4gICAgICBzdWdnZXN0ZWREYXRhVHlwZTogJ0NPTVBPTkVOVCcsXHJcbiAgICAgIHRvbmU6ICdQUk9GRVNTSU9OQUwnLFxyXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSAsXHJcbiAgICAgIGxhYmVsOiB0aGlzLmxhYmVsXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnJlZ2VuZXJhdGVUZXh0KHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHJlcy5kYXRhO1xyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImVkaXRvci1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7J2JvcmRlcic6IGVkaXRhYmxlfVwiICNwYXJlbnRFbGVtZW50PlxyXG4gIDxkaXYgW2NvbnRlbnRlZGl0YWJsZV09XCJlZGl0YWJsZVwiIFsobmdNb2RlbCldPVwidmFsdWVcIiBjbGFzcz1cImVkaXRhYmxlLXRleHRcIiAobW91c2V1cCk9XCJzaG93VG9vbGJhcigkZXZlbnQpXCIgI2VkaXRvclxyXG4gICAgKGlucHV0KT1cInVwZGF0ZVRleHQoJGV2ZW50KVwiIChtb3VzZWRvd24pPVwiaGlkZVRvb2xiYXIoJGV2ZW50KVwiPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwidG9vbGJhclwiICpuZ0lmPVwiZWRpdGFibGUgJiYgc2hvd1wiIFtuZ1N0eWxlXT1cInsndG9wLnB4JzogdG9vbGJhcll9XCIgW3N0eWxlLnJpZ2h0XT1cInJpZ2h0WmVybyA/ICcwcHgnIDogJ2F1dG8nXCIgW3N0eWxlLmxlZnRdPVwiIXJpZ2h0WmVybyA/ICcwcHgnIDogJ2F1dG8nXCIgI3Rvb2xiYXIgPlxyXG4gICAgPHNlbGVjdCBjbGFzcz1cInRvb2xcIiAoY2hhbmdlKT1cIm9uRm9ybWF0Q2hhbmdlKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInRvb2xiYXJEYXRhLnNlbGVjdGVkSGVhZGluZ1wiPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiSDFcIj5IZWFkaW5nMTwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiSDJcIj5IZWFkaW5nMjwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiSDNcIj5IZWFkaW5nMzwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiZGl2XCI+VGV4dDwvb3B0aW9uPlxyXG4gICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnYm9sZCcpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5pc0JvbGR9XCI+PG1hdC1pY29uPiBmb3JtYXRfYm9sZDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbFwiIChjbGljayk9XCJmb3JtYXRUZXh0KCdpdGFsaWMnKVwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRUb29sJzogdG9vbGJhckRhdGEuaXNJdGFsaWN9XCI+PG1hdC1pY29uPiBmb3JtYXRfaXRhbGljPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCIgKGNsaWNrKT1cImZvcm1hdFRleHQoJ3VuZGVybGluZScpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5pc1VuZGVybGluZWR9XCI+PG1hdC1pY29uPiBmb3JtYXRfdW5kZXJsaW5lZDwvbWF0LWljb24+PC9idXR0b24+XHJcblxyXG4gICAgPHNlbGVjdCBjbGFzcz1cInRvb2xcIiAoY2hhbmdlKT1cImNoYW5nZUZvbnRTaXplKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInRvb2xiYXJEYXRhLnNlbGVjdGVkU2l6ZVwiPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgc2VsZWN0ZWQ+RGVmYXVsdDwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiMThweFwiPlNtYWxsPC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCIyNHB4XCI+TWVkaXVtPC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCIzMnB4XCI+TGFyZ2U8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIjQ4cHhcIj5FeHRyYSBMYXJnZTwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiNzJweFwiPkh1Z2U8L29wdGlvbj5cclxuICAgIDwvc2VsZWN0PlxyXG5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCIgKGNsaWNrKT1cImZvcm1hdFRleHQoJ2luc2VydE9yZGVyZWRMaXN0JylcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLnNlbGVjdGVkTGlzdCA9PT0gJ2luc2VydE9yZGVyZWRMaXN0J31cIj48bWF0LWljb24+Zm9ybWF0X2xpc3RfbnVtYmVyZWQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPT09ICdpbnNlcnRVbm9yZGVyZWRMaXN0J31cIj48bWF0LWljb24+IGZvcm1hdF9saXN0X2J1bGxldGVkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbFwiIChjbGljayk9XCJmb3JtYXRUZXh0KCdqdXN0aWZ5TGVmdCcpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5zZWxlY3RlZEFsaWdubWVudCA9PT0gJ2p1c3RpZnlMZWZ0J31cIj48bWF0LWljb24+IGZvcm1hdF9hbGlnbl9sZWZ0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCIgKGNsaWNrKT1cImZvcm1hdFRleHQoJ2p1c3RpZnlDZW50ZXInKVwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRUb29sJzogdG9vbGJhckRhdGEuc2VsZWN0ZWRBbGlnbm1lbnQgPT09ICdqdXN0aWZ5Q2VudGVyJ31cIj48bWF0LWljb24+IGZvcm1hdF9hbGlnbl9jZW50ZXI8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnanVzdGlmeVJpZ2h0JylcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLnNlbGVjdGVkQWxpZ25tZW50ID09PSAnanVzdGlmeVJpZ2h0J31cIj48bWF0LWljb24+IGZvcm1hdF9hbGlnbl9yaWdodDwvbWF0LWljb24+PC9idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2wgY29sb3ItcGlja2VyLWJ0blwiIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoKVwiPlxyXG4gICAgICA8bWF0LWljb24+Zm9ybWF0X2NvbG9yX3RleHQ8L21hdC1pY29uPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgI2NvbG9yUGlja2VyIGNsYXNzPVwiaGlkZGVuLWNvbG9yLXBpY2tlclwiIChpbnB1dCk9XCJjaGFuZ2VDb2xvcigkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJ0b29sYmFyRGF0YS5zZWxlY3RlZENvbG9yXCI+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInN1Z2dlc3Rpb24tYm94XCIgW25nU3R5bGVdPVwieyd0b3AucHgnOiBzdWdnZXN0aW9uWX1cIiBbc3R5bGUucmlnaHRdPVwicmlnaHRaZXJvID8gJzBweCcgOiAnYXV0bydcIiBbc3R5bGUubGVmdF09XCIhcmlnaHRaZXJvID8gJzBweCcgOiAnYXV0bydcIiAqbmdJZj1cImVkaXRhYmxlICYmIGxhYmVsICYmIHNob3dTdWdnZXN0aW9uXCIgI3N1Z2dlc3Rpb24+XHJcbiAgICA8ZGl2IGNsYXNzPVwic3VnZ2VzdGlvblwiIChjbGljayk9XCJyZWdlbmVyYXRlVGV4dCgpXCI+XHJcbiAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy84ODc0OTNjMTc0MjI3Mzk3MDE1MUZyYW1lJTIwMTI0NDgzMTc0MC5wbmdcIiBhbHQ9XCJcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8cCBjbGFzcz1cIm5hbWVcIj5SZWdlbmVyYXRlIFRleHQ8L3A+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJkZXNjXCI+R2V0IGEgZnJlc2ggdmFyaWF0aW9uIG9mIGEgY3VycmVudCB0ZXh0PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQWdCdkQsTUFBTSxPQUFPLG1CQUFtQjtJQTZCOUIsWUFBb0IsYUFBcUMsRUFDMUIsVUFBa0I7UUFEN0Isa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQVE7UUF2QnhDLFVBQUssR0FBVyxxQ0FBcUMsQ0FBQztRQUNyRCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDMUMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUluQyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2IsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFDMUIsbUJBQWMsR0FBWSxLQUFL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QixVQUFVO3NCQUFyRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRWpDLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBQTEFURk9STV9JRCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb250ZW50ZWRpdGFibGVWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnRlZGl0YWJsZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEVsZW1lbnRTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uL2VkaXRvci1zZXJ2aWNlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby10ZXh0LWVkaXRvcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIENvbnRlbnRlZGl0YWJsZVZhbHVlQWNjZXNzb3IsXHJcbiAgICBNYXRJY29uTW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi90ZXh0LWVkaXRvci5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dEVkaXRvckNvbXBvbmVudCB7XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhcicsIHsgc3RhdGljOiBmYWxzZSB9KSB0b29sYmFyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdlZGl0b3InLCB7IHN0YXRpYzogZmFsc2UgfSkgZWRpdG9yITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdjb2xvclBpY2tlcicpIGNvbG9yUGlja2VyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdwYXJlbnRFbGVtZW50JykgcGFyZW50RWxlbWVudCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc3VnZ2VzdGlvbicsIHsgc3RhdGljOiBmYWxzZSB9KSBzdWdnZXN0aW9uITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZyA9ICc8cD5IZWxsbyB0aGlzIGlzIHBhbGFzaCBtYWtoaWphPC9wPic7XHJcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQElucHV0KCkgZWRpdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWN0aW9uSWQ/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbGFiZWw/OiBzdHJpbmc7XHJcblxyXG4gIHNob3cgPSBmYWxzZTtcclxuICB0b29sYmFyWSA9IDA7XHJcbiAgc3VnZ2VzdGlvblkgPSAwO1xyXG4gIHJpZ2h0WmVybzogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2hvd1N1Z2dlc3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0b29sYmFyRGF0YTogYW55ID0ge1xyXG4gICAgc2VsZWN0ZWRIZWFkaW5nOiAnJyxcclxuICAgIGlzQm9sZDogZmFsc2UsXHJcbiAgICBpc0l0YWxpYzogZmFsc2UsXHJcbiAgICBpc1VuZGVybGluZWQ6IGZhbHNlLFxyXG4gICAgc2VsZWN0ZWRTaXplOiAnJyxcclxuICAgIHNlbGVjdGVkTGlzdDogJycsXHJcbiAgICBzZWxlY3RlZEFsaWdubWVudDogJycsXHJcbiAgICBzZWxlY3RlZENvbG9yOiAnJ1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlZGl0b3JTZXJ2aWNlIDogRWxlbWVudFNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3RcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGlkZVRvb2xiYXIuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGlkZVRvb2xiYXIuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc2hvd1Rvb2xiYXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSB8fCAhdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmKHNlbGVjdGlvbiA9PSBudWxsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgIGNvbnN0IHJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHBhcmVudFJlY3QgPSB0aGlzLnBhcmVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHRvcEZyb21QYXJlbnQgPSByZWN0LnRvcCAtIHBhcmVudFJlY3QudG9wO1xyXG5cclxuICAgIGlmKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgdGhpcy5zdWdnZXN0aW9uWSA9IHRvcEZyb21QYXJlbnQgKyAzMDtcclxuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24udG9TdHJpbmcoKS50cmltKCkgIT09ICcnKSB7XHJcbiAgICAgIGNvbnN0IHRvb2xiYXJXaWR0aCA9IDYzMDtcclxuXHJcbiAgICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgICAgY29uc3QgcmlnaHRQb3NpdG9uID0gdmlld3BvcnRXaWR0aCAtIHBhcmVudFJlY3QubGVmdDtcclxuICAgICAgaWYocmlnaHRQb3NpdG9uICsgdG9vbGJhcldpZHRoID4gdmlld3BvcnRXaWR0aCl7XHJcbiAgICAgICAgdGhpcy5yaWdodFplcm8gPSBmYWxzZTtcclxuICAgICAgfSBlbHNle1xyXG4gICAgICAgIHRoaXMucmlnaHRaZXJvID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy50b29sYmFyWSA9IHRvcEZyb21QYXJlbnQgKyAzMDtcclxuXHJcbiAgICAgIHRoaXMucmVGb3JtYXR0aW5nRGF0YSgpO1xyXG4gICAgICB0aGlzLnJlYWRGb3JtYXR0aW5nUHJvcGVydGllcygpO1xyXG5cclxuICAgICAgdGhpcy5zaG93ID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlkZVRvb2xiYXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSB8fCAhdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGVFZGl0b3IgPSB0aGlzLmVkaXRvcj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpO1xyXG4gICAgY29uc3QgY2xpY2tlZEluc2lkZVRvb2xiYXIgPSB0aGlzLnRvb2xiYXI/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcclxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGVTdWdnZXN0aW9uID0gdGhpcy5zdWdnZXN0aW9uPy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XHJcblxyXG4gICAgLy8gSGlkZSB0aGUgdG9vbGJhciBpZiB0aGUgY2xpY2sgaXMgb3V0c2lkZSBib3RoIHRoZSBlZGl0b3IgYW5kIHRvb2xiYXJcclxuICAgIGlmICghY2xpY2tlZEluc2lkZUVkaXRvciAmJiAhY2xpY2tlZEluc2lkZVRvb2xiYXIpIHtcclxuICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZighY2xpY2tlZEluc2lkZUVkaXRvciAmJiAhY2xpY2tlZEluc2lkZVN1Z2dlc3Rpb24pe1xyXG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtYXRUZXh0KGNvbW1hbmQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyA9ICcnKSB7XHJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcclxuXHJcbiAgICAvLyAgIGlmIChjb21tYW5kID09PSAnZm9ybWF0QmxvY2snKSB7XHJcbiAgLy8gICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAvLyAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuXHJcbiAgLy8gICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgLy8gICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xyXG5cclxuICAvLyAgICAgaWYgKHNlbGVjdGVkVGV4dCkge1xyXG4gIC8vICAgICAgICAgY29uc3QgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodmFsdWUpO1xyXG4gIC8vICAgICAgICAgbmV3RWxlbWVudC50ZXh0Q29udGVudCA9IHNlbGVjdGVkVGV4dDtcclxuXHJcbiAgLy8gICAgICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xyXG4gIC8vICAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShuZXdFbGVtZW50KTtcclxuXHJcbiAgLy8gICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkSGVhZGluZyA9IHZhbHVlO1xyXG4gIC8vICAgICAgICAgcmV0dXJuO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gfVxyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIHZhbHVlKTtcclxuXHJcbiAgICBpZihjb21tYW5kID09PSAnYm9sZCcpXHJcbiAgICAgIHRoaXMudG9vbGJhckRhdGEuaXNCb2xkID0gIXRoaXMudG9vbGJhckRhdGEuaXNCb2xkO1xyXG4gICAgaWYoY29tbWFuZCA9PT0gJ2l0YWxpYycpXHJcbiAgICAgIHRoaXMudG9vbGJhckRhdGEuaXNJdGFsaWMgPSAhdGhpcy50b29sYmFyRGF0YS5pc0l0YWxpYztcclxuICAgIGlmKGNvbW1hbmQgPT09ICd1bmRlcmxpbmUnKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZCA9ICF0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZFxyXG4gICAgaWYoY29tbWFuZCA9PT0gJ2luc2VydE9yZGVyZWRMaXN0JyB8fCBjb21tYW5kID09PSAnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXHJcbiAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRMaXN0ID0gY29tbWFuZCA9PT0gdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPyAnJyA6IGNvbW1hbmQ7XHJcbiAgICBpZihjb21tYW5kID09PSAnanVzdGlmeUxlZnQnIHx8IGNvbW1hbmQgPT09ICdqdXN0aWZ5Q2VudGVyJyB8fCBjb21tYW5kID09PSAnanVzdGlmeVJpZ2h0JylcclxuICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZEFsaWdubWVudCA9IGNvbW1hbmQgPT09IHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRBbGlnbm1lbnQgPyAnJyA6IGNvbW1hbmQ7XHJcbiAgICBpZihjb21tYW5kID09PSAnZm9ybWF0QmxvY2snKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkSGVhZGluZyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlRm9udFNpemUoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgc2l6ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuXHJcbiAgICAvLyBBcHBseSBhIGRlZmF1bHQgc2l6ZSBvZiA0IChuZWVkZWQgZm9yIGV4ZWNDb21tYW5kIHRvIHdvcmspXHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9udFNpemUnLCBmYWxzZSwgJzQnKTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHNlbGVjdGVkIGZvbnQgZWxlbWVudHMgdG8gaGF2ZSBhY3R1YWwgZm9udC1zaXplIGluc3RlYWQgb2YgXCJzaXplXCIgYXR0cmlidXRlXHJcbiAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJmb250W3NpemU9JzQnXVwiKTtcclxuICAgIGVsZW1lbnRzLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICBjb25zdCBodG1sRWxlbWVudCA9IGVsIGFzIEhUTUxFbGVtZW50OyAvLyDinIUgRXhwbGljaXRseSBjYXN0IHRvIEhUTUxFbGVtZW50XHJcbiAgICAgIGh0bWxFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnc2l6ZScpOyAvLyBSZW1vdmUgb2xkIHNpemUgYXR0cmlidXRlXHJcbiAgICAgIGh0bWxFbGVtZW50LnN0eWxlLmZvbnRTaXplID0gc2l6ZTsgLy8gQXBwbHkgQ1NTIGZvbnQgc2l6ZVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkU2l6ZSA9IHNpemU7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xyXG4gICAgLy8gdGhpcy5zaG93ID0gZmFsc2U7IC8vIEhpZGUgdG9vbGJhciBhZnRlciBhY3Rpb25cclxuICB9XHJcblxyXG4gIGNoYW5nZUNvbG9yKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGNvbG9yID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvcmVDb2xvcicsIGZhbHNlLCBjb2xvcik7XHJcbiAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQ29sb3IgPSBjb2xvcjtcclxuICAgIC8vIHRoaXMuc2hvdyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVGV4dChldmVudDogRXZlbnQpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcclxuICB9XHJcblxyXG4gIG9uRm9ybWF0Q2hhbmdlKGV2ZW50OiBFdmVudCkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlO1xyXG4gICAgdGhpcy5mb3JtYXRUZXh0KCdmb3JtYXRCbG9jaycsIHNlbGVjdGVkVmFsdWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIG9wZW5Db2xvclBpY2tlcigpIHtcclxuICAgIHRoaXMuY29sb3JQaWNrZXIubmF0aXZlRWxlbWVudC5jbGljaygpOyAvLyBQcm9ncmFtbWF0aWNhbGx5IHRyaWdnZXIgaW5wdXRcclxuICB9XHJcblxyXG4gIHJlYWRGb3JtYXR0aW5nUHJvcGVydGllcygpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm47XHJcbiAgICBjb25zdCBub2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAvLyBDaGVjayBpZiBub2RlIGlzIG51bGxcclxuICAgIGlmICghbm9kZSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBlbGVtZW50ID0gbm9kZS5wYXJlbnRFbGVtZW50O1xyXG4gICAgd2hpbGUgKGVsZW1lbnQpIHtcclxuICAgICAgY29uc3Qgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xyXG5cclxuICAgICAgaWYgKG5vZGVOYW1lID09PSAnSDEnIHx8IG5vZGVOYW1lID09PSAnSDInIHx8IG5vZGVOYW1lID09PSAnSDMnKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZEhlYWRpbmcgPSBub2RlTmFtZTtcclxuICAgICAgfSBlbHNlIGlmIChub2RlTmFtZSA9PT0gJ0InIHx8IG5vZGVOYW1lID09PSAnU1RST05HJykge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuaXNCb2xkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChub2RlTmFtZSA9PT0gJ0knIHx8IG5vZGVOYW1lID09PSAnRU0nKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyRGF0YS5pc0l0YWxpYyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAobm9kZU5hbWUgPT09ICdVJykge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuaXNVbmRlcmxpbmVkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChub2RlTmFtZSA9PT0gJ09MJykge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRMaXN0ID0gJ2luc2VydE9yZGVyZWRMaXN0JztcclxuICAgICAgfSBlbHNlIGlmIChub2RlTmFtZSA9PT0gJ1VMJykge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRMaXN0ID0gJ2luc2VydFVub3JkZXJlZExpc3QnO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuc3R5bGUudGV4dEFsaWduKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZEFsaWdubWVudCA9IGBqdXN0aWZ5JHtlbGVtZW50LnN0eWxlLnRleHRBbGlnbi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGVsZW1lbnQuc3R5bGUudGV4dEFsaWduLnNsaWNlKDEpfWA7XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5zdHlsZS5mb250U2l6ZSkge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRTaXplID0gZWxlbWVudC5zdHlsZS5mb250U2l6ZTtcclxuICAgICAgfSBlbHNlIGlmKGVsZW1lbnQuc3R5bGUuY29sb3IpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQ29sb3IgPSBlbGVtZW50LnN0eWxlLmNvbG9yXHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVGb3JtYXR0aW5nRGF0YSgpIHtcclxuICAgIHRoaXMudG9vbGJhckRhdGEgPSB7XHJcbiAgICAgIHNlbGVjdGVkSGVhZGluZzogJycsXHJcbiAgICAgIGlzQm9sZDogZmFsc2UsXHJcbiAgICAgIGlzSXRhbGljOiBmYWxzZSxcclxuICAgICAgaXNVbmRlcmxpbmVkOiBmYWxzZSxcclxuICAgICAgc2VsZWN0ZWRTaXplOiAnJyxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiAnJyxcclxuICAgICAgc2VsZWN0ZWRBbGlnbm1lbnQ6ICcnLFxyXG4gICAgICBzZWxlY3RlZENvbG9yOiAnJ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnZW5lcmF0ZVRleHQoKSB7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgYnVzaW5lc3NJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcclxuICAgICAgZGF0YUlkOiB0aGlzLnNlY3Rpb25JZCxcclxuICAgICAgc3ViSW5kdXN0cnlJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSxcclxuICAgICAgc3VnZ2VzdGVkRGF0YVR5cGU6ICdDT01QT05FTlQnLFxyXG4gICAgICB0b25lOiAnUFJPRkVTU0lPTkFMJyxcclxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUgLFxyXG4gICAgICBsYWJlbDogdGhpcy5sYWJlbFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5yZWdlbmVyYXRlVGV4dChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSByZXMuZGF0YTtcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJlZGl0b3ItY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieydib3JkZXInOiBlZGl0YWJsZX1cIiAjcGFyZW50RWxlbWVudD5cclxuICA8ZGl2IFtjb250ZW50ZWRpdGFibGVdPVwiZWRpdGFibGVcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgY2xhc3M9XCJlZGl0YWJsZS10ZXh0XCIgKG1vdXNldXApPVwic2hvd1Rvb2xiYXIoJGV2ZW50KVwiICNlZGl0b3JcclxuICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVRleHQoJGV2ZW50KVwiIChtb3VzZWRvd24pPVwiaGlkZVRvb2xiYXIoJGV2ZW50KVwiPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwidG9vbGJhclwiICpuZ0lmPVwiZWRpdGFibGUgJiYgc2hvd1wiIFtuZ1N0eWxlXT1cInsndG9wLnB4JzogdG9vbGJhcll9XCIgW3N0eWxlLnJpZ2h0XT1cInJpZ2h0WmVybyA/ICcwcHgnIDogJ2F1dG8nXCIgW3N0eWxlLmxlZnRdPVwiIXJpZ2h0WmVybyA/ICcwcHgnIDogJ2F1dG8nXCIgI3Rvb2xiYXIgPlxyXG4gICAgPHNlbGVjdCBjbGFzcz1cInRvb2xcIiAoY2hhbmdlKT1cIm9uRm9ybWF0Q2hhbmdlKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInRvb2xiYXJEYXRhLnNlbGVjdGVkSGVhZGluZ1wiPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiSDFcIj5IZWFkaW5nMTwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiSDJcIj5IZWFkaW5nMjwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiSDNcIj5IZWFkaW5nMzwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiZGl2XCI+VGV4dDwvb3B0aW9uPlxyXG4gICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnYm9sZCcpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5pc0JvbGR9XCI+PG1hdC1pY29uPiBmb3JtYXRfYm9sZDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbFwiIChjbGljayk9XCJmb3JtYXRUZXh0KCdpdGFsaWMnKVwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRUb29sJzogdG9vbGJhckRhdGEuaXNJdGFsaWN9XCI+PG1hdC1pY29uPiBmb3JtYXRfaXRhbGljPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCIgKGNsaWNrKT1cImZvcm1hdFRleHQoJ3VuZGVybGluZScpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5pc1VuZGVybGluZWR9XCI+PG1hdC1pY29uPiBmb3JtYXRfdW5kZXJsaW5lZDwvbWF0LWljb24+PC9idXR0b24+XHJcblxyXG4gICAgPHNlbGVjdCBjbGFzcz1cInRvb2xcIiAoY2hhbmdlKT1cImNoYW5nZUZvbnRTaXplKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInRvb2xiYXJEYXRhLnNlbGVjdGVkU2l6ZVwiPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgc2VsZWN0ZWQ+RGVmYXVsdDwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiMThweFwiPlNtYWxsPC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCIyNHB4XCI+TWVkaXVtPC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCIzMnB4XCI+TGFyZ2U8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIjQ4cHhcIj5FeHRyYSBMYXJnZTwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiNzJweFwiPkh1Z2U8L29wdGlvbj5cclxuICAgIDwvc2VsZWN0PlxyXG5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCIgKGNsaWNrKT1cImZvcm1hdFRleHQoJ2luc2VydE9yZGVyZWRMaXN0JylcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLnNlbGVjdGVkTGlzdCA9PT0gJ2luc2VydE9yZGVyZWRMaXN0J31cIj48bWF0LWljb24+Zm9ybWF0X2xpc3RfbnVtYmVyZWQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPT09ICdpbnNlcnRVbm9yZGVyZWRMaXN0J31cIj48bWF0LWljb24+IGZvcm1hdF9saXN0X2J1bGxldGVkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbFwiIChjbGljayk9XCJmb3JtYXRUZXh0KCdqdXN0aWZ5TGVmdCcpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5zZWxlY3RlZEFsaWdubWVudCA9PT0gJ2p1c3RpZnlMZWZ0J31cIj48bWF0LWljb24+IGZvcm1hdF9hbGlnbl9sZWZ0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCIgKGNsaWNrKT1cImZvcm1hdFRleHQoJ2p1c3RpZnlDZW50ZXInKVwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRUb29sJzogdG9vbGJhckRhdGEuc2VsZWN0ZWRBbGlnbm1lbnQgPT09ICdqdXN0aWZ5Q2VudGVyJ31cIj48bWF0LWljb24+IGZvcm1hdF9hbGlnbl9jZW50ZXI8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnanVzdGlmeVJpZ2h0JylcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLnNlbGVjdGVkQWxpZ25tZW50ID09PSAnanVzdGlmeVJpZ2h0J31cIj48bWF0LWljb24+IGZvcm1hdF9hbGlnbl9yaWdodDwvbWF0LWljb24+PC9idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2wgY29sb3ItcGlja2VyLWJ0blwiIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoKVwiPlxyXG4gICAgICA8bWF0LWljb24+Zm9ybWF0X2NvbG9yX3RleHQ8L21hdC1pY29uPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgI2NvbG9yUGlja2VyIGNsYXNzPVwiaGlkZGVuLWNvbG9yLXBpY2tlclwiIChpbnB1dCk9XCJjaGFuZ2VDb2xvcigkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJ0b29sYmFyRGF0YS5zZWxlY3RlZENvbG9yXCI+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInN1Z2dlc3Rpb24tYm94XCIgW25nU3R5bGVdPVwieyd0b3AucHgnOiBzdWdnZXN0aW9uWX1cIiBbc3R5bGUucmlnaHRdPVwicmlnaHRaZXJvID8gJzBweCcgOiAnYXV0bydcIiBbc3R5bGUubGVmdF09XCIhcmlnaHRaZXJvID8gJzBweCcgOiAnYXV0bydcIiAqbmdJZj1cImVkaXRhYmxlICYmIGxhYmVsICYmIHNob3dTdWdnZXN0aW9uXCIgI3N1Z2dlc3Rpb24+XHJcbiAgICA8ZGl2IGNsYXNzPVwic3VnZ2VzdGlvblwiIChjbGljayk9XCJyZWdlbmVyYXRlVGV4dCgpXCI+XHJcbiAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy84ODc0OTNjMTc0MjI3Mzk3MDE1MUZyYW1lJTIwMTI0NDgzMTc0MC5wbmdcIiBhbHQ9XCJcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8cCBjbGFzcz1cIm5hbWVcIj5SZWdlbmVyYXRlIFRleHQ8L3A+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJkZXNjXCI+R2V0IGEgZnJlc2ggdmFyaWF0aW9uIG9mIGEgY3VycmVudCB0ZXh0PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19