@osovitny/anatoly 3.16.51 → 3.16.53

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.
@@ -220,6 +220,10 @@ export class AuthService extends ApiServiceBase {
220
220
  }));
221
221
  }
222
222
  }
223
+ afterLogout() {
224
+ this.appContext.clearWebStorage();
225
+ this.appContext.updateCurrent();
226
+ }
223
227
  getUserEmail() {
224
228
  let currentUser = this.appContext.currentUser;
225
229
  let activeAccount = this.getActiveAccount();
@@ -302,18 +306,29 @@ export class AuthService extends ApiServiceBase {
302
306
  }
303
307
  logout(popup) {
304
308
  let activeAccount = this.getActiveAccount();
305
- if (!activeAccount) {
306
- return;
307
- }
308
309
  if (this.isPopup(popup)) {
309
- this.msalService.logoutPopup({ account: activeAccount, mainWindowRedirectUri: "/" }).subscribe(() => {
310
- this.appContext.clearWebStorage();
311
- });
310
+ if (activeAccount) {
311
+ this.msalService.logoutPopup({ account: activeAccount, mainWindowRedirectUri: "/" }).subscribe(() => {
312
+ this.afterLogout();
313
+ });
314
+ }
315
+ else {
316
+ this.msalService.logoutPopup({ mainWindowRedirectUri: "/" }).subscribe(() => {
317
+ this.afterLogout();
318
+ });
319
+ }
312
320
  }
313
321
  else {
314
- this.msalService.logoutRedirect({ account: activeAccount }).pipe(map(() => {
315
- this.appContext.clearWebStorage();
316
- }));
322
+ if (activeAccount) {
323
+ this.msalService.logoutRedirect({ account: activeAccount }).pipe(map(() => {
324
+ this.afterLogout();
325
+ }));
326
+ }
327
+ else {
328
+ this.msalService.logoutRedirect().pipe(map(() => {
329
+ this.afterLogout();
330
+ }));
331
+ }
317
332
  }
318
333
  }
319
334
  isUserAuthenticated() {
@@ -346,4 +361,4 @@ export class AuthService extends ApiServiceBase {
346
361
  type: Inject,
347
362
  args: [MSAL_GUARD_CONFIG]
348
363
  }] }, { type: i4.MsalService }, { type: i4.MsalBroadcastService }]; }, null); })();
