@posiwise/admin-module 0.0.77 → 0.0.79

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 (91) hide show
  1. package/esm2022/lib/admin-module.routing.mjs +26 -1
  2. package/esm2022/lib/admin.module.mjs +20 -5
  3. package/esm2022/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +12 -8
  4. package/esm2022/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.mjs +3 -3
  5. package/esm2022/lib/components/config/global-config-list/global-config-list.component.mjs +11 -7
  6. package/esm2022/lib/components/contact-us/contact-us-list/contact-us-list.component.mjs +4 -3
  7. package/esm2022/lib/components/credentials/credentials/credentials.component.mjs +11 -7
  8. package/esm2022/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +9 -6
  9. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +3 -3
  10. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.mjs +3 -3
  11. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +3 -3
  12. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +3 -3
  13. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +3 -3
  14. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.mjs +3 -3
  15. package/esm2022/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +4 -3
  16. package/esm2022/lib/components/faqs/faqs-list/faqs-list.component.mjs +4 -3
  17. package/esm2022/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.mjs +3 -3
  18. package/esm2022/lib/components/incidents/add-edit-incident/add-edit-incident.component.mjs +156 -0
  19. package/esm2022/lib/components/incidents/incidents-list/incidents-list.component.mjs +94 -0
  20. package/esm2022/lib/components/incidents/incidents-tabs/incidents-tabs.component.mjs +25 -0
  21. package/esm2022/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +4 -3
  22. package/esm2022/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.mjs +3 -3
  23. package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +4 -3
  24. package/esm2022/lib/components/newsletters/newsletters-list/newsletters-list.component.mjs +4 -3
  25. package/esm2022/lib/components/permissions/permissions-list/permissions-list.component.mjs +13 -8
  26. package/esm2022/lib/components/permissions/roles-list/roles-list.component.mjs +13 -8
  27. package/esm2022/lib/components/products/product-details/product-details.component.mjs +14 -4
  28. package/esm2022/lib/components/products/products-list/products-list.component.mjs +4 -3
  29. package/esm2022/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +4 -3
  30. package/esm2022/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.mjs +7 -7
  31. package/esm2022/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +4 -3
  32. package/esm2022/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +57 -20
  33. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +3 -3
  34. package/esm2022/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +21 -14
  35. package/esm2022/lib/components/tags/tags-category/tags-category.component.mjs +11 -6
  36. package/esm2022/lib/components/tags/tags-list/tags-list.component.mjs +5 -3
  37. package/esm2022/lib/components/tips/tips-list/tips-list.component.mjs +3 -3
  38. package/esm2022/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +60 -17
  39. package/esm2022/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +62 -17
  40. package/esm2022/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +61 -16
  41. package/esm2022/lib/components/tracking/events/events.component.mjs +62 -16
  42. package/esm2022/lib/components/tracking/versions/versions.component.mjs +58 -17
  43. package/esm2022/lib/components/users/users-list/users-list.component.mjs +13 -7
  44. package/esm2022/lib/shared/routers/routers.mjs +3 -2
  45. package/fesm2022/posiwise-admin-module.mjs +715 -155
  46. package/fesm2022/posiwise-admin-module.mjs.map +1 -1
  47. package/lib/admin.module.d.ts +26 -22
  48. package/lib/components/TOS/terms-of-service/terms-of-service.component.d.ts +2 -0
  49. package/lib/components/config/global-config-list/global-config-list.component.d.ts +2 -0
  50. package/lib/components/credentials/credentials/credentials.component.d.ts +2 -0
  51. package/lib/components/credentials/subscription-credentials/subscription-credentials.component.d.ts +1 -0
  52. package/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.d.ts +1 -0
  53. package/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.d.ts +1 -0
  54. package/lib/components/domain-config/domain-config-details/domain-config-details.component.d.ts +1 -0
  55. package/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.d.ts +1 -0
  56. package/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.d.ts +1 -0
  57. package/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.d.ts +1 -0
  58. package/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.d.ts +1 -0
  59. package/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.d.ts +1 -0
  60. package/lib/components/domain-config/domain-config-list/domain-config-list.component.d.ts +1 -0
  61. package/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.d.ts +1 -0
  62. package/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.d.ts +1 -0
  63. package/lib/components/incidents/add-edit-incident/add-edit-incident.component.d.ts +60 -0
  64. package/lib/components/incidents/incidents-list/incidents-list.component.d.ts +57 -0
  65. package/lib/components/incidents/incidents-tabs/incidents-tabs.component.d.ts +7 -0
  66. package/lib/components/login-notifications/login-notification-details/login-notification-details.component.d.ts +1 -0
  67. package/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.d.ts +1 -0
  68. package/lib/components/newsletters/newsletter-details/newsletter-details.component.d.ts +1 -0
  69. package/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.d.ts +1 -0
  70. package/lib/components/newsletters/newsletters-items/newsletters-items.component.d.ts +1 -0
  71. package/lib/components/newsletters/newsletters-list/newsletters-list.component.d.ts +1 -0
  72. package/lib/components/permissions/permissions-details/permissions-details.component.d.ts +1 -0
  73. package/lib/components/permissions/permissions-list/permissions-list.component.d.ts +2 -0
  74. package/lib/components/permissions/roles-list/roles-list.component.d.ts +2 -0
  75. package/lib/components/products/product-details/product-details.component.d.ts +2 -0
  76. package/lib/components/products/products-list/products-list.component.d.ts +1 -0
  77. package/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.d.ts +1 -0
  78. package/lib/components/subscriptions/subscription-products/subscription-products.component.d.ts +1 -0
  79. package/lib/components/subscriptions/subscription-users/subscription-users.component.d.ts +15 -2
  80. package/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.d.ts +2 -0
  81. package/lib/components/tags/tags-category/tags-category.component.d.ts +2 -0
  82. package/lib/components/tags/tags-list/tags-list.component.d.ts +1 -0
  83. package/lib/components/tips/tips-list/tips-list.component.d.ts +1 -0
  84. package/lib/components/tracking/ahoy-events/ahoy-events.component.d.ts +13 -2
  85. package/lib/components/tracking/ahoy-messages/ahoy-messages.component.d.ts +13 -2
  86. package/lib/components/tracking/ahoy-visits/ahoy-visits.component.d.ts +13 -2
  87. package/lib/components/tracking/events/events.component.d.ts +16 -2
  88. package/lib/components/tracking/versions/versions.component.d.ts +12 -2
  89. package/lib/components/users/users-list/users-list.component.d.ts +3 -0
  90. package/lib/shared/routers/routers.d.ts +1 -0
  91. package/package.json +1 -1
@@ -20,10 +20,11 @@ import * as i8 from "@angular/common";
20
20
  import * as i9 from "@angular/forms";
21
21
  import * as i10 from "@posiwise/shared-components";
22
22
  import * as i11 from "@angular/router";
