ngx-histaff-alpha 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/esm2022/lib/app/http-interceptors/auth-interceptor.mjs +10 -6
  2. package/esm2022/lib/app/http-interceptors/base-url-interceptor.mjs +14 -5
  3. package/esm2022/lib/app/http-interceptors/token-interceptor.mjs +22 -20
  4. package/esm2022/lib/app/interfaces/IStatisticAuthData.mjs +2 -0
  5. package/esm2022/lib/app/interfaces/IStatisticSysUser.mjs +2 -0
  6. package/esm2022/lib/app/libraries/d3/core-statistic-widget/core-statistic-widget.component.mjs +135 -22
  7. package/esm2022/lib/app/services/app-config.service.mjs +1 -1
  8. package/esm2022/lib/app/services/app-initialization.service.mjs +3 -2
  9. package/esm2022/lib/app/services/common-http-request.service.mjs +19 -1
  10. package/esm2022/lib/app/services/statistic-auth.service.mjs +49 -0
  11. package/esm2022/lib/app/services/statistic.service.mjs +24 -0
  12. package/esm2022/public-api.mjs +5 -1
  13. package/fesm2022/ngx-histaff-alpha.mjs +258 -49
  14. package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
  15. package/lib/app/http-interceptors/auth-interceptor.d.ts +4 -2
  16. package/lib/app/http-interceptors/base-url-interceptor.d.ts +1 -0
  17. package/lib/app/http-interceptors/token-interceptor.d.ts +4 -2
  18. package/lib/app/interfaces/IStatisticAuthData.d.ts +9 -0
  19. package/lib/app/interfaces/IStatisticSysUser.d.ts +15 -0
  20. package/lib/app/libraries/d3/core-statistic-widget/core-statistic-widget.component.d.ts +5 -2
  21. package/lib/app/services/app-config.service.d.ts +1 -1
  22. package/lib/app/services/common-http-request.service.d.ts +2 -0
  23. package/lib/app/services/statistic-auth.service.d.ts +21 -0
  24. package/lib/app/services/statistic.service.d.ts +11 -0
  25. package/package.json +1 -1
  26. package/public-api.d.ts +4 -0
@@ -1,13 +1,17 @@
1
1
  import { Injectable } from '@angular/core';
2
+ import { InterceptorStatisticHeader } from './base-url-interceptor';
2
3
  import * as i0 from "@angular/core";
3
4
  import * as i1 from "../services/auth.service";
5
+ import * as i2 from "../services/statistic-auth.service";
4
6
  export class AuthInterceptor {
5
- constructor(auth) {
6
- this.auth = auth;
7
+ constructor(authService, statisticAuthService) {
8
+ this.authService = authService;
9
+ this.statisticAuthService = statisticAuthService;
7
10
  }
8
11
  intercept(req, next) {
12
+ const isStatistic = req.headers.has(InterceptorStatisticHeader);
9
13
  // Get the auth token from the service.
10
- const authToken = this.auth.getAuthorizationToken();
14
+ const authToken = isStatistic ? this.statisticAuthService.getAuthorizationToken() : this.authService.getAuthorizationToken();
11
15
  if (authToken === undefined) {
12
16
  return next.handle(req);
13
17
  }
@@ -19,7 +23,7 @@ export class AuthInterceptor {
19
23
  // send cloned request with header to the next handler.
20
24
  return next.handle(authReq);
21
25
  }
22
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: AuthInterceptor, deps: [{ token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: AuthInterceptor, deps: [{ token: i1.AuthService }, { token: i2.StatisticAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
23
27
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: AuthInterceptor, providedIn: 'root' }); }
24
28
  }
25
29
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: AuthInterceptor, decorators: [{
@@ -27,5 +31,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
27
31
  args: [{
28
32
  providedIn: 'root'
29
33
  }]
30
- }], ctorParameters: () => [{ type: i1.AuthService }] });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2h0dHAtaW50ZXJjZXB0b3JzL2F1dGgtaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBVTNDLE1BQU0sT0FBTyxlQUFlO0lBRXhCLFlBQW9CLElBQWlCO1FBQWpCLFNBQUksR0FBSixJQUFJLENBQWE7SUFBSSxDQUFDO0lBRTFDLFNBQVMsQ0FBQyxHQUFxQixFQUFFLElBQWlCO1FBRTlDLHVDQUF1QztRQUN2QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFcEQsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQjtRQUVELDBEQUEwRDtRQUMxRCxrREFBa0Q7UUFDbEQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUN0QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFNBQVMsR0FBRyxTQUFTLENBQUM7U0FDbkUsQ0FBQyxDQUFDO1FBRUgsdURBQXVEO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDOzhHQXJCUSxlQUFlO2tIQUFmLGVBQWUsY0FGWixNQUFNOzsyRkFFVCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIEh0dHBJbnRlcmNlcHRvciwgSHR0cEhhbmRsZXIsIEh0dHBSZXF1ZXN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aDogQXV0aFNlcnZpY2UpIHsgfVxyXG5cclxuICAgIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XHJcblxyXG4gICAgICAgIC8vIEdldCB0aGUgYXV0aCB0b2tlbiBmcm9tIHRoZSBzZXJ2aWNlLlxyXG4gICAgICAgIGNvbnN0IGF1dGhUb2tlbiA9IHRoaXMuYXV0aC5nZXRBdXRob3JpemF0aW9uVG9rZW4oKTtcclxuXHJcbiAgICAgICAgaWYgKGF1dGhUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2xvbmUgdGhlIHJlcXVlc3QgYW5kIHJlcGxhY2UgdGhlIG9yaWdpbmFsIGhlYWRlcnMgd2l0aFxyXG4gICAgICAgIC8vIGNsb25lZCBoZWFkZXJzLCB1cGRhdGVkIHdpdGggdGhlIGF1dGhvcml6YXRpb24uXHJcbiAgICAgICAgY29uc3QgYXV0aFJlcSA9IHJlcS5jbG9uZSh7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGF1dGhUb2tlbilcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gc2VuZCBjbG9uZWQgcmVxdWVzdCB3aXRoIGhlYWRlciB0byB0aGUgbmV4dCBoYW5kbGVyLlxyXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShhdXRoUmVxKTtcclxuICAgIH1cclxufSJdfQ==
34
+ }], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.StatisticAuthService }] });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2h0dHAtaW50ZXJjZXB0b3JzL2F1dGgtaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0zQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQU1wRSxNQUFNLE9BQU8sZUFBZTtJQUV4QixZQUNZLFdBQXdCLEVBQ3hCLG9CQUEwQztRQUQxQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO0lBQ2xELENBQUM7SUFFTCxTQUFTLENBQUMsR0FBcUIsRUFBRSxJQUFpQjtRQUU5QyxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRWhFLHVDQUF1QztRQUN2QyxNQUFNLFNBQVMsR0FBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFOUgsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQjtRQUVELDBEQUEwRDtRQUMxRCxrREFBa0Q7UUFDbEQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUN0QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFNBQVMsR0FBRyxTQUFTLENBQUM7U0FDbkUsQ0FBQyxDQUFDO1FBRUgsdURBQXVEO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDOzhHQTFCUSxlQUFlO2tIQUFmLGVBQWUsY0FGWixNQUFNOzsyRkFFVCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIEh0dHBJbnRlcmNlcHRvciwgSHR0cEhhbmRsZXIsIEh0dHBSZXF1ZXN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbnRlcmNlcHRvclN0YXRpc3RpY0hlYWRlciB9IGZyb20gJy4vYmFzZS11cmwtaW50ZXJjZXB0b3InO1xyXG5pbXBvcnQgeyBTdGF0aXN0aWNBdXRoU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRpc3RpYy1hdXRoLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc3RhdGlzdGljQXV0aFNlcnZpY2U6IFN0YXRpc3RpY0F1dGhTZXJ2aWNlXHJcbiAgICApIHsgfVxyXG5cclxuICAgIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzU3RhdGlzdGljID0gcmVxLmhlYWRlcnMuaGFzKEludGVyY2VwdG9yU3RhdGlzdGljSGVhZGVyKTtcclxuXHJcbiAgICAgICAgLy8gR2V0IHRoZSBhdXRoIHRva2VuIGZyb20gdGhlIHNlcnZpY2UuXHJcbiAgICAgICAgY29uc3QgYXV0aFRva2VuID0gIGlzU3RhdGlzdGljID8gdGhpcy5zdGF0aXN0aWNBdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKSA6IHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCk7XHJcblxyXG4gICAgICAgIGlmIChhdXRoVG9rZW4gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENsb25lIHRoZSByZXF1ZXN0IGFuZCByZXBsYWNlIHRoZSBvcmlnaW5hbCBoZWFkZXJzIHdpdGhcclxuICAgICAgICAvLyBjbG9uZWQgaGVhZGVycywgdXBkYXRlZCB3aXRoIHRoZSBhdXRob3JpemF0aW9uLlxyXG4gICAgICAgIGNvbnN0IGF1dGhSZXEgPSByZXEuY2xvbmUoe1xyXG4gICAgICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBhdXRoVG9rZW4pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIHNlbmQgY2xvbmVkIHJlcXVlc3Qgd2l0aCBoZWFkZXIgdG8gdGhlIG5leHQgaGFuZGxlci5cclxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUoYXV0aFJlcSk7XHJcbiAgICB9XHJcbn0iXX0=
@@ -2,6 +2,7 @@ import { Injectable } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "../services/app-config.service";
4
4
  export const InterceptorSkipHeader = 'X-Skip-Interceptor';