349
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL2lhbS9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUJBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRTlELE9BQU8sRUFBYyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQTZELE1BQU0scUJBQXFCLENBQUM7QUFDbkgsT0FBTyxFQUFtRCxTQUFTLEVBQWlCLDRCQUE0QixFQUM5RyxpQkFBaUIsRUFBRSxlQUFlLEVBQWdCLFdBQVcsRUFDOUQsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixLQUFLO0FBQ0wsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7Ozs7O0FBVTdDLE1BQU0sT0FBTyxXQUFZLFNBQVEsY0FBYztJQUtqQztJQUNGO0lBQ0E7SUFHQTtJQUNBO0lBQ0E7SUFYTyxlQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUMvQyxXQUFXLEdBQVksS0FBSyxDQUFDO0lBRXJDLFlBQ1ksSUFBZ0IsRUFDbEIsTUFBYyxFQUNkLFVBQTZCLEVBRzdCLGVBQXVDLEVBQ3ZDLFdBQXdCLEVBQ3hCLG9CQUEwQztRQUNsRCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFSRixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2xCLFdBQU0s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QUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUN4RSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDTDtJQUNILENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksQ0FBQztJQUM5RCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtZQUMvQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDekUsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQzFCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUM3QyxDQUFDO3FFQTNZVSxXQUFXLHFHQVNaLGlCQUFpQjtnRUFUaEIsV0FBVyxXQUFYLFdBQVcsbUJBRlYsTUFBTTs7dUZBRVAsV0FBVztjQUh2QixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7O3NCQVVJLE1BQU07dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDYgRGVjIDIwMThcclxuXHJcbiAgRGVzY3JpcHRpb246XHJcbiAgICBJZGVudGl0eSBhbmQgQWNjZXNzIE1hbmFnZW1lbnRcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL05vZGVcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIG9mLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTVNBTF9HVUFSRF9DT05GSUcsIE1zYWxCcm9hZGNhc3RTZXJ2aWNlLCBNc2FsR3VhcmRDb25maWd1cmF0aW9uLCBNc2FsU2VydmljZSB9IGZyb20gJ0BhenVyZS9tc2FsLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBBY2NvdW50SW5mbywgQXV0aGVudGljYXRpb25SZXN1bHQsIEV2ZW50TWVzc2FnZSwgRXZlbnRUeXBlLCBJZFRva2VuQ2xhaW1zLCBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yLFxyXG4gIEludGVyYWN0aW9uU3RhdHVzLCBJbnRlcmFjdGlvblR5cGUsIFBvcHVwUmVxdWVzdCwgUHJvbXB0VmFsdWUsIFJlZGlyZWN0UmVxdWVzdCwgU2lsZW50UmVxdWVzdCwgU3NvU2lsZW50UmVxdWVzdFxyXG59IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xyXG5cclxuLy9BcHBcclxuaW1wb3J0IHsgQXBpU2VydmljZUJhc2UgfSBmcm9tICcuLi8uLi9kYXRhL2Jhc2UvYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvYXBwY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTVNBTFJlZGlyZWN0IH0gZnJvbSAnLi4vcmVkaXJlY3QnO1xyXG5pbXBvcnQgeyBNU0FMVXRpbHMgfSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IE1TQUxCMkMsIFBvbGljeVR5cGUgfSBmcm9tICcuLi9iMmMnO1xyXG5cclxudHlwZSBJZFRva2VuQ2xhaW1zV2l0aFBvbGljeUlkID0gSWRUb2tlbkNsYWltcyAmIHtcclxuICBhY3I/OiBzdHJpbmcsXHJcbiAgdGZwPzogc3RyaW5nLFxyXG59O1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2UgZXh0ZW5kcyBBcGlTZXJ2aWNlQmFzZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBtc2FsRGVzdHJveWluZyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGFwcENvbnRleHQ6IEFwcENvbnRleHRTZXJ2aWNlLFxyXG5cclxuICAgIEBJbmplY3QoTVNBTF9HVUFSRF9DT05GSUcpXHJcbiAgICBwcml2YXRlIG1zYWxHdWFyZENvbmZpZzogTXNhbEd1YXJkQ29uZmlndXJhdGlvbixcclxuICAgIHByaXZhdGUgbXNhbFNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtc2FsQnJvYWRjYXN0U2VydmljZTogTXNhbEJyb2FkY2FzdFNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGh0dHApO1xyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMubXNhbERlc3Ryb3lpbmckLm5leHQodW5kZWZpbmVkKTtcclxuICAgIHRoaXMubXNhbERlc3Ryb3lpbmckLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQoKSB7XHJcbiAgICB0aGlzLnNldERlZmF1bHRzKCk7XHJcblxyXG4gICAgdGhpcy5tc2FsU2VydmljZS5pbml0aWFsaXplKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhgbXNhbC5hcHA6IGluaXRNU0FMIHN0YXJ0ZWRgKTtcclxuICAgICAgdGhpcy5pbml0TVNBTCgpO1xyXG4gICAgICBjb25zb2xlLmxvZyhgbXNhbC5hcHA6IGluaXRNU0FMIGZpbmlzaGVkYCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGVmYXVsdHMoKSB7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL0F6dXJlQUQvbWljcm9zb2Z0LWF1dGhlbnRpY2F0aW9uLWxpYnJhcnktZm9yLWpzL2Jsb2IvZGV2L3NhbXBsZXMvbXNhbC1hbmd1bGFyLXYzLXNhbXBsZXMvYW5ndWxhci1iMmMtc2FtcGxlLWFwcC9zcmMvYXBwL2FwcC5jb21wb25lbnQudHNcclxuXHJcbiAgICBUb2tlbiBWYWxpZGF0aW9uOlxyXG4gICAgICBodHRwczovL2p3dC5pb1xyXG5cclxuICAgIFRva2VuIHR5cGVzOlxyXG4gICAgICBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvYWN0aXZlLWRpcmVjdG9yeS1iMmMvdG9rZW5zLW92ZXJ2aWV3XHJcbiAgICAgIElEIHRva2VuIC0gQSBKV1QgdGhhdCBjb250YWlucyBjbGFpbXMgdGhhdCB5b3UgY2FuIHVzZSB0byBpZGVudGlmeSB1c2VycyBpbiB5b3VyIGFwcGxpY2F0aW9uXHJcbiAgICAgIEFjY2VzcyB0b2tlbiAtIEEgSldUIHRoYXQgY29udGFpbnMgY2xhaW1zIHRoYXQgeW91IGNhbiB1c2UgdG8gaWRlbnRpZnkgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnMgdG8geW91ciBBUElzLlxyXG4gICAgICAgICAgICAgICAgICAgICBBY2Nlc3MgdG9rZW5zIGFyZSBzaWduZWQsIGJ1dCB0aGV5IGFyZW4ndCBlbmNyeXB0ZWRcclxuICAgICAgUmVmcmVzaCB0b2tlbiAtIFJlZnJlc2ggdG9rZW5zIGFyZSB1c2VkIHRvIGFjcXVpcmUgbmV3IElEIHRva2VucyBhbmQgYWNjZXNzIHRva2VucyBpbiBhbiBPQXV0aCAyLjAgZmxvdy5cclxuICAqL1xyXG4gIHByaXZhdGUgaW5pdE1TQUwoKSB7XHJcbiAgICAvL0IyQ1xyXG4gICAgbGV0IHNpZ25VcFNpZ25JbiA9IE1TQUxCMkMuZ2V0UG9saWN5QnlUeXBlKFBvbGljeVR5cGUuc2lnblVwU2lnbkluKTtcclxuICAgIGxldCBlZGl0UHJvZmlsZSA9IE1TQUxCMkMuZ2V0UG9saWN5QnlUeXBlKFBvbGljeVR5cGUuZWRpdFByb2ZpbGUpO1xyXG4gICAgbGV0IHJlc2V0UGFzc3dvcmQgPSBNU0FMQjJDLmdldFBvbGljeUJ5VHlwZShQb2xpY3lUeXBlLnJlc2V0UGFzc3dvcmQpO1xyXG5cclxuICAgIHRoaXMubXNhbFNlcnZpY2UuaGFuZGxlUmVkaXJlY3RPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlc3VsdDogQXV0aGVudGljYXRpb25SZXN1bHQpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgbXNhbC5hcHA6IGhhbmRsZVJlZGlyZWN0T2JzZXJ2YWJsZWApO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmVuYWJsZUFjY291bnRTdG9yYWdlRXZlbnRzKCk7XHJcbiAgICB0aGlzLm1zYWxCcm9hZGNhc3RTZXJ2aWNlLm1zYWxTdWJqZWN0JC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigobXNnOiBFdmVudE1lc3NhZ2UpID0+XHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuSU5JVElBTElaRV9FTkQgfHxcclxuXHJcbiAgICAgICAgICAvL0FDQ09VTlRfQURERUQgYW5kIEFDQ09VTlRfUkVNT1ZFRCBldmVudHMgZW1pdHRlZCB3aGVuIGEgdXNlciBsb2dzIGluIG9yIG91dCBvZiBhbm90aGVyIHRhYiBvciB3aW5kb3dcclxuICAgICAgICAgIG1zZy5ldmVudFR5cGUgPT09IEV2ZW50VHlwZS5BQ0NPVU5UX0FEREVEIHx8XHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuQUNDT1VOVF9SRU1PVkVEIHx8XHJcblxyXG4gICAgICAgICAgLy9Mb2dpbiBGYWlsdXJlXHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTE9HSU5fRkFJTFVSRSB8fFxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fRkFJTFVSRSB8fFxyXG5cclxuICAgICAgICAgIC8vTG9nT3V0XHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTE9HT1VUX1NVQ0NFU1MgfHxcclxuXHJcbiAgICAgICAgICAvL0xvZ0luXHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTE9HSU5fU1VDQ0VTUyB8fFxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fU1VDQ0VTUyB8fFxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLlNTT19TSUxFTlRfU1VDQ0VTU1xyXG4gICAgICAgICksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubXNhbERlc3Ryb3lpbmckKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKG1zZzogRXZlbnRNZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChtc2cuZXZlbnRUeXBlKSB7XHJcbiAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5JTklUSUFMSVpFX0VORDpcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYG1zYWwuYXBwOiBJTklUSUFMSVpFX0VORCBmaXJlZGApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5BQ0NPVU5UX0FEREVEOlxyXG4gICAgICAgICAgY2FzZSBFdmVudFR5cGUuQUNDT1VOVF9SRU1PVkVEOlxyXG4gICAgICAgICAgICBpZiAodGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSA9IFwiL1wiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLkxPR0lOX0ZBSUxVUkU6XHJcbiAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX0ZBSUxVUkU6XHJcbiAgICAgICAgICAgIGlmICghTVNBTFV0aWxzLmlzQjJDKCkpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vQ2hlY2sgZm9yIGZvcmdvdCBwYXNzd29yZCBlcnJvci4gTGVhcm4gbW9yZSBhYm91dCBBQUQgZXJyb3IgY29kZXMgYXRcclxuICAgICAgICAgICAgLy9odHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9hY3RpdmUtZGlyZWN0b3J5L2RldmVsb3AvcmVmZXJlbmNlLWFhZHN0cy1lcnJvci1jb2Rlc1xyXG4gICAgICAgICAgICBpZiAobXNnLmVycm9yICYmIG1zZy5lcnJvci5tZXNzYWdlLmluZGV4T2YoJ0FBREIyQzkwMTE4JykgPiAtMSkge1xyXG4gICAgICAgICAgICAgIGxldCByZXNldFBhc3N3b3JkRmxvd1JlcXVlc3Q6IFJlZGlyZWN0UmVxdWVzdCB8IFBvcHVwUmVxdWVzdCAgPSB7XHJcbiAgICAgICAgICAgICAgICAgIGF1dGhvcml0eTogcmVzZXRQYXNzd29yZC5hdXRob3JpdHksXHJcbiAgICAgICAgICAgICAgICAgIHNjb3BlczogW10sXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5sb2dpbihyZXNldFBhc3N3b3JkRmxvd1JlcXVlc3QpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5MT0dJTl9TVUNDRVNTOlxyXG4gICAgICAgICAgY2FzZSBFdmVudFR5cGUuQUNRVUlSRV9UT0tFTl9TVUNDRVNTOlxyXG4gICAgICAgICAgY2FzZSBFdmVudFR5cGUuU1NPX1NJTEVOVF9TVUNDRVNTOlxyXG4gICAgICAgICAgICBsZXQgcGF5bG9hZCA9IG1zZy5wYXlsb2FkIGFzIEF1dGhlbnRpY2F0aW9uUmVzdWx0O1xyXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghTVNBTFV0aWxzLmlzQjJDKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLnNldEFjdGl2ZUFjY291bnQocGF5bG9hZC5hY2NvdW50KTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vQjJDXHJcbiAgICAgICAgICAgIGxldCB0b2tlbiA9IHBheWxvYWQuaWRUb2tlbkNsYWltcyBhcyBJZFRva2VuQ2xhaW1zV2l0aFBvbGljeUlkXHJcblxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogc2lnblVwU2lnbkluXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBpZiAodG9rZW4uYWNyID09PSBzaWduVXBTaWduSW4ubmFtZSB8fCB0b2tlbi50ZnAgPT09IHNpZ25VcFNpZ25Jbi5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5zZXRBY3RpdmVBY2NvdW50KHBheWxvYWQuYWNjb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgKiBlZGl0UHJvZmlsZVxyXG4gICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgKiBGb3IgdGhlIHB1cnBvc2Ugb2Ygc2V0dGluZyBhbiBhY3RpdmUgYWNjb3VudCBmb3IgVUkgdXBkYXRlLCB3ZSB3YW50IHRvIGNvbnNpZGVyIG9ubHkgdGhlIGF1dGggcmVzcG9uc2UgcmVzdWx0aW5nXHJcbiAgICAgICAgICAgICAqIGZyb20gU1VTSSBmbG93LiBcImFjclwiIGNsYWltIGluIHRoZSBpZCB0b2tlbiB0ZWxscyB1cyB0aGUgcG9saWN5IChOT1RFOiBuZXdlciBwb2xpY2llcyBtYXkgdXNlIHRoZSBcInRmcFwiIGNsYWltIGluc3RlYWQpLlxyXG4gICAgICAgICAgICAgKiBUbyBsZWFybiBtb3JlIGFib3V0IEIyQyB0b2tlbnMsIHZpc2l0IGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL2FjdGl2ZS1kaXJlY3RvcnktYjJjL3Rva2Vucy1vdmVydmlld1xyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYgKHRva2VuLmFjciA9PT0gZWRpdFByb2ZpbGUubmFtZSB8fCB0b2tlbi50ZnAgPT09IGVkaXRQcm9maWxlLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgY29uc3Qgc2lnbkluQWNjb3VudCA9IHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKVxyXG4gICAgICAgICAgICAgICAgICAuZmluZCgoYWNjb3VudDogQWNjb3VudEluZm8pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudC5pZFRva2VuQ2xhaW1zPy5vaWQgPT09IHRva2VuLm9pZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQuaWRUb2tlbkNsYWltcz8uc3ViID09PSB0b2tlbi5zdWIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKGFjY291bnQuaWRUb2tlbkNsYWltcyBhcyBJZFRva2VuQ2xhaW1zV2l0aFBvbGljeUlkKS5hY3IgPT09IHNpZ25VcFNpZ25Jbi5uYW1lIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChhY2NvdW50LmlkVG9rZW5DbGFpbXMgYXMgSWRUb2tlbkNsYWltc1dpdGhQb2xpY3lJZCkudGZwID09PSBzaWduVXBTaWduSW4ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuZm9yY2VSZWF1dGhlbnRpY2F0ZShzaWduSW5BY2NvdW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIHJlc2V0UGFzc3dvcmRcclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogQmVsb3cgd2UgYXJlIGNoZWNraW5nIGlmIHRoZSB1c2VyIGlzIHJldHVybmluZyBmcm9tIHRoZSByZXNldCBwYXNzd29yZCBmbG93LlxyXG4gICAgICAgICAgICAgKiBJZiBzbywgd2Ugd2lsbCBhc2sgdGhlIHVzZXIgdG8gcmVhdXRoZW50aWNhdGUgd2l0aCB0aGVpciBuZXcgcGFzc3dvcmQuXHJcbiAgICAgICAgICAgICAqIElmIHlvdSBkbyBub3Qgd2FudCB0aGlzIGJlaGF2aW9yIGFuZCBwcmVmZXIgeW91ciB1c2VycyB0byBzdGF5IHNpZ25lZCBpbiBpbnN0ZWFkLFxyXG4gICAgICAgICAgICAgKiB5b3UgY2FuIHJlcGxhY2UgdGhlIGNvZGUgYmVsb3cgd2l0aCB0aGUgc2FtZSBwYXR0ZXJuIHVzZWQgZm9yIGhhbmRsaW5nIHRoZSByZXR1cm4gZnJvbVxyXG4gICAgICAgICAgICAgKiBwcm9maWxlIGVkaXQgZmxvd1xyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYgKHRva2VuLmFjciA9PT0gcmVzZXRQYXNzd29yZC5uYW1lIHx8IHRva2VuLnRmcCA9PT0gcmVzZXRQYXNzd29yZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlYXV0aGVudGljYXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5tc2FsQnJvYWRjYXN0U2VydmljZS5pblByb2dyZXNzJC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigoc3RhdHVzOiBJbnRlcmFjdGlvblN0YXR1cykgPT5cclxuICAgICAgICAgIHN0YXR1cyA9PT0gSW50ZXJhY3Rpb25TdGF0dXMuU3RhcnR1cCB8fFxyXG4gICAgICAgICAgc3RhdHVzID09PSBJbnRlcmFjdGlvblN0YXR1cy5Ob25lXHJcbiAgICAgICAgKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5tc2FsRGVzdHJveWluZyQpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoc3RhdHVzOiBJbnRlcmFjdGlvblN0YXR1cykgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIEluaXRpYWwgc3RhdHVzIGJlZm9yZSBpbnRlcmFjdGlvbiBvY2N1cnNcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgY2FzZSBJbnRlcmFjdGlvblN0YXR1cy5TdGFydHVwOlxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgbXNhbC5hcHA6IEludGVyYWN0aW9uU3RhdHVzLlN0YXJ0dXBgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAqIFN0YXR1cyBzZXQgd2hlbiBpbnRlcmFjdGlvbiBpcyBjb21wbGV0ZVxyXG4gICAgICAgICAgKi9cclxuICAgICAgICAgIGNhc2UgSW50ZXJhY3Rpb25TdGF0dXMuTm9uZTpcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYG1zYWwuYXBwOiBJbnRlcmFjdGlvblN0YXR1cy5Ob25lYCk7XHJcblxyXG4gICAgICAgICAgICBNU0FMUmVkaXJlY3QuaGFuZGxlKHRoaXMucm91dGVyLCAnbXNhbEJyb2FkY2FzdFNlcnZpY2UuaW5Qcm9ncmVzcyQgSW50ZXJhY3Rpb25TdGF0dXMuTm9uZScpO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrQW5kU2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBY3RpdmVBY2NvdW50KCk6IEFjY291bnRJbmZvIHwgbnVsbCB7XHJcbiAgICB0aGlzLmNoZWNrQW5kU2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgcmV0dXJuIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0FuZFNldEFjdGl2ZUFjY291bnQoKSB7XHJcbiAgICBsZXQgYWN0aXZlQWNjb3VudCA9IHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgbGV0IGFjY291bnRzID0gdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpO1xyXG5cclxuICAgIGlmICghYWN0aXZlQWNjb3VudCAmJiBhY2NvdW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2Uuc2V0QWN0aXZlQWNjb3VudChhY2NvdW50c1swXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzUG9wdXAocG9wdXA/OiBib29sZWFuKSB7XHJcbiAgICBpZiAodHlwZW9mIHBvcHVwID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1zYWxHdWFyZENvbmZpZy5pbnRlcmFjdGlvblR5cGUgPT09IEludGVyYWN0aW9uVHlwZS5Qb3B1cDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcG9wdXA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFjcXVpcmVUb2tlbigpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgbGV0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHNjb3BlczogTVNBTFV0aWxzLmdldEFwaVNjb3BlcygpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNQb3B1cCgpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1zYWxTZXJ2aWNlLmFjcXVpcmVUb2tlblBvcHVwKHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZSA/IHJlc3BvbnNlLmFjY2Vzc1Rva2VuIDogbnVsbDtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1zYWxTZXJ2aWNlLmFjcXVpcmVUb2tlblJlZGlyZWN0KHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgbWFwKCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyRW1haWwoKSB7XHJcbiAgICBsZXQgY3VycmVudFVzZXIgPSB0aGlzLmFwcENvbnRleHQuY3VycmVudFVzZXI7XHJcbiAgICBsZXQgYWN0aXZlQWNjb3VudCA9IHRoaXMuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG5cclxuICAgIGlmIChhY3RpdmVBY2NvdW50KSB7XHJcbiAgICAgIHJldHVybiBhY3RpdmVBY2NvdW50LnVzZXJuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXJyZW50VXNlciA/IGN1cnJlbnRVc2VyLkVtYWlsIDogJyc7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyTmFtZSgpIHtcclxuICAgIGxldCBjdXJyZW50VXNlciA9IHRoaXMuYXBwQ29udGV4dC5jdXJyZW50VXNlcjtcclxuICAgIGxldCBhY3RpdmVBY2NvdW50ID0gdGhpcy5nZXRBY3RpdmVBY2NvdW50KCk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZUFjY291bnQpIHtcclxuICAgICAgcmV0dXJuIGFjdGl2ZUFjY291bnQubmFtZSA/IGFjdGl2ZUFjY291bnQubmFtZSA6IGN1cnJlbnRVc2VyID8gY3VycmVudFVzZXIuZGlzcGxheU5hbWVPckZ1bGxOYW1lIDogJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRVc2VyID8gY3VycmVudFVzZXIuZGlzcGxheU5hbWVPckZ1bGxOYW1lIDogJyc7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAgVmFkaW1PUzpcclxuICAgIFdBUk5JTkcgdG8gYWxsIGRldmVsb3BlcnMhIEJlIHN1cmUgdGhhdCB5b3UgcmVhbGx5IG5lZWQgdG8gZGlyZWN0bHkgY2FsbCB0aGlzIG1ldGhvZCFcclxuICAqL1xyXG4gIGdldEFjY2Vzc1Rva2VuKHJlcXVlc3RVcmw/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgbGV0IGFjdGl2ZUFjY291bnQgPSB0aGlzLmdldEFjdGl2ZUFjY291bnQoKTtcclxuICAgIGxldCBzaWxlbnRSZXF1ZXN0OiBTaWxlbnRSZXF1ZXN0ID0ge1xyXG4gICAgICBzY29wZXM6IE1TQUxVdGlscy5nZXRBcGlTY29wZXMoKSxcclxuICAgICAgYWNjb3VudDogYWN0aXZlQWNjb3VudFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoYWN0aXZlQWNjb3VudCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tc2FsU2VydmljZS5hY3F1aXJlVG9rZW5TaWxlbnQoc2lsZW50UmVxdWVzdCkucGlwZShcclxuICAgICAgICBtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmFjY2Vzc1Rva2VuO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJTaWxlbnQgdG9rZW4gYWNxdWlzaXRpb24gZmFpbHMuXCIpO1xyXG5cclxuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNxdWlyZVRva2VuKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuYWNxdWlyZVRva2VuKCk7XHJcbiAgfVxyXG5cclxuICBmb3JjZVJlYXV0aGVudGljYXRlKGFjY291bnQ/KSB7XHJcbiAgICBpZiAoTVNBTFV0aWxzLmlzQjJDKCkpIHtcclxuICAgICAgbGV0IHNpZ25VcFNpZ25JbiA9IE1TQUxCMkMuZ2V0UG9saWN5QnlUeXBlKFBvbGljeVR5cGUuc2lnblVwU2lnbkluKTtcclxuICAgICAgbGV0IHNpZ25VcFNpZ25JbkZsb3dSZXF1ZXN0OiBSZWRpcmVjdFJlcXVlc3QgfCBQb3B1cFJlcXVlc3QgID0ge1xyXG4gICAgICAgIGF1dGhvcml0eTogc2lnblVwU2lnbkluLmF1dGhvcml0eSxcclxuICAgICAgICBzY29wZXM6IFtdLFxyXG4gICAgICAgIHByb21wdDogUHJvbXB0VmFsdWUuTE9HSU4sIC8vIGZvcmNlIHVzZXIgdG8gcmVhdXRoZW50aWNhdGUgd2l0aCB0aGVpciBuZXcgcGFzc3dvcmRcclxuICAgICAgICBhY2NvdW50OiBhY2NvdW50XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmxvZ2luKHNpZ25VcFNpZ25JbkZsb3dSZXF1ZXN0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9naW4odXNlckZsb3dSZXF1ZXN0PzogUmVkaXJlY3RSZXF1ZXN0IHwgUG9wdXBSZXF1ZXN0LCBwb3B1cD86IGJvb2xlYW4pIHtcclxuICAgIGxldCBhdXRoUmVxdWVzdENmZzogYW55ID0gdGhpcy5tc2FsR3VhcmRDb25maWcuYXV0aFJlcXVlc3Q7XHJcbiAgICBsZXQgYXV0aFJlcXVlc3QgPSBudWxsO1xyXG5cclxuICAgIGlmIChhdXRoUmVxdWVzdENmZykge1xyXG4gICAgICBhdXRoUmVxdWVzdCA9IGF1dGhSZXF1ZXN0Q2ZnKHRoaXMubXNhbFNlcnZpY2UsIHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1BvcHVwKHBvcHVwKSkge1xyXG4gICAgICBpZiAoYXV0aFJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ2luUG9wdXAoeyAuLi5hdXRoUmVxdWVzdCwgLi4udXNlckZsb3dSZXF1ZXN0IH0gYXMgUG9wdXBSZXF1ZXN0KS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBBdXRoZW50aWNhdGlvblJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5zZXRBY3RpdmVBY2NvdW50KHJlc3BvbnNlLmFjY291bnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubXNhbFNlcnZpY2UubG9naW5Qb3B1cCh1c2VyRmxvd1JlcXVlc3QpLnN1YnNjcmliZSgocmVzcG9uc2U6IEF1dGhlbnRpY2F0aW9uUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLnNldEFjdGl2ZUFjY291bnQocmVzcG9uc2UuYWNjb3VudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoYXV0aFJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ2luUmVkaXJlY3QoeyAuLi5hdXRoUmVxdWVzdCwgLi4udXNlckZsb3dSZXF1ZXN0IH0gYXMgUmVkaXJlY3RSZXF1ZXN0KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ2luUmVkaXJlY3QodXNlckZsb3dSZXF1ZXN0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9nb3V0KHBvcHVwPzogYm9vbGVhbikge1xyXG4gICAgbGV0IGFjdGl2ZUFjY291bnQgPSB0aGlzLmdldEFjdGl2ZUFjY291bnQoKTtcclxuICAgIGlmICghYWN0aXZlQWNjb3VudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNQb3B1cChwb3B1cCkpIHtcclxuICAgICAgdGhpcy5tc2FsU2VydmljZS5sb2dvdXRQb3B1cCh7IGFjY291bnQ6IGFjdGl2ZUFjY291bnQsIG1haW5XaW5kb3dSZWRpcmVjdFVyaTogXCIvXCIgfSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmFwcENvbnRleHQuY2xlYXJXZWJTdG9yYWdlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMubXNhbFNlcnZpY2UubG9nb3V0UmVkaXJlY3QoeyBhY2NvdW50OiBhY3RpdmVBY2NvdW50IH0pLnBpcGUobWFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLmFwcENvbnRleHQuY2xlYXJXZWJTdG9yYWdlKCk7XHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzVXNlckF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5nZXRBY3RpdmVBY2NvdW50KCkgIT0gbnVsbDtcclxuICB9XHJcblxyXG4gIGlzVXNlclNpZ25lZEluKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmlzVXNlckF1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXBwQ29udGV4dC5jdXJyZW50LmlzVXNlclNpZ25lZEluICYmIHRoaXMuYXBwQ29udGV4dC5jdXJyZW50VXNlcikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc1VzZXJBZG1pbigpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5pc1VzZXJTaWduZWRJbigpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5hcHBDb250ZXh0LmN1cnJlbnQuaXNVc2VyQWRtaW47XHJcbiAgfVxyXG59XHJcbiJdfQ==
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL2lhbS9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUJBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRTlELE9BQU8sRUFBYyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQTZELE1BQU0scUJBQXFCLENBQUM7QUFDbkgsT0FBTyxFQUFtRCxTQUFTLEVBQWlCLDRCQUE0QixFQUM5RyxpQkFBaUIsRUFBRSxlQUFlLEVBQWdCLFdBQVcsRUFDOUQsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixLQUFLO0FBQ0wsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7Ozs7O0FBVTdDLE1BQU0sT0FBTyxXQUFZLFNBQVEsY0FBYztJQUtqQztJQUNGO0lBQ0E7SUFHQTtJQUNBO0lBQ0E7SUFYTyxlQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUMvQyxXQUFXLEdBQVksS0FBSyxDQUFDO0lBRXJDLFlBQ1ksSUFBZ0IsRUFDbEIsTUFBYyxFQUNkLFVBQTZCLEVBRzdCLGVBQXVDLEVBQ3ZDLFdBQXdCLEVBQ3hCLG9CQUEwQztRQUNsRCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFSRixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2xCLFdBQU0s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Q0FBQztTQUNkO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDN0MsQ0FBQztxRUEzWlUsV0FBVyxxR0FTWixpQkFBaUI7Z0VBVGhCLFdBQVcsV0FBWCxXQUFXLG1CQUZWLE1BQU07O3VGQUVQLFdBQVc7Y0FIdkIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COztzQkFVSSxNQUFNO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnkgdmFkaW1Ab3Nvdml0bnkuY29tXHJcbiAgICBBbmF0b2x5IE9zb3ZpdG55IGFuYXRvbHlAb3Nvdml0bnkuY29tXHJcblxyXG4gIENyZWF0ZWQ6XHJcbiAgICA2IERlYyAyMDE4XHJcblxyXG4gIERlc2NyaXB0aW9uOlxyXG4gICAgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50XHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNi0yMDIyIE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy9Ob2RlXHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBvZiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1TQUxfR1VBUkRfQ09ORklHLCBNc2FsQnJvYWRjYXN0U2VydmljZSwgTXNhbEd1YXJkQ29uZmlndXJhdGlvbiwgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcclxuaW1wb3J0IHsgQWNjb3VudEluZm8sIEF1dGhlbnRpY2F0aW9uUmVzdWx0LCBFdmVudE1lc3NhZ2UsIEV2ZW50VHlwZSwgSWRUb2tlbkNsYWltcywgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvcixcclxuICBJbnRlcmFjdGlvblN0YXR1cywgSW50ZXJhY3Rpb25UeXBlLCBQb3B1cFJlcXVlc3QsIFByb21wdFZhbHVlLCBSZWRpcmVjdFJlcXVlc3QsIFNpbGVudFJlcXVlc3QsIFNzb1NpbGVudFJlcXVlc3RcclxufSBmcm9tICdAYXp1cmUvbXNhbC1icm93c2VyJztcclxuXHJcbi8vQXBwXHJcbmltcG9ydCB7IEFwaVNlcnZpY2VCYXNlIH0gZnJvbSAnLi4vLi4vZGF0YS9iYXNlL2FwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2FwcGNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IE1TQUxSZWRpcmVjdCB9IGZyb20gJy4uL3JlZGlyZWN0JztcclxuaW1wb3J0IHsgTVNBTFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBNU0FMQjJDLCBQb2xpY3lUeXBlIH0gZnJvbSAnLi4vYjJjJztcclxuXHJcbnR5cGUgSWRUb2tlbkNsYWltc1dpdGhQb2xpY3lJZCA9IElkVG9rZW5DbGFpbXMgJiB7XHJcbiAgYWNyPzogc3RyaW5nLFxyXG4gIHRmcD86IHN0cmluZyxcclxufTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIGV4dGVuZHMgQXBpU2VydmljZUJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbXNhbERlc3Ryb3lpbmckID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhcHBDb250ZXh0OiBBcHBDb250ZXh0U2VydmljZSxcclxuXHJcbiAgICBASW5qZWN0KE1TQUxfR1VBUkRfQ09ORklHKVxyXG4gICAgcHJpdmF0ZSBtc2FsR3VhcmRDb25maWc6IE1zYWxHdWFyZENvbmZpZ3VyYXRpb24sXHJcbiAgICBwcml2YXRlIG1zYWxTZXJ2aWNlOiBNc2FsU2VydmljZSxcclxuICAgIHByaXZhdGUgbXNhbEJyb2FkY2FzdFNlcnZpY2U6IE1zYWxCcm9hZGNhc3RTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcihodHRwKTtcclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLm1zYWxEZXN0cm95aW5nJC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICB0aGlzLm1zYWxEZXN0cm95aW5nJC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0KCkge1xyXG4gICAgdGhpcy5zZXREZWZhdWx0cygpO1xyXG5cclxuICAgIHRoaXMubXNhbFNlcnZpY2UuaW5pdGlhbGl6ZSgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgY29uc29sZS5sb2coYG1zYWwuYXBwOiBpbml0TVNBTCBzdGFydGVkYCk7XHJcbiAgICAgIHRoaXMuaW5pdE1TQUwoKTtcclxuICAgICAgY29uc29sZS5sb2coYG1zYWwuYXBwOiBpbml0TVNBTCBmaW5pc2hlZGApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERlZmF1bHRzKCkge1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9BenVyZUFEL21pY3Jvc29mdC1hdXRoZW50aWNhdGlvbi1saWJyYXJ5LWZvci1qcy9ibG9iL2Rldi9zYW1wbGVzL21zYWwtYW5ndWxhci12My1zYW1wbGVzL2FuZ3VsYXItYjJjLXNhbXBsZS1hcHAvc3JjL2FwcC9hcHAuY29tcG9uZW50LnRzXHJcblxyXG4gICAgVG9rZW4gVmFsaWRhdGlvbjpcclxuICAgICAgaHR0cHM6Ly9qd3QuaW9cclxuXHJcbiAgICBUb2tlbiB0eXBlczpcclxuICAgICAgaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL2FjdGl2ZS1kaXJlY3RvcnktYjJjL3Rva2Vucy1vdmVydmlld1xyXG4gICAgICBJRCB0b2tlbiAtIEEgSldUIHRoYXQgY29udGFpbnMgY2xhaW1zIHRoYXQgeW91IGNhbiB1c2UgdG8gaWRlbnRpZnkgdXNlcnMgaW4geW91ciBhcHBsaWNhdGlvblxyXG4gICAgICBBY2Nlc3MgdG9rZW4gLSBBIEpXVCB0aGF0IGNvbnRhaW5zIGNsYWltcyB0aGF0IHlvdSBjYW4gdXNlIHRvIGlkZW50aWZ5IHRoZSBncmFudGVkIHBlcm1pc3Npb25zIHRvIHlvdXIgQVBJcy5cclxuICAgICAgICAgICAgICAgICAgICAgQWNjZXNzIHRva2VucyBhcmUgc2lnbmVkLCBidXQgdGhleSBhcmVuJ3QgZW5jcnlwdGVkXHJcbiAgICAgIFJlZnJlc2ggdG9rZW4gLSBSZWZyZXNoIHRva2VucyBhcmUgdXNlZCB0byBhY3F1aXJlIG5ldyBJRCB0b2tlbnMgYW5kIGFjY2VzcyB0b2tlbnMgaW4gYW4gT0F1dGggMi4wIGZsb3cuXHJcbiAgKi9cclxuICBwcml2YXRlIGluaXRNU0FMKCkge1xyXG4gICAgLy9CMkNcclxuICAgIGxldCBzaWduVXBTaWduSW4gPSBNU0FMQjJDLmdldFBvbGljeUJ5VHlwZShQb2xpY3lUeXBlLnNpZ25VcFNpZ25Jbik7XHJcbiAgICBsZXQgZWRpdFByb2ZpbGUgPSBNU0FMQjJDLmdldFBvbGljeUJ5VHlwZShQb2xpY3lUeXBlLmVkaXRQcm9maWxlKTtcclxuICAgIGxldCByZXNldFBhc3N3b3JkID0gTVNBTEIyQy5nZXRQb2xpY3lCeVR5cGUoUG9saWN5VHlwZS5yZXNldFBhc3N3b3JkKTtcclxuXHJcbiAgICB0aGlzLm1zYWxTZXJ2aWNlLmhhbmRsZVJlZGlyZWN0T2JzZXJ2YWJsZSgpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXN1bHQ6IEF1dGhlbnRpY2F0aW9uUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYG1zYWwuYXBwOiBoYW5kbGVSZWRpcmVjdE9ic2VydmFibGVgKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5lbmFibGVBY2NvdW50U3RvcmFnZUV2ZW50cygpO1xyXG4gICAgdGhpcy5tc2FsQnJvYWRjYXN0U2VydmljZS5tc2FsU3ViamVjdCQucGlwZShcclxuICAgICAgICBmaWx0ZXIoKG1zZzogRXZlbnRNZXNzYWdlKSA9PlxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLklOSVRJQUxJWkVfRU5EIHx8XHJcblxyXG4gICAgICAgICAgLy9BQ0NPVU5UX0FEREVEIGFuZCBBQ0NPVU5UX1JFTU9WRUQgZXZlbnRzIGVtaXR0ZWQgd2hlbiBhIHVzZXIgbG9ncyBpbiBvciBvdXQgb2YgYW5vdGhlciB0YWIgb3Igd2luZG93XHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuQUNDT1VOVF9BRERFRCB8fFxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkFDQ09VTlRfUkVNT1ZFRCB8fFxyXG5cclxuICAgICAgICAgIC8vTG9naW4gRmFpbHVyZVxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkxPR0lOX0ZBSUxVUkUgfHxcclxuICAgICAgICAgIG1zZy5ldmVudFR5cGUgPT09IEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX0ZBSUxVUkUgfHxcclxuXHJcbiAgICAgICAgICAvL0xvZ091dFxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkxPR09VVF9TVUNDRVNTIHx8XHJcblxyXG4gICAgICAgICAgLy9Mb2dJblxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkxPR0lOX1NVQ0NFU1MgfHxcclxuICAgICAgICAgIG1zZy5ldmVudFR5cGUgPT09IEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX1NVQ0NFU1MgfHxcclxuICAgICAgICAgIG1zZy5ldmVudFR5cGUgPT09IEV2ZW50VHlwZS5TU09fU0lMRU5UX1NVQ0NFU1NcclxuICAgICAgICApLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm1zYWxEZXN0cm95aW5nJClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChtc2c6IEV2ZW50TWVzc2FnZSkgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAobXNnLmV2ZW50VHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBFdmVudFR5cGUuSU5JVElBTElaRV9FTkQ6XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBtc2FsLmFwcDogSU5JVElBTElaRV9FTkQgZmlyZWRgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBFdmVudFR5cGUuQUNDT1VOVF9BRERFRDpcclxuICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLkFDQ09VTlRfUkVNT1ZFRDpcclxuICAgICAgICAgICAgaWYgKHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgPSBcIi9cIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5MT0dJTl9GQUlMVVJFOlxyXG4gICAgICAgICAgY2FzZSBFdmVudFR5cGUuQUNRVUlSRV9UT0tFTl9GQUlMVVJFOlxyXG4gICAgICAgICAgICBpZiAoIU1TQUxVdGlscy5pc0IyQygpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL0NoZWNrIGZvciBmb3Jnb3QgcGFzc3dvcmQgZXJyb3IuIExlYXJuIG1vcmUgYWJvdXQgQUFEIGVycm9yIGNvZGVzIGF0XHJcbiAgICAgICAgICAgIC8vaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvYWN0aXZlLWRpcmVjdG9yeS9kZXZlbG9wL3JlZmVyZW5jZS1hYWRzdHMtZXJyb3ItY29kZXNcclxuICAgICAgICAgICAgaWYgKG1zZy5lcnJvciAmJiBtc2cuZXJyb3IubWVzc2FnZS5pbmRleE9mKCdBQURCMkM5MDExOCcpID4gLTEpIHtcclxuICAgICAgICAgICAgICBsZXQgcmVzZXRQYXNzd29yZEZsb3dSZXF1ZXN0OiBSZWRpcmVjdFJlcXVlc3QgfCBQb3B1cFJlcXVlc3QgID0ge1xyXG4gICAgICAgICAgICAgICAgICBhdXRob3JpdHk6IHJlc2V0UGFzc3dvcmQuYXV0aG9yaXR5LFxyXG4gICAgICAgICAgICAgICAgICBzY29wZXM6IFtdLFxyXG4gICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMubG9naW4ocmVzZXRQYXNzd29yZEZsb3dSZXF1ZXN0KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBFdmVudFR5cGUuTE9HSU5fU1VDQ0VTUzpcclxuICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fU1VDQ0VTUzpcclxuICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLlNTT19TSUxFTlRfU1VDQ0VTUzpcclxuICAgICAgICAgICAgbGV0IHBheWxvYWQgPSBtc2cucGF5bG9hZCBhcyBBdXRoZW50aWNhdGlvblJlc3VsdDtcclxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIU1TQUxVdGlscy5pc0IyQygpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5zZXRBY3RpdmVBY2NvdW50KHBheWxvYWQuYWNjb3VudCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL0IyQ1xyXG4gICAgICAgICAgICBsZXQgdG9rZW4gPSBwYXlsb2FkLmlkVG9rZW5DbGFpbXMgYXMgSWRUb2tlbkNsYWltc1dpdGhQb2xpY3lJZFxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIHNpZ25VcFNpZ25JblxyXG4gICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYgKHRva2VuLmFjciA9PT0gc2lnblVwU2lnbkluLm5hbWUgfHwgdG9rZW4udGZwID09PSBzaWduVXBTaWduSW4ubmFtZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2Uuc2V0QWN0aXZlQWNjb3VudChwYXlsb2FkLmFjY291bnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogZWRpdFByb2ZpbGVcclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogRm9yIHRoZSBwdXJwb3NlIG9mIHNldHRpbmcgYW4gYWN0aXZlIGFjY291bnQgZm9yIFVJIHVwZGF0ZSwgd2Ugd2FudCB0byBjb25zaWRlciBvbmx5IHRoZSBhdXRoIHJlc3BvbnNlIHJlc3VsdGluZ1xyXG4gICAgICAgICAgICAgKiBmcm9tIFNVU0kgZmxvdy4gXCJhY3JcIiBjbGFpbSBpbiB0aGUgaWQgdG9rZW4gdGVsbHMgdXMgdGhlIHBvbGljeSAoTk9URTogbmV3ZXIgcG9saWNpZXMgbWF5IHVzZSB0aGUgXCJ0ZnBcIiBjbGFpbSBpbnN0ZWFkKS5cclxuICAgICAgICAgICAgICogVG8gbGVhcm4gbW9yZSBhYm91dCBCMkMgdG9rZW5zLCB2aXNpdCBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9hY3RpdmUtZGlyZWN0b3J5LWIyYy90b2tlbnMtb3ZlcnZpZXdcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGlmICh0b2tlbi5hY3IgPT09IGVkaXRQcm9maWxlLm5hbWUgfHwgdG9rZW4udGZwID09PSBlZGl0UHJvZmlsZS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgIGNvbnN0IHNpZ25JbkFjY291bnQgPSB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKClcclxuICAgICAgICAgICAgICAgICAgLmZpbmQoKGFjY291bnQ6IEFjY291bnRJbmZvKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQuaWRUb2tlbkNsYWltcz8ub2lkID09PSB0b2tlbi5vaWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50LmlkVG9rZW5DbGFpbXM/LnN1YiA9PT0gdG9rZW4uc3ViICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKChhY2NvdW50LmlkVG9rZW5DbGFpbXMgYXMgSWRUb2tlbkNsYWltc1dpdGhQb2xpY3lJZCkuYWNyID09PSBzaWduVXBTaWduSW4ubmFtZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoYWNjb3VudC5pZFRva2VuQ2xhaW1zIGFzIElkVG9rZW5DbGFpbXNXaXRoUG9saWN5SWQpLnRmcCA9PT0gc2lnblVwU2lnbkluLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVhdXRoZW50aWNhdGUoc2lnbkluQWNjb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgKiByZXNldFBhc3N3b3JkXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIEJlbG93IHdlIGFyZSBjaGVja2luZyBpZiB0aGUgdXNlciBpcyByZXR1cm5pbmcgZnJvbSB0aGUgcmVzZXQgcGFzc3dvcmQgZmxvdy5cclxuICAgICAgICAgICAgICogSWYgc28sIHdlIHdpbGwgYXNrIHRoZSB1c2VyIHRvIHJlYXV0aGVudGljYXRlIHdpdGggdGhlaXIgbmV3IHBhc3N3b3JkLlxyXG4gICAgICAgICAgICAgKiBJZiB5b3UgZG8gbm90IHdhbnQgdGhpcyBiZWhhdmlvciBhbmQgcHJlZmVyIHlvdXIgdXNlcnMgdG8gc3RheSBzaWduZWQgaW4gaW5zdGVhZCxcclxuICAgICAgICAgICAgICogeW91IGNhbiByZXBsYWNlIHRoZSBjb2RlIGJlbG93IHdpdGggdGhlIHNhbWUgcGF0dGVybiB1c2VkIGZvciBoYW5kbGluZyB0aGUgcmV0dXJuIGZyb21cclxuICAgICAgICAgICAgICogcHJvZmlsZSBlZGl0IGZsb3dcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGlmICh0b2tlbi5hY3IgPT09IHJlc2V0UGFzc3dvcmQubmFtZSB8fCB0b2tlbi50ZnAgPT09IHJlc2V0UGFzc3dvcmQubmFtZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9yY2VSZWF1dGhlbnRpY2F0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtc2c7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMubXNhbEJyb2FkY2FzdFNlcnZpY2UuaW5Qcm9ncmVzcyQucGlwZShcclxuICAgICAgICBmaWx0ZXIoKHN0YXR1czogSW50ZXJhY3Rpb25TdGF0dXMpID0+XHJcbiAgICAgICAgICBzdGF0dXMgPT09IEludGVyYWN0aW9uU3RhdHVzLlN0YXJ0dXAgfHxcclxuICAgICAgICAgIHN0YXR1cyA9PT0gSW50ZXJhY3Rpb25TdGF0dXMuTm9uZVxyXG4gICAgICAgICksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubXNhbERlc3Ryb3lpbmckKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHN0YXR1czogSW50ZXJhY3Rpb25TdGF0dXMpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHN0YXR1cykge1xyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiBJbml0aWFsIHN0YXR1cyBiZWZvcmUgaW50ZXJhY3Rpb24gb2NjdXJzXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIGNhc2UgSW50ZXJhY3Rpb25TdGF0dXMuU3RhcnR1cDpcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYG1zYWwuYXBwOiBJbnRlcmFjdGlvblN0YXR1cy5TdGFydHVwYCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgKiBTdGF0dXMgc2V0IHdoZW4gaW50ZXJhY3Rpb24gaXMgY29tcGxldGVcclxuICAgICAgICAgICovXHJcbiAgICAgICAgICBjYXNlIEludGVyYWN0aW9uU3RhdHVzLk5vbmU6XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBtc2FsLmFwcDogSW50ZXJhY3Rpb25TdGF0dXMuTm9uZWApO1xyXG5cclxuICAgICAgICAgICAgTVNBTFJlZGlyZWN0LmhhbmRsZSh0aGlzLnJvdXRlciwgJ21zYWxCcm9hZGNhc3RTZXJ2aWNlLmluUHJvZ3Jlc3MkIEludGVyYWN0aW9uU3RhdHVzLk5vbmUnKTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja0FuZFNldEFjdGl2ZUFjY291bnQoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QWN0aXZlQWNjb3VudCgpOiBBY2NvdW50SW5mbyB8IG51bGwge1xyXG4gICAgdGhpcy5jaGVja0FuZFNldEFjdGl2ZUFjY291bnQoKTtcclxuICAgIHJldHVybiB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmdldEFjdGl2ZUFjY291bnQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tBbmRTZXRBY3RpdmVBY2NvdW50KCkge1xyXG4gICAgbGV0IGFjdGl2ZUFjY291bnQgPSB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmdldEFjdGl2ZUFjY291bnQoKTtcclxuICAgIGxldCBhY2NvdW50cyA9IHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKTtcclxuXHJcbiAgICBpZiAoIWFjdGl2ZUFjY291bnQgJiYgYWNjb3VudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLnNldEFjdGl2ZUFjY291bnQoYWNjb3VudHNbMF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1BvcHVwKHBvcHVwPzogYm9vbGVhbikge1xyXG4gICAgaWYgKHR5cGVvZiBwb3B1cCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICByZXR1cm4gdGhpcy5tc2FsR3VhcmRDb25maWcuaW50ZXJhY3Rpb25UeXBlID09PSBJbnRlcmFjdGlvblR5cGUuUG9wdXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBvcHVwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhY3F1aXJlVG9rZW4oKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIGxldCByZXF1ZXN0ID0ge1xyXG4gICAgICBzY29wZXM6IE1TQUxVdGlscy5nZXRBcGlTY29wZXMoKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzUG9wdXAoKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tc2FsU2VydmljZS5hY3F1aXJlVG9rZW5Qb3B1cChyZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgIG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2UgPyByZXNwb25zZS5hY2Nlc3NUb2tlbiA6IG51bGw7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5tc2FsU2VydmljZS5hY3F1aXJlVG9rZW5SZWRpcmVjdChyZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgIG1hcCgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZnRlckxvZ291dCgpIHtcclxuICAgIHRoaXMuYXBwQ29udGV4dC5jbGVhcldlYlN0b3JhZ2UoKTtcclxuICAgIHRoaXMuYXBwQ29udGV4dC51cGRhdGVDdXJyZW50KCk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyRW1haWwoKSB7XHJcbiAgICBsZXQgY3VycmVudFVzZXIgPSB0aGlzLmFwcENvbnRleHQuY3VycmVudFVzZXI7XHJcbiAgICBsZXQgYWN0aXZlQWNjb3VudCA9IHRoaXMuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG5cclxuICAgIGlmIChhY3RpdmVBY2NvdW50KSB7XHJcbiAgICAgIHJldHVybiBhY3RpdmVBY2NvdW50LnVzZXJuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXJyZW50VXNlciA/IGN1cnJlbnRVc2VyLkVtYWlsIDogJyc7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyTmFtZSgpIHtcclxuICAgIGxldCBjdXJyZW50VXNlciA9IHRoaXMuYXBwQ29udGV4dC5jdXJyZW50VXNlcjtcclxuICAgIGxldCBhY3RpdmVBY2NvdW50ID0gdGhpcy5nZXRBY3RpdmVBY2NvdW50KCk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZUFjY291bnQpIHtcclxuICAgICAgcmV0dXJuIGFjdGl2ZUFjY291bnQubmFtZSA/IGFjdGl2ZUFjY291bnQubmFtZSA6IGN1cnJlbnRVc2VyID8gY3VycmVudFVzZXIuZGlzcGxheU5hbWVPckZ1bGxOYW1lIDogJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRVc2VyID8gY3VycmVudFVzZXIuZGlzcGxheU5hbWVPckZ1bGxOYW1lIDogJyc7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAgVmFkaW1PUzpcclxuICAgIFdBUk5JTkcgdG8gYWxsIGRldmVsb3BlcnMhIEJlIHN1cmUgdGhhdCB5b3UgcmVhbGx5IG5lZWQgdG8gZGlyZWN0bHkgY2FsbCB0aGlzIG1ldGhvZCFcclxuICAqL1xyXG4gIGdldEFjY2Vzc1Rva2VuKHJlcXVlc3RVcmw/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgbGV0IGFjdGl2ZUFjY291bnQgPSB0aGlzLmdldEFjdGl2ZUFjY291bnQoKTtcclxuICAgIGxldCBzaWxlbnRSZXF1ZXN0OiBTaWxlbnRSZXF1ZXN0ID0ge1xyXG4gICAgICBzY29wZXM6IE1TQUxVdGlscy5nZXRBcGlTY29wZXMoKSxcclxuICAgICAgYWNjb3VudDogYWN0aXZlQWNjb3VudFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoYWN0aXZlQWNjb3VudCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tc2FsU2VydmljZS5hY3F1aXJlVG9rZW5TaWxlbnQoc2lsZW50UmVxdWVzdCkucGlwZShcclxuICAgICAgICBtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmFjY2Vzc1Rva2VuO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJTaWxlbnQgdG9rZW4gYWNxdWlzaXRpb24gZmFpbHMuXCIpO1xyXG5cclxuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNxdWlyZVRva2VuKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuYWNxdWlyZVRva2VuKCk7XHJcbiAgfVxyXG5cclxuICBmb3JjZVJlYXV0aGVudGljYXRlKGFjY291bnQ/KSB7XHJcbiAgICBpZiAoTVNBTFV0aWxzLmlzQjJDKCkpIHtcclxuICAgICAgbGV0IHNpZ25VcFNpZ25JbiA9IE1TQUxCMkMuZ2V0UG9saWN5QnlUeXBlKFBvbGljeVR5cGUuc2lnblVwU2lnbkluKTtcclxuICAgICAgbGV0IHNpZ25VcFNpZ25JbkZsb3dSZXF1ZXN0OiBSZWRpcmVjdFJlcXVlc3QgfCBQb3B1cFJlcXVlc3QgID0ge1xyXG4gICAgICAgIGF1dGhvcml0eTogc2lnblVwU2lnbkluLmF1dGhvcml0eSxcclxuICAgICAgICBzY29wZXM6IFtdLFxyXG4gICAgICAgIHByb21wdDogUHJvbXB0VmFsdWUuTE9HSU4sIC8vIGZvcmNlIHVzZXIgdG8gcmVhdXRoZW50aWNhdGUgd2l0aCB0aGVpciBuZXcgcGFzc3dvcmRcclxuICAgICAgICBhY2NvdW50OiBhY2NvdW50XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmxvZ2luKHNpZ25VcFNpZ25JbkZsb3dSZXF1ZXN0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9naW4odXNlckZsb3dSZXF1ZXN0PzogUmVkaXJlY3RSZXF1ZXN0IHwgUG9wdXBSZXF1ZXN0LCBwb3B1cD86IGJvb2xlYW4pIHtcclxuICAgIGxldCBhdXRoUmVxdWVzdENmZzogYW55ID0gdGhpcy5tc2FsR3VhcmRDb25maWcuYXV0aFJlcXVlc3Q7XHJcbiAgICBsZXQgYXV0aFJlcXVlc3QgPSBudWxsO1xyXG5cclxuICAgIGlmIChhdXRoUmVxdWVzdENmZykge1xyXG4gICAgICBhdXRoUmVxdWVzdCA9IGF1dGhSZXF1ZXN0Q2ZnKHRoaXMubXNhbFNlcnZpY2UsIHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1BvcHVwKHBvcHVwKSkge1xyXG4gICAgICBpZiAoYXV0aFJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ2luUG9wdXAoeyAuLi5hdXRoUmVxdWVzdCwgLi4udXNlckZsb3dSZXF1ZXN0IH0gYXMgUG9wdXBSZXF1ZXN0KS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBBdXRoZW50aWNhdGlvblJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5zZXRBY3RpdmVBY2NvdW50KHJlc3BvbnNlLmFjY291bnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubXNhbFNlcnZpY2UubG9naW5Qb3B1cCh1c2VyRmxvd1JlcXVlc3QpLnN1YnNjcmliZSgocmVzcG9uc2U6IEF1dGhlbnRpY2F0aW9uUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLnNldEFjdGl2ZUFjY291bnQocmVzcG9uc2UuYWNjb3VudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoYXV0aFJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ2luUmVkaXJlY3QoeyAuLi5hdXRoUmVxdWVzdCwgLi4udXNlckZsb3dSZXF1ZXN0IH0gYXMgUmVkaXJlY3RSZXF1ZXN0KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ2luUmVkaXJlY3QodXNlckZsb3dSZXF1ZXN0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9nb3V0KHBvcHVwPzogYm9vbGVhbikge1xyXG4gICAgbGV0IGFjdGl2ZUFjY291bnQgPSB0aGlzLmdldEFjdGl2ZUFjY291bnQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1BvcHVwKHBvcHVwKSkge1xyXG4gICAgICBpZiAoYWN0aXZlQWNjb3VudCkge1xyXG4gICAgICAgIHRoaXMubXNhbFNlcnZpY2UubG9nb3V0UG9wdXAoeyBhY2NvdW50OiBhY3RpdmVBY2NvdW50LCBtYWluV2luZG93UmVkaXJlY3RVcmk6IFwiL1wiIH0pLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFmdGVyTG9nb3V0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tc2FsU2VydmljZS5sb2dvdXRQb3B1cCh7IG1haW5XaW5kb3dSZWRpcmVjdFVyaTogXCIvXCIgfSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuYWZ0ZXJMb2dvdXQoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChhY3RpdmVBY2NvdW50KSB7XHJcbiAgICAgICAgdGhpcy5tc2FsU2VydmljZS5sb2dvdXRSZWRpcmVjdCh7IGFjY291bnQ6IGFjdGl2ZUFjY291bnQgfSkucGlwZShtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hZnRlckxvZ291dCgpO1xyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ291dFJlZGlyZWN0KCkucGlwZShtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hZnRlckxvZ291dCgpO1xyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNVc2VyQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmdldEFjdGl2ZUFjY291bnQoKSAhPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgaXNVc2VyU2lnbmVkSW4oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VyQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hcHBDb250ZXh0LmN1cnJlbnQuaXNVc2VyU2lnbmVkSW4gJiYgdGhpcy5hcHBDb250ZXh0LmN1cnJlbnRVc2VyKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzVXNlckFkbWluKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmlzVXNlclNpZ25lZEluKCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmFwcENvbnRleHQuY3VycmVudC5pc1VzZXJBZG1pbjtcclxuICB9XHJcbn1cclxuIl19
@@ -1004,6 +1004,10 @@ class AuthService extends ApiServiceBase {
1004
1004
  }));
