primeng 16.5.1 → 16.7.0

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 (228) hide show
  1. package/animate/animate.d.ts +3 -2
  2. package/animateonscroll/animateonscroll.d.ts +73 -0
  3. package/animateonscroll/index.d.ts +5 -0
  4. package/animateonscroll/public_api.d.ts +1 -0
  5. package/api/menuitem.d.ts +5 -1
  6. package/api/primengconfig.d.ts +1 -0
  7. package/autocomplete/autocomplete.d.ts +177 -54
  8. package/autocomplete/autocomplete.interface.d.ts +30 -0
  9. package/breadcrumb/breadcrumb.d.ts +1 -0
  10. package/cascadeselect/cascadeselect.d.ts +188 -68
  11. package/cascadeselect/cascadeselect.interface.d.ts +19 -0
  12. package/checkbox/checkbox.d.ts +1 -4
  13. package/chips/chips.d.ts +21 -5
  14. package/colorpicker/colorpicker.d.ts +5 -5
  15. package/contextmenu/contextmenu.d.ts +4 -1
  16. package/dialog/dialog.d.ts +1 -2
  17. package/dom/domhandler.d.ts +4 -1
  18. package/dropdown/dropdown.d.ts +115 -37
  19. package/esm2022/accordion/accordion.mjs +11 -7
  20. package/esm2022/animate/animate.mjs +4 -1
  21. package/esm2022/animateonscroll/animateonscroll.mjs +185 -0
  22. package/esm2022/animateonscroll/primeng-animateonscroll.mjs +5 -0
  23. package/esm2022/animateonscroll/public_api.mjs +2 -0
  24. package/esm2022/api/menuitem.mjs +1 -1
  25. package/esm2022/api/primengconfig.mjs +2 -1
  26. package/esm2022/autocomplete/autocomplete.interface.mjs +1 -1
  27. package/esm2022/autocomplete/autocomplete.mjs +893 -617
  28. package/esm2022/breadcrumb/breadcrumb.mjs +44 -17
  29. package/esm2022/button/button.mjs +2 -2
  30. package/esm2022/carousel/carousel.mjs +6 -1
  31. package/esm2022/cascadeselect/cascadeselect.interface.mjs +1 -1
  32. package/esm2022/cascadeselect/cascadeselect.mjs +921 -482
  33. package/esm2022/checkbox/checkbox.mjs +90 -73
  34. package/esm2022/chips/chips.mjs +197 -53
  35. package/esm2022/colorpicker/colorpicker.mjs +56 -37
  36. package/esm2022/contextmenu/contextmenu.mjs +177 -144
  37. package/esm2022/dialog/dialog.mjs +6 -11
  38. package/esm2022/dom/domhandler.mjs +26 -8
  39. package/esm2022/dropdown/dropdown.mjs +707 -588
  40. package/esm2022/galleria/galleria.mjs +3 -3
  41. package/esm2022/image/image.mjs +11 -4
  42. package/esm2022/inputmask/inputmask.mjs +22 -9
  43. package/esm2022/inputnumber/inputnumber.mjs +142 -83
  44. package/esm2022/inputswitch/inputswitch.mjs +55 -49
  45. package/esm2022/knob/knob.mjs +92 -5
  46. package/esm2022/listbox/listbox.interface.mjs +1 -1
  47. package/esm2022/listbox/listbox.mjs +996 -454
  48. package/esm2022/megamenu/megamenu.mjs +168 -144
  49. package/esm2022/menu/menu.mjs +146 -94
  50. package/esm2022/menubar/menubar.mjs +168 -144
  51. package/esm2022/multiselect/multiselect.mjs +1022 -603
  52. package/esm2022/overlaypanel/overlaypanel.mjs +10 -4
  53. package/esm2022/paginator/paginator.mjs +2 -2
  54. package/esm2022/panelmenu/panelmenu.mjs +135 -106
  55. package/esm2022/password/password.mjs +29 -28
  56. package/esm2022/radiobutton/radiobutton.mjs +46 -33
  57. package/esm2022/rating/rating.mjs +172 -80
  58. package/esm2022/selectbutton/selectbutton.mjs +105 -34
  59. package/esm2022/slider/slider.mjs +151 -66
  60. package/esm2022/splitbutton/splitbutton.interface.mjs +1 -1
  61. package/esm2022/splitbutton/splitbutton.mjs +70 -14
  62. package/esm2022/table/table.mjs +3 -3
  63. package/esm2022/tabmenu/tabmenu.mjs +17 -25
  64. package/esm2022/tabview/tabview.mjs +3 -3
  65. package/esm2022/tieredmenu/tieredmenu.mjs +168 -144
  66. package/esm2022/togglebutton/togglebutton.mjs +47 -10
  67. package/esm2022/treetable/treetable.mjs +1 -1
  68. package/esm2022/tristatecheckbox/tristatecheckbox.mjs +53 -35
  69. package/fesm2022/primeng-accordion.mjs +10 -6
  70. package/fesm2022/primeng-accordion.mjs.map +1 -1
  71. package/fesm2022/primeng-animate.mjs +3 -0
  72. package/fesm2022/primeng-animate.mjs.map +1 -1
  73. package/fesm2022/primeng-animateonscroll.mjs +190 -0
  74. package/fesm2022/primeng-animateonscroll.mjs.map +1 -0
  75. package/fesm2022/primeng-api.mjs +1 -0
  76. package/fesm2022/primeng-api.mjs.map +1 -1
  77. package/fesm2022/primeng-autocomplete.mjs +893 -617
  78. package/fesm2022/primeng-autocomplete.mjs.map +1 -1
  79. package/fesm2022/primeng-breadcrumb.mjs +43 -16
  80. package/fesm2022/primeng-breadcrumb.mjs.map +1 -1
  81. package/fesm2022/primeng-button.mjs +1 -1
  82. package/fesm2022/primeng-button.mjs.map +1 -1
  83. package/fesm2022/primeng-carousel.mjs +5 -0
  84. package/fesm2022/primeng-carousel.mjs.map +1 -1
  85. package/fesm2022/primeng-cascadeselect.mjs +920 -481
  86. package/fesm2022/primeng-cascadeselect.mjs.map +1 -1
  87. package/fesm2022/primeng-checkbox.mjs +89 -72
  88. package/fesm2022/primeng-checkbox.mjs.map +1 -1
  89. package/fesm2022/primeng-chips.mjs +195 -51
  90. package/fesm2022/primeng-chips.mjs.map +1 -1
  91. package/fesm2022/primeng-colorpicker.mjs +55 -36
  92. package/fesm2022/primeng-colorpicker.mjs.map +1 -1
  93. package/fesm2022/primeng-contextmenu.mjs +176 -143
  94. package/fesm2022/primeng-contextmenu.mjs.map +1 -1
  95. package/fesm2022/primeng-dialog.mjs +5 -10
  96. package/fesm2022/primeng-dialog.mjs.map +1 -1
  97. package/fesm2022/primeng-dom.mjs +25 -7
  98. package/fesm2022/primeng-dom.mjs.map +1 -1
  99. package/fesm2022/primeng-dropdown.mjs +707 -588
  100. package/fesm2022/primeng-dropdown.mjs.map +1 -1
  101. package/fesm2022/primeng-galleria.mjs +2 -2
  102. package/fesm2022/primeng-galleria.mjs.map +1 -1
  103. package/fesm2022/primeng-image.mjs +10 -3
  104. package/fesm2022/primeng-image.mjs.map +1 -1
  105. package/fesm2022/primeng-inputmask.mjs +20 -7
  106. package/fesm2022/primeng-inputmask.mjs.map +1 -1
  107. package/fesm2022/primeng-inputnumber.mjs +140 -81
  108. package/fesm2022/primeng-inputnumber.mjs.map +1 -1
  109. package/fesm2022/primeng-inputswitch.mjs +55 -49
  110. package/fesm2022/primeng-inputswitch.mjs.map +1 -1
  111. package/fesm2022/primeng-knob.mjs +92 -5
  112. package/fesm2022/primeng-knob.mjs.map +1 -1
  113. package/fesm2022/primeng-listbox.mjs +995 -453
  114. package/fesm2022/primeng-listbox.mjs.map +1 -1
  115. package/fesm2022/primeng-megamenu.mjs +167 -143
  116. package/fesm2022/primeng-megamenu.mjs.map +1 -1
  117. package/fesm2022/primeng-menu.mjs +146 -94
  118. package/fesm2022/primeng-menu.mjs.map +1 -1
  119. package/fesm2022/primeng-menubar.mjs +167 -143
  120. package/fesm2022/primeng-menubar.mjs.map +1 -1
  121. package/fesm2022/primeng-multiselect.mjs +1021 -602
  122. package/fesm2022/primeng-multiselect.mjs.map +1 -1
  123. package/fesm2022/primeng-overlaypanel.mjs +9 -3
  124. package/fesm2022/primeng-overlaypanel.mjs.map +1 -1
  125. package/fesm2022/primeng-paginator.mjs +1 -1
  126. package/fesm2022/primeng-paginator.mjs.map +1 -1
  127. package/fesm2022/primeng-panelmenu.mjs +134 -105
  128. package/fesm2022/primeng-panelmenu.mjs.map +1 -1
  129. package/fesm2022/primeng-password.mjs +27 -26
  130. package/fesm2022/primeng-password.mjs.map +1 -1
  131. package/fesm2022/primeng-radiobutton.mjs +46 -33
  132. package/fesm2022/primeng-radiobutton.mjs.map +1 -1
  133. package/fesm2022/primeng-rating.mjs +171 -79
  134. package/fesm2022/primeng-rating.mjs.map +1 -1
  135. package/fesm2022/primeng-selectbutton.mjs +104 -33
  136. package/fesm2022/primeng-selectbutton.mjs.map +1 -1
  137. package/fesm2022/primeng-slider.mjs +150 -65
  138. package/fesm2022/primeng-slider.mjs.map +1 -1
  139. package/fesm2022/primeng-splitbutton.mjs +69 -13
  140. package/fesm2022/primeng-splitbutton.mjs.map +1 -1
  141. package/fesm2022/primeng-table.mjs +2 -2
  142. package/fesm2022/primeng-table.mjs.map +1 -1
  143. package/fesm2022/primeng-tabmenu.mjs +16 -24
  144. package/fesm2022/primeng-tabmenu.mjs.map +1 -1
  145. package/fesm2022/primeng-tabview.mjs +2 -2
  146. package/fesm2022/primeng-tabview.mjs.map +1 -1
  147. package/fesm2022/primeng-tieredmenu.mjs +167 -143
  148. package/fesm2022/primeng-tieredmenu.mjs.map +1 -1
  149. package/fesm2022/primeng-togglebutton.mjs +46 -9
  150. package/fesm2022/primeng-togglebutton.mjs.map +1 -1
  151. package/fesm2022/primeng-treetable.mjs.map +1 -1
  152. package/fesm2022/primeng-tristatecheckbox.mjs +53 -35
  153. package/fesm2022/primeng-tristatecheckbox.mjs.map +1 -1
  154. package/image/image.d.ts +6 -1
  155. package/inputmask/inputmask.d.ts +6 -1
  156. package/inputnumber/inputnumber.d.ts +6 -1
  157. package/inputswitch/inputswitch.d.ts +6 -9
  158. package/knob/knob.d.ts +20 -3
  159. package/listbox/listbox.d.ts +208 -39
  160. package/listbox/listbox.interface.d.ts +15 -0
  161. package/megamenu/megamenu.d.ts +3 -1
  162. package/menu/menu.d.ts +11 -5
  163. package/menubar/menubar.d.ts +3 -1
  164. package/multiselect/multiselect.d.ts +171 -60
  165. package/overlaypanel/overlaypanel.d.ts +1 -0
  166. package/package.json +83 -77
  167. package/panelmenu/panelmenu.d.ts +5 -2
  168. package/password/password.d.ts +3 -4
  169. package/radiobutton/radiobutton.d.ts +1 -2
  170. package/rating/rating.d.ts +29 -7
  171. package/resources/components/dropdown/dropdown.css +16 -2
  172. package/resources/themes/arya-blue/theme.css +106 -84
  173. package/resources/themes/arya-green/theme.css +106 -84
  174. package/resources/themes/arya-orange/theme.css +106 -84
  175. package/resources/themes/arya-purple/theme.css +106 -84
  176. package/resources/themes/bootstrap4-dark-blue/theme.css +110 -88
  177. package/resources/themes/bootstrap4-dark-purple/theme.css +110 -88
  178. package/resources/themes/bootstrap4-light-blue/theme.css +110 -88
  179. package/resources/themes/bootstrap4-light-purple/theme.css +110 -88
  180. package/resources/themes/fluent-light/theme.css +103 -81
  181. package/resources/themes/lara-dark-blue/theme.css +106 -84
  182. package/resources/themes/lara-dark-indigo/theme.css +106 -84
  183. package/resources/themes/lara-dark-purple/theme.css +106 -84
  184. package/resources/themes/lara-dark-teal/theme.css +106 -84
  185. package/resources/themes/lara-light-blue/theme.css +109 -87
  186. package/resources/themes/lara-light-indigo/theme.css +109 -87
  187. package/resources/themes/lara-light-purple/theme.css +109 -87
  188. package/resources/themes/lara-light-teal/theme.css +109 -87
  189. package/resources/themes/luna-amber/theme.css +110 -88
  190. package/resources/themes/luna-blue/theme.css +110 -88
  191. package/resources/themes/luna-green/theme.css +110 -88
  192. package/resources/themes/luna-pink/theme.css +110 -88
  193. package/resources/themes/md-dark-deeppurple/theme.css +117 -95
  194. package/resources/themes/md-dark-indigo/theme.css +117 -95
  195. package/resources/themes/md-light-deeppurple/theme.css +117 -95
  196. package/resources/themes/md-light-indigo/theme.css +117 -95
  197. package/resources/themes/mdc-dark-deeppurple/theme.css +117 -95
  198. package/resources/themes/mdc-dark-indigo/theme.css +117 -95
  199. package/resources/themes/mdc-light-deeppurple/theme.css +117 -95
  200. package/resources/themes/mdc-light-indigo/theme.css +117 -95
  201. package/resources/themes/mira/theme.css +107 -85
  202. package/resources/themes/nano/theme.css +109 -87
  203. package/resources/themes/nova/theme.css +110 -88
  204. package/resources/themes/nova-accent/theme.css +109 -87
  205. package/resources/themes/nova-alt/theme.css +110 -88
  206. package/resources/themes/rhea/theme.css +109 -87
  207. package/resources/themes/saga-blue/theme.css +106 -84
  208. package/resources/themes/saga-green/theme.css +106 -84
  209. package/resources/themes/saga-orange/theme.css +106 -84
  210. package/resources/themes/saga-purple/theme.css +106 -84
  211. package/resources/themes/soho-dark/theme.css +109 -87
  212. package/resources/themes/soho-light/theme.css +109 -87
  213. package/resources/themes/tailwind-light/theme.css +110 -88
  214. package/resources/themes/vela-blue/theme.css +106 -84
  215. package/resources/themes/vela-green/theme.css +106 -84
  216. package/resources/themes/vela-orange/theme.css +106 -84
  217. package/resources/themes/vela-purple/theme.css +106 -84
  218. package/resources/themes/viva-dark/theme.css +109 -87
  219. package/resources/themes/viva-light/theme.css +109 -87
  220. package/selectbutton/selectbutton.d.ts +15 -3
  221. package/slider/slider.d.ts +12 -6
  222. package/splitbutton/splitbutton.d.ts +10 -1
  223. package/splitbutton/splitbutton.interface.d.ts +15 -0
  224. package/tabmenu/tabmenu.d.ts +2 -2
  225. package/tieredmenu/tieredmenu.d.ts +3 -1
  226. package/togglebutton/togglebutton.d.ts +7 -1
  227. package/treetable/treetable.d.ts +1 -1
  228. package/tristatecheckbox/tristatecheckbox.d.ts +8 -4
