tnx-shared 5.3.291 → 5.3.293

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 (35) hide show
  1. package/bundles/tnx-shared.umd.js +131 -121
  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/base/list-component-base.d.ts.map +1 -1
  6. package/classes/form-schema.d.ts +2 -0
  7. package/classes/form-schema.d.ts.map +1 -1
  8. package/components/autocomplete-picker/autocomplete-picker.component.d.ts.map +1 -1
  9. package/components/common-search-form/common-search-form.component.d.ts.map +1 -1
  10. package/components/dropdown/dropdown.component.d.ts +2 -0
  11. package/components/dropdown/dropdown.component.d.ts.map +1 -1
  12. package/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.d.ts.map +1 -1
  13. package/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.d.ts.map +1 -1
  14. package/esm2015/classes/base/list-component-base.js +3 -3
  15. package/esm2015/classes/form-schema.js +3 -1
  16. package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +7 -5
  17. package/esm2015/components/common-search-form/common-search-form.component.js +5 -2
  18. package/esm2015/components/dropdown/dropdown.component.js +19 -23
  19. package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.js +2 -1
  20. package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.js +2 -1
  21. package/esm2015/public-api.js +2 -1
  22. package/esm2015/services/base.service.js +6 -4
  23. package/esm2015/services/canbo-hoso.service.js +7 -3
  24. package/esm2015/services/crud.service.js +4 -4
  25. package/esm2015/services/dm-chucvu.service.js +1 -2
  26. package/fesm2015/tnx-shared.js +65 -56
  27. package/fesm2015/tnx-shared.js.map +1 -1
  28. package/package.json +2 -2
  29. package/public-api.d.ts +1 -0
  30. package/public-api.d.ts.map +1 -1
  31. package/services/base.service.d.ts +0 -2
  32. package/services/base.service.d.ts.map +1 -1
  33. package/services/canbo-hoso.service.d.ts.map +1 -1
  34. package/services/dm-chucvu.service.d.ts.map +1 -1
  35. package/tnx-shared.metadata.json +1 -1
@@ -8,10 +8,12 @@ import { Filter, GridInfo, Sort } from '../models/grid-info';
8
8
  import { getStringDateVN } from '../utils/date';
9
9
  import { CommonService } from './common.service';
10
10
  import { SignalRService } from './signalr.service';
11
+ import { ModuleConfigService } from './module-config.service';
11
12
  const EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
12
13
  const EXCEL_EXTENSION = '.xlsx';