23
- import * as i12 from "@posiwise/directives";
24
- import * as i13 from "@ng-bootstrap/ng-bootstrap";
25
- import * as i14 from "@ngneat/transloco";
26
- import * as i15 from "@posiwise/pipes";
23
+ import * as i12 from "primeng/progressspinner";
24
+ import * as i13 from "@posiwise/directives";
25
+ import * as i14 from "@ng-bootstrap/ng-bootstrap";
26
+ import * as i15 from "@ngneat/transloco";
27
+ import * as i16 from "@posiwise/pipes";
27
28
  export class UserListComponent extends AppBaseComponent {
28
29
  constructor(adminService, toaster, productService, injector, authService, cdr, windowService) {
29
30
  super(injector);
@@ -37,6 +38,7 @@ export class UserListComponent extends AppBaseComponent {
37
38
  this.searchText = '';
38
39
  this.allUsers = [];
39
40
  this.loading = true;
41
+ this.isLoaded = false;
40
42
  this.searchOptions = [
41
43
  {
42
44
  label: 'Role',
@@ -57,6 +59,7 @@ export class UserListComponent extends AppBaseComponent {
57
59
  this.masterProductId = this.appConfig.master_subscription.product_id;
58
60
  this.featureKeysList = [];
59
61
  this.filterByProducts = [];
62
+ this.totalRecordsUnFilter = 0;
60
63
  this.filterByRoles = [];
61
64
  this.filterByFeatureKeys = [];
62
65
  this.criteria = [];
@@ -150,6 +153,7 @@ export class UserListComponent extends AppBaseComponent {
150
153
  });
151
154
  }
152
155
  getUsers(paging) {
156
+ this.isLoaded = false;
153
157
  const params = {
154
158
  product_ids: this.filterByProducts.join() || '',
155
159
  role_ids: this.filterByRoles.join() || '',
@@ -160,7 +164,9 @@ export class UserListComponent extends AppBaseComponent {
160
164
  this.users = response.users;
161
165
  this.allUsers = [...this.users];
162
166
  this.totalRecords = response.object_count;
167
+ this.totalRecordsUnFilter = response?.unfiltered_count;
163
168
  this.loading = false;
169
+ this.isLoaded = true;
164
170
  });
165
171
  }
166
172
  onSearchOptionChange($event) {
@@ -298,11 +304,11 @@ export class UserListComponent extends AppBaseComponent {
298
304
  this.adminService.remove2fa(this.remove2faUserId, this.subscriptionId).subscribe();
299
305
  }
300
306
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: UserListComponent, deps: [{ token: i1.AdminService }, { token: i2.CustomToastService }, { token: i2.ProductService }, { token: i0.Injector }, { token: i2.AuthService }, { token: i0.ChangeDetectorRef }, { token: i2.WindowService }], target: i0.ɵɵFactoryTarget.Component }); }
301
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.6", type: UserListComponent, selector: "pw-admin-user-list", viewQueries: [{ propertyName: "passwordValidationModalForUserDelete", first: true, predicate: ["passwordValidationModalForUserDelete"], descendants: true }, { propertyName: "passwordValidationModalForImpersonate", first: true, predicate: ["passwordValidationModalForImpersonate"], descendants: true }, { propertyName: "passwordValidationModalForRemove2fa", first: true, predicate: ["passwordValidationModalForRemove2fa"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 create-user d-flex justify-content-between align-items-center my-3\">\n <h2 class=\"card-title p-0 float-start\">Users</h2>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n id=\"btn-create\"\n *rbacAllow=\"'SuperAdmin'\"\n [routerLink]=\"[routers.usersDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Create User\n </a>\n </div>\n</div>\n<div class=\"primeng-datatable-container mt-0\">\n <div class=\"user-management-table table-responsive\">\n <p-table #dt\n [value]=\"users\"\n [paginator]=\"true\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"search-filter\">\n <div class=\"col-sm-4\">\n <p-multiSelect [options]=\"searchOptions\"\n (onChange)=\"onSearchOptionChange($event)\"\n placeholder=\"Filter users by role, product, or feature\"\n [selectionLimit]=\"1\"\n [(ngModel)]=\"filterSource\"\n [showToggleAll]=\"true\"\n [showHeader]=\"true\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-4\"\n *ngIf=\"selectedOption\">\n <p-multiSelect [options]=\"searchDataSource\"\n (onChange)=\"onSearchCriteria($event)\"\n [showToggleAll]=\"true\"\n [(ngModel)]=\"criteria\"\n [showHeader]=\"true\"\n placeholder=\"Select {{ selectedOption.value }}s\"\n maxSelectedLabels=\"2\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search User...\"\n data-cy=\"user-search\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"wd-90\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"id\">\n {{ 'Admin.Users.Id' | transloco }}\n <p-sortIcon field=\"id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"first_name\">\n {{ 'Label.FirstName' | transloco }}\n <p-sortIcon field=\"first_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"last_name\">\n {{ 'Label.LastName' | transloco }}\n <p-sortIcon field=\"last_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"email\">\n {{ 'Label.Email' | transloco }}\n <p-sortIcon field=\"email\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"slug\">\n {{ 'Admin.Users.Slug' | transloco }}\n <p-sortIcon field=\"slug\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"encrypted_password\">\n {{ 'Admin.Users.EmailConfirm' | transloco }}\n <p-sortIcon field=\"encrypted_password\"></p-sortIcon>\n </th>\n\n <th scope=\"true\"\n pSortableColumn=\"sessions_last_month\">\n {{ 'Admin.Subscriptions.SessionsTotalLastMonth' | transloco }}\n <p-sortIcon field=\"sessions_last_month\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"last_sign_in_at\">\n {{ 'Admin.Users.LastLogin' | transloco }}\n <p-sortIcon field=\"last_sign_in_at\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"signed_up_at\">\n {{ 'Admin.Users.RegisteredOn' | transloco }}\n <p-sortIcon field=\"signed_up_at\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n class=\"actions-list-four\">\n {{ 'Label.Actions' | transloco }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-user>\n <tr>\n <td data-head=\"id\"> {{ user.id }}</td>\n <td data-head=\"First Name\"><a [routerLink]=\"['/members', user.slug]\">{{ user.first_name }}</a></td>\n <td data-head=\"Last Name\">{{ user.last_name }}\n <span *ngIf=\"user?.alpha\"\n [pTooltip]=\"'Admin.Users.Tooltip.AlphaIcon'|transloco\"\n tooltipPosition=\"top\">\n <i class=\"fa-regular fa-square-a alpha-beta text-warning\"></i>\n </span>\n <span class=\"ms-2\"\n *ngIf=\"user?.beta\"\n [pTooltip]=\"'Admin.Users.Tooltip.BetaIcon'|transloco\"\n tooltipPosition=\"top\">\n <i class=\"fa-regular fa-square-b alpha-beta text-primary\" ></i>\n </span>\n </td>\n <td data-head=\"Email\">{{ user.email }}</td>\n <td data-head=\"Slug\">{{ user.slug }}</td>\n <td data-head=\"Email Confirm\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: user?.has_password\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ user?.has_password ? 'Yes' : 'No' }}</span>\n </td>\n <td data-head=\"S/m #\">\n <span [ngClass]=\"{\n 'text-danger fw-bold': user?.sessions_last_month < 3\n }\">{{ user?.sessions_last_month }}</span>\n </td>\n <td data-head=\"Last Login\">\n <span *ngIf=\"user?.current_sign_in_at;else lastSignin\">\n {{ user.current_sign_in_at | dateFormat }}\n </span>\n <ng-template #lastSignin>\n {{ user.last_sign_in_at | dateFormat }}\n </ng-template>\n </td>\n <td data-head=\"Registered On\">{{ user.signed_up_at | dateFormat }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Impersonate this user\"\n *rbacAllow=\"'Pages.Alpha'\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fas fa-people-arrows\"\n (click)=\"onImpersonate(user)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <ng-template [ngIf]=\"user?.enable_two_factor_authenticator\">\n <li ngbTooltip=\"Disable 2fa\"\n (click)=\"disable2fa(user?.id)\"\n *rbacAllow=\"'Pages.Alpha'\"\n class=\"me-2 me-sm-3\">\n <i class=\"fa fa-lock\" aria-hidden=\"true\"></i>\n </li>\n </ng-template>\n <ng-template [ngIf]=\"currentUser && user.id !== currentUser.id\">\n <li ngbTooltip=\"Message\"\n *rbacAllow=\"chatPermission\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"['/message']\"\n [fragment]=\"user.slug\">\n <i class=\"fa fa-comments cta1-icon\" aria-hidden=\"true\"></i>\n </li>\n </ng-template>\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'Pages.Admin.Users.Edit'\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[routers.usersDetails + user.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n *rbacAllow=\"'Pages.Admin.Users.Delete'\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(user)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n </div>\n</div>\n<!-- password validation modal for delete user -->\n<pw-password-validation #passwordValidationModalForUserDelete\n (successEvent)=\"deleteUser($event)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p>{{ 'User.Account.Message.ActionCanNotUndone' | transloco }}</p>\n <p>{{ 'User.Account.Message.ConfirmPassword' | transloco }}</p>\n </div>\n </div>\n</pw-password-validation>\n<!-- password validation modal for impersonate -->\n<pw-password-validation #passwordValidationModalForImpersonate\n (successEvent)=\"onUserImpersonation($event)\">\n</pw-password-validation>\n<!-- password validation modal for remove2fa -->\n<pw-password-validation #passwordValidationModalForRemove2fa\n (successEvent)=\"remove2fa($event)\">\n</pw-password-validation>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.search-input input{width:100%}.w-150{width:150px}@media (min-width: 767px){.table-responsive td,.table-responsive th{font-size:11px!important}}.alpha-beta{font-size:14px}\n"], dependencies: [{ kind: "component", type: i3.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i3.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i6.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]" }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.PasswordValidationComponent, selector: "pw-password-validation", outputs: ["successEvent"] }, { kind: "directive", type: i11.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i12.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color"] }, { kind: "directive", type: i12.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i13.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: i14.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i15.DateFormatPipe, name: "dateFormat" }] }); }
307
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.6", type: UserListComponent, selector: "pw-admin-user-list", viewQueries: [{ propertyName: "passwordValidationModalForUserDelete", first: true, predicate: ["passwordValidationModalForUserDelete"], descendants: true }, { propertyName: "passwordValidationModalForImpersonate", first: true, predicate: ["passwordValidationModalForImpersonate"], descendants: true }, { propertyName: "passwordValidationModalForRemove2fa", first: true, predicate: ["passwordValidationModalForRemove2fa"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 create-user d-flex justify-content-between align-items-center my-3\">\n <h2 class=\"card-title p-0 float-start\">Users</h2>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n id=\"btn-create\"\n *rbacAllow=\"'SuperAdmin'\"\n [routerLink]=\"[routers.usersDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Create User\n </a>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container mt-0\" [class.hideTable]=\"totalRecordsUnFilter === 0\">\n <div class=\"user-management-table table-responsive\">\n <p-table #dt\n [value]=\"users\"\n [paginator]=\"true\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"search-filter\">\n <div class=\"col-sm-4\">\n <p-multiSelect [options]=\"searchOptions\"\n (onChange)=\"onSearchOptionChange($event)\"\n placeholder=\"Filter users by role, product, or feature\"\n [selectionLimit]=\"1\"\n [(ngModel)]=\"filterSource\"\n [showToggleAll]=\"true\"\n [showHeader]=\"true\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-4\"\n *ngIf=\"selectedOption\">\n <p-multiSelect [options]=\"searchDataSource\"\n (onChange)=\"onSearchCriteria($event)\"\n [showToggleAll]=\"true\"\n [(ngModel)]=\"criteria\"\n [showHeader]=\"true\"\n placeholder=\"Select {{ selectedOption.value }}s\"\n maxSelectedLabels=\"2\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search User...\"\n data-cy=\"user-search\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"wd-90\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"id\">\n {{ 'Admin.Users.Id' | transloco }}\n <p-sortIcon field=\"id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"first_name\">\n {{ 'Label.FirstName' | transloco }}\n <p-sortIcon field=\"first_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"last_name\">\n {{ 'Label.LastName' | transloco }}\n <p-sortIcon field=\"last_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"email\">\n {{ 'Label.Email' | transloco }}\n <p-sortIcon field=\"email\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"slug\">\n {{ 'Admin.Users.Slug' | transloco }}\n <p-sortIcon field=\"slug\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"encrypted_password\">\n {{ 'Admin.Users.EmailConfirm' | transloco }}\n <p-sortIcon field=\"encrypted_password\"></p-sortIcon>\n </th>\n\n <th scope=\"true\"\n pSortableColumn=\"sessions_last_month\">\n {{ 'Admin.Subscriptions.SessionsTotalLastMonth' | transloco }}\n <p-sortIcon field=\"sessions_last_month\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"last_sign_in_at\">\n {{ 'Admin.Users.LastLogin' | transloco }}\n <p-sortIcon field=\"last_sign_in_at\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"signed_up_at\">\n {{ 'Admin.Users.RegisteredOn' | transloco }}\n <p-sortIcon field=\"signed_up_at\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n class=\"actions-list-four\">\n {{ 'Label.Actions' | transloco }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-user>\n <tr>\n <td data-head=\"id\"> {{ user.id }}</td>\n <td data-head=\"First Name\"><a [routerLink]=\"['/members', user.slug]\">{{ user.first_name }}</a></td>\n <td data-head=\"Last Name\">{{ user.last_name }}\n <span *ngIf=\"user?.alpha\"\n [pTooltip]=\"'Admin.Users.Tooltip.AlphaIcon'|transloco\"\n tooltipPosition=\"top\">\n <i class=\"fa-regular fa-square-a alpha-beta text-warning\"></i>\n </span>\n <span class=\"ms-2\"\n *ngIf=\"user?.beta\"\n [pTooltip]=\"'Admin.Users.Tooltip.BetaIcon'|transloco\"\n tooltipPosition=\"top\">\n <i class=\"fa-regular fa-square-b alpha-beta text-primary\" ></i>\n </span>\n </td>\n <td data-head=\"Email\">{{ user.email }}</td>\n <td data-head=\"Slug\">{{ user.slug }}</td>\n <td data-head=\"Email Confirm\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: user?.has_password\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ user?.has_password ? 'Yes' : 'No' }}</span>\n <span class=\"ms-2\" *ngIf=\"user?.blocked\" [pTooltip]=\"'This user has been blocked'\" tooltipPosition=\"top\">\n <i class=\"fa-solid fa-hexagon-exclamation text-danger hexa-warning\"></i>\n </span>\n </td>\n <td data-head=\"S/m #\">\n <span [ngClass]=\"{\n 'text-danger fw-bold': user?.sessions_last_month < 3\n }\">{{ user?.sessions_last_month }}</span>\n </td>\n <td data-head=\"Last Login\">\n <span *ngIf=\"user?.current_sign_in_at;else lastSignin\">\n {{ user.current_sign_in_at | dateFormat }}\n </span>\n <ng-template #lastSignin>\n {{ user.last_sign_in_at | dateFormat }}\n </ng-template>\n </td>\n <td data-head=\"Registered On\">{{ user.signed_up_at | dateFormat }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Impersonate this user\"\n *rbacAllow=\"'Pages.Alpha'\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fas fa-people-arrows\"\n (click)=\"onImpersonate(user)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <ng-template [ngIf]=\"user?.enable_two_factor_authenticator\">\n <li ngbTooltip=\"Disable 2fa\"\n (click)=\"disable2fa(user?.id)\"\n *rbacAllow=\"'Pages.Alpha'\"\n class=\"me-2 me-sm-3\">\n <i class=\"fa fa-lock\" aria-hidden=\"true\"></i>\n </li>\n </ng-template>\n <ng-template [ngIf]=\"currentUser && user.id !== currentUser.id\">\n <li ngbTooltip=\"Message\"\n *rbacAllow=\"chatPermission\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"['/message']\"\n [fragment]=\"user.slug\">\n <i class=\"fa fa-comments cta1-icon\" aria-hidden=\"true\"></i>\n </li>\n </ng-template>\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'Pages.Admin.Users.Edit'\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[routers.usersDetails + user.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n *rbacAllow=\"'Pages.Admin.Users.Delete'\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(user)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"totalRecords === 0 && totalRecordsUnFilter !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\">\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"totalRecords !== 0\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n </div>\n</div>\n<div *ngIf=\"!loading && totalRecordsUnFilter === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Users.NoDataMessage' | transloco\"> </pw-no-data>\n</div>\n<!-- password validation modal for delete user -->\n<pw-password-validation #passwordValidationModalForUserDelete\n (successEvent)=\"deleteUser($event)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p>{{ 'User.Account.Message.ActionCanNotUndone' | transloco }}</p>\n <p>{{ 'User.Account.Message.ConfirmPassword' | transloco }}</p>\n </div>\n </div>\n</pw-password-validation>\n<!-- password validation modal for impersonate -->\n<pw-password-validation #passwordValidationModalForImpersonate\n (successEvent)=\"onUserImpersonation($event)\">\n</pw-password-validation>\n<!-- password validation modal for remove2fa -->\n<pw-password-validation #passwordValidationModalForRemove2fa\n (successEvent)=\"remove2fa($event)\">\n</pw-password-validation>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.search-input input{width:100%}.w-150{width:150px}@media (min-width: 767px){.table-responsive td,.table-responsive th{font-size:11px!important}}.hexa-warning{font-size:18px;vertical-align:middle}.alpha-beta{font-size:14px}\n"], dependencies: [{ kind: "component", type: i3.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i3.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i6.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]" }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.PasswordValidationComponent, selector: "pw-password-validation", outputs: ["successEvent"] }, { kind: "directive", type: i11.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i12.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i10.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i13.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color"] }, { kind: "directive", type: i13.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i14.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: i15.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i16.DateFormatPipe, name: "dateFormat" }] }); }
302
308
  }
