@alauda-fe/common
Version:
Alauda frontend team common codes.
287 lines • 31.5 kB
JavaScript
import { __decorate, __metadata } from "tslib";
/**
* @packageDocumentation
* @module page-guard
*/
import { CardComponent, handlePixel, ThemeService } from '@alauda/ui';
import { AsyncPipe, NgClass, NgIf, NgTemplateOutlet } from '@angular/common';
import { ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, } from '@angular/core';
import { isBoolean } from 'lodash-es';
import { combineLatest, map, Observable } from 'rxjs';
import { ObservableInput, publishRef } from '../../core/public-api';
import { TranslateModule } from '../../translate/public-api';
import { LoadingMaskComponent } from '../../widget/loading-mask/loading-mask.component';
import { PageGuardContentDirective, PageGuardDescriptionDirective, PageGuardImageDirective, PageGuardOperationDirective, } from './helper-directives';
import { DEFAULT_REASON, GuardStatus, REASON_MAP, Reason, } from './page-guard.type';
import * as i0 from "@angular/core";
import * as i1 from "@alauda/ui";
import * as i2 from "../../translate/translate.pipe";
const _c0 = (a0, a1) => ({ isFull: a0, noShadow: a1 });
function PageGuardComponent_ng_container_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainer(0, 3);
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext(2);
i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.template);
} }
function PageGuardComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, PageGuardComponent_ng_container_0_ng_container_1_Template, 1, 1, "ng-container", 2);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx_r0.template);
} }
function PageGuardComponent_ng_container_1_aui_card_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "aui-card", 5);
i0.ɵɵelementContainer(1, 3);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext(2);
const unavailable_r2 = i0.ɵɵreference(4);
i0.ɵɵproperty("divider", false)("ngClass", i0.ɵɵpureFunction2(3, _c0, ctx_r0.isFull, ctx_r0.noShadow));
i0.ɵɵadvance();
i0.ɵɵproperty("ngTemplateOutlet", unavailable_r2);
} }
function PageGuardComponent_ng_container_1_ng_container_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainer(0, 3);
} if (rf & 2) {
i0.ɵɵnextContext(2);
const unavailable_r2 = i0.ɵɵreference(4);
i0.ɵɵproperty("ngTemplateOutlet", unavailable_r2);
} }
function PageGuardComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, PageGuardComponent_ng_container_1_aui_card_1_Template, 2, 6, "aui-card", 4)(2, PageGuardComponent_ng_container_1_ng_container_2_Template, 1, 1, "ng-container", 2);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx_r0.context === "page");
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx_r0.context !== "page");
} }
function PageGuardComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "div", 6);
i0.ɵɵelement(2, "acl-loading-mask", 7);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
i0.ɵɵadvance(2);
i0.ɵɵproperty("loading", true);
} }
function PageGuardComponent_ng_template_3_div_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 14);
i0.ɵɵelementContainer(1, 3);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.imageTpl);
} }
function PageGuardComponent_ng_template_3_img_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelement(0, "img");
i0.ɵɵpipe(1, "async");
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext(2);
i0.ɵɵattribute("src", i0.ɵɵpipeBind1(1, 1, ctx_r0.reasonSrc$), i0.ɵɵsanitizeUrl);
} }
function PageGuardComponent_ng_template_3_h3_4_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "h3", 15);
i0.ɵɵtext(1);
i0.ɵɵpipe(2, "async");
i0.ɵɵpipe(3, "translate");
i0.ɵɵelementEnd();
} if (rf & 2) {
let tmp_3_0;
const ctx_r0 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵtextInterpolate1(" ", ctx_r0.title || i0.ɵɵpipeBind1(3, 3, (tmp_3_0 = i0.ɵɵpipeBind1(2, 1, ctx_r0.reasonModel$)) == null ? null : tmp_3_0.title), " ");
} }
function PageGuardComponent_ng_template_3_div_6_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 16);
i0.ɵɵelementContainer(1, 3);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.descriptionTpl);
} }
function PageGuardComponent_ng_template_3_ng_container_7_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "p", 16);
i0.ɵɵtext(2);
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext(3);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx_r0.description);
} }
function PageGuardComponent_ng_template_3_ng_container_7_ng_container_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelementStart(1, "p", 16);
i0.ɵɵtext(2);
i0.ɵɵpipe(3, "async");
i0.ɵɵpipe(4, "translate");
i0.ɵɵelementEnd();
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
let tmp_4_0;
const ctx_r0 = i0.ɵɵnextContext(3);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 3, (tmp_4_0 = i0.ɵɵpipeBind1(3, 1, ctx_r0.reasonModel$)) == null ? null : tmp_4_0.description), " ");
} }
function PageGuardComponent_ng_template_3_ng_container_7_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, PageGuardComponent_ng_template_3_ng_container_7_ng_container_1_Template, 3, 1, "ng-container", 1)(2, PageGuardComponent_ng_template_3_ng_container_7_ng_container_2_Template, 5, 5, "ng-container", 1);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx_r0.isNonEmptyString(ctx_r0.description));
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx_r0.isUndefined(ctx_r0.description));
} }
function PageGuardComponent_ng_template_3_div_8_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 17);
i0.ɵɵelementContainer(1, 3);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.operation);
} }
function PageGuardComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 8)(1, "div", 9);
i0.ɵɵtemplate(2, PageGuardComponent_ng_template_3_div_2_Template, 2, 1, "div", 10)(3, PageGuardComponent_ng_template_3_img_3_Template, 2, 3, "img", 1)(4, PageGuardComponent_ng_template_3_h3_4_Template, 4, 5, "h3", 11);
i0.ɵɵpipe(5, "async");
i0.ɵɵtemplate(6, PageGuardComponent_ng_template_3_div_6_Template, 2, 1, "div", 12)(7, PageGuardComponent_ng_template_3_ng_container_7_Template, 3, 2, "ng-container", 1)(8, PageGuardComponent_ng_template_3_div_8_Template, 2, 1, "div", 13);
i0.ɵɵelementEnd()();
} if (rf & 2) {
let tmp_5_0;
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵstyleProp("margin-top", ctx_r0.handlePixel(ctx_r0.top));
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", ctx_r0.imageTpl);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", !ctx_r0.imageTpl);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx_r0.title || ((tmp_5_0 = i0.ɵɵpipeBind1(5, 8, ctx_r0.reasonModel$)) == null ? null : tmp_5_0.title));
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", ctx_r0.descriptionTpl);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", !ctx_r0.descriptionTpl);
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx_r0.isTemplateRef(ctx_r0.operation));
} }
export class PageGuardComponent {
get allowed() {
return this.status === GuardStatus.Available;
}
set allowed(allowed) {
if (isBoolean(allowed)) {
this.status = allowed ? GuardStatus.Available : GuardStatus.Unavailable;
}
else {
this.status = GuardStatus.Pending;
}
}
constructor(theme) {
this.theme = theme;
this.noShadow = false;
this.status = GuardStatus.Pending;
this.title = '';
this.context = 'page';
this.handlePixel = handlePixel;
this.reasonModel$ = this.reason$.pipe(map(reason => (reason ? REASON_MAP[reason] : DEFAULT_REASON)));
this.reasonSrc$ = combineLatest([
this.theme.currentTheme$,
this.reasonModel$,
]).pipe(map(([theme, reasonModel]) => `images/${theme}/${reasonModel.src}`), publishRef());
}
isNonEmptyString(value) {
return typeof value === 'string' && value !== '';
}
isUndefined(value) {
return value === undefined;
}
isTemplateRef(value) {
return value instanceof TemplateRef;
}
static { this.ɵfac = function PageGuardComponent_Factory(t) { return new (t || PageGuardComponent)(i0.ɵɵdirectiveInject(i1.ThemeService)); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PageGuardComponent, selectors: [["acl-page-guard"]], contentQueries: function PageGuardComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
i0.ɵɵcontentQuery(dirIndex, PageGuardImageDirective, 5, TemplateRef);
i0.ɵɵcontentQuery(dirIndex, PageGuardDescriptionDirective, 5, TemplateRef);
i0.ɵɵcontentQuery(dirIndex, PageGuardOperationDirective, 5, TemplateRef);
i0.ɵɵcontentQuery(dirIndex, PageGuardContentDirective, 5, TemplateRef);
} if (rf & 2) {
let _t;
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.imageTpl = _t.first);
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.descriptionTpl = _t.first);
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.operation = _t.first);
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.template = _t.first);
} }, inputs: { top: "top", isFull: "isFull", noShadow: "noShadow", allowed: "allowed", status: "status", reason: "reason", title: "title", description: "description", context: "context" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 5, vars: 3, consts: [["unavailable", ""], [4, "ngIf"], [3, "ngTemplateOutlet", 4, "ngIf"], [3, "ngTemplateOutlet"], ["class", "unavailable", 3, "divider", "ngClass", 4, "ngIf"], [1, "unavailable", 3, "divider", "ngClass"], [1, "acl-page-guard--pending"], ["type", "module", 3, "loading"], [1, "acl-page-guard--unavailable"], [1, "container"], ["class", "img", 4, "ngIf"], ["class", "title", 4, "ngIf"], ["class", "description", 4, "ngIf"], ["class", "operation", 4, "ngIf"], [1, "img"], [1, "title"], [1, "description"], [1, "operation"]], template: function PageGuardComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, PageGuardComponent_ng_container_0_Template, 2, 1, "ng-container", 1)(1, PageGuardComponent_ng_container_1_Template, 3, 2, "ng-container", 1)(2, PageGuardComponent_ng_container_2_Template, 3, 1, "ng-container", 1)(3, PageGuardComponent_ng_template_3_Template, 9, 10, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
} if (rf & 2) {
i0.ɵɵproperty("ngIf", ctx.status === "available");
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx.status === "unavailable");
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx.status !== "available" && ctx.status !== "unavailable");
} }, dependencies: [NgIf,
NgTemplateOutlet,
AsyncPipe,
TranslateModule, i2.TranslatePipe, LoadingMaskComponent,
CardComponent,
NgClass], styles: ["aui-card.unavailable[_ngcontent-%COMP%] .aui-card{padding-top:120px;padding-bottom:200px;height:calc(100vh - (var(--acl-page-header-height) + 44px) - 20px);min-height:600px}aui-card.unavailable.noShadow[_ngcontent-%COMP%] .aui-card{box-shadow:none!important}aui-card.unavailable.isFull[_ngcontent-%COMP%] .aui-card{height:calc(100vh - 40px)}.acl-page-guard--pending[_ngcontent-%COMP%], .acl-page-guard--unavailable[_ngcontent-%COMP%]{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.acl-page-guard--unavailable[_ngcontent-%COMP%] .container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center}.acl-page-guard--unavailable[_ngcontent-%COMP%] .container[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{height:200px}.acl-page-guard--unavailable[_ngcontent-%COMP%] .container[_ngcontent-%COMP%] .title[_ngcontent-%COMP%]{margin:var(--aui-spacing-xxl) 0 var(--aui-spacing-l) 0;font-size:var(--aui-font-size-xl);color:rgb(var(--aui-color-n-1));font-weight:var(--aui-font-weight-bolder)}.acl-page-guard--unavailable[_ngcontent-%COMP%] .container[_ngcontent-%COMP%] .description[_ngcontent-%COMP%]{color:rgb(var(--aui-color-n-4));font-size:var(--aui-font-size-m);text-align:center;max-width:560px;margin:0}.acl-page-guard--unavailable[_ngcontent-%COMP%] .container[_ngcontent-%COMP%] .operation[_ngcontent-%COMP%]{margin-top:var(--aui-spacing-l)}"], changeDetection: 0 }); }
}
__decorate([
ObservableInput(),
__metadata("design:type", Observable)
], PageGuardComponent.prototype, "reason$", void 0);
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PageGuardComponent, [{
type: Component,
args: [{ selector: 'acl-page-guard', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
NgIf,
NgTemplateOutlet,
AsyncPipe,
TranslateModule,
LoadingMaskComponent,
CardComponent,
NgClass,
], standalone: true, template: "<ng-container *ngIf=\"status === 'available'\">\n <ng-container\n *ngIf=\"template\"\n [ngTemplateOutlet]=\"template\"\n ></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"status === 'unavailable'\">\n <aui-card\n [divider]=\"false\"\n class=\"unavailable\"\n [ngClass]=\"{ isFull: isFull, noShadow: noShadow }\"\n *ngIf=\"context === 'page'\"\n >\n <ng-container [ngTemplateOutlet]=\"unavailable\"></ng-container>\n </aui-card>\n <ng-container\n *ngIf=\"context !== 'page'\"\n [ngTemplateOutlet]=\"unavailable\"\n ></ng-container>\n</ng-container>\n<ng-container *ngIf=\"status !== 'available' && status !== 'unavailable'\">\n <div class=\"acl-page-guard--pending\">\n <acl-loading-mask\n [loading]=\"true\"\n type=\"module\"\n ></acl-loading-mask>\n </div>\n</ng-container>\n\n<ng-template #unavailable>\n <div\n class=\"acl-page-guard--unavailable\"\n [style.margin-top]=\"handlePixel(top)\"\n >\n <div class=\"container\">\n <div\n class=\"img\"\n *ngIf=\"imageTpl\"\n >\n <ng-container [ngTemplateOutlet]=\"imageTpl\"></ng-container>\n </div>\n <img\n *ngIf=\"!imageTpl\"\n [attr.src]=\"reasonSrc$ | async\"\n />\n <h3\n *ngIf=\"title || (reasonModel$ | async)?.title\"\n class=\"title\"\n >\n {{ title || ((reasonModel$ | async)?.title | translate) }}\n </h3>\n <div\n class=\"description\"\n *ngIf=\"descriptionTpl\"\n >\n <ng-container [ngTemplateOutlet]=\"descriptionTpl\"></ng-container>\n </div>\n <ng-container *ngIf=\"!descriptionTpl\">\n <ng-container *ngIf=\"isNonEmptyString(description)\">\n <p class=\"description\">{{ description }}</p>\n </ng-container>\n <ng-container *ngIf=\"isUndefined(description)\">\n <p class=\"description\">\n {{ (reasonModel$ | async)?.description | translate }}\n </p>\n </ng-container>\n </ng-container>\n\n <div\n class=\"operation\"\n *ngIf=\"isTemplateRef(operation)\"\n >\n <ng-container [ngTemplateOutlet]=\"operation\"></ng-container>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["aui-card.unavailable ::ng-deep .aui-card{padding-top:120px;padding-bottom:200px;height:calc(100vh - (var(--acl-page-header-height) + 44px) - 20px);min-height:600px}aui-card.unavailable.noShadow ::ng-deep .aui-card{box-shadow:none!important}aui-card.unavailable.isFull ::ng-deep .aui-card{height:calc(100vh - 40px)}.acl-page-guard--pending,.acl-page-guard--unavailable{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.acl-page-guard--unavailable .container{display:flex;flex-direction:column;align-items:center}.acl-page-guard--unavailable .container img{height:200px}.acl-page-guard--unavailable .container .title{margin:var(--aui-spacing-xxl) 0 var(--aui-spacing-l) 0;font-size:var(--aui-font-size-xl);color:rgb(var(--aui-color-n-1));font-weight:var(--aui-font-weight-bolder)}.acl-page-guard--unavailable .container .description{color:rgb(var(--aui-color-n-4));font-size:var(--aui-font-size-m);text-align:center;max-width:560px;margin:0}.acl-page-guard--unavailable .container .operation{margin-top:var(--aui-spacing-l)}\n"] }]
}], () => [{ type: i1.ThemeService }], { top: [{
type: Input
}], isFull: [{
type: Input
}], noShadow: [{
type: Input
}], allowed: [{
type: Input
}], status: [{
type: Input
}], reason: [{
type: Input
}], reason$: [], title: [{
type: Input
}], description: [{
type: Input
}], context: [{
type: Input
}], imageTpl: [{
type: ContentChild,
args: [PageGuardImageDirective, { read: TemplateRef }]
}], descriptionTpl: [{
type: ContentChild,
args: [PageGuardDescriptionDirective, { read: TemplateRef }]
}], operation: [{
type: ContentChild,
args: [PageGuardOperationDirective, { read: TemplateRef }]
}], template: [{
type: ContentChild,
args: [PageGuardContentDirective, { read: TemplateRef }]
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PageGuardComponent, { className: "PageGuardComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3BhZ2UtZ3VhcmQvY29tcG9uZW50L2NvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9wYWdlLWd1YXJkL2NvbXBvbmVudC90ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0UsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFeEYsT0FBTyxFQUNMLHlCQUF5QixFQUN6Qiw2QkFBNkIsRUFDN0IsdUJBQXVCLEVBQ3ZCLDJCQUEyQixHQUM1QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsV0FBVyxFQUNYLFVBQVUsRUFDVixNQUFNLEdBQ1AsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7O0lDL0J6QiwyQkFHZ0I7OztJQURkLGtEQUE2Qjs7O0lBSGpD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TSxXQUN0QztvQkFDUCxJQUFJO29CQUNKLGdCQUFnQjtvQkFDaEIsU0FBUztvQkFDVCxlQUFlO29CQUNmLG9CQUFvQjtvQkFDcEIsYUFBYTtvQkFDYixPQUFPO2lCQUNSLGNBQ1csSUFBSTs2Q0FJaEIsR0FBRztrQkFERixLQUFLO1lBSU4sTUFBTTtrQkFETCxLQUFLO1lBSU4sUUFBUTtrQkFEUCxLQUFLO1lBSUYsT0FBTztrQkFEVixLQUFLO1lBY04sTUFBTTtrQkFETCxLQUFLO1lBSU4sTUFBTTtrQkFETCxLQUFLO1lBSU4sT0FBTyxNQUdQLEtBQUs7a0JBREosS0FBSztZQUlOLFdBQVc7a0JBRFYsS0FBSztZQUlOLE9BQU87a0JBRE4sS0FBSztZQUlOLFFBQVE7a0JBRFAsWUFBWTttQkFBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7WUFJNUQsY0FBYztrQkFEYixZQUFZO21CQUFDLDZCQUE2QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUlsRSxTQUFTO2tCQURSLFlBQVk7bUJBQUMsMkJBQTJCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO1lBSWhFLFFBQVE7a0JBRFAsWUFBWTttQkFBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7O2tGQWxEbkQsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqIEBtb2R1bGUgcGFnZS1ndWFyZFxuICovXG5cbmltcG9ydCB7IENhcmRDb21wb25lbnQsIGhhbmRsZVBpeGVsLCBUaGVtZVNlcnZpY2UgfSBmcm9tICdAYWxhdWRhL3VpJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIElucHV0LFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0Jvb2xlYW4gfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE9ic2VydmFibGVJbnB1dCwgcHVibGlzaFJlZiB9IGZyb20gJy4uLy4uL2NvcmUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICcuLi8uLi90cmFuc2xhdGUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBMb2FkaW5nTWFza0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3dpZGdldC9sb2FkaW5nLW1hc2svbG9hZGluZy1tYXNrLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7XG4gIFBhZ2VHdWFyZENvbnRlbnREaXJlY3RpdmUsXG4gIFBhZ2VHdWFyZERlc2NyaXB0aW9uRGlyZWN0aXZlLFxuICBQYWdlR3VhcmRJbWFnZURpcmVjdGl2ZSxcbiAgUGFnZUd1YXJkT3BlcmF0aW9uRGlyZWN0aXZlLFxufSBmcm9tICcuL2hlbHBlci1kaXJlY3RpdmVzJztcbmltcG9ydCB7XG4gIERFRkFVTFRfUkVBU09OLFxuICBHdWFyZFN0YXR1cyxcbiAgUkVBU09OX01BUCxcbiAgUmVhc29uLFxufSBmcm9tICcuL3BhZ2UtZ3VhcmQudHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjbC1wYWdlLWd1YXJkJyxcbiAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3N0eWxlLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgQXN5bmNQaXBlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBMb2FkaW5nTWFza0NvbXBvbmVudCxcbiAgICBDYXJkQ29tcG9uZW50LFxuICAgIE5nQ2xhc3MsXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VHdWFyZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHRvcDogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGlzRnVsbDogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBub1NoYWRvdyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBhbGxvd2VkKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gR3VhcmRTdGF0dXMuQXZhaWxhYmxlO1xuICB9XG5cbiAgc2V0IGFsbG93ZWQoYWxsb3dlZDogYm9vbGVhbikge1xuICAgIGlmIChpc0Jvb2xlYW4oYWxsb3dlZCkpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gYWxsb3dlZCA/IEd1YXJkU3RhdHVzLkF2YWlsYWJsZSA6IEd1YXJkU3RhdHVzLlVuYXZhaWxhYmxlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXR1cyA9IEd1YXJkU3RhdHVzLlBlbmRpbmc7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgc3RhdHVzOiBHdWFyZFN0YXR1cyA9IEd1YXJkU3RhdHVzLlBlbmRpbmc7XG5cbiAgQElucHV0KClcbiAgcmVhc29uOiBSZWFzb247XG5cbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIHJlYXNvbiQhOiBPYnNlcnZhYmxlPFJlYXNvbj47XG5cbiAgQElucHV0KClcbiAgdGl0bGUgPSAnJztcblxuICBASW5wdXQoKVxuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGNvbnRleHQ6ICdwYWdlJyB8ICdjYXJkJyA9ICdwYWdlJztcblxuICBAQ29udGVudENoaWxkKFBhZ2VHdWFyZEltYWdlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGltYWdlVHBsOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBAQ29udGVudENoaWxkKFBhZ2VHdWFyZERlc2NyaXB0aW9uRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGRlc2NyaXB0aW9uVHBsOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBAQ29udGVudENoaWxkKFBhZ2VHdWFyZE9wZXJhdGlvbkRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBvcGVyYXRpb246IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBDb250ZW50Q2hpbGQoUGFnZUd1YXJkQ29udGVudERpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgaGFuZGxlUGl4ZWwgPSBoYW5kbGVQaXhlbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHRoZW1lOiBUaGVtZVNlcnZpY2UpIHt9XG5cbiAgcmVhc29uTW9kZWwkID0gdGhpcy5yZWFzb24kLnBpcGUoXG4gICAgbWFwKHJlYXNvbiA9PiAocmVhc29uID8gUkVBU09OX01BUFtyZWFzb25dIDogREVGQVVMVF9SRUFTT04pKSxcbiAgKTtcblxuICByZWFzb25TcmMkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy50aGVtZS5jdXJyZW50VGhlbWUkLFxuICAgIHRoaXMucmVhc29uTW9kZWwkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW3RoZW1lLCByZWFzb25Nb2RlbF0pID0+IGBpbWFnZXMvJHt0aGVtZX0vJHtyZWFzb25Nb2RlbC5zcmN9YCksXG4gICAgcHVibGlzaFJlZigpLFxuICApO1xuXG4gIGlzTm9uRW1wdHlTdHJpbmcodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJyc7XG4gIH1cblxuICBpc1VuZGVmaW5lZCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBpc1RlbXBsYXRlUmVmKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0dXMgPT09ICdhdmFpbGFibGUnXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cInRlbXBsYXRlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwic3RhdHVzID09PSAndW5hdmFpbGFibGUnXCI+XG4gIDxhdWktY2FyZFxuICAgIFtkaXZpZGVyXT1cImZhbHNlXCJcbiAgICBjbGFzcz1cInVuYXZhaWxhYmxlXCJcbiAgICBbbmdDbGFzc109XCJ7IGlzRnVsbDogaXNGdWxsLCBub1NoYWRvdzogbm9TaGFkb3cgfVwiXG4gICAgKm5nSWY9XCJjb250ZXh0ID09PSAncGFnZSdcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ1bmF2YWlsYWJsZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2F1aS1jYXJkPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJjb250ZXh0ICE9PSAncGFnZSdcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInVuYXZhaWxhYmxlXCJcbiAgPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwic3RhdHVzICE9PSAnYXZhaWxhYmxlJyAmJiBzdGF0dXMgIT09ICd1bmF2YWlsYWJsZSdcIj5cbiAgPGRpdiBjbGFzcz1cImFjbC1wYWdlLWd1YXJkLS1wZW5kaW5nXCI+XG4gICAgPGFjbC1sb2FkaW5nLW1hc2tcbiAgICAgIFtsb2FkaW5nXT1cInRydWVcIlxuICAgICAgdHlwZT1cIm1vZHVsZVwiXG4gICAgPjwvYWNsLWxvYWRpbmctbWFzaz5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICN1bmF2YWlsYWJsZT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYWNsLXBhZ2UtZ3VhcmQtLXVuYXZhaWxhYmxlXCJcbiAgICBbc3R5bGUubWFyZ2luLXRvcF09XCJoYW5kbGVQaXhlbCh0b3ApXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJpbWdcIlxuICAgICAgICAqbmdJZj1cImltYWdlVHBsXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJpbWFnZVRwbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8aW1nXG4gICAgICAgICpuZ0lmPVwiIWltYWdlVHBsXCJcbiAgICAgICAgW2F0dHIuc3JjXT1cInJlYXNvblNyYyQgfCBhc3luY1wiXG4gICAgICAvPlxuICAgICAgPGgzXG4gICAgICAgICpuZ0lmPVwidGl0bGUgfHwgKHJlYXNvbk1vZGVsJCB8IGFzeW5jKT8udGl0bGVcIlxuICAgICAgICBjbGFzcz1cInRpdGxlXCJcbiAgICAgID5cbiAgICAgICAge3sgdGl0bGUgfHwgKChyZWFzb25Nb2RlbCQgfCBhc3luYyk/LnRpdGxlIHwgdHJhbnNsYXRlKSB9fVxuICAgICAgPC9oMz5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICpuZ0lmPVwiZGVzY3JpcHRpb25UcGxcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRlc2NyaXB0aW9uVHBsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZGVzY3JpcHRpb25UcGxcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTm9uRW1wdHlTdHJpbmcoZGVzY3JpcHRpb24pXCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJkZXNjcmlwdGlvblwiPnt7IGRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVW5kZWZpbmVkKGRlc2NyaXB0aW9uKVwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIHt7IChyZWFzb25Nb2RlbCQgfCBhc3luYyk/LmRlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwib3BlcmF0aW9uXCJcbiAgICAgICAgKm5nSWY9XCJpc1RlbXBsYXRlUmVmKG9wZXJhdGlvbilcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wZXJhdGlvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==