@@ -1,23 +1,27 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, forwardRef, Input, NgModule, Output, ViewEncapsulation } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, forwardRef, Input, NgModule, Output, signal, ViewEncapsulation } from '@angular/core';
3
3
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
4
  import { PrimeTemplate, SharedModule } from 'primeng/api';
5
- import { StarFillIcon } from 'primeng/icons/starfill';
6
- import { StarIcon } from 'primeng/icons/star';
7
5
  import { BanIcon } from 'primeng/icons/ban';
6
+ import { StarIcon } from 'primeng/icons/star';
7
+ import { StarFillIcon } from 'primeng/icons/starfill';
8
+ import { DomHandler } from 'primeng/dom';
9
+ import { UniqueComponentId } from 'primeng/utils';
8
10
  import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common";
11
+ import * as i1 from "primeng/api";
12
+ import * as i2 from "@angular/common";
10
13
  export const RATING_VALUE_ACCESSOR = {
11
14
  provide: NG_VALUE_ACCESSOR,
12
15
  useExisting: forwardRef(() => Rating),
13
16
  multi: true
14
17
  };
15
18
  /**
16
- * RadioButton is an extension to standard radio button element with theming.
19
+ * Rating is an extension to standard radio button element with theming.
17
20
  * @group Components
18
21
  */
