simpo-component-library 3.6.229 → 3.6.235
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/hover-elements/hover-elements.component.mjs +3 -3
- package/esm2022/lib/directive/merge-header.directive.mjs +39 -0
- package/esm2022/lib/directive/sticky-directive.mjs +24 -5
- package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs +1 -5
- package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.component.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.component.mjs +19 -117
- package/esm2022/lib/elements/property/property.component.mjs +1 -1
- package/esm2022/lib/sections/banner-section/banner-section.component.mjs +15 -5
- package/esm2022/lib/sections/faq-section/faq-section.component.mjs +12 -3
- package/esm2022/lib/sections/header-section/header-section.component.mjs +26 -27
- package/esm2022/lib/sections/location-section/location-section.component.mjs +1 -1
- package/esm2022/lib/services/cart.service.mjs +1 -1
- package/esm2022/lib/services/events.service.mjs +2 -1
- package/esm2022/lib/services/rest.service.mjs +1 -21
- package/esm2022/lib/services/storage.service.mjs +1 -4
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/simpo-component-library.mjs +123 -173
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/directive/merge-header.directive.d.ts +16 -0
- package/lib/directive/sticky-directive.d.ts +5 -1
- package/lib/ecommerce/sections/returns-calculator/returns-calculator.component.d.ts +3 -20
- package/lib/elements/property/property.component.d.ts +1 -1
- package/lib/sections/banner-section/banner-section.component.d.ts +1 -0
- package/lib/sections/faq-section/faq-section.component.d.ts +1 -0
- package/lib/sections/header-section/header-section.component.d.ts +7 -2
- package/lib/services/events.service.d.ts +1 -0
- package/lib/services/rest.service.d.ts +0 -4
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/simpo-component-library-3.6.235.tgz +0 -0
- package/simpo-component-library-3.6.229.tgz +0 -0
@@ -43,15 +43,14 @@ import * as i7 from "@angular/forms";
|
|
43
43
|
import * as i8 from "@angular/material/button";
|
44
44
|
export class HeaderSectionComponent {
|
45
45
|
// matDialog = inject(MatDialog);
|
46
|
-
constructor(_eventService, router, activatedRoute, matDialog, storageService, restService
|
47
|
-
// private cdRef: ChangeDetectorRef
|
48
|
-
) {
|
46
|
+
constructor(_eventService, router, activatedRoute, matDialog, storageService, restService, eventService) {
|
49
47
|
this._eventService = _eventService;
|
50
48
|
this.router = router;
|
51
49
|
this.activatedRoute = activatedRoute;
|
52
50
|
this.matDialog = matDialog;
|
53
51
|
this.storageService = storageService;
|
54
52
|
this.restService = restService;
|
53
|
+
this.eventService = eventService;
|
55
54
|
this.edit = false;
|
56
55
|
this.scrollValue = 0;
|
57
56
|
this.color = '#000000';
|
@@ -169,7 +168,6 @@ export class HeaderSectionComponent {
|
|
169
168
|
this.isScrolled = window.scrollY > 50;
|
170
169
|
}
|
171
170
|
ngOnInit() {
|
172
|
-
console.log(this.data);
|
173
171
|
this.content = this.data?.content;
|
174
172
|
this.style = this.data?.styles;
|
175
173
|
this.action = this.data?.action;
|
@@ -184,16 +182,24 @@ export class HeaderSectionComponent {
|
|
184
182
|
}
|
185
183
|
setTimeout(() => {
|
186
184
|
this.getParentHeight();
|
187
|
-
},
|
185
|
+
}, 3000);
|
186
|
+
}
|
187
|
+
ngAfterViewInit() {
|
188
|
+
this.resizeObserver = new ResizeObserver(() => {
|
189
|
+
setTimeout(() => {
|
190
|
+
this.getParentHeight();
|
191
|
+
}, 1000);
|
192
|
+
});
|
193
|
+
this.resizeObserver.observe(this.childContainer.nativeElement);
|
188
194
|
}
|
189
195
|
getScreenSize(event) {
|
190
|
-
|
191
|
-
this.screenWidth = window.innerWidth;
|
192
|
-
}
|
196
|
+
this.screenWidth = window.innerWidth;
|
193
197
|
}
|
194
198
|
getParentHeight() {
|
195
|
-
|
196
|
-
|
199
|
+
this.height = this.childContainer?.nativeElement?.scrollHeight;
|
200
|
+
if (this.nextComponent?.styles?.merge)
|
201
|
+
this.eventService.elementHeight.emit(this.height);
|
202
|
+
document.documentElement.style.setProperty("--margin-top", this.height + "px");
|
197
203
|
}
|
198
204
|
get getDropdownLinks() {
|
199
205
|
if (this.content?.ecomlinks && this.isEcommerceWebsite)
|
@@ -215,18 +221,11 @@ export class HeaderSectionComponent {
|
|
215
221
|
this.router.navigate(['']);
|
216
222
|
}
|
217
223
|
get isHeaderSticky() {
|
218
|
-
return this.data?.styles?.sticky
|
224
|
+
return this.data?.styles?.sticky;
|
219
225
|
}
|
220
226
|
get backgroundInfo() {
|
221
227
|
let background = {};
|
222
|
-
|
223
|
-
background = {
|
224
|
-
...this.style.background,
|
225
|
-
showImage: false,
|
226
|
-
color: "transparent"
|
227
|
-
};
|
228
|
-
}
|
229
|
-
return this.nextComponent?.styles?.merge ? (this.scrollValue > 0 ? { ...this.nextComponent.styles.background, color: this.style?.background.color } : { ...background }) : { ...this.data?.styles.background };
|
228
|
+
return this.nextComponent?.styles?.merge && this.scrollValue == 0 && !this.isMobile ? { ...this.nextComponent.styles.background } : { ...this.data?.styles.background };
|
230
229
|
}
|
231
230
|
get simpoColor() {
|
232
231
|
return this.nextComponent?.styles?.merge ? (this.scrollValue > 0 ? this.style?.background.color : this.nextComponent.styles?.background?.color) : this.style?.background?.color;
|
@@ -296,9 +295,9 @@ export class HeaderSectionComponent {
|
|
296
295
|
// }
|
297
296
|
setColor() {
|
298
297
|
const threshold = 130; // Adjust this threshold as needed
|
299
|
-
const r = parseInt(this.accentColor.slice(1, 3), 16);
|
300
|
-
const g = parseInt(this.accentColor.slice(3, 5), 16);
|
301
|
-
const b = parseInt(this.accentColor.slice(5, 7), 16);
|
298
|
+
const r = parseInt(this.backgroundInfo.accentColor.slice(1, 3), 16);
|
299
|
+
const g = parseInt(this.backgroundInfo.accentColor.slice(3, 5), 16);
|
300
|
+
const b = parseInt(this.backgroundInfo.accentColor.slice(5, 7), 16);
|
302
301
|
const brightness = (r * 299 + g * 587 + b * 114) / 1000;
|
303
302
|
return brightness > threshold ? '#000000' : '#ffffff';
|
304
303
|
}
|
@@ -350,8 +349,8 @@ export class HeaderSectionComponent {
|
|
350
349
|
const pathname = window.location.pathname;
|
351
350
|
return pathname.includes('/list') || pathname === '/' || pathname === '';
|
352
351
|
}
|
353
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderSectionComponent, deps: [{ token: i1.EventsService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.MatDialog }, { token: i4.StorageServiceService }, { token: i5.RestService }], target: i0.ɵɵFactoryTarget.Component }); }
|
354
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HeaderSectionComponent, isStandalone: true, selector: "simpo-header-section", inputs: { data: "data", nextComponent: "nextComponent", index: "index", customClass: "customClass", edit: "edit" }, host: { listeners: { "window:scroll": "onScroll($event)", "window:resize": "getScreenSize($event)" } }, viewQueries: [{ propertyName: "childContainer", first: true, predicate: ["childContainer"], descendants: true }], ngImport: i0, template: "<section [id]=\"data?.id\" class=\"total-container w-100\">\r\n <div class=\"w-100\" [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [ngClass]=\"{'box-shadow': isEcommerceWebsite}\"\r\n [class.margin-bottom]=\"isHeaderSticky && isEcommerceWebsite && (!categoryList || !showCategoryMobileHeader()) && isMobile\">\r\n <!-- [scrollValue]=\"isComponentMerged ? scrollValue : 0\" -->\r\n <div [simpoSticky]=\"isHeaderSticky\" [simpoBackground]=\"backgroundInfo\" class=\"w-100\" #childContainer\r\n [categoryHeader]=\"isEcommerceWebsite && categoryList?.length > 0 && !isMobile\" simpoHover\r\n (hovering)=\"showEditTabs($event)\" [id]=\"data?.id\">\r\n <ng-container *ngIf=\"style?.headline?.display\">\r\n <div>\r\n <simpo-moving-text [edit]=\"false\" [delete]=\"false\" [data]=\"data\"></simpo-moving-text>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"style?.styling === 'Header1'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header1Template\"></ng-container>\r\n </div>\r\n <div *ngIf=\"style?.styling === 'Header2'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header2Template\"></ng-container>\r\n </div>\r\n <div *ngIf=\"style?.styling === 'Header3'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header3Template\"></ng-container>\r\n </div>\r\n <div *ngIf=\"style?.styling === 'Header4'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header4Template\"></ng-container>\r\n </div>\r\n <!-- <div class=\"input-group mx-2 mb-2 w-98\" *ngIf=\"isMobile && isEcommerceWebsite\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search Product\" aria-label=\"Search Product\"\r\n [(ngModel)]=\"searchText\" (ngModelChange)=\"waitBeforeSearch()\"\r\n [ngStyle]=\"{'border' : '1px solid ' + accentColor}\">\r\n <mat-icon class=\"h-100\"\r\n [ngStyle]=\"{'background' : style?.background?.accentBackgroundType == 'Solid' ? accentColor : 'linear-gradient(to right,' + style?.background?.accentColor + ' 0%' + ',' + style?.background?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"style?.background?.color\">search</mat-icon>\r\n </div> -->\r\n <ng-container *ngIf=\"isEcommerceWebsite && !isMobile\">\r\n <ng-container *ngTemplateOutlet=\"categoriesHeader\"></ng-container>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"isEcommerceWebsite && isMobile && showCategoryMobileHeader()\">\r\n <ng-container *ngTemplateOutlet=\"mobileCategoryHeader\"></ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngIf=\"isEcommerceWebsite && isMobile\">\r\n <ng-container *ngTemplateOutlet=\"mobileFooterTemplate\"></ng-container>\r\n </ng-container>\r\n</section>\r\n\r\n<ng-template #header1Template>\r\n <div class=\"header1\">\r\n <div>\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n <div class=\"d-flex gap-15 align-center\" *ngIf=\"!isMobile\" [style.width.%]=\"isEcommerceWebsite ? 95 : ''\">\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n </div>\r\n <div class=\"d-flex gap-15 align-center\" *ngIf=\"isMobile\">\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n <mat-icon [simpoColor]=\"simpoColor\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\">menu</mat-icon>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #header2Template>\r\n <div class=\"header1\">\r\n <div class=\"d-flex gap-15 align-center\" *ngIf=\"!isMobile\" [style.width.%]=\"isEcommerceWebsite ? 93 : ''\">\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container>\r\n </div>\r\n <div class=\"d-flex gap-15 align-center\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\" *ngIf=\"isMobile\">\r\n <mat-icon [simpoColor]=\"simpoColor\">menu</mat-icon>\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n </div>\r\n <div class=\"text-end\">\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #header3Template>\r\n <div class=\"header1\">\r\n <div>\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n <ng-container *ngIf=\"!isMobile\">\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n </ng-container>\r\n <div class=\"d-flex gap-15 align-center\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\" *ngIf=\"isMobile\">\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n <mat-icon [simpoColor]=\"simpoColor\">menu</mat-icon>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #header4Template>\r\n <div class=\"header1\">\r\n <ng-container *ngIf=\"!isMobile\">\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container> </ng-container>\r\n <div class=\"d-flex gap-15 align-center\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\" *ngIf=\"isMobile\">\r\n <mat-icon [simpoColor]=\"simpoColor\">menu</mat-icon>\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n </div>\r\n <div class=\"text-end\">\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #logoSectionTemplate>\r\n <div class=\"d-flex gap-3 align-center cursor-pointer\" *ngIf=\"!content?.logo?.isImage || !content?.logo?.image?.url\"\r\n (click)=\"!edit ? goToHome() : ''\">\r\n <div *ngIf=\"content?.logo?.text?.isIcon && content?.logo?.text?.url\">\r\n <img loading=\"lazy\" [src]=\"content?.logo?.text?.url\" alt=\"logo\" [width]=\"content?.logo?.size\" loading=\"lazy\">\r\n </div>\r\n <div class=\"heading-small\" *ngIf=\"content?.logo?.text?.isText\" [simpoColor]=\"simpoColor\">\r\n <b [ngStyle]=\"{'font-family': content?.logo?.text?.fontFamily}\">{{content?.siteName?.value}}</b>\r\n </div>\r\n </div>\r\n <!-- <div class=\"d-flex gap-3 align-items-lg-center cursor-pointer\" *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"goToHome()\"> -->\r\n <img loading=\"lazy\" [src]=\"content?.logo?.image?.url\" alt=\"logo\"\r\n [style.width.%]=\"screenWidth > 475 || (content?.logo?.size || 10) < 50 ? content?.logo?.size : ((content?.logo?.size || 10) - 10)\"\r\n loading=\"lazy\" *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"!edit ? goToHome() : ''\">\r\n <!-- </div> -->\r\n</ng-template>\r\n\r\n<ng-template #pageLinksTemplate>\r\n <div class=\"navbar-nav pageLinks\" [ngClass]=\"{'align-items-center' : !isMobile}\">\r\n <div class=\"d-flex gap-3\"\r\n [ngClass]=\"{'flex-column': isMobile, 'align-items-center' : !isMobile, 'mobile-page-list': isMobile}\">\r\n <ng-container *ngFor=\"let item of getNavbarButton\">\r\n <ng-container *ngIf=\"item.showHeader\">\r\n <simpo-navbar-button-element [buttonData]=\"item\" [selectedStyle]=\"style?.navigationStyle\"\r\n [buttonStyle]=\"style?.navbarButtonStyle\" [bgColor]=\"simpoColor\" [accentColor]=\"accentColor\"\r\n [sectionId]=\"data?.id\"></simpo-navbar-button-element>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngFor=\"let link of getDropdownLinks; let idx = index\">\r\n <ng-container *ngIf=\"content?.ecomlinks?.[link]?.length \">\r\n <div class=\"position-relative\">\r\n <button mat-stroked-button class=\"mat-btn dropdown-toggle category-btn\" type=\"button\"\r\n [simpoColor]=\"simpoColor\" id=\"link\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{link | lowercase | titlecase}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"link\">\r\n <a class=\"dropdown-item\" *ngFor=\"let menu of getValues(content?.ecomlinks?.[link])\"\r\n (click)=\"applyFilter(menu, link)\">{{menu}}</a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n\r\n</ng-template>\r\n\r\n<ng-template #buttonsTemplate>\r\n <div class=\"d-flex\">\r\n <div *ngIf=\"action?.display\" class=\"button-display mt-0\" [ngClass]=\"{'w-100 justify-space-around': isMobile}\">\r\n <div *ngFor=\"let button of action?.buttons\">\r\n <app-button-element [buttonContent]=\"button.content\" [buttonStyle]=\"button.styles\" [sectionId]=\"data?.id\"\r\n [edit]=\"edit\" [color]=\"data?.styles?.background?.accentColor\" [buttonId]=\"button.id\"\r\n [backgroundInfo]=\"data?.styles?.background\"></app-button-element>\r\n </div>\r\n <div class=\"static_login_btn d-flex justify-content-between align-items-center cursor-pointer\">\r\n Login\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"27\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M12.12 12.78C12.05 12.77 11.96 12.77 11.88 12.78C10.12 12.72 8.71997 11.28 8.71997 9.50998C8.71997 7.69998 10.18 6.22998 12 6.22998C13.81 6.22998 15.28 7.69998 15.28 9.50998C15.27 11.28 13.88 12.72 12.12 12.78Z\"\r\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M18.74 19.38C16.96 21.01 14.6 22 12 22C9.40001 22 7.04001 21.01 5.26001 19.38C5.36001 18.44 5.96001 17.52 7.03001 16.8C9.77001 14.98 14.25 14.98 16.97 16.8C18.04 17.52 18.64 18.44 18.74 19.38Z\"\r\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z\"\r\n stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <button class=\"mobileLoginButton\" *ngIf=\"isEcommerceWebsite && isMobile && !loggedIn\"\r\n [style.border]=\"'1px solid' + accentColor\" [style.color]=\"accentColor\" (click)=\"goToAccount('LOGIN')\">Login</button>\r\n</ng-template>\r\n\r\n<ng-template #mobileFooterTemplate>\r\n <div class=\"mobile-footer\" [simpoBackground]=\"backgroundInfo\">\r\n <div class=\"icons\" (click)=\"goToHome()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">home</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Home</span>\r\n </div>\r\n <div class=\"icons\" (click)=\"searchProducts()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">grid_on</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Shop</span>\r\n </div>\r\n <div class=\"icons\" (click)=\"goToWishlist()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">favorite_border</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Wishlist</span>\r\n </div>\r\n <div class=\"icons position-relative\" (click)=\"goToCart()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">shopping_cart</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Cart</span>\r\n <div class=\"position-absolute cartItemCount\" *ngIf=\"getCartItemsCount\">{{getCartItemsCount}}</div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #ecommerceButtonsTemplate>\r\n <div class=\"justify-content-between pr-0 d-flex position-relative gap-10 w-100\"\r\n [style.flexDirection]=\"style?.styling === 'Header2' || style?.styling === 'Header4' ? 'row-reverse' : ''\">\r\n <!-- <div class=\"search-icon\" (click)=\"showSearchBar = !showSearchBar\">\r\n <mat-icon [style.color]=\"accentColor\">search</mat-icon>\r\n </div> -->\r\n <div class=\"w-75 d-flex align-items-center\">\r\n <div class=\"input-group w-75 ml-2\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search Product\" aria-label=\"Search Product\"\r\n [(ngModel)]=\"searchText\" (ngModelChange)=\"waitBeforeSearch()\"\r\n [ngStyle]=\"{'border' : '1px solid ' + accentColor}\" [style.color]=\"accentColor\">\r\n <mat-icon class=\"h-100\"\r\n [ngStyle]=\"{'background' : style?.background?.accentBackgroundType == 'Solid' ? accentColor : 'linear-gradient(to right,' + style?.background?.accentColor + ' 0%' + ',' + style?.background?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"style?.background?.color\">search</mat-icon>\r\n </div>\r\n <div class=\"d-flex gap-3 align-items-center py-1 px-3 b-1 stores\" [style.borderColor]=\"accentColor\"\r\n (click)=\"goToSchemes()\" [style.background]=\"getRGBA(accentColor , 10)\" *ngIf=\"schemeAvailable\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n xmlns:svgjs=\"http://svgjs.dev/svgjs\" id=\"Layer_2\" viewBox=\"0 0 60 60\" data-name=\"Layer 2\" width=\"30\"\r\n height=\"30\" version=\"1.1\">\r\n <g width=\"100%\" height=\"100%\" transform=\"matrix(1,0,0,1,0,0)\">\r\n <path d=\"m14.36 46.66.51-9.86-11.93-7.16-1.94 8.43z\" [attr.fill]=\"accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path\r\n d=\"m17.17 38.1s0-.02.02-.03c0 0 0-.02.02-.02.04-.05.1-.08.15-.11.02-.01.03-.03.05-.04l4.66-1.94h-.02s-1.87-1.21-1.87-1.21l-3.18 1.57-1.07.53-.43 8.32 1.58-6.9c.01-.06.05-.12.09-.17z\"\r\n [attr.fill]=\"accentColor\" fill-opacity=\"1\" data-original-color=\"#000000ff\" stroke=\"none\"\r\n stroke-opacity=\"1\" />\r\n <path d=\"m19.14 34.08-6.27-4.04c-.19-.12-.28-.34-.23-.56l1.08-4.72-9.96 4.14 11.68 7.01z\"\r\n [attr.fill]=\"accentColor\" fill-opacity=\"1\" data-original-color=\"#000000ff\" stroke=\"none\"\r\n stroke-opacity=\"1\" />\r\n <path d=\"m30.93 46.42-.5 9.79 32.57-18.67-1.21-6.4-23.16 11.46z\" [attr.fill]=\"accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path d=\"m16 47.65 13.38 8.58.49-9.86-11.93-7.17z\" [attr.fill]=\"accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path\r\n d=\"m27.85 39.34s0 0-.01 0c0 0 0 0-.01 0-.08.04-.16.06-.24.06-.05 0-.1-.03-.15-.04-.04-.01-.08-.01-.11-.03l-4.16-2.67-4.37 1.82 11.68 7.01 30.4-15.05-10.71-3.88-22.28 12.78z\"\r\n [attr.fill]=\"accentColor\" fill-opacity=\"1\" data-original-color=\"#000000ff\" stroke=\"none\"\r\n stroke-opacity=\"1\" />\r\n <path d=\"m28.26 36.01-.1 1.93 32.58-18.69-1.22-6.39-30.86 15.28z\" [attr.fill]=\"accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path d=\"m27.61 28.09-11.93-7.16-1.94 8.43 13.36 8.58z\" [attr.fill]=\"accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path d=\"m58.57 12.15-12.1-4.38-29.97 12.43 11.68 7z\" [attr.fill]=\"accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n </g>\r\n </svg>\r\n <div [style.color]=\"accentColor\">Schemes</div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex gap-3 align-items-center\">\r\n <div class=\"stores d-flex align-items-center gap-2 py-2 px-3\" (click)=\"goToStores()\"\r\n [style.borderColor]=\"accentColor\" *ngIf=\"storeAvaiable\" [style.background]=\"getRGBA(accentColor , 10)\">\r\n <mat-icon [style.color]=\"accentColor\">store</mat-icon>\r\n <span [style.color]=\"accentColor\">Stores</span>\r\n </div>\r\n <div class=\"pin-text\" (mouseenter)=\"showPincodeInput = true;showLogin = false\" [style.color]=\"accentColor\"\r\n *ngIf=\"!getPincode\">Enter\r\n Pincode\r\n </div>\r\n <div class=\"pin-text\" (mouseenter)=\"showPincodeInput = true;;showLogin = false\" [style.color]=\"accentColor\"\r\n *ngIf=\"getPincode && getPincode.length == 6\">{{\"Delivering to: \" + getPincode}}</div>\r\n\r\n <!-- (mouseleave)=\"showPincodeInput = false\" -->\r\n <div class=\"pincode-container p-3\" *ngIf=\"showPincodeInput\" (mouseleave)=\"showPincodeInput = false\">\r\n <div class=\"text text-center mb-2 f-18 fw-bold\">\r\n Your PIN Code unlocks\r\n </div>\r\n <div class=\"sub-text text-center f-14 pincode-text\">\r\n Fastest delivery date, Try-at-Home availability,\r\n Nearest store and In-store design!\r\n </div>\r\n <div class=\"input-group mt-2 br-5 d-flex align-items-center justify-content-between px-3\"\r\n [class.error-border]=\"pinError\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Pincode\" aria-label=\"Pincode\" [(ngModel)]=\"pincode\"\r\n class=\"w-75 p-0\">\r\n <div class=\"input-sub-text f-11 w-25 text-end cursor-pointer\" (click)=\"setPincode()\">SUBMIT</div>\r\n </div>\r\n <div class=\"text-start mt-2 f-11\" *ngIf=\"pinError\">\r\n Please enter a valid pincode\r\n </div>\r\n </div>\r\n <div class=\"d-flex align-items-center\" style=\"gap: 5px; cursor: pointer;\" (click)=\"goToFav()\">\r\n <mat-icon [simpoColor]=\"style?.background?.color\">favorite</mat-icon>\r\n </div>\r\n <div class=\"d-flex align-items-center position-relative\" style=\"gap: 5px; cursor: pointer;\" (click)=\"goToCart()\">\r\n <mat-icon [simpoColor]=\"style?.background?.color\">shopping_cart</mat-icon>\r\n <div class=\"position-absolute cartItemCount\" *ngIf=\"getCartItemsCount\"\r\n [ngStyle]=\"{'background' : style?.background?.accentBackgroundType == 'Solid' ? accentColor : 'linear-gradient(to right,' + style?.background?.accentColor + ' 0%' + ',' + style?.background?.secondaryAccentColor +' 100%' + ')' , 'color' : setColor()}\">\r\n {{getCartItemsCount}}</div>\r\n </div>\r\n <div class=\"loginButton\" *ngIf=\"!loggedIn\" (mouseenter)=\"showLogin = true;showPincodeInput = false\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"27\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M12.12 12.78C12.05 12.77 11.96 12.77 11.88 12.78C10.12 12.72 8.71997 11.28 8.71997 9.50998C8.71997 7.69998 10.18 6.22998 12 6.22998C13.81 6.22998 15.28 7.69998 15.28 9.50998C15.27 11.28 13.88 12.72 12.12 12.78Z\"\r\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M18.74 19.38C16.96 21.01 14.6 22 12 22C9.40001 22 7.04001 21.01 5.26001 19.38C5.36001 18.44 5.96001 17.52 7.03001 16.8C9.77001 14.98 14.25 14.98 16.97 16.8C18.04 17.52 18.64 18.44 18.74 19.38Z\"\r\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z\"\r\n stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> <!-- <span class=\"fw-normal fs-6\" [simpoColor]=\"accentColor\">Login</span> -->\r\n </div>\r\n <!-- (mouseleave)=\"showLogin = false\" -->\r\n <div class=\"info-container p-3\" *ngIf=\"showLogin\" (mouseleave)=\"showLogin = false\">\r\n <div class=\"text text-center mb-2 f-18 fw-bold\">\r\n Your Account\r\n </div>\r\n <div class=\"sub-text text-center f-14\">\r\n Access account & manage your orders.\r\n </div>\r\n <div class=\"btn-container w-100 d-flex justify-content-between mt-3 gap-3\">\r\n <div (click)=\"goToAccount('SIGNUP')\" class=\"w-50 text-center sign-btn border-0\"\r\n [ngStyle]=\"{'background' : style?.background?.accentBackgroundType == 'Solid' ? accentColor : 'linear-gradient(to right,' + style?.background?.accentColor + ' 0%' + ',' + style?.background?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"style?.background?.color\">Sign Up</div>\r\n <div (click)=\"goToAccount('LOGIN')\" class=\"w-50 text-center sign-btn\" [style.borderColor]=\"accentColor\"\r\n [style.color]=\"accentColor\">Log In</div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; cursor: pointer;\" (click)=\"goToAccount('PROFILE')\"\r\n *ngIf=\"loggedIn\">\r\n <img loading=\"lazy\" [src]=\"userGender | genderIcon\" style=\"height: 27px;\">\r\n </div>\r\n </div>\r\n <!-- <div> -->\r\n <!-- <button class=\"button\" (click)=\"goToAccount()\" simpoButtonDirective [id]=\"sectionId+buttonId\" [buttonStyle]=\"buttonStyle\" [color]=\"color\" [appButtonEditor]=\"edit ?? false\" [buttonData]=\"buttonContent\">{{buttonContent?.label}}</button> -->\r\n <!-- </div> -->\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #navbarLinksTemplate>\r\n <div class=\"navbar-collapse fs-6 position-relative d-flex\" style=\"margin-top: 5px; margin-left: 25px;\"\r\n [simpoColor]=\"simpoColor\" *ngIf=\"screenWidth > 768\">\r\n <ng-container *ngFor=\"let item of getNavbarButton\">\r\n <ng-container *ngIf=\"item.showHeader\">\r\n <simpo-navbar-button-element [buttonData]=\"item\" [selectedStyle]=\"style?.navigationStyle\"\r\n [buttonStyle]=\"style?.navbarButtonStyle\" [bgColor]=\"simpoColor\"\r\n [sectionId]=\"data?.id\"></simpo-navbar-button-element>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let link of getDropdownLinks; let idx = index\">\r\n <ng-container *ngIf=\"content?.ecomlinks?.[link]?.length \">\r\n <div class=\"position-relative\">\r\n <button mat-stroked-button class=\"mat-btn dropdown-toggle\" type=\"button\" [simpoColor]=\"simpoColor\" id=\"link\"\r\n data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{link | uppercase}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"link\">\r\n <a class=\"dropdown-item\" *ngFor=\"let menu of getValues(content?.ecomlinks?.[link])\"\r\n (click)=\"applyFilter(menu, link)\">{{menu}}</a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<div class=\"offcanvas offcanvas-end\" tabindex=\"-1\" id=\"offcanvasRight\" aria-labelledby=\"offcanvasRightLabel\"\r\n [ngClass]=\"{'offcanvas-end' : style?.styling === 'Header1' || style?.styling === 'Header3', 'offcanvas-start': style?.styling === 'Header2' || style?.styling === 'Header4'}\">\r\n <div class=\"offcanvas-header\">\r\n <ng-container *ngTemplateOutlet=\"mobileLogoSectionTemplate\"></ng-container>\r\n <!-- <button type=\"button\" class=\"btn-close\" aria-label=\"Close\"></button> -->\r\n <mat-icon data-bs-dismiss=\"offcanvas\">close</mat-icon>\r\n </div>\r\n <div class=\"offcanvas-body\">\r\n <div class=\"pages\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n <div class=\"offcanvas-footer\">\r\n <div class=\"canvas-button\">\r\n <ng-container *ngTemplateOutlet=\"buttonsTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #ecomProfileTemplate>\r\n <mat-icon class=\"h-100 d-flex align-items-center justify-content-center br-50 fs-16 py-1\"\r\n (click)=\"showSearchBarMobile = !showSearchBarMobile\"\r\n [ngStyle]=\"{'background' : style?.background?.accentBackgroundType == 'Solid' ? accentColor : 'linear-gradient(to right,' + style?.background?.accentColor + ' 0%' + ',' + style?.background?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"style?.background?.color\">search</mat-icon>\r\n\r\n\r\n <input type=\"text\" class=\"form-control mob-form-control\" placeholder=\"Search Product\" aria-label=\"Search Product\"\r\n *ngIf=\"showSearchBarMobile\" [(ngModel)]=\"searchText\" (ngModelChange)=\"waitBeforeSearch()\"\r\n [ngStyle]=\"{'border' : '1px solid ' + accentColor}\">\r\n\r\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; cursor: pointer;\" (click)=\"goToAccount('PROFILE')\"\r\n *ngIf=\"loggedIn\">\r\n <img loading=\"lazy\" [src]=\"userGender | genderIcon\" style=\"height: 27px;\">\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #mobileLogoSectionTemplate>\r\n <div class=\"d-flex gap-3 align-center cursor-pointer h-100\"\r\n *ngIf=\"!content?.logo?.isImage || !content?.logo?.image?.url\" (click)=\"!edit ? goToHome() : ''\">\r\n <div *ngIf=\"content?.logo?.text?.isIcon && content?.logo?.text?.url\" class=\"h-100\">\r\n <img loading=\"lazy\" [src]=\"content?.logo?.text?.url\" alt=\"logo\" class=\"h-100\">\r\n </div>\r\n <div class=\"heading-small\" *ngIf=\"content?.logo?.text?.isText\" [simpoColor]=\"simpoColor\">\r\n <b [ngStyle]=\"{'font-family': content?.logo?.text?.fontFamily}\">{{content?.siteName?.value}}</b>\r\n </div>\r\n </div>\r\n <!-- <div class=\"d-flex gap-3 align-items-lg-center cursor-pointer\" *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"goToHome()\"> -->\r\n <img [src]=\"content?.logo?.image?.url\" alt=\"logo\" class=\"h-100\" loading=\"lazy\"\r\n *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"!edit ? goToHome() : ''\">\r\n <!-- </div> -->\r\n</ng-template>\r\n\r\n<ng-template #categoriesHeader>\r\n <div class=\"categories-header d-flex gap-3 py-2 position-relative\" *ngIf=\"categoryList?.length > 0 && !isMobile\"\r\n [spacingHorizontal]=\"stylesLayout\" [style.background]=\"data?.styles?.headline?.color\">\r\n <div class=\"category cursor-pointer\" *ngFor=\"let ele of categoryList;let i = index\"\r\n [style.--border-color]=\"data?.styles?.background?.accentColor\" [simpoColor]=\"data?.styles?.headline?.color\"\r\n (mouseenter)=\"showList = true;selectedCategory = ele;showCollections = false\">\r\n {{ele?.categoryName | titlecase}}\r\n </div>\r\n <div class=\"category cursor-pointer\" (mouseenter)=\"showCollections = true;showList = false\"\r\n *ngIf=\"collectionList?.collections?.length > 0\" [style.--border-color]=\"data?.styles?.background?.accentColor\"\r\n [simpoColor]=\"data?.styles?.headline?.color\">\r\n Collections\r\n </div>\r\n </div>\r\n <!-- (mouseleave)=\"showList = false\" -->\r\n <div *ngIf=\"showList\" class=\"list-category\" (mouseleave)=\"showList = false\">\r\n <div class=\"row w-100 h-100\">\r\n <div class=\"col-7 row\">\r\n <div class=\"col-4 h-100\" *ngIf=\"selectedCategory?.byPrice\">\r\n <div class=\"list-header mb-3\">By Price</div>\r\n <div class=\"d-flex flex-column gap-3 list-item\">\r\n <ng-container *ngFor=\"let price of Object.keys(selectedCategory?.byPrice)\">\r\n <div class=\"each-price cursor-pointer\"\r\n (click)=\"applyFilterToList(selectedCategory?.byPrice[price], 'price')\">\r\n {{price | titlecase}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-4 h-100 overflow-scroll\"\r\n *ngIf=\"selectedCategory?.byStyle && selectedCategory?.byStyle?.length > 0\">\r\n <div class=\"list-header mb-3\">By Style</div>\r\n <div class=\"d-flex flex-column gap-3 list-item\">\r\n <ng-container *ngFor=\"let collection of selectedCategory?.byStyle\">\r\n <div class=\"each-price cursor-pointer\" (click)=\"applyFilterToList(collection, 'collection')\">{{collection\r\n |\r\n titlecase}}</div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-4\" *ngIf=\"toShowInJewellery\">\r\n <div class=\"list-header mb-3\">By Metal & Stone</div>\r\n <div class=\"d-flex flex-column gap-3 list-item\">\r\n <ng-container *ngFor=\"let collection of byMetalAndStone\">\r\n <div class=\"d-flex gap-2 align-items-center\">\r\n <div style=\"width: 15px;height: 20px;\">\r\n <img [src]=\"collection.imageUrl\" alt=\"\" class=\"w-100\">\r\n </div>\r\n <div class=\"each-price cursor-pointer\">{{collection.name\r\n |\r\n titlecase}}</div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-5 h-100 row\" *ngIf=\"selectedCategory?.imageUrls?.length > 0\">\r\n <ng-container *ngFor=\"let image of selectedCategory?.imageUrls | slice:0:2; let i = index\">\r\n <div class=\"image-container h-100 col-6\" *ngIf=\"image\">\r\n <img loading=\"lazy\" [src]=\"image\" class=\"h-100 w-100\" (click)=\"filterByCategory()\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- (mouseleave)=\"showCollections = false\" -->\r\n <div class=\"list-category\" *ngIf=\"showCollections\" (mouseleave)=\"showCollections = false\">\r\n <div class=\"row w-100 h-100\">\r\n <div class=\"col-7 row\">\r\n <ng-container *ngFor=\"let collection of collectionList?.collections\">\r\n <div class=\"collection row col-3 align-items-center\"\r\n (click)=\"applyFilterToList(collection?.collectionName, 'collections')\">\r\n <div class=\"col-imag col-4\">\r\n <img [src]=\"collection?.imgUrl[0]\" alt=\"\" class=\"w-100\">\r\n </div>\r\n <div class=\"col-8 text-overflow\">\r\n {{collection?.collectionName | titlecase}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-5 h-100 row\" *ngIf=\"collectionList?.imageUrls\">\r\n <ng-container *ngFor=\"let image of Object.keys(collectionList?.imageUrls) | slice:0:2; let i = index\">\r\n <div class=\"image-container h-100 col-6 position-relative\" *ngIf=\"image\"\r\n (click)=\"applyFilterToList(image, 'collections')\">\r\n <img loading=\"lazy\" [src]=\"collectionList?.imageUrls[image]\" class=\"h-100 w-100\">\r\n <div class=\"text-center p-2 btm-col-name position-absolute\"\r\n [style.background]=\"data?.styles?.background?.accentColor\" [style.color]=\"setColor()\">{{image}}</div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #mobileCategoryHeader>\r\n <div class=\"categories-header d-flex gap-3 py-2 overflow-auto\" *ngIf=\"categoryList?.length > 0 && isMobile\"\r\n [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"category cursor-pointer d-flex flex-column gap-3\" *ngFor=\"let ele of categoryList;let i = index\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"selectedCategory = ele; filterByCategory()\">\r\n <div class=\"cat-img d-flex justify-content-center align-items-center\">\r\n <img [src]=\"ele?.imageUrls[0]\" alt=\"\" class=\"h-10 br-12\">\r\n </div>\r\n <div class=\"text-center f-14\">{{ele?.categoryName | titlecase}}</div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".header--scrolled{position:fixed!important;top:10px;left:50%;transform:translate(-50%);width:80%!important;border-radius:50px;box-shadow:0 3px 10px #00000026;z-index:1000001;transition:width .2s ease-in-out}*{font-family:var(--website-font-family)}.static_login_btn{padding:2%;border-radius:4px;border:2px solid lightgrey;width:7vw}mat-icon{font-family:Material Icons!important}.total-container{transition:width .2s ease-in-out}.categories-header{height:44px;gap:26px!important}.categories-header .category{display:flex;align-items:center;font-weight:400;font-size:1rem}.margin-bottom{margin-bottom:var(--margin-top)}@media only screen and (max-width : 475px){.left-logo-text{padding-top:10px}.mob-form-control{position:absolute;right:10px;width:95%;top:85px;border-radius:12px!important}.categories-header{height:unset!important;margin-top:var(--margin-top)}.w-98{width:98%}.paddingEcom{padding-top:5px!important;padding-bottom:5px!important}.right-btn{width:15%!important}.cartItemCount{top:-8px!important;right:-3px!important}.adjustePadding{padding:8px!important}.pageLinks{gap:15px;flex-direction:column!important}.category-btn{color:#000!important;justify-content:left}}.nav-link{text-decoration:none}.cartItemCount{padding:5px;border-radius:5px;color:#fff;top:15px;left:15px;height:15px;width:15px;display:flex;align-items:center;justify-content:center;font-size:9px}#navbarNavAltMarkup{position:fixed;top:0;width:100%;background-color:#0e3f58;height:calc(100vh + -0px);z-index:101}.dropdown-toggle{border-bottom:2px solid transparent;transition:border .5s ease;position:relative;top:-1px}.dropdown-toggle:hover{border-bottom:2px solid rgb(14,63,88)}.inner-height,.nab-bar-mobile{height:100%}.total-container{height:auto;position:relative;background-color:transparent!important}.menu-icon{display:flex;flex-direction:column;gap:0px;align-items:center;justify-content:space-evenly;max-width:55px}.menu-icon hr{border:1px solid;margin:0;width:100%}.pt-0{padding-top:0!important}.pb-0{padding-bottom:0!important}.button{font-size:14px!important;padding:1rem 2rem;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important}.stores{border:1px solid;border-radius:12px;cursor:pointer;font-weight:600}.input-group{position:relative;outline:none;height:40px;display:flex;align-items:center;background-color:transparent;margin-right:25px;-webkit-transition:width .4s ease-in-out;transition:width .4s ease-in-out;border-radius:12px}.input-group mat-icon{width:6%;display:flex;align-items:center;justify-content:center;font-size:22px;position:relative;border-radius:0 12px 12px 0}.input-group input{height:100%!important;width:80%;background-color:transparent;border:none;outline:none;font-size:14px;padding-bottom:6px;box-shadow:none}.mat-icon{color:#000}.dropdown-button{font-size:14px!important;width:fit-content!important}.mobile-footer{display:none}@media screen and (max-width: 475px){.mobile-footer{width:100vw;height:60px;box-shadow:#64646f33 -2px -16px 29px;position:fixed;bottom:0;z-index:10001;display:flex!important;justify-content:space-around;align-items:center}.mobile-footer .icons{margin-top:5px;display:flex;align-items:center;justify-content:center;flex-direction:column}.mobile-footer .mat-icon{font-size:22px}}.nab-bar-mobile{width:100%;padding:5px 10px;height:50px;box-sizing:border-box}.title-row{flex:1;display:flex;align-items:center}.navbar-content{background-color:#0e3f58;padding:10px;margin-top:0!important}.navbar-content .d-flex{margin-top:20px}.navbar-toggler,.close-box{background:transparent;border:none;cursor:pointer;margin-left:10px;width:50px!important}.mat-icon{color:#fff}.button-display{display:flex;gap:8px}.flex-column{flex-direction:column}.justify-space-around{justify-content:space-around}@media screen and (max-width: 475px){.nab-bar-mobile{height:60px}}.cursor-pointer{cursor:pointer}.search-icon{margin-right:20px;display:flex;align-items:center;cursor:pointer}.search-icon mat-icon{font-size:24px}.mat-btn{font-size:14px!important;background:none;display:flex;cursor:pointer;border:none}.mat-btn mat-icon{color:inherit}.dropdown-menu{right:0;left:auto}.header1{display:flex;justify-content:space-between;align-items:center}.gap-15{gap:15px}.gap-10{gap:10px}.ptb-1{padding-top:1rem;padding-bottom:1rem}.text-end{text-align:end}.loginButton{gap:5px;display:flex;align-items:center;color:#fff;border-radius:8px;cursor:pointer;width:40px}.loginButton span{font-weight:600!important}.align-center{align-items:center}.offcanvas{width:70%;z-index:1000000000}.offcanvas mat-icon{color:#000}.offcanvas-body{position:relative}.canvas-button{position:absolute;bottom:20px;left:12px;width:90%}.mobileLoginButton{width:100%;height:40px;border-radius:8px;margin-top:15px;outline:none;background:transparent}.pageLinks{display:flex;flex-direction:row}.category-btn{font-size:16px!important}.h-70{height:70px}.offcanvas-header{height:10vh}.offcanvas-body{height:70vh}.offcanvas-body .pages{height:80%;overflow:scroll}.offcanvas-footer{height:20vh}.h-100{height:100%!important}.box-shadow{box-shadow:-9px 5px 3px #99999929}.sticky-header{position:sticky;top:0;z-index:10000}.mobile-page-list{position:relative;left:10px}.category{position:relative}.category:hover{border-bottom:3px solid var(--border-color);transition:border-bottom .1s ease-in-out}.list-category{padding:15px 30px;color:#000;background-color:#fff!important;height:50vh;position:absolute;width:100%}.list-header{margin-bottom:1rem;font-size:16px;font-weight:600}.list-item{gap:1rem;font-size:14px}.image-container{cursor:pointer}.image-container img{border-radius:12px}.each-price:hover{font-weight:700}.col-imag img{border-radius:8px}.btm-col-name{width:93%;border-radius:0 0 12px 12px;bottom:0}.collection{height:max-content;cursor:pointer}.text-overflow{overflow:hidden;text-overflow:ellipsis;font-size:14px;font-weight:500}.col-5{width:44.666667%}.h-10{height:10vh}.fs-16{font-size:16px}.br-50{border-radius:50%}.col-7{width:56.333333%}.pincode-container{position:absolute;background:#fff;color:#000;height:max-content;width:20vw;right:3%;top:130%;z-index:10;border-radius:0 0 30px 30px;transform-origin:top;box-shadow:0 2px 4px #c8c8c880;animation:unrollCarpet .5s ease-out forwards}.form-control{border-radius:12px 0 0 12px}.pin-text{font-size:14px;font-weight:500;white-space:nowrap}.error-border{border:2px solid #e53e3e!important}.f-11{font-size:11px}.br-5{border:1px solid rgba(0,0,0,.05)}.f-18{font-size:18px}.f-14{font-size:14px}.info-container{position:absolute;background:#fff;color:#000;height:max-content;width:20vw;right:-15px;top:130%;z-index:10;border-radius:0 0 30px 30px;transform-origin:top;box-shadow:0 2px 4px #c8c8c880;animation:unrollCarpet .5s ease-out forwards}.sign-btn{padding:10px;border-radius:12px;border:1px solid;cursor:pointer}.b-1{border:1px solid;border-radius:12px}@keyframes unrollCarpet{0%{transform:scaleY(0) rotateX(90deg);opacity:0}25%{transform:scaleY(.25) rotateX(67.5deg);opacity:.35}50%{transform:scaleY(.5) rotateX(45deg);opacity:.7}75%{transform:scaleY(.75) rotateX(22.5deg);opacity:.85}to{transform:scaleY(1) rotateX(0);opacity:1}}.pincode-text{font-size:11px;margin-bottom:15px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i6.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i6.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i6.SlicePipe, name: "slice" }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }, { kind: "component", type: SimpoButtonComponent, selector: "app-button-element", inputs: ["buttonContent", "buttonStyle", "buttonId", "color", "sectionId", "edit", "backgroundInfo"] }, { kind: "pipe", type: GenderIcon, name: "genderIcon" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: NavbarButtonElementComponent, selector: "simpo-navbar-button-element", inputs: ["buttonData", "buttonStyle", "selectedStyle", "bgColor", "sectionId", "accentColor"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: SimpoStickyDirective, selector: "[simpoSticky]", inputs: ["simpoSticky", "categoryHeader"] }, { kind: "directive", type: ColorDirective, selector: "[simpoColor]", inputs: ["simpoColor"] }, { kind: "ngmodule", type: MatBottomSheetModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "component", type: MovingTextComponent, selector: "simpo-moving-text", inputs: ["data", "edit", "delete", "customClass", "index"] }] }); }
|
352
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderSectionComponent, deps: [{ token: i1.EventsService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.MatDialog }, { token: i4.StorageServiceService }, { token: i5.RestService }, { token: i1.EventsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
353
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HeaderSectionComponent, isStandalone: true, selector: "simpo-header-section", inputs: { data: "data", nextComponent: "nextComponent", index: "index", customClass: "customClass", edit: "edit" }, host: { listeners: { "window:scroll": "onScroll($event)", "window:resize": "getScreenSize($event)" } }, viewQueries: [{ propertyName: "childContainer", first: true, predicate: ["childContainer"], descendants: true }], ngImport: i0, template: "<section [id]=\"data?.id\" class=\"total-container w-100\">\r\n <div class=\"w-100\" [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [ngClass]=\"{'box-shadow': isEcommerceWebsite}\"\r\n [class.margin-bottom]=\"isHeaderSticky && isEcommerceWebsite && (categoryList?.length == 0 || !showCategoryMobileHeader()) && isMobile\">\r\n <!-- isHeaderSticky && isEcommerceWebsite && (!categoryList || !showCategoryMobileHeader()) && -->\r\n <!-- [scrollValue]=\"isComponentMerged ? scrollValue : 0\" -->\r\n <div [simpoSticky]=\"isHeaderSticky\" [simpoBackground]=\"backgroundInfo\" [simpoOverlay]=\"backgroundInfo\" class=\"w-100\" #childContainer\r\n [categoryHeader]=\"isEcommerceWebsite && categoryList?.length > 0 && !isMobile\" simpoHover [class.background-position]=\"isComponentMerged && backgroundInfo?.showImage\"\r\n (hovering)=\"showEditTabs($event)\" [id]=\"data?.id\">\r\n <ng-container *ngIf=\"style?.headline?.display\">\r\n <div>\r\n <simpo-moving-text [edit]=\"false\" [delete]=\"false\" [data]=\"data\"></simpo-moving-text>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"style?.styling === 'Header1'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header1Template\"></ng-container>\r\n </div>\r\n <div *ngIf=\"style?.styling === 'Header2'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header2Template\"></ng-container>\r\n </div>\r\n <div *ngIf=\"style?.styling === 'Header3'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header3Template\"></ng-container>\r\n </div>\r\n <div *ngIf=\"style?.styling === 'Header4'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header4Template\"></ng-container>\r\n </div>\r\n <!-- <div class=\"input-group mx-2 mb-2 w-98\" *ngIf=\"isMobile && isEcommerceWebsite\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search Product\" aria-label=\"Search Product\"\r\n [(ngModel)]=\"searchText\" (ngModelChange)=\"waitBeforeSearch()\"\r\n [ngStyle]=\"{'border' : '1px solid ' + accentColor}\">\r\n <mat-icon class=\"h-100\"\r\n [ngStyle]=\"{'background' : style?.background?.accentBackgroundType == 'Solid' ? accentColor : 'linear-gradient(to right,' + style?.background?.accentColor + ' 0%' + ',' + style?.background?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"style?.background?.color\">search</mat-icon>\r\n </div> -->\r\n <ng-container *ngIf=\"isEcommerceWebsite && !isMobile\">\r\n <ng-container *ngTemplateOutlet=\"categoriesHeader\"></ng-container>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"isEcommerceWebsite && isMobile && showCategoryMobileHeader()\">\r\n <ng-container *ngTemplateOutlet=\"mobileCategoryHeader\"></ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngIf=\"isEcommerceWebsite && isMobile\">\r\n <ng-container *ngTemplateOutlet=\"mobileFooterTemplate\"></ng-container>\r\n </ng-container>\r\n</section>\r\n\r\n<ng-template #header1Template>\r\n <div class=\"header1\">\r\n <div>\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n <div class=\"d-flex gap-15 align-center\" *ngIf=\"!isMobile\" [style.width.%]=\"isEcommerceWebsite ? 95 : ''\">\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n </div>\r\n <div class=\"d-flex gap-15 align-center\" *ngIf=\"isMobile\">\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n <mat-icon [simpoColor]=\"simpoColor\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\">menu</mat-icon>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #header2Template>\r\n <div class=\"header1\">\r\n <div class=\"d-flex gap-15 align-center\" *ngIf=\"!isMobile\" [style.width.%]=\"isEcommerceWebsite ? 93 : ''\">\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container>\r\n </div>\r\n <div class=\"d-flex gap-15 align-center\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\" *ngIf=\"isMobile\">\r\n <mat-icon [simpoColor]=\"simpoColor\">menu</mat-icon>\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n </div>\r\n <div class=\"text-end\">\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #header3Template>\r\n <div class=\"header1\">\r\n <div>\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n <ng-container *ngIf=\"!isMobile\">\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n </ng-container>\r\n <div class=\"d-flex gap-15 align-center\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\" *ngIf=\"isMobile\">\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n <mat-icon [simpoColor]=\"simpoColor\">menu</mat-icon>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #header4Template>\r\n <div class=\"header1\">\r\n <ng-container *ngIf=\"!isMobile\">\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container> </ng-container>\r\n <div class=\"d-flex gap-15 align-center\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\" *ngIf=\"isMobile\">\r\n <mat-icon [simpoColor]=\"simpoColor\">menu</mat-icon>\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n </div>\r\n <div class=\"text-end\">\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #logoSectionTemplate>\r\n <div class=\"d-flex gap-3 align-center cursor-pointer\" *ngIf=\"!content?.logo?.isImage || !content?.logo?.image?.url\"\r\n (click)=\"!edit ? goToHome() : ''\">\r\n <div *ngIf=\"content?.logo?.text?.isIcon && content?.logo?.text?.url\">\r\n <img loading=\"lazy\" [src]=\"content?.logo?.text?.url\" alt=\"logo\" [width]=\"content?.logo?.size\" loading=\"lazy\">\r\n </div>\r\n <div class=\"heading-small\" *ngIf=\"content?.logo?.text?.isText\" [simpoColor]=\"simpoColor\">\r\n <b [ngStyle]=\"{'font-family': content?.logo?.text?.fontFamily}\">{{content?.siteName?.value}}</b>\r\n </div>\r\n </div>\r\n <!-- <div class=\"d-flex gap-3 align-items-lg-center cursor-pointer\" *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"goToHome()\"> -->\r\n <img loading=\"lazy\" [src]=\"content?.logo?.image?.url\" alt=\"logo\"\r\n [style.width.%]=\"screenWidth > 475 || (content?.logo?.size || 10) < 50 ? content?.logo?.size : ((content?.logo?.size || 10) - 10)\"\r\n loading=\"lazy\" *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"!edit ? goToHome() : ''\">\r\n <!-- </div> -->\r\n</ng-template>\r\n\r\n<ng-template #pageLinksTemplate>\r\n <div class=\"navbar-nav pageLinks\" [ngClass]=\"{'align-items-center' : !isMobile}\">\r\n <div class=\"d-flex gap-3\"\r\n [ngClass]=\"{'flex-column': isMobile, 'align-items-center' : !isMobile, 'mobile-page-list': isMobile}\">\r\n <ng-container *ngFor=\"let item of getNavbarButton\">\r\n <ng-container *ngIf=\"item.showHeader\">\r\n <simpo-navbar-button-element [buttonData]=\"item\" [selectedStyle]=\"style?.navigationStyle\"\r\n [buttonStyle]=\"style?.navbarButtonStyle\" [bgColor]=\"simpoColor\" [accentColor]=\"accentColor\"\r\n [sectionId]=\"data?.id\"></simpo-navbar-button-element>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngFor=\"let link of getDropdownLinks; let idx = index\">\r\n <ng-container *ngIf=\"content?.ecomlinks?.[link]?.length \">\r\n <div class=\"position-relative\">\r\n <button mat-stroked-button class=\"mat-btn dropdown-toggle category-btn\" type=\"button\"\r\n [simpoColor]=\"simpoColor\" id=\"link\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{link | lowercase | titlecase}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"link\">\r\n <a class=\"dropdown-item\" *ngFor=\"let menu of getValues(content?.ecomlinks?.[link])\"\r\n (click)=\"applyFilter(menu, link)\">{{menu}}</a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n\r\n</ng-template>\r\n\r\n<ng-template #buttonsTemplate>\r\n <div class=\"d-flex\">\r\n <div *ngIf=\"action?.display\" class=\"button-display mt-0\" [ngClass]=\"{'w-100 justify-space-around': isMobile}\">\r\n <div *ngFor=\"let button of action?.buttons\">\r\n <app-button-element [buttonContent]=\"button.content\" [buttonStyle]=\"button.styles\" [sectionId]=\"data?.id\"\r\n [edit]=\"edit\" [color]=\"data?.styles?.background?.accentColor\" [buttonId]=\"button.id\"\r\n [backgroundInfo]=\"data?.styles?.background\"></app-button-element>\r\n </div>\r\n </div>\r\n </div>\r\n <button class=\"mobileLoginButton\" *ngIf=\"isEcommerceWebsite && isMobile && !loggedIn\"\r\n [style.border]=\"'1px solid' + accentColor\" [style.color]=\"accentColor\" (click)=\"goToAccount('LOGIN')\">Login</button>\r\n</ng-template>\r\n\r\n<ng-template #mobileFooterTemplate>\r\n <div class=\"mobile-footer\" [simpoBackground]=\"backgroundInfo\">\r\n <div class=\"icons\" (click)=\"goToHome()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">home</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Home</span>\r\n </div>\r\n <div class=\"icons\" (click)=\"searchProducts()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">grid_on</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Shop</span>\r\n </div>\r\n <div class=\"icons\" (click)=\"goToWishlist()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">favorite_border</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Wishlist</span>\r\n </div>\r\n <div class=\"icons position-relative\" (click)=\"goToCart()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">shopping_cart</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Cart</span>\r\n <div class=\"position-absolute cartItemCount\" *ngIf=\"getCartItemsCount\">{{getCartItemsCount}}</div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #ecommerceButtonsTemplate>\r\n <div class=\"justify-content-between pr-0 d-flex position-relative gap-10 w-100\"\r\n [style.flexDirection]=\"style?.styling === 'Header2' || style?.styling === 'Header4' ? 'row-reverse' : ''\">\r\n <!-- <div class=\"search-icon\" (click)=\"showSearchBar = !showSearchBar\">\r\n <mat-icon [style.color]=\"accentColor\">search</mat-icon>\r\n </div> -->\r\n <div class=\"w-75 d-flex align-items-center\">\r\n <div class=\"input-group w-75 ml-2\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search Product\" aria-label=\"Search Product\"\r\n [(ngModel)]=\"searchText\" (ngModelChange)=\"waitBeforeSearch()\"\r\n [ngStyle]=\"{'border' : '1px solid ' + backgroundInfo?.accentColor}\" [style.color]=\"backgroundInfo?.accentColor\">\r\n <mat-icon class=\"h-100\"\r\n [ngStyle]=\"{'background' : backgroundInfo.background?.accentBackgroundType == 'Solid' ? backgroundInfo?.accentColor : 'linear-gradient(to right,' + backgroundInfo?.accentColor + ' 0%' + ',' + backgroundInfo?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"backgroundInfo?.color\">search</mat-icon>\r\n </div>\r\n <div class=\"d-flex gap-3 align-items-center py-1 px-3 b-1 stores\" [style.borderColor]=\"backgroundInfo?.accentColor\"\r\n (click)=\"goToSchemes()\" [style.background]=\"getRGBA(backgroundInfo?.accentColor , 10)\" *ngIf=\"schemeAvailable\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n xmlns:svgjs=\"http://svgjs.dev/svgjs\" id=\"Layer_2\" viewBox=\"0 0 60 60\" data-name=\"Layer 2\" width=\"30\"\r\n height=\"30\" version=\"1.1\">\r\n <g width=\"100%\" height=\"100%\" transform=\"matrix(1,0,0,1,0,0)\">\r\n <path d=\"m14.36 46.66.51-9.86-11.93-7.16-1.94 8.43z\" [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path\r\n d=\"m17.17 38.1s0-.02.02-.03c0 0 0-.02.02-.02.04-.05.1-.08.15-.11.02-.01.03-.03.05-.04l4.66-1.94h-.02s-1.87-1.21-1.87-1.21l-3.18 1.57-1.07.53-.43 8.32 1.58-6.9c.01-.06.05-.12.09-.17z\"\r\n [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\" data-original-color=\"#000000ff\" stroke=\"none\"\r\n stroke-opacity=\"1\" />\r\n <path d=\"m19.14 34.08-6.27-4.04c-.19-.12-.28-.34-.23-.56l1.08-4.72-9.96 4.14 11.68 7.01z\"\r\n [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\" data-original-color=\"#000000ff\" stroke=\"none\"\r\n stroke-opacity=\"1\" />\r\n <path d=\"m30.93 46.42-.5 9.79 32.57-18.67-1.21-6.4-23.16 11.46z\" [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path d=\"m16 47.65 13.38 8.58.49-9.86-11.93-7.17z\" [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path\r\n d=\"m27.85 39.34s0 0-.01 0c0 0 0 0-.01 0-.08.04-.16.06-.24.06-.05 0-.1-.03-.15-.04-.04-.01-.08-.01-.11-.03l-4.16-2.67-4.37 1.82 11.68 7.01 30.4-15.05-10.71-3.88-22.28 12.78z\"\r\n [attr.fill]=\"accentColor\" fill-opacity=\"1\" data-original-color=\"#000000ff\" stroke=\"none\"\r\n stroke-opacity=\"1\" />\r\n <path d=\"m28.26 36.01-.1 1.93 32.58-18.69-1.22-6.39-30.86 15.28z\" [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path d=\"m27.61 28.09-11.93-7.16-1.94 8.43 13.36 8.58z\" [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path d=\"m58.57 12.15-12.1-4.38-29.97 12.43 11.68 7z\" [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n </g>\r\n </svg>\r\n <div [style.color]=\"accentColor\">Schemes</div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex gap-3 align-items-center\">\r\n <div class=\"stores d-flex align-items-center gap-2 py-2 px-3\" (click)=\"goToStores()\"\r\n [style.borderColor]=\"backgroundInfo?.accentColor\" *ngIf=\"storeAvaiable\" [style.background]=\"getRGBA(backgroundInfo?.accentColor , 10)\">\r\n <mat-icon [style.color]=\"backgroundInfo?.accentColor\">store</mat-icon>\r\n <span [style.color]=\"backgroundInfo?.accentColor\">Stores</span>\r\n </div>\r\n <div class=\"pin-text\" (mouseenter)=\"showPincodeInput = true;showLogin = false\" [style.color]=\"backgroundInfo?.accentColor\"\r\n *ngIf=\"!getPincode\">Enter\r\n Pincode\r\n </div>\r\n <div class=\"pin-text\" (mouseenter)=\"showPincodeInput = true;;showLogin = false\" [style.color]=\"backgroundInfo?.accentColor\"\r\n *ngIf=\"getPincode && getPincode.length == 6\">{{\"Delivering to: \" + getPincode}}</div>\r\n\r\n <!-- (mouseleave)=\"showPincodeInput = false\" -->\r\n <div class=\"pincode-container p-3\" *ngIf=\"showPincodeInput\" (mouseleave)=\"showPincodeInput = false\">\r\n <div class=\"text text-center mb-2 f-18 fw-bold\">\r\n Your PIN Code unlocks\r\n </div>\r\n <div class=\"sub-text text-center f-14 pincode-text\">\r\n Fastest delivery date, Try-at-Home availability,\r\n Nearest store and In-store design!\r\n </div>\r\n <div class=\"input-group mt-2 br-5 d-flex align-items-center justify-content-between px-3\"\r\n [class.error-border]=\"pinError\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Pincode\" aria-label=\"Pincode\" [(ngModel)]=\"pincode\"\r\n class=\"w-75 p-0\">\r\n <div class=\"input-sub-text f-11 w-25 text-end cursor-pointer\" (click)=\"setPincode()\">SUBMIT</div>\r\n </div>\r\n <div class=\"text-start mt-2 f-11\" *ngIf=\"pinError\">\r\n Please enter a valid pincode\r\n </div>\r\n </div>\r\n <div class=\"d-flex align-items-center\" style=\"gap: 5px; cursor: pointer;\" (click)=\"goToFav()\">\r\n <mat-icon [simpoColor]=\"backgroundInfo?.color\">favorite</mat-icon>\r\n </div>\r\n <div class=\"d-flex align-items-center position-relative\" style=\"gap: 5px; cursor: pointer;\" (click)=\"goToCart()\">\r\n <mat-icon [simpoColor]=\"backgroundInfo?.color\">shopping_cart</mat-icon>\r\n <div class=\"position-absolute cartItemCount\" *ngIf=\"getCartItemsCount\"\r\n [ngStyle]=\"{'background' : backgroundInfo?.accentBackgroundType == 'Solid' ? backgroundInfo?.accentColor : 'linear-gradient(to right,' + backgroundInfo?.accentColor + ' 0%' + ',' + backgroundInfo?.secondaryAccentColor +' 100%' + ')' , 'color' : setColor()}\">\r\n {{getCartItemsCount}}</div>\r\n </div>\r\n <div class=\"loginButton\" *ngIf=\"!loggedIn\" (mouseenter)=\"showLogin = true;showPincodeInput = false\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"27\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M12.12 12.78C12.05 12.77 11.96 12.77 11.88 12.78C10.12 12.72 8.71997 11.28 8.71997 9.50998C8.71997 7.69998 10.18 6.22998 12 6.22998C13.81 6.22998 15.28 7.69998 15.28 9.50998C15.27 11.28 13.88 12.72 12.12 12.78Z\"\r\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M18.74 19.38C16.96 21.01 14.6 22 12 22C9.40001 22 7.04001 21.01 5.26001 19.38C5.36001 18.44 5.96001 17.52 7.03001 16.8C9.77001 14.98 14.25 14.98 16.97 16.8C18.04 17.52 18.64 18.44 18.74 19.38Z\"\r\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z\"\r\n stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> <!-- <span class=\"fw-normal fs-6\" [simpoColor]=\"accentColor\">Login</span> -->\r\n </div>\r\n <!-- (mouseleave)=\"showLogin = false\" -->\r\n <div class=\"info-container p-3\" *ngIf=\"showLogin\" (mouseleave)=\"showLogin = false\">\r\n <div class=\"text text-center mb-2 f-18 fw-bold\">\r\n Your Account\r\n </div>\r\n <div class=\"sub-text text-center f-14\">\r\n Access account & manage your orders.\r\n </div>\r\n <div class=\"btn-container w-100 d-flex justify-content-between mt-3 gap-3\">\r\n <div (click)=\"goToAccount('SIGNUP')\" class=\"w-50 text-center sign-btn border-0\"\r\n [ngStyle]=\"{'background' : backgroundInfo?.accentBackgroundType == 'Solid' ? accentColor : 'linear-gradient(to right,' + backgroundInfo?.accentColor + ' 0%' + ',' + backgroundInfo?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"style?.background?.color\">Sign Up</div>\r\n <div (click)=\"goToAccount('LOGIN')\" class=\"w-50 text-center sign-btn\" [style.borderColor]=\"backgroundInfo?.accentColor\"\r\n [style.color]=\"backgroundInfo?.accentColor\">Log In</div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; cursor: pointer;\" (click)=\"goToAccount('PROFILE')\"\r\n *ngIf=\"loggedIn\">\r\n <img loading=\"lazy\" [src]=\"userGender | genderIcon\" style=\"height: 27px;\">\r\n </div>\r\n </div>\r\n <!-- <div> -->\r\n <!-- <button class=\"button\" (click)=\"goToAccount()\" simpoButtonDirective [id]=\"sectionId+buttonId\" [buttonStyle]=\"buttonStyle\" [color]=\"color\" [appButtonEditor]=\"edit ?? false\" [buttonData]=\"buttonContent\">{{buttonContent?.label}}</button> -->\r\n <!-- </div> -->\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #navbarLinksTemplate>\r\n <div class=\"navbar-collapse fs-6 position-relative d-flex\" style=\"margin-top: 5px; margin-left: 25px;\"\r\n [simpoColor]=\"simpoColor\" *ngIf=\"screenWidth > 768\">\r\n <ng-container *ngFor=\"let item of getNavbarButton\">\r\n <ng-container *ngIf=\"item.showHeader\">\r\n <simpo-navbar-button-element [buttonData]=\"item\" [selectedStyle]=\"style?.navigationStyle\"\r\n [buttonStyle]=\"style?.navbarButtonStyle\" [bgColor]=\"simpoColor\"\r\n [sectionId]=\"data?.id\"></simpo-navbar-button-element>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let link of getDropdownLinks; let idx = index\">\r\n <ng-container *ngIf=\"content?.ecomlinks?.[link]?.length \">\r\n <div class=\"position-relative\">\r\n <button mat-stroked-button class=\"mat-btn dropdown-toggle\" type=\"button\" [simpoColor]=\"simpoColor\" id=\"link\"\r\n data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{link | uppercase}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"link\">\r\n <a class=\"dropdown-item\" *ngFor=\"let menu of getValues(content?.ecomlinks?.[link])\"\r\n (click)=\"applyFilter(menu, link)\">{{menu}}</a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<div class=\"offcanvas offcanvas-end\" tabindex=\"-1\" id=\"offcanvasRight\" aria-labelledby=\"offcanvasRightLabel\"\r\n [ngClass]=\"{'offcanvas-end' : style?.styling === 'Header1' || style?.styling === 'Header3', 'offcanvas-start': style?.styling === 'Header2' || style?.styling === 'Header4'}\">\r\n <div class=\"offcanvas-header\">\r\n <ng-container *ngTemplateOutlet=\"mobileLogoSectionTemplate\"></ng-container>\r\n <!-- <button type=\"button\" class=\"btn-close\" aria-label=\"Close\"></button> -->\r\n <mat-icon data-bs-dismiss=\"offcanvas\">close</mat-icon>\r\n </div>\r\n <div class=\"offcanvas-body\">\r\n <div class=\"pages\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n <div class=\"offcanvas-footer\">\r\n <div class=\"canvas-button\">\r\n <ng-container *ngTemplateOutlet=\"buttonsTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #ecomProfileTemplate>\r\n <mat-icon class=\"h-100 d-flex align-items-center justify-content-center br-50 fs-16 py-1\"\r\n (click)=\"showSearchBarMobile = !showSearchBarMobile\"\r\n [ngStyle]=\"{'background' : backgroundInfo?.accentBackgroundType == 'Solid' ? backgroundInfo?.accentColor : 'linear-gradient(to right,' + backgroundInfo?.accentColor + ' 0%' + ',' + backgroundInfo?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"backgroundInfo?.color\">search</mat-icon>\r\n\r\n\r\n <input type=\"text\" class=\"form-control mob-form-control\" placeholder=\"Search Product\" aria-label=\"Search Product\"\r\n *ngIf=\"showSearchBarMobile\" [(ngModel)]=\"searchText\" (ngModelChange)=\"waitBeforeSearch()\"\r\n [ngStyle]=\"{'border' : '1px solid ' + backgroundInfo?.accentColor}\">\r\n\r\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; cursor: pointer;\" (click)=\"goToAccount('PROFILE')\"\r\n *ngIf=\"loggedIn\">\r\n <img loading=\"lazy\" [src]=\"userGender | genderIcon\" style=\"height: 27px;\">\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #mobileLogoSectionTemplate>\r\n <div class=\"d-flex gap-3 align-center cursor-pointer h-100\"\r\n *ngIf=\"!content?.logo?.isImage || !content?.logo?.image?.url\" (click)=\"!edit ? goToHome() : ''\">\r\n <div *ngIf=\"content?.logo?.text?.isIcon && content?.logo?.text?.url\" class=\"h-100\">\r\n <img loading=\"lazy\" [src]=\"content?.logo?.text?.url\" alt=\"logo\" class=\"h-100\">\r\n </div>\r\n <div class=\"heading-small\" *ngIf=\"content?.logo?.text?.isText\" [simpoColor]=\"simpoColor\">\r\n <b [ngStyle]=\"{'font-family': content?.logo?.text?.fontFamily}\">{{content?.siteName?.value}}</b>\r\n </div>\r\n </div>\r\n <!-- <div class=\"d-flex gap-3 align-items-lg-center cursor-pointer\" *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"goToHome()\"> -->\r\n <img [src]=\"content?.logo?.image?.url\" alt=\"logo\" class=\"h-100\" loading=\"lazy\"\r\n *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"!edit ? goToHome() : ''\">\r\n <!-- </div> -->\r\n</ng-template>\r\n\r\n<ng-template #categoriesHeader>\r\n <div class=\"categories-header d-flex gap-3 py-2 position-relative\" *ngIf=\"categoryList?.length > 0 && !isMobile\"\r\n [spacingHorizontal]=\"stylesLayout\" [style.background]=\"data?.styles?.headline?.color\">\r\n <div class=\"category cursor-pointer\" *ngFor=\"let ele of categoryList;let i = index\"\r\n [style.--border-color]=\"data?.styles?.background?.accentColor\" [simpoColor]=\"data?.styles?.headline?.color\"\r\n (mouseenter)=\"showList = true;selectedCategory = ele;showCollections = false\">\r\n {{ele?.categoryName | titlecase}}\r\n </div>\r\n <div class=\"category cursor-pointer\" (mouseenter)=\"showCollections = true;showList = false\"\r\n *ngIf=\"collectionList?.collections?.length > 0\" [style.--border-color]=\"data?.styles?.background?.accentColor\"\r\n [simpoColor]=\"data?.styles?.headline?.color\">\r\n Collections\r\n </div>\r\n </div>\r\n <!-- (mouseleave)=\"showList = false\" -->\r\n <div *ngIf=\"showList\" class=\"list-category\" (mouseleave)=\"showList = false\">\r\n <div class=\"row w-100 h-100\">\r\n <div class=\"col-7 row\">\r\n <div class=\"col-4 h-100\" *ngIf=\"selectedCategory?.byPrice\">\r\n <div class=\"list-header mb-3\">By Price</div>\r\n <div class=\"d-flex flex-column gap-3 list-item\">\r\n <ng-container *ngFor=\"let price of Object.keys(selectedCategory?.byPrice)\">\r\n <div class=\"each-price cursor-pointer\"\r\n (click)=\"applyFilterToList(selectedCategory?.byPrice[price], 'price')\">\r\n {{price | titlecase}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-4 h-100 overflow-scroll\"\r\n *ngIf=\"selectedCategory?.byStyle && selectedCategory?.byStyle?.length > 0\">\r\n <div class=\"list-header mb-3\">By Style</div>\r\n <div class=\"d-flex flex-column gap-3 list-item\">\r\n <ng-container *ngFor=\"let collection of selectedCategory?.byStyle\">\r\n <div class=\"each-price cursor-pointer\" (click)=\"applyFilterToList(collection, 'collection')\">{{collection\r\n |\r\n titlecase}}</div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-4\" *ngIf=\"toShowInJewellery\">\r\n <div class=\"list-header mb-3\">By Metal & Stone</div>\r\n <div class=\"d-flex flex-column gap-3 list-item\">\r\n <ng-container *ngFor=\"let collection of byMetalAndStone\">\r\n <div class=\"d-flex gap-2 align-items-center\">\r\n <div style=\"width: 15px;height: 20px;\">\r\n <img [src]=\"collection.imageUrl\" alt=\"\" class=\"w-100\">\r\n </div>\r\n <div class=\"each-price cursor-pointer\">{{collection.name\r\n |\r\n titlecase}}</div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-5 h-100 row\" *ngIf=\"selectedCategory?.imageUrls?.length > 0\">\r\n <ng-container *ngFor=\"let image of selectedCategory?.imageUrls | slice:0:2; let i = index\">\r\n <div class=\"image-container h-100 col-6\" *ngIf=\"image\">\r\n <img loading=\"lazy\" [src]=\"image\" class=\"h-100 w-100\" (click)=\"filterByCategory()\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- (mouseleave)=\"showCollections = false\" -->\r\n <div class=\"list-category\" *ngIf=\"showCollections\" (mouseleave)=\"showCollections = false\">\r\n <div class=\"row w-100 h-100\">\r\n <div class=\"col-7 row\">\r\n <ng-container *ngFor=\"let collection of collectionList?.collections\">\r\n <div class=\"collection row col-3 align-items-center\"\r\n (click)=\"applyFilterToList(collection?.collectionName, 'collections')\">\r\n <div class=\"col-imag col-4\">\r\n <img [src]=\"collection?.imgUrl[0]\" alt=\"\" class=\"w-100\">\r\n </div>\r\n <div class=\"col-8 text-overflow\">\r\n {{collection?.collectionName | titlecase}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-5 h-100 row\" *ngIf=\"collectionList?.imageUrls\">\r\n <ng-container *ngFor=\"let image of Object.keys(collectionList?.imageUrls) | slice:0:2; let i = index\">\r\n <div class=\"image-container h-100 col-6 position-relative\" *ngIf=\"image\"\r\n (click)=\"applyFilterToList(image, 'collections')\">\r\n <img loading=\"lazy\" [src]=\"collectionList?.imageUrls[image]\" class=\"h-100 w-100\">\r\n <div class=\"text-center p-2 btm-col-name position-absolute\"\r\n [style.background]=\"data?.styles?.background?.accentColor\" [style.color]=\"setColor()\">{{image}}</div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #mobileCategoryHeader>\r\n <div class=\"categories-header d-flex gap-3 py-2 overflow-auto\" *ngIf=\"categoryList?.length > 0 && isMobile\"\r\n [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"category cursor-pointer d-flex flex-column gap-3\" *ngFor=\"let ele of categoryList;let i = index\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"selectedCategory = ele; filterByCategory()\">\r\n <div class=\"cat-img d-flex justify-content-center align-items-center\">\r\n <img [src]=\"ele?.imageUrls[0]\" alt=\"\" class=\"h-10 br-12\">\r\n </div>\r\n <div class=\"text-center f-14\">{{ele?.categoryName | titlecase}}</div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".header--scrolled{position:fixed!important;top:10px;left:50%;transform:translate(-50%);width:80%!important;border-radius:50px;box-shadow:0 3px 10px #00000026;z-index:1000001;transition:width .2s ease-in-out}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.total-container{transition:width .2s ease-in-out}.categories-header{height:44px;gap:26px!important}.categories-header .category{display:flex;align-items:center;font-weight:400;font-size:1rem}.margin-bottom{margin-bottom:var(--margin-top)}@media only screen and (max-width : 475px){.left-logo-text{padding-top:10px}.mob-form-control{position:absolute;right:10px;width:95%;top:85px;border-radius:12px!important}.categories-header{height:unset!important;margin-top:var(--margin-top)}.w-98{width:98%}.paddingEcom{padding-top:5px!important;padding-bottom:5px!important}.right-btn{width:15%!important}.cartItemCount{top:-8px!important;right:-3px!important}.adjustePadding{padding:8px!important}.pageLinks{gap:15px;flex-direction:column!important}.category-btn{color:#000!important;justify-content:left}}.nav-link{text-decoration:none}.cartItemCount{padding:5px;border-radius:5px;color:#fff;top:15px;left:15px;height:15px;width:15px;display:flex;align-items:center;justify-content:center;font-size:9px}#navbarNavAltMarkup{position:fixed;top:0;width:100%;background-color:#0e3f58;height:calc(100vh + -0px);z-index:101}.dropdown-toggle{border-bottom:2px solid transparent;transition:border .5s ease;position:relative;top:-1px}.dropdown-toggle:hover{border-bottom:2px solid rgb(14,63,88)}.inner-height,.nab-bar-mobile{height:100%}.total-container{height:auto;position:relative;background-color:transparent!important}.menu-icon{display:flex;flex-direction:column;gap:0px;align-items:center;justify-content:space-evenly;max-width:55px}.menu-icon hr{border:1px solid;margin:0;width:100%}.pt-0{padding-top:0!important}.pb-0{padding-bottom:0!important}.button{font-size:14px!important;padding:1rem 2rem;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important}.stores{border:1px solid;border-radius:12px;cursor:pointer;font-weight:600}.input-group{position:relative;outline:none;height:40px;display:flex;align-items:center;background-color:transparent;margin-right:25px;-webkit-transition:width .4s ease-in-out;transition:width .4s ease-in-out;border-radius:12px}.input-group mat-icon{width:6%;display:flex;align-items:center;justify-content:center;font-size:22px;position:relative;border-radius:0 12px 12px 0}.input-group input{height:100%!important;width:80%;background-color:transparent;border:none;outline:none;font-size:14px;padding-bottom:6px;box-shadow:none}.mat-icon{color:#000}.dropdown-button{font-size:14px!important;width:fit-content!important}.mobile-footer{display:none}@media screen and (max-width: 475px){.mobile-footer{width:100vw;height:60px;box-shadow:#64646f33 -2px -16px 29px;position:fixed;bottom:0;z-index:10001;display:flex!important;justify-content:space-around;align-items:center}.mobile-footer .icons{margin-top:5px;display:flex;align-items:center;justify-content:center;flex-direction:column}.mobile-footer .mat-icon{font-size:22px}}.nab-bar-mobile{width:100%;padding:5px 10px;height:50px;box-sizing:border-box}.title-row{flex:1;display:flex;align-items:center}.navbar-content{background-color:#0e3f58;padding:10px;margin-top:0!important}.navbar-content .d-flex{margin-top:20px}.navbar-toggler,.close-box{background:transparent;border:none;cursor:pointer;margin-left:10px;width:50px!important}.mat-icon{color:#fff}.button-display{display:flex;gap:8px}.flex-column{flex-direction:column}.justify-space-around{justify-content:space-around}@media screen and (max-width: 475px){.nab-bar-mobile{height:60px}}.cursor-pointer{cursor:pointer}.search-icon{margin-right:20px;display:flex;align-items:center;cursor:pointer}.search-icon mat-icon{font-size:24px}.mat-btn{font-size:14px!important;background:none;display:flex;cursor:pointer;border:none}.mat-btn mat-icon{color:inherit}.dropdown-menu{right:0;left:auto}.header1{display:flex;justify-content:space-between;align-items:center}.gap-15{gap:15px}.gap-10{gap:10px}.ptb-1{padding-top:1rem;padding-bottom:1rem}.text-end{text-align:end}.loginButton{gap:5px;display:flex;align-items:center;color:#fff;border-radius:8px;cursor:pointer;width:40px}.loginButton span{font-weight:600!important}.align-center{align-items:center}.offcanvas{width:70%;z-index:1000000000}.offcanvas mat-icon{color:#000}.offcanvas-body{position:relative}.canvas-button{position:absolute;bottom:20px;left:12px;width:90%}.mobileLoginButton{width:100%;height:40px;border-radius:8px;margin-top:15px;outline:none;background:transparent}.pageLinks{display:flex;flex-direction:row}.category-btn{font-size:16px!important}.h-70{height:70px}.offcanvas-header{height:10vh}.offcanvas-body{height:70vh}.offcanvas-body .pages{height:80%;overflow:scroll}.offcanvas-footer{height:20vh}.h-100{height:100%!important}.box-shadow{box-shadow:-9px 5px 3px #99999929}.sticky-header{position:sticky;top:0;z-index:10000}.mobile-page-list{position:relative;left:10px}.category{position:relative}.category:hover{border-bottom:3px solid var(--border-color);transition:border-bottom .1s ease-in-out}.list-category{padding:15px 30px;color:#000;background-color:#fff!important;height:50vh;position:absolute;width:100%}.list-header{margin-bottom:1rem;font-size:16px;font-weight:600}.list-item{gap:1rem;font-size:14px}.background-position{background-position:center top!important}.image-container{cursor:pointer}.image-container img{border-radius:12px}.each-price:hover{font-weight:700}.col-imag img{border-radius:8px}.btm-col-name{width:93%;border-radius:0 0 12px 12px;bottom:0}.collection{height:max-content;cursor:pointer}.text-overflow{overflow:hidden;text-overflow:ellipsis;font-size:14px;font-weight:500}.col-5{width:44.666667%}.h-10{height:10vh}.fs-16{font-size:16px}.br-50{border-radius:50%}.col-7{width:56.333333%}.pincode-container{position:absolute;background:#fff;color:#000;height:max-content;width:20vw;right:3%;top:130%;z-index:10;border-radius:0 0 30px 30px;transform-origin:top;box-shadow:0 2px 4px #c8c8c880;animation:unrollCarpet .5s ease-out forwards}.form-control{border-radius:12px 0 0 12px}.pin-text{font-size:14px;font-weight:500;white-space:nowrap}.error-border{border:2px solid #e53e3e!important}.f-11{font-size:11px}.br-5{border:1px solid rgba(0,0,0,.05)}.f-18{font-size:18px}.f-14{font-size:14px}.info-container{position:absolute;background:#fff;color:#000;height:max-content;width:20vw;right:-15px;top:130%;z-index:10;border-radius:0 0 30px 30px;transform-origin:top;box-shadow:0 2px 4px #c8c8c880;animation:unrollCarpet .5s ease-out forwards}.sign-btn{padding:10px;border-radius:12px;border:1px solid;cursor:pointer}.b-1{border:1px solid;border-radius:12px}@keyframes unrollCarpet{0%{transform:scaleY(0) rotateX(90deg);opacity:0}25%{transform:scaleY(.25) rotateX(67.5deg);opacity:.35}50%{transform:scaleY(.5) rotateX(45deg);opacity:.7}75%{transform:scaleY(.75) rotateX(22.5deg);opacity:.85}to{transform:scaleY(1) rotateX(0);opacity:1}}.pincode-text{font-size:11px;margin-bottom:15px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i6.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i6.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i6.SlicePipe, name: "slice" }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }, { kind: "component", type: SimpoButtonComponent, selector: "app-button-element", inputs: ["buttonContent", "buttonStyle", "buttonId", "color", "sectionId", "edit", "backgroundInfo"] }, { kind: "pipe", type: GenderIcon, name: "genderIcon" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: NavbarButtonElementComponent, selector: "simpo-navbar-button-element", inputs: ["buttonData", "buttonStyle", "selectedStyle", "bgColor", "sectionId", "accentColor"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: SimpoStickyDirective, selector: "[simpoSticky]", inputs: ["simpoSticky", "categoryHeader"] }, { kind: "directive", type: ColorDirective, selector: "[simpoColor]", inputs: ["simpoColor"] }, { kind: "ngmodule", type: MatBottomSheetModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "component", type: MovingTextComponent, selector: "simpo-moving-text", inputs: ["data", "edit", "delete", "customClass", "index"] }] }); }
|
355
354
|
}
|
356
355
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderSectionComponent, decorators: [{
|
357
356
|
type: Component,
|
@@ -389,8 +388,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
389
388
|
SpacingHorizontalDirective,
|
390
389
|
MovingTextComponent,
|
391
390
|
ContentFitDirective,
|
392
|
-
], template: "<section [id]=\"data?.id\" class=\"total-container w-100\">\r\n <div class=\"w-100\" [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [ngClass]=\"{'box-shadow': isEcommerceWebsite}\"\r\n [class.margin-bottom]=\"isHeaderSticky && isEcommerceWebsite && (!categoryList || !showCategoryMobileHeader()) && isMobile\">\r\n <!-- [scrollValue]=\"isComponentMerged ? scrollValue : 0\" -->\r\n <div [simpoSticky]=\"isHeaderSticky\" [simpoBackground]=\"backgroundInfo\" class=\"w-100\" #childContainer\r\n [categoryHeader]=\"isEcommerceWebsite && categoryList?.length > 0 && !isMobile\" simpoHover\r\n (hovering)=\"showEditTabs($event)\" [id]=\"data?.id\">\r\n <ng-container *ngIf=\"style?.headline?.display\">\r\n <div>\r\n <simpo-moving-text [edit]=\"false\" [delete]=\"false\" [data]=\"data\"></simpo-moving-text>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"style?.styling === 'Header1'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header1Template\"></ng-container>\r\n </div>\r\n <div *ngIf=\"style?.styling === 'Header2'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header2Template\"></ng-container>\r\n </div>\r\n <div *ngIf=\"style?.styling === 'Header3'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header3Template\"></ng-container>\r\n </div>\r\n <div *ngIf=\"style?.styling === 'Header4'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header4Template\"></ng-container>\r\n </div>\r\n <!-- <div class=\"input-group mx-2 mb-2 w-98\" *ngIf=\"isMobile && isEcommerceWebsite\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search Product\" aria-label=\"Search Product\"\r\n [(ngModel)]=\"searchText\" (ngModelChange)=\"waitBeforeSearch()\"\r\n [ngStyle]=\"{'border' : '1px solid ' + accentColor}\">\r\n <mat-icon class=\"h-100\"\r\n [ngStyle]=\"{'background' : style?.background?.accentBackgroundType == 'Solid' ? accentColor : 'linear-gradient(to right,' + style?.background?.accentColor + ' 0%' + ',' + style?.background?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"style?.background?.color\">search</mat-icon>\r\n </div> -->\r\n <ng-container *ngIf=\"isEcommerceWebsite && !isMobile\">\r\n <ng-container *ngTemplateOutlet=\"categoriesHeader\"></ng-container>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"isEcommerceWebsite && isMobile && showCategoryMobileHeader()\">\r\n <ng-container *ngTemplateOutlet=\"mobileCategoryHeader\"></ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngIf=\"isEcommerceWebsite && isMobile\">\r\n <ng-container *ngTemplateOutlet=\"mobileFooterTemplate\"></ng-container>\r\n </ng-container>\r\n</section>\r\n\r\n<ng-template #header1Template>\r\n <div class=\"header1\">\r\n <div>\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n <div class=\"d-flex gap-15 align-center\" *ngIf=\"!isMobile\" [style.width.%]=\"isEcommerceWebsite ? 95 : ''\">\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n </div>\r\n <div class=\"d-flex gap-15 align-center\" *ngIf=\"isMobile\">\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n <mat-icon [simpoColor]=\"simpoColor\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\">menu</mat-icon>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #header2Template>\r\n <div class=\"header1\">\r\n <div class=\"d-flex gap-15 align-center\" *ngIf=\"!isMobile\" [style.width.%]=\"isEcommerceWebsite ? 93 : ''\">\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container>\r\n </div>\r\n <div class=\"d-flex gap-15 align-center\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\" *ngIf=\"isMobile\">\r\n <mat-icon [simpoColor]=\"simpoColor\">menu</mat-icon>\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n </div>\r\n <div class=\"text-end\">\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #header3Template>\r\n <div class=\"header1\">\r\n <div>\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n <ng-container *ngIf=\"!isMobile\">\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n </ng-container>\r\n <div class=\"d-flex gap-15 align-center\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\" *ngIf=\"isMobile\">\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n <mat-icon [simpoColor]=\"simpoColor\">menu</mat-icon>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #header4Template>\r\n <div class=\"header1\">\r\n <ng-container *ngIf=\"!isMobile\">\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container> </ng-container>\r\n <div class=\"d-flex gap-15 align-center\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\" *ngIf=\"isMobile\">\r\n <mat-icon [simpoColor]=\"simpoColor\">menu</mat-icon>\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n </div>\r\n <div class=\"text-end\">\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #logoSectionTemplate>\r\n <div class=\"d-flex gap-3 align-center cursor-pointer\" *ngIf=\"!content?.logo?.isImage || !content?.logo?.image?.url\"\r\n (click)=\"!edit ? goToHome() : ''\">\r\n <div *ngIf=\"content?.logo?.text?.isIcon && content?.logo?.text?.url\">\r\n <img loading=\"lazy\" [src]=\"content?.logo?.text?.url\" alt=\"logo\" [width]=\"content?.logo?.size\" loading=\"lazy\">\r\n </div>\r\n <div class=\"heading-small\" *ngIf=\"content?.logo?.text?.isText\" [simpoColor]=\"simpoColor\">\r\n <b [ngStyle]=\"{'font-family': content?.logo?.text?.fontFamily}\">{{content?.siteName?.value}}</b>\r\n </div>\r\n </div>\r\n <!-- <div class=\"d-flex gap-3 align-items-lg-center cursor-pointer\" *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"goToHome()\"> -->\r\n <img loading=\"lazy\" [src]=\"content?.logo?.image?.url\" alt=\"logo\"\r\n [style.width.%]=\"screenWidth > 475 || (content?.logo?.size || 10) < 50 ? content?.logo?.size : ((content?.logo?.size || 10) - 10)\"\r\n loading=\"lazy\" *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"!edit ? goToHome() : ''\">\r\n <!-- </div> -->\r\n</ng-template>\r\n\r\n<ng-template #pageLinksTemplate>\r\n <div class=\"navbar-nav pageLinks\" [ngClass]=\"{'align-items-center' : !isMobile}\">\r\n <div class=\"d-flex gap-3\"\r\n [ngClass]=\"{'flex-column': isMobile, 'align-items-center' : !isMobile, 'mobile-page-list': isMobile}\">\r\n <ng-container *ngFor=\"let item of getNavbarButton\">\r\n <ng-container *ngIf=\"item.showHeader\">\r\n <simpo-navbar-button-element [buttonData]=\"item\" [selectedStyle]=\"style?.navigationStyle\"\r\n [buttonStyle]=\"style?.navbarButtonStyle\" [bgColor]=\"simpoColor\" [accentColor]=\"accentColor\"\r\n [sectionId]=\"data?.id\"></simpo-navbar-button-element>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngFor=\"let link of getDropdownLinks; let idx = index\">\r\n <ng-container *ngIf=\"content?.ecomlinks?.[link]?.length \">\r\n <div class=\"position-relative\">\r\n <button mat-stroked-button class=\"mat-btn dropdown-toggle category-btn\" type=\"button\"\r\n [simpoColor]=\"simpoColor\" id=\"link\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{link | lowercase | titlecase}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"link\">\r\n <a class=\"dropdown-item\" *ngFor=\"let menu of getValues(content?.ecomlinks?.[link])\"\r\n (click)=\"applyFilter(menu, link)\">{{menu}}</a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n\r\n</ng-template>\r\n\r\n<ng-template #buttonsTemplate>\r\n <div class=\"d-flex\">\r\n <div *ngIf=\"action?.display\" class=\"button-display mt-0\" [ngClass]=\"{'w-100 justify-space-around': isMobile}\">\r\n <div *ngFor=\"let button of action?.buttons\">\r\n <app-button-element [buttonContent]=\"button.content\" [buttonStyle]=\"button.styles\" [sectionId]=\"data?.id\"\r\n [edit]=\"edit\" [color]=\"data?.styles?.background?.accentColor\" [buttonId]=\"button.id\"\r\n [backgroundInfo]=\"data?.styles?.background\"></app-button-element>\r\n </div>\r\n <div class=\"static_login_btn d-flex justify-content-between align-items-center cursor-pointer\">\r\n Login\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"27\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M12.12 12.78C12.05 12.77 11.96 12.77 11.88 12.78C10.12 12.72 8.71997 11.28 8.71997 9.50998C8.71997 7.69998 10.18 6.22998 12 6.22998C13.81 6.22998 15.28 7.69998 15.28 9.50998C15.27 11.28 13.88 12.72 12.12 12.78Z\"\r\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M18.74 19.38C16.96 21.01 14.6 22 12 22C9.40001 22 7.04001 21.01 5.26001 19.38C5.36001 18.44 5.96001 17.52 7.03001 16.8C9.77001 14.98 14.25 14.98 16.97 16.8C18.04 17.52 18.64 18.44 18.74 19.38Z\"\r\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z\"\r\n stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <button class=\"mobileLoginButton\" *ngIf=\"isEcommerceWebsite && isMobile && !loggedIn\"\r\n [style.border]=\"'1px solid' + accentColor\" [style.color]=\"accentColor\" (click)=\"goToAccount('LOGIN')\">Login</button>\r\n</ng-template>\r\n\r\n<ng-template #mobileFooterTemplate>\r\n <div class=\"mobile-footer\" [simpoBackground]=\"backgroundInfo\">\r\n <div class=\"icons\" (click)=\"goToHome()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">home</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Home</span>\r\n </div>\r\n <div class=\"icons\" (click)=\"searchProducts()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">grid_on</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Shop</span>\r\n </div>\r\n <div class=\"icons\" (click)=\"goToWishlist()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">favorite_border</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Wishlist</span>\r\n </div>\r\n <div class=\"icons position-relative\" (click)=\"goToCart()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">shopping_cart</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Cart</span>\r\n <div class=\"position-absolute cartItemCount\" *ngIf=\"getCartItemsCount\">{{getCartItemsCount}}</div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #ecommerceButtonsTemplate>\r\n <div class=\"justify-content-between pr-0 d-flex position-relative gap-10 w-100\"\r\n [style.flexDirection]=\"style?.styling === 'Header2' || style?.styling === 'Header4' ? 'row-reverse' : ''\">\r\n <!-- <div class=\"search-icon\" (click)=\"showSearchBar = !showSearchBar\">\r\n <mat-icon [style.color]=\"accentColor\">search</mat-icon>\r\n </div> -->\r\n <div class=\"w-75 d-flex align-items-center\">\r\n <div class=\"input-group w-75 ml-2\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search Product\" aria-label=\"Search Product\"\r\n [(ngModel)]=\"searchText\" (ngModelChange)=\"waitBeforeSearch()\"\r\n [ngStyle]=\"{'border' : '1px solid ' + accentColor}\" [style.color]=\"accentColor\">\r\n <mat-icon class=\"h-100\"\r\n [ngStyle]=\"{'background' : style?.background?.accentBackgroundType == 'Solid' ? accentColor : 'linear-gradient(to right,' + style?.background?.accentColor + ' 0%' + ',' + style?.background?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"style?.background?.color\">search</mat-icon>\r\n </div>\r\n <div class=\"d-flex gap-3 align-items-center py-1 px-3 b-1 stores\" [style.borderColor]=\"accentColor\"\r\n (click)=\"goToSchemes()\" [style.background]=\"getRGBA(accentColor , 10)\" *ngIf=\"schemeAvailable\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n xmlns:svgjs=\"http://svgjs.dev/svgjs\" id=\"Layer_2\" viewBox=\"0 0 60 60\" data-name=\"Layer 2\" width=\"30\"\r\n height=\"30\" version=\"1.1\">\r\n <g width=\"100%\" height=\"100%\" transform=\"matrix(1,0,0,1,0,0)\">\r\n <path d=\"m14.36 46.66.51-9.86-11.93-7.16-1.94 8.43z\" [attr.fill]=\"accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path\r\n d=\"m17.17 38.1s0-.02.02-.03c0 0 0-.02.02-.02.04-.05.1-.08.15-.11.02-.01.03-.03.05-.04l4.66-1.94h-.02s-1.87-1.21-1.87-1.21l-3.18 1.57-1.07.53-.43 8.32 1.58-6.9c.01-.06.05-.12.09-.17z\"\r\n [attr.fill]=\"accentColor\" fill-opacity=\"1\" data-original-color=\"#000000ff\" stroke=\"none\"\r\n stroke-opacity=\"1\" />\r\n <path d=\"m19.14 34.08-6.27-4.04c-.19-.12-.28-.34-.23-.56l1.08-4.72-9.96 4.14 11.68 7.01z\"\r\n [attr.fill]=\"accentColor\" fill-opacity=\"1\" data-original-color=\"#000000ff\" stroke=\"none\"\r\n stroke-opacity=\"1\" />\r\n <path d=\"m30.93 46.42-.5 9.79 32.57-18.67-1.21-6.4-23.16 11.46z\" [attr.fill]=\"accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path d=\"m16 47.65 13.38 8.58.49-9.86-11.93-7.17z\" [attr.fill]=\"accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path\r\n d=\"m27.85 39.34s0 0-.01 0c0 0 0 0-.01 0-.08.04-.16.06-.24.06-.05 0-.1-.03-.15-.04-.04-.01-.08-.01-.11-.03l-4.16-2.67-4.37 1.82 11.68 7.01 30.4-15.05-10.71-3.88-22.28 12.78z\"\r\n [attr.fill]=\"accentColor\" fill-opacity=\"1\" data-original-color=\"#000000ff\" stroke=\"none\"\r\n stroke-opacity=\"1\" />\r\n <path d=\"m28.26 36.01-.1 1.93 32.58-18.69-1.22-6.39-30.86 15.28z\" [attr.fill]=\"accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path d=\"m27.61 28.09-11.93-7.16-1.94 8.43 13.36 8.58z\" [attr.fill]=\"accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path d=\"m58.57 12.15-12.1-4.38-29.97 12.43 11.68 7z\" [attr.fill]=\"accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n </g>\r\n </svg>\r\n <div [style.color]=\"accentColor\">Schemes</div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex gap-3 align-items-center\">\r\n <div class=\"stores d-flex align-items-center gap-2 py-2 px-3\" (click)=\"goToStores()\"\r\n [style.borderColor]=\"accentColor\" *ngIf=\"storeAvaiable\" [style.background]=\"getRGBA(accentColor , 10)\">\r\n <mat-icon [style.color]=\"accentColor\">store</mat-icon>\r\n <span [style.color]=\"accentColor\">Stores</span>\r\n </div>\r\n <div class=\"pin-text\" (mouseenter)=\"showPincodeInput = true;showLogin = false\" [style.color]=\"accentColor\"\r\n *ngIf=\"!getPincode\">Enter\r\n Pincode\r\n </div>\r\n <div class=\"pin-text\" (mouseenter)=\"showPincodeInput = true;;showLogin = false\" [style.color]=\"accentColor\"\r\n *ngIf=\"getPincode && getPincode.length == 6\">{{\"Delivering to: \" + getPincode}}</div>\r\n\r\n <!-- (mouseleave)=\"showPincodeInput = false\" -->\r\n <div class=\"pincode-container p-3\" *ngIf=\"showPincodeInput\" (mouseleave)=\"showPincodeInput = false\">\r\n <div class=\"text text-center mb-2 f-18 fw-bold\">\r\n Your PIN Code unlocks\r\n </div>\r\n <div class=\"sub-text text-center f-14 pincode-text\">\r\n Fastest delivery date, Try-at-Home availability,\r\n Nearest store and In-store design!\r\n </div>\r\n <div class=\"input-group mt-2 br-5 d-flex align-items-center justify-content-between px-3\"\r\n [class.error-border]=\"pinError\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Pincode\" aria-label=\"Pincode\" [(ngModel)]=\"pincode\"\r\n class=\"w-75 p-0\">\r\n <div class=\"input-sub-text f-11 w-25 text-end cursor-pointer\" (click)=\"setPincode()\">SUBMIT</div>\r\n </div>\r\n <div class=\"text-start mt-2 f-11\" *ngIf=\"pinError\">\r\n Please enter a valid pincode\r\n </div>\r\n </div>\r\n <div class=\"d-flex align-items-center\" style=\"gap: 5px; cursor: pointer;\" (click)=\"goToFav()\">\r\n <mat-icon [simpoColor]=\"style?.background?.color\">favorite</mat-icon>\r\n </div>\r\n <div class=\"d-flex align-items-center position-relative\" style=\"gap: 5px; cursor: pointer;\" (click)=\"goToCart()\">\r\n <mat-icon [simpoColor]=\"style?.background?.color\">shopping_cart</mat-icon>\r\n <div class=\"position-absolute cartItemCount\" *ngIf=\"getCartItemsCount\"\r\n [ngStyle]=\"{'background' : style?.background?.accentBackgroundType == 'Solid' ? accentColor : 'linear-gradient(to right,' + style?.background?.accentColor + ' 0%' + ',' + style?.background?.secondaryAccentColor +' 100%' + ')' , 'color' : setColor()}\">\r\n {{getCartItemsCount}}</div>\r\n </div>\r\n <div class=\"loginButton\" *ngIf=\"!loggedIn\" (mouseenter)=\"showLogin = true;showPincodeInput = false\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"27\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M12.12 12.78C12.05 12.77 11.96 12.77 11.88 12.78C10.12 12.72 8.71997 11.28 8.71997 9.50998C8.71997 7.69998 10.18 6.22998 12 6.22998C13.81 6.22998 15.28 7.69998 15.28 9.50998C15.27 11.28 13.88 12.72 12.12 12.78Z\"\r\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M18.74 19.38C16.96 21.01 14.6 22 12 22C9.40001 22 7.04001 21.01 5.26001 19.38C5.36001 18.44 5.96001 17.52 7.03001 16.8C9.77001 14.98 14.25 14.98 16.97 16.8C18.04 17.52 18.64 18.44 18.74 19.38Z\"\r\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z\"\r\n stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> <!-- <span class=\"fw-normal fs-6\" [simpoColor]=\"accentColor\">Login</span> -->\r\n </div>\r\n <!-- (mouseleave)=\"showLogin = false\" -->\r\n <div class=\"info-container p-3\" *ngIf=\"showLogin\" (mouseleave)=\"showLogin = false\">\r\n <div class=\"text text-center mb-2 f-18 fw-bold\">\r\n Your Account\r\n </div>\r\n <div class=\"sub-text text-center f-14\">\r\n Access account & manage your orders.\r\n </div>\r\n <div class=\"btn-container w-100 d-flex justify-content-between mt-3 gap-3\">\r\n <div (click)=\"goToAccount('SIGNUP')\" class=\"w-50 text-center sign-btn border-0\"\r\n [ngStyle]=\"{'background' : style?.background?.accentBackgroundType == 'Solid' ? accentColor : 'linear-gradient(to right,' + style?.background?.accentColor + ' 0%' + ',' + style?.background?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"style?.background?.color\">Sign Up</div>\r\n <div (click)=\"goToAccount('LOGIN')\" class=\"w-50 text-center sign-btn\" [style.borderColor]=\"accentColor\"\r\n [style.color]=\"accentColor\">Log In</div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; cursor: pointer;\" (click)=\"goToAccount('PROFILE')\"\r\n *ngIf=\"loggedIn\">\r\n <img loading=\"lazy\" [src]=\"userGender | genderIcon\" style=\"height: 27px;\">\r\n </div>\r\n </div>\r\n <!-- <div> -->\r\n <!-- <button class=\"button\" (click)=\"goToAccount()\" simpoButtonDirective [id]=\"sectionId+buttonId\" [buttonStyle]=\"buttonStyle\" [color]=\"color\" [appButtonEditor]=\"edit ?? false\" [buttonData]=\"buttonContent\">{{buttonContent?.label}}</button> -->\r\n <!-- </div> -->\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #navbarLinksTemplate>\r\n <div class=\"navbar-collapse fs-6 position-relative d-flex\" style=\"margin-top: 5px; margin-left: 25px;\"\r\n [simpoColor]=\"simpoColor\" *ngIf=\"screenWidth > 768\">\r\n <ng-container *ngFor=\"let item of getNavbarButton\">\r\n <ng-container *ngIf=\"item.showHeader\">\r\n <simpo-navbar-button-element [buttonData]=\"item\" [selectedStyle]=\"style?.navigationStyle\"\r\n [buttonStyle]=\"style?.navbarButtonStyle\" [bgColor]=\"simpoColor\"\r\n [sectionId]=\"data?.id\"></simpo-navbar-button-element>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let link of getDropdownLinks; let idx = index\">\r\n <ng-container *ngIf=\"content?.ecomlinks?.[link]?.length \">\r\n <div class=\"position-relative\">\r\n <button mat-stroked-button class=\"mat-btn dropdown-toggle\" type=\"button\" [simpoColor]=\"simpoColor\" id=\"link\"\r\n data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{link | uppercase}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"link\">\r\n <a class=\"dropdown-item\" *ngFor=\"let menu of getValues(content?.ecomlinks?.[link])\"\r\n (click)=\"applyFilter(menu, link)\">{{menu}}</a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<div class=\"offcanvas offcanvas-end\" tabindex=\"-1\" id=\"offcanvasRight\" aria-labelledby=\"offcanvasRightLabel\"\r\n [ngClass]=\"{'offcanvas-end' : style?.styling === 'Header1' || style?.styling === 'Header3', 'offcanvas-start': style?.styling === 'Header2' || style?.styling === 'Header4'}\">\r\n <div class=\"offcanvas-header\">\r\n <ng-container *ngTemplateOutlet=\"mobileLogoSectionTemplate\"></ng-container>\r\n <!-- <button type=\"button\" class=\"btn-close\" aria-label=\"Close\"></button> -->\r\n <mat-icon data-bs-dismiss=\"offcanvas\">close</mat-icon>\r\n </div>\r\n <div class=\"offcanvas-body\">\r\n <div class=\"pages\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n <div class=\"offcanvas-footer\">\r\n <div class=\"canvas-button\">\r\n <ng-container *ngTemplateOutlet=\"buttonsTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #ecomProfileTemplate>\r\n <mat-icon class=\"h-100 d-flex align-items-center justify-content-center br-50 fs-16 py-1\"\r\n (click)=\"showSearchBarMobile = !showSearchBarMobile\"\r\n [ngStyle]=\"{'background' : style?.background?.accentBackgroundType == 'Solid' ? accentColor : 'linear-gradient(to right,' + style?.background?.accentColor + ' 0%' + ',' + style?.background?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"style?.background?.color\">search</mat-icon>\r\n\r\n\r\n <input type=\"text\" class=\"form-control mob-form-control\" placeholder=\"Search Product\" aria-label=\"Search Product\"\r\n *ngIf=\"showSearchBarMobile\" [(ngModel)]=\"searchText\" (ngModelChange)=\"waitBeforeSearch()\"\r\n [ngStyle]=\"{'border' : '1px solid ' + accentColor}\">\r\n\r\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; cursor: pointer;\" (click)=\"goToAccount('PROFILE')\"\r\n *ngIf=\"loggedIn\">\r\n <img loading=\"lazy\" [src]=\"userGender | genderIcon\" style=\"height: 27px;\">\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #mobileLogoSectionTemplate>\r\n <div class=\"d-flex gap-3 align-center cursor-pointer h-100\"\r\n *ngIf=\"!content?.logo?.isImage || !content?.logo?.image?.url\" (click)=\"!edit ? goToHome() : ''\">\r\n <div *ngIf=\"content?.logo?.text?.isIcon && content?.logo?.text?.url\" class=\"h-100\">\r\n <img loading=\"lazy\" [src]=\"content?.logo?.text?.url\" alt=\"logo\" class=\"h-100\">\r\n </div>\r\n <div class=\"heading-small\" *ngIf=\"content?.logo?.text?.isText\" [simpoColor]=\"simpoColor\">\r\n <b [ngStyle]=\"{'font-family': content?.logo?.text?.fontFamily}\">{{content?.siteName?.value}}</b>\r\n </div>\r\n </div>\r\n <!-- <div class=\"d-flex gap-3 align-items-lg-center cursor-pointer\" *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"goToHome()\"> -->\r\n <img [src]=\"content?.logo?.image?.url\" alt=\"logo\" class=\"h-100\" loading=\"lazy\"\r\n *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"!edit ? goToHome() : ''\">\r\n <!-- </div> -->\r\n</ng-template>\r\n\r\n<ng-template #categoriesHeader>\r\n <div class=\"categories-header d-flex gap-3 py-2 position-relative\" *ngIf=\"categoryList?.length > 0 && !isMobile\"\r\n [spacingHorizontal]=\"stylesLayout\" [style.background]=\"data?.styles?.headline?.color\">\r\n <div class=\"category cursor-pointer\" *ngFor=\"let ele of categoryList;let i = index\"\r\n [style.--border-color]=\"data?.styles?.background?.accentColor\" [simpoColor]=\"data?.styles?.headline?.color\"\r\n (mouseenter)=\"showList = true;selectedCategory = ele;showCollections = false\">\r\n {{ele?.categoryName | titlecase}}\r\n </div>\r\n <div class=\"category cursor-pointer\" (mouseenter)=\"showCollections = true;showList = false\"\r\n *ngIf=\"collectionList?.collections?.length > 0\" [style.--border-color]=\"data?.styles?.background?.accentColor\"\r\n [simpoColor]=\"data?.styles?.headline?.color\">\r\n Collections\r\n </div>\r\n </div>\r\n <!-- (mouseleave)=\"showList = false\" -->\r\n <div *ngIf=\"showList\" class=\"list-category\" (mouseleave)=\"showList = false\">\r\n <div class=\"row w-100 h-100\">\r\n <div class=\"col-7 row\">\r\n <div class=\"col-4 h-100\" *ngIf=\"selectedCategory?.byPrice\">\r\n <div class=\"list-header mb-3\">By Price</div>\r\n <div class=\"d-flex flex-column gap-3 list-item\">\r\n <ng-container *ngFor=\"let price of Object.keys(selectedCategory?.byPrice)\">\r\n <div class=\"each-price cursor-pointer\"\r\n (click)=\"applyFilterToList(selectedCategory?.byPrice[price], 'price')\">\r\n {{price | titlecase}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-4 h-100 overflow-scroll\"\r\n *ngIf=\"selectedCategory?.byStyle && selectedCategory?.byStyle?.length > 0\">\r\n <div class=\"list-header mb-3\">By Style</div>\r\n <div class=\"d-flex flex-column gap-3 list-item\">\r\n <ng-container *ngFor=\"let collection of selectedCategory?.byStyle\">\r\n <div class=\"each-price cursor-pointer\" (click)=\"applyFilterToList(collection, 'collection')\">{{collection\r\n |\r\n titlecase}}</div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-4\" *ngIf=\"toShowInJewellery\">\r\n <div class=\"list-header mb-3\">By Metal & Stone</div>\r\n <div class=\"d-flex flex-column gap-3 list-item\">\r\n <ng-container *ngFor=\"let collection of byMetalAndStone\">\r\n <div class=\"d-flex gap-2 align-items-center\">\r\n <div style=\"width: 15px;height: 20px;\">\r\n <img [src]=\"collection.imageUrl\" alt=\"\" class=\"w-100\">\r\n </div>\r\n <div class=\"each-price cursor-pointer\">{{collection.name\r\n |\r\n titlecase}}</div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-5 h-100 row\" *ngIf=\"selectedCategory?.imageUrls?.length > 0\">\r\n <ng-container *ngFor=\"let image of selectedCategory?.imageUrls | slice:0:2; let i = index\">\r\n <div class=\"image-container h-100 col-6\" *ngIf=\"image\">\r\n <img loading=\"lazy\" [src]=\"image\" class=\"h-100 w-100\" (click)=\"filterByCategory()\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- (mouseleave)=\"showCollections = false\" -->\r\n <div class=\"list-category\" *ngIf=\"showCollections\" (mouseleave)=\"showCollections = false\">\r\n <div class=\"row w-100 h-100\">\r\n <div class=\"col-7 row\">\r\n <ng-container *ngFor=\"let collection of collectionList?.collections\">\r\n <div class=\"collection row col-3 align-items-center\"\r\n (click)=\"applyFilterToList(collection?.collectionName, 'collections')\">\r\n <div class=\"col-imag col-4\">\r\n <img [src]=\"collection?.imgUrl[0]\" alt=\"\" class=\"w-100\">\r\n </div>\r\n <div class=\"col-8 text-overflow\">\r\n {{collection?.collectionName | titlecase}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-5 h-100 row\" *ngIf=\"collectionList?.imageUrls\">\r\n <ng-container *ngFor=\"let image of Object.keys(collectionList?.imageUrls) | slice:0:2; let i = index\">\r\n <div class=\"image-container h-100 col-6 position-relative\" *ngIf=\"image\"\r\n (click)=\"applyFilterToList(image, 'collections')\">\r\n <img loading=\"lazy\" [src]=\"collectionList?.imageUrls[image]\" class=\"h-100 w-100\">\r\n <div class=\"text-center p-2 btm-col-name position-absolute\"\r\n [style.background]=\"data?.styles?.background?.accentColor\" [style.color]=\"setColor()\">{{image}}</div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #mobileCategoryHeader>\r\n <div class=\"categories-header d-flex gap-3 py-2 overflow-auto\" *ngIf=\"categoryList?.length > 0 && isMobile\"\r\n [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"category cursor-pointer d-flex flex-column gap-3\" *ngFor=\"let ele of categoryList;let i = index\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"selectedCategory = ele; filterByCategory()\">\r\n <div class=\"cat-img d-flex justify-content-center align-items-center\">\r\n <img [src]=\"ele?.imageUrls[0]\" alt=\"\" class=\"h-10 br-12\">\r\n </div>\r\n <div class=\"text-center f-14\">{{ele?.categoryName | titlecase}}</div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".header--scrolled{position:fixed!important;top:10px;left:50%;transform:translate(-50%);width:80%!important;border-radius:50px;box-shadow:0 3px 10px #00000026;z-index:1000001;transition:width .2s ease-in-out}*{font-family:var(--website-font-family)}.static_login_btn{padding:2%;border-radius:4px;border:2px solid lightgrey;width:7vw}mat-icon{font-family:Material Icons!important}.total-container{transition:width .2s ease-in-out}.categories-header{height:44px;gap:26px!important}.categories-header .category{display:flex;align-items:center;font-weight:400;font-size:1rem}.margin-bottom{margin-bottom:var(--margin-top)}@media only screen and (max-width : 475px){.left-logo-text{padding-top:10px}.mob-form-control{position:absolute;right:10px;width:95%;top:85px;border-radius:12px!important}.categories-header{height:unset!important;margin-top:var(--margin-top)}.w-98{width:98%}.paddingEcom{padding-top:5px!important;padding-bottom:5px!important}.right-btn{width:15%!important}.cartItemCount{top:-8px!important;right:-3px!important}.adjustePadding{padding:8px!important}.pageLinks{gap:15px;flex-direction:column!important}.category-btn{color:#000!important;justify-content:left}}.nav-link{text-decoration:none}.cartItemCount{padding:5px;border-radius:5px;color:#fff;top:15px;left:15px;height:15px;width:15px;display:flex;align-items:center;justify-content:center;font-size:9px}#navbarNavAltMarkup{position:fixed;top:0;width:100%;background-color:#0e3f58;height:calc(100vh + -0px);z-index:101}.dropdown-toggle{border-bottom:2px solid transparent;transition:border .5s ease;position:relative;top:-1px}.dropdown-toggle:hover{border-bottom:2px solid rgb(14,63,88)}.inner-height,.nab-bar-mobile{height:100%}.total-container{height:auto;position:relative;background-color:transparent!important}.menu-icon{display:flex;flex-direction:column;gap:0px;align-items:center;justify-content:space-evenly;max-width:55px}.menu-icon hr{border:1px solid;margin:0;width:100%}.pt-0{padding-top:0!important}.pb-0{padding-bottom:0!important}.button{font-size:14px!important;padding:1rem 2rem;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important}.stores{border:1px solid;border-radius:12px;cursor:pointer;font-weight:600}.input-group{position:relative;outline:none;height:40px;display:flex;align-items:center;background-color:transparent;margin-right:25px;-webkit-transition:width .4s ease-in-out;transition:width .4s ease-in-out;border-radius:12px}.input-group mat-icon{width:6%;display:flex;align-items:center;justify-content:center;font-size:22px;position:relative;border-radius:0 12px 12px 0}.input-group input{height:100%!important;width:80%;background-color:transparent;border:none;outline:none;font-size:14px;padding-bottom:6px;box-shadow:none}.mat-icon{color:#000}.dropdown-button{font-size:14px!important;width:fit-content!important}.mobile-footer{display:none}@media screen and (max-width: 475px){.mobile-footer{width:100vw;height:60px;box-shadow:#64646f33 -2px -16px 29px;position:fixed;bottom:0;z-index:10001;display:flex!important;justify-content:space-around;align-items:center}.mobile-footer .icons{margin-top:5px;display:flex;align-items:center;justify-content:center;flex-direction:column}.mobile-footer .mat-icon{font-size:22px}}.nab-bar-mobile{width:100%;padding:5px 10px;height:50px;box-sizing:border-box}.title-row{flex:1;display:flex;align-items:center}.navbar-content{background-color:#0e3f58;padding:10px;margin-top:0!important}.navbar-content .d-flex{margin-top:20px}.navbar-toggler,.close-box{background:transparent;border:none;cursor:pointer;margin-left:10px;width:50px!important}.mat-icon{color:#fff}.button-display{display:flex;gap:8px}.flex-column{flex-direction:column}.justify-space-around{justify-content:space-around}@media screen and (max-width: 475px){.nab-bar-mobile{height:60px}}.cursor-pointer{cursor:pointer}.search-icon{margin-right:20px;display:flex;align-items:center;cursor:pointer}.search-icon mat-icon{font-size:24px}.mat-btn{font-size:14px!important;background:none;display:flex;cursor:pointer;border:none}.mat-btn mat-icon{color:inherit}.dropdown-menu{right:0;left:auto}.header1{display:flex;justify-content:space-between;align-items:center}.gap-15{gap:15px}.gap-10{gap:10px}.ptb-1{padding-top:1rem;padding-bottom:1rem}.text-end{text-align:end}.loginButton{gap:5px;display:flex;align-items:center;color:#fff;border-radius:8px;cursor:pointer;width:40px}.loginButton span{font-weight:600!important}.align-center{align-items:center}.offcanvas{width:70%;z-index:1000000000}.offcanvas mat-icon{color:#000}.offcanvas-body{position:relative}.canvas-button{position:absolute;bottom:20px;left:12px;width:90%}.mobileLoginButton{width:100%;height:40px;border-radius:8px;margin-top:15px;outline:none;background:transparent}.pageLinks{display:flex;flex-direction:row}.category-btn{font-size:16px!important}.h-70{height:70px}.offcanvas-header{height:10vh}.offcanvas-body{height:70vh}.offcanvas-body .pages{height:80%;overflow:scroll}.offcanvas-footer{height:20vh}.h-100{height:100%!important}.box-shadow{box-shadow:-9px 5px 3px #99999929}.sticky-header{position:sticky;top:0;z-index:10000}.mobile-page-list{position:relative;left:10px}.category{position:relative}.category:hover{border-bottom:3px solid var(--border-color);transition:border-bottom .1s ease-in-out}.list-category{padding:15px 30px;color:#000;background-color:#fff!important;height:50vh;position:absolute;width:100%}.list-header{margin-bottom:1rem;font-size:16px;font-weight:600}.list-item{gap:1rem;font-size:14px}.image-container{cursor:pointer}.image-container img{border-radius:12px}.each-price:hover{font-weight:700}.col-imag img{border-radius:8px}.btm-col-name{width:93%;border-radius:0 0 12px 12px;bottom:0}.collection{height:max-content;cursor:pointer}.text-overflow{overflow:hidden;text-overflow:ellipsis;font-size:14px;font-weight:500}.col-5{width:44.666667%}.h-10{height:10vh}.fs-16{font-size:16px}.br-50{border-radius:50%}.col-7{width:56.333333%}.pincode-container{position:absolute;background:#fff;color:#000;height:max-content;width:20vw;right:3%;top:130%;z-index:10;border-radius:0 0 30px 30px;transform-origin:top;box-shadow:0 2px 4px #c8c8c880;animation:unrollCarpet .5s ease-out forwards}.form-control{border-radius:12px 0 0 12px}.pin-text{font-size:14px;font-weight:500;white-space:nowrap}.error-border{border:2px solid #e53e3e!important}.f-11{font-size:11px}.br-5{border:1px solid rgba(0,0,0,.05)}.f-18{font-size:18px}.f-14{font-size:14px}.info-container{position:absolute;background:#fff;color:#000;height:max-content;width:20vw;right:-15px;top:130%;z-index:10;border-radius:0 0 30px 30px;transform-origin:top;box-shadow:0 2px 4px #c8c8c880;animation:unrollCarpet .5s ease-out forwards}.sign-btn{padding:10px;border-radius:12px;border:1px solid;cursor:pointer}.b-1{border:1px solid;border-radius:12px}@keyframes unrollCarpet{0%{transform:scaleY(0) rotateX(90deg);opacity:0}25%{transform:scaleY(.25) rotateX(67.5deg);opacity:.35}50%{transform:scaleY(.5) rotateX(45deg);opacity:.7}75%{transform:scaleY(.75) rotateX(22.5deg);opacity:.85}to{transform:scaleY(1) rotateX(0);opacity:1}}.pincode-text{font-size:11px;margin-bottom:15px}\n"] }]
|
393
|
-
}], ctorParameters: () => [{ type: i1.EventsService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.MatDialog }, { type: i4.StorageServiceService }, { type: i5.RestService }], propDecorators: { data: [{
|
391
|
+
], template: "<section [id]=\"data?.id\" class=\"total-container w-100\">\r\n <div class=\"w-100\" [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [ngClass]=\"{'box-shadow': isEcommerceWebsite}\"\r\n [class.margin-bottom]=\"isHeaderSticky && isEcommerceWebsite && (categoryList?.length == 0 || !showCategoryMobileHeader()) && isMobile\">\r\n <!-- isHeaderSticky && isEcommerceWebsite && (!categoryList || !showCategoryMobileHeader()) && -->\r\n <!-- [scrollValue]=\"isComponentMerged ? scrollValue : 0\" -->\r\n <div [simpoSticky]=\"isHeaderSticky\" [simpoBackground]=\"backgroundInfo\" [simpoOverlay]=\"backgroundInfo\" class=\"w-100\" #childContainer\r\n [categoryHeader]=\"isEcommerceWebsite && categoryList?.length > 0 && !isMobile\" simpoHover [class.background-position]=\"isComponentMerged && backgroundInfo?.showImage\"\r\n (hovering)=\"showEditTabs($event)\" [id]=\"data?.id\">\r\n <ng-container *ngIf=\"style?.headline?.display\">\r\n <div>\r\n <simpo-moving-text [edit]=\"false\" [delete]=\"false\" [data]=\"data\"></simpo-moving-text>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"style?.styling === 'Header1'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header1Template\"></ng-container>\r\n </div>\r\n <div *ngIf=\"style?.styling === 'Header2'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header2Template\"></ng-container>\r\n </div>\r\n <div *ngIf=\"style?.styling === 'Header3'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header3Template\"></ng-container>\r\n </div>\r\n <div *ngIf=\"style?.styling === 'Header4'\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n [isHeader]=\"true\" [id]=\"data?.id\">\r\n <ng-container *ngTemplateOutlet=\"header4Template\"></ng-container>\r\n </div>\r\n <!-- <div class=\"input-group mx-2 mb-2 w-98\" *ngIf=\"isMobile && isEcommerceWebsite\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search Product\" aria-label=\"Search Product\"\r\n [(ngModel)]=\"searchText\" (ngModelChange)=\"waitBeforeSearch()\"\r\n [ngStyle]=\"{'border' : '1px solid ' + accentColor}\">\r\n <mat-icon class=\"h-100\"\r\n [ngStyle]=\"{'background' : style?.background?.accentBackgroundType == 'Solid' ? accentColor : 'linear-gradient(to right,' + style?.background?.accentColor + ' 0%' + ',' + style?.background?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"style?.background?.color\">search</mat-icon>\r\n </div> -->\r\n <ng-container *ngIf=\"isEcommerceWebsite && !isMobile\">\r\n <ng-container *ngTemplateOutlet=\"categoriesHeader\"></ng-container>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"isEcommerceWebsite && isMobile && showCategoryMobileHeader()\">\r\n <ng-container *ngTemplateOutlet=\"mobileCategoryHeader\"></ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngIf=\"isEcommerceWebsite && isMobile\">\r\n <ng-container *ngTemplateOutlet=\"mobileFooterTemplate\"></ng-container>\r\n </ng-container>\r\n</section>\r\n\r\n<ng-template #header1Template>\r\n <div class=\"header1\">\r\n <div>\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n <div class=\"d-flex gap-15 align-center\" *ngIf=\"!isMobile\" [style.width.%]=\"isEcommerceWebsite ? 95 : ''\">\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n </div>\r\n <div class=\"d-flex gap-15 align-center\" *ngIf=\"isMobile\">\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n <mat-icon [simpoColor]=\"simpoColor\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\">menu</mat-icon>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #header2Template>\r\n <div class=\"header1\">\r\n <div class=\"d-flex gap-15 align-center\" *ngIf=\"!isMobile\" [style.width.%]=\"isEcommerceWebsite ? 93 : ''\">\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container>\r\n </div>\r\n <div class=\"d-flex gap-15 align-center\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\" *ngIf=\"isMobile\">\r\n <mat-icon [simpoColor]=\"simpoColor\">menu</mat-icon>\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n </div>\r\n <div class=\"text-end\">\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #header3Template>\r\n <div class=\"header1\">\r\n <div>\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n <ng-container *ngIf=\"!isMobile\">\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n </ng-container>\r\n <div class=\"d-flex gap-15 align-center\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\" *ngIf=\"isMobile\">\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n <mat-icon [simpoColor]=\"simpoColor\">menu</mat-icon>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #header4Template>\r\n <div class=\"header1\">\r\n <ng-container *ngIf=\"!isMobile\">\r\n <ng-container *ngTemplateOutlet=\"!isEcommerceWebsite ? buttonsTemplate : null\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"isEcommerceWebsite ? ecommerceButtonsTemplate : null\"></ng-container>\r\n <ng-container *ngIf=\"!isEcommerceWebsite\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </ng-container> </ng-container>\r\n <div class=\"d-flex gap-15 align-center\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasRight\"\r\n aria-controls=\"offcanvasRight\" *ngIf=\"isMobile\">\r\n <mat-icon [simpoColor]=\"simpoColor\">menu</mat-icon>\r\n <ng-container *ngTemplateOutlet=\"ecomProfileTemplate\"></ng-container>\r\n </div>\r\n <div class=\"text-end\">\r\n <ng-container *ngTemplateOutlet=\"logoSectionTemplate\"></ng-container>\r\n </div>\r\n\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #logoSectionTemplate>\r\n <div class=\"d-flex gap-3 align-center cursor-pointer\" *ngIf=\"!content?.logo?.isImage || !content?.logo?.image?.url\"\r\n (click)=\"!edit ? goToHome() : ''\">\r\n <div *ngIf=\"content?.logo?.text?.isIcon && content?.logo?.text?.url\">\r\n <img loading=\"lazy\" [src]=\"content?.logo?.text?.url\" alt=\"logo\" [width]=\"content?.logo?.size\" loading=\"lazy\">\r\n </div>\r\n <div class=\"heading-small\" *ngIf=\"content?.logo?.text?.isText\" [simpoColor]=\"simpoColor\">\r\n <b [ngStyle]=\"{'font-family': content?.logo?.text?.fontFamily}\">{{content?.siteName?.value}}</b>\r\n </div>\r\n </div>\r\n <!-- <div class=\"d-flex gap-3 align-items-lg-center cursor-pointer\" *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"goToHome()\"> -->\r\n <img loading=\"lazy\" [src]=\"content?.logo?.image?.url\" alt=\"logo\"\r\n [style.width.%]=\"screenWidth > 475 || (content?.logo?.size || 10) < 50 ? content?.logo?.size : ((content?.logo?.size || 10) - 10)\"\r\n loading=\"lazy\" *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"!edit ? goToHome() : ''\">\r\n <!-- </div> -->\r\n</ng-template>\r\n\r\n<ng-template #pageLinksTemplate>\r\n <div class=\"navbar-nav pageLinks\" [ngClass]=\"{'align-items-center' : !isMobile}\">\r\n <div class=\"d-flex gap-3\"\r\n [ngClass]=\"{'flex-column': isMobile, 'align-items-center' : !isMobile, 'mobile-page-list': isMobile}\">\r\n <ng-container *ngFor=\"let item of getNavbarButton\">\r\n <ng-container *ngIf=\"item.showHeader\">\r\n <simpo-navbar-button-element [buttonData]=\"item\" [selectedStyle]=\"style?.navigationStyle\"\r\n [buttonStyle]=\"style?.navbarButtonStyle\" [bgColor]=\"simpoColor\" [accentColor]=\"accentColor\"\r\n [sectionId]=\"data?.id\"></simpo-navbar-button-element>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngFor=\"let link of getDropdownLinks; let idx = index\">\r\n <ng-container *ngIf=\"content?.ecomlinks?.[link]?.length \">\r\n <div class=\"position-relative\">\r\n <button mat-stroked-button class=\"mat-btn dropdown-toggle category-btn\" type=\"button\"\r\n [simpoColor]=\"simpoColor\" id=\"link\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{link | lowercase | titlecase}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"link\">\r\n <a class=\"dropdown-item\" *ngFor=\"let menu of getValues(content?.ecomlinks?.[link])\"\r\n (click)=\"applyFilter(menu, link)\">{{menu}}</a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n\r\n</ng-template>\r\n\r\n<ng-template #buttonsTemplate>\r\n <div class=\"d-flex\">\r\n <div *ngIf=\"action?.display\" class=\"button-display mt-0\" [ngClass]=\"{'w-100 justify-space-around': isMobile}\">\r\n <div *ngFor=\"let button of action?.buttons\">\r\n <app-button-element [buttonContent]=\"button.content\" [buttonStyle]=\"button.styles\" [sectionId]=\"data?.id\"\r\n [edit]=\"edit\" [color]=\"data?.styles?.background?.accentColor\" [buttonId]=\"button.id\"\r\n [backgroundInfo]=\"data?.styles?.background\"></app-button-element>\r\n </div>\r\n </div>\r\n </div>\r\n <button class=\"mobileLoginButton\" *ngIf=\"isEcommerceWebsite && isMobile && !loggedIn\"\r\n [style.border]=\"'1px solid' + accentColor\" [style.color]=\"accentColor\" (click)=\"goToAccount('LOGIN')\">Login</button>\r\n</ng-template>\r\n\r\n<ng-template #mobileFooterTemplate>\r\n <div class=\"mobile-footer\" [simpoBackground]=\"backgroundInfo\">\r\n <div class=\"icons\" (click)=\"goToHome()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">home</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Home</span>\r\n </div>\r\n <div class=\"icons\" (click)=\"searchProducts()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">grid_on</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Shop</span>\r\n </div>\r\n <div class=\"icons\" (click)=\"goToWishlist()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">favorite_border</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Wishlist</span>\r\n </div>\r\n <div class=\"icons position-relative\" (click)=\"goToCart()\">\r\n <mat-icon [simpoColor]=\"simpoColor\">shopping_cart</mat-icon>\r\n <span [simpoColor]=\"simpoColor\">Cart</span>\r\n <div class=\"position-absolute cartItemCount\" *ngIf=\"getCartItemsCount\">{{getCartItemsCount}}</div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #ecommerceButtonsTemplate>\r\n <div class=\"justify-content-between pr-0 d-flex position-relative gap-10 w-100\"\r\n [style.flexDirection]=\"style?.styling === 'Header2' || style?.styling === 'Header4' ? 'row-reverse' : ''\">\r\n <!-- <div class=\"search-icon\" (click)=\"showSearchBar = !showSearchBar\">\r\n <mat-icon [style.color]=\"accentColor\">search</mat-icon>\r\n </div> -->\r\n <div class=\"w-75 d-flex align-items-center\">\r\n <div class=\"input-group w-75 ml-2\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search Product\" aria-label=\"Search Product\"\r\n [(ngModel)]=\"searchText\" (ngModelChange)=\"waitBeforeSearch()\"\r\n [ngStyle]=\"{'border' : '1px solid ' + backgroundInfo?.accentColor}\" [style.color]=\"backgroundInfo?.accentColor\">\r\n <mat-icon class=\"h-100\"\r\n [ngStyle]=\"{'background' : backgroundInfo.background?.accentBackgroundType == 'Solid' ? backgroundInfo?.accentColor : 'linear-gradient(to right,' + backgroundInfo?.accentColor + ' 0%' + ',' + backgroundInfo?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"backgroundInfo?.color\">search</mat-icon>\r\n </div>\r\n <div class=\"d-flex gap-3 align-items-center py-1 px-3 b-1 stores\" [style.borderColor]=\"backgroundInfo?.accentColor\"\r\n (click)=\"goToSchemes()\" [style.background]=\"getRGBA(backgroundInfo?.accentColor , 10)\" *ngIf=\"schemeAvailable\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n xmlns:svgjs=\"http://svgjs.dev/svgjs\" id=\"Layer_2\" viewBox=\"0 0 60 60\" data-name=\"Layer 2\" width=\"30\"\r\n height=\"30\" version=\"1.1\">\r\n <g width=\"100%\" height=\"100%\" transform=\"matrix(1,0,0,1,0,0)\">\r\n <path d=\"m14.36 46.66.51-9.86-11.93-7.16-1.94 8.43z\" [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path\r\n d=\"m17.17 38.1s0-.02.02-.03c0 0 0-.02.02-.02.04-.05.1-.08.15-.11.02-.01.03-.03.05-.04l4.66-1.94h-.02s-1.87-1.21-1.87-1.21l-3.18 1.57-1.07.53-.43 8.32 1.58-6.9c.01-.06.05-.12.09-.17z\"\r\n [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\" data-original-color=\"#000000ff\" stroke=\"none\"\r\n stroke-opacity=\"1\" />\r\n <path d=\"m19.14 34.08-6.27-4.04c-.19-.12-.28-.34-.23-.56l1.08-4.72-9.96 4.14 11.68 7.01z\"\r\n [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\" data-original-color=\"#000000ff\" stroke=\"none\"\r\n stroke-opacity=\"1\" />\r\n <path d=\"m30.93 46.42-.5 9.79 32.57-18.67-1.21-6.4-23.16 11.46z\" [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path d=\"m16 47.65 13.38 8.58.49-9.86-11.93-7.17z\" [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path\r\n d=\"m27.85 39.34s0 0-.01 0c0 0 0 0-.01 0-.08.04-.16.06-.24.06-.05 0-.1-.03-.15-.04-.04-.01-.08-.01-.11-.03l-4.16-2.67-4.37 1.82 11.68 7.01 30.4-15.05-10.71-3.88-22.28 12.78z\"\r\n [attr.fill]=\"accentColor\" fill-opacity=\"1\" data-original-color=\"#000000ff\" stroke=\"none\"\r\n stroke-opacity=\"1\" />\r\n <path d=\"m28.26 36.01-.1 1.93 32.58-18.69-1.22-6.39-30.86 15.28z\" [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path d=\"m27.61 28.09-11.93-7.16-1.94 8.43 13.36 8.58z\" [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n <path d=\"m58.57 12.15-12.1-4.38-29.97 12.43 11.68 7z\" [attr.fill]=\"backgroundInfo?.accentColor\" fill-opacity=\"1\"\r\n data-original-color=\"#000000ff\" stroke=\"none\" stroke-opacity=\"1\" />\r\n </g>\r\n </svg>\r\n <div [style.color]=\"accentColor\">Schemes</div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex gap-3 align-items-center\">\r\n <div class=\"stores d-flex align-items-center gap-2 py-2 px-3\" (click)=\"goToStores()\"\r\n [style.borderColor]=\"backgroundInfo?.accentColor\" *ngIf=\"storeAvaiable\" [style.background]=\"getRGBA(backgroundInfo?.accentColor , 10)\">\r\n <mat-icon [style.color]=\"backgroundInfo?.accentColor\">store</mat-icon>\r\n <span [style.color]=\"backgroundInfo?.accentColor\">Stores</span>\r\n </div>\r\n <div class=\"pin-text\" (mouseenter)=\"showPincodeInput = true;showLogin = false\" [style.color]=\"backgroundInfo?.accentColor\"\r\n *ngIf=\"!getPincode\">Enter\r\n Pincode\r\n </div>\r\n <div class=\"pin-text\" (mouseenter)=\"showPincodeInput = true;;showLogin = false\" [style.color]=\"backgroundInfo?.accentColor\"\r\n *ngIf=\"getPincode && getPincode.length == 6\">{{\"Delivering to: \" + getPincode}}</div>\r\n\r\n <!-- (mouseleave)=\"showPincodeInput = false\" -->\r\n <div class=\"pincode-container p-3\" *ngIf=\"showPincodeInput\" (mouseleave)=\"showPincodeInput = false\">\r\n <div class=\"text text-center mb-2 f-18 fw-bold\">\r\n Your PIN Code unlocks\r\n </div>\r\n <div class=\"sub-text text-center f-14 pincode-text\">\r\n Fastest delivery date, Try-at-Home availability,\r\n Nearest store and In-store design!\r\n </div>\r\n <div class=\"input-group mt-2 br-5 d-flex align-items-center justify-content-between px-3\"\r\n [class.error-border]=\"pinError\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Pincode\" aria-label=\"Pincode\" [(ngModel)]=\"pincode\"\r\n class=\"w-75 p-0\">\r\n <div class=\"input-sub-text f-11 w-25 text-end cursor-pointer\" (click)=\"setPincode()\">SUBMIT</div>\r\n </div>\r\n <div class=\"text-start mt-2 f-11\" *ngIf=\"pinError\">\r\n Please enter a valid pincode\r\n </div>\r\n </div>\r\n <div class=\"d-flex align-items-center\" style=\"gap: 5px; cursor: pointer;\" (click)=\"goToFav()\">\r\n <mat-icon [simpoColor]=\"backgroundInfo?.color\">favorite</mat-icon>\r\n </div>\r\n <div class=\"d-flex align-items-center position-relative\" style=\"gap: 5px; cursor: pointer;\" (click)=\"goToCart()\">\r\n <mat-icon [simpoColor]=\"backgroundInfo?.color\">shopping_cart</mat-icon>\r\n <div class=\"position-absolute cartItemCount\" *ngIf=\"getCartItemsCount\"\r\n [ngStyle]=\"{'background' : backgroundInfo?.accentBackgroundType == 'Solid' ? backgroundInfo?.accentColor : 'linear-gradient(to right,' + backgroundInfo?.accentColor + ' 0%' + ',' + backgroundInfo?.secondaryAccentColor +' 100%' + ')' , 'color' : setColor()}\">\r\n {{getCartItemsCount}}</div>\r\n </div>\r\n <div class=\"loginButton\" *ngIf=\"!loggedIn\" (mouseenter)=\"showLogin = true;showPincodeInput = false\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"27\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M12.12 12.78C12.05 12.77 11.96 12.77 11.88 12.78C10.12 12.72 8.71997 11.28 8.71997 9.50998C8.71997 7.69998 10.18 6.22998 12 6.22998C13.81 6.22998 15.28 7.69998 15.28 9.50998C15.27 11.28 13.88 12.72 12.12 12.78Z\"\r\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M18.74 19.38C16.96 21.01 14.6 22 12 22C9.40001 22 7.04001 21.01 5.26001 19.38C5.36001 18.44 5.96001 17.52 7.03001 16.8C9.77001 14.98 14.25 14.98 16.97 16.8C18.04 17.52 18.64 18.44 18.74 19.38Z\"\r\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z\"\r\n stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> <!-- <span class=\"fw-normal fs-6\" [simpoColor]=\"accentColor\">Login</span> -->\r\n </div>\r\n <!-- (mouseleave)=\"showLogin = false\" -->\r\n <div class=\"info-container p-3\" *ngIf=\"showLogin\" (mouseleave)=\"showLogin = false\">\r\n <div class=\"text text-center mb-2 f-18 fw-bold\">\r\n Your Account\r\n </div>\r\n <div class=\"sub-text text-center f-14\">\r\n Access account & manage your orders.\r\n </div>\r\n <div class=\"btn-container w-100 d-flex justify-content-between mt-3 gap-3\">\r\n <div (click)=\"goToAccount('SIGNUP')\" class=\"w-50 text-center sign-btn border-0\"\r\n [ngStyle]=\"{'background' : backgroundInfo?.accentBackgroundType == 'Solid' ? accentColor : 'linear-gradient(to right,' + backgroundInfo?.accentColor + ' 0%' + ',' + backgroundInfo?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"style?.background?.color\">Sign Up</div>\r\n <div (click)=\"goToAccount('LOGIN')\" class=\"w-50 text-center sign-btn\" [style.borderColor]=\"backgroundInfo?.accentColor\"\r\n [style.color]=\"backgroundInfo?.accentColor\">Log In</div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; cursor: pointer;\" (click)=\"goToAccount('PROFILE')\"\r\n *ngIf=\"loggedIn\">\r\n <img loading=\"lazy\" [src]=\"userGender | genderIcon\" style=\"height: 27px;\">\r\n </div>\r\n </div>\r\n <!-- <div> -->\r\n <!-- <button class=\"button\" (click)=\"goToAccount()\" simpoButtonDirective [id]=\"sectionId+buttonId\" [buttonStyle]=\"buttonStyle\" [color]=\"color\" [appButtonEditor]=\"edit ?? false\" [buttonData]=\"buttonContent\">{{buttonContent?.label}}</button> -->\r\n <!-- </div> -->\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #navbarLinksTemplate>\r\n <div class=\"navbar-collapse fs-6 position-relative d-flex\" style=\"margin-top: 5px; margin-left: 25px;\"\r\n [simpoColor]=\"simpoColor\" *ngIf=\"screenWidth > 768\">\r\n <ng-container *ngFor=\"let item of getNavbarButton\">\r\n <ng-container *ngIf=\"item.showHeader\">\r\n <simpo-navbar-button-element [buttonData]=\"item\" [selectedStyle]=\"style?.navigationStyle\"\r\n [buttonStyle]=\"style?.navbarButtonStyle\" [bgColor]=\"simpoColor\"\r\n [sectionId]=\"data?.id\"></simpo-navbar-button-element>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let link of getDropdownLinks; let idx = index\">\r\n <ng-container *ngIf=\"content?.ecomlinks?.[link]?.length \">\r\n <div class=\"position-relative\">\r\n <button mat-stroked-button class=\"mat-btn dropdown-toggle\" type=\"button\" [simpoColor]=\"simpoColor\" id=\"link\"\r\n data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n {{link | uppercase}}\r\n </button>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"link\">\r\n <a class=\"dropdown-item\" *ngFor=\"let menu of getValues(content?.ecomlinks?.[link])\"\r\n (click)=\"applyFilter(menu, link)\">{{menu}}</a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<div class=\"offcanvas offcanvas-end\" tabindex=\"-1\" id=\"offcanvasRight\" aria-labelledby=\"offcanvasRightLabel\"\r\n [ngClass]=\"{'offcanvas-end' : style?.styling === 'Header1' || style?.styling === 'Header3', 'offcanvas-start': style?.styling === 'Header2' || style?.styling === 'Header4'}\">\r\n <div class=\"offcanvas-header\">\r\n <ng-container *ngTemplateOutlet=\"mobileLogoSectionTemplate\"></ng-container>\r\n <!-- <button type=\"button\" class=\"btn-close\" aria-label=\"Close\"></button> -->\r\n <mat-icon data-bs-dismiss=\"offcanvas\">close</mat-icon>\r\n </div>\r\n <div class=\"offcanvas-body\">\r\n <div class=\"pages\">\r\n <ng-container *ngTemplateOutlet=\"pageLinksTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n <div class=\"offcanvas-footer\">\r\n <div class=\"canvas-button\">\r\n <ng-container *ngTemplateOutlet=\"buttonsTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #ecomProfileTemplate>\r\n <mat-icon class=\"h-100 d-flex align-items-center justify-content-center br-50 fs-16 py-1\"\r\n (click)=\"showSearchBarMobile = !showSearchBarMobile\"\r\n [ngStyle]=\"{'background' : backgroundInfo?.accentBackgroundType == 'Solid' ? backgroundInfo?.accentColor : 'linear-gradient(to right,' + backgroundInfo?.accentColor + ' 0%' + ',' + backgroundInfo?.secondaryAccentColor +' 100%' + ')'}\"\r\n [style.color]=\"backgroundInfo?.color\">search</mat-icon>\r\n\r\n\r\n <input type=\"text\" class=\"form-control mob-form-control\" placeholder=\"Search Product\" aria-label=\"Search Product\"\r\n *ngIf=\"showSearchBarMobile\" [(ngModel)]=\"searchText\" (ngModelChange)=\"waitBeforeSearch()\"\r\n [ngStyle]=\"{'border' : '1px solid ' + backgroundInfo?.accentColor}\">\r\n\r\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; cursor: pointer;\" (click)=\"goToAccount('PROFILE')\"\r\n *ngIf=\"loggedIn\">\r\n <img loading=\"lazy\" [src]=\"userGender | genderIcon\" style=\"height: 27px;\">\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #mobileLogoSectionTemplate>\r\n <div class=\"d-flex gap-3 align-center cursor-pointer h-100\"\r\n *ngIf=\"!content?.logo?.isImage || !content?.logo?.image?.url\" (click)=\"!edit ? goToHome() : ''\">\r\n <div *ngIf=\"content?.logo?.text?.isIcon && content?.logo?.text?.url\" class=\"h-100\">\r\n <img loading=\"lazy\" [src]=\"content?.logo?.text?.url\" alt=\"logo\" class=\"h-100\">\r\n </div>\r\n <div class=\"heading-small\" *ngIf=\"content?.logo?.text?.isText\" [simpoColor]=\"simpoColor\">\r\n <b [ngStyle]=\"{'font-family': content?.logo?.text?.fontFamily}\">{{content?.siteName?.value}}</b>\r\n </div>\r\n </div>\r\n <!-- <div class=\"d-flex gap-3 align-items-lg-center cursor-pointer\" *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"goToHome()\"> -->\r\n <img [src]=\"content?.logo?.image?.url\" alt=\"logo\" class=\"h-100\" loading=\"lazy\"\r\n *ngIf=\"content?.logo?.isImage && content?.logo?.image?.url\" (click)=\"!edit ? goToHome() : ''\">\r\n <!-- </div> -->\r\n</ng-template>\r\n\r\n<ng-template #categoriesHeader>\r\n <div class=\"categories-header d-flex gap-3 py-2 position-relative\" *ngIf=\"categoryList?.length > 0 && !isMobile\"\r\n [spacingHorizontal]=\"stylesLayout\" [style.background]=\"data?.styles?.headline?.color\">\r\n <div class=\"category cursor-pointer\" *ngFor=\"let ele of categoryList;let i = index\"\r\n [style.--border-color]=\"data?.styles?.background?.accentColor\" [simpoColor]=\"data?.styles?.headline?.color\"\r\n (mouseenter)=\"showList = true;selectedCategory = ele;showCollections = false\">\r\n {{ele?.categoryName | titlecase}}\r\n </div>\r\n <div class=\"category cursor-pointer\" (mouseenter)=\"showCollections = true;showList = false\"\r\n *ngIf=\"collectionList?.collections?.length > 0\" [style.--border-color]=\"data?.styles?.background?.accentColor\"\r\n [simpoColor]=\"data?.styles?.headline?.color\">\r\n Collections\r\n </div>\r\n </div>\r\n <!-- (mouseleave)=\"showList = false\" -->\r\n <div *ngIf=\"showList\" class=\"list-category\" (mouseleave)=\"showList = false\">\r\n <div class=\"row w-100 h-100\">\r\n <div class=\"col-7 row\">\r\n <div class=\"col-4 h-100\" *ngIf=\"selectedCategory?.byPrice\">\r\n <div class=\"list-header mb-3\">By Price</div>\r\n <div class=\"d-flex flex-column gap-3 list-item\">\r\n <ng-container *ngFor=\"let price of Object.keys(selectedCategory?.byPrice)\">\r\n <div class=\"each-price cursor-pointer\"\r\n (click)=\"applyFilterToList(selectedCategory?.byPrice[price], 'price')\">\r\n {{price | titlecase}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-4 h-100 overflow-scroll\"\r\n *ngIf=\"selectedCategory?.byStyle && selectedCategory?.byStyle?.length > 0\">\r\n <div class=\"list-header mb-3\">By Style</div>\r\n <div class=\"d-flex flex-column gap-3 list-item\">\r\n <ng-container *ngFor=\"let collection of selectedCategory?.byStyle\">\r\n <div class=\"each-price cursor-pointer\" (click)=\"applyFilterToList(collection, 'collection')\">{{collection\r\n |\r\n titlecase}}</div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-4\" *ngIf=\"toShowInJewellery\">\r\n <div class=\"list-header mb-3\">By Metal & Stone</div>\r\n <div class=\"d-flex flex-column gap-3 list-item\">\r\n <ng-container *ngFor=\"let collection of byMetalAndStone\">\r\n <div class=\"d-flex gap-2 align-items-center\">\r\n <div style=\"width: 15px;height: 20px;\">\r\n <img [src]=\"collection.imageUrl\" alt=\"\" class=\"w-100\">\r\n </div>\r\n <div class=\"each-price cursor-pointer\">{{collection.name\r\n |\r\n titlecase}}</div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-5 h-100 row\" *ngIf=\"selectedCategory?.imageUrls?.length > 0\">\r\n <ng-container *ngFor=\"let image of selectedCategory?.imageUrls | slice:0:2; let i = index\">\r\n <div class=\"image-container h-100 col-6\" *ngIf=\"image\">\r\n <img loading=\"lazy\" [src]=\"image\" class=\"h-100 w-100\" (click)=\"filterByCategory()\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- (mouseleave)=\"showCollections = false\" -->\r\n <div class=\"list-category\" *ngIf=\"showCollections\" (mouseleave)=\"showCollections = false\">\r\n <div class=\"row w-100 h-100\">\r\n <div class=\"col-7 row\">\r\n <ng-container *ngFor=\"let collection of collectionList?.collections\">\r\n <div class=\"collection row col-3 align-items-center\"\r\n (click)=\"applyFilterToList(collection?.collectionName, 'collections')\">\r\n <div class=\"col-imag col-4\">\r\n <img [src]=\"collection?.imgUrl[0]\" alt=\"\" class=\"w-100\">\r\n </div>\r\n <div class=\"col-8 text-overflow\">\r\n {{collection?.collectionName | titlecase}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-5 h-100 row\" *ngIf=\"collectionList?.imageUrls\">\r\n <ng-container *ngFor=\"let image of Object.keys(collectionList?.imageUrls) | slice:0:2; let i = index\">\r\n <div class=\"image-container h-100 col-6 position-relative\" *ngIf=\"image\"\r\n (click)=\"applyFilterToList(image, 'collections')\">\r\n <img loading=\"lazy\" [src]=\"collectionList?.imageUrls[image]\" class=\"h-100 w-100\">\r\n <div class=\"text-center p-2 btm-col-name position-absolute\"\r\n [style.background]=\"data?.styles?.background?.accentColor\" [style.color]=\"setColor()\">{{image}}</div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #mobileCategoryHeader>\r\n <div class=\"categories-header d-flex gap-3 py-2 overflow-auto\" *ngIf=\"categoryList?.length > 0 && isMobile\"\r\n [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"category cursor-pointer d-flex flex-column gap-3\" *ngFor=\"let ele of categoryList;let i = index\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"selectedCategory = ele; filterByCategory()\">\r\n <div class=\"cat-img d-flex justify-content-center align-items-center\">\r\n <img [src]=\"ele?.imageUrls[0]\" alt=\"\" class=\"h-10 br-12\">\r\n </div>\r\n <div class=\"text-center f-14\">{{ele?.categoryName | titlecase}}</div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".header--scrolled{position:fixed!important;top:10px;left:50%;transform:translate(-50%);width:80%!important;border-radius:50px;box-shadow:0 3px 10px #00000026;z-index:1000001;transition:width .2s ease-in-out}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.total-container{transition:width .2s ease-in-out}.categories-header{height:44px;gap:26px!important}.categories-header .category{display:flex;align-items:center;font-weight:400;font-size:1rem}.margin-bottom{margin-bottom:var(--margin-top)}@media only screen and (max-width : 475px){.left-logo-text{padding-top:10px}.mob-form-control{position:absolute;right:10px;width:95%;top:85px;border-radius:12px!important}.categories-header{height:unset!important;margin-top:var(--margin-top)}.w-98{width:98%}.paddingEcom{padding-top:5px!important;padding-bottom:5px!important}.right-btn{width:15%!important}.cartItemCount{top:-8px!important;right:-3px!important}.adjustePadding{padding:8px!important}.pageLinks{gap:15px;flex-direction:column!important}.category-btn{color:#000!important;justify-content:left}}.nav-link{text-decoration:none}.cartItemCount{padding:5px;border-radius:5px;color:#fff;top:15px;left:15px;height:15px;width:15px;display:flex;align-items:center;justify-content:center;font-size:9px}#navbarNavAltMarkup{position:fixed;top:0;width:100%;background-color:#0e3f58;height:calc(100vh + -0px);z-index:101}.dropdown-toggle{border-bottom:2px solid transparent;transition:border .5s ease;position:relative;top:-1px}.dropdown-toggle:hover{border-bottom:2px solid rgb(14,63,88)}.inner-height,.nab-bar-mobile{height:100%}.total-container{height:auto;position:relative;background-color:transparent!important}.menu-icon{display:flex;flex-direction:column;gap:0px;align-items:center;justify-content:space-evenly;max-width:55px}.menu-icon hr{border:1px solid;margin:0;width:100%}.pt-0{padding-top:0!important}.pb-0{padding-bottom:0!important}.button{font-size:14px!important;padding:1rem 2rem;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important}.stores{border:1px solid;border-radius:12px;cursor:pointer;font-weight:600}.input-group{position:relative;outline:none;height:40px;display:flex;align-items:center;background-color:transparent;margin-right:25px;-webkit-transition:width .4s ease-in-out;transition:width .4s ease-in-out;border-radius:12px}.input-group mat-icon{width:6%;display:flex;align-items:center;justify-content:center;font-size:22px;position:relative;border-radius:0 12px 12px 0}.input-group input{height:100%!important;width:80%;background-color:transparent;border:none;outline:none;font-size:14px;padding-bottom:6px;box-shadow:none}.mat-icon{color:#000}.dropdown-button{font-size:14px!important;width:fit-content!important}.mobile-footer{display:none}@media screen and (max-width: 475px){.mobile-footer{width:100vw;height:60px;box-shadow:#64646f33 -2px -16px 29px;position:fixed;bottom:0;z-index:10001;display:flex!important;justify-content:space-around;align-items:center}.mobile-footer .icons{margin-top:5px;display:flex;align-items:center;justify-content:center;flex-direction:column}.mobile-footer .mat-icon{font-size:22px}}.nab-bar-mobile{width:100%;padding:5px 10px;height:50px;box-sizing:border-box}.title-row{flex:1;display:flex;align-items:center}.navbar-content{background-color:#0e3f58;padding:10px;margin-top:0!important}.navbar-content .d-flex{margin-top:20px}.navbar-toggler,.close-box{background:transparent;border:none;cursor:pointer;margin-left:10px;width:50px!important}.mat-icon{color:#fff}.button-display{display:flex;gap:8px}.flex-column{flex-direction:column}.justify-space-around{justify-content:space-around}@media screen and (max-width: 475px){.nab-bar-mobile{height:60px}}.cursor-pointer{cursor:pointer}.search-icon{margin-right:20px;display:flex;align-items:center;cursor:pointer}.search-icon mat-icon{font-size:24px}.mat-btn{font-size:14px!important;background:none;display:flex;cursor:pointer;border:none}.mat-btn mat-icon{color:inherit}.dropdown-menu{right:0;left:auto}.header1{display:flex;justify-content:space-between;align-items:center}.gap-15{gap:15px}.gap-10{gap:10px}.ptb-1{padding-top:1rem;padding-bottom:1rem}.text-end{text-align:end}.loginButton{gap:5px;display:flex;align-items:center;color:#fff;border-radius:8px;cursor:pointer;width:40px}.loginButton span{font-weight:600!important}.align-center{align-items:center}.offcanvas{width:70%;z-index:1000000000}.offcanvas mat-icon{color:#000}.offcanvas-body{position:relative}.canvas-button{position:absolute;bottom:20px;left:12px;width:90%}.mobileLoginButton{width:100%;height:40px;border-radius:8px;margin-top:15px;outline:none;background:transparent}.pageLinks{display:flex;flex-direction:row}.category-btn{font-size:16px!important}.h-70{height:70px}.offcanvas-header{height:10vh}.offcanvas-body{height:70vh}.offcanvas-body .pages{height:80%;overflow:scroll}.offcanvas-footer{height:20vh}.h-100{height:100%!important}.box-shadow{box-shadow:-9px 5px 3px #99999929}.sticky-header{position:sticky;top:0;z-index:10000}.mobile-page-list{position:relative;left:10px}.category{position:relative}.category:hover{border-bottom:3px solid var(--border-color);transition:border-bottom .1s ease-in-out}.list-category{padding:15px 30px;color:#000;background-color:#fff!important;height:50vh;position:absolute;width:100%}.list-header{margin-bottom:1rem;font-size:16px;font-weight:600}.list-item{gap:1rem;font-size:14px}.background-position{background-position:center top!important}.image-container{cursor:pointer}.image-container img{border-radius:12px}.each-price:hover{font-weight:700}.col-imag img{border-radius:8px}.btm-col-name{width:93%;border-radius:0 0 12px 12px;bottom:0}.collection{height:max-content;cursor:pointer}.text-overflow{overflow:hidden;text-overflow:ellipsis;font-size:14px;font-weight:500}.col-5{width:44.666667%}.h-10{height:10vh}.fs-16{font-size:16px}.br-50{border-radius:50%}.col-7{width:56.333333%}.pincode-container{position:absolute;background:#fff;color:#000;height:max-content;width:20vw;right:3%;top:130%;z-index:10;border-radius:0 0 30px 30px;transform-origin:top;box-shadow:0 2px 4px #c8c8c880;animation:unrollCarpet .5s ease-out forwards}.form-control{border-radius:12px 0 0 12px}.pin-text{font-size:14px;font-weight:500;white-space:nowrap}.error-border{border:2px solid #e53e3e!important}.f-11{font-size:11px}.br-5{border:1px solid rgba(0,0,0,.05)}.f-18{font-size:18px}.f-14{font-size:14px}.info-container{position:absolute;background:#fff;color:#000;height:max-content;width:20vw;right:-15px;top:130%;z-index:10;border-radius:0 0 30px 30px;transform-origin:top;box-shadow:0 2px 4px #c8c8c880;animation:unrollCarpet .5s ease-out forwards}.sign-btn{padding:10px;border-radius:12px;border:1px solid;cursor:pointer}.b-1{border:1px solid;border-radius:12px}@keyframes unrollCarpet{0%{transform:scaleY(0) rotateX(90deg);opacity:0}25%{transform:scaleY(.25) rotateX(67.5deg);opacity:.35}50%{transform:scaleY(.5) rotateX(45deg);opacity:.7}75%{transform:scaleY(.75) rotateX(22.5deg);opacity:.85}to{transform:scaleY(1) rotateX(0);opacity:1}}.pincode-text{font-size:11px;margin-bottom:15px}\n"] }]
|
392
|
+
}], ctorParameters: () => [{ type: i1.EventsService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.MatDialog }, { type: i4.StorageServiceService }, { type: i5.RestService }, { type: i1.EventsService }], propDecorators: { data: [{
|
394
393
|
type: Input
|
395
394
|
}], nextComponent: [{
|
396
395
|
type: Input
|
@@ -410,4 +409,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
410
409
|
type: HostListener,
|
411
410
|
args: ['window:resize', ['$event']]
|
412
411
|
}] } });
|
413
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLXNlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZWN0aW9ucy9oZWFkZXItc2VjdGlvbi9oZWFkZXItc2VjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2hlYWRlci1zZWN0aW9uL2hlYWRlci1zZWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBOEMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFHdEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxD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QUFaLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ3VCLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQThFM0IsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkErQnpDLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSGVhZGVyQ29udGVudE1vZGVsLCBIZWFkZXJTZWN0aW9uTW9kZWwsIEhlYWRlclN0eWxlTW9kZWwgfSBmcm9tICcuL2hlYWRlci1zZWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgU2ltcG9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9zaW1wby1idXR0b24vc2ltcG8tYnV0dG9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNvY2lhSWNvbnNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9zb2NpYS1pY29ucy9zb2NpYS1pY29ucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE5hdmJhckJ1dHRvbkVsZW1lbnRDb21wb25lbnQgfSBmcm9tICcuLy4uLy4uL2VsZW1lbnRzL25hdmJhci1idXR0b24tZWxlbWVudC9uYXZiYXItYnV0dG9uLWVsZW1lbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgQW5pbWF0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2FuaW1hdGlvbi1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCYW5uZXJDb250ZW50Rml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Jhbm5lci1jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCb3JkZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYm9yZGVyLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9idXR0b24tZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbHVtbkRpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb2x1bW4tZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRhaW5lckZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb250YWluZXItZmlyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IHNpbXBvQ29uZXRlbkFsaWdubWVudERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWFsaWdubWVudC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb3JuZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29ybmVyLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNpbXBvRm9vdGVyTGF5b3V0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Zvb3Rlci1sYXlvdXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvaG92ZXItZWxlbWVudC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9pbWFnZS1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgT3ZlcmxheURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9vdmVybGF5LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFBvc2l0aW9uTGF5b3V0RGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3Bvc2l0aW9uLWxheW91dC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVGV4dEJhY2tncm91bmREaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvdGV4dC1iYWNrZ3JvdW5kLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIb3ZlckVsZW1lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi8uLi8uLi9jb21wb25lbnRzL2hvdmVyLWVsZW1lbnRzL2hvdmVyLWVsZW1lbnRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFjdGlvbk1vZGVsLCBCYWNrZ3JvdW5kTW9kZWwsIExheU91dE1vZGVsIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcclxuaW1wb3J0IHsgQ29sb3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29sb3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9TdGlja3lEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvc3RpY2t5LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3NwYWNpbmctaG9yaXpvbnRhbC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi8uLi9lY29tbWVyY2Uvc3R5bGVzL3VzZXIubW9kYWwnO1xyXG5pbXBvcnQgeyBHZW5kZXJJY29uIH0gZnJvbSAnLi4vLi4vcGlwZXMvZ2VuZGVyLnBpcGUnO1xyXG5pbXBvcnQgeyBNYXRCb3R0b21TaGVldE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JvdHRvbS1zaGVldCc7XHJcbmltcG9ydCB7IENhcnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lY29tbWVyY2Uvc2VjdGlvbnMvY2FydC9jYXJ0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGhlYWRsaW5lQW5pbWF0aW9uVHlwZSwgSEVBREVSX1NUWUxJTkcsIEhlYWRlcl9UeXBlLCBQcm9kdWN0Q2FyZFRoZW1lIH0gZnJvbSAnLi4vLi4vc3R5bGVzL2luZGV4JztcclxuaW1wb3J0IHsgTW92aW5nVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NlY3Rpb25zL21vdmluZy10ZXh0L21vdmluZy10ZXh0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1vdmluZ1RleHRNb2RhbCB9IGZyb20gJy4uL21vdmluZy10ZXh0L21vdmluZy10ZXh0Lm1vZGFsJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1oZWFkZXItc2VjdGlvbicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBTaW1wb0J1dHRvbkNvbXBvbmVudCxcclxuICAgIEdlbmRlckljb24sXHJcbiAgICBDYXJ0Q29tcG9uZW50LFxyXG4gICAgU29jaWFJY29uc0NvbXBvbmVudCxcclxuICAgIE1hdEljb24sXHJcbiAgICBOYXZiYXJCdXR0b25FbGVtZW50Q29tcG9uZW50LFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBIb3ZlckVsZW1lbnRzQ29tcG9uZW50LFxyXG4gICAgQW5pbWF0aW9uRGlyZWN0aXZlLFxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIEJhbm5lckNvbnRlbnRGaXREaXJlY3RpdmUsXHJcbiAgICBCb3JkZXJEaXJlY3RpdmUsXHJcbiAgICBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBDb2x1bW5EaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBDb250YWluZXJGaXREaXJlY3RpdmUsXHJcbiAgICBzaW1wb0NvbmV0ZW5BbGlnbm1lbnREaXJlY3RpdmUsXHJcbiAgICBDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgQ29ybmVyRGlyZWN0aXZlLFxyXG4gICAgU2ltcG9Gb290ZXJMYXlvdXREaXJlY3RpdmUsXHJcbiAgICBIb3ZlckRpcmVjdGl2ZSxcclxuICAgIEltYWdlRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgT3ZlcmxheURpcmVjdGl2ZSxcclxuICAgIFNpbXBvU3RpY2t5RGlyZWN0aXZlLFxyXG4gICAgUG9zaXRpb25MYXlvdXREaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBUZXh0QmFja2dyb3VuZERpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIENvbG9yRGlyZWN0aXZlLFxyXG4gICAgTWF0Qm90dG9tU2hlZXRNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRNZW51TW9kdWxlLFxyXG4gICAgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUsXHJcbiAgICBNb3ZpbmdUZXh0Q29tcG9uZW50LFxyXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXItc2VjdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2hlYWRlci1zZWN0aW9uLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIZWFkZXJTZWN0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBkYXRhPzogSGVhZGVyU2VjdGlvbk1vZGVsO1xyXG4gIEBJbnB1dCgpIG5leHRDb21wb25lbnQ6IGFueTtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBjdXN0b21DbGFzcz86IHN0cmluZztcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoXCJjaGlsZENvbnRhaW5lclwiKSBjaGlsZENvbnRhaW5lcjogYW55O1xyXG4gIHB1YmxpYyBzY3JvbGxWYWx1ZTogbnVtYmVyID0gMDtcclxuICBjb250ZW50PzogSGVhZGVyQ29udGVudE1vZGVsO1xyXG4gIHN0eWxlPzogSGVhZGVyU3R5bGVNb2RlbFxyXG4gIGFjdGlvbj86IEFjdGlvbk1vZGVsXHJcbiAgY29sb3IgPSAnIzAwMDAwMCc7XHJcbiAgc2VhcmNoVGV4dDogc3RyaW5nID0gXCJcIjtcclxuICB0aGVtZSA9IFByb2R1Y3RDYXJkVGhlbWU7XHJcbiAgSGVhZGVyU3R5bGluZyA9IEhlYWRlcl9UeXBlXHJcbiAgcGFyZW50SGVpZ2h0OiBudW1iZXIgPSA3MDsgLy8gRGVmYXVsdCBoZWlnaHRcclxuICAvLyBtYXREaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcclxuXHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50U2VydmljZTogRXZlbnRzU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF0RGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZVxyXG4gICAgLy8gcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHRoaXMuZ2V0U2NyZWVuU2l6ZSgpO1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGVBbGxEYXRhKCk7XHJcbiAgfVxyXG4gIHNlYXJjaENoYW5nZVRpbWVvdXQ6IGFueTtcclxuICB3YWl0QmVmb3JlU2VhcmNoKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoQ2hhbmdlVGltZW91dCk7XHJcbiAgICB0aGlzLnNlYXJjaENoYW5nZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZWFyY2hQcm9kdWN0cygpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcbiAgc2VhcmNoUHJvZHVjdHMoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9saXN0J10sIHsgcXVlcnlQYXJhbXM6IHsgc2VhcmNoVHh0OiB0aGlzLnNlYXJjaFRleHQgfSB9KTtcclxuICB9XHJcbiAgZ29Ub0ZhdigpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3dpc2hsaXN0J10pO1xyXG4gIH1cclxuICBnZXQgc3R5bGVzTGF5b3V0KCkge1xyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5zdHlsZT8ubGF5b3V0IH0gYXMgTGF5T3V0TW9kZWw7XHJcbiAgfVxyXG4gIGdvVG9BY2NvdW50KHJlZGlyZWN0VG86IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VXNlcigpKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3Byb2ZpbGUnXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocmVkaXJlY3RUbyA9PSAnU0lHTlVQJyB8fCByZWRpcmVjdFRvID09ICdMT0dJTicpXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbG9naW4nXSwgeyBxdWVyeVBhcmFtczogeyByZWRpcmVjdFRvOiByZWRpcmVjdFRvIH0gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbG9nZ2VkSW4oKSB7XHJcbiAgICBpZiAodGhpcy5zdG9yYWdlU2VydmljZS5nZXRVc2VyKCkpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRVc2VyTmFtZSgpIHtcclxuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKTtcclxuICAgIHJldHVybiB1c2VyPy5jb250YWN0Lm5hbWU7XHJcbiAgfVxyXG5cclxuICBnb1RvV2lzaGxpc3QoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy93aXNobGlzdCddKTtcclxuICB9XHJcbiAgZ29Ub0NhcnQoKSB7XHJcbiAgICBpZiAoZmFsc2UpIHtcclxuICAgICAgdGhpcy5tYXREaWFsb2cub3BlbihDYXJ0Q29tcG9uZW50LCB7IHdpZHRoOiAnMjh2dycsIHBhbmVsQ2xhc3M6ICdzaWRlcGFuZWwtY2xhc3MnLCBkYXRhOiB7IHdpbmRvdzogdHJ1ZSB9IH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddKTtcclxuICAgIH1cclxuICB9XHJcbiAgYXBwbHlGaWx0ZXIodmFsdWU6IGFueSwgdHlwZTogc3RyaW5nKSB7XHJcbiAgICB2YWx1ZSA9IHZhbHVlWzBdPy5yZXBsYWNlKFwiIFwiLCBcIl9cIik7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9saXN0J10sIHsgcXVlcnlQYXJhbXM6IHsgW3R5cGVdOiB2YWx1ZSB9IH0pO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgWyckZXZlbnQnXSlcclxuICBvblNjcm9sbChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNjcm9sbFZhbHVlID0gZXZlbnQuY3VycmVudFRhcmdldC5wYWdlWU9mZnNldCAvIDEwMDtcclxuICAgIHRoaXMuaXNTY3JvbGxlZCA9IHdpbmRvdy5zY3JvbGxZID4gNTA7XHJcbiAgfVxyXG4gIG1vdmluZ1RleHQ/OiBNb3ZpbmdUZXh0TW9kYWxcclxuICB0b1Nob3dJbkpld2VsbGVyeSA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2codGhpcy5kYXRhKVxyXG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5kYXRhPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdHlsZSA9IHRoaXMuZGF0YT8uc3R5bGVzO1xyXG4gICAgdGhpcy5hY3Rpb24gPSB0aGlzLmRhdGE/LmFjdGlvbjtcclxuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChxUGFyYW0pID0+IHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gcVBhcmFtW1wic2VhcmNoVHh0XCJdO1xyXG4gICAgfSlcclxuICAgIGlmICh3aW5kb3c/LmxvY2F0aW9uPy5vcmlnaW4/LmluY2x1ZGVzKCdjYXJhdGxhbmUnKSB8fCB3aW5kb3c/LmxvY2F0aW9uPy5vcmlnaW4/LmluY2x1ZGVzKCdvcnJhJykpIHtcclxuICAgICAgdGhpcy50b1Nob3dJbkpld2VsbGVyeSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc0Vjb21tZXJjZVdlYnNpdGUpIHtcclxuICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzSGVhZGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0UGFyZW50SGVpZ2h0KClcclxuICAgIH0sIDEwMDApXHJcbiAgfVxyXG5cclxuICBzaG93U2VhcmNoQmFyTW9iaWxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNOYXZiYXJPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2NyZWVuV2lkdGg6IG51bWJlciA9IDQ3NTtcclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBnZXRTY3JlZW5TaXplKGV2ZW50PzogbnVtYmVyKSB7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgdGhpcy5zY3JlZW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRQYXJlbnRIZWlnaHQoKSB7XHJcbiAgICBsZXQgaGVpZ2h0ID0gdGhpcy5jaGlsZENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uc2Nyb2xsSGVpZ2h0O1xyXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwiLS1tYXJnaW4tdG9wXCIsIGhlaWdodCArIFwicHhcIilcclxuICB9XHJcbiAgZ2V0IGdldERyb3Bkb3duTGlua3MoKSB7XHJcbiAgICBpZiAodGhpcy5jb250ZW50Py5lY29tbGlua3MgJiYgdGhpcy5pc0Vjb21tZXJjZVdlYnNpdGUpXHJcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRlbnQ/LmVjb21saW5rcyk7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG4gIGdldCBpc0Vjb21tZXJjZVdlYnNpdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhPy50eXBlID09IFwiRV9DT01NRVJDRVwiO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmlzTmF2YmFyT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2hvd0VkaXRvcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgc2hvd0VkaXRUYWJzKGlzU2hvdzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zaG93RWRpdG9ycyA9IGlzU2hvdztcclxuICB9XHJcbiAgZ29Ub0hvbWUoKSB7XHJcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1JFUVVFU1RfRlJPTScpID09PSAnRV9DT01NRVJDRScpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcclxuICB9XHJcbiAgZ2V0IGlzSGVhZGVyU3RpY2t5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8uc3R5bGVzPy5zdGlja3kgfHwgdGhpcy5pc0Vjb21tZXJjZVdlYnNpdGU7XHJcbiAgfVxyXG4gIGdldCBiYWNrZ3JvdW5kSW5mbygpIHtcclxuICAgIGxldCBiYWNrZ3JvdW5kOiBCYWNrZ3JvdW5kTW9kZWwgfCB7fSA9IHt9O1xyXG4gICAgaWYgKHRoaXMuc3R5bGUpIHtcclxuICAgICAgYmFja2dyb3VuZCA9IHtcclxuICAgICAgICAuLi50aGlzLnN0eWxlLmJhY2tncm91bmQsXHJcbiAgICAgICAgc2hvd0ltYWdlOiBmYWxzZSxcclxuICAgICAgICBjb2xvcjogXCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5uZXh0Q29tcG9uZW50Py5zdHlsZXM/Lm1lcmdlID8gKHRoaXMuc2Nyb2xsVmFsdWUgPiAwID8geyAuLi50aGlzLm5leHRDb21wb25lbnQuc3R5bGVzLmJhY2tncm91bmQsIGNvbG9yOiB0aGlzLnN0eWxlPy5iYWNrZ3JvdW5kLmNvbG9yIH0gOiB7IC4uLmJhY2tncm91bmQgfSkgOiB7IC4uLnRoaXMuZGF0YT8uc3R5bGVzLmJhY2tncm91bmQgfTtcclxuICB9XHJcbiAgZ2V0IHNpbXBvQ29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXh0Q29tcG9uZW50Py5zdHlsZXM/Lm1lcmdlID8gKHRoaXMuc2Nyb2xsVmFsdWUgPiAwID8gdGhpcy5zdHlsZT8uYmFja2dyb3VuZC5jb2xvciA6IHRoaXMubmV4dENvbXBvbmVudC5zdHlsZXM/LmJhY2tncm91bmQ/LmNvbG9yKSA6IHRoaXMuc3R5bGU/LmJhY2tncm91bmQ/LmNvbG9yO1xyXG4gIH1cclxuICBnZXQgYWNjZW50Q29sb3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXh0Q29tcG9uZW50Py5zdHlsZXM/Lm1lcmdlID8gKHRoaXMuc2Nyb2xsVmFsdWUgPiAwID8gdGhpcy5zdHlsZT8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3IgOiB0aGlzLm5leHRDb21wb25lbnQuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvcikgOiB0aGlzLnN0eWxlPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvcjtcclxuICB9XHJcbiAgZ2V0IGlzVHJhbnNwYXJlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXh0Q29tcG9uZW50Py5zdHlsZXM/Lm1lcmdlICYmIHRoaXMuc2Nyb2xsVmFsdWUgPT0gMDtcclxuICB9XHJcbiAgcmVkaXJlY3RUbyhjb250ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS5idXR0b25SZWRpcmVjdGlvbi5lbWl0KHsgZGF0YTogY29udGVudCB9KTtcclxuICB9XHJcblxyXG4gIHNob3dTZWFyY2hCYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZ2V0IGlzQ29tcG9uZW50TWVyZ2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmV4dENvbXBvbmVudD8uc3R5bGVzPy5tZXJnZTtcclxuICB9XHJcbiAgZWRpdFNlY3Rpb24oKSB7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UudG9nZ2xlRWRpdG9yRXZlbnQuZW1pdChmYWxzZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoeyBkYXRhOiB0aGlzLmRhdGEgfSk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhblNob3dNb2JpbGVGb290ZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0Vjb21tZXJjZVdlYnNpdGU7XHJcbiAgfVxyXG5cclxuICBnZXQgc2hvd01vYmlsZUhvbWVJY29uKCkge1xyXG4gICAgY29uc3QgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICByZXR1cm4gISh1cmwuaW5jbHVkZXMoXCJjYXJ0XCIpIHx8IHVybC5pbmNsdWRlcyhcInByb2ZpbGVcIikgfHwgdXJsLmluY2x1ZGVzKFwid2lzaGxpc3RcIikpO1xyXG4gIH1cclxuICBnZXQgZ2V0Q2FydEl0ZW1zQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFRvdGFsQ2FydEl0ZW1zO1xyXG4gIH1cclxuICBnZXQgZ2V0SGVhZGVyU3R5bGluZygpOiBIZWFkZXJfVHlwZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zdHlsZT8uc3R5bGluZztcclxuICB9XHJcbiAgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDwgNDc1O1xyXG4gIH1cclxuICBnZXRLZXlzKG9iamVjdDogYW55KTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7XHJcbiAgfVxyXG4gIGdldFZhbHVlcyhvYmplY3Q6IGFueSk6IHVua25vd25bXSB7XHJcbiAgICBjb25zdCBrZXlzOiB1bmtub3duW10gPSBbXTtcclxuICAgIG9iamVjdC5mb3JFYWNoKChrZXk6IGFueSkgPT4ga2V5cy5wdXNoKE9iamVjdC52YWx1ZXMoa2V5KSkpO1xyXG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGtleXMpXTtcclxuICB9XHJcbiAgZ2V0IHVzZXJHZW5kZXIoKSB7XHJcbiAgICBjb25zdCB1c2VyID0gKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VXNlcigpIGFzIFVzZXIpO1xyXG4gICAgaWYgKHVzZXIpXHJcbiAgICAgIHJldHVybiB1c2VyLmdlbmRlcjtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldE5hdmJhckJ1dHRvbigpIHtcclxuICAgIGxldCBjb3VudDogbnVtYmVyID0gMDtcclxuICAgIGxldCBwYWdlOiBhbnlbXSA9IFtdXHJcbiAgICBmb3IgKGxldCBidXR0b24gb2YgdGhpcy5jb250ZW50Py5uYXZiYXJCdXR0b25zIHx8IFtdKSB7XHJcbiAgICAgIGlmIChjb3VudCA8IDUgJiYgYnV0dG9uLnNob3dIZWFkZXIpIHtcclxuICAgICAgICBwYWdlLnB1c2goYnV0dG9uKTtcclxuICAgICAgICBjb3VudCsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhZ2U7XHJcbiAgfVxyXG4gIGlzU2Nyb2xsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvLyBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgW10pXHJcbiAgLy8gb25XaW5kb3dTY3JvbGwoKSB7XHJcbiAgLy8gICB0aGlzLmlzU2Nyb2xsZWQgPSAgd2luZG93LnNjcm9sbFkgPiA1MDtcclxuICAvLyB9XHJcbiAgc2V0Q29sb3IoKSB7XHJcbiAgICBjb25zdCB0aHJlc2hvbGQgPSAxMzA7IC8vIEFkanVzdCB0aGlzIHRocmVzaG9sZCBhcyBuZWVkZWRcclxuICAgIGNvbnN0IHIgPSBwYXJzZUludCh0aGlzLmFjY2VudENvbG9yLnNsaWNlKDEsIDMpLCAxNik7XHJcbiAgICBjb25zdCBnID0gcGFyc2VJbnQodGhpcy5hY2NlbnRDb2xvci5zbGljZSgzLCA1KSwgMTYpO1xyXG4gICAgY29uc3QgYiA9IHBhcnNlSW50KHRoaXMuYWNjZW50Q29sb3Iuc2xpY2UoNSwgNyksIDE2KTtcclxuICAgIGNvbnN0IGJyaWdodG5lc3MgPSAociAqIDI5OSArIGcgKiA1ODcgKyBiICogMTE0KSAvIDEwMDA7XHJcblxyXG4gICAgcmV0dXJuIGJyaWdodG5lc3MgPiB0aHJlc2hvbGQgPyAnIzAwMDAwMCcgOiAnI2ZmZmZmZic7XHJcbiAgfVxyXG4gIHNob3dMaXN0OiBib29sZWFuID0gZmFsc2VcclxuICBzaG93Q29sbGVjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjYXRlZ29yeUxpc3Q6IGFueTtcclxuICBjb2xsZWN0aW9uTGlzdDogYW55O1xyXG4gIHNlbGVjdGVkQ2F0ZWdvcnk6IGFueTtcclxuICBzdG9yZUF2YWlhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0Q2F0ZWdvcmllc0hlYWRlcigpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0Q2F0ZWdvcmllc0hlYWRlckRhdGEoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcmVBdmFpYWJsZSA9IHJlcz8uZGF0YT8uaXNTdG9yZUVuYWJsZWRcclxuICAgICAgdGhpcy5zY2hlbWVBdmFpbGFibGUgPSByZXM/LmRhdGE/LnNjaGVtZXNBdmFpbGFibGVcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3QgPSByZXM/LmRhdGE/LmNhdGVnb3J5RGV0YWlscztcclxuICAgICAgdGhpcy5jb2xsZWN0aW9uTGlzdCA9IHJlcz8uZGF0YT8uaXRlbUNvbGxlY3Rpb25zO1xyXG4gICAgfSlcclxuICB9XHJcbiAgc2NoZW1lQXZhaWxhYmxlOiBib29sZWFuID0gZmFsc2VcclxuICBnb1RvU3RvcmVzKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvc3RvcmVzJ10pO1xyXG4gIH1cclxuICBPYmplY3QgPSBPYmplY3RcclxuICBhcHBseUZpbHRlclRvTGlzdChvYmo6IGFueSwgdHlwZTogYW55KSB7XHJcbiAgICBpZiAodHlwZSA9PSAncHJpY2UnKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xpc3QnXSwgeyBxdWVyeVBhcmFtczogeyBjYXRlZ29yeTogdGhpcy5zZWxlY3RlZENhdGVnb3J5Py5jYXRlZ29yeU5hbWUsIG1pblByaWNlOiBvYmo/Lm1pblByaWNlLCBtYXhQcmljZTogb2JqPy5tYXhQcmljZSwgcGFnZU5vOiAxIH0gfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PSAnY29sbGVjdGlvbicpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbGlzdCddLCB7IHF1ZXJ5UGFyYW1zOiB7IGNhdGVnb3J5OiB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnk/LmNhdGVnb3J5TmFtZSwgY29sbGVjdGlvbnM6IG9iaj8ucmVwbGFjZUFsbChcIiBcIiwgJ18nKSwgcGFnZU5vOiAxIH0gfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PSAnY29sbGVjdGlvbnMnKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xpc3QnXSwgeyBxdWVyeVBhcmFtczogeyBjb2xsZWN0aW9uczogb2JqPy5yZXBsYWNlQWxsKFwiIFwiLCAnXycpLCBwYWdlTm86IDEgfSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbHRlckJ5Q2F0ZWdvcnkoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9saXN0J10sIHsgcXVlcnlQYXJhbXM6IHsgY2F0ZWdvcnk6IHRoaXMuc2VsZWN0ZWRDYXRlZ29yeT8uY2F0ZWdvcnlOYW1lLCBwYWdlTm86IDEgfSB9KTtcclxuICB9XHJcblxyXG4gIHNob3dQaW5jb2RlSW5wdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwaW5jb2RlOiBhbnkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGluY29kZScpID8/IFwiXCI7XHJcbiAgZ2V0UGluY29kZTogc3RyaW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3BpbmNvZGUnKSB8fCAnJztcclxuICBwaW5FcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNldFBpbmNvZGUoKSB7XHJcbiAgICBpZiAodGhpcy5waW5jb2RlICYmIHRoaXMucGluY29kZT8ubGVuZ3RoID09IDYpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3BpbmNvZGUnLCB0aGlzLnBpbmNvZGUpO1xyXG4gICAgICB0aGlzLmdldFBpbmNvZGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGluY29kZScpIHx8ICcnO1xyXG4gICAgICB0aGlzLnBpbkVycm9yID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBpbkVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dMb2dpbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBnb1RvU2NoZW1lcygpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3NjaGVtZS1lbnJvbGxtZW50J10pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UkdCQShiZ0NvbG9yOiBhbnksIG9wYWNpdHk6IG51bWJlcik6IGFueSB7XHJcbiAgICBjb25zdCByID0gcGFyc2VJbnQoYmdDb2xvci5zbGljZSgxLCAzKSwgMTYpO1xyXG4gICAgY29uc3QgZyA9IHBhcnNlSW50KGJnQ29sb3Iuc2xpY2UoMywgNSksIDE2KTtcclxuICAgIGNvbnN0IGIgPSBwYXJzZUludChiZ0NvbG9yLnNsaWNlKDUsIDcpLCAxNik7XHJcbiAgICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgJHtvcGFjaXR5IC8gMTAwfSlgO1xyXG4gIH1cclxuXHJcbiAgc2hvd0NhdGVnb3J5TW9iaWxlSGVhZGVyKCkge1xyXG4gICAgY29uc3QgcGF0aG5hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XHJcbiAgICByZXR1cm4gcGF0aG5hbWUuaW5jbHVkZXMoJy9saXN0JykgfHwgcGF0aG5hbWUgPT09ICcvJyB8fCBwYXRobmFtZSA9PT0gJyc7XHJcbiAgfVxyXG5cclxuICBieU1ldGFsQW5kU3RvbmU6IGFueSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ0dvbGQnLFxyXG4gICAgICBpbWFnZVVybDogJ2h0dHBzOi8vY2RuLmNhcmF0bGFuZS5jb20vbWVkaWEvc3RhdGljL2ltYWdlcy93ZWIvbWVudS8yMmt0LUdvbGQtMngucG5nJyxcclxuICAgICAgc3RhdHVzOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ0RpYW1vbmQnLFxyXG4gICAgICBpbWFnZVVybDogJ2h0dHBzOi8vY2RuLmNhcmF0bGFuZS5jb20vbWVkaWEvc3RhdGljL2ltYWdlcy93ZWIvbWVudS9EaWFtb25kLTF4LnBuZycsXHJcbiAgICAgIHN0YXR1czogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdQZWFybCcsXHJcbiAgICAgIGltYWdlVXJsOiAnaHR0cHM6Ly9jZG4uY2FyYXRsYW5lLmNvbS9zdGF0aWMvaW1hZ2VzL2Rpc2NvdmVyeS9yZXNwb25zaXZlLWhhbWJ1cmdlci1tZW51L3Byb2R1Y3RzLWFuZC1zZXJ2aWNlcy9wZWFybC0xeC5wbmcnLFxyXG4gICAgICBzdGF0dXM6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnR2Vtc3RvbmUnLFxyXG4gICAgICBpbWFnZVVybDogJ2h0dHBzOi8vY2RuLmNhcmF0bGFuZS5jb20vbWVkaWEvc3RhdGljL2ltYWdlcy93ZWIvbWVudS9HZW1zdG9uZS0xeC5wbmcnLFxyXG4gICAgICBzdGF0dXM6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnWWVsbG93IEdvbGQnLFxyXG4gICAgICBpbWFnZVVybDogJ2h0dHBzOi8vY2RuLmNhcmF0bGFuZS5jb20vbWVkaWEvc3RhdGljL2ltYWdlcy93ZWIvbWVudS9ZZWxsb3ctR29sZC0xeC5wbmcnLFxyXG4gICAgICBzdGF0dXM6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnUm9zZSBHb2xkJyxcclxuICAgICAgaW1hZ2VVcmw6ICdodHRwczovL2Nkbi5jYXJhdGxhbmUuY29tL21lZGlhL3N0YXRpYy9pbWFnZXMvd2ViL21lbnUvUm9zZS1Hb2xkLTF4LnBuZycsXHJcbiAgICAgIHN0YXR1czogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdXaGl0ZSBHb2xkJyxcclxuICAgICAgaW1hZ2VVcmw6ICdodHRwczovL2Nkbi5jYXJhdGxhbmUuY29tL21lZGlhL3N0YXRpYy9pbWFnZXMvd2ViL21lbnUvd2hpdGUtR29sZC0xeC5wbmcnLFxyXG4gICAgICBzdGF0dXM6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG5cclxufVxyXG4iLCI8c2VjdGlvbiBbaWRdPVwiZGF0YT8uaWRcIiBjbGFzcz1cInRvdGFsLWNvbnRhaW5lciB3LTEwMFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ3LTEwMFwiIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb092ZXJsYXldPVwic3R5bGU/LmJhY2tncm91bmRcIiBbbmdDbGFzc109XCJ7J2JveC1zaGFkb3cnOiBpc0Vjb21tZXJjZVdlYnNpdGV9XCJcclxuICAgIFtjbGFzcy5tYXJnaW4tYm90dG9tXT1cImlzSGVhZGVyU3RpY2t5ICYmIGlzRWNvbW1lcmNlV2Vic2l0ZSAmJiAoIWNhdGVnb3J5TGlzdCB8fCAhc2hvd0NhdGVnb3J5TW9iaWxlSGVhZGVyKCkpICYmIGlzTW9iaWxlXCI+XHJcbiAgICA8IS0tIFtzY3JvbGxWYWx1ZV09XCJpc0NvbXBvbmVudE1lcmdlZCA/IHNjcm9sbFZhbHVlIDogMFwiIC0tPlxyXG4gICAgPGRpdiBbc2ltcG9TdGlja3ldPVwiaXNIZWFkZXJTdGlja3lcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cImJhY2tncm91bmRJbmZvXCIgY2xhc3M9XCJ3LTEwMFwiICNjaGlsZENvbnRhaW5lclxyXG4gICAgICBbY2F0ZWdvcnlIZWFkZXJdPVwiaXNFY29tbWVyY2VXZWJzaXRlICYmIGNhdGVnb3J5TGlzdD8ubGVuZ3RoID4gMCAmJiAhaXNNb2JpbGVcIiBzaW1wb0hvdmVyXHJcbiAgICAgIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiIFtpZF09XCJkYXRhPy5pZFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3R5bGU/LmhlYWRsaW5lPy5kaXNwbGF5XCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxzaW1wby1tb3ZpbmctdGV4dCBbZWRpdF09XCJmYWxzZVwiIFtkZWxldGVdPVwiZmFsc2VcIiBbZGF0YV09XCJkYXRhXCI+PC9zaW1wby1tb3ZpbmctdGV4dD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzdHlsZT8uc3R5bGluZyA9PT0gJ0hlYWRlcjEnXCIgW3NwYWNpbmdIb3Jpem9udGFsXT1cInN0eWxlc0xheW91dFwiIFtzaW1wb0xheW91dF09XCJzdHlsZXNMYXlvdXRcIlxyXG4gICAgICAgIFtpc0hlYWRlcl09XCJ0cnVlXCIgW2lkXT1cImRhdGE/LmlkXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlcjFUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cInN0eWxlPy5zdHlsaW5nID09PSAnSGVhZGVyMidcIiBbc3BhY2luZ0hvcml6b250YWxdPVwic3R5bGVzTGF5b3V0XCIgW3NpbXBvTGF5b3V0XT1cInN0eWxlc0xheW91dFwiXHJcbiAgICAgICAgW2lzSGVhZGVyXT1cInRydWVcIiBbaWRdPVwiZGF0YT8uaWRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyMlRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic3R5bGU/LnN0eWxpbmcgPT09ICdIZWFkZXIzJ1wiIFtzcGFjaW5nSG9yaXpvbnRhbF09XCJzdHlsZXNMYXlvdXRcIiBbc2ltcG9MYXlvdXRdPVwic3R5bGVzTGF5b3V0XCJcclxuICAgICAgICBbaXNIZWFkZXJdPVwidHJ1ZVwiIFtpZF09XCJkYXRhPy5pZFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXIzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzdHlsZT8uc3R5bGluZyA9PT0gJ0hlYWRlcjQnXCIgW3NwYWNpbmdIb3Jpem9udGFsXT1cInN0eWxlc0xheW91dFwiIFtzaW1wb0xheW91dF09XCJzdHlsZXNMYXlvdXRcIlxyXG4gICAgICAgIFtpc0hlYWRlcl09XCJ0cnVlXCIgW2lkXT1cImRhdGE/LmlkXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlcjRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbXgtMiBtYi0yIHctOThcIiAqbmdJZj1cImlzTW9iaWxlICYmIGlzRWNvbW1lcmNlV2Vic2l0ZVwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggUHJvZHVjdFwiIGFyaWEtbGFiZWw9XCJTZWFyY2ggUHJvZHVjdFwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiAobmdNb2RlbENoYW5nZSk9XCJ3YWl0QmVmb3JlU2VhcmNoKClcIlxyXG4gICAgICAgICAgW25nU3R5bGVdPVwieydib3JkZXInIDogJzFweCBzb2xpZCAnICsgYWNjZW50Q29sb3J9XCI+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaC0xMDBcIlxyXG4gICAgICAgICAgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kJyA6IHN0eWxlPy5iYWNrZ3JvdW5kPy5hY2NlbnRCYWNrZ3JvdW5kVHlwZSA9PSAnU29saWQnID8gICBhY2NlbnRDb2xvciA6ICdsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsJyArIHN0eWxlPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvciArICcgMCUnICsgJywnICsgc3R5bGU/LmJhY2tncm91bmQ/LnNlY29uZGFyeUFjY2VudENvbG9yICsnIDEwMCUnICsgJyknfVwiXHJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwic3R5bGU/LmJhY2tncm91bmQ/LmNvbG9yXCI+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFY29tbWVyY2VXZWJzaXRlICYmICFpc01vYmlsZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYXRlZ29yaWVzSGVhZGVyXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XHJcbiAgICAgICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWNvbW1lcmNlV2Vic2l0ZSAmJiBpc01vYmlsZSAmJiBzaG93Q2F0ZWdvcnlNb2JpbGVIZWFkZXIoKVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9iaWxlQ2F0ZWdvcnlIZWFkZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFY29tbWVyY2VXZWJzaXRlICYmIGlzTW9iaWxlXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9iaWxlRm9vdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9zZWN0aW9uPlxyXG5cclxuPG5nLXRlbXBsYXRlICNoZWFkZXIxVGVtcGxhdGU+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlcjFcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2dvU2VjdGlvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTE1IGFsaWduLWNlbnRlclwiICpuZ0lmPVwiIWlzTW9iaWxlXCIgW3N0eWxlLndpZHRoLiVdPVwiaXNFY29tbWVyY2VXZWJzaXRlID8gOTUgOiAnJ1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRWNvbW1lcmNlV2Vic2l0ZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdlTGlua3NUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlzRWNvbW1lcmNlV2Vic2l0ZSA/IGVjb21tZXJjZUJ1dHRvbnNUZW1wbGF0ZSA6IG51bGxcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIiFpc0Vjb21tZXJjZVdlYnNpdGUgPyBidXR0b25zVGVtcGxhdGUgOiBudWxsXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTE1IGFsaWduLWNlbnRlclwiICpuZ0lmPVwiaXNNb2JpbGVcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVjb21Qcm9maWxlVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG1hdC1pY29uIFtzaW1wb0NvbG9yXT1cInNpbXBvQ29sb3JcIiBkYXRhLWJzLXRvZ2dsZT1cIm9mZmNhbnZhc1wiIGRhdGEtYnMtdGFyZ2V0PVwiI29mZmNhbnZhc1JpZ2h0XCJcclxuICAgICAgICBhcmlhLWNvbnRyb2xzPVwib2ZmY2FudmFzUmlnaHRcIj5tZW51PC9tYXQtaWNvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNoZWFkZXIyVGVtcGxhdGU+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlcjFcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTE1IGFsaWduLWNlbnRlclwiICpuZ0lmPVwiIWlzTW9iaWxlXCIgW3N0eWxlLndpZHRoLiVdPVwiaXNFY29tbWVyY2VXZWJzaXRlID8gOTMgOiAnJ1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiIWlzRWNvbW1lcmNlV2Vic2l0ZSA/IGJ1dHRvbnNUZW1wbGF0ZSA6IG51bGxcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlzRWNvbW1lcmNlV2Vic2l0ZSA/IGVjb21tZXJjZUJ1dHRvbnNUZW1wbGF0ZSA6IG51bGxcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0Vjb21tZXJjZVdlYnNpdGVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnZUxpbmtzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTE1IGFsaWduLWNlbnRlclwiIGRhdGEtYnMtdG9nZ2xlPVwib2ZmY2FudmFzXCIgZGF0YS1icy10YXJnZXQ9XCIjb2ZmY2FudmFzUmlnaHRcIlxyXG4gICAgICBhcmlhLWNvbnRyb2xzPVwib2ZmY2FudmFzUmlnaHRcIiAqbmdJZj1cImlzTW9iaWxlXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBbc2ltcG9Db2xvcl09XCJzaW1wb0NvbG9yXCI+bWVudTwvbWF0LWljb24+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlY29tUHJvZmlsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9nb1NlY3Rpb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2hlYWRlcjNUZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyMVwiPlxyXG4gICAgPGRpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvZ29TZWN0aW9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc01vYmlsZVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRWNvbW1lcmNlV2Vic2l0ZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdlTGlua3NUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlzRWNvbW1lcmNlV2Vic2l0ZSA/IGVjb21tZXJjZUJ1dHRvbnNUZW1wbGF0ZSA6IG51bGxcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIiFpc0Vjb21tZXJjZVdlYnNpdGUgPyBidXR0b25zVGVtcGxhdGUgOiBudWxsXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTE1IGFsaWduLWNlbnRlclwiIGRhdGEtYnMtdG9nZ2xlPVwib2ZmY2FudmFzXCIgZGF0YS1icy10YXJnZXQ9XCIjb2ZmY2FudmFzUmlnaHRcIlxyXG4gICAgICBhcmlhLWNvbnRyb2xzPVwib2ZmY2FudmFzUmlnaHRcIiAqbmdJZj1cImlzTW9iaWxlXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlY29tUHJvZmlsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxtYXQtaWNvbiBbc2ltcG9Db2xvcl09XCJzaW1wb0NvbG9yXCI+bWVudTwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjaGVhZGVyNFRlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWFkZXIxXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTW9iaWxlXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCIhaXNFY29tbWVyY2VXZWJzaXRlID8gYnV0dG9uc1RlbXBsYXRlIDogbnVsbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXNFY29tbWVyY2VXZWJzaXRlID8gZWNvbW1lcmNlQnV0dG9uc1RlbXBsYXRlIDogbnVsbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRWNvbW1lcmNlV2Vic2l0ZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdlTGlua3NUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj4gPC9uZy1jb250YWluZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xNSBhbGlnbi1jZW50ZXJcIiBkYXRhLWJzLXRvZ2dsZT1cIm9mZmNhbnZhc1wiIGRhdGEtYnMtdGFyZ2V0PVwiI29mZmNhbnZhc1JpZ2h0XCJcclxuICAgICAgYXJpYS1jb250cm9scz1cIm9mZmNhbnZhc1JpZ2h0XCIgKm5nSWY9XCJpc01vYmlsZVwiPlxyXG4gICAgICA8bWF0LWljb24gW3NpbXBvQ29sb3JdPVwic2ltcG9Db2xvclwiPm1lbnU8L21hdC1pY29uPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZWNvbVByb2ZpbGVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmRcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvZ29TZWN0aW9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbG9nb1NlY3Rpb25UZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGFsaWduLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwiIWNvbnRlbnQ/LmxvZ28/LmlzSW1hZ2UgfHwgIWNvbnRlbnQ/LmxvZ28/LmltYWdlPy51cmxcIlxyXG4gICAgKGNsaWNrKT1cIiFlZGl0ID8gZ29Ub0hvbWUoKSA6ICcnXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiY29udGVudD8ubG9nbz8udGV4dD8uaXNJY29uICYmIGNvbnRlbnQ/LmxvZ28/LnRleHQ/LnVybFwiPlxyXG4gICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgW3NyY109XCJjb250ZW50Py5sb2dvPy50ZXh0Py51cmxcIiBhbHQ9XCJsb2dvXCIgW3dpZHRoXT1cImNvbnRlbnQ/LmxvZ28/LnNpemVcIiBsb2FkaW5nPVwibGF6eVwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZy1zbWFsbFwiICpuZ0lmPVwiY29udGVudD8ubG9nbz8udGV4dD8uaXNUZXh0XCIgW3NpbXBvQ29sb3JdPVwic2ltcG9Db2xvclwiPlxyXG4gICAgICA8YiBbbmdTdHlsZV09XCJ7J2ZvbnQtZmFtaWx5JzogY29udGVudD8ubG9nbz8udGV4dD8uZm9udEZhbWlseX1cIj57e2NvbnRlbnQ/LnNpdGVOYW1lPy52YWx1ZX19PC9iPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGFsaWduLWl0ZW1zLWxnLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwiY29udGVudD8ubG9nbz8uaXNJbWFnZSAmJiBjb250ZW50Py5sb2dvPy5pbWFnZT8udXJsXCIgKGNsaWNrKT1cImdvVG9Ib21lKClcIj4gLS0+XHJcbiAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwiY29udGVudD8ubG9nbz8uaW1hZ2U/LnVybFwiIGFsdD1cImxvZ29cIlxyXG4gICAgW3N0eWxlLndpZHRoLiVdPVwic2NyZWVuV2lkdGggPiA0NzUgfHwgKGNvbnRlbnQ/LmxvZ28/LnNpemUgfHwgMTApIDwgNTAgPyBjb250ZW50Py5sb2dvPy5zaXplIDogKChjb250ZW50Py5sb2dvPy5zaXplIHx8IDEwKSAtIDEwKVwiXHJcbiAgICBsb2FkaW5nPVwibGF6eVwiICpuZ0lmPVwiY29udGVudD8ubG9nbz8uaXNJbWFnZSAmJiBjb250ZW50Py5sb2dvPy5pbWFnZT8udXJsXCIgKGNsaWNrKT1cIiFlZGl0ID8gZ29Ub0hvbWUoKSA6ICcnXCI+XHJcbiAgPCEtLSA8L2Rpdj4gLS0+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3BhZ2VMaW5rc1RlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJuYXZiYXItbmF2IHBhZ2VMaW5rc1wiIFtuZ0NsYXNzXT1cInsnYWxpZ24taXRlbXMtY2VudGVyJyA6ICFpc01vYmlsZX1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTNcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7J2ZsZXgtY29sdW1uJzogaXNNb2JpbGUsICdhbGlnbi1pdGVtcy1jZW50ZXInIDogIWlzTW9iaWxlLCAnbW9iaWxlLXBhZ2UtbGlzdCc6IGlzTW9iaWxlfVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldE5hdmJhckJ1dHRvblwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnNob3dIZWFkZXJcIj5cclxuICAgICAgICAgIDxzaW1wby1uYXZiYXItYnV0dG9uLWVsZW1lbnQgW2J1dHRvbkRhdGFdPVwiaXRlbVwiIFtzZWxlY3RlZFN0eWxlXT1cInN0eWxlPy5uYXZpZ2F0aW9uU3R5bGVcIlxyXG4gICAgICAgICAgICBbYnV0dG9uU3R5bGVdPVwic3R5bGU/Lm5hdmJhckJ1dHRvblN0eWxlXCIgW2JnQ29sb3JdPVwic2ltcG9Db2xvclwiIFthY2NlbnRDb2xvcl09XCJhY2NlbnRDb2xvclwiXHJcbiAgICAgICAgICAgIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIj48L3NpbXBvLW5hdmJhci1idXR0b24tZWxlbWVudD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsaW5rIG9mIGdldERyb3Bkb3duTGlua3M7IGxldCBpZHggPSBpbmRleFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudD8uZWNvbWxpbmtzPy5bbGlua10/Lmxlbmd0aCBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwibWF0LWJ0biBkcm9wZG93bi10b2dnbGUgY2F0ZWdvcnktYnRuXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIFtzaW1wb0NvbG9yXT1cInNpbXBvQ29sb3JcIiBpZD1cImxpbmtcIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAge3tsaW5rIHwgbG93ZXJjYXNlIHwgdGl0bGVjYXNlfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJsaW5rXCI+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiICpuZ0Zvcj1cImxldCBtZW51IG9mIGdldFZhbHVlcyhjb250ZW50Py5lY29tbGlua3M/LltsaW5rXSlcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlcihtZW51LCBsaW5rKVwiPnt7bWVudX19PC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2J1dHRvbnNUZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9uPy5kaXNwbGF5XCIgY2xhc3M9XCJidXR0b24tZGlzcGxheSBtdC0wXCIgW25nQ2xhc3NdPVwieyd3LTEwMCBqdXN0aWZ5LXNwYWNlLWFyb3VuZCc6IGlzTW9iaWxlfVwiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidXR0b24gb2YgYWN0aW9uPy5idXR0b25zXCI+XHJcbiAgICAgICAgPGFwcC1idXR0b24tZWxlbWVudCBbYnV0dG9uQ29udGVudF09XCJidXR0b24uY29udGVudFwiIFtidXR0b25TdHlsZV09XCJidXR0b24uc3R5bGVzXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgICAgICBbZWRpdF09XCJlZGl0XCIgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbYnV0dG9uSWRdPVwiYnV0dG9uLmlkXCJcclxuICAgICAgICAgIFtiYWNrZ3JvdW5kSW5mb109XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIj48L2FwcC1idXR0b24tZWxlbWVudD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGF0aWNfbG9naW5fYnRuIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICBMb2dpblxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCIyN1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgZD1cIk0xMi4xMiAxMi43OEMxMi4wNSAxMi43NyAxMS45NiAxMi43NyAxMS44OCAxMi43OEMxMC4xMiAxMi43MiA4LjcxOTk3IDExLjI4IDguNzE5OTcgOS41MDk5OEM4LjcxOTk3IDcuNjk5OTggMTAuMTggNi4yMjk5OCAxMiA2LjIyOTk4QzEzLjgxIDYuMjI5OTggMTUuMjggNy42OTk5OCAxNS4yOCA5LjUwOTk4QzE1LjI3IDExLjI4IDEzLjg4IDEyLjcyIDEyLjEyIDEyLjc4WlwiXHJcbiAgICAgICAgICAgIGZpbGw9XCIjMjkyRDMyXCIgc3Ryb2tlPVwiIzI5MkQzMlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTE4Ljc0IDE5LjM4QzE2Ljk2IDIxLjAxIDE0LjYgMjIgMTIgMjJDOS40MDAwMSAyMiA3LjA0MDAxIDIxLjAxIDUuMjYwMDEgMTkuMzhDNS4zNjAwMSAxOC40NCA1Ljk2MDAxIDE3LjUyIDcuMDMwMDEgMTYuOEM5Ljc3MDAxIDE0Ljk4IDE0LjI1IDE0Ljk4IDE2Ljk3IDE2LjhDMTguMDQgMTcuNTIgMTguNjQgMTguNDQgMTguNzQgMTkuMzhaXCJcclxuICAgICAgICAgICAgZmlsbD1cIiMyOTJEMzJcIiBzdHJva2U9XCIjMjkyRDMyXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMTIgMjJDMTcuNTIyOCAyMiAyMiAxNy41MjI4IDIyIDEyQzIyIDYuNDc3MTUgMTcuNTIyOCAyIDEyIDJDNi40NzcxNSAyIDIgNi40NzcxNSAyIDEyQzIgMTcuNTIyOCA2LjQ3NzE1IDIyIDEyIDIyWlwiXHJcbiAgICAgICAgICAgIHN0cm9rZT1cIiMyOTJEMzJcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxidXR0b24gY2xhc3M9XCJtb2JpbGVMb2dpbkJ1dHRvblwiICpuZ0lmPVwiaXNFY29tbWVyY2VXZWJzaXRlICYmIGlzTW9iaWxlICYmICFsb2dnZWRJblwiXHJcbiAgICBbc3R5bGUuYm9yZGVyXT1cIicxcHggc29saWQnICsgYWNjZW50Q29sb3JcIiBbc3R5bGUuY29sb3JdPVwiYWNjZW50Q29sb3JcIiAoY2xpY2spPVwiZ29Ub0FjY291bnQoJ0xPR0lOJylcIj5Mb2dpbjwvYnV0dG9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNtb2JpbGVGb290ZXJUZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwibW9iaWxlLWZvb3RlclwiIFtzaW1wb0JhY2tncm91bmRdPVwiYmFja2dyb3VuZEluZm9cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJnb1RvSG9tZSgpXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBbc2ltcG9Db2xvcl09XCJzaW1wb0NvbG9yXCI+aG9tZTwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuIFtzaW1wb0NvbG9yXT1cInNpbXBvQ29sb3JcIj5Ib21lPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwic2VhcmNoUHJvZHVjdHMoKVwiPlxyXG4gICAgICA8bWF0LWljb24gW3NpbXBvQ29sb3JdPVwic2ltcG9Db2xvclwiPmdyaWRfb248L21hdC1pY29uPlxyXG4gICAgICA8c3BhbiBbc2ltcG9Db2xvcl09XCJzaW1wb0NvbG9yXCI+U2hvcDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cImdvVG9XaXNobGlzdCgpXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBbc2ltcG9Db2xvcl09XCJzaW1wb0NvbG9yXCI+ZmF2b3JpdGVfYm9yZGVyPC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4gW3NpbXBvQ29sb3JdPVwic2ltcG9Db2xvclwiPldpc2hsaXN0PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWNvbnMgcG9zaXRpb24tcmVsYXRpdmVcIiAoY2xpY2spPVwiZ29Ub0NhcnQoKVwiPlxyXG4gICAgICA8bWF0LWljb24gW3NpbXBvQ29sb3JdPVwic2ltcG9Db2xvclwiPnNob3BwaW5nX2NhcnQ8L21hdC1pY29uPlxyXG4gICAgICA8c3BhbiBbc2ltcG9Db2xvcl09XCJzaW1wb0NvbG9yXCI+Q2FydDwvc3Bhbj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGNhcnRJdGVtQ291bnRcIiAqbmdJZj1cImdldENhcnRJdGVtc0NvdW50XCI+e3tnZXRDYXJ0SXRlbXNDb3VudH19PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZWNvbW1lcmNlQnV0dG9uc1RlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwci0wIGQtZmxleCBwb3NpdGlvbi1yZWxhdGl2ZSBnYXAtMTAgdy0xMDBcIlxyXG4gICAgW3N0eWxlLmZsZXhEaXJlY3Rpb25dPVwic3R5bGU/LnN0eWxpbmcgPT09ICdIZWFkZXIyJyB8fCBzdHlsZT8uc3R5bGluZyA9PT0gJ0hlYWRlcjQnID8gJ3Jvdy1yZXZlcnNlJyA6ICcnXCI+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJzZWFyY2gtaWNvblwiIChjbGljayk9XCJzaG93U2VhcmNoQmFyID0gIXNob3dTZWFyY2hCYXJcIj5cclxuICAgICAgPG1hdC1pY29uIFtzdHlsZS5jb2xvcl09XCJhY2NlbnRDb2xvclwiPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwidy03NSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTc1IG1sLTJcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFByb2R1Y3RcIiBhcmlhLWxhYmVsPVwiU2VhcmNoIFByb2R1Y3RcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgKG5nTW9kZWxDaGFuZ2UpPVwid2FpdEJlZm9yZVNlYXJjaCgpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsnYm9yZGVyJyA6ICcxcHggc29saWQgJyArIGFjY2VudENvbG9yfVwiIFtzdHlsZS5jb2xvcl09XCJhY2NlbnRDb2xvclwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImgtMTAwXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZCcgOiBzdHlsZT8uYmFja2dyb3VuZD8uYWNjZW50QmFja2dyb3VuZFR5cGUgPT0gJ1NvbGlkJyA/ICAgYWNjZW50Q29sb3IgOiAnbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCcgKyBzdHlsZT8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3IgKyAnIDAlJyArICcsJyArIHN0eWxlPy5iYWNrZ3JvdW5kPy5zZWNvbmRhcnlBY2NlbnRDb2xvciArJyAxMDAlJyArICcpJ31cIlxyXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInN0eWxlPy5iYWNrZ3JvdW5kPy5jb2xvclwiPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGFsaWduLWl0ZW1zLWNlbnRlciBweS0xIHB4LTMgYi0xIHN0b3Jlc1wiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCJhY2NlbnRDb2xvclwiXHJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9TY2hlbWVzKClcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJnZXRSR0JBKGFjY2VudENvbG9yICwgMTApXCIgKm5nSWY9XCJzY2hlbWVBdmFpbGFibGVcIj5cclxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxyXG4gICAgICAgICAgeG1sbnM6c3ZnanM9XCJodHRwOi8vc3ZnanMuZGV2L3N2Z2pzXCIgaWQ9XCJMYXllcl8yXCIgdmlld0JveD1cIjAgMCA2MCA2MFwiIGRhdGEtbmFtZT1cIkxheWVyIDJcIiB3aWR0aD1cIjMwXCJcclxuICAgICAgICAgIGhlaWdodD1cIjMwXCIgdmVyc2lvbj1cIjEuMVwiPlxyXG4gICAgICAgICAgPGcgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIHRyYW5zZm9ybT1cIm1hdHJpeCgxLDAsMCwxLDAsMClcIj5cclxuICAgICAgICAgICAgPHBhdGggZD1cIm0xNC4zNiA0Ni42Ni41MS05Ljg2LTExLjkzLTcuMTYtMS45NCA4LjQzelwiIFthdHRyLmZpbGxdPVwiYWNjZW50Q29sb3JcIiBmaWxsLW9wYWNpdHk9XCIxXCJcclxuICAgICAgICAgICAgICBkYXRhLW9yaWdpbmFsLWNvbG9yPVwiIzAwMDAwMGZmXCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS1vcGFjaXR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgZD1cIm0xNy4xNyAzOC4xczAtLjAyLjAyLS4wM2MwIDAgMC0uMDIuMDItLjAyLjA0LS4wNS4xLS4wOC4xNS0uMTEuMDItLjAxLjAzLS4wMy4wNS0uMDRsNC42Ni0xLjk0aC0uMDJzLTEuODctMS4yMS0xLjg3LTEuMjFsLTMuMTggMS41Ny0xLjA3LjUzLS40MyA4LjMyIDEuNTgtNi45Yy4wMS0uMDYuMDUtLjEyLjA5LS4xN3pcIlxyXG4gICAgICAgICAgICAgIFthdHRyLmZpbGxdPVwiYWNjZW50Q29sb3JcIiBmaWxsLW9wYWNpdHk9XCIxXCIgZGF0YS1vcmlnaW5hbC1jb2xvcj1cIiMwMDAwMDBmZlwiIHN0cm9rZT1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1vcGFjaXR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJtMTkuMTQgMzQuMDgtNi4yNy00LjA0Yy0uMTktLjEyLS4yOC0uMzQtLjIzLS41NmwxLjA4LTQuNzItOS45NiA0LjE0IDExLjY4IDcuMDF6XCJcclxuICAgICAgICAgICAgICBbYXR0ci5maWxsXT1cImFjY2VudENvbG9yXCIgZmlsbC1vcGFjaXR5PVwiMVwiIGRhdGEtb3JpZ2luYWwtY29sb3I9XCIjMDAwMDAwZmZcIiBzdHJva2U9XCJub25lXCJcclxuICAgICAgICAgICAgICBzdHJva2Utb3BhY2l0eT1cIjFcIiAvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwibTMwLjkzIDQ2LjQyLS41IDkuNzkgMzIuNTctMTguNjctMS4yMS02LjQtMjMuMTYgMTEuNDZ6XCIgW2F0dHIuZmlsbF09XCJhY2NlbnRDb2xvclwiIGZpbGwtb3BhY2l0eT1cIjFcIlxyXG4gICAgICAgICAgICAgIGRhdGEtb3JpZ2luYWwtY29sb3I9XCIjMDAwMDAwZmZcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLW9wYWNpdHk9XCIxXCIgLz5cclxuICAgICAgICAgICAgPHBhdGggZD1cIm0xNiA0Ny42NSAxMy4zOCA4LjU4LjQ5LTkuODYtMTEuOTMtNy4xN3pcIiBbYXR0ci5maWxsXT1cImFjY2VudENvbG9yXCIgZmlsbC1vcGFjaXR5PVwiMVwiXHJcbiAgICAgICAgICAgICAgZGF0YS1vcmlnaW5hbC1jb2xvcj1cIiMwMDAwMDBmZlwiIHN0cm9rZT1cIm5vbmVcIiBzdHJva2Utb3BhY2l0eT1cIjFcIiAvPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgIGQ9XCJtMjcuODUgMzkuMzRzMCAwLS4wMSAwYzAgMCAwIDAtLjAxIDAtLjA4LjA0LS4xNi4wNi0uMjQuMDYtLjA1IDAtLjEtLjAzLS4xNS0uMDQtLjA0LS4wMS0uMDgtLjAxLS4xMS0uMDNsLTQuMTYtMi42Ny00LjM3IDEuODIgMTEuNjggNy4wMSAzMC40LTE1LjA1LTEwLjcxLTMuODgtMjIuMjggMTIuNzh6XCJcclxuICAgICAgICAgICAgICBbYXR0ci5maWxsXT1cImFjY2VudENvbG9yXCIgZmlsbC1vcGFjaXR5PVwiMVwiIGRhdGEtb3JpZ2luYWwtY29sb3I9XCIjMDAwMDAwZmZcIiBzdHJva2U9XCJub25lXCJcclxuICAgICAgICAgICAgICBzdHJva2Utb3BhY2l0eT1cIjFcIiAvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwibTI4LjI2IDM2LjAxLS4xIDEuOTMgMzIuNTgtMTguNjktMS4yMi02LjM5LTMwLjg2IDE1LjI4elwiIFthdHRyLmZpbGxdPVwiYWNjZW50Q29sb3JcIiBmaWxsLW9wYWNpdHk9XCIxXCJcclxuICAgICAgICAgICAgICBkYXRhLW9yaWdpbmFsLWNvbG9yPVwiIzAwMDAwMGZmXCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS1vcGFjaXR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJtMjcuNjEgMjguMDktMTEuOTMtNy4xNi0xLjk0IDguNDMgMTMuMzYgOC41OHpcIiBbYXR0ci5maWxsXT1cImFjY2VudENvbG9yXCIgZmlsbC1vcGFjaXR5PVwiMVwiXHJcbiAgICAgICAgICAgICAgZGF0YS1vcmlnaW5hbC1jb2xvcj1cIiMwMDAwMDBmZlwiIHN0cm9rZT1cIm5vbmVcIiBzdHJva2Utb3BhY2l0eT1cIjFcIiAvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwibTU4LjU3IDEyLjE1LTEyLjEtNC4zOC0yOS45NyAxMi40MyAxMS42OCA3elwiIFthdHRyLmZpbGxdPVwiYWNjZW50Q29sb3JcIiBmaWxsLW9wYWNpdHk9XCIxXCJcclxuICAgICAgICAgICAgICBkYXRhLW9yaWdpbmFsLWNvbG9yPVwiIzAwMDAwMGZmXCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS1vcGFjaXR5PVwiMVwiIC8+XHJcbiAgICAgICAgICA8L2c+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPGRpdiBbc3R5bGUuY29sb3JdPVwiYWNjZW50Q29sb3JcIj5TY2hlbWVzPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RvcmVzIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcHktMiBweC0zXCIgKGNsaWNrKT1cImdvVG9TdG9yZXMoKVwiXHJcbiAgICAgICAgW3N0eWxlLmJvcmRlckNvbG9yXT1cImFjY2VudENvbG9yXCIgKm5nSWY9XCJzdG9yZUF2YWlhYmxlXCIgW3N0eWxlLmJhY2tncm91bmRdPVwiZ2V0UkdCQShhY2NlbnRDb2xvciAsIDEwKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBbc3R5bGUuY29sb3JdPVwiYWNjZW50Q29sb3JcIj5zdG9yZTwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gW3N0eWxlLmNvbG9yXT1cImFjY2VudENvbG9yXCI+U3RvcmVzPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBpbi10ZXh0XCIgKG1vdXNlZW50ZXIpPVwic2hvd1BpbmNvZGVJbnB1dCA9IHRydWU7c2hvd0xvZ2luID0gZmFsc2VcIiBbc3R5bGUuY29sb3JdPVwiYWNjZW50Q29sb3JcIlxyXG4gICAgICAgICpuZ0lmPVwiIWdldFBpbmNvZGVcIj5FbnRlclxyXG4gICAgICAgIFBpbmNvZGVcclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwaW4tdGV4dFwiIChtb3VzZWVudGVyKT1cInNob3dQaW5jb2RlSW5wdXQgPSB0cnVlOztzaG93TG9naW4gPSBmYWxzZVwiIFtzdHlsZS5jb2xvcl09XCJhY2NlbnRDb2xvclwiXHJcbiAgICAgICAgKm5nSWY9XCJnZXRQaW5jb2RlICYmIGdldFBpbmNvZGUubGVuZ3RoID09IDZcIj57e1wiRGVsaXZlcmluZyB0bzogXCIgKyBnZXRQaW5jb2RlfX08L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gKG1vdXNlbGVhdmUpPVwic2hvd1BpbmNvZGVJbnB1dCA9IGZhbHNlXCIgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwaW5jb2RlLWNvbnRhaW5lciBwLTNcIiAqbmdJZj1cInNob3dQaW5jb2RlSW5wdXRcIiAobW91c2VsZWF2ZSk9XCJzaG93UGluY29kZUlucHV0ID0gZmFsc2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dCB0ZXh0LWNlbnRlciBtYi0yIGYtMTggZnctYm9sZFwiPlxyXG4gICAgICAgICAgWW91ciBQSU4gQ29kZSB1bmxvY2tzXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi10ZXh0IHRleHQtY2VudGVyIGYtMTQgcGluY29kZS10ZXh0XCI+XHJcbiAgICAgICAgICBGYXN0ZXN0IGRlbGl2ZXJ5IGRhdGUsIFRyeS1hdC1Ib21lIGF2YWlsYWJpbGl0eSxcclxuICAgICAgICAgIE5lYXJlc3Qgc3RvcmUgYW5kIEluLXN0b3JlIGRlc2lnbiFcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbXQtMiBici01IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gcHgtM1wiXHJcbiAgICAgICAgICBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cInBpbkVycm9yXCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiUGluY29kZVwiIGFyaWEtbGFiZWw9XCJQaW5jb2RlXCIgWyhuZ01vZGVsKV09XCJwaW5jb2RlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ3LTc1IHAtMFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXN1Yi10ZXh0IGYtMTEgdy0yNSB0ZXh0LWVuZCBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzZXRQaW5jb2RlKClcIj5TVUJNSVQ8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdGFydCBtdC0yIGYtMTFcIiAqbmdJZj1cInBpbkVycm9yXCI+XHJcbiAgICAgICAgICBQbGVhc2UgZW50ZXIgYSB2YWxpZCBwaW5jb2RlXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwiZ2FwOiA1cHg7IGN1cnNvcjogcG9pbnRlcjtcIiAoY2xpY2spPVwiZ29Ub0ZhdigpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIFtzaW1wb0NvbG9yXT1cInN0eWxlPy5iYWNrZ3JvdW5kPy5jb2xvclwiPmZhdm9yaXRlPC9tYXQtaWNvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlXCIgc3R5bGU9XCJnYXA6IDVweDsgY3Vyc29yOiBwb2ludGVyO1wiIChjbGljayk9XCJnb1RvQ2FydCgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIFtzaW1wb0NvbG9yXT1cInN0eWxlPy5iYWNrZ3JvdW5kPy5jb2xvclwiPnNob3BwaW5nX2NhcnQ8L21hdC1pY29uPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBjYXJ0SXRlbUNvdW50XCIgKm5nSWY9XCJnZXRDYXJ0SXRlbXNDb3VudFwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQnIDogc3R5bGU/LmJhY2tncm91bmQ/LmFjY2VudEJhY2tncm91bmRUeXBlID09ICdTb2xpZCcgPyAgIGFjY2VudENvbG9yIDogJ2xpbmVhci1ncmFkaWVudCh0byByaWdodCwnICsgc3R5bGU/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yICsgJyAwJScgKyAnLCcgKyBzdHlsZT8uYmFja2dyb3VuZD8uc2Vjb25kYXJ5QWNjZW50Q29sb3IgKycgMTAwJScgKyAnKScgLCAnY29sb3InIDogc2V0Q29sb3IoKX1cIj5cclxuICAgICAgICAgIHt7Z2V0Q2FydEl0ZW1zQ291bnR9fTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxvZ2luQnV0dG9uXCIgKm5nSWY9XCIhbG9nZ2VkSW5cIiAobW91c2VlbnRlcik9XCJzaG93TG9naW4gPSB0cnVlO3Nob3dQaW5jb2RlSW5wdXQgPSBmYWxzZVwiPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCIyN1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgZD1cIk0xMi4xMiAxMi43OEMxMi4wNSAxMi43NyAxMS45NiAxMi43NyAxMS44OCAxMi43OEMxMC4xMiAxMi43MiA4LjcxOTk3IDExLjI4IDguNzE5OTcgOS41MDk5OEM4LjcxOTk3IDcuNjk5OTggMTAuMTggNi4yMjk5OCAxMiA2LjIyOTk4QzEzLjgxIDYuMjI5OTggMTUuMjggNy42OTk5OCAxNS4yOCA5LjUwOTk4QzE1LjI3IDExLjI4IDEzLjg4IDEyLjcyIDEyLjEyIDEyLjc4WlwiXHJcbiAgICAgICAgICAgIGZpbGw9XCIjMjkyRDMyXCIgc3Ryb2tlPVwiIzI5MkQzMlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTE4Ljc0IDE5LjM4QzE2Ljk2IDIxLjAxIDE0LjYgMjIgMTIgMjJDOS40MDAwMSAyMiA3LjA0MDAxIDIxLjAxIDUuMjYwMDEgMTkuMzhDNS4zNjAwMSAxOC40NCA1Ljk2MDAxIDE3LjUyIDcuMDMwMDEgMTYuOEM5Ljc3MDAxIDE0Ljk4IDE0LjI1IDE0Ljk4IDE2Ljk3IDE2LjhDMTguMDQgMTcuNTIgMTguNjQgMTguNDQgMTguNzQgMTkuMzhaXCJcclxuICAgICAgICAgICAgZmlsbD1cIiMyOTJEMzJcIiBzdHJva2U9XCIjMjkyRDMyXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMTIgMjJDMTcuNTIyOCAyMiAyMiAxNy41MjI4IDIyIDEyQzIyIDYuNDc3MTUgMTcuNTIyOCAyIDEyIDJDNi40NzcxNSAyIDIgNi40NzcxNSAyIDEyQzIgMTcuNTIyOCA2LjQ3NzE1IDIyIDEyIDIyWlwiXHJcbiAgICAgICAgICAgIHN0cm9rZT1cIiMyOTJEMzJcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgIDwvc3ZnPiA8IS0tIDxzcGFuIGNsYXNzPVwiZnctbm9ybWFsIGZzLTZcIiBbc2ltcG9Db2xvcl09XCJhY2NlbnRDb2xvclwiPkxvZ2luPC9zcGFuPiAtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gKG1vdXNlbGVhdmUpPVwic2hvd0xvZ2luID0gZmFsc2VcIiAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImluZm8tY29udGFpbmVyIHAtM1wiICpuZ0lmPVwic2hvd0xvZ2luXCIgKG1vdXNlbGVhdmUpPVwic2hvd0xvZ2luID0gZmFsc2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dCB0ZXh0LWNlbnRlciBtYi0yIGYtMTggZnctYm9sZFwiPlxyXG4gICAgICAgICAgWW91ciBBY2NvdW50XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi10ZXh0IHRleHQtY2VudGVyIGYtMTRcIj5cclxuICAgICAgICAgIEFjY2VzcyBhY2NvdW50ICYgbWFuYWdlIHlvdXIgb3JkZXJzLlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tY29udGFpbmVyIHctMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC0zIGdhcC0zXCI+XHJcbiAgICAgICAgICA8ZGl2IChjbGljayk9XCJnb1RvQWNjb3VudCgnU0lHTlVQJylcIiBjbGFzcz1cInctNTAgdGV4dC1jZW50ZXIgc2lnbi1idG4gYm9yZGVyLTBcIlxyXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQnIDogc3R5bGU/LmJhY2tncm91bmQ/LmFjY2VudEJhY2tncm91bmRUeXBlID09ICdTb2xpZCcgPyAgIGFjY2VudENvbG9yIDogJ2xpbmVhci1ncmFkaWVudCh0byByaWdodCwnICsgc3R5bGU/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yICsgJyAwJScgKyAnLCcgKyBzdHlsZT8uYmFja2dyb3VuZD8uc2Vjb25kYXJ5QWNjZW50Q29sb3IgKycgMTAwJScgKyAnKSd9XCJcclxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInN0eWxlPy5iYWNrZ3JvdW5kPy5jb2xvclwiPlNpZ24gVXA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImdvVG9BY2NvdW50KCdMT0dJTicpXCIgY2xhc3M9XCJ3LTUwIHRleHQtY2VudGVyIHNpZ24tYnRuXCIgW3N0eWxlLmJvcmRlckNvbG9yXT1cImFjY2VudENvbG9yXCJcclxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImFjY2VudENvbG9yXCI+TG9nIEluPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwiZ2FwOiA4cHg7IGN1cnNvcjogcG9pbnRlcjtcIiAoY2xpY2spPVwiZ29Ub0FjY291bnQoJ1BST0ZJTEUnKVwiXHJcbiAgICAgICAgKm5nSWY9XCJsb2dnZWRJblwiPlxyXG4gICAgICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiBbc3JjXT1cInVzZXJHZW5kZXIgfCBnZW5kZXJJY29uXCIgc3R5bGU9XCJoZWlnaHQ6IDI3cHg7XCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIDxkaXY+IC0tPlxyXG4gICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImdvVG9BY2NvdW50KClcIiBzaW1wb0J1dHRvbkRpcmVjdGl2ZSBbaWRdPVwic2VjdGlvbklkK2J1dHRvbklkXCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvblN0eWxlXCIgW2NvbG9yXT1cImNvbG9yXCIgW2FwcEJ1dHRvbkVkaXRvcl09XCJlZGl0ID8/IGZhbHNlXCIgW2J1dHRvbkRhdGFdPVwiYnV0dG9uQ29udGVudFwiPnt7YnV0dG9uQ29udGVudD8ubGFiZWx9fTwvYnV0dG9uPiAtLT5cclxuICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNuYXZiYXJMaW5rc1RlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJuYXZiYXItY29sbGFwc2UgZnMtNiBwb3NpdGlvbi1yZWxhdGl2ZSBkLWZsZXhcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDVweDsgbWFyZ2luLWxlZnQ6IDI1cHg7XCJcclxuICAgIFtzaW1wb0NvbG9yXT1cInNpbXBvQ29sb3JcIiAqbmdJZj1cInNjcmVlbldpZHRoID4gNzY4XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldE5hdmJhckJ1dHRvblwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5zaG93SGVhZGVyXCI+XHJcbiAgICAgICAgPHNpbXBvLW5hdmJhci1idXR0b24tZWxlbWVudCBbYnV0dG9uRGF0YV09XCJpdGVtXCIgW3NlbGVjdGVkU3R5bGVdPVwic3R5bGU/Lm5hdmlnYXRpb25TdHlsZVwiXHJcbiAgICAgICAgICBbYnV0dG9uU3R5bGVdPVwic3R5bGU/Lm5hdmJhckJ1dHRvblN0eWxlXCIgW2JnQ29sb3JdPVwic2ltcG9Db2xvclwiXHJcbiAgICAgICAgICBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCI+PC9zaW1wby1uYXZiYXItYnV0dG9uLWVsZW1lbnQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGluayBvZiBnZXREcm9wZG93bkxpbmtzOyBsZXQgaWR4ID0gaW5kZXhcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnQ/LmVjb21saW5rcz8uW2xpbmtdPy5sZW5ndGggXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cIm1hdC1idG4gZHJvcGRvd24tdG9nZ2xlXCIgdHlwZT1cImJ1dHRvblwiIFtzaW1wb0NvbG9yXT1cInNpbXBvQ29sb3JcIiBpZD1cImxpbmtcIlxyXG4gICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAge3tsaW5rIHwgdXBwZXJjYXNlfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJsaW5rXCI+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiICpuZ0Zvcj1cImxldCBtZW51IG9mIGdldFZhbHVlcyhjb250ZW50Py5lY29tbGlua3M/LltsaW5rXSlcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlcihtZW51LCBsaW5rKVwiPnt7bWVudX19PC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48ZGl2IGNsYXNzPVwib2ZmY2FudmFzIG9mZmNhbnZhcy1lbmRcIiB0YWJpbmRleD1cIi0xXCIgaWQ9XCJvZmZjYW52YXNSaWdodFwiIGFyaWEtbGFiZWxsZWRieT1cIm9mZmNhbnZhc1JpZ2h0TGFiZWxcIlxyXG4gIFtuZ0NsYXNzXT1cInsnb2ZmY2FudmFzLWVuZCcgOiBzdHlsZT8uc3R5bGluZyA9PT0gJ0hlYWRlcjEnIHx8IHN0eWxlPy5zdHlsaW5nID09PSAnSGVhZGVyMycsICdvZmZjYW52YXMtc3RhcnQnOiBzdHlsZT8uc3R5bGluZyA9PT0gJ0hlYWRlcjInIHx8IHN0eWxlPy5zdHlsaW5nID09PSAnSGVhZGVyNCd9XCI+XHJcbiAgPGRpdiBjbGFzcz1cIm9mZmNhbnZhcy1oZWFkZXJcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2JpbGVMb2dvU2VjdGlvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPiAtLT5cclxuICAgIDxtYXQtaWNvbiBkYXRhLWJzLWRpc21pc3M9XCJvZmZjYW52YXNcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm9mZmNhbnZhcy1ib2R5XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFnZXNcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VMaW5rc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwib2ZmY2FudmFzLWZvb3RlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhbnZhcy1idXR0b25cIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNlY29tUHJvZmlsZVRlbXBsYXRlPlxyXG4gIDxtYXQtaWNvbiBjbGFzcz1cImgtMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBici01MCBmcy0xNiBweS0xXCJcclxuICAgIChjbGljayk9XCJzaG93U2VhcmNoQmFyTW9iaWxlID0gIXNob3dTZWFyY2hCYXJNb2JpbGVcIlxyXG4gICAgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kJyA6IHN0eWxlPy5iYWNrZ3JvdW5kPy5hY2NlbnRCYWNrZ3JvdW5kVHlwZSA9PSAnU29saWQnID8gICBhY2NlbnRDb2xvciA6ICdsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsJyArIHN0eWxlPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvciArICcgMCUnICsgJywnICsgc3R5bGU/LmJhY2tncm91bmQ/LnNlY29uZGFyeUFjY2VudENvbG9yICsnIDEwMCUnICsgJyknfVwiXHJcbiAgICBbc3R5bGUuY29sb3JdPVwic3R5bGU/LmJhY2tncm91bmQ/LmNvbG9yXCI+c2VhcmNoPC9tYXQtaWNvbj5cclxuXHJcblxyXG4gIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIG1vYi1mb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm9kdWN0XCIgYXJpYS1sYWJlbD1cIlNlYXJjaCBQcm9kdWN0XCJcclxuICAgICpuZ0lmPVwic2hvd1NlYXJjaEJhck1vYmlsZVwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIChuZ01vZGVsQ2hhbmdlKT1cIndhaXRCZWZvcmVTZWFyY2goKVwiXHJcbiAgICBbbmdTdHlsZV09XCJ7J2JvcmRlcicgOiAnMXB4IHNvbGlkICcgKyBhY2NlbnRDb2xvcn1cIj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImdhcDogOHB4OyBjdXJzb3I6IHBvaW50ZXI7XCIgKGNsaWNrKT1cImdvVG9BY2NvdW50KCdQUk9GSUxFJylcIlxyXG4gICAgKm5nSWY9XCJsb2dnZWRJblwiPlxyXG4gICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwidXNlckdlbmRlciB8IGdlbmRlckljb25cIiBzdHlsZT1cImhlaWdodDogMjdweDtcIj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbW9iaWxlTG9nb1NlY3Rpb25UZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGFsaWduLWNlbnRlciBjdXJzb3ItcG9pbnRlciBoLTEwMFwiXHJcbiAgICAqbmdJZj1cIiFjb250ZW50Py5sb2dvPy5pc0ltYWdlIHx8ICFjb250ZW50Py5sb2dvPy5pbWFnZT8udXJsXCIgKGNsaWNrKT1cIiFlZGl0ID8gZ29Ub0hvbWUoKSA6ICcnXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiY29udGVudD8ubG9nbz8udGV4dD8uaXNJY29uICYmIGNvbnRlbnQ/LmxvZ28/LnRleHQ/LnVybFwiIGNsYXNzPVwiaC0xMDBcIj5cclxuICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwiY29udGVudD8ubG9nbz8udGV4dD8udXJsXCIgYWx0PVwibG9nb1wiIGNsYXNzPVwiaC0xMDBcIj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRpbmctc21hbGxcIiAqbmdJZj1cImNvbnRlbnQ/LmxvZ28/LnRleHQ/LmlzVGV4dFwiIFtzaW1wb0NvbG9yXT1cInNpbXBvQ29sb3JcIj5cclxuICAgICAgPGIgW25nU3R5bGVdPVwieydmb250LWZhbWlseSc6IGNvbnRlbnQ/LmxvZ28/LnRleHQ/LmZvbnRGYW1pbHl9XCI+e3tjb250ZW50Py5zaXRlTmFtZT8udmFsdWV9fTwvYj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMyBhbGlnbi1pdGVtcy1sZy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cImNvbnRlbnQ/LmxvZ28/LmlzSW1hZ2UgJiYgY29udGVudD8ubG9nbz8uaW1hZ2U/LnVybFwiIChjbGljayk9XCJnb1RvSG9tZSgpXCI+IC0tPlxyXG4gIDxpbWcgW3NyY109XCJjb250ZW50Py5sb2dvPy5pbWFnZT8udXJsXCIgYWx0PVwibG9nb1wiIGNsYXNzPVwiaC0xMDBcIiBsb2FkaW5nPVwibGF6eVwiXHJcbiAgICAqbmdJZj1cImNvbnRlbnQ/LmxvZ28/LmlzSW1hZ2UgJiYgY29udGVudD8ubG9nbz8uaW1hZ2U/LnVybFwiIChjbGljayk9XCIhZWRpdCA/IGdvVG9Ib21lKCkgOiAnJ1wiPlxyXG4gIDwhLS0gPC9kaXY+IC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjYXRlZ29yaWVzSGVhZGVyPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXRlZ29yaWVzLWhlYWRlciBkLWZsZXggZ2FwLTMgIHB5LTIgcG9zaXRpb24tcmVsYXRpdmVcIiAqbmdJZj1cImNhdGVnb3J5TGlzdD8ubGVuZ3RoID4gMCAmJiAhaXNNb2JpbGVcIlxyXG4gICAgW3NwYWNpbmdIb3Jpem9udGFsXT1cInN0eWxlc0xheW91dFwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImRhdGE/LnN0eWxlcz8uaGVhZGxpbmU/LmNvbG9yXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnkgY3Vyc29yLXBvaW50ZXJcIiAqbmdGb3I9XCJsZXQgZWxlIG9mIGNhdGVnb3J5TGlzdDtsZXQgaSA9IGluZGV4XCJcclxuICAgICAgW3N0eWxlLi0tYm9yZGVyLWNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbc2ltcG9Db2xvcl09XCJkYXRhPy5zdHlsZXM/LmhlYWRsaW5lPy5jb2xvclwiXHJcbiAgICAgIChtb3VzZWVudGVyKT1cInNob3dMaXN0ID0gdHJ1ZTtzZWxlY3RlZENhdGVnb3J5ID0gZWxlO3Nob3dDb2xsZWN0aW9ucyA9IGZhbHNlXCI+XHJcbiAgICAgIHt7ZWxlPy5jYXRlZ29yeU5hbWUgfCB0aXRsZWNhc2V9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnkgY3Vyc29yLXBvaW50ZXJcIiAobW91c2VlbnRlcik9XCJzaG93Q29sbGVjdGlvbnMgPSB0cnVlO3Nob3dMaXN0ID0gZmFsc2VcIlxyXG4gICAgICAqbmdJZj1cImNvbGxlY3Rpb25MaXN0Py5jb2xsZWN0aW9ucz8ubGVuZ3RoID4gMFwiIFtzdHlsZS4tLWJvcmRlci1jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcclxuICAgICAgW3NpbXBvQ29sb3JdPVwiZGF0YT8uc3R5bGVzPy5oZWFkbGluZT8uY29sb3JcIj5cclxuICAgICAgQ29sbGVjdGlvbnNcclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gKG1vdXNlbGVhdmUpPVwic2hvd0xpc3QgPSBmYWxzZVwiIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93TGlzdFwiIGNsYXNzPVwibGlzdC1jYXRlZ29yeVwiIChtb3VzZWxlYXZlKT1cInNob3dMaXN0ID0gZmFsc2VcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgdy0xMDAgaC0xMDBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC03IHJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBoLTEwMFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeT8uYnlQcmljZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaGVhZGVyIG1iLTNcIj5CeSBQcmljZTwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMyBsaXN0LWl0ZW1cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcHJpY2Ugb2YgT2JqZWN0LmtleXMoc2VsZWN0ZWRDYXRlZ29yeT8uYnlQcmljZSlcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWFjaC1wcmljZSBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJUb0xpc3Qoc2VsZWN0ZWRDYXRlZ29yeT8uYnlQcmljZVtwcmljZV0sICdwcmljZScpXCI+XHJcbiAgICAgICAgICAgICAgICB7e3ByaWNlIHwgdGl0bGVjYXNlfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgaC0xMDAgb3ZlcmZsb3ctc2Nyb2xsXCJcclxuICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeT8uYnlTdHlsZSAmJiBzZWxlY3RlZENhdGVnb3J5Py5ieVN0eWxlPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1oZWFkZXIgbWItM1wiPkJ5IFN0eWxlPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0zIGxpc3QtaXRlbVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2xsZWN0aW9uIG9mIHNlbGVjdGVkQ2F0ZWdvcnk/LmJ5U3R5bGVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWFjaC1wcmljZSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhcHBseUZpbHRlclRvTGlzdChjb2xsZWN0aW9uLCAnY29sbGVjdGlvbicpXCI+e3tjb2xsZWN0aW9uXHJcbiAgICAgICAgICAgICAgICB8XHJcbiAgICAgICAgICAgICAgICB0aXRsZWNhc2V9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiICpuZ0lmPVwidG9TaG93SW5KZXdlbGxlcnlcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWhlYWRlciBtYi0zXCI+QnkgTWV0YWwgJiBTdG9uZTwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMyBsaXN0LWl0ZW1cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sbGVjdGlvbiBvZiBieU1ldGFsQW5kU3RvbmVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxNXB4O2hlaWdodDogMjBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImNvbGxlY3Rpb24uaW1hZ2VVcmxcIiBhbHQ9XCJcIiBjbGFzcz1cInctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlYWNoLXByaWNlIGN1cnNvci1wb2ludGVyXCI+e3tjb2xsZWN0aW9uLm5hbWVcclxuICAgICAgICAgICAgICAgICAgfFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZWNhc2V9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC01IGgtMTAwIHJvd1wiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeT8uaW1hZ2VVcmxzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW1hZ2Ugb2Ygc2VsZWN0ZWRDYXRlZ29yeT8uaW1hZ2VVcmxzICB8IHNsaWNlOjA6MjsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lciBoLTEwMCBjb2wtNlwiICpuZ0lmPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwiaW1hZ2VcIiBjbGFzcz1cImgtMTAwIHctMTAwXCIgKGNsaWNrKT1cImZpbHRlckJ5Q2F0ZWdvcnkoKVwiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSAobW91c2VsZWF2ZSk9XCJzaG93Q29sbGVjdGlvbnMgPSBmYWxzZVwiIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJsaXN0LWNhdGVnb3J5XCIgKm5nSWY9XCJzaG93Q29sbGVjdGlvbnNcIiAobW91c2VsZWF2ZSk9XCJzaG93Q29sbGVjdGlvbnMgPSBmYWxzZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyB3LTEwMCBoLTEwMFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgcm93XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uTGlzdD8uY29sbGVjdGlvbnNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsZWN0aW9uIHJvdyBjb2wtMyBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJUb0xpc3QoY29sbGVjdGlvbj8uY29sbGVjdGlvbk5hbWUsICdjb2xsZWN0aW9ucycpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtaW1hZyBjb2wtNFwiPlxyXG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCJjb2xsZWN0aW9uPy5pbWdVcmxbMF1cIiBhbHQ9XCJcIiBjbGFzcz1cInctMTAwXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggdGV4dC1vdmVyZmxvd1wiPlxyXG4gICAgICAgICAgICAgIHt7Y29sbGVjdGlvbj8uY29sbGVjdGlvbk5hbWUgfCB0aXRsZWNhc2V9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC01IGgtMTAwIHJvd1wiICpuZ0lmPVwiY29sbGVjdGlvbkxpc3Q/LmltYWdlVXJsc1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltYWdlIG9mIE9iamVjdC5rZXlzKGNvbGxlY3Rpb25MaXN0Py5pbWFnZVVybHMpIHwgc2xpY2U6MDoyOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyIGgtMTAwIGNvbC02ICBwb3NpdGlvbi1yZWxhdGl2ZVwiICpuZ0lmPVwiaW1hZ2VcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJUb0xpc3QoaW1hZ2UsICdjb2xsZWN0aW9ucycpXCI+XHJcbiAgICAgICAgICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiBbc3JjXT1cImNvbGxlY3Rpb25MaXN0Py5pbWFnZVVybHNbaW1hZ2VdXCIgY2xhc3M9XCJoLTEwMCB3LTEwMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcC0yIGJ0bS1jb2wtbmFtZSBwb3NpdGlvbi1hYnNvbHV0ZVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIFtzdHlsZS5jb2xvcl09XCJzZXRDb2xvcigpXCI+e3tpbWFnZX19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbW9iaWxlQ2F0ZWdvcnlIZWFkZXI+XHJcbiAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtaGVhZGVyIGQtZmxleCBnYXAtMyAgcHktMiBvdmVyZmxvdy1hdXRvXCIgKm5nSWY9XCJjYXRlZ29yeUxpc3Q/Lmxlbmd0aCA+IDAgJiYgaXNNb2JpbGVcIlxyXG4gICAgW3NwYWNpbmdIb3Jpem9udGFsXT1cInN0eWxlc0xheW91dFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5IGN1cnNvci1wb2ludGVyIGQtZmxleCBmbGV4LWNvbHVtbiBnYXAtM1wiICpuZ0Zvcj1cImxldCBlbGUgb2YgY2F0ZWdvcnlMaXN0O2xldCBpID0gaW5kZXhcIlxyXG4gICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIChjbGljayk9XCJzZWxlY3RlZENhdGVnb3J5ID0gZWxlOyBmaWx0ZXJCeUNhdGVnb3J5KClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhdC1pbWcgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cImVsZT8uaW1hZ2VVcmxzWzBdXCIgYWx0PVwiXCIgY2xhc3M9XCJoLTEwIGJyLTEyXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgZi0xNFwiPnt7ZWxlPy5jYXRlZ29yeU5hbWUgfCB0aXRsZWNhc2V9fTwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
|
412
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLXNlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZWN0aW9ucy9oZWFkZXItc2VjdGlvbi9oZWFkZXItc2VjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2hlYWRlci1zZWN0aW9uL2hlYWRlci1zZWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBOEMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3SSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDMUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBR3RILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMs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QUNwQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsMEJBQTBCO3dCQUMxQixtQkFBbUI7d0JBQ25CLG1CQUFtQjtxQkFDcEI7c1BBS1EsSUFBSTtzQkFBWixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUN1QixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFnRjNCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBd0N6QyxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEhlYWRlckNvbnRlbnRNb2RlbCwgSGVhZGVyU2VjdGlvbk1vZGVsLCBIZWFkZXJTdHlsZU1vZGVsIH0gZnJvbSAnLi9oZWFkZXItc2VjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNpbXBvQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvc2ltcG8tYnV0dG9uL3NpbXBvLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTb2NpYUljb25zQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvc29jaWEtaWNvbnMvc29jaWEtaWNvbnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBOYXZiYXJCdXR0b25FbGVtZW50Q29tcG9uZW50IH0gZnJvbSAnLi8uLi8uLi9lbGVtZW50cy9uYXZiYXItYnV0dG9uLWVsZW1lbnQvbmF2YmFyLWJ1dHRvbi1lbGVtZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFubmVyQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYW5uZXItY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQm9yZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JvcmRlci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29sdW1uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb250YWluZXJGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGFpbmVyLWZpci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBzaW1wb0NvbmV0ZW5BbGlnbm1lbnREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1hbGlnbm1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0Zvb3RlckxheW91dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9mb290ZXItbGF5b3V0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSW1hZ2VEaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvaW1hZ2UtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9wb3NpdGlvbi1sYXlvdXQtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3RleHQtYmFja2dyb3VuZC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSG92ZXJFbGVtZW50c0NvbXBvbmVudCB9IGZyb20gJy4vLi4vLi4vY29tcG9uZW50cy9ob3Zlci1lbGVtZW50cy9ob3Zlci1lbGVtZW50cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3Rpb25Nb2RlbCwgQmFja2dyb3VuZE1vZGVsLCBMYXlPdXRNb2RlbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IENvbG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNpbXBvU3RpY2t5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3N0aWNreS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWhvcml6b250YWwuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vZWNvbW1lcmNlL3N0eWxlcy91c2VyLm1vZGFsJztcclxuaW1wb3J0IHsgR2VuZGVySWNvbiB9IGZyb20gJy4uLy4uL3BpcGVzL2dlbmRlci5waXBlJztcclxuaW1wb3J0IHsgTWF0Qm90dG9tU2hlZXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9ib3R0b20tc2hlZXQnO1xyXG5pbXBvcnQgeyBDYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWNvbW1lcmNlL3NlY3Rpb25zL2NhcnQvY2FydC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBoZWFkbGluZUFuaW1hdGlvblR5cGUsIEhFQURFUl9TVFlMSU5HLCBIZWFkZXJfVHlwZSwgUHJvZHVjdENhcmRUaGVtZSB9IGZyb20gJy4uLy4uL3N0eWxlcy9pbmRleCc7XHJcbmltcG9ydCB7IE1vdmluZ1RleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zZWN0aW9ucy9tb3ZpbmctdGV4dC9tb3ZpbmctdGV4dC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNb3ZpbmdUZXh0TW9kYWwgfSBmcm9tICcuLi9tb3ZpbmctdGV4dC9tb3ZpbmctdGV4dC5tb2RhbCc7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8taGVhZGVyLXNlY3Rpb24nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgU2ltcG9CdXR0b25Db21wb25lbnQsXHJcbiAgICBHZW5kZXJJY29uLFxyXG4gICAgQ2FydENvbXBvbmVudCxcclxuICAgIFNvY2lhSWNvbnNDb21wb25lbnQsXHJcbiAgICBNYXRJY29uLFxyXG4gICAgTmF2YmFyQnV0dG9uRWxlbWVudENvbXBvbmVudCxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgSG92ZXJFbGVtZW50c0NvbXBvbmVudCxcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXHJcbiAgICBCYW5uZXJDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgQm9yZGVyRGlyZWN0aXZlLFxyXG4gICAgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29sdW1uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29udGFpbmVyRml0RGlyZWN0aXZlLFxyXG4gICAgc2ltcG9Db25ldGVuQWxpZ25tZW50RGlyZWN0aXZlLFxyXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcclxuICAgIENvcm5lckRpcmVjdGl2ZSxcclxuICAgIFNpbXBvRm9vdGVyTGF5b3V0RGlyZWN0aXZlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIE92ZXJsYXlEaXJlY3RpdmUsXHJcbiAgICBTaW1wb1N0aWNreURpcmVjdGl2ZSxcclxuICAgIFBvc2l0aW9uTGF5b3V0RGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgVGV4dEJhY2tncm91bmREaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBDb2xvckRpcmVjdGl2ZSxcclxuICAgIE1hdEJvdHRvbVNoZWV0TW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0TWVudU1vZHVsZSxcclxuICAgIFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlLFxyXG4gICAgTW92aW5nVGV4dENvbXBvbmVudCxcclxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vaGVhZGVyLXNlY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9oZWFkZXItc2VjdGlvbi5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSGVhZGVyU2VjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgZGF0YT86IEhlYWRlclNlY3Rpb25Nb2RlbDtcclxuICBASW5wdXQoKSBuZXh0Q29tcG9uZW50OiBhbnk7XHJcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZWRpdD86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKFwiY2hpbGRDb250YWluZXJcIikgY2hpbGRDb250YWluZXI6IGFueTtcclxuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyITogUmVzaXplT2JzZXJ2ZXI7XHJcbiAgcHVibGljIHNjcm9sbFZhbHVlOiBudW1iZXIgPSAwO1xyXG4gIGNvbnRlbnQ/OiBIZWFkZXJDb250ZW50TW9kZWw7XHJcbiAgc3R5bGU/OiBIZWFkZXJTdHlsZU1vZGVsXHJcbiAgYWN0aW9uPzogQWN0aW9uTW9kZWxcclxuICBjb2xvciA9ICcjMDAwMDAwJztcclxuICBzZWFyY2hUZXh0OiBzdHJpbmcgPSBcIlwiO1xyXG4gIHRoZW1lID0gUHJvZHVjdENhcmRUaGVtZTtcclxuICBIZWFkZXJTdHlsaW5nID0gSGVhZGVyX1R5cGVcclxuICBwYXJlbnRIZWlnaHQ6IG51bWJlciA9IDcwOyAvLyBEZWZhdWx0IGhlaWdodFxyXG4gIC8vIG1hdERpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xyXG5cclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBtYXREaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICAvLyBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5nZXRTY3JlZW5TaXplKCk7XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcclxuICB9XHJcbiAgc2VhcmNoQ2hhbmdlVGltZW91dDogYW55O1xyXG4gIHdhaXRCZWZvcmVTZWFyY2goKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hDaGFuZ2VUaW1lb3V0KTtcclxuICAgIHRoaXMuc2VhcmNoQ2hhbmdlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNlYXJjaFByb2R1Y3RzKCk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuICBzZWFyY2hQcm9kdWN0cygpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xpc3QnXSwgeyBxdWVyeVBhcmFtczogeyBzZWFyY2hUeHQ6IHRoaXMuc2VhcmNoVGV4dCB9IH0pO1xyXG4gIH1cclxuICBnb1RvRmF2KCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvd2lzaGxpc3QnXSk7XHJcbiAgfVxyXG4gIGdldCBzdHlsZXNMYXlvdXQoKSB7XHJcbiAgICByZXR1cm4geyAuLi50aGlzLnN0eWxlPy5sYXlvdXQgfSBhcyBMYXlPdXRNb2RlbDtcclxuICB9XHJcbiAgZ29Ub0FjY291bnQocmVkaXJlY3RUbzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zdG9yYWdlU2VydmljZS5nZXRVc2VyKCkpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJvZmlsZSddKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChyZWRpcmVjdFRvID09ICdTSUdOVVAnIHx8IHJlZGlyZWN0VG8gPT0gJ0xPR0lOJylcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9sb2dpbiddLCB7IHF1ZXJ5UGFyYW1zOiB7IHJlZGlyZWN0VG86IHJlZGlyZWN0VG8gfSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBsb2dnZWRJbigpIHtcclxuICAgIGlmICh0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKSlcclxuICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldFVzZXJOYW1lKCkge1xyXG4gICAgY29uc3QgdXNlciA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VXNlcigpO1xyXG4gICAgcmV0dXJuIHVzZXI/LmNvbnRhY3QubmFtZTtcclxuICB9XHJcblxyXG4gIGdvVG9XaXNobGlzdCgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3dpc2hsaXN0J10pO1xyXG4gIH1cclxuICBnb1RvQ2FydCgpIHtcclxuICAgIGlmIChmYWxzZSkge1xyXG4gICAgICB0aGlzLm1hdERpYWxvZy5vcGVuKENhcnRDb21wb25lbnQsIHsgd2lkdGg6ICcyOHZ3JywgcGFuZWxDbGFzczogJ3NpZGVwYW5lbC1jbGFzcycsIGRhdGE6IHsgd2luZG93OiB0cnVlIH0gfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10pO1xyXG4gICAgfVxyXG4gIH1cclxuICBhcHBseUZpbHRlcih2YWx1ZTogYW55LCB0eXBlOiBzdHJpbmcpIHtcclxuICAgIHZhbHVlID0gdmFsdWVbMF0/LnJlcGxhY2UoXCIgXCIsIFwiX1wiKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xpc3QnXSwgeyBxdWVyeVBhcmFtczogeyBbdHlwZV06IHZhbHVlIH0gfSk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnLCBbJyRldmVudCddKVxyXG4gIG9uU2Nyb2xsKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2Nyb2xsVmFsdWUgPSBldmVudC5jdXJyZW50VGFyZ2V0LnBhZ2VZT2Zmc2V0IC8gMTAwO1xyXG4gICAgdGhpcy5pc1Njcm9sbGVkID0gd2luZG93LnNjcm9sbFkgPiA1MDtcclxuICB9XHJcbiAgbW92aW5nVGV4dD86IE1vdmluZ1RleHRNb2RhbFxyXG4gIHRvU2hvd0luSmV3ZWxsZXJ5OiBib29sZWFuID0gZmFsc2VcclxuICBkaWZmZXI6IGFueTtcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29udGVudCA9IHRoaXMuZGF0YT8uY29udGVudDtcclxuICAgIHRoaXMuc3R5bGUgPSB0aGlzLmRhdGE/LnN0eWxlcztcclxuICAgIHRoaXMuYWN0aW9uID0gdGhpcy5kYXRhPy5hY3Rpb247XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocVBhcmFtKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHFQYXJhbVtcInNlYXJjaFR4dFwiXTtcclxuICAgIH0pXHJcbiAgICBpZiAod2luZG93Py5sb2NhdGlvbj8ub3JpZ2luPy5pbmNsdWRlcygnY2FyYXRsYW5lJykgfHwgd2luZG93Py5sb2NhdGlvbj8ub3JpZ2luPy5pbmNsdWRlcygnb3JyYScpKSB7XHJcbiAgICAgIHRoaXMudG9TaG93SW5KZXdlbGxlcnkgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNFY29tbWVyY2VXZWJzaXRlKSB7XHJcbiAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0hlYWRlcigpO1xyXG4gICAgfVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0UGFyZW50SGVpZ2h0KClcclxuICAgIH0sIDMwMDApXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5nZXRQYXJlbnRIZWlnaHQoKVxyXG4gICAgICB9LCAxMDAwKVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jaGlsZENvbnRhaW5lci5uYXRpdmVFbGVtZW50KTtcclxuICB9XHJcblxyXG5cclxuICBzaG93U2VhcmNoQmFyTW9iaWxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNOYXZiYXJPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2NyZWVuV2lkdGg6IG51bWJlciA9IDQ3NTtcclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBnZXRTY3JlZW5TaXplKGV2ZW50PzogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgfVxyXG4gIGhlaWdodDogYW55XHJcbiAgZ2V0UGFyZW50SGVpZ2h0KCkge1xyXG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLmNoaWxkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxIZWlnaHQ7XHJcbiAgICBpZiAodGhpcy5uZXh0Q29tcG9uZW50Py5zdHlsZXM/Lm1lcmdlKVxyXG4gICAgICB0aGlzLmV2ZW50U2VydmljZS5lbGVtZW50SGVpZ2h0LmVtaXQodGhpcy5oZWlnaHQpXHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCItLW1hcmdpbi10b3BcIiwgdGhpcy5oZWlnaHQgKyBcInB4XCIpXHJcbiAgfVxyXG4gIGdldCBnZXREcm9wZG93bkxpbmtzKCkge1xyXG4gICAgaWYgKHRoaXMuY29udGVudD8uZWNvbWxpbmtzICYmIHRoaXMuaXNFY29tbWVyY2VXZWJzaXRlKVxyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb250ZW50Py5lY29tbGlua3MpO1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuICBnZXQgaXNFY29tbWVyY2VXZWJzaXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8udHlwZSA9PSBcIkVfQ09NTUVSQ0VcIjtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5pc05hdmJhck9wZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNob3dFZGl0b3JzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNob3dFZGl0VGFicyhpc1Nob3c6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc2hvd0VkaXRvcnMgPSBpc1Nob3c7XHJcbiAgfVxyXG4gIGdvVG9Ib21lKCkge1xyXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdSRVFVRVNUX0ZST00nKSA9PT0gJ0VfQ09NTUVSQ0UnKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycnXSk7XHJcbiAgfVxyXG4gIGdldCBpc0hlYWRlclN0aWNreSgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/LnN0eWxlcz8uc3RpY2t5O1xyXG4gIH1cclxuICBnZXQgYmFja2dyb3VuZEluZm8oKSB7XHJcbiAgICBsZXQgYmFja2dyb3VuZDogQmFja2dyb3VuZE1vZGVsIHwge30gPSB7fTtcclxuICAgIHJldHVybiB0aGlzLm5leHRDb21wb25lbnQ/LnN0eWxlcz8ubWVyZ2UgJiYgdGhpcy5zY3JvbGxWYWx1ZSA9PSAwICYmICF0aGlzLmlzTW9iaWxlID8geyAuLi50aGlzLm5leHRDb21wb25lbnQuc3R5bGVzLmJhY2tncm91bmQgfSA6IHsgLi4udGhpcy5kYXRhPy5zdHlsZXMuYmFja2dyb3VuZCB9O1xyXG4gIH1cclxuICBnZXQgc2ltcG9Db2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm5leHRDb21wb25lbnQ/LnN0eWxlcz8ubWVyZ2UgPyAodGhpcy5zY3JvbGxWYWx1ZSA+IDAgPyB0aGlzLnN0eWxlPy5iYWNrZ3JvdW5kLmNvbG9yIDogdGhpcy5uZXh0Q29tcG9uZW50LnN0eWxlcz8uYmFja2dyb3VuZD8uY29sb3IpIDogdGhpcy5zdHlsZT8uYmFja2dyb3VuZD8uY29sb3I7XHJcbiAgfVxyXG4gIGdldCBhY2NlbnRDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLm5leHRDb21wb25lbnQ/LnN0eWxlcz8ubWVyZ2UgPyAodGhpcy5zY3JvbGxWYWx1ZSA+IDAgPyB0aGlzLnN0eWxlPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvciA6IHRoaXMubmV4dENvbXBvbmVudC5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yKSA6IHRoaXMuc3R5bGU/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yO1xyXG4gIH1cclxuICBnZXQgaXNUcmFuc3BhcmVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLm5leHRDb21wb25lbnQ/LnN0eWxlcz8ubWVyZ2UgJiYgdGhpcy5zY3JvbGxWYWx1ZSA9PSAwO1xyXG4gIH1cclxuICByZWRpcmVjdFRvKGNvbnRlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmJ1dHRvblJlZGlyZWN0aW9uLmVtaXQoeyBkYXRhOiBjb250ZW50IH0pO1xyXG4gIH1cclxuXHJcbiAgc2hvd1NlYXJjaEJhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBnZXQgaXNDb21wb25lbnRNZXJnZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXh0Q29tcG9uZW50Py5zdHlsZXM/Lm1lcmdlO1xyXG4gIH1cclxuICBlZGl0U2VjdGlvbigpIHtcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5lbWl0KGZhbHNlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9ldmVudFNlcnZpY2UuZWRpdFNlY3Rpb24uZW1pdCh7IGRhdGE6IHRoaXMuZGF0YSB9KTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FuU2hvd01vYmlsZUZvb3RlcigpIHtcclxuICAgIHJldHVybiB0aGlzLmlzRWNvbW1lcmNlV2Vic2l0ZTtcclxuICB9XHJcblxyXG4gIGdldCBzaG93TW9iaWxlSG9tZUljb24oKSB7XHJcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIHJldHVybiAhKHVybC5pbmNsdWRlcyhcImNhcnRcIikgfHwgdXJsLmluY2x1ZGVzKFwicHJvZmlsZVwiKSB8fCB1cmwuaW5jbHVkZXMoXCJ3aXNobGlzdFwiKSk7XHJcbiAgfVxyXG4gIGdldCBnZXRDYXJ0SXRlbXNDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VG90YWxDYXJ0SXRlbXM7XHJcbiAgfVxyXG4gIGdldCBnZXRIZWFkZXJTdHlsaW5nKCk6IEhlYWRlcl9UeXBlIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnN0eWxlPy5zdHlsaW5nO1xyXG4gIH1cclxuICBnZXQgaXNNb2JpbGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPCA0NzU7XHJcbiAgfVxyXG4gIGdldEtleXMob2JqZWN0OiBhbnkpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KTtcclxuICB9XHJcbiAgZ2V0VmFsdWVzKG9iamVjdDogYW55KTogdW5rbm93bltdIHtcclxuICAgIGNvbnN0IGtleXM6IHVua25vd25bXSA9IFtdO1xyXG4gICAgb2JqZWN0LmZvckVhY2goKGtleTogYW55KSA9PiBrZXlzLnB1c2goT2JqZWN0LnZhbHVlcyhrZXkpKSk7XHJcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQoa2V5cyldO1xyXG4gIH1cclxuICBnZXQgdXNlckdlbmRlcigpIHtcclxuICAgIGNvbnN0IHVzZXIgPSAodGhpcy5zdG9yYWdlU2VydmljZS5nZXRVc2VyKCkgYXMgVXNlcik7XHJcbiAgICBpZiAodXNlcilcclxuICAgICAgcmV0dXJuIHVzZXIuZ2VuZGVyO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0TmF2YmFyQnV0dG9uKCkge1xyXG4gICAgbGV0IGNvdW50OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHBhZ2U6IGFueVtdID0gW11cclxuICAgIGZvciAobGV0IGJ1dHRvbiBvZiB0aGlzLmNvbnRlbnQ/Lm5hdmJhckJ1dHRvbnMgfHwgW10pIHtcclxuICAgICAgaWYgKGNvdW50IDwgNSAmJiBidXR0b24uc2hvd0hlYWRlcikge1xyXG4gICAgICAgIHBhZ2UucHVzaChidXR0b24pO1xyXG4gICAgICAgIGNvdW50Kys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGFnZTtcclxuICB9XHJcblxyXG5cclxuICBpc1Njcm9sbGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFtdKVxyXG4gIC8vIG9uV2luZG93U2Nyb2xsKCkge1xyXG4gIC8vICAgdGhpcy5pc1Njcm9sbGVkID0gIHdpbmRvdy5zY3JvbGxZID4gNTA7XHJcbiAgLy8gfVxyXG4gIHNldENvbG9yKCkge1xyXG4gICAgY29uc3QgdGhyZXNob2xkID0gMTMwOyAvLyBBZGp1c3QgdGhpcyB0aHJlc2hvbGQgYXMgbmVlZGVkXHJcbiAgICBjb25zdCByID0gcGFyc2VJbnQodGhpcy5iYWNrZ3JvdW5kSW5mby5hY2NlbnRDb2xvci5zbGljZSgxLCAzKSwgMTYpO1xyXG4gICAgY29uc3QgZyA9IHBhcnNlSW50KHRoaXMuYmFja2dyb3VuZEluZm8uYWNjZW50Q29sb3Iuc2xpY2UoMywgNSksIDE2KTtcclxuICAgIGNvbnN0IGIgPSBwYXJzZUludCh0aGlzLmJhY2tncm91bmRJbmZvLmFjY2VudENvbG9yLnNsaWNlKDUsIDcpLCAxNik7XHJcbiAgICBjb25zdCBicmlnaHRuZXNzID0gKHIgKiAyOTkgKyBnICogNTg3ICsgYiAqIDExNCkgLyAxMDAwO1xyXG5cclxuICAgIHJldHVybiBicmlnaHRuZXNzID4gdGhyZXNob2xkID8gJyMwMDAwMDAnIDogJyNmZmZmZmYnO1xyXG4gIH1cclxuICBzaG93TGlzdDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgc2hvd0NvbGxlY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2F0ZWdvcnlMaXN0OiBhbnk7XHJcbiAgY29sbGVjdGlvbkxpc3Q6IGFueTtcclxuICBzZWxlY3RlZENhdGVnb3J5OiBhbnk7XHJcbiAgc3RvcmVBdmFpYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdldENhdGVnb3JpZXNIZWFkZXIoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldENhdGVnb3JpZXNIZWFkZXJEYXRhKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlQXZhaWFibGUgPSByZXM/LmRhdGE/LmlzU3RvcmVFbmFibGVkXHJcbiAgICAgIHRoaXMuc2NoZW1lQXZhaWxhYmxlID0gcmVzPy5kYXRhPy5zY2hlbWVzQXZhaWxhYmxlXHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0ID0gcmVzPy5kYXRhPy5jYXRlZ29yeURldGFpbHM7XHJcbiAgICAgIHRoaXMuY29sbGVjdGlvbkxpc3QgPSByZXM/LmRhdGE/Lml0ZW1Db2xsZWN0aW9ucztcclxuICAgIH0pXHJcbiAgfVxyXG4gIHNjaGVtZUF2YWlsYWJsZTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgZ29Ub1N0b3JlcygpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3N0b3JlcyddKTtcclxuICB9XHJcbiAgT2JqZWN0ID0gT2JqZWN0XHJcbiAgYXBwbHlGaWx0ZXJUb0xpc3Qob2JqOiBhbnksIHR5cGU6IGFueSkge1xyXG4gICAgaWYgKHR5cGUgPT0gJ3ByaWNlJykge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9saXN0J10sIHsgcXVlcnlQYXJhbXM6IHsgY2F0ZWdvcnk6IHRoaXMuc2VsZWN0ZWRDYXRlZ29yeT8uY2F0ZWdvcnlOYW1lLCBtaW5QcmljZTogb2JqPy5taW5QcmljZSwgbWF4UHJpY2U6IG9iaj8ubWF4UHJpY2UsIHBhZ2VObzogMSB9IH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT0gJ2NvbGxlY3Rpb24nKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xpc3QnXSwgeyBxdWVyeVBhcmFtczogeyBjYXRlZ29yeTogdGhpcy5zZWxlY3RlZENhdGVnb3J5Py5jYXRlZ29yeU5hbWUsIGNvbGxlY3Rpb25zOiBvYmo/LnJlcGxhY2VBbGwoXCIgXCIsICdfJyksIHBhZ2VObzogMSB9IH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT0gJ2NvbGxlY3Rpb25zJykge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9saXN0J10sIHsgcXVlcnlQYXJhbXM6IHsgY29sbGVjdGlvbnM6IG9iaj8ucmVwbGFjZUFsbChcIiBcIiwgJ18nKSwgcGFnZU5vOiAxIH0gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeUNhdGVnb3J5KCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbGlzdCddLCB7IHF1ZXJ5UGFyYW1zOiB7IGNhdGVnb3J5OiB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnk/LmNhdGVnb3J5TmFtZSwgcGFnZU5vOiAxIH0gfSk7XHJcbiAgfVxyXG5cclxuICBzaG93UGluY29kZUlucHV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcGluY29kZTogYW55ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3BpbmNvZGUnKSA/PyBcIlwiO1xyXG4gIGdldFBpbmNvZGU6IHN0cmluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwaW5jb2RlJykgfHwgJyc7XHJcbiAgcGluRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZXRQaW5jb2RlKCkge1xyXG4gICAgaWYgKHRoaXMucGluY29kZSAmJiB0aGlzLnBpbmNvZGU/Lmxlbmd0aCA9PSA2KSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdwaW5jb2RlJywgdGhpcy5waW5jb2RlKTtcclxuICAgICAgdGhpcy5nZXRQaW5jb2RlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3BpbmNvZGUnKSB8fCAnJztcclxuICAgICAgdGhpcy5waW5FcnJvciA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5waW5FcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93TG9naW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZ29Ub1NjaGVtZXMoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zY2hlbWUtZW5yb2xsbWVudCddKTtcclxuICB9XHJcblxyXG4gIGdldFJHQkEoYmdDb2xvcjogYW55LCBvcGFjaXR5OiBudW1iZXIpOiBhbnkge1xyXG4gICAgY29uc3QgciA9IHBhcnNlSW50KGJnQ29sb3Iuc2xpY2UoMSwgMyksIDE2KTtcclxuICAgIGNvbnN0IGcgPSBwYXJzZUludChiZ0NvbG9yLnNsaWNlKDMsIDUpLCAxNik7XHJcbiAgICBjb25zdCBiID0gcGFyc2VJbnQoYmdDb2xvci5zbGljZSg1LCA3KSwgMTYpO1xyXG4gICAgcmV0dXJuIGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sICR7b3BhY2l0eSAvIDEwMH0pYDtcclxuICB9XHJcblxyXG4gIHNob3dDYXRlZ29yeU1vYmlsZUhlYWRlcigpIHtcclxuICAgIGNvbnN0IHBhdGhuYW1lID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gICAgcmV0dXJuIHBhdGhuYW1lLmluY2x1ZGVzKCcvbGlzdCcpIHx8IHBhdGhuYW1lID09PSAnLycgfHwgcGF0aG5hbWUgPT09ICcnO1xyXG4gIH1cclxuXHJcbiAgYnlNZXRhbEFuZFN0b25lOiBhbnkgPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdHb2xkJyxcclxuICAgICAgaW1hZ2VVcmw6ICdodHRwczovL2Nkbi5jYXJhdGxhbmUuY29tL21lZGlhL3N0YXRpYy9pbWFnZXMvd2ViL21lbnUvMjJrdC1Hb2xkLTJ4LnBuZycsXHJcbiAgICAgIHN0YXR1czogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdEaWFtb25kJyxcclxuICAgICAgaW1hZ2VVcmw6ICdodHRwczovL2Nkbi5jYXJhdGxhbmUuY29tL21lZGlhL3N0YXRpYy9pbWFnZXMvd2ViL21lbnUvRGlhbW9uZC0xeC5wbmcnLFxyXG4gICAgICBzdGF0dXM6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnUGVhcmwnLFxyXG4gICAgICBpbWFnZVVybDogJ2h0dHBzOi8vY2RuLmNhcmF0bGFuZS5jb20vc3RhdGljL2ltYWdlcy9kaXNjb3ZlcnkvcmVzcG9uc2l2ZS1oYW1idXJnZXItbWVudS9wcm9kdWN0cy1hbmQtc2VydmljZXMvcGVhcmwtMXgucG5nJyxcclxuICAgICAgc3RhdHVzOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ0dlbXN0b25lJyxcclxuICAgICAgaW1hZ2VVcmw6ICdodHRwczovL2Nkbi5jYXJhdGxhbmUuY29tL21lZGlhL3N0YXRpYy9pbWFnZXMvd2ViL21lbnUvR2Vtc3RvbmUtMXgucG5nJyxcclxuICAgICAgc3RhdHVzOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ1llbGxvdyBHb2xkJyxcclxuICAgICAgaW1hZ2VVcmw6ICdodHRwczovL2Nkbi5jYXJhdGxhbmUuY29tL21lZGlhL3N0YXRpYy9pbWFnZXMvd2ViL21lbnUvWWVsbG93LUdvbGQtMXgucG5nJyxcclxuICAgICAgc3RhdHVzOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ1Jvc2UgR29sZCcsXHJcbiAgICAgIGltYWdlVXJsOiAnaHR0cHM6Ly9jZG4uY2FyYXRsYW5lLmNvbS9tZWRpYS9zdGF0aWMvaW1hZ2VzL3dlYi9tZW51L1Jvc2UtR29sZC0xeC5wbmcnLFxyXG4gICAgICBzdGF0dXM6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnV2hpdGUgR29sZCcsXHJcbiAgICAgIGltYWdlVXJsOiAnaHR0cHM6Ly9jZG4uY2FyYXRsYW5lLmNvbS9tZWRpYS9zdGF0aWMvaW1hZ2VzL3dlYi9tZW51L3doaXRlLUdvbGQtMXgucG5nJyxcclxuICAgICAgc3RhdHVzOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuXHJcbn1cclxuIiwiPHNlY3Rpb24gW2lkXT1cImRhdGE/LmlkXCIgY2xhc3M9XCJ0b3RhbC1jb250YWluZXIgdy0xMDBcIj5cclxuICA8ZGl2IGNsYXNzPVwidy0xMDBcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9PdmVybGF5XT1cInN0eWxlPy5iYWNrZ3JvdW5kXCIgW25nQ2xhc3NdPVwieydib3gtc2hhZG93JzogaXNFY29tbWVyY2VXZWJzaXRlfVwiXHJcbiAgICBbY2xhc3MubWFyZ2luLWJvdHRvbV09XCJpc0hlYWRlclN0aWNreSAmJiBpc0Vjb21tZXJjZVdlYnNpdGUgJiYgIChjYXRlZ29yeUxpc3Q/Lmxlbmd0aCA9PSAwIHx8ICFzaG93Q2F0ZWdvcnlNb2JpbGVIZWFkZXIoKSkgJiYgaXNNb2JpbGVcIj5cclxuICAgIDwhLS0gaXNIZWFkZXJTdGlja3kgJiYgaXNFY29tbWVyY2VXZWJzaXRlICYmICghY2F0ZWdvcnlMaXN0IHx8ICFzaG93Q2F0ZWdvcnlNb2JpbGVIZWFkZXIoKSkgJiYgLS0+XHJcbiAgICA8IS0tIFtzY3JvbGxWYWx1ZV09XCJpc0NvbXBvbmVudE1lcmdlZCA/IHNjcm9sbFZhbHVlIDogMFwiIC0tPlxyXG4gICAgPGRpdiBbc2ltcG9TdGlja3ldPVwiaXNIZWFkZXJTdGlja3lcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cImJhY2tncm91bmRJbmZvXCIgW3NpbXBvT3ZlcmxheV09XCJiYWNrZ3JvdW5kSW5mb1wiIGNsYXNzPVwidy0xMDBcIiAjY2hpbGRDb250YWluZXJcclxuICAgICAgW2NhdGVnb3J5SGVhZGVyXT1cImlzRWNvbW1lcmNlV2Vic2l0ZSAmJiBjYXRlZ29yeUxpc3Q/Lmxlbmd0aCA+IDAgJiYgIWlzTW9iaWxlXCIgc2ltcG9Ib3ZlciBbY2xhc3MuYmFja2dyb3VuZC1wb3NpdGlvbl09XCJpc0NvbXBvbmVudE1lcmdlZCAmJiBiYWNrZ3JvdW5kSW5mbz8uc2hvd0ltYWdlXCJcclxuICAgICAgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCIgW2lkXT1cImRhdGE/LmlkXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHlsZT8uaGVhZGxpbmU/LmRpc3BsYXlcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPHNpbXBvLW1vdmluZy10ZXh0IFtlZGl0XT1cImZhbHNlXCIgW2RlbGV0ZV09XCJmYWxzZVwiIFtkYXRhXT1cImRhdGFcIj48L3NpbXBvLW1vdmluZy10ZXh0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPGRpdiAqbmdJZj1cInN0eWxlPy5zdHlsaW5nID09PSAnSGVhZGVyMSdcIiBbc3BhY2luZ0hvcml6b250YWxdPVwic3R5bGVzTGF5b3V0XCIgW3NpbXBvTGF5b3V0XT1cInN0eWxlc0xheW91dFwiXHJcbiAgICAgICAgW2lzSGVhZGVyXT1cInRydWVcIiBbaWRdPVwiZGF0YT8uaWRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyMVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic3R5bGU/LnN0eWxpbmcgPT09ICdIZWFkZXIyJ1wiIFtzcGFjaW5nSG9yaXpvbnRhbF09XCJzdHlsZXNMYXlvdXRcIiBbc2ltcG9MYXlvdXRdPVwic3R5bGVzTGF5b3V0XCJcclxuICAgICAgICBbaXNIZWFkZXJdPVwidHJ1ZVwiIFtpZF09XCJkYXRhPy5pZFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXIyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzdHlsZT8uc3R5bGluZyA9PT0gJ0hlYWRlcjMnXCIgW3NwYWNpbmdIb3Jpem9udGFsXT1cInN0eWxlc0xheW91dFwiIFtzaW1wb0xheW91dF09XCJzdHlsZXNMYXlvdXRcIlxyXG4gICAgICAgIFtpc0hlYWRlcl09XCJ0cnVlXCIgW2lkXT1cImRhdGE/LmlkXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlcjNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cInN0eWxlPy5zdHlsaW5nID09PSAnSGVhZGVyNCdcIiBbc3BhY2luZ0hvcml6b250YWxdPVwic3R5bGVzTGF5b3V0XCIgW3NpbXBvTGF5b3V0XT1cInN0eWxlc0xheW91dFwiXHJcbiAgICAgICAgW2lzSGVhZGVyXT1cInRydWVcIiBbaWRdPVwiZGF0YT8uaWRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyNFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBteC0yIG1iLTIgdy05OFwiICpuZ0lmPVwiaXNNb2JpbGUgJiYgaXNFY29tbWVyY2VXZWJzaXRlXCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm9kdWN0XCIgYXJpYS1sYWJlbD1cIlNlYXJjaCBQcm9kdWN0XCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIChuZ01vZGVsQ2hhbmdlKT1cIndhaXRCZWZvcmVTZWFyY2goKVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlcicgOiAnMXB4IHNvbGlkICcgKyBhY2NlbnRDb2xvcn1cIj5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJoLTEwMFwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQnIDogc3R5bGU/LmJhY2tncm91bmQ/LmFjY2VudEJhY2tncm91bmRUeXBlID09ICdTb2xpZCcgPyAgIGFjY2VudENvbG9yIDogJ2xpbmVhci1ncmFkaWVudCh0byByaWdodCwnICsgc3R5bGU/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yICsgJyAwJScgKyAnLCcgKyBzdHlsZT8uYmFja2dyb3VuZD8uc2Vjb25kYXJ5QWNjZW50Q29sb3IgKycgMTAwJScgKyAnKSd9XCJcclxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJzdHlsZT8uYmFja2dyb3VuZD8uY29sb3JcIj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0Vjb21tZXJjZVdlYnNpdGUgJiYgIWlzTW9iaWxlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhdGVnb3JpZXNIZWFkZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgICAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCI+PC9zaW1wby1ob3Zlci1lbGVtZW50cz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFY29tbWVyY2VXZWJzaXRlICYmIGlzTW9iaWxlICYmIHNob3dDYXRlZ29yeU1vYmlsZUhlYWRlcigpXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2JpbGVDYXRlZ29yeUhlYWRlclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0Vjb21tZXJjZVdlYnNpdGUgJiYgaXNNb2JpbGVcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2JpbGVGb290ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L3NlY3Rpb24+XHJcblxyXG48bmctdGVtcGxhdGUgI2hlYWRlcjFUZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyMVwiPlxyXG4gICAgPGRpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvZ29TZWN0aW9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMTUgYWxpZ24tY2VudGVyXCIgKm5nSWY9XCIhaXNNb2JpbGVcIiBbc3R5bGUud2lkdGguJV09XCJpc0Vjb21tZXJjZVdlYnNpdGUgPyA5NSA6ICcnXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFY29tbWVyY2VXZWJzaXRlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VMaW5rc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXNFY29tbWVyY2VXZWJzaXRlID8gZWNvbW1lcmNlQnV0dG9uc1RlbXBsYXRlIDogbnVsbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiIWlzRWNvbW1lcmNlV2Vic2l0ZSA/IGJ1dHRvbnNUZW1wbGF0ZSA6IG51bGxcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMTUgYWxpZ24tY2VudGVyXCIgKm5nSWY9XCJpc01vYmlsZVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZWNvbVByb2ZpbGVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bWF0LWljb24gW3NpbXBvQ29sb3JdPVwic2ltcG9Db2xvclwiIGRhdGEtYnMtdG9nZ2xlPVwib2ZmY2FudmFzXCIgZGF0YS1icy10YXJnZXQ9XCIjb2ZmY2FudmFzUmlnaHRcIlxyXG4gICAgICAgIGFyaWEtY29udHJvbHM9XCJvZmZjYW52YXNSaWdodFwiPm1lbnU8L21hdC1pY29uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2hlYWRlcjJUZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyMVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMTUgYWxpZ24tY2VudGVyXCIgKm5nSWY9XCIhaXNNb2JpbGVcIiBbc3R5bGUud2lkdGguJV09XCJpc0Vjb21tZXJjZVdlYnNpdGUgPyA5MyA6ICcnXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCIhaXNFY29tbWVyY2VXZWJzaXRlID8gYnV0dG9uc1RlbXBsYXRlIDogbnVsbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXNFY29tbWVyY2VXZWJzaXRlID8gZWNvbW1lcmNlQnV0dG9uc1RlbXBsYXRlIDogbnVsbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRWNvbW1lcmNlV2Vic2l0ZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdlTGlua3NUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMTUgYWxpZ24tY2VudGVyXCIgZGF0YS1icy10b2dnbGU9XCJvZmZjYW52YXNcIiBkYXRhLWJzLXRhcmdldD1cIiNvZmZjYW52YXNSaWdodFwiXHJcbiAgICAgIGFyaWEtY29udHJvbHM9XCJvZmZjYW52YXNSaWdodFwiICpuZ0lmPVwiaXNNb2JpbGVcIj5cclxuICAgICAgPG1hdC1pY29uIFtzaW1wb0NvbG9yXT1cInNpbXBvQ29sb3JcIj5tZW51PC9tYXQtaWNvbj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVjb21Qcm9maWxlVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2dvU2VjdGlvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjaGVhZGVyM1RlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWFkZXIxXCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9nb1NlY3Rpb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTW9iaWxlXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFY29tbWVyY2VXZWJzaXRlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VMaW5rc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXNFY29tbWVyY2VXZWJzaXRlID8gZWNvbW1lcmNlQnV0dG9uc1RlbXBsYXRlIDogbnVsbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiIWlzRWNvbW1lcmNlV2Vic2l0ZSA/IGJ1dHRvbnNUZW1wbGF0ZSA6IG51bGxcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMTUgYWxpZ24tY2VudGVyXCIgZGF0YS1icy10b2dnbGU9XCJvZmZjYW52YXNcIiBkYXRhLWJzLXRhcmdldD1cIiNvZmZjYW52YXNSaWdodFwiXHJcbiAgICAgIGFyaWEtY29udHJvbHM9XCJvZmZjYW52YXNSaWdodFwiICpuZ0lmPVwiaXNNb2JpbGVcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVjb21Qcm9maWxlVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG1hdC1pY29uIFtzaW1wb0NvbG9yXT1cInNpbXBvQ29sb3JcIj5tZW51PC9tYXQtaWNvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNoZWFkZXI0VGVtcGxhdGU+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlcjFcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNNb2JpbGVcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIiFpc0Vjb21tZXJjZVdlYnNpdGUgPyBidXR0b25zVGVtcGxhdGUgOiBudWxsXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpc0Vjb21tZXJjZVdlYnNpdGUgPyBlY29tbWVyY2VCdXR0b25zVGVtcGxhdGUgOiBudWxsXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFY29tbWVyY2VXZWJzaXRlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VMaW5rc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPiA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTE1IGFsaWduLWNlbnRlclwiIGRhdGEtYnMtdG9nZ2xlPVwib2ZmY2FudmFzXCIgZGF0YS1icy10YXJnZXQ9XCIjb2ZmY2FudmFzUmlnaHRcIlxyXG4gICAgICBhcmlhLWNvbnRyb2xzPVwib2ZmY2FudmFzUmlnaHRcIiAqbmdJZj1cImlzTW9iaWxlXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBbc2ltcG9Db2xvcl09XCJzaW1wb0NvbG9yXCI+bWVudTwvbWF0LWljb24+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlY29tUHJvZmlsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9nb1NlY3Rpb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNsb2dvU2VjdGlvblRlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgYWxpZ24tY2VudGVyIGN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCIhY29udGVudD8ubG9nbz8uaXNJbWFnZSB8fCAhY29udGVudD8ubG9nbz8uaW1hZ2U/LnVybFwiXHJcbiAgICAoY2xpY2spPVwiIWVkaXQgPyBnb1RvSG9tZSgpIDogJydcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJjb250ZW50Py5sb2dvPy50ZXh0Py5pc0ljb24gJiYgY29udGVudD8ubG9nbz8udGV4dD8udXJsXCI+XHJcbiAgICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiBbc3JjXT1cImNvbnRlbnQ/LmxvZ28/LnRleHQ/LnVybFwiIGFsdD1cImxvZ29cIiBbd2lkdGhdPVwiY29udGVudD8ubG9nbz8uc2l6ZVwiIGxvYWRpbmc9XCJsYXp5XCI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nLXNtYWxsXCIgKm5nSWY9XCJjb250ZW50Py5sb2dvPy50ZXh0Py5pc1RleHRcIiBbc2ltcG9Db2xvcl09XCJzaW1wb0NvbG9yXCI+XHJcbiAgICAgIDxiIFtuZ1N0eWxlXT1cInsnZm9udC1mYW1pbHknOiBjb250ZW50Py5sb2dvPy50ZXh0Py5mb250RmFtaWx5fVwiPnt7Y29udGVudD8uc2l0ZU5hbWU/LnZhbHVlfX08L2I+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8IS0tIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgYWxpZ24taXRlbXMtbGctY2VudGVyIGN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJjb250ZW50Py5sb2dvPy5pc0ltYWdlICYmIGNvbnRlbnQ/LmxvZ28/LmltYWdlPy51cmxcIiAoY2xpY2spPVwiZ29Ub0hvbWUoKVwiPiAtLT5cclxuICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgW3NyY109XCJjb250ZW50Py5sb2dvPy5pbWFnZT8udXJsXCIgYWx0PVwibG9nb1wiXHJcbiAgICBbc3R5bGUud2lkdGguJV09XCJzY3JlZW5XaWR0aCA+IDQ3NSB8fCAoY29udGVudD8ubG9nbz8uc2l6ZSB8fCAxMCkgPCA1MCA/IGNvbnRlbnQ/LmxvZ28/LnNpemUgOiAoKGNvbnRlbnQ/LmxvZ28/LnNpemUgfHwgMTApIC0gMTApXCJcclxuICAgIGxvYWRpbmc9XCJsYXp5XCIgKm5nSWY9XCJjb250ZW50Py5sb2dvPy5pc0ltYWdlICYmIGNvbnRlbnQ/LmxvZ28/LmltYWdlPy51cmxcIiAoY2xpY2spPVwiIWVkaXQgPyBnb1RvSG9tZSgpIDogJydcIj5cclxuICA8IS0tIDwvZGl2PiAtLT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcGFnZUxpbmtzVGVtcGxhdGU+XHJcbiAgPGRpdiBjbGFzcz1cIm5hdmJhci1uYXYgcGFnZUxpbmtzXCIgW25nQ2xhc3NdPVwieydhbGlnbi1pdGVtcy1jZW50ZXInIDogIWlzTW9iaWxlfVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtM1wiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsnZmxleC1jb2x1bW4nOiBpc01vYmlsZSwgJ2FsaWduLWl0ZW1zLWNlbnRlcicgOiAhaXNNb2JpbGUsICdtb2JpbGUtcGFnZS1saXN0JzogaXNNb2JpbGV9XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0TmF2YmFyQnV0dG9uXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uc2hvd0hlYWRlclwiPlxyXG4gICAgICAgICAgPHNpbXBvLW5hdmJhci1idXR0b24tZWxlbWVudCBbYnV0dG9uRGF0YV09XCJpdGVtXCIgW3NlbGVjdGVkU3R5bGVdPVwic3R5bGU/Lm5hdmlnYXRpb25TdHlsZVwiXHJcbiAgICAgICAgICAgIFtidXR0b25TdHlsZV09XCJzdHlsZT8ubmF2YmFyQnV0dG9uU3R5bGVcIiBbYmdDb2xvcl09XCJzaW1wb0NvbG9yXCIgW2FjY2VudENvbG9yXT1cImFjY2VudENvbG9yXCJcclxuICAgICAgICAgICAgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiPjwvc2ltcG8tbmF2YmFyLWJ1dHRvbi1lbGVtZW50PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxpbmsgb2YgZ2V0RHJvcGRvd25MaW5rczsgbGV0IGlkeCA9IGluZGV4XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50Py5lY29tbGlua3M/LltsaW5rXT8ubGVuZ3RoIFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJtYXQtYnRuIGRyb3Bkb3duLXRvZ2dsZSBjYXRlZ29yeS1idG5cIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgW3NpbXBvQ29sb3JdPVwic2ltcG9Db2xvclwiIGlkPVwibGlua1wiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICB7e2xpbmsgfCBsb3dlcmNhc2UgfCB0aXRsZWNhc2V9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImxpbmtcIj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKm5nRm9yPVwibGV0IG1lbnUgb2YgZ2V0VmFsdWVzKGNvbnRlbnQ/LmVjb21saW5rcz8uW2xpbmtdKVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5RmlsdGVyKG1lbnUsIGxpbmspXCI+e3ttZW51fX08L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uc1RlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJhY3Rpb24/LmRpc3BsYXlcIiBjbGFzcz1cImJ1dHRvbi1kaXNwbGF5IG10LTBcIiBbbmdDbGFzc109XCJ7J3ctMTAwIGp1c3RpZnktc3BhY2UtYXJvdW5kJzogaXNNb2JpbGV9XCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBhY3Rpb24/LmJ1dHRvbnNcIj5cclxuICAgICAgICA8YXBwLWJ1dHRvbi1lbGVtZW50IFtidXR0b25Db250ZW50XT1cImJ1dHRvbi5jb250ZW50XCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbi5zdHlsZXNcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCJcclxuICAgICAgICAgIFtlZGl0XT1cImVkaXRcIiBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIFtidXR0b25JZF09XCJidXR0b24uaWRcIlxyXG4gICAgICAgICAgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiPjwvYXBwLWJ1dHRvbi1lbGVtZW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxidXR0b24gY2xhc3M9XCJtb2JpbGVMb2dpbkJ1dHRvblwiICpuZ0lmPVwiaXNFY29tbWVyY2VXZWJzaXRlICYmIGlzTW9iaWxlICYmICFsb2dnZWRJblwiXHJcbiAgICBbc3R5bGUuYm9yZGVyXT1cIicxcHggc29saWQnICsgYWNjZW50Q29sb3JcIiBbc3R5bGUuY29sb3JdPVwiYWNjZW50Q29sb3JcIiAoY2xpY2spPVwiZ29Ub0FjY291bnQoJ0xPR0lOJylcIj5Mb2dpbjwvYnV0dG9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNtb2JpbGVGb290ZXJUZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwibW9iaWxlLWZvb3RlclwiIFtzaW1wb0JhY2tncm91bmRdPVwiYmFja2dyb3VuZEluZm9cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJnb1RvSG9tZSgpXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBbc2ltcG9Db2xvcl09XCJzaW1wb0NvbG9yXCI+aG9tZTwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuIFtzaW1wb0NvbG9yXT1cInNpbXBvQ29sb3JcIj5Ib21lPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwic2VhcmNoUHJvZHVjdHMoKVwiPlxyXG4gICAgICA8bWF0LWljb24gW3NpbXBvQ29sb3JdPVwic2ltcG9Db2xvclwiPmdyaWRfb248L21hdC1pY29uPlxyXG4gICAgICA8c3BhbiBbc2ltcG9Db2xvcl09XCJzaW1wb0NvbG9yXCI+U2hvcDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cImdvVG9XaXNobGlzdCgpXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBbc2ltcG9Db2xvcl09XCJzaW1wb0NvbG9yXCI+ZmF2b3JpdGVfYm9yZGVyPC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4gW3NpbXBvQ29sb3JdPVwic2ltcG9Db2xvclwiPldpc2hsaXN0PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWNvbnMgcG9zaXRpb24tcmVsYXRpdmVcIiAoY2xpY2spPVwiZ29Ub0NhcnQoKVwiPlxyXG4gICAgICA8bWF0LWljb24gW3NpbXBvQ29sb3JdPVwic2ltcG9Db2xvclwiPnNob3BwaW5nX2NhcnQ8L21hdC1pY29uPlxyXG4gICAgICA8c3BhbiBbc2ltcG9Db2xvcl09XCJzaW1wb0NvbG9yXCI+Q2FydDwvc3Bhbj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGNhcnRJdGVtQ291bnRcIiAqbmdJZj1cImdldENhcnRJdGVtc0NvdW50XCI+e3tnZXRDYXJ0SXRlbXNDb3VudH19PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZWNvbW1lcmNlQnV0dG9uc1RlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwci0wIGQtZmxleCBwb3NpdGlvbi1yZWxhdGl2ZSBnYXAtMTAgdy0xMDBcIlxyXG4gICAgW3N0eWxlLmZsZXhEaXJlY3Rpb25dPVwic3R5bGU/LnN0eWxpbmcgPT09ICdIZWFkZXIyJyB8fCBzdHlsZT8uc3R5bGluZyA9PT0gJ0hlYWRlcjQnID8gJ3Jvdy1yZXZlcnNlJyA6ICcnXCI+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJzZWFyY2gtaWNvblwiIChjbGljayk9XCJzaG93U2VhcmNoQmFyID0gIXNob3dTZWFyY2hCYXJcIj5cclxuICAgICAgPG1hdC1pY29uIFtzdHlsZS5jb2xvcl09XCJhY2NlbnRDb2xvclwiPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwidy03NSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTc1IG1sLTJcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFByb2R1Y3RcIiBhcmlhLWxhYmVsPVwiU2VhcmNoIFByb2R1Y3RcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgKG5nTW9kZWxDaGFuZ2UpPVwid2FpdEJlZm9yZVNlYXJjaCgpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsnYm9yZGVyJyA6ICcxcHggc29saWQgJyArIGJhY2tncm91bmRJbmZvPy5hY2NlbnRDb2xvcn1cIiBbc3R5bGUuY29sb3JdPVwiYmFja2dyb3VuZEluZm8/LmFjY2VudENvbG9yXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaC0xMDBcIlxyXG4gICAgICAgICAgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kJyA6IGJhY2tncm91bmRJbmZvLmJhY2tncm91bmQ/LmFjY2VudEJhY2tncm91bmRUeXBlID09ICdTb2xpZCcgPyAgIGJhY2tncm91bmRJbmZvPy5hY2NlbnRDb2xvciA6ICdsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsJyArICBiYWNrZ3JvdW5kSW5mbz8uYWNjZW50Q29sb3IgKyAnIDAlJyArICcsJyArICBiYWNrZ3JvdW5kSW5mbz8uc2Vjb25kYXJ5QWNjZW50Q29sb3IgKycgMTAwJScgKyAnKSd9XCJcclxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJiYWNrZ3JvdW5kSW5mbz8uY29sb3JcIj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMyBhbGlnbi1pdGVtcy1jZW50ZXIgcHktMSBweC0zIGItMSBzdG9yZXNcIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiYmFja2dyb3VuZEluZm8/LmFjY2VudENvbG9yXCJcclxuICAgICAgICAoY2xpY2spPVwiZ29Ub1NjaGVtZXMoKVwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImdldFJHQkEoYmFja2dyb3VuZEluZm8/LmFjY2VudENvbG9yICwgMTApXCIgKm5nSWY9XCJzY2hlbWVBdmFpbGFibGVcIj5cclxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxyXG4gICAgICAgICAgeG1sbnM6c3ZnanM9XCJodHRwOi8vc3ZnanMuZGV2L3N2Z2pzXCIgaWQ9XCJMYXllcl8yXCIgdmlld0JveD1cIjAgMCA2MCA2MFwiIGRhdGEtbmFtZT1cIkxheWVyIDJcIiB3aWR0aD1cIjMwXCJcclxuICAgICAgICAgIGhlaWdodD1cIjMwXCIgdmVyc2lvbj1cIjEuMVwiPlxyXG4gICAgICAgICAgPGcgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIHRyYW5zZm9ybT1cIm1hdHJpeCgxLDAsMCwxLDAsMClcIj5cclxuICAgICAgICAgICAgPHBhdGggZD1cIm0xNC4zNiA0Ni42Ni41MS05Ljg2LTExLjkzLTcuMTYtMS45NCA4LjQzelwiIFthdHRyLmZpbGxdPVwiYmFja2dyb3VuZEluZm8/LmFjY2VudENvbG9yXCIgZmlsbC1vcGFjaXR5PVwiMVwiXHJcbiAgICAgICAgICAgICAgZGF0YS1vcmlnaW5hbC1jb2xvcj1cIiMwMDAwMDBmZlwiIHN0cm9rZT1cIm5vbmVcIiBzdHJva2Utb3BhY2l0eT1cIjFcIiAvPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgIGQ9XCJtMTcuMTcgMzguMXMwLS4wMi4wMi0uMDNjMCAwIDAtLjAyLjAyLS4wMi4wNC0uMDUuMS0uMDguMTUtLjExLjAyLS4wMS4wMy0uMDMuMDUtLjA0bDQuNjYtMS45NGgtLjAycy0xLjg3LTEuMjEtMS44Ny0xLjIxbC0zLjE4IDEuNTctMS4wNy41My0uNDMgOC4zMiAxLjU4LTYuOWMuMDEtLjA2LjA1LS4xMi4wOS0uMTd6XCJcclxuICAgICAgICAgICAgICBbYXR0ci5maWxsXT1cImJhY2tncm91bmRJbmZvPy5hY2NlbnRDb2xvclwiIGZpbGwtb3BhY2l0eT1cIjFcIiBkYXRhLW9yaWdpbmFsLWNvbG9yPVwiIzAwMDAwMGZmXCIgc3Ryb2tlPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLW9wYWNpdHk9XCIxXCIgLz5cclxuICAgICAgICAgICAgPHBhdGggZD1cIm0xOS4xNCAzNC4wOC02LjI3LTQuMDRjLS4xOS0uMTItLjI4LS4zNC0uMjMtLjU2bDEuMDgtNC43Mi05Ljk2IDQuMTQgMTEuNjggNy4wMXpcIlxyXG4gICAgICAgICAgICAgIFthdHRyLmZpbGxdPVwiYmFja2dyb3VuZEluZm8/LmFjY2VudENvbG9yXCIgZmlsbC1vcGFjaXR5PVwiMVwiIGRhdGEtb3JpZ2luYWwtY29sb3I9XCIjMDAwMDAwZmZcIiBzdHJva2U9XCJub25lXCJcclxuICAgICAgICAgICAgICBzdHJva2Utb3BhY2l0eT1cIjFcIiAvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwibTMwLjkzIDQ2LjQyLS41IDkuNzkgMzIuNTctMTguNjctMS4yMS02LjQtMjMuMTYgMTEuNDZ6XCIgW2F0dHIuZmlsbF09XCJiYWNrZ3JvdW5kSW5mbz8uYWNjZW50Q29sb3JcIiBmaWxsLW9wYWNpdHk9XCIxXCJcclxuICAgICAgICAgICAgICBkYXRhLW9yaWdpbmFsLWNvbG9yPVwiIzAwMDAwMGZmXCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS1vcGFjaXR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJtMTYgNDcuNjUgMTMuMzggOC41OC40OS05Ljg2LTExLjkzLTcuMTd6XCIgW2F0dHIuZmlsbF09XCJiYWNrZ3JvdW5kSW5mbz8uYWNjZW50Q29sb3JcIiBmaWxsLW9wYWNpdHk9XCIxXCJcclxuICAgICAgICAgICAgICBkYXRhLW9yaWdpbmFsLWNvbG9yPVwiIzAwMDAwMGZmXCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS1vcGFjaXR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgZD1cIm0yNy44NSAzOS4zNHMwIDAtLjAxIDBjMCAwIDAgMC0uMDEgMC0uMDguMDQtLjE2LjA2LS4yNC4wNi0uMDUgMC0uMS0uMDMtLjE1LS4wNC0uMDQtLjAxLS4wOC0uMDEtLjExLS4wM2wtNC4xNi0yLjY3LTQuMzcgMS44MiAxMS42OCA3LjAxIDMwLjQtMTUuMDUtMTAuNzEtMy44OC0yMi4yOCAxMi43OHpcIlxyXG4gICAgICAgICAgICAgIFthdHRyLmZpbGxdPVwiYWNjZW50Q29sb3JcIiBmaWxsLW9wYWNpdHk9XCIxXCIgZGF0YS1vcmlnaW5hbC1jb2xvcj1cIiMwMDAwMDBmZlwiIHN0cm9rZT1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1vcGFjaXR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJtMjguMjYgMzYuMDEtLjEgMS45MyAzMi41OC0xOC42OS0xLjIyLTYuMzktMzAuODYgMTUuMjh6XCIgW2F0dHIuZmlsbF09XCJiYWNrZ3JvdW5kSW5mbz8uYWNjZW50Q29sb3JcIiBmaWxsLW9wYWNpdHk9XCIxXCJcclxuICAgICAgICAgICAgICBkYXRhLW9yaWdpbmFsLWNvbG9yPVwiIzAwMDAwMGZmXCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS1vcGFjaXR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJtMjcuNjEgMjguMDktMTEuOTMtNy4xNi0xLjk0IDguNDMgMTMuMzYgOC41OHpcIiBbYXR0ci5maWxsXT1cImJhY2tncm91bmRJbmZvPy5hY2NlbnRDb2xvclwiIGZpbGwtb3BhY2l0eT1cIjFcIlxyXG4gICAgICAgICAgICAgIGRhdGEtb3JpZ2luYWwtY29sb3I9XCIjMDAwMDAwZmZcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLW9wYWNpdHk9XCIxXCIgLz5cclxuICAgICAgICAgICAgPHBhdGggZD1cIm01OC41NyAxMi4xNS0xMi4xLTQuMzgtMjkuOTcgMTIuNDMgMTEuNjggN3pcIiBbYXR0ci5maWxsXT1cImJhY2tncm91bmRJbmZvPy5hY2NlbnRDb2xvclwiIGZpbGwtb3BhY2l0eT1cIjFcIlxyXG4gICAgICAgICAgICAgIGRhdGEtb3JpZ2luYWwtY29sb3I9XCIjMDAwMDAwZmZcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLW9wYWNpdHk9XCIxXCIgLz5cclxuICAgICAgICAgIDwvZz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8ZGl2IFtzdHlsZS5jb2xvcl09XCJhY2NlbnRDb2xvclwiPlNjaGVtZXM8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZXMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBweS0yIHB4LTNcIiAoY2xpY2spPVwiZ29Ub1N0b3JlcygpXCJcclxuICAgICAgICBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiYmFja2dyb3VuZEluZm8/LmFjY2VudENvbG9yXCIgKm5nSWY9XCJzdG9yZUF2YWlhYmxlXCIgW3N0eWxlLmJhY2tncm91bmRdPVwiZ2V0UkdCQShiYWNrZ3JvdW5kSW5mbz8uYWNjZW50Q29sb3IgLCAxMClcIj5cclxuICAgICAgICA8bWF0LWljb24gW3N0eWxlLmNvbG9yXT1cImJhY2tncm91bmRJbmZvPy5hY2NlbnRDb2xvclwiPnN0b3JlPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBbc3R5bGUuY29sb3JdPVwiYmFja2dyb3VuZEluZm8/LmFjY2VudENvbG9yXCI+U3RvcmVzPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBpbi10ZXh0XCIgKG1vdXNlZW50ZXIpPVwic2hvd1BpbmNvZGVJbnB1dCA9IHRydWU7c2hvd0xvZ2luID0gZmFsc2VcIiBbc3R5bGUuY29sb3JdPVwiYmFja2dyb3VuZEluZm8/LmFjY2VudENvbG9yXCJcclxuICAgICAgICAqbmdJZj1cIiFnZXRQaW5jb2RlXCI+RW50ZXJcclxuICAgICAgICBQaW5jb2RlXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGluLXRleHRcIiAobW91c2VlbnRlcik9XCJzaG93UGluY29kZUlucHV0ID0gdHJ1ZTs7c2hvd0xvZ2luID0gZmFsc2VcIiBbc3R5bGUuY29sb3JdPVwiYmFja2dyb3VuZEluZm8/LmFjY2VudENvbG9yXCJcclxuICAgICAgICAqbmdJZj1cImdldFBpbmNvZGUgJiYgZ2V0UGluY29kZS5sZW5ndGggPT0gNlwiPnt7XCJEZWxpdmVyaW5nIHRvOiBcIiArIGdldFBpbmNvZGV9fTwvZGl2PlxyXG5cclxuICAgICAgPCEtLSAobW91c2VsZWF2ZSk9XCJzaG93UGluY29kZUlucHV0ID0gZmFsc2VcIiAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInBpbmNvZGUtY29udGFpbmVyIHAtM1wiICpuZ0lmPVwic2hvd1BpbmNvZGVJbnB1dFwiIChtb3VzZWxlYXZlKT1cInNob3dQaW5jb2RlSW5wdXQgPSBmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0IHRleHQtY2VudGVyIG1iLTIgZi0xOCBmdy1ib2xkXCI+XHJcbiAgICAgICAgICBZb3VyIFBJTiBDb2RlIHVubG9ja3NcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLXRleHQgdGV4dC1jZW50ZXIgZi0xNCBwaW5jb2RlLXRleHRcIj5cclxuICAgICAgICAgIEZhc3Rlc3QgZGVsaXZlcnkgZGF0ZSwgVHJ5LWF0LUhvbWUgYXZhaWxhYmlsaXR5LFxyXG4gICAgICAgICAgTmVhcmVzdCBzdG9yZSBhbmQgSW4tc3RvcmUgZGVzaWduIVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtdC0yIGJyLTUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBweC0zXCJcclxuICAgICAgICAgIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwicGluRXJyb3JcIj5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJQaW5jb2RlXCIgYXJpYS1sYWJlbD1cIlBpbmNvZGVcIiBbKG5nTW9kZWwpXT1cInBpbmNvZGVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInctNzUgcC0wXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc3ViLXRleHQgZi0xMSB3LTI1IHRleHQtZW5kIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNldFBpbmNvZGUoKVwiPlNVQk1JVDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN0YXJ0IG10LTIgZi0xMVwiICpuZ0lmPVwicGluRXJyb3JcIj5cclxuICAgICAgICAgIFBsZWFzZSBlbnRlciBhIHZhbGlkIHBpbmNvZGVcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJnYXA6IDVweDsgY3Vyc29yOiBwb2ludGVyO1wiIChjbGljayk9XCJnb1RvRmF2KClcIj5cclxuICAgICAgICA8bWF0LWljb24gW3NpbXBvQ29sb3JdPVwiYmFja2dyb3VuZEluZm8/LmNvbG9yXCI+ZmF2b3JpdGU8L21hdC1pY29uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmVcIiBzdHlsZT1cImdhcDogNXB4OyBjdXJzb3I6IHBvaW50ZXI7XCIgKGNsaWNrKT1cImdvVG9DYXJ0KClcIj5cclxuICAgICAgICA8bWF0LWljb24gW3NpbXBvQ29sb3JdPVwiYmFja2dyb3VuZEluZm8/LmNvbG9yXCI+c2hvcHBpbmdfY2FydDwvbWF0LWljb24+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGNhcnRJdGVtQ291bnRcIiAqbmdJZj1cImdldENhcnRJdGVtc0NvdW50XCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZCcgOiBiYWNrZ3JvdW5kSW5mbz8uYWNjZW50QmFja2dyb3VuZFR5cGUgPT0gJ1NvbGlkJyA/ICBiYWNrZ3JvdW5kSW5mbz8uYWNjZW50Q29sb3IgOiAnbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCcgKyBiYWNrZ3JvdW5kSW5mbz8uYWNjZW50Q29sb3IgKyAnIDAlJyArICcsJyArIGJhY2tncm91bmRJbmZvPy5zZWNvbmRhcnlBY2NlbnRDb2xvciArJyAxMDAlJyArICcpJyAsICdjb2xvcicgOiBzZXRDb2xvcigpfVwiPlxyXG4gICAgICAgICAge3tnZXRDYXJ0SXRlbXNDb3VudH19PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibG9naW5CdXR0b25cIiAqbmdJZj1cIiFsb2dnZWRJblwiIChtb3VzZWVudGVyKT1cInNob3dMb2dpbiA9IHRydWU7c2hvd1BpbmNvZGVJbnB1dCA9IGZhbHNlXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIzNVwiIGhlaWdodD1cIjI3XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTEyLjEyIDEyLjc4QzEyLjA1IDEyLjc3IDExLjk2IDEyLjc3IDExLjg4IDEyLjc4QzEwLjEyIDEyLjcyIDguNzE5OTcgMTEuMjggOC43MTk5NyA5LjUwOTk4QzguNzE5OTcgNy42OTk5OCAxMC4xOCA2LjIyOTk4IDEyIDYuMjI5OThDMTMuODEgNi4yMjk5OCAxNS4yOCA3LjY5OTk4IDE1LjI4IDkuNTA5OThDMTUuMjcgMTEuMjggMTMuODggMTIuNzIgMTIuMTIgMTIuNzhaXCJcclxuICAgICAgICAgICAgZmlsbD1cIiMyOTJEMzJcIiBzdHJva2U9XCIjMjkyRDMyXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMTguNzQgMTkuMzhDMTYuOTYgMjEuMDEgMTQuNiAyMiAxMiAyMkM5LjQwMDAxIDIyIDcuMDQwMDEgMjEuMDEgNS4yNjAwMSAxOS4zOEM1LjM2MDAxIDE4LjQ0IDUuOTYwMDEgMTcuNTIgNy4wMzAwMSAxNi44QzkuNzcwMDEgMTQuOTggMTQuMjUgMTQuOTggMTYuOTcgMTYuOEMxOC4wNCAxNy41MiAxOC42NCAxOC40NCAxOC43NCAxOS4zOFpcIlxyXG4gICAgICAgICAgICBmaWxsPVwiIzI5MkQzMlwiIHN0cm9rZT1cIiMyOTJEMzJcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgZD1cIk0xMiAyMkMxNy41MjI4IDIyIDIyIDE3LjUyMjggMjIgMTJDMjIgNi40NzcxNSAxNy41MjI4IDIgMTIgMkM2LjQ3NzE1IDIgMiA2LjQ3NzE1IDIgMTJDMiAxNy41MjI4IDYuNDc3MTUgMjIgMTIgMjJaXCJcclxuICAgICAgICAgICAgc3Ryb2tlPVwiIzI5MkQzMlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgPC9zdmc+IDwhLS0gPHNwYW4gY2xhc3M9XCJmdy1ub3JtYWwgZnMtNlwiIFtzaW1wb0NvbG9yXT1cImFjY2VudENvbG9yXCI+TG9naW48L3NwYW4+IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSAobW91c2VsZWF2ZSk9XCJzaG93TG9naW4gPSBmYWxzZVwiIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1jb250YWluZXIgcC0zXCIgKm5nSWY9XCJzaG93TG9naW5cIiAobW91c2VsZWF2ZSk9XCJzaG93TG9naW4gPSBmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0IHRleHQtY2VudGVyIG1iLTIgZi0xOCBmdy1ib2xkXCI+XHJcbiAgICAgICAgICBZb3VyIEFjY291bnRcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLXRleHQgdGV4dC1jZW50ZXIgZi0xNFwiPlxyXG4gICAgICAgICAgQWNjZXNzIGFjY291bnQgJiBtYW5hZ2UgeW91ciBvcmRlcnMuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIgdy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTMgZ2FwLTNcIj5cclxuICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImdvVG9BY2NvdW50KCdTSUdOVVAnKVwiIGNsYXNzPVwidy01MCB0ZXh0LWNlbnRlciBzaWduLWJ0biBib3JkZXItMFwiXHJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZCcgOiBiYWNrZ3JvdW5kSW5mbz8uYWNjZW50QmFja2dyb3VuZFR5cGUgPT0gJ1NvbGlkJyA/ICAgYWNjZW50Q29sb3IgOiAnbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCcgKyBiYWNrZ3JvdW5kSW5mbz8uYWNjZW50Q29sb3IgKyAnIDAlJyArICcsJyArIGJhY2tncm91bmRJbmZvPy5zZWNvbmRhcnlBY2NlbnRDb2xvciArJyAxMDAlJyArICcpJ31cIlxyXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwic3R5bGU/LmJhY2tncm91bmQ/LmNvbG9yXCI+U2lnbiBVcDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAoY2xpY2spPVwiZ29Ub0FjY291bnQoJ0xPR0lOJylcIiBjbGFzcz1cInctNTAgdGV4dC1jZW50ZXIgc2lnbi1idG5cIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiYmFja2dyb3VuZEluZm8/LmFjY2VudENvbG9yXCJcclxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImJhY2tncm91bmRJbmZvPy5hY2NlbnRDb2xvclwiPkxvZyBJbjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImdhcDogOHB4OyBjdXJzb3I6IHBvaW50ZXI7XCIgKGNsaWNrKT1cImdvVG9BY2NvdW50KCdQUk9GSUxFJylcIlxyXG4gICAgICAgICpuZ0lmPVwibG9nZ2VkSW5cIj5cclxuICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgW3NyY109XCJ1c2VyR2VuZGVyIHwgZ2VuZGVySWNvblwiIHN0eWxlPVwiaGVpZ2h0OiAyN3B4O1wiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSA8ZGl2PiAtLT5cclxuICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJnb1RvQWNjb3VudCgpXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cInNlY3Rpb25JZCtidXR0b25JZFwiIFtidXR0b25TdHlsZV09XCJidXR0b25TdHlsZVwiIFtjb2xvcl09XCJjb2xvclwiIFthcHBCdXR0b25FZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiIFtidXR0b25EYXRhXT1cImJ1dHRvbkNvbnRlbnRcIj57e2J1dHRvbkNvbnRlbnQ/LmxhYmVsfX08L2J1dHRvbj4gLS0+XHJcbiAgICA8IS0tIDwvZGl2PiAtLT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbmF2YmFyTGlua3NUZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwibmF2YmFyLWNvbGxhcHNlIGZzLTYgcG9zaXRpb24tcmVsYXRpdmUgZC1mbGV4XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1sZWZ0OiAyNXB4O1wiXHJcbiAgICBbc2ltcG9Db2xvcl09XCJzaW1wb0NvbG9yXCIgKm5nSWY9XCJzY3JlZW5XaWR0aCA+IDc2OFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXROYXZiYXJCdXR0b25cIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uc2hvd0hlYWRlclwiPlxyXG4gICAgICAgIDxzaW1wby1uYXZiYXItYnV0dG9uLWVsZW1lbnQgW2J1dHRvbkRhdGFdPVwiaXRlbVwiIFtzZWxlY3RlZFN0eWxlXT1cInN0eWxlPy5uYXZpZ2F0aW9uU3R5bGVcIlxyXG4gICAgICAgICAgW2J1dHRvblN0eWxlXT1cInN0eWxlPy5uYXZiYXJCdXR0b25TdHlsZVwiIFtiZ0NvbG9yXT1cInNpbXBvQ29sb3JcIlxyXG4gICAgICAgICAgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiPjwvc2ltcG8tbmF2YmFyLWJ1dHRvbi1lbGVtZW50PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxpbmsgb2YgZ2V0RHJvcGRvd25MaW5rczsgbGV0IGlkeCA9IGluZGV4XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50Py5lY29tbGlua3M/LltsaW5rXT8ubGVuZ3RoIFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJtYXQtYnRuIGRyb3Bkb3duLXRvZ2dsZVwiIHR5cGU9XCJidXR0b25cIiBbc2ltcG9Db2xvcl09XCJzaW1wb0NvbG9yXCIgaWQ9XCJsaW5rXCJcclxuICAgICAgICAgICAgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIHt7bGluayB8IHVwcGVyY2FzZX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwibGlua1wiPlxyXG4gICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAqbmdGb3I9XCJsZXQgbWVudSBvZiBnZXRWYWx1ZXMoY29udGVudD8uZWNvbWxpbmtzPy5bbGlua10pXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXIobWVudSwgbGluaylcIj57e21lbnV9fTwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPGRpdiBjbGFzcz1cIm9mZmNhbnZhcyBvZmZjYW52YXMtZW5kXCIgdGFiaW5kZXg9XCItMVwiIGlkPVwib2ZmY2FudmFzUmlnaHRcIiBhcmlhLWxhYmVsbGVkYnk9XCJvZmZjYW52YXNSaWdodExhYmVsXCJcclxuICBbbmdDbGFzc109XCJ7J29mZmNhbnZhcy1lbmQnIDogc3R5bGU/LnN0eWxpbmcgPT09ICdIZWFkZXIxJyB8fCBzdHlsZT8uc3R5bGluZyA9PT0gJ0hlYWRlcjMnLCAnb2ZmY2FudmFzLXN0YXJ0Jzogc3R5bGU/LnN0eWxpbmcgPT09ICdIZWFkZXIyJyB8fCBzdHlsZT8uc3R5bGluZyA9PT0gJ0hlYWRlcjQnfVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJvZmZjYW52YXMtaGVhZGVyXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9iaWxlTG9nb1NlY3Rpb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiICBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj4gLS0+XHJcbiAgICA8bWF0LWljb24gZGF0YS1icy1kaXNtaXNzPVwib2ZmY2FudmFzXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJvZmZjYW52YXMtYm9keVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhZ2VzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdlTGlua3NUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm9mZmNhbnZhcy1mb290ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYW52YXMtYnV0dG9uXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZWNvbVByb2ZpbGVUZW1wbGF0ZT5cclxuICA8bWF0LWljb24gY2xhc3M9XCJoLTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgYnItNTAgZnMtMTYgcHktMVwiXHJcbiAgICAoY2xpY2spPVwic2hvd1NlYXJjaEJhck1vYmlsZSA9ICFzaG93U2VhcmNoQmFyTW9iaWxlXCJcclxuICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZCcgOiBiYWNrZ3JvdW5kSW5mbz8uYWNjZW50QmFja2dyb3VuZFR5cGUgPT0gJ1NvbGlkJyA/ICAgYmFja2dyb3VuZEluZm8/LmFjY2VudENvbG9yIDogJ2xpbmVhci1ncmFkaWVudCh0byByaWdodCwnICsgYmFja2dyb3VuZEluZm8/LmFjY2VudENvbG9yICsgJyAwJScgKyAnLCcgKyBiYWNrZ3JvdW5kSW5mbz8uc2Vjb25kYXJ5QWNjZW50Q29sb3IgKycgMTAwJScgKyAnKSd9XCJcclxuICAgIFtzdHlsZS5jb2xvcl09XCJiYWNrZ3JvdW5kSW5mbz8uY29sb3JcIj5zZWFyY2g8L21hdC1pY29uPlxyXG5cclxuXHJcbiAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbW9iLWZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFByb2R1Y3RcIiBhcmlhLWxhYmVsPVwiU2VhcmNoIFByb2R1Y3RcIlxyXG4gICAgKm5nSWY9XCJzaG93U2VhcmNoQmFyTW9iaWxlXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgKG5nTW9kZWxDaGFuZ2UpPVwid2FpdEJlZm9yZVNlYXJjaCgpXCJcclxuICAgIFtuZ1N0eWxlXT1cInsnYm9yZGVyJyA6ICcxcHggc29saWQgJyArIGJhY2tncm91bmRJbmZvPy5hY2NlbnRDb2xvcn1cIj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImdhcDogOHB4OyBjdXJzb3I6IHBvaW50ZXI7XCIgKGNsaWNrKT1cImdvVG9BY2NvdW50KCdQUk9GSUxFJylcIlxyXG4gICAgKm5nSWY9XCJsb2dnZWRJblwiPlxyXG4gICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwidXNlckdlbmRlciB8IGdlbmRlckljb25cIiBzdHlsZT1cImhlaWdodDogMjdweDtcIj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbW9iaWxlTG9nb1NlY3Rpb25UZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGFsaWduLWNlbnRlciBjdXJzb3ItcG9pbnRlciBoLTEwMFwiXHJcbiAgICAqbmdJZj1cIiFjb250ZW50Py5sb2dvPy5pc0ltYWdlIHx8ICFjb250ZW50Py5sb2dvPy5pbWFnZT8udXJsXCIgKGNsaWNrKT1cIiFlZGl0ID8gZ29Ub0hvbWUoKSA6ICcnXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiY29udGVudD8ubG9nbz8udGV4dD8uaXNJY29uICYmIGNvbnRlbnQ/LmxvZ28/LnRleHQ/LnVybFwiIGNsYXNzPVwiaC0xMDBcIj5cclxuICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwiY29udGVudD8ubG9nbz8udGV4dD8udXJsXCIgYWx0PVwibG9nb1wiIGNsYXNzPVwiaC0xMDBcIj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRpbmctc21hbGxcIiAqbmdJZj1cImNvbnRlbnQ/LmxvZ28/LnRleHQ/LmlzVGV4dFwiIFtzaW1wb0NvbG9yXT1cInNpbXBvQ29sb3JcIj5cclxuICAgICAgPGIgW25nU3R5bGVdPVwieydmb250LWZhbWlseSc6IGNvbnRlbnQ/LmxvZ28/LnRleHQ/LmZvbnRGYW1pbHl9XCI+e3tjb250ZW50Py5zaXRlTmFtZT8udmFsdWV9fTwvYj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMyBhbGlnbi1pdGVtcy1sZy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cImNvbnRlbnQ/LmxvZ28/LmlzSW1hZ2UgJiYgY29udGVudD8ubG9nbz8uaW1hZ2U/LnVybFwiIChjbGljayk9XCJnb1RvSG9tZSgpXCI+IC0tPlxyXG4gIDxpbWcgW3NyY109XCJjb250ZW50Py5sb2dvPy5pbWFnZT8udXJsXCIgYWx0PVwibG9nb1wiIGNsYXNzPVwiaC0xMDBcIiBsb2FkaW5nPVwibGF6eVwiXHJcbiAgICAqbmdJZj1cImNvbnRlbnQ/LmxvZ28/LmlzSW1hZ2UgJiYgY29udGVudD8ubG9nbz8uaW1hZ2U/LnVybFwiIChjbGljayk9XCIhZWRpdCA/IGdvVG9Ib21lKCkgOiAnJ1wiPlxyXG4gIDwhLS0gPC9kaXY+IC0tPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjYXRlZ29yaWVzSGVhZGVyPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXRlZ29yaWVzLWhlYWRlciBkLWZsZXggZ2FwLTMgIHB5LTIgcG9zaXRpb24tcmVsYXRpdmVcIiAqbmdJZj1cImNhdGVnb3J5TGlzdD8ubGVuZ3RoID4gMCAmJiAhaXNNb2JpbGVcIlxyXG4gICAgW3NwYWNpbmdIb3Jpem9udGFsXT1cInN0eWxlc0xheW91dFwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImRhdGE/LnN0eWxlcz8uaGVhZGxpbmU/LmNvbG9yXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnkgY3Vyc29yLXBvaW50ZXJcIiAqbmdGb3I9XCJsZXQgZWxlIG9mIGNhdGVnb3J5TGlzdDtsZXQgaSA9IGluZGV4XCJcclxuICAgICAgW3N0eWxlLi0tYm9yZGVyLWNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbc2ltcG9Db2xvcl09XCJkYXRhPy5zdHlsZXM/LmhlYWRsaW5lPy5jb2xvclwiXHJcbiAgICAgIChtb3VzZWVudGVyKT1cInNob3dMaXN0ID0gdHJ1ZTtzZWxlY3RlZENhdGVnb3J5ID0gZWxlO3Nob3dDb2xsZWN0aW9ucyA9IGZhbHNlXCI+XHJcbiAgICAgIHt7ZWxlPy5jYXRlZ29yeU5hbWUgfCB0aXRsZWNhc2V9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnkgY3Vyc29yLXBvaW50ZXJcIiAobW91c2VlbnRlcik9XCJzaG93Q29sbGVjdGlvbnMgPSB0cnVlO3Nob3dMaXN0ID0gZmFsc2VcIlxyXG4gICAgICAqbmdJZj1cImNvbGxlY3Rpb25MaXN0Py5jb2xsZWN0aW9ucz8ubGVuZ3RoID4gMFwiIFtzdHlsZS4tLWJvcmRlci1jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcclxuICAgICAgW3NpbXBvQ29sb3JdPVwiZGF0YT8uc3R5bGVzPy5oZWFkbGluZT8uY29sb3JcIj5cclxuICAgICAgQ29sbGVjdGlvbnNcclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gKG1vdXNlbGVhdmUpPVwic2hvd0xpc3QgPSBmYWxzZVwiIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93TGlzdFwiIGNsYXNzPVwibGlzdC1jYXRlZ29yeVwiIChtb3VzZWxlYXZlKT1cInNob3dMaXN0ID0gZmFsc2VcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgdy0xMDAgaC0xMDBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC03IHJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBoLTEwMFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeT8uYnlQcmljZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaGVhZGVyIG1iLTNcIj5CeSBQcmljZTwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMyBsaXN0LWl0ZW1cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcHJpY2Ugb2YgT2JqZWN0LmtleXMoc2VsZWN0ZWRDYXRlZ29yeT8uYnlQcmljZSlcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWFjaC1wcmljZSBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJUb0xpc3Qoc2VsZWN0ZWRDYXRlZ29yeT8uYnlQcmljZVtwcmljZV0sICdwcmljZScpXCI+XHJcbiAgICAgICAgICAgICAgICB7e3ByaWNlIHwgdGl0bGVjYXNlfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgaC0xMDAgb3ZlcmZsb3ctc2Nyb2xsXCJcclxuICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeT8uYnlTdHlsZSAmJiBzZWxlY3RlZENhdGVnb3J5Py5ieVN0eWxlPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1oZWFkZXIgbWItM1wiPkJ5IFN0eWxlPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0zIGxpc3QtaXRlbVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2xsZWN0aW9uIG9mIHNlbGVjdGVkQ2F0ZWdvcnk/LmJ5U3R5bGVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWFjaC1wcmljZSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhcHBseUZpbHRlclRvTGlzdChjb2xsZWN0aW9uLCAnY29sbGVjdGlvbicpXCI+e3tjb2xsZWN0aW9uXHJcbiAgICAgICAgICAgICAgICB8XHJcbiAgICAgICAgICAgICAgICB0aXRsZWNhc2V9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiICpuZ0lmPVwidG9TaG93SW5KZXdlbGxlcnlcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWhlYWRlciBtYi0zXCI+QnkgTWV0YWwgJiBTdG9uZTwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMyBsaXN0LWl0ZW1cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sbGVjdGlvbiBvZiBieU1ldGFsQW5kU3RvbmVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxNXB4O2hlaWdodDogMjBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImNvbGxlY3Rpb24uaW1hZ2VVcmxcIiBhbHQ9XCJcIiBjbGFzcz1cInctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlYWNoLXByaWNlIGN1cnNvci1wb2ludGVyXCI+e3tjb2xsZWN0aW9uLm5hbWVcclxuICAgICAgICAgICAgICAgICAgfFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZWNhc2V9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC01IGgtMTAwIHJvd1wiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeT8uaW1hZ2VVcmxzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW1hZ2Ugb2Ygc2VsZWN0ZWRDYXRlZ29yeT8uaW1hZ2VVcmxzICB8IHNsaWNlOjA6MjsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lciBoLTEwMCBjb2wtNlwiICpuZ0lmPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwiaW1hZ2VcIiBjbGFzcz1cImgtMTAwIHctMTAwXCIgKGNsaWNrKT1cImZpbHRlckJ5Q2F0ZWdvcnkoKVwiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSAobW91c2VsZWF2ZSk9XCJzaG93Q29sbGVjdGlvbnMgPSBmYWxzZVwiIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJsaXN0LWNhdGVnb3J5XCIgKm5nSWY9XCJzaG93Q29sbGVjdGlvbnNcIiAobW91c2VsZWF2ZSk9XCJzaG93Q29sbGVjdGlvbnMgPSBmYWxzZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyB3LTEwMCBoLTEwMFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgcm93XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uTGlzdD8uY29sbGVjdGlvbnNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsZWN0aW9uIHJvdyBjb2wtMyBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJUb0xpc3QoY29sbGVjdGlvbj8uY29sbGVjdGlvbk5hbWUsICdjb2xsZWN0aW9ucycpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtaW1hZyBjb2wtNFwiPlxyXG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCJjb2xsZWN0aW9uPy5pbWdVcmxbMF1cIiBhbHQ9XCJcIiBjbGFzcz1cInctMTAwXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggdGV4dC1vdmVyZmxvd1wiPlxyXG4gICAgICAgICAgICAgIHt7Y29sbGVjdGlvbj8uY29sbGVjdGlvbk5hbWUgfCB0aXRsZWNhc2V9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC01IGgtMTAwIHJvd1wiICpuZ0lmPVwiY29sbGVjdGlvbkxpc3Q/LmltYWdlVXJsc1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltYWdlIG9mIE9iamVjdC5rZXlzKGNvbGxlY3Rpb25MaXN0Py5pbWFnZVVybHMpIHwgc2xpY2U6MDoyOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyIGgtMTAwIGNvbC02ICBwb3NpdGlvbi1yZWxhdGl2ZVwiICpuZ0lmPVwiaW1hZ2VcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJUb0xpc3QoaW1hZ2UsICdjb2xsZWN0aW9ucycpXCI+XHJcbiAgICAgICAgICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiBbc3JjXT1cImNvbGxlY3Rpb25MaXN0Py5pbWFnZVVybHNbaW1hZ2VdXCIgY2xhc3M9XCJoLTEwMCB3LTEwMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcC0yIGJ0bS1jb2wtbmFtZSBwb3NpdGlvbi1hYnNvbHV0ZVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIFtzdHlsZS5jb2xvcl09XCJzZXRDb2xvcigpXCI+e3tpbWFnZX19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbW9iaWxlQ2F0ZWdvcnlIZWFkZXI+XHJcbiAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtaGVhZGVyIGQtZmxleCBnYXAtMyAgcHktMiBvdmVyZmxvdy1hdXRvXCIgKm5nSWY9XCJjYXRlZ29yeUxpc3Q/Lmxlbmd0aCA+IDAgJiYgaXNNb2JpbGVcIlxyXG4gICAgW3NwYWNpbmdIb3Jpem9udGFsXT1cInN0eWxlc0xheW91dFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5IGN1cnNvci1wb2ludGVyIGQtZmxleCBmbGV4LWNvbHVtbiBnYXAtM1wiICpuZ0Zvcj1cImxldCBlbGUgb2YgY2F0ZWdvcnlMaXN0O2xldCBpID0gaW5kZXhcIlxyXG4gICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIChjbGljayk9XCJzZWxlY3RlZENhdGVnb3J5ID0gZWxlOyBmaWx0ZXJCeUNhdGVnb3J5KClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhdC1pbWcgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cImVsZT8uaW1hZ2VVcmxzWzBdXCIgYWx0PVwiXCIgY2xhc3M9XCJoLTEwIGJyLTEyXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgZi0xNFwiPnt7ZWxlPy5jYXRlZ29yeU5hbWUgfCB0aXRsZWNhc2V9fTwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|