5
+ export const InterceptorStatisticHeader = 'X-Statistic-Interceptor';
5
6
  export class BaseUrlInterceptor {
6
7
  constructor(appConfigService) {
7
8
  this.appConfigService = appConfigService;
@@ -14,10 +15,18 @@ export class BaseUrlInterceptor {
14
15
  if (!this.appConfigService.BASE_URL) {
15
16
  console.error("THE APP LAYPOUT had started rendering before appConfigService.BASE_URL reachs a truely value. Please check AppInitializationService initializing$.next method carefully!!!");
16
17
  }
17
- const addBaseUrlReq = req.clone({
18
- url: this.appConfigService.BASE_URL + req.url
19
- });
20
- return next.handle(addBaseUrlReq);
18
+ if (req.headers.has(InterceptorStatisticHeader)) {
19
+ const addBaseUrlReq = req.clone({
20
+ url: this.appConfigService.BASE_URL_FOR_STATISTIC + req.url
21
+ });
22
+ return next.handle(addBaseUrlReq);
23
+ }
24
+ else {
25
+ const addBaseUrlReq = req.clone({
26
+ url: this.appConfigService.BASE_URL + req.url
27
+ });
28
+ return next.handle(addBaseUrlReq);
29
+ }
21
30
  }
22
31
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: BaseUrlInterceptor, deps: [{ token: i1.AppConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
23
32
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: BaseUrlInterceptor, providedIn: 'root' }); }
@@ -28,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
28
37
  providedIn: 'root'
29
38
  }]