19
22
  class Rating {
20
23
  cd;
24
+ config;
21
25
  /**
22
26
  * When present, it specifies that the element should be disabled.
23
27
  * @group Props
@@ -80,18 +84,35 @@ class Rating {
80
84
  * @group Emits
81
85
  */
82
86
  onCancel = new EventEmitter();
87
+ /**
88
+ * Emitted when the rating receives focus.
89
+ * @param {Event} value - Browser event.
90
+ * @group Emits
91
+ */
92
+ onFocus = new EventEmitter();
93
+ /**
94
+ * Emitted when the rating loses focus.
95
+ * @param {Event} value - Browser event.
96
+ * @group Emits
97
+ */
98
+ onBlur = new EventEmitter();
83
99
  templates;
84
100
  onIconTemplate;
85
101
  offIconTemplate;
86
102
  cancelIconTemplate;
87
- constructor(cd) {
88
- this.cd = cd;
89
- }
90
103
  value;
91
104
  onModelChange = () => { };
92
105
  onModelTouched = () => { };
93
106
  starsArray;
107
+ isFocusVisibleItem = true;
108
+ focusedOptionIndex = signal(-1);
109
+ name;
110
+ constructor(cd, config) {
111
+ this.cd = cd;
112
+ this.config = config;
113
+ }
94
114
  ngOnInit() {
115
+ this.name = this.name || UniqueComponentId();
95
116
  this.starsArray = [];
96
117
  for (let i = 0; i < this.stars; i++) {
97
118
  this.starsArray[i] = i;
@@ -112,29 +133,52 @@ class Rating {
112
133
  }
113
134
  });
114
135
  }
