@simpleangularcontrols/sac-common 10.0.0-rc.29 → 10.0.0-rc.30

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 (267) hide show
  1. package/bundles/simpleangularcontrols-sac-common.umd.js +1848 -1249
  2. package/bundles/simpleangularcontrols-sac-common.umd.js.map +1 -1
  3. package/bundles/simpleangularcontrols-sac-common.umd.min.js +1 -1
  4. package/bundles/simpleangularcontrols-sac-common.umd.min.js.map +1 -1
  5. package/common/basedatetimecontrol.d.ts +47 -21
  6. package/common/baseinputcontrol.d.ts +10 -8
  7. package/common/baselistcontrol.d.ts +15 -15
  8. package/common/basemodelcontrol.d.ts +59 -43
  9. package/common/baseselectcontrol.d.ts +5 -5
  10. package/common/baseuploadcontrol.d.ts +77 -57
  11. package/components/browser/browser.d.ts +86 -89
  12. package/components/browser/models/browserfile.d.ts +6 -6
  13. package/components/browser/models/browserfiledeleterequest.d.ts +7 -7
  14. package/components/browser/models/browserfilerenamerequest.d.ts +10 -10
  15. package/components/browser/models/browserfileresponse.d.ts +2 -2
  16. package/components/browser/models/browserfilesaverequest.d.ts +7 -7
  17. package/components/browser/models/browsernode.d.ts +13 -13
  18. package/components/browser/models/browsernodedeleterequest.d.ts +6 -6
  19. package/components/browser/models/browsernodenewrequest.d.ts +7 -7
  20. package/components/browser/models/browsernoderenamerequest.d.ts +7 -7
  21. package/components/browser/models/browsernoderequest.d.ts +7 -7
  22. package/components/browser/models/browsernoderesponse.d.ts +1 -1
  23. package/controls/buttons/button.d.ts +25 -19
  24. package/controls/checkbox/checkbox.d.ts +3 -3
  25. package/controls/checkbox/radiobutton.d.ts +19 -13
  26. package/controls/checkbox/radiobuttons.d.ts +13 -10
  27. package/controls/confirm/confirm.button.d.ts +3 -3
  28. package/controls/confirm/confirm.d.ts +13 -12
  29. package/controls/confirm/confirm.service.d.ts +14 -14
  30. package/controls/contextmenu/contextmenu.d.ts +33 -27
  31. package/controls/contextmenu/contextmenu.interface.d.ts +6 -0
  32. package/controls/contextmenu/contextmenuanchor.d.ts +4 -4
  33. package/controls/contextmenu/contextmenucontainer.d.ts +4 -4
  34. package/controls/contextmenu/contextmenuitembutton.d.ts +12 -12
  35. package/controls/datetime/date.d.ts +11 -11
  36. package/controls/datetime/dateselector.d.ts +47 -40
  37. package/controls/datetime/datetime.d.ts +15 -14
  38. package/controls/datetime/time.d.ts +22 -12
  39. package/controls/dialog/dialog.d.ts +28 -22
  40. package/controls/form/form.d.ts +17 -12
  41. package/controls/grid/grid.d.ts +1 -0
  42. package/controls/grid/gridbutton.d.ts +1 -0
  43. package/controls/grid/gridcolumn.d.ts +5 -1
  44. package/controls/grid/gridcolumnaction.d.ts +1 -1
  45. package/controls/grid/gridcolumnbase.d.ts +8 -3
  46. package/controls/grid/model.d.ts +5 -2
  47. package/controls/grid/paging.d.ts +2 -3
  48. package/controls/input/input.d.ts +7 -7
  49. package/controls/input/inputarea.d.ts +8 -6
  50. package/controls/input/inputcurrency.d.ts +4 -1
  51. package/controls/input/inputdecimal.d.ts +14 -14
  52. package/controls/input/inputemail.d.ts +4 -4
  53. package/controls/input/inputinteger.d.ts +14 -14
  54. package/controls/input/inputpassword.d.ts +3 -3
  55. package/controls/input/inputsearch.d.ts +8 -5
  56. package/controls/layout/formlayout.d.ts +8 -5
  57. package/controls/list/buildvaluestring.d.ts +2 -2
  58. package/controls/list/dropdown.d.ts +23 -22
  59. package/controls/list/dropdownoptions.d.ts +10 -10
  60. package/controls/list/listbox.d.ts +25 -23
  61. package/controls/multilanguage/multilanguageinput.d.ts +25 -25
  62. package/controls/multilanguage/multilanguageinputarea.d.ts +27 -27
  63. package/controls/static/formcontainer.d.ts +8 -8
  64. package/controls/static/staticlabel.d.ts +5 -5
  65. package/controls/tabs/tab.d.ts +2 -2
  66. package/controls/tabs/tabitem.d.ts +7 -7
  67. package/controls/tinymce/tinymce.d.ts +37 -37
  68. package/controls/tinymce/tinymcedialogsettings.d.ts +6 -6
  69. package/controls/tinymce/tinymcedialogsettingsmeta.d.ts +2 -2
  70. package/controls/tinymce/tinymceinstance.d.ts +2 -2
  71. package/controls/tooltip/tooltip.d.ts +10 -5
  72. package/controls/treeview/treeview.d.ts +50 -5
  73. package/controls/upload/dropzonemultiple.d.ts +16 -16
  74. package/controls/upload/dropzonesingle.d.ts +11 -11
  75. package/controls/upload/uploadmultiple.d.ts +12 -12
  76. package/controls/upload/uploadsingle.d.ts +7 -7
  77. package/controls/validation/validationsummary.d.ts +12 -11
  78. package/controls/wizard/wizard.d.ts +25 -18
  79. package/controls/wizard/wizarditem.d.ts +5 -5
  80. package/enums/ButtonRoleType.d.ts +26 -1
  81. package/enums/ControlHeight.d.ts +1 -1
  82. package/enums/IconType.d.ts +1 -1
  83. package/esm2015/common/basedatetimecontrol.js +47 -22
  84. package/esm2015/common/baseinputcontrol.js +13 -11
  85. package/esm2015/common/baselistcontrol.js +21 -17
  86. package/esm2015/common/basemodelcontrol.js +72 -49
  87. package/esm2015/common/baseselectcontrol.js +11 -9
  88. package/esm2015/common/baseuploadcontrol.js +69 -49
  89. package/esm2015/components/browser/browser.js +93 -105
  90. package/esm2015/components/browser/models/browserfile.js +1 -1
  91. package/esm2015/components/browser/models/browserfiledeleterequest.js +6 -4
  92. package/esm2015/components/browser/models/browserfilerenamerequest.js +6 -4
  93. package/esm2015/components/browser/models/browserfileresponse.js +1 -1
  94. package/esm2015/components/browser/models/browserfilesaverequest.js +5 -3
  95. package/esm2015/components/browser/models/browsernode.js +1 -1
  96. package/esm2015/components/browser/models/browsernodedeleterequest.js +6 -4
  97. package/esm2015/components/browser/models/browsernodenewrequest.js +6 -4
  98. package/esm2015/components/browser/models/browsernoderenamerequest.js +6 -4
  99. package/esm2015/components/browser/models/browsernoderequest.js +6 -4
  100. package/esm2015/components/browser/models/browsernoderesponse.js +1 -1
  101. package/esm2015/controls/buttons/button.js +26 -20
  102. package/esm2015/controls/checkbox/checkbox.js +3 -3
  103. package/esm2015/controls/checkbox/radiobutton.js +21 -15
  104. package/esm2015/controls/checkbox/radiobuttons.js +14 -11
  105. package/esm2015/controls/confirm/confirm.button.js +4 -4
  106. package/esm2015/controls/confirm/confirm.js +14 -13
  107. package/esm2015/controls/confirm/confirm.service.js +21 -21
  108. package/esm2015/controls/contextmenu/contextmenu.interface.js +1 -1
  109. package/esm2015/controls/contextmenu/contextmenu.js +29 -23
  110. package/esm2015/controls/contextmenu/contextmenuanchor.js +4 -4
  111. package/esm2015/controls/contextmenu/contextmenucontainer.js +4 -4
  112. package/esm2015/controls/contextmenu/contextmenuitembutton.js +10 -10
  113. package/esm2015/controls/datetime/date.js +13 -13
  114. package/esm2015/controls/datetime/dateselector.js +55 -54
  115. package/esm2015/controls/datetime/datetime.js +17 -16
  116. package/esm2015/controls/datetime/time.js +24 -14
  117. package/esm2015/controls/dialog/dialog.js +31 -24
  118. package/esm2015/controls/form/form.js +18 -13
  119. package/esm2015/controls/grid/grid.js +2 -1
  120. package/esm2015/controls/grid/gridbutton.js +2 -1
  121. package/esm2015/controls/grid/gridcolumn.js +6 -2
  122. package/esm2015/controls/grid/gridcolumnaction.js +2 -2
  123. package/esm2015/controls/grid/gridcolumnbase.js +9 -4
  124. package/esm2015/controls/grid/model.js +5 -2
  125. package/esm2015/controls/grid/paging.js +6 -7
  126. package/esm2015/controls/input/input.js +8 -8
  127. package/esm2015/controls/input/inputarea.js +9 -7
  128. package/esm2015/controls/input/inputcurrency.js +6 -3
  129. package/esm2015/controls/input/inputdecimal.js +21 -27
  130. package/esm2015/controls/input/inputemail.js +5 -5
  131. package/esm2015/controls/input/inputinteger.js +19 -23
  132. package/esm2015/controls/input/inputpassword.js +4 -4
  133. package/esm2015/controls/input/inputsearch.js +9 -6
  134. package/esm2015/controls/layout/formlayout.js +10 -7
  135. package/esm2015/controls/list/buildvaluestring.js +6 -6
  136. package/esm2015/controls/list/dropdown.js +28 -27
  137. package/esm2015/controls/list/dropdownoptions.js +12 -12
  138. package/esm2015/controls/list/listbox.js +26 -24
  139. package/esm2015/controls/multilanguage/multilanguageinput.js +29 -29
  140. package/esm2015/controls/multilanguage/multilanguageinputarea.js +31 -31
  141. package/esm2015/controls/static/formcontainer.js +10 -10
  142. package/esm2015/controls/static/staticlabel.js +7 -7
  143. package/esm2015/controls/tabs/tab.js +2 -2
  144. package/esm2015/controls/tabs/tabitem.js +5 -5
  145. package/esm2015/controls/tinymce/tinymce.js +35 -35
  146. package/esm2015/controls/tinymce/tinymcedialogsettings.js +4 -4
  147. package/esm2015/controls/tinymce/tinymcedialogsettingsmeta.js +1 -1
  148. package/esm2015/controls/tinymce/tinymceinstance.js +1 -1
  149. package/esm2015/controls/tooltip/tooltip.js +13 -8
  150. package/esm2015/controls/treeview/treeview.js +52 -7
  151. package/esm2015/controls/upload/dropzonemultiple.js +18 -18
  152. package/esm2015/controls/upload/dropzonesingle.js +12 -12
  153. package/esm2015/controls/upload/uploadmultiple.js +14 -14
  154. package/esm2015/controls/upload/uploadsingle.js +8 -8
  155. package/esm2015/controls/validation/validationsummary.js +14 -13
  156. package/esm2015/controls/wizard/wizard.js +24 -17
  157. package/esm2015/controls/wizard/wizarditem.js +4 -4
  158. package/esm2015/enums/ButtonRoleType.js +1 -1
  159. package/esm2015/enums/ControlHeight.js +2 -2
  160. package/esm2015/enums/IconType.js +2 -2
  161. package/esm2015/interfaces/ISacConfigurationService.js +1 -1
  162. package/esm2015/interfaces/ISacFileBrowserService.js +1 -1
  163. package/esm2015/interfaces/ISacLabelSizes.js +1 -1
  164. package/esm2015/interfaces/ISacLanguageService.js +1 -1
  165. package/esm2015/interfaces/ISacLocalisationService.js +1 -1
  166. package/esm2015/interfaces/ISacUploadEventCompleteState.js +1 -1
  167. package/esm2015/interfaces/iabstractcontrollabel.js +1 -1
  168. package/esm2015/interfaces/iconfirmcomponent.js +1 -1
  169. package/esm2015/interfaces/idatetimecontrol.js +1 -1
  170. package/esm2015/interfaces/iuploadcontrol.js +1 -1
  171. package/esm2015/interfaces/treeviewaction.interface.js +1 -1
  172. package/esm2015/models/languagemodel.js +5 -3
  173. package/esm2015/public_api.js +3 -2
  174. package/esm2015/services/index.js +4 -4
  175. package/esm2015/services/sac-configuration.service.js +7 -1
  176. package/esm2015/services/sac-filebrowser.service.js +46 -38
  177. package/esm2015/services/sac-localisation.service.js +11 -7
  178. package/esm2015/services/sac-validationkey.service.js +148 -1
  179. package/esm2015/utilities/convertion.js +7 -5
  180. package/esm2015/utilities/datatypes.js +6 -4
  181. package/esm2015/utilities/enums.js +9 -8
  182. package/esm2015/utilities/guid.js +2 -2
  183. package/esm2015/utilities/interpolation.js +16 -9
  184. package/esm2015/utilities/popuphelper.js +62 -25
  185. package/esm2015/utilities/positioncalculator.js +209 -0
  186. package/esm2015/utilities/positioncalculator.ngfactory.js +7 -0
  187. package/esm2015/utilities/positionelements.js +108 -0
  188. package/esm2015/utilities/positionelements.ngfactory.js +7 -0
  189. package/esm2015/utilities/testingattribute.pipe.js +17 -2
  190. package/esm2015/validation/email.validator.js +11 -2
  191. package/esm2015/validation/equals.validator.js +11 -1
  192. package/esm2015/validation/index.js +1 -1
  193. package/esm2015/validation/invaliddate.validator.js +11 -2
  194. package/esm2015/validation/isDateValid.js +11 -10
  195. package/esm2015/validation/maxdate.validator.js +14 -4
  196. package/esm2015/validation/maxtime.validator.js +14 -4
  197. package/esm2015/validation/maxvalue.validator.js +12 -2
  198. package/esm2015/validation/mindate.validator.js +14 -4
  199. package/esm2015/validation/minfiles.validator.js +12 -2
  200. package/esm2015/validation/mintextlength.validator.js +9 -1
  201. package/esm2015/validation/mintime.validator.js +14 -4
  202. package/esm2015/validation/minvalue.validator.js +12 -2
  203. package/esm2015/validation/multilanguagerequired.validator.js +11 -1
  204. package/esm2015/validation/multilanguagerequiredany.validator.js +11 -1
  205. package/esm2015/validation/notequals.validator.js +11 -1
  206. package/esm2015/validation/pattern.validator.js +12 -2
  207. package/esm2015/validation/required.validator.js +11 -2
  208. package/esm2015/validation/validation.class.js +84 -101
  209. package/esm2015/validation/validationerrorcreator.js +12 -1
  210. package/esm2015/validation/validationerroritem.js +11 -9
  211. package/fesm2015/simpleangularcontrols-sac-common.js +1823 -1226
  212. package/fesm2015/simpleangularcontrols-sac-common.js.map +1 -1
  213. package/interfaces/ISacConfigurationService.d.ts +9 -1
  214. package/interfaces/ISacFileBrowserService.d.ts +43 -43
  215. package/interfaces/ISacLabelSizes.d.ts +15 -12
  216. package/interfaces/ISacLanguageService.d.ts +3 -3
  217. package/interfaces/ISacLocalisationService.d.ts +2 -2
  218. package/interfaces/ISacUploadEventCompleteState.d.ts +6 -0
  219. package/interfaces/iabstractcontrollabel.d.ts +4 -1
  220. package/interfaces/iconfirmcomponent.d.ts +6 -6
  221. package/interfaces/idatetimecontrol.d.ts +10 -1
  222. package/interfaces/treeviewaction.interface.d.ts +9 -0
  223. package/models/languagemodel.d.ts +9 -9
  224. package/package.json +1 -1
  225. package/public_api.d.ts +2 -1
  226. package/services/index.d.ts +3 -3
  227. package/services/sac-configuration.service.d.ts +8 -0
  228. package/services/sac-filebrowser.service.d.ts +78 -70
  229. package/services/sac-localisation.service.d.ts +11 -7
  230. package/services/sac-validationkey.service.d.ts +147 -0
  231. package/simpleangularcontrols-sac-common-10.0.0-rc.30.tgz +0 -0
  232. package/simpleangularcontrols-sac-common.metadata.json +1 -1
  233. package/utilities/convertion.d.ts +4 -4
  234. package/utilities/datatypes.d.ts +3 -3
  235. package/utilities/enums.d.ts +8 -1
  236. package/utilities/guid.d.ts +1 -1
  237. package/utilities/interpolation.d.ts +9 -8
  238. package/utilities/popuphelper.d.ts +47 -10
  239. package/utilities/positioncalculator.d.ts +82 -0
  240. package/utilities/positionelements.d.ts +30 -0
  241. package/utilities/positionelements.ngfactory.d.ts +1 -0
  242. package/utilities/testingattribute.pipe.d.ts +16 -1
  243. package/validation/email.validator.d.ts +7 -0
  244. package/validation/equals.validator.d.ts +8 -0
  245. package/validation/invaliddate.validator.d.ts +7 -0
  246. package/validation/isDateValid.d.ts +5 -2
  247. package/validation/maxdate.validator.d.ts +8 -0
  248. package/validation/maxtime.validator.d.ts +8 -0
  249. package/validation/maxvalue.validator.d.ts +8 -0
  250. package/validation/mindate.validator.d.ts +8 -0
  251. package/validation/minfiles.validator.d.ts +8 -0
  252. package/validation/mintextlength.validator.d.ts +8 -0
  253. package/validation/mintime.validator.d.ts +8 -0
  254. package/validation/minvalue.validator.d.ts +8 -0
  255. package/validation/multilanguagerequired.validator.d.ts +9 -1
  256. package/validation/multilanguagerequiredany.validator.d.ts +9 -1
  257. package/validation/notequals.validator.d.ts +8 -0
  258. package/validation/pattern.validator.d.ts +8 -0
  259. package/validation/required.validator.d.ts +7 -0
  260. package/validation/validation.class.d.ts +83 -100
  261. package/validation/validationerrorcreator.d.ts +9 -0
  262. package/validation/validationerroritem.d.ts +16 -16
  263. package/esm2015/utilities/positioning.js +0 -301
  264. package/esm2015/utilities/positioning.ngfactory.js +0 -7
  265. package/simpleangularcontrols-sac-common-10.0.0-rc.29.tgz +0 -0
  266. package/utilities/positioning.d.ts +0 -82
  267. /package/utilities/{positioning.ngfactory.d.ts → positioncalculator.ngfactory.d.ts} +0 -0