30
39
  }], ctorParameters: () => [{ type: i1.AppConfigService }] });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS11cmwtaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9odHRwLWludGVyY2VwdG9ycy9iYXNlLXVybC1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPM0MsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsb0JBQW9CLENBQUM7QUFLMUQsTUFBTSxPQUFPLGtCQUFrQjtJQUUzQixZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUFJLENBQUM7SUFFM0QsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFFOUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQ3hDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDMUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtZQUNqQyxPQUFPLENBQUMsS0FBSyxDQUFDLDRLQUE0SyxDQUFDLENBQUE7U0FDOUw7UUFFRCxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQzVCLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHO1NBQ2hELENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0QyxDQUFDOzhHQXBCUSxrQkFBa0I7a0hBQWxCLGtCQUFrQixjQUZmLE1BQU07OzJGQUVULGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgICBIdHRwSW50ZXJjZXB0b3IsIEh0dHBIYW5kbGVyLCBIdHRwUmVxdWVzdFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuXHJcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEludGVyY2VwdG9yU2tpcEhlYWRlciA9ICdYLVNraXAtSW50ZXJjZXB0b3InO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXNlVXJsSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSkgeyB9XHJcblxyXG4gICAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcclxuXHJcbiAgICAgICAgaWYgKHJlcS5oZWFkZXJzLmhhcyhJbnRlcmNlcHRvclNraXBIZWFkZXIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSByZXEuaGVhZGVycy5kZWxldGUoSW50ZXJjZXB0b3JTa2lwSGVhZGVyKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcS5jbG9uZSh7IGhlYWRlcnMgfSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmFwcENvbmZpZ1NlcnZpY2UuQkFTRV9VUkwpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRIRSBBUFAgTEFZUE9VVCBoYWQgc3RhcnRlZCByZW5kZXJpbmcgYmVmb3JlIGFwcENvbmZpZ1NlcnZpY2UuQkFTRV9VUkwgcmVhY2hzIGEgdHJ1ZWx5IHZhbHVlLiBQbGVhc2UgY2hlY2sgQXBwSW5pdGlhbGl6YXRpb25TZXJ2aWNlIGluaXRpYWxpemluZyQubmV4dCBtZXRob2QgY2FyZWZ1bGx5ISEhXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhZGRCYXNlVXJsUmVxID0gcmVxLmNsb25lKHtcclxuICAgICAgICAgICAgdXJsOiB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuQkFTRV9VUkwgKyByZXEudXJsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShhZGRCYXNlVXJsUmVxKTtcclxuICAgIH1cclxufSJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS11cmwtaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9odHRwLWludGVyY2VwdG9ycy9iYXNlLXVybC1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPM0MsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsb0JBQW9CLENBQUM7QUFDMUQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcseUJBQXlCLENBQUM7QUFLcEUsTUFBTSxPQUFPLGtCQUFrQjtJQUUzQixZQUNZLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO0lBRTFDLENBQUM7SUFFTCxTQUFTLENBQUMsR0FBcUIsRUFBRSxJQUFpQjtRQUU5QyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLEVBQUU7WUFDeEMsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUMxRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM5QztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFO1lBQ2pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEtBQTRLLENBQUMsQ0FBQTtTQUM5TDtRQUVELElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsRUFBRTtZQUM3QyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUM1QixHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixHQUFHLEdBQUcsQ0FBQyxHQUFHO2FBQzlELENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNyQzthQUFNO1lBQ0gsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDNUIsR0FBRyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUc7YUFDaEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3JDO0lBQ0wsQ0FBQzs4R0E3QlEsa0JBQWtCO2tIQUFsQixrQkFBa0IsY0FGZixNQUFNOzsyRkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gICAgSHR0cEludGVyY2VwdG9yLCBIdHRwSGFuZGxlciwgSHR0cFJlcXVlc3RcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBJbnRlcmNlcHRvclNraXBIZWFkZXIgPSAnWC1Ta2lwLUludGVyY2VwdG9yJztcclxuZXhwb3J0IGNvbnN0IEludGVyY2VwdG9yU3RhdGlzdGljSGVhZGVyID0gJ1gtU3RhdGlzdGljLUludGVyY2VwdG9yJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZVVybEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsXHJcblxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xyXG5cclxuICAgICAgICBpZiAocmVxLmhlYWRlcnMuaGFzKEludGVyY2VwdG9yU2tpcEhlYWRlcikpIHtcclxuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHJlcS5oZWFkZXJzLmRlbGV0ZShJbnRlcmNlcHRvclNraXBIZWFkZXIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxLmNsb25lKHsgaGVhZGVycyB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuYXBwQ29uZmlnU2VydmljZS5CQVNFX1VSTCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVEhFIEFQUCBMQVlQT1VUIGhhZCBzdGFydGVkIHJlbmRlcmluZyBiZWZvcmUgYXBwQ29uZmlnU2VydmljZS5CQVNFX1VSTCByZWFjaHMgYSB0cnVlbHkgdmFsdWUuIFBsZWFzZSBjaGVjayBBcHBJbml0aWFsaXphdGlvblNlcnZpY2UgaW5pdGlhbGl6aW5nJC5uZXh0IG1ldGhvZCBjYXJlZnVsbHkhISFcIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXEuaGVhZGVycy5oYXMoSW50ZXJjZXB0b3JTdGF0aXN0aWNIZWFkZXIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFkZEJhc2VVcmxSZXEgPSByZXEuY2xvbmUoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuQkFTRV9VUkxfRk9SX1NUQVRJU1RJQyArIHJlcS51cmxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShhZGRCYXNlVXJsUmVxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBhZGRCYXNlVXJsUmVxID0gcmVxLmNsb25lKHtcclxuICAgICAgICAgICAgICAgIHVybDogdGhpcy5hcHBDb25maWdTZXJ2aWNlLkJBU0VfVVJMICsgcmVxLnVybFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKGFkZEJhc2VVcmxSZXEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
@@ -1,19 +1,18 @@
1
- /*
2
- Tannv: This code is based on the original blog post of Alexandru Bereghici
3
- https://itnext.io/angular-tutorial-implement-refresh-token-with-httpinterceptor-bfa27b966f57
4
- */
5
1
  import { filter, finalize, switchMap, tap, take } from 'rxjs/operators';
6
2
  import { Injectable } from '@angular/core';
7
3
  import { BehaviorSubject, throwError, catchError } from 'rxjs';
4
+ import { InterceptorStatisticHeader } from "./base-url-interceptor";
8
5
  import { HttpResponse } from '@angular/common/http';
9
6
  import * as i0 from "@angular/core";
10
7
  import * as i1 from "../services/auth.service";
