@esfaenza/admin-module 13.1.0-beta9 → 13.1.3

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 (54) hide show
  1. package/README.md +1 -24
  2. package/esm2020/lib/admin-module-messages.mjs +8 -0
  3. package/esm2020/lib/admin-module.comms.service.mjs +30 -0
  4. package/esm2020/lib/admin-module.module.mjs +29 -34
  5. package/esm2020/lib/components/audits/adm_audits.component.mjs +24 -20
  6. package/esm2020/lib/components/enqueues/adm_enq.component.mjs +28 -26
  7. package/esm2020/lib/components/logs/adm_logs.component.loc.mjs +19 -0
  8. package/esm2020/lib/components/logs/adm_logs.component.mjs +21 -12
  9. package/esm2020/lib/components/metrics/metrics_search.component.mjs +27 -23
  10. package/esm2020/lib/components/profiler/adm_profiler.component.loc.mjs +2 -2
  11. package/esm2020/lib/components/profiler/adm_profiler.component.mjs +28 -27
  12. package/esm2020/lib/components/topact/topact_search.component.mjs +27 -25
  13. package/esm2020/lib/components/workers/adm_wrk.component.mjs +27 -25
  14. package/esm2020/lib/models/components/AuditsView.mjs +1 -1
  15. package/esm2020/lib/models/components/LocksView.mjs +1 -1
  16. package/esm2020/lib/models/components/ProfilerDataNode.mjs +3 -3
  17. package/esm2020/lib/models/components/ProfilerDataNodesView.mjs +1 -1
  18. package/esm2020/lib/models/components/TopActivitiesDataView.mjs +1 -1
  19. package/esm2020/lib/models/components/TopActivity.mjs +1 -1
  20. package/esm2020/lib/models/shared/Locale.mjs +1 -1
  21. package/esm2020/lib/tokens.mjs +2 -1
  22. package/esm2020/public-api.mjs +2 -2
  23. package/fesm2015/esfaenza-admin-module.mjs +686 -732
  24. package/fesm2015/esfaenza-admin-module.mjs.map +1 -1
  25. package/fesm2020/esfaenza-admin-module.mjs +716 -760
  26. package/fesm2020/esfaenza-admin-module.mjs.map +1 -1
  27. package/lib/admin-module-messages.d.ts +6 -0
  28. package/lib/admin-module.comms.service.d.ts +10 -0
  29. package/lib/admin-module.module.d.ts +11 -2
  30. package/lib/components/audits/adm_audits.component.d.ts +6 -4
  31. package/lib/components/enqueues/adm_enq.component.d.ts +6 -6
  32. package/lib/components/logs/adm_logs.component.d.ts +5 -3
  33. package/lib/components/logs/adm_logs.component.loc.d.ts +7 -0
  34. package/lib/components/metrics/metrics_search.component.d.ts +9 -6
  35. package/lib/components/profiler/adm_profiler.component.d.ts +6 -6
  36. package/lib/components/topact/topact_search.component.d.ts +9 -6
  37. package/lib/components/workers/adm_wrk.component.d.ts +7 -6
  38. package/lib/models/components/AuditsView.d.ts +1 -1
  39. package/lib/models/components/ProfilerDataNodesView.d.ts +1 -1
  40. package/lib/models/components/TopActivitiesDataView.d.ts +1 -1
  41. package/lib/models/components/TopActivity.d.ts +3 -1
  42. package/lib/tokens.d.ts +1 -0
  43. package/package.json +11 -2
  44. package/public-api.d.ts +1 -1
  45. package/esm2020/lib/communications/base/BaseModuleCommunicationsConsumer.mjs +0 -3
  46. package/esm2020/lib/components/index.mjs +0 -14
  47. package/esm2020/lib/models/components/Lock.loc.mjs +0 -13
  48. package/esm2020/lib/models/components/Lock.mjs +0 -48
  49. package/esm2020/lib/models/index.mjs +0 -22
  50. package/lib/communications/base/BaseModuleCommunicationsConsumer.d.ts +0 -3
  51. package/lib/components/index.d.ts +0 -13
  52. package/lib/models/components/Lock.d.ts +0 -12
  53. package/lib/models/components/Lock.loc.d.ts +0 -42
  54. package/lib/models/index.d.ts +0 -21
@@ -1,33 +1,38 @@
1
+ // Angular
1
2
  import { Component, Inject } from "@angular/core";
3
+ // Configurazioni
2
4
  import { LocalizationService } from "@esfaenza/localizations";
3
- // Classi
4
- import { ProfilerDataNode, ProfilerDataNodesView, Repository } from "../../models";
5
+ import { InboundMessageTypes } from "@esfaenza/extensions";
5
6
  // Applicazione
6
- import { AdmProfilerComponentLoc } from "../";
7
- import { ADM_BACKEND_URL } from "../../tokens";
7
+ import { ProfilerDataNode } from "../../models/components/ProfilerDataNode";
8
+ import { ProfilerDataNodesView } from "../../models/components/ProfilerDataNodesView";
9
+ import { Repository } from "../../models/externals/Repository";
10
+ import { ADM_BACKEND_URL, ADM_MODULE_PATH } from "../../tokens";
11
+ // Localizzazione
12
+ import { AdmProfilerComponentLoc } from "./adm_profiler.component.loc";
8
13
  import * as i0 from "@angular/core";
9
14
  import * as i1 from "@esfaenza/extensions";
10
15
  import * as i2 from "@esfaenza/localizations";
11
16
  import * as i3 from "@esfaenza/preferences";
12
17
  import * as i4 from "@angular/common";
13
- import * as i5 from "../../communications/base/BaseModuleCommunicationsConsumer";
14
- import * as i6 from "@esfaenza/httpservice";
15
- import * as i7 from "@angular/router";
16
- import * as i8 from "@esfaenza/forms-and-validations";
17
- import * as i9 from "@esfaenza/es-table";
18
- import * as i10 from "@angular/forms";
18
+ import * as i5 from "@esfaenza/httpservice";
19
+ import * as i6 from "@angular/router";
20
+ import * as i7 from "@esfaenza/forms-and-validations";
21
+ import * as i8 from "@esfaenza/es-table";
22
+ import * as i9 from "@angular/forms";
19
23
  export class AdmProfilerComponent {
20
- constructor(expExts, lc, localStorage, location, _state, http, route, backend) {
24
+ constructor(expExts, lc, localStorage, location, intercom, http, route, backend, mod) {
21
25
  this.expExts = expExts;
22
26
  this.lc = lc;
23
27
  this.localStorage = localStorage;
24
28
  this.location = location;
25
- this._state = _state;
29
+ this.intercom = intercom;
26
30
  this.http = http;
27
31
  this.route = route;
28
32
  this.backend = backend;
33
+ this.mod = mod;
29
34
  this.searchView = new ProfilerDataNodesView();
30
- this._state.handleNavigation(this.route.snapshot.data["title"], false);
35
+ this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data["title"]) });
31
36
  }
32
37
  ngOnInit() {
33
38
  this.storageSub = this.route.queryParams.subscribe(params => {
@@ -44,22 +49,19 @@ export class AdmProfilerComponent {
44
49
  }
45
50
  else {
46
51
  this.init(null);
47
- this.location.replaceState("/pages/adm/profiler");
52
+ this.location.replaceState(`/pages/${this.mod}/profiler`);
48
53
  this.route.snapshot.queryParams = [];
49
54
  await this.localStorage.removeItem("HotSearchProfilato").toPromise();
50
55
  }
51
56
  }
52
57
  init(HotPotato) {
53
- //Se ho la HotPotato vuol dire che sono appena tornato dall'edit/nuovo. Rifaccio la ricerca in base ai filtri precedenti
54
- //Altirmenti genero il modello nuovo normalmente
55
58
  if (HotPotato) {
56
59
  this.searchView = HotPotato;
57
60
  this.POSTGetItems(this.backend + Repository["POST_Adm_GetProfilerDataNodes"], this.searchView);
58
61
  }
59
62
  else {
60
63
  this.searchView = new ProfilerDataNodesView();
61
- //Per fare un primo giro di binding sulla View che serve a valorizzare le colonne del modello anche per la prima chiamata
62
- setTimeout(() => this.sendSearch());
64
+ this.sendSearch();
63
65
  }
64
66
  }
65
67
  ngOnDestroy() {
@@ -89,17 +91,16 @@ export class AdmProfilerComponent {
89
91
  });
90
92
  }
91
93
  }