303
309
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: UserListComponent, decorators: [{
304
310
  type: Component,
305
- args: [{ selector: 'pw-admin-user-list', template: "<div class=\"row\">\n <div class=\"col-12 create-user d-flex justify-content-between align-items-center my-3\">\n <h2 class=\"card-title p-0 float-start\">Users</h2>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n id=\"btn-create\"\n *rbacAllow=\"'SuperAdmin'\"\n [routerLink]=\"[routers.usersDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Create User\n </a>\n </div>\n</div>\n<div class=\"primeng-datatable-container mt-0\">\n <div class=\"user-management-table table-responsive\">\n <p-table #dt\n [value]=\"users\"\n [paginator]=\"true\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"search-filter\">\n <div class=\"col-sm-4\">\n <p-multiSelect [options]=\"searchOptions\"\n (onChange)=\"onSearchOptionChange($event)\"\n placeholder=\"Filter users by role, product, or feature\"\n [selectionLimit]=\"1\"\n [(ngModel)]=\"filterSource\"\n [showToggleAll]=\"true\"\n [showHeader]=\"true\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-4\"\n *ngIf=\"selectedOption\">\n <p-multiSelect [options]=\"searchDataSource\"\n (onChange)=\"onSearchCriteria($event)\"\n [showToggleAll]=\"true\"\n [(ngModel)]=\"criteria\"\n [showHeader]=\"true\"\n placeholder=\"Select {{ selectedOption.value }}s\"\n maxSelectedLabels=\"2\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search User...\"\n data-cy=\"user-search\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"wd-90\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"id\">\n {{ 'Admin.Users.Id' | transloco }}\n <p-sortIcon field=\"id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"first_name\">\n {{ 'Label.FirstName' | transloco }}\n <p-sortIcon field=\"first_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"last_name\">\n {{ 'Label.LastName' | transloco }}\n <p-sortIcon field=\"last_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"email\">\n {{ 'Label.Email' | transloco }}\n <p-sortIcon field=\"email\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"slug\">\n {{ 'Admin.Users.Slug' | transloco }}\n <p-sortIcon field=\"slug\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"encrypted_password\">\n {{ 'Admin.Users.EmailConfirm' | transloco }}\n <p-sortIcon field=\"encrypted_password\"></p-sortIcon>\n </th>\n\n <th scope=\"true\"\n pSortableColumn=\"sessions_last_month\">\n {{ 'Admin.Subscriptions.SessionsTotalLastMonth' | transloco }}\n <p-sortIcon field=\"sessions_last_month\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"last_sign_in_at\">\n {{ 'Admin.Users.LastLogin' | transloco }}\n <p-sortIcon field=\"last_sign_in_at\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"signed_up_at\">\n {{ 'Admin.Users.RegisteredOn' | transloco }}\n <p-sortIcon field=\"signed_up_at\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n class=\"actions-list-four\">\n {{ 'Label.Actions' | transloco }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-user>\n <tr>\n <td data-head=\"id\"> {{ user.id }}</td>\n <td data-head=\"First Name\"><a [routerLink]=\"['/members', user.slug]\">{{ user.first_name }}</a></td>\n <td data-head=\"Last Name\">{{ user.last_name }}\n <span *ngIf=\"user?.alpha\"\n [pTooltip]=\"'Admin.Users.Tooltip.AlphaIcon'|transloco\"\n tooltipPosition=\"top\">\n <i class=\"fa-regular fa-square-a alpha-beta text-warning\"></i>\n </span>\n <span class=\"ms-2\"\n *ngIf=\"user?.beta\"\n [pTooltip]=\"'Admin.Users.Tooltip.BetaIcon'|transloco\"\n tooltipPosition=\"top\">\n <i class=\"fa-regular fa-square-b alpha-beta text-primary\" ></i>\n </span>\n </td>\n <td data-head=\"Email\">{{ user.email }}</td>\n <td data-head=\"Slug\">{{ user.slug }}</td>\n <td data-head=\"Email Confirm\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: user?.has_password\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ user?.has_password ? 'Yes' : 'No' }}</span>\n </td>\n <td data-head=\"S/m #\">\n <span [ngClass]=\"{\n 'text-danger fw-bold': user?.sessions_last_month < 3\n }\">{{ user?.sessions_last_month }}</span>\n </td>\n <td data-head=\"Last Login\">\n <span *ngIf=\"user?.current_sign_in_at;else lastSignin\">\n {{ user.current_sign_in_at | dateFormat }}\n </span>\n <ng-template #lastSignin>\n {{ user.last_sign_in_at | dateFormat }}\n </ng-template>\n </td>\n <td data-head=\"Registered On\">{{ user.signed_up_at | dateFormat }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Impersonate this user\"\n *rbacAllow=\"'Pages.Alpha'\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fas fa-people-arrows\"\n (click)=\"onImpersonate(user)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <ng-template [ngIf]=\"user?.enable_two_factor_authenticator\">\n <li ngbTooltip=\"Disable 2fa\"\n (click)=\"disable2fa(user?.id)\"\n *rbacAllow=\"'Pages.Alpha'\"\n class=\"me-2 me-sm-3\">\n <i class=\"fa fa-lock\" aria-hidden=\"true\"></i>\n </li>\n </ng-template>\n <ng-template [ngIf]=\"currentUser && user.id !== currentUser.id\">\n <li ngbTooltip=\"Message\"\n *rbacAllow=\"chatPermission\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"['/message']\"\n [fragment]=\"user.slug\">\n <i class=\"fa fa-comments cta1-icon\" aria-hidden=\"true\"></i>\n </li>\n </ng-template>\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'Pages.Admin.Users.Edit'\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[routers.usersDetails + user.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n *rbacAllow=\"'Pages.Admin.Users.Delete'\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(user)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n </div>\n</div>\n<!-- password validation modal for delete user -->\n<pw-password-validation #passwordValidationModalForUserDelete\n (successEvent)=\"deleteUser($event)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p>{{ 'User.Account.Message.ActionCanNotUndone' | transloco }}</p>\n <p>{{ 'User.Account.Message.ConfirmPassword' | transloco }}</p>\n </div>\n </div>\n</pw-password-validation>\n<!-- password validation modal for impersonate -->\n<pw-password-validation #passwordValidationModalForImpersonate\n (successEvent)=\"onUserImpersonation($event)\">\n</pw-password-validation>\n<!-- password validation modal for remove2fa -->\n<pw-password-validation #passwordValidationModalForRemove2fa\n (successEvent)=\"remove2fa($event)\">\n</pw-password-validation>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.search-input input{width:100%}.w-150{width:150px}@media (min-width: 767px){.table-responsive td,.table-responsive th{font-size:11px!important}}.alpha-beta{font-size:14px}\n"] }]
311
+ args: [{ selector: 'pw-admin-user-list', template: "<div class=\"row\">\n <div class=\"col-12 create-user d-flex justify-content-between align-items-center my-3\">\n <h2 class=\"card-title p-0 float-start\">Users</h2>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n id=\"btn-create\"\n *rbacAllow=\"'SuperAdmin'\"\n [routerLink]=\"[routers.usersDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Create User\n </a>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container mt-0\" [class.hideTable]=\"totalRecordsUnFilter === 0\">\n <div class=\"user-management-table table-responsive\">\n <p-table #dt\n [value]=\"users\"\n [paginator]=\"true\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"search-filter\">\n <div class=\"col-sm-4\">\n <p-multiSelect [options]=\"searchOptions\"\n (onChange)=\"onSearchOptionChange($event)\"\n placeholder=\"Filter users by role, product, or feature\"\n [selectionLimit]=\"1\"\n [(ngModel)]=\"filterSource\"\n [showToggleAll]=\"true\"\n [showHeader]=\"true\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-4\"\n *ngIf=\"selectedOption\">\n <p-multiSelect [options]=\"searchDataSource\"\n (onChange)=\"onSearchCriteria($event)\"\n [showToggleAll]=\"true\"\n [(ngModel)]=\"criteria\"\n [showHeader]=\"true\"\n placeholder=\"Select {{ selectedOption.value }}s\"\n maxSelectedLabels=\"2\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search User...\"\n data-cy=\"user-search\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"wd-90\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"id\">\n {{ 'Admin.Users.Id' | transloco }}\n <p-sortIcon field=\"id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"first_name\">\n {{ 'Label.FirstName' | transloco }}\n <p-sortIcon field=\"first_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"last_name\">\n {{ 'Label.LastName' | transloco }}\n <p-sortIcon field=\"last_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"email\">\n {{ 'Label.Email' | transloco }}\n <p-sortIcon field=\"email\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"slug\">\n {{ 'Admin.Users.Slug' | transloco }}\n <p-sortIcon field=\"slug\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"encrypted_password\">\n {{ 'Admin.Users.EmailConfirm' | transloco }}\n <p-sortIcon field=\"encrypted_password\"></p-sortIcon>\n </th>\n\n <th scope=\"true\"\n pSortableColumn=\"sessions_last_month\">\n {{ 'Admin.Subscriptions.SessionsTotalLastMonth' | transloco }}\n <p-sortIcon field=\"sessions_last_month\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"last_sign_in_at\">\n {{ 'Admin.Users.LastLogin' | transloco }}\n <p-sortIcon field=\"last_sign_in_at\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"signed_up_at\">\n {{ 'Admin.Users.RegisteredOn' | transloco }}\n <p-sortIcon field=\"signed_up_at\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n class=\"actions-list-four\">\n {{ 'Label.Actions' | transloco }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-user>\n <tr>\n <td data-head=\"id\"> {{ user.id }}</td>\n <td data-head=\"First Name\"><a [routerLink]=\"['/members', user.slug]\">{{ user.first_name }}</a></td>\n <td data-head=\"Last Name\">{{ user.last_name }}\n <span *ngIf=\"user?.alpha\"\n [pTooltip]=\"'Admin.Users.Tooltip.AlphaIcon'|transloco\"\n tooltipPosition=\"top\">\n <i class=\"fa-regular fa-square-a alpha-beta text-warning\"></i>\n </span>\n <span class=\"ms-2\"\n *ngIf=\"user?.beta\"\n [pTooltip]=\"'Admin.Users.Tooltip.BetaIcon'|transloco\"\n tooltipPosition=\"top\">\n <i class=\"fa-regular fa-square-b alpha-beta text-primary\" ></i>\n </span>\n </td>\n <td data-head=\"Email\">{{ user.email }}</td>\n <td data-head=\"Slug\">{{ user.slug }}</td>\n <td data-head=\"Email Confirm\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: user?.has_password\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ user?.has_password ? 'Yes' : 'No' }}</span>\n <span class=\"ms-2\" *ngIf=\"user?.blocked\" [pTooltip]=\"'This user has been blocked'\" tooltipPosition=\"top\">\n <i class=\"fa-solid fa-hexagon-exclamation text-danger hexa-warning\"></i>\n </span>\n </td>\n <td data-head=\"S/m #\">\n <span [ngClass]=\"{\n 'text-danger fw-bold': user?.sessions_last_month < 3\n }\">{{ user?.sessions_last_month }}</span>\n </td>\n <td data-head=\"Last Login\">\n <span *ngIf=\"user?.current_sign_in_at;else lastSignin\">\n {{ user.current_sign_in_at | dateFormat }}\n </span>\n <ng-template #lastSignin>\n {{ user.last_sign_in_at | dateFormat }}\n </ng-template>\n </td>\n <td data-head=\"Registered On\">{{ user.signed_up_at | dateFormat }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Impersonate this user\"\n *rbacAllow=\"'Pages.Alpha'\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fas fa-people-arrows\"\n (click)=\"onImpersonate(user)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <ng-template [ngIf]=\"user?.enable_two_factor_authenticator\">\n <li ngbTooltip=\"Disable 2fa\"\n (click)=\"disable2fa(user?.id)\"\n *rbacAllow=\"'Pages.Alpha'\"\n class=\"me-2 me-sm-3\">\n <i class=\"fa fa-lock\" aria-hidden=\"true\"></i>\n </li>\n </ng-template>\n <ng-template [ngIf]=\"currentUser && user.id !== currentUser.id\">\n <li ngbTooltip=\"Message\"\n *rbacAllow=\"chatPermission\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"['/message']\"\n [fragment]=\"user.slug\">\n <i class=\"fa fa-comments cta1-icon\" aria-hidden=\"true\"></i>\n </li>\n </ng-template>\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'Pages.Admin.Users.Edit'\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[routers.usersDetails + user.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n *rbacAllow=\"'Pages.Admin.Users.Delete'\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(user)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"totalRecords === 0 && totalRecordsUnFilter !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\">\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"totalRecords !== 0\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n </div>\n</div>\n<div *ngIf=\"!loading && totalRecordsUnFilter === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Users.NoDataMessage' | transloco\"> </pw-no-data>\n</div>\n<!-- password validation modal for delete user -->\n<pw-password-validation #passwordValidationModalForUserDelete\n (successEvent)=\"deleteUser($event)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p>{{ 'User.Account.Message.ActionCanNotUndone' | transloco }}</p>\n <p>{{ 'User.Account.Message.ConfirmPassword' | transloco }}</p>\n </div>\n </div>\n</pw-password-validation>\n<!-- password validation modal for impersonate -->\n<pw-password-validation #passwordValidationModalForImpersonate\n (successEvent)=\"onUserImpersonation($event)\">\n</pw-password-validation>\n<!-- password validation modal for remove2fa -->\n<pw-password-validation #passwordValidationModalForRemove2fa\n (successEvent)=\"remove2fa($event)\">\n</pw-password-validation>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.search-input input{width:100%}.w-150{width:150px}@media (min-width: 767px){.table-responsive td,.table-responsive th{font-size:11px!important}}.hexa-warning{font-size:18px;vertical-align:middle}.alpha-beta{font-size:14px}\n"] }]
306
312
  }], ctorParameters: () => [{ type: i1.AdminService }, { type: i2.CustomToastService }, { type: i2.ProductService }, { type: i0.Injector }, { type: i2.AuthService }, { type: i0.ChangeDetectorRef }, { type: i2.WindowService }], propDecorators: { passwordValidationModalForUserDelete: [{
307
313
  type: ViewChild,
308
314
  args: ['passwordValidationModalForUserDelete', { static: false }]
@@ -313,4 +319,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
313
319
  type: ViewChild,
314
320
  args: ['passwordValidationModalForRemove2fa', { static: false }]
315
321
  }] } });
