@up_si_vale/sivale-componentes-angular 1.0.0 → 1.0.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 (94) hide show
  1. package/esm2022/lib/atoms/button/button.component.mjs +55 -0
  2. package/esm2022/lib/atoms/checkbox/checkbox.component.mjs +174 -0
  3. package/esm2022/lib/atoms/date-picker/date-picker.component.mjs +835 -0
  4. package/esm2022/lib/atoms/input/input.component.mjs +218 -0
  5. package/esm2022/lib/atoms/loader/loader.component.mjs +81 -0
  6. package/esm2022/lib/atoms/radio/radio.component.mjs +142 -0
  7. package/esm2022/lib/atoms/textarea/textarea.component.mjs +126 -0
  8. package/esm2022/lib/directives/asset-source.directive.mjs +68 -0
  9. package/esm2022/lib/directives/icon-source.directive.mjs +65 -0
  10. package/esm2022/lib/directives/no-leading-space.directive.mjs +24 -0
  11. package/esm2022/lib/directives/only-letters.directive.mjs +25 -0
  12. package/esm2022/lib/directives/only-number.directive.mjs +21 -0
  13. package/esm2022/lib/directives/rfc.directive.mjs +67 -0
  14. package/esm2022/lib/directives/tooltip.directive.mjs +199 -0
  15. package/esm2022/lib/models/snackbar.models.mjs +2 -0
  16. package/esm2022/lib/molecules/alert/alert.component.mjs +79 -0
  17. package/esm2022/lib/molecules/copy-input/copy-input.component.mjs +46 -0
  18. package/esm2022/lib/molecules/multiselect/multiselect.component.mjs +466 -0
  19. package/esm2022/lib/molecules/option/option.component.mjs +55 -0
  20. package/esm2022/lib/molecules/phone-input/phone-input.component.mjs +64 -0
  21. package/esm2022/lib/molecules/select/select.component.mjs +498 -0
  22. package/esm2022/lib/molecules/snackbar/snackbar.component.mjs +581 -0
  23. package/esm2022/lib/organisms/sidebar/sidebar-icon.component.mjs +91 -0
  24. package/esm2022/lib/organisms/sidebar/sidebar.component.mjs +115 -0
  25. package/esm2022/lib/services/snackbar.service.mjs +96 -0
  26. package/esm2022/lib/tokens/asset-base-url.token.mjs +10 -0
  27. package/esm2022/public-api.mjs +37 -0
  28. package/esm2022/up_si_vale-sivale-componentes-angular.mjs +5 -0
  29. package/fesm2022/up_si_vale-sivale-componentes-angular.mjs +4116 -0
  30. package/fesm2022/up_si_vale-sivale-componentes-angular.mjs.map +1 -0
  31. package/index.d.ts +5 -0
  32. package/lib/atoms/button/button.component.d.ts +20 -0
  33. package/lib/atoms/checkbox/checkbox.component.d.ts +31 -0
  34. package/lib/atoms/date-picker/date-picker.component.d.ts +134 -0
  35. package/lib/atoms/input/input.component.d.ts +35 -0
  36. package/lib/atoms/loader/loader.component.d.ts +10 -0
  37. package/lib/atoms/radio/radio.component.d.ts +25 -0
  38. package/lib/atoms/textarea/textarea.component.d.ts +27 -0
  39. package/lib/directives/asset-source.directive.d.ts +19 -0
  40. package/lib/directives/icon-source.directive.d.ts +18 -0
  41. package/lib/directives/no-leading-space.directive.d.ts +6 -0
  42. package/lib/directives/only-letters.directive.d.ts +7 -0
  43. package/lib/directives/only-number.directive.d.ts +6 -0
  44. package/lib/directives/rfc.directive.d.ts +12 -0
  45. package/lib/directives/tooltip.directive.d.ts +27 -0
  46. package/{src/lib/models/snackbar.models.ts → lib/models/snackbar.models.d.ts} +8 -10
  47. package/lib/molecules/alert/alert.component.d.ts +29 -0
  48. package/lib/molecules/copy-input/copy-input.component.d.ts +14 -0
  49. package/lib/molecules/multiselect/multiselect.component.d.ts +74 -0
  50. package/lib/molecules/option/option.component.d.ts +19 -0
  51. package/lib/molecules/phone-input/phone-input.component.d.ts +12 -0
  52. package/lib/molecules/select/select.component.d.ts +88 -0
  53. package/lib/molecules/snackbar/snackbar.component.d.ts +17 -0
  54. package/lib/organisms/sidebar/sidebar-icon.component.d.ts +8 -0
  55. package/lib/organisms/sidebar/sidebar.component.d.ts +47 -0
  56. package/lib/services/snackbar.service.d.ts +40 -0
  57. package/{src/lib/tokens/asset-base-url.token.ts → lib/tokens/asset-base-url.token.d.ts} +1 -5
  58. package/package.json +39 -28
  59. package/{src/public-api.ts → public-api.d.ts} +3 -15
  60. package/ng-package.json +0 -9
  61. package/src/lib/atoms/button/button.component.html +0 -21
  62. package/src/lib/atoms/button/button.component.scss +0 -242
  63. package/src/lib/atoms/button/button.component.ts +0 -43
  64. package/src/lib/atoms/checkbox/checkbox.component.scss +0 -131
  65. package/src/lib/atoms/checkbox/checkbox.component.ts +0 -130
  66. package/src/lib/atoms/date-picker/date-picker.component.html +0 -295
  67. package/src/lib/atoms/date-picker/date-picker.component.scss +0 -1002
  68. package/src/lib/atoms/date-picker/date-picker.component.ts +0 -942
  69. package/src/lib/atoms/input/input.component.ts +0 -239
  70. package/src/lib/atoms/loader/loader.component.scss +0 -144
  71. package/src/lib/atoms/loader/loader.component.ts +0 -44
  72. package/src/lib/atoms/radio/radio.component.scss +0 -115
  73. package/src/lib/atoms/radio/radio.component.ts +0 -103
  74. package/src/lib/atoms/textarea/textarea.component.ts +0 -155
  75. package/src/lib/directives/asset-source.directive.ts +0 -64
  76. package/src/lib/directives/icon-source.directive.ts +0 -74
  77. package/src/lib/directives/no-leading-space.directive.ts +0 -18
  78. package/src/lib/directives/only-letters.directive.ts +0 -21
  79. package/src/lib/directives/only-number.directive.ts +0 -15
  80. package/src/lib/directives/rfc.directive.ts +0 -60
  81. package/src/lib/directives/tooltip.directive.ts +0 -211
  82. package/src/lib/molecules/copy-input/copy-input.component.html +0 -29
  83. package/src/lib/molecules/copy-input/copy-input.component.scss +0 -101
  84. package/src/lib/molecules/copy-input/copy-input.component.ts +0 -41
  85. package/src/lib/molecules/multiselect/multiselect.component.scss +0 -298
  86. package/src/lib/molecules/multiselect/multiselect.component.ts +0 -487
  87. package/src/lib/molecules/option/option.component.ts +0 -45
  88. package/src/lib/molecules/phone-input/phone-input.component.scss +0 -78
  89. package/src/lib/molecules/phone-input/phone-input.component.ts +0 -43
  90. package/src/lib/molecules/select/select.component.ts +0 -482
  91. package/src/lib/molecules/snackbar/snackbar.component.scss +0 -201
  92. package/src/lib/molecules/snackbar/snackbar.component.ts +0 -321
  93. package/src/lib/services/snackbar.service.ts +0 -103
  94. package/tsconfig.json +0 -31
