ngx-slice-kit
Version:
[](https://badge.fury.io/js/ngx-slice-kit)
114 lines • 18.3 kB
JavaScript
import { Component, EventEmitter, HostBinding, Inject, Input, Output, PLATFORM_ID, ViewChild } from '@angular/core';
import { animate, state, style, transition, trigger } from '@angular/animations';
// internal
import { DialogDirective } from './dialog.directive';
import { NavigationStart } from '@angular/router';
import { filter } from 'rxjs/operators';
import { DOCUMENT, isPlatformBrowser } from '@angular/common';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
import * as i2 from "./dialog.directive";
export class DialogComponent {
constructor(document, platformId, cfResolver, router) {
this.document = document;
this.platformId = platformId;
this.cfResolver = cfResolver;
this.router = router;
this.hideOnEscape = true;
this.hideOnBackdrop = true;
this.borderRadius = 0;
this.state = 'closed';
this.closed = new EventEmitter();
this.br = '0';
}
loadComponent() {
const componentFactory = this.cfResolver.resolveComponentFactory(this.component);
const viewRef = this.modalDirective.viewContainerRef;
viewRef.clear();
const componentRef = viewRef.createComponent(componentFactory);
componentRef.instance.data = this.data;
componentRef.instance.resultEvent.subscribe(res => {
this.closed.next(res);
this.closed.complete();
});
}
onSuccess(result) {
this.closed.next(result);
this.closed.complete();
}
onBackdrop() {
if (this.hideOnBackdrop) {
this.onSuccess(null);
}
}
hideOnRouterEvents() {
const sub = this.router.events.pipe(filter(event => event instanceof NavigationStart)).subscribe(() => {
this.onBackdrop();
});
this.escapeSub ? this.escapeSub.add(sub) : this.escapeSub = sub;
}
ngOnInit() {
if (isPlatformBrowser(this.platformId)) {
this.state = 'opened';
if (this.borderRadius > 0) {
this.br = `${this.borderRadius}px`;
}
this.loadComponent();
this.hideOnRouterEvents();
}
}
ngOnDestroy() {
this.closed.complete();
if (this.escapeSub) {
this.escapeSub.unsubscribe();
}
this.state = 'closed';
}
}
DialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DialogComponent, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.ComponentFactoryResolver }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: DialogComponent, selector: "sdk-dialog", inputs: { id: "id", data: "data", hideOnEscape: "hideOnEscape", hideOnBackdrop: "hideOnBackdrop", borderRadius: "borderRadius", disableScroll: "disableScroll", component: "component" }, outputs: { closed: "closed" }, host: { properties: { "attr.state": "this.state" } }, viewQueries: [{ propertyName: "modalDirective", first: true, predicate: DialogDirective, descendants: true, static: true }], ngImport: i0, template: "<div class=\"sdk-dialog-wrap flex-column layout-center-center\" [style.zIndex]=\"id\" autofocus>\n <div class=\"sdk-dialog-container flex-row layout-center-center\">\n <div class=\"sdk-dialog-backdrop\" (click)=\"onBackdrop()\"></div>\n <div class=\"sdk-dialog-content-wrap flex-column\" [style.borderRadius]=\"br\">\n <div class=\"sdk-dialog-content\" [style.borderRadius]=\"br\" [class.disable-scroll]=\"disableScroll\">\n <ng-template sdkDialog></ng-template>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@keyframes openDialog{0%{transform:scale(.5) translateY(100px);opacity:0}}.sdk-dialog-wrap{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;width:100vw;height:100vh;overflow:hidden}.sdk-dialog-wrap .sdk-dialog-container{position:relative;z-index:1;width:100%;height:100%;overflow-x:hidden;overflow-y:auto}.sdk-dialog-wrap .sdk-dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;background:rgba(21,21,21,.6);animation:opacity .2s}.sdk-dialog-wrap .sdk-dialog-content-wrap{position:relative;z-index:2;min-width:288px;max-width:80%;min-height:80px;max-height:80%;overflow:hidden;animation:openDialog .3s}.sdk-dialog-wrap .sdk-dialog-content-wrap .sdk-dialog-content{overflow-y:auto;overflow-x:hidden}.sdk-dialog-wrap .sdk-dialog-content-wrap .sdk-dialog-content.disable-scroll{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i2.DialogDirective, selector: "[sdkDialog]" }], animations: [
trigger('state', [
state('opened', style({ transform: 'translateY(0%)' })),
state('void, closed', style({ transform: 'translateY(100%)', opacity: 0 })),
transition('* => *', animate('300ms ease-in')),
])
] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DialogComponent, decorators: [{
type: Component,
args: [{ selector: 'sdk-dialog', animations: [
trigger('state', [
state('opened', style({ transform: 'translateY(0%)' })),
state('void, closed', style({ transform: 'translateY(100%)', opacity: 0 })),
transition('* => *', animate('300ms ease-in')),
])
], template: "<div class=\"sdk-dialog-wrap flex-column layout-center-center\" [style.zIndex]=\"id\" autofocus>\n <div class=\"sdk-dialog-container flex-row layout-center-center\">\n <div class=\"sdk-dialog-backdrop\" (click)=\"onBackdrop()\"></div>\n <div class=\"sdk-dialog-content-wrap flex-column\" [style.borderRadius]=\"br\">\n <div class=\"sdk-dialog-content\" [style.borderRadius]=\"br\" [class.disable-scroll]=\"disableScroll\">\n <ng-template sdkDialog></ng-template>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@keyframes openDialog{0%{transform:scale(.5) translateY(100px);opacity:0}}.sdk-dialog-wrap{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;width:100vw;height:100vh;overflow:hidden}.sdk-dialog-wrap .sdk-dialog-container{position:relative;z-index:1;width:100%;height:100%;overflow-x:hidden;overflow-y:auto}.sdk-dialog-wrap .sdk-dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;background:rgba(21,21,21,.6);animation:opacity .2s}.sdk-dialog-wrap .sdk-dialog-content-wrap{position:relative;z-index:2;min-width:288px;max-width:80%;min-height:80px;max-height:80%;overflow:hidden;animation:openDialog .3s}.sdk-dialog-wrap .sdk-dialog-content-wrap .sdk-dialog-content{overflow-y:auto;overflow-x:hidden}.sdk-dialog-wrap .sdk-dialog-content-wrap .sdk-dialog-content.disable-scroll{overflow:hidden}\n"] }]
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }, { type: i0.ComponentFactoryResolver }, { type: i1.Router }]; }, propDecorators: { id: [{
type: Input
}], data: [{
type: Input
}], hideOnEscape: [{
type: Input
}], hideOnBackdrop: [{
type: Input
}], borderRadius: [{
type: Input
}], disableScroll: [{
type: Input
}], component: [{
type: Input
}], modalDirective: [{
type: ViewChild,
args: [DialogDirective, { static: true }]
}], state: [{
type: HostBinding,
args: ['attr.state']
}], closed: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LXNsaWNlLWtpdC9zcmMvbGliL21vZGFscy9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LXNsaWNlLWtpdC9zcmMvbGliL21vZGFscy9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakYsV0FBVztBQUNYLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZUFBZSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFjaEYsTUFBTSxPQUFPLGVBQWU7SUFrQnhCLFlBQzhCLFFBQWEsRUFDVixVQUFlLEVBQ3BDLFVBQW9DLEVBQ3BDLE1BQWM7UUFISSxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ1YsZUFBVSxHQUFWLFVBQVUsQ0FBSztRQUNwQyxlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUNwQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBbEJWLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBQzdCLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLGlCQUFZLEdBQVcsQ0FBQyxD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QUFDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztZQUN6RSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNqRCxDQUFDO0tBQ0w7MkZBRVEsZUFBZTtrQkFaM0IsU0FBUzsrQkFDSSxZQUFZLGNBR1Y7d0JBQ1IsT0FBTyxDQUFDLE9BQU8sRUFBRTs0QkFDYixLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQyxDQUFDLENBQUM7NEJBQ3JELEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQUMsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDOzRCQUN6RSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQzt5QkFDakQsQ0FBQztxQkFDTDs7MEJBcUJJLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxXQUFXO3dHQWxCUCxFQUFFO3NCQUFqQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxjQUFjO3NCQUE3QixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUM2QyxjQUFjO3NCQUFoRSxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBRVIsS0FBSztzQkFBdEMsV0FBVzt1QkFBQyxZQUFZO2dCQUVSLE1BQU07c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBQTEFURk9STV9JRCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuLy8gaW50ZXJuYWxcbmltcG9ydCB7IERpYWxvZ0RpcmVjdGl2ZSB9IGZyb20gJy4vZGlhbG9nLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICcuL2RpYWxvZy5tb2RlbCc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybUJyb3dzZXIsIGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Nkay1kaWFsb2cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignc3RhdGUnLCBbXG4gICAgICAgICAgICBzdGF0ZSgnb3BlbmVkJywgc3R5bGUoe3RyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCUpJ30pKSxcbiAgICAgICAgICAgIHN0YXRlKCd2b2lkLCBjbG9zZWQnLCBzdHlsZSh7dHJhbnNmb3JtOiAndHJhbnNsYXRlWSgxMDAlKScsIG9wYWNpdHk6IDB9KSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCcqID0+IConLCBhbmltYXRlKCczMDBtcyBlYXNlLWluJykpLFxuICAgICAgICBdKVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgcHVibGljIGlkOiBudW1iZXI7XG4gICAgQElucHV0KCkgcHVibGljIGRhdGE6IGFueTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZU9uRXNjYXBlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZU9uQmFja2Ryb3A6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBib3JkZXJSYWRpdXM6IG51bWJlciA9IDA7XG4gICAgQElucHV0KCkgcHVibGljIGRpc2FibGVTY3JvbGw6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGNvbXBvbmVudDogYW55O1xuICAgIEBWaWV3Q2hpbGQoRGlhbG9nRGlyZWN0aXZlLCB7c3RhdGljOiB0cnVlfSkgcHVibGljIG1vZGFsRGlyZWN0aXZlOiBEaWFsb2dEaXJlY3RpdmU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuc3RhdGUnKSBwdWJsaWMgc3RhdGU6ICdvcGVuZWQnIHwgJ2Nsb3NlZCcgPSAnY2xvc2VkJztcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIGJyOiBzdHJpbmcgPSAnMCc7XG4gICAgcHVibGljIGVzY2FwZVN1YjogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSxcbiAgICAgICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnksXG4gICAgICAgIHByaXZhdGUgY2ZSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICAgKSB7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWRDb21wb25lbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNmUmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy5jb21wb25lbnQpO1xuXG4gICAgICAgIGNvbnN0IHZpZXdSZWYgPSB0aGlzLm1vZGFsRGlyZWN0aXZlLnZpZXdDb250YWluZXJSZWY7XG4gICAgICAgIHZpZXdSZWYuY2xlYXIoKTtcblxuICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB2aWV3UmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcbiAgICAgICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBEaWFsb2cpLmRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgRGlhbG9nKS5yZXN1bHRFdmVudC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkLm5leHQocmVzKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblN1Y2Nlc3MocmVzdWx0OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbG9zZWQubmV4dChyZXN1bHQpO1xuICAgICAgICB0aGlzLmNsb3NlZC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkJhY2tkcm9wKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oaWRlT25CYWNrZHJvcCkge1xuICAgICAgICAgICAgdGhpcy5vblN1Y2Nlc3MobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZU9uUm91dGVyRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdWIgPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydClcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkJhY2tkcm9wKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZXNjYXBlU3ViID8gdGhpcy5lc2NhcGVTdWIuYWRkKHN1YikgOiB0aGlzLmVzY2FwZVN1YiA9IHN1YjtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG4gICAgICAgICAgICBpZiAodGhpcy5ib3JkZXJSYWRpdXMgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iciA9IGAke3RoaXMuYm9yZGVyUmFkaXVzfXB4YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5sb2FkQ29tcG9uZW50KCk7XG5cbiAgICAgICAgICAgIHRoaXMuaGlkZU9uUm91dGVyRXZlbnRzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2VkLmNvbXBsZXRlKCk7XG4gICAgICAgIGlmICh0aGlzLmVzY2FwZVN1Yikge1xuICAgICAgICAgICAgdGhpcy5lc2NhcGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgfVxuXG59XG5cbiIsIjxkaXYgY2xhc3M9XCJzZGstZGlhbG9nLXdyYXAgZmxleC1jb2x1bW4gbGF5b3V0LWNlbnRlci1jZW50ZXJcIiBbc3R5bGUuekluZGV4XT1cImlkXCIgYXV0b2ZvY3VzPlxuICAgIDxkaXYgY2xhc3M9XCJzZGstZGlhbG9nLWNvbnRhaW5lciBmbGV4LXJvdyBsYXlvdXQtY2VudGVyLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2RrLWRpYWxvZy1iYWNrZHJvcFwiIChjbGljayk9XCJvbkJhY2tkcm9wKClcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNkay1kaWFsb2ctY29udGVudC13cmFwIGZsZXgtY29sdW1uXCIgW3N0eWxlLmJvcmRlclJhZGl1c109XCJiclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNkay1kaWFsb2ctY29udGVudFwiIFtzdHlsZS5ib3JkZXJSYWRpdXNdPVwiYnJcIiBbY2xhc3MuZGlzYWJsZS1zY3JvbGxdPVwiZGlzYWJsZVNjcm9sbFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBzZGtEaWFsb2c+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19