@spartacus/storefront
Version:
Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.
96 lines • 17.9 kB
JavaScript
import { ChangeDetectionStrategy, Component, ViewChildren, } from '@angular/core';
import { combineLatest } from 'rxjs';
import { distinctUntilChanged, map, switchMap, take } from 'rxjs/operators';
import { ComponentWrapperDirective } from '../../../cms-structure/page/component/component-wrapper.directive';
import { BREAKPOINT } from '../../../layout/config/layout-config';
import * as i0 from "@angular/core";
import * as i1 from "../../../cms-structure/page/model/index";
import * as i2 from "@spartacus/core";
import * as i3 from "../../../layout/breakpoint/breakpoint.service";
import * as i4 from "@angular/common";
import * as i5 from "../../../cms-structure/outlet/outlet.directive";
import * as i6 from "../../../cms-structure/page/component/component-wrapper.directive";
export class TabParagraphContainerComponent {
constructor(componentData, cmsService, winRef, breakpointService) {
this.componentData = componentData;
this.cmsService = cmsService;
this.winRef = winRef;
this.breakpointService = breakpointService;
this.activeTabNum = 0;
this.tabTitleParams = [];
this.components$ = this.componentData.data$.pipe(distinctUntilChanged((x, y) => (x === null || x === void 0 ? void 0 : x.components) === (y === null || y === void 0 ? void 0 : y.components)), switchMap((data) => {
var _a;
return combineLatest(((_a = data === null || data === void 0 ? void 0 : data.components) !== null && _a !== void 0 ? _a : '').split(' ').map((component) => this.cmsService.getComponentData(component).pipe(distinctUntilChanged(), map((tab) => {
if (!tab) {
return undefined;
}
if (!tab.flexType) {
tab = Object.assign(Object.assign({}, tab), { flexType: tab.typeCode });
}
return Object.assign(Object.assign({}, tab), { title: `${data.uid}.tabs.${tab.uid}` });
}))));
}));
}
select(tabNum, event) {
var _a;
(_a = this.breakpointService) === null || _a === void 0 ? void 0 : _a.isDown(BREAKPOINT.sm).pipe(take(1)).subscribe((res) => {
var _a, _b;
if (res) {
this.activeTabNum = this.activeTabNum === tabNum ? -1 : tabNum;
if (event && (event === null || event === void 0 ? void 0 : event.target)) {
const target = event.target;
const parentNode = target.parentNode;
(_b = (_a = this.winRef) === null || _a === void 0 ? void 0 : _a.nativeWindow) === null || _b === void 0 ? void 0 : _b.scrollTo(0, parentNode.offsetTop);
}
}
else {
this.activeTabNum = tabNum;
}
});
}
ngOnInit() {
var _a, _b, _c, _d, _e;
this.activeTabNum =
(_e = (_d = (_c = (_b = (_a = this.winRef) === null || _a === void 0 ? void 0 : _a.nativeWindow) === null || _b === void 0 ? void 0 : _b.history) === null || _c === void 0 ? void 0 : _c.state) === null || _d === void 0 ? void 0 : _d.activeTab) !== null && _e !== void 0 ? _e : this.activeTabNum;
}
ngAfterViewInit() {
// If the sub cms components data exist, the components created before ngAfterViewInit are called.
// In this case, the title parameters are directly pulled from them.
if (this.children.length > 0) {
this.getTitleParams(this.children);
}
}
tabCompLoaded(componentRef) {
this.tabTitleParams.push(componentRef.instance.tabTitleParam$);
}
getTitleParams(children) {
children.forEach((comp) => {
var _a;
if ((_a = comp.cmpRef) === null || _a === void 0 ? void 0 : _a.instance.tabTitleParam$) {
this.tabTitleParams.push(comp.cmpRef.instance.tabTitleParam$);
}
else {
this.tabTitleParams.push(null);
}
});
}
ngOnDestroy() {
if (this.subscription) {
this.subscription.unsubscribe();
}
}
}
TabParagraphContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: TabParagraphContainerComponent, deps: [{ token: i1.CmsComponentData }, { token: i2.CmsService }, { token: i2.WindowRef }, { token: i3.BreakpointService }], target: i0.ɵɵFactoryTarget.Component });
TabParagraphContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: TabParagraphContainerComponent, selector: "cx-tab-paragraph-container", viewQueries: [{ propertyName: "children", predicate: ComponentWrapperDirective, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"components$ | async as components\">\n <ng-container *ngFor=\"let component of components; let i = index\">\n <ng-container *ngIf=\"component\">\n <button [class.active]=\"i === activeTabNum\" (click)=\"select(i, $event)\">\n {{\n component.title | cxTranslate: { param: tabTitleParams[i] | async }\n }}\n </button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngFor=\"let component of components; let i = index\">\n <ng-container *ngIf=\"component\">\n <div [class.active]=\"i === activeTabNum\">\n <ng-template [cxOutlet]=\"component.flexType\" [cxOutletContext]=\"{}\">\n <ng-container\n [cxComponentWrapper]=\"component\"\n (cxComponentRef)=\"tabCompLoaded($event)\"\n ></ng-container>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n</ng-container>\n", directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.OutletDirective, selector: "[cxOutlet]", inputs: ["cxOutlet", "cxOutletContext", "cxOutletDefer"], outputs: ["loaded"] }, { type: i6.ComponentWrapperDirective, selector: "[cxComponentWrapper]", inputs: ["cxComponentWrapper"], outputs: ["cxComponentRef"] }], pipes: { "async": i4.AsyncPipe, "cxTranslate": i2.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: TabParagraphContainerComponent, decorators: [{
type: Component,
args: [{
selector: 'cx-tab-paragraph-container',
templateUrl: './tab-paragraph-container.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], ctorParameters: function () { return [{ type: i1.CmsComponentData }, { type: i2.CmsService }, { type: i2.WindowRef }, { type: i3.BreakpointService }]; }, propDecorators: { children: [{
type: ViewChildren,
args: [ComponentWrapperDirective]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLXBhcmFncmFwaC1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RvcmVmcm9udGxpYi9jbXMtY29tcG9uZW50cy9jb250ZW50L3RhYi1wYXJhZ3JhcGgtY29udGFpbmVyL3RhYi1wYXJhZ3JhcGgtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0b3JlZnJvbnRsaWIvY21zLWNvbXBvbmVudHMvY29udGVudC90YWItcGFyYWdyYXBoLWNvbnRhaW5lci90YWItcGFyYWdyYXBoLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFJVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUFFLGFBQWEsRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFHOUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7OztBQU9sRSxNQUFNLE9BQU8sOEJBQThCO0lBYXpDLFlBQ1MsYUFBeUQsRUFDdEQsVUFBc0IsRUFDdEIsTUFBaUIsRUFDakIsaUJBQW9DO1FBSHZDLGtCQUFhLEdBQWIsYUFBYSxDQUE0QztRQUN0RCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWRoRCxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUtqQixtQkFBYyxHQUErQixFQUFFLENBQUM7UUFZaEQsZ0JBQVcsR0FB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LENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sY0FBYyxDQUFDLFFBQThDO1FBQ25FLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs7WUFDeEIsSUFBSSxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLFFBQVEsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQy9EO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2hDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQzs7MkhBbkdVLDhCQUE4QjsrR0FBOUIsOEJBQThCLCtGQUszQix5QkFBeUIsZ0RDL0J6QyxxNUJBd0JBOzJGREVhLDhCQUE4QjtrQkFMMUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxXQUFXLEVBQUUsMENBQTBDO29CQUN2RCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7d0xBT0MsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDbXNTZXJ2aWNlLFxuICBDTVNUYWJQYXJhZ3JhcGhDb250YWluZXIsXG4gIFdpbmRvd1JlZixcbn0gZnJvbSAnQHNwYXJ0YWN1cy9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50V3JhcHBlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2Ntcy1zdHJ1Y3R1cmUvcGFnZS9jb21wb25lbnQvY29tcG9uZW50LXdyYXBwZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IENtc0NvbXBvbmVudERhdGEgfSBmcm9tICcuLi8uLi8uLi9jbXMtc3RydWN0dXJlL3BhZ2UvbW9kZWwvaW5kZXgnO1xuaW1wb3J0IHsgQnJlYWtwb2ludFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9sYXlvdXQvYnJlYWtwb2ludC9icmVha3BvaW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQlJFQUtQT0lOVCB9IGZyb20gJy4uLy4uLy4uL2xheW91dC9jb25maWcvbGF5b3V0LWNvbmZpZyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2N4LXRhYi1wYXJhZ3JhcGgtY29udGFpbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYi1wYXJhZ3JhcGgtY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYlBhcmFncmFwaENvbnRhaW5lckNvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95XG57XG4gIGFjdGl2ZVRhYk51bSA9IDA7XG5cbiAgQFZpZXdDaGlsZHJlbihDb21wb25lbnRXcmFwcGVyRGlyZWN0aXZlKVxuICBjaGlsZHJlbiE6IFF1ZXJ5TGlzdDxDb21wb25lbnRXcmFwcGVyRGlyZWN0aXZlPjtcblxuICB0YWJUaXRsZVBhcmFtczogKE9ic2VydmFibGU8YW55PiB8IG51bGwpW10gPSBbXTtcblxuICAvLyBUT0RPOiBpdCBpcyBub3QgdXNlZCBhbnkgbW9yZSwgc28gY2FuIGJlIHJlbW92ZWQgaW4gNS4wXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb21wb25lbnREYXRhOiBDbXNDb21wb25lbnREYXRhPENNU1RhYlBhcmFncmFwaENvbnRhaW5lcj4sXG4gICAgcHJvdGVjdGVkIGNtc1NlcnZpY2U6IENtc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHdpblJlZjogV2luZG93UmVmLFxuICAgIHByb3RlY3RlZCBicmVha3BvaW50U2VydmljZTogQnJlYWtwb2ludFNlcnZpY2VcbiAgKSB7fVxuXG4gIGNvbXBvbmVudHMkOiBPYnNlcnZhYmxlPGFueVtdPiA9IHRoaXMuY29tcG9uZW50RGF0YS5kYXRhJC5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCh4LCB5KSA9PiB4Py5jb21wb25lbnRzID09PSB5Py5jb21wb25lbnRzKSxcbiAgICBzd2l0Y2hNYXAoKGRhdGEpID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFxuICAgICAgICAoZGF0YT8uY29tcG9uZW50cyA/PyAnJykuc3BsaXQoJyAnKS5tYXAoKGNvbXBvbmVudCkgPT5cbiAgICAgICAgICB0aGlzLmNtc1NlcnZpY2UuZ2V0Q29tcG9uZW50RGF0YTxhbnk+KGNvbXBvbmVudCkucGlwZShcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICBtYXAoKHRhYikgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXRhYikge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIXRhYi5mbGV4VHlwZSkge1xuICAgICAgICAgICAgICAgIHRhYiA9IHtcbiAgICAgICAgICAgICAgICAgIC4uLnRhYixcbiAgICAgICAgICAgICAgICAgIGZsZXhUeXBlOiB0YWIudHlwZUNvZGUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4udGFiLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBgJHtkYXRhLnVpZH0udGFicy4ke3RhYi51aWR9YCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHNlbGVjdCh0YWJOdW06IG51bWJlciwgZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5icmVha3BvaW50U2VydmljZVxuICAgICAgPy5pc0Rvd24oQlJFQUtQT0lOVC5zbSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiTnVtID0gdGhpcy5hY3RpdmVUYWJOdW0gPT09IHRhYk51bSA/IC0xIDogdGFiTnVtO1xuICAgICAgICAgIGlmIChldmVudCAmJiBldmVudD8udGFyZ2V0KSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGFyZ2V0LnBhcmVudE5vZGUgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLndpblJlZj8ubmF0aXZlV2luZG93Py5zY3JvbGxUbygwLCBwYXJlbnROb2RlLm9mZnNldFRvcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiTnVtID0gdGFiTnVtO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlVGFiTnVtID1cbiAgICAgIHRoaXMud2luUmVmPy5uYXRpdmVXaW5kb3c/Lmhpc3Rvcnk/LnN0YXRlPy5hY3RpdmVUYWIgPz8gdGhpcy5hY3RpdmVUYWJOdW07XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gSWYgdGhlIHN1YiBjbXMgY29tcG9uZW50cyBkYXRhIGV4aXN0LCB0aGUgY29tcG9uZW50cyBjcmVhdGVkIGJlZm9yZSBuZ0FmdGVyVmlld0luaXQgYXJlIGNhbGxlZC5cbiAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSB0aXRsZSBwYXJhbWV0ZXJzIGFyZSBkaXJlY3RseSBwdWxsZWQgZnJvbSB0aGVtLlxuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZ2V0VGl0bGVQYXJhbXModGhpcy5jaGlsZHJlbik7XG4gICAgfVxuICB9XG5cbiAgdGFiQ29tcExvYWRlZChjb21wb25lbnRSZWY6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudGFiVGl0bGVQYXJhbXMucHVzaChjb21wb25lbnRSZWYuaW5zdGFuY2UudGFiVGl0bGVQYXJhbSQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUaXRsZVBhcmFtcyhjaGlsZHJlbjogUXVlcnlMaXN0PENvbXBvbmVudFdyYXBwZXJEaXJlY3RpdmU+KSB7XG4gICAgY2hpbGRyZW4uZm9yRWFjaCgoY29tcCkgPT4ge1xuICAgICAgaWYgKGNvbXAuY21wUmVmPy5pbnN0YW5jZS50YWJUaXRsZVBhcmFtJCkge1xuICAgICAgICB0aGlzLnRhYlRpdGxlUGFyYW1zLnB1c2goY29tcC5jbXBSZWYuaW5zdGFuY2UudGFiVGl0bGVQYXJhbSQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50YWJUaXRsZVBhcmFtcy5wdXNoKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudHMkIHwgYXN5bmMgYXMgY29tcG9uZW50c1wiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb21wb25lbnQgb2YgY29tcG9uZW50czsgbGV0IGkgPSBpbmRleFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnRcIj5cbiAgICAgIDxidXR0b24gW2NsYXNzLmFjdGl2ZV09XCJpID09PSBhY3RpdmVUYWJOdW1cIiAoY2xpY2spPVwic2VsZWN0KGksICRldmVudClcIj5cbiAgICAgICAge3tcbiAgICAgICAgICBjb21wb25lbnQudGl0bGUgfCBjeFRyYW5zbGF0ZTogeyBwYXJhbTogdGFiVGl0bGVQYXJhbXNbaV0gfCBhc3luYyB9XG4gICAgICAgIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29tcG9uZW50IG9mIGNvbXBvbmVudHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50XCI+XG4gICAgICA8ZGl2IFtjbGFzcy5hY3RpdmVdPVwiaSA9PT0gYWN0aXZlVGFiTnVtXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbY3hPdXRsZXRdPVwiY29tcG9uZW50LmZsZXhUeXBlXCIgW2N4T3V0bGV0Q29udGV4dF09XCJ7fVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtjeENvbXBvbmVudFdyYXBwZXJdPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgIChjeENvbXBvbmVudFJlZik9XCJ0YWJDb21wTG9hZGVkKCRldmVudClcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19