tnx-shared 5.1.261 → 5.1.264

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/bundles/tnx-shared.umd.js +73 -84
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/public-function.d.ts +1 -1
  6. package/components/common-app-component/app-topbar-v1/app-topbar-v1.component.d.ts +2 -0
  7. package/components/common-app-component/app-topbar-v1/app-topbar-v1.component.d.ts.map +1 -1
  8. package/components/common-app-component/app-topbar-v2/app-topbar-v2.component.d.ts +2 -0
  9. package/components/common-app-component/app-topbar-v2/app-topbar-v2.component.d.ts.map +1 -1
  10. package/components/common-app-component/app.topbar.component.d.ts +2 -0
  11. package/components/common-app-component/app.topbar.component.d.ts.map +1 -1
  12. package/components/common-app-component/common-app-component.d.ts.map +1 -1
  13. package/components/crud/crud-form/crud-form.component.d.ts +2 -2
  14. package/esm2015/components/chat/chat-box/chat-box.component.js +1 -1
  15. package/esm2015/components/chat/chat-send-message-box/chat-send-message-box.component.js +1 -1
  16. package/esm2015/components/common-app-component/app-topbar-v1/app-topbar-v1.component.js +14 -2
  17. package/esm2015/components/common-app-component/app-topbar-v2/app-topbar-v2.component.js +13 -2
  18. package/esm2015/components/common-app-component/app.topbar.component.js +13 -2
  19. package/esm2015/components/common-app-component/common-app-component.js +1 -2
  20. package/esm2015/components/crud/advance-search/advance-search.component.js +1 -1
  21. package/esm2015/components/query-builders/query-builder/query-builder.component.js +1 -1
  22. package/esm2015/components/tn-tabview/tn-tabview.component.js +1 -1
  23. package/esm2015/components/user-picker/user-picker-box/user-picker-box.component.js +1 -1
  24. package/esm2015/components/workflow/workflow-picker/workflow-picker.component.js +1 -1
  25. package/esm2015/components/workflow/workflow-setting-new/workflow-setting-new.component.js +1 -1
  26. package/esm2015/services/permission.service.js +1 -32
  27. package/fesm2015/tnx-shared.js +45 -43
  28. package/fesm2015/tnx-shared.js.map +1 -1
  29. package/package.json +2 -2
  30. package/services/permission.service.d.ts +0 -1
  31. package/services/permission.service.d.ts.map +1 -1
  32. package/tnx-shared.metadata.json +1 -1
@@ -48,37 +48,6 @@ export class PermissionService extends BaseService {
48
48
  const url = `${this.serviceUri}/GetCurrentUserPermission`;
49
49
  return this.defaultGet(url);
50
50
  }
