UNPKG

@schoolbelle/common

Version:

Demo library to showcase Angular packaging format

265 lines (259 loc) 21.1 kB
import { Injectable, Inject, NgModule } from '@angular/core'; import { REST_SERVER_HOST } from '@schoolbelle/common/tokens'; import { HttpClient, HttpClientModule } from '@angular/common/http'; import { StorageService, StorageServiceModule } from '@schoolbelle/common/services/storage'; import 'rxjs/add/operator/toPromise'; /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ class AuthService { /** * @param {?} http * @param {?} storageService * @param {?} serverHost */ constructor(http, storageService, serverHost) { this.http = http; this.storageService = storageService; this.serverHost = serverHost; let /** @type {?} */ type = /** @type {?} */ (this.storageService.get('sbe-auth.session.type', 'session')); let /** @type {?} */ intltel = this.storageService.get('sbe-auth.session.intltel', 'session'); let /** @type {?} */ verificationCode = this.storageService.get('sbe-auth.session.verificationCode', 'session'); if (type) this.type = type; if (intltel) this.intltel = intltel; if (verificationCode) this.verificationCode = verificationCode; } /** * @return {?} */ get type() { return this._type; } /** * @param {?} v * @return {?} */ set type(v) { this._type = v; if (v) { this.storageService.set('sbe-auth.session.type', v, 'session'); } else { this.storageService.remove('sbe-auth.session.type', 'session'); } } /** * @return {?} */ get intltel() { return this._intltel; } /** * @param {?} v * @return {?} */ set intltel(v) { this._intltel = v; if (v) { this.storageService.set('sbe-auth.session.intltel', v, 'session'); } else { this.storageService.remove('sbe-auth.session.intltel', 'session'); } } /** * @return {?} */ get verificationCode() { return this._verificationCode; } /** * @param {?} v * @return {?} */ set verificationCode(v) { this._verificationCode = v; if (v) { this.storageService.set('sbe-auth.session.verificationCode', v, 'session'); } else { this.storageService.remove('sbe-auth.session.verificationCode', 'session'); } } /** * @return {?} */ clear() { this.type = undefined; this.intltel = undefined; this.verificationCode = undefined; } /** * @param {?} idtoken * @return {?} */ saveToken(idtoken) { if (idtoken) { this.storageService.set(AuthService.localStorageIdTokenKey, idtoken, 'local'); } else { this.storageService.remove(AuthService.localStorageIdTokenKey, 'local'); } } /** * @param {?=} type * @param {?=} countryDialCode * @param {?=} tel * @return {?} */ requestCode(type = 'register', countryDialCode, tel) { const /** @type {?} */ url = `${this.serverHost}/verification/request_code`; return this.http .post(url, { type: type, countryDialCode: countryDialCode, tel: tel }, { responseType: 'text' }) .toPromise(); } /** * @param {?=} type * @param {?=} countryDialCode * @param {?=} tel * @param {?=} verificationCode * @param {?=} callback_url * @return {?} */ verifyCode(type = 'register', countryDialCode, tel, verificationCode, callback_url = undefined) { const /** @type {?} */ url = `${this.serverHost}/verification/verify_code`; return this.http .post(url, { type: type, countryDialCode: countryDialCode, tel: tel, code: verificationCode, callback_url: callback_url }, { responseType: 'text' }) .toPromise() .then(token => { if (type === 'tmp' && token) { this.saveToken(token); } return token; }); } /** * @param {?} countryDialCode * @param {?} tel * @param {?} password * @param {?=} callback_url * @return {?} */ login(countryDialCode, tel, password, callback_url = undefined) { const /** @type {?} */ url = `${this.serverHost}/login`; return this.http .post(url, { countryDialCode: countryDialCode, tel: tel, password: password, callback_url: callback_url }, { responseType: 'text' }) .toPromise() .then(token => { this.saveToken(token); return token; }); } /** * @param {?} countryDialCode * @param {?} tel * @param {?} verificationCode * @param {?} name * @param {?} password * @param {?=} callback_url * @return {?} */ register(countryDialCode, tel, verificationCode, name, password, callback_url = undefined) { const /** @type {?} */ url = `${this.serverHost}/register`; return this.http .post(url, { countryDialCode: countryDialCode, tel: tel, code: verificationCode, name: name, password: password }) .toPromise() .then(() => this.login(countryDialCode, tel, password, callback_url)); } /** * @return {?} */ getTermsOfUse() { const /** @type {?} */ url = `${this.serverHost}/legal/user_agreement`; return this.http.get(url, { responseType: 'text' }).toPromise(); } /** * @return {?} */ getPrivacyPolicy() { const /** @type {?} */ url = `${this.serverHost}/legal/privacy_policy`; return this.http.get(url, { responseType: 'text' }).toPromise(); } /** * @param {?} countryDialCode * @param {?} tel * @param {?} password * @return {?} */ agreeToTerms(countryDialCode, tel, password) { const /** @type {?} */ url = `${this.serverHost}/legal/agree_to_terms`; return this.http .post(url, { countryDialCode: countryDialCode, tel: tel, password: password }) .toPromise(); } } AuthService.localStorageIdTokenKey = 'sbe-auth.idToken'; AuthService.decorators = [ { type: Injectable }, ]; /** @nocollapse */ AuthService.ctorParameters = () => [ { type: HttpClient, }, { type: StorageService, }, { type: undefined, decorators: [{ type: Inject, args: [REST_SERVER_HOST,] },] }, ]; /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ class AuthServiceModule { /** * @return {?} */ static forRoot() { return { ngModule: AuthServiceModule, providers: [AuthService] }; } } AuthServiceModule.decorators = [ { type: NgModule, args: [{ imports: [HttpClientModule, StorageServiceModule] },] }, ]; /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ export { AuthService, AuthServiceModule }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29sYmVsbGUtY29tbW9uLXNlcnZpY2VzLWF1dGguanMubWFwIiwic291cmNlcyI6WyJuZzovL0BzY2hvb2xiZWxsZS9jb21tb24vc2VydmljZXMvYXV0aC9hdXRoLnNlcnZpY2UudHMiLCJuZzovL0BzY2hvb2xiZWxsZS9jb21tb24vc2VydmljZXMvYXV0aC9hdXRoLXNlcnZpY2UubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUkVTVF9TRVJWRVJfSE9TVCB9IGZyb20gJ0BzY2hvb2xiZWxsZS9jb21tb24vdG9rZW5zJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJ0BzY2hvb2xiZWxsZS9jb21tb24vc2VydmljZXMvc3RvcmFnZSc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL3RvUHJvbWlzZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XG4gIHN0YXRpYyBsb2NhbFN0b3JhZ2VJZFRva2VuS2V5ID0gJ3NiZS1hdXRoLmlkVG9rZW4nO1xuXG4gIHByaXZhdGUgX3R5cGU6ICdyZWdpc3RlcicgfCAnZmluZHBhc3N3b3JkJyB8ICd0bXAnO1xuICBwcml2YXRlIF9pbnRsdGVsO1xuICBwcml2YXRlIF92ZXJpZmljYXRpb25Db2RlO1xuICBnZXQgdHlwZSgpOiAncmVnaXN0ZXInIHwgJ2ZpbmRwYXNzd29yZCcgfCAndG1wJyB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cbiAgc2V0IHR5cGUodjogJ3JlZ2lzdGVyJyB8ICdmaW5kcGFzc3dvcmQnIHwgJ3RtcCcpIHtcbiAgICB0aGlzLl90eXBlID0gdjtcbiAgICBpZiAodikge1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ3NiZS1hdXRoLnNlc3Npb24udHlwZScsIHYsICdzZXNzaW9uJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UucmVtb3ZlKCdzYmUtYXV0aC5zZXNzaW9uLnR5cGUnLCAnc2Vzc2lvbicpO1xuICAgIH1cbiAgfVxuICBnZXQgaW50bHRlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW50bHRlbDtcbiAgfVxuICBzZXQgaW50bHRlbCh2KSB7XG4gICAgdGhpcy5faW50bHRlbCA9IHY7XG4gICAgaWYgKHYpIHtcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KCdzYmUtYXV0aC5zZXNzaW9uLmludGx0ZWwnLCB2LCAnc2Vzc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnJlbW92ZSgnc2JlLWF1dGguc2Vzc2lvbi5pbnRsdGVsJywgJ3Nlc3Npb24nKTtcbiAgICB9XG4gIH1cbiAgZ2V0IHZlcmlmaWNhdGlvbkNvZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZlcmlmaWNhdGlvbkNvZGU7XG4gIH1cbiAgc2V0IHZlcmlmaWNhdGlvbkNvZGUodikge1xuICAgIHRoaXMuX3ZlcmlmaWNhdGlvbkNvZGUgPSB2O1xuICAgIGlmICh2KSB7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldChcbiAgICAgICAgJ3NiZS1hdXRoLnNlc3Npb24udmVyaWZpY2F0aW9uQ29kZScsXG4gICAgICAgIHYsXG4gICAgICAgICdzZXNzaW9uJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5yZW1vdmUoXG4gICAgICAgICdzYmUtYXV0aC5zZXNzaW9uLnZlcmlmaWNhdGlvbkNvZGUnLFxuICAgICAgICAnc2Vzc2lvbidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy50eXBlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaW50bHRlbCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnZlcmlmaWNhdGlvbkNvZGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHVibGljIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcbiAgICBASW5qZWN0KFJFU1RfU0VSVkVSX0hPU1QpIHByaXZhdGUgc2VydmVySG9zdDogc3RyaW5nXG4gICkge1xuICAgIGxldCB0eXBlID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ3NiZS1hdXRoLnNlc3Npb24udHlwZScsICdzZXNzaW9uJykgYXNcbiAgICAgIHwgJ3JlZ2lzdGVyJ1xuICAgICAgfCAnZmluZHBhc3N3b3JkJ1xuICAgICAgfCAndG1wJztcbiAgICBsZXQgaW50bHRlbCA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KFxuICAgICAgJ3NiZS1hdXRoLnNlc3Npb24uaW50bHRlbCcsXG4gICAgICAnc2Vzc2lvbidcbiAgICApO1xuICAgIGxldCB2ZXJpZmljYXRpb25Db2RlID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoXG4gICAgICAnc2JlLWF1dGguc2Vzc2lvbi52ZXJpZmljYXRpb25Db2RlJyxcbiAgICAgICdzZXNzaW9uJ1xuICAgICk7XG4gICAgaWYgKHR5cGUpIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgaWYgKGludGx0ZWwpIHRoaXMuaW50bHRlbCA9IGludGx0ZWw7XG4gICAgaWYgKHZlcmlmaWNhdGlvbkNvZGUpIHRoaXMudmVyaWZpY2F0aW9uQ29kZSA9IHZlcmlmaWNhdGlvbkNvZGU7XG4gIH1cblxuICBwcml2YXRlIHNhdmVUb2tlbihpZHRva2VuKSB7XG4gICAgaWYgKGlkdG9rZW4pIHtcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFxuICAgICAgICBBdXRoU2VydmljZS5sb2NhbFN0b3JhZ2VJZFRva2VuS2V5LFxuICAgICAgICBpZHRva2VuLFxuICAgICAgICAnbG9jYWwnXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnJlbW92ZShBdXRoU2VydmljZS5sb2NhbFN0b3JhZ2VJZFRva2VuS2V5LCAnbG9jYWwnKTtcbiAgICB9XG4gIH1cbiAgcmVxdWVzdENvZGUoXG4gICAgdHlwZTogJ3JlZ2lzdGVyJyB8ICdmaW5kcGFzc3dvcmQnIHwgJ3RtcCcgPSAncmVnaXN0ZXInLFxuICAgIGNvdW50cnlEaWFsQ29kZSxcbiAgICB0ZWw6IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZlckhvc3R9L3ZlcmlmaWNhdGlvbi9yZXF1ZXN0X2NvZGVgO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KFxuICAgICAgICB1cmwsXG4gICAgICAgIHsgdHlwZTogdHlwZSwgY291bnRyeURpYWxDb2RlOiBjb3VudHJ5RGlhbENvZGUsIHRlbDogdGVsIH0sXG4gICAgICAgIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfVxuICAgICAgKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG4gIHZlcmlmeUNvZGUoXG4gICAgdHlwZTogJ3JlZ2lzdGVyJyB8ICdmaW5kcGFzc3dvcmQnIHwgJ3RtcCcgPSAncmVnaXN0ZXInLFxuICAgIGNvdW50cnlEaWFsQ29kZSxcbiAgICB0ZWw6IHN0cmluZyxcbiAgICB2ZXJpZmljYXRpb25Db2RlOiBzdHJpbmcsXG4gICAgY2FsbGJhY2tfdXJsOiBzdHJpbmcgPSB1bmRlZmluZWRcbiAgKSB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2ZXJIb3N0fS92ZXJpZmljYXRpb24vdmVyaWZ5X2NvZGVgO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KFxuICAgICAgICB1cmwsXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIGNvdW50cnlEaWFsQ29kZTogY291bnRyeURpYWxDb2RlLFxuICAgICAgICAgIHRlbDogdGVsLFxuICAgICAgICAgIGNvZGU6IHZlcmlmaWNhdGlvbkNvZGUsXG4gICAgICAgICAgY2FsbGJhY2tfdXJsOiBjYWxsYmFja191cmxcbiAgICAgICAgfSxcbiAgICAgICAgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9XG4gICAgICApXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKHRva2VuID0+IHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICd0bXAnICYmIHRva2VuKSB7XG4gICAgICAgICAgdGhpcy5zYXZlVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH0pO1xuICB9XG4gIGxvZ2luKFxuICAgIGNvdW50cnlEaWFsQ29kZSxcbiAgICB0ZWwsXG4gICAgcGFzc3dvcmQsXG4gICAgY2FsbGJhY2tfdXJsOiBzdHJpbmcgPSB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZlckhvc3R9L2xvZ2luYDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdChcbiAgICAgICAgdXJsLFxuICAgICAgICB7XG4gICAgICAgICAgY291bnRyeURpYWxDb2RlOiBjb3VudHJ5RGlhbENvZGUsXG4gICAgICAgICAgdGVsOiB0ZWwsXG4gICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxuICAgICAgICAgIGNhbGxiYWNrX3VybDogY2FsbGJhY2tfdXJsXG4gICAgICAgIH0sXG4gICAgICAgIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfVxuICAgICAgKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbih0b2tlbiA9PiB7XG4gICAgICAgIHRoaXMuc2F2ZVRva2VuKHRva2VuKTtcbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfSk7XG4gIH1cbiAgcmVnaXN0ZXIoXG4gICAgY291bnRyeURpYWxDb2RlLFxuICAgIHRlbCxcbiAgICB2ZXJpZmljYXRpb25Db2RlLFxuICAgIG5hbWUsXG4gICAgcGFzc3dvcmQsXG4gICAgY2FsbGJhY2tfdXJsOiBzdHJpbmcgPSB1bmRlZmluZWRcbiAgKSB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2ZXJIb3N0fS9yZWdpc3RlcmA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodXJsLCB7XG4gICAgICAgIGNvdW50cnlEaWFsQ29kZTogY291bnRyeURpYWxDb2RlLFxuICAgICAgICB0ZWw6IHRlbCxcbiAgICAgICAgY29kZTogdmVyaWZpY2F0aW9uQ29kZSxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkXG4gICAgICB9KVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmxvZ2luKGNvdW50cnlEaWFsQ29kZSwgdGVsLCBwYXNzd29yZCwgY2FsbGJhY2tfdXJsKSk7XG4gIH1cblxuICBnZXRUZXJtc09mVXNlKCkge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmVySG9zdH0vbGVnYWwvdXNlcl9hZ3JlZW1lbnRgO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KS50b1Byb21pc2UoKTtcbiAgfVxuICBnZXRQcml2YWN5UG9saWN5KCkge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmVySG9zdH0vbGVnYWwvcHJpdmFjeV9wb2xpY3lgO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KS50b1Byb21pc2UoKTtcbiAgfVxuICBhZ3JlZVRvVGVybXMoY291bnRyeURpYWxDb2RlLCB0ZWwsIHBhc3N3b3JkKSB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2ZXJIb3N0fS9sZWdhbC9hZ3JlZV90b190ZXJtc2A7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodXJsLCB7XG4gICAgICAgIGNvdW50cnlEaWFsQ29kZTogY291bnRyeURpYWxDb2RlLFxuICAgICAgICB0ZWw6IHRlbCxcbiAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkXG4gICAgICB9KVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VNb2R1bGUgfSBmcm9tICdAc2Nob29sYmVsbGUvY29tbW9uL3NlcnZpY2VzL3N0b3JhZ2UnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbSHR0cENsaWVudE1vZHVsZSwgU3RvcmFnZVNlcnZpY2VNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBBdXRoU2VydmljZU1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW0F1dGhTZXJ2aWNlXVxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7Ozs7OztJQTJERSxZQUNTLE1BQ0EsZ0JBQzJCO1FBRjNCLFNBQUksR0FBSixJQUFJO1FBQ0osbUJBQWMsR0FBZCxjQUFjO1FBQ2EsZUFBVSxHQUFWLFVBQVU7UUFFNUMscUJBQUksSUFBSSxxQkFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxTQUFTLENBRzVELENBQUEsQ0FBQztRQUNWLHFCQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDbkMsMEJBQTBCLEVBQzFCLFNBQVMsQ0FDVixDQUFDO1FBQ0YscUJBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQzVDLG1DQUFtQyxFQUNu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