@elxjs/ui 0.0.170

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 (243) hide show
  1. package/assets/fonts/electroluxsans_1_thin-demo.html +795 -0
  2. package/assets/fonts/electroluxsans_1_thin-webfont.eot +0 -0
  3. package/assets/fonts/electroluxsans_1_thin-webfont.svg +22258 -0
  4. package/assets/fonts/electroluxsans_1_thin-webfont.ttf +0 -0
  5. package/assets/fonts/electroluxsans_1_thin-webfont.woff +0 -0
  6. package/assets/fonts/electroluxsans_1_thin-webfont.woff2 +0 -0
  7. package/assets/fonts/electroluxsans_2_light-demo.html +795 -0
  8. package/assets/fonts/electroluxsans_2_light-webfont.eot +0 -0
  9. package/assets/fonts/electroluxsans_2_light-webfont.svg +22261 -0
  10. package/assets/fonts/electroluxsans_2_light-webfont.ttf +0 -0
  11. package/assets/fonts/electroluxsans_2_light-webfont.woff +0 -0
  12. package/assets/fonts/electroluxsans_2_light-webfont.woff2 +0 -0
  13. package/assets/fonts/electroluxsans_3_regular-demo.html +795 -0
  14. package/assets/fonts/electroluxsans_3_regular-webfont.eot +0 -0
  15. package/assets/fonts/electroluxsans_3_regular-webfont.svg +21871 -0
  16. package/assets/fonts/electroluxsans_3_regular-webfont.ttf +0 -0
  17. package/assets/fonts/electroluxsans_3_regular-webfont.woff +0 -0
  18. package/assets/fonts/electroluxsans_3_regular-webfont.woff2 +0 -0
  19. package/assets/fonts/electroluxsans_4_semibold-demo.html +795 -0
  20. package/assets/fonts/electroluxsans_4_semibold-webfont.eot +0 -0
  21. package/assets/fonts/electroluxsans_4_semibold-webfont.svg +24128 -0
  22. package/assets/fonts/electroluxsans_4_semibold-webfont.ttf +0 -0
  23. package/assets/fonts/electroluxsans_4_semibold-webfont.woff +0 -0
  24. package/assets/fonts/electroluxsans_4_semibold-webfont.woff2 +0 -0
  25. package/assets/fonts/electroluxsans_5_bold-demo.html +795 -0
  26. package/assets/fonts/electroluxsans_5_bold-webfont.eot +0 -0
  27. package/assets/fonts/electroluxsans_5_bold-webfont.svg +24066 -0
  28. package/assets/fonts/electroluxsans_5_bold-webfont.ttf +0 -0
  29. package/assets/fonts/electroluxsans_5_bold-webfont.woff +0 -0
  30. package/assets/fonts/electroluxsans_5_bold-webfont.woff2 +0 -0
  31. package/assets/fonts/electroluxsans_oblique_1_thin-demo.html +795 -0
  32. package/assets/fonts/electroluxsans_oblique_1_thin-webfont.eot +0 -0
  33. package/assets/fonts/electroluxsans_oblique_1_thin-webfont.svg +22374 -0
  34. package/assets/fonts/electroluxsans_oblique_1_thin-webfont.ttf +0 -0
  35. package/assets/fonts/electroluxsans_oblique_1_thin-webfont.woff +0 -0
  36. package/assets/fonts/electroluxsans_oblique_1_thin-webfont.woff2 +0 -0
  37. package/assets/fonts/electroluxsans_oblique_2_light-demo.html +795 -0
  38. package/assets/fonts/electroluxsans_oblique_2_light-webfont.eot +0 -0
  39. package/assets/fonts/electroluxsans_oblique_2_light-webfont.svg +22439 -0
  40. package/assets/fonts/electroluxsans_oblique_2_light-webfont.ttf +0 -0
  41. package/assets/fonts/electroluxsans_oblique_2_light-webfont.woff +0 -0
  42. package/assets/fonts/electroluxsans_oblique_2_light-webfont.woff2 +0 -0
  43. package/assets/fonts/electroluxsans_oblique_3_regular-demo.html +795 -0
  44. package/assets/fonts/electroluxsans_oblique_3_regular-webfont.eot +0 -0
  45. package/assets/fonts/electroluxsans_oblique_3_regular-webfont.svg +22295 -0
  46. package/assets/fonts/electroluxsans_oblique_3_regular-webfont.ttf +0 -0
  47. package/assets/fonts/electroluxsans_oblique_3_regular-webfont.woff2 +0 -0
  48. package/assets/fonts/electroluxsans_oblique_4_semibold-demo.html +795 -0
  49. package/assets/fonts/electroluxsans_oblique_4_semibold-webfont.svg +24396 -0
  50. package/assets/fonts/electroluxsans_oblique_4_semibold-webfont.ttf +0 -0
  51. package/assets/fonts/electroluxsans_oblique_4_semibold-webfont.woff +0 -0
  52. package/assets/fonts/electroluxsans_oblique_4_semibold-webfont.woff2 +0 -0
  53. package/assets/fonts/electroluxsans_oblique_5_bold-demo.html +795 -0
  54. package/assets/fonts/electroluxsans_oblique_5_bold-webfont.eot +0 -0
  55. package/assets/fonts/electroluxsans_oblique_5_bold-webfont.svg +24409 -0
  56. package/assets/fonts/electroluxsans_oblique_5_bold-webfont.ttf +0 -0
  57. package/assets/fonts/electroluxsans_oblique_5_bold-webfont.woff +0 -0
  58. package/assets/fonts/electroluxsans_oblique_5_bold-webfont.woff2 +0 -0
  59. package/assets/icons/Avatar.svg +5 -0
  60. package/assets/icons/Bell.svg +5 -0
  61. package/assets/icons/Block.svg +5 -0
  62. package/assets/icons/Blocked.svg +3 -0
  63. package/assets/icons/Book.svg +5 -0
  64. package/assets/icons/Calendar.svg +5 -0
  65. package/assets/icons/Camera.svg +3 -0
  66. package/assets/icons/Cart.svg +8 -0
  67. package/assets/icons/Chat.svg +6 -0
  68. package/assets/icons/Check.svg +4 -0
  69. package/assets/icons/Check_Tick.svg +5 -0
  70. package/assets/icons/Chevron_Down.svg +3 -0
  71. package/assets/icons/Chevron_Left.svg +3 -0
  72. package/assets/icons/Chevron_Left_Double.svg +8 -0
  73. package/assets/icons/Chevron_Right.svg +3 -0
  74. package/assets/icons/Chevron_Right_Double.svg +8 -0
  75. package/assets/icons/Chevron_Up.svg +3 -0
  76. package/assets/icons/Close.svg +11 -0
  77. package/assets/icons/Compare_Products.svg +5 -0
  78. package/assets/icons/Config.svg +5 -0
  79. package/assets/icons/Config_2.svg +5 -0
  80. package/assets/icons/Discount.svg +5 -0
  81. package/assets/icons/Edit.svg +5 -0
  82. package/assets/icons/Edit_2.svg +7 -0
  83. package/assets/icons/Eye_Hide.svg +5 -0
  84. package/assets/icons/Eye_View.svg +4 -0
  85. package/assets/icons/FAQ.svg +5 -0
  86. package/assets/icons/Facebook.svg +10 -0
  87. package/assets/icons/Fridge_And_Freezer.svg +10 -0
  88. package/assets/icons/Gift.svg +3 -0
  89. package/assets/icons/Hide.svg +9 -0
  90. package/assets/icons/Info.svg +6 -0
  91. package/assets/icons/Instagram.svg +10 -0
  92. package/assets/icons/Like.svg +3 -0
  93. package/assets/icons/Like_filled.svg +3 -0
  94. package/assets/icons/Link.svg +7 -0
  95. package/assets/icons/Load.svg +18 -0
  96. package/assets/icons/Loading.webp +0 -0
  97. package/assets/icons/Location.svg +8 -0
  98. package/assets/icons/Lock.svg +3 -0
  99. package/assets/icons/Logo.svg +20 -0
  100. package/assets/icons/Logo_new.svg +13 -0
  101. package/assets/icons/Mail.svg +6 -0
  102. package/assets/icons/Maintenance.svg +9 -0
  103. package/assets/icons/Nav.svg +5 -0
  104. package/assets/icons/Phone.svg +5 -0
  105. package/assets/icons/Pin.svg +3 -0
  106. package/assets/icons/Plus.svg +8 -0
  107. package/assets/icons/PriceTag.svg +6 -0
  108. package/assets/icons/Screwdriver.svg +10 -0
  109. package/assets/icons/Search.svg +6 -0
  110. package/assets/icons/Share.svg +3 -0
  111. package/assets/icons/Shield.svg +6 -0
  112. package/assets/icons/Star.svg +12 -0
  113. package/assets/icons/Star_Filled.svg +3 -0
  114. package/assets/icons/Stars.svg +9 -0
  115. package/assets/icons/Stars_2.svg +3 -0
  116. package/assets/icons/Top_Rating.svg +3 -0
  117. package/assets/icons/Trash.svg +5 -0
  118. package/assets/icons/Warning.svg +9 -0
  119. package/assets/icons/Whatsapp.svg +5 -0
  120. package/assets/icons/Youtube.svg +10 -0
  121. package/assets/images/placeholder.webp +0 -0
  122. package/assets/images/placeholder_2.webp +0 -0
  123. package/assets/images/placeholder_3.webp +0 -0
  124. package/assets/styles/colors.scss +36 -0
  125. package/assets/styles/fonts.scss +102 -0
  126. package/assets/styles/inputs.scss +139 -0
  127. package/assets/styles/typography.scss +117 -0
  128. package/esm2022/elxjs-ui.mjs +5 -0
  129. package/esm2022/index.mjs +2 -0
  130. package/esm2022/lib/components/accordion/accordion.component.mjs +28 -0
  131. package/esm2022/lib/components/accordion/index.mjs +2 -0
  132. package/esm2022/lib/components/arrow-link/arrow-link.component.mjs +29 -0
  133. package/esm2022/lib/components/arrow-link/index.mjs +2 -0
  134. package/esm2022/lib/components/breadcrumb/breadcrumb.component.mjs +48 -0
  135. package/esm2022/lib/components/breadcrumb/index.mjs +2 -0
  136. package/esm2022/lib/components/button/button.component.mjs +89 -0
  137. package/esm2022/lib/components/button/index.mjs +2 -0
  138. package/esm2022/lib/components/card-1/card1.component.mjs +20 -0
  139. package/esm2022/lib/components/card-1/index.mjs +2 -0
  140. package/esm2022/lib/components/card-2/card2.component.mjs +16 -0
  141. package/esm2022/lib/components/card-2/index.mjs +2 -0
  142. package/esm2022/lib/components/card-3/card3.component.mjs +18 -0
  143. package/esm2022/lib/components/card-3/index.mjs +2 -0
  144. package/esm2022/lib/components/card-4/card4.component.mjs +16 -0
  145. package/esm2022/lib/components/card-4/index.mjs +2 -0
  146. package/esm2022/lib/components/carousel/carousel.component.mjs +155 -0
  147. package/esm2022/lib/components/carousel/index.mjs +2 -0
  148. package/esm2022/lib/components/chip/chip.component.mjs +27 -0
  149. package/esm2022/lib/components/chip/index.mjs +2 -0
  150. package/esm2022/lib/components/datatable/datatable.component.mjs +148 -0
  151. package/esm2022/lib/components/datatable/datatable.component.types.mjs +2 -0
  152. package/esm2022/lib/components/datatable/index.mjs +3 -0
  153. package/esm2022/lib/components/datepicker/datepicker.component.mjs +382 -0
  154. package/esm2022/lib/components/datepicker/index.mjs +2 -0
  155. package/esm2022/lib/components/dropdown/dropdown.component.mjs +145 -0
  156. package/esm2022/lib/components/dropdown/index.mjs +2 -0
  157. package/esm2022/lib/components/dropdown-multiple/dropdown-multiple.component.mjs +76 -0
  158. package/esm2022/lib/components/dropdown-multiple/index.mjs +2 -0
  159. package/esm2022/lib/components/icon/icon.component.mjs +58 -0
  160. package/esm2022/lib/components/icon/index.mjs +2 -0
  161. package/esm2022/lib/components/index.mjs +63 -0
  162. package/esm2022/lib/components/input-search/index.mjs +2 -0
  163. package/esm2022/lib/components/input-search/input-search.component.mjs +73 -0
  164. package/esm2022/lib/components/input-search-modal/index.mjs +2 -0
  165. package/esm2022/lib/components/input-search-modal/input-search-modal.component.mjs +29 -0
  166. package/esm2022/lib/components/loading/index.mjs +2 -0
  167. package/esm2022/lib/components/loading/loading.component.mjs +21 -0
  168. package/esm2022/lib/components/loading-2/index.mjs +2 -0
  169. package/esm2022/lib/components/loading-2/loading-2.component.mjs +16 -0
  170. package/esm2022/lib/components/modal/index.mjs +2 -0
  171. package/esm2022/lib/components/modal/modal.component.mjs +31 -0
  172. package/esm2022/lib/components/paginator/index.mjs +2 -0
  173. package/esm2022/lib/components/paginator/paginator.component.mjs +128 -0
  174. package/esm2022/lib/components/stepbar/index.mjs +2 -0
  175. package/esm2022/lib/components/stepbar/stepbar.component.mjs +41 -0
  176. package/esm2022/lib/components/switch/index.mjs +2 -0
  177. package/esm2022/lib/components/switch/switch.component.mjs +47 -0
  178. package/esm2022/lib/components/toast/index.mjs +2 -0
  179. package/esm2022/lib/components/toast/toast.component.mjs +28 -0
  180. package/esm2022/lib/index.mjs +4 -0
  181. package/esm2022/lib/modules/electrolux-design-system.module.mjs +35 -0
  182. package/esm2022/lib/modules/index.mjs +2 -0
  183. package/esm2022/lib/services/index.mjs +2 -0
  184. package/esm2022/lib/services/toaster.service.mjs +53 -0
  185. package/fesm2022/elxjs-ui.mjs +1647 -0
  186. package/fesm2022/elxjs-ui.mjs.map +1 -0
  187. package/index.d.ts +1 -0
  188. package/lib/components/accordion/accordion.component.d.ts +10 -0
  189. package/lib/components/accordion/index.d.ts +1 -0
  190. package/lib/components/arrow-link/arrow-link.component.d.ts +9 -0
  191. package/lib/components/arrow-link/index.d.ts +1 -0
  192. package/lib/components/breadcrumb/breadcrumb.component.d.ts +17 -0
  193. package/lib/components/breadcrumb/index.d.ts +1 -0
  194. package/lib/components/button/button.component.d.ts +27 -0
  195. package/lib/components/button/index.d.ts +1 -0
  196. package/lib/components/card-1/card1.component.d.ts +8 -0
  197. package/lib/components/card-1/index.d.ts +1 -0
  198. package/lib/components/card-2/card2.component.d.ts +7 -0
  199. package/lib/components/card-2/index.d.ts +1 -0
  200. package/lib/components/card-3/card3.component.d.ts +8 -0
  201. package/lib/components/card-3/index.d.ts +1 -0
  202. package/lib/components/card-4/card4.component.d.ts +7 -0
  203. package/lib/components/card-4/index.d.ts +1 -0
  204. package/lib/components/carousel/carousel.component.d.ts +41 -0
  205. package/lib/components/carousel/index.d.ts +1 -0
  206. package/lib/components/chip/chip.component.d.ts +10 -0
  207. package/lib/components/chip/index.d.ts +1 -0
  208. package/lib/components/datatable/datatable.component.d.ts +43 -0
  209. package/lib/components/datatable/datatable.component.types.d.ts +55 -0
  210. package/lib/components/datatable/index.d.ts +2 -0
  211. package/lib/components/datepicker/datepicker.component.d.ts +81 -0
  212. package/lib/components/datepicker/index.d.ts +1 -0
  213. package/lib/components/dropdown/dropdown.component.d.ts +42 -0
  214. package/lib/components/dropdown/index.d.ts +1 -0
  215. package/lib/components/dropdown-multiple/dropdown-multiple.component.d.ts +27 -0
  216. package/lib/components/dropdown-multiple/index.d.ts +1 -0
  217. package/lib/components/icon/icon.component.d.ts +29 -0
  218. package/lib/components/icon/index.d.ts +1 -0
  219. package/lib/components/index.d.ts +26 -0
  220. package/lib/components/input-search/index.d.ts +1 -0
  221. package/lib/components/input-search/input-search.component.d.ts +26 -0
  222. package/lib/components/input-search-modal/index.d.ts +1 -0
  223. package/lib/components/input-search-modal/input-search-modal.component.d.ts +13 -0
  224. package/lib/components/loading/index.d.ts +1 -0
  225. package/lib/components/loading/loading.component.d.ts +7 -0
  226. package/lib/components/loading-2/index.d.ts +1 -0
  227. package/lib/components/loading-2/loading-2.component.d.ts +6 -0
  228. package/lib/components/modal/index.d.ts +1 -0
  229. package/lib/components/modal/modal.component.d.ts +10 -0
  230. package/lib/components/paginator/index.d.ts +1 -0
  231. package/lib/components/paginator/paginator.component.d.ts +33 -0
  232. package/lib/components/stepbar/index.d.ts +1 -0
  233. package/lib/components/stepbar/stepbar.component.d.ts +14 -0
  234. package/lib/components/switch/index.d.ts +1 -0
  235. package/lib/components/switch/switch.component.d.ts +10 -0
  236. package/lib/components/toast/index.d.ts +1 -0
  237. package/lib/components/toast/toast.component.d.ts +11 -0
  238. package/lib/index.d.ts +3 -0
  239. package/lib/modules/electrolux-design-system.module.d.ts +25 -0
  240. package/lib/modules/index.d.ts +1 -0
  241. package/lib/services/index.d.ts +1 -0
  242. package/lib/services/toaster.service.d.ts +14 -0
  243. package/package.json +29 -0