1005
1005
  }
1006
1006
  }
1007
+ afterLogout() {
1008
+ this.appContext.clearWebStorage();
1009
+ this.appContext.updateCurrent();
1010
+ }
1007
1011
  getUserEmail() {
1008
1012
  let currentUser = this.appContext.currentUser;
1009
1013
  let activeAccount = this.getActiveAccount();
@@ -1086,18 +1090,29 @@ class AuthService extends ApiServiceBase {
1086
1090
  }
1087
1091
  logout(popup) {
1088
1092
  let activeAccount = this.getActiveAccount();
1089
- if (!activeAccount) {
1090
- return;
1091
- }
1092
1093
  if (this.isPopup(popup)) {
1093
- this.msalService.logoutPopup({ account: activeAccount, mainWindowRedirectUri: "/" }).subscribe(() => {
1094
- this.appContext.clearWebStorage();
1095
- });
1094
+ if (activeAccount) {
1095
+ this.msalService.logoutPopup({ account: activeAccount, mainWindowRedirectUri: "/" }).subscribe(() => {
1096
+ this.afterLogout();
1097
+ });
1098
+ }
1099
+ else {
1100
+ this.msalService.logoutPopup({ mainWindowRedirectUri: "/" }).subscribe(() => {
1101
+ this.afterLogout();
1102
+ });
1103
+ }
1096
1104
  }
1097
1105
  else {
1098
- this.msalService.logoutRedirect({ account: activeAccount }).pipe(map$1(() => {
1099
- this.appContext.clearWebStorage();
1100
- }));
1106
+ if (activeAccount) {
1107
+ this.msalService.logoutRedirect({ account: activeAccount }).pipe(map$1(() => {
1108
+ this.afterLogout();
1109
+ }));
1110
+ }
1111
+ else {
1112
+ this.msalService.logoutRedirect().pipe(map$1(() => {
1113
+ this.afterLogout();
1114
+ }));
1115
+ }
1101
1116
  }
1102
1117
  }
1103
1118
  isUserAuthenticated() {