@hpe/angular-toolkit
Version:
Hewlett-Packard Enterprise : Angular toolkit for rapid project development
207 lines (206 loc) • 18.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
//=============================================================================
//===
//=== (C) Copyright 2018 Hewlett Packard Enterprise Development LP.
//===
//=== Use of this source code is governed by an MIT-style license that can be
//=== found in the LICENSE file
//===
//=============================================================================
import * as tslib_1 from "tslib";
import { Injectable } from '@angular/core';
import { AppEvent } from "@hpe/angular-toolkit/model";
import { AbstractSubscriber } from "./abstract-subscriber";
import { EventBusService } from "./eventbus-service";
import { HttpService } from "./http-service";
var SessionService = /** @class */ (function (_super) {
tslib_1.__extends(SessionService, _super);
//-------------------------------------------------------------------------
//---
//--- Constructor
//---
//-------------------------------------------------------------------------
function SessionService(eventBusService, httpService) {
var _this = _super.call(this, eventBusService) || this;
_this.httpService = httpService;
_this.clearSession();
_super.prototype.subscribeToApp.call(_this, AppEvent.INVALID_TOKEN, function (event) { return _this.onInvalidToken(event); });
return _this;
}
/**
* @param {?} cred
* @return {?}
*/
SessionService.prototype.login = /**
* @param {?} cred
* @return {?}
*/
function (cred) {
var _this = this;
console.log("SessionService.login : Logging in user='" + cred.username + "'");
//--- Loads user profile from server
this.httpService.postObject("/api/session/login", cred)
.subscribe(function (result) { return _this.loginSuccess(result); }, function (error) { return _this.loginError(error); });
};
/**
* @return {?}
*/
SessionService.prototype.logout = /**
* @return {?}
*/
function () {
var _this = this;
console.log("SessionService.logout : Logging out user='" + (this.user || "???") + "'");
this.httpService.postObject("/api/session/logout", { token: this.token })
.subscribe(function (result) { return _this.logoutSuccess(); }, function (error) { return _this.logoutError(error); });
};
/**
* @return {?}
*/
SessionService.prototype.clearSession = /**
* @return {?}
*/
function () {
console.log("SessionService.clearSession: Resetting session...");
this.session = null;
this.token = null;
this.user = null;
this.profile = null;
this.permissions = new Map();
};
Object.defineProperty(SessionService.prototype, "homePage", {
get: /**
* @return {?}
*/
function () {
return (this.profile)
? this.profile.homePage
: null;
},
enumerable: true,
configurable: true
});
/**
* @param {?} name
* @return {?}
*/
SessionService.prototype.hasPermission = /**
* @param {?} name
* @return {?}
*/
function (name) {
return (this.permissions.get(name));
};
/**
* @param {?} session
* @return {?}
*/
SessionService.prototype.loginSuccess = /**
* @param {?} session
* @return {?}
*/
function (session) {
this.session = session;
this.token = session.token;
this.user = session.user;
this.profile = session.profile;
this.permissions = this.setupPermissionMap(this.profile.permissions);
_super.prototype.emitToApp.call(this, new AppEvent(AppEvent.LOGIN_SUCCESS, session));
console.log("Login successful for user=" + this.user.username);
};
/**
* @param {?} response
* @return {?}
*/
SessionService.prototype.loginError = /**
* @param {?} response
* @return {?}
*/
function (response) {
_super.prototype.emitToApp.call(this, new AppEvent(AppEvent.LOGIN_FAILED, response));
};
/**
* @return {?}
*/
SessionService.prototype.logoutSuccess = /**
* @return {?}
*/
function () {
var /** @type {?} */ username = this.user.username;
this.clearSession();
_super.prototype.emitToApp.call(this, new AppEvent(AppEvent.LOGOUT_SUCCESS, username));
console.log("Logout successful for user=" + username);
};
/**
* @param {?} response
* @return {?}
*/
SessionService.prototype.logoutError = /**
* @param {?} response
* @return {?}
*/
function (response) {
this.clearSession();
_super.prototype.emitToApp.call(this, new AppEvent(AppEvent.LOGOUT_FAILED));
};
/**
* @param {?} permissions
* @return {?}
*/
SessionService.prototype.setupPermissionMap = /**
* @param {?} permissions
* @return {?}
*/
function (permissions) {
var /** @type {?} */ map = new Map();
permissions.forEach(function (p) { return map.set(p, true); });
return map;
};
/**
* @param {?} event
* @return {?}
*/
SessionService.prototype.onInvalidToken = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.clearSession();
};
SessionService.decorators = [
{ type: Injectable },
];
/** @nocollapse */
SessionService.ctorParameters = function () { return [
{ type: EventBusService, },
{ type: HttpService, },
]; };
return SessionService;
}(AbstractSubscriber));
export { SessionService };
function SessionService_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
SessionService.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
SessionService.ctorParameters;
/** @type {?} */
SessionService.prototype.session;
/** @type {?} */
SessionService.prototype.token;
/** @type {?} */
SessionService.prototype.user;
/** @type {?} */
SessionService.prototype.profile;
/** @type {?} */
SessionService.prototype.permissions;
/** @type {?} */
SessionService.prototype.httpService;
}
//=============================================================================
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhwZS9hbmd1bGFyLXRvb2xraXQvc2VydmljZS8iLCJzb3VyY2VzIjpbInNlc3Npb24tc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBU0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQWdCLDRCQUE0QixDQUFDO0FBTTlELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBUyxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQWEsZ0JBQWdCLENBQUM7O0lBTWQsMENBQWtCO0lBY3JELDJFQUEyRTtJQUMzRSxLQUFLO0lBQ0wsaUJBQWlCO0lBQ2pCLEtBQUs7SUFDTCwyRUFBMkU7SUFFM0Usd0JBQVksZUFBZ0MsRUFBVSxXQUF5QjtRQUEvRSxZQUVDLGtCQUFNLGVBQWUsQ0FBQyxTQUl0QjtRQU5xRCxpQkFBVyxHQUFYLFdBQVcsQ0FBYztRQUc5RSxLQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsaUJBQU0sY0FBYyxhQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsVUFBQSxLQUFLLElBQUksT0FBQSxLQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUExQixDQUEwQixDQUFDLENBQUM7O0tBQ2xGOzs7OztJQVFNLDhCQUFLOzs7O2NBQUMsSUFBa0I7O1FBRTlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMENBQTBDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQzs7UUFJOUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDO2FBQ3JELFNBQVMsQ0FBRSxVQUFBLE1BQU0sSUFBSSxPQUFBLEtBQUksQ0FBQyxZQUFZ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UUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDOzs7Ozs7SUFLL0MsMkNBQWtCOzs7O2NBQUMsV0FBc0I7UUFFaEQscUJBQUksR0FBRyxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBRXJDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBQyxDQUFVLElBQUssT0FBQSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBaEIsQ0FBZ0IsQ0FBQyxDQUFDO1FBRXRELE1BQU0sQ0FBQyxHQUFHLENBQUM7Ozs7OztJQVNKLHVDQUFjOzs7O2NBQUMsS0FBZ0I7UUFDdEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDOzs7Z0JBcEpyQixVQUFVOzs7O2dCQU5ILGVBQWU7Z0JBQ2YsV0FBVzs7eUJBbkJuQjtFQXlCb0Msa0JBQWtCO1NBQXpDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyIvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PVxuLy89PT0gKEMpIENvcHlyaWdodCAyMDE4IEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQLlxuLy89PT1cbi8vPT09IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4vLz09PSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlXG4vLz09PVxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0FwcEV2ZW50fSAgICAgICAgICAgZnJvbSBcIkBocGUvYW5ndWxhci10b29sa2l0L21vZGVsXCI7XG5pbXBvcnQge0NyZWRlbnRpYWxzfSAgICAgICAgZnJvbSBcIkBocGUvYW5ndWxhci10b29sa2l0L21vZGVsXCI7XG5pbXBvcnQge1Byb2ZpbGV9ICAgICAgICAgICAgZnJvbSBcIkBocGUvYW5ndWxhci10b29sa2l0L21vZGVsXCI7XG5pbXBvcnQge1Nlc3Npb259ICAgICAgICAgICAgZnJvbSBcIkBocGUvYW5ndWxhci10b29sa2l0L21vZGVsXCI7XG5pbXBvcnQge1Nlc3Npb25Vc2VyfSAgICAgICAgZnJvbSBcIkBocGUvYW5ndWxhci10b29sa2l0L21vZGVsXCI7XG5cbmltcG9ydCB7QWJzdHJhY3RTdWJzY3JpYmVyfSBmcm9tIFwiLi9hYnN0cmFjdC1zdWJzY3JpYmVyXCI7XG5pbXBvcnQge0V2ZW50QnVzU2VydmljZX0gICAgZnJvbSBcIi4vZXZlbnRidXMtc2VydmljZVwiO1xuaW1wb3J0IHtIdHRwU2VydmljZX0gICAgICAgIGZyb20gXCIuL2h0dHAtc2VydmljZVwiO1xuXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlc3Npb25TZXJ2aWNlIGV4dGVuZHMgQWJzdHJhY3RTdWJzY3JpYmVyIHtcblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8tLS1cblx0Ly8tLS0gVmFyaWFibGVzXG5cdC8vLS0tXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHB1YmxpYyBzZXNzaW9uICAgICA6IFNlc3Npb247XG5cdHB1YmxpYyB0b2tlbiAgICAgICA6IHN0cmluZztcblx0cHVibGljIHVzZXIgICAgICAgIDogU2Vzc2lvblVzZXI7XG5cdHB1YmxpYyBwcm9maWxlICAgICA6IFByb2ZpbGU7XG5cdHB1YmxpYyBwZXJtaXNzaW9ucyA6IE1hcDxzdHJpbmcsIGJvb2xlYW4+O1xuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLy0tLVxuXHQvLy0tLSBDb25zdHJ1Y3RvclxuXHQvLy0tLVxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRjb25zdHJ1Y3RvcihldmVudEJ1c1NlcnZpY2U6IEV2ZW50QnVzU2VydmljZSwgcHJpdmF0ZSBodHRwU2VydmljZSA6IEh0dHBTZXJ2aWNlKSB7XG5cblx0XHRzdXBlcihldmVudEJ1c1NlcnZpY2UpO1xuXHRcdHRoaXMuY2xlYXJTZXNzaW9uKCk7XG5cblx0XHRzdXBlci5zdWJzY3JpYmVUb0FwcChBcHBFdmVudC5JTlZBTElEX1RPS0VOLCBldmVudCA9PiB0aGlzLm9uSW52YWxpZFRva2VuKGV2ZW50KSk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8tLS1cblx0Ly8tLS0gQVBJIG1ldGhvZHNcblx0Ly8tLS1cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHVibGljIGxvZ2luKGNyZWQgOiBDcmVkZW50aWFscykgOiB2b2lkIHtcblxuXHRcdGNvbnNvbGUubG9nKFwiU2Vzc2lvblNlcnZpY2UubG9naW4gOiBMb2dnaW5nIGluIHVzZXI9J1wiICsgY3JlZC51c2VybmFtZSArIFwiJ1wiKTtcblxuXHRcdC8vLS0tIExvYWRzIHVzZXIgcHJvZmlsZSBmcm9tIHNlcnZlclxuXG5cdFx0dGhpcy5odHRwU2VydmljZS5wb3N0T2JqZWN0KFwiL2FwaS9zZXNzaW9uL2xvZ2luXCIsIGNyZWQpXG5cdFx0XHQuc3Vic2NyaWJlKFx0cmVzdWx0ID0+IHRoaXMubG9naW5TdWNjZXNzKHJlc3VsdCksXG5cdFx0XHRcdFx0XHRlcnJvciA9PiB0aGlzLmxvZ2luRXJyb3IoZXJyb3IpKTtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHB1YmxpYyBsb2dvdXQoKSA6IHZvaWQge1xuXG5cdFx0Y29uc29sZS5sb2coXCJTZXNzaW9uU2VydmljZS5sb2dvdXQgOiBMb2dnaW5nIG91dCB1c2VyPSdcIiArICh0aGlzLnVzZXIgfHwgXCI/Pz9cIikgKyBcIidcIik7XG5cblx0XHR0aGlzLmh0dHBTZXJ2aWNlLnBvc3RPYmplY3QoXCIvYXBpL3Nlc3Npb24vbG9nb3V0XCIsIHsgdG9rZW46IHRoaXMudG9rZW4gfSlcblx0XHRcdC5zdWJzY3JpYmUoXHRyZXN1bHQgPT4gdGhpcy5sb2dvdXRTdWNjZXNzKCksXG5cdFx0XHRcdFx0XHRlcnJvciA9PiB0aGlzLmxvZ291dEVycm9yKGVycm9yKSk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwdWJsaWMgY2xlYXJTZXNzaW9uKCkgOiB2b2lkIHtcblxuXHRcdGNvbnNvbGUubG9nKFwiU2Vzc2lvblNlcnZpY2UuY2xlYXJTZXNzaW9uOiBSZXNldHRpbmcgc2Vzc2lvbi4uLlwiKTtcblxuXHRcdHRoaXMuc2Vzc2lvbiAgICAgPSBudWxsO1xuXHRcdHRoaXMudG9rZW4gICAgICAgPSBudWxsO1xuXHRcdHRoaXMudXNlciAgICAgICAgPSBudWxsO1xuXHRcdHRoaXMucHJvZmlsZSAgICAgPSBudWxsO1xuXHRcdHRoaXMucGVybWlzc2lvbnMgPSBuZXcgTWFwKCk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwdWJsaWMgZ2V0IGhvbWVQYWdlKCkgOiBzdHJpbmcge1xuXG5cdFx0cmV0dXJuICh0aGlzLnByb2ZpbGUpXG5cdFx0XHRcdFx0PyB0aGlzLnByb2ZpbGUuaG9tZVBhZ2Vcblx0XHRcdFx0XHQ6IG51bGw7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwdWJsaWMgaGFzUGVybWlzc2lvbihuYW1lIDogc3RyaW5nKSA6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5wZXJtaXNzaW9ucy5nZXQobmFtZSkpO1xuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vLS0tXG5cdC8vLS0tIFByaXZhdGUgbWV0aG9kc1xuXHQvLy0tLVxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcml2YXRlIGxvZ2luU3VjY2VzcyhzZXNzaW9uOiBTZXNzaW9uKTogdm9pZCB7XG5cblx0XHR0aGlzLnNlc3Npb24gICAgID0gc2Vzc2lvbjtcblx0XHR0aGlzLnRva2VuICAgICAgID0gc2Vzc2lvbi50b2tlbjtcblx0XHR0aGlzLnVzZXIgICAgICAgID0gc2Vzc2lvbi51c2VyO1xuXHRcdHRoaXMucHJvZmlsZSAgICAgPSBzZXNzaW9uLnByb2ZpbGU7XG5cdFx0dGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMuc2V0dXBQZXJtaXNzaW9uTWFwKHRoaXMucHJvZmlsZS5wZXJtaXNzaW9ucyk7XG5cblx0XHRzdXBlci5lbWl0VG9BcHAobmV3IEFwcEV2ZW50KEFwcEV2ZW50LkxPR0lOX1NVQ0NFU1MsIHNlc3Npb24pKTtcblxuXHRcdGNvbnNvbGUubG9nKFwiTG9naW4gc3VjY2Vzc2Z1bCBmb3IgdXNlcj1cIisgdGhpcy51c2VyLnVzZXJuYW1lKTtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHByaXZhdGUgbG9naW5FcnJvcihyZXNwb25zZTogYW55KSB7XG5cdFx0c3VwZXIuZW1pdFRvQXBwKG5ldyBBcHBFdmVudChBcHBFdmVudC5MT0dJTl9GQUlMRUQsIHJlc3BvbnNlKSk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcml2YXRlIGxvZ291dFN1Y2Nlc3MoKTogdm9pZCB7XG5cblx0XHRsZXQgdXNlcm5hbWUgPSB0aGlzLnVzZXIudXNlcm5hbWU7XG5cblx0XHR0aGlzLmNsZWFyU2Vzc2lvbigpO1xuXHRcdHN1cGVyLmVtaXRUb0FwcChuZXcgQXBwRXZlbnQoQXBwRXZlbnQuTE9HT1VUX1NVQ0NFU1MsIHVzZXJuYW1lKSk7XG5cblx0XHRjb25zb2xlLmxvZyhcIkxvZ291dCBzdWNjZXNzZnVsIGZvciB1c2VyPVwiKyB1c2VybmFtZSk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcml2YXRlIGxvZ291dEVycm9yKHJlc3BvbnNlOiBhbnkpOiB2b2lkIHtcblxuXHRcdHRoaXMuY2xlYXJTZXNzaW9uKCk7XG5cdFx0c3VwZXIuZW1pdFRvQXBwKG5ldyBBcHBFdmVudChBcHBFdmVudC5MT0dPVVRfRkFJTEVEKSk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcml2YXRlIHNldHVwUGVybWlzc2lvbk1hcChwZXJtaXNzaW9ucyA6IHN0cmluZ1tdKSA6IE1hcDxzdHJpbmcsIGJvb2xlYW4+IHtcblxuXHRcdGxldCBtYXAgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcblxuXHRcdHBlcm1pc3Npb25zLmZvckVhY2goKHAgOiBzdHJpbmcpID0+IG1hcC5zZXQocCwgdHJ1ZSkpO1xuXG5cdFx0cmV0dXJuIG1hcDtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLy0tLVxuXHQvLy0tLSBFdmVudHNcblx0Ly8tLS1cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHJpdmF0ZSBvbkludmFsaWRUb2tlbihldmVudCA6IEFwcEV2ZW50KSB7XG5cdFx0dGhpcy5jbGVhclNlc3Npb24oKTtcblx0fVxufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iXX0=