com.phloxui
Version:
PhloxUI Ng2+ Framework
215 lines (214 loc) • 20 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Injectable } from '@angular/core';
import { ObservableManager } from './ObservableManager.service';
import { PhloxAppInfoService } from './PhloxAppInfoService.service';
const /** @type {?} */ TIMEOUT_TOPIC = 'user-service.session.timeout';
const /** @type {?} */ ERROR_TOPIC = 'user-service.session.error';
export class UserService {
/**
* @param {?} obsMgr
* @param {?} phloxAppInfoService
*/
constructor(obsMgr, phloxAppInfoService) {
this.obsMgr = obsMgr;
if (phloxAppInfoService != null) {
phloxAppInfoService.getAppInfo().then((result) => {
this.phloxAppInfo = result;
});
}
}
/**
* @return {?}
*/
loadAccessibleApp() {
// ! TODO: Edit this on PRODUCTION
return null;
}
/**
* @return {?}
*/
validateConnectionTimeout() {
this.timeout = setTimeout(() => {
if (this.userSession !== null && this.userSession !== undefined) {
this.userSession.checkTimeout().then((result) => {
if (!result) {
this.obsMgr.publish(UserService.TIMEOUT_TOPIC, result);
}
this.validateConnectionTimeout();
}).catch((error) => {
this.obsMgr.publish(UserService.ERROR_TOPIC, error);
this.validateConnectionTimeout();
});
}
}, this.phloxAppInfo.settings.DEFAULT_TIME_OUT_LOGIN_USER_SESSION);
}
/**
* @return {?}
*/
isLoggedOn() {
if (this.userSession === null || this.userSession === undefined) {
return Promise.resolve(false);
}
return this.userSession.load().then((result) => {
if (this.userSession.getSessionId() === undefined || this.userSession.getSessionId() === null || this.userSession.getSessionId() === '') {
return false;
}
else {
return this.userSession.checkTimeout().then((res) => {
if (res) {
if (this.timeout === null || this.timeout === undefined) {
this.validateConnectionTimeout();
}
return true;
}
else {
return false;
}
});
}
});
}
/**
* @return {?}
*/
reloadAccessibleApp() {
this.accessibleApps = null;
return this.getAccessibleApp();
}
/**
* @return {?}
*/
getAccessibleApp() {
if (this.accessibleApps !== null && typeof this.accessibleApps !== 'undefined') {
return Promise.resolve(this.accessibleApps);
}
else {
let /** @type {?} */ prom = this.loadAccessibleApp();
if (prom !== null && prom !== undefined) {
return this.loadAccessibleApp().then((result) => {
this.accessibleApps = result;
return Promise.resolve(this.accessibleApps);
});
}
else {
return Promise.resolve(null);
}
}
}
/**
* @param {?} requestData
* @return {?}
*/
login(requestData) {
if (this.userSession === null || this.userSession === undefined) {
return Promise.reject(null);
}
let /** @type {?} */ state = this.userSession.login(requestData);
state.then((response) => {
if (response.status === 200) {
if (this.timeout !== null && this.timeout !== undefined) {
clearTimeout(this.timeout);
this.timeout = null;
}
this.validateConnectionTimeout();
return Promise.resolve(response);
}
else {
return Promise.reject(response);
}
});
return state;
}
/**
* @return {?}
*/
logout() {
if (this.userSession === null || this.userSession === undefined) {
return Promise.reject(null);
}
let /** @type {?} */ state = this.userSession.logout();
state.then((response) => {
if (response.status === 200) {
if (this.timeout !== null && this.timeout !== undefined) {
clearTimeout(this.timeout);
this.timeout = null;
}
return Promise.resolve(response);
}
else {
return Promise.reject(response);
}
});
return state;
}
/**
* @return {?}
*/
getObservableManager() {
return this.obsMgr;
}
/**
* @param {?} session
* @return {?}
*/
initialize(session) {
if (this.timeout !== null && this.timeout !== undefined) {
clearTimeout(this.timeout);
this.timeout = null;
}
this.userSession = session;
}
/**
* @return {?}
*/
deinitialize() {
if (this.timeout !== null && this.timeout !== undefined) {
clearTimeout(this.timeout);
this.timeout = null;
}
this.userSession = null;
}
/**
* @return {?}
*/
getUserSession() {
return this.userSession;
}
}
UserService.TIMEOUT_TOPIC = TIMEOUT_TOPIC;
UserService.ERROR_TOPIC = ERROR_TOPIC;
UserService.decorators = [
{ type: Injectable },
];
/** @nocollapse */
UserService.ctorParameters = () => [
{ type: ObservableManager, },
{ type: PhloxAppInfoService, },
];
function UserService_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
UserService.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
UserService.ctorParameters;
/** @type {?} */
UserService.TIMEOUT_TOPIC;
/** @type {?} */
UserService.ERROR_TOPIC;
/** @type {?} */
UserService.prototype.accessibleApps;
/** @type {?} */
UserService.prototype.obsMgr;
/** @type {?} */
UserService.prototype.phloxAppInfo;
/** @type {?} */
UserService.prototype.userSession;
/** @type {?} */
UserService.prototype.timeout;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlclNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2UvVXNlclNlcnZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVwRSx1QkFBTSxhQUFhLEdBQVcsOEJBQThCLENBQUM7QUFDN0QsdUJBQU0sV0FBVyxHQUFXLDRCQUE0QixDQUFDO0FBR3pELE1BQU07Ozs7O0lBVUosWUFBWSxNQUF5QixFQUFFLG1CQUF3QztRQUU3RSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixFQUFFLENBQUMsQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQzthQUM1QixDQUFDLENBQUM7U0FDSjtLQUVGOzs7O0lBRU8saUJBQWlCOztRQUV2QixNQUFNLENBQUMsSUFBSSxDQUFDOzs7OztJQUlOLHlCQUF5QjtRQUUvQixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDN0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDbEMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDVCxFQUFFLENBQUMsQ0FBQyxD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LFlBQVk7UUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3hELFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDckI7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzs7Ozs7SUFHbkIsY0FBYztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQzs7OzRCQXpLcUIsYUFBYTswQkFDZixXQUFXOztZQUp6RCxVQUFVOzs7O1lBTkYsaUJBQWlCO1lBQ2pCLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBobG94QXBwSW5mbyB9IGZyb20gJy4uL2NvbXBvbmVudC9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgSVVzZXJTZXNzaW9uIH0gZnJvbSAnLi4vc2hhcmUvSVVzZXJTZXNzaW9uJztcbmltcG9ydCB7IE9ic2VydmFibGVNYW5hZ2VyIH0gZnJvbSAnLi9PYnNlcnZhYmxlTWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBobG94QXBwSW5mb1NlcnZpY2UgfSBmcm9tICcuL1BobG94QXBwSW5mb1NlcnZpY2Uuc2VydmljZSc7XG5cbmNvbnN0IFRJTUVPVVRfVE9QSUM6IHN0cmluZyA9ICd1c2VyLXNlcnZpY2Uuc2Vzc2lvbi50aW1lb3V0JztcbmNvbnN0IEVSUk9SX1RPUElDOiBzdHJpbmcgPSAndXNlci1zZXJ2aWNlLnNlc3Npb24uZXJyb3InO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2Uge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVElNRU9VVF9UT1BJQzogc3RyaW5nID0gVElNRU9VVF9UT1BJQztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFUlJPUl9UT1BJQzogc3RyaW5nID0gRVJST1JfVE9QSUM7XG4gIHByaXZhdGUgYWNjZXNzaWJsZUFwcHM6IFBobG94QXBwSW5mb1tdO1xuICBwcml2YXRlIG9ic01ncjogT2JzZXJ2YWJsZU1hbmFnZXI7XG4gIHByaXZhdGUgcGhsb3hBcHBJbmZvOiBQaGxveEFwcEluZm87XG4gIHByaXZhdGUgdXNlclNlc3Npb246IElVc2VyU2Vzc2lvbjtcbiAgcHJpdmF0ZSB0aW1lb3V0OiBhbnk7XG5cbiAgY29uc3RydWN0b3Iob2JzTWdyOiBPYnNlcnZhYmxlTWFuYWdlciwgcGhsb3hBcHBJbmZvU2VydmljZTogUGhsb3hBcHBJbmZvU2VydmljZSkge1xuXG4gICAgdGhpcy5vYnNNZ3IgPSBvYnNNZ3I7XG5cbiAgICBpZiAocGhsb3hBcHBJbmZvU2VydmljZSAhPSBudWxsKSB7XG4gICAgICBwaGxveEFwcEluZm9TZXJ2aWNlLmdldEFwcEluZm8oKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5waGxveEFwcEluZm8gPSByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgbG9hZEFjY2Vzc2libGVBcHAoKTogUHJvbWlzZTxQaGxveEFwcEluZm9bXT4ge1xuICAgIC8vICEgVE9ETzogRWRpdCB0aGlzIG9uIFBST0RVQ1RJT05cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vZm9yIGxvb3AgdmFsaWRhdGVDb25uZWN0aW9uVGltZW91dFxuICBwcml2YXRlIHZhbGlkYXRlQ29ubmVjdGlvblRpbWVvdXQoKSB7XG5cbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnVzZXJTZXNzaW9uICE9PSBudWxsICYmIHRoaXMudXNlclNlc3Npb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnVzZXJTZXNzaW9uLmNoZWNrVGltZW91dCgpLnRoZW4oXG4gICAgICAgICAgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgdGhpcy5vYnNNZ3IucHVibGlzaChVc2VyU2VydmljZS5USU1FT1VUX1RPUElDLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUNvbm5lY3Rpb25UaW1lb3V0KCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMub2JzTWdyLnB1Ymxpc2goVXNlclNlcnZpY2UuRVJST1JfVE9QSUMsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVDb25uZWN0aW9uVGltZW91dCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHRoaXMucGhsb3hBcHBJbmZvLnNldHRpbmdzLkRFRkFVTFRfVElNRV9PVVRfTE9HSU5fVVNFUl9TRVNTSU9OKTtcblxuICB9XG5cbiAgcHVibGljIGlzTG9nZ2VkT24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMudXNlclNlc3Npb24gPT09IG51bGwgfHwgdGhpcy51c2VyU2Vzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51c2VyU2Vzc2lvbi5sb2FkKCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBpZiAodGhpcy51c2VyU2Vzc2lvbi5nZXRTZXNzaW9uSWQoKSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudXNlclNlc3Npb24uZ2V0U2Vzc2lvbklkKCkgPT09IG51bGwgfHwgdGhpcy51c2VyU2Vzc2lvbi5nZXRTZXNzaW9uSWQoKSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlclNlc3Npb24uY2hlY2tUaW1lb3V0KCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dCA9PT0gbnVsbCB8fCB0aGlzLnRpbWVvdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlQ29ubmVjdGlvblRpbWVvdXQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZEFjY2Vzc2libGVBcHAoKTogUHJvbWlzZTxQaGxveEFwcEluZm9bXT4ge1xuICAgIHRoaXMuYWNjZXNzaWJsZUFwcHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWNjZXNzaWJsZUFwcCgpO1xuICB9XG5cbiAgcHVibGljIGdldEFjY2Vzc2libGVBcHAoKTogUHJvbWlzZTxQaGxveEFwcEluZm9bXT4ge1xuICAgIGlmICh0aGlzLmFjY2Vzc2libGVBcHBzICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmFjY2Vzc2libGVBcHBzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmFjY2Vzc2libGVBcHBzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHByb20gPSB0aGlzLmxvYWRBY2Nlc3NpYmxlQXBwKCk7XG4gICAgICBpZiAocHJvbSAhPT0gbnVsbCAmJiBwcm9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFjY2Vzc2libGVBcHAoKS50aGVuKChyZXN1bHQ6IFBobG94QXBwSW5mb1tdKSA9PiB7XG4gICAgICAgICAgdGhpcy5hY2Nlc3NpYmxlQXBwcyA9IHJlc3VsdDtcblxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5hY2Nlc3NpYmxlQXBwcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbG9naW4ocmVxdWVzdERhdGE6IGFueSk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICBpZiAodGhpcy51c2VyU2Vzc2lvbiA9PT0gbnVsbCB8fCB0aGlzLnVzZXJTZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChudWxsKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhdGUgPSB0aGlzLnVzZXJTZXNzaW9uLmxvZ2luKHJlcXVlc3REYXRhKTtcblxuICAgIHN0YXRlLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICBpZiAodGhpcy50aW1lb3V0ICE9PSBudWxsICYmIHRoaXMudGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG5cbiAgICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbm5lY3Rpb25UaW1lb3V0KCk7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0YXRlO1xuXG4gIH1cblxuICBwdWJsaWMgbG9nb3V0KCk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICBpZiAodGhpcy51c2VyU2Vzc2lvbiA9PT0gbnVsbCB8fCB0aGlzLnVzZXJTZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChudWxsKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhdGUgPSB0aGlzLnVzZXJTZXNzaW9uLmxvZ291dCgpO1xuXG4gICAgc3RhdGUudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVvdXQgIT09IG51bGwgJiYgdGhpcy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblxuICAgICAgICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RhdGU7XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXRPYnNlcnZhYmxlTWFuYWdlcigpOiBPYnNlcnZhYmxlTWFuYWdlciB7XG4gICAgcmV0dXJuIHRoaXMub2JzTWdyO1xuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemUoc2Vzc2lvbjogSVVzZXJTZXNzaW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGltZW91dCAhPT0gbnVsbCAmJiB0aGlzLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG5cbiAgICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyU2Vzc2lvbiA9IHNlc3Npb247XG4gIH1cblxuICBwdWJsaWMgZGVpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRpbWVvdXQgIT09IG51bGwgJiYgdGhpcy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXG4gICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMudXNlclNlc3Npb24gPSBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldFVzZXJTZXNzaW9uKCk6IElVc2VyU2Vzc2lvbiB7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlc3Npb247XG4gIH1cbn1cbiJdfQ==