ssi-security-commons 0.16.17 → 0.16.19

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.
@@ -168,6 +168,11 @@ export class SessionService {
168
168
  data = window.localStorage.getItem(u);
169
169
  token = window.localStorage.getItem(t);
170
170
  refreshToken = window.localStorage.getItem(r);
171
+ if (data && token && refreshToken) {
172
+ data = this.cryptoService.decrypt(data);
173
+ token = this.cryptoService.decrypt(token);
174
+ refreshToken = this.cryptoService.decrypt(refreshToken);
175
+ }
171
176
  }
172
177
  else {
173
178
  data = window.localStorage.getItem(USERDATA);
@@ -404,4 +409,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
404
409
  type: Inject,
405
410
  args: ['environment']
406
411
  }] }, { type: i2.CryptoService }, { type: i3.JwtService }]; } });
407
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3NpLXNlY3VyaXR5LWNvbW1vbnMvc3JjL2xpYi9zZXJ2aWNlcy9zZXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkNBQTJDO0FBQzNDLHFDQUFxQztBQUNyQyx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRy9ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFJckUsTUFBTSxPQUFPLGNBQWM7SUFVekIsWUFBb0IsSUFBZ0IsRUFDWCxXQUFnQixFQUNyQixhQUE0QixFQUM1QixVQUFzQjtRQUh0QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBRWhCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFQMUMsYUFBUSxHQUFHLDZCQUE2QixDQUFDO1FBUXZDLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQztRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVNLHNCQUFzQixDQUFDLEtBQWE7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsTUFBTSxRQUFRLEdBQWE7WUFDekIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxVQUFVO1lBQy9CLFVBQVUsRUFBRSxTQUFTLENB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LENBQUM7SUFFTSxXQUFXO1FBQ2hCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQyxZQUFZLENBQUEsQ0FBQyxDQUFBLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQVk7UUFDckMsTUFBTSxHQUFHLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDOzhHQXpiVSxjQUFjLDRDQVdmLGFBQWE7a0hBWFosY0FBYzs7MkZBQWQsY0FBYztrQkFEMUIsVUFBVTs7MEJBWU4sTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzLXBlci1mdW5jdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgYXJyb3ctYm9keS1zdHlsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRnJvbnRFbmRFeGNlcHRpb24sIFVzZXJEYXRhIH0gZnJvbSAnLi4vdXNlci5tb2RlbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBKd3RTZXJ2aWNlIH0gZnJvbSAnLi9qd3Quc2VydmljZSc7XG5pbXBvcnQgeyBDcnlwdG9TZXJ2aWNlIH0gZnJvbSAnLi9jcnlwdG8uc2VydmljZSc7XG5pbXBvcnQgeyBSRUZSRVNIX1RPS0VOLCBUT0tFTiwgVVNFUkRBVEEgfSBmcm9tICcuLi9zaGFyZWQvY29uc3RhbnRzJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2Vzc2lvblNlcnZpY2Uge1xuXG4gIHVzZXJkYXRhOiBVc2VyRGF0YSB8IHVuZGVmaW5lZDtcbiAgdG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGVuZFBvaW50OiBzdHJpbmc7XG4gIGxvZ2luVXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NDIwMC9sb2dpbic7XG4gIGFwcGxpY2F0aW9uSWQ6IGFueTtcbiAgZW52aXJvbm1lbnQ6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBlbnZpcm9ubWVudDogYW55LFxuICAgICAgICAgICAgICBwcml2YXRlIGNyeXB0b1NlcnZpY2U6IENyeXB0b1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgand0U2VydmljZTogSnd0U2VydmljZSkge1xuICAgIHRoaXMuZW5kUG9pbnQgPSBlbnZpcm9ubWVudC5lbmRQb2ludENvcmU7XG4gICAgdGhpcy5hcHBsaWNhdGlvbklkID0gZW52aXJvbm1lbnQuYXBwbGljYXRpb25JZDtcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRVc2VyZGF0YUZyb21Ub2tlbih0b2tlbjogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCB0b2tlbkRhdGEgPSB0aGlzLmp3dFNlcnZpY2UuZGVjb2RlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IHVzZXJEYXRhOiBVc2VyRGF0YSA9IHtcbiAgICAgIGdpdmVuTmFtZTogdG9rZW5EYXRhLmdpdmVuX25hbWUsXG4gICAgICBmYW1pbHlOYW1lOiB0b2tlbkRhdGEuZmFtaWx5X25hbWUsXG4gICAgICBuYW1lOiB0b2tlbkRhdGEubmFtZSxcbiAgICAgIHJvbGVzOiB0b2tlbkRhdGEucmVhbG1fYWNjZXNzLnJvbGVzLFxuICAgICAgdXNlcklkOiB0b2tlbkRhdGEuc3ViLFxuICAgICAgdXNlcm5hbWU6IHRva2VuRGF0YS5wcmVmZXJyZWRfdXNlcm5hbWUsXG4gICAgICBlbWFpbDogdG9rZW5EYXRhLmVtYWlsLFxuICAgICAgZW1haWxWZXJpZmllZDogdG9rZW5EYXRhLmVtYWlsX3ZlcmlmaWVkXG4gICAgfTtcbiAgICByZXR1cm4gdXNlckRhdGE7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmV2aWV3U2Vzc2lvbkRhdGEoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuY2hlY2tTZXNzaW9uRGF0YSgpIGFzIGFueTtcbiAgICBjb25zb2xlLmxvZyhgYXN5bmMgcmVzdWx0OiAke3ZhbHVlfWApO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRVc2VyZGF0YSh1c2VyZGF0YTogYW55KTogdm9pZCB7XG4gICAgdGhpcy51c2VyZGF0YSA9IHVzZXJkYXRhO1xuICB9XG5cbiAgcHVibGljIHNldFRva2Vucyh0b2tlbjogYW55LCByZWZyZXNoVG9rZW46IGFueSk6IHZvaWQge1xuICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IHJlZnJlc2hUb2tlbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVc2VyZGF0YSgpOiBVc2VyRGF0YSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudXNlcmRhdGE7XG4gIH1cblxuICBwdWJsaWMgc2V0UmVmcmVzaFRva2VuKHJlZnJlc2hUb2tlbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5yZWZyZXNoVG9rZW4gPSByZWZyZXNoVG9rZW47XG4gICAgdGhpcy5zYXZlU3RvcmFnZURhdGEoUkVGUkVTSF9UT0tFTiwgcmVmcmVzaFRva2VuKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWZyZXNoVG9rZW4oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWZyZXNoVG9rZW47XG4gIH1cblxuICBwdWJsaWMgc2V0VG9rZW4odG9rZW46IGFueSk6IGFueSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuc2F2ZVN0b3JhZ2VEYXRhKFRPS0VOLCB0b2tlbik7XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9rZW4oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy50b2tlbjtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95Q3JlZGVudGlhbHMoKTogdm9pZCB7XG4gICAgdGhpcy50b2tlbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlbGV0ZVN0b3JhZ2VEYXRhKFRPS0VOKTtcbiAgICB0aGlzLmRlbGV0ZVN0b3JhZ2VEYXRhKFJFRlJFU0hfVE9LRU4pO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3lVc2VyRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJkYXRhID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVsZXRlU3RvcmFnZURhdGEoVVNFUkRBVEEpO1xuICB9XG5cbiAgcHVibGljIHNhdmVDcmVkZW50aWFscyh0b2tlbjogYW55LCByZWZyZXNoVG9rZW46IGFueSk6IHZvaWQge1xuICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IHJlZnJlc2hUb2tlbjtcbiAgICB0aGlzLnNhdmVTdG9yYWdlRGF0YShUT0tFTiwgdG9rZW4pO1xuICAgIHRoaXMuc2F2ZVN0b3JhZ2VEYXRhKFJFRlJFU0hfVE9LRU4sIHJlZnJlc2hUb2tlbik7XG4gICAgdGhpcy5zYXZlVXNlckRhdGEodGhpcy5idWlsZFVzZXJkYXRhRnJvbVRva2VuKHRva2VuKSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVVzZXJEYXRhKHVzZXJEYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJkYXRhID0gdXNlckRhdGE7XG4gICAgdGhpcy5zYXZlU3RvcmFnZURhdGEoVVNFUkRBVEEsIEpTT04uc3RyaW5naWZ5KHVzZXJEYXRhKSk7XG4gIH1cblxuICBwdWJsaWMgaXNMb2dnZWRJbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnVzZXJkYXRhO1xuICB9XG5cbiAgbG9nb3V0KCk6IFByb21pc2U8YW55PiB7XG4gICAgbGV0IGNsaWVudElkID0gdGhpcy5lbnZpcm9ubWVudC5hdXRoQ2xpZW50O1xuICAgIGlmICh0aGlzLnJlZnJlc2hUb2tlbikge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IHRoaXMuand0U2VydmljZS5kZWNvZGVUb2tlbih0aGlzLnJlZnJlc2hUb2tlbik7XG4gICAgICBjbGllbnRJZCA9IGRlY29kZWQuYXpwO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5sb2dvdXRBcGlDbGllbnQoY2xpZW50SWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICB0aGlzLmRlc3Ryb3lDcmVkZW50aWFscygpO1xuICAgICAgICB0aGlzLmRlc3Ryb3lVc2VyRGF0YSgpO1xuICAgICAgICB0aGlzLmdvVG9Mb2dpbigpO1xuICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3lDcmVkZW50aWFscygpO1xuICAgICAgICB0aGlzLmRlc3Ryb3lVc2VyRGF0YSgpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXROZXdUb2tlbihyZWZyZXNoVG9rZW46IHN0cmluZyk6IGFueSB7XG4gICAgY29uc29sZS5sb2coJ2dldE5ld1Rva2VuJyk7XG4gICAgY29uc3QgYm9keSA9ICdncmFudF90eXBlPXJlZnJlc2hfdG9rZW4nICsgJyZyZWZyZXNoX3Rva2VuPScgKyByZWZyZXNoVG9rZW4gKyAnJmNsaWVudF9pZD0nICsgdGhpcy5lbnZpcm9ubWVudC5hdXRoQ2xpZW50O1xuXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuZW52aXJvbm1lbnQuYXV0aEVuZFBvaW50fS9yZWFsbXMvJHt0aGlzLmVudmlyb25tZW50LmF1dGhSZWFsbX0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvdG9rZW5gLFxuICAgICAgYm9keSwge2hlYWRlcnN9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBnZXROZXdUb2tlbkNsaWVudChyZWZyZXNoVG9rZW46IHN0cmluZywgY2xpZW50SWQ6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc29sZS5sb2coJ2dldE5ld1Rva2VuJyk7XG4gICAgY29uc3QgYm9keSA9ICdncmFudF90eXBlPXJlZnJlc2hfdG9rZW4nICsgJyZyZWZyZXNoX3Rva2VuPScgKyByZWZyZXNoVG9rZW4gKyAnJmNsaWVudF9pZD0nICsgY2xpZW50SWQ7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5lbnZpcm9ubWVudC5hdXRoRW5kUG9pbnR9L3JlYWxtcy8ke3RoaXMuZW52aXJvbm1lbnQuYXV0aFJlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC90b2tlbmAsXG4gICAgICBib2R5LCB7aGVhZGVyc30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIGdldFRva2VuQ2xpZW50Q29kZShyZWZyZXNoVG9rZW46IHN0cmluZywgY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc29sZS5sb2coJ2dldE5ld1Rva2VuJyk7XG4gICAgY29uc3QgYm9keSA9ICdncmFudF90eXBlPXJlZnJlc2hfdG9rZW4nICsgJyZyZWZyZXNoX3Rva2VuPScgKyByZWZyZXNoVG9rZW4gKyAnJmNsaWVudF9pZD0nICsgY2xpZW50SWQ7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5lbnZpcm9ubWVudC5hdXRoRW5kUG9pbnR9L3JlYWxtcy8ke3RoaXMuZW52aXJvbm1lbnQuYXV0aFJlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC90b2tlbmAsXG4gICAgICBib2R5LCB7aGVhZGVyc30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG5cbiAgZ2V0TG9naW5VcmwoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KHRoaXMuZW5kUG9pbnQgKyAnL2F1dGgvbG9naW4vdXJsLycrdGhpcy5lbnZpcm9ubWVudC5hdXRoQ2xpZW50KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBnZXRIb21lVXJsKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55Pih0aGlzLmVuZFBvaW50ICsgJy9hdXRoL2hvbWUvdXJsLycrdGhpcy5lbnZpcm9ubWVudC5hdXRoQ2xpZW50KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBsb2dvdXRBcGkoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBib2R5ID0gJ3JlZnJlc2hfdG9rZW49JyArIHRoaXMucmVmcmVzaFRva2VuICsgJyZjbGllbnRfaWQ9JyArIHRoaXMuZW52aXJvbm1lbnQuYXV0aENsaWVudDtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5lbnZpcm9ubWVudC5hdXRoRW5kUG9pbnR9L3JlYWxtcy8ke3RoaXMuZW52aXJvbm1lbnQuYXV0aFJlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC9sb2dvdXRgLFxuICAgICAgYm9keSwge2hlYWRlcnN9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBsb2dvdXRBcGlDbGllbnQoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgYm9keSA9ICdyZWZyZXNoX3Rva2VuPScgKyB0aGlzLnJlZnJlc2hUb2tlbiArICcmY2xpZW50X2lkPScgKyBjbGllbnRJZDtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5lbnZpcm9ubWVudC5hdXRoRW5kUG9pbnR9L3JlYWxtcy8ke3RoaXMuZW52aXJvbm1lbnQuYXV0aFJlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC9sb2dvdXRgLFxuICAgICAgYm9keSwge2hlYWRlcnN9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBnb1RvTG9naW4oKTogdm9pZCB7XG4gICAgdGhpcy5nZXRMb2dpblVybCgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgIGNvbnN0IGxvZ2luVXJsID0gcmVzLmRhdGE7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGxvZ2luVXJsO1xuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkU2Vzc2lvbkRhdGEoKTogdm9pZCB7XG4gICAgbGV0IGRhdGE7XG4gICAgbGV0IHRva2VuO1xuICAgIGxldCByZWZyZXNoVG9rZW47XG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikge1xuICAgICAgY29uc3QgdSA9IHRoaXMuY3J5cHRvU2VydmljZS5lbmNyeXB0KFVTRVJEQVRBKTtcbiAgICAgIGNvbnN0IHQgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChUT0tFTik7XG4gICAgICBjb25zdCByID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmVuY3J5cHQoUkVGUkVTSF9UT0tFTik7XG4gICAgICBkYXRhID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHUpO1xuICAgICAgdG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odCk7XG4gICAgICByZWZyZXNoVG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0ocik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVVNFUkRBVEEpO1xuICAgICAgdG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVE9LRU4pO1xuICAgICAgcmVmcmVzaFRva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFJFRlJFU0hfVE9LRU4pO1xuICAgIH1cbiAgICBpZiAoZGF0YSAmJiB0b2tlbiAmJiByZWZyZXNoVG9rZW4pIHtcbiAgICAgIGNvbnN0IHVzZXIgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgdGhpcy5zZXRUb2tlbnModG9rZW4sIHJlZnJlc2hUb2tlbik7XG4gICAgICB0aGlzLnNldFVzZXJkYXRhKHVzZXIpO1xuICAgIH1cbiAgfVxuXG4gIHVzZXJIYXNPcHRpb25zSW5BcHAodXNlcklkOiBhbnksIGFwcGxpY2F0aW9uSWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55Pih0aGlzLmVuZFBvaW50ICsgYC9zZWN1cml0eS9vcHRpb24vJHthcHBsaWNhdGlvbklkfS8ke3VzZXJJZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBjaGVja0FwcFBlcm1pc3Npb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudXNlcmRhdGE/LnVzZXJJZCwgdGhpcy5hcHBsaWNhdGlvbklkKTtcbiAgICAgIGlmICh0aGlzLmFwcGxpY2F0aW9uSWQpIHtcbiAgICAgICAgdGhpcy51c2VySGFzT3B0aW9uc0luQXBwKHRoaXMudXNlcmRhdGE/LnVzZXJJZCwgdGhpcy5hcHBsaWNhdGlvbklkKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgIGlmIChyZXMuZGF0YSkge1xuICAgICAgICAgICAgcmVzb2x2ZSgnb2snKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXRIb21lVXJsKCkuc3Vic2NyaWJlKHJlczEgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMxKTtcbiAgICAgICAgICAgICAgY29uc3QgaG9tZVVybCA9IHJlczEuZGF0YTtcbiAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBob21lVXJsO1xuICAgICAgICAgICAgICByZWplY3QoJ25vaycpO1xuICAgICAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgIHJlamVjdCgnbm9rJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgcmVqZWN0KCdub2snKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCdvaycpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICBwdWJsaWMgZ2V0T3B0aW9uc1VzZXIoYXBwbGljYXRpb25JZDogbnVtYmVyIHwgbnVsbCwgdHlwZTogc3RyaW5nIHwgbnVsbCwgbGFuZ3VhZ2U6IHN0cmluZyB8IG51bGwsIGVudGl0eUNvZGU6IHN0cmluZyB8IG51bGwsIHBhcmVudE9wdGlvbklkOiBudW1iZXIgfCBudWxsLCBpbmNsdWRlRGF0YTogYm9vbGVhbiB8IG51bGwpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHBhcmFtID0ge1xuICAgICAgdXNlcklkOiB0aGlzLnVzZXJkYXRhPy51c2VySWQsXG4gICAgICBhcHBsaWNhdGlvbklkLFxuICAgICAgdHlwZSxcbiAgICAgIGxhbmd1YWdlLFxuICAgICAgZW50aXR5Q29kZSxcbiAgICAgIHBhcmVudE9wdGlvbklkLFxuICAgICAgaW5jbHVkZURhdGFcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KHRoaXMuZW5kUG9pbnQgKyAnL3NlY3VyaXR5L29wdGlvbi91c2VyJywgcGFyYW0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIHJlZ2lzdGVyRXhjZXB0aW9uKHBhcmFtOiBGcm9udEVuZEV4Y2VwdGlvbik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgnc2tpcEVycm9yJywgJ3RydWUnKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih0aGlzLmVuZFBvaW50ICsgJy9hdXRoL2V4Y2VwdGlvbi9sb2cnLCBwYXJhbSwge2hlYWRlcnN9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBzYXZlU3RvcmFnZURhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICBjb25zdCBrID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmVuY3J5cHQoa2V5KTtcbiAgICAgIGNvbnN0IHYgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdCh2YWx1ZSk7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oaywgdik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBkZWxldGVTdG9yYWdlRGF0YShrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgIGNvbnN0IGsgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChrZXkpO1xuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGspO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICB9XG4gIH1cblxuICBnZXRTdG9yYWdlRGF0YShrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGxldCByZXM6IHN0cmluZyB8IG51bGw7XG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikge1xuICAgICAgY29uc3QgayA9IHRoaXMuY3J5cHRvU2VydmljZS5lbmNyeXB0KGtleSk7XG4gICAgICBjb25zdCB2ID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGspO1xuICAgICAgaWYgKHYpIHtcbiAgICAgICAgcmVzID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmRlY3J5cHQodik7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMgPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG5cbiAgcHVibGljIHJlbW92ZVVybERhdGEoKTogdm9pZCB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB1cmwuc2VhcmNoUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zLmRlbGV0ZSgnY29kZScpO1xuICAgIGNvbnN0IG5ld1VybCA9IHVybC5vcmlnaW4gKyB1cmwucGF0aG5hbWUgKyAnPycgKyBxdWVyeVBhcmFtcy50b1N0cmluZygpO1xuICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgZG9jdW1lbnQudGl0bGUsIG5ld1VybCk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tTZXNzaW9uRGF0YSgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgZGF0YTtcbiAgICAgIGxldCB0b2tlbjtcbiAgICAgIGxldCByZWZyZXNoVG9rZW47XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRVcmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgIGNvbnN0IGNvZGUgPSBjdXJyZW50VXJsLnNlYXJjaFBhcmFtcy5nZXQoJ2NvZGUnKTtcbiAgICAgIGNvbnNvbGUubG9nKCdjb2RlJywgY29kZSk7XG4gICAgICBpZiAoY29kZSkge1xuICAgICAgICBjb25zdCBjb2RlRGVjb2RlZCA9IHRoaXMuZ2V0RGVjb2RlZEF1dGhDb2RlKGNvZGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY29kZScsIGNvZGVEZWNvZGVkKTtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IHRoaXMuand0U2VydmljZS5kZWNvZGVUb2tlbihjb2RlRGVjb2RlZCk7XG4gICAgICAgIHRoaXMuZ2V0VG9rZW5DbGllbnRDb2RlKGNvZGVEZWNvZGVkLCBkZWNvZGVkLmF6cCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgICAgdG9rZW4gPSByZXMuYWNjZXNzX3Rva2VuO1xuICAgICAgICAgICAgcmVmcmVzaFRva2VuID0gcmVzLnJlZnJlc2hfdG9rZW47XG4gICAgICAgICAgICB0aGlzLnNhdmVDcmVkZW50aWFscyh0b2tlbiwgcmVmcmVzaFRva2VuKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBcHBQZXJtaXNzaW9ucygpLnRoZW4oKHJlczEpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzMSk7XG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlVXJsRGF0YSgpO1xuICAgICAgICAgICAgICByZXNvbHZlKCdPSycpO1xuICAgICAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSB0aGlzLmdldFN0b3JhZ2VEYXRhKFVTRVJEQVRBKTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLmdldFN0b3JhZ2VEYXRhKFRPS0VOKTtcbiAgICAgICAgcmVmcmVzaFRva2VuID0gdGhpcy5nZXRTdG9yYWdlRGF0YShSRUZSRVNIX1RPS0VOKTtcbiAgICAgICAgaWYgKGRhdGEgJiYgdG9rZW4gJiYgcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgdGhpcy5zYXZlQ3JlZGVudGlhbHModG9rZW4sIHJlZnJlc2hUb2tlbik7XG4gICAgICAgICAgdGhpcy5jaGVja0FwcFBlcm1pc3Npb25zKCkudGhlbigocmVzMSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzMSk7XG4gICAgICAgICAgICByZXNvbHZlKCdPSycpO1xuICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignL3JlZGlyZWN0Jyk+LTEpIHtcbiAgICAgICAgICAgIHJlc29sdmUoJ09LJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveUNyZWRlbnRpYWxzKCk7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lVc2VyRGF0YSgpO1xuICAgICAgICAgICAgdGhpcy5nZXRMb2dpblVybCgpLnN1YnNjcmliZShyZXMxID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzMSk7XG4gICAgICAgICAgICAgIHRoaXMubG9naW5VcmwgPSByZXMxLmRhdGE7XG4gICAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignL2xvZ2luJyk8MCAmJiB1cmwuaW5kZXhPZignL2ZvcmdvdCcpPDAgJiZcbiAgICAgICAgICAgICAgICAgIHVybC5pbmRleE9mKCcvcmVzZXQnKTwwICYmIHVybC5pbmRleE9mKCcvdmVyaWZ5Jyk8MCAmJlxuICAgICAgICAgICAgICAgICAgdXJsLmluZGV4T2YoJy9zaWduX3VwJyk8MCkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy5sb2dpblVybCArICc/Y29udGludWU9JytlbmNvZGVVUklDb21wb25lbnQodXJsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKCdOT0snKTtcbiAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuXG4gIHB1YmxpYyBjaGVja1Nlc3Npb25EYXRhTWljcm9mcm9udCgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgZGF0YTtcbiAgICAgIGxldCB0b2tlbjtcbiAgICAgIGxldCByZWZyZXNoVG9rZW47XG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHUgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChVU0VSREFUQSk7XG4gICAgICAgIGNvbnN0IHQgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChUT0tFTik7XG4gICAgICAgIGNvbnN0IHIgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChSRUZSRVNIX1RPS0VOKTtcbiAgICAgICAgY29uc3QgZDEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odSk7XG4gICAgICAgIGNvbnN0IGQyID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHQpO1xuICAgICAgICBjb25zdCBkMyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShyKTtcbiAgICAgICAgaWYgKGQxICYmIGQyICYmIGQzKSB7XG4gICAgICAgICAgZGF0YSA9IHRoaXMuY3J5cHRvU2VydmljZS5kZWNyeXB0KGQxKTtcbiAgICAgICAgICB0b2tlbiA9IHRoaXMuY3J5cHRvU2VydmljZS5kZWNyeXB0KGQyKTtcbiAgICAgICAgICByZWZyZXNoVG9rZW4gPSB0aGlzLmNyeXB0b1NlcnZpY2UuZGVjcnlwdChkMyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVVNFUkRBVEEpO1xuICAgICAgICB0b2tlbiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShUT0tFTik7XG4gICAgICAgIHJlZnJlc2hUb2tlbiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShSRUZSRVNIX1RPS0VOKTtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhICYmIHRva2VuICYmIHJlZnJlc2hUb2tlbikge1xuICAgICAgICBjb25zb2xlLmxvZygnbG9jYWwgc2Vzc2lvbiBvaycpO1xuICAgICAgICB0aGlzLnNhdmVDcmVkZW50aWFscyh0b2tlbiwgcmVmcmVzaFRva2VuKTtcbiAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2xvY2FsIHNlc3Npb24gbm9rJyk7XG4gICAgICAgIHJlamVjdCgnTk9LJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXV0aENvZGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBlbmMgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdCh0aGlzLnJlZnJlc2hUb2tlbj90aGlzLnJlZnJlc2hUb2tlbjonJyk7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlbmMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWNvZGVkQXV0aENvZGUoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWMgPSBkZWNvZGVVUklDb21wb25lbnQoY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuY3J5cHRvU2VydmljZS5kZWNyeXB0KGRlYyk7XG4gIH1cblxufVxuXG4iXX0=
412
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3NpLXNlY3VyaXR5LWNvbW1vbnMvc3JjL2xpYi9zZXJ2aWNlcy9zZXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkNBQTJDO0FBQzNDLHFDQUFxQztBQUNyQyx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRy9ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFJckUsTUFBTSxPQUFPLGNBQWM7SUFVekIsWUFBb0IsSUFBZ0IsRUFDWCxXQUFnQixFQUNyQixhQUE0QixFQUM1QixVQUFzQjtRQUh0QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBRWhCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFQMUMsYUFBUSxHQUFHLDZCQUE2QixDQUFDO1FBUXZDLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQztRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVNLHNCQUFzQixDQUFDLEtBQWE7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsTUFBTSxRQUFRLEdBQWE7WUFDekIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxVQUFVO1lBQy9CLFVBQVUsRUFBRSxTQUFTLENB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QixDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDZjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ25DLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNmO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU0sV0FBVztRQUNoQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUMsWUFBWSxDQUFBLENBQUMsQ0FBQSxFQUFFLENBQUMsQ0FBQztRQUMvRSxPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxJQUFZO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQzs4R0E5YlUsY0FBYyw0Q0FXZixhQUFhO2tIQVhaLGNBQWM7OzJGQUFkLGNBQWM7a0JBRDFCLFVBQVU7OzBCQVlOLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1saW5lcy1wZXItZnVuY3Rpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIGFycm93LWJvZHktc3R5bGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEZyb250RW5kRXhjZXB0aW9uLCBVc2VyRGF0YSB9IGZyb20gJy4uL3VzZXIubW9kZWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSnd0U2VydmljZSB9IGZyb20gJy4vand0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J5cHRvU2VydmljZSB9IGZyb20gJy4vY3J5cHRvLnNlcnZpY2UnO1xuaW1wb3J0IHsgUkVGUkVTSF9UT0tFTiwgVE9LRU4sIFVTRVJEQVRBIH0gZnJvbSAnLi4vc2hhcmVkL2NvbnN0YW50cyc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlc3Npb25TZXJ2aWNlIHtcblxuICB1c2VyZGF0YTogVXNlckRhdGEgfCB1bmRlZmluZWQ7XG4gIHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBlbmRQb2ludDogc3RyaW5nO1xuICBsb2dpblVybCA9ICdodHRwOi8vbG9jYWxob3N0OjQyMDAvbG9naW4nO1xuICBhcHBsaWNhdGlvbklkOiBhbnk7XG4gIGVudmlyb25tZW50OiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgZW52aXJvbm1lbnQ6IGFueSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjcnlwdG9TZXJ2aWNlOiBDcnlwdG9TZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGp3dFNlcnZpY2U6IEp3dFNlcnZpY2UpIHtcbiAgICB0aGlzLmVuZFBvaW50ID0gZW52aXJvbm1lbnQuZW5kUG9pbnRDb3JlO1xuICAgIHRoaXMuYXBwbGljYXRpb25JZCA9IGVudmlyb25tZW50LmFwcGxpY2F0aW9uSWQ7XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgcHVibGljIGJ1aWxkVXNlcmRhdGFGcm9tVG9rZW4odG9rZW46IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgdG9rZW5EYXRhID0gdGhpcy5qd3RTZXJ2aWNlLmRlY29kZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCB1c2VyRGF0YTogVXNlckRhdGEgPSB7XG4gICAgICBnaXZlbk5hbWU6IHRva2VuRGF0YS5naXZlbl9uYW1lLFxuICAgICAgZmFtaWx5TmFtZTogdG9rZW5EYXRhLmZhbWlseV9uYW1lLFxuICAgICAgbmFtZTogdG9rZW5EYXRhLm5hbWUsXG4gICAgICByb2xlczogdG9rZW5EYXRhLnJlYWxtX2FjY2Vzcy5yb2xlcyxcbiAgICAgIHVzZXJJZDogdG9rZW5EYXRhLnN1YixcbiAgICAgIHVzZXJuYW1lOiB0b2tlbkRhdGEucHJlZmVycmVkX3VzZXJuYW1lLFxuICAgICAgZW1haWw6IHRva2VuRGF0YS5lbWFpbCxcbiAgICAgIGVtYWlsVmVyaWZpZWQ6IHRva2VuRGF0YS5lbWFpbF92ZXJpZmllZFxuICAgIH07XG4gICAgcmV0dXJuIHVzZXJEYXRhO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJldmlld1Nlc3Npb25EYXRhKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLmNoZWNrU2Vzc2lvbkRhdGEoKSBhcyBhbnk7XG4gICAgY29uc29sZS5sb2coYGFzeW5jIHJlc3VsdDogJHt2YWx1ZX1gKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2V0VXNlcmRhdGEodXNlcmRhdGE6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudXNlcmRhdGEgPSB1c2VyZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUb2tlbnModG9rZW46IGFueSwgcmVmcmVzaFRva2VuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgdGhpcy5yZWZyZXNoVG9rZW4gPSByZWZyZXNoVG9rZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0VXNlcmRhdGEoKTogVXNlckRhdGEgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnVzZXJkYXRhO1xuICB9XG5cbiAgcHVibGljIHNldFJlZnJlc2hUb2tlbihyZWZyZXNoVG9rZW46IGFueSk6IHZvaWQge1xuICAgIHRoaXMucmVmcmVzaFRva2VuID0gcmVmcmVzaFRva2VuO1xuICAgIHRoaXMuc2F2ZVN0b3JhZ2VEYXRhKFJFRlJFU0hfVE9LRU4sIHJlZnJlc2hUb2tlbik7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVmcmVzaFRva2VuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuO1xuICB9XG5cbiAgcHVibGljIHNldFRva2VuKHRva2VuOiBhbnkpOiBhbnkge1xuICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLnNhdmVTdG9yYWdlRGF0YShUT0tFTiwgdG9rZW4pO1xuICB9XG5cbiAgcHVibGljIGdldFRva2VuKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW47XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveUNyZWRlbnRpYWxzKCk6IHZvaWQge1xuICAgIHRoaXMudG9rZW4gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZWZyZXNoVG9rZW4gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZWxldGVTdG9yYWdlRGF0YShUT0tFTik7XG4gICAgdGhpcy5kZWxldGVTdG9yYWdlRGF0YShSRUZSRVNIX1RPS0VOKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95VXNlckRhdGEoKTogdm9pZCB7XG4gICAgdGhpcy51c2VyZGF0YSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlbGV0ZVN0b3JhZ2VEYXRhKFVTRVJEQVRBKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlQ3JlZGVudGlhbHModG9rZW46IGFueSwgcmVmcmVzaFRva2VuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgdGhpcy5yZWZyZXNoVG9rZW4gPSByZWZyZXNoVG9rZW47XG4gICAgdGhpcy5zYXZlU3RvcmFnZURhdGEoVE9LRU4sIHRva2VuKTtcbiAgICB0aGlzLnNhdmVTdG9yYWdlRGF0YShSRUZSRVNIX1RPS0VOLCByZWZyZXNoVG9rZW4pO1xuICAgIHRoaXMuc2F2ZVVzZXJEYXRhKHRoaXMuYnVpbGRVc2VyZGF0YUZyb21Ub2tlbih0b2tlbikpO1xuICB9XG5cbiAgcHVibGljIHNhdmVVc2VyRGF0YSh1c2VyRGF0YTogYW55KTogdm9pZCB7XG4gICAgdGhpcy51c2VyZGF0YSA9IHVzZXJEYXRhO1xuICAgIHRoaXMuc2F2ZVN0b3JhZ2VEYXRhKFVTRVJEQVRBLCBKU09OLnN0cmluZ2lmeSh1c2VyRGF0YSkpO1xuICB9XG5cbiAgcHVibGljIGlzTG9nZ2VkSW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy51c2VyZGF0YTtcbiAgfVxuXG4gIGxvZ291dCgpOiBQcm9taXNlPGFueT4ge1xuICAgIGxldCBjbGllbnRJZCA9IHRoaXMuZW52aXJvbm1lbnQuYXV0aENsaWVudDtcbiAgICBpZiAodGhpcy5yZWZyZXNoVG9rZW4pIHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSB0aGlzLmp3dFNlcnZpY2UuZGVjb2RlVG9rZW4odGhpcy5yZWZyZXNoVG9rZW4pO1xuICAgICAgY2xpZW50SWQgPSBkZWNvZGVkLmF6cDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMubG9nb3V0QXBpQ2xpZW50KGNsaWVudElkKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgdGhpcy5kZXN0cm95Q3JlZGVudGlhbHMoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95VXNlckRhdGEoKTtcbiAgICAgICAgdGhpcy5nb1RvTG9naW4oKTtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5kZXN0cm95Q3JlZGVudGlhbHMoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95VXNlckRhdGEoKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0TmV3VG9rZW4ocmVmcmVzaFRva2VuOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnNvbGUubG9nKCdnZXROZXdUb2tlbicpO1xuICAgIGNvbnN0IGJvZHkgPSAnZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuJyArICcmcmVmcmVzaF90b2tlbj0nICsgcmVmcmVzaFRva2VuICsgJyZjbGllbnRfaWQ9JyArIHRoaXMuZW52aXJvbm1lbnQuYXV0aENsaWVudDtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmVudmlyb25tZW50LmF1dGhFbmRQb2ludH0vcmVhbG1zLyR7dGhpcy5lbnZpcm9ubWVudC5hdXRoUmVhbG19L3Byb3RvY29sL29wZW5pZC1jb25uZWN0L3Rva2VuYCxcbiAgICAgIGJvZHksIHtoZWFkZXJzfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHJlcykpO1xuICB9XG5cbiAgZ2V0TmV3VG9rZW5DbGllbnQocmVmcmVzaFRva2VuOiBzdHJpbmcsIGNsaWVudElkOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnNvbGUubG9nKCdnZXROZXdUb2tlbicpO1xuICAgIGNvbnN0IGJvZHkgPSAnZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuJyArICcmcmVmcmVzaF90b2tlbj0nICsgcmVmcmVzaFRva2VuICsgJyZjbGllbnRfaWQ9JyArIGNsaWVudElkO1xuXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuZW52aXJvbm1lbnQuYXV0aEVuZFBvaW50fS9yZWFsbXMvJHt0aGlzLmVudmlyb25tZW50LmF1dGhSZWFsbX0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvdG9rZW5gLFxuICAgICAgYm9keSwge2hlYWRlcnN9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBnZXRUb2tlbkNsaWVudENvZGUocmVmcmVzaFRva2VuOiBzdHJpbmcsIGNsaWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnNvbGUubG9nKCdnZXROZXdUb2tlbicpO1xuICAgIGNvbnN0IGJvZHkgPSAnZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuJyArICcmcmVmcmVzaF90b2tlbj0nICsgcmVmcmVzaFRva2VuICsgJyZjbGllbnRfaWQ9JyArIGNsaWVudElkO1xuXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuZW52aXJvbm1lbnQuYXV0aEVuZFBvaW50fS9yZWFsbXMvJHt0aGlzLmVudmlyb25tZW50LmF1dGhSZWFsbX0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvdG9rZW5gLFxuICAgICAgYm9keSwge2hlYWRlcnN9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuXG4gIGdldExvZ2luVXJsKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55Pih0aGlzLmVuZFBvaW50ICsgJy9hdXRoL2xvZ2luL3VybC8nK3RoaXMuZW52aXJvbm1lbnQuYXV0aENsaWVudClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHJlcykpO1xuICB9XG5cbiAgZ2V0SG9tZVVybCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4odGhpcy5lbmRQb2ludCArICcvYXV0aC9ob21lL3VybC8nK3RoaXMuZW52aXJvbm1lbnQuYXV0aENsaWVudClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHJlcykpO1xuICB9XG5cbiAgbG9nb3V0QXBpKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgYm9keSA9ICdyZWZyZXNoX3Rva2VuPScgKyB0aGlzLnJlZnJlc2hUb2tlbiArICcmY2xpZW50X2lkPScgKyB0aGlzLmVudmlyb25tZW50LmF1dGhDbGllbnQ7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuZW52aXJvbm1lbnQuYXV0aEVuZFBvaW50fS9yZWFsbXMvJHt0aGlzLmVudmlyb25tZW50LmF1dGhSZWFsbX0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvbG9nb3V0YCxcbiAgICAgIGJvZHksIHtoZWFkZXJzfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHJlcykpO1xuICB9XG5cbiAgbG9nb3V0QXBpQ2xpZW50KGNsaWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGJvZHkgPSAncmVmcmVzaF90b2tlbj0nICsgdGhpcy5yZWZyZXNoVG9rZW4gKyAnJmNsaWVudF9pZD0nICsgY2xpZW50SWQ7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuZW52aXJvbm1lbnQuYXV0aEVuZFBvaW50fS9yZWFsbXMvJHt0aGlzLmVudmlyb25tZW50LmF1dGhSZWFsbX0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvbG9nb3V0YCxcbiAgICAgIGJvZHksIHtoZWFkZXJzfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHJlcykpO1xuICB9XG5cbiAgZ29Ub0xvZ2luKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0TG9naW5VcmwoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICBjb25zdCBsb2dpblVybCA9IHJlcy5kYXRhO1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBsb2dpblVybDtcbiAgICB9LCAoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbG9hZFNlc3Npb25EYXRhKCk6IHZvaWQge1xuICAgIGxldCBkYXRhO1xuICAgIGxldCB0b2tlbjtcbiAgICBsZXQgcmVmcmVzaFRva2VuO1xuICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgIGNvbnN0IHUgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChVU0VSREFUQSk7XG4gICAgICBjb25zdCB0ID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmVuY3J5cHQoVE9LRU4pO1xuICAgICAgY29uc3QgciA9IHRoaXMuY3J5cHRvU2VydmljZS5lbmNyeXB0KFJFRlJFU0hfVE9LRU4pO1xuICAgICAgZGF0YSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh1KTtcbiAgICAgIHRva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHQpO1xuICAgICAgcmVmcmVzaFRva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHIpO1xuICAgICAgaWYgKGRhdGEgJiYgdG9rZW4gJiYgcmVmcmVzaFRva2VuKSB7XG4gICAgICAgIGRhdGEgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZGVjcnlwdChkYXRhKTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLmNyeXB0b1NlcnZpY2UuZGVjcnlwdCh0b2tlbik7XG4gICAgICAgIHJlZnJlc2hUb2tlbiA9IHRoaXMuY3J5cHRvU2VydmljZS5kZWNyeXB0KHJlZnJlc2hUb2tlbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVVNFUkRBVEEpO1xuICAgICAgdG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVE9LRU4pO1xuICAgICAgcmVmcmVzaFRva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFJFRlJFU0hfVE9LRU4pO1xuICAgIH1cbiAgICBpZiAoZGF0YSAmJiB0b2tlbiAmJiByZWZyZXNoVG9rZW4pIHtcbiAgICAgIGNvbnN0IHVzZXIgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgdGhpcy5zZXRUb2tlbnModG9rZW4sIHJlZnJlc2hUb2tlbik7XG4gICAgICB0aGlzLnNldFVzZXJkYXRhKHVzZXIpO1xuICAgIH1cbiAgfVxuXG4gIHVzZXJIYXNPcHRpb25zSW5BcHAodXNlcklkOiBhbnksIGFwcGxpY2F0aW9uSWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55Pih0aGlzLmVuZFBvaW50ICsgYC9zZWN1cml0eS9vcHRpb24vJHthcHBsaWNhdGlvbklkfS8ke3VzZXJJZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBjaGVja0FwcFBlcm1pc3Npb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudXNlcmRhdGE/LnVzZXJJZCwgdGhpcy5hcHBsaWNhdGlvbklkKTtcbiAgICAgIGlmICh0aGlzLmFwcGxpY2F0aW9uSWQpIHtcbiAgICAgICAgdGhpcy51c2VySGFzT3B0aW9uc0luQXBwKHRoaXMudXNlcmRhdGE/LnVzZXJJZCwgdGhpcy5hcHBsaWNhdGlvbklkKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgIGlmIChyZXMuZGF0YSkge1xuICAgICAgICAgICAgcmVzb2x2ZSgnb2snKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXRIb21lVXJsKCkuc3Vic2NyaWJlKHJlczEgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMxKTtcbiAgICAgICAgICAgICAgY29uc3QgaG9tZVVybCA9IHJlczEuZGF0YTtcbiAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBob21lVXJsO1xuICAgICAgICAgICAgICByZWplY3QoJ25vaycpO1xuICAgICAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgIHJlamVjdCgnbm9rJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgcmVqZWN0KCdub2snKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCdvaycpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICBwdWJsaWMgZ2V0T3B0aW9uc1VzZXIoYXBwbGljYXRpb25JZDogbnVtYmVyIHwgbnVsbCwgdHlwZTogc3RyaW5nIHwgbnVsbCwgbGFuZ3VhZ2U6IHN0cmluZyB8IG51bGwsIGVudGl0eUNvZGU6IHN0cmluZyB8IG51bGwsIHBhcmVudE9wdGlvbklkOiBudW1iZXIgfCBudWxsLCBpbmNsdWRlRGF0YTogYm9vbGVhbiB8IG51bGwpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHBhcmFtID0ge1xuICAgICAgdXNlcklkOiB0aGlzLnVzZXJkYXRhPy51c2VySWQsXG4gICAgICBhcHBsaWNhdGlvbklkLFxuICAgICAgdHlwZSxcbiAgICAgIGxhbmd1YWdlLFxuICAgICAgZW50aXR5Q29kZSxcbiAgICAgIHBhcmVudE9wdGlvbklkLFxuICAgICAgaW5jbHVkZURhdGFcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KHRoaXMuZW5kUG9pbnQgKyAnL3NlY3VyaXR5L29wdGlvbi91c2VyJywgcGFyYW0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIHJlZ2lzdGVyRXhjZXB0aW9uKHBhcmFtOiBGcm9udEVuZEV4Y2VwdGlvbik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgnc2tpcEVycm9yJywgJ3RydWUnKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih0aGlzLmVuZFBvaW50ICsgJy9hdXRoL2V4Y2VwdGlvbi9sb2cnLCBwYXJhbSwge2hlYWRlcnN9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzKSk7XG4gIH1cblxuICBzYXZlU3RvcmFnZURhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICBjb25zdCBrID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmVuY3J5cHQoa2V5KTtcbiAgICAgIGNvbnN0IHYgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdCh2YWx1ZSk7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oaywgdik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBkZWxldGVTdG9yYWdlRGF0YShrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgIGNvbnN0IGsgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChrZXkpO1xuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGspO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICB9XG4gIH1cblxuICBnZXRTdG9yYWdlRGF0YShrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGxldCByZXM6IHN0cmluZyB8IG51bGw7XG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikge1xuICAgICAgY29uc3QgayA9IHRoaXMuY3J5cHRvU2VydmljZS5lbmNyeXB0KGtleSk7XG4gICAgICBjb25zdCB2ID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGspO1xuICAgICAgaWYgKHYpIHtcbiAgICAgICAgcmVzID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmRlY3J5cHQodik7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMgPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG5cbiAgcHVibGljIHJlbW92ZVVybERhdGEoKTogdm9pZCB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB1cmwuc2VhcmNoUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zLmRlbGV0ZSgnY29kZScpO1xuICAgIGNvbnN0IG5ld1VybCA9IHVybC5vcmlnaW4gKyB1cmwucGF0aG5hbWUgKyAnPycgKyBxdWVyeVBhcmFtcy50b1N0cmluZygpO1xuICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgZG9jdW1lbnQudGl0bGUsIG5ld1VybCk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tTZXNzaW9uRGF0YSgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgZGF0YTtcbiAgICAgIGxldCB0b2tlbjtcbiAgICAgIGxldCByZWZyZXNoVG9rZW47XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRVcmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgIGNvbnN0IGNvZGUgPSBjdXJyZW50VXJsLnNlYXJjaFBhcmFtcy5nZXQoJ2NvZGUnKTtcbiAgICAgIGNvbnNvbGUubG9nKCdjb2RlJywgY29kZSk7XG4gICAgICBpZiAoY29kZSkge1xuICAgICAgICBjb25zdCBjb2RlRGVjb2RlZCA9IHRoaXMuZ2V0RGVjb2RlZEF1dGhDb2RlKGNvZGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY29kZScsIGNvZGVEZWNvZGVkKTtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IHRoaXMuand0U2VydmljZS5kZWNvZGVUb2tlbihjb2RlRGVjb2RlZCk7XG4gICAgICAgIHRoaXMuZ2V0VG9rZW5DbGllbnRDb2RlKGNvZGVEZWNvZGVkLCBkZWNvZGVkLmF6cCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgICAgdG9rZW4gPSByZXMuYWNjZXNzX3Rva2VuO1xuICAgICAgICAgICAgcmVmcmVzaFRva2VuID0gcmVzLnJlZnJlc2hfdG9rZW47XG4gICAgICAgICAgICB0aGlzLnNhdmVDcmVkZW50aWFscyh0b2tlbiwgcmVmcmVzaFRva2VuKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBcHBQZXJtaXNzaW9ucygpLnRoZW4oKHJlczEpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzMSk7XG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlVXJsRGF0YSgpO1xuICAgICAgICAgICAgICByZXNvbHZlKCdPSycpO1xuICAgICAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSB0aGlzLmdldFN0b3JhZ2VEYXRhKFVTRVJEQVRBKTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLmdldFN0b3JhZ2VEYXRhKFRPS0VOKTtcbiAgICAgICAgcmVmcmVzaFRva2VuID0gdGhpcy5nZXRTdG9yYWdlRGF0YShSRUZSRVNIX1RPS0VOKTtcbiAgICAgICAgaWYgKGRhdGEgJiYgdG9rZW4gJiYgcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgdGhpcy5zYXZlQ3JlZGVudGlhbHModG9rZW4sIHJlZnJlc2hUb2tlbik7XG4gICAgICAgICAgdGhpcy5jaGVja0FwcFBlcm1pc3Npb25zKCkudGhlbigocmVzMSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzMSk7XG4gICAgICAgICAgICByZXNvbHZlKCdPSycpO1xuICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignL3JlZGlyZWN0Jyk+LTEpIHtcbiAgICAgICAgICAgIHJlc29sdmUoJ09LJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveUNyZWRlbnRpYWxzKCk7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lVc2VyRGF0YSgpO1xuICAgICAgICAgICAgdGhpcy5nZXRMb2dpblVybCgpLnN1YnNjcmliZShyZXMxID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzMSk7XG4gICAgICAgICAgICAgIHRoaXMubG9naW5VcmwgPSByZXMxLmRhdGE7XG4gICAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignL2xvZ2luJyk8MCAmJiB1cmwuaW5kZXhPZignL2ZvcmdvdCcpPDAgJiZcbiAgICAgICAgICAgICAgICAgIHVybC5pbmRleE9mKCcvcmVzZXQnKTwwICYmIHVybC5pbmRleE9mKCcvdmVyaWZ5Jyk8MCAmJlxuICAgICAgICAgICAgICAgICAgdXJsLmluZGV4T2YoJy9zaWduX3VwJyk8MCkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy5sb2dpblVybCArICc/Y29udGludWU9JytlbmNvZGVVUklDb21wb25lbnQodXJsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKCdOT0snKTtcbiAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuXG4gIHB1YmxpYyBjaGVja1Nlc3Npb25EYXRhTWljcm9mcm9udCgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgZGF0YTtcbiAgICAgIGxldCB0b2tlbjtcbiAgICAgIGxldCByZWZyZXNoVG9rZW47XG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHUgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChVU0VSREFUQSk7XG4gICAgICAgIGNvbnN0IHQgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChUT0tFTik7XG4gICAgICAgIGNvbnN0IHIgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdChSRUZSRVNIX1RPS0VOKTtcbiAgICAgICAgY29uc3QgZDEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odSk7XG4gICAgICAgIGNvbnN0IGQyID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHQpO1xuICAgICAgICBjb25zdCBkMyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShyKTtcbiAgICAgICAgaWYgKGQxICYmIGQyICYmIGQzKSB7XG4gICAgICAgICAgZGF0YSA9IHRoaXMuY3J5cHRvU2VydmljZS5kZWNyeXB0KGQxKTtcbiAgICAgICAgICB0b2tlbiA9IHRoaXMuY3J5cHRvU2VydmljZS5kZWNyeXB0KGQyKTtcbiAgICAgICAgICByZWZyZXNoVG9rZW4gPSB0aGlzLmNyeXB0b1NlcnZpY2UuZGVjcnlwdChkMyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVVNFUkRBVEEpO1xuICAgICAgICB0b2tlbiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShUT0tFTik7XG4gICAgICAgIHJlZnJlc2hUb2tlbiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShSRUZSRVNIX1RPS0VOKTtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhICYmIHRva2VuICYmIHJlZnJlc2hUb2tlbikge1xuICAgICAgICBjb25zb2xlLmxvZygnbG9jYWwgc2Vzc2lvbiBvaycpO1xuICAgICAgICB0aGlzLnNhdmVDcmVkZW50aWFscyh0b2tlbiwgcmVmcmVzaFRva2VuKTtcbiAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2xvY2FsIHNlc3Npb24gbm9rJyk7XG4gICAgICAgIHJlamVjdCgnTk9LJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXV0aENvZGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBlbmMgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jcnlwdCh0aGlzLnJlZnJlc2hUb2tlbj90aGlzLnJlZnJlc2hUb2tlbjonJyk7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlbmMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWNvZGVkQXV0aENvZGUoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWMgPSBkZWNvZGVVUklDb21wb25lbnQoY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuY3J5cHRvU2VydmljZS5kZWNyeXB0KGRlYyk7XG4gIH1cblxufVxuXG4iXX0=
@@ -0,0 +1,249 @@
1
+ /* eslint-disable max-lines-per-function */
2
+ /* eslint-disable prefer-const */
3
+ import { Inject, Injectable } from '@angular/core';
4
+ import { map } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./session.service";
7
+ import * as i2 from "@angular/common/http";
8
+ import * as i3 from "@angular/material/snack-bar";
9
+ export class WebAuthnService {
10
+ constructor(sessionService, http, snackBar, environment) {
11
+ this.sessionService = sessionService;
12
+ this.http = http;
13
+ this.snackBar = snackBar;
14
+ this.webAuthnAvailable = !!navigator.credentials && !!navigator.credentials.create;
15
+ this.environment = environment;
16
+ }
17
+ webAuthnSignup(user) {
18
+ console.log('[webAuthnSignup]');
19
+ const publicKeyCredentialCreationOptions = {
20
+ challenge: this.getChallenge(),
21
+ rp: {
22
+ name: 'WebAuthn',
23
+ },
24
+ user: {
25
+ id: Uint8Array.from(user.id, c => c.charCodeAt(0)),
26
+ name: user.email,
27
+ displayName: user.email,
28
+ },
29
+ pubKeyCredParams: [{ alg: -7, type: 'public-key' }],
30
+ authenticatorSelection: {
31
+ authenticatorAttachment: 'platform',
32
+ },
33
+ timeout: 60000,
34
+ attestation: 'direct'
35
+ };
36
+ return navigator.credentials.create({
37
+ publicKey: publicKeyCredentialCreationOptions,
38
+ });
39
+ }
40
+ webAuthnSignin(user) {
41
+ console.log(user);
42
+ /* {
43
+ "id": "b18ee077-f896-44f4-a2d4-3ac831eb1c90",
44
+ "email": "test.user@email.com",
45
+ "password": "",
46
+ "credentials": [
47
+ [
48
+ {
49
+ "id": {},
50
+ "type": "public-key"
51
+ }
52
+ ]
53
+ ]
54
+ } */
55
+ let publicKeyCredentials = {
56
+ challenge: this.getChallenge(),
57
+ allowCredentials: user.credentials[0]
58
+ };
59
+ return navigator.credentials.get({ publicKey: publicKeyCredentials });
60
+ }
61
+ getChallenge() {
62
+ return Uint8Array.from('jEfcn1CsGFxBiXYtJMSGDycPqPoyFJ3Z', c => c.charCodeAt(0));
63
+ }
64
+ register(user, newCredentialInfo) {
65
+ const promise = new Promise((resolve, reject) => {
66
+ let enc = new TextDecoder('utf-8');
67
+ let clientDataJSON = enc.decode(newCredentialInfo.response.clientDataJSON);
68
+ console.log(clientDataJSON);
69
+ let clientData = JSON.parse(clientDataJSON);
70
+ console.log(clientData);
71
+ const publicKey = this.arrayBufferToBase64Url(newCredentialInfo.rawId);
72
+ let idList = [{
73
+ // id: newCredentialInfo.rawId,
74
+ id: publicKey,
75
+ type: 'public-key'
76
+ }];
77
+ user.credentials.push(idList);
78
+ console.log(user);
79
+ this.addAttributeUser(user.id, 'webauthn_key', publicKey).subscribe({
80
+ next: (res) => {
81
+ console.log(res);
82
+ resolve(res);
83
+ },
84
+ error: (err) => {
85
+ console.error(err);
86
+ reject(err);
87
+ }
88
+ });
89
+ });
90
+ return promise;
91
+ }
92
+ base64UrlToArrayBuffer(base64UrlString) {
93
+ const base64String = base64UrlString.replace(/-/g, '+').replace(/_/g, '/');
94
+ const paddedBase64String = base64String.padEnd(Math.ceil(base64String.length / 4) * 4, '=');
95
+ const uint8Array = new Uint8Array(atob(paddedBase64String)
96
+ .split('')
97
+ .map((char) => char.charCodeAt(0)));
98
+ return uint8Array.buffer;
99
+ }
100
+ arrayBufferToBase64Url(arrayBuffer) {
101
+ const uint8Array = new Uint8Array(arrayBuffer);
102
+ let base64String = btoa(String.fromCharCode.apply(null, Array.from(uint8Array)));
103
+ base64String = base64String.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
104
+ return base64String;
105
+ }
106
+ signUp() {
107
+ const promise = new Promise((resolve, reject) => {
108
+ if (this.webAuthnAvailable) {
109
+ const userData = this.sessionService.getUserdata();
110
+ if (userData) {
111
+ let user = {
112
+ id: userData?.userId,
113
+ email: userData?.email,
114
+ credentials: []
115
+ };
116
+ this.webAuthnSignup(user)
117
+ .then((credential) => {
118
+ console.log('credentials.create RESPONSE', credential);
119
+ this.register(user, credential).then((res) => {
120
+ console.log(res);
121
+ this.showSnackBar(this.getMessage('signUpOk'), ['snack-success']);
122
+ resolve(this.getMessage('signUpOk'));
123
+ }).catch((err) => {
124
+ console.error(err);
125
+ this.showSnackBar(this.getMessage('signUpNok'), ['snack-error']);
126
+ reject(this.getMessage('signUpNok'));
127
+ });
128
+ }).catch((error) => {
129
+ console.error('credentials.create ERROR', error);
130
+ this.showSnackBar(this.getMessage('signUpNok'), ['snack-error']);
131
+ reject(this.getMessage('signUpNok'));
132
+ });
133
+ }
134
+ }
135
+ else {
136
+ this.showSnackBar(this.getMessage('browserNok'), ['snack-error']);
137
+ reject(this.getMessage('browserNok'));
138
+ }
139
+ });
140
+ return promise;
141
+ }
142
+ signIn() {
143
+ const promise = new Promise((resolve, reject) => {
144
+ if (this.webAuthnAvailable) {
145
+ const userData = this.sessionService.getUserdata();
146
+ if (userData) {
147
+ let user = {
148
+ id: userData?.userId,
149
+ email: userData?.email,
150
+ credentials: [{}]
151
+ };
152
+ this.getAttributeUser(user.id, 'webauthn_key').subscribe({
153
+ next: (res) => {
154
+ console.log(res);
155
+ if (res.data && res.data.webauthn_key && res.data.webauthn_key.length > 0) {
156
+ const cred = {
157
+ id: this.base64UrlToArrayBuffer(res.data.webauthn_key[0]),
158
+ type: 'public-key'
159
+ };
160
+ user.credentials.splice(0, 1);
161
+ user.credentials.push([cred]);
162
+ this.webAuthnSignin(user).then((response) => {
163
+ console.log('SUCCESSFULLY GOT AN ASSERTION!', response);
164
+ resolve('ok');
165
+ })
166
+ .catch((error) => {
167
+ console.error('FAIL', error);
168
+ this.showSnackBar(this.getMessage('invalidCredentials'), ['snack-error']);
169
+ reject(this.getMessage('invalidCredentials'));
170
+ });
171
+ }
172
+ else {
173
+ this.showSnackBar(this.getMessage('noCredentials'), ['snack-error']);
174
+ reject(this.getMessage('noCredentials'));
175
+ }
176
+ },
177
+ error: (err) => {
178
+ console.error(err);
179
+ this.showSnackBar(this.getMessage('errorRetrievingCredentials'), ['snack-error']);
180
+ reject(this.getMessage('errorRetrievingCredentials'));
181
+ }
182
+ });
183
+ }
184
+ }
185
+ else {
186
+ this.showSnackBar(this.getMessage('browserNok'), ['snack-error']);
187
+ reject(this.getMessage('browserNok'));
188
+ }
189
+ });
190
+ return promise;
191
+ }
192
+ addAttributeUser(userId, code, value) {
193
+ return this.http.post(this.environment.endPoint + `/user/attribute/value/${userId}/${code}/${value}`, {})
194
+ .pipe(map(res => res));
195
+ }
196
+ getAttributeUser(userId, code) {
197
+ return this.http.get(this.environment.endPoint + `/user/attribute/value/${userId}/${code}`)
198
+ .pipe(map(res => res));
199
+ }
200
+ showSnackBar(message, panelClass = []) {
201
+ console.log(message);
202
+ setTimeout(() => {
203
+ this.snackBar.open(message, undefined, {
204
+ duration: 5000,
205
+ panelClass,
206
+ verticalPosition: 'top'
207
+ });
208
+ });
209
+ }
210
+ getMessage(code) {
211
+ let msg = '';
212
+ const lang = window.localStorage.getItem('LANG');
213
+ const messagesEn = {
214
+ signUpOk: 'Credentials registered successfully',
215
+ signUpNok: 'A problem occurred while registering credentials',
216
+ browserNok: 'The browser does not support this functionality',
217
+ noCredentials: 'The user has no stored credentials',
218
+ invalidCredentials: 'The credentials are invalid',
219
+ errorRetrievingCredentials: 'There was a problem retrieving credentials',
220
+ };
221
+ const messagesEs = {
222
+ signUpOk: 'Credenciales registradas exitosamente',
223
+ signUpNok: 'Se produjo un problema al registrar las credenciales',
224
+ browserNok: 'El navegador no soporta esta funcionalidad',
225
+ noCredentials: 'El usuario no tiene credenciales almacenadas',
226
+ invalidCredentials: 'Las credenciales no son válidas',
227
+ errorRetrievingCredentials: 'Se produjo un problema al recuperar las credenciales',
228
+ };
229
+ if (lang && lang === 'en') {
230
+ msg = messagesEn[code];
231
+ }
232
+ else {
233
+ msg = messagesEs[code];
234
+ }
235
+ return msg;
236
+ }
237
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: WebAuthnService, deps: [{ token: i1.SessionService }, { token: i2.HttpClient }, { token: i3.MatSnackBar }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable }); }
238
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: WebAuthnService, providedIn: 'root' }); }
239
+ }
240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: WebAuthnService, decorators: [{
241
+ type: Injectable,
242
+ args: [{
243
+ providedIn: 'root'
244
+ }]
245
+ }], ctorParameters: function () { return [{ type: i1.SessionService }, { type: i2.HttpClient }, { type: i3.MatSnackBar }, { type: undefined, decorators: [{
246
+ type: Inject,
247
+ args: ['environment']
248
+ }] }]; } });
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWF1dGhuLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zc2ktc2VjdXJpdHktY29tbW9ucy9zcmMvbGliL3NlcnZpY2VzL3dlYi1hdXRobi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxpQ0FBaUM7QUFDakMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkQsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFRdkMsTUFBTSxPQUFPLGVBQWU7SUFLMUIsWUFDVSxjQUE4QixFQUM5QixJQUFnQixFQUNoQixRQUFxQixFQUNOLFdBQWdCO1FBSC9CLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFOL0Isc0JBQWlCLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBUzVFLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBa0I7UUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sa0NBQWtDLEdBQXVDO1lBQzdFLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzlCLEVBQUUsRUFBRTtnQkFDRixJQUFJLEVBQUUsVUFBVTthQUNqQjtZQUNELElBQUksRUFBRTtnQkFDSixFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxFQUFFLElB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QUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOzhHQTlQVSxlQUFlLHFHQVNoQixhQUFhO2tIQVRaLGVBQWUsY0FGZCxNQUFNOzsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBVUksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzLXBlci1mdW5jdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWNvbnN0ICovXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXJXZWJhdXRobiB9IGZyb20gJy4uL3VzZXIubW9kZWwnO1xuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBXZWJBdXRoblNlcnZpY2Uge1xuXG4gIHdlYkF1dGhuQXZhaWxhYmxlID0gISFuYXZpZ2F0b3IuY3JlZGVudGlhbHMgJiYgISFuYXZpZ2F0b3IuY3JlZGVudGlhbHMuY3JlYXRlO1xuICBlbnZpcm9ubWVudDogYW55O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlOiBTZXNzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBlbnZpcm9ubWVudDogYW55XG4gICkge1xuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIHdlYkF1dGhuU2lnbnVwKHVzZXI6IFVzZXJXZWJhdXRobik6IFByb21pc2U8YW55PiB7XG4gICAgY29uc29sZS5sb2coJ1t3ZWJBdXRoblNpZ251cF0nKTtcbiAgICBjb25zdCBwdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOiBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zID0ge1xuICAgICAgY2hhbGxlbmdlOiB0aGlzLmdldENoYWxsZW5nZSgpLFxuICAgICAgcnA6IHtcbiAgICAgICAgbmFtZTogJ1dlYkF1dGhuJyxcbiAgICAgIH0sXG4gICAgICB1c2VyOiB7XG4gICAgICAgIGlkOiBVaW50OEFycmF5LmZyb20odXNlci5pZCwgYyA9PiBjLmNoYXJDb2RlQXQoMCkpLFxuICAgICAgICBuYW1lOiB1c2VyLmVtYWlsLFxuICAgICAgICBkaXNwbGF5TmFtZTogdXNlci5lbWFpbCxcbiAgICAgIH0sXG4gICAgICBwdWJLZXlDcmVkUGFyYW1zOiBbeyBhbGc6IC03LCB0eXBlOiAncHVibGljLWtleScgfV0sXG4gICAgICBhdXRoZW50aWNhdG9yU2VsZWN0aW9uOiB7XG4gICAgICAgIGF1dGhlbnRpY2F0b3JBdHRhY2htZW50OiAncGxhdGZvcm0nLFxuICAgICAgfSxcbiAgICAgIHRpbWVvdXQ6IDYwMDAwLFxuICAgICAgYXR0ZXN0YXRpb246ICdkaXJlY3QnXG4gICAgfTtcblxuICAgIHJldHVybiBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuY3JlYXRlKHtcbiAgICAgIHB1YmxpY0tleTogcHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyxcbiAgICB9KTtcblxuICB9XG5cbiAgd2ViQXV0aG5TaWduaW4odXNlcjogVXNlcldlYmF1dGhuKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zb2xlLmxvZyh1c2VyKTtcbiAgICAvKiB7XG4gICAgICAgIFwiaWRcIjogXCJiMThlZTA3Ny1mODk2LTQ0ZjQtYTJkNC0zYWM4MzFlYjFjOTBcIixcbiAgICAgICAgXCJlbWFpbFwiOiBcInRlc3QudXNlckBlbWFpbC5jb21cIixcbiAgICAgICAgXCJwYXNzd29yZFwiOiBcIlwiLFxuICAgICAgICBcImNyZWRlbnRpYWxzXCI6IFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjoge30sXG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInB1YmxpYy1rZXlcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIH0gKi9cbiAgICBsZXQgcHVibGljS2V5Q3JlZGVudGlhbHMgPSB7XG4gICAgICBjaGFsbGVuZ2U6IHRoaXMuZ2V0Q2hhbGxlbmdlKCksXG4gICAgICBhbGxvd0NyZWRlbnRpYWxzOiB1c2VyLmNyZWRlbnRpYWxzWzBdXG4gICAgfTtcbiAgICByZXR1cm4gbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmdldCh7IHB1YmxpY0tleTogcHVibGljS2V5Q3JlZGVudGlhbHMgfSk7XG4gIH1cblxuXG4gIGdldENoYWxsZW5nZSgpOiBVaW50OEFycmF5IHtcbiAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKCdqRWZjbjFDc0dGeEJpWFl0Sk1TR0R5Y1BxUG95RkozWicsIGMgPT4gYy5jaGFyQ29kZUF0KDApKTtcbiAgfVxuXG4gIHJlZ2lzdGVyKHVzZXI6IFVzZXJXZWJhdXRobiwgbmV3Q3JlZGVudGlhbEluZm86IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBlbmMgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04Jyk7XG4gICAgICBsZXQgY2xpZW50RGF0YUpTT04gPSBlbmMuZGVjb2RlKG5ld0NyZWRlbnRpYWxJbmZvLnJlc3BvbnNlLmNsaWVudERhdGFKU09OKTtcbiAgICAgIGNvbnNvbGUubG9nKGNsaWVudERhdGFKU09OKTtcbiAgICAgIGxldCBjbGllbnREYXRhID0gSlNPTi5wYXJzZShjbGllbnREYXRhSlNPTik7XG4gICAgICBjb25zb2xlLmxvZyhjbGllbnREYXRhKTtcbiAgICAgIGNvbnN0IHB1YmxpY0tleSA9ICB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjRVcmwobmV3Q3JlZGVudGlhbEluZm8ucmF3SWQpO1xuICAgICAgbGV0IGlkTGlzdCA9IFt7XG4gICAgICAgIC8vIGlkOiBuZXdDcmVkZW50aWFsSW5mby5yYXdJZCxcbiAgICAgICAgaWQ6IHB1YmxpY0tleSxcbiAgICAgICAgdHlwZTogJ3B1YmxpYy1rZXknXG4gICAgICB9XTtcbiAgICAgIHVzZXIuY3JlZGVudGlhbHMucHVzaChpZExpc3QpO1xuICAgICAgY29uc29sZS5sb2codXNlcik7XG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZVVzZXIodXNlci5pZCwgJ3dlYmF1dGhuX2tleScsIHB1YmxpY0tleSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG4gIGJhc2U2NFVybFRvQXJyYXlCdWZmZXIoYmFzZTY0VXJsU3RyaW5nOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XG4gICAgY29uc3QgYmFzZTY0U3RyaW5nID0gYmFzZTY0VXJsU3RyaW5nLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyk7XG4gICAgY29uc3QgcGFkZGVkQmFzZTY0U3RyaW5nID0gYmFzZTY0U3RyaW5nLnBhZEVuZChNYXRoLmNlaWwoYmFzZTY0U3RyaW5nLmxlbmd0aCAvIDQpICogNCwgJz0nKTtcbiAgICBjb25zdCB1aW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoXG4gICAgICBhdG9iKHBhZGRlZEJhc2U2NFN0cmluZylcbiAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAubWFwKChjaGFyKSA9PiBjaGFyLmNoYXJDb2RlQXQoMCkpXG4gICAgKTtcbiAgICByZXR1cm4gdWludDhBcnJheS5idWZmZXI7XG4gIH1cblxuICBhcnJheUJ1ZmZlclRvQmFzZTY0VXJsKGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XG4gICAgY29uc3QgdWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcbiAgICBsZXQgYmFzZTY0U3RyaW5nID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIEFycmF5LmZyb20odWludDhBcnJheSkpKTtcbiAgICBiYXNlNjRTdHJpbmcgPSBiYXNlNjRTdHJpbmcucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvPSskLywgJycpO1xuICAgIHJldHVybiBiYXNlNjRTdHJpbmc7XG4gIH1cblxuXG4gIHNpZ25VcCgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy53ZWJBdXRobkF2YWlsYWJsZSkge1xuICAgICAgICBjb25zdCB1c2VyRGF0YSA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0VXNlcmRhdGEoKTtcbiAgICAgICAgaWYgKHVzZXJEYXRhKSB7XG4gICAgICAgICAgbGV0IHVzZXIgPSB7XG4gICAgICAgICAgICBpZDogdXNlckRhdGE/LnVzZXJJZCxcbiAgICAgICAgICAgIGVtYWlsOiB1c2VyRGF0YT8uZW1haWwsXG4gICAgICAgICAgICBjcmVkZW50aWFsczogW11cbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMud2ViQXV0aG5TaWdudXAodXNlcilcbiAgICAgICAgICAgIC50aGVuKChjcmVkZW50aWFsOiBQdWJsaWNLZXlDcmVkZW50aWFsKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjcmVkZW50aWFscy5jcmVhdGUgUkVTUE9OU0UnLCBjcmVkZW50aWFsKTtcbiAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlcih1c2VyLCBjcmVkZW50aWFsKS50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U25hY2tCYXIodGhpcy5nZXRNZXNzYWdlKCdzaWduVXBPaycpLCBbJ3NuYWNrLXN1Y2Nlc3MnXSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmdldE1lc3NhZ2UoJ3NpZ25VcE9rJykpO1xuICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NuYWNrQmFyKHRoaXMuZ2V0TWVzc2FnZSgnc2lnblVwTm9rJyksIFsnc25hY2stZXJyb3InXSk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHRoaXMuZ2V0TWVzc2FnZSgnc2lnblVwTm9rJykpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdjcmVkZW50aWFscy5jcmVhdGUgRVJST1InLCBlcnJvcik7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd1NuYWNrQmFyKHRoaXMuZ2V0TWVzc2FnZSgnc2lnblVwTm9rJyksIFsnc25hY2stZXJyb3InXSk7XG4gICAgICAgICAgICAgIHJlamVjdCh0aGlzLmdldE1lc3NhZ2UoJ3NpZ25VcE5vaycpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ2Jyb3dzZXJOb2snKSwgWydzbmFjay1lcnJvciddKTtcbiAgICAgICAgcmVqZWN0KHRoaXMuZ2V0TWVzc2FnZSgnYnJvd3Nlck5vaycpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG5cbiAgc2lnbkluKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLndlYkF1dGhuQXZhaWxhYmxlKSB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRVc2VyZGF0YSgpO1xuICAgICAgICBpZiAodXNlckRhdGEpIHtcbiAgICAgICAgICBsZXQgdXNlciA9IHtcbiAgICAgICAgICAgIGlkOiB1c2VyRGF0YT8udXNlcklkLFxuICAgICAgICAgICAgZW1haWw6IHVzZXJEYXRhPy5lbWFpbCxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBbe31dXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMuZ2V0QXR0cmlidXRlVXNlcih1c2VyLmlkLCAnd2ViYXV0aG5fa2V5Jykuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhICYmIHJlcy5kYXRhLndlYmF1dGhuX2tleSAmJiByZXMuZGF0YS53ZWJhdXRobl9rZXkubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY3JlZCA9IHtcbiAgICAgICAgICAgICAgICAgIGlkOiAgdGhpcy5iYXNlNjRVcmxUb0FycmF5QnVmZmVyKHJlcy5kYXRhLndlYmF1dGhuX2tleVswXSksXG4gICAgICAgICAgICAgICAgICB0eXBlOiAncHVibGljLWtleSdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHVzZXIuY3JlZGVudGlhbHMuc3BsaWNlKDAsMSk7XG4gICAgICAgICAgICAgICAgdXNlci5jcmVkZW50aWFscy5wdXNoKFtjcmVkXSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLndlYkF1dGhuU2lnbmluKHVzZXIpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU1VDQ0VTU0ZVTExZIEdPVCBBTiBBU1NFUlRJT04hJywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgnb2snKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGQUlMJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ2ludmFsaWRDcmVkZW50aWFscycpLCBbJ3NuYWNrLWVycm9yJ10pO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QodGhpcy5nZXRNZXNzYWdlKCdpbnZhbGlkQ3JlZGVudGlhbHMnKSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ25vQ3JlZGVudGlhbHMnKSwgWydzbmFjay1lcnJvciddKTtcbiAgICAgICAgICAgICAgICByZWplY3QodGhpcy5nZXRNZXNzYWdlKCdub0NyZWRlbnRpYWxzJykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ2Vycm9yUmV0cmlldmluZ0NyZWRlbnRpYWxzJyksIFsnc25hY2stZXJyb3InXSk7XG4gICAgICAgICAgICAgIHJlamVjdCh0aGlzLmdldE1lc3NhZ2UoJ2Vycm9yUmV0cmlldmluZ0NyZWRlbnRpYWxzJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dTbmFja0Jhcih0aGlzLmdldE1lc3NhZ2UoJ2Jyb3dzZXJOb2snKSwgWydzbmFjay1lcnJvciddKTtcbiAgICAgICAgcmVqZWN0KHRoaXMuZ2V0TWVzc2FnZSgnYnJvd3Nlck5vaycpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG5cbiAgYWRkQXR0cmlidXRlVXNlcih1c2VySWQ6IGFueSwgY29kZTogYW55LCB2YWx1ZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih0aGlzLmVudmlyb25tZW50LmVuZFBvaW50ICsgYC91c2VyL2F0dHJpYnV0ZS92YWx1ZS8ke3VzZXJJZH0vJHtjb2RlfS8ke3ZhbHVlfWAse30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIGdldEF0dHJpYnV0ZVVzZXIodXNlcklkOiBhbnksIGNvZGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55Pih0aGlzLmVudmlyb25tZW50LmVuZFBvaW50ICsgYC91c2VyL2F0dHJpYnV0ZS92YWx1ZS8ke3VzZXJJZH0vJHtjb2RlfWApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMpKTtcbiAgfVxuXG4gIHNob3dTbmFja0JhcihtZXNzYWdlOiBhbnksIHBhbmVsQ2xhc3M6IGFueVtdID0gW10pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCB1bmRlZmluZWQsIHtcbiAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgIHBhbmVsQ2xhc3MsXG4gICAgICAgIHZlcnRpY2FsUG9zaXRpb246ICd0b3AnXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldE1lc3NhZ2UoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgbXNnID0gJyc7XG4gICAgY29uc3QgbGFuZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTEFORycpO1xuICAgIGNvbnN0IG1lc3NhZ2VzRW46IGFueSA9IHtcbiAgICAgIHNpZ25VcE9rOiAnQ3JlZGVudGlhbHMgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHknLFxuICAgICAgc2lnblVwTm9rOiAnQSBwcm9ibGVtIG9jY3VycmVkIHdoaWxlIHJlZ2lzdGVyaW5nIGNyZWRlbnRpYWxzJyxcbiAgICAgIGJyb3dzZXJOb2s6ICdUaGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eScsXG4gICAgICBub0NyZWRlbnRpYWxzOiAnVGhlIHVzZXIgaGFzIG5vIHN0b3JlZCBjcmVkZW50aWFscycsXG4gICAgICBpbnZhbGlkQ3JlZGVudGlhbHM6ICdUaGUgY3JlZGVudGlhbHMgYXJlIGludmFsaWQnLFxuICAgICAgZXJyb3JSZXRyaWV2aW5nQ3JlZGVudGlhbHM6ICdUaGVyZSB3YXMgYSBwcm9ibGVtIHJldHJpZXZpbmcgY3JlZGVudGlhbHMnLFxuICAgIH07XG4gICAgY29uc3QgbWVzc2FnZXNFczogYW55ID0ge1xuICAgICAgc2lnblVwT2s6ICdDcmVkZW5jaWFsZXMgcmVnaXN0cmFkYXMgZXhpdG9zYW1lbnRlJyxcbiAgICAgIHNpZ25VcE5vazogJ1NlIHByb2R1am8gdW4gcHJvYmxlbWEgYWwgcmVnaXN0cmFyIGxhcyBjcmVkZW5jaWFsZXMnLFxuICAgICAgYnJvd3Nlck5vazogJ0VsIG5hdmVnYWRvciBubyBzb3BvcnRhIGVzdGEgZnVuY2lvbmFsaWRhZCcsXG4gICAgICBub0NyZWRlbnRpYWxzOiAnRWwgdXN1YXJpbyBubyB0aWVuZSBjcmVkZW5jaWFsZXMgYWxtYWNlbmFkYXMnLFxuICAgICAgaW52YWxpZENyZWRlbnRpYWxzOiAnTGFzIGNyZWRlbmNpYWxlcyBubyBzb24gdsOhbGlkYXMnLFxuICAgICAgZXJyb3JSZXRyaWV2aW5nQ3JlZGVudGlhbHM6ICdTZSBwcm9kdWpvIHVuIHByb2JsZW1hIGFsIHJlY3VwZXJhciBsYXMgY3JlZGVuY2lhbGVzJyxcbiAgICB9O1xuICAgIGlmIChsYW5nICYmIGxhbmc9PT0nZW4nKSB7XG4gICAgICBtc2cgPSBtZXNzYWdlc0VuW2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPSBtZXNzYWdlc0VzW2NvZGVdO1xuICAgIH1cbiAgICByZXR1cm4gbXNnO1xuICB9XG5cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NzaS1zZWN1cml0eS1jb21tb25zL3NyYy9saWIvdXNlci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgZnVsbG5hbWU6IHN0cmluZztcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgcGVyc29uSWQ6IG51bWJlcjtcbiAgcm9sZXM6IHN0cmluZ1tdO1xuICB1c2VySWQ6IG51bWJlcjtcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgd29ya1BsYWNlOiBXb3JrUGxhY2U7XG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIHVzZXJUeXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5uZWwge1xuICBjaGFubmVsQ29kZTogc3RyaW5nO1xuICBjaGFubmVsRGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3JrUGxhY2Uge1xuICB3b3JrUGxhY2VDb2RlOiBzdHJpbmc7XG4gIHdvcmtQbGFjZURlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNpdHlDb2RlOiBzdHJpbmc7XG4gIGNpdHlEZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZyb250RW5kRXhjZXB0aW9uIHtcbiAgaHR0cFN0YXR1cz86IG51bWJlcjtcbiAgaHR0cFN0YXR1c1RleHQ/OiBzdHJpbmc7XG4gIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgcmVxdWVzdEJvZHk/OiBzdHJpbmc7XG4gIHJlc3BvbnNlQm9keT86IHN0cmluZztcbiAgdXNlcklkPzogc3RyaW5nO1xuICByZXF1ZXN0RGF0ZT86IERhdGU7XG4gIGFwcGxpY2F0aW9uTmFtZT86IHN0cmluZztcbiAgYXBwbGljYXRpb25JZD86IG51bWJlcjtcbiAgcmVxdWVzdFVybD86IHN0cmluZztcbiAgY3VycmVudFVybD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyRGF0YSB7XG4gIGdpdmVuTmFtZTogc3RyaW5nO1xuICBmYW1pbHlOYW1lOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgcm9sZXM6IHN0cmluZ1tdO1xuICB1c2VySWQ6IHN0cmluZztcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgZW1haWxWZXJpZmllZDogYm9vbGVhbjtcbiAgd29ya1BsYWNlPzogV29ya1BsYWNlO1xuICBjaGFubmVsPzogQ2hhbm5lbDtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NzaS1zZWN1cml0eS1jb21tb25zL3NyYy9saWIvdXNlci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgZnVsbG5hbWU6IHN0cmluZztcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgcGVyc29uSWQ6IG51bWJlcjtcbiAgcm9sZXM6IHN0cmluZ1tdO1xuICB1c2VySWQ6IG51bWJlcjtcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgd29ya1BsYWNlOiBXb3JrUGxhY2U7XG4gIGNoYW5uZWw6IENoYW5uZWw7XG4gIHVzZXJUeXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5uZWwge1xuICBjaGFubmVsQ29kZTogc3RyaW5nO1xuICBjaGFubmVsRGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3JrUGxhY2Uge1xuICB3b3JrUGxhY2VDb2RlOiBzdHJpbmc7XG4gIHdvcmtQbGFjZURlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNpdHlDb2RlOiBzdHJpbmc7XG4gIGNpdHlEZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZyb250RW5kRXhjZXB0aW9uIHtcbiAgaHR0cFN0YXR1cz86IG51bWJlcjtcbiAgaHR0cFN0YXR1c1RleHQ/OiBzdHJpbmc7XG4gIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgcmVxdWVzdEJvZHk/OiBzdHJpbmc7XG4gIHJlc3BvbnNlQm9keT86IHN0cmluZztcbiAgdXNlcklkPzogc3RyaW5nO1xuICByZXF1ZXN0RGF0ZT86IERhdGU7XG4gIGFwcGxpY2F0aW9uTmFtZT86IHN0cmluZztcbiAgYXBwbGljYXRpb25JZD86IG51bWJlcjtcbiAgcmVxdWVzdFVybD86IHN0cmluZztcbiAgY3VycmVudFVybD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyRGF0YSB7XG4gIGdpdmVuTmFtZTogc3RyaW5nO1xuICBmYW1pbHlOYW1lOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgcm9sZXM6IHN0cmluZ1tdO1xuICB1c2VySWQ6IHN0cmluZztcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgZW1haWxWZXJpZmllZDogYm9vbGVhbjtcbiAgd29ya1BsYWNlPzogV29ya1BsYWNlO1xuICBjaGFubmVsPzogQ2hhbm5lbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyV2ViYXV0aG4ge1xuICBpZDogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBjcmVkZW50aWFsczogYW55W107XG59XG4iXX0=
@@ -7,8 +7,9 @@ export * from './lib/ssi-security-commons.module';
7
7
  export * from './lib/services/auth-interceptor.service';