@@ -0,0 +1,581 @@
1
+ import { Component } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../services/snackbar.service";
5
+ import * as i2 from "@angular/common";
6
+ export class SnackbarComponent {
7
+ snackbarService;
8
+ snackbars = [];
9
+ subscriptions = [];
10
+ constructor(snackbarService) {
11
+ this.snackbarService = snackbarService;
12
+ }
13
+ ngOnInit() {
14
+ // Subscribe to new snackbars
15
+ const snackbarSub = this.snackbarService.snackbar$.subscribe((snackbar) => {
16
+ this.snackbars.push(snackbar);
17
+ });
18
+ this.subscriptions.push(snackbarSub);
19
+ // Subscribe to dismiss events
20
+ const dismissSub = this.snackbarService.dismiss$.subscribe((id) => {
21
+ if (id === 'all') {
22
+ this.snackbars = [];
23
+ }
24
+ else {
25
+ this.snackbars = this.snackbars.filter(s => s.id !== id);
26
+ }
27
+ });
28
+ this.subscriptions.push(dismissSub);
29
+ }
30
+ ngOnDestroy() {
31
+ this.subscriptions.forEach(sub => sub.unsubscribe());
32
+ }
33
+ getSnackbarsByPosition(position) {
34
+ return this.snackbars.filter(s => s.position === position);
35
+ }
36
+ dismiss(id) {
37
+ this.snackbars = this.snackbars.filter(s => s.id !== id);
38
+ this.snackbarService.dismiss(id);
39
+ }
40
+ handleAction(snackbar) {
41
+ if (snackbar.actionCallback) {
42
+ snackbar.actionCallback();
43
+ }
44
+ this.dismiss(snackbar.id);
45
+ }
46
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SnackbarComponent, deps: [{ token: i1.SnackbarService }], target: i0.ɵɵFactoryTarget.Component });
47
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SnackbarComponent, isStandalone: true, selector: "app-snackbar", ngImport: i0, template: `
48
+ <!-- Top Right -->
49
+ <div class="snackbar-container snackbar-container--top-right" *ngIf="getSnackbarsByPosition('top-right').length > 0">
50
+ <div
51
+ *ngFor="let snackbar of getSnackbarsByPosition('top-right')"
52
+ class="snackbar"
53
+ [class.snackbar--success]="snackbar.type === 'success'"
54
+ [class.snackbar--error]="snackbar.type === 'error'"
55
+ [class.snackbar--warning]="snackbar.type === 'warning'"
56
+ [class.snackbar--info]="snackbar.type === 'info'"
57
+ >
58
+ <div class="snackbar__icon">
59
+ <svg *ngIf="snackbar.type === 'success'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
60
+ <path d="M16.6667 5L7.50004 14.1667L3.33337 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
61
+ </svg>
62
+ <svg *ngIf="snackbar.type === 'error'" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
63
+ <path d="M11.96 2.37695C13.2212 2.38797 14.4681 2.65061 15.627 3.14844C16.7858 3.64631 17.8337 4.37013 18.71 5.27734L18.7158 5.2832L18.7227 5.28906C19.63 6.1654 20.3537 7.21402 20.8516 8.37305C21.3494 9.53204 21.6111 10.7787 21.6221 12.04C21.633 13.3014 21.3927 14.5523 20.915 15.7197C20.4374 16.8872 19.7318 17.9479 18.8398 18.8398C17.9479 19.7318 16.8872 20.4374 15.7197 20.915C14.5523 21.3927 13.3014 21.633 12.04 21.6221C10.7787 21.6111 9.53204 21.3494 8.37305 20.8516C7.21402 20.3537 6.1654 19.63 5.28906 18.7227L5.2832 18.7158L5.27734 18.71L4.94531 18.374C4.19221 17.5705 3.58408 16.641 3.14844 15.627C2.65061 14.4681 2.38797 13.2212 2.37695 11.96C2.36599 10.6986 2.60632 9.44681 3.08398 8.2793C3.56165 7.11184 4.26724 6.05112 5.15918 5.15918C6.05112 4.26724 7.11184 3.56165 8.2793 3.08398C9.44681 2.60632 10.6986 2.36599 11.96 2.37695ZM13.6523 3.66797C11.7234 3.28574 9.7209 3.58451 7.9873 4.5127C6.25388 5.4409 4.89578 6.94166 4.14453 8.75879C3.39335 10.5759 3.29528 12.5973 3.86719 14.4785C4.43922 16.3599 5.64653 17.9847 7.28223 19.0762C8.91789 20.1676 10.8811 20.6587 12.8379 20.4648C14.7947 20.271 16.623 19.4038 18.0127 18.0127C18.8041 17.2243 19.4316 16.2872 19.8584 15.2549C20.2319 14.3515 20.4462 13.3914 20.4912 12.417L20.5 11.998C20.4981 10.0321 19.8148 8.12717 18.5664 6.6084C17.3178 5.08945 15.5811 4.05022 13.6523 3.66797ZM15 8.49414C15.0659 8.49416 15.1315 8.50686 15.1924 8.53223C15.2531 8.55755 15.3081 8.59493 15.3545 8.6416L15.3574 8.64453C15.4043 8.69099 15.4414 8.74672 15.4668 8.80762C15.4922 8.86855 15.5059 8.93399 15.5059 9C15.5058 9.06595 15.4922 9.1315 15.4668 9.19238C15.4414 9.25316 15.4042 9.3081 15.3574 9.35449V9.35547L13.0566 11.6455L12.7012 12L13.0566 12.3545L15.3574 14.6445C15.4043 14.691 15.4414 14.7467 15.4668 14.8076C15.4922 14.8685 15.5059 14.934 15.5059 15C15.5058 15.0659 15.4922 15.1315 15.4668 15.1924C15.4414 15.2532 15.4042 15.3081 15.3574 15.3545L15.3545 15.3574C15.3081 15.4042 15.2532 15.4414 15.1924 15.4668C15.1315 15.4922 15.0659 15.5058 15 15.5059C14.934 15.5059 14.8685 15.4922 14.8076 15.4668C14.7467 15.4414 14.691 15.4043 14.6445 15.3574L12.3545 13.0566L12 12.7012L11.6455 13.0566L9.35547 15.3574H9.35449C9.3081 15.4042 9.25316 15.4414 9.19238 15.4668C9.1315 15.4922 9.06595 15.5058 9 15.5059C8.93399 15.5059 8.86855 15.4922 8.80762 15.4668C8.74672 15.4414 8.69099 15.4043 8.64453 15.3574L8.6416 15.3545C8.59493 15.3081 8.55755 15.2531 8.53223 15.1924C8.50686 15.1315 8.49416 15.0659 8.49414 15C8.49414 14.9341 8.50688 14.8685 8.53223 14.8076C8.55761 14.7467 8.59475 14.691 8.6416 14.6445H8.64258L10.9424 12.3545L11.2988 12L10.9424 11.6455L8.64258 9.35547C8.54859 9.26105 8.49614 9.13325 8.49609 9C8.49609 8.86631 8.54902 8.73809 8.64355 8.64355C8.73809 8.54902 8.86631 8.49609 9 8.49609C9.10009 8.49613 9.1972 8.52542 9.2793 8.58008L9.35645 8.64355L11.6455 10.9424L12 11.2988L12.3545 10.9424L14.6445 8.64258V8.6416C14.691 8.59475 14.7467 8.55761 14.8076 8.53223C14.8685 8.50688 14.9341 8.49414 15 8.49414Z" stroke="#F04438"/>
64
+ </svg>
65
+ <svg *ngIf="snackbar.type === 'warning'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
66
+ <path d="M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
67
+ </svg>
68
+ <svg *ngIf="snackbar.type === 'info'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
69
+ <path d="M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
70
+ </svg>
71
+ </div>
72
+ <div class="snackbar__content">
73
+ <p class="snackbar__message">{{ snackbar.message }}</p>
74
+ </div>
75
+ <button
76
+ *ngIf="snackbar.action"
77
+ class="snackbar__action"
78
+ (click)="handleAction(snackbar)">
79
+ {{ snackbar.action }}
80
+ </button>
81
+ <button
82
+ class="snackbar__close"
83
+ (click)="dismiss(snackbar.id)"
84
+ aria-label="Cerrar">
85
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
86
+ <path d="M13 1L1 13M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
87
+ </svg>
88
+ </button>
89
+ </div>
90
+ </div>
91
+
92
+ <!-- Top Left -->
93
+ <div class="snackbar-container snackbar-container--top-left" *ngIf="getSnackbarsByPosition('top-left').length > 0">
94
+ <div
95
+ *ngFor="let snackbar of getSnackbarsByPosition('top-left')"
96
+ class="snackbar"
97
+ [class.snackbar--success]="snackbar.type === 'success'"
98
+ [class.snackbar--error]="snackbar.type === 'error'"
99
+ [class.snackbar--warning]="snackbar.type === 'warning'"
100
+ [class.snackbar--info]="snackbar.type === 'info'"
101
+ >
102
+ <div class="snackbar__icon">
103
+ <svg *ngIf="snackbar.type === 'success'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
104
+ <path d="M16.6667 5L7.50004 14.1667L3.33337 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
105
+ </svg>
106
+ <svg *ngIf="snackbar.type === 'error'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
107
+ <path d="M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
108
+ </svg>
109
+ <svg *ngIf="snackbar.type === 'warning'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
110
+ <path d="M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
111
+ </svg>
112
+ <svg *ngIf="snackbar.type === 'info'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
113
+ <path d="M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
114
+ </svg>
115
+ </div>
116
+ <div class="snackbar__content">
117
+ <p class="snackbar__message">{{ snackbar.message }}</p>
118
+ </div>
119
+ <button
120
+ *ngIf="snackbar.action"
121
+ class="snackbar__action"
122
+ (click)="handleAction(snackbar)">
123
+ {{ snackbar.action }}
124
+ </button>
125
+ <button
126
+ class="snackbar__close"
127
+ (click)="dismiss(snackbar.id)"
128
+ aria-label="Cerrar">
129
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
130
+ <path d="M13 1L1 13M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
131
+ </svg>
132
+ </button>
133
+ </div>
134
+ </div>
135
+
136
+ <!-- Top Center -->
137
+ <div class="snackbar-container snackbar-container--top-center" *ngIf="getSnackbarsByPosition('top-center').length > 0">
138
+ <div
139
+ *ngFor="let snackbar of getSnackbarsByPosition('top-center')"
140
+ class="snackbar"
141
+ [class.snackbar--success]="snackbar.type === 'success'"
142
+ [class.snackbar--error]="snackbar.type === 'error'"
143
+ [class.snackbar--warning]="snackbar.type === 'warning'"
144
+ [class.snackbar--info]="snackbar.type === 'info'"
145
+ >
146
+ <div class="snackbar__icon">
147
+ <svg *ngIf="snackbar.type === 'success'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
148
+ <path d="M16.6667 5L7.50004 14.1667L3.33337 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
149
+ </svg>
150
+ <svg *ngIf="snackbar.type === 'error'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
151
+ <path d="M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
152
+ </svg>
153
+ <svg *ngIf="snackbar.type === 'warning'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
154
+ <path d="M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
155
+ </svg>
156
+ <svg *ngIf="snackbar.type === 'info'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
157
+ <path d="M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
158
+ </svg>
159
+ </div>
160
+ <div class="snackbar__content">
161
+ <p class="snackbar__message">{{ snackbar.message }}</p>
162
+ </div>
163
+ <button
164
+ *ngIf="snackbar.action"
165
+ class="snackbar__action"
166
+ (click)="handleAction(snackbar)">
167
+ {{ snackbar.action }}
168
+ </button>
169
+ <button
170
+ class="snackbar__close"
171
+ (click)="dismiss(snackbar.id)"
172
+ aria-label="Cerrar">
173
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
174
+ <path d="M13 1L1 13M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
175
+ </svg>
176
+ </button>
177
+ </div>
178
+ </div>
179
+
180
+ <!-- Bottom Right -->
181
+ <div class="snackbar-container snackbar-container--bottom-right" *ngIf="getSnackbarsByPosition('bottom-right').length > 0">
182
+ <div
183
+ *ngFor="let snackbar of getSnackbarsByPosition('bottom-right')"
184
+ class="snackbar"
185
+ [class.snackbar--success]="snackbar.type === 'success'"
186
+ [class.snackbar--error]="snackbar.type === 'error'"
187
+ [class.snackbar--warning]="snackbar.type === 'warning'"
188
+ [class.snackbar--info]="snackbar.type === 'info'"
189
+ >
190
+ <div class="snackbar__icon">
191
+ <svg *ngIf="snackbar.type === 'success'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
192
+ <path d="M16.6667 5L7.50004 14.1667L3.33337 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
193
+ </svg>
194
+ <svg *ngIf="snackbar.type === 'error'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
195
+ <path d="M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
196
+ </svg>
197
+ <svg *ngIf="snackbar.type === 'warning'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
198
+ <path d="M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
199
+ </svg>
200
+ <svg *ngIf="snackbar.type === 'info'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
201
+ <path d="M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
202
+ </svg>
203
+ </div>
204
+ <div class="snackbar__content">
205
+ <p class="snackbar__message">{{ snackbar.message }}</p>
206
+ </div>
207
+ <button
208
+ *ngIf="snackbar.action"
209
+ class="snackbar__action"
210
+ (click)="handleAction(snackbar)">
211
+ {{ snackbar.action }}
212
+ </button>
213
+ <button
214
+ class="snackbar__close"
215
+ (click)="dismiss(snackbar.id)"
216
+ aria-label="Cerrar">
217
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
218
+ <path d="M13 1L1 13M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
219
+ </svg>
220
+ </button>
221
+ </div>
222
+ </div>
223
+
224
+ <!-- Bottom Left -->
225
+ <div class="snackbar-container snackbar-container--bottom-left" *ngIf="getSnackbarsByPosition('bottom-left').length > 0">
226
+ <div
227
+ *ngFor="let snackbar of getSnackbarsByPosition('bottom-left')"
228
+ class="snackbar"
229
+ [class.snackbar--success]="snackbar.type === 'success'"
230
+ [class.snackbar--error]="snackbar.type === 'error'"
231
+ [class.snackbar--warning]="snackbar.type === 'warning'"
232
+ [class.snackbar--info]="snackbar.type === 'info'"
233
+ >
234
+ <div class="snackbar__icon">
235
+ <svg *ngIf="snackbar.type === 'success'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
236
+ <path d="M16.6667 5L7.50004 14.1667L3.33337 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
237
+ </svg>
238
+ <svg *ngIf="snackbar.type === 'error'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
239
+ <path d="M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
240
+ </svg>
241
+ <svg *ngIf="snackbar.type === 'warning'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
242
+ <path d="M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
243
+ </svg>
244
+ <svg *ngIf="snackbar.type === 'info'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
245
+ <path d="M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
246
+ </svg>
247
+ </div>
248
+ <div class="snackbar__content">
249
+ <p class="snackbar__message">{{ snackbar.message }}</p>
250
+ </div>
251
+ <button
252
+ *ngIf="snackbar.action"
253
+ class="snackbar__action"
254
+ (click)="handleAction(snackbar)">
255
+ {{ snackbar.action }}
256
+ </button>
257
+ <button
258
+ class="snackbar__close"
259
+ (click)="dismiss(snackbar.id)"
260
+ aria-label="Cerrar">
261
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
262
+ <path d="M13 1L1 13M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
263
+ </svg>
264
+ </button>
265
+ </div>
266
+ </div>
267
+
268
+ <!-- Bottom Center -->
269
+ <div class="snackbar-container snackbar-container--bottom-center" *ngIf="getSnackbarsByPosition('bottom-center').length > 0">
270
+ <div
271
+ *ngFor="let snackbar of getSnackbarsByPosition('bottom-center')"
272
+ class="snackbar"
273
+ [class.snackbar--success]="snackbar.type === 'success'"
274
+ [class.snackbar--error]="snackbar.type === 'error'"
275
+ [class.snackbar--warning]="snackbar.type === 'warning'"
276
+ [class.snackbar--info]="snackbar.type === 'info'"
277
+ >
278
+ <div class="snackbar__icon">
279
+ <svg *ngIf="snackbar.type === 'success'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
280
+ <path d="M16.6667 5L7.50004 14.1667L3.33337 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
281
+ </svg>
282
+ <svg *ngIf="snackbar.type === 'error'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
283
+ <path d="M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
284
+ </svg>
285
+ <svg *ngIf="snackbar.type === 'warning'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
286
+ <path d="M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
287
+ </svg>
288
+ <svg *ngIf="snackbar.type === 'info'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
289
+ <path d="M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
290
+ </svg>
291
+ </div>
292
+ <div class="snackbar__content">
293
+ <p class="snackbar__message">{{ snackbar.message }}</p>
294
+ </div>
295
+ <button
296
+ *ngIf="snackbar.action"
297
+ class="snackbar__action"
298
+ (click)="handleAction(snackbar)">
299
+ {{ snackbar.action }}
300
+ </button>
301
+ <button
302
+ class="snackbar__close"
303
+ (click)="dismiss(snackbar.id)"
304
+ aria-label="Cerrar">
305
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
306
+ <path d="M13 1L1 13M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
307
+ </svg>
308
+ </button>
309
+ </div>
310
+ </div>
311
+ `, isInline: true, styles: [".snackbar-container{position:fixed;z-index:999999;display:flex;flex-direction:column;gap:12px;max-width:644px;pointer-events:none}.snackbar-container--top-right{top:24px;right:24px}.snackbar-container--top-left{top:24px;left:24px}.snackbar-container--top-center{top:24px;left:50%;transform:translate(-50%)}.snackbar-container--bottom-right{bottom:24px;right:24px}.snackbar-container--bottom-left{bottom:24px;left:24px}.snackbar-container--bottom-center{bottom:24px;left:50%;transform:translate(-50%)}@media (max-width: 640px){.snackbar-container{left:16px!important;right:16px!important;max-width:none;transform:none!important}.snackbar-container--top-right,.snackbar-container--top-left,.snackbar-container--top-center{top:16px}.snackbar-container--bottom-right,.snackbar-container--bottom-left,.snackbar-container--bottom-center{bottom:16px}}.snackbar{display:flex;align-items:center;gap:12px;padding:16px;border-radius:8px;box-shadow:0 4px 12px #00000026;background:#fff;pointer-events:auto;min-width:300px;max-width:644px;animation:slideIn .3s ease-out}@keyframes slideIn{0%{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}@media (max-width: 640px){.snackbar{min-width:auto;max-width:none}}.snackbar--success{background:#f0fdf4;border:1px solid #22c55e}.snackbar--success .snackbar__icon{color:#22c55e}.snackbar--error{background:#fef3f2;border:1px solid #F04438}.snackbar--error .snackbar__icon{color:#f04438}.snackbar--warning{background:#fffbeb;border:1px solid #f59e0b}.snackbar--warning .snackbar__icon{color:#f59e0b}.snackbar--info{background:#eff6ff;border:1px solid #3b82f6}.snackbar--info .snackbar__icon{color:#3b82f6}.snackbar__icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:20px;height:20px}.snackbar__content{flex:1;min-width:0}.snackbar__message{margin:0;line-height:20px;word-wrap:break-word;font-family:Quicksand,sans-serif;font-weight:600;font-size:14px;color:#2e353a}.snackbar__action{flex-shrink:0;padding:6px 12px;border:none;border-radius:4px;background:transparent;color:inherit;font-size:14px;font-weight:600;cursor:pointer;transition:background-color .2s}.snackbar__action:hover{background:#0000000d}.snackbar__action:active{background:#0000001a}.snackbar__close{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:4px;background:transparent;color:#2e353a;cursor:pointer;transition:all .2s}.snackbar__close:hover{background:#0000000d;color:#1f2937}.snackbar__close:active{background:#0000001a}.snackbar__close svg{width:14px;height:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
312
+ }
313
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SnackbarComponent, decorators: [{
314
+ type: Component,
315
+ args: [{ selector: 'app-snackbar', standalone: true, imports: [CommonModule], template: `
316
+ <!-- Top Right -->
317
+ <div class="snackbar-container snackbar-container--top-right" *ngIf="getSnackbarsByPosition('top-right').length > 0">
318
+ <div
319
+ *ngFor="let snackbar of getSnackbarsByPosition('top-right')"
320
+ class="snackbar"
321
+ [class.snackbar--success]="snackbar.type === 'success'"
322
+ [class.snackbar--error]="snackbar.type === 'error'"
323
+ [class.snackbar--warning]="snackbar.type === 'warning'"
324
+ [class.snackbar--info]="snackbar.type === 'info'"
325
+ >
326
+ <div class="snackbar__icon">
327
+ <svg *ngIf="snackbar.type === 'success'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
328
+ <path d="M16.6667 5L7.50004 14.1667L3.33337 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
329
+ </svg>
330
+ <svg *ngIf="snackbar.type === 'error'" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
331
+ <path d="M11.96 2.37695C13.2212 2.38797 14.4681 2.65061 15.627 3.14844C16.7858 3.64631 17.8337 4.37013 18.71 5.27734L18.7158 5.2832L18.7227 5.28906C19.63 6.1654 20.3537 7.21402 20.8516 8.37305C21.3494 9.53204 21.6111 10.7787 21.6221 12.04C21.633 13.3014 21.3927 14.5523 20.915 15.7197C20.4374 16.8872 19.7318 17.9479 18.8398 18.8398C17.9479 19.7318 16.8872 20.4374 15.7197 20.915C14.5523 21.3927 13.3014 21.633 12.04 21.6221C10.7787 21.6111 9.53204 21.3494 8.37305 20.8516C7.21402 20.3537 6.1654 19.63 5.28906 18.7227L5.2832 18.7158L5.27734 18.71L4.94531 18.374C4.19221 17.5705 3.58408 16.641 3.14844 15.627C2.65061 14.4681 2.38797 13.2212 2.37695 11.96C2.36599 10.6986 2.60632 9.44681 3.08398 8.2793C3.56165 7.11184 4.26724 6.05112 5.15918 5.15918C6.05112 4.26724 7.11184 3.56165 8.2793 3.08398C9.44681 2.60632 10.6986 2.36599 11.96 2.37695ZM13.6523 3.66797C11.7234 3.28574 9.7209 3.58451 7.9873 4.5127C6.25388 5.4409 4.89578 6.94166 4.14453 8.75879C3.39335 10.5759 3.29528 12.5973 3.86719 14.4785C4.43922 16.3599 5.64653 17.9847 7.28223 19.0762C8.91789 20.1676 10.8811 20.6587 12.8379 20.4648C14.7947 20.271 16.623 19.4038 18.0127 18.0127C18.8041 17.2243 19.4316 16.2872 19.8584 15.2549C20.2319 14.3515 20.4462 13.3914 20.4912 12.417L20.5 11.998C20.4981 10.0321 19.8148 8.12717 18.5664 6.6084C17.3178 5.08945 15.5811 4.05022 13.6523 3.66797ZM15 8.49414C15.0659 8.49416 15.1315 8.50686 15.1924 8.53223C15.2531 8.55755 15.3081 8.59493 15.3545 8.6416L15.3574 8.64453C15.4043 8.69099 15.4414 8.74672 15.4668 8.80762C15.4922 8.86855 15.5059 8.93399 15.5059 9C15.5058 9.06595 15.4922 9.1315 15.4668 9.19238C15.4414 9.25316 15.4042 9.3081 15.3574 9.35449V9.35547L13.0566 11.6455L12.7012 12L13.0566 12.3545L15.3574 14.6445C15.4043 14.691 15.4414 14.7467 15.4668 14.8076C15.4922 14.8685 15.5059 14.934 15.5059 15C15.5058 15.0659 15.4922 15.1315 15.4668 15.1924C15.4414 15.2532 15.4042 15.3081 15.3574 15.3545L15.3545 15.3574C15.3081 15.4042 15.2532 15.4414 15.1924 15.4668C15.1315 15.4922 15.0659 15.5058 15 15.5059C14.934 15.5059 14.8685 15.4922 14.8076 15.4668C14.7467 15.4414 14.691 15.4043 14.6445 15.3574L12.3545 13.0566L12 12.7012L11.6455 13.0566L9.35547 15.3574H9.35449C9.3081 15.4042 9.25316 15.4414 9.19238 15.4668C9.1315 15.4922 9.06595 15.5058 9 15.5059C8.93399 15.5059 8.86855 15.4922 8.80762 15.4668C8.74672 15.4414 8.69099 15.4043 8.64453 15.3574L8.6416 15.3545C8.59493 15.3081 8.55755 15.2531 8.53223 15.1924C8.50686 15.1315 8.49416 15.0659 8.49414 15C8.49414 14.9341 8.50688 14.8685 8.53223 14.8076C8.55761 14.7467 8.59475 14.691 8.6416 14.6445H8.64258L10.9424 12.3545L11.2988 12L10.9424 11.6455L8.64258 9.35547C8.54859 9.26105 8.49614 9.13325 8.49609 9C8.49609 8.86631 8.54902 8.73809 8.64355 8.64355C8.73809 8.54902 8.86631 8.49609 9 8.49609C9.10009 8.49613 9.1972 8.52542 9.2793 8.58008L9.35645 8.64355L11.6455 10.9424L12 11.2988L12.3545 10.9424L14.6445 8.64258V8.6416C14.691 8.59475 14.7467 8.55761 14.8076 8.53223C14.8685 8.50688 14.9341 8.49414 15 8.49414Z" stroke="#F04438"/>
332
+ </svg>
333
+ <svg *ngIf="snackbar.type === 'warning'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
334
+ <path d="M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
335
+ </svg>
336
+ <svg *ngIf="snackbar.type === 'info'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
337
+ <path d="M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
338
+ </svg>
339
+ </div>
340
+ <div class="snackbar__content">
341
+ <p class="snackbar__message">{{ snackbar.message }}</p>
342
+ </div>
343
+ <button
344
+ *ngIf="snackbar.action"
345
+ class="snackbar__action"
346
+ (click)="handleAction(snackbar)">
347
+ {{ snackbar.action }}
348
+ </button>
349
+ <button
350
+ class="snackbar__close"
351
+ (click)="dismiss(snackbar.id)"
352
+ aria-label="Cerrar">
353
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
354
+ <path d="M13 1L1 13M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
355
+ </svg>
356
+ </button>
357
+ </div>
358
+ </div>
359
+
360
+ <!-- Top Left -->
361
+ <div class="snackbar-container snackbar-container--top-left" *ngIf="getSnackbarsByPosition('top-left').length > 0">
362
+ <div
363
+ *ngFor="let snackbar of getSnackbarsByPosition('top-left')"
364
+ class="snackbar"
365
+ [class.snackbar--success]="snackbar.type === 'success'"
366
+ [class.snackbar--error]="snackbar.type === 'error'"
367
+ [class.snackbar--warning]="snackbar.type === 'warning'"
368
+ [class.snackbar--info]="snackbar.type === 'info'"
369
+ >
370
+ <div class="snackbar__icon">
371
+ <svg *ngIf="snackbar.type === 'success'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
372
+ <path d="M16.6667 5L7.50004 14.1667L3.33337 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
373
+ </svg>
374
+ <svg *ngIf="snackbar.type === 'error'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
375
+ <path d="M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
376
+ </svg>
377
+ <svg *ngIf="snackbar.type === 'warning'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
378
+ <path d="M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
379
+ </svg>
380
+ <svg *ngIf="snackbar.type === 'info'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
381
+ <path d="M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
382
+ </svg>
383
+ </div>
384
+ <div class="snackbar__content">
385
+ <p class="snackbar__message">{{ snackbar.message }}</p>
386
+ </div>
387
+ <button
388
+ *ngIf="snackbar.action"
389
+ class="snackbar__action"
390
+ (click)="handleAction(snackbar)">
391
+ {{ snackbar.action }}
392
+ </button>
393
+ <button
394
+ class="snackbar__close"
395
+ (click)="dismiss(snackbar.id)"
396
+ aria-label="Cerrar">
397
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
398
+ <path d="M13 1L1 13M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
399
+ </svg>
400
+ </button>
401
+ </div>
402
+ </div>
403
+
404
+ <!-- Top Center -->
405
+ <div class="snackbar-container snackbar-container--top-center" *ngIf="getSnackbarsByPosition('top-center').length > 0">
406
+ <div
407
+ *ngFor="let snackbar of getSnackbarsByPosition('top-center')"
408
+ class="snackbar"
409
+ [class.snackbar--success]="snackbar.type === 'success'"
410
+ [class.snackbar--error]="snackbar.type === 'error'"
411
+ [class.snackbar--warning]="snackbar.type === 'warning'"
412
+ [class.snackbar--info]="snackbar.type === 'info'"
413
+ >
414
+ <div class="snackbar__icon">
415
+ <svg *ngIf="snackbar.type === 'success'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
416
+ <path d="M16.6667 5L7.50004 14.1667L3.33337 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
417
+ </svg>
418
+ <svg *ngIf="snackbar.type === 'error'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
419
+ <path d="M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
420
+ </svg>
421
+ <svg *ngIf="snackbar.type === 'warning'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
422
+ <path d="M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
423
+ </svg>
424
+ <svg *ngIf="snackbar.type === 'info'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
425
+ <path d="M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
426
+ </svg>
427
+ </div>
428
+ <div class="snackbar__content">
429
+ <p class="snackbar__message">{{ snackbar.message }}</p>
430
+ </div>
431
+ <button
432
+ *ngIf="snackbar.action"
433
+ class="snackbar__action"
434
+ (click)="handleAction(snackbar)">
435
+ {{ snackbar.action }}
436
+ </button>
437
+ <button
438
+ class="snackbar__close"
439
+ (click)="dismiss(snackbar.id)"
440
+ aria-label="Cerrar">
441
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
442
+ <path d="M13 1L1 13M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
443
+ </svg>
444
+ </button>
445
+ </div>
446
+ </div>
447
+
448
+ <!-- Bottom Right -->
449
+ <div class="snackbar-container snackbar-container--bottom-right" *ngIf="getSnackbarsByPosition('bottom-right').length > 0">
450
+ <div
451
+ *ngFor="let snackbar of getSnackbarsByPosition('bottom-right')"
452
+ class="snackbar"
453
+ [class.snackbar--success]="snackbar.type === 'success'"
454
+ [class.snackbar--error]="snackbar.type === 'error'"
455
+ [class.snackbar--warning]="snackbar.type === 'warning'"
456
+ [class.snackbar--info]="snackbar.type === 'info'"
457
+ >
458
+ <div class="snackbar__icon">
459
+ <svg *ngIf="snackbar.type === 'success'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
460
+ <path d="M16.6667 5L7.50004 14.1667L3.33337 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
461
+ </svg>
462
+ <svg *ngIf="snackbar.type === 'error'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
463
+ <path d="M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
464
+ </svg>
465
+ <svg *ngIf="snackbar.type === 'warning'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
466
+ <path d="M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
467
+ </svg>
468
+ <svg *ngIf="snackbar.type === 'info'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
469
+ <path d="M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
470
+ </svg>
471
+ </div>
472
+ <div class="snackbar__content">
473
+ <p class="snackbar__message">{{ snackbar.message }}</p>
474
+ </div>
475
+ <button
476
+ *ngIf="snackbar.action"
477
+ class="snackbar__action"
478
+ (click)="handleAction(snackbar)">
479
+ {{ snackbar.action }}
480
+ </button>
481
+ <button
482
+ class="snackbar__close"
483
+ (click)="dismiss(snackbar.id)"
484
+ aria-label="Cerrar">
485
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
486
+ <path d="M13 1L1 13M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
487
+ </svg>
488
+ </button>
489
+ </div>
490
+ </div>
491
+
492
+ <!-- Bottom Left -->
493
+ <div class="snackbar-container snackbar-container--bottom-left" *ngIf="getSnackbarsByPosition('bottom-left').length > 0">
494
+ <div
495
+ *ngFor="let snackbar of getSnackbarsByPosition('bottom-left')"
496
+ class="snackbar"
497
+ [class.snackbar--success]="snackbar.type === 'success'"
498
+ [class.snackbar--error]="snackbar.type === 'error'"
499
+ [class.snackbar--warning]="snackbar.type === 'warning'"
500
+ [class.snackbar--info]="snackbar.type === 'info'"
501
+ >
502
+ <div class="snackbar__icon">
503
+ <svg *ngIf="snackbar.type === 'success'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
504
+ <path d="M16.6667 5L7.50004 14.1667L3.33337 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
505
+ </svg>
506
+ <svg *ngIf="snackbar.type === 'error'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
507
+ <path d="M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
508
+ </svg>
509
+ <svg *ngIf="snackbar.type === 'warning'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
510
+ <path d="M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
511
+ </svg>
512
+ <svg *ngIf="snackbar.type === 'info'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
513
+ <path d="M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
514
+ </svg>
515
+ </div>
516
+ <div class="snackbar__content">
517
+ <p class="snackbar__message">{{ snackbar.message }}</p>
518
+ </div>
519
+ <button
520
+ *ngIf="snackbar.action"
521
+ class="snackbar__action"
522
+ (click)="handleAction(snackbar)">
523
+ {{ snackbar.action }}
524
+ </button>
525
+ <button
526
+ class="snackbar__close"
527
+ (click)="dismiss(snackbar.id)"
528
+ aria-label="Cerrar">
529
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
530
+ <path d="M13 1L1 13M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
531
+ </svg>
532
+ </button>
533
+ </div>
534
+ </div>
535
+
536
+ <!-- Bottom Center -->
537
+ <div class="snackbar-container snackbar-container--bottom-center" *ngIf="getSnackbarsByPosition('bottom-center').length > 0">
538
+ <div
539
+ *ngFor="let snackbar of getSnackbarsByPosition('bottom-center')"
540
+ class="snackbar"
541
+ [class.snackbar--success]="snackbar.type === 'success'"
542
+ [class.snackbar--error]="snackbar.type === 'error'"
543
+ [class.snackbar--warning]="snackbar.type === 'warning'"
544
+ [class.snackbar--info]="snackbar.type === 'info'"
545
+ >
546
+ <div class="snackbar__icon">
547
+ <svg *ngIf="snackbar.type === 'success'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
548
+ <path d="M16.6667 5L7.50004 14.1667L3.33337 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
549
+ </svg>
550
+ <svg *ngIf="snackbar.type === 'error'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
551
+ <path d="M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
552
+ </svg>
553
+ <svg *ngIf="snackbar.type === 'warning'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
554
+ <path d="M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
555
+ </svg>
556
+ <svg *ngIf="snackbar.type === 'info'" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
557
+ <path d="M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
558
+ </svg>
559
+ </div>
560
+ <div class="snackbar__content">
561
+ <p class="snackbar__message">{{ snackbar.message }}</p>
562
+ </div>
563
+ <button
564
+ *ngIf="snackbar.action"
565
+ class="snackbar__action"
566
+ (click)="handleAction(snackbar)">
567
+ {{ snackbar.action }}
568
+ </button>
569
+ <button
570
+ class="snackbar__close"
571
+ (click)="dismiss(snackbar.id)"
572
+ aria-label="Cerrar">
573
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
574
+ <path d="M13 1L1 13M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
575
+ </svg>
576
+ </button>
577
+ </div>
578
+ </div>
579
+ `, styles: [".snackbar-container{position:fixed;z-index:999999;display:flex;flex-direction:column;gap:12px;max-width:644px;pointer-events:none}.snackbar-container--top-right{top:24px;right:24px}.snackbar-container--top-left{top:24px;left:24px}.snackbar-container--top-center{top:24px;left:50%;transform:translate(-50%)}.snackbar-container--bottom-right{bottom:24px;right:24px}.snackbar-container--bottom-left{bottom:24px;left:24px}.snackbar-container--bottom-center{bottom:24px;left:50%;transform:translate(-50%)}@media (max-width: 640px){.snackbar-container{left:16px!important;right:16px!important;max-width:none;transform:none!important}.snackbar-container--top-right,.snackbar-container--top-left,.snackbar-container--top-center{top:16px}.snackbar-container--bottom-right,.snackbar-container--bottom-left,.snackbar-container--bottom-center{bottom:16px}}.snackbar{display:flex;align-items:center;gap:12px;padding:16px;border-radius:8px;box-shadow:0 4px 12px #00000026;background:#fff;pointer-events:auto;min-width:300px;max-width:644px;animation:slideIn .3s ease-out}@keyframes slideIn{0%{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}@media (max-width: 640px){.snackbar{min-width:auto;max-width:none}}.snackbar--success{background:#f0fdf4;border:1px solid #22c55e}.snackbar--success .snackbar__icon{color:#22c55e}.snackbar--error{background:#fef3f2;border:1px solid #F04438}.snackbar--error .snackbar__icon{color:#f04438}.snackbar--warning{background:#fffbeb;border:1px solid #f59e0b}.snackbar--warning .snackbar__icon{color:#f59e0b}.snackbar--info{background:#eff6ff;border:1px solid #3b82f6}.snackbar--info .snackbar__icon{color:#3b82f6}.snackbar__icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:20px;height:20px}.snackbar__content{flex:1;min-width:0}.snackbar__message{margin:0;line-height:20px;word-wrap:break-word;font-family:Quicksand,sans-serif;font-weight:600;font-size:14px;color:#2e353a}.snackbar__action{flex-shrink:0;padding:6px 12px;border:none;border-radius:4px;background:transparent;color:inherit;font-size:14px;font-weight:600;cursor:pointer;transition:background-color .2s}.snackbar__action:hover{background:#0000000d}.snackbar__action:active{background:#0000001a}.snackbar__close{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:4px;background:transparent;color:#2e353a;cursor:pointer;transition:all .2s}.snackbar__close:hover{background:#0000000d;color:#1f2937}.snackbar__close:active{background:#0000001a}.snackbar__close svg{width:14px;height:14px}\n"] }]
580
+ }], ctorParameters: () => [{ type: i1.SnackbarService }] });
581
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2tiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2xlY3VsZXMvc25hY2tiYXIvc25hY2tiYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQW9SL0MsTUFBTSxPQUFPLGlCQUFpQjtJQUlSO0lBSHBCLFNBQVMsR0FBbUIsRUFBRSxDQUFDO0lBQ3ZCLGFBQWEsR0FBbUIsRUFBRSxDQUFDO0lBRTNDLFlBQW9CLGVBQWdDO1FBQWhDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtJQUFHLENBQUM7SUFFeEQsUUFBUTtRQUNOLDZCQUE2QjtRQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUN4RSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXJDLDhCQUE4QjtRQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNoRSxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDdEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzNELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsUUFBZ0I7UUFDckMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELE9BQU8sQ0FBQyxFQUFVO1FBQ2hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxZQUFZLENBQUMsUUFBc0I7UUFDakMsSUFBSSxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDNUIsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO3dHQTFDVSxpQkFBaUI7NEZBQWpCLGlCQUFpQix3RUEzUWxCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3UVQscW5GQXpRUyxZQUFZOzs0RkE0UVgsaUJBQWlCO2tCQS9RN0IsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLFlBQ2I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdRVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNuYWNrYmFyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NuYWNrYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU25hY2tiYXJEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NuYWNrYmFyLm1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zbmFja2JhcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDwhLS0gVG9wIFJpZ2h0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzbmFja2Jhci1jb250YWluZXIgc25hY2tiYXItY29udGFpbmVyLS10b3AtcmlnaHRcIiAqbmdJZj1cImdldFNuYWNrYmFyc0J5UG9zaXRpb24oJ3RvcC1yaWdodCcpLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHNuYWNrYmFyIG9mIGdldFNuYWNrYmFyc0J5UG9zaXRpb24oJ3RvcC1yaWdodCcpXCJcbiAgICAgICAgY2xhc3M9XCJzbmFja2JhclwiXG4gICAgICAgIFtjbGFzcy5zbmFja2Jhci0tc3VjY2Vzc109XCJzbmFja2Jhci50eXBlID09PSAnc3VjY2VzcydcIlxuICAgICAgICBbY2xhc3Muc25hY2tiYXItLWVycm9yXT1cInNuYWNrYmFyLnR5cGUgPT09ICdlcnJvcidcIlxuICAgICAgICBbY2xhc3Muc25hY2tiYXItLXdhcm5pbmddPVwic25hY2tiYXIudHlwZSA9PT0gJ3dhcm5pbmcnXCJcbiAgICAgICAgW2NsYXNzLnNuYWNrYmFyLS1pbmZvXT1cInNuYWNrYmFyLnR5cGUgPT09ICdpbmZvJ1wiXG4gICAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNuYWNrYmFyX19pY29uXCI+XG4gICAgICAgICAgPHN2ZyAqbmdJZj1cInNuYWNrYmFyLnR5cGUgPT09ICdzdWNjZXNzJ1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYuNjY2NyA1TDcuNTAwMDQgMTQuMTY2N0wzLjMzMzM3IDEwXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8c3ZnICpuZ0lmPVwic25hY2tiYXIudHlwZSA9PT0gJ2Vycm9yJ1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuOTYgMi4zNzY5NUMxMy4yMjEyIDIuMzg3OTcgMTQuNDY4MSAyLjY1MDYxIDE1LjYyNyAzLjE0ODQ0QzE2Ljc4NTggMy42NDYzMSAxNy44MzM3IDQuMzcwMTMgMTguNzEgNS4yNzczNEwxOC43MTU4IDUuMjgzMkwxOC43MjI3IDUuMjg5MDZDMTkuNjMgNi4xNjU0IDIwLjM1MzcgNy4yMTQwMiAyMC44NTE2IDguMzczMDVDMjEuMzQ5NCA5LjUzMjA0IDIxLjYxMTEgMTAuNzc4NyAyMS42MjIxIDEyLjA0QzIxLjYzMyAxMy4zMDE0IDIxLjM5MjcgMTQuNTUyMyAyMC45MTUgMTUuNzE5N0MyMC40Mzc0IDE2Ljg4NzIgMTkuNzMxOCAxNy45NDc5IDE4LjgzOTggMTguODM5OEMxNy45NDc5IDE5LjczMTggMTYuODg3MiAyMC40Mzc0IDE1LjcxOTcgMjAuOTE1QzE0LjU1MjMgMjEuMzkyNyAxMy4zMDE0IDIxLjYzMyAxMi4wNCAyMS42MjIxQzEwLjc3ODcgMjEuNjExMSA5LjUzMjA0IDIxLjM0OTQgOC4zNzMwNSAyMC44NTE2QzcuMjE0MDIgMjAuMzUzNyA2LjE2NTQgMTkuNjMgNS4yODkwNiAxOC43MjI3TDUuMjgzMiAxOC43MTU4TDUuMjc3MzQgMTguNzFMNC45NDUzMSAxOC4zNzRDNC4xOTIyMSAxNy41NzA1IDMuNTg0MDggMTYuNjQxIDMuMTQ4NDQgMTUuNjI3QzIuNjUwNjEgMTQuNDY4MSAyLjM4Nzk3IDEzLjIyMTIgMi4zNzY5NSAxMS45NkMyLjM2NTk5IDEwLjY5ODYgMi42MDYzMiA5LjQ0NjgxIDMuMDgzOTggOC4yNzkzQzMuNTYxNjUgNy4xMTE4NCA0LjI2NzI0IDYuMDUxMTIgNS4xNTkxOCA1LjE1OTE4QzYuMDUxMTIgNC4yNjcyNCA3LjExMTg0IDMuNTYxNjUgOC4yNzkzIDMuMDgzOThDOS40NDY4MSAyLjYwNjMyIDEwLjY5ODYgMi4zNjU5OSAxMS45NiAyLjM3Njk1Wk0xMy42NTIzIDMuNjY3OTdDMTEuNzIzNCAzLjI4NTc0IDkuNzIwOSAzLjU4NDUxIDcuOTg3MyA0LjUxMjdDNi4yNTM4OCA1LjQ0MDkgNC44OTU3OCA2Ljk0MTY2IDQuMTQ0NTMgOC43NTg3OUMzLjM5MzM1IDEwLjU3NTkgMy4yOTUyOCAxMi41OTczIDMuODY3MTkgMTQuNDc4NUM0LjQzOTIyIDE2LjM1OTkgNS42NDY1MyAxNy45ODQ3IDcuMjgyMjMgMTkuMDc2MkM4LjkxNzg5IDIwLjE2NzYgMTAuODgxMSAyMC42NTg3IDEyLjgzNzkgMjAuNDY0OEMxNC43OTQ3IDIwLjI3MSAxNi42MjMgMTkuNDAzOCAxOC4wMTI3IDE4LjAxMjdDMTguODA0MSAxNy4yMjQzIDE5LjQzMTYgMTYuMjg3MiAxOS44NTg0IDE1LjI1NDlDMjAuMjMxOSAxNC4zNTE1IDIwLjQ0NjIgMTMuMzkxNCAyMC40OTEyIDEyLjQxN0wyMC41IDExLjk5OEMyMC40OTgxIDEwLjAzMjEgMTkuODE0OCA4LjEyNzE3IDE4LjU2NjQgNi42MDg0QzE3LjMxNzggNS4wODk0NSAxNS41ODExIDQuMDUwMjIgMTMuNjUyMyAzLjY2Nzk3Wk0xNSA4LjQ5NDE0QzE1LjA2NTkgOC40OTQxNiAxNS4xMzE1IDguNTA2ODYgMTUuMTkyNCA4LjUzMjIzQzE1LjI1MzEgOC41NTc1NSAxNS4zMDgxIDguNTk0OTMgMTUuMzU0NSA4LjY0MTZMMTUuMzU3NCA4LjY0NDUzQzE1LjQwNDMgOC42OTA5OSAxNS40NDE0IDguNzQ2NzIgMTUuNDY2OCA4LjgwNzYyQzE1LjQ5MjIgOC44Njg1NSAxNS41MDU5IDguOTMzOTkgMTUuNTA1OSA5QzE1LjUwNTggOS4wNjU5NSAxNS40OTIyIDkuMTMxNSAxNS40NjY4IDkuMTkyMzhDMTUuNDQxNCA5LjI1MzE2IDE1LjQwNDIgOS4zMDgxIDE1LjM1NzQgOS4zNTQ0OVY5LjM1NTQ3TDEzLjA1NjYgMTEuNjQ1NUwxMi43MDEyIDEyTDEzLjA1NjYgMTIuMzU0NUwxNS4zNTc0IDE0LjY0NDVDMTUuNDA0MyAxNC42OTEgMTUuNDQxNCAxNC43NDY3IDE1LjQ2NjggMTQuODA3NkMxNS40OTIyIDE0Ljg2ODUgMTUuNTA1OSAxNC45MzQgMTUuNTA1OSAxNUMxNS41MDU4IDE1LjA2NTkgMTUuNDkyMiAxNS4xMzE1IDE1LjQ2NjggMTUuMTkyNEMxNS40NDE0IDE1LjI1MzIgMTUuNDA0MiAxNS4zMDgxIDE1LjM1NzQgMTUuMzU0NUwxNS4zNTQ1IDE1LjM1NzRDMTUuMzA4MSAxNS40MDQyIDE1LjI1MzIgMTUuNDQxNCAxNS4xOTI0IDE1LjQ2NjhDMTUuMTMxNSAxNS40OTIyIDE1LjA2NTkgMTUuNTA1OCAxNSAxNS41MDU5QzE0LjkzNCAxNS41MDU5IDE0Ljg2ODUgMTUuNDkyMiAxNC44MDc2IDE1LjQ2NjhDMTQuNzQ2NyAxNS40NDE0IDE0LjY5MSAxNS40MDQzIDE0LjY0NDUgMTUuMzU3NEwxMi4zNTQ1IDEzLjA1NjZMMTIgMTIuNzAxMkwxMS42NDU1IDEzLjA1NjZMOS4zNTU0NyAxNS4zNTc0SDkuMzU0NDlDOS4zMDgxIDE1LjQwNDIgOS4yNTMxNiAxNS40NDE0IDkuMTkyMzggMTUuNDY2OEM5LjEzMTUgMTUuNDkyMiA5LjA2NTk1IDE1LjUwNTggOSAxNS41MDU5QzguOTMzOTkgMTUuNTA1OSA4Ljg2ODU1IDE1LjQ5MjIgOC44MDc2MiAxNS40NjY4QzguNzQ2NzIgMTUuNDQxNCA4LjY5MDk5IDE1LjQwNDMgOC42NDQ1MyAxNS4zNTc0TDguNjQxNiAxNS4zNTQ1QzguNTk0OTMgMTUuMzA4MSA4LjU1NzU1IDE1LjI1MzEgOC41MzIyMyAxNS4xOTI0QzguNTA2ODYgMTUuMTMxNSA4LjQ5NDE2IDE1LjA2NTkgOC40OTQxNCAxNUM4LjQ5NDE0IDE0LjkzNDEgOC41MDY4OCAxNC44Njg1IDguNTMyMjMgMTQuODA3NkM4LjU1NzYxIDE0Ljc0NjcgOC41OTQ3NSAxNC42OTEgOC42NDE2IDE0LjY0NDVIOC42NDI1OEwxMC45NDI0IDEyLjM1NDVMMTEuMjk4OCAxMkwxMC45NDI0IDExLjY0NTVMOC42NDI1OCA5LjM1NTQ3QzguNTQ4NTkgOS4yNjEwNSA4LjQ5NjE0IDkuMTMzMjUgOC40OTYwOSA5QzguNDk2MDkgOC44NjYzMSA4LjU0OTAyIDguNzM4MDkgOC42NDM1NSA4LjY0MzU1QzguNzM4MDkgOC41NDkwMiA4Ljg2NjMxIDguNDk2MDkgOSA4LjQ5NjA5QzkuMTAwMDkgOC40OTYxMyA5LjE5NzIgOC41MjU0MiA5LjI3OTMgOC41ODAwOEw5LjM1NjQ1IDguNjQzNTVMMTEuNjQ1NSAxMC45NDI0TDEyIDExLjI5ODhMMTIuMzU0NSAxMC45NDI0TDE0LjY0NDUgOC42NDI1OFY4LjY0MTZDMTQuNjkxIDguNTk0NzUgMTQuNzQ2NyA4LjU1NzYxIDE0LjgwNzYgOC41MzIyM0MxNC44Njg1IDguNTA2ODggMTQuOTM0MSA4LjQ5NDE0IDE1IDguNDk0MTRaXCIgc3Ryb2tlPVwiI0YwNDQzOFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8c3ZnICpuZ0lmPVwic25hY2tiYXIudHlwZSA9PT0gJ3dhcm5pbmcnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA3VjExTTEwIDE1SDEwLjAxTTguNjAwMDEgMy41TDEuOTUwMDEgMTVDMS42OTEzNyAxNS40NTg0IDEuNTUzOTYgMTUuOTc1MyAxLjU1MTg5IDE2LjUwMTVDMS41NDk4MiAxNy4wMjc3IDEuNjgzMTcgMTcuNTQ1NiAxLjkzODI3IDE4LjAwNkMyLjE5MzM3IDE4LjQ2NjMgMi41NjExNyAxOC44NTM1IDMuMDA2MTYgMTkuMTMwNUMzLjQ1MTE1IDE5LjQwNzUgMy45NTkyOCAxOS41NjQ4IDQuNDgwMDEgMTkuNTg4MkgxNy41MkMxOC4wNDA3IDE5LjU2NDggMTguNTQ4OSAxOS40MDc1IDE4Ljk5MzkgMTkuMTMwNUMxOS40Mzg4IDE4Ljg1MzUgMTkuODA2NiAxOC40NjYzIDIwLjA2MTcgMTguMDA2QzIwLjMxNjggMTcuNTQ1NiAyMC40NTAyIDE3LjAyNzcgMjAuNDQ4MSAxNi41MDE1QzIwLjQ0NiAxNS45NzUzIDIwLjMwODYgMTUuNDU4NCAyMC4wNSAxNUwxMy40IDMuNUMxMy4xMzMyIDMuMDU5NDIgMTIuNzYxOSAyLjY5MzU1IDEyLjMxOTggMi40MzQwNkMxMS44Nzc3IDIuMTc0NTggMTEuMzc4MyAyLjAyOTU0IDEwLjg3IDIuMDA5NjdDMTAuMzYxNyAxLjk4OTgxIDkuODUzNjIgMi4wOTU2NSA5LjM5Mjc4IDIuMzE4NDhDOC45MzE5NCAyLjU0MTMgOC41MzIyMyAyLjg3NDYxIDguMjMwMDEgMy4yOUw4LjYwMDAxIDMuNVpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJzbmFja2Jhci50eXBlID09PSAnaW5mbydcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDE0VjEwTTEwIDZIMTAuMDFNMTggMTBDMTggMTQuNDE4MyAxNC40MTgzIDE4IDEwIDE4QzUuNTgxNzIgMTggMiAxNC40MTgzIDIgMTBDMiA1LjU4MTcyIDUuNTgxNzIgMiAxMCAyQzE0LjQxODMgMiAxOCA1LjU4MTcyIDE4IDEwWlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic25hY2tiYXJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cInNuYWNrYmFyX19tZXNzYWdlXCI+e3sgc25hY2tiYXIubWVzc2FnZSB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNuYWNrYmFyLmFjdGlvblwiXG4gICAgICAgICAgY2xhc3M9XCJzbmFja2Jhcl9fYWN0aW9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uKHNuYWNrYmFyKVwiPlxuICAgICAgICAgIHt7IHNuYWNrYmFyLmFjdGlvbiB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwic25hY2tiYXJfX2Nsb3NlXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGlzbWlzcyhzbmFja2Jhci5pZClcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDZXJyYXJcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgMUwxIDEzTTEgMUwxMyAxM1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFRvcCBMZWZ0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzbmFja2Jhci1jb250YWluZXIgc25hY2tiYXItY29udGFpbmVyLS10b3AtbGVmdFwiICpuZ0lmPVwiZ2V0U25hY2tiYXJzQnlQb3NpdGlvbigndG9wLWxlZnQnKS5sZW5ndGggPiAwXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBzbmFja2JhciBvZiBnZXRTbmFja2JhcnNCeVBvc2l0aW9uKCd0b3AtbGVmdCcpXCJcbiAgICAgICAgY2xhc3M9XCJzbmFja2JhclwiXG4gICAgICAgIFtjbGFzcy5zbmFja2Jhci0tc3VjY2Vzc109XCJzbmFja2Jhci50eXBlID09PSAnc3VjY2VzcydcIlxuICAgICAgICBbY2xhc3Muc25hY2tiYXItLWVycm9yXT1cInNuYWNrYmFyLnR5cGUgPT09ICdlcnJvcidcIlxuICAgICAgICBbY2xhc3Muc25hY2tiYXItLXdhcm5pbmddPVwic25hY2tiYXIudHlwZSA9PT0gJ3dhcm5pbmcnXCJcbiAgICAgICAgW2NsYXNzLnNuYWNrYmFyLS1pbmZvXT1cInNuYWNrYmFyLnR5cGUgPT09ICdpbmZvJ1wiXG4gICAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNuYWNrYmFyX19pY29uXCI+XG4gICAgICAgICAgPHN2ZyAqbmdJZj1cInNuYWNrYmFyLnR5cGUgPT09ICdzdWNjZXNzJ1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYuNjY2NyA1TDcuNTAwMDQgMTQuMTY2N0wzLjMzMzM3IDEwXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8c3ZnICpuZ0lmPVwic25hY2tiYXIudHlwZSA9PT0gJ2Vycm9yJ1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNlYxME0xMCAxNEgxMC4wMU0xOCAxMEMxOCAxNC40MTgzIDE0LjQxODMgMTggMTAgMThDNS41ODE3MiAxOCAyIDE0LjQxODMgMiAxMEMyIDUuNTgxNzIgNS41ODE3MiAyIDEwIDJDMTQuNDE4MyAyIDE4IDUuNTgxNzIgMTggMTBaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8c3ZnICpuZ0lmPVwic25hY2tiYXIudHlwZSA9PT0gJ3dhcm5pbmcnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA3VjExTTEwIDE1SDEwLjAxTTguNjAwMDEgMy41TDEuOTUwMDEgMTVDMS42OTEzNyAxNS40NTg0IDEuNTUzOTYgMTUuOTc1MyAxLjU1MTg5IDE2LjUwMTVDMS41NDk4MiAxNy4wMjc3IDEuNjgzMTcgMTcuNTQ1NiAxLjkzODI3IDE4LjAwNkMyLjE5MzM3IDE4LjQ2NjMgMi41NjExNyAxOC44NTM1IDMuMDA2MTYgMTkuMTMwNUMzLjQ1MTE1IDE5LjQwNzUgMy45NTkyOCAxOS41NjQ4IDQuNDgwMDEgMTkuNTg4MkgxNy41MkMxOC4wNDA3IDE5LjU2NDggMTguNTQ4OSAxOS40MDc1IDE4Ljk5MzkgMTkuMTMwNUMxOS40Mzg4IDE4Ljg1MzUgMTkuODA2NiAxOC40NjYzIDIwLjA2MTcgMTguMDA2QzIwLjMxNjggMTcuNTQ1NiAyMC40NTAyIDE3LjAyNzcgMjAuNDQ4MSAxNi41MDE1QzIwLjQ0NiAxNS45NzUzIDIwLjMwODYgMTUuNDU4NCAyMC4wNSAxNUwxMy40IDMuNUMxMy4xMzMyIDMuMDU5NDIgMTIuNzYxOSAyLjY5MzU1IDEyLjMxOTggMi40MzQwNkMxMS44Nzc3IDIuMTc0NTggMTEuMzc4MyAyLjAyOTU0IDEwLjg3IDIuMDA5NjdDMTAuMzYxNyAxLjk4OTgxIDkuODUzNjIgMi4wOTU2NSA5LjM5Mjc4IDIuMzE4NDhDOC45MzE5NCAyLjU0MTMgOC41MzIyMyAyLjg3NDYxIDguMjMwMDEgMy4yOUw4LjYwMDAxIDMuNVpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJzbmFja2Jhci50eXBlID09PSAnaW5mbydcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDE0VjEwTTEwIDZIMTAuMDFNMTggMTBDMTggMTQuNDE4MyAxNC40MTgzIDE4IDEwIDE4QzUuNTgxNzIgMTggMiAxNC40MTgzIDIgMTBDMiA1LjU4MTcyIDUuNTgxNzIgMiAxMCAyQzE0LjQxODMgMiAxOCA1LjU4MTcyIDE4IDEwWlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic25hY2tiYXJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cInNuYWNrYmFyX19tZXNzYWdlXCI+e3sgc25hY2tiYXIubWVzc2FnZSB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNuYWNrYmFyLmFjdGlvblwiXG4gICAgICAgICAgY2xhc3M9XCJzbmFja2Jhcl9fYWN0aW9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uKHNuYWNrYmFyKVwiPlxuICAgICAgICAgIHt7IHNuYWNrYmFyLmFjdGlvbiB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwic25hY2tiYXJfX2Nsb3NlXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGlzbWlzcyhzbmFja2Jhci5pZClcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDZXJyYXJcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgMUwxIDEzTTEgMUwxMyAxM1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFRvcCBDZW50ZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cInNuYWNrYmFyLWNvbnRhaW5lciBzbmFja2Jhci1jb250YWluZXItLXRvcC1jZW50ZXJcIiAqbmdJZj1cImdldFNuYWNrYmFyc0J5UG9zaXRpb24oJ3RvcC1jZW50ZXInKS5sZW5ndGggPiAwXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBzbmFja2JhciBvZiBnZXRTbmFja2JhcnNCeVBvc2l0aW9uKCd0b3AtY2VudGVyJylcIlxuICAgICAgICBjbGFzcz1cInNuYWNrYmFyXCJcbiAgICAgICAgW2NsYXNzLnNuYWNrYmFyLS1zdWNjZXNzXT1cInNuYWNrYmFyLnR5cGUgPT09ICdzdWNjZXNzJ1wiXG4gICAgICAgIFtjbGFzcy5zbmFja2Jhci0tZXJyb3JdPVwic25hY2tiYXIudHlwZSA9PT0gJ2Vycm9yJ1wiXG4gICAgICAgIFtjbGFzcy5zbmFja2Jhci0td2FybmluZ109XCJzbmFja2Jhci50eXBlID09PSAnd2FybmluZydcIlxuICAgICAgICBbY2xhc3Muc25hY2tiYXItLWluZm9dPVwic25hY2tiYXIudHlwZSA9PT0gJ2luZm8nXCJcbiAgICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic25hY2tiYXJfX2ljb25cIj5cbiAgICAgICAgICA8c3ZnICpuZ0lmPVwic25hY2tiYXIudHlwZSA9PT0gJ3N1Y2Nlc3MnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xNi42NjY3IDVMNy41MDAwNCAxNC4xNjY3TDMuMzMzMzcgMTBcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJzbmFja2Jhci50eXBlID09PSAnZXJyb3InXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA2VjEwTTEwIDE0SDEwLjAxTTE4IDEwQzE4IDE0LjQxODMgMTQuNDE4MyAxOCAxMCAxOEM1LjU4MTcyIDE4IDIgMTQuNDE4MyAyIDEwQzIgNS41ODE3MiA1LjU4MTcyIDIgMTAgMkMxNC40MTgzIDIgMTggNS41ODE3MiAxOCAxMFpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJzbmFja2Jhci50eXBlID09PSAnd2FybmluZydcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDdWMTFNMTAgMTVIMTAuMDFNOC42MDAwMSAzLjVMMS45NTAwMSAxNUMxLjY5MTM3IDE1LjQ1ODQgMS41NTM5NiAxNS45NzUzIDEuNTUxODkgMTYuNTAxNUMxLjU0OTgyIDE3LjAyNzcgMS42ODMxNyAxNy41NDU2IDEuOTM4MjcgMTguMDA2QzIuMTkzMzcgMTguNDY2MyAyLjU2MTE3IDE4Ljg1MzUgMy4wMDYxNiAxOS4xMzA1QzMuNDUxMTUgMTkuNDA3NSAzLjk1OTI4IDE5LjU2NDggNC40ODAwMSAxOS41ODgySDE3LjUyQzE4LjA0MDcgMTkuNTY0OCAxOC41NDg5IDE5LjQwNzUgMTguOTkzOSAxOS4xMzA1QzE5LjQzODggMTguODUzNSAxOS44MDY2IDE4LjQ2NjMgMjAuMDYxNyAxOC4wMDZDMjAuMzE2OCAxNy41NDU2IDIwLjQ1MDIgMTcuMDI3NyAyMC40NDgxIDE2LjUwMTVDMjAuNDQ2IDE1Ljk3NTMgMjAuMzA4NiAxNS40NTg0IDIwLjA1IDE1TDEzLjQgMy41QzEzLjEzMzIgMy4wNTk0MiAxMi43NjE5IDIuNjkzNTUgMTIuMzE5OCAyLjQzNDA2QzExLjg3NzcgMi4xNzQ1OCAxMS4zNzgzIDIuMDI5NTQgMTAuODcgMi4wMDk2N0MxMC4zNjE3IDEuOTg5ODEgOS44NTM2MiAyLjA5NTY1IDkuMzkyNzggMi4zMTg0OEM4LjkzMTk0IDIuNTQxMyA4LjUzMjIzIDIuODc0NjEgOC4yMzAwMSAzLjI5TDguNjAwMDEgMy41WlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPHN2ZyAqbmdJZj1cInNuYWNrYmFyLnR5cGUgPT09ICdpbmZvJ1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgMTRWMTBNMTAgNkgxMC4wMU0xOCAxMEMxOCAxNC40MTgzIDE0LjQxODMgMTggMTAgMThDNS41ODE3MiAxOCAyIDE0LjQxODMgMiAxMEMyIDUuNTgxNzIgNS41ODE3MiAyIDEwIDJDMTQuNDE4MyAyIDE4IDUuNTgxNzIgMTggMTBaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzbmFja2Jhcl9fY29udGVudFwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwic25hY2tiYXJfX21lc3NhZ2VcIj57eyBzbmFja2Jhci5tZXNzYWdlIH19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic25hY2tiYXIuYWN0aW9uXCJcbiAgICAgICAgICBjbGFzcz1cInNuYWNrYmFyX19hY3Rpb25cIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb24oc25hY2tiYXIpXCI+XG4gICAgICAgICAge3sgc25hY2tiYXIuYWN0aW9uIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJzbmFja2Jhcl9fY2xvc2VcIlxuICAgICAgICAgIChjbGljayk9XCJkaXNtaXNzKHNuYWNrYmFyLmlkKVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNlcnJhclwiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMyAxTDEgMTNNMSAxTDEzIDEzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQm90dG9tIFJpZ2h0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzbmFja2Jhci1jb250YWluZXIgc25hY2tiYXItY29udGFpbmVyLS1ib3R0b20tcmlnaHRcIiAqbmdJZj1cImdldFNuYWNrYmFyc0J5UG9zaXRpb24oJ2JvdHRvbS1yaWdodCcpLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHNuYWNrYmFyIG9mIGdldFNuYWNrYmFyc0J5UG9zaXRpb24oJ2JvdHRvbS1yaWdodCcpXCJcbiAgICAgICAgY2xhc3M9XCJzbmFja2JhclwiXG4gICAgICAgIFtjbGFzcy5zbmFja2Jhci0tc3VjY2Vzc109XCJzbmFja2Jhci50eXBlID09PSAnc3VjY2VzcydcIlxuICAgICAgICBbY2xhc3Muc25hY2tiYXItLWVycm9yXT1cInNuYWNrYmFyLnR5cGUgPT09ICdlcnJvcidcIlxuICAgICAgICBbY2xhc3Muc25hY2tiYXItLXdhcm5pbmddPVwic25hY2tiYXIudHlwZSA9PT0gJ3dhcm5pbmcnXCJcbiAgICAgICAgW2NsYXNzLnNuYWNrYmFyLS1pbmZvXT1cInNuYWNrYmFyLnR5cGUgPT09ICdpbmZvJ1wiXG4gICAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNuYWNrYmFyX19pY29uXCI+XG4gICAgICAgICAgPHN2ZyAqbmdJZj1cInNuYWNrYmFyLnR5cGUgPT09ICdzdWNjZXNzJ1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYuNjY2NyA1TDcuNTAwMDQgMTQuMTY2N0wzLjMzMzM3IDEwXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8c3ZnICpuZ0lmPVwic25hY2tiYXIudHlwZSA9PT0gJ2Vycm9yJ1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNlYxME0xMCAxNEgxMC4wMU0xOCAxMEMxOCAxNC40MTgzIDE0LjQxODMgMTggMTAgMThDNS41ODE3MiAxOCAyIDE0LjQxODMgMiAxMEMyIDUuNTgxNzIgNS41ODE3MiAyIDEwIDJDMTQuNDE4MyAyIDE4IDUuNTgxNzIgMTggMTBaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8c3ZnICpuZ0lmPVwic25hY2tiYXIudHlwZSA9PT0gJ3dhcm5pbmcnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA3VjExTTEwIDE1SDEwLjAxTTguNjAwMDEgMy41TDEuOTUwMDEgMTVDMS42OTEzNyAxNS40NTg0IDEuNTUzOTYgMTUuOTc1MyAxLjU1MTg5IDE2LjUwMTVDMS41NDk4MiAxNy4wMjc3IDEuNjgzMTcgMTcuNTQ1NiAxLjkzODI3IDE4LjAwNkMyLjE5MzM3IDE4LjQ2NjMgMi41NjExNyAxOC44NTM1IDMuMDA2MTYgMTkuMTMwNUMzLjQ1MTE1IDE5LjQwNzUgMy45NTkyOCAxOS41NjQ4IDQuNDgwMDEgMTkuNTg4MkgxNy41MkMxOC4wNDA3IDE5LjU2NDggMTguNTQ4OSAxOS40MDc1IDE4Ljk5MzkgMTkuMTMwNUMxOS40Mzg4IDE4Ljg1MzUgMTkuODA2NiAxOC40NjYzIDIwLjA2MTcgMTguMDA2QzIwLjMxNjggMTcuNTQ1NiAyMC40NTAyIDE3LjAyNzcgMjAuNDQ4MSAxNi41MDE1QzIwLjQ0NiAxNS45NzUzIDIwLjMwODYgMTUuNDU4NCAyMC4wNSAxNUwxMy40IDMuNUMxMy4xMzMyIDMuMDU5NDIgMTIuNzYxOSAyLjY5MzU1IDEyLjMxOTggMi40MzQwNkMxMS44Nzc3IDIuMTc0NTggMTEuMzc4MyAyLjAyOTU0IDEwLjg3IDIuMDA5NjdDMTAuMzYxNyAxLjk4OTgxIDkuODUzNjIgMi4wOTU2NSA5LjM5Mjc4IDIuMzE4NDhDOC45MzE5NCAyLjU0MTMgOC41MzIyMyAyLjg3NDYxIDguMjMwMDEgMy4yOUw4LjYwMDAxIDMuNVpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJzbmFja2Jhci50eXBlID09PSAnaW5mbydcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDE0VjEwTTEwIDZIMTAuMDFNMTggMTBDMTggMTQuNDE4MyAxNC40MTgzIDE4IDEwIDE4QzUuNTgxNzIgMTggMiAxNC40MTgzIDIgMTBDMiA1LjU4MTcyIDUuNTgxNzIgMiAxMCAyQzE0LjQxODMgMiAxOCA1LjU4MTcyIDE4IDEwWlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic25hY2tiYXJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cInNuYWNrYmFyX19tZXNzYWdlXCI+e3sgc25hY2tiYXIubWVzc2FnZSB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNuYWNrYmFyLmFjdGlvblwiXG4gICAgICAgICAgY2xhc3M9XCJzbmFja2Jhcl9fYWN0aW9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uKHNuYWNrYmFyKVwiPlxuICAgICAgICAgIHt7IHNuYWNrYmFyLmFjdGlvbiB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwic25hY2tiYXJfX2Nsb3NlXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGlzbWlzcyhzbmFja2Jhci5pZClcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDZXJyYXJcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgMUwxIDEzTTEgMUwxMyAxM1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEJvdHRvbSBMZWZ0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzbmFja2Jhci1jb250YWluZXIgc25hY2tiYXItY29udGFpbmVyLS1ib3R0b20tbGVmdFwiICpuZ0lmPVwiZ2V0U25hY2tiYXJzQnlQb3NpdGlvbignYm90dG9tLWxlZnQnKS5sZW5ndGggPiAwXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBzbmFja2JhciBvZiBnZXRTbmFja2JhcnNCeVBvc2l0aW9uKCdib3R0b20tbGVmdCcpXCJcbiAgICAgICAgY2xhc3M9XCJzbmFja2JhclwiXG4gICAgICAgIFtjbGFzcy5zbmFja2Jhci0tc3VjY2Vzc109XCJzbmFja2Jhci50eXBlID09PSAnc3VjY2VzcydcIlxuICAgICAgICBbY2xhc3Muc25hY2tiYXItLWVycm9yXT1cInNuYWNrYmFyLnR5cGUgPT09ICdlcnJvcidcIlxuICAgICAgICBbY2xhc3Muc25hY2tiYXItLXdhcm5pbmddPVwic25hY2tiYXIudHlwZSA9PT0gJ3dhcm5pbmcnXCJcbiAgICAgICAgW2NsYXNzLnNuYWNrYmFyLS1pbmZvXT1cInNuYWNrYmFyLnR5cGUgPT09ICdpbmZvJ1wiXG4gICAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNuYWNrYmFyX19pY29uXCI+XG4gICAgICAgICAgPHN2ZyAqbmdJZj1cInNuYWNrYmFyLnR5cGUgPT09ICdzdWNjZXNzJ1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYuNjY2NyA1TDcuNTAwMDQgMTQuMTY2N0wzLjMzMzM3IDEwXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8c3ZnICpuZ0lmPVwic25hY2tiYXIudHlwZSA9PT0gJ2Vycm9yJ1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNlYxME0xMCAxNEgxMC4wMU0xOCAxMEMxOCAxNC40MTgzIDE0LjQxODMgMTggMTAgMThDNS41ODE3MiAxOCAyIDE0LjQxODMgMiAxMEMyIDUuNTgxNzIgNS41ODE3MiAyIDEwIDJDMTQuNDE4MyAyIDE4IDUuNTgxNzIgMTggMTBaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8c3ZnICpuZ0lmPVwic25hY2tiYXIudHlwZSA9PT0gJ3dhcm5pbmcnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA3VjExTTEwIDE1SDEwLjAxTTguNjAwMDEgMy41TDEuOTUwMDEgMTVDMS42OTEzNyAxNS40NTg0IDEuNTUzOTYgMTUuOTc1MyAxLjU1MTg5IDE2LjUwMTVDMS41NDk4MiAxNy4wMjc3IDEuNjgzMTcgMTcuNTQ1NiAxLjkzODI3IDE4LjAwNkMyLjE5MzM3IDE4LjQ2NjMgMi41NjExNyAxOC44NTM1IDMuMDA2MTYgMTkuMTMwNUMzLjQ1MTE1IDE5LjQwNzUgMy45NTkyOCAxOS41NjQ4IDQuNDgwMDEgMTkuNTg4MkgxNy41MkMxOC4wNDA3IDE5LjU2NDggMTguNTQ4OSAxOS40MDc1IDE4Ljk5MzkgMTkuMTMwNUMxOS40Mzg4IDE4Ljg1MzUgMTkuODA2NiAxOC40NjYzIDIwLjA2MTcgMTguMDA2QzIwLjMxNjggMTcuNTQ1NiAyMC40NTAyIDE3LjAyNzcgMjAuNDQ4MSAxNi41MDE1QzIwLjQ0NiAxNS45NzUzIDIwLjMwODYgMTUuNDU4NCAyMC4wNSAxNUwxMy40IDMuNUMxMy4xMzMyIDMuMDU5NDIgMTIuNzYxOSAyLjY5MzU1IDEyLjMxOTggMi40MzQwNkMxMS44Nzc3IDIuMTc0NTggMTEuMzc4MyAyLjAyOTU0IDEwLjg3IDIuMDA5NjdDMTAuMzYxNyAxLjk4OTgxIDkuODUzNjIgMi4wOTU2NSA5LjM5Mjc4IDIuMzE4NDhDOC45MzE5NCAyLjU0MTMgOC41MzIyMyAyLjg3NDYxIDguMjMwMDEgMy4yOUw4LjYwMDAxIDMuNVpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJzbmFja2Jhci50eXBlID09PSAnaW5mbydcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDE0VjEwTTEwIDZIMTAuMDFNMTggMTBDMTggMTQuNDE4MyAxNC40MTgzIDE4IDEwIDE4QzUuNTgxNzIgMTggMiAxNC40MTgzIDIgMTBDMiA1LjU4MTcyIDUuNTgxNzIgMiAxMCAyQzE0LjQxODMgMiAxOCA1LjU4MTcyIDE4IDEwWlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic25hY2tiYXJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cInNuYWNrYmFyX19tZXNzYWdlXCI+e3sgc25hY2tiYXIubWVzc2FnZSB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNuYWNrYmFyLmFjdGlvblwiXG4gICAgICAgICAgY2xhc3M9XCJzbmFja2Jhcl9fYWN0aW9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uKHNuYWNrYmFyKVwiPlxuICAgICAgICAgIHt7IHNuYWNrYmFyLmFjdGlvbiB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwic25hY2tiYXJfX2Nsb3NlXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGlzbWlzcyhzbmFja2Jhci5pZClcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDZXJyYXJcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgMUwxIDEzTTEgMUwxMyAxM1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEJvdHRvbSBDZW50ZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cInNuYWNrYmFyLWNvbnRhaW5lciBzbmFja2Jhci1jb250YWluZXItLWJvdHRvbS1jZW50ZXJcIiAqbmdJZj1cImdldFNuYWNrYmFyc0J5UG9zaXRpb24oJ2JvdHRvbS1jZW50ZXInKS5sZW5ndGggPiAwXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBzbmFja2JhciBvZiBnZXRTbmFja2JhcnNCeVBvc2l0aW9uKCdib3R0b20tY2VudGVyJylcIlxuICAgICAgICBjbGFzcz1cInNuYWNrYmFyXCJcbiAgICAgICAgW2NsYXNzLnNuYWNrYmFyLS1zdWNjZXNzXT1cInNuYWNrYmFyLnR5cGUgPT09ICdzdWNjZXNzJ1wiXG4gICAgICAgIFtjbGFzcy5zbmFja2Jhci0tZXJyb3JdPVwic25hY2tiYXIudHlwZSA9PT0gJ2Vycm9yJ1wiXG4gICAgICAgIFtjbGFzcy5zbmFja2Jhci0td2FybmluZ109XCJzbmFja2Jhci50eXBlID09PSAnd2FybmluZydcIlxuICAgICAgICBbY2xhc3Muc25hY2tiYXItLWluZm9dPVwic25hY2tiYXIudHlwZSA9PT0gJ2luZm8nXCJcbiAgICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic25hY2tiYXJfX2ljb25cIj5cbiAgICAgICAgICA8c3ZnICpuZ0lmPVwic25hY2tiYXIudHlwZSA9PT0gJ3N1Y2Nlc3MnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xNi42NjY3IDVMNy41MDAwNCAxNC4xNjY3TDMuMzMzMzcgMTBcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJzbmFja2Jhci50eXBlID09PSAnZXJyb3InXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA2VjEwTTEwIDE0SDEwLjAxTTE4IDEwQzE4IDE0LjQxODMgMTQuNDE4MyAxOCAxMCAxOEM1LjU4MTcyIDE4IDIgMTQuNDE4MyAyIDEwQzIgNS41ODE3MiA1LjU4MTcyIDIgMTAgMkMxNC40MTgzIDIgMTggNS41ODE3MiAxOCAxMFpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJzbmFja2Jhci50eXBlID09PSAnd2FybmluZydcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDdWMTFNMTAgMTVIMTAuMDFNOC42MDAwMSAzLjVMMS45NTAwMSAxNUMxLjY5MTM3IDE1LjQ1ODQgMS41NTM5NiAxNS45NzUzIDEuNTUxODkgMTYuNTAxNUMxLjU0OTgyIDE3LjAyNzcgMS42ODMxNyAxNy41NDU2IDEuOTM4MjcgMTguMDA2QzIuMTkzMzcgMTguNDY2MyAyLjU2MTE3IDE4Ljg1MzUgMy4wMDYxNiAxOS4xMzA1QzMuNDUxMTUgMTkuNDA3NSAzLjk1OTI4IDE5LjU2NDggNC40ODAwMSAxOS41ODgySDE3LjUyQzE4LjA0MDcgMTkuNTY0OCAxOC41NDg5IDE5LjQwNzUgMTguOTkzOSAxOS4xMzA1QzE5LjQzODggMTguODUzNSAxOS44MDY2IDE4LjQ2NjMgMjAuMDYxNyAxOC4wMDZDMjAuMzE2OCAxNy41NDU2IDIwLjQ1MDIgMTcuMDI3NyAyMC40NDgxIDE2LjUwMTVDMjAuNDQ2IDE1Ljk3NTMgMjAuMzA4NiAxNS40NTg0IDIwLjA1IDE1TDEzLjQgMy41QzEzLjEzMzIgMy4wNTk0MiAxMi43NjE5IDIuNjkzNTUgMTIuMzE5OCAyLjQzNDA2QzExLjg3NzcgMi4xNzQ1OCAxMS4zNzgzIDIuMDI5NTQgMTAuODcgMi4wMDk2N0MxMC4zNjE3IDEuOTg5ODEgOS44NTM2MiAyLjA5NTY1IDkuMzkyNzggMi4zMTg0OEM4LjkzMTk0IDIuNTQxMyA4LjUzMjIzIDIuODc0NjEgOC4yMzAwMSAzLjI5TDguNjAwMDEgMy41WlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPHN2ZyAqbmdJZj1cInNuYWNrYmFyLnR5cGUgPT09ICdpbmZvJ1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgMTRWMTBNMTAgNkgxMC4wMU0xOCAxMEMxOCAxNC40MTgzIDE0LjQxODMgMTggMTAgMThDNS41ODE3MiAxOCAyIDE0LjQxODMgMiAxMEMyIDUuNTgxNzIgNS41ODE3MiAyIDEwIDJDMTQuNDE4MyAyIDE4IDUuNTgxNzIgMTggMTBaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzbmFja2Jhcl9fY29udGVudFwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwic25hY2tiYXJfX21lc3NhZ2VcIj57eyBzbmFja2Jhci5tZXNzYWdlIH19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic25hY2tiYXIuYWN0aW9uXCJcbiAgICAgICAgICBjbGFzcz1cInNuYWNrYmFyX19hY3Rpb25cIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb24oc25hY2tiYXIpXCI+XG4gICAgICAgICAge3sgc25hY2tiYXIuYWN0aW9uIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJzbmFja2Jhcl9fY2xvc2VcIlxuICAgICAgICAgIChjbGljayk9XCJkaXNtaXNzKHNuYWNrYmFyLmlkKVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNlcnJhclwiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMyAxTDEgMTNNMSAxTDEzIDEzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vc25hY2tiYXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTbmFja2JhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgc25hY2tiYXJzOiBTbmFja2JhckRhdGFbXSA9IFtdO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzbmFja2JhclNlcnZpY2U6IFNuYWNrYmFyU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTdWJzY3JpYmUgdG8gbmV3IHNuYWNrYmFyc1xuICAgIGNvbnN0IHNuYWNrYmFyU3ViID0gdGhpcy5zbmFja2JhclNlcnZpY2Uuc25hY2tiYXIkLnN1YnNjcmliZSgoc25hY2tiYXIpID0+IHtcbiAgICAgIHRoaXMuc25hY2tiYXJzLnB1c2goc25hY2tiYXIpO1xuICAgIH0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHNuYWNrYmFyU3ViKTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBkaXNtaXNzIGV2ZW50c1xuICAgIGNvbnN0IGRpc21pc3NTdWIgPSB0aGlzLnNuYWNrYmFyU2VydmljZS5kaXNtaXNzJC5zdWJzY3JpYmUoKGlkKSA9PiB7XG4gICAgICBpZiAoaWQgPT09ICdhbGwnKSB7XG4gICAgICAgIHRoaXMuc25hY2tiYXJzID0gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNuYWNrYmFycyA9IHRoaXMuc25hY2tiYXJzLmZpbHRlcihzID0+IHMuaWQgIT09IGlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChkaXNtaXNzU3ViKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBnZXRTbmFja2JhcnNCeVBvc2l0aW9uKHBvc2l0aW9uOiBzdHJpbmcpOiBTbmFja2JhckRhdGFbXSB7XG4gICAgcmV0dXJuIHRoaXMuc25hY2tiYXJzLmZpbHRlcihzID0+IHMucG9zaXRpb24gPT09IHBvc2l0aW9uKTtcbiAgfVxuXG4gIGRpc21pc3MoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc25hY2tiYXJzID0gdGhpcy5zbmFja2JhcnMuZmlsdGVyKHMgPT4gcy5pZCAhPT0gaWQpO1xuICAgIHRoaXMuc25hY2tiYXJTZXJ2aWNlLmRpc21pc3MoaWQpO1xuICB9XG5cbiAgaGFuZGxlQWN0aW9uKHNuYWNrYmFyOiBTbmFja2JhckRhdGEpOiB2b2lkIHtcbiAgICBpZiAoc25hY2tiYXIuYWN0aW9uQ2FsbGJhY2spIHtcbiAgICAgIHNuYWNrYmFyLmFjdGlvbkNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHRoaXMuZGlzbWlzcyhzbmFja2Jhci5pZCk7XG4gIH1cbn1cbiJdfQ==