UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

77 lines 17.7 kB
import { Component } from '@angular/core'; import { BsModalService } from 'ngx-bootstrap/modal'; import { CookieBannerPreferencesModalComponent } from './cookie-banner-preferences-modal/cookie-banner-preferences-modal.component'; import { CookieBannerDefaultTexts } from './cookie-banner.model'; import { CookieBannerService } from './cookie-banner.service'; import * as i0 from "@angular/core"; import * as i1 from "ngx-bootstrap/modal"; import * as i2 from "./cookie-banner.service"; import * as i3 from "@angular/common"; import * as i4 from "../../i18n/c8y-translate.pipe"; export class CookieBannerComponent { constructor(bsModalService, cookieBannerService) { this.bsModalService = bsModalService; this.cookieBannerService = cookieBannerService; this.shouldDisable = false; } ngOnInit() { this.settings = this.getSettings(); this.cookiePreferences = this.cookieBannerService.getCookiePreferencesConfig(); this.shouldShowCookieBanner(); } getSettings() { const settings = { ...CookieBannerDefaultTexts, ...this.cookieBannerService.getCookieBannerSettings() }; return settings; } onConfigurePreferences() { this.disableButtons(true); const initialState = { configCookiePreferences: this.cookiePreferences }; const modalRef = this.bsModalService.show(CookieBannerPreferencesModalComponent, { initialState }); modalRef.content.closeSubject.subscribe((userCookiePreferences) => { this.disableButtons(false); if (userCookiePreferences) { const policyVersion = this.settings.policyVersion; this.cookieBannerService.setCookies(userCookiePreferences, policyVersion); this.setCookieBannerVisibility(false); } }); } acceptCookies() { const policyVersion = this.settings.policyVersion; this.cookieBannerService.setCookies(this.cookiePreferences || { required: true }, policyVersion); this.setCookieBannerVisibility(false); } rejectCookies() { const policyVersion = this.settings.policyVersion; this.cookieBannerService.setCookies({ required: true, functional: false, marketing: false }, policyVersion); this.setCookieBannerVisibility(false); } shouldShowCookieBanner() { this.setCookieBannerVisibility(this.cookieBannerService.shouldShowCookieBanner()); } disableButtons(shouldDisable) { this.shouldDisable = shouldDisable; } setCookieBannerVisibility(shouldShow) { this.showBanner = shouldShow; this.cookieBannerService.isCookieBannerShowed$.next(shouldShow); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CookieBannerComponent, deps: [{ token: i1.BsModalService }, { token: i2.CookieBannerService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CookieBannerComponent, selector: "c8y-cookie-banner", ngImport: i0, template: "<div class=\"c8y-cookie-banner\">\n <div class=\"container\">\n <div class=\"row p-t-16 p-b-16\" *ngIf=\"showBanner\">\n <div class=\"col-md-2\" *ngIf=\"settings.cookieBannerTitle\">\n <h3>{{ settings.cookieBannerTitle | translate }}</h3>\n <div class=\"p-b-16 visible-sm visible-xs\"></div>\n </div>\n <div class=\"col-md-7\">\n <div class=\"cookie-banner-content text-pre-line\">\n {{ settings.cookieBannerText | translate }}\n <a\n href=\"{{ settings.policyUrl }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n *ngIf=\"settings.policyUrl\"\n class=\"text-primary\"\n >\n {{ 'See also our Privacy Notice.' | translate }}\n </a>\n </div>\n </div>\n <div class=\"col-md-3\">\n <div class=\"row\">\n <div class=\"col-sm-6 col-md-12\">\n <div class=\"p-b-16 visible-sm visible-xs\"></div>\n <button\n class=\"btn btn-primary btn-block\"\n (click)=\"acceptCookies()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Agree and proceed' | translate }}\n </button>\n </div>\n <div class=\"col-sm-6 col-md-12\" *ngIf=\"!!cookiePreferences\">\n <div class=\"p-b-16\"></div>\n <button\n class=\"btn btn-primary btn-block\"\n (click)=\"rejectCookies()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Reject all`cookies`' | translate }}\n </button>\n </div>\n <div class=\"col-sm-6 col-md-12\" *ngIf=\"!!cookiePreferences\">\n <div class=\"p-b-16\"></div>\n <button\n class=\"btn btn-default btn-block\"\n (click)=\"onConfigurePreferences()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Configure preferences' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CookieBannerComponent, decorators: [{ type: Component, args: [{ selector: 'c8y-cookie-banner', template: "<div class=\"c8y-cookie-banner\">\n <div class=\"container\">\n <div class=\"row p-t-16 p-b-16\" *ngIf=\"showBanner\">\n <div class=\"col-md-2\" *ngIf=\"settings.cookieBannerTitle\">\n <h3>{{ settings.cookieBannerTitle | translate }}</h3>\n <div class=\"p-b-16 visible-sm visible-xs\"></div>\n </div>\n <div class=\"col-md-7\">\n <div class=\"cookie-banner-content text-pre-line\">\n {{ settings.cookieBannerText | translate }}\n <a\n href=\"{{ settings.policyUrl }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n *ngIf=\"settings.policyUrl\"\n class=\"text-primary\"\n >\n {{ 'See also our Privacy Notice.' | translate }}\n </a>\n </div>\n </div>\n <div class=\"col-md-3\">\n <div class=\"row\">\n <div class=\"col-sm-6 col-md-12\">\n <div class=\"p-b-16 visible-sm visible-xs\"></div>\n <button\n class=\"btn btn-primary btn-block\"\n (click)=\"acceptCookies()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Agree and proceed' | translate }}\n </button>\n </div>\n <div class=\"col-sm-6 col-md-12\" *ngIf=\"!!cookiePreferences\">\n <div class=\"p-b-16\"></div>\n <button\n class=\"btn btn-primary btn-block\"\n (click)=\"rejectCookies()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Reject all`cookies`' | translate }}\n </button>\n </div>\n <div class=\"col-sm-6 col-md-12\" *ngIf=\"!!cookiePreferences\">\n <div class=\"p-b-16\"></div>\n <button\n class=\"btn btn-default btn-block\"\n (click)=\"onConfigurePreferences()\"\n [disabled]=\"shouldDisable\"\n >\n {{ 'Configure preferences' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }] }], ctorParameters: () => [{ type: i1.BsModalService }, { type: i2.CookieBannerService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLWJhbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb3JlL2Jvb3RzdHJhcC9jb29raWUtYmFubmVyL2Nvb2tpZS1iYW5uZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vY29yZS9ib290c3RyYXAvY29va2llLWJhbm5lci9jb29raWUtYmFubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDZFQUE2RSxDQUFDO0FBQ3BJLE9BQU8sRUFDTCx3QkFBd0IsRUFHekIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7O0FBTTlELE1BQU0sT0FBTyxxQkFBcUI7SUFLaEMsWUFDVSxjQUE4QixFQUM5QixtQkFBd0M7UUFEeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFKbEQsa0JBQWEsR0FBRyxLQUFLLENBQUM7SUFLbkIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDL0UsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLFFBQVEsR0FBRztZQUNmLEdBQUcsd0JBQXdCO1lBQzNCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHVCQUF1QixFQUFFO1NBQ3RELENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsTUFBTSxZQUFZLEdBQUc7WUFDbkIsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtTQUNoRCxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUU7WUFDL0UsWUFBWTtTQUNiLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHFCQUF3QyxFQUFFLEVBQUU7WUFDbkYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixJQUFJLHFCQUFxQixFQUFFLENBQUM7Z0JBQzFCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO2dCQUNsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFLGFBQWEsQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUNsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUNqQyxJQUFJLENBQUMsaUJBQWlCLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQzVDLGFBQWEsQ0FDZCxDQUFDO1FBQ0YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDbEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FDakM7WUFDRSxRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLEVBQ0QsYUFBYSxDQUNkLENBQUM7UUFDRixJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU8sY0FBYyxDQUFDLGFBQXNCO1FBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxVQUFtQjtRQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7K0dBOUVVLHFCQUFxQjttR0FBckIscUJBQXFCLHlEQ2RsQyxrakVBMERBOzs0RkQ1Q2EscUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQ29va2llQmFubmVyUHJlZmVyZW5jZXNNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vY29va2llLWJhbm5lci1wcmVmZXJlbmNlcy1tb2RhbC9jb29raWUtYmFubmVyLXByZWZlcmVuY2VzLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDb29raWVCYW5uZXJEZWZhdWx0VGV4dHMsXG4gIENvb2tpZUJhbm5lclNldHRpbmdzLFxuICBDb29raWVQcmVmZXJlbmNlc1xufSBmcm9tICcuL2Nvb2tpZS1iYW5uZXIubW9kZWwnO1xuaW1wb3J0IHsgQ29va2llQmFubmVyU2VydmljZSB9IGZyb20gJy4vY29va2llLWJhbm5lci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvb2tpZS1iYW5uZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY29va2llLWJhbm5lci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQ29va2llQmFubmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc2V0dGluZ3M6IFBhcnRpYWw8Q29va2llQmFubmVyU2V0dGluZ3M+O1xuICBzaG93QmFubmVyOiBib29sZWFuO1xuICBzaG91bGREaXNhYmxlID0gZmFsc2U7XG4gIGNvb2tpZVByZWZlcmVuY2VzOiBDb29raWVQcmVmZXJlbmNlcztcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb29raWVCYW5uZXJTZXJ2aWNlOiBDb29raWVCYW5uZXJTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncygpO1xuICAgIHRoaXMuY29va2llUHJlZmVyZW5jZXMgPSB0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuZ2V0Q29va2llUHJlZmVyZW5jZXNDb25maWcoKTtcbiAgICB0aGlzLnNob3VsZFNob3dDb29raWVCYW5uZXIoKTtcbiAgfVxuXG4gIGdldFNldHRpbmdzKCk6IFBhcnRpYWw8Q29va2llQmFubmVyU2V0dGluZ3M+IHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHtcbiAgICAgIC4uLkNvb2tpZUJhbm5lckRlZmF1bHRUZXh0cyxcbiAgICAgIC4uLnRoaXMuY29va2llQmFubmVyU2VydmljZS5nZXRDb29raWVCYW5uZXJTZXR0aW5ncygpXG4gICAgfTtcbiAgICByZXR1cm4gc2V0dGluZ3M7XG4gIH1cblxuICBvbkNvbmZpZ3VyZVByZWZlcmVuY2VzKCkge1xuICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnModHJ1ZSk7XG5cbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICBjb25maWdDb29raWVQcmVmZXJlbmNlczogdGhpcy5jb29raWVQcmVmZXJlbmNlc1xuICAgIH07XG5cbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhDb29raWVCYW5uZXJQcmVmZXJlbmNlc01vZGFsQ29tcG9uZW50LCB7XG4gICAgICBpbml0aWFsU3RhdGVcbiAgICB9KTtcblxuICAgIG1vZGFsUmVmLmNvbnRlbnQuY2xvc2VTdWJqZWN0LnN1YnNjcmliZSgodXNlckNvb2tpZVByZWZlcmVuY2VzOiBDb29raWVQcmVmZXJlbmNlcykgPT4ge1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucyhmYWxzZSk7XG4gICAgICBpZiAodXNlckNvb2tpZVByZWZlcmVuY2VzKSB7XG4gICAgICAgIGNvbnN0IHBvbGljeVZlcnNpb24gPSB0aGlzLnNldHRpbmdzLnBvbGljeVZlcnNpb247XG4gICAgICAgIHRoaXMuY29va2llQmFubmVyU2VydmljZS5zZXRDb29raWVzKHVzZXJDb29raWVQcmVmZXJlbmNlcywgcG9saWN5VmVyc2lvbik7XG4gICAgICAgIHRoaXMuc2V0Q29va2llQmFubmVyVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhY2NlcHRDb29raWVzKCkge1xuICAgIGNvbnN0IHBvbGljeVZlcnNpb24gPSB0aGlzLnNldHRpbmdzLnBvbGljeVZlcnNpb247XG4gICAgdGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLnNldENvb2tpZXMoXG4gICAgICB0aGlzLmNvb2tpZVByZWZlcmVuY2VzIHx8IHsgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgIHBvbGljeVZlcnNpb25cbiAgICApO1xuICAgIHRoaXMuc2V0Q29va2llQmFubmVyVmlzaWJpbGl0eShmYWxzZSk7XG4gIH1cblxuICByZWplY3RDb29raWVzKCkge1xuICAgIGNvbnN0IHBvbGljeVZlcnNpb24gPSB0aGlzLnNldHRpbmdzLnBvbGljeVZlcnNpb247XG4gICAgdGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLnNldENvb2tpZXMoXG4gICAgICB7XG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBmdW5jdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgbWFya2V0aW5nOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIHBvbGljeVZlcnNpb25cbiAgICApO1xuICAgIHRoaXMuc2V0Q29va2llQmFubmVyVmlzaWJpbGl0eShmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZFNob3dDb29raWVCYW5uZXIoKSB7XG4gICAgdGhpcy5zZXRDb29raWVCYW5uZXJWaXNpYmlsaXR5KHRoaXMuY29va2llQmFubmVyU2VydmljZS5zaG91bGRTaG93Q29va2llQmFubmVyKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlQnV0dG9ucyhzaG91bGREaXNhYmxlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG91bGREaXNhYmxlID0gc2hvdWxkRGlzYWJsZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29va2llQmFubmVyVmlzaWJpbGl0eShzaG91bGRTaG93OiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG93QmFubmVyID0gc2hvdWxkU2hvdztcbiAgICB0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuaXNDb29raWVCYW5uZXJTaG93ZWQkLm5leHQoc2hvdWxkU2hvdyk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjOHktY29va2llLWJhbm5lclwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBwLXQtMTYgcC1iLTE2XCIgKm5nSWY9XCJzaG93QmFubmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIiAqbmdJZj1cInNldHRpbmdzLmNvb2tpZUJhbm5lclRpdGxlXCI+XG4gICAgICAgIDxoMz57eyBzZXR0aW5ncy5jb29raWVCYW5uZXJUaXRsZSB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLWItMTYgdmlzaWJsZS1zbSB2aXNpYmxlLXhzXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtN1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29va2llLWJhbm5lci1jb250ZW50IHRleHQtcHJlLWxpbmVcIj5cbiAgICAgICAgICB7eyBzZXR0aW5ncy5jb29raWVCYW5uZXJUZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGhyZWY9XCJ7eyBzZXR0aW5ncy5wb2xpY3lVcmwgfX1cIlxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJzZXR0aW5ncy5wb2xpY3lVcmxcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdTZWUgYWxzbyBvdXIgUHJpdmFjeSBOb3RpY2UuJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02IGNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtYi0xNiB2aXNpYmxlLXNtIHZpc2libGUteHNcIj48L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWJsb2NrXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjY2VwdENvb2tpZXMoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzaG91bGREaXNhYmxlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ0FncmVlIGFuZCBwcm9jZWVkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02IGNvbC1tZC0xMlwiICpuZ0lmPVwiISFjb29raWVQcmVmZXJlbmNlc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtYi0xNlwiPjwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2tcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVqZWN0Q29va2llcygpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNob3VsZERpc2FibGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnUmVqZWN0IGFsbGBjb29raWVzYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNiBjb2wtbWQtMTJcIiAqbmdJZj1cIiEhY29va2llUHJlZmVyZW5jZXNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWItMTZcIj48L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLWJsb2NrXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ29uZmlndXJlUHJlZmVyZW5jZXMoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzaG91bGREaXNhYmxlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ0NvbmZpZ3VyZSBwcmVmZXJlbmNlcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19