@osovitny/anatoly 3.16.42 → 3.16.43

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.
@@ -55,6 +55,10 @@ export class AuthService extends ApiServiceBase {
55
55
 
56
56
  Token types:
57
57
  https://learn.microsoft.com/en-us/azure/active-directory-b2c/tokens-overview
58
+ ID token - A JWT that contains claims that you can use to identify users in your application
59
+ Access token - A JWT that contains claims that you can use to identify the granted permissions to your APIs.
60
+ Access tokens are signed, but they aren't encrypted
61
+ Refresh token - Refresh tokens are used to acquire new ID tokens and access tokens in an OAuth 2.0 flow.
58
62
  */
59
63
  initMSAL() {
60
64
  //B2C
@@ -342,4 +346,4 @@ export class AuthService extends ApiServiceBase {
342
346
  type: Inject,
343
347
  args: [MSAL_GUARD_CONFIG]
344
348
  }] }, { type: i4.MsalService }, { type: i4.MsalBroadcastService }]; }, null); })();
345
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL2lhbS9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUJBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRTlELE9BQU8sRUFBYyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQTZELE1BQU0scUJBQXFCLENBQUM7QUFDbkgsT0FBTyxFQUFtRCxTQUFTLEVBQWlCLDRCQUE0QixFQUM5RyxpQkFBaUIsRUFBRSxlQUFlLEVBQWdCLFdBQVcsRUFDOUQsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixLQUFLO0FBQ0wsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7Ozs7QUFVN0MsTUFBTSxPQUFPLFdBQVksU0FBUSxjQUFjO0lBS2pDO0lBQ0Y7SUFDQTtJQUdBO0lBQ0E7SUFDQTtJQVhPLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQy9DLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFFckMsWUFDWSxJQUFnQixFQUNsQixNQUFjLEVBQ2QsVUFBNkIsRUFHN0IsZUFBdUMsRUFDdkMsV0FBd0IsRUFDeEIsb0JBQTBDO1FBQ2xELEtBQUssQ0FBQyxJQUFJLENBQUMs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LGNBQWMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUN4RSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDTDtJQUNILENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksQ0FBQztJQUM5RCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtZQUMvQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDOUMsT0FBTyxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUMzQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDMUIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1FBQzlDLE9BQU8sV0FBVyxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUM7SUFDaEQsQ0FBQztxRUFyWVUsV0FBVyxxR0FTWixpQkFBaUI7Z0VBVGhCLFdBQVcsV0FBWCxXQUFXLG1CQUZWLE1BQU07O3VGQUVQLFdBQVc7Y0FIdkIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COztzQkFVSSxNQUFNO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnkgdmFkaW1Ab3Nvdml0bnkuY29tXHJcbiAgICBBbmF0b2x5IE9zb3ZpdG55IGFuYXRvbHlAb3Nvdml0bnkuY29tXHJcblxyXG4gIENyZWF0ZWQ6XHJcbiAgICA2IERlYyAyMDE4XHJcblxyXG4gIERlc2NyaXB0aW9uOlxyXG4gICAgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50XHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNi0yMDIyIE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy9Ob2RlXHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBvZiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1TQUxfR1VBUkRfQ09ORklHLCBNc2FsQnJvYWRjYXN0U2VydmljZSwgTXNhbEd1YXJkQ29uZmlndXJhdGlvbiwgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcclxuaW1wb3J0IHsgQWNjb3VudEluZm8sIEF1dGhlbnRpY2F0aW9uUmVzdWx0LCBFdmVudE1lc3NhZ2UsIEV2ZW50VHlwZSwgSWRUb2tlbkNsYWltcywgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvcixcclxuICBJbnRlcmFjdGlvblN0YXR1cywgSW50ZXJhY3Rpb25UeXBlLCBQb3B1cFJlcXVlc3QsIFByb21wdFZhbHVlLCBSZWRpcmVjdFJlcXVlc3QsIFNpbGVudFJlcXVlc3QsIFNzb1NpbGVudFJlcXVlc3RcclxufSBmcm9tICdAYXp1cmUvbXNhbC1icm93c2VyJztcclxuXHJcbi8vQXBwXHJcbmltcG9ydCB7IEFwaVNlcnZpY2VCYXNlIH0gZnJvbSAnLi4vLi4vZGF0YS9iYXNlL2FwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2FwcGNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IE1TQUxBcGlDb25maWcgfSBmcm9tICcuLi9jb25zdHMnO1xyXG5pbXBvcnQgeyBNU0FMUmVkaXJlY3QgfSBmcm9tICcuLi9yZWRpcmVjdCc7XHJcbmltcG9ydCB7IE1TQUxVdGlscyB9IGZyb20gJy4uL3V0aWxzJztcclxuaW1wb3J0IHsgTVNBTEIyQywgUG9saWN5VHlwZSB9IGZyb20gJy4uL2IyYyc7XHJcblxyXG50eXBlIElkVG9rZW5DbGFpbXNXaXRoUG9saWN5SWQgPSBJZFRva2VuQ2xhaW1zICYge1xyXG4gIGFjcj86IHN0cmluZyxcclxuICB0ZnA/OiBzdHJpbmcsXHJcbn07XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSBleHRlbmRzIEFwaVNlcnZpY2VCYXNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IG1zYWxEZXN0cm95aW5nJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYXBwQ29udGV4dDogQXBwQ29udGV4dFNlcnZpY2UsXHJcblxyXG4gICAgQEluamVjdChNU0FMX0dVQVJEX0NPTkZJRylcclxuICAgIHByaXZhdGUgbXNhbEd1YXJkQ29uZmlnOiBNc2FsR3VhcmRDb25maWd1cmF0aW9uLFxyXG4gICAgcHJpdmF0ZSBtc2FsU2VydmljZTogTXNhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1zYWxCcm9hZGNhc3RTZXJ2aWNlOiBNc2FsQnJvYWRjYXN0U2VydmljZSkge1xyXG4gICAgc3VwZXIoaHR0cCk7XHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5tc2FsRGVzdHJveWluZyQubmV4dCh1bmRlZmluZWQpO1xyXG4gICAgdGhpcy5tc2FsRGVzdHJveWluZyQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCgpIHtcclxuICAgIHRoaXMuc2V0RGVmYXVsdHMoKTtcclxuXHJcbiAgICB0aGlzLm1zYWxTZXJ2aWNlLmluaXRpYWxpemUoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKGBtc2FsLmFwcDogaW5pdE1TQUwgc3RhcnRlZGApO1xyXG4gICAgICB0aGlzLmluaXRNU0FMKCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBtc2FsLmFwcDogaW5pdE1TQUwgZmluaXNoZWRgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREZWZhdWx0cygpIHtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICBodHRwczovL2dpdGh1Yi5jb20vQXp1cmVBRC9taWNyb3NvZnQtYXV0aGVudGljYXRpb24tbGlicmFyeS1mb3ItanMvYmxvYi9kZXYvc2FtcGxlcy9tc2FsLWFuZ3VsYXItdjMtc2FtcGxlcy9hbmd1bGFyLWIyYy1zYW1wbGUtYXBwL3NyYy9hcHAvYXBwLmNvbXBvbmVudC50c1xyXG5cclxuICAgIFRva2VuIFZhbGlkYXRpb246XHJcbiAgICAgIGh0dHBzOi8vand0LmlvXHJcblxyXG4gICAgVG9rZW4gdHlwZXM6XHJcbiAgICAgIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9hY3RpdmUtZGlyZWN0b3J5LWIyYy90b2tlbnMtb3ZlcnZpZXdcclxuICAqL1xyXG4gIHByaXZhdGUgaW5pdE1TQUwoKSB7XHJcbiAgICAvL0IyQ1xyXG4gICAgbGV0IHNpZ25VcFNpZ25JbiA9IE1TQUxCMkMuZ2V0UG9saWN5QnlUeXBlKFBvbGljeVR5cGUuc2lnblVwU2lnbkluKTtcclxuICAgIGxldCBlZGl0UHJvZmlsZSA9IE1TQUxCMkMuZ2V0UG9saWN5QnlUeXBlKFBvbGljeVR5cGUuZWRpdFByb2ZpbGUpO1xyXG4gICAgbGV0IHJlc2V0UGFzc3dvcmQgPSBNU0FMQjJDLmdldFBvbGljeUJ5VHlwZShQb2xpY3lUeXBlLnJlc2V0UGFzc3dvcmQpO1xyXG5cclxuICAgIHRoaXMubXNhbFNlcnZpY2UuaGFuZGxlUmVkaXJlY3RPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlc3VsdDogQXV0aGVudGljYXRpb25SZXN1bHQpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgbXNhbC5hcHA6IGhhbmRsZVJlZGlyZWN0T2JzZXJ2YWJsZWApO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmVuYWJsZUFjY291bnRTdG9yYWdlRXZlbnRzKCk7XHJcbiAgICB0aGlzLm1zYWxCcm9hZGNhc3RTZXJ2aWNlLm1zYWxTdWJqZWN0JC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigobXNnOiBFdmVudE1lc3NhZ2UpID0+XHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuSU5JVElBTElaRV9FTkQgfHxcclxuXHJcbiAgICAgICAgICAvL0FDQ09VTlRfQURERUQgYW5kIEFDQ09VTlRfUkVNT1ZFRCBldmVudHMgZW1pdHRlZCB3aGVuIGEgdXNlciBsb2dzIGluIG9yIG91dCBvZiBhbm90aGVyIHRhYiBvciB3aW5kb3dcclxuICAgICAgICAgIG1zZy5ldmVudFR5cGUgPT09IEV2ZW50VHlwZS5BQ0NPVU5UX0FEREVEIHx8XHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuQUNDT1VOVF9SRU1PVkVEIHx8XHJcblxyXG4gICAgICAgICAgLy9Mb2dpbiBGYWlsdXJlXHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTE9HSU5fRkFJTFVSRSB8fFxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fRkFJTFVSRSB8fFxyXG5cclxuICAgICAgICAgIC8vTG9nT3V0XHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTE9HT1VUX1NVQ0NFU1MgfHxcclxuXHJcbiAgICAgICAgICAvL0xvZ0luXHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTE9HSU5fU1VDQ0VTUyB8fFxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fU1VDQ0VTUyB8fFxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLlNTT19TSUxFTlRfU1VDQ0VTU1xyXG4gICAgICAgICksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubXNhbERlc3Ryb3lpbmckKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKG1zZzogRXZlbnRNZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChtc2cuZXZlbnRUeXBlKSB7XHJcbiAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5JTklUSUFMSVpFX0VORDpcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYG1zYWwuYXBwOiBJTklUSUFMSVpFX0VORCBmaXJlZGApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5BQ0NPVU5UX0FEREVEOlxyXG4gICAgICAgICAgY2FzZSBFdmVudFR5cGUuQUNDT1VOVF9SRU1PVkVEOlxyXG4gICAgICAgICAgICBpZiAodGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSA9IFwiL1wiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLkxPR0lOX0ZBSUxVUkU6XHJcbiAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX0ZBSUxVUkU6XHJcbiAgICAgICAgICAgIGlmICghTVNBTFV0aWxzLmlzQjJDKCkpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vQ2hlY2sgZm9yIGZvcmdvdCBwYXNzd29yZCBlcnJvci4gTGVhcm4gbW9yZSBhYm91dCBBQUQgZXJyb3IgY29kZXMgYXRcclxuICAgICAgICAgICAgLy9odHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9hY3RpdmUtZGlyZWN0b3J5L2RldmVsb3AvcmVmZXJlbmNlLWFhZHN0cy1lcnJvci1jb2Rlc1xyXG4gICAgICAgICAgICBpZiAobXNnLmVycm9yICYmIG1zZy5lcnJvci5tZXNzYWdlLmluZGV4T2YoJ0FBREIyQzkwMTE4JykgPiAtMSkge1xyXG4gICAgICAgICAgICAgIGxldCByZXNldFBhc3N3b3JkRmxvd1JlcXVlc3Q6IFJlZGlyZWN0UmVxdWVzdCB8IFBvcHVwUmVxdWVzdCAgPSB7XHJcbiAgICAgICAgICAgICAgICAgIGF1dGhvcml0eTogcmVzZXRQYXNzd29yZC5hdXRob3JpdHksXHJcbiAgICAgICAgICAgICAgICAgIHNjb3BlczogW10sXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5sb2dpbihyZXNldFBhc3N3b3JkRmxvd1JlcXVlc3QpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5MT0dJTl9TVUNDRVNTOlxyXG4gICAgICAgICAgY2FzZSBFdmVudFR5cGUuQUNRVUlSRV9UT0tFTl9TVUNDRVNTOlxyXG4gICAgICAgICAgY2FzZSBFdmVudFR5cGUuU1NPX1NJTEVOVF9TVUNDRVNTOlxyXG4gICAgICAgICAgICBsZXQgcGF5bG9hZCA9IG1zZy5wYXlsb2FkIGFzIEF1dGhlbnRpY2F0aW9uUmVzdWx0O1xyXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghTVNBTFV0aWxzLmlzQjJDKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLnNldEFjdGl2ZUFjY291bnQocGF5bG9hZC5hY2NvdW50KTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vQjJDXHJcbiAgICAgICAgICAgIGxldCB0b2tlbiA9IHBheWxvYWQuaWRUb2tlbkNsYWltcyBhcyBJZFRva2VuQ2xhaW1zV2l0aFBvbGljeUlkXHJcblxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogc2lnblVwU2lnbkluXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBpZiAodG9rZW4uYWNyID09PSBzaWduVXBTaWduSW4ubmFtZSB8fCB0b2tlbi50ZnAgPT09IHNpZ25VcFNpZ25Jbi5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5zZXRBY3RpdmVBY2NvdW50KHBheWxvYWQuYWNjb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgKiBlZGl0UHJvZmlsZVxyXG4gICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgKiBGb3IgdGhlIHB1cnBvc2Ugb2Ygc2V0dGluZyBhbiBhY3RpdmUgYWNjb3VudCBmb3IgVUkgdXBkYXRlLCB3ZSB3YW50IHRvIGNvbnNpZGVyIG9ubHkgdGhlIGF1dGggcmVzcG9uc2UgcmVzdWx0aW5nXHJcbiAgICAgICAgICAgICAqIGZyb20gU1VTSSBmbG93LiBcImFjclwiIGNsYWltIGluIHRoZSBpZCB0b2tlbiB0ZWxscyB1cyB0aGUgcG9saWN5IChOT1RFOiBuZXdlciBwb2xpY2llcyBtYXkgdXNlIHRoZSBcInRmcFwiIGNsYWltIGluc3RlYWQpLlxyXG4gICAgICAgICAgICAgKiBUbyBsZWFybiBtb3JlIGFib3V0IEIyQyB0b2tlbnMsIHZpc2l0IGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL2FjdGl2ZS1kaXJlY3RvcnktYjJjL3Rva2Vucy1vdmVydmlld1xyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYgKHRva2VuLmFjciA9PT0gZWRpdFByb2ZpbGUubmFtZSB8fCB0b2tlbi50ZnAgPT09IGVkaXRQcm9maWxlLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgY29uc3Qgc2lnbkluQWNjb3VudCA9IHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKVxyXG4gICAgICAgICAgICAgICAgICAuZmluZCgoYWNjb3VudDogQWNjb3VudEluZm8pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudC5pZFRva2VuQ2xhaW1zPy5vaWQgPT09IHRva2VuLm9pZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQuaWRUb2tlbkNsYWltcz8uc3ViID09PSB0b2tlbi5zdWIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKGFjY291bnQuaWRUb2tlbkNsYWltcyBhcyBJZFRva2VuQ2xhaW1zV2l0aFBvbGljeUlkKS5hY3IgPT09IHNpZ25VcFNpZ25Jbi5uYW1lIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChhY2NvdW50LmlkVG9rZW5DbGFpbXMgYXMgSWRUb2tlbkNsYWltc1dpdGhQb2xpY3lJZCkudGZwID09PSBzaWduVXBTaWduSW4ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuZm9yY2VSZWF1dGhlbnRpY2F0ZShzaWduSW5BY2NvdW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIHJlc2V0UGFzc3dvcmRcclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogQmVsb3cgd2UgYXJlIGNoZWNraW5nIGlmIHRoZSB1c2VyIGlzIHJldHVybmluZyBmcm9tIHRoZSByZXNldCBwYXNzd29yZCBmbG93LlxyXG4gICAgICAgICAgICAgKiBJZiBzbywgd2Ugd2lsbCBhc2sgdGhlIHVzZXIgdG8gcmVhdXRoZW50aWNhdGUgd2l0aCB0aGVpciBuZXcgcGFzc3dvcmQuXHJcbiAgICAgICAgICAgICAqIElmIHlvdSBkbyBub3Qgd2FudCB0aGlzIGJlaGF2aW9yIGFuZCBwcmVmZXIgeW91ciB1c2VycyB0byBzdGF5IHNpZ25lZCBpbiBpbnN0ZWFkLFxyXG4gICAgICAgICAgICAgKiB5b3UgY2FuIHJlcGxhY2UgdGhlIGNvZGUgYmVsb3cgd2l0aCB0aGUgc2FtZSBwYXR0ZXJuIHVzZWQgZm9yIGhhbmRsaW5nIHRoZSByZXR1cm4gZnJvbVxyXG4gICAgICAgICAgICAgKiBwcm9maWxlIGVkaXQgZmxvd1xyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYgKHRva2VuLmFjciA9PT0gcmVzZXRQYXNzd29yZC5uYW1lIHx8IHRva2VuLnRmcCA9PT0gcmVzZXRQYXNzd29yZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlYXV0aGVudGljYXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5tc2FsQnJvYWRjYXN0U2VydmljZS5pblByb2dyZXNzJC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigoc3RhdHVzOiBJbnRlcmFjdGlvblN0YXR1cykgPT5cclxuICAgICAgICAgIHN0YXR1cyA9PT0gSW50ZXJhY3Rpb25TdGF0dXMuU3RhcnR1cCB8fFxyXG4gICAgICAgICAgc3RhdHVzID09PSBJbnRlcmFjdGlvblN0YXR1cy5Ob25lXHJcbiAgICAgICAgKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5tc2FsRGVzdHJveWluZyQpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoc3RhdHVzOiBJbnRlcmFjdGlvblN0YXR1cykgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIEluaXRpYWwgc3RhdHVzIGJlZm9yZSBpbnRlcmFjdGlvbiBvY2N1cnNcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgY2FzZSBJbnRlcmFjdGlvblN0YXR1cy5TdGFydHVwOlxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgbXNhbC5hcHA6IEludGVyYWN0aW9uU3RhdHVzLlN0YXJ0dXBgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAqIFN0YXR1cyBzZXQgd2hlbiBpbnRlcmFjdGlvbiBpcyBjb21wbGV0ZVxyXG4gICAgICAgICAgKi9cclxuICAgICAgICAgIGNhc2UgSW50ZXJhY3Rpb25TdGF0dXMuTm9uZTpcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYG1zYWwuYXBwOiBJbnRlcmFjdGlvblN0YXR1cy5Ob25lYCk7XHJcblxyXG4gICAgICAgICAgICBNU0FMUmVkaXJlY3QuaGFuZGxlKHRoaXMucm91dGVyLCAnbXNhbEJyb2FkY2FzdFNlcnZpY2UuaW5Qcm9ncmVzcyQgSW50ZXJhY3Rpb25TdGF0dXMuTm9uZScpO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrQW5kU2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBY3RpdmVBY2NvdW50KCk6IEFjY291bnRJbmZvIHwgbnVsbCB7XHJcbiAgICB0aGlzLmNoZWNrQW5kU2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgcmV0dXJuIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0FuZFNldEFjdGl2ZUFjY291bnQoKSB7XHJcbiAgICBsZXQgYWN0aXZlQWNjb3VudCA9IHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgbGV0IGFjY291bnRzID0gdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpO1xyXG5cclxuICAgIGlmICghYWN0aXZlQWNjb3VudCAmJiBhY2NvdW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2Uuc2V0QWN0aXZlQWNjb3VudChhY2NvdW50c1swXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzUG9wdXAocG9wdXA/OiBib29sZWFuKSB7XHJcbiAgICBpZiAodHlwZW9mIHBvcHVwID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1zYWxHdWFyZENvbmZpZy5pbnRlcmFjdGlvblR5cGUgPT09IEludGVyYWN0aW9uVHlwZS5Qb3B1cDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcG9wdXA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFjcXVpcmVUb2tlbigpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgbGV0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHNjb3BlczogTVNBTEFwaUNvbmZpZy5zY29wZXNcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1BvcHVwKCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubXNhbFNlcnZpY2UuYWNxdWlyZVRva2VuUG9wdXAocmVxdWVzdCkucGlwZShcclxuICAgICAgICBtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlID8gcmVzcG9uc2UuYWNjZXNzVG9rZW4gOiBudWxsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMubXNhbFNlcnZpY2UuYWNxdWlyZVRva2VuUmVkaXJlY3QocmVxdWVzdCkucGlwZShcclxuICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFVzZXJFbWFpbCgpIHtcclxuICAgIGxldCBjdXJyZW50VXNlciA9IHRoaXMuYXBwQ29udGV4dC5jdXJyZW50VXNlcjtcclxuICAgIGxldCBhY3RpdmVBY2NvdW50ID0gdGhpcy5nZXRBY3RpdmVBY2NvdW50KCk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZUFjY291bnQpIHtcclxuICAgICAgcmV0dXJuIGFjdGl2ZUFjY291bnQudXNlcm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRVc2VyID8gY3VycmVudFVzZXIuRW1haWwgOiAnJztcclxuICB9XHJcblxyXG4gIGdldFVzZXJOYW1lKCkge1xyXG4gICAgbGV0IGN1cnJlbnRVc2VyID0gdGhpcy5hcHBDb250ZXh0LmN1cnJlbnRVc2VyO1xyXG4gICAgbGV0IGFjdGl2ZUFjY291bnQgPSB0aGlzLmdldEFjdGl2ZUFjY291bnQoKTtcclxuXHJcbiAgICBpZiAoYWN0aXZlQWNjb3VudCkge1xyXG4gICAgICByZXR1cm4gYWN0aXZlQWNjb3VudC5uYW1lID8gYWN0aXZlQWNjb3VudC5uYW1lIDogY3VycmVudFVzZXIgPyBjdXJyZW50VXNlci5kaXNwbGF5TmFtZU9yRnVsbE5hbWUgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3VycmVudFVzZXIgPyBjdXJyZW50VXNlci5kaXNwbGF5TmFtZU9yRnVsbE5hbWUgOiAnJztcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICBWYWRpbU9TOlxyXG4gICAgV0FSTklORyB0byBhbGwgZGV2ZWxvcGVycyEgQmUgc3VyZSB0aGF0IHlvdSByZWFsbHkgbmVlZCB0byBkaXJlY3RseSBjYWxsIHRoaXMgbWV0aG9kIVxyXG4gICovXHJcbiAgZ2V0QWNjZXNzVG9rZW4ocmVxdWVzdFVybD86IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBsZXQgYWN0aXZlQWNjb3VudCA9IHRoaXMuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgbGV0IHNpbGVudFJlcXVlc3Q6IFNpbGVudFJlcXVlc3QgPSB7XHJcbiAgICAgIHNjb3BlczogTVNBTEFwaUNvbmZpZy5zY29wZXMsXHJcbiAgICAgIGFjY291bnQ6IGFjdGl2ZUFjY291bnRcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGFjdGl2ZUFjY291bnQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubXNhbFNlcnZpY2UuYWNxdWlyZVRva2VuU2lsZW50KHNpbGVudFJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZS5hY2Nlc3NUb2tlbjtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiU2lsZW50IHRva2VuIGFjcXVpc2l0aW9uIGZhaWxzLlwiKTtcclxuXHJcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjcXVpcmVUb2tlbigpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmFjcXVpcmVUb2tlbigpO1xyXG4gIH1cclxuXHJcbiAgZm9yY2VSZWF1dGhlbnRpY2F0ZShhY2NvdW50Pykge1xyXG4gICAgaWYgKE1TQUxVdGlscy5pc0IyQygpKSB7XHJcbiAgICAgIGxldCBzaWduVXBTaWduSW4gPSBNU0FMQjJDLmdldFBvbGljeUJ5VHlwZShQb2xpY3lUeXBlLnNpZ25VcFNpZ25Jbik7XHJcbiAgICAgIGxldCBzaWduVXBTaWduSW5GbG93UmVxdWVzdDogUmVkaXJlY3RSZXF1ZXN0IHwgUG9wdXBSZXF1ZXN0ICA9IHtcclxuICAgICAgICBhdXRob3JpdHk6IHNpZ25VcFNpZ25Jbi5hdXRob3JpdHksXHJcbiAgICAgICAgc2NvcGVzOiBbXSxcclxuICAgICAgICBwcm9tcHQ6IFByb21wdFZhbHVlLkxPR0lOLCAvLyBmb3JjZSB1c2VyIHRvIHJlYXV0aGVudGljYXRlIHdpdGggdGhlaXIgbmV3IHBhc3N3b3JkXHJcbiAgICAgICAgYWNjb3VudDogYWNjb3VudFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5sb2dpbihzaWduVXBTaWduSW5GbG93UmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvZ2luKHVzZXJGbG93UmVxdWVzdD86IFJlZGlyZWN0UmVxdWVzdCB8IFBvcHVwUmVxdWVzdCwgcG9wdXA/OiBib29sZWFuKSB7XHJcbiAgICBsZXQgYXV0aFJlcXVlc3RDZmc6IGFueSA9IHRoaXMubXNhbEd1YXJkQ29uZmlnLmF1dGhSZXF1ZXN0O1xyXG4gICAgbGV0IGF1dGhSZXF1ZXN0ID0gbnVsbDtcclxuXHJcbiAgICBpZiAoYXV0aFJlcXVlc3RDZmcpIHtcclxuICAgICAgYXV0aFJlcXVlc3QgPSBhdXRoUmVxdWVzdENmZyh0aGlzLm1zYWxTZXJ2aWNlLCB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNQb3B1cChwb3B1cCkpIHtcclxuICAgICAgaWYgKGF1dGhSZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5tc2FsU2VydmljZS5sb2dpblBvcHVwKHsgLi4uYXV0aFJlcXVlc3QsIC4uLnVzZXJGbG93UmVxdWVzdCB9IGFzIFBvcHVwUmVxdWVzdCkuc3Vic2NyaWJlKChyZXNwb25zZTogQXV0aGVudGljYXRpb25SZXN1bHQpID0+IHtcclxuICAgICAgICAgIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2Uuc2V0QWN0aXZlQWNjb3VudChyZXNwb25zZS5hY2NvdW50KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ2luUG9wdXAodXNlckZsb3dSZXF1ZXN0KS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBBdXRoZW50aWNhdGlvblJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5zZXRBY3RpdmVBY2NvdW50KHJlc3BvbnNlLmFjY291bnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGF1dGhSZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5tc2FsU2VydmljZS5sb2dpblJlZGlyZWN0KHsgLi4uYXV0aFJlcXVlc3QsIC4uLnVzZXJGbG93UmVxdWVzdCB9IGFzIFJlZGlyZWN0UmVxdWVzdCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tc2FsU2VydmljZS5sb2dpblJlZGlyZWN0KHVzZXJGbG93UmVxdWVzdCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvZ291dChwb3B1cD86IGJvb2xlYW4pIHtcclxuICAgIGxldCBhY3RpdmVBY2NvdW50ID0gdGhpcy5nZXRBY3RpdmVBY2NvdW50KCk7XHJcbiAgICBpZiAoIWFjdGl2ZUFjY291bnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzUG9wdXAocG9wdXApKSB7XHJcbiAgICAgIHRoaXMubXNhbFNlcnZpY2UubG9nb3V0UG9wdXAoeyBhY2NvdW50OiBhY3RpdmVBY2NvdW50LCBtYWluV2luZG93UmVkaXJlY3RVcmk6IFwiL1wiIH0pLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0LmNsZWFyV2ViU3RvcmFnZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ291dFJlZGlyZWN0KHsgYWNjb3VudDogYWN0aXZlQWNjb3VudCB9KS5waXBlKG1hcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0LmNsZWFyV2ViU3RvcmFnZSgpO1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc1VzZXJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWN0aXZlQWNjb3VudCgpICE9IG51bGw7XHJcbiAgfVxyXG5cclxuICBpc1VzZXJTaWduZWRJbigpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5pc1VzZXJBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjdXJyZW50VXNlciA9IHRoaXMuYXBwQ29udGV4dC5jdXJyZW50VXNlcjtcclxuICAgIHJldHVybiBjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5Vc2VySUQ7XHJcbiAgfVxyXG5cclxuICBpc1VzZXJBZG1pbigpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5pc1VzZXJTaWduZWRJbigpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY3VycmVudFVzZXIgPSB0aGlzLmFwcENvbnRleHQuY3VycmVudFVzZXI7XHJcbiAgICByZXR1cm4gY3VycmVudFVzZXIgJiYgY3VycmVudFVzZXIuaXNVc2VyQWRtaW47XHJcbiAgfVxyXG59XHJcbiJdfQ==
349
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL2lhbS9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUJBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRTlELE9BQU8sRUFBYyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQTZELE1BQU0scUJBQXFCLENBQUM7QUFDbkgsT0FBTyxFQUFtRCxTQUFTLEVBQWlCLDRCQUE0QixFQUM5RyxpQkFBaUIsRUFBRSxlQUFlLEVBQWdCLFdBQVcsRUFDOUQsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixLQUFLO0FBQ0wsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7Ozs7QUFVN0MsTUFBTSxPQUFPLFdBQVksU0FBUSxjQUFjO0lBS2pDO0lBQ0Y7SUFDQTtJQUdBO0lBQ0E7SUFDQTtJQVhPLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQy9DLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFFckMsWUFDWSxJQUFnQixFQUNsQixNQUFjLEVBQ2QsVUFBNkIsRUFHN0IsZUFBdUMsRUFDdkMsV0FBd0IsRUFDeEIsb0JBQTBDO1FBQ2xELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQVJGLFNBQUksR0FBSixJQUFJLENBQVk7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBRzdCLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQUN2QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBRWxELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU8sSUFBSTtRQUNWLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFFeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sV0FBVztJQUNuQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztNQVlFO0lBQ00sUUFBUTtRQUNkLEtBQUs7UUFDTCxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRSxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRSxJQUFJLGFBQWEsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV0RSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ3BELElBQUksRUFBRSxDQUFDLE1BQTRCLEVBQUUsRUFBRTtnQkFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN2QyxNQUFNLENBQUMsQ0FBQyxHQUFpQixFQUFFLEVBQUUsQ0FDM0IsR0FBRyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsY0FBYztZQUUxQyxzR0FBc0c7WUFDdEcsR0FBRyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsYUFBYTtZQUN6QyxHQUFHLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxlQUFlO1lBRTNDLGVBQWU7WUFDZixHQUFHLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxhQUFhO1lBQ3pDLEdBQUcsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLHFCQUFxQjtZQUVqRCxRQUFRO1lBQ1IsR0FBRyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsY0FBYztZQUUxQyxPQUFPO1lBQ1AsR0FBRyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsYUFBYTtZQUN6QyxHQUFHLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxxQkFBcUI7WUFDakQsR0FBRyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsa0JBQWtCLENBQy9DLEVBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FDaEM7YUFDQSxTQUFTLENBQUMsQ0FBQyxHQUFpQixFQUFFLEVBQUU7WUFDL0IsUUFBUSxHQUFHLENBQUMsU0FBUyxFQUFFO2dCQUNyQixLQUFLLFNBQVMsQ0FBQyxjQUFjO29CQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7b0JBQzlDLE1BQU07Z0JBRVIsS0FBSyxTQUFTLENBQUMsYUFBYSxDQUFDO2dCQUM3QixLQUFLLFNBQVMsQ0FBQyxlQUFlO29CQUM1QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7d0JBQzNELE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztxQkFDaEM7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLFNBQVMsQ0FBQyxhQUFhLENBQUM7Z0JBQzdCLEtBQUssU0FBUyxDQUFDLHFCQUFxQjtvQkFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDdEIsT0FBTztxQkFDUjtvQkFFRCxzRUFBc0U7b0JBQ3RFLDhGQUE4RjtvQkFDOUYsSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTt3QkFDOUQsSUFBSSx3QkFBd0IsR0FBb0M7NEJBQzVELFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUzs0QkFDbEMsTUFBTSxFQUFFLEVBQUU7eUJBQ2IsQ0FBQzt3QkFFRixJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7cUJBQ3RDO29CQUFBLENBQUM7b0JBQ0YsTUFBTTtnQkFFUixLQUFLLFNBQVMsQ0FBQyxhQUFhLENBQUM7Z0JBQzdCLEtBQUssU0FBUyxDQUFDLHFCQUFxQixDQUFDO2dCQUNyQyxLQUFLLFNBQVMsQ0FBQyxrQkFBa0I7b0JBQy9CLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUErQixDQUFDO29CQUNsRCxJQUFJLENBQUMsT0FBTyxFQUFFO3dCQUNaLE9BQU87cUJBQ1I7b0JBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUM1RCxPQUFPO3FCQUNSO29CQUVELEtBQUs7b0JBQ0wsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLGFBQTBDLENBQUE7b0JBRTlEOzs7O3VCQUlHO29CQUNILElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxZQUFZLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssWUFBWSxDQUFDLElBQUksRUFBRTt3QkFDdEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUM3RDtvQkFFRDs7Ozs7Ozt1QkFPRztvQkFDSCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsQ0FBQyxJQUFJLEVBQUU7d0JBQ25FLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRTs2QkFDNUQsSUFBSSxDQUFDLENBQUMsT0FBb0IsRUFBRSxFQUFFLENBQ3ZCLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHOzRCQUN4QyxPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRzs0QkFDeEMsQ0FBRSxPQUFPLENBQUMsYUFBMkMsQ0FBQyxHQUFHLEtBQUssWUFBWSxDQUFDLElBQUk7Z0NBQzdFLE9BQU8sQ0FBQyxhQUEyQyxDQUFDLEdBQUcsS0FBSyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQ25GLENBQUM7d0JBRVYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO3FCQUN6QztvQkFFRDs7Ozs7Ozs7O3VCQVNHO29CQUNILElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxhQUFhLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssYUFBYSxDQUFDLElBQUksRUFBRTt3QkFDeEUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7cUJBQzVCO29CQUVELE1BQU07YUFDVDtZQUVELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDdEMsTUFBTSxDQUFDLENBQUMsTUFBeUIsRUFBRSxFQUFFLENBQ25DLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQyxPQUFPO1lBQ3BDLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLENBQ2xDLEVBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FDaEM7YUFDQSxTQUFTLENBQUMsQ0FBQyxNQUF5QixFQUFFLEVBQUU7WUFDdkMsUUFBUSxNQUFNLEVBQUU7Z0JBQ2Q7O21CQUVHO2dCQUNILEtBQUssaUJBQWlCLENBQUMsT0FBTztvQkFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO29CQUNuRCxNQUFNO2dCQUVSOztrQkFFRTtnQkFDRixLQUFLLGlCQUFpQixDQUFDLElBQUk7b0JBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUMsQ0FBQztvQkFFaEQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLHlEQUF5RCxDQUFDLENBQUM7b0JBQzVGLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO29CQUNoQyxNQUFNO2FBQ1Q7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNqRSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUUxRCxJQUFJLENBQUMsYUFBYSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQztJQUVPLE9BQU8sQ0FBQyxLQUFlO1FBQzdCLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxFQUFFO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEtBQUssZUFBZSxDQUFDLEtBQUssQ0FBQztTQUN2RTtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxPQUFPLEdBQUc7WUFDWixNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU07U0FDN0IsQ0FBQTtRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3JELEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDYixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2hELENBQUMsQ0FBQyxDQUNILENBQUM7U0FDSDthQUNJO1lBQ0gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDeEQsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDUCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDOUMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFNUMsSUFBSSxhQUFhLEVBQUU7WUFDakIsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDO1NBQy9CO1FBRUQsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1FBQzlDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRTVDLElBQUksYUFBYSxFQUFFO1lBQ2pCLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUN2RztRQUVELE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7OztNQUdFO0lBQ0YsY0FBYyxDQUFDLFVBQW1CO1FBQ2hDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVDLElBQUksYUFBYSxHQUFrQjtZQUNqQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU07WUFDNUIsT0FBTyxFQUFFLGFBQWE7U0FDdkIsQ0FBQztRQUVGLElBQUksYUFBYSxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQzVELEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDYixPQUFPLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFDOUIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7Z0JBRS9DLElBQUksS0FBSyxZQUFZLDRCQUE0QixFQUFFO29CQUNqRCxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztpQkFDNUI7Z0JBRUQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztTQUNIO1FBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELG1CQUFtQixDQUFDLE9BQVE7UUFDMUIsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckIsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDcEUsSUFBSSx1QkFBdUIsR0FBb0M7Z0JBQzdELFNBQVMsRUFBRSxZQUFZLENBQUMsU0FBUztnQkFDakMsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLO2dCQUN6QixPQUFPLEVBQUUsT0FBTzthQUNqQixDQUFDO1lBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQ3JDO2FBQ0k7U0FDSjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZ0QsRUFBRSxLQUFlO1FBQ3JFLElBQUksY0FBYyxHQUFRLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO1FBQzNELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztRQUV2QixJQUFJLGNBQWMsRUFBRTtZQUNsQixXQUFXLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbEY7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLGVBQWUsRUFBa0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQThCLEVBQUUsRUFBRTtvQkFDL0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMvRCxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUNJO2dCQUNILElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQThCLEVBQUUsRUFBRTtvQkFDeEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMvRCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7YUFDSTtZQUNILElBQUksV0FBVyxFQUFFO2dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUUsR0FBRyxlQUFlLEVBQXFCLENBQUMsQ0FBQzthQUMzRjtpQkFDSTtnQkFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNqRDtTQUNGO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFlO1FBQ3BCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbEIsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2xHLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUNJO1lBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDeEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ0w7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxJQUFJLENBQUM7SUFDOUQsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUU7WUFDL0IsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1FBQzlDLE9BQU8sV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDM0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQzFCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUM5QyxPQUFPLFdBQVcsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDO0lBQ2hELENBQUM7cUVBellVLFdBQVcscUdBU1osaUJBQWlCO2dFQVRoQixXQUFXLFdBQVgsV0FBVyxtQkFGVixNQUFNOzt1RkFFUCxXQUFXO2NBSHZCLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7c0JBVUksTUFBTTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55IHZhZGltQG9zb3ZpdG55LmNvbVxyXG4gICAgQW5hdG9seSBPc292aXRueSBhbmF0b2x5QG9zb3ZpdG55LmNvbVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgNiBEZWMgMjAxOFxyXG5cclxuICBEZXNjcmlwdGlvbjpcclxuICAgIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudFxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMiBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vTm9kZVxyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgb2YsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNU0FMX0dVQVJEX0NPTkZJRywgTXNhbEJyb2FkY2FzdFNlcnZpY2UsIE1zYWxHdWFyZENvbmZpZ3VyYXRpb24sIE1zYWxTZXJ2aWNlIH0gZnJvbSAnQGF6dXJlL21zYWwtYW5ndWxhcic7XHJcbmltcG9ydCB7IEFjY291bnRJbmZvLCBBdXRoZW50aWNhdGlvblJlc3VsdCwgRXZlbnRNZXNzYWdlLCBFdmVudFR5cGUsIElkVG9rZW5DbGFpbXMsIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IsXHJcbiAgSW50ZXJhY3Rpb25TdGF0dXMsIEludGVyYWN0aW9uVHlwZSwgUG9wdXBSZXF1ZXN0LCBQcm9tcHRWYWx1ZSwgUmVkaXJlY3RSZXF1ZXN0LCBTaWxlbnRSZXF1ZXN0LCBTc29TaWxlbnRSZXF1ZXN0XHJcbn0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XHJcblxyXG4vL0FwcFxyXG5pbXBvcnQgeyBBcGlTZXJ2aWNlQmFzZSB9IGZyb20gJy4uLy4uL2RhdGEvYmFzZS9hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9hcHBjb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNU0FMQXBpQ29uZmlnIH0gZnJvbSAnLi4vY29uc3RzJztcclxuaW1wb3J0IHsgTVNBTFJlZGlyZWN0IH0gZnJvbSAnLi4vcmVkaXJlY3QnO1xyXG5pbXBvcnQgeyBNU0FMVXRpbHMgfSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IE1TQUxCMkMsIFBvbGljeVR5cGUgfSBmcm9tICcuLi9iMmMnO1xyXG5cclxudHlwZSBJZFRva2VuQ2xhaW1zV2l0aFBvbGljeUlkID0gSWRUb2tlbkNsYWltcyAmIHtcclxuICBhY3I/OiBzdHJpbmcsXHJcbiAgdGZwPzogc3RyaW5nLFxyXG59O1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2UgZXh0ZW5kcyBBcGlTZXJ2aWNlQmFzZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBtc2FsRGVzdHJveWluZyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGFwcENvbnRleHQ6IEFwcENvbnRleHRTZXJ2aWNlLFxyXG5cclxuICAgIEBJbmplY3QoTVNBTF9HVUFSRF9DT05GSUcpXHJcbiAgICBwcml2YXRlIG1zYWxHdWFyZENvbmZpZzogTXNhbEd1YXJkQ29uZmlndXJhdGlvbixcclxuICAgIHByaXZhdGUgbXNhbFNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtc2FsQnJvYWRjYXN0U2VydmljZTogTXNhbEJyb2FkY2FzdFNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGh0dHApO1xyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMubXNhbERlc3Ryb3lpbmckLm5leHQodW5kZWZpbmVkKTtcclxuICAgIHRoaXMubXNhbERlc3Ryb3lpbmckLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQoKSB7XHJcbiAgICB0aGlzLnNldERlZmF1bHRzKCk7XHJcblxyXG4gICAgdGhpcy5tc2FsU2VydmljZS5pbml0aWFsaXplKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhgbXNhbC5hcHA6IGluaXRNU0FMIHN0YXJ0ZWRgKTtcclxuICAgICAgdGhpcy5pbml0TVNBTCgpO1xyXG4gICAgICBjb25zb2xlLmxvZyhgbXNhbC5hcHA6IGluaXRNU0FMIGZpbmlzaGVkYCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGVmYXVsdHMoKSB7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL0F6dXJlQUQvbWljcm9zb2Z0LWF1dGhlbnRpY2F0aW9uLWxpYnJhcnktZm9yLWpzL2Jsb2IvZGV2L3NhbXBsZXMvbXNhbC1hbmd1bGFyLXYzLXNhbXBsZXMvYW5ndWxhci1iMmMtc2FtcGxlLWFwcC9zcmMvYXBwL2FwcC5jb21wb25lbnQudHNcclxuXHJcbiAgICBUb2tlbiBWYWxpZGF0aW9uOlxyXG4gICAgICBodHRwczovL2p3dC5pb1xyXG5cclxuICAgIFRva2VuIHR5cGVzOlxyXG4gICAgICBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvYWN0aXZlLWRpcmVjdG9yeS1iMmMvdG9rZW5zLW92ZXJ2aWV3XHJcbiAgICAgIElEIHRva2VuIC0gQSBKV1QgdGhhdCBjb250YWlucyBjbGFpbXMgdGhhdCB5b3UgY2FuIHVzZSB0byBpZGVudGlmeSB1c2VycyBpbiB5b3VyIGFwcGxpY2F0aW9uXHJcbiAgICAgIEFjY2VzcyB0b2tlbiAtIEEgSldUIHRoYXQgY29udGFpbnMgY2xhaW1zIHRoYXQgeW91IGNhbiB1c2UgdG8gaWRlbnRpZnkgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnMgdG8geW91ciBBUElzLlxyXG4gICAgICAgICAgICAgICAgICAgICBBY2Nlc3MgdG9rZW5zIGFyZSBzaWduZWQsIGJ1dCB0aGV5IGFyZW4ndCBlbmNyeXB0ZWRcclxuICAgICAgUmVmcmVzaCB0b2tlbiAtIFJlZnJlc2ggdG9rZW5zIGFyZSB1c2VkIHRvIGFjcXVpcmUgbmV3IElEIHRva2VucyBhbmQgYWNjZXNzIHRva2VucyBpbiBhbiBPQXV0aCAyLjAgZmxvdy5cclxuICAqL1xyXG4gIHByaXZhdGUgaW5pdE1TQUwoKSB7XHJcbiAgICAvL0IyQ1xyXG4gICAgbGV0IHNpZ25VcFNpZ25JbiA9IE1TQUxCMkMuZ2V0UG9saWN5QnlUeXBlKFBvbGljeVR5cGUuc2lnblVwU2lnbkluKTtcclxuICAgIGxldCBlZGl0UHJvZmlsZSA9IE1TQUxCMkMuZ2V0UG9saWN5QnlUeXBlKFBvbGljeVR5cGUuZWRpdFByb2ZpbGUpO1xyXG4gICAgbGV0IHJlc2V0UGFzc3dvcmQgPSBNU0FMQjJDLmdldFBvbGljeUJ5VHlwZShQb2xpY3lUeXBlLnJlc2V0UGFzc3dvcmQpO1xyXG5cclxuICAgIHRoaXMubXNhbFNlcnZpY2UuaGFuZGxlUmVkaXJlY3RPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlc3VsdDogQXV0aGVudGljYXRpb25SZXN1bHQpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgbXNhbC5hcHA6IGhhbmRsZVJlZGlyZWN0T2JzZXJ2YWJsZWApO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmVuYWJsZUFjY291bnRTdG9yYWdlRXZlbnRzKCk7XHJcbiAgICB0aGlzLm1zYWxCcm9hZGNhc3RTZXJ2aWNlLm1zYWxTdWJqZWN0JC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigobXNnOiBFdmVudE1lc3NhZ2UpID0+XHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuSU5JVElBTElaRV9FTkQgfHxcclxuXHJcbiAgICAgICAgICAvL0FDQ09VTlRfQURERUQgYW5kIEFDQ09VTlRfUkVNT1ZFRCBldmVudHMgZW1pdHRlZCB3aGVuIGEgdXNlciBsb2dzIGluIG9yIG91dCBvZiBhbm90aGVyIHRhYiBvciB3aW5kb3dcclxuICAgICAgICAgIG1zZy5ldmVudFR5cGUgPT09IEV2ZW50VHlwZS5BQ0NPVU5UX0FEREVEIHx8XHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuQUNDT1VOVF9SRU1PVkVEIHx8XHJcblxyXG4gICAgICAgICAgLy9Mb2dpbiBGYWlsdXJlXHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTE9HSU5fRkFJTFVSRSB8fFxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fRkFJTFVSRSB8fFxyXG5cclxuICAgICAgICAgIC8vTG9nT3V0XHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTE9HT1VUX1NVQ0NFU1MgfHxcclxuXHJcbiAgICAgICAgICAvL0xvZ0luXHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTE9HSU5fU1VDQ0VTUyB8fFxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fU1VDQ0VTUyB8fFxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLlNTT19TSUxFTlRfU1VDQ0VTU1xyXG4gICAgICAgICksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubXNhbERlc3Ryb3lpbmckKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKG1zZzogRXZlbnRNZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChtc2cuZXZlbnRUeXBlKSB7XHJcbiAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5JTklUSUFMSVpFX0VORDpcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYG1zYWwuYXBwOiBJTklUSUFMSVpFX0VORCBmaXJlZGApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5BQ0NPVU5UX0FEREVEOlxyXG4gICAgICAgICAgY2FzZSBFdmVudFR5cGUuQUNDT1VOVF9SRU1PVkVEOlxyXG4gICAgICAgICAgICBpZiAodGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSA9IFwiL1wiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLkxPR0lOX0ZBSUxVUkU6XHJcbiAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX0ZBSUxVUkU6XHJcbiAgICAgICAgICAgIGlmICghTVNBTFV0aWxzLmlzQjJDKCkpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vQ2hlY2sgZm9yIGZvcmdvdCBwYXNzd29yZCBlcnJvci4gTGVhcm4gbW9yZSBhYm91dCBBQUQgZXJyb3IgY29kZXMgYXRcclxuICAgICAgICAgICAgLy9odHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9hY3RpdmUtZGlyZWN0b3J5L2RldmVsb3AvcmVmZXJlbmNlLWFhZHN0cy1lcnJvci1jb2Rlc1xyXG4gICAgICAgICAgICBpZiAobXNnLmVycm9yICYmIG1zZy5lcnJvci5tZXNzYWdlLmluZGV4T2YoJ0FBREIyQzkwMTE4JykgPiAtMSkge1xyXG4gICAgICAgICAgICAgIGxldCByZXNldFBhc3N3b3JkRmxvd1JlcXVlc3Q6IFJlZGlyZWN0UmVxdWVzdCB8IFBvcHVwUmVxdWVzdCAgPSB7XHJcbiAgICAgICAgICAgICAgICAgIGF1dGhvcml0eTogcmVzZXRQYXNzd29yZC5hdXRob3JpdHksXHJcbiAgICAgICAgICAgICAgICAgIHNjb3BlczogW10sXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5sb2dpbihyZXNldFBhc3N3b3JkRmxvd1JlcXVlc3QpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5MT0dJTl9TVUNDRVNTOlxyXG4gICAgICAgICAgY2FzZSBFdmVudFR5cGUuQUNRVUlSRV9UT0tFTl9TVUNDRVNTOlxyXG4gICAgICAgICAgY2FzZSBFdmVudFR5cGUuU1NPX1NJTEVOVF9TVUNDRVNTOlxyXG4gICAgICAgICAgICBsZXQgcGF5bG9hZCA9IG1zZy5wYXlsb2FkIGFzIEF1dGhlbnRpY2F0aW9uUmVzdWx0O1xyXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghTVNBTFV0aWxzLmlzQjJDKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLnNldEFjdGl2ZUFjY291bnQocGF5bG9hZC5hY2NvdW50KTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vQjJDXHJcbiAgICAgICAgICAgIGxldCB0b2tlbiA9IHBheWxvYWQuaWRUb2tlbkNsYWltcyBhcyBJZFRva2VuQ2xhaW1zV2l0aFBvbGljeUlkXHJcblxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogc2lnblVwU2lnbkluXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBpZiAodG9rZW4uYWNyID09PSBzaWduVXBTaWduSW4ubmFtZSB8fCB0b2tlbi50ZnAgPT09IHNpZ25VcFNpZ25Jbi5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5zZXRBY3RpdmVBY2NvdW50KHBheWxvYWQuYWNjb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgKiBlZGl0UHJvZmlsZVxyXG4gICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgKiBGb3IgdGhlIHB1cnBvc2Ugb2Ygc2V0dGluZyBhbiBhY3RpdmUgYWNjb3VudCBmb3IgVUkgdXBkYXRlLCB3ZSB3YW50IHRvIGNvbnNpZGVyIG9ubHkgdGhlIGF1dGggcmVzcG9uc2UgcmVzdWx0aW5nXHJcbiAgICAgICAgICAgICAqIGZyb20gU1VTSSBmbG93LiBcImFjclwiIGNsYWltIGluIHRoZSBpZCB0b2tlbiB0ZWxscyB1cyB0aGUgcG9saWN5IChOT1RFOiBuZXdlciBwb2xpY2llcyBtYXkgdXNlIHRoZSBcInRmcFwiIGNsYWltIGluc3RlYWQpLlxyXG4gICAgICAgICAgICAgKiBUbyBsZWFybiBtb3JlIGFib3V0IEIyQyB0b2tlbnMsIHZpc2l0IGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL2FjdGl2ZS1kaXJlY3RvcnktYjJjL3Rva2Vucy1vdmVydmlld1xyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYgKHRva2VuLmFjciA9PT0gZWRpdFByb2ZpbGUubmFtZSB8fCB0b2tlbi50ZnAgPT09IGVkaXRQcm9maWxlLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgY29uc3Qgc2lnbkluQWNjb3VudCA9IHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKVxyXG4gICAgICAgICAgICAgICAgICAuZmluZCgoYWNjb3VudDogQWNjb3VudEluZm8pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudC5pZFRva2VuQ2xhaW1zPy5vaWQgPT09IHRva2VuLm9pZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQuaWRUb2tlbkNsYWltcz8uc3ViID09PSB0b2tlbi5zdWIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKGFjY291bnQuaWRUb2tlbkNsYWltcyBhcyBJZFRva2VuQ2xhaW1zV2l0aFBvbGljeUlkKS5hY3IgPT09IHNpZ25VcFNpZ25Jbi5uYW1lIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChhY2NvdW50LmlkVG9rZW5DbGFpbXMgYXMgSWRUb2tlbkNsYWltc1dpdGhQb2xpY3lJZCkudGZwID09PSBzaWduVXBTaWduSW4ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuZm9yY2VSZWF1dGhlbnRpY2F0ZShzaWduSW5BY2NvdW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqIHJlc2V0UGFzc3dvcmRcclxuICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICogQmVsb3cgd2UgYXJlIGNoZWNraW5nIGlmIHRoZSB1c2VyIGlzIHJldHVybmluZyBmcm9tIHRoZSByZXNldCBwYXNzd29yZCBmbG93LlxyXG4gICAgICAgICAgICAgKiBJZiBzbywgd2Ugd2lsbCBhc2sgdGhlIHVzZXIgdG8gcmVhdXRoZW50aWNhdGUgd2l0aCB0aGVpciBuZXcgcGFzc3dvcmQuXHJcbiAgICAgICAgICAgICAqIElmIHlvdSBkbyBub3Qgd2FudCB0aGlzIGJlaGF2aW9yIGFuZCBwcmVmZXIgeW91ciB1c2VycyB0byBzdGF5IHNpZ25lZCBpbiBpbnN0ZWFkLFxyXG4gICAgICAgICAgICAgKiB5b3UgY2FuIHJlcGxhY2UgdGhlIGNvZGUgYmVsb3cgd2l0aCB0aGUgc2FtZSBwYXR0ZXJuIHVzZWQgZm9yIGhhbmRsaW5nIHRoZSByZXR1cm4gZnJvbVxyXG4gICAgICAgICAgICAgKiBwcm9maWxlIGVkaXQgZmxvd1xyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYgKHRva2VuLmFjciA9PT0gcmVzZXRQYXNzd29yZC5uYW1lIHx8IHRva2VuLnRmcCA9PT0gcmVzZXRQYXNzd29yZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlYXV0aGVudGljYXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5tc2FsQnJvYWRjYXN0U2VydmljZS5pblByb2dyZXNzJC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigoc3RhdHVzOiBJbnRlcmFjdGlvblN0YXR1cykgPT5cclxuICAgICAgICAgIHN0YXR1cyA9PT0gSW50ZXJhY3Rpb25TdGF0dXMuU3RhcnR1cCB8fFxyXG4gICAgICAgICAgc3RhdHVzID09PSBJbnRlcmFjdGlvblN0YXR1cy5Ob25lXHJcbiAgICAgICAgKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5tc2FsRGVzdHJveWluZyQpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoc3RhdHVzOiBJbnRlcmFjdGlvblN0YXR1cykgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIEluaXRpYWwgc3RhdHVzIGJlZm9yZSBpbnRlcmFjdGlvbiBvY2N1cnNcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgY2FzZSBJbnRlcmFjdGlvblN0YXR1cy5TdGFydHVwOlxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgbXNhbC5hcHA6IEludGVyYWN0aW9uU3RhdHVzLlN0YXJ0dXBgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAqIFN0YXR1cyBzZXQgd2hlbiBpbnRlcmFjdGlvbiBpcyBjb21wbGV0ZVxyXG4gICAgICAgICAgKi9cclxuICAgICAgICAgIGNhc2UgSW50ZXJhY3Rpb25TdGF0dXMuTm9uZTpcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYG1zYWwuYXBwOiBJbnRlcmFjdGlvblN0YXR1cy5Ob25lYCk7XHJcblxyXG4gICAgICAgICAgICBNU0FMUmVkaXJlY3QuaGFuZGxlKHRoaXMucm91dGVyLCAnbXNhbEJyb2FkY2FzdFNlcnZpY2UuaW5Qcm9ncmVzcyQgSW50ZXJhY3Rpb25TdGF0dXMuTm9uZScpO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrQW5kU2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBY3RpdmVBY2NvdW50KCk6IEFjY291bnRJbmZvIHwgbnVsbCB7XHJcbiAgICB0aGlzLmNoZWNrQW5kU2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgcmV0dXJuIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0FuZFNldEFjdGl2ZUFjY291bnQoKSB7XHJcbiAgICBsZXQgYWN0aXZlQWNjb3VudCA9IHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgbGV0IGFjY291bnRzID0gdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpO1xyXG5cclxuICAgIGlmICghYWN0aXZlQWNjb3VudCAmJiBhY2NvdW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2Uuc2V0QWN0aXZlQWNjb3VudChhY2NvdW50c1swXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzUG9wdXAocG9wdXA/OiBib29sZWFuKSB7XHJcbiAgICBpZiAodHlwZW9mIHBvcHVwID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1zYWxHdWFyZENvbmZpZy5pbnRlcmFjdGlvblR5cGUgPT09IEludGVyYWN0aW9uVHlwZS5Qb3B1cDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcG9wdXA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFjcXVpcmVUb2tlbigpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgbGV0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHNjb3BlczogTVNBTEFwaUNvbmZpZy5zY29wZXNcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1BvcHVwKCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubXNhbFNlcnZpY2UuYWNxdWlyZVRva2VuUG9wdXAocmVxdWVzdCkucGlwZShcclxuICAgICAgICBtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlID8gcmVzcG9uc2UuYWNjZXNzVG9rZW4gOiBudWxsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMubXNhbFNlcnZpY2UuYWNxdWlyZVRva2VuUmVkaXJlY3QocmVxdWVzdCkucGlwZShcclxuICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFVzZXJFbWFpbCgpIHtcclxuICAgIGxldCBjdXJyZW50VXNlciA9IHRoaXMuYXBwQ29udGV4dC5jdXJyZW50VXNlcjtcclxuICAgIGxldCBhY3RpdmVBY2NvdW50ID0gdGhpcy5nZXRBY3RpdmVBY2NvdW50KCk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZUFjY291bnQpIHtcclxuICAgICAgcmV0dXJuIGFjdGl2ZUFjY291bnQudXNlcm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRVc2VyID8gY3VycmVudFVzZXIuRW1haWwgOiAnJztcclxuICB9XHJcblxyXG4gIGdldFVzZXJOYW1lKCkge1xyXG4gICAgbGV0IGN1cnJlbnRVc2VyID0gdGhpcy5hcHBDb250ZXh0LmN1cnJlbnRVc2VyO1xyXG4gICAgbGV0IGFjdGl2ZUFjY291bnQgPSB0aGlzLmdldEFjdGl2ZUFjY291bnQoKTtcclxuXHJcbiAgICBpZiAoYWN0aXZlQWNjb3VudCkge1xyXG4gICAgICByZXR1cm4gYWN0aXZlQWNjb3VudC5uYW1lID8gYWN0aXZlQWNjb3VudC5uYW1lIDogY3VycmVudFVzZXIgPyBjdXJyZW50VXNlci5kaXNwbGF5TmFtZU9yRnVsbE5hbWUgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3VycmVudFVzZXIgPyBjdXJyZW50VXNlci5kaXNwbGF5TmFtZU9yRnVsbE5hbWUgOiAnJztcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICBWYWRpbU9TOlxyXG4gICAgV0FSTklORyB0byBhbGwgZGV2ZWxvcGVycyEgQmUgc3VyZSB0aGF0IHlvdSByZWFsbHkgbmVlZCB0byBkaXJlY3RseSBjYWxsIHRoaXMgbWV0aG9kIVxyXG4gICovXHJcbiAgZ2V0QWNjZXNzVG9rZW4ocmVxdWVzdFVybD86IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBsZXQgYWN0aXZlQWNjb3VudCA9IHRoaXMuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgbGV0IHNpbGVudFJlcXVlc3Q6IFNpbGVudFJlcXVlc3QgPSB7XHJcbiAgICAgIHNjb3BlczogTVNBTEFwaUNvbmZpZy5zY29wZXMsXHJcbiAgICAgIGFjY291bnQ6IGFjdGl2ZUFjY291bnRcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGFjdGl2ZUFjY291bnQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubXNhbFNlcnZpY2UuYWNxdWlyZVRva2VuU2lsZW50KHNpbGVudFJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZS5hY2Nlc3NUb2tlbjtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiU2lsZW50IHRva2VuIGFjcXVpc2l0aW9uIGZhaWxzLlwiKTtcclxuXHJcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjcXVpcmVUb2tlbigpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmFjcXVpcmVUb2tlbigpO1xyXG4gIH1cclxuXHJcbiAgZm9yY2VSZWF1dGhlbnRpY2F0ZShhY2NvdW50Pykge1xyXG4gICAgaWYgKE1TQUxVdGlscy5pc0IyQygpKSB7XHJcbiAgICAgIGxldCBzaWduVXBTaWduSW4gPSBNU0FMQjJDLmdldFBvbGljeUJ5VHlwZShQb2xpY3lUeXBlLnNpZ25VcFNpZ25Jbik7XHJcbiAgICAgIGxldCBzaWduVXBTaWduSW5GbG93UmVxdWVzdDogUmVkaXJlY3RSZXF1ZXN0IHwgUG9wdXBSZXF1ZXN0ICA9IHtcclxuICAgICAgICBhdXRob3JpdHk6IHNpZ25VcFNpZ25Jbi5hdXRob3JpdHksXHJcbiAgICAgICAgc2NvcGVzOiBbXSxcclxuICAgICAgICBwcm9tcHQ6IFByb21wdFZhbHVlLkxPR0lOLCAvLyBmb3JjZSB1c2VyIHRvIHJlYXV0aGVudGljYXRlIHdpdGggdGhlaXIgbmV3IHBhc3N3b3JkXHJcbiAgICAgICAgYWNjb3VudDogYWNjb3VudFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5sb2dpbihzaWduVXBTaWduSW5GbG93UmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvZ2luKHVzZXJGbG93UmVxdWVzdD86IFJlZGlyZWN0UmVxdWVzdCB8IFBvcHVwUmVxdWVzdCwgcG9wdXA/OiBib29sZWFuKSB7XHJcbiAgICBsZXQgYXV0aFJlcXVlc3RDZmc6IGFueSA9IHRoaXMubXNhbEd1YXJkQ29uZmlnLmF1dGhSZXF1ZXN0O1xyXG4gICAgbGV0IGF1dGhSZXF1ZXN0ID0gbnVsbDtcclxuXHJcbiAgICBpZiAoYXV0aFJlcXVlc3RDZmcpIHtcclxuICAgICAgYXV0aFJlcXVlc3QgPSBhdXRoUmVxdWVzdENmZyh0aGlzLm1zYWxTZXJ2aWNlLCB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNQb3B1cChwb3B1cCkpIHtcclxuICAgICAgaWYgKGF1dGhSZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5tc2FsU2VydmljZS5sb2dpblBvcHVwKHsgLi4uYXV0aFJlcXVlc3QsIC4uLnVzZXJGbG93UmVxdWVzdCB9IGFzIFBvcHVwUmVxdWVzdCkuc3Vic2NyaWJlKChyZXNwb25zZTogQXV0aGVudGljYXRpb25SZXN1bHQpID0+IHtcclxuICAgICAgICAgIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2Uuc2V0QWN0aXZlQWNjb3VudChyZXNwb25zZS5hY2NvdW50KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ2luUG9wdXAodXNlckZsb3dSZXF1ZXN0KS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBBdXRoZW50aWNhdGlvblJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5zZXRBY3RpdmVBY2NvdW50KHJlc3BvbnNlLmFjY291bnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGF1dGhSZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5tc2FsU2VydmljZS5sb2dpblJlZGlyZWN0KHsgLi4uYXV0aFJlcXVlc3QsIC4uLnVzZXJGbG93UmVxdWVzdCB9IGFzIFJlZGlyZWN0UmVxdWVzdCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tc2FsU2VydmljZS5sb2dpblJlZGlyZWN0KHVzZXJGbG93UmVxdWVzdCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvZ291dChwb3B1cD86IGJvb2xlYW4pIHtcclxuICAgIGxldCBhY3RpdmVBY2NvdW50ID0gdGhpcy5nZXRBY3RpdmVBY2NvdW50KCk7XHJcbiAgICBpZiAoIWFjdGl2ZUFjY291bnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzUG9wdXAocG9wdXApKSB7XHJcbiAgICAgIHRoaXMubXNhbFNlcnZpY2UubG9nb3V0UG9wdXAoeyBhY2NvdW50OiBhY3RpdmVBY2NvdW50LCBtYWluV2luZG93UmVkaXJlY3RVcmk6IFwiL1wiIH0pLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0LmNsZWFyV2ViU3RvcmFnZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ291dFJlZGlyZWN0KHsgYWNjb3VudDogYWN0aXZlQWNjb3VudCB9KS5waXBlKG1hcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0LmNsZWFyV2ViU3RvcmFnZSgpO1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc1VzZXJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWN0aXZlQWNjb3VudCgpICE9IG51bGw7XHJcbiAgfVxyXG5cclxuICBpc1VzZXJTaWduZWRJbigpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5pc1VzZXJBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjdXJyZW50VXNlciA9IHRoaXMuYXBwQ29udGV4dC5jdXJyZW50VXNlcjtcclxuICAgIHJldHVybiBjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5Vc2VySUQ7XHJcbiAgfVxyXG5cclxuICBpc1VzZXJBZG1pbigpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5pc1VzZXJTaWduZWRJbigpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY3VycmVudFVzZXIgPSB0aGlzLmFwcENvbnRleHQuY3VycmVudFVzZXI7XHJcbiAgICByZXR1cm4gY3VycmVudFVzZXIgJiYgY3VycmVudFVzZXIuaXNVc2VyQWRtaW47XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -2673,6 +2673,10 @@ class AuthService extends ApiServiceBase {
2673
2673
 
2674
2674
  Token types:
2675
2675
  https://learn.microsoft.com/en-us/azure/active-directory-b2c/tokens-overview
2676
+ ID token - A JWT that contains claims that you can use to identify users in your application
2677
+ Access token - A JWT that contains claims that you can use to identify the granted permissions to your APIs.
2678
+ Access tokens are signed, but they aren't encrypted
2679
+ Refresh token - Refresh tokens are used to acquire new ID tokens and access tokens in an OAuth 2.0 flow.
2676
2680
  */
2677
2681
  initMSAL() {
2678
2682
  //B2C