UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

151 lines 16.5 kB
/** * @packageDocumentation * @module async-data */ import { ButtonComponent } from '@alauda/ui'; import { NgIf } from '@angular/common'; import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { PageGuardComponent, PageGuardOperationDirective, Reason, } from '../../page-guard/public-api'; import { TranslateModule } from '../../translate/public-api'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "../../translate/translate.pipe"; function ErrorStateComponent_div_0_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) { const _r1 = i0.ɵɵgetCurrentView(); i0.ɵɵelementContainerStart(0); i0.ɵɵelementStart(1, "button", 3); i0.ɵɵlistener("click", function ErrorStateComponent_div_0_ng_container_3_ng_container_1_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.backToList()); }); i0.ɵɵtext(2); i0.ɵɵpipe(3, "translate"); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); } if (rf & 2) { i0.ɵɵadvance(2); i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 1, "return_resource_list"), " "); } } function ErrorStateComponent_div_0_ng_container_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵtemplate(1, ErrorStateComponent_div_0_ng_container_3_ng_container_1_Template, 4, 3, "ng-container", 2); i0.ɵɵelementContainerEnd(); } } function ErrorStateComponent_div_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div")(1, "acl-page-guard", 1); i0.ɵɵpipe(2, "translate"); i0.ɵɵtemplate(3, ErrorStateComponent_div_0_ng_container_3_Template, 2, 0, "ng-container", 0); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("allowed", false)("reason", ctx_r1.reason.NoPermission)("title", i0.ɵɵpipeBind1(2, 5, "no_view_permission"))("description", ""); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx_r1.showBackButton); } } function ErrorStateComponent_div_1_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) { const _r3 = i0.ɵɵgetCurrentView(); i0.ɵɵelementContainerStart(0); i0.ɵɵelementStart(1, "button", 3); i0.ɵɵlistener("click", function ErrorStateComponent_div_1_ng_container_3_ng_container_1_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.backToList()); }); i0.ɵɵtext(2); i0.ɵɵpipe(3, "translate"); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); } if (rf & 2) { i0.ɵɵadvance(2); i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 1, "return_resource_list"), " "); } } function ErrorStateComponent_div_1_ng_container_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵtemplate(1, ErrorStateComponent_div_1_ng_container_3_ng_container_1_Template, 4, 3, "ng-container", 2); i0.ɵɵelementContainerEnd(); } } function ErrorStateComponent_div_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div")(1, "acl-page-guard", 1); i0.ɵɵpipe(2, "translate"); i0.ɵɵtemplate(3, ErrorStateComponent_div_1_ng_container_3_Template, 2, 0, "ng-container", 0); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("allowed", false)("reason", ctx_r1.reason.NotFound)("title", i0.ɵɵpipeBind1(2, 5, "resource_not_exist"))("description", ""); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx_r1.showBackButton); } } function ErrorStateComponent_div_2_ng_container_3_Template(rf, ctx) { if (rf & 1) { const _r4 = i0.ɵɵgetCurrentView(); i0.ɵɵelementContainerStart(0); i0.ɵɵelementStart(1, "button", 3); i0.ɵɵlistener("click", function ErrorStateComponent_div_2_ng_container_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.reload.emit()); }); i0.ɵɵtext(2); i0.ɵɵpipe(3, "translate"); i0.ɵɵelementEnd(); i0.ɵɵelementContainerEnd(); } if (rf & 2) { i0.ɵɵadvance(2); i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 1, "reload"), " "); } } function ErrorStateComponent_div_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div")(1, "acl-page-guard", 1); i0.ɵɵpipe(2, "translate"); i0.ɵɵtemplate(3, ErrorStateComponent_div_2_ng_container_3_Template, 4, 3, "ng-container", 2); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("allowed", false)("reason", ctx_r1.reason.Disconnected)("title", i0.ɵɵpipeBind1(2, 4, "error_loading_data"))("description", ""); } } export class ErrorStateComponent { constructor(router, route) { this.router = router; this.route = route; this.reload = new EventEmitter(); this.redirect = new EventEmitter(); this.reason = Reason; } backToList() { this.redirect.emit(); if (this.autoRedirect && this.showBackButton) { this.router.navigate([this.backLink || '../..'], { relativeTo: this.route, }); } } static { this.ɵfac = function ErrorStateComponent_Factory(t) { return new (t || ErrorStateComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute)); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ErrorStateComponent, selectors: [["acl-error-state"]], inputs: { errorCode: "errorCode", autoRedirect: "autoRedirect", showBackButton: "showBackButton", backLink: "backLink" }, outputs: { reload: "reload", redirect: "redirect" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 3, vars: 3, consts: [[4, "ngIf"], [3, "allowed", "reason", "title", "description"], [4, "aclPageGuardOperation"], ["aui-button", "primary", 3, "click"]], template: function ErrorStateComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, ErrorStateComponent_div_0_Template, 4, 7, "div", 0)(1, ErrorStateComponent_div_1_Template, 4, 7, "div", 0)(2, ErrorStateComponent_div_2_Template, 4, 6, "div", 0); } if (rf & 2) { i0.ɵɵproperty("ngIf", ctx.errorCode === 403); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx.errorCode === 404); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx.errorCode !== 403 && ctx.errorCode !== 404); } }, dependencies: [PageGuardComponent, NgIf, PageGuardOperationDirective, ButtonComponent, TranslateModule, i2.TranslatePipe], encapsulation: 2, changeDetection: 0 }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ErrorStateComponent, [{ type: Component, args: [{ selector: 'acl-error-state', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ PageGuardComponent, NgIf, PageGuardOperationDirective, ButtonComponent, TranslateModule, ], standalone: true, template: "<div *ngIf=\"errorCode === 403\">\n <acl-page-guard\n [allowed]=\"false\"\n [reason]=\"reason.NoPermission\"\n [title]=\"'no_view_permission' | translate\"\n [description]=\"''\"\n >\n <ng-container *ngIf=\"showBackButton\">\n <ng-container *aclPageGuardOperation>\n <button\n aui-button=\"primary\"\n (click)=\"backToList()\"\n >\n {{ 'return_resource_list' | translate }}\n </button>\n </ng-container>\n </ng-container>\n </acl-page-guard>\n</div>\n<div *ngIf=\"errorCode === 404\">\n <acl-page-guard\n [allowed]=\"false\"\n [reason]=\"reason.NotFound\"\n [title]=\"'resource_not_exist' | translate\"\n [description]=\"''\"\n >\n <ng-container *ngIf=\"showBackButton\">\n <ng-container *aclPageGuardOperation>\n <button\n aui-button=\"primary\"\n (click)=\"backToList()\"\n >\n {{ 'return_resource_list' | translate }}\n </button>\n </ng-container>\n </ng-container>\n </acl-page-guard>\n</div>\n<div *ngIf=\"errorCode !== 403 && errorCode !== 404\">\n <acl-page-guard\n [allowed]=\"false\"\n [reason]=\"reason.Disconnected\"\n [title]=\"'error_loading_data' | translate\"\n [description]=\"''\"\n >\n <ng-container *aclPageGuardOperation>\n <button\n aui-button=\"primary\"\n (click)=\"reload.emit()\"\n >\n {{ 'reload' | translate }}\n </button>\n </ng-container>\n </acl-page-guard>\n</div>\n" }] }], () => [{ type: i1.Router }, { type: i1.ActivatedRoute }], { errorCode: [{ type: Input }], autoRedirect: [{ type: Input }], showBackButton: [{ type: Input }], backLink: [{ type: Input }], reload: [{ type: Output }], redirect: [{ type: Output }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ErrorStateComponent, { className: "ErrorStateComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2FzeW5jLWRhdGEvZXJyb3ItcGFnZS9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvYXN5bmMtZGF0YS9lcnJvci1wYWdlL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLDJCQUEyQixFQUMzQixNQUFNLEdBQ1AsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztJQ2J2RCw2QkFBcUM7SUFDbkMsaUNBR0M7SUFEQyw4TUFBUyxtQkFBWSxLQUFDO0lBRXRCLFlBQ0Y7O0lBQUEsaUJBQVM7OztJQURQLGVBQ0Y7SUFERSw2RUFDRjs7O0lBUEosNkJBQXFDO0lBQ25DLDJHQUFxQzs7OztJQVB6QyxBQURGLDJCQUErQix3QkFNNUI7O0lBQ0MsNEZBQXFDO0lBV3pDLEFBREUsaUJBQWlCLEVBQ2I7OztJQWhCRixjQUFpQjtJQUdqQixBQURBLEFBREEsQUFEQSwrQkFBaUIsc0NBQ2EscURBQ1ksbUJBQ3hCO0lBRUgsZUFBb0I7SUFBcEIsNENBQW9COzs7O0lBb0JqQyw2QkFBcUM7SUFDbkMsaUNBR0M7SUFEQyw4TUFBUyxtQkFBWSxLQUFDO0lBRXRCLFlBQ0Y7O0lBQUEsaUJBQVM7OztJQURQLGVBQ0Y7SUFERSw2RUFDRjs7O0lBUEosNkJBQXFDO0lBQ25DLDJHQUFxQzs7OztJQVB6QyxBQURGLDJCQUErQix3QkFNNUI7O0lBQ0MsNEZBQXFDO0lBV3pDLEFBREUsaUJBQWlCLEVBQ2I7OztJQWhCRixjQUFpQjtJQUdqQixBQURBLEFBREEsQUFEQSwrQkFBaUIsa0NBQ1MscURBQ2dCLG1CQUN4QjtJQUVILGVBQW9CO0lBQXBCLDRDQUFvQjs7OztJQW1CbkMsNkJBQXFDO0lBQ25DLGlDQUdDO0lBREMsK0xBQVMsb0JBQWEsS0FBQztJQUV2QixZQUNGOztJQUFBLGlCQUFTOzs7SUFEUCxlQUNGO0lBREUsK0RBQ0Y7OztJQVpKLEFBREYsMkJBQW9ELHdCQU1qRDs7SUFDQyw0RkFBcUM7SUFTekMsQUFERSxpQkFBaUIsRUFDYjs7O0lBZEYsY0FBaUI7SUFHakIsQUFEQSxBQURBLEFBREEsK0JBQWlCLHNDQUNhLHFEQUNZLG1CQUN4Qjs7QURQdEIsTUFBTSxPQUFPLG1CQUFtQjtJQWM5QixZQUNtQixNQUFjLEVBQ2QsS0FBcUI7UUFEckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBVHhDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBR2xDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXBDLFdBQU0sR0FBRyxNQUFNLENBQUM7SUFLYixDQUFDO0lBRUosVUFBVTtRQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLEVBQUU7Z0JBQy9DLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSzthQUN2QixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztvRkExQlUsbUJBQW1CO29FQUFuQixtQkFBbUI7WUNFaEMsQUFuQkEsQUFuQkEsb0VBQStCLHVEQW1CQSx1REFtQnFCOztZQXRDOUMsNENBQXVCO1lBbUJ2QixjQUF1QjtZQUF2Qiw0Q0FBdUI7WUFtQnZCLGNBQTRDO1lBQTVDLHFFQUE0Qzs0QkRWOUMsa0JBQWtCO1lBQ2xCLElBQUk7WUFDSiwyQkFBMkI7WUFDM0IsZUFBZTtZQUNmLGVBQWU7O2lGQUlOLG1CQUFtQjtjQWIvQixTQUFTOzJCQUNFLGlCQUFpQixtQkFFVix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO29CQUNQLGtCQUFrQjtvQkFDbEIsSUFBSTtvQkFDSiwyQkFBMkI7b0JBQzNCLGVBQWU7b0JBQ2YsZUFBZTtpQkFDaEIsY0FDVyxJQUFJO29FQUdQLFNBQVM7a0JBQWpCLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFHTixNQUFNO2tCQURMLE1BQU07WUFJUCxRQUFRO2tCQURQLE1BQU07O2tGQVRJLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKiBAbW9kdWxlIGFzeW5jLWRhdGFcbiAqL1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAYWxhdWRhL3VpJztcbmltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1xuICBQYWdlR3VhcmRDb21wb25lbnQsXG4gIFBhZ2VHdWFyZE9wZXJhdGlvbkRpcmVjdGl2ZSxcbiAgUmVhc29uLFxufSBmcm9tICcuLi8uLi9wYWdlLWd1YXJkL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnLi4vLi4vdHJhbnNsYXRlL3B1YmxpYy1hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtZXJyb3Itc3RhdGUnLFxuICB0ZW1wbGF0ZVVybDogJ3RlbXBsYXRlLmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFBhZ2VHdWFyZENvbXBvbmVudCxcbiAgICBOZ0lmLFxuICAgIFBhZ2VHdWFyZE9wZXJhdGlvbkRpcmVjdGl2ZSxcbiAgICBCdXR0b25Db21wb25lbnQsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBFcnJvclN0YXRlQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZXJyb3JDb2RlOiBudW1iZXI7XG4gIEBJbnB1dCgpIGF1dG9SZWRpcmVjdDogYm9vbGVhbjtcbiAgQElucHV0KCkgc2hvd0JhY2tCdXR0b246IGJvb2xlYW47XG4gIEBJbnB1dCgpIGJhY2tMaW5rOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpXG4gIHJlbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgcmVkaXJlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcmVhc29uID0gUmVhc29uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICkge31cblxuICBiYWNrVG9MaXN0KCkge1xuICAgIHRoaXMucmVkaXJlY3QuZW1pdCgpO1xuICAgIGlmICh0aGlzLmF1dG9SZWRpcmVjdCAmJiB0aGlzLnNob3dCYWNrQnV0dG9uKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5iYWNrTGluayB8fCAnLi4vLi4nXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiZXJyb3JDb2RlID09PSA0MDNcIj5cbiAgPGFjbC1wYWdlLWd1YXJkXG4gICAgW2FsbG93ZWRdPVwiZmFsc2VcIlxuICAgIFtyZWFzb25dPVwicmVhc29uLk5vUGVybWlzc2lvblwiXG4gICAgW3RpdGxlXT1cIidub192aWV3X3Blcm1pc3Npb24nIHwgdHJhbnNsYXRlXCJcbiAgICBbZGVzY3JpcHRpb25dPVwiJydcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dCYWNrQnV0dG9uXCI+XG4gICAgICA8bmctY29udGFpbmVyICphY2xQYWdlR3VhcmRPcGVyYXRpb24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBhdWktYnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgICAgKGNsaWNrKT1cImJhY2tUb0xpc3QoKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAncmV0dXJuX3Jlc291cmNlX2xpc3QnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvYWNsLXBhZ2UtZ3VhcmQ+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJlcnJvckNvZGUgPT09IDQwNFwiPlxuICA8YWNsLXBhZ2UtZ3VhcmRcbiAgICBbYWxsb3dlZF09XCJmYWxzZVwiXG4gICAgW3JlYXNvbl09XCJyZWFzb24uTm90Rm91bmRcIlxuICAgIFt0aXRsZV09XCIncmVzb3VyY2Vfbm90X2V4aXN0JyB8IHRyYW5zbGF0ZVwiXG4gICAgW2Rlc2NyaXB0aW9uXT1cIicnXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93QmFja0J1dHRvblwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqYWNsUGFnZUd1YXJkT3BlcmF0aW9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgYXVpLWJ1dHRvbj1cInByaW1hcnlcIlxuICAgICAgICAgIChjbGljayk9XCJiYWNrVG9MaXN0KClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ3JldHVybl9yZXNvdXJjZV9saXN0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2FjbC1wYWdlLWd1YXJkPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiZXJyb3JDb2RlICE9PSA0MDMgJiYgZXJyb3JDb2RlICE9PSA0MDRcIj5cbiAgPGFjbC1wYWdlLWd1YXJkXG4gICAgW2FsbG93ZWRdPVwiZmFsc2VcIlxuICAgIFtyZWFzb25dPVwicmVhc29uLkRpc2Nvbm5lY3RlZFwiXG4gICAgW3RpdGxlXT1cIidlcnJvcl9sb2FkaW5nX2RhdGEnIHwgdHJhbnNsYXRlXCJcbiAgICBbZGVzY3JpcHRpb25dPVwiJydcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqYWNsUGFnZUd1YXJkT3BlcmF0aW9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBhdWktYnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgIChjbGljayk9XCJyZWxvYWQuZW1pdCgpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ3JlbG9hZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2FjbC1wYWdlLWd1YXJkPlxuPC9kaXY+XG4iXX0=