115
- getIconTemplate(i) {
116
- return !this.value || i >= this.value ? this.offIconTemplate : this.onIconTemplate;
117
- }
118
- rate(event, i) {
136
+ onOptionClick(event, value) {
119
137
  if (!this.readonly && !this.disabled) {
120
- this.value = i + 1;
121
- this.onModelChange(this.value);
122
- this.onModelTouched();
138
+ this.onOptionSelect(event, value);
139
+ this.isFocusVisibleItem = false;
140
+ const firstFocusableEl = DomHandler.getFirstFocusableElement(event.currentTarget, '');
141
+ firstFocusableEl && DomHandler.focus(firstFocusableEl);
142
+ }
143
+ }
144
+ onOptionSelect(event, value) {
145
+ this.focusedOptionIndex.set(value);
146
+ this.updateModel(event, value || null);
147
+ }
148
+ onChange(event, value) {
149
+ this.onOptionSelect(event, value);
150
+ this.isFocusVisibleItem = true;
151
+ }
152
+ onInputBlur(event) {
153
+ this.focusedOptionIndex.set(-1);
154
+ this.onBlur.emit(event);
155
+ }
156
+ onInputFocus(event, value) {
157
+ this.focusedOptionIndex.set(value);
158
+ this.onFocus.emit(event);
159
+ }
160
+ updateModel(event, value) {
161
+ this.value = value;
162
+ this.onModelChange(this.value);
163
+ this.onModelTouched();
164
+ if (!value) {
165
+ this.onCancel.emit();
166
+ }
167
+ else {
123
168
  this.onRate.emit({
124
169
  originalEvent: event,
125
- value: i + 1
170
+ value
126
171
  });
127
172
  }
128
- event.preventDefault();
129
173
  }
130
- clear(event) {
131
- if (!this.readonly && !this.disabled) {
132
- this.value = null;
133
- this.onModelChange(this.value);
134
- this.onModelTouched();
135
- this.onCancel.emit(event);
136
- }
137
- event.preventDefault();
174
+ cancelAriaLabel() {
175
+ return this.config.translation.clear;
176
+ }
177
+ starAriaLabel(value) {
178
+ return value === 1 ? this.config.translation.aria.star : this.config.translation.aria.stars.replace(/{star}/g, value);
179
+ }
180
+ getIconTemplate(i) {
181
+ return !this.value || i >= this.value ? this.offIconTemplate : this.onIconTemplate;
138
182
  }
139
183
  writeValue(value) {
140
184
  this.value = value;
@@ -153,78 +197,122 @@ class Rating {
153
197
  get isCustomIcon() {
154
198
  return this.templates && this.templates.length > 0;
155
199
  }
156
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: Rating, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
157
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: Rating, selector: "p-rating", inputs: { disabled: "disabled", readonly: "readonly", stars: "stars", cancel: "cancel", iconOnClass: "iconOnClass", iconOnStyle: "iconOnStyle", iconOffClass: "iconOffClass", iconOffStyle: "iconOffStyle", iconCancelClass: "iconCancelClass", iconCancelStyle: "iconCancelStyle" }, outputs: { onRate: "onRate", onCancel: "onCancel" }, host: { classAttribute: "p-element" }, providers: [RATING_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
158
- <div class="p-rating" [ngClass]="{ 'p-readonly': readonly, 'p-disabled': disabled }">
200
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: Rating, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
201
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: Rating, selector: "p-rating", inputs: { disabled: "disabled", readonly: "readonly", stars: "stars", cancel: "cancel", iconOnClass: "iconOnClass", iconOnStyle: "iconOnStyle", iconOffClass: "iconOffClass", iconOffStyle: "iconOffStyle", iconCancelClass: "iconCancelClass", iconCancelStyle: "iconCancelStyle" }, outputs: { onRate: "onRate", onCancel: "onCancel", onFocus: "onFocus", onBlur: "onBlur" }, host: { classAttribute: "p-element" }, providers: [RATING_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
202
+ <div class="p-rating" [ngClass]="{ 'p-readonly': readonly, 'p-disabled': disabled }" [attr.data-pc-name]="'rating'" [attr.data-pc-section]="'root'">
159
203
  <ng-container *ngIf="!isCustomIcon; else customTemplate">
160
- <ng-container *ngIf="cancel">
161
- <span
162
- *ngIf="iconCancelClass"
163
- [attr.tabindex]="disabled || readonly ? null : '0'"
164
- (click)="clear($event)"
165
- (keydown.enter)="clear($event)"
166
- class="p-rating-icon p-rating-cancel"
167
- [ngClass]="iconCancelClass"
168
- [ngStyle]="iconCancelStyle"
169
- ></span>
170
- <BanIcon *ngIf="!iconCancelClass" [attr.tabindex]="disabled || readonly ? null : '0'" (click)="clear($event)" (keydown.enter)="clear($event)" [styleClass]="'p-rating-icon p-rating-cancel'" [ngStyle]="iconCancelStyle" />
171
- </ng-container>
172
- <span *ngFor="let star of starsArray; let i = index">
173
- <ng-container *ngIf="!value || i >= value">
174
- <span class="p-rating-icon" *ngIf="iconOffClass" [ngStyle]="iconOffStyle" [ngClass]="iconOffClass" (click)="rate($event, i)" (keydown.enter)="rate($event, i)"></span>
175
- <StarIcon *ngIf="!iconOffClass" (click)="rate($event, i)" [ngStyle]="iconOffStyle" (keydown.enter)="rate($event, i)" [styleClass]="'p-rating-icon'" [attr.tabindex]="disabled || readonly ? null : '0'" />
176
- </ng-container>
177
- <ng-container *ngIf="value && i < value">
178
- <span class="p-rating-icon p-rating-icon-active" *ngIf="iconOnClass" [ngStyle]="iconOnStyle" [ngClass]="iconOnClass" (click)="rate($event, i)" (keydown.enter)="rate($event, i)"></span>
179
- <StarFillIcon *ngIf="!iconOnClass" (click)="rate($event, i)" [ngStyle]="iconOnStyle" (keydown.enter)="rate($event, i)" [styleClass]="'p-rating-icon p-rating-icon-active'" [attr.tabindex]="disabled || readonly ? null : '0'" />
180
- </ng-container>
181
- </span>
204
+ <div *ngIf="cancel" [attr.data-pc-section]="'cancelItem'" (click)="onOptionClick($event, 0)" [ngClass]="{ 'p-focus': focusedOptionIndex() === 0 && isFocusVisible }" class="p-rating-item p-rating-cancel-item">
205
+ <span class="p-hidden-accessible" [attr.data-p-hidden-accessible]="true">
206
+ <input
207
+ type="radio"
208
+ value="0"
209
+ [name]="name"
210
+ [checked]="value === 0"
211
+ [disabled]="disabled"
212
+ [readonly]="readonly"
213
+ [attr.aria-label]="cancelAriaLabel()"
214
+ (focus)="onInputFocus($event, 0)"
215
+ (blur)="onInputBlur($event)"
216
+ (change)="onChange($event, 0)"
217
+ />
218
+ </span>
219
+ <span *ngIf="iconCancelClass" class="p-rating-icon p-rating-cancel" [ngClass]="iconCancelClass" [ngStyle]="iconCancelStyle"></span>
220
+ <BanIcon *ngIf="!iconCancelClass" [styleClass]="'p-rating-icon p-rating-cancel'" [ngStyle]="iconCancelStyle" [attr.data-pc-section]="'cancelIcon'" />
221
+ </div>
222
+ <ng-template ngFor [ngForOf]="starsArray" let-star let-i="index">
223
+ <div class="p-rating-item" [ngClass]="{ 'p-rating-item-active': star + 1 <= value, 'p-focus': star + 1 === focusedOptionIndex() && isFocusVisible }" (click)="onOptionClick($event, star + 1)">
224
+ <span class="p-hidden-accessible" [attr.data-p-hidden-accessible]="true">
225
+ <input
226
+ type="radio"
227
+ value="0"
228
+ [name]="name"
229
+ [checked]="value === 0"
230
+ [disabled]="disabled"
231
+ [readonly]="readonly"
232
+ [attr.aria-label]="starAriaLabel(star + 1)"
233
+ (focus)="onInputFocus($event, star + 1)"
234
+ (blur)="onInputBlur($event)"
235
+ (change)="onChange($event, star + 1)"
236
+ />
237
+ </span>
238
+ <ng-container *ngIf="!value || i >= value">
239
+ <span class="p-rating-icon" *ngIf="iconOffClass" [ngStyle]="iconOffStyle" [ngClass]="iconOffClass" [attr.data-pc-section]="'offIcon'"></span>
240
+ <StarIcon *ngIf="!iconOffClass" [ngStyle]="iconOffStyle" [styleClass]="'p-rating-icon'" [attr.data-pc-section]="'offIcon'" />
241
+ </ng-container>
242
+ <ng-container *ngIf="value && i < value">
243
+ <span class="p-rating-icon p-rating-icon-active" *ngIf="iconOnClass" [ngStyle]="iconOnStyle" [ngClass]="iconOnClass" [attr.data-pc-section]="'onIcon'"></span>
244
+ <StarFillIcon *ngIf="!iconOnClass" [ngStyle]="iconOnStyle" [styleClass]="'p-rating-icon p-rating-icon-active'" [attr.data-pc-section]="'onIcon'" />
245
+ </ng-container>
246
+ </div>
247
+ </ng-template>
182
248
  </ng-container>
183
249
  <ng-template #customTemplate>
184
- <span *ngIf="cancel" [attr.tabindex]="disabled || readonly ? null : '0'" (click)="clear($event)" (keydown.enter)="clear($event)" class="p-rating-icon p-rating-cancel" [ngStyle]="iconCancelStyle">
250
+ <span *ngIf="cancel" (click)="onOptionClick($event, 0)" class="p-rating-icon p-rating-cancel" [ngStyle]="iconCancelStyle" [attr.data-pc-section]="'cancelIcon'">
185
251
  <ng-container *ngTemplateOutlet="cancelIconTemplate"></ng-container>
186
252
  </span>
187
- <span *ngFor="let star of starsArray; let i = index" class="p-rating-icon" [attr.tabindex]="disabled || readonly ? null : '0'" (click)="rate($event, i)" (keydown.enter)="rate($event, i)">
253
+ <span *ngFor="let star of starsArray; let i = index" class="p-rating-icon" (click)="onOptionClick($event, star + 1)" [attr.data-pc-section]="'onIcon'">
188
254
  <ng-container *ngTemplateOutlet="getIconTemplate(i)"></ng-container>
189
255
  </span>
190
256
  </ng-template>
191
257
  </div>
192
- `, isInline: true, styles: ["@layer primeng{.p-rating{display:inline-flex}.p-rating-icon{cursor:pointer}.p-rating.p-rating-readonly .p-rating-icon{cursor:default}}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i0.forwardRef(function () { return StarFillIcon; }), selector: "StarFillIcon" }, { kind: "component", type: i0.forwardRef(function () { return StarIcon; }), selector: "StarIcon" }, { kind: "component", type: i0.forwardRef(function () { return BanIcon; }), selector: "BanIcon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
258
+ `, isInline: true, styles: ["@layer primeng{.p-rating{display:inline-flex}.p-rating-icon{cursor:pointer}.p-rating.p-rating-readonly .p-rating-icon{cursor:default}}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i0.forwardRef(function () { return StarFillIcon; }), selector: "StarFillIcon" }, { kind: "component", type: i0.forwardRef(function () { return StarIcon; }), selector: "StarIcon" }, { kind: "component", type: i0.forwardRef(function () { return BanIcon; }), selector: "BanIcon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
193
259
  }
194
260
  export { Rating };
195
261
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: Rating, decorators: [{
196
262
  type: Component,
197
263
  args: [{ selector: 'p-rating', template: `
198
- <div class="p-rating" [ngClass]="{ 'p-readonly': readonly, 'p-disabled': disabled }">
264
+ <div class="p-rating" [ngClass]="{ 'p-readonly': readonly, 'p-disabled': disabled }" [attr.data-pc-name]="'rating'" [attr.data-pc-section]="'root'">
199
265
  <ng-container *ngIf="!isCustomIcon; else customTemplate">
200
- <ng-container *ngIf="cancel">
201
- <span
202
- *ngIf="iconCancelClass"
203
- [attr.tabindex]="disabled || readonly ? null : '0'"
204
- (click)="clear($event)"
205
- (keydown.enter)="clear($event)"
206
- class="p-rating-icon p-rating-cancel"
207
- [ngClass]="iconCancelClass"
208
- [ngStyle]="iconCancelStyle"
209
- ></span>
210
- <BanIcon *ngIf="!iconCancelClass" [attr.tabindex]="disabled || readonly ? null : '0'" (click)="clear($event)" (keydown.enter)="clear($event)" [styleClass]="'p-rating-icon p-rating-cancel'" [ngStyle]="iconCancelStyle" />
211
- </ng-container>
212
- <span *ngFor="let star of starsArray; let i = index">
213
- <ng-container *ngIf="!value || i >= value">
214
- <span class="p-rating-icon" *ngIf="iconOffClass" [ngStyle]="iconOffStyle" [ngClass]="iconOffClass" (click)="rate($event, i)" (keydown.enter)="rate($event, i)"></span>
215
- <StarIcon *ngIf="!iconOffClass" (click)="rate($event, i)" [ngStyle]="iconOffStyle" (keydown.enter)="rate($event, i)" [styleClass]="'p-rating-icon'" [attr.tabindex]="disabled || readonly ? null : '0'" />
216
- </ng-container>
217
- <ng-container *ngIf="value && i < value">
218
- <span class="p-rating-icon p-rating-icon-active" *ngIf="iconOnClass" [ngStyle]="iconOnStyle" [ngClass]="iconOnClass" (click)="rate($event, i)" (keydown.enter)="rate($event, i)"></span>
219
- <StarFillIcon *ngIf="!iconOnClass" (click)="rate($event, i)" [ngStyle]="iconOnStyle" (keydown.enter)="rate($event, i)" [styleClass]="'p-rating-icon p-rating-icon-active'" [attr.tabindex]="disabled || readonly ? null : '0'" />
220
- </ng-container>
221
- </span>
266
+ <div *ngIf="cancel" [attr.data-pc-section]="'cancelItem'" (click)="onOptionClick($event, 0)" [ngClass]="{ 'p-focus': focusedOptionIndex() === 0 && isFocusVisible }" class="p-rating-item p-rating-cancel-item">
267
+ <span class="p-hidden-accessible" [attr.data-p-hidden-accessible]="true">
268
+ <input
269
+ type="radio"
270
+ value="0"
271
+ [name]="name"
272
+ [checked]="value === 0"
273
+ [disabled]="disabled"
274
+ [readonly]="readonly"
275
+ [attr.aria-label]="cancelAriaLabel()"
276
+ (focus)="onInputFocus($event, 0)"
277
+ (blur)="onInputBlur($event)"
278
+ (change)="onChange($event, 0)"
279
+ />
280
+ </span>
281
+ <span *ngIf="iconCancelClass" class="p-rating-icon p-rating-cancel" [ngClass]="iconCancelClass" [ngStyle]="iconCancelStyle"></span>
282
+ <BanIcon *ngIf="!iconCancelClass" [styleClass]="'p-rating-icon p-rating-cancel'" [ngStyle]="iconCancelStyle" [attr.data-pc-section]="'cancelIcon'" />
283
+ </div>
284
+ <ng-template ngFor [ngForOf]="starsArray" let-star let-i="index">
285
+ <div class="p-rating-item" [ngClass]="{ 'p-rating-item-active': star + 1 <= value, 'p-focus': star + 1 === focusedOptionIndex() && isFocusVisible }" (click)="onOptionClick($event, star + 1)">
286
+ <span class="p-hidden-accessible" [attr.data-p-hidden-accessible]="true">
287
+ <input
288
+ type="radio"
289
+ value="0"
290
+ [name]="name"
291
+ [checked]="value === 0"
292
+ [disabled]="disabled"
293
+ [readonly]="readonly"
294
+ [attr.aria-label]="starAriaLabel(star + 1)"
295
+ (focus)="onInputFocus($event, star + 1)"
296
+ (blur)="onInputBlur($event)"
297
+ (change)="onChange($event, star + 1)"
298
+ />
299
+ </span>
300
+ <ng-container *ngIf="!value || i >= value">
301
+ <span class="p-rating-icon" *ngIf="iconOffClass" [ngStyle]="iconOffStyle" [ngClass]="iconOffClass" [attr.data-pc-section]="'offIcon'"></span>
302
+ <StarIcon *ngIf="!iconOffClass" [ngStyle]="iconOffStyle" [styleClass]="'p-rating-icon'" [attr.data-pc-section]="'offIcon'" />
303
+ </ng-container>
304
+ <ng-container *ngIf="value && i < value">
305
+ <span class="p-rating-icon p-rating-icon-active" *ngIf="iconOnClass" [ngStyle]="iconOnStyle" [ngClass]="iconOnClass" [attr.data-pc-section]="'onIcon'"></span>
306
+ <StarFillIcon *ngIf="!iconOnClass" [ngStyle]="iconOnStyle" [styleClass]="'p-rating-icon p-rating-icon-active'" [attr.data-pc-section]="'onIcon'" />
307
+ </ng-container>
308
+ </div>
309
+ </ng-template>
222
310
  </ng-container>
223
311
  <ng-template #customTemplate>
224
- <span *ngIf="cancel" [attr.tabindex]="disabled || readonly ? null : '0'" (click)="clear($event)" (keydown.enter)="clear($event)" class="p-rating-icon p-rating-cancel" [ngStyle]="iconCancelStyle">
312
+ <span *ngIf="cancel" (click)="onOptionClick($event, 0)" class="p-rating-icon p-rating-cancel" [ngStyle]="iconCancelStyle" [attr.data-pc-section]="'cancelIcon'">
225
313
  <ng-container *ngTemplateOutlet="cancelIconTemplate"></ng-container>
226
314
  </span>
227
- <span *ngFor="let star of starsArray; let i = index" class="p-rating-icon" [attr.tabindex]="disabled || readonly ? null : '0'" (click)="rate($event, i)" (keydown.enter)="rate($event, i)">
315
+ <span *ngFor="let star of starsArray; let i = index" class="p-rating-icon" (click)="onOptionClick($event, star + 1)" [attr.data-pc-section]="'onIcon'">
228
316
  <ng-container *ngTemplateOutlet="getIconTemplate(i)"></ng-container>
229
317
  </span>
230
318
  </ng-template>
@@ -232,7 +320,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
232
320
  `, providers: [RATING_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
233
321
  class: 'p-element'
234
322
  }, styles: ["@layer primeng{.p-rating{display:inline-flex}.p-rating-icon{cursor:pointer}.p-rating.p-rating-readonly .p-rating-icon{cursor:default}}\n"] }]
235
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
323
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.PrimeNGConfig }]; }, propDecorators: { disabled: [{
236
324
  type: Input
237
325
  }], readonly: [{
238
326
  type: Input
@@ -256,6 +344,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
256
344
  type: Output
257
345
  }], onCancel: [{
258
346
  type: Output
347
+ }], onFocus: [{
348
+ type: Output
349
+ }], onBlur: [{
350
+ type: Output
259
351
  }], templates: [{
260
352
  type: ContentChildren,
261
353
  args: [PrimeTemplate]
@@ -274,4 +366,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
274
366
  declarations: [Rating]
275
367
  }]
276
368
  }] });
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL3JhdGluZy9yYXRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQVUsTUFBTSxFQUEwQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3TSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQUk1QyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBUTtJQUN0QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ3JDLEtBQUssRUFBRSxJQUFJO0NBQ2QsQ0FBQztBQUNGOzs7R0FHRztBQUNILE1BOENhLE1BQU07SUF3RUs7SUF2RXBCOzs7T0FHRztJQUNNLFFBQVEsQ0FBc0I7SUFDdkM7OztPQUdHO0lBQ00sUUFBUSxDQUFzQjtJQUN2Qzs7O09BR0c7SUFDTSxLQUFLLEdBQVcsQ0FBQyxDQUFDO0lBQzNCOzs7T0FHRztJQUNNLE1BQU0sR0FBWSxJQUFJLENBQUM7SUFDaEM7OztPQUdHO0lBQ00sV0FBVyxDQUFxQjtJQUN6Qzs7O09BR0c7SUFDTSxXQUFXLENBQThDO0lBQ2xFOzs7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c0JBQWQsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBS0csZUFBZTtzQkFBdkIsS0FBSztnQkFNSSxNQUFNO3NCQUFmLE1BQU07Z0JBTUcsUUFBUTtzQkFBakIsTUFBTTtnQkFFeUIsU0FBUztzQkFBeEMsZUFBZTt1QkFBQyxhQUFhOztBQTRGbEMsTUFLYSxZQUFZO3VHQUFaLFlBQVk7d0dBQVosWUFBWSxpQkFqS1osTUFBTSxhQTZKTCxZQUFZLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLGFBN0o5QyxNQUFNLEVBOEpHLFlBQVk7d0dBR3JCLFlBQVksWUFKWCxZQUFZLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQ3JDLFlBQVk7O1NBR3JCLFlBQVk7MkZBQVosWUFBWTtrQkFMeEIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUM7b0JBQ3hELE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUM7b0JBQy9CLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQztpQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgTmdNb2R1bGUsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUHJpbWVUZW1wbGF0ZSwgU2hhcmVkTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgU3RhckZpbGxJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9zdGFyZmlsbCc7XG5pbXBvcnQgeyBTdGFySWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvc3Rhcic7XG5pbXBvcnQgeyBCYW5JY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9iYW4nO1xuaW1wb3J0IHsgUmF0aW5nUmF0ZUV2ZW50IH0gZnJvbSAnLi9yYXRpbmcuaW50ZXJmYWNlJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAncHJpbWVuZy90cy1oZWxwZXJzJztcblxuZXhwb3J0IGNvbnN0IFJBVElOR19WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJhdGluZyksXG4gICAgbXVsdGk6IHRydWVcbn07XG4vKipcbiAqIFJhZGlvQnV0dG9uIGlzIGFuIGV4dGVuc2lvbiB0byBzdGFuZGFyZCByYWRpbyBidXR0b24gZWxlbWVudCB3aXRoIHRoZW1pbmcuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3AtcmF0aW5nJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1yYXRpbmdcIiBbbmdDbGFzc109XCJ7ICdwLXJlYWRvbmx5JzogcmVhZG9ubHksICdwLWRpc2FibGVkJzogZGlzYWJsZWQgfVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0N1c3RvbUljb247IGVsc2UgY3VzdG9tVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuY2VsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImljb25DYW5jZWxDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCB8fCByZWFkb25seSA/IG51bGwgOiAnMCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xlYXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtcmF0aW5nLWljb24gcC1yYXRpbmctY2FuY2VsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImljb25DYW5jZWxDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJpY29uQ2FuY2VsU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8QmFuSWNvbiAqbmdJZj1cIiFpY29uQ2FuY2VsQ2xhc3NcIiBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCB8fCByZWFkb25seSA/IG51bGwgOiAnMCdcIiAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiIChrZXlkb3duLmVudGVyKT1cImNsZWFyKCRldmVudClcIiBbc3R5bGVDbGFzc109XCIncC1yYXRpbmctaWNvbiBwLXJhdGluZy1jYW5jZWwnXCIgW25nU3R5bGVdPVwiaWNvbkNhbmNlbFN0eWxlXCIgLz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgc3RhciBvZiBzdGFyc0FycmF5OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdmFsdWUgfHwgaSA+PSB2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLXJhdGluZy1pY29uXCIgKm5nSWY9XCJpY29uT2ZmQ2xhc3NcIiBbbmdTdHlsZV09XCJpY29uT2ZmU3R5bGVcIiBbbmdDbGFzc109XCJpY29uT2ZmQ2xhc3NcIiAoY2xpY2spPVwicmF0ZSgkZXZlbnQsIGkpXCIgKGtleWRvd24uZW50ZXIpPVwicmF0ZSgkZXZlbnQsIGkpXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXJJY29uICpuZ0lmPVwiIWljb25PZmZDbGFzc1wiIChjbGljayk9XCJyYXRlKCRldmVudCwgaSlcIiBbbmdTdHlsZV09XCJpY29uT2ZmU3R5bGVcIiAoa2V5ZG93bi5lbnRlcik9XCJyYXRlKCRldmVudCwgaSlcIiBbc3R5bGVDbGFzc109XCIncC1yYXRpbmctaWNvbidcIiBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCB8fCByZWFkb25seSA/IG51bGwgOiAnMCdcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhbHVlICYmIGkgPCB2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLXJhdGluZy1pY29uIHAtcmF0aW5nLWljb24tYWN0aXZlXCIgKm5nSWY9XCJpY29uT25DbGFzc1wiIFtuZ1N0eWxlXT1cImljb25PblN0eWxlXCIgW25nQ2xhc3NdPVwiaWNvbk9uQ2xhc3NcIiAoY2xpY2spPVwicmF0ZSgkZXZlbnQsIGkpXCIgKGtleWRvd24uZW50ZXIpPVwicmF0ZSgkZXZlbnQsIGkpXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXJGaWxsSWNvbiAqbmdJZj1cIiFpY29uT25DbGFzc1wiIChjbGljayk9XCJyYXRlKCRldmVudCwgaSlcIiBbbmdTdHlsZV09XCJpY29uT25TdHlsZVwiIChrZXlkb3duLmVudGVyKT1cInJhdGUoJGV2ZW50LCBpKVwiIFtzdHlsZUNsYXNzXT1cIidwLXJhdGluZy1pY29uIHAtcmF0aW5nLWljb24tYWN0aXZlJ1wiIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkIHx8IHJlYWRvbmx5ID8gbnVsbCA6ICcwJ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjdXN0b21UZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNhbmNlbFwiIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkIHx8IHJlYWRvbmx5ID8gbnVsbCA6ICcwJ1wiIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCIgKGtleWRvd24uZW50ZXIpPVwiY2xlYXIoJGV2ZW50KVwiIGNsYXNzPVwicC1yYXRpbmctaWNvbiBwLXJhdGluZy1jYW5jZWxcIiBbbmdTdHlsZV09XCJpY29uQ2FuY2VsU3R5bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhbmNlbEljb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgc3RhciBvZiBzdGFyc0FycmF5OyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJwLXJhdGluZy1pY29uXCIgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHkgPyBudWxsIDogJzAnXCIgKGNsaWNrKT1cInJhdGUoJGV2ZW50LCBpKVwiIChrZXlkb3duLmVudGVyKT1cInJhdGUoJGV2ZW50LCBpKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0SWNvblRlbXBsYXRlKGkpXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgYCxcbiAgICBwcm92aWRlcnM6IFtSQVRJTkdfVkFMVUVfQUNDRVNTT1JdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3R5bGVVcmxzOiBbJy4vcmF0aW5nLmNzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdwLWVsZW1lbnQnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBSYXRpbmcgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICAvKipcbiAgICAgKiBXaGVuIHByZXNlbnQsIGl0IHNwZWNpZmllcyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGVuIHByZXNlbnQsIGNoYW5naW5nIHRoZSB2YWx1ZSBpcyBub3QgcG9zc2libGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHN0YXJzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0YXJzOiBudW1iZXIgPSA1O1xuICAgIC8qKlxuICAgICAqIFdoZW4gc3BlY2lmaWVkIGEgY2FuY2VsIGljb24gaXMgZGlzcGxheWVkIHRvIGFsbG93IHJlbW92aW5nIHRoZSB2YWx1ZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjYW5jZWw6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIFN0eWxlIGNsYXNzIG9mIHRoZSBvbiBpY29uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGljb25PbkNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBvbiBpY29uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGljb25PblN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFN0eWxlIGNsYXNzIG9mIHRoZSBvZmYgaWNvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpY29uT2ZmQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBJbmxpbmUgc3R5bGUgb2YgdGhlIG9mZiBpY29uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGljb25PZmZTdHlsZTogeyBba2xhc3M6IHN0cmluZ106IGFueSB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBTdHlsZSBjbGFzcyBvZiB0aGUgY2FuY2VsIGljb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgaWNvbkNhbmNlbENsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBjYW5jZWwgaWNvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpY29uQ2FuY2VsU3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAgICogQHBhcmFtIHtSYXRpbmdSYXRlRXZlbnR9IHZhbHVlIC0gQ3VzdG9tIHJhdGUgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmF0ZTogRXZlbnRFbWl0dGVyPFJhdGluZ1JhdGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJhdGluZ1JhdGVFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJhdGluZyBpcyBjYW5jZWxsZWQuXG4gICAgICogQHBhcmFtIHtFdmVudH0gdmFsdWUgLSBCcm93c2VyIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNhbmNlbDogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFByaW1lVGVtcGxhdGUpIHRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPjtcblxuICAgIG9uSWNvblRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIG9mZkljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBjYW5jZWxJY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICB2YWx1ZTogTnVsbGFibGU8bnVtYmVyPjtcblxuICAgIG9uTW9kZWxDaGFuZ2U6IEZ1bmN0aW9uID0gKCkgPT4ge307XG5cbiAgICBvbk1vZGVsVG91Y2hlZDogRnVuY3Rpb24gPSAoKSA9PiB7fTtcblxuICAgIHB1YmxpYyBzdGFyc0FycmF5OiBOdWxsYWJsZTxudW1iZXJbXT47XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdGFyc0FycmF5ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGFyczsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJzQXJyYXlbaV0gPSBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChpdGVtLmdldFR5cGUoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ29uaWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25JY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ29mZmljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZkljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnY2FuY2VsaWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsSWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEljb25UZW1wbGF0ZShpOiBudW1iZXIpOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PiB7XG4gICAgICAgIHJldHVybiAhdGhpcy52YWx1ZSB8fCBpID49IHRoaXMudmFsdWUgPyB0aGlzLm9mZkljb25UZW1wbGF0ZSA6IHRoaXMub25JY29uVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgcmF0ZShldmVudDogRXZlbnQsIGk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucmVhZG9ubHkgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBpICsgMTtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbFRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMub25SYXRlLmVtaXQoe1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBpICsgMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBjbGVhcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbFRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMub25DYW5jZWwuZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbk1vZGVsVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUodmFsOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB2YWw7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgZ2V0IGlzQ3VzdG9tSWNvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzICYmIHRoaXMudGVtcGxhdGVzLmxlbmd0aCA+IDA7XG4gICAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFN0YXJGaWxsSWNvbiwgU3Rhckljb24sIEJhbkljb25dLFxuICAgIGV4cG9ydHM6IFtSYXRpbmcsIFNoYXJlZE1vZHVsZV0sXG4gICAgZGVjbGFyYXRpb25zOiBbUmF0aW5nXVxufSlcbmV4cG9ydCBjbGFzcyBSYXRpbmdNb2R1bGUge31cbiJdfQ==
369
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL3JhdGluZy9yYXRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQVUsTUFBTSxFQUFhLE1BQU0sRUFBZSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyTixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFpQixhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBRWxELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFRO0lBQ3RDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDckMsS0FBSyxFQUFFLElBQUk7Q0FDZCxDQUFDO0FBQ0Y7OztHQUdHO0FBQ0gsTUFvRWEsTUFBTTtJQWtHSztJQUErQjtJQWpHbkQ7OztPQUdHO0lBQ00sUUFBUSxDQUFzQjtJQUN2Qzs7O09BR0c7SUFDTSxRQUFRLENBQXNCO0lBQ3ZDOzs7T0FHRztJQUNNLEtBQUssR0FBVyxDQUFDLENBQUM7SUFD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WSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDO29CQUN4RCxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDO29CQUMvQixZQUFZLEVBQUUsQ0FBQyxNQUFNLENBQUM7aUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5wdXQsIE5nTW9kdWxlLCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBzaWduYWwsIFRlbXBsYXRlUmVmLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUHJpbWVOR0NvbmZpZywgUHJpbWVUZW1wbGF0ZSwgU2hhcmVkTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQmFuSWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYmFuJztcbmltcG9ydCB7IFN0YXJJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9zdGFyJztcbmltcG9ydCB7IFN0YXJGaWxsSWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvc3RhcmZpbGwnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdwcmltZW5nL3RzLWhlbHBlcnMnO1xuaW1wb3J0IHsgUmF0aW5nUmF0ZUV2ZW50IH0gZnJvbSAnLi9yYXRpbmcuaW50ZXJmYWNlJztcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICdwcmltZW5nL2RvbSc7XG5pbXBvcnQgeyBVbmlxdWVDb21wb25lbnRJZCB9IGZyb20gJ3ByaW1lbmcvdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgUkFUSU5HX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmF0aW5nKSxcbiAgICBtdWx0aTogdHJ1ZVxufTtcbi8qKlxuICogUmF0aW5nIGlzIGFuIGV4dGVuc2lvbiB0byBzdGFuZGFyZCByYWRpbyBidXR0b24gZWxlbWVudCB3aXRoIHRoZW1pbmcuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3AtcmF0aW5nJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1yYXRpbmdcIiBbbmdDbGFzc109XCJ7ICdwLXJlYWRvbmx5JzogcmVhZG9ubHksICdwLWRpc2FibGVkJzogZGlzYWJsZWQgfVwiIFthdHRyLmRhdGEtcGMtbmFtZV09XCIncmF0aW5nJ1wiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCIncm9vdCdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDdXN0b21JY29uOyBlbHNlIGN1c3RvbVRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNhbmNlbFwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInY2FuY2VsSXRlbSdcIiAoY2xpY2spPVwib25PcHRpb25DbGljaygkZXZlbnQsIDApXCIgW25nQ2xhc3NdPVwieyAncC1mb2N1cyc6IGZvY3VzZWRPcHRpb25JbmRleCgpID09PSAwICYmIGlzRm9jdXNWaXNpYmxlIH1cIiBjbGFzcz1cInAtcmF0aW5nLWl0ZW0gcC1yYXRpbmctY2FuY2VsLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWhpZGRlbi1hY2Nlc3NpYmxlXCIgW2F0dHIuZGF0YS1wLWhpZGRlbi1hY2Nlc3NpYmxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ2YWx1ZSA9PT0gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY2FuY2VsQXJpYUxhYmVsKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbklucHV0Rm9jdXMoJGV2ZW50LCAwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25JbnB1dEJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIDApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpY29uQ2FuY2VsQ2xhc3NcIiBjbGFzcz1cInAtcmF0aW5nLWljb24gcC1yYXRpbmctY2FuY2VsXCIgW25nQ2xhc3NdPVwiaWNvbkNhbmNlbENsYXNzXCIgW25nU3R5bGVdPVwiaWNvbkNhbmNlbFN0eWxlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8QmFuSWNvbiAqbmdJZj1cIiFpY29uQ2FuY2VsQ2xhc3NcIiBbc3R5bGVDbGFzc109XCIncC1yYXRpbmctaWNvbiBwLXJhdGluZy1jYW5jZWwnXCIgW25nU3R5bGVdPVwiaWNvbkNhbmNlbFN0eWxlXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidjYW5jZWxJY29uJ1wiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIFtuZ0Zvck9mXT1cInN0YXJzQXJyYXlcIiBsZXQtc3RhciBsZXQtaT1cImluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXJhdGluZy1pdGVtXCIgW25nQ2xhc3NdPVwieyAncC1yYXRpbmctaXRlbS1hY3RpdmUnOiBzdGFyICsgMSA8PSB2YWx1ZSwgJ3AtZm9jdXMnOiBzdGFyICsgMSA9PT0gZm9jdXNlZE9wdGlvbkluZGV4KCkgJiYgaXNGb2N1c1Zpc2libGUgfVwiIChjbGljayk9XCJvbk9wdGlvbkNsaWNrKCRldmVudCwgc3RhciArIDEpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaGlkZGVuLWFjY2Vzc2libGVcIiBbYXR0ci5kYXRhLXAtaGlkZGVuLWFjY2Vzc2libGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidmFsdWUgPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0YXJBcmlhTGFiZWwoc3RhciArIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uSW5wdXRGb2N1cygkZXZlbnQsIHN0YXIgKyAxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uSW5wdXRCbHVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudCwgc3RhciArIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF2YWx1ZSB8fCBpID49IHZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLXJhdGluZy1pY29uXCIgKm5nSWY9XCJpY29uT2ZmQ2xhc3NcIiBbbmdTdHlsZV09XCJpY29uT2ZmU3R5bGVcIiBbbmdDbGFzc109XCJpY29uT2ZmQ2xhc3NcIiBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ29mZkljb24nXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFySWNvbiAqbmdJZj1cIiFpY29uT2ZmQ2xhc3NcIiBbbmdTdHlsZV09XCJpY29uT2ZmU3R5bGVcIiBbc3R5bGVDbGFzc109XCIncC1yYXRpbmctaWNvbidcIiBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ29mZkljb24nXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhbHVlICYmIGkgPCB2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1yYXRpbmctaWNvbiBwLXJhdGluZy1pY29uLWFjdGl2ZVwiICpuZ0lmPVwiaWNvbk9uQ2xhc3NcIiBbbmdTdHlsZV09XCJpY29uT25TdHlsZVwiIFtuZ0NsYXNzXT1cImljb25PbkNsYXNzXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidvbkljb24nXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFyRmlsbEljb24gKm5nSWY9XCIhaWNvbk9uQ2xhc3NcIiBbbmdTdHlsZV09XCJpY29uT25TdHlsZVwiIFtzdHlsZUNsYXNzXT1cIidwLXJhdGluZy1pY29uIHAtcmF0aW5nLWljb24tYWN0aXZlJ1wiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInb25JY29uJ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjdXN0b21UZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNhbmNlbFwiIChjbGljayk9XCJvbk9wdGlvbkNsaWNrKCRldmVudCwgMClcIiBjbGFzcz1cInAtcmF0aW5nLWljb24gcC1yYXRpbmctY2FuY2VsXCIgW25nU3R5bGVdPVwiaWNvbkNhbmNlbFN0eWxlXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidjYW5jZWxJY29uJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FuY2VsSWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBzdGFyIG9mIHN0YXJzQXJyYXk7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cInAtcmF0aW5nLWljb25cIiAoY2xpY2spPVwib25PcHRpb25DbGljaygkZXZlbnQsIHN0YXIgKyAxKVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInb25JY29uJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0SWNvblRlbXBsYXRlKGkpXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgYCxcbiAgICBwcm92aWRlcnM6IFtSQVRJTkdfVkFMVUVfQUNDRVNTT1JdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3R5bGVVcmxzOiBbJy4vcmF0aW5nLmNzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdwLWVsZW1lbnQnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBSYXRpbmcgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICAvKipcbiAgICAgKiBXaGVuIHByZXNlbnQsIGl0IHNwZWNpZmllcyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGVuIHByZXNlbnQsIGNoYW5naW5nIHRoZSB2YWx1ZSBpcyBub3QgcG9zc2libGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHN0YXJzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0YXJzOiBudW1iZXIgPSA1O1xuICAgIC8qKlxuICAgICAqIFdoZW4gc3BlY2lmaWVkIGEgY2FuY2VsIGljb24gaXMgZGlzcGxheWVkIHRvIGFsbG93IHJlbW92aW5nIHRoZSB2YWx1ZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjYW5jZWw6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIFN0eWxlIGNsYXNzIG9mIHRoZSBvbiBpY29uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGljb25PbkNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBvbiBpY29uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGljb25PblN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFN0eWxlIGNsYXNzIG9mIHRoZSBvZmYgaWNvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpY29uT2ZmQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBJbmxpbmUgc3R5bGUgb2YgdGhlIG9mZiBpY29uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGljb25PZmZTdHlsZTogeyBba2xhc3M6IHN0cmluZ106IGFueSB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBTdHlsZSBjbGFzcyBvZiB0aGUgY2FuY2VsIGljb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgaWNvbkNhbmNlbENsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBjYW5jZWwgaWNvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpY29uQ2FuY2VsU3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAgICogQHBhcmFtIHtSYXRpbmdSYXRlRXZlbnR9IHZhbHVlIC0gQ3VzdG9tIHJhdGUgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmF0ZTogRXZlbnRFbWl0dGVyPFJhdGluZ1JhdGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJhdGluZ1JhdGVFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJhdGluZyBpcyBjYW5jZWxsZWQuXG4gICAgICogQHBhcmFtIHtFdmVudH0gdmFsdWUgLSBCcm93c2VyIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNhbmNlbDogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSByYXRpbmcgcmVjZWl2ZXMgZm9jdXMuXG4gICAgICogQHBhcmFtIHtFdmVudH0gdmFsdWUgLSBCcm93c2VyIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSByYXRpbmcgbG9zZXMgZm9jdXMuXG4gICAgICogQHBhcmFtIHtFdmVudH0gdmFsdWUgLSBCcm93c2VyIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oUHJpbWVUZW1wbGF0ZSkgdGVtcGxhdGVzITogUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+O1xuXG4gICAgb25JY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgb2ZmSWNvblRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIGNhbmNlbEljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICB2YWx1ZTogTnVsbGFibGU8bnVtYmVyPjtcblxuICAgIG9uTW9kZWxDaGFuZ2U6IEZ1bmN0aW9uID0gKCkgPT4ge307XG5cbiAgICBvbk1vZGVsVG91Y2hlZDogRnVuY3Rpb24gPSAoKSA9PiB7fTtcblxuICAgIHB1YmxpYyBzdGFyc0FycmF5OiBOdWxsYWJsZTxudW1iZXJbXT47XG5cbiAgICBpc0ZvY3VzVmlzaWJsZUl0ZW06IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgZm9jdXNlZE9wdGlvbkluZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuXG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgY29uZmlnOiBQcmltZU5HQ29uZmlnKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZSB8fCBVbmlxdWVDb21wb25lbnRJZCgpO1xuICAgICAgICB0aGlzLnN0YXJzQXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN0YXJzOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnNBcnJheVtpXSA9IGk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoaXRlbS5nZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdvbmljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uSWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdvZmZpY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZJY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2NhbmNlbGljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbEljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbk9wdGlvbkNsaWNrKGV2ZW50LCB2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMucmVhZG9ubHkgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25PcHRpb25TZWxlY3QoZXZlbnQsIHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuaXNGb2N1c1Zpc2libGVJdGVtID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEZvY3VzYWJsZUVsID0gRG9tSGFuZGxlci5nZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQoZXZlbnQuY3VycmVudFRhcmdldCwgJycpO1xuXG4gICAgICAgICAgICBmaXJzdEZvY3VzYWJsZUVsICYmIERvbUhhbmRsZXIuZm9jdXMoZmlyc3RGb2N1c2FibGVFbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk9wdGlvblNlbGVjdChldmVudCwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXguc2V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVNb2RlbChldmVudCwgdmFsdWUgfHwgbnVsbCk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoZXZlbnQsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMub25PcHRpb25TZWxlY3QoZXZlbnQsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5pc0ZvY3VzVmlzaWJsZUl0ZW0gPSB0cnVlO1xuICAgIH1cblxuICAgIG9uSW5wdXRCbHVyKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4LnNldCgtMSk7XG4gICAgICAgIHRoaXMub25CbHVyLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uSW5wdXRGb2N1cyhldmVudCwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXguc2V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHVwZGF0ZU1vZGVsKGV2ZW50LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vbk1vZGVsVG91Y2hlZCgpO1xuXG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vblJhdGUuZW1pdCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FuY2VsQXJpYUxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcudHJhbnNsYXRpb24uY2xlYXI7XG4gICAgfVxuXG4gICAgc3RhckFyaWFMYWJlbCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IDEgPyB0aGlzLmNvbmZpZy50cmFuc2xhdGlvbi5hcmlhLnN0YXIgOiB0aGlzLmNvbmZpZy50cmFuc2xhdGlvbi5hcmlhLnN0YXJzLnJlcGxhY2UoL3tzdGFyfS9nLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0SWNvblRlbXBsYXRlKGk6IG51bWJlcik6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+IHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnZhbHVlIHx8IGkgPj0gdGhpcy52YWx1ZSA/IHRoaXMub2ZmSWNvblRlbXBsYXRlIDogdGhpcy5vbkljb25UZW1wbGF0ZTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbk1vZGVsVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUodmFsOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB2YWw7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgZ2V0IGlzQ3VzdG9tSWNvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzICYmIHRoaXMudGVtcGxhdGVzLmxlbmd0aCA+IDA7XG4gICAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFN0YXJGaWxsSWNvbiwgU3Rhckljb24sIEJhbkljb25dLFxuICAgIGV4cG9ydHM6IFtSYXRpbmcsIFNoYXJlZE1vZHVsZV0sXG4gICAgZGVjbGFyYXRpb25zOiBbUmF0aW5nXVxufSlcbmV4cG9ydCBjbGFzcyBSYXRpbmdNb2R1bGUge31cbiJdfQ==