92
- AdmProfilerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AdmProfilerComponent, deps: [{ token: i1.ExportService }, { token: i2.LocalizationService }, { token: i3.PreferencesService }, { token: i4.Location }, { token: i5.BaseModuleCommunicationsConsumer }, { token: i6.HTTPService }, { token: i7.ActivatedRoute }, { token: ADM_BACKEND_URL }], target: i0.ɵɵFactoryTarget.Component });
93
- AdmProfilerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: AdmProfilerComponent, selector: "adm_profiler", providers: [
94
- { provide: LocalizationService, useClass: AdmProfilerComponentLoc }
95
- ], ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card app-overflow-visible\" widget>\r\n <div class=\"card-header\">\r\n <span class=\"text-uppercase\">{{'Profiler Search' | localize : lc}}</span>&nbsp;\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <div class=\"col-md-12 bottom-15\">\r\n <form role=\"form\">\r\n <div class=\"row app-first-filter-line\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterfrom\" name=\"filterfrom\" [Placeholder]=\"'From' | localize : lc\"></form-date>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterto\" name=\"filterto\" [Placeholder]=\"'To' | localize : lc\"></form-date>\r\n </div>\r\n <button [disabled]=\"searchView.searchinprogress\" class=\"input-group-addon btn app-btn-search app-margin-top-20\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Loading Data' | localize : lc}}</em></p>\r\n <div *ngIf=\"searchView\">\r\n <es-table [(ngModel)]=\"searchView\" [Hierarchy]=\"true\" [UseCustomCells]=\"true\" [ParentKey]=\"'parentid'\" [OwnKey]=\"'id'\" [StartsExpanded]=\"false\"\r\n [ExportFunction]=\"prepareExport.bind(this)\" [Export]=\"true\" [ExportFileName]=\"'Profiler Export.csv'\" [HidePaging]=\"true\"\r\n (onSearchRequest)=\"sendSearch($event);\">\r\n <ng-template #header>\r\n <th es-th=\"1\" class=\"app-nowrap\">{{'ID' | localize : lc}}</th>\r\n <th es-th=\"2\" class=\"app-nowrap\">{{'Description' | localize : lc}}</th>\r\n <th es-th=\"3\" class=\"app-nowrap\">{{'Calls' | localize : lc}}</th>\r\n <th es-th=\"4\" class=\"app-nowrap\">{{'Time' | localize : lc}}</th>\r\n <th es-th=\"5\" class=\"app-nowrap\">{{'Peak Time' | localize : lc}}</th>\r\n <th es-th=\"6\" class=\"app-nowrap\">{{'Min. Time' | localize : lc}}</th>\r\n <th es-th=\"7\" class=\"app-nowrap\">{{'Avg. Time' | localize : lc}}</th>\r\n <th es-th=\"8\" class=\"app-nowrap\">{{'Specific Time' | localize : lc}}</th>\r\n <th es-th=\"9\" class=\"app-nowrap\">{{'Percentage' | localize : lc}}</th>\r\n <th es-th=\"10\" class=\"app-nowrap\">{{'Calls for Period' | localize : lc}}</th>\r\n <th es-th=\"11\" class=\"app-nowrap\">{{'Time for Period' | localize : lc}}</th>\r\n <th es-th=\"12\" class=\"app-nowrap\">{{'Peak Time for Period' | localize : lc}}</th>\r\n <th es-th=\"13\" class=\"app-nowrap\">{{'Min. Time for Period' | localize : lc}}</th>\r\n <th es-th=\"14\" class=\"app-nowrap\">{{'Avg. Time for Period' | localize : lc}}</th>\r\n <th es-th=\"15\" class=\"app-nowrap\">{{'Specific Time for Period' | localize : lc}}</th>\r\n <th es-th=\"16\" class=\"app-nowrap\">{{'Percentage for Period' | localize : lc}}</th>\r\n </ng-template>\r\n <ng-template #body let-item>\r\n <td es-td=\"1\" class=\"app-nowrap\">{{item.id}}</td>\r\n <td es-td=\"2\" class=\"app-nowrap\"><span title=\"{{item.description}}\">{{item.description.length <= 50 ? item.description : item.description.substr(0,50) + \"[...]\"}}</span></td>\r\n <td es-td=\"3\" class=\"app-nowrap\">{{item.calls}}</td>\r\n <td es-td=\"4\" class=\"app-nowrap\">{{item.time}}</td>\r\n <td es-td=\"5\" class=\"app-nowrap\">{{item.peaktime}}</td>\r\n <td es-td=\"6\" class=\"app-nowrap\">{{item.mintime}}</td>\r\n <td es-td=\"7\" class=\"app-nowrap\">{{item.avgtime}}</td>\r\n <td es-td=\"8\" class=\"app-nowrap\">{{item.timewithoutchildren}}</td>\r\n <td es-td=\"9\" class=\"app-nowrap\">{{item.percentage}}</td>\r\n <td es-td=\"10\" class=\"app-nowrap\">{{item.snapdeltacalls}}</td>\r\n <td es-td=\"11\" class=\"app-nowrap\">{{item.snapdeltatime}}</td>\r\n <td es-td=\"12\" class=\"app-nowrap\">{{item.snappeaktime}}</td>\r\n <td es-td=\"13\" class=\"app-nowrap\">{{item.snapmintime}}</td>\r\n <td es-td=\"14\" class=\"app-nowrap\">{{item.snapavgtime}}</td>\r\n <td es-td=\"15\" class=\"app-nowrap\">{{item.snaptimewithoutchildren}}</td>\r\n <td es-td=\"16\" class=\"app-nowrap\">{{item.snappercentage}}</td>\r\n </ng-template>\r\n </es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", components: [{ type: i8.FormDateComponent, selector: "form-date", inputs: ["JsDates"] }, { type: i9.EsTableComponent, selector: "es-table", inputs: ["CornerMenuOptions", "ColumnsResizable", "AutoUpdate", "UseCustomCells", "MaxHeight", "ContainerClass", "XLSXExport", "CSVExport", "AllSearch", "HighCellDensity", "Selection", "ShowLoadingOnBootstrap", "Removal", "RemovalCondition", "Export", "ShiftClick", "CountLabel", "HidePaging", "HidePagingCount", "HidePagingButtons", "ContextMenu", "ExportFileName", "TableClass", "ExportFunction", "HasHeaderGroup", "HasSecondaryHeaderGroup", "HeaderHidden", "BodyHidden", "SelectionDisabled", "SingleSelection", "RowClassAssigner", "OrderByColumn", "MultipleOrderingDirectives", "HiddenColumns", "ColumnsOrdering", "SearchView", "SelectAll", "UseArrayModePaging", "DynamicRowColumnsDefinition", "DynamicOperations", "Hierarchy", "ParentKey", "OwnKey", "StartsExpanded", "SavePreferences", "PagingStyle", "RowGroupingPagingStyle", "SecondarySource", "TertiarySource", "UseSelectionCache", "ShowItemGroupsColumns", "ArraymodeItemsPerPage"], outputs: ["onOrderChanged", "onSearchRequest", "onSelectionChanged", "onRemoval", "onAbortRemoval", "onCornerAction", "onDynamicOperation"] }], directives: [{ type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": i2.LocalizePipe } });
94
+ AdmProfilerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AdmProfilerComponent, deps: [{ token: i1.ExportService }, { token: i2.LocalizationService }, { token: i3.PreferencesService }, { token: i4.Location }, { token: i1.InterComService }, { token: i5.HTTPService }, { token: i6.ActivatedRoute }, { token: ADM_BACKEND_URL }, { token: ADM_MODULE_PATH }], target: i0.ɵɵFactoryTarget.Component });
95
+ AdmProfilerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: AdmProfilerComponent, selector: "adm_profiler", providers: [{ provide: LocalizationService, useClass: AdmProfilerComponentLoc }], ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card app-overflow-visible\" widget>\r\n <div class=\"card-header\">\r\n <span class=\"text-uppercase\">{{'Server Profiler' | localize : lc}}</span>&nbsp;\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <div class=\"col-md-12 bottom-15\">\r\n <form role=\"form\">\r\n <div class=\"row app-first-filter-line\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterfrom\" name=\"filterfrom\" [Placeholder]=\"'From' | localize : lc\"></form-date>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterto\" name=\"filterto\" [Placeholder]=\"'To' | localize : lc\"></form-date>\r\n </div>\r\n <button [disabled]=\"searchView.searchinprogress\" class=\"input-group-addon btn app-btn-search app-margin-top-20\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Loading Data' | localize : lc}}</em></p>\r\n <div *ngIf=\"searchView\">\r\n <es-table [(ngModel)]=\"searchView\" [Hierarchy]=\"true\" [OrderByColumn]=\"false\" [ParentKey]=\"'parentid'\"\r\n [OwnKey]=\"'id'\" [StartsExpanded]=\"false\" [ExportFunction]=\"prepareExport.bind(this)\" [Export]=\"true\"\r\n [ExportFileName]=\"'Profiler Export.csv'\" [HidePaging]=\"true\" (onSearchRequest)=\"sendSearch($event);\">\r\n \r\n <span *th=\"'1'\">{{'ID' | localize : lc}}</span>\r\n <span *th=\"'2'\">{{'Description' | localize : lc}}</span>\r\n <span *th=\"'3'\">{{'Calls' | localize : lc}}</span>\r\n <span *th=\"'4'\">{{'Time' | localize : lc}}</span>\r\n <span *th=\"'5'\">{{'Peak Time' | localize : lc}}</span>\r\n <span *th=\"'6'\">{{'Min. Time' | localize : lc}}</span>\r\n <span *th=\"'7'\">{{'Avg. Time' | localize : lc}}</span>\r\n <span *th=\"'8'\">{{'Specific Time' | localize : lc}}</span>\r\n <span *th=\"'9'\">{{'Percentage' | localize : lc}}</span>\r\n <span *th=\"'10'\">{{'Calls for Period' | localize : lc}}</span>\r\n <span *th=\"'11'\">{{'Time for Period' | localize : lc}}</span>\r\n <span *th=\"'12'\">{{'Peak Time for Period' | localize : lc}}</span>\r\n <span *th=\"'13'\">{{'Min. Time for Period' | localize : lc}}</span>\r\n <span *th=\"'14'\">{{'Avg. Time for Period' | localize : lc}}</span>\r\n <span *th=\"'15'\">{{'Specific Time for Period' | localize : lc}}</span>\r\n <span *th=\"'16'\">{{'Percentage for Period' | localize : lc}}</span>\r\n\r\n <span *td=\"'1'; let item\">{{item.id}}</span>\r\n <span *td=\"'2'; let item\" title=\"{{item.description}}\">{{item.description.length <= 50 ? item.description : item.description.substr(0,50) + \"[...]\" }}</span>\r\n <span *td=\"'3'; let item\">{{item.calls}}</span>\r\n <span *td=\"'4'; let item\">{{item.time}}</span>\r\n <span *td=\"'5'; let item\">{{item.peaktime}}</span>\r\n <span *td=\"'6'; let item\">{{item.mintime}}</span>\r\n <span *td=\"'7'; let item\">{{item.avgtime}}</span>\r\n <span *td=\"'8'; let item\">{{item.timewithoutchildren}}</span>\r\n <span *td=\"'9'; let item\">{{item.percentage}}</span>\r\n <span *td=\"'10' let item\">{{item.snapdeltacalls}}</span>\r\n <span *td=\"'11' let item\">{{item.snapdeltatime}}</span>\r\n <span *td=\"'12' let item\">{{item.snappeaktime}}</span>\r\n <span *td=\"'13' let item\">{{item.snapmintime}}</span>\r\n <span *td=\"'14' let item\">{{item.snapavgtime}}</span>\r\n <span *td=\"'15' let item\">{{item.snaptimewithoutchildren}}</span>\r\n <span *td=\"'16' let item\">{{item.snappercentage}}</span>\r\n </es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", components: [{ type: i7.FormDateComponent, selector: "form-date", inputs: ["JsDates"] }, { type: i8.EsTableComponent, selector: "es-table", inputs: ["CornerMenuOptions", "ColumnsResizable", "ColumnsPinnable", "AutoUpdate", "UseCustomCells", "MaxHeight", "ContainerClass", "XLSXExport", "CSVExport", "AllSearch", "HighCellDensity", "Selection", "ShowLoadingOnBootstrap", "Removal", "RemovalCondition", "Export", "ShiftClick", "CountLabel", "HidePaging", "HidePagingCount", "HidePagingButtons", "ContextMenu", "ExportFileName", "TableClass", "ExportFunction", "HasHeaderGroup", "HasSecondaryHeaderGroup", "HeaderHidden", "BodyHidden", "SelectionDisabled", "SingleSelection", "RowClassAssigner", "OrderByColumn", "MultipleOrderingDirectives", "HiddenColumns", "ColumnsOrdering", "SearchView", "SelectAll", "UseArrayModePaging", "DynamicRowColumnsDefinition", "DynamicOperations", "Hierarchy", "ParentKey", "OwnKey", "StartsExpanded", "SavePreferences", "PagingStyle", "RowGroupingPagingStyle", "SecondarySource", "TertiarySource", "UseSelectionCache", "ShowItemGroupsColumns", "ArraymodeItemsPerPage"], outputs: ["onOrderChanged", "onSearchRequest", "onSelectionChanged", "onRemoval", "onAbortRemoval", "onCornerAction", "onDynamicOperation"] }], directives: [{ type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.EsThDirective, selector: "[th]", inputs: ["th", "thPinned", "thPinnable", "thPinnedWidth", "thVisible", "thFixed", "thParent", "thOrder", "thOrderable", "thWrap", "thResizable", "thClass", "thGroupClass", "thIf", "thEmpty", "thGroup", "thAggregation"] }, { type: i8.EsTdDirective, selector: "[td]", inputs: ["tdVisible", "td", "tdIf", "tdClass"] }], pipes: { "localize": i2.LocalizePipe } });
96
96
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AdmProfilerComponent, decorators: [{
97
97
  type: Component,
98
- args: [{ selector: "adm_profiler", providers: [
99
- { provide: LocalizationService, useClass: AdmProfilerComponentLoc }
100
- ], template: "<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card app-overflow-visible\" widget>\r\n <div class=\"card-header\">\r\n <span class=\"text-uppercase\">{{'Profiler Search' | localize : lc}}</span>&nbsp;\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <div class=\"col-md-12 bottom-15\">\r\n <form role=\"form\">\r\n <div class=\"row app-first-filter-line\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterfrom\" name=\"filterfrom\" [Placeholder]=\"'From' | localize : lc\"></form-date>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterto\" name=\"filterto\" [Placeholder]=\"'To' | localize : lc\"></form-date>\r\n </div>\r\n <button [disabled]=\"searchView.searchinprogress\" class=\"input-group-addon btn app-btn-search app-margin-top-20\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Loading Data' | localize : lc}}</em></p>\r\n <div *ngIf=\"searchView\">\r\n <es-table [(ngModel)]=\"searchView\" [Hierarchy]=\"true\" [UseCustomCells]=\"true\" [ParentKey]=\"'parentid'\" [OwnKey]=\"'id'\" [StartsExpanded]=\"false\"\r\n [ExportFunction]=\"prepareExport.bind(this)\" [Export]=\"true\" [ExportFileName]=\"'Profiler Export.csv'\" [HidePaging]=\"true\"\r\n (onSearchRequest)=\"sendSearch($event);\">\r\n <ng-template #header>\r\n <th es-th=\"1\" class=\"app-nowrap\">{{'ID' | localize : lc}}</th>\r\n <th es-th=\"2\" class=\"app-nowrap\">{{'Description' | localize : lc}}</th>\r\n <th es-th=\"3\" class=\"app-nowrap\">{{'Calls' | localize : lc}}</th>\r\n <th es-th=\"4\" class=\"app-nowrap\">{{'Time' | localize : lc}}</th>\r\n <th es-th=\"5\" class=\"app-nowrap\">{{'Peak Time' | localize : lc}}</th>\r\n <th es-th=\"6\" class=\"app-nowrap\">{{'Min. Time' | localize : lc}}</th>\r\n <th es-th=\"7\" class=\"app-nowrap\">{{'Avg. Time' | localize : lc}}</th>\r\n <th es-th=\"8\" class=\"app-nowrap\">{{'Specific Time' | localize : lc}}</th>\r\n <th es-th=\"9\" class=\"app-nowrap\">{{'Percentage' | localize : lc}}</th>\r\n <th es-th=\"10\" class=\"app-nowrap\">{{'Calls for Period' | localize : lc}}</th>\r\n <th es-th=\"11\" class=\"app-nowrap\">{{'Time for Period' | localize : lc}}</th>\r\n <th es-th=\"12\" class=\"app-nowrap\">{{'Peak Time for Period' | localize : lc}}</th>\r\n <th es-th=\"13\" class=\"app-nowrap\">{{'Min. Time for Period' | localize : lc}}</th>\r\n <th es-th=\"14\" class=\"app-nowrap\">{{'Avg. Time for Period' | localize : lc}}</th>\r\n <th es-th=\"15\" class=\"app-nowrap\">{{'Specific Time for Period' | localize : lc}}</th>\r\n <th es-th=\"16\" class=\"app-nowrap\">{{'Percentage for Period' | localize : lc}}</th>\r\n </ng-template>\r\n <ng-template #body let-item>\r\n <td es-td=\"1\" class=\"app-nowrap\">{{item.id}}</td>\r\n <td es-td=\"2\" class=\"app-nowrap\"><span title=\"{{item.description}}\">{{item.description.length <= 50 ? item.description : item.description.substr(0,50) + \"[...]\"}}</span></td>\r\n <td es-td=\"3\" class=\"app-nowrap\">{{item.calls}}</td>\r\n <td es-td=\"4\" class=\"app-nowrap\">{{item.time}}</td>\r\n <td es-td=\"5\" class=\"app-nowrap\">{{item.peaktime}}</td>\r\n <td es-td=\"6\" class=\"app-nowrap\">{{item.mintime}}</td>\r\n <td es-td=\"7\" class=\"app-nowrap\">{{item.avgtime}}</td>\r\n <td es-td=\"8\" class=\"app-nowrap\">{{item.timewithoutchildren}}</td>\r\n <td es-td=\"9\" class=\"app-nowrap\">{{item.percentage}}</td>\r\n <td es-td=\"10\" class=\"app-nowrap\">{{item.snapdeltacalls}}</td>\r\n <td es-td=\"11\" class=\"app-nowrap\">{{item.snapdeltatime}}</td>\r\n <td es-td=\"12\" class=\"app-nowrap\">{{item.snappeaktime}}</td>\r\n <td es-td=\"13\" class=\"app-nowrap\">{{item.snapmintime}}</td>\r\n <td es-td=\"14\" class=\"app-nowrap\">{{item.snapavgtime}}</td>\r\n <td es-td=\"15\" class=\"app-nowrap\">{{item.snaptimewithoutchildren}}</td>\r\n <td es-td=\"16\" class=\"app-nowrap\">{{item.snappercentage}}</td>\r\n </ng-template>\r\n </es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
101
- }], ctorParameters: function () { return [{ type: i1.ExportService }, { type: i2.LocalizationService }, { type: i3.PreferencesService }, { type: i4.Location }, { type: i5.BaseModuleCommunicationsConsumer }, { type: i6.HTTPService }, { type: i7.ActivatedRoute }, { type: undefined, decorators: [{
98
+ args: [{ selector: "adm_profiler", providers: [{ provide: LocalizationService, useClass: AdmProfilerComponentLoc }], template: "<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card app-overflow-visible\" widget>\r\n <div class=\"card-header\">\r\n <span class=\"text-uppercase\">{{'Server Profiler' | localize : lc}}</span>&nbsp;\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <div class=\"col-md-12 bottom-15\">\r\n <form role=\"form\">\r\n <div class=\"row app-first-filter-line\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterfrom\" name=\"filterfrom\" [Placeholder]=\"'From' | localize : lc\"></form-date>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterto\" name=\"filterto\" [Placeholder]=\"'To' | localize : lc\"></form-date>\r\n </div>\r\n <button [disabled]=\"searchView.searchinprogress\" class=\"input-group-addon btn app-btn-search app-margin-top-20\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Loading Data' | localize : lc}}</em></p>\r\n <div *ngIf=\"searchView\">\r\n <es-table [(ngModel)]=\"searchView\" [Hierarchy]=\"true\" [OrderByColumn]=\"false\" [ParentKey]=\"'parentid'\"\r\n [OwnKey]=\"'id'\" [StartsExpanded]=\"false\" [ExportFunction]=\"prepareExport.bind(this)\" [Export]=\"true\"\r\n [ExportFileName]=\"'Profiler Export.csv'\" [HidePaging]=\"true\" (onSearchRequest)=\"sendSearch($event);\">\r\n \r\n <span *th=\"'1'\">{{'ID' | localize : lc}}</span>\r\n <span *th=\"'2'\">{{'Description' | localize : lc}}</span>\r\n <span *th=\"'3'\">{{'Calls' | localize : lc}}</span>\r\n <span *th=\"'4'\">{{'Time' | localize : lc}}</span>\r\n <span *th=\"'5'\">{{'Peak Time' | localize : lc}}</span>\r\n <span *th=\"'6'\">{{'Min. Time' | localize : lc}}</span>\r\n <span *th=\"'7'\">{{'Avg. Time' | localize : lc}}</span>\r\n <span *th=\"'8'\">{{'Specific Time' | localize : lc}}</span>\r\n <span *th=\"'9'\">{{'Percentage' | localize : lc}}</span>\r\n <span *th=\"'10'\">{{'Calls for Period' | localize : lc}}</span>\r\n <span *th=\"'11'\">{{'Time for Period' | localize : lc}}</span>\r\n <span *th=\"'12'\">{{'Peak Time for Period' | localize : lc}}</span>\r\n <span *th=\"'13'\">{{'Min. Time for Period' | localize : lc}}</span>\r\n <span *th=\"'14'\">{{'Avg. Time for Period' | localize : lc}}</span>\r\n <span *th=\"'15'\">{{'Specific Time for Period' | localize : lc}}</span>\r\n <span *th=\"'16'\">{{'Percentage for Period' | localize : lc}}</span>\r\n\r\n <span *td=\"'1'; let item\">{{item.id}}</span>\r\n <span *td=\"'2'; let item\" title=\"{{item.description}}\">{{item.description.length <= 50 ? item.description : item.description.substr(0,50) + \"[...]\" }}</span>\r\n <span *td=\"'3'; let item\">{{item.calls}}</span>\r\n <span *td=\"'4'; let item\">{{item.time}}</span>\r\n <span *td=\"'5'; let item\">{{item.peaktime}}</span>\r\n <span *td=\"'6'; let item\">{{item.mintime}}</span>\r\n <span *td=\"'7'; let item\">{{item.avgtime}}</span>\r\n <span *td=\"'8'; let item\">{{item.timewithoutchildren}}</span>\r\n <span *td=\"'9'; let item\">{{item.percentage}}</span>\r\n <span *td=\"'10' let item\">{{item.snapdeltacalls}}</span>\r\n <span *td=\"'11' let item\">{{item.snapdeltatime}}</span>\r\n <span *td=\"'12' let item\">{{item.snappeaktime}}</span>\r\n <span *td=\"'13' let item\">{{item.snapmintime}}</span>\r\n <span *td=\"'14' let item\">{{item.snapavgtime}}</span>\r\n <span *td=\"'15' let item\">{{item.snaptimewithoutchildren}}</span>\r\n <span *td=\"'16' let item\">{{item.snappercentage}}</span>\r\n </es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
99
+ }], ctorParameters: function () { return [{ type: i1.ExportService }, { type: i2.LocalizationService }, { type: i3.PreferencesService }, { type: i4.Location }, { type: i1.InterComService }, { type: i5.HTTPService }, { type: i6.ActivatedRoute }, { type: undefined, decorators: [{
102
100
  type: Inject,
103
101
  args: [ADM_BACKEND_URL]
102
+ }] }, { type: undefined, decorators: [{
103
+ type: Inject,
104
+ args: [ADM_MODULE_PATH]
104
105
  }] }]; } });
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtX3Byb2ZpbGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJvZmlsZXIvYWRtX3Byb2ZpbGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJvZmlsZXIvYWRtX3Byb2ZpbGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS2xELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzlELFNBQVM7QUFDVCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRW5GLGVBQWU7QUFDZixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFJOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUy9DLE1BQU0sT0FBTyxvQkFBb0I7SUFJN0IsWUFDWSxPQUFzQixFQUN2QixFQUF1QixFQUN0QixZQUFnQyxFQUNoQyxRQUFrQixFQUNsQixNQUF3QyxFQUN4QyxJQUFpQixFQUNqQixLQUFxQixFQUNJLE9BQWU7UUFQeEMsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQUN2QixPQUFFLEdBQUYsRUFBRSxDQUFxQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDaEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFrQztRQUN4QyxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ0ksWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQVg3QyxlQUFVLEdBQTBCLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQWFuRSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsSUFBSSxDQUFDLFdBQVc7UUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWE7UUFDdEIsSUFBSSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBd0Isb0JBQW9CLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25CO2FBQU07WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDeEU7SUFDTCxDQUFDO0lBRUQsSUFBSSxDQUFDLFNBQWdDO1FBQ2pDLHdIQUF3SDtRQUN4SCxnREFBZ0Q7UUFDaEQsSUFBSSxTQUFTLEVBQUU7WUFDWCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLCtCQUErQixDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2xHO2FBQ0k7WUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUU5Qyx5SEFBeUg7WUFDekgsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxVQUFVO1lBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsVUFBVSxDQUFDLFlBQXFCLElBQUk7UUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDeEMsSUFBSSxTQUFTO1lBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBRTdCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsK0JBQStCLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFXLEVBQUUsSUFBMkI7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQXdCLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pGLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGFBQWEsQ0FBQyxZQUFZO1FBQ3RCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQXdCLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLCtCQUErQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2xILElBQUksS0FBSyxHQUF1QixJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUM3RixZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztpSEFuRlEsb0JBQW9CLHFQQVlqQixlQUFlO3FHQVpsQixvQkFBb0IsdUNBTGxCO1FBQ1AsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixFQUFFO0tBQ3RFLDBCQ3pCTCx5a01Bc0VNOzJGRDFDTyxvQkFBb0I7a0JBUGhDLFNBQVM7K0JBQ0ksY0FBYyxhQUNiO3dCQUNQLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRTtxQkFDdEU7OzBCQWVJLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcbmltcG9ydCB7IFByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvcHJlZmVyZW5jZXNcIjtcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5pbXBvcnQgeyBIVFRQU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvaHR0cHNlcnZpY2VcIjtcclxuXHJcbi8vIENsYXNzaVxyXG5pbXBvcnQgeyBQcm9maWxlckRhdGFOb2RlLCBQcm9maWxlckRhdGFOb2Rlc1ZpZXcsIFJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vLi4vbW9kZWxzXCI7XHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgQWRtUHJvZmlsZXJDb21wb25lbnRMb2MgfSBmcm9tIFwiLi4vXCI7XHJcblxyXG4vLyBDaGlhbWF0ZSBhaSBSZXBvc2l0b3J5XHJcbmltcG9ydCB7IEJhc2VNb2R1bGVDb21tdW5pY2F0aW9uc0NvbnN1bWVyIH0gZnJvbSBcIi4uLy4uL2NvbW11bmljYXRpb25zL2Jhc2UvQmFzZU1vZHVsZUNvbW11bmljYXRpb25zQ29uc3VtZXJcIjtcclxuaW1wb3J0IHsgQURNX0JBQ0tFTkRfVVJMIH0gZnJvbSBcIi4uLy4uL3Rva2Vuc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJhZG1fcHJvZmlsZXJcIixcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogTG9jYWxpemF0aW9uU2VydmljZSwgdXNlQ2xhc3M6IEFkbVByb2ZpbGVyQ29tcG9uZW50TG9jIH1cclxuICAgIF0sXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2FkbV9wcm9maWxlci5jb21wb25lbnQuaHRtbFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZG1Qcm9maWxlckNvbXBvbmVudCB7XHJcbiAgICBwdWJsaWMgc2VhcmNoVmlldzogUHJvZmlsZXJEYXRhTm9kZXNWaWV3ID0gbmV3IFByb2ZpbGVyRGF0YU5vZGVzVmlldygpO1xyXG4gICAgcHVibGljIHN0b3JhZ2VTdWI6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGV4cEV4dHM6IEV4cG9ydFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlOiBQcmVmZXJlbmNlc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXHJcbiAgICAgICAgcHJpdmF0ZSBfc3RhdGU6IEJhc2VNb2R1bGVDb21tdW5pY2F0aW9uc0NvbnN1bWVyLFxyXG4gICAgICAgIHByaXZhdGUgaHR0cDogSFRUUFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgQEluamVjdChBRE1fQkFDS0VORF9VUkwpIHByaXZhdGUgYmFja2VuZDogc3RyaW5nKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXRlLmhhbmRsZU5hdmlnYXRpb24odGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhW1widGl0bGVcIl0sIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTdWIgPSB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLkluaXQocGFyYW1zW1wiaWdub3JlU3RvcmFnZVwiXSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgSW5pdChpZ25vcmVTdG9yZSkge1xyXG4gICAgICAgIHRoaXMuZG9Jbml0KGlnbm9yZVN0b3JlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkb0luaXQoaWdub3JlU3RvcmFnZSkge1xyXG4gICAgICAgIGxldCBpdGVtID0gYXdhaXQgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbTxQcm9maWxlckRhdGFOb2Rlc1ZpZXc+KFwiSG90U2VhcmNoUHJvZmlsYXRvXCIpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGlmICghaWdub3JlU3RvcmFnZSAmJiBpdGVtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdChpdGVtKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmluaXQobnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKFwiL3BhZ2VzL2FkbS9wcm9maWxlclwiKTtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyA9IFtdO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiSG90U2VhcmNoUHJvZmlsYXRvXCIpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbml0KEhvdFBvdGF0bzogUHJvZmlsZXJEYXRhTm9kZXNWaWV3KSB7XHJcbiAgICAgICAgLy9TZSBobyBsYSBIb3RQb3RhdG8gdnVvbCBkaXJlIGNoZSBzb25vIGFwcGVuYSB0b3JuYXRvIGRhbGwnZWRpdC9udW92by4gUmlmYWNjaW8gbGEgcmljZXJjYSBpbiBiYXNlIGFpIGZpbHRyaSBwcmVjZWRlbnRpXHJcbiAgICAgICAgLy9BbHRpcm1lbnRpIGdlbmVybyBpbCBtb2RlbGxvIG51b3ZvIG5vcm1hbG1lbnRlXHJcbiAgICAgICAgaWYgKEhvdFBvdGF0bykge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZpZXcgPSBIb3RQb3RhdG87XHJcbiAgICAgICAgICAgIHRoaXMuUE9TVEdldEl0ZW1zKHRoaXMuYmFja2VuZCArIFJlcG9zaXRvcnlbXCJQT1NUX0FkbV9HZXRQcm9maWxlckRhdGFOb2Rlc1wiXSwgdGhpcy5zZWFyY2hWaWV3KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmlldyA9IG5ldyBQcm9maWxlckRhdGFOb2Rlc1ZpZXcoKTtcclxuXHJcbiAgICAgICAgICAgIC8vUGVyIGZhcmUgdW4gcHJpbW8gZ2lybyBkaSBiaW5kaW5nIHN1bGxhIFZpZXcgY2hlIHNlcnZlIGEgdmFsb3JpenphcmUgbGUgY29sb25uZSBkZWwgbW9kZWxsbyBhbmNoZSBwZXIgbGEgcHJpbWEgY2hpYW1hdGFcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNlbmRTZWFyY2goKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnN0b3JhZ2VTdWIpXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZVN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbmRTZWFyY2gocmVzZXRQYWdlOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVmlldy5zZWFyY2hpbnByb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICBpZiAocmVzZXRQYWdlKVxyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZpZXcucGFnZSA9IDE7XHJcblxyXG4gICAgICAgIHRoaXMuUE9TVEdldEl0ZW1zKHRoaXMuYmFja2VuZCArIFJlcG9zaXRvcnlbXCJQT1NUX0FkbV9HZXRQcm9maWxlckRhdGFOb2Rlc1wiXSwgdGhpcy5zZWFyY2hWaWV3KTtcclxuICAgIH1cclxuXHJcbiAgICBQT1NUR2V0SXRlbXModXJsOiBzdHJpbmcsIGRhdGE6IFByb2ZpbGVyRGF0YU5vZGVzVmlldykge1xyXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0PFByb2ZpbGVyRGF0YU5vZGVzVmlldz4odXJsLCBkYXRhKS5zdWJzY3JpYmUodCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmlldyA9IHQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmlldy5zZWFyY2hpbnByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJIb3RTZWFyY2hQcm9maWxhdG9cIiwgdGhpcy5zZWFyY2hWaWV3KS5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcmVwYXJlRXhwb3J0KGRhdGFDYWxsQmFjaykge1xyXG4gICAgICAgIHZhciB2aWV3ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlYXJjaFZpZXcpKTtcclxuICAgICAgICB2aWV3LnBhZ2UgPSAxO1xyXG4gICAgICAgIHZpZXcuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgPSA5OTk5OTk5O1xyXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0PFByb2ZpbGVyRGF0YU5vZGVzVmlldz4odGhpcy5iYWNrZW5kICsgUmVwb3NpdG9yeVtcIlBPU1RfQWRtX0dldFByb2ZpbGVyRGF0YU5vZGVzXCJdLCB2aWV3KS5zdWJzY3JpYmUodCA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtczogUHJvZmlsZXJEYXRhTm9kZVtdID0gdGhpcy5leHBFeHRzLmRlc2VyaWFsaXplRm9yRXhwb3J0KHQuaXRlbXMsIFByb2ZpbGVyRGF0YU5vZGUpO1xyXG4gICAgICAgICAgICBkYXRhQ2FsbEJhY2soaXRlbXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwiPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGFwcC1vdmVyZmxvdy12aXNpYmxlXCIgd2lkZ2V0PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC11cHBlcmNhc2VcIj57eydQcm9maWxlciBTZWFyY2gnIHwgbG9jYWxpemUgOiBsY319PC9zcGFuPiZuYnNwO1xyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSB3aWRnZXQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBib3R0b20tMTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSByb2xlPVwiZm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFwcC1maXJzdC1maWx0ZXItbGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14bC0yIGNvbC1sZy0yIGNvbC1tZC0xMiBhcHAtZmlsdGVyLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS1kYXRlIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1ZhbGlkYXRpb25dPVwiZmFsc2VcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFZpZXcuZmlsdGVyZnJvbVwiIG5hbWU9XCJmaWx0ZXJmcm9tXCIgW1BsYWNlaG9sZGVyXT1cIidGcm9tJyB8IGxvY2FsaXplIDogbGNcIj48L2Zvcm0tZGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14bC0yIGNvbC1sZy0yIGNvbC1tZC0xMiBhcHAtZmlsdGVyLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS1kYXRlIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1ZhbGlkYXRpb25dPVwiZmFsc2VcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFZpZXcuZmlsdGVydG9cIiBuYW1lPVwiZmlsdGVydG9cIiBbUGxhY2Vob2xkZXJdPVwiJ1RvJyB8IGxvY2FsaXplIDogbGNcIj48L2Zvcm0tZGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwic2VhcmNoVmlldy5zZWFyY2hpbnByb2dyZXNzXCIgY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvbiBidG4gYXBwLWJ0bi1zZWFyY2ggYXBwLW1hcmdpbi10b3AtMjBcIiAoY2xpY2spPVwic2VuZFNlYXJjaCgpXCIgdHlwZT1cInN1Ym1pdFwiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiIXNlYXJjaFZpZXdcIj48ZW0+e3snTG9hZGluZyBEYXRhJyB8IGxvY2FsaXplIDogbGN9fTwvZW0+PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoVmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVzLXRhYmxlIFsobmdNb2RlbCldPVwic2VhcmNoVmlld1wiIFtIaWVyYXJjaHldPVwidHJ1ZVwiIFtVc2VDdXN0b21DZWxsc109XCJ0cnVlXCIgW1BhcmVudEtleV09XCIncGFyZW50aWQnXCIgW093bktleV09XCInaWQnXCIgW1N0YXJ0c0V4cGFuZGVkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRXhwb3J0RnVuY3Rpb25dPVwicHJlcGFyZUV4cG9ydC5iaW5kKHRoaXMpXCIgW0V4cG9ydF09XCJ0cnVlXCIgW0V4cG9ydEZpbGVOYW1lXT1cIidQcm9maWxlciBFeHBvcnQuY3N2J1wiIFtIaWRlUGFnaW5nXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblNlYXJjaFJlcXVlc3QpPVwic2VuZFNlYXJjaCgkZXZlbnQpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggZXMtdGg9XCIxXCIgY2xhc3M9XCJhcHAtbm93cmFwXCI+e3snSUQnIHwgbG9jYWxpemUgOiBsY319PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGVzLXRoPVwiMlwiIGNsYXNzPVwiYXBwLW5vd3JhcFwiPnt7J0Rlc2NyaXB0aW9uJyB8IGxvY2FsaXplIDogbGN9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBlcy10aD1cIjNcIiBjbGFzcz1cImFwcC1ub3dyYXBcIj57eydDYWxscycgfCBsb2NhbGl6ZSA6IGxjfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggZXMtdGg9XCI0XCIgY2xhc3M9XCJhcHAtbm93cmFwXCI+e3snVGltZScgfCBsb2NhbGl6ZSA6IGxjfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggZXMtdGg9XCI1XCIgY2xhc3M9XCJhcHAtbm93cmFwXCI+e3snUGVhayBUaW1lJyB8IGxvY2FsaXplIDogbGN9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBlcy10aD1cIjZcIiBjbGFzcz1cImFwcC1ub3dyYXBcIj57eydNaW4uIFRpbWUnIHwgbG9jYWxpemUgOiBsY319PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGVzLXRoPVwiN1wiIGNsYXNzPVwiYXBwLW5vd3JhcFwiPnt7J0F2Zy4gVGltZScgfCBsb2NhbGl6ZSA6IGxjfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggZXMtdGg9XCI4XCIgY2xhc3M9XCJhcHAtbm93cmFwXCI+e3snU3BlY2lmaWMgVGltZScgfCBsb2NhbGl6ZSA6IGxjfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggZXMtdGg9XCI5XCIgY2xhc3M9XCJhcHAtbm93cmFwXCI+e3snUGVyY2VudGFnZScgfCBsb2NhbGl6ZSA6IGxjfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggZXMtdGg9XCIxMFwiIGNsYXNzPVwiYXBwLW5vd3JhcFwiPnt7J0NhbGxzIGZvciBQZXJpb2QnIHwgbG9jYWxpemUgOiBsY319PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGVzLXRoPVwiMTFcIiBjbGFzcz1cImFwcC1ub3dyYXBcIj57eydUaW1lIGZvciBQZXJpb2QnIHwgbG9jYWxpemUgOiBsY319PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGVzLXRoPVwiMTJcIiBjbGFzcz1cImFwcC1ub3dyYXBcIj57eydQZWFrIFRpbWUgZm9yIFBlcmlvZCcgfCBsb2NhbGl6ZSA6IGxjfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggZXMtdGg9XCIxM1wiIGNsYXNzPVwiYXBwLW5vd3JhcFwiPnt7J01pbi4gVGltZSBmb3IgUGVyaW9kJyB8IGxvY2FsaXplIDogbGN9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBlcy10aD1cIjE0XCIgY2xhc3M9XCJhcHAtbm93cmFwXCI+e3snQXZnLiBUaW1lIGZvciBQZXJpb2QnIHwgbG9jYWxpemUgOiBsY319PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGVzLXRoPVwiMTVcIiBjbGFzcz1cImFwcC1ub3dyYXBcIj57eydTcGVjaWZpYyBUaW1lIGZvciBQZXJpb2QnIHwgbG9jYWxpemUgOiBsY319PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGVzLXRoPVwiMTZcIiBjbGFzcz1cImFwcC1ub3dyYXBcIj57eydQZXJjZW50YWdlIGZvciBQZXJpb2QnIHwgbG9jYWxpemUgOiBsY319PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9keSBsZXQtaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGVzLXRkPVwiMVwiIGNsYXNzPVwiYXBwLW5vd3JhcFwiPnt7aXRlbS5pZH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGVzLXRkPVwiMlwiIGNsYXNzPVwiYXBwLW5vd3JhcFwiPjxzcGFuIHRpdGxlPVwie3tpdGVtLmRlc2NyaXB0aW9ufX1cIj57e2l0ZW0uZGVzY3JpcHRpb24ubGVuZ3RoIDw9IDUwID8gaXRlbS5kZXNjcmlwdGlvbiA6IGl0ZW0uZGVzY3JpcHRpb24uc3Vic3RyKDAsNTApICsgXCJbLi4uXVwifX08L3NwYW4+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGVzLXRkPVwiM1wiIGNsYXNzPVwiYXBwLW5vd3JhcFwiPnt7aXRlbS5jYWxsc319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGVzLXRkPVwiNFwiIGNsYXNzPVwiYXBwLW5vd3JhcFwiPnt7aXRlbS50aW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZXMtdGQ9XCI1XCIgY2xhc3M9XCJhcHAtbm93cmFwXCI+e3tpdGVtLnBlYWt0aW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZXMtdGQ9XCI2XCIgY2xhc3M9XCJhcHAtbm93cmFwXCI+e3tpdGVtLm1pbnRpbWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBlcy10ZD1cIjdcIiBjbGFzcz1cImFwcC1ub3dyYXBcIj57e2l0ZW0uYXZndGltZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGVzLXRkPVwiOFwiIGNsYXNzPVwiYXBwLW5vd3JhcFwiPnt7aXRlbS50aW1ld2l0aG91dGNoaWxkcmVufX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZXMtdGQ9XCI5XCIgY2xhc3M9XCJhcHAtbm93cmFwXCI+e3tpdGVtLnBlcmNlbnRhZ2V9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBlcy10ZD1cIjEwXCIgY2xhc3M9XCJhcHAtbm93cmFwXCI+e3tpdGVtLnNuYXBkZWx0YWNhbGxzfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZXMtdGQ9XCIxMVwiIGNsYXNzPVwiYXBwLW5vd3JhcFwiPnt7aXRlbS5zbmFwZGVsdGF0aW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZXMtdGQ9XCIxMlwiIGNsYXNzPVwiYXBwLW5vd3JhcFwiPnt7aXRlbS5zbmFwcGVha3RpbWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBlcy10ZD1cIjEzXCIgY2xhc3M9XCJhcHAtbm93cmFwXCI+e3tpdGVtLnNuYXBtaW50aW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZXMtdGQ9XCIxNFwiIGNsYXNzPVwiYXBwLW5vd3JhcFwiPnt7aXRlbS5zbmFwYXZndGltZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGVzLXRkPVwiMTVcIiBjbGFzcz1cImFwcC1ub3dyYXBcIj57e2l0ZW0uc25hcHRpbWV3aXRob3V0Y2hpbGRyZW59fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBlcy10ZD1cIjE2XCIgY2xhc3M9XCJhcHAtbm93cmFwXCI+e3tpdGVtLnNuYXBwZXJjZW50YWdlfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VzLXRhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtX3Byb2ZpbGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJvZmlsZXIvYWRtX3Byb2ZpbGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJvZmlsZXIvYWRtX3Byb2ZpbGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUlsRCxpQkFBaUI7QUFDakIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFOUQsT0FBTyxFQUFpQixtQkFBbUIsRUFBbUIsTUFBTSxzQkFBc0IsQ0FBQztBQUczRixlQUFlO0FBQ2YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDdEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWhFLGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7QUFPdkUsTUFBTSxPQUFPLG9CQUFvQjtJQUk3QixZQUNZLE9BQXNCLEVBQ3ZCLEVBQXVCLEVBQ3RCLFlBQWdDLEVBQ2hDLFFBQWtCLEVBQ2xCLFFBQXlCLEVBQ3pCLElBQWlCLEVBQ2pCLEtBQXFCLEVBQ0ksT0FBZSxFQUNmLEdBQVc7UUFScEMsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQUN2QixPQUFFLEdBQUYsRUFBRSxD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Y0FBYyxhQUNiLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixFQUFFLENBQUM7OzBCQWUzRSxNQUFNOzJCQUFDLGVBQWU7OzBCQUN0QixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5pbXBvcnQgeyBQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL3ByZWZlcmVuY2VzXCI7XHJcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UsIEluYm91bmRNZXNzYWdlVHlwZXMsIEludGVyQ29tU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBIVFRQU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvaHR0cHNlcnZpY2VcIjtcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBQcm9maWxlckRhdGFOb2RlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb21wb25lbnRzL1Byb2ZpbGVyRGF0YU5vZGVcIjtcclxuaW1wb3J0IHsgUHJvZmlsZXJEYXRhTm9kZXNWaWV3IH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb21wb25lbnRzL1Byb2ZpbGVyRGF0YU5vZGVzVmlld1wiO1xyXG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIi4uLy4uL21vZGVscy9leHRlcm5hbHMvUmVwb3NpdG9yeVwiO1xyXG5pbXBvcnQgeyBBRE1fQkFDS0VORF9VUkwsIEFETV9NT0RVTEVfUEFUSCB9IGZyb20gXCIuLi8uLi90b2tlbnNcIjtcclxuXHJcbi8vIExvY2FsaXp6YXppb25lXHJcbmltcG9ydCB7IEFkbVByb2ZpbGVyQ29tcG9uZW50TG9jIH0gZnJvbSBcIi4vYWRtX3Byb2ZpbGVyLmNvbXBvbmVudC5sb2NcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiYWRtX3Byb2ZpbGVyXCIsXHJcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IExvY2FsaXphdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBBZG1Qcm9maWxlckNvbXBvbmVudExvYyB9XSxcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vYWRtX3Byb2ZpbGVyLmNvbXBvbmVudC5odG1sXCJcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkbVByb2ZpbGVyQ29tcG9uZW50IHtcclxuICAgIHB1YmxpYyBzZWFyY2hWaWV3OiBQcm9maWxlckRhdGFOb2Rlc1ZpZXcgPSBuZXcgUHJvZmlsZXJEYXRhTm9kZXNWaWV3KCk7XHJcbiAgICBwdWJsaWMgc3RvcmFnZVN1YjogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZXhwRXh0czogRXhwb3J0U2VydmljZSxcclxuICAgICAgICBwdWJsaWMgbGM6IExvY2FsaXphdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2U6IFByZWZlcmVuY2VzU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcclxuICAgICAgICBwcml2YXRlIGludGVyY29tOiBJbnRlckNvbVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBodHRwOiBIVFRQU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBASW5qZWN0KEFETV9CQUNLRU5EX1VSTCkgcHJpdmF0ZSBiYWNrZW5kOiBzdHJpbmcsXHJcbiAgICAgICAgQEluamVjdChBRE1fTU9EVUxFX1BBVEgpIHByaXZhdGUgbW9kOiBzdHJpbmcpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcmNvbS5zZW5kKEluYm91bmRNZXNzYWdlVHlwZXMuTmF2aWdhdGlvbiwgeyBzdWI6IGZhbHNlLCByb3V0ZVRpdGxlOiB0aGlzLmxjLmxvYyh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbXCJ0aXRsZVwiXSkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU3ViID0gdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5Jbml0KHBhcmFtc1tcImlnbm9yZVN0b3JhZ2VcIl0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEluaXQoaWdub3JlU3RvcmUpIHtcclxuICAgICAgICB0aGlzLmRvSW5pdChpZ25vcmVTdG9yZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZG9Jbml0KGlnbm9yZVN0b3JhZ2UpIHtcclxuICAgICAgICBsZXQgaXRlbSA9IGF3YWl0IHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW08UHJvZmlsZXJEYXRhTm9kZXNWaWV3PihcIkhvdFNlYXJjaFByb2ZpbGF0b1wiKS50b1Byb21pc2UoKTtcclxuICAgICAgICBpZiAoIWlnbm9yZVN0b3JhZ2UgJiYgaXRlbSkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoaXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0KG51bGwpO1xyXG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShgL3BhZ2VzLyR7dGhpcy5tb2R9L3Byb2ZpbGVyYCk7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgPSBbXTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcIkhvdFNlYXJjaFByb2ZpbGF0b1wiKS50b1Byb21pc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdChIb3RQb3RhdG86IFByb2ZpbGVyRGF0YU5vZGVzVmlldykge1xyXG4gICAgICAgIGlmIChIb3RQb3RhdG8pIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hWaWV3ID0gSG90UG90YXRvO1xyXG4gICAgICAgICAgICB0aGlzLlBPU1RHZXRJdGVtcyh0aGlzLmJhY2tlbmQgKyBSZXBvc2l0b3J5W1wiUE9TVF9BZG1fR2V0UHJvZmlsZXJEYXRhTm9kZXNcIl0sIHRoaXMuc2VhcmNoVmlldyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZpZXcgPSBuZXcgUHJvZmlsZXJEYXRhTm9kZXNWaWV3KCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZFNlYXJjaCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zdG9yYWdlU3ViKVxyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2VTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kU2VhcmNoKHJlc2V0UGFnZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFZpZXcuc2VhcmNoaW5wcm9ncmVzcyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHJlc2V0UGFnZSlcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hWaWV3LnBhZ2UgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLlBPU1RHZXRJdGVtcyh0aGlzLmJhY2tlbmQgKyBSZXBvc2l0b3J5W1wiUE9TVF9BZG1fR2V0UHJvZmlsZXJEYXRhTm9kZXNcIl0sIHRoaXMuc2VhcmNoVmlldyk7XHJcbiAgICB9XHJcblxyXG4gICAgUE9TVEdldEl0ZW1zKHVybDogc3RyaW5nLCBkYXRhOiBQcm9maWxlckRhdGFOb2Rlc1ZpZXcpIHtcclxuICAgICAgICB0aGlzLmh0dHAucG9zdDxQcm9maWxlckRhdGFOb2Rlc1ZpZXc+KHVybCwgZGF0YSkuc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZpZXcgPSB0O1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZpZXcuc2VhcmNoaW5wcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiSG90U2VhcmNoUHJvZmlsYXRvXCIsIHRoaXMuc2VhcmNoVmlldykuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlcGFyZUV4cG9ydChkYXRhQ2FsbEJhY2spIHtcclxuICAgICAgICB2YXIgdmlldyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZWFyY2hWaWV3KSk7XHJcbiAgICAgICAgdmlldy5wYWdlID0gMTtcclxuICAgICAgICB2aWV3Lml0ZW1zcGVycGFnZW92ZXJyaWRlID0gOTk5OTk5OTtcclxuICAgICAgICB0aGlzLmh0dHAucG9zdDxQcm9maWxlckRhdGFOb2Rlc1ZpZXc+KHRoaXMuYmFja2VuZCArIFJlcG9zaXRvcnlbXCJQT1NUX0FkbV9HZXRQcm9maWxlckRhdGFOb2Rlc1wiXSwgdmlldykuc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXRlbXM6IFByb2ZpbGVyRGF0YU5vZGVbXSA9IHRoaXMuZXhwRXh0cy5kZXNlcmlhbGl6ZUZvckV4cG9ydCh0Lml0ZW1zLCBQcm9maWxlckRhdGFOb2RlKTtcclxuICAgICAgICAgICAgZGF0YUNhbGxCYWNrKGl0ZW1zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBhcHAtb3ZlcmZsb3ctdmlzaWJsZVwiIHdpZGdldD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdXBwZXJjYXNlXCI+e3snU2VydmVyIFByb2ZpbGVyJyB8IGxvY2FsaXplIDogbGN9fTwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgd2lkZ2V0LWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgYm90dG9tLTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gcm9sZT1cImZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhcHAtZmlyc3QtZmlsdGVyLWxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteGwtMiBjb2wtbGctMiBjb2wtbWQtMTIgYXBwLWZpbHRlci13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tZGF0ZSBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtWYWxpZGF0aW9uXT1cImZhbHNlXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWaWV3LmZpbHRlcmZyb21cIiBuYW1lPVwiZmlsdGVyZnJvbVwiIFtQbGFjZWhvbGRlcl09XCInRnJvbScgfCBsb2NhbGl6ZSA6IGxjXCI+PC9mb3JtLWRhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteGwtMiBjb2wtbGctMiBjb2wtbWQtMTIgYXBwLWZpbHRlci13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tZGF0ZSBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtWYWxpZGF0aW9uXT1cImZhbHNlXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWaWV3LmZpbHRlcnRvXCIgbmFtZT1cImZpbHRlcnRvXCIgW1BsYWNlaG9sZGVyXT1cIidUbycgfCBsb2NhbGl6ZSA6IGxjXCI+PC9mb3JtLWRhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cInNlYXJjaFZpZXcuc2VhcmNoaW5wcm9ncmVzc1wiIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb24gYnRuIGFwcC1idG4tc2VhcmNoIGFwcC1tYXJnaW4tdG9wLTIwXCIgKGNsaWNrKT1cInNlbmRTZWFyY2goKVwiIHR5cGU9XCJzdWJtaXRcIj48aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIiFzZWFyY2hWaWV3XCI+PGVtPnt7J0xvYWRpbmcgRGF0YScgfCBsb2NhbGl6ZSA6IGxjfX08L2VtPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaFZpZXdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcy10YWJsZSBbKG5nTW9kZWwpXT1cInNlYXJjaFZpZXdcIiBbSGllcmFyY2h5XT1cInRydWVcIiBbT3JkZXJCeUNvbHVtbl09XCJmYWxzZVwiIFtQYXJlbnRLZXldPVwiJ3BhcmVudGlkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW093bktleV09XCInaWQnXCIgW1N0YXJ0c0V4cGFuZGVkXT1cImZhbHNlXCIgW0V4cG9ydEZ1bmN0aW9uXT1cInByZXBhcmVFeHBvcnQuYmluZCh0aGlzKVwiIFtFeHBvcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0V4cG9ydEZpbGVOYW1lXT1cIidQcm9maWxlciBFeHBvcnQuY3N2J1wiIFtIaWRlUGFnaW5nXT1cInRydWVcIiAob25TZWFyY2hSZXF1ZXN0KT1cInNlbmRTZWFyY2goJGV2ZW50KTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGg9XCInMSdcIj57eydJRCcgfCBsb2NhbGl6ZSA6IGxjfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKnRoPVwiJzInXCI+e3snRGVzY3JpcHRpb24nIHwgbG9jYWxpemUgOiBsY319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICp0aD1cIiczJ1wiPnt7J0NhbGxzJyB8IGxvY2FsaXplIDogbGN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGg9XCInNCdcIj57eydUaW1lJyB8IGxvY2FsaXplIDogbGN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGg9XCInNSdcIj57eydQZWFrIFRpbWUnIHwgbG9jYWxpemUgOiBsY319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICp0aD1cIic2J1wiPnt7J01pbi4gVGltZScgfCBsb2NhbGl6ZSA6IGxjfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKnRoPVwiJzcnXCI+e3snQXZnLiBUaW1lJyB8IGxvY2FsaXplIDogbGN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGg9XCInOCdcIj57eydTcGVjaWZpYyBUaW1lJyB8IGxvY2FsaXplIDogbGN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGg9XCInOSdcIj57eydQZXJjZW50YWdlJyB8IGxvY2FsaXplIDogbGN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGg9XCInMTAnXCI+e3snQ2FsbHMgZm9yIFBlcmlvZCcgfCBsb2NhbGl6ZSA6IGxjfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKnRoPVwiJzExJ1wiPnt7J1RpbWUgZm9yIFBlcmlvZCcgfCBsb2NhbGl6ZSA6IGxjfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKnRoPVwiJzEyJ1wiPnt7J1BlYWsgVGltZSBmb3IgUGVyaW9kJyB8IGxvY2FsaXplIDogbGN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGg9XCInMTMnXCI+e3snTWluLiBUaW1lIGZvciBQZXJpb2QnIHwgbG9jYWxpemUgOiBsY319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICp0aD1cIicxNCdcIj57eydBdmcuIFRpbWUgZm9yIFBlcmlvZCcgfCBsb2NhbGl6ZSA6IGxjfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKnRoPVwiJzE1J1wiPnt7J1NwZWNpZmljIFRpbWUgZm9yIFBlcmlvZCcgfCBsb2NhbGl6ZSA6IGxjfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKnRoPVwiJzE2J1wiPnt7J1BlcmNlbnRhZ2UgZm9yIFBlcmlvZCcgfCBsb2NhbGl6ZSA6IGxjfX08L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICp0ZD1cIicxJzsgbGV0IGl0ZW1cIj57e2l0ZW0uaWR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGQ9XCInMic7IGxldCBpdGVtXCIgdGl0bGU9XCJ7e2l0ZW0uZGVzY3JpcHRpb259fVwiPnt7aXRlbS5kZXNjcmlwdGlvbi5sZW5ndGggPD0gNTAgPyBpdGVtLmRlc2NyaXB0aW9uIDogaXRlbS5kZXNjcmlwdGlvbi5zdWJzdHIoMCw1MCkgKyBcIlsuLi5dXCIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKnRkPVwiJzMnOyBsZXQgaXRlbVwiPnt7aXRlbS5jYWxsc319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICp0ZD1cIic0JzsgbGV0IGl0ZW1cIj57e2l0ZW0udGltZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICp0ZD1cIic1JzsgbGV0IGl0ZW1cIj57e2l0ZW0ucGVha3RpbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGQ9XCInNic7IGxldCBpdGVtXCI+e3tpdGVtLm1pbnRpbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGQ9XCInNyc7IGxldCBpdGVtXCI+e3tpdGVtLmF2Z3RpbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGQ9XCInOCc7IGxldCBpdGVtXCI+e3tpdGVtLnRpbWV3aXRob3V0Y2hpbGRyZW59fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGQ9XCInOSc7IGxldCBpdGVtXCI+e3tpdGVtLnBlcmNlbnRhZ2V9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGQ9XCInMTAnIGxldCBpdGVtXCI+e3tpdGVtLnNuYXBkZWx0YWNhbGxzfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKnRkPVwiJzExJyBsZXQgaXRlbVwiPnt7aXRlbS5zbmFwZGVsdGF0aW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKnRkPVwiJzEyJyBsZXQgaXRlbVwiPnt7aXRlbS5zbmFwcGVha3RpbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGQ9XCInMTMnIGxldCBpdGVtXCI+e3tpdGVtLnNuYXBtaW50aW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKnRkPVwiJzE0JyBsZXQgaXRlbVwiPnt7aXRlbS5zbmFwYXZndGltZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICp0ZD1cIicxNScgbGV0IGl0ZW1cIj57e2l0ZW0uc25hcHRpbWV3aXRob3V0Y2hpbGRyZW59fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqdGQ9XCInMTYnIGxldCBpdGVtXCI+e3tpdGVtLnNuYXBwZXJjZW50YWdlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VzLXRhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=