Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

vipera-npm-registry / motif-web-admin-core   js

Repository URL to install this package:

Version: 0.3.1 

/ esm2015 / lib / components / TopMenu / top-menu-component.js

/**
 * @fileoverview added by tsickle
 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
import { SessionService } from './../Commons/session-service';
import { Component, Input } from '@angular/core';
import { AuthService, NGXLogger, EventBusService } from 'web-console-core';
/** @type {?} */
const LOG_TAG = '[TopMenuComponent]';
export class TopMenuComponent {
    /**
     * @param {?} logger
     * @param {?} authService
     * @param {?} eventBus
     * @param {?} sessionService
     */
    constructor(logger, authService, eventBus, sessionService) {
        this.logger = logger;
        this.authService = authService;
        this.eventBus = eventBus;
        this.sessionService = sessionService;
    }
    /**
     * @return {?}
     */
    ngOnInit() {
        this.logger.debug(LOG_TAG, 'Initializing...');
        this.eventBus.on('AuthService:LoginEvent').subscribe((/**
         * @param {?} message
         * @return {?}
         */
        (message) => {
            this.logger.debug(LOG_TAG, 'on AuthService:LoginEvent received');
            this.updateInfo();
        }));
        // Fallback info
        this.currentUserInfo = {
            userName: 'N/A',
            userAbbr: 'NA',
            lastAccess: new Date()
        };
        this._mainMenuLabel = this.currentUserInfo.userAbbr;
        this.items = [
            { label: this.getCurrentUserDesc(), disabled: true },
            { label: 'Last Login: ' + this.getLastAccessStr(), disabled: true },
            { separator: true },
            { label: 'Logout', icon: 'pi pi-fw pi-angle-right', command: (/**
                 * @param {?} event
                 * @return {?}
                 */
                (event) => { this.onLogout(); }) }
        ];
        // Retrieve from server
        this.updateInfo();
    }
    /**
     * @private
     * @return {?}
     */
    updateInfo() {
        this.sessionService.currentUser.subscribe((/**
         * @param {?} currentUserInfo
         * @return {?}
         */
        (currentUserInfo) => {
            this.currentUserInfo = currentUserInfo;
            this._mainMenuLabel = currentUserInfo.userAbbr;
            this.items = [
                { label: this.getCurrentUserDesc(), disabled: true },
                { label: 'Last Login: ' + this.getLastAccessStr(), disabled: true },
                { separator: true },
                { label: 'Logout', icon: 'pi pi-fw pi-angle-right', command: (/**
                     * @param {?} event
                     * @return {?}
                     */
                    (event) => { this.onLogout(); }) }
            ];
        }), (/**
         * @param {?} error
         * @return {?}
         */
        (error) => {
            this.logger.warn('error while retrieving current user info from sessions service: ', error);
        }));
    }
    /**
     * @private
     * @return {?}
     */
    getCurrentUserDesc() {
        this.logger.debug(LOG_TAG, 'getCurrentUserDesc for:', this.currentUserInfo);
        return 'Current user: ' + this.currentUserInfo.userName;
    }
    /**
     * @private
     * @param {?} date
     * @return {?}
     */
    formatDate(date) {
        /** @type {?} */
        var monthNames = [
            "January", "February", "March",
            "April", "May", "June", "July",
            "August", "September", "October",
            "November", "December"
        ];
        /** @type {?} */
        var day = date.getDate();
        /** @type {?} */
        var monthIndex = date.getMonth();
        /** @type {?} */
        var year = date.getFullYear();
        return day + ' ' + monthNames[monthIndex] + ' ' + year;
    }
    /**
     * @private
     * @return {?}
     */
    getLastAccessStr() {
        this.logger.debug(LOG_TAG, 'getLastAccessStr for:', this.currentUserInfo.lastAccess);
        try {
            //let now = moment().format('LLLL');
            //moment("20111031", "YYYYMMDD").fromNow();// this.sessionService.currentUser.lastAccess);
            //return myMoment.format('ddd, h:mm A');
            //return moment(this.sessionService.currentUser.lastAccess).format('ddd, h:mm A');
            return this.formatDate(new Date(this.currentUserInfo.lastAccess));
        }
        catch (err) {
            this.logger.error(LOG_TAG, 'getLastAccessStr error:', err);
            return 'n.a.';
        }
    }
    /**
     * @return {?}
     */
    onLogout() {
        this.logger.debug(LOG_TAG, 'Logout invoked.');
        this.authService.logout().subscribe((/**
         * @param {?} resp
         * @return {?}
         */
        (resp) => {
        }), (/**
         * @param {?} err
         * @return {?}
         */
        (err) => {
            this.logger.warn('Logout revoke request failed');
        }));
    }
    /**
     * @return {?}
     */
    get mainMenuLabel() {
        return this._mainMenuLabel;
    }
}
TopMenuComponent.decorators = [
    { type: Component, args: [{
                selector: 'wc-top-menu-component',
                template: "<p-menu #menu [popup]=\"true\" [model]=\"items\" [styleClass]=\"'top-menu'\"></p-menu>\n<button type=\"button\" pButton icon=\"pi pi-bars\" label=\"{{mainMenuLabel}}\" (click)=\"menu.toggle($event)\"></button>",
                styles: [""]
            }] }
];
/** @nocollapse */
TopMenuComponent.ctorParameters = () => [
    { type: NGXLogger },
    { type: AuthService },
    { type: EventBusService },
    { type: SessionService }
];
TopMenuComponent.propDecorators = {
    visible: [{ type: Input }]
};
if (false) {
    /**
     * @type {?}
     * @private
     */
    TopMenuComponent.prototype._mainMenuLabel;
    /** @type {?} */
    TopMenuComponent.prototype.items;
    /**
     * @type {?}
     * @private
     */
    TopMenuComponent.prototype.currentUserInfo;
    /** @type {?} */
    TopMenuComponent.prototype.visible;
    /**
     * @type {?}
     * @private
     */
    TopMenuComponent.prototype.logger;
    /**
     * @type {?}
     * @private
     */
    TopMenuComponent.prototype.authService;
    /**
     * @type {?}
     * @private
     */
    TopMenuComponent.prototype.eventBus;
    /**
     * @type {?}
     * @private
     */
    TopMenuComponent.prototype.sessionService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9wLW1lbnUtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbW90aWYtd2ViLWFkbWluLWNvcmUvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9Ub3BNZW51L3RvcC1tZW51LWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztNQUdyRSxPQUFPLEdBQUcsb0JBQW9CO0FBT3BDLE1BQU0sT0FBTyxnQkFBZ0I7Ozs7Ozs7SUFRekIsWUFBb0IsTUFBaUIsRUFDekIsV0FBd0IsRUFDeEIsUUFBeUIsRUFDekIsY0FBOEI7UUFIdEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDbkMsQ0FBQzs7OztJQUVSLFFBQVE7UUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUU5QyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDLEVBQUMsQ0FBQztRQUVILGdCQUFnQjtRQUNoQixJQUFJLENBQUMsZUFBZSxHQUFHO1lBQ25CLFFBQVEsRUFBRSxLQUFLO1lBQ2YsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVLEVBQUUsSUFBSSxJQUFJLEVBQUU7U0FDekIsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFDcEQsSUFBSSxDQUFDLEtBQUssR0FBRztZQUNULEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7WUFDcEQsRUFBRSxLQUFLLEVBQUUsY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7WUFDbkUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO1lBQ25CLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsT0FBTzs7OztnQkFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUU7U0FDakcsQ0FBQztRQUVGLHVCQUF1QjtRQUN2QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQzs7Ozs7SUFFTyxVQUFVO1FBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsU0FBUzs7OztRQUFDLENBQUMsZUFBZ0MsRUFBRSxFQUFFO1lBQzNFLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxjQUFjLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQztZQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHO2dCQUNULEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ3BELEVBQUUsS0FBSyxFQUFFLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNuRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUU7Z0JBQ25CLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsT0FBTzs7OztvQkFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUU7YUFDakcsQ0FBQztRQUNOLENBQUM7Ozs7UUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0VBQWtFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEcsQ0FBQyxFQUFDLENBQUM7SUFDUCxDQUFDOzs7OztJQUVPLGtCQUFrQjtRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7SUFDNUQsQ0FBQzs7Ozs7O0lBRU8sVUFBVSxDQUFDLElBQUk7O1lBQ2YsVUFBVSxHQUFHO1lBQ2YsU0FBUyxFQUFFLFVBQVUsRUFBRSxPQUFPO1lBQzlCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU07WUFDOUIsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTO1lBQ2hDLFVBQVUsRUFBRSxVQUFVO1NBQ3ZCOztZQUVHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFOztZQUNwQixVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRTs7WUFDNUIsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7UUFFN0IsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0lBQ3pELENBQUM7Ozs7O0lBR0ssZ0JBQWdCO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JGLElBQUk7WUFDQSxvQ0FBb0M7WUFDcEMsMEZBQTBGO1lBQzFGLHdDQUF3QztZQUN4QyxrRkFBa0Y7WUFDbEYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUNyRTtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzNELE9BQU8sTUFBTSxDQUFBO1NBQ2hCO0lBQ0wsQ0FBQzs7OztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVM7Ozs7UUFBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQzdDLENBQUM7Ozs7UUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNyRCxDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7Ozs7SUFFRCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7OztZQXpHSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLHVCQUF1QjtnQkFFakMsNk5BQXdDOzthQUMzQzs7OztZQVRxQixTQUFTO1lBQXRCLFdBQVc7WUFBYSxlQUFlO1lBSHZDLGNBQWM7OztzQkFtQmxCLEtBQUs7Ozs7Ozs7SUFKTiwwQ0FBK0I7O0lBQy9CLGlDQUFrQjs7Ozs7SUFDbEIsMkNBQXlDOztJQUV6QyxtQ0FBaUM7Ozs7O0lBRXJCLGtDQUF5Qjs7Ozs7SUFDakMsdUNBQWdDOzs7OztJQUNoQyxvQ0FBaUM7Ozs7O0lBQ2pDLDBDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi8uLi9Db21tb25zL3Nlc3Npb24tc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIE5HWExvZ2dlciwgRXZlbnRCdXNTZXJ2aWNlIH0gZnJvbSAnd2ViLWNvbnNvbGUtY29yZSc7XG5pbXBvcnQgeyBDdXJyZW50VXNlckluZm8gfSBmcm9tICcuLi9Db21tb25zL3Nlc3Npb24tc2VydmljZSc7XG5cbmNvbnN0IExPR19UQUcgPSAnW1RvcE1lbnVDb21wb25lbnRdJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd3Yy10b3AtbWVudS1jb21wb25lbnQnLFxuICAgIHN0eWxlVXJsczogWyAnLi90b3AtbWVudS1jb21wb25lbnQuc2NzcycgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdG9wLW1lbnUtY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRvcE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgcHJpdmF0ZSBfbWFpbk1lbnVMYWJlbDogc3RyaW5nO1xuICAgIGl0ZW1zOiBNZW51SXRlbVtdO1xuICAgIHByaXZhdGUgY3VycmVudFVzZXJJbmZvOiBDdXJyZW50VXNlckluZm87XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgdmlzaWJsZTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGV2ZW50QnVzOiBFdmVudEJ1c1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvblNlcnZpY2U6IFNlc3Npb25TZXJ2aWNlXG4gICAgICAgICkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnSW5pdGlhbGl6aW5nLi4uJyk7XG5cbiAgICAgICAgdGhpcy5ldmVudEJ1cy5vbignQXV0aFNlcnZpY2U6TG9naW5FdmVudCcpLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ29uIEF1dGhTZXJ2aWNlOkxvZ2luRXZlbnQgcmVjZWl2ZWQnKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5mbygpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBGYWxsYmFjayBpbmZvXG4gICAgICAgIHRoaXMuY3VycmVudFVzZXJJbmZvID0ge1xuICAgICAgICAgICAgdXNlck5hbWU6ICdOL0EnLFxuICAgICAgICAgICAgdXNlckFiYnI6ICdOQScsXG4gICAgICAgICAgICBsYXN0QWNjZXNzOiBuZXcgRGF0ZSgpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX21haW5NZW51TGFiZWwgPSB0aGlzLmN1cnJlbnRVc2VySW5mby51c2VyQWJicjtcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtcbiAgICAgICAgICAgIHsgbGFiZWw6IHRoaXMuZ2V0Q3VycmVudFVzZXJEZXNjKCksIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnTGFzdCBMb2dpbjogJyArIHRoaXMuZ2V0TGFzdEFjY2Vzc1N0cigpLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBzZXBhcmF0b3I6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdMb2dvdXQnLCBpY29uOiAncGkgcGktZncgcGktYW5nbGUtcmlnaHQnLCBjb21tYW5kOiAoZXZlbnQpID0+IHsgdGhpcy5vbkxvZ291dCgpOyB9IH1cbiAgICAgICAgXTtcblxuICAgICAgICAvLyBSZXRyaWV2ZSBmcm9tIHNlcnZlclxuICAgICAgICB0aGlzLnVwZGF0ZUluZm8oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUluZm8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2UuY3VycmVudFVzZXIuc3Vic2NyaWJlKChjdXJyZW50VXNlckluZm86IEN1cnJlbnRVc2VySW5mbykgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlckluZm8gPSBjdXJyZW50VXNlckluZm87XG4gICAgICAgICAgICB0aGlzLl9tYWluTWVudUxhYmVsID0gY3VycmVudFVzZXJJbmZvLnVzZXJBYmJyO1xuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiB0aGlzLmdldEN1cnJlbnRVc2VyRGVzYygpLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdMYXN0IExvZ2luOiAnICsgdGhpcy5nZXRMYXN0QWNjZXNzU3RyKCksIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyBzZXBhcmF0b3I6IHRydWUgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnTG9nb3V0JywgaWNvbjogJ3BpIHBpLWZ3IHBpLWFuZ2xlLXJpZ2h0JywgY29tbWFuZDogKGV2ZW50KSA9PiB7IHRoaXMub25Mb2dvdXQoKTsgfSB9XG4gICAgICAgICAgICBdO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ2Vycm9yIHdoaWxlIHJldHJpZXZpbmcgY3VycmVudCB1c2VyIGluZm8gZnJvbSBzZXNzaW9ucyBzZXJ2aWNlOiAnLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3VycmVudFVzZXJEZXNjKCk6IHN0cmluZyB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdnZXRDdXJyZW50VXNlckRlc2MgZm9yOicsIHRoaXMuY3VycmVudFVzZXJJbmZvKTtcbiAgICAgICAgcmV0dXJuICdDdXJyZW50IHVzZXI6ICcgKyB0aGlzLmN1cnJlbnRVc2VySW5mby51c2VyTmFtZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdERhdGUoZGF0ZSkge1xuICAgICAgICB2YXIgbW9udGhOYW1lcyA9IFtcbiAgICAgICAgICBcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsXG4gICAgICAgICAgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsXG4gICAgICAgICAgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsXG4gICAgICAgICAgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJcbiAgICAgICAgXTtcbiAgICAgIFxuICAgICAgICB2YXIgZGF5ID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgICAgIHZhciBtb250aEluZGV4ID0gZGF0ZS5nZXRNb250aCgpO1xuICAgICAgICB2YXIgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgIFxuICAgICAgICByZXR1cm4gZGF5ICsgJyAnICsgbW9udGhOYW1lc1ttb250aEluZGV4XSArICcgJyArIHllYXI7XG4gICAgICB9XG4gICAgICBcblxuICAgIHByaXZhdGUgZ2V0TGFzdEFjY2Vzc1N0cigpOiBzdHJpbmcge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnZ2V0TGFzdEFjY2Vzc1N0ciBmb3I6JywgdGhpcy5jdXJyZW50VXNlckluZm8ubGFzdEFjY2Vzcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvL2xldCBub3cgPSBtb21lbnQoKS5mb3JtYXQoJ0xMTEwnKTtcbiAgICAgICAgICAgIC8vbW9tZW50KFwiMjAxMTEwMzFcIiwgXCJZWVlZTU1ERFwiKS5mcm9tTm93KCk7Ly8gdGhpcy5zZXNzaW9uU2VydmljZS5jdXJyZW50VXNlci5sYXN0QWNjZXNzKTtcbiAgICAgICAgICAgIC8vcmV0dXJuIG15TW9tZW50LmZvcm1hdCgnZGRkLCBoOm1tIEEnKTtcbiAgICAgICAgICAgIC8vcmV0dXJuIG1vbWVudCh0aGlzLnNlc3Npb25TZXJ2aWNlLmN1cnJlbnRVc2VyLmxhc3RBY2Nlc3MpLmZvcm1hdCgnZGRkLCBoOm1tIEEnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGUobmV3IERhdGUodGhpcy5jdXJyZW50VXNlckluZm8ubGFzdEFjY2VzcykpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKExPR19UQUcsICdnZXRMYXN0QWNjZXNzU3RyIGVycm9yOicsIGVycik7XG4gICAgICAgICAgICByZXR1cm4gJ24uYS4nXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkxvZ291dCgpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ0xvZ291dCBpbnZva2VkLicpO1xuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ291dCgpLnN1YnNjcmliZSgocmVzcCkgPT4ge1xuICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdMb2dvdXQgcmV2b2tlIHJlcXVlc3QgZmFpbGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWFpbk1lbnVMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFpbk1lbnVMYWJlbDtcbiAgICB9XG5cbn1cbiJdfQ==