UNPKG

@hpe/angular-toolkit

Version:

Hewlett-Packard Enterprise : Angular toolkit for rapid project development

158 lines (157 loc) 16.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 { 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"; export class SessionService extends AbstractSubscriber { /** * @param {?} eventBusService * @param {?} httpService */ constructor(eventBusService, httpService) { super(eventBusService); this.httpService = httpService; this.clearSession(); super.subscribeToApp(AppEvent.INVALID_TOKEN, event => this.onInvalidToken(event)); } /** * @param {?} cred * @return {?} */ login(cred) { console.log("SessionService.login : Logging in user='" + cred.username + "'"); //--- Loads user profile from server this.httpService.postObject("/api/session/login", cred) .subscribe(result => this.loginSuccess(result), error => this.loginError(error)); } /** * @return {?} */ logout() { console.log("SessionService.logout : Logging out user='" + (this.user || "???") + "'"); this.httpService.postObject("/api/session/logout", { token: this.token }) .subscribe(result => this.logoutSuccess(), error => this.logoutError(error)); } /** * @return {?} */ clearSession() { console.log("SessionService.clearSession: Resetting session..."); this.session = null; this.token = null; this.user = null; this.profile = null; this.permissions = new Map(); } /** * @return {?} */ get homePage() { return (this.profile) ? this.profile.homePage : null; } /** * @param {?} name * @return {?} */ hasPermission(name) { return (this.permissions.get(name)); } /** * @param {?} session * @return {?} */ loginSuccess(session) { this.session = session; this.token = session.token; this.user = session.user; this.profile = session.profile; this.permissions = this.setupPermissionMap(this.profile.permissions); super.emitToApp(new AppEvent(AppEvent.LOGIN_SUCCESS, session)); console.log("Login successful for user=" + this.user.username); } /** * @param {?} response * @return {?} */ loginError(response) { super.emitToApp(new AppEvent(AppEvent.LOGIN_FAILED, response)); } /** * @return {?} */ logoutSuccess() { let /** @type {?} */ username = this.user.username; this.clearSession(); super.emitToApp(new AppEvent(AppEvent.LOGOUT_SUCCESS, username)); console.log("Logout successful for user=" + username); } /** * @param {?} response * @return {?} */ logoutError(response) { this.clearSession(); super.emitToApp(new AppEvent(AppEvent.LOGOUT_FAILED)); } /** * @param {?} permissions * @return {?} */ setupPermissionMap(permissions) { let /** @type {?} */ map = new Map(); permissions.forEach((p) => map.set(p, true)); return map; } /** * @param {?} event * @return {?} */ onInvalidToken(event) { this.clearSession(); } } SessionService.decorators = [ { type: Injectable }, ]; /** @nocollapse */ SessionService.ctorParameters = () => [ { type: EventBusService, }, { type: HttpService, }, ]; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhwZS9hbmd1bGFyLXRvb2xraXQvc2VydmljZS8iLCJzb3VyY2VzIjpbInNlc3Npb24tc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFTQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBZ0IsNEJBQTRCLENBQUM7QUFNOUQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFTLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBYSxnQkFBZ0IsQ0FBQztBQU1sRCxNQUFNLHFCQUFzQixTQUFRLGtCQUFrQjs7Ozs7SUFvQnJELFlBQVksZUFBZ0MsRUFBVSxXQUF5QjtRQUU5RSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFGOEIsZ0JBQVcsR0FBWCxXQUFXLENBQWM7UUFHOUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLEtBQUssQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUNsRjs7Ozs7SUFRTSxLQUFLLENBQUMsSUFBa0I7UUFFOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDOztRQUk5RSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUM7YUFDckQsU0FBUyxDQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFDNUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFB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QUFDLE9BQU8sQ0FBQyxDQUFDLENBQVUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV0RCxNQUFNLENBQUMsR0FBRyxDQUFDOzs7Ozs7SUFTSixjQUFjLENBQUMsS0FBZ0I7UUFDdEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDOzs7O1lBcEpyQixVQUFVOzs7O1lBTkgsZUFBZTtZQUNmLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PVxuLy89PT0gKEMpIENvcHlyaWdodCAyMDE4IEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQLlxuLy89PT1cbi8vPT09IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4vLz09PSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlXG4vLz09PVxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0FwcEV2ZW50fSAgICAgICAgICAgZnJvbSBcIkBocGUvYW5ndWxhci10b29sa2l0L21vZGVsXCI7XG5pbXBvcnQge0NyZWRlbnRpYWxzfSAgICAgICAgZnJvbSBcIkBocGUvYW5ndWxhci10b29sa2l0L21vZGVsXCI7XG5pbXBvcnQge1Byb2ZpbGV9ICAgICAgICAgICAgZnJvbSBcIkBocGUvYW5ndWxhci10b29sa2l0L21vZGVsXCI7XG5pbXBvcnQge1Nlc3Npb259ICAgICAgICAgICAgZnJvbSBcIkBocGUvYW5ndWxhci10b29sa2l0L21vZGVsXCI7XG5pbXBvcnQge1Nlc3Npb25Vc2VyfSAgICAgICAgZnJvbSBcIkBocGUvYW5ndWxhci10b29sa2l0L21vZGVsXCI7XG5cbmltcG9ydCB7QWJzdHJhY3RTdWJzY3JpYmVyfSBmcm9tIFwiLi9hYnN0cmFjdC1zdWJzY3JpYmVyXCI7XG5pbXBvcnQge0V2ZW50QnVzU2VydmljZX0gICAgZnJvbSBcIi4vZXZlbnRidXMtc2VydmljZVwiO1xuaW1wb3J0IHtIdHRwU2VydmljZX0gICAgICAgIGZyb20gXCIuL2h0dHAtc2VydmljZVwiO1xuXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlc3Npb25TZXJ2aWNlIGV4dGVuZHMgQWJzdHJhY3RTdWJzY3JpYmVyIHtcblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8tLS1cblx0Ly8tLS0gVmFyaWFibGVzXG5cdC8vLS0tXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHB1YmxpYyBzZXNzaW9uICAgICA6IFNlc3Npb247XG5cdHB1YmxpYyB0b2tlbiAgICAgICA6IHN0cmluZztcblx0cHVibGljIHVzZXIgICAgICAgIDogU2Vzc2lvblVzZXI7XG5cdHB1YmxpYyBwcm9maWxlICAgICA6IFByb2ZpbGU7XG5cdHB1YmxpYyBwZXJtaXNzaW9ucyA6IE1hcDxzdHJpbmcsIGJvb2xlYW4+O1xuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLy0tLVxuXHQvLy0tLSBDb25zdHJ1Y3RvclxuXHQvLy0tLVxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRjb25zdHJ1Y3RvcihldmVudEJ1c1NlcnZpY2U6IEV2ZW50QnVzU2VydmljZSwgcHJpdmF0ZSBodHRwU2VydmljZSA6IEh0dHBTZXJ2aWNlKSB7XG5cblx0XHRzdXBlcihldmVudEJ1c1NlcnZpY2UpO1xuXHRcdHRoaXMuY2xlYXJTZXNzaW9uKCk7XG5cblx0XHRzdXBlci5zdWJzY3JpYmVUb0FwcChBcHBFdmVudC5JTlZBTElEX1RPS0VOLCBldmVudCA9PiB0aGlzLm9uSW52YWxpZFRva2VuKGV2ZW50KSk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8tLS1cblx0Ly8tLS0gQVBJIG1ldGhvZHNcblx0Ly8tLS1cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHVibGljIGxvZ2luKGNyZWQgOiBDcmVkZW50aWFscykgOiB2b2lkIHtcblxuXHRcdGNvbnNvbGUubG9nKFwiU2Vzc2lvblNlcnZpY2UubG9naW4gOiBMb2dnaW5nIGluIHVzZXI9J1wiICsgY3JlZC51c2VybmFtZSArIFwiJ1wiKTtcblxuXHRcdC8vLS0tIExvYWRzIHVzZXIgcHJvZmlsZSBmcm9tIHNlcnZlclxuXG5cdFx0dGhpcy5odHRwU2VydmljZS5wb3N0T2JqZWN0KFwiL2FwaS9zZXNzaW9uL2xvZ2luXCIsIGNyZWQpXG5cdFx0XHQuc3Vic2NyaWJlKFx0cmVzdWx0ID0+IHRoaXMubG9naW5TdWNjZXNzKHJlc3VsdCksXG5cdFx0XHRcdFx0XHRlcnJvciA9PiB0aGlzLmxvZ2luRXJyb3IoZXJyb3IpKTtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHB1YmxpYyBsb2dvdXQoKSA6IHZvaWQge1xuXG5cdFx0Y29uc29sZS5sb2coXCJTZXNzaW9uU2VydmljZS5sb2dvdXQgOiBMb2dnaW5nIG91dCB1c2VyPSdcIiArICh0aGlzLnVzZXIgfHwgXCI/Pz9cIikgKyBcIidcIik7XG5cblx0XHR0aGlzLmh0dHBTZXJ2aWNlLnBvc3RPYmplY3QoXCIvYXBpL3Nlc3Npb24vbG9nb3V0XCIsIHsgdG9rZW46IHRoaXMudG9rZW4gfSlcblx0XHRcdC5zdWJzY3JpYmUoXHRyZXN1bHQgPT4gdGhpcy5sb2dvdXRTdWNjZXNzKCksXG5cdFx0XHRcdFx0XHRlcnJvciA9PiB0aGlzLmxvZ291dEVycm9yKGVycm9yKSk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwdWJsaWMgY2xlYXJTZXNzaW9uKCkgOiB2b2lkIHtcblxuXHRcdGNvbnNvbGUubG9nKFwiU2Vzc2lvblNlcnZpY2UuY2xlYXJTZXNzaW9uOiBSZXNldHRpbmcgc2Vzc2lvbi4uLlwiKTtcblxuXHRcdHRoaXMuc2Vzc2lvbiAgICAgPSBudWxsO1xuXHRcdHRoaXMudG9rZW4gICAgICAgPSBudWxsO1xuXHRcdHRoaXMudXNlciAgICAgICAgPSBudWxsO1xuXHRcdHRoaXMucHJvZmlsZSAgICAgPSBudWxsO1xuXHRcdHRoaXMucGVybWlzc2lvbnMgPSBuZXcgTWFwKCk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwdWJsaWMgZ2V0IGhvbWVQYWdlKCkgOiBzdHJpbmcge1xuXG5cdFx0cmV0dXJuICh0aGlzLnByb2ZpbGUpXG5cdFx0XHRcdFx0PyB0aGlzLnByb2ZpbGUuaG9tZVBhZ2Vcblx0XHRcdFx0XHQ6IG51bGw7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwdWJsaWMgaGFzUGVybWlzc2lvbihuYW1lIDogc3RyaW5nKSA6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5wZXJtaXNzaW9ucy5nZXQobmFtZSkpO1xuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vLS0tXG5cdC8vLS0tIFByaXZhdGUgbWV0aG9kc1xuXHQvLy0tLVxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcml2YXRlIGxvZ2luU3VjY2VzcyhzZXNzaW9uOiBTZXNzaW9uKTogdm9pZCB7XG5cblx0XHR0aGlzLnNlc3Npb24gICAgID0gc2Vzc2lvbjtcblx0XHR0aGlzLnRva2VuICAgICAgID0gc2Vzc2lvbi50b2tlbjtcblx0XHR0aGlzLnVzZXIgICAgICAgID0gc2Vzc2lvbi51c2VyO1xuXHRcdHRoaXMucHJvZmlsZSAgICAgPSBzZXNzaW9uLnByb2ZpbGU7XG5cdFx0dGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMuc2V0dXBQZXJtaXNzaW9uTWFwKHRoaXMucHJvZmlsZS5wZXJtaXNzaW9ucyk7XG5cblx0XHRzdXBlci5lbWl0VG9BcHAobmV3IEFwcEV2ZW50KEFwcEV2ZW50LkxPR0lOX1NVQ0NFU1MsIHNlc3Npb24pKTtcblxuXHRcdGNvbnNvbGUubG9nKFwiTG9naW4gc3VjY2Vzc2Z1bCBmb3IgdXNlcj1cIisgdGhpcy51c2VyLnVzZXJuYW1lKTtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHByaXZhdGUgbG9naW5FcnJvcihyZXNwb25zZTogYW55KSB7XG5cdFx0c3VwZXIuZW1pdFRvQXBwKG5ldyBBcHBFdmVudChBcHBFdmVudC5MT0dJTl9GQUlMRUQsIHJlc3BvbnNlKSk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcml2YXRlIGxvZ291dFN1Y2Nlc3MoKTogdm9pZCB7XG5cblx0XHRsZXQgdXNlcm5hbWUgPSB0aGlzLnVzZXIudXNlcm5hbWU7XG5cblx0XHR0aGlzLmNsZWFyU2Vzc2lvbigpO1xuXHRcdHN1cGVyLmVtaXRUb0FwcChuZXcgQXBwRXZlbnQoQXBwRXZlbnQuTE9HT1VUX1NVQ0NFU1MsIHVzZXJuYW1lKSk7XG5cblx0XHRjb25zb2xlLmxvZyhcIkxvZ291dCBzdWNjZXNzZnVsIGZvciB1c2VyPVwiKyB1c2VybmFtZSk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcml2YXRlIGxvZ291dEVycm9yKHJlc3BvbnNlOiBhbnkpOiB2b2lkIHtcblxuXHRcdHRoaXMuY2xlYXJTZXNzaW9uKCk7XG5cdFx0c3VwZXIuZW1pdFRvQXBwKG5ldyBBcHBFdmVudChBcHBFdmVudC5MT0dPVVRfRkFJTEVEKSk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcml2YXRlIHNldHVwUGVybWlzc2lvbk1hcChwZXJtaXNzaW9ucyA6IHN0cmluZ1tdKSA6IE1hcDxzdHJpbmcsIGJvb2xlYW4+IHtcblxuXHRcdGxldCBtYXAgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcblxuXHRcdHBlcm1pc3Npb25zLmZvckVhY2goKHAgOiBzdHJpbmcpID0+IG1hcC5zZXQocCwgdHJ1ZSkpO1xuXG5cdFx0cmV0dXJuIG1hcDtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLy0tLVxuXHQvLy0tLSBFdmVudHNcblx0Ly8tLS1cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHJpdmF0ZSBvbkludmFsaWRUb2tlbihldmVudCA6IEFwcEV2ZW50KSB7XG5cdFx0dGhpcy5jbGVhclNlc3Npb24oKTtcblx0fVxufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iXX0=