13
14
  export class BaseService {
14
15
  constructor(http, injector, serviceUri) {
16
+ var _a, _b;
15
17
  this.serviceUri = '';
16
18
  this.endPoint = '';
17
19
  this.serviceCode = '';
@@ -21,8 +23,6 @@ export class BaseService {
21
23
  this.apiGetData = 'GetData';
22
24
  this.apiGetAll = 'GetAllByFilter';
23
25
  this.apiGetDetailByFilter = 'GetByFilter';
24
- this.fieldSort = '';
25
- this.fieldSuDung = '';
26
26
  this.disableFieldNotUse = false;
27
27
  this.RETRY_COUNT = 0;
28
28
  this.REPLAY_COUNT = 1;
@@ -32,6 +32,8 @@ export class BaseService {
32
32
  this.serviceUri = serviceUri;
33
33
  this._commonService = injector.get(CommonService);
34
34
  this._signalrServicePrivate = injector.get(SignalRService);
35
+ const environment = this._injector.get(ModuleConfigService).getConfig().environment;
36
+ this.disableFieldNotUse = (_b = (_a = environment === null || environment === void 0 ? void 0 : environment.cauHinhNghiepVu) === null || _a === void 0 ? void 0 : _a.disableFieldNotUse) !== null && _b !== void 0 ? _b : false;
35
37
  }
36
38
  setCurrentServiceUri(key) {
37
39
  }
@@ -325,7 +327,7 @@ export class BaseService {
325
327
  _getDataDropdownByFilter(filters, options) {
326
328
  return new Promise((resolve, reject) => {
327
329
  const gridInfo = this.generateGridInfoDropdown(filters, options);
328
- if (options.isServerLoad) {
330
+ if (options.isServerLoad && !options.isGetAll) {
329
331
  this.getByGridRequest(gridInfo, options.plusUrl)
330
332
  .then(res => {
331
333
  resolve(res);
@@ -951,4 +953,4 @@ export class BaseService {
951
953
  }
952
954
  export class HttpOptions {
953
955
  }
954
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2Jhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQyxXQUFXLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RixPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUV4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBVyxJQUFJLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHbkQsTUFBTSxVQUFVLEdBQUcsaUZBQWlGLENBQUM7QUFDckcsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBRWhDLE1BQU0sT0FBZ0IsV0FBVztJQXlCN0IsWUFDSSxJQUFnQixFQUNoQixRQUFrQixFQUNsQixVQUFrQjtRQXZCdEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGVBQVUsR0FBRyxTQUFTLENBQUM7UUFD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SSxDQUFDLENBQUM7SUFDM0UsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLFdBQVc7Q0FXdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgcmV0cnksIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBEcm9wZG93bk9wdGlvbnMsIE9wZXJhdG9yIH0gZnJvbSAnLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbiB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmUtbGluay1ieS1wZXJtaXNzaW9uL21vZGVscy9zaGFyZS1saW5rLWJ5LXBlcm1pc3Npb24nO1xuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICcuLi9tb2RlbHMvYmFzaWMtdHJlZS1ub2RlJztcbmltcG9ydCB7IEZpbHRlciwgR3JpZEluZm8sIEluY2x1ZGUsIFNvcnQgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XG5pbXBvcnQgeyBnZXRTdHJpbmdEYXRlVk4gfSBmcm9tICcuLi91dGlscy9kYXRlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNpZ25hbFJTZXJ2aWNlIH0gZnJvbSAnLi9zaWduYWxyLnNlcnZpY2UnO1xuXG5cbmNvbnN0IEVYQ0VMX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG5jb25zdCBFWENFTF9FWFRFTlNJT04gPSAnLnhsc3gnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVNlcnZpY2Uge1xuICAgIF9odHRwOiBIdHRwQ2xpZW50O1xuICAgIF9pbmplY3RvcjogSW5qZWN0b3I7XG4gICAgX3NpZ25hbHJTZXJ2aWNlUHJpdmF0ZTogU2lnbmFsUlNlcnZpY2U7XG5cbiAgICBzZXJ2aWNlVXJpID0gJyc7XG4gICAgZW5kUG9pbnQgPSAnJztcbiAgICBzZXJ2aWNlQ29kZSA9ICcnO1xuICAgIGVudGl0eU5hbWUgPSAnJztcbiAgICBvYmplY3ROYW1lID0gJyc7XG4gICAgdXNlV29ya2Zsb3cgPSBmYWxzZTtcbiAgICBhcGlHZXREYXRhID0gJ0dldERhdGEnO1xuICAgIGFwaUdldEFsbCA9ICdHZXRBbGxCeUZpbHRlcic7XG4gICAgYXBpR2V0RGV0YWlsQnlGaWx0ZXIgPSAnR2V0QnlGaWx0ZXInO1xuXG4gICAgZmllbGRTb3J0ID0gJyc7XG4gICAgZmllbGRTdUR1bmcgPSAnJztcbiAgICBkaXNhYmxlRmllbGROb3RVc2UgPSBmYWxzZTtcblxuICAgIHJlYWRvbmx5IFJFVFJZX0NPVU5UOiBudW1iZXIgPSAwO1xuICAgIHJlYWRvbmx5IFJFUExBWV9DT1VOVDogbnVtYmVyID0gMTtcbiAgICByZWFkb25seSBMSU1JVF9ERUZBVUxUOiBudW1iZXIgPSAxMDAwO1xuXG4gICAgcHJvdGVjdGVkIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgc2VydmljZVVyaTogc3RyaW5nLFxuICAgICkge1xuICAgICAgICB0aGlzLl9odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5faW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpID0gc2VydmljZVVyaTtcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZSA9IGluamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2VQcml2YXRlID0gaW5qZWN0b3IuZ2V0KFNpZ25hbFJTZXJ2aWNlKTtcblxuICAgIH1cblxuXG4gICAgc2V0Q3VycmVudFNlcnZpY2VVcmkoa2V5OiBzdHJpbmcpIHtcbiAgICB9XG5cbiAgICBnZXRLZXlXb3JrZmxvd1NldHRpbmcoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmVudGl0eU5hbWV9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVNpZ25hbFIoY2FsbEJhY2spIHtcbiAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcbiAgICAgICAgLy8gQuG6r3QgxJHhuqd1IGNo4bqheVxuICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZVByaXZhdGUuc3RhcnQoJ0NvbW1vbkh1YicsIHRvcGljLCAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgLy8gdW5zdWJzY3JpYmUgY8OhYyB0b3BpYyDEkcOjIGzhuq9uZyBuZ2hlIHRyxrDhu5tjIMSRw7NcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlUHJpdmF0ZS51blN1YnNjcmliZVZpZXdDb2RlKCdDb21tb25IdWInLCB0b3BpYyk7XG4gICAgICAgICAgICBjYWxsQmFjayhtZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0b3BpYztcbiAgICB9XG5cbiAgICBwcml2YXRlIHVuU3Vic2NyaWJlU2lnbmFsUihrZXkpIHtcbiAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2VQcml2YXRlLnVuU3Vic2NyaWJlVmlld0NvZGUoJ0NvbW1vbkh1YicsIGtleSk7XG4gICAgfVxuXG4gICAgZGVmYXVsdEdldFNpZ25hbFIoYXBpVXJsKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLnN1YnNjcmliZVNpZ25hbFIoZiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnMgPSBKU09OLnBhcnNlKGYpO1xuICAgICAgICAgICAgICAgIGlmIChycy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vID09IC0xIGzDoCB0csaw4budbmcgaOG7o3Agc2V0IGtleSBi4buLIGzhu5dpXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5kYXRhICE9ICctMScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FjaGVSZXNwb25zZShycy5kYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoYXBpVXJsLmluZGV4T2YoJz8nKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgIGFwaVVybCArPSBgP2A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcGlVcmwgKz0gYCZgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXBpVXJsICs9IGBfa2V5U2lnbmFscj0ke3RvcGljfWA7XG4gICAgICAgICAgICB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxuICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICAgICAgICAgICkudG9Qcm9taXNlKClcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5TdWJzY3JpYmVTaWduYWxSKHRvcGljKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlZmF1bHRQb3N0U2lnbmFsUihhcGlVcmwsIGRhdGE6IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvcGljID0gdGhpcy5zdWJzY3JpYmVTaWduYWxSKGYgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJzID0gSlNPTi5wYXJzZShmKTtcbiAgICAgICAgICAgICAgICBpZiAocnMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAvLyA9PSAtMSBsw6AgdHLGsOG7nW5nIGjhu6NwIHNldCBrZXkgYuG7iyBs4buXaVxuICAgICAgICAgICAgICAgICAgICBpZiAocnMuZGF0YSAhPSAnLTEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENhY2hlUmVzcG9uc2UocnMuZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UocmVzLmRhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFwaVVybC5pbmRleE9mKCc/JykgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBhcGlVcmwgKz0gYD9gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXBpVXJsICs9IGAmYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFwaVVybCArPSBgX2tleVNpZ25hbHI9JHt0b3BpY31gO1xuICAgICAgICAgICAgdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXG4gICAgICAgICAgICAgICAgKS50b1Byb21pc2UoKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51blN1YnNjcmliZVNpZ25hbFIodG9waWMpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0Q2FjaGVSZXNwb25zZShrZXk6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0Jhc2VHZXRDYWNoZUluZm8vJHtrZXl9YCwge30pO1xuICAgIH1cblxuICAgIGdldE9iamVjdERpc3BsYXlNb2RlbChpZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0T2JqZWN0RGlzcGxheU1vZGVsLyR7aWR9YCwge30pO1xuICAgIH1cblxuICAgIHBvc3RHcmlkSW5mbyh1cmw6IHN0cmluZywgZ3JpZEluZm86IEdyaWRJbmZvKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBpZiAoIWdyaWRJbmZvKSBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbygpO1xuICAgICAgICBpZiAoZ3JpZEluZm8uZmllbGRzICYmIGdyaWRJbmZvLmZpZWxkcy5zdGFydHNXaXRoKCcsJykpIHtcbiAgICAgICAgICAgIGdyaWRJbmZvLmZpZWxkcyA9IGdyaWRJbmZvLmZpZWxkcy5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3VybH1gLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgZ2V0QnlHcmlkUmVxdWVzdChncmlkSW5mbzogR3JpZEluZm8sIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBsZXQgYXBpVXJsID0gdGhpcy5hcGlHZXREYXRhO1xuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcbiAgICAgICAgICAgIGFwaVVybCArPSAnLycgKyBwbHVzVXJsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RHcmlkSW5mbyhhcGlVcmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBnZXRCeUdyaWRSZXF1ZXN0V2l0aEJvZHlPbGQoZ3JpZEluZm86IEdyaWRJbmZvLCBwbHVzVXJsOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgbGV0IGFwaVVybCA9IHRoaXMuYXBpR2V0RGF0YTtcbiAgICAgICAgaWYgKHBsdXNVcmwgIT0gbnVsbCAmJiBwbHVzVXJsICE9ICcnKSB7XG4gICAgICAgICAgICBhcGlVcmwgKz0gJy8nICsgcGx1c1VybDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnZlcnRWYWx1ZUZpbHRlclRvT2xkQmFzZShncmlkSW5mby5maWx0ZXJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEdyaWRJbmZvKGFwaVVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGJhc2VHZXRUcmVlRGF0YShncmlkSW5mbzogR3JpZEluZm8sIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBsZXQgYXBpVXJsID0gJ0dldFRyZWVEYXRhJztcbiAgICAgICAgaWYgKHBsdXNVcmwgIT0gbnVsbCAmJiBwbHVzVXJsICE9ICcnKSB7XG4gICAgICAgICAgICBhcGlVcmwgKz0gJy8nICsgcGx1c1VybDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb252ZXJ0VmFsdWVGaWx0ZXJUb09sZEJhc2UoZmlsdGVyczogRmlsdGVyW10pIHtcbiAgICAgICAgZmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyLmZpbHRlcnMgJiYgZmlsdGVyLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udmVydFZhbHVlRmlsdGVyVG9PbGRCYXNlKGZpbHRlci5maWx0ZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gSlNPTi5wYXJzZShmaWx0ZXIudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0clZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gTMOgIHZhbHVlIGtp4buDdSBkYXRlXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJWYWx1ZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlID0gZ2V0U3RyaW5nRGF0ZVZOKGRhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlID0gc3RyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaOG7iSBkw7luZyB0cm9uZyB0csaw4budbmcgaOG7o3AgbXXhu5FuIGfhu61pIHJlcXVlc3QgxJHhur9uIGN1c3RvbSByb3V0ZSBHZXREYXRhL3twbHVzVXJsfVxuICAgICAqL1xuICAgIGdldERhdGFDdXN0b21Sb3V0ZShwbHVzVXJsOiBzdHJpbmcsIGZpbHRlcnM/OiBGaWx0ZXJbXSwgZmllbGRzOiBzdHJpbmcgPSAnJywgc29ydHM6IFNvcnRbXSA9IFtdLCBwYWdlU2l6ZTogbnVtYmVyID0gMSwgcGFnZTogbnVtYmVyID0gMSkge1xuICAgICAgICBjb25zdCBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICAgICAgcGFnZVNpemVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3J0cyxcbiAgICAgICAgICAgIGZpbHRlcnM6IGZpbHRlcnMgPyBmaWx0ZXJzIDogW11cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm8sIHBsdXNVcmwpO1xuICAgIH1cblxuICAgIGdldEFsbFdpdGhJbmNsdWRlKGZpbHRlcnM/OiBGaWx0ZXJbXSwgZmllbGRzOiBzdHJpbmcgPSAnJywgc29ydHM6IFNvcnRbXSA9IFtdLCBpbmNsdWRlczogSW5jbHVkZVtdID0gW10sIHBsdXNVcmw6IHN0cmluZyA9ICcnKSB7XG4gICAgICAgIGxldCBhcGlVcmwgPSB0aGlzLmFwaUdldEFsbDtcbiAgICAgICAgaWYgKHBsdXNVcmwgIT0gbnVsbCAmJiBwbHVzVXJsICE9ICcnKSB7XG4gICAgICAgICAgICBhcGlVcmwgKz0gYC8ke3BsdXNVcmx9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IDk5OTk5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc29ydHMsXG4gICAgICAgICAgICBmaWx0ZXJzOiBmaWx0ZXJzID8gZmlsdGVycyA6IFtdLFxuICAgICAgICAgICAgaW5jbHVkZXNcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RHcmlkSW5mbyhhcGlVcmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBnZXRCeUlkcyhpZHM6IHN0cmluZ1tdLCBmaWVsZHM6IHN0cmluZyA9ICcnLCBzb3J0czogU29ydFtdID0gW10sIHBsdXNVcmw6IHN0cmluZyA9ICcnKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXG4gICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignaWQnLCBPcGVyYXRvci5pbiwgaWRzKVxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGwoZmlsdGVycywgZmllbGRzLCBzb3J0cywgcGx1c1VybCk7XG4gICAgfVxuXG4gICAgZ2V0QWxsV2l0aElnbm9yZShmaWx0ZXJzPzogRmlsdGVyW10sIGZpZWxkczogc3RyaW5nID0gJycsIHNvcnRzOiBTb3J0W10gPSBbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGwoZmlsdGVycywgZmllbGRzLCBzb3J0cywgJ0lnbm9yZUFsbEJhc2VGaWx0ZXInKTtcbiAgICB9XG5cbiAgICBnZXRBbGwoZmlsdGVycz86IEZpbHRlcltdLCBmaWVsZHM6IHN0cmluZyA9ICcnLCBzb3J0czogU29ydFtdID0gW10sIHBsdXNVcmw6IHN0cmluZyA9ICcnKSB7XG4gICAgICAgIGxldCBhcGlVcmwgPSB0aGlzLmFwaUdldEFsbDtcbiAgICAgICAgaWYgKHBsdXNVcmwgIT0gbnVsbCAmJiBwbHVzVXJsICE9ICcnKSB7XG4gICAgICAgICAgICBhcGlVcmwgKz0gYC8ke3BsdXNVcmx9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IDk5OVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvcnRzLFxuICAgICAgICAgICAgZmlsdGVyczogZmlsdGVycyA/IGZpbHRlcnMgOiBbXVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEdyaWRJbmZvKGFwaVVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGdldEFsbEJ5R3JpZEluZm8oZ3JpZEluZm86IEdyaWRJbmZvLCBwbHVzVXJsOiBzdHJpbmcgPSAnJykge1xuICAgICAgICBsZXQgYXBpVXJsID0gdGhpcy5hcGlHZXRBbGw7XG4gICAgICAgIGlmIChwbHVzVXJsICE9IG51bGwgJiYgcGx1c1VybCAhPSAnJykge1xuICAgICAgICAgICAgYXBpVXJsICs9IGAvJHtwbHVzVXJsfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEdyaWRJbmZvKGFwaVVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGNoZWNrRXhpc3RCeUZpbHRlcihmaWx0ZXJzOiBGaWx0ZXJbXSkge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NoZWNrRXhpc3RgO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChhcGlVcmwsIGZpbHRlcnMpO1xuICAgIH1cblxuICAgIGFzeW5jIGNoZWNrRHVwbGljYXRlZEJ5RmllbGQoZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSwgaWQ6IGFueSkge1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gW1xuICAgICAgICAgICAgbmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShpZClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jaGVja0V4aXN0QnlGaWx0ZXIoZmlsdGVycyk7XG4gICAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUdyaWRJbmZvRHJvcGRvd24oZmlsdGVyczogRmlsdGVyW10sIG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucykge1xuICAgICAgICBjb25zdCBncmlkSW5mbyA9IHtcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgcGFnZTogb3B0aW9ucy5wYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBvcHRpb25zLnBhZ2VTaXplXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgIHNvcnRzOiBbXSxcbiAgICAgICAgICAgIGZpZWxkczogbnVsbFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsc3RGaWVsZCA9IFtcbiAgICAgICAgICAgIG9wdGlvbnMudmFsdWVGaWVsZCxcbiAgICAgICAgICAgIG9wdGlvbnMuZGlzcGxheUZpZWxkXG4gICAgICAgIF07XG4gICAgICAgIGxzdEZpZWxkLnB1c2goLi4ub3B0aW9ucy5maWVsZFBsdXMuc3BsaXQoJywnKS5maWx0ZXIocSA9PiAhIXEgJiYgcSAhPT0gJycpKTtcbiAgICAgICAgZ3JpZEluZm8uZmllbGRzID0gdGhpcy5fY29tbW9uU2VydmljZS5hZGREaXN0aW5jdChsc3RGaWVsZCwgW10pLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChvcHRpb25zLnNvcnRzICE9IG51bGwgJiYgb3B0aW9ucy5zb3J0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBncmlkSW5mby5zb3J0cyA9IFsuLi5vcHRpb25zLnNvcnRzXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5zb3J0RmllbGQgIT0gbnVsbCAmJiBvcHRpb25zLnNvcnRGaWVsZCAhPSAnJykge1xuXG4gICAgICAgICAgICBncmlkSW5mby5zb3J0cy5wdXNoKHsgZmllbGQ6IG9wdGlvbnMuc29ydEZpZWxkLCBkaXI6IG9wdGlvbnMuc29ydERpciB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ3JpZEluZm87XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zOiBEcm9wZG93bk9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuZmllbGRQbHVzLmxlbmd0aCAmJiAhb3B0aW9ucy5maWVsZFBsdXMuc3RhcnRzV2l0aCgnLCcpKSB7XG4gICAgICAgICAgICBvcHRpb25zLmZpZWxkUGx1cyA9ICcsJyArIG9wdGlvbnMuZmllbGRQbHVzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnNvcnRGaWVsZCA9PSAnJykge1xuICAgICAgICAgICAgb3B0aW9ucy5zb3J0RmllbGQgPSBvcHRpb25zLmRpc3BsYXlGaWVsZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGVmYXVsdE9wdGlvbnNUcmVlKG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucywgZmllbGRQYXJlbnQ6IHN0cmluZykge1xuICAgICAgICBpZiAob3B0aW9ucy5maWVsZFBsdXMubGVuZ3RoICYmICFvcHRpb25zLmZpZWxkUGx1cy5zdGFydHNXaXRoKCcsJykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZmllbGRQbHVzID0gJywnICsgb3B0aW9ucy5maWVsZFBsdXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5maWVsZFBsdXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgb3B0aW9ucy5maWVsZFBsdXMgKz0gJywnO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuZmllbGRQbHVzICs9IGZpZWxkUGFyZW50O1xuICAgIH1cblxuICAgIGdldERhdGFEcm9wZG93bihvcHRpb25zPzogRHJvcGRvd25PcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihbXSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10sIG9wdGlvbnM/OiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyUmF3KGZpbHRlcnMsIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXJSYXcoZmlsdGVyczogRmlsdGVyW10sIG9wdGlvbnM/OiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIG9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXREYXRhRHJvcGRvd25CeUZpbHRlcihmaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXREYXRhRHJvcGRvd25CeUZpbHRlcihmaWx0ZXJzOiBGaWx0ZXJbXSwgb3B0aW9uczogRHJvcGRvd25PcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JpZEluZm8gPSB0aGlzLmdlbmVyYXRlR3JpZEluZm9Ecm9wZG93bihmaWx0ZXJzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QnlHcmlkUmVxdWVzdChncmlkSW5mbywgb3B0aW9ucy5wbHVzVXJsKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxCeUdyaWRJbmZvKGdyaWRJbmZvLCBvcHRpb25zLnBsdXNVcmwpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRhbyB0cmVlIGxpc3QgdHUgZHUgbGlldSBkdW9jIGNobywgY3UgdGhlIGxhIGR1IGxpZXUgVHJlZU1vZGVsID0+IGRhIGR1b2Mgc29ydCB0aGVvIFRydW9uZyBNYVBoYW5DYXBcbiAgICAgKiBAcGFyYW0gcmF3RGF0YVxuICAgICAqIEBwYXJhbSBmaWVsZFBhcmVudCBmaWVsZCBnaWEgdHJpIGNoYSB0cm9uZyBtb2RlbCBjb24uIFZEOiBJZENoYVxuICAgICAqIEBwYXJhbSBmaWVsZFBhcmVudFRyZWVJdGVtIGZpZWxkIGdpYSB0cmkgY3VhIG1vZGVsIGNoYS4gVkQ6IElkXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRUcmVlTW9kZWxCYXNlKHJhd0RhdGE6IGFueVtdLCBmaWVsZFBhcmVudDogc3RyaW5nLCBmaWVsZFBhcmVudFRyZWVJdGVtOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHJhd0RhdGEgPT0gbnVsbCB8fCByYXdEYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhTWFwID0gbmV3IE1hcDxhbnksIGFueT4oKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZGF0YSBvZiByYXdEYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlS2V5ID0gZGF0YVtmaWVsZFBhcmVudFRyZWVJdGVtXTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUGFyZW50VmFsdWUgPSBkYXRhW2ZpZWxkUGFyZW50XTtcbiAgICAgICAgICAgIGRhdGEuX2xldmVsID0gMDtcbiAgICAgICAgICAgIGRhdGEuX3ByZWZpeCA9ICcnO1xuICAgICAgICAgICAgY29uc3QgZGF0YVBhcmVudCA9IGZpZWxkUGFyZW50VmFsdWUgIT0gbnVsbCA/IGRhdGFNYXAuZ2V0KGZpZWxkUGFyZW50VmFsdWUpIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChkYXRhUGFyZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tbW9uU2VydmljZS5pc1ZhbGlkR3VpZChmaWVsZFBhcmVudFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLl9lcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEuX3Jvb3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRhdGFNYXAuc2V0KG5vZGVLZXksIGRhdGEpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhLl9sZXZlbCA9IGRhdGFQYXJlbnQuX2xldmVsICsgMTtcbiAgICAgICAgICAgIGRhdGEuX3ByZWZpeCA9IGRhdGFQYXJlbnQuX3Jvb3QgPT09IHRydWVcbiAgICAgICAgICAgICAgICA/ICd8LS0nXG4gICAgICAgICAgICAgICAgOiBkYXRhUGFyZW50Ll9wcmVmaXggKyAnLS0tJztcbiAgICAgICAgICAgIGRhdGFNYXAuc2V0KG5vZGVLZXksIGRhdGEpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYW8gdHJlZSBkYXRhIHR1IGR1IGxpZXUgZHVvYyBjaG9cbiAgICAgKiBAcGFyYW0gcmF3RGF0YVxuICAgICAqIEBwYXJhbSBmaWVsZFBhcmVudCBmaWVsZCBnaWEgdHJpIGNoYSB0cm9uZyBtb2RlbCBjb25cbiAgICAgKiBAcGFyYW0gZmllbGRQYXJlbnRUcmVlSXRlbSBmaWVsZCBnaWEgdHJpIGN1YSBtb2RlbCBjaGFcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldFRyZWVEYXRhKHJhd0RhdGEsIGZpZWxkUGFyZW50OiBzdHJpbmcsIGZpZWxkUGFyZW50VHJlZUl0ZW06IHN0cmluZykge1xuICAgICAgICBpZiAocmF3RGF0YSA9PSBudWxsKSByZXR1cm4gW107XG4gICAgICAgIC8vIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICAvLyBjb25zdCBmdW5jRGVRdXkgPSAocmVzdWx0LCBkYXRhcywgcHJlZml4LCBsZXZlbCkgPT4ge1xuICAgICAgICAvLyAgICAgY29uc3QgaXRlbVBhcmVudCA9IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XG4gICAgICAgIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vICAgICAgICAgY291bnQrKztcbiAgICAgICAgLy8gICAgICAgICBpZiAoZGF0YXNbaV1bZmllbGRQYXJlbnRdID09IGl0ZW1QYXJlbnRbb3B0aW9ucy5maWVsZFBhcmVudFRyZWVJdGVtXSkge1xuICAgICAgICAvLyAgICAgICAgICAgICBkYXRhc1tpXS5fcHJlZml4ID0gYCR7cHJlZml4fSBgO1xuICAgICAgICAvLyAgICAgICAgICAgICBkYXRhc1tpXS5faW5kZXggPSBpO1xuICAgICAgICAvLyAgICAgICAgICAgICBkYXRhc1tpXS5fbGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgLy8gICAgICAgICAgICAgcmVzdWx0LnB1c2goZGF0YXNbaV0pO1xuICAgICAgICAvLyAgICAgICAgICAgICBmdW5jRGVRdXkocmVzdWx0LCBkYXRhcywgcHJlZml4ICsgJy0tLScsIGxldmVsICsgMSk7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9O1xuICAgICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IHJhd0RhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gICAgIGNvdW50Kys7XG4gICAgICAgIC8vICAgICBpZiAocmF3RGF0YVtpXVtmaWVsZFBhcmVudF0gPT0gdmFsdWVQYXJlbnRSb290KSB7XG4gICAgICAgIC8vICAgICAgICAgcmF3RGF0YVtpXS5fcHJlZml4ID0gJyc7XG4gICAgICAgIC8vICAgICAgICAgcmF3RGF0YVtpXS5faW5kZXggPSBpO1xuICAgICAgICAvLyAgICAgICAgIHJhd0RhdGFbaV0uX2xldmVsID0gMTtcbiAgICAgICAgLy8gICAgICAgICByZXN1bHQucHVzaChyYXdEYXRhW2ldKTtcbiAgICAgICAgLy8gICAgICAgICBmdW5jRGVRdXkocmVzdWx0LCByYXdEYXRhLCAnfC0tLScsIDIpO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBsb29wIGNvdW50IG9sZCAke2NvdW50fWApO1xuICAgICAgICAvLyBjb3VudCA9IDA7XG4gICAgICAgIGNvbnN0IG5vZGVNYXAgPSBuZXcgTWFwPGFueSwgVHJlZU5vZGU+KCk7XG4gICAgICAgIGNvbnN0IHJvb3RzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZGF0YSBvZiByYXdEYXRhKSB7XG4gICAgICAgICAgICAvLyBjb3VudCsrO1xuICAgICAgICAgICAgY29uc3Qgbm9kZUtleSA9IGRhdGFbZmllbGRQYXJlbnRUcmVlSXRlbV07XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRLZXkgPSBkYXRhW2ZpZWxkUGFyZW50XTtcbiAgICAgICAgICAgIGxldCBub2RlID0gbm9kZU1hcC5nZXQobm9kZUtleSk7XG4gICAgICAgICAgICBsZXQgaXNOZXdOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChub2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBub2RlLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50S2V5O1xuICAgICAgICAgICAgICAgIGlzTmV3Tm9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcmVudEtleSA9PSAnc3RyaW5nJyAmJiAhdGhpcy5fY29tbW9uU2VydmljZS5pc1ZhbGlkR3VpZChwYXJlbnRLZXkpXG4gICAgICAgICAgICAgICAgfHwgcGFyZW50S2V5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNOZXdOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSBuZXcgVHJlZU5vZGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBub2RlTWFwLnNldChub2RlS2V5LCBuZXdOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgcm9vdHMucHVzaChub2RlS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbm9kZS5yb290ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByb290cy5wdXNoKG5vZGVLZXkpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2RlID8/PSBuZXcgVHJlZU5vZGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICAgIHBhcmVudDogcGFyZW50S2V5XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGlzTmV3Tm9kZSkge1xuICAgICAgICAgICAgICAgIG5vZGVNYXAuc2V0KG5vZGVLZXksIG5vZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcGFyZW50Tm9kZSA9IG5vZGVNYXAuZ2V0KHBhcmVudEtleSk7XG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUubGVhZiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXJlbnROb2RlID0gbmV3IFRyZWVOb2RlKHtcbiAgICAgICAgICAgICAgICBsZWFmOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW25vZGVdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBub2RlTWFwLnNldChwYXJlbnRLZXksIHBhcmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZ1bmNTZXRQcmVmaXggPSBmdW5jdGlvbiAobm9kZTogVHJlZU5vZGUsIHBhcmVudE5vZGU6IFRyZWVOb2RlLCBwcmVmaXg6IHN0cmluZykge1xuICAgICAgICAgICAgLy8gY291bnQrKztcbiAgICAgICAgICAgIG5vZGUuZGF0YS5fcHJlZml4ID0gcHJlZml4O1xuICAgICAgICAgICAgbm9kZS5kYXRhLl9sZXZlbCA9IHBhcmVudE5vZGUuZGF0YS5fbGV2ZWwgKyAxO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9kZS5kYXRhKTtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuID09IG51bGwgfHwgbm9kZS5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGZ1bmNTZXRQcmVmaXgoY2hpbGQsIG5vZGUsIHByZWZpeCArICctLS0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCByb290IG9mIHJvb3RzKSB7XG4gICAgICAgICAgICAvLyBjb3VudCsrO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVNYXAuZ2V0KHJvb3QpO1xuICAgICAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZS5kYXRhLl9wcmVmaXggPSAnJztcbiAgICAgICAgICAgIG5vZGUuZGF0YS5fbGV2ZWwgPSAxO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9kZS5kYXRhKTtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuID09IG51bGwgfHwgbm9kZS5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgZnVuY1NldFByZWZpeChjaGlsZCwgbm9kZSwgJ3wtLScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29uc29sZS5sb2coYGxvb3AgY291bnQgbmV3ICR7Y291bnR9YCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBnZXRUcmVlRGF0YURyb3Bkb3duKGZpZWxkUGFyZW50OiBzdHJpbmcsIHZhbHVlUGFyZW50Um9vdDogbnVtYmVyID0gLTEsIG9wdGlvbnM/OiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyZWVEYXRhRHJvcGRvd25CeUZpbHRlcihbXSwgZmllbGRQYXJlbnQsIHZhbHVlUGFyZW50Um9vdCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgZ2V0VHJlZURhdGFEcm9wZG93bkJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdLCBmaWVsZFBhcmVudDogc3RyaW5nLCB2YWx1ZVBhcmVudFJvb3Q6IG51bWJlciA9IC0xLCBvcHRpb25zPzogRHJvcGRvd25PcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRUcmVlRGF0YURyb3Bkb3duQnlGaWx0ZXJSYXcoZmlsdGVycywgZmllbGRQYXJlbnQsIHZhbHVlUGFyZW50Um9vdCwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRUcmVlRGF0YURyb3Bkb3duQnlGaWx0ZXJSYXcoZmlsdGVyczogRmlsdGVyW10sIGZpZWxkUGFyZW50OiBzdHJpbmcsIHZhbHVlUGFyZW50Um9vdDogbnVtYmVyID0gLTEsIG9wdGlvbnM/OiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIG9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdE9wdGlvbnNUcmVlKG9wdGlvbnMsIGZpZWxkUGFyZW50KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmlzVHJlZUJhc2VNb2RlbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWRJbmZvID0gdGhpcy5nZW5lcmF0ZUdyaWRJbmZvRHJvcGRvd24oZmlsdGVycywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlR2V0VHJlZURhdGEoZ3JpZEluZm8pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmVlRGF0YSA9IHRoaXMuZ2V0VHJlZU1vZGVsQmFzZShyZXMuZGF0YSwgZmllbGRQYXJlbnQsIG9wdGlvbnMuZmllbGRQYXJlbnRUcmVlSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHRyZWVEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldERhdGFEcm9wZG93bkJ5RmlsdGVyKGZpbHRlcnMsIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmVlRGF0YSA9IHRoaXMuZ2V0VHJlZURhdGEocmVzLmRhdGEsIGZpZWxkUGFyZW50LCBvcHRpb25zLmZpZWxkUGFyZW50VHJlZUl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSB0cmVlRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmllbGRzRnJvbURyb3Bkb3duT3B0aW9ucyhvcHRpb25zOiBEcm9wZG93bk9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZmllbGRzID0gW107XG4gICAgICAgIGlmIChvcHRpb25zLnZhbHVlRmllbGQgJiYgb3B0aW9ucy52YWx1ZUZpZWxkICE9PSAnJykge1xuICAgICAgICAgICAgZmllbGRzLnB1c2gob3B0aW9ucy52YWx1ZUZpZWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmRpc3BsYXlGaWVsZCAmJiBvcHRpb25zLmRpc3BsYXlGaWVsZCAhPT0gJycpIHtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKG9wdGlvbnMuZGlzcGxheUZpZWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmZpZWxkUGFyZW50VHJlZUl0ZW0gJiYgb3B0aW9ucy5maWVsZFBhcmVudFRyZWVJdGVtICE9PSAnJykge1xuICAgICAgICAgICAgZmllbGRzLnB1c2gob3B0aW9ucy5maWVsZFBhcmVudFRyZWVJdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmZpZWxkVHJlZSAmJiBvcHRpb25zLmZpZWxkVHJlZSAhPT0gJycpIHtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKG9wdGlvbnMuZmllbGRUcmVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmZpZWxkUGx1cyAmJiBvcHRpb25zLmZpZWxkUGx1cyAhPT0gJycpIHtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKC4uLm9wdGlvbnMuZmllbGRQbHVzLnNwbGl0KCcsJykuZmlsdGVyKHggPT4geCAhPT0gJycpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoZmllbGRzKSkuam9pbignLCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdldCBkZXRhaWwgduG7m2kgYXBpIGRvIERldiB04buxIHZp4bq/dCwgbeG6t2MgxJHhu4tuaCB1cmwgJ0N1c3RvbS97aWR9J1xuICAgICAqIEBwYXJhbSBpZCAtIGlkIGLhuqNuIGdoaVxuICAgICAqIEBwYXJhbSBwbHVzVXJsIC0gYXBpIHPhur0gdGjDoG5oID0+ICdQbHVzVXJsL3tpZH0nXG4gICAgICogQHBhcmFtIHF1ZXJ5UGFyYW0gLSBxdWVyeVBhcmFtIHRow6ptIHbDoG8gc2F1IHVybCwgbuG6v3UgY+G6p25cbiAgICAgKi9cbiAgICBnZXREZXRhaWxDdXN0b20oaWQ6IHN0cmluZywgcGx1c1VybDogc3RyaW5nID0gJ0N1c3RvbScsIHF1ZXJ5UGFyYW06IHN0cmluZyA9ICcnKSB7XG4gICAgICAgIGxldCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7cGx1c1VybH0vJHtpZH1gO1xuICAgICAgICB1cmwgKz0gcXVlcnlQYXJhbSAhPSAnJyA/IGAmJHtxdWVyeVBhcmFtfWAgOiAnJztcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGdldERldGFpbChpZDogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGdldERldGFpbFdpdGhGaWVsZHMoaWQ6IHN0cmluZywgZmllbGRzID0gJycsIHNvcnRzOiBTb3J0W10gPSBbXSwgaW5jbHVkZXM6IEluY2x1ZGVbXSA9IFtdKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gW1xuICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2lkJywgT3BlcmF0b3IuZXF1YWwsIGlkKVxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREZXRhaWxCeUZpbHRlcihmaWx0ZXJzLCBzb3J0cywgZmllbGRzLCBpbmNsdWRlcyk7XG4gICAgfVxuXG4gICAgZ2V0RGV0YWlsV2l0aFBlcm1pc3Npb24oaWQ6IGFueSwgcGlkOiBzdHJpbmcgPSBudWxsLCBwbHVzVXJsOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgaWYgKHBpZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBwaWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWRFbXB0eSgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0RldGFpbFdpdGhQZXJtaXNzaW9uLyR7aWR9P3BpZD0ke3BpZH1gO1xuICAgICAgICBpZiAocGx1c1VybCkge1xuICAgICAgICAgICAgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZXRhaWxXaXRoUGVybWlzc2lvbi8ke3BsdXNVcmx9LyR7aWR9P3BpZD0ke3BpZH1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBnZXREZXRhaWxCeVBpZChwaWQ6IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZXRhaWxXaXRoQnlQaWQvJHtwaWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGdldEJ5SW5zdGFuY2VJZChpbnN0YW5jZUlkOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QnlJbnN0YWNlSWQvJHtpbnN0YW5jZUlkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBnZXREZXRhaWxCeUNvZGUoY29kZTogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEJ5Q29kZS8ke2NvZGV9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGdldERldGFpbEJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdID0gW10sIHNvcnRzOiBTb3J0W10gPSBbXSwgZmllbGRzID0gJycsIGluY2x1ZGVzOiBJbmNsdWRlW10gPSBbXSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3RoaXMuYXBpR2V0RGV0YWlsQnlGaWx0ZXJ9YDtcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSB7XG4gICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgc29ydHMsXG4gICAgICAgICAgICBpbmNsdWRlcyxcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgY291bnRCeUZpbHRlcihmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ291bnRCeUZpbHRlcmA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZmlsdGVycyk7XG4gICAgfVxuXG4gICAgZ2V0TGFzdERldGFpbEJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdID0gW10sIHNvcnRzOiBTb3J0W10gPSBbXSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRMYXN0QnlGaWx0ZXJgO1xuICAgICAgICBjb25zdCBncmlkSW5mbyA9IHtcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICBzb3J0c1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRXb3JrZmxvd1NldHRpbmdCeUNvZGUod29ya2Zsb3dDb2RlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dTZXR0aW5nID0gKGF3YWl0IHRoaXMuZ2V0RGV0YWlsQnlGaWx0ZXIoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2NvZGUnLCBPcGVyYXRvci5lcXVhbCwgd29ya2Zsb3dDb2RlKVxuICAgICAgICAgICAgXVxuICAgICAgICApKS5kYXRhO1xuICAgICAgICBpZiAod29ya2Zsb3dTZXR0aW5nID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBqc29uU2NoZW1hID0gPGFueT53b3JrZmxvd1NldHRpbmdbJ2RhdGEnXTtcbiAgICAgICAgd29ya2Zsb3dTZXR0aW5nLmRhdGEgPSBKU09OLnBhcnNlKGpzb25TY2hlbWEpO1xuICAgICAgICBjb25zdCBzdGF0ZU1hY2hpbmVEYXRhID0gd29ya2Zsb3dTZXR0aW5nLmRhdGE7XG4gICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9ucyA9IHt9O1xuICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLm1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XG4gICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnNbbWFjaGluZS5jb2RlXSA9IFtdO1xuICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5jb25uZWN0aW9ucy5mb3JFYWNoKGNvbm4gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25uLnNvdXJjZSA9PSBtYWNoaW5lLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdLnB1c2goY29ubik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gd29ya2Zsb3dTZXR0aW5nO1xuICAgIH1cblxuICAgIGdldEFsbEFzeW5jKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRBc3luY2A7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBwb3N0KGl0ZW06IGFueSwgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVyaSA9IHBsdXNVcmwgPyBgJHt0aGlzLnNlcnZpY2VVcml9LyR7cGx1c1VybH1gIDogdGhpcy5zZXJ2aWNlVXJpO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cFxuICAgICAgICAgICAgLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KHVyaSwgaXRlbSlcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBwdXQoaWQ6IHN0cmluZywgaXRlbTogYW55LCBwbHVzVXJsOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gcGx1c1VybCA/IGAke3RoaXMuc2VydmljZVVyaX0vJHtwbHVzVXJsfS8ke2lkfWAgOiBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIGl0ZW0pLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGRlbGV0ZShpZDogbnVtYmVyLCBwbHVzVXJsOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gcGx1c1VybCA/IGAke3RoaXMuc2VydmljZVVyaX0vJHtwbHVzVXJsfS8ke2lkfWAgOiBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0Pih1cmwpLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGRlbGV0ZUJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke2lkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZTxSZXNwb25zZVJlc3VsdD4odXJsKS5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcbiAgICAgICAgKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBkZWxldGVNYW55KGxzdElkOiBzdHJpbmcsIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBwbHVzVXJsID8gYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZWxldGVNYW55QXN5bmMvJHtwbHVzVXJsfS8ke2xzdElkfWAgOiBgJHt0aGlzLnNlcnZpY2VVcml9L0RlbGV0ZU1hbnlBc3luYy8ke2xzdElkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZTxSZXNwb25zZVJlc3VsdD4odXJsKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBkZWZhdWx0R2V0KGFwaVVybCwgb3B0aW9ucz86IEh0dHBPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgb3B0aW9ucylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBnZXRJZ25vcmVDbGllbnRDYWNoZShhcGlVcmwpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZScgfSksXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIG9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZGVmYXVsdFBvc3QoYXBpVXJsLCBkYXRhLCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSwgb3B0aW9ucylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBkZWZhdWx0UHV0KGFwaVVybCwgZGF0YSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZGVmYXVsdERlbGV0ZShhcGlVcmwpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZTxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGdldEZpbGVCeUdldFJlcXVlc3QodXJsLCBmaWxlTmFtZSkge1xuICAgICAgICB0aGlzLnNhdmVGaWxlRnJvbU9ic2VydmFibGUoXG4gICAgICAgICAgICB0aGlzLl9odHRwLmdldCh1cmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgYXMgJ2pzb24nIH0pLFxuICAgICAgICAgICAgZmlsZU5hbWVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRGaWxlQnlQb3N0UmVxdWVzdCh1cmwsIGRhdGE6IGFueSwgZmlsZU5hbWUpIHtcbiAgICAgICAgdGhpcy5zYXZlRmlsZUZyb21PYnNlcnZhYmxlKFxuICAgICAgICAgICAgdGhpcy5faHR0cC5wb3N0KHVybCwgZGF0YSwgeyByZXNwb25zZVR5cGU6ICdibG9iJyBhcyAnanNvbicgfSksXG4gICAgICAgICAgICBmaWxlTmFtZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZUZpbGVGcm9tT2JzZXJ2YWJsZShvYjogT2JzZXJ2YWJsZTxhbnk+LCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIG9iLnRvUHJvbWlzZSgpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgIEZpbGVTYXZlci5zYXZlQXMocmVzLCBmaWxlTmFtZSk7XG4gICAgICAgIH0pLmNhdGNoKGFzeW5jIGVyciA9PiB7XG4gICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCBlcnIuZXJyb3IudGV4dCgpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvclRleHQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRFbnRpdHlNZXRhZGF0YSgpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RW50aXR5TWV0YWRhdGFgO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybClcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIHNhdmVFbnRpdHlNZXRhZGF0YShkYXRhKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1NhdmVFbnRpdHlNZXRhZGF0YWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSlcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGNoYW5nZU1ldGFkYXRhU3RhdHVzKGlkOiBudW1iZXIsIG1ldGFkYXRhVHlwZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vY2hhbmdlTWV0YWRhdGFTdGF0dXM/aWQ9JHtpZH0mbWV0YWRhdGFTdGF0dXNUeXBlPSR7bWV0YWRhdGFUeXBlfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwge30pLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgc2F2ZUFuZENoYW5nZU1ldGFkYXRhU3RhdHVzKGlkOiBudW1iZXIsIG1ldGFkYXRhVHlwZTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9zYXZlQW5kQ2hhbmdlTWV0YWRhdGFTdGF0dXM/aWQ9JHtpZH0mbWV0YWRhdGFTdGF0dXNUeXBlPSR7bWV0YWRhdGFUeXBlfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSkucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBnZXRFbnRpdHlQZXJtaXNzaW9uKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRFbnRpdHlQZXJtaXNzaW9uYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBzYXZlRW50aXR5UGVybWlzc2lvbihkYXRhKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1NhdmVFbnRpdHlQZXJtaXNzaW9uYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlRW50aXR5UGVybWlzc2lvbihpZDogc3RyaW5nLCBpdGVtOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRFbnRpdHlQZXJtaXNzaW9uLyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIGl0ZW0pLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGRlbGV0ZUVudGl0eVBlcm1pc3Npb24oaWQ6IG51bWJlcik6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZWxldGVFbnRpdHlQZXJtaXNzaW9uLyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0Pih1cmwpLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGdldFdmSGlzdG9yeUJ5RW50aXR5SXRlbShpZDogbnVtYmVyKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFdmSGlzdG9yeUJ5RW50aXR5SXRlbS8ke2lkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4odXJsKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBnZXREaWNTdGF0dXNOaG9tVHJhbmdUaGFpKHN0YXR1c2VzOiBzdHJpbmdbXSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREaWNTdGF0dXNOaG9tVHJhbmdUaGFpYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCB7XG4gICAgICAgICAgICBsaXN0U3RyaW5nVmFsdWU6IHN0YXR1c2VzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlUHJvY2Vzc1dvcmtmbG93KGlkOiBudW1iZXIsIGFjdGlvbkNvZGU6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vVmFsaWRhdGVQcm9jZXNzV0YvJHtpZH0vJHthY3Rpb25Db2RlfWAsIGRhdGEpO1xuICAgIH1cblxuICAgIHByb2Nlc3NXb3JrZmxvdyhpZDogbnVtYmVyLCBhY3Rpb25Db2RlOiBzdHJpbmcsIGRhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1Byb2Nlc3NXb3JrZmxvdy8ke2lkfS8ke2FjdGlvbkNvZGV9YCwgZGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0VXNlckluUHJvY2Vzc0Zvcm0od29ya2Zsb3dDb2RlOiBzdHJpbmcsIHN0YXRlQ29kZTogc3RyaW5nLCBhY3Rpb25Db2RlOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0VXNlckluUHJvY2Vzc0Zvcm1CYXNlLyR7d29ya2Zsb3dDb2RlfS8ke3N0YXRlQ29kZX0vJHthY3Rpb25Db2RlfS8ke2l0ZW1JZH1gLCB7fSk7XG4gICAgfVxuXG4gICAgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSwgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIGNvbnN0IGNvbW1vblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XG4gICAgICAgIHJldHVybiBjb21tb25TZXJ2aWNlLmhhbmRsZUVycm9yKGVycm9yLCBpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNhdmVBc0V4Y2VsRmlsZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhOiBCbG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcbiAgICAgICAgICAgIHR5cGU6IEVYQ0VMX1RZUEVcbiAgICAgICAgfSk7XG4gICAgICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgZmlsZU5hbWUgKyAnXycgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIEVYQ0VMX0VYVEVOU0lPTik7XG4gICAgfVxuXG4gICAgcHV0V2l0aFBsdXNVcmwoaWQ6IHN0cmluZywgaXRlbTogYW55LCBwbHVzVXJsOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vJHtpZH0vJHtwbHVzVXJsfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnB1dDxSZXNwb25zZVJlc3VsdD4odXJsLCBpdGVtKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRCeUZpZWxkKGZpZWxkOiBzdHJpbmcsIGFyclZhbHVlLCBnZXRGaWVsZHMgPSAnJywgc29ydEZpZWxkID0gbnVsbCwgc29ydERpciA9IG51bGwpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIGFyclZhbHVlID0gKGFyclZhbHVlIHx8IFtdKS5maWx0ZXIoKHZhbCwgaW5kLCBhcnIpID0+ICh2YWwgPT09IDAgfHwgdmFsKSAmJiBhcnIuaW5kZXhPZih2YWwpID09PSBpbmQpO1xuXG4gICAgICAgIGlmICghYXJyVmFsdWUgfHwgIWFyclZhbHVlLmxlbmd0aCkgcmV0dXJuIFtdO1xuXG4gICAgICAgIGNvbnN0IGFyckZpbHRlciA9IFtuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmluLFxuICAgICAgICAgICAgdmFsdWU6IGFyclZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgfSldO1xuXG4gICAgICAgIGNvbnN0IGFyclNvcnQgPSBbXTtcbiAgICAgICAgaWYgKHNvcnRGaWVsZCkge1xuICAgICAgICAgICAgYXJyU29ydC5wdXNoKG5ldyBTb3J0KHtcbiAgICAgICAgICAgICAgICBmaWVsZDogc29ydEZpZWxkLFxuICAgICAgICAgICAgICAgIGRpcjogc29ydERpciB8IDFcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyclJlc3VsdCA9IChhd2FpdCB0aGlzLmdldEFsbChhcnJGaWx0ZXIsIGdldEZpZWxkcywgYXJyU29ydCkpLmRhdGE7XG4gICAgICAgIHJldHVybiAoYXJyUmVzdWx0IHx8IFtdKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRCeUZpZWxkVG9EaWMoZmllbGQ6IHN0cmluZywgYXJyVmFsdWUsIGdldEZpZWxkcywga2V5RmllbGQgPSBudWxsLCB2YWx1ZUZpZWxkID0gbnVsbCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGFyclJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0QnlGaWVsZChmaWVsZCwgYXJyVmFsdWUsIGdldEZpZWxkcyk7XG4gICAgICAgIGNvbnN0IHJzRGljID0ge307XG4gICAgICAgIGlmICghYXJyUmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJzRGljO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleUZpZWxkKSB7XG4gICAgICAgICAgICBrZXlGaWVsZCA9IGZpZWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlRmllbGQpIHtcbiAgICAgICAgICAgIGFyclJlc3VsdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJzRGljW2l0ZW1ba2V5RmllbGRdXSA9IGl0ZW1bdmFsdWVGaWVsZF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFyclJlc3VsdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJzRGljW2l0ZW1ba2V5RmllbGRdXSA9IGl0ZW07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByc0RpYztcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogYW55LCB2YWx1ZUlzRmllbGQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBmaWVsZCwgb3BlcmF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmFsdWUpLFxuICAgICAgICAgICAgdmFsdWVJc0ZpZWxkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld0ZpbHRlclY0KGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBmaWVsZCwgb3BlcmF0b3IsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXdCaW5kaW5nRmlsdGVyKGNvbHVtbjogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHNvdXJjZUZpZWxkOiBzdHJpbmcsIHN1YkZpZWxkPzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4sXG4gICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgIHNvdXJjZUZpZWxkLFxuICAgICAgICAgICAgc3ViRmllbGRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RGF0YVRyaW5oS3koaXRlbTogYW55LCByb3dEYXRhPzogYW55KTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgZXhwb3J0VG9QZGYoaWQ6IHN0cmluZywgY29udGVudDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vRXhwb3J0VG9QZGYvJHtpZH1gLCB7XG4gICAgICAgICAgICBzdHJpbmdWYWx1ZTogY29udGVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGFydFdvcmtmbG93KGlkOiBzdHJpbmcsIHdvcmtmbG93Q29kZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vU3RhcnRXb3JrZmxvd0Jhc2UvJHt3b3JrZmxvd0NvZGV9LyR7aWR9YCwge30pO1xuICAgIH1cblxuICAgIGdldEFjdGlvbkFsbG93KGlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRBY3Rpb25BbGxvdy8ke2lkfWAsIHt9KTtcbiAgICB9XG5cbiAgICBnZXRBY3Rpb25BbGxvd0luU3RhcnQod29ya2Zsb3dDb2RlOiBzdHJpbmcsIHNlcnZpY2VDb2RlOiBzdHJpbmcgPSAnJykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldEFjdGlvbkFsbG93SW5TdGFydC8ke3dvcmtmbG93Q29kZX0/c2VydmljZUNvZGU9JHtzZXJ2aWNlQ29kZX1gLCB7fSk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVDaGFuZ2VTdGF0ZShpdGVtV29ya2Zsb3dIaXN0b3J5OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9WYWxpZGF0ZUNoYW5nZVN0YXRlQmFzZWAsIGl0ZW1Xb3JrZmxvd0hpc3RvcnkpO1xuICAgIH1cblxuICAgIGluc2VydEJ1bGtBc3luYyhtb2RlbHM6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0luc2VydEJ1bGtBc3luY2AsIG1vZGVscyk7XG4gICAgfVxuXG4gICAgdXBkYXRlQnVsa0FzeW5jKG1vZGVsczogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlQnVsa0FzeW5jYCwgbW9kZWxzKTtcbiAgICB9XG5cbiAgICBhdXRvTmV4dFN0ZXAoaXRlbUlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9BdXRvTmV4dFN0ZXAvJHtpdGVtSWR9YCwge30pO1xuICAgIH1cblxuICAgIGNoYW5nZVN0YXRlQmFzZUJ5QWN0aW9uKGl0ZW1JZDogc3RyaW5nLCBhY3Rpb25Db2RlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaGFuZ2VTdGF0ZUJhc2VCeUFjdGlvbi8ke2l0ZW1JZH0vJHthY3Rpb25Db2RlfWAsIHt9KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VTdGF0ZShpdGVtV29ya2Zsb3dIaXN0b3J5OiBhbnkpIHtcbiAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd0hpc3RvcnkpIHtcbiAgICAgICAgICAgIGlmIChpdGVtV29ya2Zsb3dIaXN0b3J5LmRlcGFydG1lbnRJZHMpIHtcbiAgICAgICAgICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5LmRvblZpSWRzID0gaXRlbVdvcmtmbG93SGlzdG9yeS5kZXBhcnRtZW50SWRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZGVwYXJ0bWVudFZpZXdJZHMpIHtcbiAgICAgICAgICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5LmRvblZpVmlld0lkcyA9IGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZGVwYXJ0bWVudFZpZXdJZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaGFuZ2VTdGF0ZUJhc2VgLCBpdGVtV29ya2Zsb3dIaXN0b3J5KTtcbiAgICB9XG5cbiAgICBjaG9ZS2llbihpdGVtV29ya2Zsb3dIaXN0b3J5OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaG9ZS2llbkJhc2VgLCBpdGVtV29ya2Zsb3dIaXN0b3J5KTtcbiAgICB9XG5cbiAgICBnZXRQZXJtaXNzaW9uU2hhcmVkQnlJdGVtSWRzKGlkczogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRQZXJtaXNzaW9uU2hhcmVkQnlJdGVtSWRzYCwge1xuICAgICAgICAgICAgbGlzdEd1aWRWYWx1ZTogaWRzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFNoYXJlZEtleShkYXRhOiBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldFNoYXJlZEtleUl0ZW1CYXNlYCwgZGF0YSk7XG4gICAgfVxuXG4gICAgZGVsZXRlTGlua1NoYXJpbmcoaWRzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0RlbGV0ZUxpbmtTaGFyaW5nYCwge1xuICAgICAgICAgICAgbGlzdEd1aWRWYWx1ZTogaWRzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJvbGxiYWNrKHJvd0RhdGEsIGxzdE9iamVjdE5hbWU6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vUm9sbGJhY2tCYXNlLyR7cm93RGF0YS5fX3dvcmtmbG93Q29kZX0vJHtyb3dEYXRhLmlkfWAsIHtcbiAgICAgICAgICAgIExpc3RTdHJpbmdWYWx1ZTogbHN0T2JqZWN0TmFtZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByb2xsYmFja0J5SGlzdG9yeShpdGVtSWQ6IHN0cmluZywgaWRIaXN0b3J5OiBzdHJpbmcsIGxzdE9iamVjdE5hbWU6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vUm9sbGJhY2tCYXNlQnlIaXN0b3J5LyR7aXRlbUlkfS8ke2lkSGlzdG9yeX1gLCB7XG4gICAgICAgICAgICBMaXN0U3RyaW5nVmFsdWU6IGxzdE9iamVjdE5hbWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUm9sbGJhY2sgcXV5IHRyw6xuaCB24buBIHRy4bqhbmcgdGjDoWkgdHLGsOG7m2NcbiAgICAgKiBAcGFyYW0gaWQgaWQgY+G7p2EgYuG6o24gZ2hpXG4gICAgICovXG4gICAgcm9sbGJhY2tXb3JrZmxvdyhpZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vUm9sbGJhY2tXb3JrZmxvdy8ke2lkfWAsIHt9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdHLhuqFuZyB0aMOhaSB3b3JrZmxvdyBjb3JlIHNhbmcgxJHDoyBkdXnhu4d0IHF1eeG6v3QgxJHhu4tuaFxuICAgICAqL1xuICAgIHVwZGF0ZURhRHV5ZXRRdXlldERpbmgoaWQ6IHN0cmluZywgaWRRdXlldERpbmg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1VwZGF0ZURhRHV5ZXRRdXlldERpbmgvJHtpZH1gLCB7XG4gICAgICAgICAgICBndWlkVmFsdWU6IGlkUXV5ZXREaW5oXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZU1hUGhhbkNhcEJhc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlTWFQaGFuQ2FwQmFzZWAsIHt9KTtcbiAgICB9XG5cbiAgICBzb3J0R3JvdXBMYXN0TW9kZWxCYXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1VwZGF0ZVRodVRodUdyb3VwYCwge30pO1xuICAgIH1cblxuICAgIGdldFRyZWVEYXRhQmFzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRUcmVlRGF0YUJhc2VgLCB7fSk7XG4gICAgfVxuXG4gICAgcmVvcmRlckRhdGFCeUZpZWxkKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9SZW9yZGVyRGF0YUJ5RmllbGRgLCBkYXRhKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIdHRwT3B0aW9ucyB7XG4gICAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xuICAgICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICB9O1xuICAgIG9ic2VydmU/OiAnYm9keSc7XG4gICAgcGFyYW1zPzogSHR0cFBhcmFtcyB8IHtcbiAgICAgICAgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICB9O1xuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICByZXNwb25zZVR5cGU/OiAnanNvbic7XG4gICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbn1cbiJdfQ==
956
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2Jhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQyxXQUFXLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RixPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUV4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBVyxJQUFJLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHOUQsTUFBTSxVQUFVLEdBQUcsaUZBQWlGLENBQUM7QUFDckcsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBRWhDLE1BQU0sT0FBZ0IsV0FBVztJQXNCN0IsWUFDSSxJQUFnQixFQUNoQixRQUFrQixFQUNsQixVQUFrQjs7UUFwQnRCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixnQkFB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QUUsRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELGVBQWU7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBSTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRSxDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sV0FBVztDQVd2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCByZXRyeSwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IERyb3Bkb3duT3B0aW9ucywgT3BlcmF0b3IgfSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZS1saW5rLWJ5LXBlcm1pc3Npb24vbW9kZWxzL3NoYXJlLWxpbmstYnktcGVybWlzc2lvbic7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJy4uL21vZGVscy9iYXNpYy10cmVlLW5vZGUnO1xuaW1wb3J0IHsgRmlsdGVyLCBHcmlkSW5mbywgSW5jbHVkZSwgU29ydCB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IGdldFN0cmluZ0RhdGVWTiB9IGZyb20gJy4uL3V0aWxzL2RhdGUnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4vY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuL3NpZ25hbHIuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuXG5cbmNvbnN0IEVYQ0VMX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG5jb25zdCBFWENFTF9FWFRFTlNJT04gPSAnLnhsc3gnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVNlcnZpY2Uge1xuICAgIF9odHRwOiBIdHRwQ2xpZW50O1xuICAgIF9pbmplY3RvcjogSW5qZWN0b3I7XG4gICAgX3NpZ25hbHJTZXJ2aWNlUHJpdmF0ZTogU2lnbmFsUlNlcnZpY2U7XG5cbiAgICBzZXJ2aWNlVXJpID0gJyc7XG4gICAgZW5kUG9pbnQgPSAnJztcbiAgICBzZXJ2aWNlQ29kZSA9ICcnO1xuICAgIGVudGl0eU5hbWUgPSAnJztcbiAgICBvYmplY3ROYW1lID0gJyc7XG4gICAgdXNlV29ya2Zsb3cgPSBmYWxzZTtcbiAgICBhcGlHZXREYXRhID0gJ0dldERhdGEnO1xuICAgIGFwaUdldEFsbCA9ICdHZXRBbGxCeUZpbHRlcic7XG4gICAgYXBpR2V0RGV0YWlsQnlGaWx0ZXIgPSAnR2V0QnlGaWx0ZXInO1xuICAgIGRpc2FibGVGaWVsZE5vdFVzZSA9IGZhbHNlO1xuXG4gICAgcmVhZG9ubHkgUkVUUllfQ09VTlQ6IG51bWJlciA9IDA7XG4gICAgcmVhZG9ubHkgUkVQTEFZX0NPVU5UOiBudW1iZXIgPSAxO1xuICAgIHJlYWRvbmx5IExJTUlUX0RFRkFVTFQ6IG51bWJlciA9IDEwMDA7XG5cbiAgICBwcm90ZWN0ZWQgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBzZXJ2aWNlVXJpOiBzdHJpbmcsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX2h0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLl9pbmplY3RvciA9IGluamVjdG9yO1xuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgPSBzZXJ2aWNlVXJpO1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZVByaXZhdGUgPSBpbmplY3Rvci5nZXQoU2lnbmFsUlNlcnZpY2UpO1xuICAgICAgICBjb25zdCBlbnZpcm9ubWVudCA9IHRoaXMuX2luamVjdG9yLmdldChNb2R1bGVDb25maWdTZXJ2aWNlKS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5kaXNhYmxlRmllbGROb3RVc2UgPSBlbnZpcm9ubWVudD8uY2F1SGluaE5naGllcFZ1Py5kaXNhYmxlRmllbGROb3RVc2UgPz8gZmFsc2U7XG4gICAgfVxuXG5cbiAgICBzZXRDdXJyZW50U2VydmljZVVyaShrZXk6IHN0cmluZykge1xuICAgIH1cblxuICAgIGdldEtleVdvcmtmbG93U2V0dGluZygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZW50aXR5TmFtZX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlU2lnbmFsUihjYWxsQmFjaykge1xuICAgICAgICBjb25zdCB0b3BpYyA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xuICAgICAgICAvLyBC4bqvdCDEkeG6p3UgY2jhuqF5XG4gICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlUHJpdmF0ZS5zdGFydCgnQ29tbW9uSHViJywgdG9waWMsIChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAvLyB1bnN1YnNjcmliZSBjw6FjIHRvcGljIMSRw6MgbOG6r25nIG5naGUgdHLGsOG7m2MgxJHDs1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2VQcml2YXRlLnVuU3Vic2NyaWJlVmlld0NvZGUoJ0NvbW1vbkh1YicsIHRvcGljKTtcbiAgICAgICAgICAgIGNhbGxCYWNrKG1lc3NhZ2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRvcGljO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5TdWJzY3JpYmVTaWduYWxSKGtleSkge1xuICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZVByaXZhdGUudW5TdWJzY3JpYmVWaWV3Q29kZSgnQ29tbW9uSHViJywga2V5KTtcbiAgICB9XG5cbiAgICBkZWZhdWx0R2V0U2lnbmFsUihhcGlVcmwpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b3BpYyA9IHRoaXMuc3Vic2NyaWJlU2lnbmFsUihmID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBycyA9IEpTT04ucGFyc2UoZik7XG4gICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gPT0gLTEgbMOgIHRyxrDhu51uZyBo4bujcCBzZXQga2V5IGLhu4sgbOG7l2lcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEgIT0gJy0xJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDYWNoZVJlc3BvbnNlKHJzLmRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChhcGlVcmwuaW5kZXhPZignPycpID09IC0xKSB7XG4gICAgICAgICAgICAgICAgYXBpVXJsICs9IGA/YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFwaVVybCArPSBgJmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcGlVcmwgKz0gYF9rZXlTaWduYWxyPSR7dG9waWN9YDtcbiAgICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXG4gICAgICAgICAgICAgICAgKS50b1Byb21pc2UoKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51blN1YnNjcmliZVNpZ25hbFIodG9waWMpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVmYXVsdFBvc3RTaWduYWxSKGFwaVVybCwgZGF0YTogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLnN1YnNjcmliZVNpZ25hbFIoZiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnMgPSBKU09OLnBhcnNlKGYpO1xuICAgICAgICAgICAgICAgIGlmIChycy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vID09IC0xIGzDoCB0csaw4budbmcgaOG7o3Agc2V0IGtleSBi4buLIGzhu5dpXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5kYXRhICE9ICctMScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FjaGVSZXNwb25zZShycy5kYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShyZXMuZGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXBpVXJsLmluZGV4T2YoJz8nKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgIGFwaVVybCArPSBgP2A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcGlVcmwgKz0gYCZgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXBpVXJsICs9IGBfa2V5U2lnbmFscj0ke3RvcGljfWA7XG4gICAgICAgICAgICB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSlcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxuICAgICAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcbiAgICAgICAgICAgICAgICApLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuU3Vic2NyaWJlU2lnbmFsUih0b3BpYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRDYWNoZVJlc3BvbnNlKGtleTogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vQmFzZUdldENhY2hlSW5mby8ke2tleX1gLCB7fSk7XG4gICAgfVxuXG4gICAgZ2V0T2JqZWN0RGlzcGxheU1vZGVsKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRPYmplY3REaXNwbGF5TW9kZWwvJHtpZH1gLCB7fSk7XG4gICAgfVxuXG4gICAgcG9zdEdyaWRJbmZvKHVybDogc3RyaW5nLCBncmlkSW5mbzogR3JpZEluZm8pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGlmICghZ3JpZEluZm8pIGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKCk7XG4gICAgICAgIGlmIChncmlkSW5mby5maWVsZHMgJiYgZ3JpZEluZm8uZmllbGRzLnN0YXJ0c1dpdGgoJywnKSkge1xuICAgICAgICAgICAgZ3JpZEluZm8uZmllbGRzID0gZ3JpZEluZm8uZmllbGRzLnN1YnN0cmluZygxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9LyR7dXJsfWAsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBnZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvOiBHcmlkSW5mbywgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGxldCBhcGlVcmwgPSB0aGlzLmFwaUdldERhdGE7XG4gICAgICAgIGlmIChwbHVzVXJsICE9IG51bGwgJiYgcGx1c1VybCAhPSAnJykge1xuICAgICAgICAgICAgYXBpVXJsICs9ICcvJyArIHBsdXNVcmw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEdyaWRJbmZvKGFwaVVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGdldEJ5R3JpZFJlcXVlc3RXaXRoQm9keU9sZChncmlkSW5mbzogR3JpZEluZm8sIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBsZXQgYXBpVXJsID0gdGhpcy5hcGlHZXREYXRhO1xuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcbiAgICAgICAgICAgIGFwaVVybCArPSAnLycgKyBwbHVzVXJsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udmVydFZhbHVlRmlsdGVyVG9PbGRCYXNlKGdyaWRJbmZvLmZpbHRlcnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgYmFzZUdldFRyZWVEYXRhKGdyaWRJbmZvOiBHcmlkSW5mbywgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGxldCBhcGlVcmwgPSAnR2V0VHJlZURhdGEnO1xuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcbiAgICAgICAgICAgIGFwaVVybCArPSAnLycgKyBwbHVzVXJsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RHcmlkSW5mbyhhcGlVcmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRWYWx1ZUZpbHRlclRvT2xkQmFzZShmaWx0ZXJzOiBGaWx0ZXJbXSkge1xuICAgICAgICBmaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIuZmlsdGVycyAmJiBmaWx0ZXIuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb252ZXJ0VmFsdWVGaWx0ZXJUb09sZEJhc2UoZmlsdGVyLmZpbHRlcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBKU09OLnBhcnNlKGZpbHRlci52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyVmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAvLyBMw6AgdmFsdWUga2nhu4N1IGRhdGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0clZhbHVlLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBnZXRTdHJpbmdEYXRlVk4oZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBzdHJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENo4buJIGTDuW5nIHRyb25nIHRyxrDhu51uZyBo4bujcCBtdeG7kW4gZ+G7rWkgcmVxdWVzdCDEkeG6v24gY3VzdG9tIHJvdXRlIEdldERhdGEve3BsdXNVcmx9XG4gICAgICovXG4gICAgZ2V0RGF0YUN1c3RvbVJvdXRlKHBsdXNVcmw6IHN0cmluZywgZmlsdGVycz86IEZpbHRlcltdLCBmaWVsZHM6IHN0cmluZyA9ICcnLCBzb3J0czogU29ydFtdID0gW10sIHBhZ2VTaXplOiBudW1iZXIgPSAxLCBwYWdlOiBudW1iZXIgPSAxKSB7XG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKHtcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvcnRzLFxuICAgICAgICAgICAgZmlsdGVyczogZmlsdGVycyA/IGZpbHRlcnMgOiBbXVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnlHcmlkUmVxdWVzdChncmlkSW5mbywgcGx1c1VybCk7XG4gICAgfVxuXG4gICAgZ2V0QWxsV2l0aEluY2x1ZGUoZmlsdGVycz86IEZpbHRlcltdLCBmaWVsZHM6IHN0cmluZyA9ICcnLCBzb3J0czogU29ydFtdID0gW10sIGluY2x1ZGVzOiBJbmNsdWRlW10gPSBbXSwgcGx1c1VybDogc3RyaW5nID0gJycpIHtcbiAgICAgICAgbGV0IGFwaVVybCA9IHRoaXMuYXBpR2V0QWxsO1xuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcbiAgICAgICAgICAgIGFwaVVybCArPSBgLyR7cGx1c1VybH1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKHtcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogOTk5OTlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3J0cyxcbiAgICAgICAgICAgIGZpbHRlcnM6IGZpbHRlcnMgPyBmaWx0ZXJzIDogW10sXG4gICAgICAgICAgICBpbmNsdWRlc1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEdyaWRJbmZvKGFwaVVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGdldEJ5SWRzKGlkczogc3RyaW5nW10sIGZpZWxkczogc3RyaW5nID0gJycsIHNvcnRzOiBTb3J0W10gPSBbXSwgcGx1c1VybDogc3RyaW5nID0gJycpIHtcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IFtcbiAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLmluLCBpZHMpXG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsbChmaWx0ZXJzLCBmaWVsZHMsIHNvcnRzLCBwbHVzVXJsKTtcbiAgICB9XG5cbiAgICBnZXRBbGxXaXRoSWdub3JlKGZpbHRlcnM/OiBGaWx0ZXJbXSwgZmllbGRzOiBzdHJpbmcgPSAnJywgc29ydHM6IFNvcnRbXSA9IFtdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsbChmaWx0ZXJzLCBmaWVsZHMsIHNvcnRzLCAnSWdub3JlQWxsQmFzZUZpbHRlcicpO1xuICAgIH1cblxuICAgIGdldEFsbChmaWx0ZXJzPzogRmlsdGVyW10sIGZpZWxkczogc3RyaW5nID0gJycsIHNvcnRzOiBTb3J0W10gPSBbXSwgcGx1c1VybDogc3RyaW5nID0gJycpIHtcbiAgICAgICAgbGV0IGFwaVVybCA9IHRoaXMuYXBpR2V0QWxsO1xuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcbiAgICAgICAgICAgIGFwaVVybCArPSBgLyR7cGx1c1VybH1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKHtcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogOTk5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc29ydHMsXG4gICAgICAgICAgICBmaWx0ZXJzOiBmaWx0ZXJzID8gZmlsdGVycyA6IFtdXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgZ2V0QWxsQnlHcmlkSW5mbyhncmlkSW5mbzogR3JpZEluZm8sIHBsdXNVcmw6IHN0cmluZyA9ICcnKSB7XG4gICAgICAgIGxldCBhcGlVcmwgPSB0aGlzLmFwaUdldEFsbDtcbiAgICAgICAgaWYgKHBsdXNVcmwgIT0gbnVsbCAmJiBwbHVzVXJsICE9ICcnKSB7XG4gICAgICAgICAgICBhcGlVcmwgKz0gYC8ke3BsdXNVcmx9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgY2hlY2tFeGlzdEJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ2hlY2tFeGlzdGA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGFwaVVybCwgZmlsdGVycyk7XG4gICAgfVxuXG4gICAgYXN5bmMgY2hlY2tEdXBsaWNhdGVkQnlGaWVsZChmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55LCBpZDogYW55KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXG4gICAgICAgICAgICBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXG4gICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KGlkKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXG4gICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNoZWNrRXhpc3RCeUZpbHRlcihmaWx0ZXJzKTtcbiAgICAgICAgaWYgKCFyZXN1bHQuc3VjY2VzcykgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlR3JpZEluZm9Ecm9wZG93bihmaWx0ZXJzOiBGaWx0ZXJbXSwgb3B0aW9uczogRHJvcGRvd25PcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0ge1xuICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBwYWdlOiBvcHRpb25zLnBhZ2UsXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IG9wdGlvbnMucGFnZVNpemVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgc29ydHM6IFtdLFxuICAgICAgICAgICAgZmllbGRzOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxzdEZpZWxkID0gW1xuICAgICAgICAgICAgb3B0aW9ucy52YWx1ZUZpZWxkLFxuICAgICAgICAgICAgb3B0aW9ucy5kaXNwbGF5RmllbGRcbiAgICAgICAgXTtcbiAgICAgICAgbHN0RmllbGQucHVzaCguLi5vcHRpb25zLmZpZWxkUGx1cy5zcGxpdCgnLCcpLmZpbHRlcihxID0+ICEhcSAmJiBxICE9PSAnJykpO1xuICAgICAgICBncmlkSW5mby5maWVsZHMgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmFkZERpc3RpbmN0KGxzdEZpZWxkLCBbXSkudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuc29ydHMgIT0gbnVsbCAmJiBvcHRpb25zLnNvcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzID0gWy4uLm9wdGlvbnMuc29ydHNdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnNvcnRGaWVsZCAhPSBudWxsICYmIG9wdGlvbnMuc29ydEZpZWxkICE9ICcnKSB7XG5cbiAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzLnB1c2goeyBmaWVsZDogb3B0aW9ucy5zb3J0RmllbGQsIGRpcjogb3B0aW9ucy5zb3J0RGlyIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBncmlkSW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucy5maWVsZFBsdXMubGVuZ3RoICYmICFvcHRpb25zLmZpZWxkUGx1cy5zdGFydHNXaXRoKCcsJykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZmllbGRQbHVzID0gJywnICsgb3B0aW9ucy5maWVsZFBsdXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc29ydEZpZWxkID09ICcnKSB7XG4gICAgICAgICAgICBvcHRpb25zLnNvcnRGaWVsZCA9IG9wdGlvbnMuZGlzcGxheUZpZWxkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0T3B0aW9uc1RyZWUob3B0aW9uczogRHJvcGRvd25PcHRpb25zLCBmaWVsZFBhcmVudDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmZpZWxkUGx1cy5sZW5ndGggJiYgIW9wdGlvbnMuZmllbGRQbHVzLnN0YXJ0c1dpdGgoJywnKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5maWVsZFBsdXMgPSAnLCcgKyBvcHRpb25zLmZpZWxkUGx1cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmZpZWxkUGx1cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvcHRpb25zLmZpZWxkUGx1cyArPSAnLCc7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5maWVsZFBsdXMgKz0gZmllbGRQYXJlbnQ7XG4gICAgfVxuXG4gICAgZ2V0RGF0YURyb3Bkb3duKG9wdGlvbnM/OiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFtdLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBnZXREYXRhRHJvcGRvd25CeUZpbHRlcihmaWx0ZXJzOiBGaWx0ZXJbXSwgb3B0aW9ucz86IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXJSYXcoZmlsdGVycywgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXREYXRhRHJvcGRvd25CeUZpbHRlclJhdyhmaWx0ZXJzOiBGaWx0ZXJbXSwgb3B0aW9ucz86IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgb3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldERhdGFEcm9wZG93bkJ5RmlsdGVyKGZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldERhdGFEcm9wZG93bkJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdLCBvcHRpb25zOiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncmlkSW5mbyA9IHRoaXMuZ2VuZXJhdGVHcmlkSW5mb0Ryb3Bkb3duKGZpbHRlcnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaXNTZXJ2ZXJMb2FkICYmICFvcHRpb25zLmlzR2V0QWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCBvcHRpb25zLnBsdXNVcmwpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbEJ5R3JpZEluZm8oZ3JpZEluZm8sIG9wdGlvbnMucGx1c1VybClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFvIHRyZWUgbGlzdCB0dSBkdSBsaWV1IGR1b2MgY2hvLCBjdSB0aGUgbGEgZHUgbGlldSBUcmVlTW9kZWwgPT4gZGEgZHVvYyBzb3J0IHRoZW8gVHJ1b25nIE1hUGhhbkNhcFxuICAgICAqIEBwYXJhbSByYXdEYXRhXG4gICAgICogQHBhcmFtIGZpZWxkUGFyZW50IGZpZWxkIGdpYSB0cmkgY2hhIHRyb25nIG1vZGVsIGNvbi4gVkQ6IElkQ2hhXG4gICAgICogQHBhcmFtIGZpZWxkUGFyZW50VHJlZUl0ZW0gZmllbGQgZ2lhIHRyaSBjdWEgbW9kZWwgY2hhLiBWRDogSWRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldFRyZWVNb2RlbEJhc2UocmF3RGF0YTogYW55W10sIGZpZWxkUGFyZW50OiBzdHJpbmcsIGZpZWxkUGFyZW50VHJlZUl0ZW06IHN0cmluZykge1xuICAgICAgICBpZiAocmF3RGF0YSA9PSBudWxsIHx8IHJhd0RhdGEubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFNYXAgPSBuZXcgTWFwPGFueSwgYW55PigpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBkYXRhIG9mIHJhd0RhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVLZXkgPSBkYXRhW2ZpZWxkUGFyZW50VHJlZUl0ZW1dO1xuICAgICAgICAgICAgY29uc3QgZmllbGRQYXJlbnRWYWx1ZSA9IGRhdGFbZmllbGRQYXJlbnRdO1xuICAgICAgICAgICAgZGF0YS5fbGV2ZWwgPSAwO1xuICAgICAgICAgICAgZGF0YS5fcHJlZml4ID0gJyc7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGFyZW50ID0gZmllbGRQYXJlbnRWYWx1ZSAhPSBudWxsID8gZGF0YU1hcC5nZXQoZmllbGRQYXJlbnRWYWx1ZSkgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGRhdGFQYXJlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21tb25TZXJ2aWNlLmlzVmFsaWRHdWlkKGZpZWxkUGFyZW50VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuX2Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YS5fcm9vdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGF0YU1hcC5zZXQobm9kZUtleSwgZGF0YSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZGF0YSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGEuX2xldmVsID0gZGF0YVBhcmVudC5fbGV2ZWwgKyAxO1xuICAgICAgICAgICAgZGF0YS5fcHJlZml4ID0gZGF0YVBhcmVudC5fcm9vdCA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgID8gJ3wtLSdcbiAgICAgICAgICAgICAgICA6IGRhdGFQYXJlbnQuX3ByZWZpeCArICctLS0nO1xuICAgICAgICAgICAgZGF0YU1hcC5zZXQobm9kZUtleSwgZGF0YSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRhbyB0cmVlIGRhdGEgdHUgZHUgbGlldSBkdW9jIGNob1xuICAgICAqIEBwYXJhbSByYXdEYXRhXG4gICAgICogQHBhcmFtIGZpZWxkUGFyZW50IGZpZWxkIGdpYSB0cmkgY2hhIHRyb25nIG1vZGVsIGNvblxuICAgICAqIEBwYXJhbSBmaWVsZFBhcmVudFRyZWVJdGVtIGZpZWxkIGdpYSB0cmkgY3VhIG1vZGVsIGNoYVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0VHJlZURhdGEocmF3RGF0YSwgZmllbGRQYXJlbnQ6IHN0cmluZywgZmllbGRQYXJlbnRUcmVlSXRlbTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChyYXdEYXRhID09IG51bGwpIHJldHVybiBbXTtcbiAgICAgICAgLy8gbGV0IGNvdW50ID0gMDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIC8vIGNvbnN0IGZ1bmNEZVF1eSA9IChyZXN1bHQsIGRhdGFzLCBwcmVmaXgsIGxldmVsKSA9PiB7XG4gICAgICAgIC8vICAgICBjb25zdCBpdGVtUGFyZW50ID0gcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXTtcbiAgICAgICAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gICAgICAgICBjb3VudCsrO1xuICAgICAgICAvLyAgICAgICAgIGlmIChkYXRhc1tpXVtmaWVsZFBhcmVudF0gPT0gaXRlbVBhcmVudFtvcHRpb25zLmZpZWxkUGFyZW50VHJlZUl0ZW1dKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGRhdGFzW2ldLl9wcmVmaXggPSBgJHtwcmVmaXh9IGA7XG4gICAgICAgIC8vICAgICAgICAgICAgIGRhdGFzW2ldLl9pbmRleCA9IGk7XG4gICAgICAgIC8vICAgICAgICAgICAgIGRhdGFzW2ldLl9sZXZlbCA9IGxldmVsO1xuICAgICAgICAvLyAgICAgICAgICAgICByZXN1bHQucHVzaChkYXRhc1tpXSk7XG4gICAgICAgIC8vICAgICAgICAgICAgIGZ1bmNEZVF1eShyZXN1bHQsIGRhdGFzLCBwcmVmaXggKyAnLS0tJywgbGV2ZWwgKyAxKTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH07XG4gICAgICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3RGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyAgICAgY291bnQrKztcbiAgICAgICAgLy8gICAgIGlmIChyYXdEYXRhW2ldW2ZpZWxkUGFyZW50XSA9PSB2YWx1ZVBhcmVudFJvb3QpIHtcbiAgICAgICAgLy8gICAgICAgICByYXdEYXRhW2ldLl9wcmVmaXggPSAnJztcbiAgICAgICAgLy8gICAgICAgICByYXdEYXRhW2ldLl9pbmRleCA9IGk7XG4gICAgICAgIC8vICAgICAgICAgcmF3RGF0YVtpXS5fbGV2ZWwgPSAxO1xuICAgICAgICAvLyAgICAgICAgIHJlc3VsdC5wdXNoKHJhd0RhdGFbaV0pO1xuICAgICAgICAvLyAgICAgICAgIGZ1bmNEZVF1eShyZXN1bHQsIHJhd0RhdGEsICd8LS0tJywgMik7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coYGxvb3AgY291bnQgb2xkICR7Y291bnR9YCk7XG4gICAgICAgIC8vIGNvdW50ID0gMDtcbiAgICAgICAgY29uc3Qgbm9kZU1hcCA9IG5ldyBNYXA8YW55LCBUcmVlTm9kZT4oKTtcbiAgICAgICAgY29uc3Qgcm9vdHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBkYXRhIG9mIHJhd0RhdGEpIHtcbiAgICAgICAgICAgIC8vIGNvdW50Kys7XG4gICAgICAgICAgICBjb25zdCBub2RlS2V5ID0gZGF0YVtmaWVsZFBhcmVudFRyZWVJdGVtXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudEtleSA9IGRhdGFbZmllbGRQYXJlbnRdO1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBub2RlTWFwLmdldChub2RlS2V5KTtcbiAgICAgICAgICAgIGxldCBpc05ld05vZGUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5vZGUuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnRLZXk7XG4gICAgICAgICAgICAgICAgaXNOZXdOb2RlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyZW50S2V5ID09ICdzdHJpbmcnICYmICF0aGlzLl9jb21tb25TZXJ2aWNlLmlzVmFsaWRHdWlkKHBhcmVudEtleSlcbiAgICAgICAgICAgICAgICB8fCBwYXJlbnRLZXkgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChpc05ld05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IG5ldyBUcmVlTm9kZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICByb290OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVNYXAuc2V0KG5vZGVLZXksIG5ld05vZGUpO1xuICAgICAgICAgICAgICAgICAgICByb290cy5wdXNoKG5vZGVLZXkpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2RlLnJvb3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJvb3RzLnB1c2gobm9kZUtleSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGUgPz89IG5ldyBUcmVlTm9kZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRLZXlcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaXNOZXdOb2RlKSB7XG4gICAgICAgICAgICAgICAgbm9kZU1hcC5zZXQobm9kZUtleSwgbm9kZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwYXJlbnROb2RlID0gbm9kZU1hcC5nZXQocGFyZW50S2V5KTtcbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5sZWFmID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmVudE5vZGUgPSBuZXcgVHJlZU5vZGUoe1xuICAgICAgICAgICAgICAgIGxlYWY6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbbm9kZV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5vZGVNYXAuc2V0KHBhcmVudEtleSwgcGFyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZnVuY1NldFByZWZpeCA9IGZ1bmN0aW9uIChub2RlOiBUcmVlTm9kZSwgcGFyZW50Tm9kZTogVHJlZU5vZGUsIHByZWZpeDogc3RyaW5nKSB7XG4gICAgICAgICAgICAvLyBjb3VudCsrO1xuICAgICAgICAgICAgbm9kZS5kYXRhLl9wcmVmaXggPSBwcmVmaXg7XG4gICAgICAgICAgICBub2RlLmRhdGEuX2xldmVsID0gcGFyZW50Tm9kZS5kYXRhLl9sZXZlbCArIDE7XG4gICAgICAgICAgICByZXN1bHQucHVzaChub2RlLmRhdGEpO1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gPT0gbnVsbCB8fCBub2RlLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgZnVuY1NldFByZWZpeChjaGlsZCwgbm9kZSwgcHJlZml4ICsgJy0tLScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IHJvb3Qgb2Ygcm9vdHMpIHtcbiAgICAgICAgICAgIC8vIGNvdW50Kys7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZU1hcC5nZXQocm9vdCk7XG4gICAgICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLmRhdGEuX3ByZWZpeCA9ICcnO1xuICAgICAgICAgICAgbm9kZS5kYXRhLl9sZXZlbCA9IDE7XG4gICAgICAgICAgICByZXN1bHQucHVzaChub2RlLmRhdGEpO1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gPT0gbnVsbCB8fCBub2RlLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBmdW5jU2V0UHJlZml4KGNoaWxkLCBub2RlLCAnfC0tJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgbG9vcCBjb3VudCBuZXcgJHtjb3VudH1gKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldFRyZWVEYXRhRHJvcGRvd24oZmllbGRQYXJlbnQ6IHN0cmluZywgdmFsdWVQYXJlbnRSb290OiBudW1iZXIgPSAtMSwgb3B0aW9ucz86IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJlZURhdGFEcm9wZG93bkJ5RmlsdGVyKFtdLCBmaWVsZFBhcmVudCwgdmFsdWVQYXJlbnRSb290LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBnZXRUcmVlRGF0YURyb3Bkb3duQnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10sIGZpZWxkUGFyZW50OiBzdHJpbmcsIHZhbHVlUGFyZW50Um9vdDogbnVtYmVyID0gLTEsIG9wdGlvbnM/OiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldFRyZWVEYXRhRHJvcGRvd25CeUZpbHRlclJhdyhmaWx0ZXJzLCBmaWVsZFBhcmVudCwgdmFsdWVQYXJlbnRSb290LCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFRyZWVEYXRhRHJvcGRvd25CeUZpbHRlclJhdyhmaWx0ZXJzOiBGaWx0ZXJbXSwgZmllbGRQYXJlbnQ6IHN0cmluZywgdmFsdWVQYXJlbnRSb290OiBudW1iZXIgPSAtMSwgb3B0aW9ucz86IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgb3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0T3B0aW9uc1RyZWUob3B0aW9ucywgZmllbGRQYXJlbnQpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaXNUcmVlQmFzZU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JpZEluZm8gPSB0aGlzLmdlbmVyYXRlR3JpZEluZm9Ecm9wZG93bihmaWx0ZXJzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VHZXRUcmVlRGF0YShncmlkSW5mbylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVEYXRhID0gdGhpcy5nZXRUcmVlTW9kZWxCYXNlKHJlcy5kYXRhLCBmaWVsZFBhcmVudCwgb3B0aW9ucy5maWVsZFBhcmVudFRyZWVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gdHJlZURhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoZmlsdGVycywgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVEYXRhID0gdGhpcy5nZXRUcmVlRGF0YShyZXMuZGF0YSwgZmllbGRQYXJlbnQsIG9wdGlvbnMuZmllbGRQYXJlbnRUcmVlSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHRyZWVEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWVsZHNGcm9tRHJvcGRvd25PcHRpb25zKG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucykge1xuICAgICAgICBjb25zdCBmaWVsZHMgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMudmFsdWVGaWVsZCAmJiBvcHRpb25zLnZhbHVlRmllbGQgIT09ICcnKSB7XG4gICAgICAgICAgICBmaWVsZHMucHVzaChvcHRpb25zLnZhbHVlRmllbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZGlzcGxheUZpZWxkICYmIG9wdGlvbnMuZGlzcGxheUZpZWxkICE9PSAnJykge1xuICAgICAgICAgICAgZmllbGRzLnB1c2gob3B0aW9ucy5kaXNwbGF5RmllbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmllbGRQYXJlbnRUcmVlSXRlbSAmJiBvcHRpb25zLmZpZWxkUGFyZW50VHJlZUl0ZW0gIT09ICcnKSB7XG4gICAgICAgICAgICBmaWVsZHMucHVzaChvcHRpb25zLmZpZWxkUGFyZW50VHJlZUl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmllbGRUcmVlICYmIG9wdGlvbnMuZmllbGRUcmVlICE9PSAnJykge1xuICAgICAgICAgICAgZmllbGRzLnB1c2gob3B0aW9ucy5maWVsZFRyZWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmllbGRQbHVzICYmIG9wdGlvbnMuZmllbGRQbHVzICE9PSAnJykge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goLi4ub3B0aW9ucy5maWVsZFBsdXMuc3BsaXQoJywnKS5maWx0ZXIoeCA9PiB4ICE9PSAnJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChmaWVsZHMpKS5qb2luKCcsJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IGRldGFpbCB24bubaSBhcGkgZG8gRGV2IHThu7Egdmnhur90LCBt4bq3YyDEkeG7i25oIHVybCAnQ3VzdG9tL3tpZH0nXG4gICAgICogQHBhcmFtIGlkIC0gaWQgYuG6o24gZ2hpXG4gICAgICogQHBhcmFtIHBsdXNVcmwgLSBhcGkgc+G6vSB0aMOgbmggPT4gJ1BsdXNVcmwve2lkfSdcbiAgICAgKiBAcGFyYW0gcXVlcnlQYXJhbSAtIHF1ZXJ5UGFyYW0gdGjDqm0gdsOgbyBzYXUgdXJsLCBu4bq/dSBj4bqnblxuICAgICAqL1xuICAgIGdldERldGFpbEN1c3RvbShpZDogc3RyaW5nLCBwbHVzVXJsOiBzdHJpbmcgPSAnQ3VzdG9tJywgcXVlcnlQYXJhbTogc3RyaW5nID0gJycpIHtcbiAgICAgICAgbGV0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vJHtwbHVzVXJsfS8ke2lkfWA7XG4gICAgICAgIHVybCArPSBxdWVyeVBhcmFtICE9ICcnID8gYCYke3F1ZXJ5UGFyYW19YCA6ICcnO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0RGV0YWlsKGlkOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vJHtpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0RGV0YWlsV2l0aEZpZWxkcyhpZDogc3RyaW5nLCBmaWVsZHMgPSAnJywgc29ydHM6IFNvcnRbXSA9IFtdLCBpbmNsdWRlczogSW5jbHVkZVtdID0gW10pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXG4gICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignaWQnLCBPcGVyYXRvci5lcXVhbCwgaWQpXG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiB0aGlzLmdldERldGFpbEJ5RmlsdGVyKGZpbHRlcnMsIHNvcnRzLCBmaWVsZHMsIGluY2x1ZGVzKTtcbiAgICB9XG5cbiAgICBnZXREZXRhaWxXaXRoUGVybWlzc2lvbihpZDogYW55LCBwaWQ6IHN0cmluZyA9IG51bGwsIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBpZiAocGlkID09IG51bGwpIHtcbiAgICAgICAgICAgIHBpZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRGV0YWlsV2l0aFBlcm1pc3Npb24vJHtpZH0/cGlkPSR7cGlkfWA7XG4gICAgICAgIGlmIChwbHVzVXJsKSB7XG4gICAgICAgICAgICB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0RldGFpbFdpdGhQZXJtaXNzaW9uLyR7cGx1c1VybH0vJHtpZH0/cGlkPSR7cGlkfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGdldERldGFpbEJ5UGlkKHBpZDogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0RldGFpbFdpdGhCeVBpZC8ke3BpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0QnlJbnN0YW5jZUlkKGluc3RhbmNlSWQ6IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRCeUluc3RhY2VJZC8ke2luc3RhbmNlSWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGdldERldGFpbEJ5Q29kZShjb2RlOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QnlDb2RlLyR7Y29kZX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0RGV0YWlsQnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10gPSBbXSwgc29ydHM6IFNvcnRbXSA9IFtdLCBmaWVsZHMgPSAnJywgaW5jbHVkZXM6IEluY2x1ZGVbXSA9IFtdKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7dGhpcy5hcGlHZXREZXRhaWxCeUZpbHRlcn1gO1xuICAgICAgICBjb25zdCBncmlkSW5mbyA9IHtcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICBzb3J0cyxcbiAgICAgICAgICAgIGluY2x1ZGVzLFxuICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBjb3VudEJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdID0gW10pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9Db3VudEJ5RmlsdGVyYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBmaWx0ZXJzKTtcbiAgICB9XG5cbiAgICBnZXRMYXN0RGV0YWlsQnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10gPSBbXSwgc29ydHM6IFNvcnRbXSA9IFtdKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldExhc3RCeUZpbHRlcmA7XG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0ge1xuICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgIHNvcnRzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFdvcmtmbG93U2V0dGluZ0J5Q29kZSh3b3JrZmxvd0NvZGU6IHN0cmluZykge1xuICAgICAgICBjb25zdCB3b3JrZmxvd1NldHRpbmcgPSAoYXdhaXQgdGhpcy5nZXREZXRhaWxCeUZpbHRlcihcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignY29kZScsIE9wZXJhdG9yLmVxdWFsLCB3b3JrZmxvd0NvZGUpXG4gICAgICAgICAgICBdXG4gICAgICAgICkpLmRhdGE7XG4gICAgICAgIGlmICh3b3JrZmxvd1NldHRpbmcgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGpzb25TY2hlbWEgPSA8YW55PndvcmtmbG93U2V0dGluZ1snZGF0YSddO1xuICAgICAgICB3b3JrZmxvd1NldHRpbmcuZGF0YSA9IEpTT04ucGFyc2UoanNvblNjaGVtYSk7XG4gICAgICAgIGNvbnN0IHN0YXRlTWFjaGluZURhdGEgPSB3b3JrZmxvd1NldHRpbmcuZGF0YTtcbiAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zID0ge307XG4gICAgICAgIHN0YXRlTWFjaGluZURhdGEubWFjaGluZXMuZm9yRWFjaChtYWNoaW5lID0+IHtcbiAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdID0gW107XG4gICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmNvbm5lY3Rpb25zLmZvckVhY2goY29ubiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbm4uc291cmNlID09IG1hY2hpbmUuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0ucHVzaChjb25uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB3b3JrZmxvd1NldHRpbmc7XG4gICAgfVxuXG4gICAgZ2V0QWxsQXN5bmMoKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEFzeW5jYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIHBvc3QoaXRlbTogYW55LCBwbHVzVXJsOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJpID0gcGx1c1VybCA/IGAke3RoaXMuc2VydmljZVVyaX0vJHtwbHVzVXJsfWAgOiB0aGlzLnNlcnZpY2VVcmk7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXG4gICAgICAgICAgICAucG9zdDxSZXNwb25zZVJlc3VsdD4odXJpLCBpdGVtKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIHB1dChpZDogc3RyaW5nLCBpdGVtOiBhbnksIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBwbHVzVXJsID8gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3BsdXNVcmx9LyR7aWR9YCA6IGAke3RoaXMuc2VydmljZVVyaX0vJHtpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXRlbSkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlKGlkOiBudW1iZXIsIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBwbHVzVXJsID8gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3BsdXNVcmx9LyR7aWR9YCA6IGAke3RoaXMuc2VydmljZVVyaX0vJHtpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHVybCkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlQnlJZChpZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0Pih1cmwpLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICApLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGRlbGV0ZU1hbnkobHN0SWQ6IHN0cmluZywgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IHBsdXNVcmwgPyBgJHt0aGlzLnNlcnZpY2VVcml9L0RlbGV0ZU1hbnlBc3luYy8ke3BsdXNVcmx9LyR7bHN0SWR9YCA6IGAke3RoaXMuc2VydmljZVVyaX0vRGVsZXRlTWFueUFzeW5jLyR7bHN0SWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0Pih1cmwpLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGRlZmF1bHRHZXQoYXBpVXJsLCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBvcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGdldElnbm9yZUNsaWVudENhY2hlKGFwaVVybCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDYWNoZS1Db250cm9sJzogJ25vLWNhY2hlJyB9KSxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgb3B0aW9ucylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBkZWZhdWx0UG9zdChhcGlVcmwsIGRhdGEsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhLCBvcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGRlZmF1bHRQdXQoYXBpVXJsLCBkYXRhKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBkZWZhdWx0RGVsZXRlKGFwaVVybCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0RmlsZUJ5R2V0UmVxdWVzdCh1cmwsIGZpbGVOYW1lKSB7XG4gICAgICAgIHRoaXMuc2F2ZUZpbGVGcm9tT2JzZXJ2YWJsZShcbiAgICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGU6ICdibG9iJyBhcyAnanNvbicgfSksXG4gICAgICAgICAgICBmaWxlTmFtZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldEZpbGVCeVBvc3RSZXF1ZXN0KHVybCwgZGF0YTogYW55LCBmaWxlTmFtZSkge1xuICAgICAgICB0aGlzLnNhdmVGaWxlRnJvbU9ic2VydmFibGUoXG4gICAgICAgICAgICB0aGlzLl9odHRwLnBvc3QodXJsLCBkYXRhLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIGFzICdqc29uJyB9KSxcbiAgICAgICAgICAgIGZpbGVOYW1lXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlRmlsZUZyb21PYnNlcnZhYmxlKG9iOiBPYnNlcnZhYmxlPGFueT4sIGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgb2IudG9Qcm9taXNlKCkudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhyZXMsIGZpbGVOYW1lKTtcbiAgICAgICAgfSkuY2F0Y2goYXN5bmMgZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IGVyci5lcnJvci50ZXh0KCk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yVGV4dCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEVudGl0eU1ldGFkYXRhKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRFbnRpdHlNZXRhZGF0YWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgc2F2ZUVudGl0eU1ldGFkYXRhKGRhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vU2F2ZUVudGl0eU1ldGFkYXRhYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgY2hhbmdlTWV0YWRhdGFTdGF0dXMoaWQ6IG51bWJlciwgbWV0YWRhdGFUeXBlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9jaGFuZ2VNZXRhZGF0YVN0YXR1cz9pZD0ke2lkfSZtZXRhZGF0YVN0YXR1c1R5cGU9JHttZXRhZGF0YVR5cGV9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCB7fSkucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBzYXZlQW5kQ2hhbmdlTWV0YWRhdGFTdGF0dXMoaWQ6IG51bWJlciwgbWV0YWRhdGFUeXBlOiBzdHJpbmcsIGRhdGE6IGFueSkge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L3NhdmVBbmRDaGFuZ2VNZXRhZGF0YVN0YXR1cz9pZD0ke2lkfSZtZXRhZGF0YVN0YXR1c1R5cGU9JHttZXRhZGF0YVR5cGV9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKS5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGdldEVudGl0eVBlcm1pc3Npb24oKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEVudGl0eVBlcm1pc3Npb25gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybClcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIHNhdmVFbnRpdHlQZXJtaXNzaW9uKGRhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vU2F2ZUVudGl0eVBlcm1pc3Npb25gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVFbnRpdHlQZXJtaXNzaW9uKGlkOiBzdHJpbmcsIGl0ZW06IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdEVudGl0eVBlcm1pc3Npb24vJHtpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXRlbSkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlRW50aXR5UGVybWlzc2lvbihpZDogbnVtYmVyKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0RlbGV0ZUVudGl0eVBlcm1pc3Npb24vJHtpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHVybCkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0V2ZIaXN0b3J5QnlFbnRpdHlJdGVtKGlkOiBudW1iZXIpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0V2ZIaXN0b3J5QnlFbnRpdHlJdGVtLyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0Pih1cmwpLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGdldERpY1N0YXR1c05ob21UcmFuZ1RoYWkoc3RhdHVzZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldERpY1N0YXR1c05ob21UcmFuZ1RoYWlgO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIHtcbiAgICAgICAgICAgIGxpc3RTdHJpbmdWYWx1ZTogc3RhdHVzZXNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVQcm9jZXNzV29ya2Zsb3coaWQ6IG51bWJlciwgYWN0aW9uQ29kZTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9WYWxpZGF0ZVByb2Nlc3NXRi8ke2lkfS8ke2FjdGlvbkNvZGV9YCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcHJvY2Vzc1dvcmtmbG93KGlkOiBudW1iZXIsIGFjdGlvbkNvZGU6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vUHJvY2Vzc1dvcmtmbG93LyR7aWR9LyR7YWN0aW9uQ29kZX1gLCBkYXRhKTtcbiAgICB9XG5cbiAgICBnZXRVc2VySW5Qcm9jZXNzRm9ybSh3b3JrZmxvd0NvZGU6IHN0cmluZywgc3RhdGVDb2RlOiBzdHJpbmcsIGFjdGlvbkNvZGU6IHN0cmluZywgaXRlbUlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRVc2VySW5Qcm9jZXNzRm9ybUJhc2UvJHt3b3JrZmxvd0NvZGV9LyR7c3RhdGVDb2RlfS8ke2FjdGlvbkNvZGV9LyR7aXRlbUlkfWAsIHt9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVFcnJvcihlcnJvcjogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgY29uc3QgY29tbW9uU2VydmljZSA9IGluamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIGNvbW1vblNlcnZpY2UuaGFuZGxlRXJyb3IoZXJyb3IsIGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2F2ZUFzRXhjZWxGaWxlKGJ1ZmZlcjogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xuICAgICAgICAgICAgdHlwZTogRVhDRUxfVFlQRVxuICAgICAgICB9KTtcbiAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhkYXRhLCBmaWxlTmFtZSArICdfJyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgRVhDRUxfRVhURU5TSU9OKTtcbiAgICB9XG5cbiAgICBwdXRXaXRoUGx1c1VybChpZDogc3RyaW5nLCBpdGVtOiBhbnksIHBsdXNVcmw6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke2lkfS8ke3BsdXNVcmx9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIGl0ZW0pLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEJ5RmllbGQoZmllbGQ6IHN0cmluZywgYXJyVmFsdWUsIGdldEZpZWxkcyA9ICcnLCBzb3J0RmllbGQgPSBudWxsLCBzb3J0RGlyID0gbnVsbCk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgYXJyVmFsdWUgPSAoYXJyVmFsdWUgfHwgW10pLmZpbHRlcigodmFsLCBpbmQsIGFycikgPT4gKHZhbCA9PT0gMCB8fCB2YWwpICYmIGFyci5pbmRleE9mKHZhbCkgPT09IGluZCk7XG5cbiAgICAgICAgaWYgKCFhcnJWYWx1ZSB8fCAhYXJyVmFsdWUubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgICAgICAgY29uc3QgYXJyRmlsdGVyID0gW25ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuaW4sXG4gICAgICAgICAgICB2YWx1ZTogYXJyVmFsdWUudG9TdHJpbmcoKVxuICAgICAgICB9KV07XG5cbiAgICAgICAgY29uc3QgYXJyU29ydCA9IFtdO1xuICAgICAgICBpZiAoc29ydEZpZWxkKSB7XG4gICAgICAgICAgICBhcnJTb3J0LnB1c2gobmV3IFNvcnQoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiBzb3J0RmllbGQsXG4gICAgICAgICAgICAgICAgZGlyOiBzb3J0RGlyIHwgMVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJyUmVzdWx0ID0gKGF3YWl0IHRoaXMuZ2V0QWxsKGFyckZpbHRlciwgZ2V0RmllbGRzLCBhcnJTb3J0KSkuZGF0YTtcbiAgICAgICAgcmV0dXJuIChhcnJSZXN1bHQgfHwgW10pO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEJ5RmllbGRUb0RpYyhmaWVsZDogc3RyaW5nLCBhcnJWYWx1ZSwgZ2V0RmllbGRzLCBrZXlGaWVsZCA9IG51bGwsIHZhbHVlRmllbGQgPSBudWxsKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXJyUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRCeUZpZWxkKGZpZWxkLCBhcnJWYWx1ZSwgZ2V0RmllbGRzKTtcbiAgICAgICAgY29uc3QgcnNEaWMgPSB7fTtcbiAgICAgICAgaWYgKCFhcnJSZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcnNEaWM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5RmllbGQpIHtcbiAgICAgICAgICAgIGtleUZpZWxkID0gZmllbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWVGaWVsZCkge1xuICAgICAgICAgICAgYXJyUmVzdWx0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcnNEaWNbaXRlbVtrZXlGaWVsZF1dID0gaXRlbVt2YWx1ZUZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXJyUmVzdWx0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcnNEaWNbaXRlbVtrZXlGaWVsZF1dID0gaXRlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJzRGljO1xuICAgIH1cblxuICAgIG5ld0ZpbHRlcihmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBhbnksIHZhbHVlSXNGaWVsZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSksXG4gICAgICAgICAgICB2YWx1ZUlzRmllbGRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyVjQoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld0JpbmRpbmdGaWx0ZXIoY29sdW1uOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgc291cmNlRmllbGQ6IHN0cmluZywgc3ViRmllbGQ/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQ6IGNvbHVtbixcbiAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgc291cmNlRmllbGQsXG4gICAgICAgICAgICBzdWJGaWVsZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXREYXRhVHJpbmhLeShpdGVtOiBhbnksIHJvd0RhdGE/OiBhbnkpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBleHBvcnRUb1BkZihpZDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9FeHBvcnRUb1BkZi8ke2lkfWAsIHtcbiAgICAgICAgICAgIHN0cmluZ1ZhbHVlOiBjb250ZW50XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXJ0V29ya2Zsb3coaWQ6IHN0cmluZywgd29ya2Zsb3dDb2RlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9TdGFydFdvcmtmbG93QmFzZS8ke3dvcmtmbG93Q29kZX0vJHtpZH1gLCB7fSk7XG4gICAgfVxuXG4gICAgZ2V0QWN0aW9uQWxsb3coaWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldEFjdGlvbkFsbG93LyR7aWR9YCwge30pO1xuICAgIH1cblxuICAgIGdldEFjdGlvbkFsbG93SW5TdGFydCh3b3JrZmxvd0NvZGU6IHN0cmluZywgc2VydmljZUNvZGU6IHN0cmluZyA9ICcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0QWN0aW9uQWxsb3dJblN0YXJ0LyR7d29ya2Zsb3dDb2RlfT9zZXJ2aWNlQ29kZT0ke3NlcnZpY2VDb2RlfWAsIHt9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZUNoYW5nZVN0YXRlKGl0ZW1Xb3JrZmxvd0hpc3Rvcnk6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1ZhbGlkYXRlQ2hhbmdlU3RhdGVCYXNlYCwgaXRlbVdvcmtmbG93SGlzdG9yeSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0QnVsa0FzeW5jKG1vZGVsczogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vSW5zZXJ0QnVsa0FzeW5jYCwgbW9kZWxzKTtcbiAgICB9XG5cbiAgICB1cGRhdGVCdWxrQXN5bmMobW9kZWxzOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVCdWxrQXN5bmNgLCBtb2RlbHMpO1xuICAgIH1cblxuICAgIGF1dG9OZXh0U3RlcChpdGVtSWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0F1dG9OZXh0U3RlcC8ke2l0ZW1JZH1gLCB7fSk7XG4gICAgfVxuXG4gICAgY2hhbmdlU3RhdGVCYXNlQnlBY3Rpb24oaXRlbUlkOiBzdHJpbmcsIGFjdGlvbkNvZGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0NoYW5nZVN0YXRlQmFzZUJ5QWN0aW9uLyR7aXRlbUlkfS8ke2FjdGlvbkNvZGV9YCwge30pO1xuICAgIH1cblxuICAgIGNoYW5nZVN0YXRlKGl0ZW1Xb3JrZmxvd0hpc3Rvcnk6IGFueSkge1xuICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeSkge1xuICAgICAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZGVwYXJ0bWVudElkcykge1xuICAgICAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZG9uVmlJZHMgPSBpdGVtV29ya2Zsb3dIaXN0b3J5LmRlcGFydG1lbnRJZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeS5kZXBhcnRtZW50Vmlld0lkcykge1xuICAgICAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZG9uVmlWaWV3SWRzID0gaXRlbVdvcmtmbG93SGlzdG9yeS5kZXBhcnRtZW50Vmlld0lkcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0NoYW5nZVN0YXRlQmFzZWAsIGl0ZW1Xb3JrZmxvd0hpc3RvcnkpO1xuICAgIH1cblxuICAgIGNob1lLaWVuKGl0ZW1Xb3JrZmxvd0hpc3Rvcnk6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0Nob1lLaWVuQmFzZWAsIGl0ZW1Xb3JrZmxvd0hpc3RvcnkpO1xuICAgIH1cblxuICAgIGdldFBlcm1pc3Npb25TaGFyZWRCeUl0ZW1JZHMoaWRzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBlcm1pc3Npb25TaGFyZWRCeUl0ZW1JZHNgLCB7XG4gICAgICAgICAgICBsaXN0R3VpZFZhbHVlOiBpZHNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0U2hhcmVkS2V5KGRhdGE6IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0U2hhcmVkS2V5SXRlbUJhc2VgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBkZWxldGVMaW5rU2hhcmluZyhpZHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vRGVsZXRlTGlua1NoYXJpbmdgLCB7XG4gICAgICAgICAgICBsaXN0R3VpZFZhbHVlOiBpZHNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcm9sbGJhY2socm93RGF0YSwgbHN0T2JqZWN0TmFtZTogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9Sb2xsYmFja0Jhc2UvJHtyb3dEYXRhLl9fd29ya2Zsb3dDb2RlfS8ke3Jvd0RhdGEuaWR9YCwge1xuICAgICAgICAgICAgTGlzdFN0cmluZ1ZhbHVlOiBsc3RPYmplY3ROYW1lXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJvbGxiYWNrQnlIaXN0b3J5KGl0ZW1JZDogc3RyaW5nLCBpZEhpc3Rvcnk6IHN0cmluZywgbHN0T2JqZWN0TmFtZTogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9Sb2xsYmFja0Jhc2VCeUhpc3RvcnkvJHtpdGVtSWR9LyR7aWRIaXN0b3J5fWAsIHtcbiAgICAgICAgICAgIExpc3RTdHJpbmdWYWx1ZTogbHN0T2JqZWN0TmFtZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSb2xsYmFjayBxdXkgdHLDrG5oIHbhu4EgdHLhuqFuZyB0aMOhaSB0csaw4bubY1xuICAgICAqIEBwYXJhbSBpZCBpZCBj4bunYSBi4bqjbiBnaGlcbiAgICAgKi9cbiAgICByb2xsYmFja1dvcmtmbG93KGlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9Sb2xsYmFja1dvcmtmbG93LyR7aWR9YCwge30pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0cuG6oW5nIHRow6FpIHdvcmtmbG93IGNvcmUgc2FuZyDEkcOjIGR1eeG7h3QgcXV54bq/dCDEkeG7i25oXG4gICAgICovXG4gICAgdXBkYXRlRGFEdXlldFF1eWV0RGluaChpZDogc3RyaW5nLCBpZFF1eWV0RGluaDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlRGFEdXlldFF1eWV0RGluaC8ke2lkfWAsIHtcbiAgICAgICAgICAgIGd1aWRWYWx1ZTogaWRRdXlldERpbmhcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdXBkYXRlTWFQaGFuQ2FwQmFzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVNYVBoYW5DYXBCYXNlYCwge30pO1xuICAgIH1cblxuICAgIHNvcnRHcm91cExhc3RNb2RlbEJhc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlVGh1VGh1R3JvdXBgLCB7fSk7XG4gICAgfVxuXG4gICAgZ2V0VHJlZURhdGFCYXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldFRyZWVEYXRhQmFzZWAsIHt9KTtcbiAgICB9XG5cbiAgICByZW9yZGVyRGF0YUJ5RmllbGQoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1Jlb3JkZXJEYXRhQnlGaWVsZGAsIGRhdGEpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBPcHRpb25zIHtcbiAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfCB7XG4gICAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgb2JzZXJ2ZT86ICdib2R5JztcbiAgICBwYXJhbXM/OiBIdHRwUGFyYW1zIHwge1xuICAgICAgICBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgIHJlc3BvbnNlVHlwZT86ICdqc29uJztcbiAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xufVxuIl19