UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

53 lines 16.5 kB
import { Component, Input } from '@angular/core'; import { ApplyBrandingToAppService } from './apply-branding-to-app.service'; import { FormBuilder, ReactiveFormsModule } from '@angular/forms'; import { NgIf } from '@angular/common'; import { CoreModule } from '@c8y/ngx-components'; import { merge, of } from 'rxjs'; import { map } from 'rxjs/operators'; import { uniqBy } from 'lodash-es'; import * as i0 from "@angular/core"; import * as i1 from "./apply-branding-to-app.service"; import * as i2 from "@angular/forms"; import * as i3 from "@c8y/ngx-components"; import * as i4 from "@angular/common"; export class ApplyBrandingToAppModalComponent { constructor(apply, formBuilder) { this.apply = apply; this.formBuilder = formBuilder; this.brandableApps = []; this.result = new Promise((resolve, reject) => { this._resovle = resolve; this._reject = reject; }); } async ngOnInit() { const brandableApps = await this.apply.getBrandableApps(); this.brandableApps = uniqBy(brandableApps, 'contextPath'); const tags = this.brandableApps.map(app => app.contextPath); this.form = this.initForm(tags); if (this.currentTags.length) { this.form.patchValue(this.currentTags.reduce((prev, curr) => Object.assign(prev, { [curr]: true }), {})); } this.numberOfSelectedApps$ = merge(this.form.valueChanges, of(this.form.value)).pipe(map(value => Object.values(value).filter(Boolean).length)); } save() { this._resovle(this.form.value); } cancel() { this._reject(); } initForm(tags) { const tagsFormMap = tags.reduceRight((prev, curr) => Object.assign(prev, { [curr]: this.formBuilder.control(false) }), {}); return this.formBuilder.group(tagsFormMap); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplyBrandingToAppModalComponent, deps: [{ token: i1.ApplyBrandingToAppService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ApplyBrandingToAppModalComponent, isStandalone: true, selector: "c8y-apply-branding-to-app-modal", inputs: { currentTags: "currentTags" }, ngImport: i0, template: "<c8y-modal\n [title]=\"'Apply branding to apps' | translate\"\n [disabled]=\"!form || form.invalid || !brandableApps.length\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n <ng-container c8y-modal-title>\n <span c8yIcon=\"palette\"></span>\n </ng-container>\n <c8y-list-group\n class=\"m-b-0 no-border-last\"\n *ngIf=\"form\"\n [formGroup]=\"form\"\n >\n <c8y-li>\n <p\n class=\"text-center text-medium\"\n *ngIf=\"numberOfSelectedApps$ | async as numberOfApps; else noapps\"\n translate\n >\n {{ numberOfApps }} apps selected for branding\n </p>\n <ng-template #noapps>\n <p\n class=\"text-center text-medium\"\n translate\n >\n No apps selected for branding\n </p>\n </ng-template>\n </c8y-li>\n <c8y-li *ngFor=\"let app of brandableApps\">\n <c8y-li-icon>\n <c8y-app-icon\n class=\"icon-40\"\n [app]=\"app\"\n ></c8y-app-icon>\n </c8y-li-icon>\n <c8y-li-checkbox\n [attr.data-cy]=\"'branding-apply-branding-to-app-checkbox-' + app.contextPath\"\n [formControlName]=\"app.contextPath\"\n ></c8y-li-checkbox>\n <c8y-li-body class=\"p-t-8 d-block\">{{ app | humanizeAppName | async }}</c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n</c8y-modal>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CoreModule }, { kind: "component", type: i3.AppIconComponent, selector: "c8y-app-icon", inputs: ["contextPath", "name", "app"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.HumanizeAppNamePipe, name: "humanizeAppName" }, { kind: "component", type: i3.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i3.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplyBrandingToAppModalComponent, decorators: [{ type: Component, args: [{ selector: 'c8y-apply-branding-to-app-modal', standalone: true, imports: [NgIf, ReactiveFormsModule, CoreModule], template: "<c8y-modal\n [title]=\"'Apply branding to apps' | translate\"\n [disabled]=\"!form || form.invalid || !brandableApps.length\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n <ng-container c8y-modal-title>\n <span c8yIcon=\"palette\"></span>\n </ng-container>\n <c8y-list-group\n class=\"m-b-0 no-border-last\"\n *ngIf=\"form\"\n [formGroup]=\"form\"\n >\n <c8y-li>\n <p\n class=\"text-center text-medium\"\n *ngIf=\"numberOfSelectedApps$ | async as numberOfApps; else noapps\"\n translate\n >\n {{ numberOfApps }} apps selected for branding\n </p>\n <ng-template #noapps>\n <p\n class=\"text-center text-medium\"\n translate\n >\n No apps selected for branding\n </p>\n </ng-template>\n </c8y-li>\n <c8y-li *ngFor=\"let app of brandableApps\">\n <c8y-li-icon>\n <c8y-app-icon\n class=\"icon-40\"\n [app]=\"app\"\n ></c8y-app-icon>\n </c8y-li-icon>\n <c8y-li-checkbox\n [attr.data-cy]=\"'branding-apply-branding-to-app-checkbox-' + app.contextPath\"\n [formControlName]=\"app.contextPath\"\n ></c8y-li-checkbox>\n <c8y-li-body class=\"p-t-8 d-block\">{{ app | humanizeAppName | async }}</c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n</c8y-modal>\n" }] }], ctorParameters: () => [{ type: i1.ApplyBrandingToAppService }, { type: i2.FormBuilder }], propDecorators: { currentTags: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktYnJhbmRpbmctdG8tYXBwLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2JyYW5kaW5nL3NoYXJlZC9sYXp5L2FwcGx5LWJyYW5kaW5nLXRvLWFwcC1tb2RhbC9hcHBseS1icmFuZGluZy10by1hcHAtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYXBwbHktYnJhbmRpbmctdG8tYXBwLW1vZGFsL2FwcGx5LWJyYW5kaW5nLXRvLWFwcC1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFlLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQWMsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7O0FBUW5DLE1BQU0sT0FBTyxnQ0FBZ0M7SUFhM0MsWUFDVSxLQUFnQyxFQUNoQyxXQUF3QjtRQUR4QixVQUFLLEdBQUwsS0FBSyxDQUEyQjtRQUNoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWJsQyxrQkFBYSxHQUF1RSxFQUFFLENBQUM7UUFJdkYsV0FBTSxHQUFHLElBQUksT0FBTyxDQUE0QyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNsRixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQU9BLENBQUM7SUFFSixLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMxRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNuRixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2xGLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVPLFFBQVEsQ0FBQyxJQUFjO1FBQzdCLE1BQU0sV0FBVyxHQUF5QyxJQUFJLENBQUMsV0FBVyxDQUN4RSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQ2hGLEVBQUUsQ0FDSCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3QyxDQUFDOytHQS9DVSxnQ0FBZ0M7bUdBQWhDLGdDQUFnQyxtSUNmN0MseTZDQWdEQSw0Q0RuQ1ksSUFBSSw0RkFBRSxtQkFBbUIsbWxCQUFFLFVBQVU7OzRGQUVwQyxnQ0FBZ0M7a0JBTjVDLFNBQVM7K0JBQ0UsaUNBQWlDLGNBRS9CLElBQUksV0FDUCxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRSxVQUFVLENBQUM7d0hBR3ZDLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGx5QnJhbmRpbmdUb0FwcFNlcnZpY2UgfSBmcm9tICcuL2FwcGx5LWJyYW5kaW5nLXRvLWFwcC5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29yZU1vZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWVyZ2UsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyB1bmlxQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYXBwbHktYnJhbmRpbmctdG8tYXBwLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcGx5LWJyYW5kaW5nLXRvLWFwcC1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ0lmLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBDb3JlTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBBcHBseUJyYW5kaW5nVG9BcHBNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGN1cnJlbnRUYWdzOiBzdHJpbmdbXTtcbiAgYnJhbmRhYmxlQXBwczogQXdhaXRlZDxSZXR1cm5UeXBlPEFwcGx5QnJhbmRpbmdUb0FwcFNlcnZpY2VbJ2dldEJyYW5kYWJsZUFwcHMnXT4+ID0gW107XG4gIGZvcm06IFJldHVyblR5cGU8QXBwbHlCcmFuZGluZ1RvQXBwTW9kYWxDb21wb25lbnRbJ2luaXRGb3JtJ10+O1xuICBudW1iZXJPZlNlbGVjdGVkQXBwcyQ6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICByZXN1bHQgPSBuZXcgUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmluaXRGb3JtPlsndmFsdWUnXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRoaXMuX3Jlc292bGUgPSByZXNvbHZlO1xuICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBfcmVzb3ZsZTogKHZhbHVlOiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmluaXRGb3JtPlsndmFsdWUnXSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcGx5OiBBcHBseUJyYW5kaW5nVG9BcHBTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBicmFuZGFibGVBcHBzID0gYXdhaXQgdGhpcy5hcHBseS5nZXRCcmFuZGFibGVBcHBzKCk7XG4gICAgdGhpcy5icmFuZGFibGVBcHBzID0gdW5pcUJ5KGJyYW5kYWJsZUFwcHMsICdjb250ZXh0UGF0aCcpO1xuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmJyYW5kYWJsZUFwcHMubWFwKGFwcCA9PiBhcHAuY29udGV4dFBhdGgpO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuaW5pdEZvcm0odGFncyk7XG4gICAgaWYgKHRoaXMuY3VycmVudFRhZ3MubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAgdGhpcy5jdXJyZW50VGFncy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IE9iamVjdC5hc3NpZ24ocHJldiwgeyBbY3Vycl06IHRydWUgfSksIHt9KVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5udW1iZXJPZlNlbGVjdGVkQXBwcyQgPSBtZXJnZSh0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLCBvZih0aGlzLmZvcm0udmFsdWUpKS5waXBlKFxuICAgICAgbWFwKHZhbHVlID0+IE9iamVjdC52YWx1ZXModmFsdWUpLmZpbHRlcihCb29sZWFuKS5sZW5ndGgpXG4gICAgKTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5fcmVzb3ZsZSh0aGlzLmZvcm0udmFsdWUpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuX3JlamVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSh0YWdzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IHRhZ3NGb3JtTWFwOiBSZWNvcmQ8c3RyaW5nLCBGb3JtQ29udHJvbDxib29sZWFuPj4gPSB0YWdzLnJlZHVjZVJpZ2h0KFxuICAgICAgKHByZXYsIGN1cnIpID0+IE9iamVjdC5hc3NpZ24ocHJldiwgeyBbY3Vycl06IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChmYWxzZSkgfSksXG4gICAgICB7fVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAodGFnc0Zvcm1NYXApO1xuICB9XG59XG4iLCI8Yzh5LW1vZGFsXG4gIFt0aXRsZV09XCInQXBwbHkgYnJhbmRpbmcgdG8gYXBwcycgfCB0cmFuc2xhdGVcIlxuICBbZGlzYWJsZWRdPVwiIWZvcm0gfHwgZm9ybS5pbnZhbGlkIHx8ICFicmFuZGFibGVBcHBzLmxlbmd0aFwiXG4gIFtoZWFkZXJDbGFzc2VzXT1cIidkaWFsb2ctaGVhZGVyJ1wiXG4gIChvbkRpc21pc3MpPVwiY2FuY2VsKClcIlxuICAob25DbG9zZSk9XCJzYXZlKClcIlxuICBbbGFiZWxzXT1cInsgY2FuY2VsOiAnQ2FuY2VsJywgb2s6ICdTYXZlJyB9XCJcbj5cbiAgPG5nLWNvbnRhaW5lciBjOHktbW9kYWwtdGl0bGU+XG4gICAgPHNwYW4gYzh5SWNvbj1cInBhbGV0dGVcIj48L3NwYW4+XG4gIDwvbmctY29udGFpbmVyPlxuICA8Yzh5LWxpc3QtZ3JvdXBcbiAgICBjbGFzcz1cIm0tYi0wIG5vLWJvcmRlci1sYXN0XCJcbiAgICAqbmdJZj1cImZvcm1cIlxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gID5cbiAgICA8Yzh5LWxpPlxuICAgICAgPHBcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LW1lZGl1bVwiXG4gICAgICAgICpuZ0lmPVwibnVtYmVyT2ZTZWxlY3RlZEFwcHMkIHwgYXN5bmMgYXMgbnVtYmVyT2ZBcHBzOyBlbHNlIG5vYXBwc1wiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICB7eyBudW1iZXJPZkFwcHMgfX0gYXBwcyBzZWxlY3RlZCBmb3IgYnJhbmRpbmdcbiAgICAgIDwvcD5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9hcHBzPlxuICAgICAgICA8cFxuICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tZWRpdW1cIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgTm8gYXBwcyBzZWxlY3RlZCBmb3IgYnJhbmRpbmdcbiAgICAgICAgPC9wPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2M4eS1saT5cbiAgICA8Yzh5LWxpICpuZ0Zvcj1cImxldCBhcHAgb2YgYnJhbmRhYmxlQXBwc1wiPlxuICAgICAgPGM4eS1saS1pY29uPlxuICAgICAgICA8Yzh5LWFwcC1pY29uXG4gICAgICAgICAgY2xhc3M9XCJpY29uLTQwXCJcbiAgICAgICAgICBbYXBwXT1cImFwcFwiXG4gICAgICAgID48L2M4eS1hcHAtaWNvbj5cbiAgICAgIDwvYzh5LWxpLWljb24+XG4gICAgICA8Yzh5LWxpLWNoZWNrYm94XG4gICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2JyYW5kaW5nLWFwcGx5LWJyYW5kaW5nLXRvLWFwcC1jaGVja2JveC0nICsgYXBwLmNvbnRleHRQYXRoXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJhcHAuY29udGV4dFBhdGhcIlxuICAgICAgPjwvYzh5LWxpLWNoZWNrYm94PlxuICAgICAgPGM4eS1saS1ib2R5IGNsYXNzPVwicC10LTggZC1ibG9ja1wiPnt7IGFwcCB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jIH19PC9jOHktbGktYm9keT5cbiAgICA8L2M4eS1saT5cbiAgPC9jOHktbGlzdC1ncm91cD5cbjwvYzh5LW1vZGFsPlxuIl19