tin-spa 14.4.2 → 14.13.2

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 (162) hide show
  1. package/README.md +24 -24
  2. package/esm2020/lib/classes/Classes.mjs +57 -32
  3. package/esm2020/lib/classes/LibClasses.mjs +2 -1
  4. package/esm2020/lib/classes/TinCore.mjs +194 -44
  5. package/esm2020/lib/components/alert/alert.component.mjs +12 -6
  6. package/esm2020/lib/components/attach/attach.component.mjs +49 -33
  7. package/esm2020/lib/components/capsules/capsules.component.mjs +63 -0
  8. package/esm2020/lib/components/cards/cards.component.mjs +103 -0
  9. package/esm2020/lib/components/date/date.component.mjs +4 -4
  10. package/esm2020/lib/components/email/email.component.mjs +19 -17
  11. package/esm2020/lib/components/form/form.component.mjs +142 -57
  12. package/esm2020/lib/components/html/html.component.mjs +34 -0
  13. package/esm2020/lib/components/label/label.component.mjs +9 -3
  14. package/esm2020/lib/components/list-dialog/list-dialog.component.mjs +3 -3
  15. package/esm2020/lib/components/money/money.component.mjs +26 -9
  16. package/esm2020/lib/components/multi-select/multi-select.component.mjs +165 -0
  17. package/esm2020/lib/components/multi-text/multi-text.component.mjs +208 -0
  18. package/esm2020/lib/components/nav-menu/nav-menu.component.mjs +31 -27
  19. package/esm2020/lib/components/notes/notes.component.mjs +62 -0
  20. package/esm2020/lib/components/number/number.component.mjs +23 -8
  21. package/esm2020/lib/components/option/option.component.mjs +36 -14
  22. package/esm2020/lib/components/page/page.component.mjs +101 -0
  23. package/esm2020/lib/components/search/search.component.mjs +10 -5
  24. package/esm2020/lib/components/select/select.component.mjs +56 -129
  25. package/esm2020/lib/components/select-bitwise/select-bitwise.component.mjs +87 -0
  26. package/esm2020/lib/components/select-common/select-common.component.mjs +208 -0
  27. package/esm2020/lib/components/select-internal/select-internal.component.mjs +75 -0
  28. package/esm2020/lib/components/select-lite/select-lite.component.mjs +18 -0
  29. package/esm2020/lib/components/steps/steps.component.mjs +83 -61
  30. package/esm2020/lib/components/suffix/suffix.component.mjs +70 -0
  31. package/esm2020/lib/components/table/detailsDialog.component.mjs +169 -37
  32. package/esm2020/lib/components/table/table.component.mjs +136 -111
  33. package/esm2020/lib/components/table-action/table-action.component.mjs +42 -8
  34. package/esm2020/lib/components/table-header/table-header.component.mjs +12 -8
  35. package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +169 -35
  36. package/esm2020/lib/components/table-internal/table-internal.component.mjs +138 -112
  37. package/esm2020/lib/components/table-lite/detailsDialog-lite.component.mjs +371 -0
  38. package/esm2020/lib/components/table-lite/table-lite.component.mjs +441 -0
  39. package/esm2020/lib/components/table-row/table-row.component.mjs +23 -4
  40. package/esm2020/lib/components/tabs/tabs.component.mjs +83 -0
  41. package/esm2020/lib/components/text/text.component.mjs +85 -40
  42. package/esm2020/lib/components/tiles/tiles.component.mjs +32 -20
  43. package/esm2020/lib/components/viewer/viewer.component.mjs +7 -3
  44. package/esm2020/lib/components/viewer/viewerDialog.component.mjs +20 -13
  45. package/esm2020/lib/modules/admin/admin-routing.module.mjs +11 -1
  46. package/esm2020/lib/pages/accounts/accountDialog.component.mjs +1 -1
  47. package/esm2020/lib/pages/app-models/app-models.component.mjs +56 -0
  48. package/esm2020/lib/pages/approvals/approvals.component.mjs +19 -0
  49. package/esm2020/lib/pages/approvals-config/approvals-config.component.mjs +165 -0
  50. package/esm2020/lib/pages/bug/bug.component.mjs +3 -3
  51. package/esm2020/lib/pages/change-password/change-password.component.mjs +1 -1
  52. package/esm2020/lib/pages/create-account/create-account.component.mjs +1 -1
  53. package/esm2020/lib/pages/customers/customers.component.mjs +9 -48
  54. package/esm2020/lib/pages/departments/departments.component.mjs +2 -4
  55. package/esm2020/lib/pages/employees/employees.component.mjs +3 -4
  56. package/esm2020/lib/pages/grades/grades.component.mjs +3 -3
  57. package/esm2020/lib/pages/inventory/inventory.component.mjs +3 -3
  58. package/esm2020/lib/pages/inventory/quantityDialog.component.mjs +1 -1
  59. package/esm2020/lib/pages/invitations-table/invitations-table.component.mjs +11 -10
  60. package/esm2020/lib/pages/login/login.component.mjs +52 -14
  61. package/esm2020/lib/pages/logs/logs.component.mjs +27 -22
  62. package/esm2020/lib/pages/membership/membership.component.mjs +15 -19
  63. package/esm2020/lib/pages/notifications/notifications.component.mjs +82 -6
  64. package/esm2020/lib/pages/notifications-config/notifications-config.component.mjs +113 -0
  65. package/esm2020/lib/pages/plans/plans.component.mjs +16 -19
  66. package/esm2020/lib/pages/positions/positions.component.mjs +4 -4
  67. package/esm2020/lib/pages/profile/profile.component.mjs +4 -3
  68. package/esm2020/lib/pages/recover-account/recover-account.component.mjs +1 -1
  69. package/esm2020/lib/pages/roles/addRoleDialog.component.mjs +2 -2
  70. package/esm2020/lib/pages/roles/roles.component.mjs +77 -17
  71. package/esm2020/lib/pages/settings/settings.component.mjs +5 -13
  72. package/esm2020/lib/pages/signup/signup.component.mjs +1 -1
  73. package/esm2020/lib/pages/suppliers/suppliers.component.mjs +3 -31
  74. package/esm2020/lib/pages/tasks/tasks.component.mjs +9 -9
  75. package/esm2020/lib/pages/tenant-settings/tenant-settings.component.mjs +145 -72
  76. package/esm2020/lib/pages/tenants/tenants.component.mjs +10 -10
  77. package/esm2020/lib/pages/transactions/transactDialog.component.mjs +1 -1
  78. package/esm2020/lib/pages/transactions/transactions.component.mjs +3 -3
  79. package/esm2020/lib/pages/users/users.component.mjs +115 -92
  80. package/esm2020/lib/pages/welcome/welcome.component.mjs +9 -9
  81. package/esm2020/lib/select-context.directive.mjs +23 -0
  82. package/esm2020/lib/services/button.service.mjs +90 -30
  83. package/esm2020/lib/services/csv.service.mjs +1 -1
  84. package/esm2020/lib/services/datalib.service.mjs +504 -76
  85. package/esm2020/lib/services/dialog.service.mjs +24 -7
  86. package/esm2020/lib/services/notifications.service.mjs +33 -0
  87. package/esm2020/lib/services/table-config.service.mjs +55 -7
  88. package/esm2020/lib/tin-spa.module.mjs +47 -11
  89. package/esm2020/public-api.mjs +9 -1
  90. package/fesm2015/tin-spa.mjs +6333 -2671
  91. package/fesm2015/tin-spa.mjs.map +1 -1
  92. package/fesm2020/tin-spa.mjs +6492 -2770
  93. package/fesm2020/tin-spa.mjs.map +1 -1
  94. package/lib/classes/Classes.d.ts +233 -127
  95. package/lib/classes/LibClasses.d.ts +1 -0
  96. package/lib/classes/TinCore.d.ts +11 -3
  97. package/lib/components/attach/attach.component.d.ts +13 -6
  98. package/lib/components/capsules/capsules.component.d.ts +26 -0
  99. package/lib/components/cards/cards.component.d.ts +39 -0
  100. package/lib/components/email/email.component.d.ts +4 -3
  101. package/lib/components/form/form.component.d.ts +20 -11
  102. package/lib/components/html/html.component.d.ts +16 -0
  103. package/lib/components/label/label.component.d.ts +3 -1
  104. package/lib/components/money/money.component.d.ts +8 -1
  105. package/lib/components/multi-select/multi-select.component.d.ts +47 -0
  106. package/lib/components/multi-text/multi-text.component.d.ts +56 -0
  107. package/lib/components/nav-menu/nav-menu.component.d.ts +6 -2
  108. package/lib/components/notes/notes.component.d.ts +19 -0
  109. package/lib/components/number/number.component.d.ts +7 -1
  110. package/lib/components/option/option.component.d.ts +10 -2
  111. package/lib/components/page/page.component.d.ts +38 -0
  112. package/lib/components/search/search.component.d.ts +3 -1
  113. package/lib/components/select/select.component.d.ts +16 -37
  114. package/lib/components/select-bitwise/select-bitwise.component.d.ts +31 -0
  115. package/lib/components/select-common/select-common.component.d.ts +53 -0
  116. package/lib/components/select-internal/select-internal.component.d.ts +23 -0
  117. package/lib/components/select-lite/select-lite.component.d.ts +8 -0
  118. package/lib/components/steps/steps.component.d.ts +18 -9
  119. package/lib/components/suffix/suffix.component.d.ts +23 -0
  120. package/lib/components/table/detailsDialog.component.d.ts +24 -7
  121. package/lib/components/table/table.component.d.ts +15 -9
  122. package/lib/components/table-action/table-action.component.d.ts +4 -1
  123. package/lib/components/table-header/table-header.component.d.ts +3 -1
  124. package/lib/components/table-internal/detailsDialog-internal.component.d.ts +24 -7
  125. package/lib/components/table-internal/table-internal.component.d.ts +15 -9
  126. package/lib/components/table-lite/detailsDialog-lite.component.d.ts +81 -0
  127. package/lib/components/table-lite/table-lite.component.d.ts +91 -0
  128. package/lib/components/table-row/table-row.component.d.ts +4 -1
  129. package/lib/components/tabs/tabs.component.d.ts +32 -0
  130. package/lib/components/text/text.component.d.ts +16 -7
  131. package/lib/components/tiles/tiles.component.d.ts +4 -3
  132. package/lib/components/viewer/viewerDialog.component.d.ts +3 -1
  133. package/lib/pages/app-models/app-models.component.d.ts +15 -0
  134. package/lib/pages/approvals/approvals.component.d.ts +10 -0
  135. package/lib/pages/approvals-config/approvals-config.component.d.ts +24 -0
  136. package/lib/pages/customers/customers.component.d.ts +2 -8
  137. package/lib/pages/invitations-table/invitations-table.component.d.ts +1 -1
  138. package/lib/pages/login/login.component.d.ts +7 -1
  139. package/lib/pages/logs/logs.component.d.ts +2 -6
  140. package/lib/pages/membership/membership.component.d.ts +2 -6
  141. package/lib/pages/notifications/notifications.component.d.ts +9 -1
  142. package/lib/pages/notifications-config/notifications-config.component.d.ts +17 -0
  143. package/lib/pages/plans/plans.component.d.ts +2 -6
  144. package/lib/pages/roles/roles.component.d.ts +14 -2
  145. package/lib/pages/suppliers/suppliers.component.d.ts +1 -4
  146. package/lib/pages/tasks/tasks.component.d.ts +1 -1
  147. package/lib/pages/tenant-settings/tenant-settings.component.d.ts +12 -7
  148. package/lib/pages/tenants/tenants.component.d.ts +2 -2
  149. package/lib/pages/users/users.component.d.ts +8 -16
  150. package/lib/select-context.directive.d.ts +10 -0
  151. package/lib/services/button.service.d.ts +10 -7
  152. package/lib/services/datalib.service.d.ts +54 -10
  153. package/lib/services/dialog.service.d.ts +2 -2
  154. package/lib/services/notifications.service.d.ts +12 -0
  155. package/lib/services/table-config.service.d.ts +9 -1
  156. package/lib/tin-spa.module.d.ts +51 -33
  157. package/package.json +1 -1
  158. package/public-api.d.ts +8 -0
  159. package/esm2020/lib/pages/invitations/invitations.component.mjs +0 -14
  160. package/esm2020/lib/pages/tenant-settings/inviteDialog.component.mjs +0 -60
  161. package/lib/pages/invitations/invitations.component.d.ts +0 -8
  162. package/lib/pages/tenant-settings/inviteDialog.component.d.ts +0 -28