316
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvdXNlcnMvdXNlcnMtbGlzdC91c2Vycy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy91c2Vycy91c2Vycy1saXN0L3VzZXJzLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUdSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUNILGNBQWMsRUFDZCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxrQkFBa0IsRUFDckIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTzFDLE1BQU0sT0FBTyxpQkFDVCxTQUFRLGdCQUFnQjtJQTJFeEIsWUFDWSxZQUEwQixFQUMxQixP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RSxDQUFDO29CQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO29CQUNqRCxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxVQUFVLENBQUMsRUFBVTtRQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsbUNBQW1DLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFNO1FBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdkYsQ0FBQzs4R0FuVlEsaUJBQWlCO2tHQUFqQixpQkFBaUIsNmdCQ2xDOUIsZ3lTQWtPQTs7MkZEaE1hLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDSSxvQkFBb0I7NFBBUzlCLG9DQUFvQztzQkFEbkMsU0FBUzt1QkFBQyxzQ0FBc0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSXBFLHFDQUFxQztzQkFEcEMsU0FBUzt1QkFBQyx1Q0FBdUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSXJFLG1DQUFtQztzQkFEbEMsU0FBUzt1QkFBQyxxQ0FBcUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEluamVjdG9yLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGF6eUxvYWRFdmVudCwgU2VsZWN0SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBST1VURVJTIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3JvdXRlcnMvcm91dGVycyc7XG5pbXBvcnQgeyBQQUdFX1NJWkUgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzd29yZFZhbGlkYXRpb25Db21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2Uvc2hhcmVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgUGFnaW5nIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgICBQcm9kdWN0U2VydmljZSxcbiAgICBXaW5kb3dTZXJ2aWNlLFxuICAgIFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgIEF1dGhTZXJ2aWNlLFxuICAgIEN1c3RvbVRvYXN0U2VydmljZVxufSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctYWRtaW4tdXNlci1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdXNlcnMtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdXNlcnMtbGlzdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJMaXN0Q29tcG9uZW50XG4gICAgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZFxue1xuICAgIEBWaWV3Q2hpbGQoJ3Bhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9yVXNlckRlbGV0ZScsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHBhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9yVXNlckRlbGV0ZTogUGFzc3dvcmRWYWxpZGF0aW9uQ29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZCgncGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JJbXBlcnNvbmF0ZScsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHBhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9ySW1wZXJzb25hdGU6IFBhc3N3b3JkVmFsaWRhdGlvbkNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ3Bhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9yUmVtb3ZlMmZhJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JSZW1vdmUyZmE6IFBhc3N3b3JkVmFsaWRhdGlvbkNvbXBvbmVudDtcblxuICAgIHRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgdXNlcnM6IFVzZXJbXSA9IFtdO1xuXG4gICAgYWxsUm9sZXM6IFNlbGVjdEl0ZW1bXTtcblxuICAgIHNlYXJjaFRleHQgPSAnJztcblxuICAgIGFsbFVzZXJzOiBVc2VyW10gPSBbXTtcblxuICAgIHByb2R1Y3RMaXN0OiBTZWxlY3RJdGVtW107XG5cbiAgICBsb2FkaW5nID0gdHJ1ZTtcblxuICAgIHNlYXJjaE9wdGlvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnUm9sZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3JvbGUnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnUHJvZHVjdCcsXG4gICAgICAgICAgICB2YWx1ZTogJ3Byb2R1Y3QnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnRmVhdHVyZSBLZXknLFxuICAgICAgICAgICAgdmFsdWU6ICdmZWF0dXJlX2tleSdcbiAgICAgICAgfVxuICAgIF07XG5cbiAgICBzZWFyY2hEYXRhU291cmNlID0gW107XG5cbiAgICBzZWxlY3RlZE9wdGlvbjogU2VsZWN0SXRlbTtcblxuICAgIGN1cnJlbnRVc2VyOiBVc2VyO1xuXG4gICAgcHJpdmF0ZSBwYWdlID0gMTtcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIG1hc3RlclByb2R1Y3RJZCA9IHRoaXMuYXBwQ29uZmlnLm1hc3Rlcl9zdWJzY3JpcHRpb24ucHJvZHVjdF9pZDtcblxuICAgIGZlYXR1cmVLZXlzTGlzdCA9IFtdO1xuXG4gICAgcHJpdmF0ZSBmaWx0ZXJCeVByb2R1Y3RzID0gW107XG5cbiAgICBwcml2YXRlIGZpbHRlckJ5Um9sZXMgPSBbXTtcblxuICAgIGZpbHRlckJ5RmVhdHVyZUtleXMgPSBbXTtcblxuICAgIHByaXZhdGUgdXNlclRvRGVsZXRlOiBVc2VyO1xuXG4gICAgY2hhdFBlcm1pc3Npb246IHN0cmluZztcblxuICAgIHVzZXJUb0ltcGVyc29uYXRlOiBVc2VyO1xuXG4gICAgcmVtb3ZlMmZhVXNlcklkOiBudW1iZXI7XG5cbiAgICBmaWx0ZXJTb3VyY2U6IGFueTtcblxuICAgIGNyaXRlcmlhID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhZG1pblNlcnZpY2U6IEFkbWluU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0b2FzdGVyOiBDdXN0b21Ub2FzdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcHJvZHVjdFNlcnZpY2U6IFByb2R1Y3RTZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgd2luZG93U2VydmljZTogV2luZG93U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgIHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24/LmlkO1xuICAgICAgICB0aGlzLmNoYXRQZXJtaXNzaW9uID0gYCR7UGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRQcm9kdWN0LnBlcm1pc3Npb259LiR7UGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRQcm9kdWN0LmZlYXR1cmVfa2V5fWA7XG4gICAgICAgIHRoaXMuZ2V0Um9sZXMoKTtcbiAgICAgICAgdGhpcy5nZXRQcm9kdWN0cygpO1xuXG4gICAgICAgIHRoaXMudXNlclN0b3JlKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSByZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0VGFibGVTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSQoJ3VzZXItbGlzdC1zdGF0ZScpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSByZXM/LnNlYXJjaFRleHQgfHwgJyc7XG4gICAgICAgICAgICAgICAgaWYgKHJlcz8uc2VsZWN0ZWRPcHRpb24/LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSByZXM/LnNlbGVjdGVkT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclNvdXJjZSA9IFt0aGlzLnNlbGVjdGVkT3B0aW9uPy52YWx1ZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXM/LnNlYXJjaERhdGFTb3VyY2U/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaERhdGFTb3VyY2UgPSByZXM/LnNlYXJjaERhdGFTb3VyY2UgfHwgW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXM/LnNlbGVjdGVkT3B0aW9uPy52YWx1ZSA9PT0gJ2ZlYXR1cmVfa2V5Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyaXRlcmlhID0gcmVzPy5maWx0ZXJCeUZlYXR1cmVLZXlzIHx8IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzPy5zZWxlY3RlZE9wdGlvbj8udmFsdWUgPT09ICdwcm9kdWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyaXRlcmlhID0gcmVzPy5maWx0ZXJCeVByb2R1Y3RzIHx8IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzPy5zZWxlY3RlZE9wdGlvbj8udmFsdWUgPT09ICdyb2xlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyaXRlcmlhID0gcmVzPy5maWx0ZXJCeVJvbGVzIHx8IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckJ5RmVhdHVyZUtleXMgPSByZXM/LmZpbHRlckJ5RmVhdHVyZUtleXMgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJCeVByb2R1Y3RzID0gcmVzPy5maWx0ZXJCeVByb2R1Y3RzIHx8IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyQnlSb2xlcyA9IHJlcz8uZmlsdGVyQnlSb2xlcyB8fCBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgb25MYXp5TG9hZChldmVudDogTGF6eUxvYWRFdmVudCkge1xuICAgICAgICBjb25zdCBwYWdlRGV0YWlscyA9IEhlbHBlclNlcnZpY2Uub25UYWJsZUxhenlMb2FkKGV2ZW50KTtcbiAgICAgICAgdGhpcy5wYWdlID0gcGFnZURldGFpbHMucGFnZTtcbiAgICAgICAgdGhpcy5nZXRVc2Vycyh7XG4gICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRSxcbiAgICAgICAgICAgIG9yZGVyX2J5OiBwYWdlRGV0YWlscy5zb3J0RmllbGQsXG4gICAgICAgICAgICBvcmRlcl9kaXJlY3Rpb246IHBhZ2VEZXRhaWxzLnNvcnRPcmRlcixcbiAgICAgICAgICAgIHNlYXJjaDogdGhpcy5zZWFyY2hUZXh0XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um9sZXMoKSB7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLmdldFJvbGVzKHt9LCB0aGlzLnN1YnNjcmlwdGlvbklkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxSb2xlcyA9IHJlc3BvbnNlLnJvbGVzLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS5pZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9kdWN0cygpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZVxuICAgICAgICAgICAgLmdldFByb2R1Y3RzKHtcbiAgICAgICAgICAgICAgICBtYXN0ZXJfcHJvZHVjdF9pZDogdGhpcy5tYXN0ZXJQcm9kdWN0SWQsXG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLnN1YnNjcmlwdGlvbklkXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcC5wcm9kdWN0cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RMaXN0ID0gcmVzcC5wcm9kdWN0cy5tYXAoZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzTGlzdCA9IHJlc3AucHJvZHVjdHMubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWxlbWVudC5mZWF0dXJlX2tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWxlbWVudC5mZWF0dXJlX2tleVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0TGlzdC51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnTm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVzZXJzKHBhZ2luZzogUGFnaW5nKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIHByb2R1Y3RfaWRzOiB0aGlzLmZpbHRlckJ5UHJvZHVjdHMuam9pbigpIHx8ICcnLFxuICAgICAgICAgICAgcm9sZV9pZHM6IHRoaXMuZmlsdGVyQnlSb2xlcy5qb2luKCkgfHwgJycsXG4gICAgICAgICAgICBmZWF0dXJlX2tleXM6IHRoaXMuZmlsdGVyQnlGZWF0dXJlS2V5cy5qb2luKCkgfHwgJycsXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuc3Vic2NyaXB0aW9uSWRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UuZ2V0VXNlcnMocGFnaW5nLCBwYXJhbXMpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVzZXJzID0gcmVzcG9uc2UudXNlcnM7XG4gICAgICAgICAgICB0aGlzLmFsbFVzZXJzID0gWy4uLnRoaXMudXNlcnNdO1xuICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSByZXNwb25zZS5vYmplY3RfY291bnQ7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25TZWFyY2hPcHRpb25DaGFuZ2UoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuY3JpdGVyaWEgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMuc2VhcmNoT3B0aW9ucy5maW5kKHggPT4geC52YWx1ZSA9PT0gJGV2ZW50LnZhbHVlWzBdKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi52YWx1ZSA9PT0gJ3JvbGUnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGFTb3VyY2UgPSB0aGlzLmFsbFJvbGVzO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi52YWx1ZSA9PT0gJ3Byb2R1Y3QnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGFTb3VyY2UgPSB0aGlzLnByb2R1Y3RMaXN0O1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi52YWx1ZSA9PT0gJ2ZlYXR1cmVfa2V5Jykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hEYXRhU291cmNlID0gdGhpcy5mZWF0dXJlS2V5c0xpc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJGaWx0ZXJzKCk7XG4gICAgICAgICAgICB0aGlzLmdldFVzZXJzKHtcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJGaWx0ZXJzKCkge1xuICAgICAgICB0aGlzLmZpbHRlckJ5UHJvZHVjdHMgPSBbXTtcbiAgICAgICAgdGhpcy5maWx0ZXJCeUZlYXR1cmVLZXlzID0gW107XG4gICAgICAgIHRoaXMuZmlsdGVyQnlSb2xlcyA9IFtdO1xuICAgIH1cblxuICAgIG9uU2VhcmNoQ3JpdGVyaWEoZXZ0KSB7XG4gICAgICAgIHRoaXMuY2xlYXJGaWx0ZXJzKCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9uLnZhbHVlID09PSAncm9sZScpIHtcbiAgICAgICAgICAgIHRoaXMub25Sb2xlQ2hhbmdlKGV2dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbi52YWx1ZSA9PT0gJ3Byb2R1Y3QnKSB7XG4gICAgICAgICAgICB0aGlzLm9uUHJvZHVjdENoYW5nZShldnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24udmFsdWUgPT09ICdmZWF0dXJlX2tleScpIHtcbiAgICAgICAgICAgIHRoaXMub25GZWF0dXJlS2V5Q2hhbmdlKGV2dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUm9sZUNoYW5nZShldmVudCkge1xuICAgICAgICB0aGlzLmNsZWFyRmlsdGVycygpO1xuICAgICAgICB0aGlzLmZpbHRlckJ5Um9sZXMgPSBldmVudC52YWx1ZTtcbiAgICAgICAgdGhpcy5nZXRVc2Vycyh7XG4gICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblByb2R1Y3RDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5jbGVhckZpbHRlcnMoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJCeVByb2R1Y3RzID0gZXZlbnQudmFsdWU7XG4gICAgICAgIHRoaXMuZ2V0VXNlcnMoe1xuICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkZlYXR1cmVLZXlDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5jbGVhckZpbHRlcnMoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJCeUZlYXR1cmVLZXlzID0gZXZlbnQudmFsdWU7XG4gICAgICAgIHRoaXMuZ2V0VXNlcnMoe1xuICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25EZWxldGUodXNlcjogVXNlcikge1xuICAgICAgICB0aGlzLnVzZXJUb0RlbGV0ZSA9IHVzZXI7XG4gICAgICAgIHRoaXMucGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JVc2VyRGVsZXRlLm9wZW4oKTtcbiAgICB9XG5cbiAgICBkZWxldGVVc2VyKF9ldmVudCkge1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLmRlbGV0ZVVzZXIodGhpcy51c2VyVG9EZWxldGUuaWQsIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJzID0gdGhpcy51c2Vycy5maWx0ZXIoeCA9PiB4LmlkICE9PSB0aGlzLnVzZXJUb0RlbGV0ZS5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0FkbWluLlVzZXJzLkRlbGV0ZWRNZXNzYWdlJykpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRVc2Vycyh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJUb0RlbGV0ZSA9IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkltcGVyc29uYXRlKHVzZXI6IFVzZXIpIHtcbiAgICAgICAgdGhpcy51c2VyVG9JbXBlcnNvbmF0ZSA9IHVzZXI7XG4gICAgICAgIHRoaXMucGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JJbXBlcnNvbmF0ZS5vcGVuKCk7XG4gICAgfVxuXG4gICAgb25Vc2VySW1wZXJzb25hdGlvbihfZXZlbnQpIHtcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5wbGF0Zm9ybSQuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IHJlcztcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuaW1wZXJzb25hdGVVc2VyKHtcbiAgICAgICAgICAgICAgICAgICAgZW1haWw6IHRoaXMudXNlclRvSW1wZXJzb25hdGUuZW1haWwsXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIHBob25lZ2FwOiBwbGF0Zm9ybSAhPT0gJ2Jyb3dzZXInXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoYFlvdSdyZSBub3cgYmVpbmcgbG9nZ2VkIGluIGFzIGFub3RoZXIgdXNlci4uLmApO1xuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciAyIHNlYyBiZWZvcmUgcmVkaXJlY3RpbmcgdXNlciB0byBob21lIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpbmRvd1NlcnZpY2UucmVwbGFjZVVybCgnL2hvbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBjb25zdCB2YWwgPSB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICAgICAgICBmaWx0ZXJCeUZlYXR1cmVLZXlzOiB0aGlzLmZpbHRlckJ5RmVhdHVyZUtleXMsXG4gICAgICAgICAgICBmaWx0ZXJCeVJvbGVzOiB0aGlzLmZpbHRlckJ5Um9sZXMsXG4gICAgICAgICAgICBmaWx0ZXJCeVByb2R1Y3RzOiB0aGlzLmZpbHRlckJ5UHJvZHVjdHMsXG4gICAgICAgICAgICBzZWxlY3RlZE9wdGlvbjogdGhpcy5zZWxlY3RlZE9wdGlvbixcbiAgICAgICAgICAgIHNlYXJjaERhdGFTb3VyY2U6IHRoaXMuc2VhcmNoRGF0YVNvdXJjZVxuICAgICAgICB9O1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXNlci1saXN0LXN0YXRlJywgSlNPTi5zdHJpbmdpZnkodmFsKSk7XG4gICAgICAgIGNvbnN0IG5vdGlmaWVyID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUodGFrZVVudGlsKG5vdGlmaWVyKSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LnVybEFmdGVyUmVkaXJlY3RzLmluY2x1ZGVzKCcvdXNlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0kKCd1c2VyLWxpc3Qtc3RhdGUnKTtcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIubmV4dCgnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBkaXNhYmxlMmZhKGlkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUyZmFVc2VySWQgPSBpZDtcbiAgICAgICAgdGhpcy5wYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclJlbW92ZTJmYS5vcGVuKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlMmZhKF9ldmVudCkge1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZS5yZW1vdmUyZmEodGhpcy5yZW1vdmUyZmFVc2VySWQsIHRoaXMuc3Vic2NyaXB0aW9uSWQpLnN1YnNjcmliZSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBjcmVhdGUtdXNlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG15LTNcIj5cbiAgICA8aDIgY2xhc3M9XCJjYXJkLXRpdGxlIHAtMCBmbG9hdC1zdGFydFwiPlVzZXJzPC9oMj5cbiAgICA8YSBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSBmbG9hdC1lbmRcIlxuICAgICAgaWQ9XCJidG4tY3JlYXRlXCJcbiAgICAgICpyYmFjQWxsb3c9XCInU3VwZXJBZG1pbidcIlxuICAgICAgW3JvdXRlckxpbmtdPVwiW3JvdXRlcnMudXNlcnNEZXRhaWxzICsgJ2FkZCddXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBDcmVhdGUgVXNlclxuICAgIDwvYT5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJwcmltZW5nLWRhdGF0YWJsZS1jb250YWluZXIgbXQtMFwiPlxuICA8ZGl2IGNsYXNzPVwidXNlci1tYW5hZ2VtZW50LXRhYmxlIHRhYmxlLXJlc3BvbnNpdmVcIj5cbiAgICA8cC10YWJsZSAjZHRcbiAgICAgIFt2YWx1ZV09XCJ1c2Vyc1wiXG4gICAgICBbcGFnaW5hdG9yXT1cInRydWVcIlxuICAgICAgW2xhenldPVwidHJ1ZVwiXG4gICAgICBbcm93c109XCJQQUdFX1NJWkVcIlxuICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICBbZmlsdGVyRGVsYXldPVwiMTAwMFwiXG4gICAgICAob25MYXp5TG9hZCk9XCJvbkxhenlMb2FkKCRldmVudClcIlxuICAgICAgW2N1c3RvbVNvcnRdPVwidHJ1ZVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1maWx0ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cbiAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtvcHRpb25zXT1cInNlYXJjaE9wdGlvbnNcIlxuICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25TZWFyY2hPcHRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIHVzZXJzIGJ5IHJvbGUsIHByb2R1Y3QsIG9yIGZlYXR1cmVcIlxuICAgICAgICAgICAgICBbc2VsZWN0aW9uTGltaXRdPVwiMVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyU291cmNlXCJcbiAgICAgICAgICAgICAgW3Nob3dUb2dnbGVBbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtzaG93SGVhZGVyXT1cInRydWVcIlxuICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIj5cbiAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIlxuICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZE9wdGlvblwiPlxuICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgW29wdGlvbnNdPVwic2VhcmNoRGF0YVNvdXJjZVwiXG4gICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvblNlYXJjaENyaXRlcmlhKCRldmVudClcIlxuICAgICAgICAgICAgICBbc2hvd1RvZ2dsZUFsbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjcml0ZXJpYVwiXG4gICAgICAgICAgICAgIFtzaG93SGVhZGVyXT1cInRydWVcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCB7eyBzZWxlY3RlZE9wdGlvbi52YWx1ZSB9fXNcIlxuICAgICAgICAgICAgICBtYXhTZWxlY3RlZExhYmVscz1cIjJcIlxuICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIj5cbiAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmRcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIG10LTIgbWUtMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgc2l6ZT1cIjUwXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggVXNlci4uLlwiXG4gICAgICAgICAgICAgIGRhdGEtY3k9XCJ1c2VyLXNlYXJjaFwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJkdC5maWx0ZXJHbG9iYWwoJGV2ZW50LnRhcmdldC52YWx1ZSwgJ2NvbnRhaW5zJylcIlxuICAgICAgICAgICAgICBjbGFzcz1cIndkLTkwXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgICBwU29ydGFibGVDb2x1bW49XCJpZFwiPlxuICAgICAgICAgICAge3sgJ0FkbWluLlVzZXJzLklkJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJpZFwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwiZmlyc3RfbmFtZVwiPlxuICAgICAgICAgICAge3sgJ0xhYmVsLkZpcnN0TmFtZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwiZmlyc3RfbmFtZVwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwibGFzdF9uYW1lXCI+XG4gICAgICAgICAgICB7eyAnTGFiZWwuTGFzdE5hbWUnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cImxhc3RfbmFtZVwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwiZW1haWxcIj5cbiAgICAgICAgICAgIHt7ICdMYWJlbC5FbWFpbCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwiZW1haWxcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cInNsdWdcIj5cbiAgICAgICAgICAgIHt7ICdBZG1pbi5Vc2Vycy5TbHVnJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJzbHVnXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgICBwU29ydGFibGVDb2x1bW49XCJlbmNyeXB0ZWRfcGFzc3dvcmRcIj5cbiAgICAgICAgICAgIHt7ICdBZG1pbi5Vc2Vycy5FbWFpbENvbmZpcm0nIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cImVuY3J5cHRlZF9wYXNzd29yZFwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICA8L3RoPlxuXG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgICBwU29ydGFibGVDb2x1bW49XCJzZXNzaW9uc19sYXN0X21vbnRoXCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5TZXNzaW9uc1RvdGFsTGFzdE1vbnRoJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJzZXNzaW9uc19sYXN0X21vbnRoXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgICBwU29ydGFibGVDb2x1bW49XCJsYXN0X3NpZ25faW5fYXRcIj5cbiAgICAgICAgICAgIHt7ICdBZG1pbi5Vc2Vycy5MYXN0TG9naW4nIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cImxhc3Rfc2lnbl9pbl9hdFwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwic2lnbmVkX3VwX2F0XCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVXNlcnMuUmVnaXN0ZXJlZE9uJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJzaWduZWRfdXBfYXRcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9ucy1saXN0LWZvdXJcIj5cbiAgICAgICAgICAgIHt7ICdMYWJlbC5BY3Rpb25zJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgICAgICBsZXQtdXNlcj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJpZFwiPiB7eyB1c2VyLmlkIH19PC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiRmlyc3QgTmFtZVwiPjxhIFtyb3V0ZXJMaW5rXT1cIlsnL21lbWJlcnMnLCB1c2VyLnNsdWddXCI+e3sgdXNlci5maXJzdF9uYW1lIH19PC9hPjwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkxhc3QgTmFtZVwiPnt7IHVzZXIubGFzdF9uYW1lIH19XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInVzZXI/LmFscGhhXCJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5Vc2Vycy5Ub29sdGlwLkFscGhhSWNvbid8dHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtcmVndWxhciBmYS1zcXVhcmUtYSBhbHBoYS1iZXRhIHRleHQtd2FybmluZ1wiPjwvaT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwidXNlcj8uYmV0YVwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uVXNlcnMuVG9vbHRpcC5CZXRhSWNvbid8dHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtcmVndWxhciBmYS1zcXVhcmUtYiBhbHBoYS1iZXRhIHRleHQtcHJpbWFyeVwiID48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiRW1haWxcIj57eyB1c2VyLmVtYWlsIH19PC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiU2x1Z1wiPnt7IHVzZXIuc2x1ZyB9fTwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkVtYWlsIENvbmZpcm1cIj5cbiAgICAgICAgICAgIDxzcGFuIFthcHBEeW5hbWljQmFkZ2VdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0FycmF5OiBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiB1c2VyPy5oYXNfcGFzc3dvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgY29sb3I9XCJzdWNjZXNzLWRhbmdlclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyB1c2VyPy5oYXNfcGFzc3dvcmQgPyAnWWVzJyA6ICdObycgfX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUy9tICNcIj5cbiAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0LWRhbmdlciBmdy1ib2xkJzogdXNlcj8uc2Vzc2lvbnNfbGFzdF9tb250aCA8IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPnt7IHVzZXI/LnNlc3Npb25zX2xhc3RfbW9udGggfX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiTGFzdCBMb2dpblwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ1c2VyPy5jdXJyZW50X3NpZ25faW5fYXQ7ZWxzZSBsYXN0U2lnbmluXCI+XG4gICAgICAgICAgICAgIHt7IHVzZXIuY3VycmVudF9zaWduX2luX2F0ICB8IGRhdGVGb3JtYXQgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFzdFNpZ25pbj5cbiAgICAgICAgICAgICAge3sgdXNlci5sYXN0X3NpZ25faW5fYXQgfCBkYXRlRm9ybWF0IH19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlJlZ2lzdGVyZWQgT25cIj57eyB1c2VyLnNpZ25lZF91cF9hdCB8IGRhdGVGb3JtYXQgfX08L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJBY3Rpb25cIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbGlzdC1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJJbXBlcnNvbmF0ZSB0aGlzIHVzZXJcIlxuICAgICAgICAgICAgICAgICpyYmFjQWxsb3c9XCInUGFnZXMuQWxwaGEnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tM1wiPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtcGVvcGxlLWFycm93c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSW1wZXJzb25hdGUodXNlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwidXNlcj8uZW5hYmxlX3R3b19mYWN0b3JfYXV0aGVudGljYXRvclwiPlxuICAgICAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiRGlzYWJsZSAyZmFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRpc2FibGUyZmEodXNlcj8uaWQpXCJcbiAgICAgICAgICAgICAgICAgICpyYmFjQWxsb3c9XCInUGFnZXMuQWxwaGEnXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMiBtZS1zbS0zXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWxvY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImN1cnJlbnRVc2VyICYmIHVzZXIuaWQgIT09IGN1cnJlbnRVc2VyLmlkXCI+XG4gICAgICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICpyYmFjQWxsb3c9XCJjaGF0UGVybWlzc2lvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tM1wiXG4gICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9tZXNzYWdlJ11cIlxuICAgICAgICAgICAgICAgICAgW2ZyYWdtZW50XT1cInVzZXIuc2x1Z1wiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jb21tZW50cyBjdGExLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJFZGl0XCJcbiAgICAgICAgICAgICAgICAqcmJhY0FsbG93PVwiJ1BhZ2VzLkFkbWluLlVzZXJzLkVkaXQnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tM1wiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiW3JvdXRlcnMudXNlcnNEZXRhaWxzICsgdXNlci5pZF1cIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIkRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidQYWdlcy5BZG1pbi5Vc2Vycy5EZWxldGUnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tM1wiPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLXRyYXNoIGRlbGV0ZS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZSh1c2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3AtdGFibGU+XG4gICAgPHNwYW4gY2xhc3M9XCJ0b3RhbC1yZWNvcmRzLWNvdW50XCI+e3sgJ0xhYmVsLlRvdGFsJyB8IHRyYW5zbG9jbyB9fToge3sgdG90YWxSZWNvcmRzIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSBwYXNzd29yZCB2YWxpZGF0aW9uIG1vZGFsIGZvciBkZWxldGUgdXNlciAtLT5cbjxwdy1wYXNzd29yZC12YWxpZGF0aW9uICNwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclVzZXJEZWxldGVcbiAgKHN1Y2Nlc3NFdmVudCk9XCJkZWxldGVVc2VyKCRldmVudClcIj5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgIDxwPnt7ICdVc2VyLkFjY291bnQuTWVzc2FnZS5BY3Rpb25DYW5Ob3RVbmRvbmUnIHwgdHJhbnNsb2NvIH19PC9wPlxuICAgICAgPHA+e3sgJ1VzZXIuQWNjb3VudC5NZXNzYWdlLkNvbmZpcm1QYXNzd29yZCcgfCB0cmFuc2xvY28gfX08L3A+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9wdy1wYXNzd29yZC12YWxpZGF0aW9uPlxuPCEtLSBwYXNzd29yZCB2YWxpZGF0aW9uIG1vZGFsIGZvciBpbXBlcnNvbmF0ZSAtLT5cbjxwdy1wYXNzd29yZC12YWxpZGF0aW9uICNwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvckltcGVyc29uYXRlXG4gIChzdWNjZXNzRXZlbnQpPVwib25Vc2VySW1wZXJzb25hdGlvbigkZXZlbnQpXCI+XG48L3B3LXBhc3N3b3JkLXZhbGlkYXRpb24+XG48IS0tIHBhc3N3b3JkIHZhbGlkYXRpb24gbW9kYWwgZm9yIHJlbW92ZTJmYSAtLT5cbjxwdy1wYXNzd29yZC12YWxpZGF0aW9uICNwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclJlbW92ZTJmYVxuICAoc3VjY2Vzc0V2ZW50KT1cInJlbW92ZTJmYSgkZXZlbnQpXCI+XG48L3B3LXBhc3N3b3JkLXZhbGlkYXRpb24+XG4iXX0=
322
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvdXNlcnMvdXNlcnMtbGlzdC91c2Vycy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy91c2Vycy91c2Vycy1saXN0L3VzZXJzLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUdSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUNILGNBQWMsRUFDZCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxrQkFBa0IsRUFDckIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU8xQyxNQUFNLE9BQU8saUJBQ1QsU0FBUSxnQkFBZ0I7SUFtRHhCLFlBQ1ksWUFBMEIsRUFDMUIs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Q29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEluamVjdG9yLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGF6eUxvYWRFdmVudCwgU2VsZWN0SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBST1VURVJTIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3JvdXRlcnMvcm91dGVycyc7XG5pbXBvcnQgeyBQQUdFX1NJWkUgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzd29yZFZhbGlkYXRpb25Db21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2Uvc2hhcmVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgUGFnaW5nIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgICBQcm9kdWN0U2VydmljZSxcbiAgICBXaW5kb3dTZXJ2aWNlLFxuICAgIFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgIEF1dGhTZXJ2aWNlLFxuICAgIEN1c3RvbVRvYXN0U2VydmljZVxufSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctYWRtaW4tdXNlci1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdXNlcnMtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdXNlcnMtbGlzdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJMaXN0Q29tcG9uZW50XG4gICAgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZFxue1xuICAgIEBWaWV3Q2hpbGQoJ3Bhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9yVXNlckRlbGV0ZScsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHBhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9yVXNlckRlbGV0ZTogUGFzc3dvcmRWYWxpZGF0aW9uQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ3Bhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9ySW1wZXJzb25hdGUnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvckltcGVyc29uYXRlOiBQYXNzd29yZFZhbGlkYXRpb25Db21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgncGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JSZW1vdmUyZmEnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclJlbW92ZTJmYTogUGFzc3dvcmRWYWxpZGF0aW9uQ29tcG9uZW50O1xuICAgIHRvdGFsUmVjb3JkczogbnVtYmVyO1xuICAgIHVzZXJzOiBVc2VyW10gPSBbXTtcbiAgICBhbGxSb2xlczogU2VsZWN0SXRlbVtdO1xuICAgIHNlYXJjaFRleHQgPSAnJztcbiAgICBhbGxVc2VyczogVXNlcltdID0gW107XG4gICAgcHJvZHVjdExpc3Q6IFNlbGVjdEl0ZW1bXTtcbiAgICBsb2FkaW5nID0gdHJ1ZTtcbiAgICBpc0xvYWRlZCA9IGZhbHNlO1xuICAgIHNlYXJjaE9wdGlvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnUm9sZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3JvbGUnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnUHJvZHVjdCcsXG4gICAgICAgICAgICB2YWx1ZTogJ3Byb2R1Y3QnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnRmVhdHVyZSBLZXknLFxuICAgICAgICAgICAgdmFsdWU6ICdmZWF0dXJlX2tleSdcbiAgICAgICAgfVxuICAgIF07XG4gICAgc2VhcmNoRGF0YVNvdXJjZSA9IFtdO1xuICAgIHNlbGVjdGVkT3B0aW9uOiBTZWxlY3RJdGVtO1xuICAgIGN1cnJlbnRVc2VyOiBVc2VyO1xuICAgIHByaXZhdGUgcGFnZSA9IDE7XG4gICAgcm91dGVycyA9IFJPVVRFUlM7XG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcbiAgICBtYXN0ZXJQcm9kdWN0SWQgPSB0aGlzLmFwcENvbmZpZy5tYXN0ZXJfc3Vic2NyaXB0aW9uLnByb2R1Y3RfaWQ7XG4gICAgZmVhdHVyZUtleXNMaXN0ID0gW107XG4gICAgcHJpdmF0ZSBmaWx0ZXJCeVByb2R1Y3RzID0gW107XG5cbiAgICB0b3RhbFJlY29yZHNVbkZpbHRlciA9IDA7XG5cbiAgICBwcml2YXRlIGZpbHRlckJ5Um9sZXMgPSBbXTtcbiAgICBmaWx0ZXJCeUZlYXR1cmVLZXlzID0gW107XG4gICAgcHJpdmF0ZSB1c2VyVG9EZWxldGU6IFVzZXI7XG4gICAgY2hhdFBlcm1pc3Npb246IHN0cmluZztcbiAgICB1c2VyVG9JbXBlcnNvbmF0ZTogVXNlcjtcbiAgICByZW1vdmUyZmFVc2VySWQ6IG51bWJlcjtcbiAgICBmaWx0ZXJTb3VyY2U6IGFueTtcbiAgICBjcml0ZXJpYSA9IFtdO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGFkbWluU2VydmljZTogQWRtaW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRvYXN0ZXI6IEN1c3RvbVRvYXN0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwcm9kdWN0U2VydmljZTogUHJvZHVjdFNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSB3aW5kb3dTZXJ2aWNlOiBXaW5kb3dTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24/LmlkO1xuICAgICAgICB0aGlzLmNoYXRQZXJtaXNzaW9uID0gYCR7UGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRQcm9kdWN0LnBlcm1pc3Npb259LiR7UGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRQcm9kdWN0LmZlYXR1cmVfa2V5fWA7XG4gICAgICAgIHRoaXMuZ2V0Um9sZXMoKTtcbiAgICAgICAgdGhpcy5nZXRQcm9kdWN0cygpO1xuICAgICAgICB0aGlzLnVzZXJTdG9yZSgpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRUYWJsZVN0YXRlKCkge1xuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtJCgndXNlci1saXN0LXN0YXRlJykuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gSlNPTi5wYXJzZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHJlcz8uc2VhcmNoVGV4dCB8fCAnJztcbiAgICAgICAgICAgICAgICBpZiAocmVzPy5zZWxlY3RlZE9wdGlvbj8udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHJlcz8uc2VsZWN0ZWRPcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyU291cmNlID0gW3RoaXMuc2VsZWN0ZWRPcHRpb24/LnZhbHVlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcz8uc2VhcmNoRGF0YVNvdXJjZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoRGF0YVNvdXJjZSA9IHJlcz8uc2VhcmNoRGF0YVNvdXJjZSB8fCBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcz8uc2VsZWN0ZWRPcHRpb24/LnZhbHVlID09PSAnZmVhdHVyZV9rZXknKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JpdGVyaWEgPSByZXM/LmZpbHRlckJ5RmVhdHVyZUtleXMgfHwgW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXM/LnNlbGVjdGVkT3B0aW9uPy52YWx1ZSA9PT0gJ3Byb2R1Y3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JpdGVyaWEgPSByZXM/LmZpbHRlckJ5UHJvZHVjdHMgfHwgW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXM/LnNlbGVjdGVkT3B0aW9uPy52YWx1ZSA9PT0gJ3JvbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JpdGVyaWEgPSByZXM/LmZpbHRlckJ5Um9sZXMgfHwgW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyQnlGZWF0dXJlS2V5cyA9IHJlcz8uZmlsdGVyQnlGZWF0dXJlS2V5cyB8fCBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckJ5UHJvZHVjdHMgPSByZXM/LmZpbHRlckJ5UHJvZHVjdHMgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJCeVJvbGVzID0gcmVzPy5maWx0ZXJCeVJvbGVzIHx8IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIG9uTGF6eUxvYWQoZXZlbnQ6IExhenlMb2FkRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcGFnZURldGFpbHMgPSBIZWxwZXJTZXJ2aWNlLm9uVGFibGVMYXp5TG9hZChldmVudCk7XG4gICAgICAgIHRoaXMucGFnZSA9IHBhZ2VEZXRhaWxzLnBhZ2U7XG4gICAgICAgIHRoaXMuZ2V0VXNlcnMoe1xuICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkUsXG4gICAgICAgICAgICBvcmRlcl9ieTogcGFnZURldGFpbHMuc29ydEZpZWxkLFxuICAgICAgICAgICAgb3JkZXJfZGlyZWN0aW9uOiBwYWdlRGV0YWlscy5zb3J0T3JkZXIsXG4gICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVGV4dFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBnZXRSb2xlcygpIHtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UuZ2V0Um9sZXMoe30sIHRoaXMuc3Vic2NyaXB0aW9uSWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFsbFJvbGVzID0gcmVzcG9uc2Uucm9sZXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLmlkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBnZXRQcm9kdWN0cygpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZVxuICAgICAgICAgICAgLmdldFByb2R1Y3RzKHtcbiAgICAgICAgICAgICAgICBtYXN0ZXJfcHJvZHVjdF9pZDogdGhpcy5tYXN0ZXJQcm9kdWN0SWQsXG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLnN1YnNjcmlwdGlvbklkXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcC5wcm9kdWN0cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RMaXN0ID0gcmVzcC5wcm9kdWN0cy5tYXAoZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzTGlzdCA9IHJlc3AucHJvZHVjdHMubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWxlbWVudC5mZWF0dXJlX2tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWxlbWVudC5mZWF0dXJlX2tleVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0TGlzdC51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnTm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBnZXRVc2VycyhwYWdpbmc6IFBhZ2luZykge1xuICAgICAgICB0aGlzLmlzTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIHByb2R1Y3RfaWRzOiB0aGlzLmZpbHRlckJ5UHJvZHVjdHMuam9pbigpIHx8ICcnLFxuICAgICAgICAgICAgcm9sZV9pZHM6IHRoaXMuZmlsdGVyQnlSb2xlcy5qb2luKCkgfHwgJycsXG4gICAgICAgICAgICBmZWF0dXJlX2tleXM6IHRoaXMuZmlsdGVyQnlGZWF0dXJlS2V5cy5qb2luKCkgfHwgJycsXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuc3Vic2NyaXB0aW9uSWRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UuZ2V0VXNlcnMocGFnaW5nLCBwYXJhbXMpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVzZXJzID0gcmVzcG9uc2UudXNlcnM7XG4gICAgICAgICAgICB0aGlzLmFsbFVzZXJzID0gWy4uLnRoaXMudXNlcnNdO1xuICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSByZXNwb25zZS5vYmplY3RfY291bnQ7XG4gICAgICAgICAgICB0aGlzLnRvdGFsUmVjb3Jkc1VuRmlsdGVyID0gcmVzcG9uc2U/LnVuZmlsdGVyZWRfY291bnQ7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25TZWFyY2hPcHRpb25DaGFuZ2UoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuY3JpdGVyaWEgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMuc2VhcmNoT3B0aW9ucy5maW5kKHggPT4geC52YWx1ZSA9PT0gJGV2ZW50LnZhbHVlWzBdKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi52YWx1ZSA9PT0gJ3JvbGUnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGFTb3VyY2UgPSB0aGlzLmFsbFJvbGVzO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi52YWx1ZSA9PT0gJ3Byb2R1Y3QnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGFTb3VyY2UgPSB0aGlzLnByb2R1Y3RMaXN0O1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi52YWx1ZSA9PT0gJ2ZlYXR1cmVfa2V5Jykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hEYXRhU291cmNlID0gdGhpcy5mZWF0dXJlS2V5c0xpc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJGaWx0ZXJzKCk7XG4gICAgICAgICAgICB0aGlzLmdldFVzZXJzKHtcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsZWFyRmlsdGVycygpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJCeVByb2R1Y3RzID0gW107XG4gICAgICAgIHRoaXMuZmlsdGVyQnlGZWF0dXJlS2V5cyA9IFtdO1xuICAgICAgICB0aGlzLmZpbHRlckJ5Um9sZXMgPSBbXTtcbiAgICB9XG4gICAgb25TZWFyY2hDcml0ZXJpYShldnQpIHtcbiAgICAgICAgdGhpcy5jbGVhckZpbHRlcnMoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24udmFsdWUgPT09ICdyb2xlJykge1xuICAgICAgICAgICAgdGhpcy5vblJvbGVDaGFuZ2UoZXZ0KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9uLnZhbHVlID09PSAncHJvZHVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMub25Qcm9kdWN0Q2hhbmdlKGV2dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbi52YWx1ZSA9PT0gJ2ZlYXR1cmVfa2V5Jykge1xuICAgICAgICAgICAgdGhpcy5vbkZlYXR1cmVLZXlDaGFuZ2UoZXZ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uUm9sZUNoYW5nZShldmVudCkge1xuICAgICAgICB0aGlzLmNsZWFyRmlsdGVycygpO1xuICAgICAgICB0aGlzLmZpbHRlckJ5Um9sZXMgPSBldmVudC52YWx1ZTtcbiAgICAgICAgdGhpcy5nZXRVc2Vycyh7XG4gICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25Qcm9kdWN0Q2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuY2xlYXJGaWx0ZXJzKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyQnlQcm9kdWN0cyA9IGV2ZW50LnZhbHVlO1xuICAgICAgICB0aGlzLmdldFVzZXJzKHtcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIG9uRmVhdHVyZUtleUNoYW5nZShldmVudCkge1xuICAgICAgICB0aGlzLmNsZWFyRmlsdGVycygpO1xuICAgICAgICB0aGlzLmZpbHRlckJ5RmVhdHVyZUtleXMgPSBldmVudC52YWx1ZTtcbiAgICAgICAgdGhpcy5nZXRVc2Vycyh7XG4gICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25EZWxldGUodXNlcjogVXNlcikge1xuICAgICAgICB0aGlzLnVzZXJUb0RlbGV0ZSA9IHVzZXI7XG4gICAgICAgIHRoaXMucGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JVc2VyRGVsZXRlLm9wZW4oKTtcbiAgICB9XG4gICAgZGVsZXRlVXNlcihfZXZlbnQpIHtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC5kZWxldGVVc2VyKHRoaXMudXNlclRvRGVsZXRlLmlkLCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VycyA9IHRoaXMudXNlcnMuZmlsdGVyKHggPT4geC5pZCAhPT0gdGhpcy51c2VyVG9EZWxldGUuaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5Vc2Vycy5EZWxldGVkTWVzc2FnZScpKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VXNlcnMoe1xuICAgICAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyVG9EZWxldGUgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIG9uSW1wZXJzb25hdGUodXNlcjogVXNlcikge1xuICAgICAgICB0aGlzLnVzZXJUb0ltcGVyc29uYXRlID0gdXNlcjtcbiAgICAgICAgdGhpcy5wYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvckltcGVyc29uYXRlLm9wZW4oKTtcbiAgICB9XG4gICAgb25Vc2VySW1wZXJzb25hdGlvbihfZXZlbnQpIHtcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5wbGF0Zm9ybSQuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IHJlcztcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuaW1wZXJzb25hdGVVc2VyKHtcbiAgICAgICAgICAgICAgICAgICAgZW1haWw6IHRoaXMudXNlclRvSW1wZXJzb25hdGUuZW1haWwsXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIHBob25lZ2FwOiBwbGF0Zm9ybSAhPT0gJ2Jyb3dzZXInXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoYFlvdSdyZSBub3cgYmVpbmcgbG9nZ2VkIGluIGFzIGFub3RoZXIgdXNlci4uLmApO1xuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciAyIHNlYyBiZWZvcmUgcmVkaXJlY3RpbmcgdXNlciB0byBob21lIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpbmRvd1NlcnZpY2UucmVwbGFjZVVybCgnL2hvbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgY29uc3QgdmFsID0ge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogdGhpcy5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgZmlsdGVyQnlGZWF0dXJlS2V5czogdGhpcy5maWx0ZXJCeUZlYXR1cmVLZXlzLFxuICAgICAgICAgICAgZmlsdGVyQnlSb2xlczogdGhpcy5maWx0ZXJCeVJvbGVzLFxuICAgICAgICAgICAgZmlsdGVyQnlQcm9kdWN0czogdGhpcy5maWx0ZXJCeVByb2R1Y3RzLFxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb246IHRoaXMuc2VsZWN0ZWRPcHRpb24sXG4gICAgICAgICAgICBzZWFyY2hEYXRhU291cmNlOiB0aGlzLnNlYXJjaERhdGFTb3VyY2VcbiAgICAgICAgfTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3VzZXItbGlzdC1zdGF0ZScsIEpTT04uc3RyaW5naWZ5KHZhbCkpO1xuICAgICAgICBjb25zdCBub3RpZmllciA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKHRha2VVbnRpbChub3RpZmllcikpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFldmVudC51cmxBZnRlclJlZGlyZWN0cy5pbmNsdWRlcygnL3VzZXInKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtJCgndXNlci1saXN0LXN0YXRlJyk7XG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLm5leHQoJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuICAgIGRpc2FibGUyZmEoaWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnJlbW92ZTJmYVVzZXJJZCA9IGlkO1xuICAgICAgICB0aGlzLnBhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9yUmVtb3ZlMmZhLm9wZW4oKTtcbiAgICB9XG4gICAgcmVtb3ZlMmZhKF9ldmVudCkge1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZS5yZW1vdmUyZmEodGhpcy5yZW1vdmUyZmFVc2VySWQsIHRoaXMuc3Vic2NyaXB0aW9uSWQpLnN1YnNjcmliZSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBjcmVhdGUtdXNlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG15LTNcIj5cbiAgICA8aDIgY2xhc3M9XCJjYXJkLXRpdGxlIHAtMCBmbG9hdC1zdGFydFwiPlVzZXJzPC9oMj5cbiAgICA8YSBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSBmbG9hdC1lbmRcIlxuICAgICAgaWQ9XCJidG4tY3JlYXRlXCJcbiAgICAgICpyYmFjQWxsb3c9XCInU3VwZXJBZG1pbidcIlxuICAgICAgW3JvdXRlckxpbmtdPVwiW3JvdXRlcnMudXNlcnNEZXRhaWxzICsgJ2FkZCddXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBDcmVhdGUgVXNlclxuICAgIDwvYT5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXNMb2FkZWRcIj5cbiAgICA8cC1wcm9ncmVzc1NwaW5uZXI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJwcmltZW5nLWRhdGF0YWJsZS1jb250YWluZXIgbXQtMFwiIFtjbGFzcy5oaWRlVGFibGVdPVwidG90YWxSZWNvcmRzVW5GaWx0ZXIgPT09IDBcIj5cbiAgPGRpdiBjbGFzcz1cInVzZXItbWFuYWdlbWVudC10YWJsZSB0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgPHAtdGFibGUgI2R0XG4gICAgICBbdmFsdWVdPVwidXNlcnNcIlxuICAgICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcbiAgICAgIFtsYXp5XT1cInRydWVcIlxuICAgICAgW3Jvd3NdPVwiUEFHRV9TSVpFXCJcbiAgICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgICAgW2ZpbHRlckRlbGF5XT1cIjEwMDBcIlxuICAgICAgKG9uTGF6eUxvYWQpPVwib25MYXp5TG9hZCgkZXZlbnQpXCJcbiAgICAgIFtjdXN0b21Tb3J0XT1cInRydWVcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtZmlsdGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbb3B0aW9uc109XCJzZWFyY2hPcHRpb25zXCJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uU2VhcmNoT3B0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciB1c2VycyBieSByb2xlLCBwcm9kdWN0LCBvciBmZWF0dXJlXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGlvbkxpbWl0XT1cIjFcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlclNvdXJjZVwiXG4gICAgICAgICAgICAgIFtzaG93VG9nZ2xlQWxsXT1cInRydWVcIlxuICAgICAgICAgICAgICBbc2hvd0hlYWRlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCI+XG4gICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCJcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRPcHRpb25cIj5cbiAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtvcHRpb25zXT1cInNlYXJjaERhdGFTb3VyY2VcIlxuICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25TZWFyY2hDcml0ZXJpYSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW3Nob3dUb2dnbGVBbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3JpdGVyaWFcIlxuICAgICAgICAgICAgICBbc2hvd0hlYWRlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3Qge3sgc2VsZWN0ZWRPcHRpb24udmFsdWUgfX1zXCJcbiAgICAgICAgICAgICAgbWF4U2VsZWN0ZWRMYWJlbHM9XCIyXCJcbiAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCI+XG4gICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCBtdC0yIG1lLTJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgIHNpemU9XCI1MFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFVzZXIuLi5cIlxuICAgICAgICAgICAgICBkYXRhLWN5PVwidXNlci1zZWFyY2hcIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwiZHQuZmlsdGVyR2xvYmFsKCRldmVudC50YXJnZXQudmFsdWUsICdjb250YWlucycpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3ZC05MFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwiaWRcIj5cbiAgICAgICAgICAgIHt7ICdBZG1pbi5Vc2Vycy5JZCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwiaWRcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cImZpcnN0X25hbWVcIj5cbiAgICAgICAgICAgIHt7ICdMYWJlbC5GaXJzdE5hbWUnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cImZpcnN0X25hbWVcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cImxhc3RfbmFtZVwiPlxuICAgICAgICAgICAge3sgJ0xhYmVsLkxhc3ROYW1lJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJsYXN0X25hbWVcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cImVtYWlsXCI+XG4gICAgICAgICAgICB7eyAnTGFiZWwuRW1haWwnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cImVtYWlsXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgICBwU29ydGFibGVDb2x1bW49XCJzbHVnXCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVXNlcnMuU2x1ZycgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwic2x1Z1wiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwiZW5jcnlwdGVkX3Bhc3N3b3JkXCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVXNlcnMuRW1haWxDb25maXJtJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJlbmNyeXB0ZWRfcGFzc3dvcmRcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cblxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwic2Vzc2lvbnNfbGFzdF9tb250aFwiPlxuICAgICAgICAgICAge3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuU2Vzc2lvbnNUb3RhbExhc3RNb250aCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwic2Vzc2lvbnNfbGFzdF9tb250aFwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgcFNvcnRhYmxlQ29sdW1uPVwibGFzdF9zaWduX2luX2F0XCI+XG4gICAgICAgICAgICB7eyAnQWRtaW4uVXNlcnMuTGFzdExvZ2luJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJsYXN0X3NpZ25faW5fYXRcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIHBTb3J0YWJsZUNvbHVtbj1cInNpZ25lZF91cF9hdFwiPlxuICAgICAgICAgICAge3sgJ0FkbWluLlVzZXJzLlJlZ2lzdGVyZWRPbicgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwic2lnbmVkX3VwX2F0XCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtbGlzdC1mb3VyXCI+XG4gICAgICAgICAgICB7eyAnTGFiZWwuQWN0aW9ucycgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICAgICAgbGV0LXVzZXI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiaWRcIj4ge3sgdXNlci5pZCB9fTwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkZpcnN0IE5hbWVcIj48YSBbcm91dGVyTGlua109XCJbJy9tZW1iZXJzJywgdXNlci5zbHVnXVwiPnt7IHVzZXIuZmlyc3RfbmFtZSB9fTwvYT48L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJMYXN0IE5hbWVcIj57eyB1c2VyLmxhc3RfbmFtZSB9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ1c2VyPy5hbHBoYVwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uVXNlcnMuVG9vbHRpcC5BbHBoYUljb24nfHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXJlZ3VsYXIgZmEtc3F1YXJlLWEgYWxwaGEtYmV0YSB0ZXh0LXdhcm5pbmdcIj48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTJcIlxuICAgICAgICAgICAgICAqbmdJZj1cInVzZXI/LmJldGFcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLlVzZXJzLlRvb2x0aXAuQmV0YUljb24nfHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXJlZ3VsYXIgZmEtc3F1YXJlLWIgYWxwaGEtYmV0YSB0ZXh0LXByaW1hcnlcIiA+PC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkVtYWlsXCI+e3sgdXNlci5lbWFpbCB9fTwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlNsdWdcIj57eyB1c2VyLnNsdWcgfX08L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJFbWFpbCBDb25maXJtXCI+XG4gICAgICAgICAgICA8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNBcnJheTogW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogdXNlcj8uaGFzX3Bhc3N3b3JkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIGNvbG9yPVwic3VjY2Vzcy1kYW5nZXJcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlXCI+e3sgdXNlcj8uaGFzX3Bhc3N3b3JkID8gJ1llcycgOiAnTm8nIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTJcIiAqbmdJZj1cInVzZXI/LmJsb2NrZWRcIiBbcFRvb2x0aXBdPVwiJ1RoaXMgdXNlciBoYXMgYmVlbiBibG9ja2VkJ1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtaGV4YWdvbi1leGNsYW1hdGlvbiB0ZXh0LWRhbmdlciBoZXhhLXdhcm5pbmdcIj48L2k+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJTL20gI1wiPlxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQtZGFuZ2VyIGZ3LWJvbGQnOiB1c2VyPy5zZXNzaW9uc19sYXN0X21vbnRoIDwgM1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+e3sgdXNlcj8uc2Vzc2lvbnNfbGFzdF9tb250aCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJMYXN0IExvZ2luXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInVzZXI/LmN1cnJlbnRfc2lnbl9pbl9hdDtlbHNlIGxhc3RTaWduaW5cIj5cbiAgICAgICAgICAgICAge3sgdXNlci5jdXJyZW50X3NpZ25faW5fYXQgIHwgZGF0ZUZvcm1hdCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsYXN0U2lnbmluPlxuICAgICAgICAgICAgICB7eyB1c2VyLmxhc3Rfc2lnbl9pbl9hdCB8IGRhdGVGb3JtYXQgfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUmVnaXN0ZXJlZCBPblwiPnt7IHVzZXIuc2lnbmVkX3VwX2F0IHwgZGF0ZUZvcm1hdCB9fTwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkFjdGlvblwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBsaXN0LWlubGluZVwiPlxuICAgICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIkltcGVyc29uYXRlIHRoaXMgdXNlclwiXG4gICAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidQYWdlcy5BbHBoYSdcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMiBtZS1zbS0zXCI+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1wZW9wbGUtYXJyb3dzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25JbXBlcnNvbmF0ZSh1c2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJ1c2VyPy5lbmFibGVfdHdvX2ZhY3Rvcl9hdXRoZW50aWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJEaXNhYmxlIDJmYVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzYWJsZTJmYSh1c2VyPy5pZClcIlxuICAgICAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidQYWdlcy5BbHBoYSdcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yIG1lLXNtLTNcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiY3VycmVudFVzZXIgJiYgdXNlci5pZCAhPT0gY3VycmVudFVzZXIuaWRcIj5cbiAgICAgICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIk1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cImNoYXRQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMiBtZS1zbS0zXCJcbiAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL21lc3NhZ2UnXVwiXG4gICAgICAgICAgICAgICAgICBbZnJhZ21lbnRdPVwidXNlci5zbHVnXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNvbW1lbnRzIGN0YTEtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIkVkaXRcIlxuICAgICAgICAgICAgICAgICpyYmFjQWxsb3c9XCInUGFnZXMuQWRtaW4uVXNlcnMuRWRpdCdcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMiBtZS1zbS0zXCJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbcm91dGVycy51c2Vyc0RldGFpbHMgKyB1c2VyLmlkXVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWRpdCBlZGl0LWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiRGVsZXRlXCJcbiAgICAgICAgICAgICAgICAqcmJhY0FsbG93PVwiJ1BhZ2VzLkFkbWluLlVzZXJzLkRlbGV0ZSdcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMiBtZS1zbS0zXCI+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKHVzZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC10YWJsZT5cbiAgICA8ZGl2ICpuZ0lmPVwidG90YWxSZWNvcmRzID09PSAwICYmIHRvdGFsUmVjb3Jkc1VuRmlsdGVyICE9PSAwXCI+XG4gICAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInU2VhcmNoLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCIgW2Rlc2NyaXB0aW9uXT1cIidTZWFyY2guTm9EYXRhRGVzY3JpcHRpb24nIHwgdHJhbnNsb2NvXCI+XG4gICAgICA8L3B3LW5vLWRhdGE+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gY2xhc3M9XCJ0b3RhbC1yZWNvcmRzLWNvdW50XCIgKm5nSWY9XCJ0b3RhbFJlY29yZHMgIT09IDBcIj57eyAnTGFiZWwuVG90YWwnIHwgdHJhbnNsb2NvIH19OiB7eyB0b3RhbFJlY29yZHMgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgJiYgdG90YWxSZWNvcmRzVW5GaWx0ZXIgPT09IDBcIj5cbiAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0FkbWluLlVzZXJzLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+IDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuPCEtLSBwYXNzd29yZCB2YWxpZGF0aW9uIG1vZGFsIGZvciBkZWxldGUgdXNlciAtLT5cbjxwdy1wYXNzd29yZC12YWxpZGF0aW9uICNwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclVzZXJEZWxldGVcbiAgKHN1Y2Nlc3NFdmVudCk9XCJkZWxldGVVc2VyKCRldmVudClcIj5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgIDxwPnt7ICdVc2VyLkFjY291bnQuTWVzc2FnZS5BY3Rpb25DYW5Ob3RVbmRvbmUnIHwgdHJhbnNsb2NvIH19PC9wPlxuICAgICAgPHA+e3sgJ1VzZXIuQWNjb3VudC5NZXNzYWdlLkNvbmZpcm1QYXNzd29yZCcgfCB0cmFuc2xvY28gfX08L3A+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9wdy1wYXNzd29yZC12YWxpZGF0aW9uPlxuPCEtLSBwYXNzd29yZCB2YWxpZGF0aW9uIG1vZGFsIGZvciBpbXBlcnNvbmF0ZSAtLT5cbjxwdy1wYXNzd29yZC12YWxpZGF0aW9uICNwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvckltcGVyc29uYXRlXG4gIChzdWNjZXNzRXZlbnQpPVwib25Vc2VySW1wZXJzb25hdGlvbigkZXZlbnQpXCI+XG48L3B3LXBhc3N3b3JkLXZhbGlkYXRpb24+XG48IS0tIHBhc3N3b3JkIHZhbGlkYXRpb24gbW9kYWwgZm9yIHJlbW92ZTJmYSAtLT5cbjxwdy1wYXNzd29yZC12YWxpZGF0aW9uICNwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclJlbW92ZTJmYVxuICAoc3VjY2Vzc0V2ZW50KT1cInJlbW92ZTJmYSgkZXZlbnQpXCI+XG48L3B3LXBhc3N3b3JkLXZhbGlkYXRpb24+XG4iXX0=
@@ -22,6 +22,7 @@ export const ROUTERS = {
22
22
  domainConfig: `${baseUrl}domain-config/`,
23
23
  domainConfigDetails: `${baseUrl}domain-config-details/`,
24
24
  loginNotifications: `${baseUrl}login-notifications/`,
25
- loginNotificationDetails: `${baseUrl}login-notification-details/`
25
+ loginNotificationDetails: `${baseUrl}login-notification-details/`,
26
+ incidentDetails: `${baseUrl}incident/list/`
26
27
  };
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvc2hhcmVkL3JvdXRlcnMvcm91dGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFFMUIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ25CLG1CQUFtQixFQUFFLEdBQUcsT0FBTyx3QkFBd0I7SUFDdkQsdUJBQXVCLEVBQUUsR0FBRyxPQUFPLHNCQUFzQjtJQUN6RCw2QkFBNkIsRUFBRSxHQUFHLE9BQU8sbUNBQW1DO0lBQzVFLFVBQVUsRUFBRSxHQUFHLE9BQU8sWUFBWTtJQUNsQyxxQkFBcUIsRUFBRSxHQUFHLE9BQU8sa0JBQWtCO0lBQ25ELG1CQUFtQixFQUFFLEdBQUcsT0FBTyw4QkFBOEI7SUFDN0QsaUJBQWlCLEVBQUUsR0FBRyxPQUFPLHFCQUFxQjtJQUNsRCxlQUFlLEVBQUUsR0FBRyxPQUFPLGtCQUFrQjtJQUM3QyxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sc0JBQXNCO0lBQ3BELFlBQVksRUFBRSxHQUFHLE9BQU8sZUFBZTtJQUN2QyxjQUFjLEVBQUUsR0FBRyxPQUFPLGdDQUFnQztJQUMxRCxnQkFBZ0IsRUFBRSxHQUFHLE9BQU8sc0JBQXNCO0lBQ2xELGlCQUFpQixFQUFFLEdBQUcsT0FBTyx1Q0FBdUM7SUFDcEUsd0JBQXdCLEVBQUUsR0FBRyxPQUFPLDJDQUEyQztJQUMvRSxtQkFBbUIsRUFBRSxHQUFHLE9BQU8sZUFBZTtJQUM5QywwQkFBMEIsRUFBRSxHQUFHLE9BQU8sZ0NBQWdDO0lBQ3RFLFdBQVcsRUFBRSxHQUFHLE9BQU8sT0FBTztJQUM5QixvQkFBb0IsRUFBRSxHQUFHLE9BQU8sY0FBYztJQUM5QyxZQUFZLEVBQUUsR0FBRyxPQUFPLGVBQWU7SUFDdkMsWUFBWSxFQUFFLEdBQUcsT0FBTyxnQkFBZ0I7SUFDeEMsbUJBQW1CLEVBQUUsR0FBRyxPQUFPLHdCQUF3QjtJQUN2RCxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sc0JBQXNCO0lBQ3BELHdCQUF3QixFQUFFLEdBQUcsT0FBTyw2QkFBNkI7Q0FDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGJhc2VVcmwgPSAnL2FkbWluLyc7XG5cbmV4cG9ydCBjb25zdCBST1VURVJTID0ge1xuICAgIGdsb2JhbENvbmZpZ0RldGFpbHM6IGAke2Jhc2VVcmx9Z2xvYmFsLWNvbmZpZy9kZXRhaWxzL2AsXG4gICAgYWRtaW5DcmVkZW50aWFsc0RldGFpbHM6IGAke2Jhc2VVcmx9Y3JlZGVudGlhbHMtZGV0YWlscy9gLFxuICAgIHN1YnNjcmlwdGlvbkNyZWRlbnRpYWxEZXRhaWxzOiBgJHtiYXNlVXJsfXN1YnNjcmlwdGlvbi1jcmVkZW50aWFscy1kZXRhaWxzL2AsXG4gICAgbmV3c2xldHRlcjogYCR7YmFzZVVybH1uZXdzbGV0dGVyYCxcbiAgICBuZXdzbGV0dGVySXRlbURldGFpbHM6IGAke2Jhc2VVcmx9bmV3c2xldHRlci1pdGVtL2AsXG4gICAgbmV3c2xldHRlcnNVc2VyTGlzdDogYCR7YmFzZVVybH1uZXdzbGV0dGVyL2l0ZW1zL3VzZXJzLWxpc3QvYCxcbiAgICBuZXdzbGV0dGVyRGV0YWlsczogYCR7YmFzZVVybH1uZXdzbGV0dGVyLWRldGFpbHMvYCxcbiAgICBwZXJtaXNzaW9uc0xpc3Q6IGAke2Jhc2VVcmx9cGVybWlzc2lvbnMvbGlzdGAsXG4gICAgcGVybWlzc2lvbnNEZXRhaWxzOiBgJHtiYXNlVXJsfXBlcm1pc3Npb25zLWRldGFpbHMvYCxcbiAgICByb2xlc0RldGFpbHM6IGAke2Jhc2VVcmx9cm9sZS1kZXRhaWxzL2AsXG4gICAgcHJvZHVjdERldGFpbHM6IGAke2Jhc2VVcmx9cHJvZHVjdHMvbGlzdC9wcm9kdWN0LWRldGFpbHMvYCxcbiAgICBwcm9kdWN0c1VzZXJMaXN0OiBgJHtiYXNlVXJsfXByb2R1Y3RzL2xpc3QvdXNlcnMvYCxcbiAgICBmZWVkYmFja1F1ZXN0aW9uczogYCR7YmFzZVVybH1wcm9kdWN0cy9saXN0L2ZlZWRiYWNrLXF1ZXN0aW9ucy1saXN0YCxcbiAgICBmZWVkYmFja1F1ZXN0aW9uc0RldGFpbHM6IGAke2Jhc2VVcmx9cHJvZHVjdHMvbGlzdC9mZWVkYmFjay1xdWVzdGlvbnMtZGV0YWlscy9gLFxuICAgIHN1YnNjcmlwdGlvbkRldGFpbHM6IGAke2Jhc2VVcmx9c3Vic2NyaXB0aW9uL2AsXG4gICAgc3Vic2NyaXB0aW9uUHJvZHVjdERldGFpbHM6IGAke2Jhc2VVcmx9L3N1YnNjcmlwdGlvbi1wcm9kdWN0LWRldGFpbHMvYCxcbiAgICB0aXBzRGV0YWlsczogYCR7YmFzZVVybH10aXBzL2AsXG4gICAgdG9zQW5kUHJpdmFjeURldGFpbHM6IGAke2Jhc2VVcmx9dG9zLWRldGFpbHMvYCxcbiAgICB1c2Vyc0RldGFpbHM6IGAke2Jhc2VVcmx9dXNlci1kZXRhaWxzL2AsXG4gICAgZG9tYWluQ29uZmlnOiBgJHtiYXNlVXJsfWRvbWFpbi1jb25maWcvYCxcbiAgICBkb21haW5Db25maWdEZXRhaWxzOiBgJHtiYXNlVXJsfWRvbWFpbi1jb25maWctZGV0YWlscy9gLFxuICAgIGxvZ2luTm90aWZpY2F0aW9uczogYCR7YmFzZVVybH1sb2dpbi1ub3RpZmljYXRpb25zL2AsXG4gICAgbG9naW5Ob3RpZmljYXRpb25EZXRhaWxzOiBgJHtiYXNlVXJsfWxvZ2luLW5vdGlmaWNhdGlvbi1kZXRhaWxzL2Bcbn07XG4iXX0=
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvc2hhcmVkL3JvdXRlcnMvcm91dGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFFMUIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ25CLG1CQUFtQixFQUFFLEdBQUcsT0FBTyx3QkFBd0I7SUFDdkQsdUJBQXVCLEVBQUUsR0FBRyxPQUFPLHNCQUFzQjtJQUN6RCw2QkFBNkIsRUFBRSxHQUFHLE9BQU8sbUNBQW1DO0lBQzVFLFVBQVUsRUFBRSxHQUFHLE9BQU8sWUFBWTtJQUNsQyxxQkFBcUIsRUFBRSxHQUFHLE9BQU8sa0JBQWtCO0lBQ25ELG1CQUFtQixFQUFFLEdBQUcsT0FBTyw4QkFBOEI7SUFDN0QsaUJBQWlCLEVBQUUsR0FBRyxPQUFPLHFCQUFxQjtJQUNsRCxlQUFlLEVBQUUsR0FBRyxPQUFPLGtCQUFrQjtJQUM3QyxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sc0JBQXNCO0lBQ3BELFlBQVksRUFBRSxHQUFHLE9BQU8sZUFBZTtJQUN2QyxjQUFjLEVBQUUsR0FBRyxPQUFPLGdDQUFnQztJQUMxRCxnQkFBZ0IsRUFBRSxHQUFHLE9BQU8sc0JBQXNCO0lBQ2xELGlCQUFpQixFQUFFLEdBQUcsT0FBTyx1Q0FBdUM7SUFDcEUsd0JBQXdCLEVBQUUsR0FBRyxPQUFPLDJDQUEyQztJQUMvRSxtQkFBbUIsRUFBRSxHQUFHLE9BQU8sZUFBZTtJQUM5QywwQkFBMEIsRUFBRSxHQUFHLE9BQU8sZ0NBQWdDO0lBQ3RFLFdBQVcsRUFBRSxHQUFHLE9BQU8sT0FBTztJQUM5QixvQkFBb0IsRUFBRSxHQUFHLE9BQU8sY0FBYztJQUM5QyxZQUFZLEVBQUUsR0FBRyxPQUFPLGVBQWU7SUFDdkMsWUFBWSxFQUFFLEdBQUcsT0FBTyxnQkFBZ0I7SUFDeEMsbUJBQW1CLEVBQUUsR0FBRyxPQUFPLHdCQUF3QjtJQUN2RCxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sc0JBQXNCO0lBQ3BELHdCQUF3QixFQUFFLEdBQUcsT0FBTyw2QkFBNkI7SUFDakUsZUFBZSxFQUFFLEdBQUcsT0FBTyxnQkFBZ0I7Q0FDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGJhc2VVcmwgPSAnL2FkbWluLyc7XG5cbmV4cG9ydCBjb25zdCBST1VURVJTID0ge1xuICAgIGdsb2JhbENvbmZpZ0RldGFpbHM6IGAke2Jhc2VVcmx9Z2xvYmFsLWNvbmZpZy9kZXRhaWxzL2AsXG4gICAgYWRtaW5DcmVkZW50aWFsc0RldGFpbHM6IGAke2Jhc2VVcmx9Y3JlZGVudGlhbHMtZGV0YWlscy9gLFxuICAgIHN1YnNjcmlwdGlvbkNyZWRlbnRpYWxEZXRhaWxzOiBgJHtiYXNlVXJsfXN1YnNjcmlwdGlvbi1jcmVkZW50aWFscy1kZXRhaWxzL2AsXG4gICAgbmV3c2xldHRlcjogYCR7YmFzZVVybH1uZXdzbGV0dGVyYCxcbiAgICBuZXdzbGV0dGVySXRlbURldGFpbHM6IGAke2Jhc2VVcmx9bmV3c2xldHRlci1pdGVtL2AsXG4gICAgbmV3c2xldHRlcnNVc2VyTGlzdDogYCR7YmFzZVVybH1uZXdzbGV0dGVyL2l0ZW1zL3VzZXJzLWxpc3QvYCxcbiAgICBuZXdzbGV0dGVyRGV0YWlsczogYCR7YmFzZVVybH1uZXdzbGV0dGVyLWRldGFpbHMvYCxcbiAgICBwZXJtaXNzaW9uc0xpc3Q6IGAke2Jhc2VVcmx9cGVybWlzc2lvbnMvbGlzdGAsXG4gICAgcGVybWlzc2lvbnNEZXRhaWxzOiBgJHtiYXNlVXJsfXBlcm1pc3Npb25zLWRldGFpbHMvYCxcbiAgICByb2xlc0RldGFpbHM6IGAke2Jhc2VVcmx9cm9sZS1kZXRhaWxzL2AsXG4gICAgcHJvZHVjdERldGFpbHM6IGAke2Jhc2VVcmx9cHJvZHVjdHMvbGlzdC9wcm9kdWN0LWRldGFpbHMvYCxcbiAgICBwcm9kdWN0c1VzZXJMaXN0OiBgJHtiYXNlVXJsfXByb2R1Y3RzL2xpc3QvdXNlcnMvYCxcbiAgICBmZWVkYmFja1F1ZXN0aW9uczogYCR7YmFzZVVybH1wcm9kdWN0cy9saXN0L2ZlZWRiYWNrLXF1ZXN0aW9ucy1saXN0YCxcbiAgICBmZWVkYmFja1F1ZXN0aW9uc0RldGFpbHM6IGAke2Jhc2VVcmx9cHJvZHVjdHMvbGlzdC9mZWVkYmFjay1xdWVzdGlvbnMtZGV0YWlscy9gLFxuICAgIHN1YnNjcmlwdGlvbkRldGFpbHM6IGAke2Jhc2VVcmx9c3Vic2NyaXB0aW9uL2AsXG4gICAgc3Vic2NyaXB0aW9uUHJvZHVjdERldGFpbHM6IGAke2Jhc2VVcmx9L3N1YnNjcmlwdGlvbi1wcm9kdWN0LWRldGFpbHMvYCxcbiAgICB0aXBzRGV0YWlsczogYCR7YmFzZVVybH10aXBzL2AsXG4gICAgdG9zQW5kUHJpdmFjeURldGFpbHM6IGAke2Jhc2VVcmx9dG9zLWRldGFpbHMvYCxcbiAgICB1c2Vyc0RldGFpbHM6IGAke2Jhc2VVcmx9dXNlci1kZXRhaWxzL2AsXG4gICAgZG9tYWluQ29uZmlnOiBgJHtiYXNlVXJsfWRvbWFpbi1jb25maWcvYCxcbiAgICBkb21haW5Db25maWdEZXRhaWxzOiBgJHtiYXNlVXJsfWRvbWFpbi1jb25maWctZGV0YWlscy9gLFxuICAgIGxvZ2luTm90aWZpY2F0aW9uczogYCR7YmFzZVVybH1sb2dpbi1ub3RpZmljYXRpb25zL2AsXG4gICAgbG9naW5Ob3RpZmljYXRpb25EZXRhaWxzOiBgJHtiYXNlVXJsfWxvZ2luLW5vdGlmaWNhdGlvbi1kZXRhaWxzL2AsXG4gICAgaW5jaWRlbnREZXRhaWxzOiBgJHtiYXNlVXJsfWluY2lkZW50L2xpc3QvYFxufTtcbiJdfQ==