11
- import * as i2 from "../services/app-initialization.service";
12
- import * as i3 from "@angular/router";
8
+ import * as i2 from "../services/statistic-auth.service";
9
+ import * as i3 from "../services/app-initialization.service";
10
+ import * as i4 from "@angular/router";
13
11
  export class TokenInterceptor {
14
12
  addAuthenticationToken(request) {
15
- // Get access token from Local Storage
16
- const accessToken = this.authService.getAuthorizationToken();
13
+ const isStatistic = request.headers.has(InterceptorStatisticHeader);
14
+ const authService = isStatistic ? this.statisticAuthService : this.auth;
15
+ const accessToken = authService.getAuthorizationToken();
17
16
  // If access token is null this means that user is not logged in
18
17
  // And we return the original request
19
18
  if (!accessToken) {
@@ -24,8 +23,9 @@ export class TokenInterceptor {
24
23
  headers: request.headers.set('Authorization', 'Bearer ' + accessToken)
25
24
  });
26
25
  }
27
- constructor(authService, appInitializationService, router) {
28
- this.authService = authService;
26
+ constructor(auth, statisticAuthService, appInitializationService, router) {
27
+ this.auth = auth;
28
+ this.statisticAuthService = statisticAuthService;
29
29
  this.appInitializationService = appInitializationService;
30
30
  this.router = router;
31
31
  this.refreshTokenInProgress = false;
@@ -34,6 +34,8 @@ export class TokenInterceptor {
34
34
  this.refreshTokenSubject = new BehaviorSubject(null);
35
35
  }
36
36
  intercept(req, next) {
37
+ const isStatistic = req.headers.has(InterceptorStatisticHeader);
38
+ const authService = isStatistic ? this.statisticAuthService : this.auth;
37
39
  if (req.url === undefined) {
38
40
  return next.handle(req);
39
41
  }
@@ -74,9 +76,9 @@ export class TokenInterceptor {
74
76
  if (req.url.toUpperCase().includes('REFRESH_TOKEN') ||
75
77
  req.url.toUpperCase().includes('REFRESHTOKEN')) {
76
78
  this.appInitializationService.initializing$.next(false);
77
- this.authService.userLogout().subscribe(x => {
79
+ authService.userLogout().subscribe(x => {
78
80
  if (x.ok && x.status === 200) {
79
- this.authService.postLogout();
81
+ authService.postLogout();
80
82
  }
81
83
  });
82
84
  }
@@ -108,7 +110,7 @@ export class TokenInterceptor {
108
110
  this.refreshTokenSubject.next(null);
109
111
  // Call auth.refreshAccessToken
110
112
  // (this is an Observable that will be returned)
111
- const refreshTokenReq = this.authService.tryRestoreSession();
113
+ const refreshTokenReq = authService.tryRestoreSession();
112
114
  return refreshTokenReq.pipe(
113
115
  /*
114
116
  The main difference between switchMap and other flattening operators is the cancelling effect. On each emission the previous inner observable (the result of the function you supplied) is cancelled and the new observable is subscribed. You can remember this by the phrase switch to a new observable.
@@ -116,8 +118,8 @@ export class TokenInterceptor {
116
118
  switchMap((response) => {
117
119
  let token = '';
118
120
  if (response.ok && response.status === 200) {
119
- this.authService.data$.next(response.body);
120
- this.authService.authenticated$.next(true);
121
+ authService.data$.next(response.body);
122
+ authService.authenticated$.next(true);
121
123
  token = response.body.jwtToken;
122
124
  }
123
125
  // When the call to refreshToken completes
@@ -131,9 +133,9 @@ export class TokenInterceptor {
131
133
  this.refreshTokenInProgress = false;
132
134
  console.log("refreshTokenReq catchError", err);
133
135
  debugger;
134
- this.authService.userLogout().subscribe(x => {
136
+ authService.userLogout().subscribe(x => {
135
137
  if (x.ok && x.status === 200) {
136
- this.authService.postLogout();
138
+ authService.postLogout();
137
139
  }
138
140
  });
139
141
  return throwError(() => new Error(err));
@@ -143,10 +145,10 @@ export class TokenInterceptor {
143
145
  // Log when response observable either completes or errors
144
146
  finalize(() => { }));
145
147
  }
146
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: TokenInterceptor, deps: [{ token: i1.AuthService }, { token: i2.AppInitializationService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
148
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: TokenInterceptor, deps: [{ token: i1.AuthService }, { token: i2.StatisticAuthService }, { token: i3.AppInitializationService }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
147
149
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: TokenInterceptor }); }
148
150
  }
149
151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: TokenInterceptor, decorators: [{
150
152
  type: Injectable
151
- }], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.AppInitializationService }, { type: i3.Router }] });
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4taW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9odHRwLWludGVyY2VwdG9ycy90b2tlbi1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0VBR0U7QUFFRixPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLGVBQWUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTzNFLE9BQU8sRUFDd0MsWUFBWSxFQUMxRCxNQUFNLHNCQUFzQixDQUFDOzs7OztBQUc5QixNQUFNLE9BQU8sZ0JBQWdCO0lBRXpCLHNCQUFzQixDQUFDLE9BQXlCO1FBQzVDLHNDQUFzQztRQUN0QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFN0QsZ0VBQWdFO1FBQ2hFLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2QsT0FBTyxPQUFPLENBQUM7U0FDbEI7UUFFRCxrRUFBa0U7UUFDbEUsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ2pCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsU0FBUyxHQUFHLFdBQVcsQ0FBQztTQUN6RSxDQUFDLENBQUM7SUFDUCxDQUFDO0lBU0QsWUFDWSxXQUF3QixFQUN4Qix3QkFBa0QsRUFDbEQsTUFBYztRQUZkLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsV0FBTSxHQUFOLE1BQU0sQ0FB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IjpbIi8qXHJcblRhbm52OiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGJsb2cgcG9zdCBvZiBBbGV4YW5kcnUgQmVyZWdoaWNpXHJcbmh0dHBzOi8vaXRuZXh0LmlvL2FuZ3VsYXItdHV0b3JpYWwtaW1wbGVtZW50LXJlZnJlc2gtdG9rZW4td2l0aC1odHRwaW50ZXJjZXB0b3ItYmZhMjdiOTY2ZjU3XHJcbiovXHJcblxyXG5pbXBvcnQgeyBmaWx0ZXIsIGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRhcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QsIHRocm93RXJyb3IsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSHR0cEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBJbml0aWFsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcHAtaW5pdGlhbGl6YXRpb24uc2VydmljZSc7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgSHR0cEludGVyY2VwdG9yLCBIdHRwSGFuZGxlciwgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRva2VuSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG5cclxuICAgIGFkZEF1dGhlbnRpY2F0aW9uVG9rZW4ocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pik6IEh0dHBSZXF1ZXN0PGFueT4ge1xyXG4gICAgICAgIC8vIEdldCBhY2Nlc3MgdG9rZW4gZnJvbSBMb2NhbCBTdG9yYWdlXHJcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpO1xyXG5cclxuICAgICAgICAvLyBJZiBhY2Nlc3MgdG9rZW4gaXMgbnVsbCB0aGlzIG1lYW5zIHRoYXQgdXNlciBpcyBub3QgbG9nZ2VkIGluXHJcbiAgICAgICAgLy8gQW5kIHdlIHJldHVybiB0aGUgb3JpZ2luYWwgcmVxdWVzdFxyXG4gICAgICAgIGlmICghYWNjZXNzVG9rZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBXZSBjbG9uZSB0aGUgcmVxdWVzdCwgYmVjYXVzZSB0aGUgb3JpZ2luYWwgcmVxdWVzdCBpcyBpbW11dGFibGVcclxuICAgICAgICByZXR1cm4gcmVxdWVzdC5jbG9uZSh7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlbilcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlZnJlc2hUb2tlbkluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgIC8vIFJlZnJlc2ggVG9rZW4gU3ViamVjdCB0cmFja3MgdGhlIGN1cnJlbnQgdG9rZW4sIFxyXG4gICAgLy8gb3IgaXMgbnVsbCBpZiBubyB0b2tlbiBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIChlLmcuIHJlZnJlc2ggcGVuZGluZykuXHJcbiAgICBwcml2YXRlIHJlZnJlc2hUb2tlblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KFxyXG4gICAgICAgIG51bGxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBhcHBJbml0aWFsaXphdGlvblNlcnZpY2U6IEFwcEluaXRpYWxpemF0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuXHJcbiAgICAgICAgaWYgKHJlcS51cmwgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXEudXJsLmluY2x1ZGVzKFwiYXBwLmNvbmZpZy5qc29uXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYXBwLmNvbmZpZy5qc29uIGV4Y2x1ZGVkXCIpXHJcbiAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogV0hZPz8/XHJcbiAgICAgICAgaWYgKHJlcS51cmwuaW5jbHVkZXMoXCJHZW5lcmF0ZVRlbXBsYXRlXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiR2VuZXJhdGVUZW1wbGF0ZSBleGNsdWRlZFwiKVxyXG4gICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcS51cmwuaW5jbHVkZXMoXCJFeHBvcnRDb3JlUGFnZUxpc3RHcmlkVG9FeGNlbFwiKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkV4cG9ydENvcmVQYWdlTGlzdEdyaWRUb0V4Y2VsIGV4Y2x1ZGVkXCIpXHJcbiAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG5cclxuICAgICAgICBsZXQgb2s6IHN0cmluZztcclxuICAgICAgICAvLyBleHRlbmQgc2VydmVyIHJlc3BvbnNlIG9ic2VydmFibGUgd2l0aCBsb2dnaW5nXHJcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YXAoe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFN1Y2NlZWRzIHdoZW4gdGhlcmUgaXMgYSByZXNwb25zZTsgaWdub3JlIG90aGVyIGV2ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IGV2ZW50ID0+IChvayA9IGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gJ3N1Y2NlZWRlZCcgOiAnJyksXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHsgfSAvLyB3ZSBkbyBub3QgaW1wbGVtZW50IHRoZSBsb2dpYyBoZXJlXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIC8vIEJ1dCBoZXJlOlxyXG4gICAgICAgICAgICAgICAgLy8gT3BlcmF0aW9uIGZhaWxlZDsgZXJyb3IgaXMgYW4gSHR0cEVycm9yUmVzcG9uc2VcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUb2tlbkludGVyY2VwdG9yIEVycm9yOiBcIiwgcmVxLCByZXNwb25zZSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZWZyZXNoIHRva2VuIGZvciBzb21lIHJlcXVlc3RzIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGxpa2UgbG9naW4gb3IgcmVmcmVzaCB0b2tlbiBpdHNlbGZcclxuICAgICAgICAgICAgICAgICAgICAvLyBTbyB3ZSB2ZXJpZnkgdXJsIGFuZCB3ZSB0aHJvdyBhbiBlcnJvciBpZiBpdCdzIHRoZSBjYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXEudXJsLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoJ0xPR0lOJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnVybC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdSRUZSRVNIX1RPS0VOJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnVybC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdSRUZSRVNIVE9LRU4nKVxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkbyBhbm90aGVyIGNoZWNrIHRvIHNlZSBpZiByZWZyZXNoIHRva2VuIGZhaWxlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBsb2dvdXQgdXNlciBhbmQgdG8gcmVkaXJlY3QgaXQgdG8gbG9naW4gcGFnZVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnVybC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdSRUZSRVNIX1RPS0VOJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS51cmwudG9VcHBlckNhc2UoKS5pbmNsdWRlcygnUkVGUkVTSFRPS0VOJylcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBJbml0aWFsaXphdGlvblNlcnZpY2UuaW5pdGlhbGl6aW5nJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UudXNlckxvZ291dCgpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UucG9zdExvZ291dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZXJyb3Igc3RhdHVzIGlzIGRpZmZlcmVudCB0aGFuIDQwMSBcclxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSB3YW50IHRvIHNraXAgcmVmcmVzaCB0b2tlblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNvIHdlIGNoZWNrIHRoYXQgYW5kIHRocm93IHRoZSBlcnJvciBpZiBpdCdzIHRoZSBjYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gNDAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihyZXNwb25zZS5lcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVmcmVzaFRva2VuSW5Qcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiByZWZyZXNoVG9rZW5JblByb2dyZXNzIGlzIHRydWUsIHdlIHdpbGwgd2FpdCB1bnRpbCByZWZyZXNoVG9rZW5TdWJqZWN0IGhhcyBhIG5vbi1udWxsIHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOKAkyB3aGljaCBtZWFucyB0aGUgbmV3IHRva2VuIGlzIHJlYWR5IGFuZCB3ZSBjYW4gcmV0cnkgdGhlIHJlcXVlc3QgYWdhaW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuU3ViamVjdC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlsdGVyOiBFbWl0IHZhbHVlcyB0aGF0IHBhc3MgdGhlIHByb3ZpZGVkIGNvbmRpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHJlc3VsdCA9PiByZXN1bHQgIT09IG51bGwpLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHN3aXRjaE1hcCBhbmQgb3RoZXIgZmxhdHRlbmluZyBvcGVyYXRvcnMgaXMgdGhlIGNhbmNlbGxpbmcgZWZmZWN0LiBPbiBlYWNoIGVtaXNzaW9uIHRoZSBwcmV2aW91cyBpbm5lciBvYnNlcnZhYmxlICh0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiB5b3Ugc3VwcGxpZWQpIGlzIGNhbmNlbGxlZCBhbmQgdGhlIG5ldyBvYnNlcnZhYmxlIGlzIHN1YnNjcmliZWQuIFlvdSBjYW4gcmVtZW1iZXIgdGhpcyBieSB0aGUgcGhyYXNlIHN3aXRjaCB0byBhIG5ldyBvYnNlcnZhYmxlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBuZXh0LmhhbmRsZSh0aGlzLmFkZEF1dGhlbnRpY2F0aW9uVG9rZW4ocmVxKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlPy50b1VwcGVyQ2FzZSgpIHx8IHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5JblByb2dyZXNzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgcmVmcmVzaFRva2VuU3ViamVjdCB0byBudWxsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHN1YnNlcXVlbnQgQVBJIGNhbGxzIHdpbGwgd2FpdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1bnRpbCB0aGUgbmV3IHRva2VuIGhhcyBiZWVuIHJldHJpZXZlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QubmV4dChudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGwgYXV0aC5yZWZyZXNoQWNjZXNzVG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHRoaXMgaXMgYW4gT2JzZXJ2YWJsZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoVG9rZW5SZXEgPSB0aGlzLmF1dGhTZXJ2aWNlLnRyeVJlc3RvcmVTZXNzaW9uKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVmcmVzaFRva2VuUmVxLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHN3aXRjaE1hcCBhbmQgb3RoZXIgZmxhdHRlbmluZyBvcGVyYXRvcnMgaXMgdGhlIGNhbmNlbGxpbmcgZWZmZWN0LiBPbiBlYWNoIGVtaXNzaW9uIHRoZSBwcmV2aW91cyBpbm5lciBvYnNlcnZhYmxlICh0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiB5b3Ugc3VwcGxpZWQpIGlzIGNhbmNlbGxlZCBhbmQgdGhlIG5ldyBvYnNlcnZhYmxlIGlzIHN1YnNjcmliZWQuIFlvdSBjYW4gcmVtZW1iZXIgdGhpcyBieSB0aGUgcGhyYXNlIHN3aXRjaCB0byBhIG5ldyBvYnNlcnZhYmxlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9ICcnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uub2sgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5kYXRhJC5uZXh0KHJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhlbnRpY2F0ZWQkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gcmVzcG9uc2UuYm9keS5qd3RUb2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGNhbGwgdG8gcmVmcmVzaFRva2VuIGNvbXBsZXRlcyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSByZXNldCB0aGUgcmVmcmVzaFRva2VuSW5Qcm9ncmVzcyB0byBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgbmV4dCB0aW1lIHRoZSB0b2tlbiBuZWVkcyB0byBiZSByZWZyZXNoZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbkluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QubmV4dCh0b2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UmVxID0gdGhpcy5hZGRBdXRoZW50aWNhdGlvblRva2VuKHJlcSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKG5ld1JlcSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5JblByb2dyZXNzID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVmcmVzaFRva2VuUmVxIGNhdGNoRXJyb3JcIiwgZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS51c2VyTG9nb3V0KCkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnBvc3RMb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihlcnIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIC8vIExvZyB3aGVuIHJlc3BvbnNlIG9ic2VydmFibGUgZWl0aGVyIGNvbXBsZXRlcyBvciBlcnJvcnNcclxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHsgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbn0iXX0=
153
+ }], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.StatisticAuthService }, { type: i3.AppInitializationService }, { type: i4.Router }] });
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4taW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9odHRwLWludGVyY2VwdG9ycy90b2tlbi1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLGVBQWUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTTNFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3BFLE9BQU8sRUFDd0MsWUFBWSxFQUMxRCxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFHOUIsTUFBTSxPQUFPLGdCQUFnQjtJQUV6QixzQkFBc0IsQ0FBQyxPQUF5QjtRQUU1QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRXhFLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRXhELGdFQUFnRTtRQUNoRSxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNkLE9BQU8sT0FBTyxDQUFDO1NBQ2xCO1FBRUQsa0VBQWtFO1FBQ2xFLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNqQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxF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LFVBQVUsRUFBRSxDQUFDO3lCQUM1QjtvQkFDTCxDQUFDLENBQUMsQ0FBQTtvQkFFRixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDLENBQUMsQ0FDTCxDQUFBO2FBQ0o7UUFDTCxDQUFDLENBQUM7UUFDRiwwREFBMEQ7UUFDMUQsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUN0QixDQUFDO0lBQ1YsQ0FBQzs4R0FwTFEsZ0JBQWdCO2tIQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaWx0ZXIsIGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRhcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QsIHRocm93RXJyb3IsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSHR0cEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBJbml0aWFsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcHAtaW5pdGlhbGl6YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEludGVyY2VwdG9yU3RhdGlzdGljSGVhZGVyIH0gZnJvbSBcIi4vYmFzZS11cmwtaW50ZXJjZXB0b3JcIjtcclxuaW1wb3J0IHsgU3RhdGlzdGljQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0aXN0aWMtYXV0aC5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBIdHRwSW50ZXJjZXB0b3IsIEh0dHBIYW5kbGVyLCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVG9rZW5JbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcblxyXG4gICAgYWRkQXV0aGVudGljYXRpb25Ub2tlbihyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KTogSHR0cFJlcXVlc3Q8YW55PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzU3RhdGlzdGljID0gcmVxdWVzdC5oZWFkZXJzLmhhcyhJbnRlcmNlcHRvclN0YXRpc3RpY0hlYWRlcik7XHJcbiAgICAgICAgY29uc3QgYXV0aFNlcnZpY2UgPSBpc1N0YXRpc3RpYyA/IHRoaXMuc3RhdGlzdGljQXV0aFNlcnZpY2UgOiB0aGlzLmF1dGg7XHJcblxyXG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCk7XHJcblxyXG4gICAgICAgIC8vIElmIGFjY2VzcyB0b2tlbiBpcyBudWxsIHRoaXMgbWVhbnMgdGhhdCB1c2VyIGlzIG5vdCBsb2dnZWQgaW5cclxuICAgICAgICAvLyBBbmQgd2UgcmV0dXJuIHRoZSBvcmlnaW5hbCByZXF1ZXN0XHJcbiAgICAgICAgaWYgKCFhY2Nlc3NUb2tlbikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFdlIGNsb25lIHRoZSByZXF1ZXN0LCBiZWNhdXNlIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGlzIGltbXV0YWJsZVxyXG4gICAgICAgIHJldHVybiByZXF1ZXN0LmNsb25lKHtcclxuICAgICAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVmcmVzaFRva2VuSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgLy8gUmVmcmVzaCBUb2tlbiBTdWJqZWN0IHRyYWNrcyB0aGUgY3VycmVudCB0b2tlbiwgXHJcbiAgICAvLyBvciBpcyBudWxsIGlmIG5vIHRva2VuIGlzIGN1cnJlbnRseSBhdmFpbGFibGUgKGUuZy4gcmVmcmVzaCBwZW5kaW5nKS5cclxuICAgIHByaXZhdGUgcmVmcmVzaFRva2VuU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oXHJcbiAgICAgICAgbnVsbFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGF1dGg6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc3RhdGlzdGljQXV0aFNlcnZpY2U6IFN0YXRpc3RpY0F1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYXBwSW5pdGlhbGl6YXRpb25TZXJ2aWNlOiBBcHBJbml0aWFsaXphdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzU3RhdGlzdGljID0gcmVxLmhlYWRlcnMuaGFzKEludGVyY2VwdG9yU3RhdGlzdGljSGVhZGVyKTtcclxuICAgICAgICBjb25zdCBhdXRoU2VydmljZSA9IGlzU3RhdGlzdGljID8gdGhpcy5zdGF0aXN0aWNBdXRoU2VydmljZSA6IHRoaXMuYXV0aDtcclxuXHJcblxyXG4gICAgICAgIGlmIChyZXEudXJsID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVxLnVybC5pbmNsdWRlcyhcImFwcC5jb25maWcuanNvblwiKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImFwcC5jb25maWcuanNvbiBleGNsdWRlZFwiKVxyXG4gICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFdIWT8/P1xyXG4gICAgICAgIGlmIChyZXEudXJsLmluY2x1ZGVzKFwiR2VuZXJhdGVUZW1wbGF0ZVwiKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkdlbmVyYXRlVGVtcGxhdGUgZXhjbHVkZWRcIilcclxuICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXEudXJsLmluY2x1ZGVzKFwiRXhwb3J0Q29yZVBhZ2VMaXN0R3JpZFRvRXhjZWxcIikpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJFeHBvcnRDb3JlUGFnZUxpc3RHcmlkVG9FeGNlbCBleGNsdWRlZFwiKVxyXG4gICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgKi9cclxuXHJcbiAgICAgICAgbGV0IG9rOiBzdHJpbmc7XHJcbiAgICAgICAgLy8gZXh0ZW5kIHNlcnZlciByZXNwb25zZSBvYnNlcnZhYmxlIHdpdGggbG9nZ2luZ1xyXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFwKHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTdWNjZWVkcyB3aGVuIHRoZXJlIGlzIGEgcmVzcG9uc2U7IGlnbm9yZSBvdGhlciBldmVudHNcclxuICAgICAgICAgICAgICAgICAgICBuZXh0OiBldmVudCA9PiAob2sgPSBldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/ICdzdWNjZWVkZWQnIDogJycpLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7IH0gLy8gd2UgZG8gbm90IGltcGxlbWVudCB0aGUgbG9naWMgaGVyZVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAvLyBCdXQgaGVyZTpcclxuICAgICAgICAgICAgICAgIC8vIE9wZXJhdGlvbiBmYWlsZWQ7IGVycm9yIGlzIGFuIEh0dHBFcnJvclJlc3BvbnNlXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChyZXNwb25zZTogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVG9rZW5JbnRlcmNlcHRvciBFcnJvcjogXCIsIHJlcSwgcmVzcG9uc2UpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVmcmVzaCB0b2tlbiBmb3Igc29tZSByZXF1ZXN0cyBcclxuICAgICAgICAgICAgICAgICAgICAvLyBsaWtlIGxvZ2luIG9yIHJlZnJlc2ggdG9rZW4gaXRzZWxmXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU28gd2UgdmVyaWZ5IHVybCBhbmQgd2UgdGhyb3cgYW4gZXJyb3IgaWYgaXQncyB0aGUgY2FzZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnVybC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdMT0dJTicpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcS51cmwudG9VcHBlckNhc2UoKS5pbmNsdWRlcygnUkVGUkVTSF9UT0tFTicpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcS51cmwudG9VcHBlckNhc2UoKS5pbmNsdWRlcygnUkVGUkVTSFRPS0VOJylcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG8gYW5vdGhlciBjaGVjayB0byBzZWUgaWYgcmVmcmVzaCB0b2tlbiBmYWlsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHdhbnQgdG8gbG9nb3V0IHVzZXIgYW5kIHRvIHJlZGlyZWN0IGl0IHRvIGxvZ2luIHBhZ2VcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS51cmwudG9VcHBlckNhc2UoKS5pbmNsdWRlcygnUkVGUkVTSF9UT0tFTicpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEudXJsLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoJ1JFRlJFU0hUT0tFTicpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwSW5pdGlhbGl6YXRpb25TZXJ2aWNlLmluaXRpYWxpemluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoU2VydmljZS51c2VyTG9nb3V0KCkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aFNlcnZpY2UucG9zdExvZ291dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZXJyb3Igc3RhdHVzIGlzIGRpZmZlcmVudCB0aGFuIDQwMSBcclxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSB3YW50IHRvIHNraXAgcmVmcmVzaCB0b2tlblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNvIHdlIGNoZWNrIHRoYXQgYW5kIHRocm93IHRoZSBlcnJvciBpZiBpdCdzIHRoZSBjYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gNDAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihyZXNwb25zZS5lcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVmcmVzaFRva2VuSW5Qcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiByZWZyZXNoVG9rZW5JblByb2dyZXNzIGlzIHRydWUsIHdlIHdpbGwgd2FpdCB1bnRpbCByZWZyZXNoVG9rZW5TdWJqZWN0IGhhcyBhIG5vbi1udWxsIHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOKAkyB3aGljaCBtZWFucyB0aGUgbmV3IHRva2VuIGlzIHJlYWR5IGFuZCB3ZSBjYW4gcmV0cnkgdGhlIHJlcXVlc3QgYWdhaW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuU3ViamVjdC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlsdGVyOiBFbWl0IHZhbHVlcyB0aGF0IHBhc3MgdGhlIHByb3ZpZGVkIGNvbmRpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHJlc3VsdCA9PiByZXN1bHQgIT09IG51bGwpLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHN3aXRjaE1hcCBhbmQgb3RoZXIgZmxhdHRlbmluZyBvcGVyYXRvcnMgaXMgdGhlIGNhbmNlbGxpbmcgZWZmZWN0LiBPbiBlYWNoIGVtaXNzaW9uIHRoZSBwcmV2aW91cyBpbm5lciBvYnNlcnZhYmxlICh0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiB5b3Ugc3VwcGxpZWQpIGlzIGNhbmNlbGxlZCBhbmQgdGhlIG5ldyBvYnNlcnZhYmxlIGlzIHN1YnNjcmliZWQuIFlvdSBjYW4gcmVtZW1iZXIgdGhpcyBieSB0aGUgcGhyYXNlIHN3aXRjaCB0byBhIG5ldyBvYnNlcnZhYmxlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBuZXh0LmhhbmRsZSh0aGlzLmFkZEF1dGhlbnRpY2F0aW9uVG9rZW4ocmVxKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlPy50b1VwcGVyQ2FzZSgpIHx8IHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5JblByb2dyZXNzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgcmVmcmVzaFRva2VuU3ViamVjdCB0byBudWxsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHN1YnNlcXVlbnQgQVBJIGNhbGxzIHdpbGwgd2FpdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1bnRpbCB0aGUgbmV3IHRva2VuIGhhcyBiZWVuIHJldHJpZXZlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QubmV4dChudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGwgYXV0aC5yZWZyZXNoQWNjZXNzVG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHRoaXMgaXMgYW4gT2JzZXJ2YWJsZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoVG9rZW5SZXEgPSBhdXRoU2VydmljZS50cnlSZXN0b3JlU2Vzc2lvbigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZnJlc2hUb2tlblJlcS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBzd2l0Y2hNYXAgYW5kIG90aGVyIGZsYXR0ZW5pbmcgb3BlcmF0b3JzIGlzIHRoZSBjYW5jZWxsaW5nIGVmZmVjdC4gT24gZWFjaCBlbWlzc2lvbiB0aGUgcHJldmlvdXMgaW5uZXIgb2JzZXJ2YWJsZSAodGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24geW91IHN1cHBsaWVkKSBpcyBjYW5jZWxsZWQgYW5kIHRoZSBuZXcgb2JzZXJ2YWJsZSBpcyBzdWJzY3JpYmVkLiBZb3UgY2FuIHJlbWVtYmVyIHRoaXMgYnkgdGhlIHBocmFzZSBzd2l0Y2ggdG8gYSBuZXcgb2JzZXJ2YWJsZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG9rZW4gPSAnJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm9rICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhTZXJ2aWNlLmRhdGEkLm5leHQocmVzcG9uc2UuYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhTZXJ2aWNlLmF1dGhlbnRpY2F0ZWQkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gcmVzcG9uc2UuYm9keS5qd3RUb2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGNhbGwgdG8gcmVmcmVzaFRva2VuIGNvbXBsZXRlcyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSByZXNldCB0aGUgcmVmcmVzaFRva2VuSW5Qcm9ncmVzcyB0byBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgbmV4dCB0aW1lIHRoZSB0b2tlbiBuZWVkcyB0byBiZSByZWZyZXNoZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbkluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QubmV4dCh0b2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UmVxID0gdGhpcy5hZGRBdXRoZW50aWNhdGlvblRva2VuKHJlcSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKG5ld1JlcSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5JblByb2dyZXNzID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVmcmVzaFRva2VuUmVxIGNhdGNoRXJyb3JcIiwgZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aFNlcnZpY2UudXNlckxvZ291dCgpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aFNlcnZpY2UucG9zdExvZ291dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGVycikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgLy8gTG9nIHdoZW4gcmVzcG9uc2Ugb2JzZXJ2YWJsZSBlaXRoZXIgY29tcGxldGVzIG9yIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4geyB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxufSJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVN0YXRpc3RpY0F1dGhEYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvaW50ZXJmYWNlcy9JU3RhdGlzdGljQXV0aERhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElTdGF0aXN0aWNTeXNVc2VyIH0gZnJvbSBcIi4vSVN0YXRpc3RpY1N5c1VzZXJcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVN0YXRpc3RpY0F1dGhEYXRhIHtcclxuICAgIHVzZXI6IElTdGF0aXN0aWNTeXNVc2VyLFxyXG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyxcclxuICAgIGV4cGlyZXM6IERhdGUsXHJcbiAgICByZWZyZXNoVG9rZW46IHsgdG9rZW46IHN0cmluZyB9XHJcbn0iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVN0YXRpc3RpY1N5c1VzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9pbnRlcmZhY2VzL0lTdGF0aXN0aWNTeXNVc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElTdGF0aXN0aWNTeXNVc2VyIHtcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICB0ZW5hbnRJZDogbnVtYmVyLFxyXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcclxuICAgIGVtYWlsOiBzdHJpbmcsXHJcbiAgICBmdWxsbmFtZTogc3RyaW5nLFxyXG4gICAgYXZhdGFyOiBzdHJpbmcsXHJcbiAgICBpc1Jvb3Q/OiBib29sZWFuLFxyXG4gICAgaXNBZG1pbj86IGJvb2xlYW4sXHJcbiAgICBpc0xvY2tlZD86IGJvb2xlYW4sXHJcbiAgICB3ZWJhcHBBbGxvd2VkPzogYm9vbGVhbixcclxuICAgIHBvcnRhbEFsbG93ZWQ/OiBib29sZWFuLFxyXG4gICAgbW9iaWxlQWxsb3dlZD86IGJvb2xlYW4sXHJcbiAgICBpc0ZpcnN0TG9naW4/OiBib29sZWFuLFxyXG59Il19