@@ -5,13 +5,12 @@ import * as i0 from "@angular/core";
5
5
  import * as i1 from "../../services/message.service";
6
6
  import * as i2 from "@angular/common";
7
7
  import * as i3 from "@angular/forms";
8
- import * as i4 from "@angular/material/button";
9
- import * as i5 from "@angular/material/icon";
10
- import * as i6 from "@angular/material/form-field";
11
- import * as i7 from "@angular/material/chips";
12
- import * as i8 from "@angular/material/core";
13
- import * as i9 from "@angular/material/autocomplete";
14
- import * as i10 from "@angular/material/tooltip";
8
+ import * as i4 from "@angular/material/icon";
9
+ import * as i5 from "@angular/material/form-field";
10
+ import * as i6 from "@angular/material/chips";
11
+ import * as i7 from "@angular/material/core";
12
+ import * as i8 from "@angular/material/autocomplete";
13
+ import * as i9 from "../suffix/suffix.component";
15
14
  export class EmailComponent {
16
15
  constructor(messageService) {
17
16
  this.messageService = messageService;
@@ -21,7 +20,8 @@ export class EmailComponent {
21
20
  this.readonly = false;
22
21
  this.required = true;
23
22
  this.hint = "";
24
- this.infoClick = new EventEmitter();
23
+ this.copyContent = false;
24
+ this.clearContent = false;
25
25
  // New inputs for autocomplete
26
26
  this.options = [];
27
27
  this.optionValue = "";
@@ -81,14 +81,14 @@ export class EmailComponent {
81
81
  this.updateValue();
82
82
  }
83
83
  }
84
+ clearEmails() {
85
+ this.emails = [];
86
+ this.updateValue();
87
+ }
84
88
  updateValue() {
85
89
  this.value = this.emails.join(';');
86
90
  this.valueChange.emit(this.value);
87
91
  }
88
- onInfoClick(event) {
89
- event.stopPropagation();
90
- this.infoClick.emit();
91
- }
92
92
  optionSelected(event) {
93
93
  this.addMultipleEmails(event.option.viewValue);
94
94
  this.emailControl.setValue('');
@@ -101,10 +101,10 @@ export class EmailComponent {
101
101
  }
102
102
  }
103
103
  EmailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: EmailComponent, deps: [{ token: i1.MessageService }], target: i0.ɵɵFactoryTarget.Component });