@@ -0,0 +1,382 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { FormsModule, NG_VALUE_ACCESSOR, NgControl, ReactiveFormsModule } from '@angular/forms';
3
+ import { Component, EventEmitter, Input, Output, HostListener, ViewChild, forwardRef } from '@angular/core';
4
+ import { EluxIcon } from '../icon';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ export class EluxDatepicker {
8
+ constructor(injector) {
9
+ this.injector = injector;
10
+ this.value = '';
11
+ this.locale = 'pt-BR';
12
+ this.idInput = '';
13
+ this.placeholder = '00/00/0000';
14
+ this.dateSelected = new EventEmitter();
15
+ this.invalidDate = new EventEmitter();
16
+ this.disabled = false;
17
+ this.showCalendar = false;
18
+ this.pickerView = 'week';
19
+ this.currentDate = new Date();
20
+ this.selectedDate = null;
21
+ this.formatedDate = '';
22
+ this.days = [];
23
+ this.months = [];
24
+ this.years = [];
25
+ this.onChange = () => undefined;
26
+ this.onTouched = () => undefined;
27
+ }
28
+ injectParentFormControl() {
29
+ const ngControl = this.injector.get(NgControl, null);
30
+ if (ngControl) {
31
+ this.parentFormControl = ngControl.control;
32
+ }
33
+ }
34
+ writeValue(value) {
35
+ this.formatedDate = value;
36
+ this.onBlur();
37
+ }
38
+ registerOnChange(fn) {
39
+ this.onChange = fn;
40
+ }
41
+ registerOnTouched(fn) {
42
+ this.onTouched = fn;
43
+ }
44
+ get isTouched() {
45
+ return this.parentFormControl?.touched || this.parentFormControl?.dirty;
46
+ }
47
+ get isInvalid() {
48
+ return this.parentFormControl?.invalid;
49
+ }
50
+ headerDate() {
51
+ return `${this.currentDate.toLocaleString(this.locale, {
52
+ month: 'long',
53
+ })} ${this.currentDate.getFullYear()}`;
54
+ }
55
+ headerDateWeek() {
56
+ const daysOfWeek = [];
57
+ const baseDate = new Date();
58
+ for (let i = 0; i < 7; i++) {
59
+ const day = new Date(baseDate.setDate(baseDate.getDate() - baseDate.getDay() + i));
60
+ daysOfWeek.push(day.toLocaleDateString(this.locale, { weekday: 'narrow' }));
61
+ }
62
+ return daysOfWeek;
63
+ }
64
+ ngOnInit() {
65
+ this.injectParentFormControl();
66
+ if (this.value) {
67
+ this.formatedDate = this.value;
68
+ this.onBlur();
69
+ }
70
+ this.generateCalendar(this.currentDate);
71
+ }
72
+ setDisabledState(isDisabled) {
73
+ this.disabled = isDisabled;
74
+ }
75
+ ngOnChanges(changes) {
76
+ if (changes['value'] && !changes['value'].isFirstChange()) {
77
+ this.formatedDate = this.value;
78
+ this.onBlur();
79
+ }
80
+ }
81
+ onChangeValue(event) {
82
+ const input = event.target;
83
+ let value = input.value.replace(/\D/g, '');
84
+ const separator = this.detectLocaleDateSeparator(this.locale);
85
+ if (value.length <= 2) {
86
+ this.formatedDate = value;
87
+ }
88
+ else if (value.length <= 4) {
89
+ this.formatedDate = `${value.slice(0, 2)}${separator}${value.slice(2)}`;
90
+ }
91
+ else {
92
+ this.formatedDate = `${value.slice(0, 2)}${separator}${value.slice(2, 4)}${separator}${value.slice(4, 8)}`;
93
+ }
94
+ input.value = this.formatedDate;
95
+ input.setSelectionRange(input.value.length, input.value.length);
96
+ }
97
+ detectLocaleDateSeparator(locale) {
98
+ const sampleDate = new Date(2000, 0, 15);
99
+ const formatted = sampleDate.toLocaleDateString(locale);
100
+ const match = formatted.match(/[^0-9]/);
101
+ return match ? match[0] : '/';
102
+ }
103
+ toggleCalendar() {
104
+ this.showCalendar = !this.showCalendar;
105
+ if (this.showCalendar) {
106
+ this.pickerView = 'week';
107
+ }
108
+ }
109
+ changeView() {
110
+ switch (this.pickerView) {
111
+ case 'week':
112
+ this.pickerView = 'month';
113
+ this.generateMonths();
114
+ break;
115
+ case 'month':
116
+ this.pickerView = 'year';
117
+ this.generateYears();
118
+ break;
119
+ case 'year':
120
+ break;
121
+ default:
122
+ break;
123
+ }
124
+ }
125
+ closeCalendar() {
126
+ this.showCalendar = false;
127
+ }
128
+ previous() {
129
+ switch (this.pickerView) {
130
+ case 'week':
131
+ this.prevMonth();
132
+ break;
133
+ case 'month':
134
+ this.prevYear(1);
135
+ break;
136
+ case 'year':
137
+ this.prevYear(30);
138
+ break;
139
+ default:
140
+ break;
141
+ }
142
+ }
143
+ next() {
144
+ switch (this.pickerView) {
145
+ case 'week':
146
+ this.nextMonth();
147
+ break;
148
+ case 'month':
149
+ this.nextYear(1);
150
+ break;
151
+ case 'year':
152
+ this.nextYear(30);
153
+ break;
154
+ default:
155
+ break;
156
+ }
157
+ }
158
+ prevMonth() {
159
+ this.currentDate = new Date(this.currentDate.setMonth(this.currentDate.getMonth() - 1));
160
+ this.generateCalendar(this.currentDate);
161
+ }
162
+ nextMonth() {
163
+ this.currentDate = new Date(this.currentDate.setMonth(this.currentDate.getMonth() + 1));
164
+ this.generateCalendar(this.currentDate);
165
+ }
166
+ prevYear(yearQtde) {
167
+ this.onChangeYear(this.currentDate.getFullYear() - yearQtde);
168
+ this.generateYears();
169
+ }
170
+ nextYear(yearQtde) {
171
+ this.onChangeYear(this.currentDate.getFullYear() + yearQtde);
172
+ this.generateYears();
173
+ }
174
+ selectDate(day) {
175
+ const selected = new Date(this.currentDate.getFullYear(), this.currentDate.getMonth(), day.day);
176
+ this.selectedDate = selected;
177
+ this.formatedDate = this.selectedDate.toLocaleDateString(this.locale, {
178
+ day: '2-digit',
179
+ month: '2-digit',
180
+ year: 'numeric',
181
+ });
182
+ this.generateCalendar(this.currentDate);
183
+ this.closeCalendar();
184
+ this.onBlur();
185
+ }
186
+ selectMonth(monthValue) {
187
+ const maxDate = this.maxDate ? new Date(this.maxDate) : null;
188
+ const selectedMonth = new Date(this.currentDate.getFullYear(), monthValue, 1);
189
+ if (maxDate && selectedMonth > new Date(maxDate.getFullYear(), maxDate.getMonth(), 1)) {
190
+ return;
191
+ }
192
+ this.currentDate = new Date(this.currentDate.getFullYear(), monthValue, 10);
193
+ this.pickerView = 'week';
194
+ this.generateCalendar(this.currentDate);
195
+ }
196
+ onChangeYear(year) {
197
+ this.currentDate = new Date(this.currentDate.setFullYear(year));
198
+ this.generateMonths();
199
+ }
200
+ selectYear(year) {
201
+ this.onChangeYear(year);
202
+ this.pickerView = 'month';
203
+ }
204
+ generateCalendar(date) {
205
+ this.days = [];
206
+ const year = date.getFullYear();
207
+ const month = date.getMonth();
208
+ const minDate = this.minDate ? new Date(this.minDate) : null;
209
+ const maxDate = this.maxDate ? new Date(this.maxDate) : null;
210
+ const today = new Date();
211
+ const isTodayMonth = today.getMonth() === month && today.getFullYear() === year;
212
+ const selectedYear = this.selectedDate?.getFullYear();
213
+ const selectedMonth = this.selectedDate?.getMonth();
214
+ const selectedDay = this.selectedDate?.getDate();
215
+ const firstWeekDayOfMonth = new Date(year, month, 1).getDay();
216
+ const lastWeekDayOfMonth = new Date(year, month + 1, 0).getDate();
217
+ // Preenche os dias do mês anterior, se necessário
218
+ for (let i = firstWeekDayOfMonth; i > 0; i--) {
219
+ this.days.push({ day: 0, disabled: true });
220
+ }
221
+ // Preenche os dias do mês atual
222
+ for (let i = 1; i <= lastWeekDayOfMonth; i++) {
223
+ const dateValue = new Date(year, month, i);
224
+ const isToday = isTodayMonth && today.getDate() === i;
225
+ const isSelected = selectedYear === year && selectedMonth === month && selectedDay === i;
226
+ const disabled = ((minDate && dateValue < minDate) || (maxDate && dateValue > maxDate)) ?? false;
227
+ this.days.push({ day: i, today: isToday, selected: isSelected, disabled: disabled });
228
+ }
229
+ }
230
+ generateMonths() {
231
+ this.months = [];
232
+ const currentYear = this.currentDate.getFullYear();
233
+ const maxDate = this.maxDate ? new Date(this.maxDate) : null;
234
+ const minDate = this.minDate ? new Date(this.minDate) : null;
235
+ for (let i = 0; i < 12; i++) {
236
+ // Usar o dia 1 para evitar problemas com meses que não têm 31 dias
237
+ const dateValue = new Date(currentYear, i, 1);
238
+ const isDisabled = ((minDate && dateValue < minDate) || (maxDate && dateValue > maxDate)) ?? false;
239
+ this.months.push({ value: i, text: dateValue.toLocaleString(this.locale, { month: 'long' }), disabled: isDisabled });
240
+ }
241
+ }
242
+ generateYears() {
243
+ this.years = [];
244
+ const currentYear = this.currentDate.getFullYear();
245
+ const maxDate = this.maxDate ? new Date(this.maxDate) : null;
246
+ const minDate = this.minDate ? new Date(this.minDate) : null;
247
+ for (let i = currentYear - 19; i <= currentYear + 10; i++) {
248
+ const isDisabled = ((minDate && i < minDate.getFullYear()) || (maxDate && i > maxDate.getFullYear())) ?? false;
249
+ this.years.push({ value: i, disabled: isDisabled });
250
+ }
251
+ }
252
+ validDate(date) {
253
+ return date instanceof Date && !isNaN(date.getTime());
254
+ }
255
+ onBlur() {
256
+ const order = this.detectDateOrder(this.locale);
257
+ const separator = this.detectDateSeparator(this.formatedDate);
258
+ const parts = this.formatedDate.split(separator).map(Number);
259
+ let isValid = false;
260
+ let date = undefined;
261
+ if (parts.length === 3 && !parts.some(isNaN)) {
262
+ const dateMap = {};
263
+ [dateMap[order[0]], dateMap[order[1]], dateMap[order[2]]] = parts;
264
+ const { day, month, year } = dateMap;
265
+ date = new Date(year, month - 1, day);
266
+ isValid = this.validDate(date) && date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day;
267
+ }
268
+ this.onTouched();
269
+ this.onChange(this.formatedDate);
270
+ if (isValid && date) {
271
+ this.dateSelected.emit(this.formatedDate);
272
+ this.selectedDate = date;
273
+ this.generateCalendar(this.currentDate);
274
+ }
275
+ else {
276
+ this.invalidDate.emit(this.formatedDate);
277
+ }
278
+ }
279
+ detectDateOrder(locale) {
280
+ const sample = new Date(2025, 10, 23); // 23/11/2025
281
+ const formatted = new Intl.DateTimeFormat(locale).format(sample);
282
+ const parts = formatted.match(/\d+/g);
283
+ if (!parts || parts.length !== 3)
284
+ return ['year', 'month', 'day']; // fallback
285
+ const order = [];
286
+ for (const part of parts) {
287
+ if (part === '23')
288
+ order.push('day');
289
+ else if (part === '11')
290
+ order.push('month');
291
+ else if (part === '2025')
292
+ order.push('year');
293
+ }
294
+ return order;
295
+ }
296
+ detectDateSeparator(dateStr) {
297
+ if (dateStr.includes('/'))
298
+ return '/';
299
+ if (dateStr.includes('-'))
300
+ return '-';
301
+ return ''; // fallback
302
+ }
303
+ clickOutside(event) {
304
+ const target = event.target;
305
+ if (!target.closest('.date-picker') && !target.closest('.month-body') && !target.closest('.year-body')) {
306
+ this.showCalendar = false;
307
+ }
308
+ }
309
+ isPreviousDisabled() {
310
+ if (!this.minDate) {
311
+ return false;
312
+ }
313
+ const minDate = new Date(this.minDate);
314
+ switch (this.pickerView) {
315
+ case 'week':
316
+ return this.currentDate.getFullYear() === minDate.getFullYear() && this.currentDate.getMonth() === minDate.getMonth();
317
+ case 'month':
318
+ return this.currentDate.getFullYear() === minDate.getFullYear();
319
+ case 'year':
320
+ return this.currentDate.getFullYear() - 30 < minDate.getFullYear();
321
+ default:
322
+ return false;
323
+ }
324
+ }
325
+ isNextDisabled() {
326
+ if (!this.maxDate) {
327
+ return false;
328
+ }
329
+ const maxDate = new Date(this.maxDate);
330
+ switch (this.pickerView) {
331
+ case 'week':
332
+ return this.currentDate.getFullYear() === maxDate.getFullYear() && this.currentDate.getMonth() === maxDate.getMonth();
333
+ case 'month':
334
+ return this.currentDate.getFullYear() === maxDate.getFullYear();
335
+ case 'year':
336
+ return this.currentDate.getFullYear() + 30 > maxDate.getFullYear();
337
+ default:
338
+ return false;
339
+ }
340
+ }
341
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EluxDatepicker, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
342
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: EluxDatepicker, isStandalone: true, selector: "lib-elux-datepicker", inputs: { value: "value", locale: "locale", idInput: "idInput", placeholder: "placeholder", minDate: "minDate", maxDate: "maxDate" }, outputs: { dateSelected: "dateSelected", invalidDate: "invalidDate" }, host: { listeners: { "document:click": "clickOutside($event)" } }, providers: [
343
+ {
344
+ provide: NG_VALUE_ACCESSOR,
345
+ useExisting: forwardRef(() => EluxDatepicker),
346
+ multi: true,
347
+ },
348
+ ], viewQueries: [{ propertyName: "datepicker", first: true, predicate: ["datepicker"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"date-picker\" #datepicker>\r\n <div class=\"div-calendar-icon\" (click)=\"!disabled ? toggleCalendar() : ''\">\r\n <lib-elux-icon class=\"calendar-icon\" [icon]=\"'Calendar.svg'\" [color]=\"'#011E41'\" [size]=\"'24'\" [sizeType]=\"'px'\"></lib-elux-icon>\r\n </div>\r\n <input\r\n [ngClass]=\"{\r\n 'date-input': true,\r\n 'ng-invalid': isInvalid,\r\n 'ng-touched': isTouched,\r\n }\"\r\n [value]=\"formatedDate\"\r\n (input)=\"onChangeValue($event)\"\r\n [id]=\"idInput\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n maxlength=\"10\"\r\n type=\"text\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <div class=\"calendar\" *ngIf=\"showCalendar\">\r\n <div class=\"calendar-header\">\r\n <div class=\"previous\" (click)=\"previous()\">\r\n <lib-elux-icon [hidden]=\"isPreviousDisabled()\" [icon]=\"'Chevron_Left.svg'\" [size]=\"'22'\" [sizeType]=\"'px'\"> </lib-elux-icon>\r\n </div>\r\n <span (click)=\"changeView()\">{{ pickerView === 'week' ? headerDate() : currentDate.getFullYear() }}</span>\r\n <div class=\"next\" (click)=\"next()\">\r\n <lib-elux-icon [hidden]=\"isNextDisabled()\" [icon]=\"'Chevron_Right.svg'\" [size]=\"'22'\" [sizeType]=\"'px'\"> </lib-elux-icon>\r\n </div>\r\n </div>\r\n <div class=\"calendar-body\" *ngIf=\"pickerView === 'week'\">\r\n <div class=\"day-labels\">\r\n <span *ngFor=\"let day of headerDateWeek()\">{{ day }}</span>\r\n </div>\r\n <ng-container *ngFor=\"let day of days\">\r\n <div class=\"day\" [ngClass]=\"{ disabled: day.disabled, today: day.today, selected: day.selected }\" (click)=\"day.disabled ? null : selectDate(day)\">\r\n <span>{{ day.day }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"year-body\" *ngIf=\"pickerView === 'year'\">\r\n <ng-container *ngFor=\"let year of years\">\r\n <div class=\"year\" *ngIf=\"!year.disabled\" (click)=\"!year.disabled && selectYear(year.value)\">\r\n {{ year.value }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"month-body\" *ngIf=\"pickerView === 'month'\">\r\n <ng-container *ngFor=\"let month of months\">\r\n <div class=\"month\" *ngIf=\"!month.disabled\" (click)=\"!month.disabled && selectMonth(month.value)\">\r\n {{ month.text }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".display{font-family:Electrolux Sans;font-size:48px;font-weight:700;line-height:56px}.heading-1{font-family:Electrolux Sans;font-size:34px;font-weight:700;line-height:40px}.heading-2{font-family:Electrolux Sans;font-size:28px;font-weight:600;line-height:32px}.heading-3{font-family:Electrolux Sans;font-size:20px;font-weight:600;line-height:24px}.subtitle-1{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:20px}.body,:host .month-body .month,:host .year-body .year,:host .calendar-body .day,:host .calendar-body .day-labels,:host .calendar-header span{font-family:Electrolux Sans;font-size:16px;font-weight:400;line-height:21px}.caption{font-family:Electrolux Sans;font-size:14px;font-weight:400;line-height:normal}.links{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:normal;text-decoration-line:underline}@media screen and (max-width: 768px){.display{font-family:Electrolux Sans;font-size:40px;font-weight:700;line-height:46px}.heading-1{font-family:Electrolux Sans;font-size:28px;font-weight:600;line-height:32px}.heading-2{font-family:Electrolux Sans;font-size:24px;font-weight:600;line-height:28px}.heading-3{font-family:Electrolux Sans;font-size:20px;font-weight:600;line-height:24px}.subtitle-1{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:20px}.body,:host .month-body .month,:host .year-body .year,:host .calendar-body .day,:host .calendar-body .day-labels,:host .calendar-header span{font-family:Electrolux Sans;font-size:16px;font-weight:400;line-height:21px}.caption{font-family:Electrolux Sans;font-size:14px;font-weight:400;line-height:normal}.links{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:normal;text-decoration-line:underline}}:host .date-picker{position:relative}:host .div-calendar-icon{border-left:solid 1px #7A8A9B;height:100%;position:absolute;right:0;display:flex;justify-content:center;align-items:center;width:50px;cursor:pointer}:host .calendar{position:absolute;top:50px;left:0;background:#f4f5f7;border-radius:2px;box-shadow:4px 4px 8px #0000001a;padding:32px 24px;z-index:1000}:host .calendar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;border-bottom:solid 1px #DEE7EA;padding-bottom:8px}:host .calendar-header button{background:none;border:none;cursor:pointer;font-size:18px}:host .calendar-header span{font-weight:600;color:#515253;cursor:pointer}:host .calendar-body{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}:host .calendar-body .day-labels{display:contents;text-align:center;margin-bottom:5px;font-weight:600;color:#515253}:host .calendar-body .day{font-size:12px;color:#515253;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s ease-in-out;border-radius:50%}:host .calendar-body .day:not(.disabled):hover{background:#dee7ea}:host .calendar-body .day.disabled{cursor:default;height:0px}:host .calendar-body .day.disabled span{display:none}:host .calendar-body .day:not(.disabled).today{border:1px solid #011E41}:host .calendar-body .day:not(.disabled).selected{font-size:12px;font-weight:600;background:#011e41;color:#fff}:host .previous,:host .next{cursor:pointer;width:25px}:host .year-body{display:grid;grid-template-columns:repeat(5,1fr);gap:5px}:host .year-body .year{color:#515253;text-align:center;cursor:pointer;display:flex;align-items:center;justify-content:center;width:45px;height:45px;transition:all .15s ease-in-out}:host .year-body .year:hover{background:#dee7ea;border-radius:50%}:host .month-body{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}:host .month-body .month{color:#515253;text-align:center;cursor:pointer;display:flex;align-items:center;justify-content:center;width:auto;height:40px;transition:all .15s ease-in-out}:host .month-body .month:hover{color:#c9c9ca}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: EluxIcon, selector: "lib-elux-icon", inputs: ["color", "useSubscription", "icon", "description", "size", "height", "width", "sizeType"] }] }); }
349
+ }
350
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EluxDatepicker, decorators: [{
351
+ type: Component,
352
+ args: [{ selector: 'lib-elux-datepicker', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, EluxIcon], providers: [
353
+ {
354
+ provide: NG_VALUE_ACCESSOR,
355
+ useExisting: forwardRef(() => EluxDatepicker),
356
+ multi: true,
357
+ },
358
+ ], template: "<div class=\"date-picker\" #datepicker>\r\n <div class=\"div-calendar-icon\" (click)=\"!disabled ? toggleCalendar() : ''\">\r\n <lib-elux-icon class=\"calendar-icon\" [icon]=\"'Calendar.svg'\" [color]=\"'#011E41'\" [size]=\"'24'\" [sizeType]=\"'px'\"></lib-elux-icon>\r\n </div>\r\n <input\r\n [ngClass]=\"{\r\n 'date-input': true,\r\n 'ng-invalid': isInvalid,\r\n 'ng-touched': isTouched,\r\n }\"\r\n [value]=\"formatedDate\"\r\n (input)=\"onChangeValue($event)\"\r\n [id]=\"idInput\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n maxlength=\"10\"\r\n type=\"text\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <div class=\"calendar\" *ngIf=\"showCalendar\">\r\n <div class=\"calendar-header\">\r\n <div class=\"previous\" (click)=\"previous()\">\r\n <lib-elux-icon [hidden]=\"isPreviousDisabled()\" [icon]=\"'Chevron_Left.svg'\" [size]=\"'22'\" [sizeType]=\"'px'\"> </lib-elux-icon>\r\n </div>\r\n <span (click)=\"changeView()\">{{ pickerView === 'week' ? headerDate() : currentDate.getFullYear() }}</span>\r\n <div class=\"next\" (click)=\"next()\">\r\n <lib-elux-icon [hidden]=\"isNextDisabled()\" [icon]=\"'Chevron_Right.svg'\" [size]=\"'22'\" [sizeType]=\"'px'\"> </lib-elux-icon>\r\n </div>\r\n </div>\r\n <div class=\"calendar-body\" *ngIf=\"pickerView === 'week'\">\r\n <div class=\"day-labels\">\r\n <span *ngFor=\"let day of headerDateWeek()\">{{ day }}</span>\r\n </div>\r\n <ng-container *ngFor=\"let day of days\">\r\n <div class=\"day\" [ngClass]=\"{ disabled: day.disabled, today: day.today, selected: day.selected }\" (click)=\"day.disabled ? null : selectDate(day)\">\r\n <span>{{ day.day }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"year-body\" *ngIf=\"pickerView === 'year'\">\r\n <ng-container *ngFor=\"let year of years\">\r\n <div class=\"year\" *ngIf=\"!year.disabled\" (click)=\"!year.disabled && selectYear(year.value)\">\r\n {{ year.value }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"month-body\" *ngIf=\"pickerView === 'month'\">\r\n <ng-container *ngFor=\"let month of months\">\r\n <div class=\"month\" *ngIf=\"!month.disabled\" (click)=\"!month.disabled && selectMonth(month.value)\">\r\n {{ month.text }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".display{font-family:Electrolux Sans;font-size:48px;font-weight:700;line-height:56px}.heading-1{font-family:Electrolux Sans;font-size:34px;font-weight:700;line-height:40px}.heading-2{font-family:Electrolux Sans;font-size:28px;font-weight:600;line-height:32px}.heading-3{font-family:Electrolux Sans;font-size:20px;font-weight:600;line-height:24px}.subtitle-1{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:20px}.body,:host .month-body .month,:host .year-body .year,:host .calendar-body .day,:host .calendar-body .day-labels,:host .calendar-header span{font-family:Electrolux Sans;font-size:16px;font-weight:400;line-height:21px}.caption{font-family:Electrolux Sans;font-size:14px;font-weight:400;line-height:normal}.links{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:normal;text-decoration-line:underline}@media screen and (max-width: 768px){.display{font-family:Electrolux Sans;font-size:40px;font-weight:700;line-height:46px}.heading-1{font-family:Electrolux Sans;font-size:28px;font-weight:600;line-height:32px}.heading-2{font-family:Electrolux Sans;font-size:24px;font-weight:600;line-height:28px}.heading-3{font-family:Electrolux Sans;font-size:20px;font-weight:600;line-height:24px}.subtitle-1{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:20px}.body,:host .month-body .month,:host .year-body .year,:host .calendar-body .day,:host .calendar-body .day-labels,:host .calendar-header span{font-family:Electrolux Sans;font-size:16px;font-weight:400;line-height:21px}.caption{font-family:Electrolux Sans;font-size:14px;font-weight:400;line-height:normal}.links{font-family:Electrolux Sans;font-size:16px;font-weight:600;line-height:normal;text-decoration-line:underline}}:host .date-picker{position:relative}:host .div-calendar-icon{border-left:solid 1px #7A8A9B;height:100%;position:absolute;right:0;display:flex;justify-content:center;align-items:center;width:50px;cursor:pointer}:host .calendar{position:absolute;top:50px;left:0;background:#f4f5f7;border-radius:2px;box-shadow:4px 4px 8px #0000001a;padding:32px 24px;z-index:1000}:host .calendar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;border-bottom:solid 1px #DEE7EA;padding-bottom:8px}:host .calendar-header button{background:none;border:none;cursor:pointer;font-size:18px}:host .calendar-header span{font-weight:600;color:#515253;cursor:pointer}:host .calendar-body{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}:host .calendar-body .day-labels{display:contents;text-align:center;margin-bottom:5px;font-weight:600;color:#515253}:host .calendar-body .day{font-size:12px;color:#515253;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s ease-in-out;border-radius:50%}:host .calendar-body .day:not(.disabled):hover{background:#dee7ea}:host .calendar-body .day.disabled{cursor:default;height:0px}:host .calendar-body .day.disabled span{display:none}:host .calendar-body .day:not(.disabled).today{border:1px solid #011E41}:host .calendar-body .day:not(.disabled).selected{font-size:12px;font-weight:600;background:#011e41;color:#fff}:host .previous,:host .next{cursor:pointer;width:25px}:host .year-body{display:grid;grid-template-columns:repeat(5,1fr);gap:5px}:host .year-body .year{color:#515253;text-align:center;cursor:pointer;display:flex;align-items:center;justify-content:center;width:45px;height:45px;transition:all .15s ease-in-out}:host .year-body .year:hover{background:#dee7ea;border-radius:50%}:host .month-body{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}:host .month-body .month{color:#515253;text-align:center;cursor:pointer;display:flex;align-items:center;justify-content:center;width:auto;height:40px;transition:all .15s ease-in-out}:host .month-body .month:hover{color:#c9c9ca}\n"] }]
359
+ }], ctorParameters: () => [{ type: i0.Injector }], propDecorators: { value: [{
360
+ type: Input
361
+ }], locale: [{
362
+ type: Input
363
+ }], idInput: [{
364
+ type: Input
365
+ }], placeholder: [{
366
+ type: Input
367
+ }], minDate: [{
368
+ type: Input
369
+ }], maxDate: [{
370
+ type: Input
371
+ }], dateSelected: [{
372
+ type: Output
373
+ }], invalidDate: [{
374
+ type: Output
375
+ }], datepicker: [{
376
+ type: ViewChild,
377
+ args: ['datepicker']
378
+ }], clickOutside: [{
379
+ type: HostListener,
380
+ args: ['document:click', ['$event']]
381
+ }] } });
382
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi91aS9saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdWkvbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXFDLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuSSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsWUFBWSxFQUFFLFNBQVMsRUFBd0IsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BLLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7OztBQStCbkMsTUFBTSxPQUFPLGNBQWM7SUF5QnpCLFlBQTZCLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUF4QnRDLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsV0FBTSxHQUFXLE9BQU8sQ0FBQztRQUN6QixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3JCLGdCQUFXLEdBQVcsWUFBWSxDQUFDO1FBR2xDLGlCQUFZLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDaEUsZ0JBQVcsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUd6RSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGVBQVUsR0FBOEIsTUFBTSxDQUFDO1FBQy9DLGdCQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixpQkFBWSxHQUFnQixJQUFJLENBQUM7UUFDakMsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsU0FBSSxHQUFVLEVBQUUsQ0FBQztRQUNqQixXQUFNLEdBQVksRUFBRSxDQUFDO1FBQ3JCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFFWCxhQUFRLEdBQWEsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ3JDLGNBQVMsR0FBYSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFHSSxDQUFDO0lBRW5ELHVCQUF1QjtRQUNyQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsT0FBc0IsQ0FBQztRQUM1RCxDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBWTtRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBWTtRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUM7SUFDMUUsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQztJQUN6QyxDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3JELEtBQUssRUFBRSxNQUFNO1NBQ2QsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRTVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUUvQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGdCQUFnQixDQUFFLFVBQW1CO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQVk7UUFDeEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQTBCLENBQUM7UUFDL0MsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUQsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzVCLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdHLENBQUM7UUFFRCxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDaEMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELHlCQUF5QixDQUFDLE1BQWM7UUFDdEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDaEMsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN2QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztnQkFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULE1BQU07WUFDUjtnQkFDRSxNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELFFBQVE7UUFDTixRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixNQUFNO1lBQ1IsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEIsTUFBTTtZQUNSO2dCQUNFLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUk7UUFDRixRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixNQUFNO1lBQ1IsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEIsTUFBTTtZQUNSO2dCQUNFLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQWdCO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVEsQ0FBQyxRQUFnQjtRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBUTtRQUNqQixNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWhHLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3BFLEdBQUcsRUFBRSxTQUFTO1lBQ2QsS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLFNBQVM7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXLENBQUMsVUFBa0I7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDN0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFOUUsSUFBSSxPQUFPLElBQUksYUFBYSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVk7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVk7UUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztJQUM1QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBVTtRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDN0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDN0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssS0FBSyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUM7UUFDaEYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN0RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3BELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFFakQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzlELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFbEUsa0RBQWtEO1FBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsZ0NBQWdDO1FBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0MsTUFBTSxPQUFPLEdBQUcsWUFBWSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxVQUFVLEdBQUcsWUFBWSxLQUFLLElBQUksSUFBSSxhQUFhLEtBQUssS0FBSyxJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUM7WUFDekYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO1lBQ2pHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDdkYsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUU3RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUIsbUVBQW1FO1lBQ25FLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO1lBQ25HLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDdkgsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUU3RCxLQUFLLElBQUksQ0FBQyxHQUFHLFdBQVcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFdBQVcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMxRCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7WUFDL0csSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVU7UUFDbEIsT0FBTyxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxNQUFNO1FBQ0osTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU5RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0QsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksSUFBSSxHQUFxQixTQUFTLENBQUM7UUFFdkMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxNQUFNLE9BQU8sR0FBOEIsRUFBRSxDQUFDO1lBQzlDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFFbEUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBdUQsQ0FBQztZQUVyRixJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFdEMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssR0FBRyxDQUFDO1FBQzNILENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFakMsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsTUFBYztRQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpFLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVc7UUFFOUUsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBQzNCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLEtBQUssSUFBSTtnQkFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNoQyxJQUFJLElBQUksS0FBSyxJQUFJO2dCQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3ZDLElBQUksSUFBSSxLQUFLLE1BQU07Z0JBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sbUJBQW1CLENBQUMsT0FBZTtRQUN6QyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFDdEMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ3RDLE9BQU8sRUFBRSxDQUFDLENBQUMsV0FBVztJQUN4QixDQUFDO0lBR0QsWUFBWSxDQUFDLEtBQVk7UUFDdkIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLEtBQUssTUFBTTtnQkFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hILEtBQUssT0FBTztnQkFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xFLEtBQUssTUFBTTtnQkFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyRTtnQkFDRSxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4SCxLQUFLLE9BQU87Z0JBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsRSxLQUFLLE1BQU07Z0JBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckU7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7K0dBMVlVLGNBQWM7bUdBQWQsY0FBYyxrVkFWZDtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO2dCQUM3QyxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YseUpDOUJILHk3RUF1REEsMjBIRGhDWSxZQUFZLDZWQUFFLG1CQUFtQiw4QkFBRSxXQUFXLCtCQUFFLFFBQVE7OzRGQVd2RCxjQUFjO2tCQWQxQixTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxhQUN4RDt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUM7NEJBQzdDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzZFQUtRLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ2tCLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkF3VnZCLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ0NvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgSG9zdExpc3RlbmVyLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEluamVjdG9yLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEVsdXhJY29uIH0gZnJvbSAnLi4vaWNvbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERheSB7XHJcbiAgZGF5OiBudW1iZXI7XHJcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xyXG4gIHRvZGF5PzogYm9vbGVhbjtcclxuICBkaXNhYmxlZDogYm9vbGVhbjtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIE1vbnRoIHtcclxuICB2YWx1ZTogbnVtYmVyO1xyXG4gIHRleHQ6IHN0cmluZztcclxuICBkaXNhYmxlZDogYm9vbGVhbjtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIFllYXIge1xyXG4gIHZhbHVlOiBudW1iZXI7XHJcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZWx1eC1kYXRlcGlja2VyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlLCBFbHV4SWNvbl0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFbHV4RGF0ZXBpY2tlciksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbHV4RGF0ZXBpY2tlciBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGxvY2FsZTogc3RyaW5nID0gJ3B0LUJSJztcclxuICBASW5wdXQoKSBpZElucHV0OiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJzAwLzAwLzAwMDAnO1xyXG4gIEBJbnB1dCgpIG1pbkRhdGU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbWF4RGF0ZT86IHN0cmluZztcclxuICBAT3V0cHV0KCkgZGF0ZVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBpbnZhbGlkRGF0ZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAVmlld0NoaWxkKCdkYXRlcGlja2VyJykgZGF0ZXBpY2tlciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgc2hvd0NhbGVuZGFyID0gZmFsc2U7XHJcbiAgcGlja2VyVmlldzogJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJyA9ICd3ZWVrJztcclxuICBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgc2VsZWN0ZWREYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgZm9ybWF0ZWREYXRlOiBzdHJpbmcgPSAnJztcclxuICBkYXlzOiBEYXlbXSA9IFtdO1xyXG4gIG1vbnRoczogTW9udGhbXSA9IFtdO1xyXG4gIHllYXJzOiBZZWFyW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZTogRnVuY3Rpb24gPSAoKSA9PiB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6IEZ1bmN0aW9uID0gKCkgPT4gdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgcGFyZW50Rm9ybUNvbnRyb2whOiBGb3JtQ29udHJvbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XHJcblxyXG4gIGluamVjdFBhcmVudEZvcm1Db250cm9sKCkge1xyXG4gICAgY29uc3QgbmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcclxuICAgIGlmIChuZ0NvbnRyb2wpIHtcclxuICAgICAgdGhpcy5wYXJlbnRGb3JtQ29udHJvbCA9IG5nQ29udHJvbC5jb250cm9sIGFzIEZvcm1Db250cm9sO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1hdGVkRGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vbkJsdXIoKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IEZ1bmN0aW9uKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogRnVuY3Rpb24pOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBnZXQgaXNUb3VjaGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50Rm9ybUNvbnRyb2w/LnRvdWNoZWQgfHwgdGhpcy5wYXJlbnRGb3JtQ29udHJvbD8uZGlydHk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50Rm9ybUNvbnRyb2w/LmludmFsaWQ7XHJcbiAgfVxyXG5cclxuICBoZWFkZXJEYXRlKCkge1xyXG4gICAgcmV0dXJuIGAke3RoaXMuY3VycmVudERhdGUudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUsIHtcclxuICAgICAgbW9udGg6ICdsb25nJyxcclxuICAgIH0pfSAke3RoaXMuY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKX1gO1xyXG4gIH1cclxuXHJcbiAgaGVhZGVyRGF0ZVdlZWsoKSB7XHJcbiAgICBjb25zdCBkYXlzT2ZXZWVrID0gW107XHJcbiAgICBjb25zdCBiYXNlRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcclxuICAgICAgY29uc3QgZGF5ID0gbmV3IERhdGUoYmFzZURhdGUuc2V0RGF0ZShiYXNlRGF0ZS5nZXREYXRlKCkgLSBiYXNlRGF0ZS5nZXREYXkoKSArIGkpKTtcclxuICAgICAgZGF5c09mV2Vlay5wdXNoKGRheS50b0xvY2FsZURhdGVTdHJpbmcodGhpcy5sb2NhbGUsIHsgd2Vla2RheTogJ25hcnJvdycgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXlzT2ZXZWVrO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmluamVjdFBhcmVudEZvcm1Db250cm9sKCk7XHJcblxyXG4gICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgdGhpcy5mb3JtYXRlZERhdGUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLm9uQmx1cigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcih0aGlzLmN1cnJlbnREYXRlKTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3ZhbHVlJ10gJiYgIWNoYW5nZXNbJ3ZhbHVlJ10uaXNGaXJzdENoYW5nZSgpKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ZWREYXRlID0gdGhpcy52YWx1ZTtcclxuICAgICAgdGhpcy5vbkJsdXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlVmFsdWUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgbGV0IHZhbHVlID0gaW5wdXQudmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuZGV0ZWN0TG9jYWxlRGF0ZVNlcGFyYXRvcih0aGlzLmxvY2FsZSk7XHJcblxyXG4gICAgaWYgKHZhbHVlLmxlbmd0aCA8PSAyKSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ZWREYXRlID0gdmFsdWU7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA8PSA0KSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0ZWREYXRlID0gYCR7dmFsdWUuc2xpY2UoMCwgMil9JHtzZXBhcmF0b3J9JHt2YWx1ZS5zbGljZSgyKX1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtYXRlZERhdGUgPSBgJHt2YWx1ZS5zbGljZSgwLCAyKX0ke3NlcGFyYXRvcn0ke3ZhbHVlLnNsaWNlKDIsIDQpfSR7c2VwYXJhdG9yfSR7dmFsdWUuc2xpY2UoNCwgOCl9YDtcclxuICAgIH1cclxuXHJcbiAgICBpbnB1dC52YWx1ZSA9IHRoaXMuZm9ybWF0ZWREYXRlO1xyXG4gICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UoaW5wdXQudmFsdWUubGVuZ3RoLCBpbnB1dC52YWx1ZS5sZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgZGV0ZWN0TG9jYWxlRGF0ZVNlcGFyYXRvcihsb2NhbGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzYW1wbGVEYXRlID0gbmV3IERhdGUoMjAwMCwgMCwgMTUpO1xyXG4gICAgY29uc3QgZm9ybWF0dGVkID0gc2FtcGxlRGF0ZS50b0xvY2FsZURhdGVTdHJpbmcobG9jYWxlKTtcclxuICAgIGNvbnN0IG1hdGNoID0gZm9ybWF0dGVkLm1hdGNoKC9bXjAtOV0vKTtcclxuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzBdIDogJy8nO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQ2FsZW5kYXIoKSB7XHJcbiAgICB0aGlzLnNob3dDYWxlbmRhciA9ICF0aGlzLnNob3dDYWxlbmRhcjtcclxuICAgIGlmICh0aGlzLnNob3dDYWxlbmRhcikge1xyXG4gICAgICB0aGlzLnBpY2tlclZpZXcgPSAnd2Vlayc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VWaWV3KCkge1xyXG4gICAgc3dpdGNoICh0aGlzLnBpY2tlclZpZXcpIHtcclxuICAgICAgY2FzZSAnd2Vlayc6XHJcbiAgICAgICAgdGhpcy5waWNrZXJWaWV3ID0gJ21vbnRoJztcclxuICAgICAgICB0aGlzLmdlbmVyYXRlTW9udGhzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21vbnRoJzpcclxuICAgICAgICB0aGlzLnBpY2tlclZpZXcgPSAneWVhcic7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVllYXJzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3llYXInOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VDYWxlbmRhcigpIHtcclxuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcmV2aW91cygpIHtcclxuICAgIHN3aXRjaCAodGhpcy5waWNrZXJWaWV3KSB7XHJcbiAgICAgIGNhc2UgJ3dlZWsnOlxyXG4gICAgICAgIHRoaXMucHJldk1vbnRoKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21vbnRoJzpcclxuICAgICAgICB0aGlzLnByZXZZZWFyKDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd5ZWFyJzpcclxuICAgICAgICB0aGlzLnByZXZZZWFyKDMwKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMucGlja2VyVmlldykge1xyXG4gICAgICBjYXNlICd3ZWVrJzpcclxuICAgICAgICB0aGlzLm5leHRNb250aCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdtb250aCc6XHJcbiAgICAgICAgdGhpcy5uZXh0WWVhcigxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAneWVhcic6XHJcbiAgICAgICAgdGhpcy5uZXh0WWVhcigzMCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcmV2TW9udGgoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnREYXRlID0gbmV3IERhdGUodGhpcy5jdXJyZW50RGF0ZS5zZXRNb250aCh0aGlzLmN1cnJlbnREYXRlLmdldE1vbnRoKCkgLSAxKSk7XHJcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIodGhpcy5jdXJyZW50RGF0ZSk7XHJcbiAgfVxyXG5cclxuICBuZXh0TW9udGgoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnREYXRlID0gbmV3IERhdGUodGhpcy5jdXJyZW50RGF0ZS5zZXRNb250aCh0aGlzLmN1cnJlbnREYXRlLmdldE1vbnRoKCkgKyAxKSk7XHJcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIodGhpcy5jdXJyZW50RGF0ZSk7XHJcbiAgfVxyXG5cclxuICBwcmV2WWVhcih5ZWFyUXRkZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlWWVhcih0aGlzLmN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCkgLSB5ZWFyUXRkZSk7XHJcbiAgICB0aGlzLmdlbmVyYXRlWWVhcnMoKTtcclxuICB9XHJcblxyXG4gIG5leHRZZWFyKHllYXJRdGRlOiBudW1iZXIpIHtcclxuICAgIHRoaXMub25DaGFuZ2VZZWFyKHRoaXMuY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSArIHllYXJRdGRlKTtcclxuICAgIHRoaXMuZ2VuZXJhdGVZZWFycygpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0RGF0ZShkYXk6IERheSkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMuY3VycmVudERhdGUuZ2V0TW9udGgoKSwgZGF5LmRheSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBzZWxlY3RlZDtcclxuICAgIHRoaXMuZm9ybWF0ZWREYXRlID0gdGhpcy5zZWxlY3RlZERhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlLCB7XHJcbiAgICAgIGRheTogJzItZGlnaXQnLFxyXG4gICAgICBtb250aDogJzItZGlnaXQnLFxyXG4gICAgICB5ZWFyOiAnbnVtZXJpYycsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIodGhpcy5jdXJyZW50RGF0ZSk7XHJcbiAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcclxuICAgIHRoaXMub25CbHVyKCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RNb250aChtb250aFZhbHVlOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLm1heERhdGUgPyBuZXcgRGF0ZSh0aGlzLm1heERhdGUpIDogbnVsbDtcclxuICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCksIG1vbnRoVmFsdWUsIDEpO1xyXG5cclxuICAgIGlmIChtYXhEYXRlICYmIHNlbGVjdGVkTW9udGggPiBuZXcgRGF0ZShtYXhEYXRlLmdldEZ1bGxZZWFyKCksIG1heERhdGUuZ2V0TW9udGgoKSwgMSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3VycmVudERhdGUgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCksIG1vbnRoVmFsdWUsIDEwKTtcclxuICAgIHRoaXMucGlja2VyVmlldyA9ICd3ZWVrJztcclxuICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcih0aGlzLmN1cnJlbnREYXRlKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlWWVhcih5ZWFyOiBudW1iZXIpIHtcclxuICAgIHRoaXMuY3VycmVudERhdGUgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnREYXRlLnNldEZ1bGxZZWFyKHllYXIpKTtcclxuICAgIHRoaXMuZ2VuZXJhdGVNb250aHMoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFllYXIoeWVhcjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlWWVhcih5ZWFyKTtcclxuICAgIHRoaXMucGlja2VyVmlldyA9ICdtb250aCc7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUNhbGVuZGFyKGRhdGU6IERhdGUpIHtcclxuICAgIHRoaXMuZGF5cyA9IFtdO1xyXG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xyXG4gICAgY29uc3QgbWluRGF0ZSA9IHRoaXMubWluRGF0ZSA/IG5ldyBEYXRlKHRoaXMubWluRGF0ZSkgOiBudWxsO1xyXG4gICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMubWF4RGF0ZSA/IG5ldyBEYXRlKHRoaXMubWF4RGF0ZSkgOiBudWxsO1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgaXNUb2RheU1vbnRoID0gdG9kYXkuZ2V0TW9udGgoKSA9PT0gbW9udGggJiYgdG9kYXkuZ2V0RnVsbFllYXIoKSA9PT0geWVhcjtcclxuICAgIGNvbnN0IHNlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWREYXRlPy5nZXRGdWxsWWVhcigpO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRNb250aCA9IHRoaXMuc2VsZWN0ZWREYXRlPy5nZXRNb250aCgpO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWREYXkgPSB0aGlzLnNlbGVjdGVkRGF0ZT8uZ2V0RGF0ZSgpO1xyXG5cclxuICAgIGNvbnN0IGZpcnN0V2Vla0RheU9mTW9udGggPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkuZ2V0RGF5KCk7XHJcbiAgICBjb25zdCBsYXN0V2Vla0RheU9mTW9udGggPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKTtcclxuXHJcbiAgICAvLyBQcmVlbmNoZSBvcyBkaWFzIGRvIG3DqnMgYW50ZXJpb3IsIHNlIG5lY2Vzc8OhcmlvXHJcbiAgICBmb3IgKGxldCBpID0gZmlyc3RXZWVrRGF5T2ZNb250aDsgaSA+IDA7IGktLSkge1xyXG4gICAgICB0aGlzLmRheXMucHVzaCh7IGRheTogMCwgZGlzYWJsZWQ6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUHJlZW5jaGUgb3MgZGlhcyBkbyBtw6pzIGF0dWFsXHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBsYXN0V2Vla0RheU9mTW9udGg7IGkrKykge1xyXG4gICAgICBjb25zdCBkYXRlVmFsdWUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSk7XHJcbiAgICAgIGNvbnN0IGlzVG9kYXkgPSBpc1RvZGF5TW9udGggJiYgdG9kYXkuZ2V0RGF0ZSgpID09PSBpO1xyXG4gICAgICBjb25zdCBpc1NlbGVjdGVkID0gc2VsZWN0ZWRZZWFyID09PSB5ZWFyICYmIHNlbGVjdGVkTW9udGggPT09IG1vbnRoICYmIHNlbGVjdGVkRGF5ID09PSBpO1xyXG4gICAgICBjb25zdCBkaXNhYmxlZCA9ICgobWluRGF0ZSAmJiBkYXRlVmFsdWUgPCBtaW5EYXRlKSB8fCAobWF4RGF0ZSAmJiBkYXRlVmFsdWUgPiBtYXhEYXRlKSkgPz8gZmFsc2U7XHJcbiAgICAgIHRoaXMuZGF5cy5wdXNoKHsgZGF5OiBpLCB0b2RheTogaXNUb2RheSwgc2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsIGRpc2FibGVkOiBkaXNhYmxlZCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdlbmVyYXRlTW9udGhzKCkge1xyXG4gICAgdGhpcy5tb250aHMgPSBbXTtcclxuICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gdGhpcy5jdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMubWF4RGF0ZSA/IG5ldyBEYXRlKHRoaXMubWF4RGF0ZSkgOiBudWxsO1xyXG4gICAgY29uc3QgbWluRGF0ZSA9IHRoaXMubWluRGF0ZSA/IG5ldyBEYXRlKHRoaXMubWluRGF0ZSkgOiBudWxsO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IGkrKykge1xyXG4gICAgICAvLyBVc2FyIG8gZGlhIDEgcGFyYSBldml0YXIgcHJvYmxlbWFzIGNvbSBtZXNlcyBxdWUgbsOjbyB0w6ptIDMxIGRpYXNcclxuICAgICAgY29uc3QgZGF0ZVZhbHVlID0gbmV3IERhdGUoY3VycmVudFllYXIsIGksIDEpO1xyXG4gICAgICBjb25zdCBpc0Rpc2FibGVkID0gKChtaW5EYXRlICYmIGRhdGVWYWx1ZSA8IG1pbkRhdGUpIHx8IChtYXhEYXRlICYmIGRhdGVWYWx1ZSA+IG1heERhdGUpKSA/PyBmYWxzZTtcclxuICAgICAgdGhpcy5tb250aHMucHVzaCh7IHZhbHVlOiBpLCB0ZXh0OiBkYXRlVmFsdWUudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUsIHsgbW9udGg6ICdsb25nJyB9KSwgZGlzYWJsZWQ6IGlzRGlzYWJsZWQgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVllYXJzKCkge1xyXG4gICAgdGhpcy55ZWFycyA9IFtdO1xyXG4gICAgY29uc3QgY3VycmVudFllYXIgPSB0aGlzLmN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5tYXhEYXRlID8gbmV3IERhdGUodGhpcy5tYXhEYXRlKSA6IG51bGw7XHJcbiAgICBjb25zdCBtaW5EYXRlID0gdGhpcy5taW5EYXRlID8gbmV3IERhdGUodGhpcy5taW5EYXRlKSA6IG51bGw7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IGN1cnJlbnRZZWFyIC0gMTk7IGkgPD0gY3VycmVudFllYXIgKyAxMDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGlzRGlzYWJsZWQgPSAoKG1pbkRhdGUgJiYgaSA8IG1pbkRhdGUuZ2V0RnVsbFllYXIoKSkgfHwgKG1heERhdGUgJiYgaSA+IG1heERhdGUuZ2V0RnVsbFllYXIoKSkpID8/IGZhbHNlO1xyXG4gICAgICB0aGlzLnllYXJzLnB1c2goeyB2YWx1ZTogaSwgZGlzYWJsZWQ6IGlzRGlzYWJsZWQgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZERhdGUoZGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSk7XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBvcmRlciA9IHRoaXMuZGV0ZWN0RGF0ZU9yZGVyKHRoaXMubG9jYWxlKTtcclxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuZGV0ZWN0RGF0ZVNlcGFyYXRvcih0aGlzLmZvcm1hdGVkRGF0ZSk7XHJcblxyXG4gICAgY29uc3QgcGFydHMgPSB0aGlzLmZvcm1hdGVkRGF0ZS5zcGxpdChzZXBhcmF0b3IpLm1hcChOdW1iZXIpO1xyXG5cclxuICAgIGxldCBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICBsZXQgZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAzICYmICFwYXJ0cy5zb21lKGlzTmFOKSkge1xyXG4gICAgICBjb25zdCBkYXRlTWFwOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XHJcbiAgICAgIFtkYXRlTWFwW29yZGVyWzBdXSwgZGF0ZU1hcFtvcmRlclsxXV0sIGRhdGVNYXBbb3JkZXJbMl1dXSA9IHBhcnRzO1xyXG5cclxuICAgICAgY29uc3QgeyBkYXksIG1vbnRoLCB5ZWFyIH0gPSBkYXRlTWFwIGFzIHsgZGF5OiBudW1iZXI7IG1vbnRoOiBudW1iZXI7IHllYXI6IG51bWJlciB9O1xyXG5cclxuICAgICAgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcclxuXHJcbiAgICAgIGlzVmFsaWQgPSB0aGlzLnZhbGlkRGF0ZShkYXRlKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHllYXIgJiYgZGF0ZS5nZXRNb250aCgpID09PSBtb250aCAtIDEgJiYgZGF0ZS5nZXREYXRlKCkgPT09IGRheTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLmZvcm1hdGVkRGF0ZSk7XHJcblxyXG4gICAgaWYgKGlzVmFsaWQgJiYgZGF0ZSkge1xyXG4gICAgICB0aGlzLmRhdGVTZWxlY3RlZC5lbWl0KHRoaXMuZm9ybWF0ZWREYXRlKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBkYXRlO1xyXG4gICAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIodGhpcy5jdXJyZW50RGF0ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludmFsaWREYXRlLmVtaXQodGhpcy5mb3JtYXRlZERhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZXRlY3REYXRlT3JkZXIobG9jYWxlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBzYW1wbGUgPSBuZXcgRGF0ZSgyMDI1LCAxMCwgMjMpOyAvLyAyMy8xMS8yMDI1XHJcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUpLmZvcm1hdChzYW1wbGUpO1xyXG5cclxuICAgIGNvbnN0IHBhcnRzID0gZm9ybWF0dGVkLm1hdGNoKC9cXGQrL2cpO1xyXG4gICAgaWYgKCFwYXJ0cyB8fCBwYXJ0cy5sZW5ndGggIT09IDMpIHJldHVybiBbJ3llYXInLCAnbW9udGgnLCAnZGF5J107IC8vIGZhbGxiYWNrXHJcblxyXG4gICAgY29uc3Qgb3JkZXI6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcclxuICAgICAgaWYgKHBhcnQgPT09ICcyMycpIG9yZGVyLnB1c2goJ2RheScpO1xyXG4gICAgICBlbHNlIGlmIChwYXJ0ID09PSAnMTEnKSBvcmRlci5wdXNoKCdtb250aCcpO1xyXG4gICAgICBlbHNlIGlmIChwYXJ0ID09PSAnMjAyNScpIG9yZGVyLnB1c2goJ3llYXInKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3JkZXI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRldGVjdERhdGVTZXBhcmF0b3IoZGF0ZVN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChkYXRlU3RyLmluY2x1ZGVzKCcvJykpIHJldHVybiAnLyc7XHJcbiAgICBpZiAoZGF0ZVN0ci5pbmNsdWRlcygnLScpKSByZXR1cm4gJy0nO1xyXG4gICAgcmV0dXJuICcnOyAvLyBmYWxsYmFja1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIGNsaWNrT3V0c2lkZShldmVudDogRXZlbnQpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5kYXRlLXBpY2tlcicpICYmICF0YXJnZXQuY2xvc2VzdCgnLm1vbnRoLWJvZHknKSAmJiAhdGFyZ2V0LmNsb3Nlc3QoJy55ZWFyLWJvZHknKSkge1xyXG4gICAgICB0aGlzLnNob3dDYWxlbmRhciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNQcmV2aW91c0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLm1pbkRhdGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1pbkRhdGUgPSBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpO1xyXG4gICAgc3dpdGNoICh0aGlzLnBpY2tlclZpZXcpIHtcclxuICAgICAgY2FzZSAnd2Vlayc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSA9PT0gbWluRGF0ZS5nZXRGdWxsWWVhcigpICYmIHRoaXMuY3VycmVudERhdGUuZ2V0TW9udGgoKSA9PT0gbWluRGF0ZS5nZXRNb250aCgpO1xyXG4gICAgICBjYXNlICdtb250aCc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSA9PT0gbWluRGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICBjYXNlICd5ZWFyJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpIC0gMzAgPCBtaW5EYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNOZXh0RGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMubWF4RGF0ZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWF4RGF0ZSA9IG5ldyBEYXRlKHRoaXMubWF4RGF0ZSk7XHJcbiAgICBzd2l0Y2ggKHRoaXMucGlja2VyVmlldykge1xyXG4gICAgICBjYXNlICd3ZWVrJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpID09PSBtYXhEYXRlLmdldEZ1bGxZZWFyKCkgJiYgdGhpcy5jdXJyZW50RGF0ZS5nZXRNb250aCgpID09PSBtYXhEYXRlLmdldE1vbnRoKCk7XHJcbiAgICAgIGNhc2UgJ21vbnRoJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpID09PSBtYXhEYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgIGNhc2UgJ3llYXInOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCkgKyAzMCA+IG1heERhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlclwiICNkYXRlcGlja2VyPlxyXG4gIDxkaXYgY2xhc3M9XCJkaXYtY2FsZW5kYXItaWNvblwiIChjbGljayk9XCIhZGlzYWJsZWQgPyB0b2dnbGVDYWxlbmRhcigpIDogJydcIj5cclxuICAgIDxsaWItZWx1eC1pY29uIGNsYXNzPVwiY2FsZW5kYXItaWNvblwiIFtpY29uXT1cIidDYWxlbmRhci5zdmcnXCIgW2NvbG9yXT1cIicjMDExRTQxJ1wiIFtzaXplXT1cIicyNCdcIiBbc2l6ZVR5cGVdPVwiJ3B4J1wiPjwvbGliLWVsdXgtaWNvbj5cclxuICA8L2Rpdj5cclxuICA8aW5wdXRcclxuICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgJ2RhdGUtaW5wdXQnOiB0cnVlLFxyXG4gICAgICAnbmctaW52YWxpZCc6IGlzSW52YWxpZCxcclxuICAgICAgJ25nLXRvdWNoZWQnOiBpc1RvdWNoZWQsXHJcbiAgICB9XCJcclxuICAgIFt2YWx1ZV09XCJmb3JtYXRlZERhdGVcIlxyXG4gICAgKGlucHV0KT1cIm9uQ2hhbmdlVmFsdWUoJGV2ZW50KVwiXHJcbiAgICBbaWRdPVwiaWRJbnB1dFwiXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgIG1heGxlbmd0aD1cIjEwXCJcclxuICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAvPlxyXG4gIDxkaXYgY2xhc3M9XCJjYWxlbmRhclwiICpuZ0lmPVwic2hvd0NhbGVuZGFyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItaGVhZGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aW91c1wiIChjbGljayk9XCJwcmV2aW91cygpXCI+XHJcbiAgICAgICAgPGxpYi1lbHV4LWljb24gW2hpZGRlbl09XCJpc1ByZXZpb3VzRGlzYWJsZWQoKVwiIFtpY29uXT1cIidDaGV2cm9uX0xlZnQuc3ZnJ1wiIFtzaXplXT1cIicyMidcIiBbc2l6ZVR5cGVdPVwiJ3B4J1wiPiA8L2xpYi1lbHV4LWljb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8c3BhbiAoY2xpY2spPVwiY2hhbmdlVmlldygpXCI+e3sgcGlja2VyVmlldyA9PT0gJ3dlZWsnID8gaGVhZGVyRGF0ZSgpIDogY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSB9fTwvc3Bhbj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm5leHRcIiAoY2xpY2spPVwibmV4dCgpXCI+XHJcbiAgICAgICAgPGxpYi1lbHV4LWljb24gW2hpZGRlbl09XCJpc05leHREaXNhYmxlZCgpXCIgW2ljb25dPVwiJ0NoZXZyb25fUmlnaHQuc3ZnJ1wiIFtzaXplXT1cIicyMidcIiBbc2l6ZVR5cGVdPVwiJ3B4J1wiPiA8L2xpYi1lbHV4LWljb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItYm9keVwiICpuZ0lmPVwicGlja2VyVmlldyA9PT0gJ3dlZWsnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkYXktbGFiZWxzXCI+XHJcbiAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGRheSBvZiBoZWFkZXJEYXRlV2VlaygpXCI+e3sgZGF5IH19PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF5IG9mIGRheXNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5XCIgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGF5LmRpc2FibGVkLCB0b2RheTogZGF5LnRvZGF5LCBzZWxlY3RlZDogZGF5LnNlbGVjdGVkIH1cIiAoY2xpY2spPVwiZGF5LmRpc2FibGVkID8gbnVsbCA6IHNlbGVjdERhdGUoZGF5KVwiPlxyXG4gICAgICAgICAgPHNwYW4+e3sgZGF5LmRheSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ5ZWFyLWJvZHlcIiAqbmdJZj1cInBpY2tlclZpZXcgPT09ICd5ZWFyJ1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB5ZWFyIG9mIHllYXJzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInllYXJcIiAqbmdJZj1cIiF5ZWFyLmRpc2FibGVkXCIgKGNsaWNrKT1cIiF5ZWFyLmRpc2FibGVkICYmIHNlbGVjdFllYXIoeWVhci52YWx1ZSlcIj5cclxuICAgICAgICAgIHt7IHllYXIudmFsdWUgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb250aC1ib2R5XCIgKm5nSWY9XCJwaWNrZXJWaWV3ID09PSAnbW9udGgnXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1vbnRoIG9mIG1vbnRoc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb250aFwiICpuZ0lmPVwiIW1vbnRoLmRpc2FibGVkXCIgKGNsaWNrKT1cIiFtb250aC5kaXNhYmxlZCAmJiBzZWxlY3RNb250aChtb250aC52YWx1ZSlcIj5cclxuICAgICAgICAgIHt7IG1vbnRoLnRleHQgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './datepicker.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi91aS9saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy9kYXRlcGlja2VyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RhdGVwaWNrZXIuY29tcG9uZW50JztcclxuIl19