tnx-shared 5.3.335 → 5.3.337

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.
@@ -833,6 +833,18 @@ export class UserService extends BaseService {
833
833
  const url = `${this.serviceUri}/ValidatePassword/?password=${password}`;
834
834
  return this.defaultGet(url);
835
835
  }
836
+ getUserCache(cacheKey) {
837
+ const url = `${this.serviceUri}/GetUserCache/${cacheKey}`;
838
+ return this.defaultGet(url);
839
+ }
840
+ setUserCache(data) {
841
+ const url = `${this.serviceUri}/SetUserCache`;
842
+ return this.defaultPost(url, data);
843
+ }
844
+ updateUserAvatar(data) {
845
+ const url = `${this.serviceUri}/UpdateUserAvatar`;
846
+ return this.defaultPut(url, data);
847
+ }
836
848
  }
837
849
  UserService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserService_Factory() { return new UserService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i2.ModuleConfigService), i0.ɵɵinject(i3.AuthenService), i0.ɵɵinject(i4.OAuthService), i0.ɵɵinject(i5.SignalRService), i0.ɵɵinject(i6.ExceptionHandlerService), i0.ɵɵinject(i7.ApplicationContextService)); }, token: UserService, providedIn: "root" });
838
850
  UserService.decorators = [
@@ -850,4 +862,4 @@ UserService.ctorParameters = () => [
850
862
  { type: ExceptionHandlerService },
851
863
  { type: ApplicationContextService }
852
864
  ];
853
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL3VzZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHeEUsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixD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WUFoN0JKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBM0JRLFVBQVU7WUFDRSxRQUFRO1lBa0JwQixtQkFBbUI7WUFKbkIsYUFBYTtZQWJiLFlBQVk7WUFrQlosY0FBYztZQUZkLHVCQUF1QjtZQVp2Qix5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPQXV0aFNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcbmltcG9ydCAqIGFzIEpXVF8gZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHJldHJ5LCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uL2FwcC1jb250ZXh0L2FwcGxpY2F0aW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb2x1bW5TY2hlbWFCYXNlLCBNb2RlbFNjaGVtYSB9IGZyb20gJy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWcgfSBmcm9tICcuLi9jb25maWdzL21vZHVsZS1jb25maWcnO1xuaW1wb3J0IHsgQmFzaWNVc2VySW5mbyB9IGZyb20gJy4uL21vZGVscy9iYXNpYy11c2VyLWluZm8nO1xuaW1wb3J0IHsgRmlsdGVyLCBHcmlkSW5mbyB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUGFnZU9wdGlvbkJhc2UgfSBmcm9tICcuLi9tb2RlbHMvcGFnZS1vcHRpb24nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IFRuVXNlciwgVXNlclB1YmxpY0luZm8gfSBmcm9tICcuLi9tb2RlbHMvdG4tdXNlcic7XG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi9hdXRoZW4uc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4vYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IEV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi9leGNlcHRpb24taGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBTaWduYWxSU2VydmljZSB9IGZyb20gJy4vc2lnbmFsci5zZXJ2aWNlJztcblxuLy8gZml4IGZvciBwcm9kIGJ1aWxkXG5jb25zdCBKV1QgPSBKV1RfO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xuICAgIHJlYWRvbmx5IFVTRVJfSU5GT19LRVkgPSAndXNlcl9pbmZvJztcbiAgICByZWFkb25seSBDVVJSRU5UX1VTRVJfS0VZID0gJ2N1cnJlbnRfdXNlcl9pbmZvJztcbiAgICByZWFkb25seSBBQ0NFU1NfVE9LRU5fS0VZID0gJ2FjY2Vzc190b2tlbic7XG4gICAgcmVhZG9ubHkgUkVUUllfQ09VTlQ6IG51bWJlciA9IDA7XG4gICAgcmVhZG9ubHkgUkVQTEFZX0NPVU5UOiBudW1iZXIgPSAxMDtcbiAgICByZWFkb25seSBERUZBVUxUX0FWQVRBUl9NQUxFO1xuICAgIHJlYWRvbmx5IERFRkFVTFRfQVZBVEFSX0ZFTUFMRTtcbiAgICByZWFkb25seSBvcmdhbml6YXRpb25FbmRwb2ludDtcbiAgICByZWFkb25seSBfbW9kdWxlQ29uZmlnOiBNb2R1bGVDb25maWc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfYXV0aGVuU2VydmljZTogQXV0aGVuU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfb2F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3NpZ25hbHJTZXJ2aWNlOiBTaWduYWxSU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZXhjZXB0aW9uSGFuZGxlclNlcnZpY2U6IEV4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9hcHBsaWNhdGlvbkNvbnRleHQ6IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsIGAke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi51c2VyT3JnRW5kcG9pbnR9LyR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vdXNlcmApO1xuICAgICAgICB0aGlzLmVuZFBvaW50ID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLnVzZXJPcmdFbmRwb2ludDtcblxuICAgICAgICB0aGlzLl9tb2R1bGVDb25maWcgPSBfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpID0gdGhpcy5nZXRTZXJ2aWNlVXJsKCk7XG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uRW5kcG9pbnQgPSB0aGlzLmdldFNlcnZpY2VVcmwoKTtcblxuICAgICAgICB0aGlzLkRFRkFVTFRfQVZBVEFSX01BTEUgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi5kZWZhdWx0TWFsZUF2YXRhcjtcbiAgICAgICAgdGhpcy5ERUZBVUxUX0FWQVRBUl9GRU1BTEUgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi5kZWZhdWx0RmVtYWxlQXZhdGFyO1xuXG4gICAgICAgIGNvbnN0IHJvb3RDb250ZXh0U3ViID0gdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LnJvb3RDb250ZXh0TG9hZGVkLnN1YnNjcmliZShyczEgPT4ge1xuICAgICAgICAgICAgaWYgKHJzMSkge1xuICAgICAgICAgICAgICAgIC8vIGJpbmRpbmcgZXZlbnQgdXNlciBjaGFuZ2VcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9JTkZPX0NIQU5HRUQsIHJzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkNVUlJFTlRfVVNFUl9LRVkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUN1cnJlbnRVc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJvb3RDb250ZXh0U3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlLnN0YXJ0KG51bGwsICdVU0VSX0lORk9fRURJVEVEJywgZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVVzZXJJbmZvQ2hhbmdlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlcnZpY2VVcmwoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVXNlT2xkT3JnYW5pemF0aW9uKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJPbGRPcmdhbml6YXRpb24gPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLm9yZ2FuaXphdGlvbkVuZHBvaW50O1xuICAgICAgICAgICAgcmV0dXJuIGAke3VzZXJPbGRPcmdhbml6YXRpb259L3VzZXJgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdXNlck9yZ0VuZHBvaW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbi51c2VyT3JnRW5kcG9pbnQ7XG4gICAgICAgICAgICByZXR1cm4gYCR7dXNlck9yZ0VuZHBvaW50fS8ke3RoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS91c2VyYDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNVc2VPbGRPcmdhbml6YXRpb24oKSB7XG4gICAgICAgIGNvbnN0IHVzZU9sZE9yZ2FuaXphdGlvbiA9IHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC51c2VPbGRPcmdhbml6YXRpb247XG4gICAgICAgIGlmICh1c2VPbGRPcmdhbml6YXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXRGdWxsQ2FuQm9MYWJlbChpdGVtLCBnZXREaXNwbGF5TmFtZSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHRlbkRvblZpID0gaXRlbS5sc3RUZW5Eb25WaSAmJiBpdGVtLmxzdFRlbkRvblZpLmxlbmd0aCA+IDAgPyBpdGVtLmxzdFRlbkRvblZpLnNwbGl0KCcsJylbMF0gOiAnJztcbiAgICAgICAgbGV0IGxhYmVsID0gZ2V0RGlzcGxheU5hbWUgJiYgaXRlbS5kaXNwbGF5TmFtZSA/IGl0ZW0uZGlzcGxheU5hbWUgOiB0aGlzLmdldFVzZXJOYW1lKGl0ZW0pO1xuICAgICAgICBsYWJlbCA9IChpdGVtLm1hQ2h1Y1Z1ID8gYCR7aXRlbS5tYUNodWNWdX0uIGAgOiAnJykgKyBgJHtsYWJlbH1gICsgKHRlbkRvblZpID8gYCAtICR7dGVuRG9uVml9YCA6ICcnKTtcbiAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH1cblxuICAgIGdldEFsbFdpdGhJbmZvKGZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGFDdXN0b21Sb3V0ZSgnV2l0aEluZm8nLCBmaWx0ZXJzKTtcbiAgICB9XG5cbiAgICBnZXRQYWdlV2l0aEluZm8oZ3JpZEluZm86IEdyaWRJbmZvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm8sICdXaXRoSW5mbycpO1xuICAgIH1cblxuICAgIGdldEluZm8oaWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0SW5mby8ke2lkfWApO1xuICAgIH1cblxuICAgIGdldEluZm9Gb3JXb3JrZmxvdyhpZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRJbmZvRm9yV29ya2Zsb3cvJHtpZH1gKTtcbiAgICB9XG5cbiAgICBnZXRDbGFpbShrZXk6IHN0cmluZykge1xuICAgICAgICBjb25zdCBkZWNvZGVkID0gSldULmRlZmF1bHQodGhpcy5fb2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCkpO1xuICAgICAgICByZXR1cm4gZGVjb2RlZFtrZXldO1xuICAgIH1cblxuICAgIGdldEp3dERlY29kZWQoKSB7XG4gICAgICAgIHJldHVybiBKV1QuZGVmYXVsdCh0aGlzLl9vYXV0aFNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKSk7XG4gICAgfVxuXG4gICAgaGFuZGxlVXNlckluZm9DaGFuZ2UoZGF0YSkge1xuICAgICAgICBsZXQgZGF0YU9iajtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBkYXRhT2JqID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmZvVXNlciA9IEpTT04ucGFyc2UoZGF0YU9iai5tZXNzYWdlLmNvbnRlbnQpO1xuICAgICAgICBpZiAoaW5mb1VzZXIuSWQpIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVVNFUl9JTkZPX0tFWSArICdfJyArIGluZm9Vc2VyLklkKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0QmFzaWNVc2VySW5mbyhpbmZvVXNlci5JZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRGb3JBdXRvQ29tcGxldGUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0Rm9yQXV0b0NvbXBsZXRlP2tleT0ke2tleX1gO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5fZXhjZXB0aW9uSGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIHBvcHVsYXRlQ3VycmVudFVzZXIoKSB7XG4gICAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldFVzZXJJbmZvRnJvbUxvY2FsQW5kQWNjZXNzVG9rZW4oKTtcbiAgICAgICAgaWYgKHVzZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZGF0YS5jdXJyZW50VXNlciA9IHVzZXI7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5maXJlUmVwbGF5RXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9MT0FERUQsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLnJlcGxheVN1YnNjcmliZU9uY2UoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9SRUFEWSwgcnMgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RUaW1lTG9naW4gPSBycyA/PyBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gdGhpcy5fb2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgICAgICBjb25zdCBkZWNvZGVkOiBhbnkgPSBKV1QuZGVmYXVsdChhY2Nlc3NUb2tlbik7XG4gICAgICAgICAgICAvLyBDaHV54buDbiDEkeG7lWkgc2FuZyBkw7luZyBpbnN0YW5jZUlkIG7hur91IMSRxINuZyBuaOG6rXAgYuG6sW5nIGlkZW50aXR5djQgbmjGsG5nIHBo4bqjaSBz4butIGThu6VuZyBiYXNlIHVzZXJPcmd2NVxuICAgICAgICAgICAgY29uc3QgdXNlcklkID0gdGhpcy5nZXRVc2VySWRGcm9tVG9rZW4oZGVjb2RlZCk7XG4gICAgICAgICAgICB0aGlzLmdldFN0YWZmSW5mbyh1c2VySWQpLnRoZW4ocnMxID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWRVc2VyID0gdGhpcy5tYXBVc2VySW5mbyhkZWNvZGVkLCByczEsIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlclB1YmxpY0luZm8gPSB0aGlzLmdldFVzZXJQdWJsaWNJbmZvKG1hcHBlZFVzZXIpO1xuXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DVVJSRU5UX1VTRVJfS0VZLCBKU09OLnN0cmluZ2lmeSh1c2VyUHVibGljSW5mbykpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmRhdGEuY3VycmVudFVzZXIgPSBtYXBwZWRVc2VyO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0VGltZUxvZ2luKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5ORUVEX0NMRUFSX1BFUk1JU1NJT05fQ0FDSEUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmZpcmVSZXBsYXlFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX0xPQURFRCwgdHJ1ZSk7XG4gICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVc2VySW5mb0Zyb21Mb2NhbEFuZEFjY2Vzc1Rva2VuKCkge1xuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5nZXRVc2VySW5mb0Zyb21Mb2NhbCgpO1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgY29uc3QgdXNlclB1YmxpY0luZm8gPSB0aGlzLmdldFVzZXJQdWJsaWNJbmZvKHVzZXIpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jb21tb25TZXJ2aWNlLmlzVmFsaWRHdWlkKHVzZXIudXNlcklkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UubG9nb3V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXdVc2VySWQgPSB1c2VyLnVzZXJJZDtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VySWQgPSBOdW1iZXIocmF3VXNlcklkKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHVzZXJJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdXNlci5vcmlnaW5JZCA9IHVzZXIudXNlcklkO1xuICAgICAgICAgICAgICAgICAgICB1c2VyLnVzZXJJZCA9IHVzZXIuaW5zdGFuY2VpZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DVVJSRU5UX1VTRVJfS0VZLCBKU09OLnN0cmluZ2lmeSh1c2VyUHVibGljSW5mbykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VXNlcklkRnJvbVRva2VuKGRlY29kZWRUb2tlbikge1xuICAgICAgICBjb25zdCByYXdVc2VySWQgPSBkZWNvZGVkVG9rZW4uc3ViO1xuICAgICAgICBjb25zdCB1c2VySWQgPSBOdW1iZXIocmF3VXNlcklkKTtcbiAgICAgICAgcmV0dXJuIGlzTmFOKHVzZXJJZCkgPyByYXdVc2VySWQgOiBkZWNvZGVkVG9rZW4uaW5zdGFuY2VpZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVzZXJJbmZvRnJvbUxvY2FsKCkge1xuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ1VSUkVOVF9VU0VSX0tFWSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0luZm86IFVzZXJQdWJsaWNJbmZvID0gc3RvcmFnZUl0ZW0gPyBKU09OLnBhcnNlKHN0b3JhZ2VJdGVtKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5BQ0NFU1NfVE9LRU5fS0VZKTtcbiAgICAgICAgY29uc3QgdG9rZW5JbmZvOiBUblVzZXIgPSBhY2Nlc3NUb2tlbiA/IEpXVC5kZWZhdWx0KGFjY2Vzc1Rva2VuKSA6IG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzLm1lcmdlUHVibGljQW5kUHJpdmF0ZUluZm8ocHVibGljSW5mbywgdG9rZW5JbmZvKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1lcmdlUHVibGljQW5kUHJpdmF0ZUluZm8odXNlclB1YmxpY0luZm86IFVzZXJQdWJsaWNJbmZvLCBpbmZvRnJvbVRva2VuOiBUblVzZXIpIHtcbiAgICAgICAgaWYgKHVzZXJQdWJsaWNJbmZvID09IG51bGwgfHwgaW5mb0Zyb21Ub2tlbiA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQ6IFRuVXNlciA9IG5ldyBUblVzZXIoKTtcbiAgICAgICAgdGhpcy5tZXJnZVB1YmxpY0luZm8ocmVzdWx0LCB1c2VyUHVibGljSW5mbyk7XG4gICAgICAgIHRoaXMubWVyZ2VUb2tlbkluZm8ocmVzdWx0LCBpbmZvRnJvbVRva2VuKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1lcmdlVG9rZW5JbmZvKHJlc3VsdDogVG5Vc2VyLCBpbmZvRnJvbVRva2VuOiBUblVzZXIpIHtcbiAgICAgICAgLy8gbWFwcGluZyBtb3Qgc28gdHJ1b25nIHRyb25nIHRva2VuIGNvIGtleSAhPSB0cm9uZyBUblVzZXJcbiAgICAgICAgY29uc3QgY3VzdG9tUHJvY2VzcyA9IChkZXN0aW5hdGlvbiwgb3JpZ2luYWwsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnZnVsbG5hbWUnKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZnVsbE5hbWUgPSBvcmlnaW5hbFtrZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3N1YicpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5vcmlnaW4gPSBvcmlnaW5hbFtrZXldO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY29tbW9uU2VydmljZS5pc1ZhbGlkR3VpZChkZXN0aW5hdGlvbi51c2VySWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLnVzZXJJZCA9IHRoaXMuZ2V0VXNlcklkRnJvbVRva2VuKGluZm9Gcm9tVG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkgPT09ICd1c2VybmFtZScgJiYgKGRlc3RpbmF0aW9uLnVzZXJOYW1lID09IG51bGwgfHwgZGVzdGluYXRpb24udXNlck5hbWUgPT09ICcnKSkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLnVzZXJOYW1lID0gb3JpZ2luYWxba2V5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eShyZXN1bHQsIGluZm9Gcm9tVG9rZW4sIGN1c3RvbVByb2Nlc3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VQdWJsaWNJbmZvKHJlc3VsdDogVG5Vc2VyLCB1c2VyUHVibGljSW5mbzogVXNlclB1YmxpY0luZm8pIHtcbiAgICAgICAgY29uc3QgY3VzdG9tUHJvY2VzcyA9IChkZXN0aW5hdGlvbiwgb3JpZ2luYWwsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnYXZhdGFyJyAmJiAob3JpZ2luYWwuYXZhdGFyID09IG51bGwgfHwgb3JpZ2luYWwuYXZhdGFyID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hdmF0YXIgPSB0aGlzLmdldFVzZXJBdmF0YXIob3JpZ2luYWwpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFkZFByb3BlcnR5KHJlc3VsdCwgdXNlclB1YmxpY0luZm8sIGN1c3RvbVByb2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGZ1bmN0aW9uIGRlIG1hcCBwcm9wZXJ0eSB0dSBkZXN0aW5hdGlvbiA9PiBvcmlnaW5hbFxuICAgICAqIEBwYXJhbSBkZXN0aW5hdGlvbiBvYmplY3QgbXVvbiBtYXAgc2FuZ1xuICAgICAqIEBwYXJhbSBvcmlnaW5hbCBvYmplY3QgbXVvbiBtYXAgdHVcbiAgICAgKiBAcGFyYW0gY3VzdG9tUHJvY2VzcyB4dSBseSBraGFjIGx1b25nLCB0cmEgdmUgdHJ1ZSBuZXUgdGltIHRoYXkga2V5ID0+IGhhbSBhZGRQcm9wZXJ0eSBzZSBraG9uZyB4dSBseSBnaSB0aWVwXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGFkZFByb3BlcnR5KGRlc3RpbmF0aW9uLCBvcmlnaW5hbCwgY3VzdG9tUHJvY2VzczogKGRlc3RpbmF0aW9uLCBvcmlnaW5hbCwga2V5OiBzdHJpbmcpID0+IGJvb2xlYW4gPSBudWxsKSB7XG4gICAgICAgIGlmICghY3VzdG9tUHJvY2Vzcykge1xuICAgICAgICAgICAgY3VzdG9tUHJvY2VzcyA9IChkZXN0aW5hdGlvbiwgb3JpZ2luYWwsIGtleSkgPT4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb3JpZ2luYWwpIHtcbiAgICAgICAgICAgIGlmIChjdXN0b21Qcm9jZXNzKGRlc3RpbmF0aW9uLCBvcmlnaW5hbCwga2V5KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsW2tleV0gPT0gbnVsbCB8fCBvcmlnaW5hbFtrZXldID09PSAnJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVzdGluYXRpb25ba2V5XSA9IG9yaWdpbmFsW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVzZXJQdWJsaWNJbmZvKHVzZXI6IFRuVXNlcikge1xuICAgICAgICByZXR1cm4gbmV3IFVzZXJQdWJsaWNJbmZvKHtcbiAgICAgICAgICAgIHVzZXJJZDogdXNlci51c2VySWQsXG4gICAgICAgICAgICBmdWxsTmFtZTogdXNlci5mdWxsTmFtZSxcbiAgICAgICAgICAgIGZpcnN0TmFtZTogdXNlci5maXJzdE5hbWUsXG4gICAgICAgICAgICBsYXN0TmFtZTogdXNlci5sYXN0TmFtZSxcbiAgICAgICAgICAgIGlkT3JnYW5pemF0aW9uOiB1c2VyLmlkT3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgZ2VuZGVyOiB1c2VyLmdlbmRlcixcbiAgICAgICAgICAgIG9yaWdpbklkOiB1c2VyLm9yaWdpbklkLFxuICAgICAgICAgICAgdXNlck5hbWU6IHVzZXIudXNlck5hbWUsXG4gICAgICAgICAgICBtYUNhbkJvOiB1c2VyLm1hQ2FuQm8sXG4gICAgICAgICAgICBtYU5ndW9pSG9jOiB1c2VyLm1hTmd1b2lIb2MsXG4gICAgICAgICAgICBhdmF0YXI6IHVzZXIuYXZhdGFyLFxuICAgICAgICAgICAgaWRDYW5CbzogdXNlci5pZENhbkJvLFxuICAgICAgICAgICAgaW5zdGFuY2VpZDogdXNlci5pbnN0YW5jZWlkLFxuICAgICAgICAgICAgaXNGaXJzdExvZ2luOiB1c2VyLmlzRmlyc3RMb2dpbixcbiAgICAgICAgICAgIGlzRXhwaXJhdGlvblBhc3N3b3JkOiB1c2VyLmlzRXhwaXJhdGlvblBhc3N3b3JkLFxuICAgICAgICAgICAgc291cmNlOiB1c2VyLnNvdXJjZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcFVzZXJJbmZvKHRva2VuSW5mbzogYW55LCBhZGRpdGlvbmFsSW5mbzogVG5Vc2VyLCB1c2VySWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCB1c2VyID0gbmV3IFRuVXNlcigpO1xuICAgICAgICBpZiAoYWRkaXRpb25hbEluZm8pIHtcbiAgICAgICAgICAgIHVzZXIucG9zaXRpb24gPSBhZGRpdGlvbmFsSW5mby5wb3NpdGlvbjtcbiAgICAgICAgICAgIHVzZXIucm9sZSA9IGFkZGl0aW9uYWxJbmZvLnJvbGU7XG4gICAgICAgICAgICB1c2VyLnBvc2l0aW9uQ29kZSA9IGFkZGl0aW9uYWxJbmZvLnBvc2l0aW9uQ29kZTtcbiAgICAgICAgICAgIHVzZXIuZmlyc3ROYW1lID0gYWRkaXRpb25hbEluZm8uZmlyc3ROYW1lID8/ICcnO1xuICAgICAgICAgICAgdXNlci5sYXN0TmFtZSA9IGFkZGl0aW9uYWxJbmZvLmxhc3ROYW1lID8/ICcnO1xuICAgICAgICAgICAgdXNlci5nZW5kZXIgPSBhZGRpdGlvbmFsSW5mby5nZW5kZXI7XG4gICAgICAgICAgICB1c2VyLmF2YXRhciA9IGFkZGl0aW9uYWxJbmZvLmF2YXRhcjtcbiAgICAgICAgICAgIHVzZXIuaXNGaXJzdExvZ2luID0gYWRkaXRpb25hbEluZm8uaXNGaXJzdExvZ2luO1xuICAgICAgICAgICAgdXNlci5pc0V4cGlyYXRpb25QYXNzd29yZCA9IGFkZGl0aW9uYWxJbmZvLmlzRXhwaXJhdGlvblBhc3N3b3JkO1xuICAgICAgICAgICAgdXNlci5zb3VyY2UgPSBhZGRpdGlvbmFsSW5mby5zb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuSW5mbykge1xuICAgICAgICAgICAgdXNlci5mdWxsTmFtZSA9IHRva2VuSW5mby5mdWxsbmFtZTtcbiAgICAgICAgICAgIHVzZXIub3JpZ2luSWQgPSB0b2tlbkluZm8uc3ViO1xuICAgICAgICAgICAgdXNlci5pc3N1cGVydXNlciA9IHRva2VuSW5mby5pc3N1cGVydXNlcjtcbiAgICAgICAgICAgIHVzZXIuaXNhZG1pbiA9IHRva2VuSW5mby5pc2FkbWluO1xuICAgICAgICAgICAgdXNlci51c2VyTmFtZSA9IHRva2VuSW5mby51c2VybmFtZTtcbiAgICAgICAgICAgIHVzZXIudXNlcklkID0gdXNlcklkO1xuICAgICAgICAgICAgdXNlci5pZE9yZ2FuaXphdGlvbiA9IHRva2VuSW5mby5pZE9yZ2FuaXphdGlvbjtcbiAgICAgICAgICAgIHVzZXIubWFDYW5CbyA9IHRva2VuSW5mby5tYUNhbkJvO1xuICAgICAgICAgICAgdXNlci5tYU5ndW9pSG9jID0gdG9rZW5JbmZvLm1hTmd1b2lIb2M7XG4gICAgICAgICAgICB1c2VyLmlkQ2FuQm8gPSB0b2tlbkluZm8uaWRDYW5CbztcbiAgICAgICAgICAgIHVzZXIuaW5zdGFuY2VpZCA9IHRva2VuSW5mby5pbnN0YW5jZWlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGdldFByb2ZpbGVJbmZvKCkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdwcm9maWxlcycpKTtcbiAgICB9XG5cbiAgICBpc0tob2FWaWVuKGlkTG9haURvblZpKSB7XG4gICAgICAgIHJldHVybiBpZExvYWlEb25WaSA9PSAnMjAnIHx8IGlkTG9haURvblZpID09ICc2MCc7XG4gICAgfVxuXG4gICAgaXNCb01vbihpZExvYWlEb25WaSkge1xuICAgICAgICByZXR1cm4gaWRMb2FpRG9uVmkgPT0gJzIxJztcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50VXNlcigpOiBUblVzZXIge1xuICAgICAgICBsZXQgdXNlciA9IDxUblVzZXI+KHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmRhdGEuY3VycmVudFVzZXIpO1xuICAgICAgICBpZiAodXNlciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdXNlcjtcbiAgICAgICAgfVxuICAgICAgICB1c2VyID0gdGhpcy5nZXRVc2VySW5mb0Zyb21Mb2NhbEFuZEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmRhdGEuY3VycmVudFVzZXIgPSB1c2VyO1xuICAgICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBnZXRVc2VyTmFtZShpdGVtKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uZnVsbE5hbWVOZXdcbiAgICAgICAgICAgID8gYCR7aXRlbS5mdWxsTmFtZU5ld31gXG4gICAgICAgICAgICA6IGAke2l0ZW0ubGFzdE5hbWV9ICR7aXRlbS5maXN0TmFtZX1gO1xuICAgIH1cblxuICAgIGdldFVzZXJJZENvbWJpbmUoKSB7XG4gICAgICAgIGNvbnN0IHJhd1VzZXJJZCA9IHRoaXMuZ2V0SWQoKTtcbiAgICAgICAgY29uc3QgdXNlcklkID0gTnVtYmVyKHJhd1VzZXJJZCk7XG4gICAgICAgIGxldCB1c2VySWRSZXN1bHQgPSAnJztcbiAgICAgICAgaWYgKCFpc05hTih1c2VySWQpKSB7XG4gICAgICAgICAgICB1c2VySWRSZXN1bHQgPSB0aGlzLmdldEluc3RhbmNlSWQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVzZXJJZFJlc3VsdCA9IHJhd1VzZXJJZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXNlcklkUmVzdWx0LnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgZ2V0U3RhZmZJbmZvKHVzZXJJZCk6IFByb21pc2U8VG5Vc2VyPiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRm9yTG9naW5gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxuICAgICAgICAgICAgLmdldDxSZXNwb25zZVJlc3VsdD4odXJsKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSksXG4gICAgICAgICAgICAgICAgbWFwKHJzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3AgPSBuZXcgVG5Vc2VyKDxUblVzZXI+e1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVsbE5hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YXRhcjogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW5kZXI6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbkNvZGU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VpZDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdE5hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE5hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNGaXJzdExvZ2luOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXhwaXJhdGlvblBhc3N3b3JkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogMCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcC5mdWxsTmFtZSA9IHJzLmRhdGEuZnVsbE5hbWUgPz8gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcC5yb2xlID0gcnMuZGF0YS5yb2xlID8/ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3AuYXZhdGFyID0gcnMuZGF0YS5hdmF0YXIgPz8gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcC5nZW5kZXIgPSBycy5kYXRhLmdlbmRlciA/PyAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3AucG9zaXRpb25Db2RlID0gcnMuZGF0YS5wb3NpdGlvbkNvZGUgPz8gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcC5pbnN0YW5jZWlkID0gcnMuZGF0YS5pbnN0YW5jZWlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3AuZmlyc3ROYW1lID0gcnMuZGF0YS5maXJzdE5hbWUgPz8gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcC5sYXN0TmFtZSA9IHJzLmRhdGEubGFzdE5hbWUgPz8gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcC5pc0ZpcnN0TG9naW4gPSBycy5kYXRhLmlzRmlyc3RMb2dpbiA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wLmlzRXhwaXJhdGlvblBhc3N3b3JkID0gcnMuZGF0YS5pc0V4cGlyYXRpb25QYXNzd29yZCA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wLnNvdXJjZSA9IHJzLmRhdGEuc291cmNlID8/IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb3AuYXZhdGFyID0gdGhpcy5nZXRVc2VyQXZhdGFyKG9wKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wO1xuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VXNlckF2YXRhcih1c2VyOiBUblVzZXIpIHtcbiAgICAgICAgaWYgKCF1c2VyLmF2YXRhciB8fCB1c2VyLmF2YXRhciA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiB1c2VyLmdlbmRlciA9PSAwID8gdGhpcy5ERUZBVUxUX0FWQVRBUl9NQUxFIDogdGhpcy5ERUZBVUxUX0FWQVRBUl9GRU1BTEU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVzZXIuYXZhdGFyO1xuICAgIH1cblxuICAgIGdldElkKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DVVJSRU5UX1VTRVJfS0VZKTtcbiAgICAgICAgY29uc3QgdXNlciA9IDxUblVzZXI+SlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XG4gICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gdXNlci51c2VySWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50VXNlcigpLnVzZXJJZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEluc3RhbmNlSWQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNVUlJFTlRfVVNFUl9LRVkpO1xuICAgICAgICBjb25zdCB1c2VyID0gPFRuVXNlcj5KU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcbiAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB1c2VyLmluc3RhbmNlaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50VXNlcigpLmluc3RhbmNlaWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlck9ubGluZShmb3JtRGF0YTogRm9ybURhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vcmVnaXN0ZXJPbmxpbmVgO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxuICAgICAgICAgICAgLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZm9ybURhdGEpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBnZXRCYXNpY1VzZXJJbmZvKHVzZXJJZDogbnVtYmVyKTogUHJvbWlzZTxCYXNpY1VzZXJJbmZvPiB7XG5cbiAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlVTRVJfSU5GT19LRVkgKyAnXycgKyB1c2VySWQpO1xuICAgICAgICAvLyBjb25zdCB1c2VySW5mb3MgPSA8QmFzaWNVc2VySW5mb1tdPkpTT04ucGFyc2Uoc3RvcmFnZUl0ZW0pO1xuICAgICAgICAvLyBjb25zdCB1c2VyID0gdXNlckluZm9zID8gdXNlckluZm9zLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSB1c2VySWQpIDogbnVsbDtcbiAgICAgICAgY29uc3QgdXNlciA9IDxCYXNpY1VzZXJJbmZvPkpTT04ucGFyc2Uoc3RvcmFnZUl0ZW0pO1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUodXNlcikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXNlcklkID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KDxCYXNpY1VzZXJJbmZvPnt9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2VySWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QmFzaWNVc2VySW5mbz9pZD0ke3VzZXJJZH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChyZXBzb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYXZlIHJlc3BvbnNlIHRvIGxvY2FsIHN0b3JhZ2UgaGVyZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5VU0VSX0lORk9fS0VZICsgJ18nICsgcmVwc29uc2UuZGF0YS5pZCwgSlNPTi5zdHJpbmdpZnkocmVwc29uc2UuZGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxCYXNpY1VzZXJJbmZvPnJlcHNvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKS50b1Byb21pc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoPEJhc2ljVXNlckluZm8+e30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRCYXNpY1VzZXJzSW5mbyh1c2VySWRzOiBzdHJpbmcpOiBQcm9taXNlPEJhc2ljVXNlckluZm9bXT4ge1xuICAgICAgICBpZiAoIXVzZXJJZHMgfHwgdXNlcklkcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSg8QmFzaWNVc2VySW5mb1tdPltdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5VU0VSX0lORk9fS0VZKTtcbiAgICAgICAgY29uc3QgdXNlckluZm9zID0gPEJhc2ljVXNlckluZm9bXT5KU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcblxuICAgICAgICAvLyBjb25zdCB1c2VycyA9IHVzZXJJbmZvcyA/IHVzZXJJbmZvcy5maWx0ZXIoaXRlbSA9PiB1c2VySWRzLmluZGV4T2YoYCwke2l0ZW0uaWR9LGApID4gLTEpIDogbnVsbDtcbiAgICAgICAgY29uc3QgY2hlY2sgPSB1c2VySW5mb3MgPyB1c2VySWRzLmluZGV4T2YodXNlckluZm9zWydpZCddKSA+IC0xIDogbnVsbDtcbiAgICAgICAgaWYgKGNoZWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gcmVzb2x2ZSh1c2VySW5mb3MpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEJhc2ljVXNlcnNJbmZvP3VzZXJJZHM9JHt1c2VySWRzfWA7XG4gICAgICAgICAgICAgICAgdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxuICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKHJlcHNvbnNlID0+IDxCYXNpY1VzZXJJbmZvW10+cmVwc29uc2UuZGF0YSlcbiAgICAgICAgICAgICAgICApLnRvUHJvbWlzZSgpLnRoZW4oc3VjY2VzcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSg8QmFzaWNVc2VySW5mb1tdPltdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSMOgbSBkw7luZyDEkeG7gyBs4bqleSB0aMO0bmcgdGluIGPGoSBi4bqjbiBuaGnhu4F1IG5nxrDhu51pIGTDuW5nIGThu7FhIHbDoG8gdXNlck5hbWUsXG4gICAgICogaGnhu4duIHThuqFpIGNoxrBhIGPDsyB0aMO0bmcgdGluIHbhu4EgxJHGoW4gduG7iyB2w6AgY2jhu6ljIHbhu6UgbmfGsOG7nWkgZMO5bmcgxJHhu4MgZ2nhuqNtIGxvYWQgdsOgIHbDrCBjaMawYSBkw7luZyDEkeG6v25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlck5hbWVcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEJhc2ljVXNlckluZm9bXT59XG4gICAgICovXG4gICAgZ2V0QmFzaWNVc2VySW5mb0J5VXNlck5hbWUodXNlck5hbWU6IHN0cmluZyk6IFByb21pc2U8QmFzaWNVc2VySW5mbz4ge1xuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVVNFUl9JTkZPX0tFWSArICdfJyArIHVzZXJOYW1lKTtcbiAgICAgICAgY29uc3QgdXNlciA9IDxCYXNpY1VzZXJJbmZvPkpTT04ucGFyc2Uoc3RvcmFnZUl0ZW0pO1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUodXNlcikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXNlck5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKDxCYXNpY1VzZXJJbmZvPnt9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2VyTmFtZSAhPSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEJhc2ljVXNlckluZm9CeVVzZXJOYW1lP3VzZXJOYW1lPSR7dXNlck5hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHJlcHNvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2F2ZSByZXNwb25zZSB0byBsb2NhbCBzdG9yYWdlIGhlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5VU0VSX0lORk9fS0VZICsgJ18nICsgcmVwc29uc2UuZGF0YS51c2VyTmFtZSwgSlNPTi5zdHJpbmdpZnkocmVwc29uc2UuZGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPEJhc2ljVXNlckluZm8+cmVwc29uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpLnRvUHJvbWlzZSgpLnRoZW4ocnNzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVycnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKDxhbnk+e30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEjDoG0gZMO5bmcgxJHhu4MgbOG6pXkgdGjDtG5nIHRpbiBjxqEgYuG6o24gbmhp4buBdSBuZ8aw4budaSBkw7luZyBk4buxYSB2w6BvIHVzZXJOYW1lLFxuICAgICAqIGhp4buHbiB04bqhaSBjaMawYSBjw7MgdGjDtG5nIHRpbiB24buBIMSRxqFuIHbhu4sgdsOgIGNo4bupYyB24bulIG5nxrDhu51pIGTDuW5nIMSR4buDIGdp4bqjbSBsb2FkIHbDoCB2w6wgY2jGsGEgZMO5bmcgxJHhur9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJOYW1lc1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mb1tdPlxuICAgICAqL1xuICAgIGFzeW5jIGdldEJhc2ljVXNlcnNJbmZvQnlVc2VyTmFtZXModXNlck5hbWVzOiBzdHJpbmcpOiBQcm9taXNlPEJhc2ljVXNlckluZm9bXT4ge1xuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVVNFUl9JTkZPX0tFWSk7XG4gICAgICAgIGNvbnN0IHVzZXJJbmZvcyA9IDxCYXNpY1VzZXJJbmZvW10+SlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gdXNlckluZm9zID8gdXNlck5hbWVzLmluZGV4T2YodXNlckluZm9zWyd1c2VyTmFtZSddKSA+IC0xIDogbnVsbDtcbiAgICAgICAgaWYgKGNoZWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gdXNlckluZm9zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEJhc2ljVXNlcnNJbmZvQnlVc2VyTmFtZXM/dXNlck5hbWVzPSR7dXNlck5hbWVzfWA7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSxcbiAgICAgICAgICAgICAgICBtYXAocmVwc29uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlVTRVJfSU5GT19LRVkgKyAnXycgKyAoPEJhc2ljVXNlckluZm9bXT5yZXBzb25zZS5kYXRhKS5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC51c2VyTmFtZSkgcmV0dXJuIHgudXNlck5hbWU7XG4gICAgICAgICAgICAgICAgICAgIH0pLCBKU09OLnN0cmluZ2lmeShyZXBzb25zZS5kYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8QmFzaWNVc2VySW5mb1tdPnJlcHNvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCkuY2F0Y2goZXJyID0+IFtdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnZlcnRMaXN0VXNlcklkVG9TdHJpbmcodXNlcklkczogbnVtYmVyW10pOiBzdHJpbmcge1xuICAgICAgICBpZiAodXNlcklkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYCwke3VzZXJJZHMuam9pbignLCcpfSxgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnLCc7XG4gICAgfVxuXG4gICAgZmlsbEJhc2ljVXNlckluZm8oZGF0YVNvdXJjZTogYW55W10sIHByb3BlcnR5TmFtZTogc3RyaW5nKTogYW55W10ge1xuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zdCB1c2VySWQgPSBpdGVtW3Byb3BlcnR5TmFtZV0uaWQgPyBpdGVtW3Byb3BlcnR5TmFtZV0uaWQgOiBpdGVtW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tc2hhZG93ZWQtdmFyaWFibGVcbiAgICAgICAgICAgIC8vIGNvbnN0IHVzZXIgPSB1c2Vycy5maW5kKHVzZXIgPT4gdXNlci5pZCA9PT0gdXNlcklkKTtcbiAgICAgICAgICAgIC8vIGlmICh1c2VyKSB7XG4gICAgICAgICAgICAvLyAgICAgaXRlbVtwcm9wZXJ0eU5hbWVdID0gdXNlcjtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2U7XG4gICAgfVxuXG5cbiAgICByZXN0b3JlUGFzc3dvcmQoaXRlbTogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnB1dDxSZXNwb25zZVJlc3VsdD4oYCR7dGhpcy5zZXJ2aWNlVXJpfS9yZXN0b3JlUGFzc3dvcmRgLCBpdGVtKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgY2hhbmdlUGFzc3dvcmQodXNlcklkOiBzdHJpbmcsIGl0ZW06IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcblxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NoYW5nZVBhc3N3b3JkYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcbiAgICAgICAgICAgIC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGl0ZW0pXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICByZXNldFBhc3N3b3JkKGl0ZW06IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcblxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L3Jlc2V0UGFzc3dvcmRgO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxuICAgICAgICAgICAgLnB1dDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBpdGVtKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgR2V0c0J5TWFuYWdlcklkQXJyYXlJZChpZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldExvd2VyU3RhZmZzQnlVc2VySWQ/dXNlcklkPSR7aWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChhcGlVcmwpO1xuICAgIH1cblxuICAgIG1hcmtBc0FkbWluKHVzZXJJZDogbnVtYmVyLCBpc0FkbWluOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vbWFya0FzQWRtaW4vJHt1c2VySWR9LyR7aXNBZG1pbn1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxuICAgICAgICAgICAgLnB1dDxSZXNwb25zZVJlc3VsdD4odXJsLCBpc0FkbWluKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgbWFya0FzUmVwcmVzZW50KHVzZXJJZDogbnVtYmVyLCBpc1JlcHJlc2VudDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vbWFya0FzUmVwcmVzZW50LyR7dXNlcklkfS8ke2lzUmVwcmVzZW50fWA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcbiAgICAgICAgICAgIC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXNSZXByZXNlbnQpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBnZXRzQnlPcmdhbml6YXRpb25MaXN0SWQocGFnZU9wdGlvbjogUGFnZU9wdGlvbkJhc2UsIGZ1bkdldE5hbWU6IHN0cmluZyA9ICcnLCBvcHRpb25QYXJhbWV0ZXI6IHN0cmluZyA9ICcnLCBkZWZhdWx0UGFyYW1ldGVyOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcblxuICAgICAgICBsZXQgcXVlcnlTdHJpbmcgPSBgP2tleT0ke3BhZ2VPcHRpb24ucXVlcnl9YDtcblxuICAgICAgICBpZiAoIXBhZ2VPcHRpb24ub2Zmc2V0KSB7XG4gICAgICAgICAgICBwYWdlT3B0aW9uLm9mZnNldCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBxdWVyeVN0cmluZyArPSBgJm9mZnNldD0ke3BhZ2VPcHRpb24ub2Zmc2V0fWA7XG5cblxuICAgICAgICBpZiAoIXBhZ2VPcHRpb24ubGltaXQpIHtcbiAgICAgICAgICAgIHBhZ2VPcHRpb24ubGltaXQgPSB0aGlzLkxJTUlUX0RFRkFVTFQ7XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCZsaW1pdD0ke3BhZ2VPcHRpb24ubGltaXQgKyAxfWA7XG5cblxuICAgICAgICBpZiAocGFnZU9wdGlvbi5zb3J0RmllbGQpIHtcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAmc29ydEZpZWxkPSR7cGFnZU9wdGlvbi5zb3J0RmllbGR9JmlzQXNjPSR7cGFnZU9wdGlvbi5pc0FzY31gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWZhdWx0UGFyYW1ldGVyICE9ICcnKSB7XG4gICAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJiR7ZGVmYXVsdFBhcmFtZXRlcn1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25QYXJhbWV0ZXIgIT0gJycpIHtcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAmJHtvcHRpb25QYXJhbWV0ZXJ9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLm9yZ2FuaXphdGlvbkVuZHBvaW50fSR7ZnVuR2V0TmFtZX0ke3F1ZXJ5U3RyaW5nfWA7XG4gICAgICAgIGlmIChwYWdlT3B0aW9uLmlzSWdub3JlQ2xpZW50Q2FjaGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldElnbm9yZUNsaWVudENhY2hlKGFwaVVybCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGFwaVVybCk7XG4gICAgfVxuXG4gICAgZ2V0c0J5T3JnYW5pemF0aW9uSWQob3JnYW5pemF0aW9uSWQ6IHN0cmluZywga2V5d29yZD86IHN0cmluZywgb2Zmc2V0PzogbnVtYmVyLCBsaW1pdD86IG51bWJlcik6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcblxuICAgICAgICBpZiAoIWtleXdvcmQpIHtcbiAgICAgICAgICAgIGtleXdvcmQgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb2Zmc2V0KSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvZmZzZXQpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWxpbWl0KSB7XG4gICAgICAgICAgICBsaW1pdCA9IDEwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRzQnlPcmdhbml6YXRpb25JZGBcbiAgICAgICAgICAgICsgYD9vcmdhbml6YXRpb25JZD0ke29yZ2FuaXphdGlvbklkfWBcbiAgICAgICAgICAgICsgYCZrZXl3b3JkPSR7a2V5d29yZH1gXG4gICAgICAgICAgICArIGAmb2Zmc2V0PSR7b2Zmc2V0fWBcbiAgICAgICAgICAgICsgYCZsaW1pdD0ke2xpbWl0fWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYXBpVXJsKTtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0QXZhdGFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ERUZBVUxUX0FWQVRBUl9NQUxFO1xuICAgIH1cblxuICAgIGhhbmRsZUVycm9yKGVycm9yOiBhbnksIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgICAgICBjb25zdCBjb21tb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xuICAgICAgICByZXR1cm4gY29tbW9uU2VydmljZS5oYW5kbGVFcnJvcihlcnJvciwgaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIGxvY2tVc2VyKGl0ZW06IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcblxuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L2xvY2tVc2VyQWNjb3VudGA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXG4gICAgICAgICAgICAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBpdGVtKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgdW5sb2NrVXNlcihpdGVtOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG5cbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS91bmxvY2tVc2VyQWNjb3VudGA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXG4gICAgICAgICAgICAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBpdGVtKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgaXNTdXBlclVzZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5kYXRhLmN1cnJlbnRVc2VyXG4gICAgICAgICAgICAmJiB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5kYXRhLmN1cnJlbnRVc2VyLmlzc3VwZXJ1c2VyID09PSAnVHJ1ZSc7XG4gICAgfVxuXG4gICAgaXNBZG1pbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmRhdGEuY3VycmVudFVzZXJcbiAgICAgICAgICAgICYmIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmRhdGEuY3VycmVudFVzZXIuaXNhZG1pbiA9PT0gJ1RydWUnO1xuICAgIH1cblxuICAgIGlzVmFsaWRBY2Nlc3NUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCk7XG4gICAgfVxuXG4gICAgZ2V0VXNlcnNCeUdyb3VwQ29kZShncm91cENvZGU6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRVc2Vyc0J5R3JvdXBDb2RlP2dyb3VwQ29kZT0ke2dyb3VwQ29kZX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBnZXRTZXJ2aWNlRW5kcG9pbnQoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnNlcnZpY2VVcml9YDtcbiAgICB9XG5cbiAgICBpc1NpbmhWaWVuQWNjb3VudCgpIHtcbiAgICAgICAgY29uc3QgdXNlckxvZ2luID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICBpZiAodXNlckxvZ2luKSB7XG4gICAgICAgICAgICBpZiAodXNlckxvZ2luLm1hTmd1b2lIb2MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0UGFnZVVzZXJJbmZvKHVzZXJJZHM6IHN0cmluZyk6IFByb21pc2U8QmFzaWNVc2VySW5mb1tdPiB7XG4gICAgICAgIGlmICghdXNlcklkcyB8fCB1c2VySWRzID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKDxCYXNpY1VzZXJJbmZvW10+W10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlVTRVJfSU5GT19LRVkpO1xuICAgICAgICBjb25zdCB1c2VySW5mb3MgPSA8QmFzaWNVc2VySW5mb1tdPkpTT04ucGFyc2Uoc3RvcmFnZUl0ZW0pO1xuXG4gICAgICAgIC8vIGNvbnN0IHVzZXJzID0gdXNlckluZm9zID8gdXNlckluZm9zLmZpbHRlcihpdGVtID0+IHVzZXJJZHMuaW5kZXhPZihgLCR7aXRlbS5pZH0sYCkgPiAtMSkgOiBudWxsO1xuICAgICAgICBjb25zdCBjaGVjayA9IHVzZXJJbmZvcyA/IHVzZXJJZHMuaW5kZXhPZih1c2VySW5mb3NbJ2lkJ10pID4gLTEgOiBudWxsO1xuICAgICAgICBpZiAoY2hlY2spIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiByZXNvbHZlKHVzZXJJbmZvcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdlVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0UGFnZWRgO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtRmlsdGVyID0ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdpbicsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1c2VySWRzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goaXRlbUZpbHRlcik7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHM6ICcnLFxuICAgICAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiAxMDAwMFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzb3J0czogW10sXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IGZpbHRlcnNcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwsIGdyaWRJbmZvKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxuICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKHJlcHNvbnNlID0+IDxCYXNpY1VzZXJJbmZvW10+cmVwc29uc2UuZGF0YSlcbiAgICAgICAgICAgICAgICApLnRvUHJvbWlzZSgpLnRoZW4oc3VjY2VzcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSg8QmFzaWNVc2VySW5mb1tdPltdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlVXNlcihpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vUmVtb3ZlVXNlci8ke2lkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHREZWxldGUodXJsKTtcbiAgICB9XG5cbiAgICBtb2RpZnlVc2VySW5mbyhpZDogc3RyaW5nLCB1c2VySW5mbzogYW55KSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vTW9kaWZ5VXNlckluZm8vJHtpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UHV0KHVybCwgdXNlckluZm8pO1xuICAgIH1cblxuICAgIGNoYW5nZUZpcnN0VGltZUxvZ2luKHVzZXJJZCkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NoYW5nZUZpcnN0VGltZUxvZ2luLyR7dXNlcklkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBnZXRNb2RlbFNjaGVtYXMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnY29kZScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ03DoycsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdNw6MnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTcOjJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnaWQnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZW1haWwnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdFbWFpbCcsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdFbWFpbCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdFbWFpbCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZEhvY1ZpZW4nLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdI4buNIHbDoCB0w6puJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSOG7jSB2w6AgdMOqbicsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdmdWxsTmFtZU5ldycsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnSOG7jSB2w6AgdMOqbicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdI4buNIHbDoCB0w6puJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2RvYicsXG4gICAgICAgICAgICAgICAgbmFtZTogJ05nw6B5IHNpbmgnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnTmfDoHkgc2luaCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdOZ8OgeSBzaW5oJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2RhdGUnXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdzb3VyY2UnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdMb+G6oWkgdMOgaSBraG/huqNuJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ0xv4bqhaSB0w6BpIGtob+G6o24nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTG/huqFpIHTDoGkga2hv4bqjbicsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdwaG9uZU51bWJlcicsXG4gICAgICAgICAgICAgICAgbmFtZTogJ1Phu5EgxJFp4buHbiB0aG/huqFpJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ1Phu5EgxJFp4buHbiB0aG/huqFpJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1Phu5EgxJFp4buHbiB0aG/huqFpJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2RvblZpQ2h1Y1Z1U3RyJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnxJDGoW4gduG7iyAtIENo4bupYyB24bulJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ8SQxqFuIHbhu4sgLSBDaOG7qWMgduG7pScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICfEkMahbiB24buLIC0gQ2jhu6ljIHbhu6UnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXRDb2x1bW5TY2hlbWFCYXNlKGlzSW5Vc2VyTGlzdCA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgY29scyA9IFtcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTUwcHgnLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVTZWxlY3Q6IGlzSW5Vc2VyTGlzdCxcbiAgICAgICAgICAgICAgICBpc1Bpbm5lZDogdHJ1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdmdWxsTmFtZU5ldycsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVNlbGVjdDogaXNJblVzZXJMaXN0LFxuICAgICAgICAgICAgICAgIHZpc2libGU6IGlzSW5Vc2VyTGlzdCxcbiAgICAgICAgICAgICAgICBpc1Bpbm5lZDogdHJ1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkb2InLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZGF0ZScsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMTBweCcsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVNlbGVjdDogaXNJblVzZXJMaXN0LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdlbWFpbCcsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMjBweCcsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVNlbGVjdDogaXNJblVzZXJMaXN0XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3Bob25lTnVtYmVyJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzE0MHB4JyxcbiAgICAgICAgICAgICAgICBpbmNsdWRlU2VsZWN0OiBpc0luVXNlckxpc3RcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgLy8gICAgIGZpZWxkOiAnZG9uVmlDaHVjVnVTdHInLFxuICAgICAgICAgICAgLy8gICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgIC8vICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgIC8vICAgICBpbmNsdWRlU2VsZWN0OiBmYWxzZSxcbiAgICAgICAgICAgIC8vICAgICB3aWR0aDogJzI1MHB4JyxcbiAgICAgICAgICAgIC8vIH0pXG4gICAgICAgIF07XG4gICAgICAgIGlmICghaXNJblVzZXJMaXN0KSB7XG4gICAgICAgICAgICBjb2xzLnNwbGljZSgwLCAwLFxuICAgICAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdpZEhvY1ZpZW4nLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlU2VsZWN0OiAhaXNJblVzZXJMaXN0LFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhaXNJblVzZXJMaXN0LFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6ICdmdWxsTmFtZU5ldycsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkUGx1czogJ2NvZGUsZG9iLGVtYWlsLHBob25lTnVtYmVyLGxzdFRlbkRvblZpLGxzdFRlbkNodWNWdScsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93OiAocm93SXRlbSwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93SXRlbS5jb2RlID0gZGF0YS5jb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93SXRlbS5kb2IgPSBkYXRhLmRvYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0l0ZW0uZW1haWwgPSBkYXRhLmVtYWlsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93SXRlbS5waG9uZU51bWJlciA9IGRhdGEucGhvbmVOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dJdGVtLnBob25lTnVtYmVyID0gZGF0YS5waG9uZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0l0ZW0ubHN0VGVuRG9uVmkgPSBkYXRhLmxzdFRlbkRvblZpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93SXRlbS5sc3RUZW5DaHVjVnUgPSBkYXRhLmxzdFRlbkNodWNWdTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29scztcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGVQYXNzd29yZChwYXNzd29yZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vVmFsaWRhdGVQYXNzd29yZC8/cGFzc3dvcmQ9JHtwYXNzd29yZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxufVxuIl19
865
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL3VzZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHeEUsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixD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TSxZQUFZLENBQUMsUUFBZ0I7UUFDaEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxpQkFBaUIsUUFBUSxFQUFFLENBQUM7UUFDMUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDTSxZQUFZLENBQUMsSUFBSTtRQUNwQixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLGVBQWUsQ0FBQztRQUM5QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDTSxnQkFBZ0IsQ0FBQyxJQUFJO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsbUJBQW1CLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDOzs7O1lBNTdCSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQTNCUSxVQUFVO1lBQ0UsUUFBUTtZQWtCcEIsbUJBQW1CO1lBSm5CLGFBQWE7WUFiYixZQUFZO1lBa0JaLGNBQWM7WUFGZCx1QkFBdUI7WUFadkIseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XG5pbXBvcnQgKiBhcyBKV1RfIGZyb20gJ2p3dC1kZWNvZGUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCByZXRyeSwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9hcHBsaWNhdGlvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29sdW1uU2NoZW1hQmFzZSwgTW9kZWxTY2hlbWEgfSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlncy9tb2R1bGUtY29uZmlnJztcbmltcG9ydCB7IEJhc2ljVXNlckluZm8gfSBmcm9tICcuLi9tb2RlbHMvYmFzaWMtdXNlci1pbmZvJztcbmltcG9ydCB7IEZpbHRlciwgR3JpZEluZm8gfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFBhZ2VPcHRpb25CYXNlIH0gZnJvbSAnLi4vbW9kZWxzL3BhZ2Utb3B0aW9uJztcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XG5pbXBvcnQgeyBUblVzZXIsIFVzZXJQdWJsaWNJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL3RuLXVzZXInO1xuaW1wb3J0IHsgQXV0aGVuU2VydmljZSB9IGZyb20gJy4vYXV0aGVuLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBFeGNlcHRpb25IYW5kbGVyU2VydmljZSB9IGZyb20gJy4vZXhjZXB0aW9uLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuL3NpZ25hbHIuc2VydmljZSc7XG5cbi8vIGZpeCBmb3IgcHJvZCBidWlsZFxuY29uc3QgSldUID0gSldUXztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcbiAgICByZWFkb25seSBVU0VSX0lORk9fS0VZID0gJ3VzZXJfaW5mbyc7XG4gICAgcmVhZG9ubHkgQ1VSUkVOVF9VU0VSX0tFWSA9ICdjdXJyZW50X3VzZXJfaW5mbyc7XG4gICAgcmVhZG9ubHkgQUNDRVNTX1RPS0VOX0tFWSA9ICdhY2Nlc3NfdG9rZW4nO1xuICAgIHJlYWRvbmx5IFJFVFJZX0NPVU5UOiBudW1iZXIgPSAwO1xuICAgIHJlYWRvbmx5IFJFUExBWV9DT1VOVDogbnVtYmVyID0gMTA7XG4gICAgcmVhZG9ubHkgREVGQVVMVF9BVkFUQVJfTUFMRTtcbiAgICByZWFkb25seSBERUZBVUxUX0FWQVRBUl9GRU1BTEU7XG4gICAgcmVhZG9ubHkgb3JnYW5pemF0aW9uRW5kcG9pbnQ7XG4gICAgcmVhZG9ubHkgX21vZHVsZUNvbmZpZzogTW9kdWxlQ29uZmlnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2F1dGhlblNlcnZpY2U6IEF1dGhlblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX29hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9zaWduYWxyU2VydmljZTogU2lnbmFsUlNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2V4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlOiBFeGNlcHRpb25IYW5kbGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfYXBwbGljYXRpb25Db250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGh0dHAsIGluamVjdG9yLCBgJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4udXNlck9yZ0VuZHBvaW50fS8ke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaVZlcnNpb259L3VzZXJgKTtcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi51c2VyT3JnRW5kcG9pbnQ7XG5cbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHRoaXMuc2VydmljZVVyaSA9IHRoaXMuZ2V0U2VydmljZVVybCgpO1xuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvbkVuZHBvaW50ID0gdGhpcy5nZXRTZXJ2aWNlVXJsKCk7XG5cbiAgICAgICAgdGhpcy5ERUZBVUxUX0FWQVRBUl9NQUxFID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4uZGVmYXVsdE1hbGVBdmF0YXI7XG4gICAgICAgIHRoaXMuREVGQVVMVF9BVkFUQVJfRkVNQUxFID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4uZGVmYXVsdEZlbWFsZUF2YXRhcjtcblxuICAgICAgICBjb25zdCByb290Q29udGV4dFN1YiA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5yb290Q29udGV4dExvYWRlZC5zdWJzY3JpYmUocnMxID0+IHtcbiAgICAgICAgICAgIGlmIChyczEpIHtcbiAgICAgICAgICAgICAgICAvLyBiaW5kaW5nIGV2ZW50IHVzZXIgY2hhbmdlXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfSU5GT19DSEFOR0VELCBycyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DVVJSRU5UX1VTRVJfS0VZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVDdXJyZW50VXNlcigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByb290Q29udGV4dFN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZS5zdGFydChudWxsLCAnVVNFUl9JTkZPX0VESVRFRCcsIGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVVc2VySW5mb0NoYW5nZShkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZXJ2aWNlVXJsKCkge1xuICAgICAgICBpZiAodGhpcy5pc1VzZU9sZE9yZ2FuaXphdGlvbigpKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VyT2xkT3JnYW5pemF0aW9uID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbi5vcmdhbml6YXRpb25FbmRwb2ludDtcbiAgICAgICAgICAgIHJldHVybiBgJHt1c2VyT2xkT3JnYW5pemF0aW9ufS91c2VyYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJPcmdFbmRwb2ludCA9IHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4udXNlck9yZ0VuZHBvaW50O1xuICAgICAgICAgICAgcmV0dXJuIGAke3VzZXJPcmdFbmRwb2ludH0vJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vdXNlcmA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVXNlT2xkT3JnYW5pemF0aW9uKCkge1xuICAgICAgICBjb25zdCB1c2VPbGRPcmdhbml6YXRpb24gPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQudXNlT2xkT3JnYW5pemF0aW9uO1xuICAgICAgICBpZiAodXNlT2xkT3JnYW5pemF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0RnVsbENhbkJvTGFiZWwoaXRlbSwgZ2V0RGlzcGxheU5hbWUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCB0ZW5Eb25WaSA9IGl0ZW0ubHN0VGVuRG9uVmkgJiYgaXRlbS5sc3RUZW5Eb25WaS5sZW5ndGggPiAwID8gaXRlbS5sc3RUZW5Eb25WaS5zcGxpdCgnLCcpWzBdIDogJyc7XG4gICAgICAgIGxldCBsYWJlbCA9IGdldERpc3BsYXlOYW1lICYmIGl0ZW0uZGlzcGxheU5hbWUgPyBpdGVtLmRpc3BsYXlOYW1lIDogdGhpcy5nZXRVc2VyTmFtZShpdGVtKTtcbiAgICAgICAgbGFiZWwgPSAoaXRlbS5tYUNodWNWdSA/IGAke2l0ZW0ubWFDaHVjVnV9LiBgIDogJycpICsgYCR7bGFiZWx9YCArICh0ZW5Eb25WaSA/IGAgLSAke3RlbkRvblZpfWAgOiAnJyk7XG4gICAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9XG5cbiAgICBnZXRBbGxXaXRoSW5mbyhmaWx0ZXJzOiBGaWx0ZXJbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhQ3VzdG9tUm91dGUoJ1dpdGhJbmZvJywgZmlsdGVycyk7XG4gICAgfVxuXG4gICAgZ2V0UGFnZVdpdGhJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCAnV2l0aEluZm8nKTtcbiAgICB9XG5cbiAgICBnZXRJbmZvKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChgJHt0aGlzLnNlcnZpY2VVcml9L0dldEluZm8vJHtpZH1gKTtcbiAgICB9XG5cbiAgICBnZXRJbmZvRm9yV29ya2Zsb3coaWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0SW5mb0ZvcldvcmtmbG93LyR7aWR9YCk7XG4gICAgfVxuXG4gICAgZ2V0Q2xhaW0oa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IEpXVC5kZWZhdWx0KHRoaXMuX29hdXRoU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpKTtcbiAgICAgICAgcmV0dXJuIGRlY29kZWRba2V5XTtcbiAgICB9XG5cbiAgICBnZXRKd3REZWNvZGVkKCkge1xuICAgICAgICByZXR1cm4gSldULmRlZmF1bHQodGhpcy5fb2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCkpO1xuICAgIH1cblxuICAgIGhhbmRsZVVzZXJJbmZvQ2hhbmdlKGRhdGEpIHtcbiAgICAgICAgbGV0IGRhdGFPYmo7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZGF0YU9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5mb1VzZXIgPSBKU09OLnBhcnNlKGRhdGFPYmoubWVzc2FnZS5jb250ZW50KTtcbiAgICAgICAgaWYgKGluZm9Vc2VyLklkKSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlVTRVJfSU5GT19LRVkgKyAnXycgKyBpbmZvVXNlci5JZCk7XG4gICAgICAgICAgICB0aGlzLmdldEJhc2ljVXNlckluZm8oaW5mb1VzZXIuSWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Rm9yQXV0b0NvbXBsZXRlKGtleTogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEZvckF1dG9Db21wbGV0ZT9rZXk9JHtrZXl9YDtcblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZUN1cnJlbnRVc2VyKCkge1xuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5nZXRVc2VySW5mb0Zyb21Mb2NhbEFuZEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgIGlmICh1c2VyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmRhdGEuY3VycmVudFVzZXIgPSB1c2VyO1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZmlyZVJlcGxheUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfTE9BREVELCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5yZXBsYXlTdWJzY3JpYmVPbmNlKENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfUkVBRFksIHJzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0VGltZUxvZ2luID0gcnMgPz8gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMuX29hdXRoU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgY29uc3QgZGVjb2RlZDogYW55ID0gSldULmRlZmF1bHQoYWNjZXNzVG9rZW4pO1xuICAgICAgICAgICAgLy8gQ2h1eeG7g24gxJHhu5VpIHNhbmcgZMO5bmcgaW5zdGFuY2VJZCBu4bq/dSDEkcSDbmcgbmjhuq1wIGLhurFuZyBpZGVudGl0eXY0IG5oxrBuZyBwaOG6o2kgc+G7rSBk4bulbmcgYmFzZSB1c2VyT3JndjVcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJZCA9IHRoaXMuZ2V0VXNlcklkRnJvbVRva2VuKGRlY29kZWQpO1xuICAgICAgICAgICAgdGhpcy5nZXRTdGFmZkluZm8odXNlcklkKS50aGVuKHJzMSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkVXNlciA9IHRoaXMubWFwVXNlckluZm8oZGVjb2RlZCwgcnMxLCB1c2VySWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJQdWJsaWNJbmZvID0gdGhpcy5nZXRVc2VyUHVibGljSW5mbyhtYXBwZWRVc2VyKTtcblxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ1VSUkVOVF9VU0VSX0tFWSwgSlNPTi5zdHJpbmdpZnkodXNlclB1YmxpY0luZm8pKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5kYXRhLmN1cnJlbnRVc2VyID0gbWFwcGVkVXNlcjtcblxuICAgICAgICAgICAgICAgIGlmIChmaXJzdFRpbWVMb2dpbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuTkVFRF9DTEVBUl9QRVJNSVNTSU9OX0NBQ0hFKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5maXJlUmVwbGF5RXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9MT0FERUQsIHRydWUpO1xuICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VXNlckluZm9Gcm9tTG9jYWxBbmRBY2Nlc3NUb2tlbigpIHtcbiAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0VXNlckluZm9Gcm9tTG9jYWwoKTtcbiAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJQdWJsaWNJbmZvID0gdGhpcy5nZXRVc2VyUHVibGljSW5mbyh1c2VyKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5fY29tbW9uU2VydmljZS5pc1ZhbGlkR3VpZCh1c2VyLnVzZXJJZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmxvZ291dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3VXNlcklkID0gdXNlci51c2VySWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcklkID0gTnVtYmVyKHJhd1VzZXJJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTih1c2VySWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXIub3JpZ2luSWQgPSB1c2VyLnVzZXJJZDtcbiAgICAgICAgICAgICAgICAgICAgdXNlci51c2VySWQgPSB1c2VyLmluc3RhbmNlaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ1VSUkVOVF9VU0VSX0tFWSwgSlNPTi5zdHJpbmdpZnkodXNlclB1YmxpY0luZm8pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVzZXJJZEZyb21Ub2tlbihkZWNvZGVkVG9rZW4pIHtcbiAgICAgICAgY29uc3QgcmF3VXNlcklkID0gZGVjb2RlZFRva2VuLnN1YjtcbiAgICAgICAgY29uc3QgdXNlcklkID0gTnVtYmVyKHJhd1VzZXJJZCk7XG4gICAgICAgIHJldHVybiBpc05hTih1c2VySWQpID8gcmF3VXNlcklkIDogZGVjb2RlZFRva2VuLmluc3RhbmNlaWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVc2VySW5mb0Zyb21Mb2NhbCgpIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNVUlJFTlRfVVNFUl9LRVkpO1xuICAgICAgICBjb25zdCBwdWJsaWNJbmZvOiBVc2VyUHVibGljSW5mbyA9IHN0b3JhZ2VJdGVtID8gSlNPTi5wYXJzZShzdG9yYWdlSXRlbSkgOiBudWxsO1xuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQUNDRVNTX1RPS0VOX0tFWSk7XG4gICAgICAgIGNvbnN0IHRva2VuSW5mbzogVG5Vc2VyID0gYWNjZXNzVG9rZW4gPyBKV1QuZGVmYXVsdChhY2Nlc3NUb2tlbikgOiBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcy5tZXJnZVB1YmxpY0FuZFByaXZhdGVJbmZvKHB1YmxpY0luZm8sIHRva2VuSW5mbyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZXJnZVB1YmxpY0FuZFByaXZhdGVJbmZvKHVzZXJQdWJsaWNJbmZvOiBVc2VyUHVibGljSW5mbywgaW5mb0Zyb21Ub2tlbjogVG5Vc2VyKSB7XG4gICAgICAgIGlmICh1c2VyUHVibGljSW5mbyA9PSBudWxsIHx8IGluZm9Gcm9tVG9rZW4gPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0OiBUblVzZXIgPSBuZXcgVG5Vc2VyKCk7XG4gICAgICAgIHRoaXMubWVyZ2VQdWJsaWNJbmZvKHJlc3VsdCwgdXNlclB1YmxpY0luZm8pO1xuICAgICAgICB0aGlzLm1lcmdlVG9rZW5JbmZvKHJlc3VsdCwgaW5mb0Zyb21Ub2tlbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZXJnZVRva2VuSW5mbyhyZXN1bHQ6IFRuVXNlciwgaW5mb0Zyb21Ub2tlbjogVG5Vc2VyKSB7XG4gICAgICAgIC8vIG1hcHBpbmcgbW90IHNvIHRydW9uZyB0cm9uZyB0b2tlbiBjbyBrZXkgIT0gdHJvbmcgVG5Vc2VyXG4gICAgICAgIGNvbnN0IGN1c3RvbVByb2Nlc3MgPSAoZGVzdGluYXRpb24sIG9yaWdpbmFsLCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2Z1bGxuYW1lJykge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmZ1bGxOYW1lID0gb3JpZ2luYWxba2V5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdzdWInKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24ub3JpZ2luID0gb3JpZ2luYWxba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NvbW1vblNlcnZpY2UuaXNWYWxpZEd1aWQoZGVzdGluYXRpb24udXNlcklkKSkge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi51c2VySWQgPSB0aGlzLmdldFVzZXJJZEZyb21Ub2tlbihpbmZvRnJvbVRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAndXNlcm5hbWUnICYmIChkZXN0aW5hdGlvbi51c2VyTmFtZSA9PSBudWxsIHx8IGRlc3RpbmF0aW9uLnVzZXJOYW1lID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi51c2VyTmFtZSA9IG9yaWdpbmFsW2tleV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYWRkUHJvcGVydHkocmVzdWx0LCBpbmZvRnJvbVRva2VuLCBjdXN0b21Qcm9jZXNzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1lcmdlUHVibGljSW5mbyhyZXN1bHQ6IFRuVXNlciwgdXNlclB1YmxpY0luZm86IFVzZXJQdWJsaWNJbmZvKSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbVByb2Nlc3MgPSAoZGVzdGluYXRpb24sIG9yaWdpbmFsLCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2F2YXRhcicgJiYgKG9yaWdpbmFsLmF2YXRhciA9PSBudWxsIHx8IG9yaWdpbmFsLmF2YXRhciA9PT0gJycpKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYXZhdGFyID0gdGhpcy5nZXRVc2VyQXZhdGFyKG9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eShyZXN1bHQsIHVzZXJQdWJsaWNJbmZvLCBjdXN0b21Qcm9jZXNzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBmdW5jdGlvbiBkZSBtYXAgcHJvcGVydHkgdHUgZGVzdGluYXRpb24gPT4gb3JpZ2luYWxcbiAgICAgKiBAcGFyYW0gZGVzdGluYXRpb24gb2JqZWN0IG11b24gbWFwIHNhbmdcbiAgICAgKiBAcGFyYW0gb3JpZ2luYWwgb2JqZWN0IG11b24gbWFwIHR1XG4gICAgICogQHBhcmFtIGN1c3RvbVByb2Nlc3MgeHUgbHkga2hhYyBsdW9uZywgdHJhIHZlIHRydWUgbmV1IHRpbSB0aGF5IGtleSA9PiBoYW0gYWRkUHJvcGVydHkgc2Uga2hvbmcgeHUgbHkgZ2kgdGllcFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGRQcm9wZXJ0eShkZXN0aW5hdGlvbiwgb3JpZ2luYWwsIGN1c3RvbVByb2Nlc3M6IChkZXN0aW5hdGlvbiwgb3JpZ2luYWwsIGtleTogc3RyaW5nKSA9PiBib29sZWFuID0gbnVsbCkge1xuICAgICAgICBpZiAoIWN1c3RvbVByb2Nlc3MpIHtcbiAgICAgICAgICAgIGN1c3RvbVByb2Nlc3MgPSAoZGVzdGluYXRpb24sIG9yaWdpbmFsLCBrZXkpID0+IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9yaWdpbmFsKSB7XG4gICAgICAgICAgICBpZiAoY3VzdG9tUHJvY2VzcyhkZXN0aW5hdGlvbiwgb3JpZ2luYWwsIGtleSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcmlnaW5hbFtrZXldID09IG51bGwgfHwgb3JpZ2luYWxba2V5XSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlc3RpbmF0aW9uW2tleV0gPSBvcmlnaW5hbFtrZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVc2VyUHVibGljSW5mbyh1c2VyOiBUblVzZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVc2VyUHVibGljSW5mbyh7XG4gICAgICAgICAgICB1c2VySWQ6IHVzZXIudXNlcklkLFxuICAgICAgICAgICAgZnVsbE5hbWU6IHVzZXIuZnVsbE5hbWUsXG4gICAgICAgICAgICBmaXJzdE5hbWU6IHVzZXIuZmlyc3ROYW1lLFxuICAgICAgICAgICAgbGFzdE5hbWU6IHVzZXIubGFzdE5hbWUsXG4gICAgICAgICAgICBpZE9yZ2FuaXphdGlvbjogdXNlci5pZE9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIGdlbmRlcjogdXNlci5nZW5kZXIsXG4gICAgICAgICAgICBvcmlnaW5JZDogdXNlci5vcmlnaW5JZCxcbiAgICAgICAgICAgIHVzZXJOYW1lOiB1c2VyLnVzZXJOYW1lLFxuICAgICAgICAgICAgbWFDYW5CbzogdXNlci5tYUNhbkJvLFxuICAgICAgICAgICAgbWFOZ3VvaUhvYzogdXNlci5tYU5ndW9pSG9jLFxuICAgICAgICAgICAgYXZhdGFyOiB1c2VyLmF2YXRhcixcbiAgICAgICAgICAgIGlkQ2FuQm86IHVzZXIuaWRDYW5CbyxcbiAgICAgICAgICAgIGluc3RhbmNlaWQ6IHVzZXIuaW5zdGFuY2VpZCxcbiAgICAgICAgICAgIGlzRmlyc3RMb2dpbjogdXNlci5pc0ZpcnN0TG9naW4sXG4gICAgICAgICAgICBpc0V4cGlyYXRpb25QYXNzd29yZDogdXNlci5pc0V4cGlyYXRpb25QYXNzd29yZCxcbiAgICAgICAgICAgIHNvdXJjZTogdXNlci5zb3VyY2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBVc2VySW5mbyh0b2tlbkluZm86IGFueSwgYWRkaXRpb25hbEluZm86IFRuVXNlciwgdXNlcklkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdXNlciA9IG5ldyBUblVzZXIoKTtcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxJbmZvKSB7XG4gICAgICAgICAgICB1c2VyLnBvc2l0aW9uID0gYWRkaXRpb25hbEluZm8ucG9zaXRpb247XG4gICAgICAgICAgICB1c2VyLnJvbGUgPSBhZGRpdGlvbmFsSW5mby5yb2xlO1xuICAgICAgICAgICAgdXNlci5wb3NpdGlvbkNvZGUgPSBhZGRpdGlvbmFsSW5mby5wb3NpdGlvbkNvZGU7XG4gICAgICAgICAgICB1c2VyLmZpcnN0TmFtZSA9IGFkZGl0aW9uYWxJbmZvLmZpcnN0TmFtZSA/PyAnJztcbiAgICAgICAgICAgIHVzZXIubGFzdE5hbWUgPSBhZGRpdGlvbmFsSW5mby5sYXN0TmFtZSA/PyAnJztcbiAgICAgICAgICAgIHVzZXIuZ2VuZGVyID0gYWRkaXRpb25hbEluZm8uZ2VuZGVyO1xuICAgICAgICAgICAgdXNlci5hdmF0YXIgPSBhZGRpdGlvbmFsSW5mby5hdmF0YXI7XG4gICAgICAgICAgICB1c2VyLmlzRmlyc3RMb2dpbiA9IGFkZGl0aW9uYWxJbmZvLmlzRmlyc3RMb2dpbjtcbiAgICAgICAgICAgIHVzZXIuaXNFeHBpcmF0aW9uUGFzc3dvcmQgPSBhZGRpdGlvbmFsSW5mby5pc0V4cGlyYXRpb25QYXNzd29yZDtcbiAgICAgICAgICAgIHVzZXIuc291cmNlID0gYWRkaXRpb25hbEluZm8uc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbkluZm8pIHtcbiAgICAgICAgICAgIHVzZXIuZnVsbE5hbWUgPSB0b2tlbkluZm8uZnVsbG5hbWU7XG4gICAgICAgICAgICB1c2VyLm9yaWdpbklkID0gdG9rZW5JbmZvLnN1YjtcbiAgICAgICAgICAgIHVzZXIuaXNzdXBlcnVzZXIgPSB0b2tlbkluZm8uaXNzdXBlcnVzZXI7XG4gICAgICAgICAgICB1c2VyLmlzYWRtaW4gPSB0b2tlbkluZm8uaXNhZG1pbjtcbiAgICAgICAgICAgIHVzZXIudXNlck5hbWUgPSB0b2tlbkluZm8udXNlcm5hbWU7XG4gICAgICAgICAgICB1c2VyLnVzZXJJZCA9IHVzZXJJZDtcbiAgICAgICAgICAgIHVzZXIuaWRPcmdhbml6YXRpb24gPSB0b2tlbkluZm8uaWRPcmdhbml6YXRpb247XG4gICAgICAgICAgICB1c2VyLm1hQ2FuQm8gPSB0b2tlbkluZm8ubWFDYW5CbztcbiAgICAgICAgICAgIHVzZXIubWFOZ3VvaUhvYyA9IHRva2VuSW5mby5tYU5ndW9pSG9jO1xuICAgICAgICAgICAgdXNlci5pZENhbkJvID0gdG9rZW5JbmZvLmlkQ2FuQm87XG4gICAgICAgICAgICB1c2VyLmluc3RhbmNlaWQgPSB0b2tlbkluZm8uaW5zdGFuY2VpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBnZXRQcm9maWxlSW5mbygpIHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgncHJvZmlsZXMnKSk7XG4gICAgfVxuXG4gICAgaXNLaG9hVmllbihpZExvYWlEb25WaSkge1xuICAgICAgICByZXR1cm4gaWRMb2FpRG9uVmkgPT0gJzIwJyB8fCBpZExvYWlEb25WaSA9PSAnNjAnO1xuICAgIH1cblxuICAgIGlzQm9Nb24oaWRMb2FpRG9uVmkpIHtcbiAgICAgICAgcmV0dXJuIGlkTG9haURvblZpID09ICcyMSc7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudFVzZXIoKTogVG5Vc2VyIHtcbiAgICAgICAgbGV0IHVzZXIgPSA8VG5Vc2VyPih0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5kYXRhLmN1cnJlbnRVc2VyKTtcbiAgICAgICAgaWYgKHVzZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICAgIH1cbiAgICAgICAgdXNlciA9IHRoaXMuZ2V0VXNlckluZm9Gcm9tTG9jYWxBbmRBY2Nlc3NUb2tlbigpO1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5kYXRhLmN1cnJlbnRVc2VyID0gdXNlcjtcbiAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgZ2V0VXNlck5hbWUoaXRlbSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtLmZ1bGxOYW1lTmV3XG4gICAgICAgICAgICA/IGAke2l0ZW0uZnVsbE5hbWVOZXd9YFxuICAgICAgICAgICAgOiBgJHtpdGVtLmxhc3ROYW1lfSAke2l0ZW0uZmlzdE5hbWV9YDtcbiAgICB9XG5cbiAgICBnZXRVc2VySWRDb21iaW5lKCkge1xuICAgICAgICBjb25zdCByYXdVc2VySWQgPSB0aGlzLmdldElkKCk7XG4gICAgICAgIGNvbnN0IHVzZXJJZCA9IE51bWJlcihyYXdVc2VySWQpO1xuICAgICAgICBsZXQgdXNlcklkUmVzdWx0ID0gJyc7XG4gICAgICAgIGlmICghaXNOYU4odXNlcklkKSkge1xuICAgICAgICAgICAgdXNlcklkUmVzdWx0ID0gdGhpcy5nZXRJbnN0YW5jZUlkKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1c2VySWRSZXN1bHQgPSByYXdVc2VySWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVzZXJJZFJlc3VsdC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGdldFN0YWZmSW5mbyh1c2VySWQpOiBQcm9taXNlPFRuVXNlcj4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0ZvckxvZ2luYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcbiAgICAgICAgICAgIC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHVybClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpLFxuICAgICAgICAgICAgICAgIG1hcChycyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gbmV3IFRuVXNlcig8VG5Vc2VyPntcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmF0YXI6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZGVyOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25Db2RlOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlaWQ6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3ROYW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3ROYW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRmlyc3RMb2dpbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0V4cGlyYXRpb25QYXNzd29yZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IDAsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocnMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3AuZnVsbE5hbWUgPSBycy5kYXRhLmZ1bGxOYW1lID8/ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3Aucm9sZSA9IHJzLmRhdGEucm9sZSA/PyAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wLmF2YXRhciA9IHJzLmRhdGEuYXZhdGFyID8/ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3AuZ2VuZGVyID0gcnMuZGF0YS5nZW5kZXIgPz8gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wLnBvc2l0aW9uQ29kZSA9IHJzLmRhdGEucG9zaXRpb25Db2RlID8/ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3AuaW5zdGFuY2VpZCA9IHJzLmRhdGEuaW5zdGFuY2VpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wLmZpcnN0TmFtZSA9IHJzLmRhdGEuZmlyc3ROYW1lID8/ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3AubGFzdE5hbWUgPSBycy5kYXRhLmxhc3ROYW1lID8/ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3AuaXNGaXJzdExvZ2luID0gcnMuZGF0YS5pc0ZpcnN0TG9naW4gPz8gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcC5pc0V4cGlyYXRpb25QYXNzd29yZCA9IHJzLmRhdGEuaXNFeHBpcmF0aW9uUGFzc3dvcmQgPz8gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcC5zb3VyY2UgPSBycy5kYXRhLnNvdXJjZSA/PyAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9wLmF2YXRhciA9IHRoaXMuZ2V0VXNlckF2YXRhcihvcCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcDtcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVzZXJBdmF0YXIodXNlcjogVG5Vc2VyKSB7XG4gICAgICAgIGlmICghdXNlci5hdmF0YXIgfHwgdXNlci5hdmF0YXIgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdXNlci5nZW5kZXIgPT0gMCA/IHRoaXMuREVGQVVMVF9BVkFUQVJfTUFMRSA6IHRoaXMuREVGQVVMVF9BVkFUQVJfRkVNQUxFO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1c2VyLmF2YXRhcjtcbiAgICB9XG5cbiAgICBnZXRJZCgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ1VSUkVOVF9VU0VSX0tFWSk7XG4gICAgICAgIGNvbnN0IHVzZXIgPSA8VG5Vc2VyPkpTT04ucGFyc2Uoc3RvcmFnZUl0ZW0pO1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgcmV0dXJuIHVzZXIudXNlcklkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudFVzZXIoKS51c2VySWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJbnN0YW5jZUlkKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DVVJSRU5UX1VTRVJfS0VZKTtcbiAgICAgICAgY29uc3QgdXNlciA9IDxUblVzZXI+SlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XG4gICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gdXNlci5pbnN0YW5jZWlkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudFVzZXIoKS5pbnN0YW5jZWlkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbmxpbmUoZm9ybURhdGE6IEZvcm1EYXRhKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L3JlZ2lzdGVyT25saW5lYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcbiAgICAgICAgICAgIC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGZvcm1EYXRhKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0QmFzaWNVc2VySW5mbyh1c2VySWQ6IG51bWJlcik6IFByb21pc2U8QmFzaWNVc2VySW5mbz4ge1xuXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5VU0VSX0lORk9fS0VZICsgJ18nICsgdXNlcklkKTtcbiAgICAgICAgLy8gY29uc3QgdXNlckluZm9zID0gPEJhc2ljVXNlckluZm9bXT5KU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcbiAgICAgICAgLy8gY29uc3QgdXNlciA9IHVzZXJJbmZvcyA/IHVzZXJJbmZvcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gdXNlcklkKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHVzZXIgPSA8QmFzaWNVc2VySW5mbz5KU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcbiAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiByZXNvbHZlKHVzZXIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZXJJZCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCg8QmFzaWNVc2VySW5mbz57fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodXNlcklkID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEJhc2ljVXNlckluZm8/aWQ9JHt1c2VySWR9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAocmVwc29uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2F2ZSByZXNwb25zZSB0byBsb2NhbCBzdG9yYWdlIGhlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuVVNFUl9JTkZPX0tFWSArICdfJyArIHJlcHNvbnNlLmRhdGEuaWQsIEpTT04uc3RyaW5naWZ5KHJlcHNvbnNlLmRhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8QmFzaWNVc2VySW5mbz5yZXBzb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkudG9Qcm9taXNlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KDxCYXNpY1VzZXJJbmZvPnt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QmFzaWNVc2Vyc0luZm8odXNlcklkczogc3RyaW5nKTogUHJvbWlzZTxCYXNpY1VzZXJJbmZvW10+IHtcbiAgICAgICAgaWYgKCF1c2VySWRzIHx8IHVzZXJJZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoPEJhc2ljVXNlckluZm9bXT5bXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVVNFUl9JTkZPX0tFWSk7XG4gICAgICAgIGNvbnN0IHVzZXJJbmZvcyA9IDxCYXNpY1VzZXJJbmZvW10+SlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XG5cbiAgICAgICAgLy8gY29uc3QgdXNlcnMgPSB1c2VySW5mb3MgPyB1c2VySW5mb3MuZmlsdGVyKGl0ZW0gPT4gdXNlcklkcy5pbmRleE9mKGAsJHtpdGVtLmlkfSxgKSA+IC0xKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gdXNlckluZm9zID8gdXNlcklkcy5pbmRleE9mKHVzZXJJbmZvc1snaWQnXSkgPiAtMSA6IG51bGw7XG4gICAgICAgIGlmIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUodXNlckluZm9zKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRCYXNpY1VzZXJzSW5mbz91c2VySWRzPSR7dXNlcklkc31gO1xuICAgICAgICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxuICAgICAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSksXG4gICAgICAgICAgICAgICAgICAgIG1hcChyZXBzb25zZSA9PiA8QmFzaWNVc2VySW5mb1tdPnJlcHNvbnNlLmRhdGEpXG4gICAgICAgICAgICAgICAgKS50b1Byb21pc2UoKS50aGVuKHN1Y2Nlc3MgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoPEJhc2ljVXNlckluZm9bXT5bXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEjDoG0gZMO5bmcgxJHhu4MgbOG6pXkgdGjDtG5nIHRpbiBjxqEgYuG6o24gbmhp4buBdSBuZ8aw4budaSBkw7luZyBk4buxYSB2w6BvIHVzZXJOYW1lLFxuICAgICAqIGhp4buHbiB04bqhaSBjaMawYSBjw7MgdGjDtG5nIHRpbiB24buBIMSRxqFuIHbhu4sgdsOgIGNo4bupYyB24bulIG5nxrDhu51pIGTDuW5nIMSR4buDIGdp4bqjbSBsb2FkIHbDoCB2w6wgY2jGsGEgZMO5bmcgxJHhur9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJOYW1lXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxCYXNpY1VzZXJJbmZvW10+fVxuICAgICAqL1xuICAgIGdldEJhc2ljVXNlckluZm9CeVVzZXJOYW1lKHVzZXJOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEJhc2ljVXNlckluZm8+IHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlVTRVJfSU5GT19LRVkgKyAnXycgKyB1c2VyTmFtZSk7XG4gICAgICAgIGNvbnN0IHVzZXIgPSA8QmFzaWNVc2VySW5mbz5KU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcbiAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiByZXNvbHZlKHVzZXIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZXJOYW1lID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSg8QmFzaWNVc2VySW5mbz57fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodXNlck5hbWUgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRCYXNpY1VzZXJJbmZvQnlVc2VyTmFtZT91c2VyTmFtZT0ke3VzZXJOYW1lfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oc3ZVcmwpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChyZXBzb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhdmUgcmVzcG9uc2UgdG8gbG9jYWwgc3RvcmFnZSBoZXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuVVNFUl9JTkZPX0tFWSArICdfJyArIHJlcHNvbnNlLmRhdGEudXNlck5hbWUsIEpTT04uc3RyaW5naWZ5KHJlcHNvbnNlLmRhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxCYXNpY1VzZXJJbmZvPnJlcHNvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKS50b1Byb21pc2UoKS50aGVuKHJzcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocnNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSg8YW55Pnt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBIw6BtIGTDuW5nIMSR4buDIGzhuqV5IHRow7RuZyB0aW4gY8ahIGLhuqNuIG5oaeG7gXUgbmfGsOG7nWkgZMO5bmcgZOG7sWEgdsOgbyB1c2VyTmFtZSxcbiAgICAgKiBoaeG7h24gdOG6oWkgY2jGsGEgY8OzIHRow7RuZyB0aW4gduG7gSDEkcahbiB24buLIHbDoCBjaOG7qWMgduG7pSBuZ8aw4budaSBkw7luZyDEkeG7gyBnaeG6o20gbG9hZCB2w6AgdsOsIGNoxrBhIGTDuW5nIMSR4bq/blxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyTmFtZXNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEJhc2ljVXNlckluZm9bXT5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRCYXNpY1VzZXJzSW5mb0J5VXNlck5hbWVzKHVzZXJOYW1lczogc3RyaW5nKTogUHJvbWlzZTxCYXNpY1VzZXJJbmZvW10+IHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlVTRVJfSU5GT19LRVkpO1xuICAgICAgICBjb25zdCB1c2VySW5mb3MgPSA8QmFzaWNVc2VySW5mb1tdPkpTT04ucGFyc2Uoc3RvcmFnZUl0ZW0pO1xuICAgICAgICBjb25zdCBjaGVjayA9IHVzZXJJbmZvcyA/IHVzZXJOYW1lcy5pbmRleE9mKHVzZXJJbmZvc1sndXNlck5hbWUnXSkgPiAtMSA6IG51bGw7XG4gICAgICAgIGlmIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIHVzZXJJbmZvcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN2VXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRCYXNpY1VzZXJzSW5mb0J5VXNlck5hbWVzP3VzZXJOYW1lcz0ke3VzZXJOYW1lc31gO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihzdlVybCkucGlwZShcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSksXG4gICAgICAgICAgICAgICAgbWFwKHJlcHNvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5VU0VSX0lORk9fS0VZICsgJ18nICsgKDxCYXNpY1VzZXJJbmZvW10+cmVwc29uc2UuZGF0YSkubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgudXNlck5hbWUpIHJldHVybiB4LnVzZXJOYW1lO1xuICAgICAgICAgICAgICAgICAgICB9KSwgSlNPTi5zdHJpbmdpZnkocmVwc29uc2UuZGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPEJhc2ljVXNlckluZm9bXT5yZXBzb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpLmNhdGNoKGVyciA9PiBbXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb252ZXJ0TGlzdFVzZXJJZFRvU3RyaW5nKHVzZXJJZHM6IG51bWJlcltdKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHVzZXJJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGAsJHt1c2VySWRzLmpvaW4oJywnKX0sYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJywnO1xuICAgIH1cblxuICAgIGZpbGxCYXNpY1VzZXJJbmZvKGRhdGFTb3VyY2U6IGFueVtdLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGFueVtdIHtcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgLy8gY29uc3QgdXNlcklkID0gaXRlbVtwcm9wZXJ0eU5hbWVdLmlkID8gaXRlbVtwcm9wZXJ0eU5hbWVdLmlkIDogaXRlbVtwcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXNoYWRvd2VkLXZhcmlhYmxlXG4gICAgICAgICAgICAvLyBjb25zdCB1c2VyID0gdXNlcnMuZmluZCh1c2VyID0+IHVzZXIuaWQgPT09IHVzZXJJZCk7XG4gICAgICAgICAgICAvLyBpZiAodXNlcikge1xuICAgICAgICAgICAgLy8gICAgIGl0ZW1bcHJvcGVydHlOYW1lXSA9IHVzZXI7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBkYXRhU291cmNlO1xuICAgIH1cblxuXG4gICAgcmVzdG9yZVBhc3N3b3JkKGl0ZW06IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KGAke3RoaXMuc2VydmljZVVyaX0vcmVzdG9yZVBhc3N3b3JkYCwgaXRlbSlcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGNoYW5nZVBhc3N3b3JkKHVzZXJJZDogc3RyaW5nLCBpdGVtOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG5cbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaGFuZ2VQYXNzd29yZGA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXG4gICAgICAgICAgICAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBpdGVtKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgcmVzZXRQYXNzd29yZChpdGVtOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG5cbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9yZXNldFBhc3N3b3JkYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcbiAgICAgICAgICAgIC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgaXRlbSlcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIEdldHNCeU1hbmFnZXJJZEFycmF5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRMb3dlclN0YWZmc0J5VXNlcklkP3VzZXJJZD0ke2lkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYXBpVXJsKTtcbiAgICB9XG5cbiAgICBtYXJrQXNBZG1pbih1c2VySWQ6IG51bWJlciwgaXNBZG1pbjogYm9vbGVhbikge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L21hcmtBc0FkbWluLyR7dXNlcklkfS8ke2lzQWRtaW59YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcbiAgICAgICAgICAgIC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXNBZG1pbilcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIG1hcmtBc1JlcHJlc2VudCh1c2VySWQ6IG51bWJlciwgaXNSZXByZXNlbnQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L21hcmtBc1JlcHJlc2VudC8ke3VzZXJJZH0vJHtpc1JlcHJlc2VudH1gO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXG4gICAgICAgICAgICAucHV0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIGlzUmVwcmVzZW50KVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0c0J5T3JnYW5pemF0aW9uTGlzdElkKHBhZ2VPcHRpb246IFBhZ2VPcHRpb25CYXNlLCBmdW5HZXROYW1lOiBzdHJpbmcgPSAnJywgb3B0aW9uUGFyYW1ldGVyOiBzdHJpbmcgPSAnJywgZGVmYXVsdFBhcmFtZXRlcjogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG5cbiAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gYD9rZXk9JHtwYWdlT3B0aW9uLnF1ZXJ5fWA7XG5cbiAgICAgICAgaWYgKCFwYWdlT3B0aW9uLm9mZnNldCkge1xuICAgICAgICAgICAgcGFnZU9wdGlvbi5vZmZzZXQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCZvZmZzZXQ9JHtwYWdlT3B0aW9uLm9mZnNldH1gO1xuXG5cbiAgICAgICAgaWYgKCFwYWdlT3B0aW9uLmxpbWl0KSB7XG4gICAgICAgICAgICBwYWdlT3B0aW9uLmxpbWl0ID0gdGhpcy5MSU1JVF9ERUZBVUxUO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAmbGltaXQ9JHtwYWdlT3B0aW9uLmxpbWl0ICsgMX1gO1xuXG5cbiAgICAgICAgaWYgKHBhZ2VPcHRpb24uc29ydEZpZWxkKSB7XG4gICAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJnNvcnRGaWVsZD0ke3BhZ2VPcHRpb24uc29ydEZpZWxkfSZpc0FzYz0ke3BhZ2VPcHRpb24uaXNBc2N9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmYXVsdFBhcmFtZXRlciAhPSAnJykge1xuICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCYke2RlZmF1bHRQYXJhbWV0ZXJ9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9uUGFyYW1ldGVyICE9ICcnKSB7XG4gICAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJiR7b3B0aW9uUGFyYW1ldGVyfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5vcmdhbml6YXRpb25FbmRwb2ludH0ke2Z1bkdldE5hbWV9JHtxdWVyeVN0cmluZ31gO1xuICAgICAgICBpZiAocGFnZU9wdGlvbi5pc0lnbm9yZUNsaWVudENhY2hlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRJZ25vcmVDbGllbnRDYWNoZShhcGlVcmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChhcGlVcmwpO1xuICAgIH1cblxuICAgIGdldHNCeU9yZ2FuaXphdGlvbklkKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcsIGtleXdvcmQ/OiBzdHJpbmcsIG9mZnNldD86IG51bWJlciwgbGltaXQ/OiBudW1iZXIpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG5cbiAgICAgICAgaWYgKCFrZXl3b3JkKSB7XG4gICAgICAgICAgICBrZXl3b3JkID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9mZnNldCkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb2Zmc2V0KSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFsaW1pdCkge1xuICAgICAgICAgICAgbGltaXQgPSAxMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0c0J5T3JnYW5pemF0aW9uSWRgXG4gICAgICAgICAgICArIGA/b3JnYW5pemF0aW9uSWQ9JHtvcmdhbml6YXRpb25JZH1gXG4gICAgICAgICAgICArIGAma2V5d29yZD0ke2tleXdvcmR9YFxuICAgICAgICAgICAgKyBgJm9mZnNldD0ke29mZnNldH1gXG4gICAgICAgICAgICArIGAmbGltaXQ9JHtsaW1pdH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGFwaVVybCk7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdEF2YXRhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuREVGQVVMVF9BVkFUQVJfTUFMRTtcbiAgICB9XG5cbiAgICBoYW5kbGVFcnJvcihlcnJvcjogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgY29uc3QgY29tbW9uU2VydmljZSA9IGluamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIGNvbW1vblNlcnZpY2UuaGFuZGxlRXJyb3IoZXJyb3IsIGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBsb2NrVXNlcihpdGVtOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG5cbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9sb2NrVXNlckFjY291bnRgO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxuICAgICAgICAgICAgLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgaXRlbSlcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIHVubG9ja1VzZXIoaXRlbTogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuXG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vdW5sb2NrVXNlckFjY291bnRgO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxuICAgICAgICAgICAgLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgaXRlbSlcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGlzU3VwZXJVc2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZGF0YS5jdXJyZW50VXNlclxuICAgICAgICAgICAgJiYgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZGF0YS5jdXJyZW50VXNlci5pc3N1cGVydXNlciA9PT0gJ1RydWUnO1xuICAgIH1cblxuICAgIGlzQWRtaW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5kYXRhLmN1cnJlbnRVc2VyXG4gICAgICAgICAgICAmJiB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5kYXRhLmN1cnJlbnRVc2VyLmlzYWRtaW4gPT09ICdUcnVlJztcbiAgICB9XG5cbiAgICBpc1ZhbGlkQWNjZXNzVG9rZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpO1xuICAgIH1cblxuICAgIGdldFVzZXJzQnlHcm91cENvZGUoZ3JvdXBDb2RlOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0VXNlcnNCeUdyb3VwQ29kZT9ncm91cENvZGU9JHtncm91cENvZGV9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLl9leGNlcHRpb25IYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0U2VydmljZUVuZHBvaW50KCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZXJ2aWNlVXJpfWA7XG4gICAgfVxuXG4gICAgaXNTaW5oVmllbkFjY291bnQoKSB7XG4gICAgICAgIGNvbnN0IHVzZXJMb2dpbiA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgICAgaWYgKHVzZXJMb2dpbikge1xuICAgICAgICAgICAgaWYgKHVzZXJMb2dpbi5tYU5ndW9pSG9jKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldFBhZ2VVc2VySW5mbyh1c2VySWRzOiBzdHJpbmcpOiBQcm9taXNlPEJhc2ljVXNlckluZm9bXT4ge1xuICAgICAgICBpZiAoIXVzZXJJZHMgfHwgdXNlcklkcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSg8QmFzaWNVc2VySW5mb1tdPltdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5VU0VSX0lORk9fS0VZKTtcbiAgICAgICAgY29uc3QgdXNlckluZm9zID0gPEJhc2ljVXNlckluZm9bXT5KU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcblxuICAgICAgICAvLyBjb25zdCB1c2VycyA9IHVzZXJJbmZvcyA/IHVzZXJJbmZvcy5maWx0ZXIoaXRlbSA9PiB1c2VySWRzLmluZGV4T2YoYCwke2l0ZW0uaWR9LGApID4gLTEpIDogbnVsbDtcbiAgICAgICAgY29uc3QgY2hlY2sgPSB1c2VySW5mb3MgPyB1c2VySWRzLmluZGV4T2YodXNlckluZm9zWydpZCddKSA+IC0xIDogbnVsbDtcbiAgICAgICAgaWYgKGNoZWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gcmVzb2x2ZSh1c2VySW5mb3MpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ZVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBhZ2VkYDtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUZpbHRlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnaW4nLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdXNlcklkc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKGl0ZW1GaWx0ZXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMTAwMDBcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc29ydHM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBmaWx0ZXJzXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHN2VXJsLCBncmlkSW5mbykucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxuICAgICAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSksXG4gICAgICAgICAgICAgICAgICAgIG1hcChyZXBzb25zZSA9PiA8QmFzaWNVc2VySW5mb1tdPnJlcHNvbnNlLmRhdGEpXG4gICAgICAgICAgICAgICAgKS50b1Byb21pc2UoKS50aGVuKHN1Y2Nlc3MgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoPEJhc2ljVXNlckluZm9bXT5bXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZVVzZXIoaWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1JlbW92ZVVzZXIvJHtpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0RGVsZXRlKHVybCk7XG4gICAgfVxuXG4gICAgbW9kaWZ5VXNlckluZm8oaWQ6IHN0cmluZywgdXNlckluZm86IGFueSkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L01vZGlmeVVzZXJJbmZvLyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFB1dCh1cmwsIHVzZXJJbmZvKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VGaXJzdFRpbWVMb2dpbih1c2VySWQpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaGFuZ2VGaXJzdFRpbWVMb2dpbi8ke3VzZXJJZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0TW9kZWxTY2hlbWFzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdNw6MnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnTcOjJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ03DoycsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2lkJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnRW1haWwnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnRW1haWwnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRW1haWwnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWRIb2NWaWVuJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnSOG7jSB2w6AgdMOqbicsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdI4buNIHbDoCB0w6puJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZnVsbE5hbWVOZXcnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdI4buNIHbDoCB0w6puJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSOG7jSB2w6AgdMOqbicsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkb2InLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdOZ8OgeSBzaW5oJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ05nw6B5IHNpbmgnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTmfDoHkgc2luaCcsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdkYXRlJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnc291cmNlJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnTG/huqFpIHTDoGkga2hv4bqjbicsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdMb+G6oWkgdMOgaSBraG/huqNuJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0xv4bqhaSB0w6BpIGtob+G6o24nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAncGhvbmVOdW1iZXInLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdT4buRIMSRaeG7h24gdGhv4bqhaScsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdT4buRIMSRaeG7h24gdGhv4bqhaScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdT4buRIMSRaeG7h24gdGhv4bqhaScsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkb25WaUNodWNWdVN0cicsXG4gICAgICAgICAgICAgICAgbmFtZTogJ8SQxqFuIHbhu4sgLSBDaOG7qWMgduG7pScsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICfEkMahbiB24buLIC0gQ2jhu6ljIHbhu6UnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnxJDGoW4gduG7iyAtIENo4bupYyB24bulJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0Q29sdW1uU2NoZW1hQmFzZShpc0luVXNlckxpc3QgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBbXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzE1MHB4JyxcbiAgICAgICAgICAgICAgICBpbmNsdWRlU2VsZWN0OiBpc0luVXNlckxpc3QsXG4gICAgICAgICAgICAgICAgaXNQaW5uZWQ6IHRydWVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZnVsbE5hbWVOZXcnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVTZWxlY3Q6IGlzSW5Vc2VyTGlzdCxcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiBpc0luVXNlckxpc3QsXG4gICAgICAgICAgICAgICAgaXNQaW5uZWQ6IHRydWVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZG9iJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2RhdGUnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTEwcHgnLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVTZWxlY3Q6IGlzSW5Vc2VyTGlzdCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZW1haWwnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjIwcHgnLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVTZWxlY3Q6IGlzSW5Vc2VyTGlzdFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdwaG9uZU51bWJlcicsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxNDBweCcsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVNlbGVjdDogaXNJblVzZXJMaXN0XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgIC8vICAgICBmaWVsZDogJ2RvblZpQ2h1Y1Z1U3RyJyxcbiAgICAgICAgICAgIC8vICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAvLyAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICAvLyAgICAgaW5jbHVkZVNlbGVjdDogZmFsc2UsXG4gICAgICAgICAgICAvLyAgICAgd2lkdGg6ICcyNTBweCcsXG4gICAgICAgICAgICAvLyB9KVxuICAgICAgICBdO1xuICAgICAgICBpZiAoIWlzSW5Vc2VyTGlzdCkge1xuICAgICAgICAgICAgY29scy5zcGxpY2UoMCwgMCxcbiAgICAgICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnaWRIb2NWaWVuJyxcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZVNlbGVjdDogIWlzSW5Vc2VyTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogIWlzSW5Vc2VyTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiAnZnVsbE5hbWVOZXcnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZFBsdXM6ICdjb2RlLGRvYixlbWFpbCxwaG9uZU51bWJlcixsc3RUZW5Eb25WaSxsc3RUZW5DaHVjVnUnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdzogKHJvd0l0ZW0sIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0l0ZW0uY29kZSA9IGRhdGEuY29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0l0ZW0uZG9iID0gZGF0YS5kb2I7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dJdGVtLmVtYWlsID0gZGF0YS5lbWFpbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0l0ZW0ucGhvbmVOdW1iZXIgPSBkYXRhLnBob25lTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93SXRlbS5waG9uZU51bWJlciA9IGRhdGEucGhvbmVOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dJdGVtLmxzdFRlbkRvblZpID0gZGF0YS5sc3RUZW5Eb25WaTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0l0ZW0ubHN0VGVuQ2h1Y1Z1ID0gZGF0YS5sc3RUZW5DaHVjVnU7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbHM7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlUGFzc3dvcmQocGFzc3dvcmQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1ZhbGlkYXRlUGFzc3dvcmQvP3Bhc3N3b3JkPSR7cGFzc3dvcmR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0VXNlckNhY2hlKGNhY2hlS2V5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRVc2VyQ2FjaGUvJHtjYWNoZUtleX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuICAgIHB1YmxpYyBzZXRVc2VyQ2FjaGUoZGF0YSkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1NldFVzZXJDYWNoZWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZGF0YSk7XG4gICAgfVxuICAgIHB1YmxpYyB1cGRhdGVVc2VyQXZhdGFyKGRhdGEpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVVc2VyQXZhdGFyYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFB1dCh1cmwsIGRhdGEpO1xuICAgIH1cbn1cbiJdfQ==