@@ -5,15 +5,16 @@ import { Validation } from '../../validation';
5
5
  // #endregion Interfaces
6
6
  // #region Classes
7
7
  /**
8
- * Basis Komponente für SacListboxOption
8
+ * Base component for SacListboxOption
9
9
  */
10
10
  export class SacListboxOptionCommon {
11
11
  // #endregion Properties
12
12
  // #region Constructors
13
13
  /**
14
- * Konstruktor
15
- * @param _element: ElementRef
16
- * @param _renderer: Renderer2
14
+ * Constructor
15
+ * @param _element Reference to host element
16
+ * @param _renderer Renderer for DOM manipulation
17
+ * @param _listbox Reference to parent listbox component
17
18
  */
18
19
  constructor(_element, _renderer, _listbox) {
19
20
  this._element = _element;
@@ -21,7 +22,7 @@ export class SacListboxOptionCommon {
21
22
  this._listbox = _listbox;
22
23
  // #region Properties
23
24
  /**
24
- * Value von Selected Option Item
25
+ * Value of selected option item
25
26
  */
26
27
  this._value = null;
27
28
  if (this._listbox) {
@@ -31,7 +32,7 @@ export class SacListboxOptionCommon {
31
32
  // #endregion Constructors
32
33
  // #region Public Getters And Setters
33
34
  /**
34
- * NgValue des Controls. Wird für die Mehrfachauswahl benötigt
35
+ * NgValue of the control. Needed for multiple selection
35
36
  */
36
37
  set ngValue(value) {
37
38
  if (this._listbox) {
@@ -39,7 +40,7 @@ export class SacListboxOptionCommon {
39
40
  }
40
41
  }
41
42
  /**
42
- * Definiert den Wert der Listbox
43
+ * Defines the value of the listbox
43
44
  */
44
45
  set value(value) {
45
46
  if (this._listbox) {
@@ -52,14 +53,14 @@ export class SacListboxOptionCommon {
52
53
  // #endregion Public Getters And Setters
53
54
  // #region Public Methods
54
55
  /**
55
- * Methode ergibt den Status der Elemente, die selektiert wurden
56
- * @param selected Element ist selektiert
56
+ * Method returns the status of the elements that were selected
57
+ * @param selected Element is selected
57
58
  */
58
59
  _setSelected(selected) {
59
60
  this._renderer.setProperty(this._element.nativeElement, 'selected', selected);
60
61
  }
61
62
  /**
62
- * OnDestroy Event
63
+ * OnDestroy event
63
64
  */
64
65
  ngOnDestroy() {
65
66
  if (this._listbox) {
@@ -80,26 +81,26 @@ SacListboxOptionCommon.propDecorators = {
80
81
  value: [{ type: Input }]
81
82
  };
82
83
  /**
83
- * Komponente für SacListboxCommon. Extends SacBaseSelectControl
84
+ * Component for SacListboxCommon. Extends SacBaseSelectControl
84
85
  */
85
86
  export class SacListboxCommon extends SacBaseSelectControl {
86
87
  constructor() {
87
88
  // #region Properties
88
89
  super(...arguments);
89
90
  /**
90
- * Anzahl der Zeilen
91
+ * Number of rows
91
92
  */
92
93
  this.rowsize = 5;
93
94
  /**
94
- * Resource Key für Validation Message Required bei Control
95
+ * Resource key for validation message required at control
95
96
  */
96
97
  this.validationmessagerequired = this.validationKeyService.ValidationErrorRequired;
97
98
  /**
98
- * Resource Key für Validation Message Required in Validation Summary
99
+ * Resource key for validation message required in validation summary
99
100
  */
100
101
  this.validationmessagesummaryrequired = this.validationKeyService.ValidationErrorSummaryRequired;
101
102
  /**
102
- * OptionMap
103
+ * Option list
103
104
  */
104
105
  this.optionlist = new Array();
105
106
  // #endregion Public Methods
@@ -107,7 +108,7 @@ export class SacListboxCommon extends SacBaseSelectControl {
107
108
  // #endregion Properties
108
109
  // #region Public Methods
109
110
  /**
110
- * Getter für selektierte Elemente
111
+ * Getter for selected items
111
112
  */
112
113
  getSelectedItems(selectelement) {
113
114
  const selectedValues = new Array();
@@ -131,22 +132,22 @@ export class SacListboxCommon extends SacBaseSelectControl {
131
132
  }
132
133
  }
133
134
  /**
134
- * Registriert ein Listbox Element
135
- * @param option Listbox Option Item das registriert werden soll
135
+ * Registers a listbox element
136
+ * @param option Listbox option item to be registered
136
137
  */
137
138
  registerOption(option) {
138
139
  this.optionlist.push(option);
139
140
  }
140
141
  /**
141
- * Hebt die Registration eines Listbox Items auf
142
- * @param option Listbox Option Item das deregistriert werden soll
142
+ * Cancels the registration of a listbox item
143
+ * @param option Listbox option item to be deregistered
143
144
  */
144
145
  unregisterOption(option) {
145
146
  const index = this.optionlist.indexOf(option);
146
147
  this.optionlist.splice(index, 1);
147
148
  }
148
149
  /**
149
- * Validator Methode
150
+ * Validator method
150
151
  */
151
152
  validateData(c) {
152
153
  let error = null;
@@ -156,7 +157,8 @@ export class SacListboxCommon extends SacBaseSelectControl {
156
157
  return error;
157
158
  }
158
159
  /**
159
- * Methode schreibt neuen Wert
160
+ * Method writes new value
161
+ * @param value Selected values that should be set on the options.
160
162
  */
161
163
  writeValue(value) {
162
164
  if (this.optionlist && value) {
@@ -179,9 +181,9 @@ SacListboxCommon.propDecorators = {
179
181
  contentOptions: [{ type: ViewChildren, args: [SacListboxOptionCommon,] }]
180
182
  };
181
183
  /**
182
- * Wrapper für HTML Select
184
+ * Wrapper for HTML select
183
185
  */
184
186
  class HTMLCollection {
185
187
  }
186
188
  // #endregion Classes
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGJveC5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9zaW1wbGVhbmd1bGFyY29udHJvbHMvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbImNvbnRyb2xzL2xpc3QvbGlzdGJveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjO0FBQ2QsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFhLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQXNCOUMsd0JBQXdCO0FBRXhCLGtCQUFrQjtBQUVsQjs7R0FFRztBQUVILE1BQU0sT0FBTyxzQkFBc0I7SUFRL0Isd0JBQXdCO0lBRXhCLHVCQUF1QjtJQUV2Qjs7OztPQUlHO0lBQ0gsWUFBb0IsUUFBb0IsRUFBVSxTQUFvQixFQUFVLFFBQTBCO1FBQXRGLGFBQVEsR0FBUixRQUFRLENBQVk7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUFoQjFHLHFCQUFxQjtRQUVyQjs7V0FFRztRQUNLLFdBQU0sR0FBUSxJQUFJLENBQUM7UUFZdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7SUFDTCxDQUFDO0lBRUQsMEJBQTBCO0lBRTFCLHFDQUFxQztJQUVyQzs7T0FFRztJQUNILElBQ1csT0FBTyxDQUFDLEtBQVU7UUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDdkI7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUNXLEtBQUssQ0FBQyxLQUFVO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsd0NBQXdDO0lBRXhDLHlCQUF5QjtJQUV6Qjs7O09BR0c7SUFDSSxZQUFZLENBQUMsUUFBaUI7UUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDZCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hDO0lBQ0wsQ0FBQzs7O1lBdkVKLFNBQVM7OztZQWhDVSxVQUFVO1lBQStCLFNBQVM7WUFrRHdCLGdCQUFnQjs7O3NCQWF6RyxLQUFLO29CQVVMLEtBQUs7O0FBbUNWOztHQUVHO0FBRUgsTUFBTSxPQUFPLGdCQUFpQixTQUFRLG9CQUFtQztJQUR6RTtRQUVJLHFCQUFxQjs7UUFFckI7O1dBRUc7UUFDYSxZQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQ3BDOztXQUVHO1FBQ2EsOEJBQXlCLEdBQVcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDO1FBRXRHOztXQUVHO1FBRUkscUNBQWdDLEdBQVcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLDhCQUE4QixDQUFDO1FBUTNHOztXQUVHO1FBQ0ksZUFBVSxHQUFrQyxJQUFJLEtBQUssRUFBMEIsQ0FBQztRQTZFdkYsNEJBQTRCO0lBQ2hDLENBQUM7SUE1RUcsd0JBQXdCO0lBRXhCLHlCQUF5QjtJQUV6Qjs7T0FFRztJQUNJLGdCQUFnQixDQUFDLGFBQWtCO1FBQ3RDLE1BQU0sY0FBYyxHQUFrQixJQUFJLEtBQUssRUFBVSxDQUFDO1FBRTFELElBQUksYUFBYSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ2pELE1BQU0sT0FBTyxHQUFtQixhQUFhLENBQUMsZUFBZSxDQUFDO1lBQzlELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxNQUFNLEdBQUcsR0FBZSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNsQztTQUNKO2FBQU07WUFDSCxnQkFBZ0I7WUFDaEIsTUFBTSxPQUFPLEdBQW1DLGFBQWEsQ0FBQyxPQUFPLENBQUM7WUFDdEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sR0FBRyxHQUFlLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRTtvQkFDZCxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDbEM7YUFDSjtZQUVELElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYyxDQUFDLE1BQThCO1FBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxnQkFBZ0IsQ0FBQyxNQUE4QjtRQUNsRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWSxDQUFDLENBQWtCO1FBQ2xDLElBQUksS0FBSyxHQUE0QixJQUFJLENBQUM7UUFFMUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLEtBQUssR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6RztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBQyxLQUFvQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxFQUFFO1lBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMvQixHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMxQjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7OztZQXZHSixTQUFTOzs7c0JBT0wsS0FBSzt3Q0FJTCxLQUFLOytDQUtMLEtBQUs7NkJBTUwsWUFBWSxTQUFDLHNCQUFzQjs7QUFzRnhDOztHQUVHO0FBQ0gsTUFBZSxjQUFjO0NBa0I1QjtBQUVELHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzY286aWdub3JlXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNhY0Jhc2VTZWxlY3RDb250cm9sIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Jhc2VzZWxlY3Rjb250cm9sJztcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi92YWxpZGF0aW9uJztcblxuLy8gI3JlZ2lvbiBJbnRlcmZhY2VzXG5cbi8qKlxuICogV3JhcHBlciBmw7xyIEhUTUwgT3B0aW9uc1xuICovXG5pbnRlcmZhY2UgSFRNTE9wdGlvbiB7XG4gICAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIFByb3BlcnR5IGbDvHIgU2VsZWt0aWVydGUgRWxlbWVudGVcbiAgICAgKi9cbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXZXJ0XG4gICAgICovXG4gICAgdmFsdWU6IHN0cmluZztcblxuICAgIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xufVxuXG4vLyAjZW5kcmVnaW9uIEludGVyZmFjZXNcblxuLy8gI3JlZ2lvbiBDbGFzc2VzXG5cbi8qKlxuICogQmFzaXMgS29tcG9uZW50ZSBmw7xyIFNhY0xpc3Rib3hPcHRpb25cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgU2FjTGlzdGJveE9wdGlvbkNvbW1vbiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSB2b24gU2VsZWN0ZWQgT3B0aW9uIEl0ZW1cbiAgICAgKi9cbiAgICBwcml2YXRlIF92YWx1ZTogYW55ID0gbnVsbDtcblxuICAgIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xuXG4gICAgLy8gI3JlZ2lvbiBDb25zdHJ1Y3RvcnNcblxuICAgIC8qKlxuICAgICAqIEtvbnN0cnVrdG9yXG4gICAgICogQHBhcmFtIF9lbGVtZW50OiBFbGVtZW50UmVmXG4gICAgICogQHBhcmFtIF9yZW5kZXJlcjogUmVuZGVyZXIyXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBfbGlzdGJveDogU2FjTGlzdGJveENvbW1vbikge1xuICAgICAgICBpZiAodGhpcy5fbGlzdGJveCkge1xuICAgICAgICAgICAgdGhpcy5fbGlzdGJveC5yZWdpc3Rlck9wdGlvbih0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gQ29uc3RydWN0b3JzXG5cbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXG5cbiAgICAvKipcbiAgICAgKiBOZ1ZhbHVlIGRlcyBDb250cm9scy4gV2lyZCBmw7xyIGRpZSBNZWhyZmFjaGF1c3dhaGwgYmVuw7Z0aWd0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG5nVmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5fbGlzdGJveCkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluaWVydCBkZW4gV2VydCBkZXIgTGlzdGJveFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLl9saXN0Ym94KSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xuXG4gICAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gICAgLyoqXG4gICAgICogTWV0aG9kZSBlcmdpYnQgZGVuIFN0YXR1cyBkZXIgRWxlbWVudGUsIGRpZSBzZWxla3RpZXJ0IHd1cmRlblxuICAgICAqIEBwYXJhbSBzZWxlY3RlZCBFbGVtZW50IGlzdCBzZWxla3RpZXJ0XG4gICAgICovXG4gICAgcHVibGljIF9zZXRTZWxlY3RlZChzZWxlY3RlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdzZWxlY3RlZCcsIHNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbkRlc3Ryb3kgRXZlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9saXN0Ym94KSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0Ym94LnVucmVnaXN0ZXJPcHRpb24odGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXG59XG5cbi8qKlxuICogS29tcG9uZW50ZSBmw7xyIFNhY0xpc3Rib3hDb21tb24uIEV4dGVuZHMgU2FjQmFzZVNlbGVjdENvbnRyb2xcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgU2FjTGlzdGJveENvbW1vbiBleHRlbmRzIFNhY0Jhc2VTZWxlY3RDb250cm9sPEFycmF5PHN0cmluZz4+IHtcbiAgICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcblxuICAgIC8qKlxuICAgICAqIEFuemFobCBkZXIgWmVpbGVuXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHJvd3NpemU6IG51bWJlciA9IDU7XG4gICAgLyoqXG4gICAgICogUmVzb3VyY2UgS2V5IGbDvHIgVmFsaWRhdGlvbiBNZXNzYWdlIFJlcXVpcmVkIGJlaSBDb250cm9sXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHZhbGlkYXRpb25tZXNzYWdlcmVxdWlyZWQ6IHN0cmluZyA9IHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yUmVxdWlyZWQ7XG5cbiAgICAvKipcbiAgICAgKiBSZXNvdXJjZSBLZXkgZsO8ciBWYWxpZGF0aW9uIE1lc3NhZ2UgUmVxdWlyZWQgaW4gVmFsaWRhdGlvbiBTdW1tYXJ5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmFsaWRhdGlvbm1lc3NhZ2VzdW1tYXJ5cmVxdWlyZWQ6IHN0cmluZyA9IHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yU3VtbWFyeVJlcXVpcmVkO1xuXG4gICAgLyoqXG4gICAgICogVmlld0NoaWxkcmVuIE1ldGhvZGVcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKFNhY0xpc3Rib3hPcHRpb25Db21tb24pXG4gICAgcHVibGljIGNvbnRlbnRPcHRpb25zOiBRdWVyeUxpc3Q8U2FjTGlzdGJveE9wdGlvbkNvbW1vbj47XG5cbiAgICAvKipcbiAgICAgKiBPcHRpb25NYXBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3B0aW9ubGlzdDogQXJyYXk8U2FjTGlzdGJveE9wdGlvbkNvbW1vbj4gPSBuZXcgQXJyYXk8U2FjTGlzdGJveE9wdGlvbkNvbW1vbj4oKTtcblxuICAgIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xuXG4gICAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gICAgLyoqXG4gICAgICogR2V0dGVyIGbDvHIgc2VsZWt0aWVydGUgRWxlbWVudGVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2VsZWN0ZWRJdGVtcyhzZWxlY3RlbGVtZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZXM6IEFycmF5PHN0cmluZz4gPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgICAgIGlmIChzZWxlY3RlbGVtZW50Lmhhc093blByb3BlcnR5KCdzZWxlY3RlZE9wdGlvbnMnKSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uczogSFRNTENvbGxlY3Rpb24gPSBzZWxlY3RlbGVtZW50LnNlbGVjdGVkT3B0aW9ucztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdDogSFRNTE9wdGlvbiA9IG9wdGlvbnMuaXRlbShpKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlcy5wdXNoKG9wdC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEZWdyYWRlIG9uIElFXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zOiBIVE1MQ29sbGVjdGlvbiA9IDxIVE1MQ29sbGVjdGlvbj5zZWxlY3RlbGVtZW50Lm9wdGlvbnM7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHQ6IEhUTUxPcHRpb24gPSBvcHRpb25zLml0ZW0oaSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlcy5wdXNoKG9wdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHNlbGVjdGVkVmFsdWVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdHJpZXJ0IGVpbiBMaXN0Ym94IEVsZW1lbnRcbiAgICAgKiBAcGFyYW0gb3B0aW9uIExpc3Rib3ggT3B0aW9uIEl0ZW0gZGFzIHJlZ2lzdHJpZXJ0IHdlcmRlbiBzb2xsXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT3B0aW9uKG9wdGlvbjogU2FjTGlzdGJveE9wdGlvbkNvbW1vbik6IHZvaWQge1xuICAgICAgICB0aGlzLm9wdGlvbmxpc3QucHVzaChvcHRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlYnQgZGllIFJlZ2lzdHJhdGlvbiBlaW5lcyBMaXN0Ym94IEl0ZW1zIGF1ZlxuICAgICAqIEBwYXJhbSBvcHRpb24gTGlzdGJveCBPcHRpb24gSXRlbSBkYXMgZGVyZWdpc3RyaWVydCB3ZXJkZW4gc29sbFxuICAgICAqL1xuICAgIHB1YmxpYyB1bnJlZ2lzdGVyT3B0aW9uKG9wdGlvbjogU2FjTGlzdGJveE9wdGlvbkNvbW1vbik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMub3B0aW9ubGlzdC5pbmRleE9mKG9wdGlvbik7XG4gICAgICAgIHRoaXMub3B0aW9ubGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRvciBNZXRob2RlXG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlRGF0YShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGxldCBlcnJvcjogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLmlzcmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGVycm9yID0gVmFsaWRhdGlvbi5yZXF1aXJlZCh0aGlzLnZhbGlkYXRpb25tZXNzYWdlcmVxdWlyZWQsIHRoaXMudmFsaWRhdGlvbm1lc3NhZ2VzdW1tYXJ5cmVxdWlyZWQpKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZGUgc2NocmVpYnQgbmV1ZW4gV2VydFxuICAgICAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbmxpc3QgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ubGlzdC5mb3JFYWNoKChpdG0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5kZXhPZihpdG0udmFsdWUpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaXRtLl9zZXRTZWxlY3RlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcbn1cblxuLyoqXG4gKiBXcmFwcGVyIGbDvHIgSFRNTCBTZWxlY3RcbiAqL1xuYWJzdHJhY3QgY2xhc3MgSFRNTENvbGxlY3Rpb24ge1xuICAgIC8vICNyZWdpb24gUHJvcGVydGllc1xuXG4gICAgLyoqXG4gICAgICogTMOkbmdlXG4gICAgICovXG4gICAgcHVibGljIGxlbmd0aDogbnVtYmVyO1xuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBBYnN0cmFjdCBNZXRob2RzXG5cbiAgICAvKipcbiAgICAgKiBPcHRpb24tSXRlbVxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBpdGVtKF86IG51bWJlcik6IEhUTUxPcHRpb247XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBBYnN0cmFjdCBNZXRob2RzXG59XG5cbi8vICNlbmRyZWdpb24gQ2xhc3Nlc1xuIl19
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGJveC5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9zaW1wbGVhbmd1bGFyY29udHJvbHMvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbImNvbnRyb2xzL2xpc3QvbGlzdGJveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjO0FBQ2QsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFhLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQXNCOUMsd0JBQXdCO0FBRXhCLGtCQUFrQjtBQUVsQjs7R0FFRztBQUVILE1BQU0sT0FBTyxzQkFBc0I7SUFRL0Isd0JBQXdCO0lBRXhCLHVCQUF1QjtJQUV2Qjs7Ozs7T0FLRztJQUNILFlBQ1ksUUFBb0IsRUFDcEIsU0FBb0IsRUFDcEIsUUFBMEI7UUFGMUIsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUNwQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQWtCO1FBcEJ0QyxxQkFBcUI7UUFFckI7O1dBRUc7UUFDSyxXQUFNLEdBQVEsSUFBSSxDQUFDO1FBaUJ2QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFRCwwQkFBMEI7SUFFMUIscUNBQXFDO0lBRXJDOztPQUVHO0lBQ0gsSUFDVyxPQUFPLENBQUMsS0FBVTtRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLEtB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LElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsQ0FBa0I7UUFDbEMsSUFBSSxLQUFLLEdBQTRCLElBQUksQ0FBQztRQUUxQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsS0FBSyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pHO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFVBQVUsQ0FBQyxLQUFvQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxFQUFFO1lBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMvQixHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMxQjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7OztZQXhHSixTQUFTOzs7c0JBT0wsS0FBSzt3Q0FJTCxLQUFLOytDQUtMLEtBQUs7NkJBTUwsWUFBWSxTQUFDLHNCQUFzQjs7QUF1RnhDOztHQUVHO0FBQ0gsTUFBZSxjQUFjO0NBa0I1QjtBQUVELHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzY286aWdub3JlXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNhY0Jhc2VTZWxlY3RDb250cm9sIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Jhc2VzZWxlY3Rjb250cm9sJztcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi92YWxpZGF0aW9uJztcblxuLy8gI3JlZ2lvbiBJbnRlcmZhY2VzXG5cbi8qKlxuICogV3JhcHBlciBmb3IgSFRNTCBvcHRpb25zXG4gKi9cbmludGVyZmFjZSBIVE1MT3B0aW9uIHtcbiAgICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gcHJvcGVydHkgZm9yIHNlbGVjdGVkIGVsZW1lbnRzXG4gICAgICovXG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVmFsdWVcbiAgICAgKi9cbiAgICB2YWx1ZTogc3RyaW5nO1xuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXG59XG5cbi8vICNlbmRyZWdpb24gSW50ZXJmYWNlc1xuXG4vLyAjcmVnaW9uIENsYXNzZXNcblxuLyoqXG4gKiBCYXNlIGNvbXBvbmVudCBmb3IgU2FjTGlzdGJveE9wdGlvblxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBTYWNMaXN0Ym94T3B0aW9uQ29tbW9uIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcblxuICAgIC8qKlxuICAgICAqIFZhbHVlIG9mIHNlbGVjdGVkIG9wdGlvbiBpdGVtXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdmFsdWU6IGFueSA9IG51bGw7XG5cbiAgICAvLyAjZW5kcmVnaW9uIFByb3BlcnRpZXNcblxuICAgIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSBfZWxlbWVudCBSZWZlcmVuY2UgdG8gaG9zdCBlbGVtZW50XG4gICAgICogQHBhcmFtIF9yZW5kZXJlciBSZW5kZXJlciBmb3IgRE9NIG1hbmlwdWxhdGlvblxuICAgICAqIEBwYXJhbSBfbGlzdGJveCBSZWZlcmVuY2UgdG8gcGFyZW50IGxpc3Rib3ggY29tcG9uZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2VsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgX2xpc3Rib3g6IFNhY0xpc3Rib3hDb21tb25cbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuX2xpc3Rib3gpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpc3Rib3gucmVnaXN0ZXJPcHRpb24odGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIENvbnN0cnVjdG9yc1xuXG4gICAgLy8gI3JlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xuXG4gICAgLyoqXG4gICAgICogTmdWYWx1ZSBvZiB0aGUgY29udHJvbC4gTmVlZGVkIGZvciBtdWx0aXBsZSBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbmdWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLl9saXN0Ym94KSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgdmFsdWUgb2YgdGhlIGxpc3Rib3hcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5fbGlzdGJveCkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcblxuICAgIC8vICNyZWdpb24gUHVibGljIE1ldGhvZHNcblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCByZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGVsZW1lbnRzIHRoYXQgd2VyZSBzZWxlY3RlZFxuICAgICAqIEBwYXJhbSBzZWxlY3RlZCBFbGVtZW50IGlzIHNlbGVjdGVkXG4gICAgICovXG4gICAgcHVibGljIF9zZXRTZWxlY3RlZChzZWxlY3RlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdzZWxlY3RlZCcsIHNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbkRlc3Ryb3kgZXZlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9saXN0Ym94KSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0Ym94LnVucmVnaXN0ZXJPcHRpb24odGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXG59XG5cbi8qKlxuICogQ29tcG9uZW50IGZvciBTYWNMaXN0Ym94Q29tbW9uLiBFeHRlbmRzIFNhY0Jhc2VTZWxlY3RDb250cm9sXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIFNhY0xpc3Rib3hDb21tb24gZXh0ZW5kcyBTYWNCYXNlU2VsZWN0Q29udHJvbDxBcnJheTxzdHJpbmc+PiB7XG4gICAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2Ygcm93c1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyByb3dzaXplID0gNTtcbiAgICAvKipcbiAgICAgKiBSZXNvdXJjZSBrZXkgZm9yIHZhbGlkYXRpb24gbWVzc2FnZSByZXF1aXJlZCBhdCBjb250cm9sXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHZhbGlkYXRpb25tZXNzYWdlcmVxdWlyZWQ6IHN0cmluZyA9IHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yUmVxdWlyZWQ7XG5cbiAgICAvKipcbiAgICAgKiBSZXNvdXJjZSBrZXkgZm9yIHZhbGlkYXRpb24gbWVzc2FnZSByZXF1aXJlZCBpbiB2YWxpZGF0aW9uIHN1bW1hcnlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWxpZGF0aW9ubWVzc2FnZXN1bW1hcnlyZXF1aXJlZDogc3RyaW5nID0gdGhpcy52YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5UmVxdWlyZWQ7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3Q2hpbGRyZW4gbWV0aG9kXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbihTYWNMaXN0Ym94T3B0aW9uQ29tbW9uKVxuICAgIHB1YmxpYyBjb250ZW50T3B0aW9uczogUXVlcnlMaXN0PFNhY0xpc3Rib3hPcHRpb25Db21tb24+O1xuXG4gICAgLyoqXG4gICAgICogT3B0aW9uIGxpc3RcbiAgICAgKi9cbiAgICBwdWJsaWMgb3B0aW9ubGlzdDogQXJyYXk8U2FjTGlzdGJveE9wdGlvbkNvbW1vbj4gPSBuZXcgQXJyYXk8U2FjTGlzdGJveE9wdGlvbkNvbW1vbj4oKTtcblxuICAgIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xuXG4gICAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gICAgLyoqXG4gICAgICogR2V0dGVyIGZvciBzZWxlY3RlZCBpdGVtc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTZWxlY3RlZEl0ZW1zKHNlbGVjdGVsZW1lbnQ6IGFueSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFZhbHVlczogQXJyYXk8c3RyaW5nPiA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ3NlbGVjdGVkT3B0aW9ucycpKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zOiBIVE1MQ29sbGVjdGlvbiA9IHNlbGVjdGVsZW1lbnQuc2VsZWN0ZWRPcHRpb25zO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0OiBIVE1MT3B0aW9uID0gb3B0aW9ucy5pdGVtKGkpO1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWVzLnB1c2gob3B0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERlZ3JhZGUgb24gSUVcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IEhUTUxDb2xsZWN0aW9uID0gPEhUTUxDb2xsZWN0aW9uPnNlbGVjdGVsZW1lbnQub3B0aW9ucztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdDogSFRNTE9wdGlvbiA9IG9wdGlvbnMuaXRlbShpKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0LnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWVzLnB1c2gob3B0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIGEgbGlzdGJveCBlbGVtZW50XG4gICAgICogQHBhcmFtIG9wdGlvbiBMaXN0Ym94IG9wdGlvbiBpdGVtIHRvIGJlIHJlZ2lzdGVyZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPcHRpb24ob3B0aW9uOiBTYWNMaXN0Ym94T3B0aW9uQ29tbW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMub3B0aW9ubGlzdC5wdXNoKG9wdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FuY2VscyB0aGUgcmVnaXN0cmF0aW9uIG9mIGEgbGlzdGJveCBpdGVtXG4gICAgICogQHBhcmFtIG9wdGlvbiBMaXN0Ym94IG9wdGlvbiBpdGVtIHRvIGJlIGRlcmVnaXN0ZXJlZFxuICAgICAqL1xuICAgIHB1YmxpYyB1bnJlZ2lzdGVyT3B0aW9uKG9wdGlvbjogU2FjTGlzdGJveE9wdGlvbkNvbW1vbik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMub3B0aW9ubGlzdC5pbmRleE9mKG9wdGlvbik7XG4gICAgICAgIHRoaXMub3B0aW9ubGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRvciBtZXRob2RcbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGVEYXRhKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICAgICAgbGV0IGVycm9yOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNyZXF1aXJlZCkge1xuICAgICAgICAgICAgZXJyb3IgPSBWYWxpZGF0aW9uLnJlcXVpcmVkKHRoaXMudmFsaWRhdGlvbm1lc3NhZ2VyZXF1aXJlZCwgdGhpcy52YWxpZGF0aW9ubWVzc2FnZXN1bW1hcnlyZXF1aXJlZCkoYyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHdyaXRlcyBuZXcgdmFsdWVcbiAgICAgKiBAcGFyYW0gdmFsdWUgU2VsZWN0ZWQgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIHNldCBvbiB0aGUgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25saXN0ICYmIHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbmxpc3QuZm9yRWFjaCgoaXRtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoaXRtLnZhbHVlKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0bS5fc2V0U2VsZWN0ZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXG59XG5cbi8qKlxuICogV3JhcHBlciBmb3IgSFRNTCBzZWxlY3RcbiAqL1xuYWJzdHJhY3QgY2xhc3MgSFRNTENvbGxlY3Rpb24ge1xuICAgIC8vICNyZWdpb24gUHJvcGVydGllc1xuXG4gICAgLyoqXG4gICAgICogTGVuZ3RoXG4gICAgICovXG4gICAgcHVibGljIGxlbmd0aDogbnVtYmVyO1xuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBBYnN0cmFjdCBNZXRob2RzXG5cbiAgICAvKipcbiAgICAgKiBPcHRpb24tSXRlbVxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBpdGVtKF86IG51bWJlcik6IEhUTUxPcHRpb247XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBBYnN0cmFjdCBNZXRob2RzXG59XG5cbi8vICNlbmRyZWdpb24gQ2xhc3Nlc1xuIl19
@@ -5,7 +5,7 @@ import { Validation } from '../../validation';
5
5
  import { SacFormLayoutCommon } from '../layout/formlayout';
6
6
  import { Directive, Host, Injector, Input } from '@angular/core';
7
7
  /**
8
- * Base Klasse für Multi Language Input Control
8
+ * Base class for multi-language input control
9
9
  */
10
10
  export class SacMultilanguageInputCommon extends SacInputBase {
11
11
  // #endregion Properties
@@ -19,15 +19,15 @@ export class SacMultilanguageInputCommon extends SacInputBase {
19
19
  super(formlayout, injector);
20
20
  // #region Properties
21
21
  /**
22
- * Sprache für das Control
22
+ * Languages for the control
23
23
  */
24
24
  this.languages = [];
25
25
  /**
26
- * Selektierte Sprace des Controls
26
+ * Selected language of the control
27
27
  */
28
28
  this.selectedLanguage = null;
29
29
  /**
30
- * Fix breite für das Control definieren.
30
+ * Define fixed width for the control.
31
31
  */
32
32
  this.controlwidth = null;
33
33
  /**
@@ -35,23 +35,23 @@ export class SacMultilanguageInputCommon extends SacInputBase {
35
35
  */
36
36
  this.maxtextlength = null;
37
37
  /**
38
- * Aktiviert den Validator, das min. eine Sprache erfasst sein muss
38
+ * Activates validator that at least one language must be present
39
39
  */
40
40
  this.requiredany = false;
41
41
  /**
42
- * Resource Key für Validation Message Required bei Control
42
+ * Resource key for validation message required at control
43
43
  */
44
44
  this.validationmessagerequired = this.validationKeyService.ValidationErrorMultilanguageRequired;
45
45
  /**
46
- * Resource Key für Validation Message Pattern bei Control
46
+ * Resource key for validation message required any language at control
47
47
  */
48
48
  this.validationmessagerequiredany = this.validationKeyService.ValidationErrorMultilanguageRequiredAny;
49
49
  /**
50
- * Resource Key für Validation Message Required in Validation Summary
50
+ * Resource key for validation message required in validation summary
51
51
  */
52
52
  this.validationmessagesummaryrequired = this.validationKeyService.ValidationErrorSummaryMultilanguageRequired;
53
53
  /**
54
- * Resource Key für Validation Message Pattern in Validation Summary
54
+ * Resource key for validation message required any language in validation summary
55
55
  */
56
56
  this.validationmessagesummaryrequiredany = this.validationKeyService.ValidationErrorSummaryMultilanguageRequiredAny;
57
57
  this.lngLanguageService = injector.get(SACLANGUAGE_SERVICE, new SacDefaultLanguageService());
@@ -59,7 +59,7 @@ export class SacMultilanguageInputCommon extends SacInputBase {
59
59
  this.languages = result;
60
60
  if (this.languages.length > 0) {
61
61
  this.selectedLanguage = this.languages[0];
62
- // Control Validierung ausführen, da Wert potentiell bereits gesetzt sein kann
62
+ // Execute control validation, since the value may already be set
63
63
  this.UpdateValueAndValidity();
64
64
  }
65
65
  });
@@ -67,12 +67,12 @@ export class SacMultilanguageInputCommon extends SacInputBase {
67
67
  // #endregion Constructors
68
68
  // #region Public Getters And Setters
69
69
  /**
70
- * Gibt den Wert der aktuell ausgewählten Sprache zurück
70
+ * Returns the value for the currently selected language
71
71
  */
72
72
  get LanguageValue() {
73
73
  if (this.value) {
74
74
  const currentIsoCode = this.selectedLanguage ? this.selectedLanguage.IsoCode : null;
75
- // Fallback falls keine Selektierte Sprache
75
+ // Fallback if no selected language
76
76
  if (currentIsoCode === null) {
77
77
  return '';
78
78
  }
@@ -88,13 +88,13 @@ export class SacMultilanguageInputCommon extends SacInputBase {
88
88
  }
89
89
  }
90
90
  /**
91
- * Collection der Sprachen
91
+ * Collection of languages
92
92
  */
93
93
  get Languages() {
94
94
  return this.languages;
95
95
  }
96
96
  /**
97
- * Gibt das Icon der selektierten Sprache zurück
97
+ * Returns the icon of the selected language
98
98
  */
99
99
  get SelectedIcon() {
100
100
  if (this.selectedLanguage) {
@@ -105,7 +105,7 @@ export class SacMultilanguageInputCommon extends SacInputBase {
105
105
  }
106
106
  }
107
107
  /**
108
- * Gibt den Type des Icons für die selektierte Sprache zurück
108
+ * Returns the icon type for the selected language
109
109
  */
110
110
  get SelectedIconType() {
111
111
  if (this.selectedLanguage) {
@@ -118,8 +118,8 @@ export class SacMultilanguageInputCommon extends SacInputBase {
118
118
  // #endregion Public Getters And Setters
119
119
  // #region Public Methods
120
120
  /**
121
- * Prüft ob in irgendeiner Sprache kein Wert definiert wurde
122
- * @returns Leerwert ist vorhanden
121
+ * Checks whether no value is defined in any language
122
+ * @returns True if an empty value is present
123
123
  */
124
124
  IsAnyEmpty() {
125
125
  let found = false;
@@ -140,13 +140,13 @@ export class SacMultilanguageInputCommon extends SacInputBase {
140
140
  return found;
141
141
  }
142
142
  /**
143
- * Prüft ob in einer bestimmten Sprache ein Wert vorhanden ist.
144
- * @param sprache Sprache in welcher der Wert geprüft werden soll
145
- * @returns Wert ist vorhanden
143
+ * Checks whether a value exists for a specific language.
144
+ * @param sprache Language in which the value should be checked
145
+ * @returns True if the value is present
146
146
  */
147
147
  IsEmpty(sprache) {
148
148
  if (this.value) {
149
- // Fallback falls keine Selektierte Sprache
149
+ // Fallback if no selected language
150
150
  if (sprache === null) {
151
151
  return true;
152
152
  }
@@ -159,20 +159,20 @@ export class SacMultilanguageInputCommon extends SacInputBase {
159
159
  }
160
160
  }
161
161
  /**
162
- * Selektiert die Sprache
163
- * @param language Sprache die selektiert werden soll
162
+ * Selects the language
163
+ * @param language Language to select
164
164
  */
165
165
  SelectLanguage(language) {
166
166
  this.selectedLanguage = language;
167
167
  }
168
168
  /**
169
- * Setzt den Wert für die aktuell gewählte Sprache
170
- * @param value Wert welcher gesetzt werden soll
169
+ * Sets the value for the currently selected language
170
+ * @param value Value to set
171
171
  */
172
172
  SetLanguageValue(value) {
173
173
  if (this.value) {
174
174
  const currentIsoCode = this.selectedLanguage ? this.selectedLanguage.IsoCode : null;
175
- // Fallback falls keine Selektierte Sprache
175
+ // Fallback if no selected language
176
176
  if (currentIsoCode === null) {
177
177
  return;
178
178
  }
@@ -181,8 +181,8 @@ export class SacMultilanguageInputCommon extends SacInputBase {
181
181
  }
182
182
  }
183
183
  /**
184
- * Methode validiert, ob der Wert den gegebenen Kriterien entspricht
185
- * @param c Control das validiert wird
184
+ * Method validates whether the value meets the given criteria
185
+ * @param c Control that is validated
186
186
  */
187
187
  validateData(c) {
188
188
  let error = null;
@@ -221,4 +221,4 @@ SacMultilanguageInputCommon.propDecorators = {
221
221
  validationmessagesummaryrequired: [{ type: Input }],
222
222
  validationmessagesummaryrequiredany: [{ type: Input }]
223
223
  };
224
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlsYW5ndWFnZWlucHV0LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL3NpbXBsZWFuZ3VsYXJjb250cm9scy9zaW1wbGVhbmd1bGFyY29udHJvbHMvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsiY29udHJvbHMvbXVsdGlsYW5ndWFnZS9tdWx0aWxhbmd1YWdlaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUdoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqRTs7R0FFRztBQUVILE1BQU0sT0FBTywyQkFBNEIsU0FBUSxZQUFpQjtJQTBEOUQsd0JBQXdCO0lBRXhCLHVCQUF1QjtJQUV2Qjs7OztPQUlHO0lBQ0gsWUFBb0IsVUFBK0IsRUFBRSxRQUFrQjtRQUNuRSxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBbkVoQyxxQkFBcUI7UUFFckI7O1dBRUc7UUFDSyxjQUFTLEdBQW9CLEVBQUUsQ0FBQztRQUV4Qzs7V0FFRztRQUNLLHFCQUFnQixHQUFrQixJQUFJLENBQUM7UUFPL0M7O1dBRUc7UUFDYSxpQkFBWSxHQUFXLElBQUksQ0FBQztRQUU1Qzs7V0FFRztRQUNhLGtCQUFhLEdBQVcsSUFBSSxDQUFDO1FBRTdDOztXQUVHO1FBQ2EsZ0JBQVcs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QUFLOzBCQUtMLEtBQUs7d0NBS0wsS0FBSzsyQ0FLTCxLQUFLOytDQU1MLEtBQUs7a0RBT0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhY0lucHV0QmFzZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9iYXNlaW5wdXRjb250cm9sJztcbmltcG9ydCB7IEljb25UeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvSWNvblR5cGUnO1xuaW1wb3J0IHsgSVNhY0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVNhY0xhbmd1YWdlU2VydmljZSc7XG5pbXBvcnQgeyBMYW5ndWFnZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xhbmd1YWdlbW9kZWwnO1xuaW1wb3J0IHsgU0FDTEFOR1VBR0VfU0VSVklDRSwgU2FjRGVmYXVsdExhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NhYy1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi92YWxpZGF0aW9uJztcbmltcG9ydCB7IFNhY0Zvcm1MYXlvdXRDb21tb24gfSBmcm9tICcuLi9sYXlvdXQvZm9ybWxheW91dCc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3QsIEluamVjdG9yLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vKipcbiAqIEJhc2UgS2xhc3NlIGbDvHIgTXVsdGkgTGFuZ3VhZ2UgSW5wdXQgQ29udHJvbFxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBTYWNNdWx0aWxhbmd1YWdlSW5wdXRDb21tb24gZXh0ZW5kcyBTYWNJbnB1dEJhc2U8YW55PiB7XG4gICAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgICAvKipcbiAgICAgKiBTcHJhY2hlIGbDvHIgZGFzIENvbnRyb2xcbiAgICAgKi9cbiAgICBwcml2YXRlIGxhbmd1YWdlczogTGFuZ3VhZ2VNb2RlbFtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBTZWxla3RpZXJ0ZSBTcHJhY2UgZGVzIENvbnRyb2xzXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RlZExhbmd1YWdlOiBMYW5ndWFnZU1vZGVsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFNlcnZpY2UgZsO8ciBFcnJvciBMb2NhbGlzYXRpb25cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbG5nTGFuZ3VhZ2VTZXJ2aWNlOiBJU2FjTGFuZ3VhZ2VTZXJ2aWNlO1xuXG4gICAgLyoqXG4gICAgICogRml4IGJyZWl0ZSBmw7xyIGRhcyBDb250cm9sIGRlZmluaWVyZW4uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGNvbnRyb2x3aWR0aDogc3RyaW5nID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIE1heCBsZW5ndGggb2YgY2hhcmFjdGVycyBmb3IgaW5wdXQgZmllbGRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4dGV4dGxlbmd0aDogbnVtYmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEFrdGl2aWVydCBkZW4gVmFsaWRhdG9yLCBkYXMgbWluLiBlaW5lIFNwcmFjaGUgZXJmYXNzdCBzZWluIG11c3NcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgcmVxdWlyZWRhbnk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFJlc291cmNlIEtleSBmw7xyIFZhbGlkYXRpb24gTWVzc2FnZSBSZXF1aXJlZCBiZWkgQ29udHJvbFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWxpZGF0aW9ubWVzc2FnZXJlcXVpcmVkOiBzdHJpbmcgPSB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvck11bHRpbGFuZ3VhZ2VSZXF1aXJlZDtcblxuICAgIC8qKlxuICAgICAqIFJlc291cmNlIEtleSBmw7xyIFZhbGlkYXRpb24gTWVzc2FnZSBQYXR0ZXJuIGJlaSBDb250cm9sXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHZhbGlkYXRpb25tZXNzYWdlcmVxdWlyZWRhbnk6IHN0cmluZyA9XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yTXVsdGlsYW5ndWFnZVJlcXVpcmVkQW55O1xuXG4gICAgLyoqXG4gICAgICogUmVzb3VyY2UgS2V5IGbDvHIgVmFsaWRhdGlvbiBNZXNzYWdlIFJlcXVpcmVkIGluIFZhbGlkYXRpb24gU3VtbWFyeVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZhbGlkYXRpb25tZXNzYWdlc3VtbWFyeXJlcXVpcmVkOiBzdHJpbmcgPVxuICAgICAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvclN1bW1hcnlNdWx0aWxhbmd1YWdlUmVxdWlyZWQ7XG5cbiAgICAvKipcbiAgICAgKiBSZXNvdXJjZSBLZXkgZsO8ciBWYWxpZGF0aW9uIE1lc3NhZ2UgUGF0dGVybiBpbiBWYWxpZGF0aW9uIFN1bW1hcnlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWxpZGF0aW9ubWVzc2FnZXN1bW1hcnlyZXF1aXJlZGFueTogc3RyaW5nID1cbiAgICAgICAgdGhpcy52YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5TXVsdGlsYW5ndWFnZVJlcXVpcmVkQW55O1xuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgICAvLyAjcmVnaW9uIENvbnN0cnVjdG9yc1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gZm9ybWxheW91dCBTYWNGb3JtTGF5b3V0Q29tbW9uIHRvIGRlZmluZSBzY29wZWQgbGF5b3V0IHNldHRpbmdzXG4gICAgICogQHBhcmFtIGluamVjdG9yIEluamVjdG9yIGZvciBpbmplY3Rpbmcgc2VydmljZXNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihASG9zdCgpIGZvcm1sYXlvdXQ6IFNhY0Zvcm1MYXlvdXRDb21tb24sIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgICAgICBzdXBlcihmb3JtbGF5b3V0LCBpbmplY3Rvcik7XG5cbiAgICAgICAgdGhpcy5sbmdMYW5ndWFnZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoU0FDTEFOR1VBR0VfU0VSVklDRSwgbmV3IFNhY0RlZmF1bHRMYW5ndWFnZVNlcnZpY2UoKSk7XG5cbiAgICAgICAgdGhpcy5sbmdMYW5ndWFnZVNlcnZpY2UuR2V0TGFuZ3VhZ2VzKCkuc3Vic2NyaWJlKChyZXN1bHQ6IExhbmd1YWdlTW9kZWxbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZXMgPSByZXN1bHQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmxhbmd1YWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0gdGhpcy5sYW5ndWFnZXNbMF07XG4gICAgICAgICAgICAgICAgLy8gQ29udHJvbCBWYWxpZGllcnVuZyBhdXNmw7xocmVuLCBkYSBXZXJ0IHBvdGVudGllbGwgYmVyZWl0cyBnZXNldHp0IHNlaW4ga2FublxuICAgICAgICAgICAgICAgIHRoaXMuVXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIENvbnN0cnVjdG9yc1xuXG4gICAgLy8gI3JlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xuXG4gICAgLyoqXG4gICAgICogR2lidCBkZW4gV2VydCBkZXIgYWt0dWVsbCBhdXNnZXfDpGhsdGVuIFNwcmFjaGUgenVyw7xja1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgTGFuZ3VhZ2VWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudElzb0NvZGU6IHN0cmluZyA9IHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSA/IHRoaXMuc2VsZWN0ZWRMYW5ndWFnZS5Jc29Db2RlIDogbnVsbDtcblxuICAgICAgICAgICAgLy8gRmFsbGJhY2sgZmFsbHMga2VpbmUgU2VsZWt0aWVydGUgU3ByYWNoZVxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJc29Db2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZVtjdXJyZW50SXNvQ29kZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVbY3VycmVudElzb0NvZGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGVjdGlvbiBkZXIgU3ByYWNoZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IExhbmd1YWdlcygpOiBMYW5ndWFnZU1vZGVsW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2lidCBkYXMgSWNvbiBkZXIgc2VsZWt0aWVydGVuIFNwcmFjaGUgenVyw7xja1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgU2VsZWN0ZWRJY29uKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UuSWNvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpYnQgZGVuIFR5cGUgZGVzIEljb25zIGbDvHIgZGllIHNlbGVrdGllcnRlIFNwcmFjaGUgenVyw7xja1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgU2VsZWN0ZWRJY29uVHlwZSgpOiBJY29uVHlwZSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UuSWNvblR5cGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gSWNvblR5cGUuSW1hZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXG5cbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgICAvKipcbiAgICAgKiBQcsO8ZnQgb2IgaW4gaXJnZW5kZWluZXIgU3ByYWNoZSBrZWluIFdlcnQgZGVmaW5pZXJ0IHd1cmRlXG4gICAgICogQHJldHVybnMgTGVlcndlcnQgaXN0IHZvcmhhbmRlblxuICAgICAqL1xuICAgIHB1YmxpYyBJc0FueUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZXMuZm9yRWFjaCgoaXRtOiBMYW5ndWFnZU1vZGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0bSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaXRtLklzb0NvZGVdID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZVtpdG0uSXNvQ29kZV0gPT09ICcnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaXRtLklzb0NvZGVdID09PSBudWxsXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcsO8ZnQgb2IgaW4gZWluZXIgYmVzdGltbXRlbiBTcHJhY2hlIGVpbiBXZXJ0IHZvcmhhbmRlbiBpc3QuXG4gICAgICogQHBhcmFtIHNwcmFjaGUgU3ByYWNoZSBpbiB3ZWxjaGVyIGRlciBXZXJ0IGdlcHLDvGZ0IHdlcmRlbiBzb2xsXG4gICAgICogQHJldHVybnMgV2VydCBpc3Qgdm9yaGFuZGVuXG4gICAgICovXG4gICAgcHVibGljIElzRW1wdHkoc3ByYWNoZTogTGFuZ3VhZ2VNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2sgZmFsbHMga2VpbmUgU2VsZWt0aWVydGUgU3ByYWNoZVxuICAgICAgICAgICAgaWYgKHNwcmFjaGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW3NwcmFjaGUuSXNvQ29kZV0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbc3ByYWNoZS5Jc29Db2RlXSA9PT0gJycgfHxcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW3NwcmFjaGUuSXNvQ29kZV0gPT09IG51bGxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVrdGllcnQgZGllIFNwcmFjaGVcbiAgICAgKiBAcGFyYW0gbGFuZ3VhZ2UgU3ByYWNoZSBkaWUgc2VsZWt0aWVydCB3ZXJkZW4gc29sbFxuICAgICAqL1xuICAgIHB1YmxpYyBTZWxlY3RMYW5ndWFnZShsYW5ndWFnZTogTGFuZ3VhZ2VNb2RlbCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UgPSBsYW5ndWFnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXR6dCBkZW4gV2VydCBmw7xyIGRpZSBha3R1ZWxsIGdld8OkaGx0ZSBTcHJhY2hlXG4gICAgICogQHBhcmFtIHZhbHVlIFdlcnQgd2VsY2hlciBnZXNldHp0IHdlcmRlbiBzb2xsXG4gICAgICovXG4gICAgcHVibGljIFNldExhbmd1YWdlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudElzb0NvZGU6IHN0cmluZyA9IHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSA/IHRoaXMuc2VsZWN0ZWRMYW5ndWFnZS5Jc29Db2RlIDogbnVsbDtcblxuICAgICAgICAgICAgLy8gRmFsbGJhY2sgZmFsbHMga2VpbmUgU2VsZWt0aWVydGUgU3ByYWNoZVxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJc29Db2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnZhbHVlW2N1cnJlbnRJc29Db2RlXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kZSB2YWxpZGllcnQsIG9iIGRlciBXZXJ0IGRlbiBnZWdlYmVuZW4gS3JpdGVyaWVuIGVudHNwcmljaHRcbiAgICAgKiBAcGFyYW0gYyBDb250cm9sIGRhcyB2YWxpZGllcnQgd2lyZFxuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZURhdGEoYzogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgICAgIGxldCBlcnJvcjogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGVycm9yID09PSBudWxsICYmXG4gICAgICAgICAgICBjLnZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICBjLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGMudmFsdWUgIT09ICcnICYmXG4gICAgICAgICAgICB0aGlzLmlzcmVxdWlyZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdGhpcy5pc3JlcXVpcmVkID09PSB0cnVlXG4gICAgICAgICkge1xuICAgICAgICAgICAgZXJyb3IgPSBWYWxpZGF0aW9uLm11bHRpbGFuZ3VhZ2VSZXF1aXJlZChcbiAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlcyxcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25tZXNzYWdlcmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9ubWVzc2FnZXN1bW1hcnlyZXF1aXJlZFxuICAgICAgICAgICAgKShjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGVycm9yID09PSBudWxsICYmXG4gICAgICAgICAgICBjLnZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICBjLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGMudmFsdWUgIT09ICcnICYmXG4gICAgICAgICAgICB0aGlzLnJlcXVpcmVkYW55ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZWRhbnkgPT09IHRydWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBlcnJvciA9IFZhbGlkYXRpb24ubXVsdGlsYW5ndWFnZVJlcXVpcmVkQW55KFxuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbm1lc3NhZ2VyZXF1aXJlZGFueSxcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25tZXNzYWdlc3VtbWFyeXJlcXVpcmVkYW55XG4gICAgICAgICAgICApKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcbn1cbiJdfQ==
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlsYW5ndWFnZWlucHV0LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL3NpbXBsZWFuZ3VsYXJjb250cm9scy9zaW1wbGVhbmd1bGFyY29udHJvbHMvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsiY29udHJvbHMvbXVsdGlsYW5ndWFnZS9tdWx0aWxhbmd1YWdlaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUdoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqRTs7R0FFRztBQUVILE1BQU0sT0FBTywyQkFBNEIsU0FBUSxZQUFpQjtJQTBEOUQsd0JBQXdCO0lBRXhCLHVCQUF1QjtJQUV2Qjs7OztPQUlHO0lBQ0gsWUFBb0IsVUFBK0IsRUFBRSxRQUFrQjtRQUNuRSxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBbkVoQyxxQkFBcUI7UUFFckI7O1dBRUc7UUFDSyxjQUFTLEdBQW9CLEVBQUUsQ0FBQztRQUV4Qzs7V0FFRztRQUNLLHFCQUFnQixHQUFrQixJQUFJLENBQUM7UUFPL0M7O1dBRUc7UUFDYSxpQkFBWSxHQUFXLElBQUksQ0FBQztRQUU1Qzs7V0FFRztRQUNhLGtCQUFhLEdBQVcsSUFBSSxDQUFDO1FBRTdDOztXQUVHO1FBQ2EsZ0JBQVcs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QUFLOzBCQUtMLEtBQUs7d0NBS0wsS0FBSzsyQ0FLTCxLQUFLOytDQU1MLEtBQUs7a0RBT0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhY0lucHV0QmFzZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9iYXNlaW5wdXRjb250cm9sJztcbmltcG9ydCB7IEljb25UeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvSWNvblR5cGUnO1xuaW1wb3J0IHsgSVNhY0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVNhY0xhbmd1YWdlU2VydmljZSc7XG5pbXBvcnQgeyBMYW5ndWFnZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xhbmd1YWdlbW9kZWwnO1xuaW1wb3J0IHsgU0FDTEFOR1VBR0VfU0VSVklDRSwgU2FjRGVmYXVsdExhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NhYy1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi92YWxpZGF0aW9uJztcbmltcG9ydCB7IFNhY0Zvcm1MYXlvdXRDb21tb24gfSBmcm9tICcuLi9sYXlvdXQvZm9ybWxheW91dCc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3QsIEluamVjdG9yLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIG11bHRpLWxhbmd1YWdlIGlucHV0IGNvbnRyb2xcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgU2FjTXVsdGlsYW5ndWFnZUlucHV0Q29tbW9uIGV4dGVuZHMgU2FjSW5wdXRCYXNlPGFueT4ge1xuICAgIC8vICNyZWdpb24gUHJvcGVydGllc1xuXG4gICAgLyoqXG4gICAgICogTGFuZ3VhZ2VzIGZvciB0aGUgY29udHJvbFxuICAgICAqL1xuICAgIHByaXZhdGUgbGFuZ3VhZ2VzOiBMYW5ndWFnZU1vZGVsW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGVkIGxhbmd1YWdlIG9mIHRoZSBjb250cm9sXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RlZExhbmd1YWdlOiBMYW5ndWFnZU1vZGVsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFNlcnZpY2UgZm9yIGVycm9yIGxvY2FsaXNhdGlvblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBsbmdMYW5ndWFnZVNlcnZpY2U6IElTYWNMYW5ndWFnZVNlcnZpY2U7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmUgZml4ZWQgd2lkdGggZm9yIHRoZSBjb250cm9sLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjb250cm9sd2lkdGg6IHN0cmluZyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBNYXggbGVuZ3RoIG9mIGNoYXJhY3RlcnMgZm9yIGlucHV0IGZpZWxkXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG1heHRleHRsZW5ndGg6IG51bWJlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBY3RpdmF0ZXMgdmFsaWRhdG9yIHRoYXQgYXQgbGVhc3Qgb25lIGxhbmd1YWdlIG11c3QgYmUgcHJlc2VudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyByZXF1aXJlZGFueSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogUmVzb3VyY2Uga2V5IGZvciB2YWxpZGF0aW9uIG1lc3NhZ2UgcmVxdWlyZWQgYXQgY29udHJvbFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWxpZGF0aW9ubWVzc2FnZXJlcXVpcmVkOiBzdHJpbmcgPSB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvck11bHRpbGFuZ3VhZ2VSZXF1aXJlZDtcblxuICAgIC8qKlxuICAgICAqIFJlc291cmNlIGtleSBmb3IgdmFsaWRhdGlvbiBtZXNzYWdlIHJlcXVpcmVkIGFueSBsYW5ndWFnZSBhdCBjb250cm9sXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHZhbGlkYXRpb25tZXNzYWdlcmVxdWlyZWRhbnk6IHN0cmluZyA9XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yTXVsdGlsYW5ndWFnZVJlcXVpcmVkQW55O1xuXG4gICAgLyoqXG4gICAgICogUmVzb3VyY2Uga2V5IGZvciB2YWxpZGF0aW9uIG1lc3NhZ2UgcmVxdWlyZWQgaW4gdmFsaWRhdGlvbiBzdW1tYXJ5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmFsaWRhdGlvbm1lc3NhZ2VzdW1tYXJ5cmVxdWlyZWQ6IHN0cmluZyA9XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yU3VtbWFyeU11bHRpbGFuZ3VhZ2VSZXF1aXJlZDtcblxuICAgIC8qKlxuICAgICAqIFJlc291cmNlIGtleSBmb3IgdmFsaWRhdGlvbiBtZXNzYWdlIHJlcXVpcmVkIGFueSBsYW5ndWFnZSBpbiB2YWxpZGF0aW9uIHN1bW1hcnlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWxpZGF0aW9ubWVzc2FnZXN1bW1hcnlyZXF1aXJlZGFueTogc3RyaW5nID1cbiAgICAgICAgdGhpcy52YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5TXVsdGlsYW5ndWFnZVJlcXVpcmVkQW55O1xuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgICAvLyAjcmVnaW9uIENvbnN0cnVjdG9yc1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gZm9ybWxheW91dCBTYWNGb3JtTGF5b3V0Q29tbW9uIHRvIGRlZmluZSBzY29wZWQgbGF5b3V0IHNldHRpbmdzXG4gICAgICogQHBhcmFtIGluamVjdG9yIEluamVjdG9yIGZvciBpbmplY3Rpbmcgc2VydmljZXNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihASG9zdCgpIGZvcm1sYXlvdXQ6IFNhY0Zvcm1MYXlvdXRDb21tb24sIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgICAgICBzdXBlcihmb3JtbGF5b3V0LCBpbmplY3Rvcik7XG5cbiAgICAgICAgdGhpcy5sbmdMYW5ndWFnZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoU0FDTEFOR1VBR0VfU0VSVklDRSwgbmV3IFNhY0RlZmF1bHRMYW5ndWFnZVNlcnZpY2UoKSk7XG5cbiAgICAgICAgdGhpcy5sbmdMYW5ndWFnZVNlcnZpY2UuR2V0TGFuZ3VhZ2VzKCkuc3Vic2NyaWJlKChyZXN1bHQ6IExhbmd1YWdlTW9kZWxbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZXMgPSByZXN1bHQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmxhbmd1YWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0gdGhpcy5sYW5ndWFnZXNbMF07XG4gICAgICAgICAgICAgICAgLy8gRXhlY3V0ZSBjb250cm9sIHZhbGlkYXRpb24sIHNpbmNlIHRoZSB2YWx1ZSBtYXkgYWxyZWFkeSBiZSBzZXRcbiAgICAgICAgICAgICAgICB0aGlzLlVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcblxuICAgIC8vICNyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGxhbmd1YWdlXG4gICAgICovXG4gICAgcHVibGljIGdldCBMYW5ndWFnZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SXNvQ29kZTogc3RyaW5nID0gdGhpcy5zZWxlY3RlZExhbmd1YWdlID8gdGhpcy5zZWxlY3RlZExhbmd1YWdlLklzb0NvZGUgOiBudWxsO1xuXG4gICAgICAgICAgICAvLyBGYWxsYmFjayBpZiBubyBzZWxlY3RlZCBsYW5ndWFnZVxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJc29Db2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZVtjdXJyZW50SXNvQ29kZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVbY3VycmVudElzb0NvZGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGVjdGlvbiBvZiBsYW5ndWFnZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IExhbmd1YWdlcygpOiBMYW5ndWFnZU1vZGVsW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaWNvbiBvZiB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2VcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IFNlbGVjdGVkSWNvbigpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZExhbmd1YWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZExhbmd1YWdlLkljb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpY29uIHR5cGUgZm9yIHRoZSBzZWxlY3RlZCBsYW5ndWFnZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgU2VsZWN0ZWRJY29uVHlwZSgpOiBJY29uVHlwZSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UuSWNvblR5cGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gSWNvblR5cGUuSW1hZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXG5cbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciBubyB2YWx1ZSBpcyBkZWZpbmVkIGluIGFueSBsYW5ndWFnZVxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgYW4gZW1wdHkgdmFsdWUgaXMgcHJlc2VudFxuICAgICAqL1xuICAgIHB1YmxpYyBJc0FueUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZXMuZm9yRWFjaCgoaXRtOiBMYW5ndWFnZU1vZGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0bSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaXRtLklzb0NvZGVdID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZVtpdG0uSXNvQ29kZV0gPT09ICcnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaXRtLklzb0NvZGVdID09PSBudWxsXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciBhIHZhbHVlIGV4aXN0cyBmb3IgYSBzcGVjaWZpYyBsYW5ndWFnZS5cbiAgICAgKiBAcGFyYW0gc3ByYWNoZSBMYW5ndWFnZSBpbiB3aGljaCB0aGUgdmFsdWUgc2hvdWxkIGJlIGNoZWNrZWRcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBwcmVzZW50XG4gICAgICovXG4gICAgcHVibGljIElzRW1wdHkoc3ByYWNoZTogTGFuZ3VhZ2VNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2sgaWYgbm8gc2VsZWN0ZWQgbGFuZ3VhZ2VcbiAgICAgICAgICAgIGlmIChzcHJhY2hlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVtzcHJhY2hlLklzb0NvZGVdID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW3NwcmFjaGUuSXNvQ29kZV0gPT09ICcnIHx8XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVtzcHJhY2hlLklzb0NvZGVdID09PSBudWxsXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RzIHRoZSBsYW5ndWFnZVxuICAgICAqIEBwYXJhbSBsYW5ndWFnZSBMYW5ndWFnZSB0byBzZWxlY3RcbiAgICAgKi9cbiAgICBwdWJsaWMgU2VsZWN0TGFuZ3VhZ2UobGFuZ3VhZ2U6IExhbmd1YWdlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0gbGFuZ3VhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbGFuZ3VhZ2VcbiAgICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gc2V0XG4gICAgICovXG4gICAgcHVibGljIFNldExhbmd1YWdlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudElzb0NvZGU6IHN0cmluZyA9IHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSA/IHRoaXMuc2VsZWN0ZWRMYW5ndWFnZS5Jc29Db2RlIDogbnVsbDtcblxuICAgICAgICAgICAgLy8gRmFsbGJhY2sgaWYgbm8gc2VsZWN0ZWQgbGFuZ3VhZ2VcbiAgICAgICAgICAgIGlmIChjdXJyZW50SXNvQ29kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy52YWx1ZVtjdXJyZW50SXNvQ29kZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB2YWxpZGF0ZXMgd2hldGhlciB0aGUgdmFsdWUgbWVldHMgdGhlIGdpdmVuIGNyaXRlcmlhXG4gICAgICogQHBhcmFtIGMgQ29udHJvbCB0aGF0IGlzIHZhbGlkYXRlZFxuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZURhdGEoYzogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgICAgIGxldCBlcnJvcjogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGVycm9yID09PSBudWxsICYmXG4gICAgICAgICAgICBjLnZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICBjLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGMudmFsdWUgIT09ICcnICYmXG4gICAgICAgICAgICB0aGlzLmlzcmVxdWlyZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdGhpcy5pc3JlcXVpcmVkID09PSB0cnVlXG4gICAgICAgICkge1xuICAgICAgICAgICAgZXJyb3IgPSBWYWxpZGF0aW9uLm11bHRpbGFuZ3VhZ2VSZXF1aXJlZChcbiAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlcyxcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25tZXNzYWdlcmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9ubWVzc2FnZXN1bW1hcnlyZXF1aXJlZFxuICAgICAgICAgICAgKShjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGVycm9yID09PSBudWxsICYmXG4gICAgICAgICAgICBjLnZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICBjLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGMudmFsdWUgIT09ICcnICYmXG4gICAgICAgICAgICB0aGlzLnJlcXVpcmVkYW55ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZWRhbnkgPT09IHRydWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBlcnJvciA9IFZhbGlkYXRpb24ubXVsdGlsYW5ndWFnZVJlcXVpcmVkQW55KFxuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbm1lc3NhZ2VyZXF1aXJlZGFueSxcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25tZXNzYWdlc3VtbWFyeXJlcXVpcmVkYW55XG4gICAgICAgICAgICApKGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcbn1cbiJdfQ==