8
8
  export * from './lib/services/session.service';
9
9
  export * from './lib/services/messages.service';
10
+ export * from './lib/services/web-authn.service';
10
11
  export * from './lib/user.model';
11
12
  export * from './lib/services/crypto.service';
12
13
  export * from './lib/services/jwt.service';
13
14
  export * from './lib/shared/constants';
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3NzaS1zZWN1cml0eS1jb21tb25zL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygc3NpLXNlY3VyaXR5LWNvbW1vbnNcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zc2ktc2VjdXJpdHktY29tbW9ucy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NzaS1zZWN1cml0eS1jb21tb25zLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zc2ktc2VjdXJpdHktY29tbW9ucy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvYXV0aC1pbnRlcmNlcHRvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Nlc3Npb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9tZXNzYWdlcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VzZXIubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvY3J5cHRvLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvand0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2NvbnN0YW50cyc7XG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3NzaS1zZWN1cml0eS1jb21tb25zL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHdCQUF3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBzc2ktc2VjdXJpdHktY29tbW9uc1xuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3NzaS1zZWN1cml0eS1jb21tb25zLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3NpLXNlY3VyaXR5LWNvbW1vbnMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NzaS1zZWN1cml0eS1jb21tb25zLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9hdXRoLWludGVyY2VwdG9yLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvc2Vzc2lvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL21lc3NhZ2VzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvd2ViLWF1dGhuLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXNlci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jcnlwdG8uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9qd3Quc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvY29uc3RhbnRzJztcbiJdfQ==