51
- getAllBasePermission() {
52
- var _a, _b, _c, _d;
53
- return __awaiter(this, void 0, void 0, function* () {
54
- const url = `${this.serviceUri}/GetAllBasePermission`;
55
- const user = this._userService.getCurrentUser();
56
- if (user
57
- && (user.issuperuser && user.issuperuser.toLowerCase() == 'true')
58
- || (user.isadmin && user.isadmin.toLowerCase() == 'true' && !this.ignoreAdmin)) {
59
- return;
60
- }
61
- const res = yield this.defaultGet(url);
62
- const lstAppCodes = (_c = (_b = (_a = this._moduleConfigService.getConfig().environment.appMetadata) === null || _a === void 0 ? void 0 : _a.appSwitcher) === null || _b === void 0 ? void 0 : _b.map(app => app.code)) !== null && _c !== void 0 ? _c : [];
63
- if (!res.success || res.data == null) {
64
- const promiseArr = [];
65
- for (const code in lstAppCodes) {
66
- promiseArr.push(this.getPermissions(code));
67
- }
68
- yield Promise.all(promiseArr);
69
- return;
70
- }
71
- for (const service in lstAppCodes) {
72
- const permissions = (_d = res.data[service]) !== null && _d !== void 0 ? _d : [];
73
- const key = `AUTHORIZATION.${service.toUpperCase()}`;
74
- const storageItem = this.storage.getItem(key);
75
- if (storageItem != null) {
76
- this.storage.removeItem(key);
77
- }
78
- this.storage.setItem(key, JSON.stringify(permissions));
79
- }
80
- });
81
- }
82
51
  /**
83
52
  * Truyền vào danh sách permision cần check
84
53
  * @param lstPermissionCode những perrmision code cần check => nên dùng trong trường hợp check các button trong code
@@ -226,4 +195,4 @@ PermissionService.ctorParameters = () => [
226
195
  { type: OAuthService },
227
196
  { type: ApplicationContextService }
228
197
  ];
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUl2RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBTTdDLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxXQUFXO0lBUTlDLFlBQ0ksSUFBZ0IsRUFDaEIsUUFBa0IsRUFDVixvQkFBeUMsRUFDekMsWUFBeUIsRUFDekIsYUFBMkIsRUFDM0IsV0FBc0M7UUFFOUMsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLHFCQUFxQixJQUFJLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLGFBQWEsQ0FBQyxDQUFDO1FBTHZLLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFDekMsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsZ0JBQVcsR0FBWCxXQUFXLENBQTJCO1FBWnpDLFlBQU8sR0FBRyxjQUFjLENBQUM7UUFDbEMs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QUFDO1lBQzlDLElBQUksV0FBVyxJQUFJLFdBQVcsS0FBSyxNQUFNLElBQUksV0FBVyxLQUFLLFdBQVcsRUFBRTtnQkFDdEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDdkMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ25CO2lCQUNJO2dCQUNELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDekQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNQLE1BQU0sRUFBRSxDQUFDO2dCQUNiLENBQUMsQ0FBQyxDQUFDO2FBQ047UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Ozs7WUFqT0osVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFmUSxVQUFVO1lBQ0UsUUFBUTtZQVFwQixtQkFBbUI7WUFDbkIsV0FBVztZQVJYLFlBQVk7WUFFWix5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPQXV0aFNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcclxuXHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9hcHBsaWNhdGlvbi1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3Blcm1pc3Npb24nO1xyXG5pbXBvcnQgeyBUblVzZXIgfSBmcm9tICcuLi9tb2RlbHMvdG4tdXNlcic7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XHJcblxyXG4gICAgcmVhZG9ubHkgc3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlO1xyXG4gICAgZGVsYXlDaGVja1Blcm1pc3Npb25zID0gW107XHJcbiAgICByb290OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcclxuICAgIGlnbm9yZUFkbWluID0gZmFsc2U7XHJcbiAgICBhcHBDb2RlOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX29hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2FwcENvbnRleHQ6IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGh0dHAsIGluamVjdG9yLCBgJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uYXV0aG9yaXphdGlvbkVuZHBvaW50fS8ke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaVZlcnNpb259L3Blcm1pc3Npb25gKTtcclxuICAgICAgICB0aGlzLmVuZFBvaW50ID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLmF1dGhvcml6YXRpb25FbmRwb2ludDtcclxuICAgICAgICB0aGlzLmlnbm9yZUFkbWluID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5pc0lnbm9yZUFkbWluO1xyXG4gICAgICAgIHRoaXMuYXBwQ29kZSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwQ29kZTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclBlcm1pc3Npb25DYWNoZUFsbCgpIHtcclxuICAgICAgICBjb25zdCBsc3RBcHBDb2RlcyA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICBjb25zdCBsc3RBcGlFbmRwb2ludCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFwaURvbWFpbiA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluO1xyXG4gICAgICAgIGZvciAoY29uc3QgZG9tYWluTmFtZSBpbiBhcGlEb21haW4pIHtcclxuICAgICAgICAgICAgaWYgKGRvbWFpbk5hbWUuc3RhcnRzV2l0aCgnLScpIHx8IGRvbWFpbk5hbWUuc3RhcnRzV2l0aCgnMScpIHx8IGRvbWFpbk5hbWUgPT0gJ2dhdGV3YXknKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgcmVhbERvbWFpbk5hbWUgPSBkb21haW5OYW1lLnNwbGl0KCdFbmRwb2ludCcpID8gZG9tYWluTmFtZS5zcGxpdCgnRW5kcG9pbnQnKVswXSA6IGRvbWFpbk5hbWU7XHJcbiAgICAgICAgICAgIGxzdEFwaUVuZHBvaW50LnB1c2gocmVhbERvbWFpbk5hbWUudG9VcHBlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNsZWFyUGVybWlzc2lvbkNhY2hlKFsuLi5sc3RBcHBDb2RlcywgLi4ubHN0QXBpRW5kcG9pbnRdKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclBlcm1pc3Npb25DYWNoZShsc3RNb2R1bGU6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9DbGVhclBlcm1pc3Npb25DYWNoZWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBsc3RNb2R1bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRVc2VyUGVybWlzc2lvbigpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRDdXJyZW50VXNlclBlcm1pc3Npb25gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRBbGxCYXNlUGVybWlzc2lvbigpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEFsbEJhc2VQZXJtaXNzaW9uYDtcclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgICAgICBpZiAodXNlclxyXG4gICAgICAgICAgICAmJiAodXNlci5pc3N1cGVydXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKVxyXG4gICAgICAgICAgICB8fCAodXNlci5pc2FkbWluICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICAgICAgY29uc3QgbHN0QXBwQ29kZXMgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwcE1ldGFkYXRhPy5hcHBTd2l0Y2hlcj8ubWFwKGFwcCA9PiBhcHAuY29kZSkgPz8gW107XHJcbiAgICAgICAgaWYgKCFyZXMuc3VjY2VzcyB8fCByZXMuZGF0YSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VBcnI6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+W10gPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb2RlIGluIGxzdEFwcENvZGVzKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9taXNlQXJyLnB1c2godGhpcy5nZXRQZXJtaXNzaW9ucyhjb2RlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFycik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3Qgc2VydmljZSBpbiBsc3RBcHBDb2Rlcykge1xyXG4gICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IHJlcy5kYXRhW3NlcnZpY2VdID8/IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgQVVUSE9SSVpBVElPTi4ke3NlcnZpY2UudG9VcHBlckNhc2UoKX1gO1xyXG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChzdG9yYWdlSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkocGVybWlzc2lvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcnV54buBbiB2w6BvIGRhbmggc8OhY2ggcGVybWlzaW9uIGPhuqduIGNoZWNrXHJcbiAgICAgKiBAcGFyYW0gbHN0UGVybWlzc2lvbkNvZGUgbmjhu69uZyBwZXJybWlzaW9uIGNvZGUgY+G6p24gY2hlY2sgPT4gbsOqbiBkw7luZyB0cm9uZyB0csaw4budbmcgaOG7o3AgY2hlY2sgY8OhYyBidXR0b24gdHJvbmcgY29kZVxyXG4gICAgICogQHJldHVybnMgdHLhuqMgcmEgY8OhYyBwZXJybWlzaW9uQ29kZSBjw7MgcXV54buBblxyXG4gICAgICovXHJcbiAgICBnZXRQZXJtaXNzaW9uQXV0aG9yaXplZChsc3RQZXJtaXNzaW9uQ29kZTogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IChhd2FpdCB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpKSBhcyBUblVzZXI7XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUobHN0UGVybWlzc2lvbkNvZGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4pIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUobHN0UGVybWlzc2lvbkNvZGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxzdFBlcm1pc3Npb25Db2RlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5pc0F1dGhvcml6ZWRQZXJtaXNzaW9uKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpc0F1dGhvcml6ZWRQZXJtaXNzaW9uKHBlcm1pc3Npb246IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcclxuICAgICAgICAgICAgd2hpbGUgKCF0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jb21tb25TZXJ2aWNlLmRlbGF5KDEwMCk7XHJcbiAgICAgICAgICAgICAgICByZXRyeUNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBpZiAocmV0cnlDb3VudCA+IDUwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja1Blcm1pc3Npb24odGhpcy5hcHBDb2RlLCBwZXJtaXNzaW9uLCByZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQXV0aG9yaXplZChzZXJ2aWNlOiBzdHJpbmcsIHBlcm1pc3Npb246IHN0cmluZywgaWdub3JlQWRtaW46IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHRoaXMucm9vdCA9IHRoaXMuX2FwcENvbnRleHQuZ2V0Um9vdENvbnRleHQoKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmV0cnlDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIHdoaWxlICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29tbW9uU2VydmljZS5kZWxheSgxMDApO1xyXG4gICAgICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPiA1MCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tQZXJtaXNzaW9uKHNlcnZpY2UsIHBlcm1pc3Npb24sIHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tQZXJtaXNzaW9uKHNlcnZpY2UsIHBlcm1pc3Npb246IHN0cmluZywgcmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IChhd2FpdCB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpKSBhcyBUblVzZXI7XHJcblxyXG4gICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIgJiYgdXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09ICd0cnVlJykge1xyXG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzYWRtaW4gJiYgdXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmICF0aGlzLmlnbm9yZUFkbWluKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0UGVybWlzc2lvbnMoc2VydmljZSkudGhlbihwZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9ucyAmJiBwZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXV0aG9yaXplZCA9IHBlcm1pc3Npb25zLmluY2x1ZGVzKHBlcm1pc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShpc0F1dGhvcml6ZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEzhu5dpIGtow7RuZyBs4bqleSDEkcaw4bujYyBwZXJtaXNzaW9uIGNobyBtb2R1bGU6ICR7c2VydmljZX1gKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QoZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQXV0aG9yaXplZEJ5UGVybWlzc2lvbnMocGVybWlzc2lvbnM6IEFycmF5PFBlcm1pc3Npb24+LCBvcGVyYXRvciA9ICdPUicsIGlnbm9yZUFkbWluOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IChhd2FpdCB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpKSBhcyBUblVzZXI7XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGlzQXV0aG9yaXplZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAob3BlcmF0b3IudG9VcHBlckNhc2UoKSA9PSAnT1InKSB7XHJcbiAgICAgICAgICAgICAgICBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXdhaXQgcGVybWlzc2lvbnMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGVybWlzc2lvbnMoaXRlbS5zZXJ2aWNlKS50aGVuKHBlcm1pc3Npb25SZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRvci50b1VwcGVyQ2FzZSgpID09ICdPUicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25SZXN1bHQuaW5jbHVkZXMoaXRlbS5wZXJtaXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9uUmVzdWx0LmluY2x1ZGVzKGl0ZW0ucGVybWlzc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKGlzQXV0aG9yaXplZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGVybWlzc2lvbnMoc2VydmljZSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRQZXJtaXNzaW9uc0J5U2VydmljZT9zZXJ2aWNlPSR7c2VydmljZX1gO1xyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgQVVUSE9SSVpBVElPTi4ke3NlcnZpY2UudG9VcHBlckNhc2UoKX1gO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZUl0ZW0gJiYgc3RvcmFnZUl0ZW0gIT09ICdudWxsJyAmJiBzdG9yYWdlSXRlbSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2Uoc3RvcmFnZUl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0R2V0KHVybCkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUl2RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBTTdDLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxXQUFXO0lBUTlDLFlBQ0ksSUFBZ0IsRUFDaEIsUUFBa0IsRUFDVixvQkFBeUMsRUFDekMsWUFBeUIsRUFDekIsYUFBMkIsRUFDM0IsV0FBc0M7UUFFOUMsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLHFCQUFxQixJQUFJLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLGFBQWEsQ0FBQyxDQUFDO1FBTHZLLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFDekMsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsZ0JBQVcsR0FBWCxXQUFXLENBQTJCO1FBWnpDLFlBQU8sR0FBRyxjQUFjLENBQUM7UUFDbEMs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QUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNQLE1BQU0sRUFBRSxDQUFDO2dCQUNiLENBQUMsQ0FBQyxDQUFDO2FBQ047UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Ozs7WUFsTUosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFmUSxVQUFVO1lBQ0UsUUFBUTtZQVFwQixtQkFBbUI7WUFDbkIsV0FBVztZQVJYLFlBQVk7WUFFWix5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPQXV0aFNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcclxuXHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9hcHBsaWNhdGlvbi1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3Blcm1pc3Npb24nO1xyXG5pbXBvcnQgeyBUblVzZXIgfSBmcm9tICcuLi9tb2RlbHMvdG4tdXNlcic7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XHJcblxyXG4gICAgcmVhZG9ubHkgc3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlO1xyXG4gICAgZGVsYXlDaGVja1Blcm1pc3Npb25zID0gW107XHJcbiAgICByb290OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcclxuICAgIGlnbm9yZUFkbWluID0gZmFsc2U7XHJcbiAgICBhcHBDb2RlOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX29hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2FwcENvbnRleHQ6IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGh0dHAsIGluamVjdG9yLCBgJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uYXV0aG9yaXphdGlvbkVuZHBvaW50fS8ke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaVZlcnNpb259L3Blcm1pc3Npb25gKTtcclxuICAgICAgICB0aGlzLmVuZFBvaW50ID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLmF1dGhvcml6YXRpb25FbmRwb2ludDtcclxuICAgICAgICB0aGlzLmlnbm9yZUFkbWluID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5pc0lnbm9yZUFkbWluO1xyXG4gICAgICAgIHRoaXMuYXBwQ29kZSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwQ29kZTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclBlcm1pc3Npb25DYWNoZUFsbCgpIHtcclxuICAgICAgICBjb25zdCBsc3RBcHBDb2RlcyA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICBjb25zdCBsc3RBcGlFbmRwb2ludCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFwaURvbWFpbiA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluO1xyXG4gICAgICAgIGZvciAoY29uc3QgZG9tYWluTmFtZSBpbiBhcGlEb21haW4pIHtcclxuICAgICAgICAgICAgaWYgKGRvbWFpbk5hbWUuc3RhcnRzV2l0aCgnLScpIHx8IGRvbWFpbk5hbWUuc3RhcnRzV2l0aCgnMScpIHx8IGRvbWFpbk5hbWUgPT0gJ2dhdGV3YXknKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgcmVhbERvbWFpbk5hbWUgPSBkb21haW5OYW1lLnNwbGl0KCdFbmRwb2ludCcpID8gZG9tYWluTmFtZS5zcGxpdCgnRW5kcG9pbnQnKVswXSA6IGRvbWFpbk5hbWU7XHJcbiAgICAgICAgICAgIGxzdEFwaUVuZHBvaW50LnB1c2gocmVhbERvbWFpbk5hbWUudG9VcHBlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNsZWFyUGVybWlzc2lvbkNhY2hlKFsuLi5sc3RBcHBDb2RlcywgLi4ubHN0QXBpRW5kcG9pbnRdKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclBlcm1pc3Npb25DYWNoZShsc3RNb2R1bGU6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9DbGVhclBlcm1pc3Npb25DYWNoZWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBsc3RNb2R1bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRVc2VyUGVybWlzc2lvbigpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRDdXJyZW50VXNlclBlcm1pc3Npb25gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRydXnhu4FuIHbDoG8gZGFuaCBzw6FjaCBwZXJtaXNpb24gY+G6p24gY2hlY2tcclxuICAgICAqIEBwYXJhbSBsc3RQZXJtaXNzaW9uQ29kZSBuaOG7r25nIHBlcnJtaXNpb24gY29kZSBj4bqnbiBjaGVjayA9PiBuw6puIGTDuW5nIHRyb25nIHRyxrDhu51uZyBo4bujcCBjaGVjayBjw6FjIGJ1dHRvbiB0cm9uZyBjb2RlXHJcbiAgICAgKiBAcmV0dXJucyB0cuG6oyByYSBjw6FjIHBlcnJtaXNpb25Db2RlIGPDsyBxdXnhu4FuXHJcbiAgICAgKi9cclxuICAgIGdldFBlcm1pc3Npb25BdXRob3JpemVkKGxzdFBlcm1pc3Npb25Db2RlOiBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gKGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpIGFzIFRuVXNlcjtcclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShsc3RQZXJtaXNzaW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShsc3RQZXJtaXNzaW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbHN0UGVybWlzc2lvbkNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmlzQXV0aG9yaXplZFBlcm1pc3Npb24oaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQXV0aG9yaXplZFBlcm1pc3Npb24ocGVybWlzc2lvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xyXG4gICAgICAgICAgICB3aGlsZSAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NvbW1vblNlcnZpY2UuZGVsYXkoMTAwKTtcclxuICAgICAgICAgICAgICAgIHJldHJ5Q291bnQrKztcclxuICAgICAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID4gNTApIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGVybWlzc2lvbih0aGlzLmFwcENvZGUsIHBlcm1pc3Npb24sIHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNBdXRob3JpemVkKHNlcnZpY2U6IHN0cmluZywgcGVybWlzc2lvbjogc3RyaW5nLCBpZ25vcmVBZG1pbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5fYXBwQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcclxuICAgICAgICAgICAgd2hpbGUgKCF0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jb21tb25TZXJ2aWNlLmRlbGF5KDEwMCk7XHJcbiAgICAgICAgICAgICAgICByZXRyeUNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBpZiAocmV0cnlDb3VudCA+IDUwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja1Blcm1pc3Npb24oc2VydmljZSwgcGVybWlzc2lvbiwgcmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja1Blcm1pc3Npb24oc2VydmljZSwgcGVybWlzc2lvbjogc3RyaW5nLCByZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBjb25zdCB1c2VyID0gKGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpIGFzIFRuVXNlcjtcclxuXHJcbiAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbiAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4pIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRQZXJtaXNzaW9ucyhzZXJ2aWNlKS50aGVuKHBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBdXRob3JpemVkID0gcGVybWlzc2lvbnMuaW5jbHVkZXMocGVybWlzc2lvbik7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGlzQXV0aG9yaXplZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgTOG7l2kga2jDtG5nIGzhuqV5IMSRxrDhu6NjIHBlcm1pc3Npb24gY2hvIG1vZHVsZTogJHtzZXJ2aWNlfWApO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNBdXRob3JpemVkQnlQZXJtaXNzaW9ucyhwZXJtaXNzaW9uczogQXJyYXk8UGVybWlzc2lvbj4sIG9wZXJhdG9yID0gJ09SJywgaWdub3JlQWRtaW46IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gKGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpIGFzIFRuVXNlcjtcclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmICF0aGlzLmlnbm9yZUFkbWluKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChvcGVyYXRvci50b1VwcGVyQ2FzZSgpID09ICdPUicpIHtcclxuICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhd2FpdCBwZXJtaXNzaW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQZXJtaXNzaW9ucyhpdGVtLnNlcnZpY2UpLnRoZW4ocGVybWlzc2lvblJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yLnRvVXBwZXJDYXNlKCkgPT0gJ09SJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvblJlc3VsdC5pbmNsdWRlcyhpdGVtLnBlcm1pc3Npb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0F1dGhvcml6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBlcm1pc3Npb25SZXN1bHQuaW5jbHVkZXMoaXRlbS5wZXJtaXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJlc29sdmUoaXNBdXRob3JpemVkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQZXJtaXNzaW9ucyhzZXJ2aWNlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBlcm1pc3Npb25zQnlTZXJ2aWNlP3NlcnZpY2U9JHtzZXJ2aWNlfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGBBVVRIT1JJWkFUSU9OLiR7c2VydmljZS50b1VwcGVyQ2FzZSgpfWA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChzdG9yYWdlSXRlbSAmJiBzdG9yYWdlSXRlbSAhPT0gJ251bGwnICYmIHN0b3JhZ2VJdGVtICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRHZXQodXJsKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=