104
- EmailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: EmailComponent, selector: "spa-email", inputs: { display: "display", value: "value", readonly: "readonly", required: "required", hint: "hint", suffix: "suffix", infoMessage: "infoMessage", options: "options", optionValue: "optionValue" }, outputs: { valueChange: "valueChange", infoClick: "infoClick" }, ngImport: i0, template: "<mat-form-field style=\"width: 100%;\">\r\n <mat-label>{{display}}</mat-label>\r\n <mat-chip-list #chipList>\r\n <mat-chip *ngFor=\"let email of emails\" [removable]=\"!readonly\" (removed)=\"removeEmail(email)\">\r\n {{email}}\r\n <mat-icon matChipRemove *ngIf=\"!readonly\">cancel</mat-icon>\r\n </mat-chip>\r\n <input autocomplete=\"off\" #emailInput [placeholder]=\"readonly ? '' : 'Enter email addresses'\" [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"[13, 186]\" [matChipInputAddOnBlur]=\"true\" (matChipInputTokenEnd)=\"addEmail($event)\" [formControl]=\"emailControl\" (paste)=\"handlePaste($event)\" [readonly]=\"readonly\" [matAutocomplete]=\"auto\">\r\n </mat-chip-list>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"optionSelected($event)\">\r\n <mat-option *ngFor=\"let option of filteredOptions | async\" [value]=\"optionValue ? option[optionValue] : option\">\r\n {{optionValue ? option[optionValue] : option}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"emailControl.invalid && emailControl.touched\">Invalid email format</mat-error>\r\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\r\n <div matSuffix class=\"suffix-icons\">\r\n <span *ngIf=\"suffix\">{{suffix}}</span>\r\n <button mat-icon-button (click)=\"copyEmails()\" matTooltip=\"Copy Content\" matTooltipPosition=\"above\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n <button mat-icon-button *ngIf=\"infoMessage\" (click)=\"onInfoClick($event)\" matTooltip=\"Info\" matTooltipPosition=\"above\">\r\n <mat-icon style=\"color: steelblue;\">info</mat-icon>\r\n </button>\r\n </div>\r\n</mat-form-field>\r\n", styles: [":host ::ng-deep .mat-form-field-flex{align-items:flex-start}:host ::ng-deep .mat-form-field-infix{max-height:170px;overflow-y:auto;padding-top:.25em;padding-bottom:.25em;overflow-x:hidden}:host ::ng-deep mat-chip{flex:0 0 auto}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i7.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i7.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i9.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i9.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
104
+ EmailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: EmailComponent, selector: "spa-email", inputs: { display: "display", value: "value", readonly: "readonly", required: "required", hint: "hint", suffix: "suffix", infoMessage: "infoMessage", copyContent: "copyContent", clearContent: "clearContent", options: "options", optionValue: "optionValue" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<mat-form-field style=\"width: 100%;\">\r\n <mat-label>{{display}}</mat-label>\r\n <mat-chip-list #chipList>\r\n <mat-chip *ngFor=\"let email of emails\" [removable]=\"!readonly\" (removed)=\"removeEmail(email)\">\r\n {{email}}\r\n <mat-icon matChipRemove *ngIf=\"!readonly\">cancel</mat-icon>\r\n </mat-chip>\r\n <input autocomplete=\"off\" #emailInput [placeholder]=\"readonly ? '' : 'Enter email addresses'\" [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"[13, 186]\" [matChipInputAddOnBlur]=\"true\" (matChipInputTokenEnd)=\"addEmail($event)\" [formControl]=\"emailControl\" (paste)=\"handlePaste($event)\" [readonly]=\"readonly\" [matAutocomplete]=\"auto\">\r\n </mat-chip-list>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"optionSelected($event)\">\r\n <mat-option *ngFor=\"let option of filteredOptions | async\" [value]=\"optionValue ? option[optionValue] : option\">\r\n {{optionValue ? option[optionValue] : option}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"emailControl.invalid && emailControl.touched\">Invalid email format</mat-error>\r\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\r\n <div matSuffix class=\"suffix-icons\">\r\n <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clearEmails()\" [isHovered]=\"true\" [(value)]=\"value\"></spa-suffix>\r\n </div>\r\n</mat-form-field>\r\n", styles: [":host ::ng-deep .mat-form-field-flex{align-items:flex-start}:host ::ng-deep .mat-form-field-infix{max-height:170px;overflow-y:auto;padding-top:.25em;padding-bottom:.25em;overflow-x:hidden}:host ::ng-deep mat-chip{flex:0 0 auto}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i6.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i6.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i6.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i6.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i9.SuffixComponent, selector: "spa-suffix", inputs: ["label", "infoMessage", "copyContent", "isHovered", "clearContent", "value"], outputs: ["infoClick", "copyClick", "clearClick", "valueChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
105
105
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: EmailComponent, decorators: [{
106
106
  type: Component,
107
- args: [{ selector: 'spa-email', template: "<mat-form-field style=\"width: 100%;\">\r\n <mat-label>{{display}}</mat-label>\r\n <mat-chip-list #chipList>\r\n <mat-chip *ngFor=\"let email of emails\" [removable]=\"!readonly\" (removed)=\"removeEmail(email)\">\r\n {{email}}\r\n <mat-icon matChipRemove *ngIf=\"!readonly\">cancel</mat-icon>\r\n </mat-chip>\r\n <input autocomplete=\"off\" #emailInput [placeholder]=\"readonly ? '' : 'Enter email addresses'\" [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"[13, 186]\" [matChipInputAddOnBlur]=\"true\" (matChipInputTokenEnd)=\"addEmail($event)\" [formControl]=\"emailControl\" (paste)=\"handlePaste($event)\" [readonly]=\"readonly\" [matAutocomplete]=\"auto\">\r\n </mat-chip-list>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"optionSelected($event)\">\r\n <mat-option *ngFor=\"let option of filteredOptions | async\" [value]=\"optionValue ? option[optionValue] : option\">\r\n {{optionValue ? option[optionValue] : option}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"emailControl.invalid && emailControl.touched\">Invalid email format</mat-error>\r\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\r\n <div matSuffix class=\"suffix-icons\">\r\n <span *ngIf=\"suffix\">{{suffix}}</span>\r\n <button mat-icon-button (click)=\"copyEmails()\" matTooltip=\"Copy Content\" matTooltipPosition=\"above\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n <button mat-icon-button *ngIf=\"infoMessage\" (click)=\"onInfoClick($event)\" matTooltip=\"Info\" matTooltipPosition=\"above\">\r\n <mat-icon style=\"color: steelblue;\">info</mat-icon>\r\n </button>\r\n </div>\r\n</mat-form-field>\r\n", styles: [":host ::ng-deep .mat-form-field-flex{align-items:flex-start}:host ::ng-deep .mat-form-field-infix{max-height:170px;overflow-y:auto;padding-top:.25em;padding-bottom:.25em;overflow-x:hidden}:host ::ng-deep mat-chip{flex:0 0 auto}\n"] }]
107
+ args: [{ selector: 'spa-email', template: "<mat-form-field style=\"width: 100%;\">\r\n <mat-label>{{display}}</mat-label>\r\n <mat-chip-list #chipList>\r\n <mat-chip *ngFor=\"let email of emails\" [removable]=\"!readonly\" (removed)=\"removeEmail(email)\">\r\n {{email}}\r\n <mat-icon matChipRemove *ngIf=\"!readonly\">cancel</mat-icon>\r\n </mat-chip>\r\n <input autocomplete=\"off\" #emailInput [placeholder]=\"readonly ? '' : 'Enter email addresses'\" [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"[13, 186]\" [matChipInputAddOnBlur]=\"true\" (matChipInputTokenEnd)=\"addEmail($event)\" [formControl]=\"emailControl\" (paste)=\"handlePaste($event)\" [readonly]=\"readonly\" [matAutocomplete]=\"auto\">\r\n </mat-chip-list>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"optionSelected($event)\">\r\n <mat-option *ngFor=\"let option of filteredOptions | async\" [value]=\"optionValue ? option[optionValue] : option\">\r\n {{optionValue ? option[optionValue] : option}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"emailControl.invalid && emailControl.touched\">Invalid email format</mat-error>\r\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\r\n <div matSuffix class=\"suffix-icons\">\r\n <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clearEmails()\" [isHovered]=\"true\" [(value)]=\"value\"></spa-suffix>\r\n </div>\r\n</mat-form-field>\r\n", styles: [":host ::ng-deep .mat-form-field-flex{align-items:flex-start}:host ::ng-deep .mat-form-field-infix{max-height:170px;overflow-y:auto;padding-top:.25em;padding-bottom:.25em;overflow-x:hidden}:host ::ng-deep mat-chip{flex:0 0 auto}\n"] }]
108
108
  }], ctorParameters: function () { return [{ type: i1.MessageService }]; }, propDecorators: { display: [{
109
109
  type: Input
110
110
  }], value: [{
@@ -121,11 +121,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
121
121
  type: Input
122
122
  }], infoMessage: [{
123
123
  type: Input
124
- }], infoClick: [{
125
- type: Output
124
+ }], copyContent: [{
125
+ type: Input
126
+ }], clearContent: [{
127
+ type: Input
126
128
  }], options: [{
127
129
  type: Input
128
130
  }], optionValue: [{
129
131
  type: Input
130
132
  }] } });
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvZW1haWwvZW1haWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvZW1haWwvZW1haWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXpELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7OztBQVFoRCxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUFvQixjQUErQjtRQUEvQixtQkFBYyxHQUFkLGNBQWMsQ0FBaUI7UUFFMUMsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDVixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDMUMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLFNBQUksR0FBRyxFQUFFLENBQUM7UUFHVCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUUvQyw4QkFBOEI7UUFDckIsWUFBTyxHQUFVLEVBQUUsQ0FBQztRQUNwQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUUxQixXQUFNLEdBQWEsRUFBRSxDQUFDO0lBaEJpQyxDQUFDO0lBcUJ4RCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsVUFBVSxDQUFDLFFBQVE7WUFD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LENBQUMsQ0FBQztJQUNMLENBQUM7OzJHQS9HVSxjQUFjOytGQUFkLGNBQWMsMFRDYjNCLHFyREEwQkE7MkZEYmEsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxXQUFXO3FHQVFaLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0UsT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBNYXRDaGlwSW5wdXRFdmVudCwgTWF0Q2hpcExpc3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3BhLWVtYWlsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZW1haWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VtYWlsLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1haWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlIDogTWVzc2FnZVNlcnZpY2UpIHsgfVxyXG5cclxuICBASW5wdXQoKSBkaXNwbGF5ID0gXCJcIjtcclxuICBASW5wdXQoKSB2YWx1ZSA9IFwiXCI7XHJcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcclxuICBASW5wdXQoKSByZXF1aXJlZCA9IHRydWU7XHJcbiAgQElucHV0KCkgaGludCA9IFwiXCI7XHJcbiAgQElucHV0KCkgc3VmZml4OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaW5mb01lc3NhZ2U6IHN0cmluZztcclxuICBAT3V0cHV0KCkgaW5mb0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAvLyBOZXcgaW5wdXRzIGZvciBhdXRvY29tcGxldGVcclxuICBASW5wdXQoKSBvcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIG9wdGlvblZhbHVlID0gXCJcIjtcclxuXHJcbiAgZW1haWxzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGVtYWlsQ29udHJvbDogRm9ybUNvbnRyb2w7XHJcbiAgZmlsdGVyZWRPcHRpb25zOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcclxuXHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5lbWFpbENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIFtcclxuICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXFxcLlthLXpBLVpdezIsfSQnKVxyXG4gICAgXSk7XHJcbiAgICB0aGlzLmVtYWlscyA9IHRoaXMudmFsdWUuc3BsaXQoJzsnKS5maWx0ZXIoZW1haWwgPT4gZW1haWwudHJpbSgpICE9PSAnJyk7XHJcblxyXG4gICAgLy8gU2V0IHVwIGF1dG9jb21wbGV0ZSBmaWx0ZXJpbmdcclxuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5lbWFpbENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIHN0YXJ0V2l0aCgnJyksXHJcbiAgICAgIG1hcCh2YWx1ZSA9PiB0aGlzLl9maWx0ZXIodmFsdWUpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbHRlcih2YWx1ZTogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc1xyXG4gICAgICAubWFwKG9wdGlvbiA9PiB0aGlzLm9wdGlvblZhbHVlID8gb3B0aW9uW3RoaXMub3B0aW9uVmFsdWVdIDogb3B0aW9uKVxyXG4gICAgICAuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgYWRkRW1haWwoZXZlbnQ6IE1hdENoaXBJbnB1dEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudC52YWx1ZSB8fCAnJykudHJpbSgpO1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuYWRkTXVsdGlwbGVFbWFpbHModmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZXZlbnQuY2hpcElucHV0IS5jbGVhcigpOyAvLyBDbGVhciB0aGUgaW5wdXRcclxuICB9XHJcblxyXG4gIGFkZE11bHRpcGxlRW1haWxzKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVtYWlsc1RvQWRkID0gdGhpcy5leHRyYWN0RW1haWxzKHZhbHVlKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGVtYWlsIG9mIGVtYWlsc1RvQWRkKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVmFsaWRFbWFpbChlbWFpbCkgJiYgIXRoaXMuZW1haWxzLmluY2x1ZGVzKGVtYWlsKSkge1xyXG4gICAgICAgIHRoaXMuZW1haWxzLnB1c2goZW1haWwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbWFpbENvbnRyb2wuc2V0VmFsdWUoJycpOyAvLyBSZXNldCB0aGUgZm9ybSBjb250cm9sXHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgICAvLyB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkRW1haWwoZW1haWw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZW1haWxDb250cm9sLnZhbGlkYXRvcihuZXcgRm9ybUNvbnRyb2woZW1haWwpKSA9PT0gbnVsbDtcclxuICB9XHJcblxyXG4gIGhhbmRsZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IHBhc3RlZFRleHQgPSBldmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgIGNvbnN0IGV4dHJhY3RlZEVtYWlscyA9IHRoaXMuZXh0cmFjdEVtYWlscyhwYXN0ZWRUZXh0KTtcclxuICAgIHRoaXMuYWRkTXVsdGlwbGVFbWFpbHMoZXh0cmFjdGVkRW1haWxzLmpvaW4oJzsnKSk7XHJcbiAgfVxyXG5cclxuICBleHRyYWN0RW1haWxzKHRleHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGVtYWlsUmVnZXggPSAvKFthLXpBLVowLTkuXy1dK0BbYS16QS1aMC05Ll8tXStcXC5bYS16QS1aMC05Ll8tXSspL2dpO1xyXG4gICAgY29uc3QgbWF0Y2hlcyA9IHRleHQubWF0Y2goZW1haWxSZWdleCk7XHJcbiAgICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXMgOiBbXTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUVtYWlsKGVtYWlsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5lbWFpbHMuaW5kZXhPZihlbWFpbCk7XHJcbiAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICB0aGlzLmVtYWlscy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVWYWx1ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLmVtYWlscy5qb2luKCc7Jyk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvbkluZm9DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmluZm9DbGljay5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvcHRpb25TZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRNdWx0aXBsZUVtYWlscyhldmVudC5vcHRpb24udmlld1ZhbHVlKTtcclxuICAgIHRoaXMuZW1haWxDb250cm9sLnNldFZhbHVlKCcnKTtcclxuICB9XHJcblxyXG4gIGNvcHlFbWFpbHMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbWFpbFN0cmluZyA9IHRoaXMuZW1haWxzLmpvaW4oJzsnKTtcclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGVtYWlsU3RyaW5nKS50aGVuKCgpID0+IHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdCgnQ29waWVkJyk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XHJcbiAgPG1hdC1sYWJlbD57e2Rpc3BsYXl9fTwvbWF0LWxhYmVsPlxyXG4gIDxtYXQtY2hpcC1saXN0ICNjaGlwTGlzdD5cclxuICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgZW1haWwgb2YgZW1haWxzXCIgW3JlbW92YWJsZV09XCIhcmVhZG9ubHlcIiAocmVtb3ZlZCk9XCJyZW1vdmVFbWFpbChlbWFpbClcIj5cclxuICAgICAge3tlbWFpbH19XHJcbiAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlICpuZ0lmPVwiIXJlYWRvbmx5XCI+Y2FuY2VsPC9tYXQtaWNvbj5cclxuICAgIDwvbWF0LWNoaXA+XHJcbiAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgI2VtYWlsSW5wdXQgW3BsYWNlaG9sZGVyXT1cInJlYWRvbmx5ID8gJycgOiAnRW50ZXIgZW1haWwgYWRkcmVzc2VzJ1wiIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RcIiBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwiWzEzLCAxODZdXCIgW21hdENoaXBJbnB1dEFkZE9uQmx1cl09XCJ0cnVlXCIgKG1hdENoaXBJbnB1dFRva2VuRW5kKT1cImFkZEVtYWlsKCRldmVudClcIiBbZm9ybUNvbnRyb2xdPVwiZW1haWxDb250cm9sXCIgKHBhc3RlKT1cImhhbmRsZVBhc3RlKCRldmVudClcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIj5cclxuICA8L21hdC1jaGlwLWxpc3Q+XHJcbiAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwib3B0aW9uU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMgfCBhc3luY1wiIFt2YWx1ZV09XCJvcHRpb25WYWx1ZSA/IG9wdGlvbltvcHRpb25WYWx1ZV0gOiBvcHRpb25cIj5cclxuICAgICAge3tvcHRpb25WYWx1ZSA/IG9wdGlvbltvcHRpb25WYWx1ZV0gOiBvcHRpb259fVxyXG4gICAgPC9tYXQtb3B0aW9uPlxyXG4gIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICA8bWF0LWVycm9yICpuZ0lmPVwiZW1haWxDb250cm9sLmludmFsaWQgJiYgZW1haWxDb250cm9sLnRvdWNoZWRcIj5JbnZhbGlkIGVtYWlsIGZvcm1hdDwvbWF0LWVycm9yPlxyXG4gIDxtYXQtaGludCAqbmdJZj1cImhpbnRcIj57e2hpbnR9fTwvbWF0LWhpbnQ+XHJcbiAgPGRpdiBtYXRTdWZmaXggY2xhc3M9XCJzdWZmaXgtaWNvbnNcIj5cclxuICAgIDxzcGFuICpuZ0lmPVwic3VmZml4XCI+e3tzdWZmaXh9fTwvc3Bhbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJjb3B5RW1haWxzKClcIiBtYXRUb29sdGlwPVwiQ29weSBDb250ZW50XCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgPG1hdC1pY29uPmNvbnRlbnRfY29weTwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiaW5mb01lc3NhZ2VcIiAoY2xpY2spPVwib25JbmZvQ2xpY2soJGV2ZW50KVwiIG1hdFRvb2x0aXA9XCJJbmZvXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgPG1hdC1pY29uIHN0eWxlPVwiY29sb3I6IHN0ZWVsYmx1ZTtcIj5pbmZvPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG4iXX0=
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvZW1haWwvZW1haWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvZW1haWwvZW1haWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXpELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBUWhELE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQW9CLGNBQStCO1FBQS9CLG1CQUFjLEdBQWQsY0FBYyxDQUFpQjtRQUUxQyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNWLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMxQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFDaEIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUdWLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRTlCLDhCQUE4QjtRQUNyQixZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBRTFCLFdBQU0sR0FBYSxFQUFFLENBQUM7SUFqQmlDLENBQUM7SUFzQnhELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUN0QyxV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LENBQUMsQ0FBQztJQUNMLENBQUM7OzJHQWxIVSxjQUFjOytGQUFkLGNBQWMsNFZDYjNCLHc5Q0FvQkE7MkZEUGEsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxXQUFXO3FHQVFaLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IE1hdENoaXBJbnB1dEV2ZW50LCBNYXRDaGlwTGlzdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcGEtZW1haWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lbWFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZW1haWwuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbWFpbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbWVzc2FnZVNlcnZpY2UgOiBNZXNzYWdlU2VydmljZSkgeyB9XHJcblxyXG4gIEBJbnB1dCgpIGRpc3BsYXkgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIHZhbHVlID0gXCJcIjtcclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gdHJ1ZTtcclxuICBASW5wdXQoKSBoaW50ID0gXCJcIjtcclxuICBASW5wdXQoKSBzdWZmaXg6IHN0cmluZztcclxuICBASW5wdXQoKSBpbmZvTWVzc2FnZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNvcHlDb250ZW50ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY2xlYXJDb250ZW50ID0gZmFsc2U7XHJcblxyXG4gIC8vIE5ldyBpbnB1dHMgZm9yIGF1dG9jb21wbGV0ZVxyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgb3B0aW9uVmFsdWUgPSBcIlwiO1xyXG5cclxuICBlbWFpbHM6IHN0cmluZ1tdID0gW107XHJcbiAgZW1haWxDb250cm9sOiBGb3JtQ29udHJvbDtcclxuICBmaWx0ZXJlZE9wdGlvbnM6IE9ic2VydmFibGU8c3RyaW5nW10+O1xyXG5cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmVtYWlsQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgW1xyXG4gICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcXFwuW2EtekEtWl17Mix9JCcpXHJcbiAgICBdKTtcclxuICAgIHRoaXMuZW1haWxzID0gdGhpcy52YWx1ZS5zcGxpdCgnOycpLmZpbHRlcihlbWFpbCA9PiBlbWFpbC50cmltKCkgIT09ICcnKTtcclxuXHJcbiAgICAvLyBTZXQgdXAgYXV0b2NvbXBsZXRlIGZpbHRlcmluZ1xyXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLmVtYWlsQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgc3RhcnRXaXRoKCcnKSxcclxuICAgICAgbWFwKHZhbHVlID0+IHRoaXMuX2ZpbHRlcih2YWx1ZSkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmlsdGVyKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zXHJcbiAgICAgIC5tYXAob3B0aW9uID0+IHRoaXMub3B0aW9uVmFsdWUgPyBvcHRpb25bdGhpcy5vcHRpb25WYWx1ZV0gOiBvcHRpb24pXHJcbiAgICAgIC5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICBhZGRFbWFpbChldmVudDogTWF0Q2hpcElucHV0RXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnZhbHVlIHx8ICcnKS50cmltKCk7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5hZGRNdWx0aXBsZUVtYWlscyh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBldmVudC5jaGlwSW5wdXQhLmNsZWFyKCk7IC8vIENsZWFyIHRoZSBpbnB1dFxyXG4gIH1cclxuXHJcbiAgYWRkTXVsdGlwbGVFbWFpbHModmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgZW1haWxzVG9BZGQgPSB0aGlzLmV4dHJhY3RFbWFpbHModmFsdWUpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZW1haWwgb2YgZW1haWxzVG9BZGQpIHtcclxuICAgICAgaWYgKHRoaXMuaXNWYWxpZEVtYWlsKGVtYWlsKSAmJiAhdGhpcy5lbWFpbHMuaW5jbHVkZXMoZW1haWwpKSB7XHJcbiAgICAgICAgdGhpcy5lbWFpbHMucHVzaChlbWFpbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVtYWlsQ29udHJvbC5zZXRWYWx1ZSgnJyk7IC8vIFJlc2V0IHRoZSBmb3JtIGNvbnRyb2xcclxuICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcclxuICAgIC8vIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWRFbWFpbChlbWFpbDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5lbWFpbENvbnRyb2wudmFsaWRhdG9yKG5ldyBGb3JtQ29udHJvbChlbWFpbCkpID09PSBudWxsO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgcGFzdGVkVGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgY29uc3QgZXh0cmFjdGVkRW1haWxzID0gdGhpcy5leHRyYWN0RW1haWxzKHBhc3RlZFRleHQpO1xyXG4gICAgdGhpcy5hZGRNdWx0aXBsZUVtYWlscyhleHRyYWN0ZWRFbWFpbHMuam9pbignOycpKTtcclxuICB9XHJcblxyXG4gIGV4dHJhY3RFbWFpbHModGV4dDogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgZW1haWxSZWdleCA9IC8oW2EtekEtWjAtOS5fLV0rQFthLXpBLVowLTkuXy1dK1xcLlthLXpBLVowLTkuXy1dKykvZ2k7XHJcbiAgICBjb25zdCBtYXRjaGVzID0gdGV4dC5tYXRjaChlbWFpbFJlZ2V4KTtcclxuICAgIHJldHVybiBtYXRjaGVzID8gbWF0Y2hlcyA6IFtdO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRW1haWwoZW1haWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmVtYWlscy5pbmRleE9mKGVtYWlsKTtcclxuICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgIHRoaXMuZW1haWxzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyRW1haWxzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lbWFpbHMgPSBbXTtcclxuICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVZhbHVlKCk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZW1haWxzLmpvaW4oJzsnKTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgb3B0aW9uU2VsZWN0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuYWRkTXVsdGlwbGVFbWFpbHMoZXZlbnQub3B0aW9uLnZpZXdWYWx1ZSk7XHJcbiAgICB0aGlzLmVtYWlsQ29udHJvbC5zZXRWYWx1ZSgnJyk7XHJcbiAgfVxyXG5cclxuICBjb3B5RW1haWxzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZW1haWxTdHJpbmcgPSB0aGlzLmVtYWlscy5qb2luKCc7Jyk7XHJcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChlbWFpbFN0cmluZykudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoJ0NvcGllZCcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XHJcbiAgPG1hdC1sYWJlbD57e2Rpc3BsYXl9fTwvbWF0LWxhYmVsPlxyXG4gIDxtYXQtY2hpcC1saXN0ICNjaGlwTGlzdD5cclxuICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgZW1haWwgb2YgZW1haWxzXCIgW3JlbW92YWJsZV09XCIhcmVhZG9ubHlcIiAocmVtb3ZlZCk9XCJyZW1vdmVFbWFpbChlbWFpbClcIj5cclxuICAgICAge3tlbWFpbH19XHJcbiAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlICpuZ0lmPVwiIXJlYWRvbmx5XCI+Y2FuY2VsPC9tYXQtaWNvbj5cclxuICAgIDwvbWF0LWNoaXA+XHJcbiAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgI2VtYWlsSW5wdXQgW3BsYWNlaG9sZGVyXT1cInJlYWRvbmx5ID8gJycgOiAnRW50ZXIgZW1haWwgYWRkcmVzc2VzJ1wiIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RcIiBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwiWzEzLCAxODZdXCIgW21hdENoaXBJbnB1dEFkZE9uQmx1cl09XCJ0cnVlXCIgKG1hdENoaXBJbnB1dFRva2VuRW5kKT1cImFkZEVtYWlsKCRldmVudClcIiBbZm9ybUNvbnRyb2xdPVwiZW1haWxDb250cm9sXCIgKHBhc3RlKT1cImhhbmRsZVBhc3RlKCRldmVudClcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIj5cclxuICA8L21hdC1jaGlwLWxpc3Q+XHJcbiAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwib3B0aW9uU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMgfCBhc3luY1wiIFt2YWx1ZV09XCJvcHRpb25WYWx1ZSA/IG9wdGlvbltvcHRpb25WYWx1ZV0gOiBvcHRpb25cIj5cclxuICAgICAge3tvcHRpb25WYWx1ZSA/IG9wdGlvbltvcHRpb25WYWx1ZV0gOiBvcHRpb259fVxyXG4gICAgPC9tYXQtb3B0aW9uPlxyXG4gIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICA8bWF0LWVycm9yICpuZ0lmPVwiZW1haWxDb250cm9sLmludmFsaWQgJiYgZW1haWxDb250cm9sLnRvdWNoZWRcIj5JbnZhbGlkIGVtYWlsIGZvcm1hdDwvbWF0LWVycm9yPlxyXG4gIDxtYXQtaGludCAqbmdJZj1cImhpbnRcIj57e2hpbnR9fTwvbWF0LWhpbnQ+XHJcbiAgPGRpdiBtYXRTdWZmaXggY2xhc3M9XCJzdWZmaXgtaWNvbnNcIj5cclxuICAgIDxzcGEtc3VmZml4IFtsYWJlbF09XCJzdWZmaXhcIiBbaW5mb01lc3NhZ2VdPVwiaW5mb01lc3NhZ2VcIiBbY29weUNvbnRlbnRdPVwiY29weUNvbnRlbnRcIiBbY2xlYXJDb250ZW50XT1cImNsZWFyQ29udGVudFwiIChjbGVhckNsaWNrKT1cImNsZWFyRW1haWxzKClcIiBbaXNIb3ZlcmVkXT1cInRydWVcIiBbKHZhbHVlKV09XCJ2YWx1ZVwiPjwvc3BhLXN1ZmZpeD5cclxuICA8L2Rpdj5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuIl19