keycloak-angular 7.3.1 → 8.2.0

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 (38) hide show
  1. package/README.md +133 -158
  2. package/bundles/keycloak-angular.umd.js +404 -310
  3. package/bundles/keycloak-angular.umd.js.map +1 -1
  4. package/esm2015/keycloak-angular.js +1 -1
  5. package/esm2015/lib/core/core.module.js +16 -18
  6. package/esm2015/lib/core/interceptors/keycloak-bearer.interceptor.js +6 -9
  7. package/esm2015/lib/core/interfaces/keycloak-event.js +1 -1
  8. package/esm2015/lib/core/interfaces/keycloak-options.js +2 -1
  9. package/esm2015/lib/core/services/keycloak-auth-guard.js +1 -1
  10. package/esm2015/lib/core/services/keycloak.service.js +18 -30
  11. package/esm2015/lib/keycloak-angular.module.js +8 -10
  12. package/esm2015/public_api.js +1 -1
  13. package/fesm2015/keycloak-angular.js +44 -65
  14. package/fesm2015/keycloak-angular.js.map +1 -1
  15. package/keycloak-angular.metadata.json +1 -1
  16. package/lib/core/interfaces/keycloak-options.d.ts +1 -2
  17. package/lib/core/services/keycloak.service.d.ts +1 -1
  18. package/package.json +10 -16
  19. package/public_api.d.ts +0 -2
  20. package/bundles/keycloak-angular.umd.min.js +0 -16
  21. package/bundles/keycloak-angular.umd.min.js.map +0 -1
  22. package/esm2015/lib/core/interfaces/keycloak-config.js +0 -1
  23. package/esm2015/lib/core/utils/to-promise.js +0 -10
  24. package/esm5/keycloak-angular.js +0 -2
  25. package/esm5/lib/core/core.module.js +0 -26
  26. package/esm5/lib/core/interceptors/keycloak-bearer.interceptor.js +0 -48
  27. package/esm5/lib/core/interfaces/keycloak-config.js +0 -1
  28. package/esm5/lib/core/interfaces/keycloak-event.js +0 -11
  29. package/esm5/lib/core/interfaces/keycloak-options.js +0 -1
  30. package/esm5/lib/core/services/keycloak-auth-guard.js +0 -40
  31. package/esm5/lib/core/services/keycloak.service.js +0 -321
  32. package/esm5/lib/core/utils/to-promise.js +0 -10
  33. package/esm5/lib/keycloak-angular.module.js +0 -15
  34. package/esm5/public_api.js +0 -7
  35. package/fesm5/keycloak-angular.js +0 -453
  36. package/fesm5/keycloak-angular.js.map +0 -1
  37. package/lib/core/interfaces/keycloak-config.d.ts +0 -9
  38. package/lib/core/utils/to-promise.d.ts +0 -7
@@ -1,4 +1,4 @@
1
- import { __awaiter, __decorate } from "tslib";
1
+ import { __awaiter } from "tslib";
2
2
  import { Injectable } from '@angular/core';
3
3
  import { HttpHeaders } from '@angular/common/http';
4
4
  import { Subject, from } from 'rxjs';
@@ -6,8 +6,7 @@ import { map } from 'rxjs/operators';
6
6
  import * as Keycloak_ from 'keycloak-js';
7
7
  export const Keycloak = Keycloak_;
8
8
  import { KeycloakEventType } from '../interfaces/keycloak-event';
9
- import { toPromise } from '../utils/to-promise';
10
- let KeycloakService = class KeycloakService {
9
+ export class KeycloakService {
11
10
  constructor() {
12
11
  this._keycloakEvents$ = new Subject();
13
12
  }
@@ -63,7 +62,7 @@ let KeycloakService = class KeycloakService {
63
62
  }
64
63
  return excludedUrls;
65
64
  }
66
- initServiceValues({ enableBearerInterceptor = true, loadUserProfileAtStartUp = true, bearerExcludedUrls = [], authorizationHeaderName = 'Authorization', bearerPrefix = 'bearer', initOptions, }) {
65
+ initServiceValues({ enableBearerInterceptor = true, loadUserProfileAtStartUp = false, bearerExcludedUrls = [], authorizationHeaderName = 'Authorization', bearerPrefix = 'Bearer', initOptions, }) {
67
66
  this._enableBearerInterceptor = enableBearerInterceptor;
68
67
  this._loadUserProfileAtStartUp = loadUserProfileAtStartUp;
69
68
  this._authorizationHeaderName = authorizationHeaderName;
@@ -77,7 +76,7 @@ let KeycloakService = class KeycloakService {
77
76
  const { config, initOptions } = options;
78
77
  this._instance = Keycloak(config);
79
78
  this.bindsKeycloakEvents();
80
- const authenticated = yield toPromise(this._instance.init(initOptions));
79
+ const authenticated = yield this._instance.init(initOptions);
81
80
  if (authenticated && this._loadUserProfileAtStartUp) {
82
81
  yield this.loadUserProfile();
83
82
  }
@@ -86,7 +85,7 @@ let KeycloakService = class KeycloakService {
86
85
  }
87
86
  login(options = {}) {
88
87
  return __awaiter(this, void 0, void 0, function* () {
89
- yield toPromise(this._instance.login(options));
88
+ yield this._instance.login(options);
90
89
  if (this._loadUserProfileAtStartUp) {
91
90
  yield this.loadUserProfile();
92
91
  }
@@ -97,13 +96,13 @@ let KeycloakService = class KeycloakService {
97
96
  const options = {
98
97
  redirectUri,
99
98
  };
100
- yield toPromise(this._instance.logout(options));
99
+ yield this._instance.logout(options);
101
100
  this._userProfile = undefined;
102
101
  });
103
102
  }
104
103
  register(options = { action: 'register' }) {
105
104
  return __awaiter(this, void 0, void 0, function* () {
106
- yield toPromise(this._instance.register(options));
105
+ yield this._instance.register(options);
107
106
  });
108
107
  }
109
108
  isUserInRole(role, resource) {
@@ -159,7 +158,7 @@ let KeycloakService = class KeycloakService {
159
158
  if (!this._instance) {
160
159
  throw new Error('Keycloak Angular library is not initialized.');
161
160
  }
162
- return toPromise(this._instance.updateToken(minValidity));
161
+ return this._instance.updateToken(minValidity);
163
162
  });
164
163
  }
165
164
  loadUserProfile(forceReload = false) {
@@ -170,23 +169,13 @@ let KeycloakService = class KeycloakService {
170
169
  if (!this._instance.authenticated) {
171
170
  throw new Error('The user profile was not loaded as the user is not logged in.');
172
171
  }
173
- return (this._userProfile = yield toPromise(this._instance.loadUserProfile()));
172
+ return this._userProfile = yield this._instance.loadUserProfile();
174
173
  });
175
174
  }
176
- getToken(forceLogin = true) {
175
+ getToken() {
177
176
  return __awaiter(this, void 0, void 0, function* () {
178
- try {
179
- yield this.updateToken(10);
180
- return this._instance.token;
181
- }
182
- catch (error) {
183
- if (forceLogin) {
184
- this.login();
185
- }
186
- else {
187
- throw error;
188
- }
189
- }
177
+ yield this.updateToken(10);
178
+ return this._instance.token;
190
179
  });
191
180
  }
192
181
  getUsername() {
@@ -199,7 +188,7 @@ let KeycloakService = class KeycloakService {
199
188
  this._instance.clearToken();
200
189
  }
201
190
  addTokenToHeader(headers = new HttpHeaders()) {
202
- return from(this.getToken()).pipe(map((token) => headers.set(this._authorizationHeaderName, this._bearerPrefix + token)));
191
+ return from(this.getToken()).pipe(map((token) => token ? headers.set(this._authorizationHeaderName, this._bearerPrefix + token) : headers));
203
192
  }
204
193
  getKeycloakInstance() {
205
194
  return this._instance;
@@ -213,9 +202,8 @@ let KeycloakService = class KeycloakService {
213
202
  get keycloakEvents$() {
214
203
  return this._keycloakEvents$;
215
204
  }
216
- };
217
- KeycloakService = __decorate([
218
- Injectable()
219
- ], KeycloakService);
220
- export { KeycloakService };
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWsuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2tleWNsb2FrLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvY29yZS9zZXJ2aWNlcy9rZXljbG9hay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFRQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckMsT0FBTyxLQUFLLFNBQVMsTUFBTSxhQUFhLENBQUM7QUFDekMsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQztBQU9sQyxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVWhELElBQWEsZUFBZSxHQUE1QixNQUFhLGVBQWU7SUFBNUI7UUFzQ1UscUJBQWdCLEdBQTJCLElBQUksT0FBTyxFQUUzRCxDQUFDO0lBa2ROLENBQUM7SUF6Y1MsbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLGlCQUFpQixDQUFDLFdBQVc7YUFDcEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxFQUFF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LElBQUksdUJBQXVCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO0lBQ3ZDLENBQUM7SUFxQkQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7Q0FDRixDQUFBO0FBMWZZLGVBQWU7SUFEM0IsVUFBVSxFQUFFO0dBQ0EsZUFBZSxDQTBmM0I7U0ExZlksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8vIFdvcmthcm91bmQgZm9yIHJvbGx1cCBsaWJyYXJ5IGJlaGF2aW91ciwgYXMgcG9pbnRlZCBvdXQgb24gaXNzdWUgIzEyNjcgKGh0dHBzOi8vZ2l0aHViLmNvbS9yb2xsdXAvcm9sbHVwL2lzc3Vlcy8xMjY3KS5cbmltcG9ydCAqIGFzIEtleWNsb2FrXyBmcm9tICdrZXljbG9hay1qcyc7XG5leHBvcnQgY29uc3QgS2V5Y2xvYWsgPSBLZXljbG9ha187XG5cbmltcG9ydCB7XG4gIEV4Y2x1ZGVkVXJsLFxuICBFeGNsdWRlZFVybFJlZ2V4LFxuICBLZXljbG9ha09wdGlvbnMsXG59IGZyb20gJy4uL2ludGVyZmFjZXMva2V5Y2xvYWstb3B0aW9ucyc7XG5pbXBvcnQgeyBLZXljbG9ha0V2ZW50LCBLZXljbG9ha0V2ZW50VHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMva2V5Y2xvYWstZXZlbnQnO1xuaW1wb3J0IHsgdG9Qcm9taXNlIH0gZnJvbSAnLi4vdXRpbHMvdG8tcHJvbWlzZSc7XG5cbi8qKlxuICogU2VydmljZSB0byBleHBvc2UgZXhpc3RlbnQgbWV0aG9kcyBmcm9tIHRoZSBLZXljbG9hayBKUyBhZGFwdGVyLCBhZGRpbmcgbmV3XG4gKiBmdW5jdGlvbmFsaXRpZXMgdG8gaW1wcm92ZSB0aGUgdXNlIG9mIGtleWNsb2FrIGluIEFuZ3VsYXIgdiA+IDQuMyBhcHBsaWNhdGlvbnMuXG4gKlxuICogVGhpcyBjbGFzcyBzaG91bGQgYmUgaW5qZWN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uIGJvb3RzdHJhcCwgc28gdGhlIHNhbWUgaW5zdGFuY2Ugd2lsbCBiZSB1c2VkXG4gKiBhbG9uZyB0aGUgd2ViIGFwcGxpY2F0aW9uLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgS2V5Y2xvYWtTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEtleWNsb2FrLWpzIGluc3RhbmNlLlxuICAgKi9cbiAgcHJpdmF0ZSBfaW5zdGFuY2U6IEtleWNsb2FrLktleWNsb2FrSW5zdGFuY2U7XG4gIC8qKlxuICAgKiBVc2VyIHByb2ZpbGUgYXMgS2V5Y2xvYWtQcm9maWxlIGludGVyZmFjZS5cbiAgICovXG4gIHByaXZhdGUgX3VzZXJQcm9maWxlOiBLZXljbG9hay5LZXljbG9ha1Byb2ZpbGU7XG4gIC8qKlxuICAgKiBGbGFnIHRvIGluZGljYXRlIGlmIHRoZSBiZWFyZXIgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBfZW5hYmxlQmVhcmVySW50ZXJjZXB0b3I6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVuIHRoZSBpbXBsaWNpdCBmbG93IGlzIGNob29zZW4gdGhlcmUgbXVzdCBleGlzdCBhIHNpbGVudFJlZnJlc2gsIGFzIHRoZXJlIGlzXG4gICAqIG5vIHJlZnJlc2ggdG9rZW4uXG4gICAqL1xuICBwcml2YXRlIF9zaWxlbnRSZWZyZXNoOiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIgcHJvZmlsZSBzaG91bGQgYmUgbG9hZGVkIGF0IHRoZSBrZXljbG9hayBpbml0aWFsaXphdGlvbixcbiAgICoganVzdCBhZnRlciB0aGUgbG9naW4uXG4gICAqL1xuICBwcml2YXRlIF9sb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXA6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgYmVhcmVyIHByZWZpeCB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIEF1dGhvcml6YXRpb24gSGVhZGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBfYmVhcmVyUHJlZml4OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBWYWx1ZSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgQXV0aG9yaXphdGlvbiBIdHRwIEhlYWRlciBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBfYXV0aG9yaXphdGlvbkhlYWRlck5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBleGNsdWRlZCB1cmxzIHBhdHRlcm5zIHRoYXQgbXVzdCBza2lwIHRoZSBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yLlxuICAgKi9cbiAgcHJpdmF0ZSBfZXhjbHVkZWRVcmxzOiBFeGNsdWRlZFVybFJlZ2V4W107XG4gIC8qKlxuICAgKiBPYnNlcnZlciBmb3IgdGhlIGtleWNsb2FrIGV2ZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBfa2V5Y2xvYWtFdmVudHMkOiBTdWJqZWN0PEtleWNsb2FrRXZlbnQ+ID0gbmV3IFN1YmplY3Q8XG4gICAgS2V5Y2xvYWtFdmVudFxuICA+KCk7XG5cbiAgLyoqXG4gICAqIEJpbmRzIHRoZSBrZXljbG9hay1qcyBldmVudHMgdG8gdGhlIGtleWNsb2FrRXZlbnRzIFN1YmplY3RcbiAgICogd2hpY2ggaXMgYSBnb29kIHdheSB0byBtb25pdG9yIGZvciBjaGFuZ2VzLCBpZiBuZWVkZWQuXG4gICAqXG4gICAqIFRoZSBrZXljbG9ha0V2ZW50cyByZXR1cm5zIHRoZSBrZXljbG9hay1qcyBldmVudCB0eXBlIGFuZCBhbnlcbiAgICogYXJndW1lbnQgaWYgdGhlIHNvdXJjZSBmdW5jdGlvbiBwcm92aWRlcyBhbnkuXG4gICAqL1xuICBwcml2YXRlIGJpbmRzS2V5Y2xvYWtFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoRXJyb3IgPSAoZXJyb3JEYXRhKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIGFyZ3M6IGVycm9yRGF0YSxcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoRXJyb3IsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoTG9nb3V0ID0gKCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoeyB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhMb2dvdXQgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uQXV0aFJlZnJlc2hTdWNjZXNzID0gKCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhSZWZyZXNoU3VjY2VzcyxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhSZWZyZXNoRXJyb3IgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aFJlZnJlc2hFcnJvcixcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhTdWNjZXNzID0gKCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoeyB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhTdWNjZXNzIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vblRva2VuRXhwaXJlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHtcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25Ub2tlbkV4cGlyZWQsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25SZWFkeSA9IChhdXRoZW50aWNhdGVkKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIGFyZ3M6IGF1dGhlbnRpY2F0ZWQsXG4gICAgICAgIHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uUmVhZHksXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGFsbCBiZWFyZXJFeGNsdWRlZFVybCBjb250ZW50IGluIGEgdW5pZm9ybSB0eXBlOiBFeGNsdWRlZFVybCxcbiAgICogc28gaXQgYmVjb21lcyBlYXNpZXIgdG8gaGFuZGxlLlxuICAgKlxuICAgKiBAcGFyYW0gYmVhcmVyRXhjbHVkZWRVcmxzIGFycmF5IG9mIHN0cmluZ3Mgb3IgRXhjbHVkZWRVcmwgdGhhdCBpbmNsdWRlc1xuICAgKiB0aGUgdXJsIGFuZCBIdHRwTWV0aG9kLlxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkRXhjbHVkZWRVcmxzKFxuICAgIGJlYXJlckV4Y2x1ZGVkVXJsczogKHN0cmluZyB8IEV4Y2x1ZGVkVXJsKVtdXG4gICk6IEV4Y2x1ZGVkVXJsUmVnZXhbXSB7XG4gICAgY29uc3QgZXhjbHVkZWRVcmxzOiBFeGNsdWRlZFVybFJlZ2V4W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYmVhcmVyRXhjbHVkZWRVcmxzKSB7XG4gICAgICBsZXQgZXhjbHVkZWRVcmw6IEV4Y2x1ZGVkVXJsUmVnZXg7XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGV4Y2x1ZGVkVXJsID0geyB1cmxQYXR0ZXJuOiBuZXcgUmVnRXhwKGl0ZW0sICdpJyksIGh0dHBNZXRob2RzOiBbXSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhjbHVkZWRVcmwgPSB7XG4gICAgICAgICAgdXJsUGF0dGVybjogbmV3IFJlZ0V4cChpdGVtLnVybCwgJ2knKSxcbiAgICAgICAgICBodHRwTWV0aG9kczogaXRlbS5odHRwTWV0aG9kcyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGV4Y2x1ZGVkVXJscy5wdXNoKGV4Y2x1ZGVkVXJsKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4Y2x1ZGVkVXJscztcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBjbGFzcyB2YWx1ZXMgaW5pdGlhbGl6YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIGluaXRTZXJ2aWNlVmFsdWVzKHtcbiAgICBlbmFibGVCZWFyZXJJbnRlcmNlcHRvciA9IHRydWUsXG4gICAgbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwID0gdHJ1ZSxcbiAgICBiZWFyZXJFeGNsdWRlZFVybHMgPSBbXSxcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyTmFtZSA9ICdBdXRob3JpemF0aW9uJyxcbiAgICBiZWFyZXJQcmVmaXggPSAnYmVhcmVyJyxcbiAgICBpbml0T3B0aW9ucyxcbiAgfTogS2V5Y2xvYWtPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fZW5hYmxlQmVhcmVySW50ZXJjZXB0b3IgPSBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcjtcbiAgICB0aGlzLl9sb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXAgPSBsb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXA7XG4gICAgdGhpcy5fYXV0aG9yaXphdGlvbkhlYWRlck5hbWUgPSBhdXRob3JpemF0aW9uSGVhZGVyTmFtZTtcbiAgICB0aGlzLl9iZWFyZXJQcmVmaXggPSBiZWFyZXJQcmVmaXgudHJpbSgpLmNvbmNhdCgnICcpO1xuICAgIHRoaXMuX2V4Y2x1ZGVkVXJscyA9IHRoaXMubG9hZEV4Y2x1ZGVkVXJscyhiZWFyZXJFeGNsdWRlZFVybHMpO1xuICAgIHRoaXMuX3NpbGVudFJlZnJlc2ggPSBpbml0T3B0aW9ucyA/IGluaXRPcHRpb25zLmZsb3cgPT09ICdpbXBsaWNpdCcgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBLZXljbG9hayBpbml0aWFsaXphdGlvbi4gSXQgc2hvdWxkIGJlIGNhbGxlZCB0byBpbml0aWFsaXplIHRoZSBhZGFwdGVyLlxuICAgKiBPcHRpb25zIGlzIGEgb2JqZWN0IHdpdGggMiBtYWluIHBhcmFtZXRlcnM6IGNvbmZpZyBhbmQgaW5pdE9wdGlvbnMuIFRoZSBmaXJzdCBvbmVcbiAgICogd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgS2V5Y2xvYWsgaW5zdGFuY2UuIFRoZSBzZWNvbmQgb25lIGFyZSBvcHRpb25zIHRvIGluaXRpYWxpemUgdGhlXG4gICAqIGtleWNsb2FrIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBDb25maWc6IG1heSBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGtleWNsb2FrIFVSSSBvciBhbiBvYmplY3Qgd2l0aCB0aGVcbiAgICogZm9sbG93aW5nIGNvbnRlbnQ6XG4gICAqIC0gdXJsOiBLZXljbG9hayBqc29uIFVSTFxuICAgKiAtIHJlYWxtOiByZWFsbSBuYW1lXG4gICAqIC0gY2xpZW50SWQ6IGNsaWVudCBpZFxuICAgKlxuICAgKiBpbml0T3B0aW9uczpcbiAgICogT3B0aW9ucyB0byBpbml0aWFsaXplIHRoZSBLZXljbG9hayBhZGFwdGVyLCBtYXRjaGVzIHRoZSBvcHRpb25zIGFzIHByb3ZpZGVkIGJ5IEtleWNsb2FrIGl0c2VsZi5cbiAgICpcbiAgICogZW5hYmxlQmVhcmVySW50ZXJjZXB0b3I6XG4gICAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGJlYXJlciB3aWxsIGFkZGVkIHRvIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICpcbiAgICogbG9hZFVzZXJQcm9maWxlSW5TdGFydFVwOlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBwcm9maWxlIHNob3VsZCBiZSBsb2FkZWQgYXQgdGhlIGtleWNsb2FrIGluaXRpYWxpemF0aW9uLFxuICAgKiBqdXN0IGFmdGVyIHRoZSBsb2dpbi5cbiAgICpcbiAgICogYmVhcmVyRXhjbHVkZWRVcmxzOlxuICAgKiBTdHJpbmcgQXJyYXkgdG8gZXhjbHVkZSB0aGUgdXJscyB0aGF0IHNob3VsZCBub3QgaGF2ZSB0aGUgQXV0aG9yaXphdGlvbiBIZWFkZXIgYXV0b21hdGljYWxseVxuICAgKiBhZGRlZC5cbiAgICpcbiAgICogYXV0aG9yaXphdGlvbkhlYWRlck5hbWU6XG4gICAqIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBBdXRob3JpemF0aW9uIEh0dHAgSGVhZGVyIG5hbWUuXG4gICAqXG4gICAqIGJlYXJlclByZWZpeDpcbiAgICogVGhpcyB2YWx1ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBBdXRob3JpemF0aW9uIEh0dHAgSGVhZGVyIHBhcmFtLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIFByb21pc2Ugd2l0aCBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgaW5pdGlhbGl6YXRpb24gd2FzIHN1Y2Nlc3NmdWwuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW5pdChvcHRpb25zOiBLZXljbG9ha09wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuaW5pdFNlcnZpY2VWYWx1ZXMob3B0aW9ucyk7XG4gICAgY29uc3QgeyBjb25maWcsIGluaXRPcHRpb25zIH0gPSBvcHRpb25zO1xuXG4gICAgdGhpcy5faW5zdGFuY2UgPSBLZXljbG9hayhjb25maWcpO1xuICAgIHRoaXMuYmluZHNLZXljbG9ha0V2ZW50cygpO1xuXG4gICAgY29uc3QgYXV0aGVudGljYXRlZCA9IGF3YWl0IHRvUHJvbWlzZSh0aGlzLl9pbnN0YW5jZS5pbml0KGluaXRPcHRpb25zKSk7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZCAmJiB0aGlzLl9sb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXApIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF1dGhlbnRpY2F0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVkaXJlY3RzIHRvIGxvZ2luIGZvcm0gb24gKG9wdGlvbnMgaXMgYW4gb3B0aW9uYWwgb2JqZWN0IHdpdGggcmVkaXJlY3RVcmkgYW5kL29yXG4gICAqIHByb21wdCBmaWVsZHMpLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBPYmplY3QsIHdoZXJlOlxuICAgKiAgLSByZWRpcmVjdFVyaTogU3BlY2lmaWVzIHRoZSB1cmkgdG8gcmVkaXJlY3QgdG8gYWZ0ZXIgbG9naW4uXG4gICAqICAtIHByb21wdDpCeSBkZWZhdWx0IHRoZSBsb2dpbiBzY3JlZW4gaXMgZGlzcGxheWVkIGlmIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQtaW4gdG8gS2V5Y2xvYWsuXG4gICAqIFRvIG9ubHkgYXV0aGVudGljYXRlIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiB0aGUgdXNlciBpcyBhbHJlYWR5IGxvZ2dlZC1pbiBhbmQgbm90IGRpc3BsYXkgdGhlXG4gICAqIGxvZ2luIHBhZ2UgaWYgdGhlIHVzZXIgaXMgbm90IGxvZ2dlZC1pbiwgc2V0IHRoaXMgb3B0aW9uIHRvIG5vbmUuIFRvIGFsd2F5cyByZXF1aXJlXG4gICAqIHJlLWF1dGhlbnRpY2F0aW9uIGFuZCBpZ25vcmUgU1NPLCBzZXQgdGhpcyBvcHRpb24gdG8gbG9naW4gLlxuICAgKiAgLSBtYXhBZ2U6IFVzZWQganVzdCBpZiB1c2VyIGlzIGFscmVhZHkgYXV0aGVudGljYXRlZC4gU3BlY2lmaWVzIG1heGltdW0gdGltZSBzaW5jZSB0aGVcbiAgICogYXV0aGVudGljYXRpb24gb2YgdXNlciBoYXBwZW5lZC4gSWYgdXNlciBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQgZm9yIGxvbmdlciB0aW1lIHRoYW5cbiAgICogbWF4QWdlLCB0aGUgU1NPIGlzIGlnbm9yZWQgYW5kIGhlIHdpbGwgbmVlZCB0byByZS1hdXRoZW50aWNhdGUgYWdhaW4uXG4gICAqICAtIGxvZ2luSGludDogVXNlZCB0byBwcmUtZmlsbCB0aGUgdXNlcm5hbWUvZW1haWwgZmllbGQgb24gdGhlIGxvZ2luIGZvcm0uXG4gICAqICAtIGFjdGlvbjogSWYgdmFsdWUgaXMgJ3JlZ2lzdGVyJyB0aGVuIHVzZXIgaXMgcmVkaXJlY3RlZCB0byByZWdpc3RyYXRpb24gcGFnZSwgb3RoZXJ3aXNlIHRvXG4gICAqIGxvZ2luIHBhZ2UuXG4gICAqICAtIGxvY2FsZTogU3BlY2lmaWVzIHRoZSBkZXNpcmVkIGxvY2FsZSBmb3IgdGhlIFVJLlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIHZvaWQgUHJvbWlzZSBpZiB0aGUgbG9naW4gaXMgc3VjY2Vzc2Z1bCBhbmQgYWZ0ZXIgdGhlIHVzZXIgcHJvZmlsZSBsb2FkaW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvZ2luKG9wdGlvbnM6IEtleWNsb2FrLktleWNsb2FrTG9naW5PcHRpb25zID0ge30pIHtcbiAgICBhd2FpdCB0b1Byb21pc2UodGhpcy5faW5zdGFuY2UubG9naW4ob3B0aW9ucykpO1xuXG4gICAgaWYgKHRoaXMuX2xvYWRVc2VyUHJvZmlsZUF0U3RhcnRVcCkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVkaXJlY3RzIHRvIGxvZ291dC5cbiAgICpcbiAgICogQHBhcmFtIHJlZGlyZWN0VXJpXG4gICAqIFNwZWNpZmllcyB0aGUgdXJpIHRvIHJlZGlyZWN0IHRvIGFmdGVyIGxvZ291dC5cbiAgICogQHJldHVybnNcbiAgICogQSB2b2lkIFByb21pc2UgaWYgdGhlIGxvZ291dCB3YXMgc3VjY2Vzc2Z1bCwgY2xlYW5pbmcgYWxzbyB0aGUgdXNlclByb2ZpbGUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9nb3V0KHJlZGlyZWN0VXJpPzogc3RyaW5nKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJlZGlyZWN0VXJpLFxuICAgIH07XG5cbiAgICBhd2FpdCB0b1Byb21pc2UodGhpcy5faW5zdGFuY2UubG9nb3V0KG9wdGlvbnMpKTtcbiAgICB0aGlzLl91c2VyUHJvZmlsZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRpcmVjdHMgdG8gcmVnaXN0cmF0aW9uIGZvcm0uIFNob3J0Y3V0IGZvciBsb2dpbiB3aXRoIG9wdGlvblxuICAgKiBhY3Rpb24gPSAncmVnaXN0ZXInLiBPcHRpb25zIGFyZSBzYW1lIGFzIGZvciB0aGUgbG9naW4gbWV0aG9kIGJ1dCAnYWN0aW9uJyBpcyBzZXQgdG9cbiAgICogJ3JlZ2lzdGVyJy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogbG9naW4gb3B0aW9uc1xuICAgKiBAcmV0dXJuc1xuICAgKiBBIHZvaWQgUHJvbWlzZSBpZiB0aGUgcmVnaXN0ZXIgZmxvdyB3YXMgc3VjY2Vzc2Z1bC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWdpc3RlcihcbiAgICBvcHRpb25zOiBLZXljbG9hay5LZXljbG9ha0xvZ2luT3B0aW9ucyA9IHsgYWN0aW9uOiAncmVnaXN0ZXInIH1cbiAgKSB7XG4gICAgYXdhaXQgdG9Qcm9taXNlKHRoaXMuX2luc3RhbmNlLnJlZ2lzdGVyKG9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgdXNlciBoYXMgYWNjZXNzIHRvIHRoZSBzcGVjaWZpZWQgcm9sZS4gSXQgd2lsbCBsb29rIGZvciByb2xlcyBpblxuICAgKiByZWFsbSBhbmQgY2xpZW50SWQsIGJ1dCB3aWxsIG5vdCBjaGVjayBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4gZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHJvbGVcbiAgICogcm9sZSBuYW1lXG4gICAqIEBwYXJhbSByZXNvdXJjZVxuICAgKiByZXNvdXJjZSBuYW1lIElmIG5vdCBzcGVjaWZpZWQsIGBjbGllbnRJZGAgaXMgdXNlZFxuICAgKiBAcmV0dXJuc1xuICAgKiBBIGJvb2xlYW4gbWVhbmluZyBpZiB0aGUgdXNlciBoYXMgdGhlIHNwZWNpZmllZCBSb2xlLlxuICAgKi9cbiAgaXNVc2VySW5Sb2xlKHJvbGU6IHN0cmluZywgcmVzb3VyY2U/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgaGFzUm9sZTogYm9vbGVhbjtcbiAgICBoYXNSb2xlID0gdGhpcy5faW5zdGFuY2UuaGFzUmVzb3VyY2VSb2xlKHJvbGUsIHJlc291cmNlKTtcbiAgICBpZiAoIWhhc1JvbGUpIHtcbiAgICAgIGhhc1JvbGUgPSB0aGlzLl9pbnN0YW5jZS5oYXNSZWFsbVJvbGUocm9sZSk7XG4gICAgfVxuICAgIHJldHVybiBoYXNSb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcm9sZXMgb2YgdGhlIGxvZ2dlZCB1c2VyLiBUaGUgYWxsUm9sZXMgcGFyYW1ldGVyLCB3aXRoIGRlZmF1bHQgdmFsdWVcbiAgICogdHJ1ZSwgd2lsbCByZXR1cm4gdGhlIGNsaWVudElkIGFuZCByZWFsbSByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvZ2dlZCB1c2VyLiBJZiBzZXQgdG8gZmFsc2VcbiAgICogaXQgd2lsbCBvbmx5IHJldHVybiB0aGUgdXNlciByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNsaWVudElkLlxuICAgKlxuICAgKiBAcGFyYW0gYWxsUm9sZXNcbiAgICogRmxhZyB0byBzZXQgaWYgYWxsIHJvbGVzIHNob3VsZCBiZSByZXR1cm5lZC4oT3B0aW9uYWw6IGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZSlcbiAgICogQHJldHVybnNcbiAgICogQXJyYXkgb2YgUm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb2dnZWQgdXNlci5cbiAgICovXG4gIGdldFVzZXJSb2xlcyhhbGxSb2xlczogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLl9pbnN0YW5jZS5yZXNvdXJjZUFjY2Vzcykge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5faW5zdGFuY2UucmVzb3VyY2VBY2Nlc3MpIHtcbiAgICAgICAgaWYgKHRoaXMuX2luc3RhbmNlLnJlc291cmNlQWNjZXNzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBjb25zdCByZXNvdXJjZUFjY2VzczogYW55ID0gdGhpcy5faW5zdGFuY2UucmVzb3VyY2VBY2Nlc3Nba2V5XTtcbiAgICAgICAgICBjb25zdCBjbGllbnRSb2xlcyA9IHJlc291cmNlQWNjZXNzWydyb2xlcyddIHx8IFtdO1xuICAgICAgICAgIHJvbGVzID0gcm9sZXMuY29uY2F0KGNsaWVudFJvbGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsUm9sZXMgJiYgdGhpcy5faW5zdGFuY2UucmVhbG1BY2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlYWxtUm9sZXMgPSB0aGlzLl9pbnN0YW5jZS5yZWFsbUFjY2Vzc1sncm9sZXMnXSB8fCBbXTtcbiAgICAgIHJvbGVzLnB1c2goLi4ucmVhbG1Sb2xlcyk7XG4gICAgfVxuICAgIHJldHVybiByb2xlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB1c2VyIGlzIGxvZ2dlZCBpbi5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogQSBib29sZWFuIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbi5cbiAgICovXG4gIGFzeW5jIGlzTG9nZ2VkSW4oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5faW5zdGFuY2UuYXV0aGVudGljYXRlZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVRva2VuKDIwKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdG9rZW4gaGFzIGxlc3MgdGhhbiBtaW5WYWxpZGl0eSBzZWNvbmRzIGxlZnQgYmVmb3JlXG4gICAqIGl0IGV4cGlyZXMuXG4gICAqXG4gICAqIEBwYXJhbSBtaW5WYWxpZGl0eVxuICAgKiBTZWNvbmRzIGxlZnQuIChtaW5WYWxpZGl0eSkgaXMgb3B0aW9uYWwuIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAgICogQHJldHVybnNcbiAgICogQm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB0b2tlbiBpcyBleHBpcmVkLlxuICAgKi9cbiAgaXNUb2tlbkV4cGlyZWQobWluVmFsaWRpdHk6IG51bWJlciA9IDApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuaXNUb2tlbkV4cGlyZWQobWluVmFsaWRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSB0b2tlbiBleHBpcmVzIHdpdGhpbiBtaW5WYWxpZGl0eSBzZWNvbmRzIHRoZSB0b2tlbiBpcyByZWZyZXNoZWQuIElmIHRoZVxuICAgKiBzZXNzaW9uIHN0YXR1cyBpZnJhbWUgaXMgZW5hYmxlZCwgdGhlIHNlc3Npb24gc3RhdHVzIGlzIGFsc28gY2hlY2tlZC5cbiAgICogUmV0dXJucyBhIHByb21pc2UgdGVsbGluZyBpZiB0aGUgdG9rZW4gd2FzIHJlZnJlc2hlZCBvciBub3QuIElmIHRoZSBzZXNzaW9uIGlzIG5vdCBhY3RpdmVcbiAgICogYW55bW9yZSwgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBtaW5WYWxpZGl0eVxuICAgKiBTZWNvbmRzIGxlZnQuIChtaW5WYWxpZGl0eSBpcyBvcHRpb25hbCwgaWYgbm90IHNwZWNpZmllZCA1IGlzIHVzZWQpXG4gICAqIEByZXR1cm5zXG4gICAqIFByb21pc2Ugd2l0aCBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdG9rZW4gd2FzIHN1Y2Nlc2Z1bGx5IHVwZGF0ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlVG9rZW4obWluVmFsaWRpdHkgPSA1KSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIHdvcmthcm91bmQgdW50aWwgdGhlIHNpbGVudCByZWZyZXNoIChpc3N1ZSAjNDMpXG4gICAgLy8gaXMgbm90IGltcGxlbWVudGVkLCBhdm9pZGluZyB0aGUgcmVkaXJlY3QgbG9vcC5cbiAgICBpZiAodGhpcy5fc2lsZW50UmVmcmVzaCkge1xuICAgICAgaWYgKHRoaXMuaXNUb2tlbkV4cGlyZWQoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0ZhaWxlZCB0byByZWZyZXNoIHRoZSB0b2tlbiwgb3IgdGhlIHNlc3Npb24gaXMgZXhwaXJlZCdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdLZXljbG9hayBBbmd1bGFyIGxpYnJhcnkgaXMgbm90IGluaXRpYWxpemVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiB0b1Byb21pc2UodGhpcy5faW5zdGFuY2UudXBkYXRlVG9rZW4obWluVmFsaWRpdHkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgdXNlciBwcm9maWxlLlxuICAgKiBSZXR1cm5zIHByb21pc2UgdG8gc2V0IGZ1bmN0aW9ucyB0byBiZSBpbnZva2VkIGlmIHRoZSBwcm9maWxlIHdhcyBsb2FkZWRcbiAgICogc3VjY2Vzc2Z1bGx5LCBvciBpZiB0aGUgcHJvZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZm9yY2VSZWxvYWRcbiAgICogSWYgdHJ1ZSB3aWxsIGZvcmNlIHRoZSBsb2FkVXNlclByb2ZpbGUgZXZlbiBpZiBpdHMgYWxyZWFkeSBsb2FkZWQuXG4gICAqIEByZXR1cm5zXG4gICAqIEEgcHJvbWlzZSB3aXRoIHRoZSBLZXljbG9ha1Byb2ZpbGUgZGF0YSBsb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZFVzZXJQcm9maWxlKGZvcmNlUmVsb2FkID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5fdXNlclByb2ZpbGUgJiYgIWZvcmNlUmVsb2FkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdXNlclByb2ZpbGU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pbnN0YW5jZS5hdXRoZW50aWNhdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdUaGUgdXNlciBwcm9maWxlIHdhcyBub3QgbG9hZGVkIGFzIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4uJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKHRoaXMuX3VzZXJQcm9maWxlID0gYXdhaXQgdG9Qcm9taXNlKFxuICAgICAgdGhpcy5faW5zdGFuY2UubG9hZFVzZXJQcm9maWxlKClcbiAgICApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhdXRoZW50aWNhdGVkIHRva2VuLCBjYWxsaW5nIHVwZGF0ZVRva2VuIHRvIGdldCBhIHJlZnJlc2hlZCBvbmUgaWZcbiAgICogbmVjZXNzYXJ5LiBJZiB0aGUgc2Vzc2lvbiBpcyBleHBpcmVkIGFuZCB0aGUgZm9yY2VMb2dpbiBmbGFnIGlzIHNldCB0byB0cnVlLFxuICAgKiB0aGlzIG1ldGhvZCBjYWxscyB0aGUgbG9naW4gbWV0aG9kIGZvciBhIG5ldyBsb2dpbiwgb3RoZXJ3aXNlIHJlamVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSBmb3JjZUxvZ2luXG4gICAqIEZsYWcgd2hldGhlciBhIGxvZ2luIHNob3VsZCBiZSBlbmZvcmNlZCBpZiB0aGUgc2Vzc2lvbiBpcyBleHBpcmVkLlxuICAgKiBAcmV0dXJuc1xuICAgKiBQcm9taXNlIHdpdGggdGhlIGdlbmVyYXRlZCB0b2tlbi5cbiAgICovXG4gIGFzeW5jIGdldFRva2VuKGZvcmNlTG9naW4gPSB0cnVlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVUb2tlbigxMCk7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UudG9rZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChmb3JjZUxvZ2luKSB7XG4gICAgICAgIHRoaXMubG9naW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsb2dnZWQgdXNlcm5hbWUuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIFRoZSBsb2dnZWQgdXNlcm5hbWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0VXNlcm5hbWUoKSB7XG4gICAgaWYgKCF0aGlzLl91c2VyUHJvZmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBsb2dnZWQgaW4gb3IgdXNlciBwcm9maWxlIHdhcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl91c2VyUHJvZmlsZS51c2VybmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhdXRoZW50aWNhdGlvbiBzdGF0ZSwgaW5jbHVkaW5nIHRva2Vucy4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIGFwcGxpY2F0aW9uXG4gICAqIGhhcyBkZXRlY3RlZCB0aGUgc2Vzc2lvbiB3YXMgZXhwaXJlZCwgZm9yIGV4YW1wbGUgaWYgdXBkYXRpbmcgdG9rZW4gZmFpbHMuXG4gICAqIEludm9raW5nIHRoaXMgcmVzdWx0cyBpbiBvbkF1dGhMb2dvdXQgY2FsbGJhY2sgbGlzdGVuZXIgYmVpbmcgaW52b2tlZC5cbiAgICovXG4gIGNsZWFyVG9rZW4oKTogdm9pZCB7XG4gICAgdGhpcy5faW5zdGFuY2UuY2xlYXJUb2tlbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB2YWxpZCB0b2tlbiBpbiBoZWFkZXIuIFRoZSBrZXkgJiB2YWx1ZSBmb3JtYXQgaXM6XG4gICAqIEF1dGhvcml6YXRpb24gQmVhcmVyIDx0b2tlbj4uXG4gICAqIElmIHRoZSBoZWFkZXJzIHBhcmFtIGlzIHVuZGVmaW5lZCBpdCB3aWxsIGNyZWF0ZSB0aGUgQW5ndWxhciBoZWFkZXJzIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIGhlYWRlcnNcbiAgICogVXBkYXRlZCBoZWFkZXIgd2l0aCBBdXRob3JpemF0aW9uIGFuZCBLZXljbG9hayB0b2tlbi5cbiAgICogQHJldHVybnNcbiAgICogQW4gb2JzZXJ2YWJsZSB3aXRoIHdpdGggdGhlIEhUVFAgQXV0aG9yaXphdGlvbiBoZWFkZXIgYW5kIHRoZSBjdXJyZW50IHRva2VuLlxuICAgKi9cbiAgcHVibGljIGFkZFRva2VuVG9IZWFkZXIoaGVhZGVyczogSHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKSkge1xuICAgIHJldHVybiBmcm9tKHRoaXMuZ2V0VG9rZW4oKSkucGlwZShcbiAgICAgIG1hcCgodG9rZW4pID0+XG4gICAgICAgIGhlYWRlcnMuc2V0KHRoaXMuX2F1dGhvcml6YXRpb25IZWFkZXJOYW1lLCB0aGlzLl9iZWFyZXJQcmVmaXggKyB0b2tlbilcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbmFsIEtleWNsb2FrIGluc3RhbmNlLCBpZiB5b3UgbmVlZCBhbnkgY3VzdG9taXphdGlvbiB0aGF0XG4gICAqIHRoaXMgQW5ndWxhciBzZXJ2aWNlIGRvZXMgbm90IHN1cHBvcnQgeWV0LiBVc2Ugd2l0aCBjYXV0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBUaGUgS2V5Y2xvYWtJbnN0YW5jZSBmcm9tIGtleWNsb2FrLWpzLlxuICAgKi9cbiAgZ2V0S2V5Y2xvYWtJbnN0YW5jZSgpOiBLZXljbG9hay5LZXljbG9ha0luc3RhbmNlIHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXhjbHVkZWQgVVJMcyB0aGF0IHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBieVxuICAgKiB0aGUgaHR0cCBpbnRlcmNlcHRvciB3aGljaCBhdXRvbWF0aWNhbGx5IGFkZHMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIGluIHRoZSBIdHRwIFJlcXVlc3QuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIFRoZSBleGNsdWRlZCB1cmxzIHRoYXQgbXVzdCBub3QgYmUgaW50ZXJjZXB0ZWQgYnkgdGhlIEtleWNsb2FrQmVhcmVySW50ZXJjZXB0b3IuXG4gICAqL1xuICBnZXQgZXhjbHVkZWRVcmxzKCk6IEV4Y2x1ZGVkVXJsUmVnZXhbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4Y2x1ZGVkVXJscztcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGFnIHRvIGluZGljYXRlIGlmIHRoZSBiZWFyZXIgd2lsbCBiZSBhZGRlZCB0byB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIFJldHVybnMgaWYgdGhlIGJlYXJlciBpbnRlcmNlcHRvciB3YXMgc2V0IHRvIGJlIGRpc2FibGVkLlxuICAgKi9cbiAgZ2V0IGVuYWJsZUJlYXJlckludGVyY2VwdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVCZWFyZXJJbnRlcmNlcHRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBLZXljbG9hayBzdWJqZWN0IHRvIG1vbml0b3IgdGhlIGV2ZW50cyB0cmlnZ2VyZWQgYnkga2V5Y2xvYWstanMuXG4gICAqIFRoZSBmb2xsb3dpbmcgZXZlbnRzIGFzIGF2YWlsYWJsZSAoYXMgZGVzY3JpYmVkIGF0IGtleWNsb2FrIGRvY3MgLVxuICAgKiBodHRwczovL3d3dy5rZXljbG9hay5vcmcvZG9jcy9sYXRlc3Qvc2VjdXJpbmdfYXBwcy9pbmRleC5odG1sI2NhbGxiYWNrLWV2ZW50cyk6XG4gICAqIC0gT25BdXRoRXJyb3JcbiAgICogLSBPbkF1dGhMb2dvdXRcbiAgICogLSBPbkF1dGhSZWZyZXNoRXJyb3JcbiAgICogLSBPbkF1dGhSZWZyZXNoU3VjY2Vzc1xuICAgKiAtIE9uQXV0aFN1Y2Nlc3NcbiAgICogLSBPblJlYWR5XG4gICAqIC0gT25Ub2tlbkV4cGlyZVxuICAgKiBJbiBlYWNoIG9jY3VycmVuY2Ugb2YgYW55IG9mIHRoZXNlLCB0aGlzIHN1YmplY3Qgd2lsbCByZXR1cm4gdGhlIGV2ZW50IHR5cGUsXG4gICAqIGRlc2NyaWJlZCBhdCB7QGxpbmsgS2V5Y2xvYWtFdmVudFR5cGV9IGVudW0gYW5kIHRoZSBmdW5jdGlvbiBhcmdzIGZyb20gdGhlIGtleWNsb2FrLWpzXG4gICAqIGlmIHByb3ZpZGVkIGFueS5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogQSBzdWJqZWN0IHdpdGggdGhlIHtAbGluayBLZXljbG9ha0V2ZW50fSB3aGljaCBkZXNjcmliZXMgdGhlIGV2ZW50IHR5cGUgYW5kIGF0dGFjaGVzIHRoZVxuICAgKiBmdW5jdGlvbiBhcmdzLlxuICAgKi9cbiAgZ2V0IGtleWNsb2FrRXZlbnRzJCgpOiBTdWJqZWN0PEtleWNsb2FrRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fa2V5Y2xvYWtFdmVudHMkO1xuICB9XG59XG4iXX0=
205
+ }
206
+ KeycloakService.decorators = [
207
+ { type: Injectable }
208
+ ];
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWsuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FrLWFuZ3VsYXIvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2tleWNsb2FrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQVFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxPQUFPLEtBQUssU0FBUyxNQUFNLGFBQWEsQ0FBQztBQUN6QyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBT2xDLE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVVoRixNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQXVDVSxxQkFBZ0IsR0FBMkIsSUFBSSxPQUFPLEVBRTNELENBQUM7SUFpY04sQ0FBQztJQXhiUyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUN6QixJQUFJLEVBQUUsU0FBUztnQkFDZixJQUFJLEVBQUUsaUJBQWlCLENBQUMsV0FBVzthQUNwQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQztR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QyxDQUFDO1lBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDOUIsQ0FBQztLQUFBO0lBUU0sV0FBVztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7U0FDdkU7UUFFRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFPRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBWU0sZ0JBQWdCLENBQUMsVUFBdUIsSUFBSSxXQUFXLEVBQUU7UUFDOUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMvQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNaLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN6RixDQUNGLENBQUM7SUFDSixDQUFDO0lBU0QsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBU0QsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFRRCxJQUFJLHVCQUF1QjtRQUN6QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztJQUN2QyxDQUFDO0lBcUJELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDOzs7WUF6ZUYsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8vIFdvcmthcm91bmQgZm9yIHJvbGx1cCBsaWJyYXJ5IGJlaGF2aW91ciwgYXMgcG9pbnRlZCBvdXQgb24gaXNzdWUgIzEyNjcgKGh0dHBzOi8vZ2l0aHViLmNvbS9yb2xsdXAvcm9sbHVwL2lzc3Vlcy8xMjY3KS5cbmltcG9ydCAqIGFzIEtleWNsb2FrXyBmcm9tICdrZXljbG9hay1qcyc7XG5leHBvcnQgY29uc3QgS2V5Y2xvYWsgPSBLZXljbG9ha187XG5cbmltcG9ydCB7XG4gIEV4Y2x1ZGVkVXJsLFxuICBFeGNsdWRlZFVybFJlZ2V4LFxuICBLZXljbG9ha09wdGlvbnMsXG59IGZyb20gJy4uL2ludGVyZmFjZXMva2V5Y2xvYWstb3B0aW9ucyc7XG5pbXBvcnQgeyBLZXljbG9ha0V2ZW50LCBLZXljbG9ha0V2ZW50VHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMva2V5Y2xvYWstZXZlbnQnO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gZXhwb3NlIGV4aXN0ZW50IG1ldGhvZHMgZnJvbSB0aGUgS2V5Y2xvYWsgSlMgYWRhcHRlciwgYWRkaW5nIG5ld1xuICogZnVuY3Rpb25hbGl0aWVzIHRvIGltcHJvdmUgdGhlIHVzZSBvZiBrZXljbG9hayBpbiBBbmd1bGFyIHYgPiA0LjMgYXBwbGljYXRpb25zLlxuICpcbiAqIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGluamVjdGVkIGluIHRoZSBhcHBsaWNhdGlvbiBib290c3RyYXAsIHNvIHRoZSBzYW1lIGluc3RhbmNlIHdpbGwgYmUgdXNlZFxuICogYWxvbmcgdGhlIHdlYiBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEtleWNsb2FrU2VydmljZSB7XG4gIC8qKlxuICAgKiBLZXljbG9hay1qcyBpbnN0YW5jZS5cbiAgICovXG4gIHByaXZhdGUgX2luc3RhbmNlOiBLZXljbG9hay5LZXljbG9ha0luc3RhbmNlO1xuICAvKipcbiAgICogVXNlciBwcm9maWxlIGFzIEtleWNsb2FrUHJvZmlsZSBpbnRlcmZhY2UuXG4gICAqL1xuICBwcml2YXRlIF91c2VyUHJvZmlsZTogS2V5Y2xvYWsuS2V5Y2xvYWtQcm9maWxlO1xuICAvKipcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgYmVhcmVyIHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICovXG4gIHByaXZhdGUgX2VuYWJsZUJlYXJlckludGVyY2VwdG9yOiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0aGUgaW1wbGljaXQgZmxvdyBpcyBjaG9vc2VuIHRoZXJlIG11c3QgZXhpc3QgYSBzaWxlbnRSZWZyZXNoLCBhcyB0aGVyZSBpc1xuICAgKiBubyByZWZyZXNoIHRva2VuLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2lsZW50UmVmcmVzaDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSB1c2VyIHByb2ZpbGUgc2hvdWxkIGJlIGxvYWRlZCBhdCB0aGUga2V5Y2xvYWsgaW5pdGlhbGl6YXRpb24sXG4gICAqIGp1c3QgYWZ0ZXIgdGhlIGxvZ2luLlxuICAgKi9cbiAgcHJpdmF0ZSBfbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwOiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGJlYXJlciBwcmVmaXggdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBBdXRob3JpemF0aW9uIEhlYWRlci5cbiAgICovXG4gIHByaXZhdGUgX2JlYXJlclByZWZpeDogc3RyaW5nO1xuICAvKipcbiAgICogVmFsdWUgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIEF1dGhvcml6YXRpb24gSHR0cCBIZWFkZXIgbmFtZS5cbiAgICovXG4gIHByaXZhdGUgX2F1dGhvcml6YXRpb25IZWFkZXJOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZXhjbHVkZWQgdXJscyBwYXR0ZXJucyB0aGF0IG11c3Qgc2tpcCB0aGUgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvci5cbiAgICovXG4gIHByaXZhdGUgX2V4Y2x1ZGVkVXJsczogRXhjbHVkZWRVcmxSZWdleFtdO1xuICAvKipcbiAgICogT2JzZXJ2ZXIgZm9yIHRoZSBrZXljbG9hayBldmVudHNcbiAgICovXG4gIHByaXZhdGUgX2tleWNsb2FrRXZlbnRzJDogU3ViamVjdDxLZXljbG9ha0V2ZW50PiA9IG5ldyBTdWJqZWN0PFxuICAgIEtleWNsb2FrRXZlbnRcbiAgPigpO1xuXG4gIC8qKlxuICAgKiBCaW5kcyB0aGUga2V5Y2xvYWstanMgZXZlbnRzIHRvIHRoZSBrZXljbG9ha0V2ZW50cyBTdWJqZWN0XG4gICAqIHdoaWNoIGlzIGEgZ29vZCB3YXkgdG8gbW9uaXRvciBmb3IgY2hhbmdlcywgaWYgbmVlZGVkLlxuICAgKlxuICAgKiBUaGUga2V5Y2xvYWtFdmVudHMgcmV0dXJucyB0aGUga2V5Y2xvYWstanMgZXZlbnQgdHlwZSBhbmQgYW55XG4gICAqIGFyZ3VtZW50IGlmIHRoZSBzb3VyY2UgZnVuY3Rpb24gcHJvdmlkZXMgYW55LlxuICAgKi9cbiAgcHJpdmF0ZSBiaW5kc0tleWNsb2FrRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX2luc3RhbmNlLm9uQXV0aEVycm9yID0gKGVycm9yRGF0YSkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICBhcmdzOiBlcnJvckRhdGEsXG4gICAgICAgIHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aEVycm9yLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uQXV0aExvZ291dCA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHsgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoTG9nb3V0IH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhSZWZyZXNoU3VjY2VzcyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHtcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoUmVmcmVzaFN1Y2Nlc3MsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoUmVmcmVzaEVycm9yID0gKCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhSZWZyZXNoRXJyb3IsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoU3VjY2VzcyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHsgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoU3VjY2VzcyB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25Ub2tlbkV4cGlyZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uVG9rZW5FeHBpcmVkLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uUmVhZHkgPSAoYXV0aGVudGljYXRlZCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICBhcmdzOiBhdXRoZW50aWNhdGVkLFxuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PblJlYWR5LFxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgYmVhcmVyRXhjbHVkZWRVcmwgY29udGVudCBpbiBhIHVuaWZvcm0gdHlwZTogRXhjbHVkZWRVcmwsXG4gICAqIHNvIGl0IGJlY29tZXMgZWFzaWVyIHRvIGhhbmRsZS5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlckV4Y2x1ZGVkVXJscyBhcnJheSBvZiBzdHJpbmdzIG9yIEV4Y2x1ZGVkVXJsIHRoYXQgaW5jbHVkZXNcbiAgICogdGhlIHVybCBhbmQgSHR0cE1ldGhvZC5cbiAgICovXG4gIHByaXZhdGUgbG9hZEV4Y2x1ZGVkVXJscyhcbiAgICBiZWFyZXJFeGNsdWRlZFVybHM6IChzdHJpbmcgfCBFeGNsdWRlZFVybClbXVxuICApOiBFeGNsdWRlZFVybFJlZ2V4W10ge1xuICAgIGNvbnN0IGV4Y2x1ZGVkVXJsczogRXhjbHVkZWRVcmxSZWdleFtdID0gW107XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGJlYXJlckV4Y2x1ZGVkVXJscykge1xuICAgICAgbGV0IGV4Y2x1ZGVkVXJsOiBFeGNsdWRlZFVybFJlZ2V4O1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICBleGNsdWRlZFVybCA9IHsgdXJsUGF0dGVybjogbmV3IFJlZ0V4cChpdGVtLCAnaScpLCBodHRwTWV0aG9kczogW10gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4Y2x1ZGVkVXJsID0ge1xuICAgICAgICAgIHVybFBhdHRlcm46IG5ldyBSZWdFeHAoaXRlbS51cmwsICdpJyksXG4gICAgICAgICAgaHR0cE1ldGhvZHM6IGl0ZW0uaHR0cE1ldGhvZHMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBleGNsdWRlZFVybHMucHVzaChleGNsdWRlZFVybCk7XG4gICAgfVxuICAgIHJldHVybiBleGNsdWRlZFVybHM7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgY2xhc3MgdmFsdWVzIGluaXRpYWxpemF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0U2VydmljZVZhbHVlcyh7XG4gICAgZW5hYmxlQmVhcmVySW50ZXJjZXB0b3IgPSB0cnVlLFxuICAgIGxvYWRVc2VyUHJvZmlsZUF0U3RhcnRVcCA9IGZhbHNlLFxuICAgIGJlYXJlckV4Y2x1ZGVkVXJscyA9IFtdLFxuICAgIGF1dGhvcml6YXRpb25IZWFkZXJOYW1lID0gJ0F1dGhvcml6YXRpb24nLFxuICAgIGJlYXJlclByZWZpeCA9ICdCZWFyZXInLFxuICAgIGluaXRPcHRpb25zLFxuICB9OiBLZXljbG9ha09wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9lbmFibGVCZWFyZXJJbnRlcmNlcHRvciA9IGVuYWJsZUJlYXJlckludGVyY2VwdG9yO1xuICAgIHRoaXMuX2xvYWRVc2VyUHJvZmlsZUF0U3RhcnRVcCA9IGxvYWRVc2VyUHJvZmlsZUF0U3RhcnRVcDtcbiAgICB0aGlzLl9hdXRob3JpemF0aW9uSGVhZGVyTmFtZSA9IGF1dGhvcml6YXRpb25IZWFkZXJOYW1lO1xuICAgIHRoaXMuX2JlYXJlclByZWZpeCA9IGJlYXJlclByZWZpeC50cmltKCkuY29uY2F0KCcgJyk7XG4gICAgdGhpcy5fZXhjbHVkZWRVcmxzID0gdGhpcy5sb2FkRXhjbHVkZWRVcmxzKGJlYXJlckV4Y2x1ZGVkVXJscyk7XG4gICAgdGhpcy5fc2lsZW50UmVmcmVzaCA9IGluaXRPcHRpb25zID8gaW5pdE9wdGlvbnMuZmxvdyA9PT0gJ2ltcGxpY2l0JyA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEtleWNsb2FrIGluaXRpYWxpemF0aW9uLiBJdCBzaG91bGQgYmUgY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIGFkYXB0ZXIuXG4gICAqIE9wdGlvbnMgaXMgYSBvYmplY3Qgd2l0aCAyIG1haW4gcGFyYW1ldGVyczogY29uZmlnIGFuZCBpbml0T3B0aW9ucy4gVGhlIGZpcnN0IG9uZVxuICAgKiB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBLZXljbG9hayBpbnN0YW5jZS4gVGhlIHNlY29uZCBvbmUgYXJlIG9wdGlvbnMgdG8gaW5pdGlhbGl6ZSB0aGVcbiAgICoga2V5Y2xvYWsgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIENvbmZpZzogbWF5IGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUga2V5Y2xvYWsgVVJJIG9yIGFuIG9iamVjdCB3aXRoIHRoZVxuICAgKiBmb2xsb3dpbmcgY29udGVudDpcbiAgICogLSB1cmw6IEtleWNsb2FrIGpzb24gVVJMXG4gICAqIC0gcmVhbG06IHJlYWxtIG5hbWVcbiAgICogLSBjbGllbnRJZDogY2xpZW50IGlkXG4gICAqXG4gICAqIGluaXRPcHRpb25zOlxuICAgKiBPcHRpb25zIHRvIGluaXRpYWxpemUgdGhlIEtleWNsb2FrIGFkYXB0ZXIsIG1hdGNoZXMgdGhlIG9wdGlvbnMgYXMgcHJvdmlkZWQgYnkgS2V5Y2xvYWsgaXRzZWxmLlxuICAgKlxuICAgKiBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcjpcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgYmVhcmVyIHdpbGwgYWRkZWQgdG8gdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKlxuICAgKiBsb2FkVXNlclByb2ZpbGVJblN0YXJ0VXA6XG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSB1c2VyIHByb2ZpbGUgc2hvdWxkIGJlIGxvYWRlZCBhdCB0aGUga2V5Y2xvYWsgaW5pdGlhbGl6YXRpb24sXG4gICAqIGp1c3QgYWZ0ZXIgdGhlIGxvZ2luLlxuICAgKlxuICAgKiBiZWFyZXJFeGNsdWRlZFVybHM6XG4gICAqIFN0cmluZyBBcnJheSB0byBleGNsdWRlIHRoZSB1cmxzIHRoYXQgc2hvdWxkIG5vdCBoYXZlIHRoZSBBdXRob3JpemF0aW9uIEhlYWRlciBhdXRvbWF0aWNhbGx5XG4gICAqIGFkZGVkLlxuICAgKlxuICAgKiBhdXRob3JpemF0aW9uSGVhZGVyTmFtZTpcbiAgICogVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIEF1dGhvcml6YXRpb24gSHR0cCBIZWFkZXIgbmFtZS5cbiAgICpcbiAgICogYmVhcmVyUHJlZml4OlxuICAgKiBUaGlzIHZhbHVlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIEF1dGhvcml6YXRpb24gSHR0cCBIZWFkZXIgcGFyYW0uXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIEEgUHJvbWlzZSB3aXRoIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBpbml0aWFsaXphdGlvbiB3YXMgc3VjY2Vzc2Z1bC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbml0KG9wdGlvbnM6IEtleWNsb2FrT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5pbml0U2VydmljZVZhbHVlcyhvcHRpb25zKTtcbiAgICBjb25zdCB7IGNvbmZpZywgaW5pdE9wdGlvbnMgfSA9IG9wdGlvbnM7XG5cbiAgICB0aGlzLl9pbnN0YW5jZSA9IEtleWNsb2FrKGNvbmZpZyk7XG4gICAgdGhpcy5iaW5kc0tleWNsb2FrRXZlbnRzKCk7XG5cbiAgICBjb25zdCBhdXRoZW50aWNhdGVkID0gYXdhaXQgdGhpcy5faW5zdGFuY2UuaW5pdChpbml0T3B0aW9ucyk7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZCAmJiB0aGlzLl9sb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXApIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF1dGhlbnRpY2F0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVkaXJlY3RzIHRvIGxvZ2luIGZvcm0gb24gKG9wdGlvbnMgaXMgYW4gb3B0aW9uYWwgb2JqZWN0IHdpdGggcmVkaXJlY3RVcmkgYW5kL29yXG4gICAqIHByb21wdCBmaWVsZHMpLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBPYmplY3QsIHdoZXJlOlxuICAgKiAgLSByZWRpcmVjdFVyaTogU3BlY2lmaWVzIHRoZSB1cmkgdG8gcmVkaXJlY3QgdG8gYWZ0ZXIgbG9naW4uXG4gICAqICAtIHByb21wdDpCeSBkZWZhdWx0IHRoZSBsb2dpbiBzY3JlZW4gaXMgZGlzcGxheWVkIGlmIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQtaW4gdG8gS2V5Y2xvYWsuXG4gICAqIFRvIG9ubHkgYXV0aGVudGljYXRlIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiB0aGUgdXNlciBpcyBhbHJlYWR5IGxvZ2dlZC1pbiBhbmQgbm90IGRpc3BsYXkgdGhlXG4gICAqIGxvZ2luIHBhZ2UgaWYgdGhlIHVzZXIgaXMgbm90IGxvZ2dlZC1pbiwgc2V0IHRoaXMgb3B0aW9uIHRvIG5vbmUuIFRvIGFsd2F5cyByZXF1aXJlXG4gICAqIHJlLWF1dGhlbnRpY2F0aW9uIGFuZCBpZ25vcmUgU1NPLCBzZXQgdGhpcyBvcHRpb24gdG8gbG9naW4gLlxuICAgKiAgLSBtYXhBZ2U6IFVzZWQganVzdCBpZiB1c2VyIGlzIGFscmVhZHkgYXV0aGVudGljYXRlZC4gU3BlY2lmaWVzIG1heGltdW0gdGltZSBzaW5jZSB0aGVcbiAgICogYXV0aGVudGljYXRpb24gb2YgdXNlciBoYXBwZW5lZC4gSWYgdXNlciBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQgZm9yIGxvbmdlciB0aW1lIHRoYW5cbiAgICogbWF4QWdlLCB0aGUgU1NPIGlzIGlnbm9yZWQgYW5kIGhlIHdpbGwgbmVlZCB0byByZS1hdXRoZW50aWNhdGUgYWdhaW4uXG4gICAqICAtIGxvZ2luSGludDogVXNlZCB0byBwcmUtZmlsbCB0aGUgdXNlcm5hbWUvZW1haWwgZmllbGQgb24gdGhlIGxvZ2luIGZvcm0uXG4gICAqICAtIGFjdGlvbjogSWYgdmFsdWUgaXMgJ3JlZ2lzdGVyJyB0aGVuIHVzZXIgaXMgcmVkaXJlY3RlZCB0byByZWdpc3RyYXRpb24gcGFnZSwgb3RoZXJ3aXNlIHRvXG4gICAqIGxvZ2luIHBhZ2UuXG4gICAqICAtIGxvY2FsZTogU3BlY2lmaWVzIHRoZSBkZXNpcmVkIGxvY2FsZSBmb3IgdGhlIFVJLlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIHZvaWQgUHJvbWlzZSBpZiB0aGUgbG9naW4gaXMgc3VjY2Vzc2Z1bCBhbmQgYWZ0ZXIgdGhlIHVzZXIgcHJvZmlsZSBsb2FkaW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvZ2luKG9wdGlvbnM6IEtleWNsb2FrLktleWNsb2FrTG9naW5PcHRpb25zID0ge30pIHtcbiAgICBhd2FpdCB0aGlzLl9pbnN0YW5jZS5sb2dpbihvcHRpb25zKTtcblxuICAgIGlmICh0aGlzLl9sb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXApIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byBsb2dvdXQuXG4gICAqXG4gICAqIEBwYXJhbSByZWRpcmVjdFVyaVxuICAgKiBTcGVjaWZpZXMgdGhlIHVyaSB0byByZWRpcmVjdCB0byBhZnRlciBsb2dvdXQuXG4gICAqIEByZXR1cm5zXG4gICAqIEEgdm9pZCBQcm9taXNlIGlmIHRoZSBsb2dvdXQgd2FzIHN1Y2Nlc3NmdWwsIGNsZWFuaW5nIGFsc28gdGhlIHVzZXJQcm9maWxlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvZ291dChyZWRpcmVjdFVyaT86IHN0cmluZykge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByZWRpcmVjdFVyaSxcbiAgICB9O1xuXG4gICAgYXdhaXQgdGhpcy5faW5zdGFuY2UubG9nb3V0KG9wdGlvbnMpO1xuICAgIHRoaXMuX3VzZXJQcm9maWxlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byByZWdpc3RyYXRpb24gZm9ybS4gU2hvcnRjdXQgZm9yIGxvZ2luIHdpdGggb3B0aW9uXG4gICAqIGFjdGlvbiA9ICdyZWdpc3RlcicuIE9wdGlvbnMgYXJlIHNhbWUgYXMgZm9yIHRoZSBsb2dpbiBtZXRob2QgYnV0ICdhY3Rpb24nIGlzIHNldCB0b1xuICAgKiAncmVnaXN0ZXInLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBsb2dpbiBvcHRpb25zXG4gICAqIEByZXR1cm5zXG4gICAqIEEgdm9pZCBQcm9taXNlIGlmIHRoZSByZWdpc3RlciBmbG93IHdhcyBzdWNjZXNzZnVsLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyKFxuICAgIG9wdGlvbnM6IEtleWNsb2FrLktleWNsb2FrTG9naW5PcHRpb25zID0geyBhY3Rpb246ICdyZWdpc3RlcicgfVxuICApIHtcbiAgICBhd2FpdCB0aGlzLl9pbnN0YW5jZS5yZWdpc3RlcihvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgdXNlciBoYXMgYWNjZXNzIHRvIHRoZSBzcGVjaWZpZWQgcm9sZS4gSXQgd2lsbCBsb29rIGZvciByb2xlcyBpblxuICAgKiByZWFsbSBhbmQgY2xpZW50SWQsIGJ1dCB3aWxsIG5vdCBjaGVjayBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4gZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHJvbGVcbiAgICogcm9sZSBuYW1lXG4gICAqIEBwYXJhbSByZXNvdXJjZVxuICAgKiByZXNvdXJjZSBuYW1lIElmIG5vdCBzcGVjaWZpZWQsIGBjbGllbnRJZGAgaXMgdXNlZFxuICAgKiBAcmV0dXJuc1xuICAgKiBBIGJvb2xlYW4gbWVhbmluZyBpZiB0aGUgdXNlciBoYXMgdGhlIHNwZWNpZmllZCBSb2xlLlxuICAgKi9cbiAgaXNVc2VySW5Sb2xlKHJvbGU6IHN0cmluZywgcmVzb3VyY2U/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgaGFzUm9sZTogYm9vbGVhbjtcbiAgICBoYXNSb2xlID0gdGhpcy5faW5zdGFuY2UuaGFzUmVzb3VyY2VSb2xlKHJvbGUsIHJlc291cmNlKTtcbiAgICBpZiAoIWhhc1JvbGUpIHtcbiAgICAgIGhhc1JvbGUgPSB0aGlzLl9pbnN0YW5jZS5oYXNSZWFsbVJvbGUocm9sZSk7XG4gICAgfVxuICAgIHJldHVybiBoYXNSb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcm9sZXMgb2YgdGhlIGxvZ2dlZCB1c2VyLiBUaGUgYWxsUm9sZXMgcGFyYW1ldGVyLCB3aXRoIGRlZmF1bHQgdmFsdWVcbiAgICogdHJ1ZSwgd2lsbCByZXR1cm4gdGhlIGNsaWVudElkIGFuZCByZWFsbSByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvZ2dlZCB1c2VyLiBJZiBzZXQgdG8gZmFsc2VcbiAgICogaXQgd2lsbCBvbmx5IHJldHVybiB0aGUgdXNlciByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNsaWVudElkLlxuICAgKlxuICAgKiBAcGFyYW0gYWxsUm9sZXNcbiAgICogRmxhZyB0byBzZXQgaWYgYWxsIHJvbGVzIHNob3VsZCBiZSByZXR1cm5lZC4oT3B0aW9uYWw6IGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZSlcbiAgICogQHJldHVybnNcbiAgICogQXJyYXkgb2YgUm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb2dnZWQgdXNlci5cbiAgICovXG4gIGdldFVzZXJSb2xlcyhhbGxSb2xlczogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLl9pbnN0YW5jZS5yZXNvdXJjZUFjY2Vzcykge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5faW5zdGFuY2UucmVzb3VyY2VBY2Nlc3MpIHtcbiAgICAgICAgaWYgKHRoaXMuX2luc3RhbmNlLnJlc291cmNlQWNjZXNzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBjb25zdCByZXNvdXJjZUFjY2VzczogYW55ID0gdGhpcy5faW5zdGFuY2UucmVzb3VyY2VBY2Nlc3Nba2V5XTtcbiAgICAgICAgICBjb25zdCBjbGllbnRSb2xlcyA9IHJlc291cmNlQWNjZXNzWydyb2xlcyddIHx8IFtdO1xuICAgICAgICAgIHJvbGVzID0gcm9sZXMuY29uY2F0KGNsaWVudFJvbGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsUm9sZXMgJiYgdGhpcy5faW5zdGFuY2UucmVhbG1BY2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlYWxtUm9sZXMgPSB0aGlzLl9pbnN0YW5jZS5yZWFsbUFjY2Vzc1sncm9sZXMnXSB8fCBbXTtcbiAgICAgIHJvbGVzLnB1c2goLi4ucmVhbG1Sb2xlcyk7XG4gICAgfVxuICAgIHJldHVybiByb2xlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB1c2VyIGlzIGxvZ2dlZCBpbi5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogQSBib29sZWFuIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbi5cbiAgICovXG4gIGFzeW5jIGlzTG9nZ2VkSW4oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5faW5zdGFuY2UuYXV0aGVudGljYXRlZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVRva2VuKDIwKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdG9rZW4gaGFzIGxlc3MgdGhhbiBtaW5WYWxpZGl0eSBzZWNvbmRzIGxlZnQgYmVmb3JlXG4gICAqIGl0IGV4cGlyZXMuXG4gICAqXG4gICAqIEBwYXJhbSBtaW5WYWxpZGl0eVxuICAgKiBTZWNvbmRzIGxlZnQuIChtaW5WYWxpZGl0eSkgaXMgb3B0aW9uYWwuIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAgICogQHJldHVybnNcbiAgICogQm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB0b2tlbiBpcyBleHBpcmVkLlxuICAgKi9cbiAgaXNUb2tlbkV4cGlyZWQobWluVmFsaWRpdHk6IG51bWJlciA9IDApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuaXNUb2tlbkV4cGlyZWQobWluVmFsaWRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSB0b2tlbiBleHBpcmVzIHdpdGhpbiBtaW5WYWxpZGl0eSBzZWNvbmRzIHRoZSB0b2tlbiBpcyByZWZyZXNoZWQuIElmIHRoZVxuICAgKiBzZXNzaW9uIHN0YXR1cyBpZnJhbWUgaXMgZW5hYmxlZCwgdGhlIHNlc3Npb24gc3RhdHVzIGlzIGFsc28gY2hlY2tlZC5cbiAgICogUmV0dXJucyBhIHByb21pc2UgdGVsbGluZyBpZiB0aGUgdG9rZW4gd2FzIHJlZnJlc2hlZCBvciBub3QuIElmIHRoZSBzZXNzaW9uIGlzIG5vdCBhY3RpdmVcbiAgICogYW55bW9yZSwgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBtaW5WYWxpZGl0eVxuICAgKiBTZWNvbmRzIGxlZnQuIChtaW5WYWxpZGl0eSBpcyBvcHRpb25hbCwgaWYgbm90IHNwZWNpZmllZCA1IGlzIHVzZWQpXG4gICAqIEByZXR1cm5zXG4gICAqIFByb21pc2Ugd2l0aCBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdG9rZW4gd2FzIHN1Y2Nlc2Z1bGx5IHVwZGF0ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlVG9rZW4obWluVmFsaWRpdHkgPSA1KSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIHdvcmthcm91bmQgdW50aWwgdGhlIHNpbGVudCByZWZyZXNoIChpc3N1ZSAjNDMpXG4gICAgLy8gaXMgbm90IGltcGxlbWVudGVkLCBhdm9pZGluZyB0aGUgcmVkaXJlY3QgbG9vcC5cbiAgICBpZiAodGhpcy5fc2lsZW50UmVmcmVzaCkge1xuICAgICAgaWYgKHRoaXMuaXNUb2tlbkV4cGlyZWQoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0ZhaWxlZCB0byByZWZyZXNoIHRoZSB0b2tlbiwgb3IgdGhlIHNlc3Npb24gaXMgZXhwaXJlZCdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdLZXljbG9hayBBbmd1bGFyIGxpYnJhcnkgaXMgbm90IGluaXRpYWxpemVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS51cGRhdGVUb2tlbihtaW5WYWxpZGl0eSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIHVzZXIgcHJvZmlsZS5cbiAgICogUmV0dXJucyBwcm9taXNlIHRvIHNldCBmdW5jdGlvbnMgdG8gYmUgaW52b2tlZCBpZiB0aGUgcHJvZmlsZSB3YXMgbG9hZGVkXG4gICAqIHN1Y2Nlc3NmdWxseSwgb3IgaWYgdGhlIHByb2ZpbGUgY291bGQgbm90IGJlIGxvYWRlZC5cbiAgICpcbiAgICogQHBhcmFtIGZvcmNlUmVsb2FkXG4gICAqIElmIHRydWUgd2lsbCBmb3JjZSB0aGUgbG9hZFVzZXJQcm9maWxlIGV2ZW4gaWYgaXRzIGFscmVhZHkgbG9hZGVkLlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIHByb21pc2Ugd2l0aCB0aGUgS2V5Y2xvYWtQcm9maWxlIGRhdGEgbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWRVc2VyUHJvZmlsZShmb3JjZVJlbG9hZCA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuX3VzZXJQcm9maWxlICYmICFmb3JjZVJlbG9hZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3VzZXJQcm9maWxlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faW5zdGFuY2UuYXV0aGVudGljYXRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIHVzZXIgcHJvZmlsZSB3YXMgbm90IGxvYWRlZCBhcyB0aGUgdXNlciBpcyBub3QgbG9nZ2VkIGluLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJQcm9maWxlID0gYXdhaXQgdGhpcy5faW5zdGFuY2UubG9hZFVzZXJQcm9maWxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXV0aGVudGljYXRlZCB0b2tlbiwgY2FsbGluZyB1cGRhdGVUb2tlbiB0byBnZXQgYSByZWZyZXNoZWQgb25lIGlmIG5lY2Vzc2FyeS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRUb2tlbigpIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVRva2VuKDEwKTtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UudG9rZW47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbG9nZ2VkIHVzZXJuYW1lLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBUaGUgbG9nZ2VkIHVzZXJuYW1lLlxuICAgKi9cbiAgcHVibGljIGdldFVzZXJuYW1lKCkge1xuICAgIGlmICghdGhpcy5fdXNlclByb2ZpbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgbG9nZ2VkIGluIG9yIHVzZXIgcHJvZmlsZSB3YXMgbm90IGxvYWRlZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdXNlclByb2ZpbGUudXNlcm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYXV0aGVudGljYXRpb24gc3RhdGUsIGluY2x1ZGluZyB0b2tlbnMuIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiBhcHBsaWNhdGlvblxuICAgKiBoYXMgZGV0ZWN0ZWQgdGhlIHNlc3Npb24gd2FzIGV4cGlyZWQsIGZvciBleGFtcGxlIGlmIHVwZGF0aW5nIHRva2VuIGZhaWxzLlxuICAgKiBJbnZva2luZyB0aGlzIHJlc3VsdHMgaW4gb25BdXRoTG9nb3V0IGNhbGxiYWNrIGxpc3RlbmVyIGJlaW5nIGludm9rZWQuXG4gICAqL1xuICBjbGVhclRva2VuKCk6IHZvaWQge1xuICAgIHRoaXMuX2luc3RhbmNlLmNsZWFyVG9rZW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgdmFsaWQgdG9rZW4gaW4gaGVhZGVyLiBUaGUga2V5ICYgdmFsdWUgZm9ybWF0IGlzOlxuICAgKiBBdXRob3JpemF0aW9uIEJlYXJlciA8dG9rZW4+LlxuICAgKiBJZiB0aGUgaGVhZGVycyBwYXJhbSBpcyB1bmRlZmluZWQgaXQgd2lsbCBjcmVhdGUgdGhlIEFuZ3VsYXIgaGVhZGVycyBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSBoZWFkZXJzXG4gICAqIFVwZGF0ZWQgaGVhZGVyIHdpdGggQXV0aG9yaXphdGlvbiBhbmQgS2V5Y2xvYWsgdG9rZW4uXG4gICAqIEByZXR1cm5zXG4gICAqIEFuIG9ic2VydmFibGUgd2l0aCB3aXRoIHRoZSBIVFRQIEF1dGhvcml6YXRpb24gaGVhZGVyIGFuZCB0aGUgY3VycmVudCB0b2tlbi5cbiAgICovXG4gIHB1YmxpYyBhZGRUb2tlblRvSGVhZGVyKGhlYWRlcnM6IEh0dHBIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkpIHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmdldFRva2VuKCkpLnBpcGUoXG4gICAgICBtYXAoKHRva2VuKSA9PlxuICAgICAgICB0b2tlbiA/IGhlYWRlcnMuc2V0KHRoaXMuX2F1dGhvcml6YXRpb25IZWFkZXJOYW1lLCB0aGlzLl9iZWFyZXJQcmVmaXggKyB0b2tlbikgOiBoZWFkZXJzXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBLZXljbG9hayBpbnN0YW5jZSwgaWYgeW91IG5lZWQgYW55IGN1c3RvbWl6YXRpb24gdGhhdFxuICAgKiB0aGlzIEFuZ3VsYXIgc2VydmljZSBkb2VzIG5vdCBzdXBwb3J0IHlldC4gVXNlIHdpdGggY2F1dGlvbi5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogVGhlIEtleWNsb2FrSW5zdGFuY2UgZnJvbSBrZXljbG9hay1qcy5cbiAgICovXG4gIGdldEtleWNsb2FrSW5zdGFuY2UoKTogS2V5Y2xvYWsuS2V5Y2xvYWtJbnN0YW5jZSB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGV4Y2x1ZGVkIFVSTHMgdGhhdCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgYnlcbiAgICogdGhlIGh0dHAgaW50ZXJjZXB0b3Igd2hpY2ggYXV0b21hdGljYWxseSBhZGRzIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlciBpbiB0aGUgSHR0cCBSZXF1ZXN0LlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBUaGUgZXhjbHVkZWQgdXJscyB0aGF0IG11c3Qgbm90IGJlIGludGVyY2VwdGVkIGJ5IHRoZSBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yLlxuICAgKi9cbiAgZ2V0IGV4Y2x1ZGVkVXJscygpOiBFeGNsdWRlZFVybFJlZ2V4W10ge1xuICAgIHJldHVybiB0aGlzLl9leGNsdWRlZFVybHM7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgYmVhcmVyIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBSZXR1cm5zIGlmIHRoZSBiZWFyZXIgaW50ZXJjZXB0b3Igd2FzIHNldCB0byBiZSBkaXNhYmxlZC5cbiAgICovXG4gIGdldCBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlQmVhcmVySW50ZXJjZXB0b3I7XG4gIH1cblxuICAvKipcbiAgICogS2V5Y2xvYWsgc3ViamVjdCB0byBtb25pdG9yIHRoZSBldmVudHMgdHJpZ2dlcmVkIGJ5IGtleWNsb2FrLWpzLlxuICAgKiBUaGUgZm9sbG93aW5nIGV2ZW50cyBhcyBhdmFpbGFibGUgKGFzIGRlc2NyaWJlZCBhdCBrZXljbG9hayBkb2NzIC1cbiAgICogaHR0cHM6Ly93d3cua2V5Y2xvYWsub3JnL2RvY3MvbGF0ZXN0L3NlY3VyaW5nX2FwcHMvaW5kZXguaHRtbCNjYWxsYmFjay1ldmVudHMpOlxuICAgKiAtIE9uQXV0aEVycm9yXG4gICAqIC0gT25BdXRoTG9nb3V0XG4gICAqIC0gT25BdXRoUmVmcmVzaEVycm9yXG4gICAqIC0gT25BdXRoUmVmcmVzaFN1Y2Nlc3NcbiAgICogLSBPbkF1dGhTdWNjZXNzXG4gICAqIC0gT25SZWFkeVxuICAgKiAtIE9uVG9rZW5FeHBpcmVcbiAgICogSW4gZWFjaCBvY2N1cnJlbmNlIG9mIGFueSBvZiB0aGVzZSwgdGhpcyBzdWJqZWN0IHdpbGwgcmV0dXJuIHRoZSBldmVudCB0eXBlLFxuICAgKiBkZXNjcmliZWQgYXQge0BsaW5rIEtleWNsb2FrRXZlbnRUeXBlfSBlbnVtIGFuZCB0aGUgZnVuY3Rpb24gYXJncyBmcm9tIHRoZSBrZXljbG9hay1qc1xuICAgKiBpZiBwcm92aWRlZCBhbnkuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIEEgc3ViamVjdCB3aXRoIHRoZSB7QGxpbmsgS2V5Y2xvYWtFdmVudH0gd2hpY2ggZGVzY3JpYmVzIHRoZSBldmVudCB0eXBlIGFuZCBhdHRhY2hlcyB0aGVcbiAgICogZnVuY3Rpb24gYXJncy5cbiAgICovXG4gIGdldCBrZXljbG9ha0V2ZW50cyQoKTogU3ViamVjdDxLZXljbG9ha0V2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX2tleWNsb2FrRXZlbnRzJDtcbiAgfVxufVxuIl19
@@ -1,12 +1,10 @@
1
- import { __decorate } from "tslib";
2
1
  import { NgModule } from '@angular/core';
3
2
  import { CoreModule } from './core/core.module';
4
- let KeycloakAngularModule = class KeycloakAngularModule {
5
- };
6
- KeycloakAngularModule = __decorate([
7
- NgModule({
8
- imports: [CoreModule]
9
- })
10
- ], KeycloakAngularModule);
11
- export { KeycloakAngularModule };
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYW5ndWxhci5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9rZXljbG9hay1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2tleWNsb2FrLWFuZ3VsYXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFRQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUtoRCxJQUFhLHFCQUFxQixHQUFsQyxNQUFhLHFCQUFxQjtDQUFHLENBQUE7QUFBeEIscUJBQXFCO0lBSGpDLFFBQVEsQ0FBQztRQUNSLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQztLQUN0QixDQUFDO0dBQ1cscUJBQXFCLENBQUc7U0FBeEIscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE1hdXJpY2lvIEdlbWVsbGkgVmlnb2xvIGFuZCBjb250cmlidXRvcnMuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vbWF1cmljaW92aWdvbG8va2V5Y2xvYWstYW5ndWxhci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ29yZU1vZHVsZSB9IGZyb20gJy4vY29yZS9jb3JlLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb3JlTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBLZXljbG9ha0FuZ3VsYXJNb2R1bGUge31cbiJdfQ==
3
+ export class KeycloakAngularModule {
4
+ }
5
+ KeycloakAngularModule.decorators = [
6
+ { type: NgModule, args: [{
7
+ imports: [CoreModule]
8
+ },] }
9
+ ];
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYW5ndWxhci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9hay1hbmd1bGFyL3NyYy9saWIva2V5Y2xvYWstYW5ndWxhci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFLaEQsTUFBTSxPQUFPLHFCQUFxQjs7O1lBSGpDLFFBQVEsU0FBQztnQkFDUixPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUM7YUFDdEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTWF1cmljaW8gR2VtZWxsaSBWaWdvbG8gYW5kIGNvbnRyaWJ1dG9ycy5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXVyaWNpb3ZpZ29sby9rZXljbG9hay1hbmd1bGFyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnLi9jb3JlL2NvcmUubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvcmVNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIEtleWNsb2FrQW5ndWxhck1vZHVsZSB7fVxuIl19
@@ -4,4 +4,4 @@ export { KeycloakService } from './lib/core/services/keycloak.service';
4
4
  export { KeycloakBearerInterceptor } from './lib/core/interceptors/keycloak-bearer.interceptor';
5
5
  export { CoreModule } from './lib/core/core.module';
6
6
  export { KeycloakAngularModule } from './lib/keycloak-angular.module';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2tleWNsb2FrLWFuZ3VsYXIvIiwic291cmNlcyI6WyJwdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE9BQU8sRUFFTCxpQkFBaUIsRUFDbEIsTUFBTSxzQ0FBc0MsQ0FBQztBQU05QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUNMLHlCQUF5QixFQUMxQixNQUFNLHFEQUFxRCxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvTElDRU5TRVxuICovXG5cbmV4cG9ydCB7IEtleWNsb2FrQ29uZmlnIH0gZnJvbSAnLi9saWIvY29yZS9pbnRlcmZhY2VzL2tleWNsb2FrLWNvbmZpZyc7XG5leHBvcnQge1xuICBLZXljbG9ha0V2ZW50LFxuICBLZXljbG9ha0V2ZW50VHlwZVxufSBmcm9tICcuL2xpYi9jb3JlL2ludGVyZmFjZXMva2V5Y2xvYWstZXZlbnQnO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgS2V5Y2xvYWsncyBpbnRlcm5hbCB0eXBlcyBpbnN0ZWFkLlxuICovXG5leHBvcnQgdHlwZSBLZXljbG9ha0luaXRPcHRpb25zID0gS2V5Y2xvYWsuS2V5Y2xvYWtJbml0T3B0aW9ucztcbmV4cG9ydCB7IEtleWNsb2FrT3B0aW9ucyB9IGZyb20gJy4vbGliL2NvcmUvaW50ZXJmYWNlcy9rZXljbG9hay1vcHRpb25zJztcbmV4cG9ydCB7IEtleWNsb2FrQXV0aEd1YXJkIH0gZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlcy9rZXljbG9hay1hdXRoLWd1YXJkJztcbmV4cG9ydCB7IEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMva2V5Y2xvYWsuc2VydmljZSc7XG5leHBvcnQge1xuICBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yXG59IGZyb20gJy4vbGliL2NvcmUvaW50ZXJjZXB0b3JzL2tleWNsb2FrLWJlYXJlci5pbnRlcmNlcHRvcic7XG5leHBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnLi9saWIvY29yZS9jb3JlLm1vZHVsZSc7XG5leHBvcnQgeyBLZXljbG9ha0FuZ3VsYXJNb2R1bGUgfSBmcm9tICcuL2xpYi9rZXljbG9hay1hbmd1bGFyLm1vZHVsZSc7XG4iXX0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FrLWFuZ3VsYXIvc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUVMLGlCQUFpQixFQUNsQixNQUFNLHNDQUFzQyxDQUFDO0FBRTlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQ0wseUJBQXlCLEVBQzFCLE1BQU0scURBQXFELENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE1hdXJpY2lvIEdlbWVsbGkgVmlnb2xvIGFuZCBjb250cmlidXRvcnMuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vbWF1cmljaW92aWdvbG8va2V5Y2xvYWstYW5ndWxhci9MSUNFTlNFXG4gKi9cblxuZXhwb3J0IHtcbiAgS2V5Y2xvYWtFdmVudCxcbiAgS2V5Y2xvYWtFdmVudFR5cGVcbn0gZnJvbSAnLi9saWIvY29yZS9pbnRlcmZhY2VzL2tleWNsb2FrLWV2ZW50JztcbmV4cG9ydCB7IEtleWNsb2FrT3B0aW9ucyB9IGZyb20gJy4vbGliL2NvcmUvaW50ZXJmYWNlcy9rZXljbG9hay1vcHRpb25zJztcbmV4cG9ydCB7IEtleWNsb2FrQXV0aEd1YXJkIH0gZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlcy9rZXljbG9hay1hdXRoLWd1YXJkJztcbmV4cG9ydCB7IEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMva2V5Y2xvYWsuc2VydmljZSc7XG5leHBvcnQge1xuICBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yXG59IGZyb20gJy4vbGliL2NvcmUvaW50ZXJjZXB0b3JzL2tleWNsb2FrLWJlYXJlci5pbnRlcmNlcHRvcic7XG5leHBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnLi9saWIvY29yZS9jb3JlLm1vZHVsZSc7XG5leHBvcnQgeyBLZXljbG9ha0FuZ3VsYXJNb2R1bGUgfSBmcm9tICcuL2xpYi9rZXljbG9hay1hbmd1bGFyLm1vZHVsZSc7XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { __awaiter, __decorate, __metadata } from 'tslib';
1
+ import { __awaiter } from 'tslib';
2
2
  import { Injectable, NgModule } from '@angular/core';
3
3
  import { HttpHeaders, HTTP_INTERCEPTORS } from '@angular/common/http';
4
4
  import { Subject, from } from 'rxjs';
@@ -37,18 +37,8 @@ class KeycloakAuthGuard {
37
37
  }
38
38
  }
39
39
 
40
- function toPromise(originalPromise) {
41
- if (originalPromise instanceof Promise) {
42
- return originalPromise;
43
- }
44
- return new Promise((resolve, reject) => {
45
- originalPromise.success(resolve);
46
- originalPromise.error(reject);
47
- });
48
- }
49
-
50
40
  const Keycloak = Keycloak_;
51
- let KeycloakService = class KeycloakService {
41
+ class KeycloakService {
52
42
  constructor() {
53
43
  this._keycloakEvents$ = new Subject();
54
44
  }
@@ -104,7 +94,7 @@ let KeycloakService = class KeycloakService {
104
94
  }
105
95
  return excludedUrls;
106
96
  }
107
- initServiceValues({ enableBearerInterceptor = true, loadUserProfileAtStartUp = true, bearerExcludedUrls = [], authorizationHeaderName = 'Authorization', bearerPrefix = 'bearer', initOptions, }) {
97
+ initServiceValues({ enableBearerInterceptor = true, loadUserProfileAtStartUp = false, bearerExcludedUrls = [], authorizationHeaderName = 'Authorization', bearerPrefix = 'Bearer', initOptions, }) {
108
98
  this._enableBearerInterceptor = enableBearerInterceptor;
109
99
  this._loadUserProfileAtStartUp = loadUserProfileAtStartUp;
110
100
  this._authorizationHeaderName = authorizationHeaderName;
@@ -118,7 +108,7 @@ let KeycloakService = class KeycloakService {
118
108
  const { config, initOptions } = options;
119
109
  this._instance = Keycloak(config);
120
110
  this.bindsKeycloakEvents();
121
- const authenticated = yield toPromise(this._instance.init(initOptions));
111
+ const authenticated = yield this._instance.init(initOptions);
122
112
  if (authenticated && this._loadUserProfileAtStartUp) {
123
113
  yield this.loadUserProfile();
124
114
  }
@@ -127,7 +117,7 @@ let KeycloakService = class KeycloakService {
127
117
  }
128
118
  login(options = {}) {
129
119
  return __awaiter(this, void 0, void 0, function* () {
130
- yield toPromise(this._instance.login(options));
120
+ yield this._instance.login(options);
131
121
  if (this._loadUserProfileAtStartUp) {
132
122
  yield this.loadUserProfile();
133
123
  }
@@ -138,13 +128,13 @@ let KeycloakService = class KeycloakService {
138
128
  const options = {
139
129
  redirectUri,
140
130
  };
141
- yield toPromise(this._instance.logout(options));
131
+ yield this._instance.logout(options);
142
132
  this._userProfile = undefined;
143
133
  });
144
134
  }
145
135
  register(options = { action: 'register' }) {
146
136
  return __awaiter(this, void 0, void 0, function* () {
147
- yield toPromise(this._instance.register(options));
137
+ yield this._instance.register(options);
148
138
  });
149
139
  }
150
140
  isUserInRole(role, resource) {
@@ -200,7 +190,7 @@ let KeycloakService = class KeycloakService {
200
190
  if (!this._instance) {
201
191
  throw new Error('Keycloak Angular library is not initialized.');
202
192
  }
203
- return toPromise(this._instance.updateToken(minValidity));
193
+ return this._instance.updateToken(minValidity);
204
194
  });
205
195
  }
206
196
  loadUserProfile(forceReload = false) {
@@ -211,23 +201,13 @@ let KeycloakService = class KeycloakService {
211
201
  if (!this._instance.authenticated) {
212
202
  throw new Error('The user profile was not loaded as the user is not logged in.');
213
203
  }
214
- return (this._userProfile = yield toPromise(this._instance.loadUserProfile()));
204
+ return this._userProfile = yield this._instance.loadUserProfile();
215
205
  });
216
206
  }
217
- getToken(forceLogin = true) {
207
+ getToken() {
218
208
  return __awaiter(this, void 0, void 0, function* () {
219
- try {
220
- yield this.updateToken(10);
221
- return this._instance.token;
222
- }
223
- catch (error) {
224
- if (forceLogin) {
225
- this.login();
226
- }
227
- else {
228
- throw error;
229
- }
230
- }
209
+ yield this.updateToken(10);
210
+ return this._instance.token;
231
211
  });
232
212
  }
233
213
  getUsername() {
@@ -240,7 +220,7 @@ let KeycloakService = class KeycloakService {
240
220
  this._instance.clearToken();
241
221
  }
242
222
  addTokenToHeader(headers = new HttpHeaders()) {
243
- return from(this.getToken()).pipe(map((token) => headers.set(this._authorizationHeaderName, this._bearerPrefix + token)));
223
+ return from(this.getToken()).pipe(map((token) => token ? headers.set(this._authorizationHeaderName, this._bearerPrefix + token) : headers));
244
224
  }
245
225
  getKeycloakInstance() {
246
226
  return this._instance;
@@ -254,12 +234,12 @@ let KeycloakService = class KeycloakService {
254
234
  get keycloakEvents$() {
255
235
  return this._keycloakEvents$;
256
236
  }
257
- };
258
- KeycloakService = __decorate([
259
- Injectable()
260
- ], KeycloakService);
237
+ }
238
+ KeycloakService.decorators = [
239
+ { type: Injectable }
240
+ ];
261
241
 
262
- let KeycloakBearerInterceptor = class KeycloakBearerInterceptor {
242
+ class KeycloakBearerInterceptor {
263
243
  constructor(keycloak) {
264
244
  this.keycloak = keycloak;
265
245
  }
@@ -288,38 +268,37 @@ let KeycloakBearerInterceptor = class KeycloakBearerInterceptor {
288
268
  return next.handle(kcReq);
289
269
  }));
290
270
  }
291
- };
271
+ }
272
+ KeycloakBearerInterceptor.decorators = [
273
+ { type: Injectable }
274
+ ];
292
275
  KeycloakBearerInterceptor.ctorParameters = () => [
293
276
  { type: KeycloakService }
294
277
  ];
295
- KeycloakBearerInterceptor = __decorate([
296
- Injectable(),
297
- __metadata("design:paramtypes", [KeycloakService])
298
- ], KeycloakBearerInterceptor);
299
278
 
300
- let CoreModule = class CoreModule {
301
- };
302
- CoreModule = __decorate([
303
- NgModule({
304
- imports: [CommonModule],
305
- providers: [
306
- KeycloakService,
307
- {
308
- provide: HTTP_INTERCEPTORS,
309
- useClass: KeycloakBearerInterceptor,
310
- multi: true
311
- }
312
- ]
313
- })
314
- ], CoreModule);
279
+ class CoreModule {
280
+ }
281
+ CoreModule.decorators = [
282
+ { type: NgModule, args: [{
283
+ imports: [CommonModule],
284
+ providers: [
285
+ KeycloakService,
286
+ {
287
+ provide: HTTP_INTERCEPTORS,
288
+ useClass: KeycloakBearerInterceptor,
289
+ multi: true
290
+ }
291
+ ]
292
+ },] }
293
+ ];
315
294
 
316
- let KeycloakAngularModule = class KeycloakAngularModule {
317
- };
318
- KeycloakAngularModule = __decorate([
319
- NgModule({
320
- imports: [CoreModule]
321
- })
322
- ], KeycloakAngularModule);
295
+ class KeycloakAngularModule {
296
+ }
297
+ KeycloakAngularModule.decorators = [
298
+ { type: NgModule, args: [{
299
+ imports: [CoreModule]
300
+ },] }
301
+ ];
323
302
 
324
303
  export { CoreModule, KeycloakAngularModule, KeycloakAuthGuard, KeycloakBearerInterceptor, KeycloakEventType, KeycloakService };
325
304
  //# sourceMappingURL=keycloak-angular.js.map