UNPKG

@hpe/angular-toolkit

Version:

Hewlett-Packard Enterprise : Angular toolkit for rapid project development

207 lines (206 loc) 18.2 kB
/** * @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=