@sapui5/sap.fe.macros 1.139.0 → 1.141.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 (254) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +53 -2
  4. package/src/sap/fe/macros/Chart.tsx +55 -0
  5. package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
  6. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
  7. package/src/sap/fe/macros/CommonHelper.js +59 -15
  8. package/src/sap/fe/macros/CommonHelper.ts +65 -14
  9. package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
  10. package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
  11. package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
  12. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
  13. package/src/sap/fe/macros/Field.js +78 -64
  14. package/src/sap/fe/macros/Field.ts +97 -68
  15. package/src/sap/fe/macros/FooterContent.js +5 -2
  16. package/src/sap/fe/macros/FooterContent.tsx +4 -1
  17. package/src/sap/fe/macros/MacroAPI.js +9 -4
  18. package/src/sap/fe/macros/MacroAPI.ts +9 -4
  19. package/src/sap/fe/macros/MessageButton.js +1 -2
  20. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  21. package/src/sap/fe/macros/MultiValueField.js +10 -7
  22. package/src/sap/fe/macros/MultiValueField.tsx +7 -3
  23. package/src/sap/fe/macros/Page.js +5 -7
  24. package/src/sap/fe/macros/Page.tsx +4 -6
  25. package/src/sap/fe/macros/Paginator.js +9 -4
  26. package/src/sap/fe/macros/Paginator.tsx +12 -3
  27. package/src/sap/fe/macros/RichTextEditor.js +3 -2
  28. package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
  29. package/src/sap/fe/macros/Share.js +14 -2
  30. package/src/sap/fe/macros/Share.tsx +13 -0
  31. package/src/sap/fe/macros/Status.js +251 -0
  32. package/src/sap/fe/macros/Status.tsx +212 -0
  33. package/src/sap/fe/macros/ValueHelp.js +4 -28
  34. package/src/sap/fe/macros/ValueHelp.tsx +2 -42
  35. package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
  36. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
  37. package/src/sap/fe/macros/ai/EasyFilterBar.js +246 -97
  38. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +302 -106
  39. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
  40. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
  41. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  42. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  43. package/src/sap/fe/macros/chart/Chart.js +2 -2
  44. package/src/sap/fe/macros/chart/Chart.tsx +1 -1
  45. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  46. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  47. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  48. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  49. package/src/sap/fe/macros/chart/MdcChartTemplate.js +5 -5
  50. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -5
  51. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
  52. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
  53. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  54. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  55. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +4 -2
  56. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +3 -1
  57. package/src/sap/fe/macros/controls/FilterBar.js +14 -5
  58. package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
  59. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  60. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  61. package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
  62. package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
  63. package/src/sap/fe/macros/controls/Section.js +4 -3
  64. package/src/sap/fe/macros/controls/Section.ts +3 -2
  65. package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
  66. package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
  67. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  68. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  69. package/src/sap/fe/macros/designtime/Designtime.helper.js +28 -1
  70. package/src/sap/fe/macros/designtime/Designtime.helper.ts +27 -0
  71. package/src/sap/fe/macros/field/Field.js +2 -2
  72. package/src/sap/fe/macros/field/Field.tsx +1 -1
  73. package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
  74. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
  75. package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
  76. package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
  77. package/src/sap/fe/macros/field/FieldHelper.js +2 -2
  78. package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
  79. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  80. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  81. package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
  82. package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
  83. package/src/sap/fe/macros/filter/FilterUtils.js +233 -5
  84. package/src/sap/fe/macros/filter/FilterUtils.ts +291 -7
  85. package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
  86. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
  87. package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
  88. package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
  89. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
  90. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
  91. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
  92. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  93. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
  94. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
  95. package/src/sap/fe/macros/form/Form.block.js +7 -8
  96. package/src/sap/fe/macros/form/Form.block.ts +4 -6
  97. package/src/sap/fe/macros/form/Form.js +1 -4
  98. package/src/sap/fe/macros/form/Form.tsx +0 -3
  99. package/src/sap/fe/macros/form/FormContainer.block.js +555 -5
  100. package/src/sap/fe/macros/form/FormContainer.block.ts +665 -7
  101. package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
  102. package/src/sap/fe/macros/form/FormDelegate.js +24 -8
  103. package/src/sap/fe/macros/form/FormDelegate.ts +29 -7
  104. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  105. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  106. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  107. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  108. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  109. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  110. package/src/sap/fe/macros/internal/DataPoint.js +3 -2
  111. package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
  112. package/src/sap/fe/macros/internal/FilterField.block.js +19 -5
  113. package/src/sap/fe/macros/internal/FilterField.block.ts +16 -4
  114. package/src/sap/fe/macros/internal/field/DisplayStyle.js +9 -3
  115. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +10 -2
  116. package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
  117. package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
  118. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
  119. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +5 -1
  120. package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
  121. package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
  122. package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
  123. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  124. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  125. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  126. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  127. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -1
  128. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +10 -3
  129. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +13 -2
  130. package/src/sap/fe/macros/library.js +1 -1
  131. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
  132. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
  133. package/src/sap/fe/macros/messagebundle.properties +24 -4
  134. package/src/sap/fe/macros/messagebundle_ar.properties +8 -2
  135. package/src/sap/fe/macros/messagebundle_bg.properties +8 -2
  136. package/src/sap/fe/macros/messagebundle_ca.properties +11 -5
  137. package/src/sap/fe/macros/messagebundle_cnr.properties +8 -2
  138. package/src/sap/fe/macros/messagebundle_cs.properties +7 -1
  139. package/src/sap/fe/macros/messagebundle_cy.properties +9 -3
  140. package/src/sap/fe/macros/messagebundle_da.properties +8 -2
  141. package/src/sap/fe/macros/messagebundle_de.properties +13 -7
  142. package/src/sap/fe/macros/messagebundle_el.properties +7 -1
  143. package/src/sap/fe/macros/messagebundle_en.properties +11 -5
  144. package/src/sap/fe/macros/messagebundle_en_GB.properties +9 -3
  145. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +11 -5
  146. package/src/sap/fe/macros/messagebundle_es.properties +10 -4
  147. package/src/sap/fe/macros/messagebundle_es_MX.properties +11 -5
  148. package/src/sap/fe/macros/messagebundle_et.properties +9 -3
  149. package/src/sap/fe/macros/messagebundle_fi.properties +7 -1
  150. package/src/sap/fe/macros/messagebundle_fr.properties +9 -3
  151. package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -2
  152. package/src/sap/fe/macros/messagebundle_hi.properties +8 -2
  153. package/src/sap/fe/macros/messagebundle_hr.properties +8 -2
  154. package/src/sap/fe/macros/messagebundle_hu.properties +7 -1
  155. package/src/sap/fe/macros/messagebundle_id.properties +15 -9
  156. package/src/sap/fe/macros/messagebundle_it.properties +7 -1
  157. package/src/sap/fe/macros/messagebundle_iw.properties +8 -2
  158. package/src/sap/fe/macros/messagebundle_ja.properties +13 -7
  159. package/src/sap/fe/macros/messagebundle_kk.properties +11 -5
  160. package/src/sap/fe/macros/messagebundle_ko.properties +8 -2
  161. package/src/sap/fe/macros/messagebundle_lt.properties +9 -3
  162. package/src/sap/fe/macros/messagebundle_lv.properties +8 -2
  163. package/src/sap/fe/macros/messagebundle_mk.properties +8 -2
  164. package/src/sap/fe/macros/messagebundle_ms.properties +7 -1
  165. package/src/sap/fe/macros/messagebundle_nl.properties +7 -1
  166. package/src/sap/fe/macros/messagebundle_no.properties +7 -1
  167. package/src/sap/fe/macros/messagebundle_pl.properties +8 -2
  168. package/src/sap/fe/macros/messagebundle_pt.properties +7 -1
  169. package/src/sap/fe/macros/messagebundle_pt_PT.properties +7 -1
  170. package/src/sap/fe/macros/messagebundle_ro.properties +8 -2
  171. package/src/sap/fe/macros/messagebundle_ru.properties +10 -4
  172. package/src/sap/fe/macros/messagebundle_sh.properties +8 -2
  173. package/src/sap/fe/macros/messagebundle_sk.properties +7 -1
  174. package/src/sap/fe/macros/messagebundle_sl.properties +7 -1
  175. package/src/sap/fe/macros/messagebundle_sr.properties +8 -2
  176. package/src/sap/fe/macros/messagebundle_sv.properties +7 -1
  177. package/src/sap/fe/macros/messagebundle_th.properties +8 -2
  178. package/src/sap/fe/macros/messagebundle_tr.properties +7 -1
  179. package/src/sap/fe/macros/messagebundle_uk.properties +10 -4
  180. package/src/sap/fe/macros/messagebundle_vi.properties +10 -4
  181. package/src/sap/fe/macros/messagebundle_zh_CN.properties +7 -1
  182. package/src/sap/fe/macros/messagebundle_zh_TW.properties +8 -2
  183. package/src/sap/fe/macros/messages/MessageButton.js +39 -18
  184. package/src/sap/fe/macros/messages/MessageButton.ts +42 -19
  185. package/src/sap/fe/macros/messages/MessagePopover.js +4 -2
  186. package/src/sap/fe/macros/messages/MessagePopover.ts +6 -4
  187. package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
  188. package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
  189. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  190. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  191. package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -3
  192. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -2
  193. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  194. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  195. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  196. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  197. package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
  198. package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
  199. package/src/sap/fe/macros/table/BasicSearch.js +1 -1
  200. package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
  201. package/src/sap/fe/macros/table/Column.js +14 -2
  202. package/src/sap/fe/macros/table/Column.ts +7 -0
  203. package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
  204. package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
  205. package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
  206. package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
  207. package/src/sap/fe/macros/table/MdcTableTemplate.js +7 -5
  208. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +21 -11
  209. package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
  210. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
  211. package/src/sap/fe/macros/table/Table.block.js +188 -147
  212. package/src/sap/fe/macros/table/Table.block.tsx +41 -11
  213. package/src/sap/fe/macros/table/Table.js +16 -10
  214. package/src/sap/fe/macros/table/Table.tsx +16 -10
  215. package/src/sap/fe/macros/table/TableAPI.js +224 -184
  216. package/src/sap/fe/macros/table/TableAPI.ts +63 -19
  217. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
  218. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
  219. package/src/sap/fe/macros/table/TableHelper.js +2 -3
  220. package/src/sap/fe/macros/table/TableHelper.ts +1 -2
  221. package/src/sap/fe/macros/table/TableRuntime.js +24 -5
  222. package/src/sap/fe/macros/table/TableRuntime.ts +31 -3
  223. package/src/sap/fe/macros/table/TreeTable.js +16 -10
  224. package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
  225. package/src/sap/fe/macros/table/Utils.js +8 -3
  226. package/src/sap/fe/macros/table/Utils.ts +12 -3
  227. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  228. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  229. package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -34
  230. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -33
  231. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  232. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  233. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  234. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  235. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
  236. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
  237. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
  238. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
  239. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
  240. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
  241. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
  242. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
  243. package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
  244. package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
  245. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +5 -1
  246. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +7 -0
  247. package/src/sap/fe/macros/table/mixin/TableSharing.js +4 -2
  248. package/src/sap/fe/macros/table/mixin/TableSharing.ts +10 -1
  249. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +36 -10
  250. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +44 -9
  251. package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -4
  252. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -2
  253. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +2 -3
  254. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +1 -2
@@ -217,7 +217,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
217
217
  const emptyIndicatorMode = this.formatOptions?.showEmptyIndicator ?? false ? "On" : undefined;
218
218
  const objectStatusNumber = buildFieldBindingExpression(dataModelPath, this.formatOptions, true);
219
219
  const limitShowDecimals = this.getManifestWrapper()?.getSapFeManifestConfiguration()?.app?.showOnlyUnitDecimals === true;
220
- const unit = this.formatOptions?.measureDisplayMode === "Hidden" ? undefined : compileExpression(UIFormatters.getBindingForUnitOrCurrency(this.valueDataModelPath, true, limitShowDecimals));
220
+ const preserveDecimalsForCurrency = this.getManifestWrapper()?.getSapFeManifestConfiguration()?.app?.preserveDecimalsForCurrency === true;
221
+ const unit = this.formatOptions?.measureDisplayMode === "Hidden" ? undefined : compileExpression(UIFormatters.getBindingForUnitOrCurrency(this.valueDataModelPath, true, limitShowDecimals, preserveDecimalsForCurrency));
221
222
  return _jsx(ObjectNumber, {
222
223
  id: this.idPrefix ? generate([this.idPrefix, "ObjectNumber-Field-display"]) : undefined,
223
224
  state: criticalityColorExpression,
@@ -381,4 +382,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
381
382
  _exports = DataPoint;
382
383
  return _exports;
383
384
  }, false);
384
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEYXRhUG9pbnQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFzc29jaWF0aW9uIiwidHlwZSIsIl9kZWMzIiwicHJvcGVydHkiLCJyZXF1aXJlZCIsIl9kZWM0IiwiX2RlYzUiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiZGVmYXVsdENsYXNzIiwiRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyIsIl9kZWM2IiwiaXNCaW5kaW5nSW5mbyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiaGFzUXVpY2tWaWV3IiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJnZXRUZW1wbGF0aW5nT2JqZWN0cyIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwiaW50ZXJuYWxEYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwiaW50ZXJuYWxWYWx1ZURhdGFNb2RlbFBhdGgiLCJ2aXNpYmxlIiwiZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJ0YXJnZXRPYmplY3QiLCJWYWx1ZSIsInBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImRhdGFNb2RlbFBhdGgiLCJ2YWx1ZURhdGFNb2RlbFBhdGgiLCJnZXREYXRhUG9pbnRWaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvbiIsInZpc3VhbGl6YXRpb24iLCJ2YWx1ZVByb3BlcnR5IiwiaXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyIsImdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0IiwiaXNQcm9wZXJ0eSIsImhhc1VuaXQiLCJoYXNDdXJyZW5jeSIsImdldEVuYWJsZWQiLCJpc0EiLCJnZXRBY3RpdmUiLCJzZXRFbmFibGVkIiwiZW5hYmxlZCIsInNldFByb3BlcnR5IiwiY3JlYXRlUmF0aW5nSW5kaWNhdG9yIiwiZGF0YVBvaW50VGFyZ2V0IiwidGFyZ2V0VmFsdWUiLCJnZXRUYXJnZXRWYWx1ZUJpbmRpbmciLCJkYXRhUG9pbnRWYWx1ZSIsInByb3BlcnR5VHlwZSIsIiR0YXJnZXQiLCJudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJWYWx1ZUZvcm1hdCIsIk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsInZhbHVlIiwiZ2V0VmFsdWVGb3JtYXR0ZWQiLCJfanN4IiwiUmF0aW5nSW5kaWNhdG9yIiwiaWQiLCJpZFByZWZpeCIsImdlbmVyYXRlIiwidW5kZWZpbmVkIiwibWF4VmFsdWUiLCJjb21waWxlRXhwcmVzc2lvbiIsInRvb2x0aXAiLCJnZXRUb29sdGlwVmFsdWUiLCJpY29uU2l6ZSIsImZvcm1hdE9wdGlvbnMiLCJjbGFzcyIsInNob3dMYWJlbHMiLCJlZGl0YWJsZSIsImFyaWFMYWJlbGxlZEJ5IiwiY3JlYXRlUHJvZ3Jlc3NJbmRpY2F0b3IiLCJjcml0aWNhbGl0eUNvbG9yRXhwcmVzc2lvbiIsImJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5Q29sb3IiLCJkaXNwbGF5VmFsdWUiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSIsInBlcmNlbnRWYWx1ZSIsImJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yUGVyY2VudFZhbHVlIiwiUHJvZ3Jlc3NJbmRpY2F0b3IiLCJzdGF0ZSIsImNyZWF0ZU9iamVjdE51bWJlciIsImVtcHR5SW5kaWNhdG9yTW9kZSIsInNob3dFbXB0eUluZGljYXRvciIsIm9iamVjdFN0YXR1c051bWJlciIsImJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbiIsImxpbWl0U2hvd0RlY2ltYWxzIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJhcHAiLCJzaG93T25seVVuaXREZWNpbWFscyIsInVuaXQiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJVSUZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kiLCJPYmplY3ROdW1iZXIiLCJudW1iZXIiLCJlbXBoYXNpemVkIiwiZGF0YVBvaW50U3R5bGUiLCJjcmVhdGVEZXBlbmRlbnRzIiwiUXVpY2tWaWV3IiwiY3JlYXRlT2JqZWN0U3RhdHVzIiwib2JqZWN0U3RhdHVzVGV4dCIsImljb25FeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uIiwiT2JqZWN0U3RhdHVzIiwiaWNvbiIsInRleHQiLCJhY3RpdmUiLCJwcmVzcyIsIkZpZWxkUnVudGltZUhlbHBlciIsInByZXNzTGluayIsInJlYWN0aXZlQXJlYU1vZGUiLCJjaGlsZHJlbiIsImRlcGVuZGVudHMiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlF1aWNrSW5mbyIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldFJlbGF0aXZlUGF0aHMiLCJUYXJnZXRWYWx1ZSIsImdldFZhbHVlIiwiZ2V0VGV4dCIsImdldE51bWJlciIsImdldERpc3BsYXlWYWx1ZSIsInRvU3RyaW5nIiwiZ2V0UHJvcGVydHkiLCJzZXRWYWx1ZSIsInNldFRleHQiLCJzZXROdW1iZXIiLCJMb2ciLCJlcnJvciIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRhdGFQb2ludC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgVmlzdWFsaXphdGlvblR5cGUsIHR5cGUgRGF0YVBvaW50VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgdHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBhc3NvY2lhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5LCB0eXBlIFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvciwgYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQ3JpdGljYWxpdHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0UmVsYXRpdmVQYXRocyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGhhc0N1cnJlbmN5LCBoYXNVbml0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldFZpc2libGVFeHByZXNzaW9uLCBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQge1xuXHRidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSxcblx0YnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JQZXJjZW50VmFsdWUsXG5cdGJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbixcblx0Z2V0VmFsdWVGb3JtYXR0ZWRcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvaGVscGVycy9EYXRhUG9pbnRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgUXVpY2tWaWV3IGZyb20gXCJzYXAvZmUvbWFjcm9zL3F1aWNrVmlldy9RdWlja1ZpZXdcIjtcbmltcG9ydCBPYmplY3ROdW1iZXIgZnJvbSBcInNhcC9tL09iamVjdE51bWJlclwiO1xuaW1wb3J0IHR5cGUgeyBPYmplY3RTdGF0dXMkUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9PYmplY3RTdGF0dXNcIjtcbmltcG9ydCBPYmplY3RTdGF0dXMgZnJvbSBcInNhcC9tL09iamVjdFN0YXR1c1wiO1xuaW1wb3J0IFByb2dyZXNzSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9Qcm9ncmVzc0luZGljYXRvclwiO1xuaW1wb3J0IFJhdGluZ0luZGljYXRvciBmcm9tIFwic2FwL20vUmF0aW5nSW5kaWNhdG9yXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgTWRjTGluayBmcm9tIFwic2FwL3VpL21kYy9MaW5rXCI7XG5pbXBvcnQgRmllbGRSdW50aW1lSGVscGVyIGZyb20gXCIuLi9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXJcIjtcbmltcG9ydCBEYXRhUG9pbnRGb3JtYXRPcHRpb25zIGZyb20gXCIuL0RhdGFQb2ludEZvcm1hdE9wdGlvbnNcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC5EYXRhUG9pbnRcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFQb2ludCBleHRlbmRzIEJ1aWxkaW5nQmxvY2s8Q29udHJvbD4ge1xuXHQvKipcblx0ICogUHJlZml4IGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgSUQgb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRAYXNzb2NpYXRpb24oe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0cHVibGljIGlkUHJlZml4Pzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBNZXRhZGF0YSBwYXRoIHRvIHRoZSBkYXRhUG9pbnQuXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0cHVibGljIG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgY29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmludGVybmFsLkRhdGFQb2ludEZvcm1hdE9wdGlvbnNcIiwgbXVsdGlwbGU6IGZhbHNlLCBkZWZhdWx0Q2xhc3M6IERhdGFQb2ludEZvcm1hdE9wdGlvbnMgfSlcblx0Zm9ybWF0T3B0aW9ucyE6IERhdGFQb2ludEZvcm1hdE9wdGlvbnM7XG5cblx0LyoqXG5cdCAqIFByb3BlcnR5IHRvIHNldCBhbiBleHRlcm5hbCB2YWx1ZSB0aGF0IGNvbWVzIGZyb20gYSBkaWZmZXJlbnQgbW9kZWwgdGhhbiB0aGUgb0RhdGEgbW9kZWxcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRpc0JpbmRpbmdJbmZvOiB0cnVlXG5cdH0pXG5cdHB1YmxpYyB2YWx1ZT86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJvcGVydHkgdG8gc2V0IHRoZSB2aXN1YWxpemF0aW9uIHR5cGVcblx0ICovXG5cdHByaXZhdGUgdmlzdWFsaXphdGlvbj86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJvcGVydHkgdG8gc2V0IHRoZSB2aXNpYmlsaXR5XG5cdCAqL1xuXHRwcml2YXRlIHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSB0byBzZXQgcHJvcGVydHkgaWYgdGhlIHByb3BlcnR5IGhhcyBhIFF1aWNrdmlld1xuXHQgKi9cblx0cHJpdmF0ZSBoYXNRdWlja1ZpZXcgPSBmYWxzZTtcblxuXHRwcml2YXRlIGRhdGFNb2RlbFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+O1xuXG5cdHByaXZhdGUgdmFsdWVEYXRhTW9kZWxQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxEYXRhUG9pbnQ+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcywgb3RoZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25NZXRhZGF0YUF2YWlsYWJsZSBldmVudC5cblx0ICovXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRUZW1wbGF0aW5nT2JqZWN0cygpO1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdG8gZ2V0IHRoZSB0ZW1wbGF0aW5nIG9iamVjdHMuXG5cdCAqL1xuXHRwcml2YXRlIGdldFRlbXBsYXRpbmdPYmplY3RzKCk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsRGF0YU1vZGVsUGF0aCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8RGF0YVBvaW50VHlwZT4odGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0aWYgKCFpbnRlcm5hbERhdGFNb2RlbFBhdGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IGludGVybmFsVmFsdWVEYXRhTW9kZWxQYXRoO1xuXHRcdHRoaXMudmlzaWJsZSA9IGdldFZpc2libGVFeHByZXNzaW9uKGludGVybmFsRGF0YU1vZGVsUGF0aCk7XG5cdFx0aWYgKGludGVybmFsRGF0YU1vZGVsUGF0aD8udGFyZ2V0T2JqZWN0Py5WYWx1ZT8ucGF0aCkge1xuXHRcdFx0aW50ZXJuYWxWYWx1ZURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHRcdGludGVybmFsRGF0YU1vZGVsUGF0aCxcblx0XHRcdFx0aW50ZXJuYWxEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdC5WYWx1ZS5wYXRoXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0YU1vZGVsUGF0aCA9IGludGVybmFsRGF0YU1vZGVsUGF0aDtcblx0XHR0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCA9IGludGVybmFsVmFsdWVEYXRhTW9kZWxQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRoYXQgY2FsY3VsYXRlcyB0aGUgdmlzdWFsaXphdGlvbiB0eXBlIGZvciB0aGlzIERhdGFQb2ludC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICovXG5cdHByaXZhdGUgZ2V0RGF0YVBvaW50VmlzdWFsaXphdGlvbihkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTogdm9pZCB7XG5cdFx0aWYgKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5WaXN1YWxpemF0aW9uID09PSBWaXN1YWxpemF0aW9uVHlwZS5SYXRpbmcpIHtcblx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiUmF0aW5nXCI7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVmlzdWFsaXphdGlvbiA9PT0gVmlzdWFsaXphdGlvblR5cGUuUHJvZ3Jlc3MpIHtcblx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiUHJvZ3Jlc3NcIjtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWVQcm9wZXJ0eSA9IHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoICYmIHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0XHQvL2NoZWNrIHdoZXRoZXIgdGhlIHZpc3VhbGl6YXRpb24gdHlwZSBzaG91bGQgYmUgYW4gb2JqZWN0IG51bWJlciBpbiBjYXNlIG9uZSBvZiB0aGUgaWYgY29uZGl0aW9ucyBtZXRcblx0XHR0aGlzLmhhc1F1aWNrVmlldyA9ICh2YWx1ZVByb3BlcnR5ICYmIGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMoZGF0YU1vZGVsUGF0aCwgdmFsdWVQcm9wZXJ0eSkpID8/IGZhbHNlO1xuXHRcdGlmICh0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCAmJiBnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCh0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCkpIHtcblx0XHRcdHRoaXMuaGFzUXVpY2tWaWV3ID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuaGFzUXVpY2tWaWV3ICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAoaXNQcm9wZXJ0eSh2YWx1ZVByb3BlcnR5KSAmJiAoaGFzVW5pdCh2YWx1ZVByb3BlcnR5KSB8fCBoYXNDdXJyZW5jeSh2YWx1ZVByb3BlcnR5KSkpIHtcblx0XHRcdFx0Ly8gd2Ugb25seSBzaG93IGFuIG9iamVjdE51bWJlciBpZiB0aGVyZSBpcyBubyBxdWlja3ZpZXcgYW5kIGEgdW5pdCBvciBhIGN1cnJlbmN5XG5cdFx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiT2JqZWN0TnVtYmVyXCI7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvL2RlZmF1bHQgY2FzZSB0byBoYW5kbGUgdGhpcyBhcyBvYmplY3RTdGF0dXMgdHlwZVxuXHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiT2JqZWN0U3RhdHVzXCI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY3VycmVudCBlbmFibGVtZW50IHN0YXRlIG9mIHRoZSBkYXRhUG9pbnQuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgd2l0aCB0aGUgZW5hYmxlbWVudCBzdGF0ZVxuXHQgKi9cblx0Z2V0RW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXRBY3RpdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGN1cnJlbnQgZW5hYmxlbWVudCBzdGF0ZSBvZiB0aGUgZGF0YXBvaW50LlxuXHQgKiBAcGFyYW0gZW5hYmxlZFxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBkYXRhcG9pbnQgcmVmZXJlbmNlXG5cdCAqL1xuXHRzZXRFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBDb250cm9sIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldFByb3BlcnR5KFwiYWN0aXZlXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBcInNldEVuYWJsZWQgaXNuJ3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgZmllbGQgdHlwZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgUmF0aW5nSW5kaWNhdG9yIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoXG5cdCAqIEByZXR1cm5zIFJhdGluZ0luZGljYXRvclxuXHQgKi9cblx0Y3JlYXRlUmF0aW5nSW5kaWNhdG9yKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pOiBSYXRpbmdJbmRpY2F0b3Ige1xuXHRcdGNvbnN0IGRhdGFQb2ludFRhcmdldCA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlID0gdGhpcy5nZXRUYXJnZXRWYWx1ZUJpbmRpbmcoZGF0YU1vZGVsUGF0aCk7XG5cblx0XHRjb25zdCBkYXRhUG9pbnRWYWx1ZSA9IGRhdGFQb2ludFRhcmdldD8uVmFsdWUgfHwgXCJcIjtcblx0XHRjb25zdCBwcm9wZXJ0eVR5cGUgPSBkYXRhUG9pbnRWYWx1ZT8uJHRhcmdldD8udHlwZTtcblxuXHRcdGxldCBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gXCJFZG0uRGVjaW1hbFwiICYmIGRhdGFQb2ludFRhcmdldD8uVmFsdWVGb3JtYXQpIHtcblx0XHRcdGlmIChkYXRhUG9pbnRUYXJnZXQuVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKSB7XG5cdFx0XHRcdG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA9IGRhdGFQb2ludFRhcmdldC5WYWx1ZUZvcm1hdC5OdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlID0gZ2V0VmFsdWVGb3JtYXR0ZWQodGhpcy52YWx1ZURhdGFNb2RlbFBhdGgsIGRhdGFQb2ludFZhbHVlLCBwcm9wZXJ0eVR5cGUsIG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFJhdGluZ0luZGljYXRvclxuXHRcdFx0XHRpZD17dGhpcy5pZFByZWZpeCA/IGdlbmVyYXRlKFt0aGlzLmlkUHJlZml4LCBcIlJhdGluZ0luZGljYXRvci1GaWVsZC1kaXNwbGF5XCJdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0bWF4VmFsdWU9e3RhcmdldFZhbHVlfVxuXHRcdFx0XHR2YWx1ZT17dGhpcy52YWx1ZSA/PyBjb21waWxlRXhwcmVzc2lvbih2YWx1ZSl9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMuZ2V0VG9vbHRpcFZhbHVlKGRhdGFNb2RlbFBhdGgpfVxuXHRcdFx0XHRpY29uU2l6ZT17dGhpcy5mb3JtYXRPcHRpb25zPy5pY29uU2l6ZX1cblx0XHRcdFx0Y2xhc3M9e3RoaXMuZm9ybWF0T3B0aW9ucz8uc2hvd0xhYmVscyA/PyBmYWxzZSA/IFwic2FwVWlUaW55TWFyZ2luVG9wQm90dG9tXCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGVkaXRhYmxlPVwiZmFsc2VcIlxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgUHJvZ3Jlc3NJbmRpY2F0b3IgY29udHJvbC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgUHJvZ3Jlc3NJbmRpY2F0b3Jcblx0ICovXG5cdGNyZWF0ZVByb2dyZXNzSW5kaWNhdG9yKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pOiBQcm9ncmVzc0luZGljYXRvciB7XG5cdFx0Y29uc3QgY3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0PyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGlzcGxheVZhbHVlID0gYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JEaXNwbGF5VmFsdWUoZGF0YU1vZGVsUGF0aCk7XG5cdFx0Y29uc3QgcGVyY2VudFZhbHVlID0gYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JQZXJjZW50VmFsdWUoZGF0YU1vZGVsUGF0aCk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFByb2dyZXNzSW5kaWNhdG9yXG5cdFx0XHRcdGlkPXt0aGlzLmlkUHJlZml4ID8gZ2VuZXJhdGUoW3RoaXMuaWRQcmVmaXgsIFwiUHJvZ3Jlc3NJbmRpY2F0b3ItRmllbGQtZGlzcGxheVwiXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGRpc3BsYXlWYWx1ZT17ZGlzcGxheVZhbHVlfVxuXHRcdFx0XHRwZXJjZW50VmFsdWU9e3BlcmNlbnRWYWx1ZX1cblx0XHRcdFx0c3RhdGU9e2NyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9ufVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLmdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoKX1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e3RoaXMuYXJpYUxhYmVsbGVkQnl9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBPYmplY3ROdW1iZXIgY29udHJvbC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgT2JqZWN0TnVtYmVyXG5cdCAqL1xuXHRjcmVhdGVPYmplY3ROdW1iZXIoZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPik6IE9iamVjdE51bWJlciB7XG5cdFx0Y29uc3QgY3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0PyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZW1wdHlJbmRpY2F0b3JNb2RlID0gdGhpcy5mb3JtYXRPcHRpb25zPy5zaG93RW1wdHlJbmRpY2F0b3IgPz8gZmFsc2UgPyBcIk9uXCIgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb2JqZWN0U3RhdHVzTnVtYmVyID0gYnVpbGRGaWVsZEJpbmRpbmdFeHByZXNzaW9uKGRhdGFNb2RlbFBhdGgsIHRoaXMuZm9ybWF0T3B0aW9ucywgdHJ1ZSk7XG5cdFx0Y29uc3QgbGltaXRTaG93RGVjaW1hbHMgPSB0aGlzLmdldE1hbmlmZXN0V3JhcHBlcigpPy5nZXRTYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbigpPy5hcHA/LnNob3dPbmx5VW5pdERlY2ltYWxzID09PSB0cnVlO1xuXHRcdGNvbnN0IHVuaXQgPVxuXHRcdFx0dGhpcy5mb3JtYXRPcHRpb25zPy5tZWFzdXJlRGlzcGxheU1vZGUgPT09IFwiSGlkZGVuXCJcblx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0OiBjb21waWxlRXhwcmVzc2lvbihVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ0ZvclVuaXRPckN1cnJlbmN5KHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoLCB0cnVlLCBsaW1pdFNob3dEZWNpbWFscykpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxPYmplY3ROdW1iZXJcblx0XHRcdFx0aWQ9e3RoaXMuaWRQcmVmaXggPyBnZW5lcmF0ZShbdGhpcy5pZFByZWZpeCwgXCJPYmplY3ROdW1iZXItRmllbGQtZGlzcGxheVwiXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdHN0YXRlPXtjcml0aWNhbGl0eUNvbG9yRXhwcmVzc2lvbn1cblx0XHRcdFx0bnVtYmVyPXt0aGlzLnZhbHVlID8/IG9iamVjdFN0YXR1c051bWJlcn1cblx0XHRcdFx0dW5pdD17dW5pdH1cblx0XHRcdFx0dmlzaWJsZT17dGhpcy52aXNpYmxlfVxuXHRcdFx0XHRlbXBoYXNpemVkPVwiZmFsc2VcIlxuXHRcdFx0XHRjbGFzcz17dGhpcy5mb3JtYXRPcHRpb25zPy5kYXRhUG9pbnRTdHlsZSA9PT0gXCJsYXJnZVwiID8gXCJzYXBNT2JqZWN0TnVtYmVyTGFyZ2VcIiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5nZXRUb29sdGlwVmFsdWUoZGF0YU1vZGVsUGF0aCl9XG5cdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGRlcGVuZGVudC5cblx0ICogQHJldHVybnMgRGVwZW5kZW50IGVpdGhlciB3aXRoIHRoZSBRdWlja1ZpZXcgb3IgYW4gZW1wdHkgc3RyaW5nLlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVEZXBlbmRlbnRzKCk6IE1kY0xpbmsgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLmhhc1F1aWNrVmlldykge1xuXHRcdFx0cmV0dXJuIG5ldyBRdWlja1ZpZXcoXG5cdFx0XHRcdHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHR0aGlzLm1ldGFQYXRoLFxuXHRcdFx0XHR0aGlzLmNvbnRleHRQYXRoID8/IFwiXCJcblx0XHRcdCkuY3JlYXRlQ29udGVudCgpIGFzIE1kY0xpbms7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBPYmplY3RTdGF0dXMgY29udHJvbC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgT2JqZWN0U3RhdHVzXG5cdCAqL1xuXHRjcmVhdGVPYmplY3RTdGF0dXMoZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPik6IE9iamVjdFN0YXR1cyB7XG5cdFx0bGV0IGNyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9uID0gZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Rcblx0XHRcdD8gYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvcihkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCwgZGF0YU1vZGVsUGF0aClcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChjcml0aWNhbGl0eUNvbG9yRXhwcmVzc2lvbiA9PT0gXCJOb25lXCIgJiYgdGhpcy52YWx1ZURhdGFNb2RlbFBhdGgpIHtcblx0XHRcdGNyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9uID0gdGhpcy5oYXNRdWlja1ZpZXcgPyBcIkluZm9ybWF0aW9uXCIgOiBcIk5vbmVcIjtcblx0XHR9XG5cdFx0Y29uc3QgZW1wdHlJbmRpY2F0b3JNb2RlID0gdGhpcy5mb3JtYXRPcHRpb25zPy5zaG93RW1wdHlJbmRpY2F0b3IgPz8gZmFsc2UgPyBcIk9uXCIgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb2JqZWN0U3RhdHVzVGV4dCA9IGJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbihkYXRhTW9kZWxQYXRoLCB0aGlzLmZvcm1hdE9wdGlvbnMsIGZhbHNlKTtcblx0XHRjb25zdCBpY29uRXhwcmVzc2lvbiA9XG5cdFx0XHR0aGlzLmZvcm1hdE9wdGlvbnM/LmRhdGFQb2ludFN0eWxlID09PSBcImxhcmdlXCIgfHwgIWRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0XG5cdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdDogYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8T2JqZWN0U3RhdHVzXG5cdFx0XHRcdGlkPXt0aGlzLmlkUHJlZml4ID8gZ2VuZXJhdGUoW3RoaXMuaWRQcmVmaXgsIFwiT2JqZWN0U3RhdHVzLUZpZWxkLWRpc3BsYXlcIl0pIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRjbGFzcz17dGhpcy5mb3JtYXRPcHRpb25zPy5kYXRhUG9pbnRTdHlsZSA9PT0gXCJsYXJnZVwiID8gXCJzYXBNT2JqZWN0U3RhdHVzTGFyZ2Ugc2FwTU9iamVjdFN0YXR1c0xvbmdUZXh0XCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGljb249e2ljb25FeHByZXNzaW9ufVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLmdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoKX1cblx0XHRcdFx0c3RhdGU9e2NyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9ufVxuXHRcdFx0XHR0ZXh0PXt0aGlzLnZhbHVlID8/IG9iamVjdFN0YXR1c1RleHR9XG5cdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRhY3RpdmU9e3RoaXMuaGFzUXVpY2tWaWV3fVxuXHRcdFx0XHRwcmVzcz17RmllbGRSdW50aW1lSGVscGVyLnByZXNzTGluayBhcyB1bmtub3duIGFzIChvRXZlbnQ6IE9iamVjdFN0YXR1cyRQcmVzc0V2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeX1cblx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17dGhpcy5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGRlcGVuZGVudHM6IHRoaXMuY3JlYXRlRGVwZW5kZW50cygpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L09iamVjdFN0YXR1cz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBoZWxwZXIgbWV0aG9kIHRvIGdldCBhIHBvc3NpYmxlIHRvb2x0aXAgdGV4dC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG5cdCAqL1xuXHRwcml2YXRlIGdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvLCBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbFBhdGgpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGhlbHBlciBtZXRob2QgdG8gZ2V0IGEgcG9zc2libGUgdGFyZ2V0IHZhbHVlIGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoXG5cdCAqIEByZXR1cm5zIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRUYXJnZXRWYWx1ZUJpbmRpbmcoXG5cdFx0ZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPlxuXHQpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nIHwgbnVtYmVyPiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5UYXJnZXRWYWx1ZVxuXHRcdFx0PyBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LlRhcmdldFZhbHVlLCBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbFBhdGgpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IE9iamVjdFN0YXR1cyB8IE9iamVjdE51bWJlciB8IFJhdGluZ0luZGljYXRvciB8IFByb2dyZXNzSW5kaWNhdG9yIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuZGF0YU1vZGVsUGF0aCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dGhpcy5nZXREYXRhUG9pbnRWaXN1YWxpemF0aW9uKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0c3dpdGNoICh0aGlzLnZpc3VhbGl6YXRpb24pIHtcblx0XHRcdGNhc2UgXCJSYXRpbmdcIjoge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVSYXRpbmdJbmRpY2F0b3IodGhpcy5kYXRhTW9kZWxQYXRoKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJQcm9ncmVzc1wiOiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZVByb2dyZXNzSW5kaWNhdG9yKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiT2JqZWN0TnVtYmVyXCI6IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlT2JqZWN0TnVtYmVyKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU9iamVjdFN0YXR1cyh0aGlzLmRhdGFNb2RlbFBhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRhdGFwb2ludC5cblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRhdGFwb2ludFxuXHQgKi9cblx0Z2V0VmFsdWUoKTogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuY29udGVudD8uaXNBPE9iamVjdFN0YXR1cz4oXCJzYXAubS5PYmplY3RTdGF0dXNcIikpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0TnVtYmVyPihcInNhcC5tLk9iamVjdE51bWJlclwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXROdW1iZXIoKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPFByb2dyZXNzSW5kaWNhdG9yPihcInNhcC5tLlByb2dyZXNzSW5kaWNhdG9yXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb250ZW50LmdldERpc3BsYXlWYWx1ZSgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8UmF0aW5nSW5kaWNhdG9yPihcInNhcC5tLlJhdGluZ0luZGljYXRvclwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXRWYWx1ZSgpLnRvU3RyaW5nKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZ2V0UHJvcGVydHkoXCJ2YWx1ZVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSB2YWx1ZVxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBmaWVsZCByZWZlcmVuY2Vcblx0ICovXG5cdHNldFZhbHVlKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkKTogQ29udHJvbCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcInZhbHVlXCIsIHZhbHVlKTtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldFRleHQodmFsdWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPE9iamVjdE51bWJlcj4oXCJzYXAubS5PYmplY3ROdW1iZXJcIikpIHtcblx0XHRcdHRoaXMuY29udGVudC5zZXROdW1iZXIodmFsdWUgYXMgc3RyaW5nKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPFByb2dyZXNzSW5kaWNhdG9yPihcInNhcC5tLlByb2dyZXNzSW5kaWNhdG9yXCIpKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJzZXRWYWx1ZSBpc24ndCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlIHlldFwiKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPFJhdGluZ0luZGljYXRvcj4oXCJzYXAubS5SYXRpbmdJbmRpY2F0b3JcIikpIHtcblx0XHRcdHRoaXMuY29udGVudC5zZXRWYWx1ZSh2YWx1ZSBhcyBudW1iZXIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQW1DcUJBLFNBQVMsSUFBQUMsSUFBQSxHQUQ3QkMsY0FBYyxDQUFDLGtDQUFrQyxDQUFDLEVBQUFDLEtBQUEsR0FLakRDLFdBQVcsQ0FBQztJQUNaQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU1EQyxRQUFRLENBQUM7SUFDVEYsSUFBSSxFQUFF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
385
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEYXRhUG9pbnQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFzc29jaWF0aW9uIiwidHlwZSIsIl9kZWMzIiwicHJvcGVydHkiLCJyZXF1aXJlZCIsIl9kZWM0IiwiX2RlYzUiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiZGVmYXVsdENsYXNzIiwiRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyIsIl9kZWM2IiwiaXNCaW5kaW5nSW5mbyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiaGFzUXVpY2tWaWV3IiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJnZXRUZW1wbGF0aW5nT2JqZWN0cyIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwiaW50ZXJuYWxEYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwiaW50ZXJuYWxWYWx1ZURhdGFNb2RlbFBhdGgiLCJ2aXNpYmxlIiwiZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJ0YXJnZXRPYmplY3QiLCJWYWx1ZSIsInBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImRhdGFNb2RlbFBhdGgiLCJ2YWx1ZURhdGFNb2RlbFBhdGgiLCJnZXREYXRhUG9pbnRWaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvbiIsInZpc3VhbGl6YXRpb24iLCJ2YWx1ZVByb3BlcnR5IiwiaXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyIsImdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0IiwiaXNQcm9wZXJ0eSIsImhhc1VuaXQiLCJoYXNDdXJyZW5jeSIsImdldEVuYWJsZWQiLCJpc0EiLCJnZXRBY3RpdmUiLCJzZXRFbmFibGVkIiwiZW5hYmxlZCIsInNldFByb3BlcnR5IiwiY3JlYXRlUmF0aW5nSW5kaWNhdG9yIiwiZGF0YVBvaW50VGFyZ2V0IiwidGFyZ2V0VmFsdWUiLCJnZXRUYXJnZXRWYWx1ZUJpbmRpbmciLCJkYXRhUG9pbnRWYWx1ZSIsInByb3BlcnR5VHlwZSIsIiR0YXJnZXQiLCJudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJWYWx1ZUZvcm1hdCIsIk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsInZhbHVlIiwiZ2V0VmFsdWVGb3JtYXR0ZWQiLCJfanN4IiwiUmF0aW5nSW5kaWNhdG9yIiwiaWQiLCJpZFByZWZpeCIsImdlbmVyYXRlIiwidW5kZWZpbmVkIiwibWF4VmFsdWUiLCJjb21waWxlRXhwcmVzc2lvbiIsInRvb2x0aXAiLCJnZXRUb29sdGlwVmFsdWUiLCJpY29uU2l6ZSIsImZvcm1hdE9wdGlvbnMiLCJjbGFzcyIsInNob3dMYWJlbHMiLCJlZGl0YWJsZSIsImFyaWFMYWJlbGxlZEJ5IiwiY3JlYXRlUHJvZ3Jlc3NJbmRpY2F0b3IiLCJjcml0aWNhbGl0eUNvbG9yRXhwcmVzc2lvbiIsImJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5Q29sb3IiLCJkaXNwbGF5VmFsdWUiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSIsInBlcmNlbnRWYWx1ZSIsImJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yUGVyY2VudFZhbHVlIiwiUHJvZ3Jlc3NJbmRpY2F0b3IiLCJzdGF0ZSIsImNyZWF0ZU9iamVjdE51bWJlciIsImVtcHR5SW5kaWNhdG9yTW9kZSIsInNob3dFbXB0eUluZGljYXRvciIsIm9iamVjdFN0YXR1c051bWJlciIsImJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbiIsImxpbWl0U2hvd0RlY2ltYWxzIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJhcHAiLCJzaG93T25seVVuaXREZWNpbWFscyIsInByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeSIsInVuaXQiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJVSUZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kiLCJPYmplY3ROdW1iZXIiLCJudW1iZXIiLCJlbXBoYXNpemVkIiwiZGF0YVBvaW50U3R5bGUiLCJjcmVhdGVEZXBlbmRlbnRzIiwiUXVpY2tWaWV3IiwiY3JlYXRlT2JqZWN0U3RhdHVzIiwib2JqZWN0U3RhdHVzVGV4dCIsImljb25FeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uIiwiT2JqZWN0U3RhdHVzIiwiaWNvbiIsInRleHQiLCJhY3RpdmUiLCJwcmVzcyIsIkZpZWxkUnVudGltZUhlbHBlciIsInByZXNzTGluayIsInJlYWN0aXZlQXJlYU1vZGUiLCJjaGlsZHJlbiIsImRlcGVuZGVudHMiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlF1aWNrSW5mbyIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldFJlbGF0aXZlUGF0aHMiLCJUYXJnZXRWYWx1ZSIsImdldFZhbHVlIiwiZ2V0VGV4dCIsImdldE51bWJlciIsImdldERpc3BsYXlWYWx1ZSIsInRvU3RyaW5nIiwiZ2V0UHJvcGVydHkiLCJzZXRWYWx1ZSIsInNldFRleHQiLCJzZXROdW1iZXIiLCJMb2ciLCJlcnJvciIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRhdGFQb2ludC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgVmlzdWFsaXphdGlvblR5cGUsIHR5cGUgRGF0YVBvaW50VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgdHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBhc3NvY2lhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5LCB0eXBlIFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvciwgYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQ3JpdGljYWxpdHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0UmVsYXRpdmVQYXRocyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGhhc0N1cnJlbmN5LCBoYXNVbml0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldFZpc2libGVFeHByZXNzaW9uLCBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQge1xuXHRidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSxcblx0YnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JQZXJjZW50VmFsdWUsXG5cdGJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbixcblx0Z2V0VmFsdWVGb3JtYXR0ZWRcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvaGVscGVycy9EYXRhUG9pbnRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgUXVpY2tWaWV3IGZyb20gXCJzYXAvZmUvbWFjcm9zL3F1aWNrVmlldy9RdWlja1ZpZXdcIjtcbmltcG9ydCBPYmplY3ROdW1iZXIgZnJvbSBcInNhcC9tL09iamVjdE51bWJlclwiO1xuaW1wb3J0IHR5cGUgeyBPYmplY3RTdGF0dXMkUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9PYmplY3RTdGF0dXNcIjtcbmltcG9ydCBPYmplY3RTdGF0dXMgZnJvbSBcInNhcC9tL09iamVjdFN0YXR1c1wiO1xuaW1wb3J0IFByb2dyZXNzSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9Qcm9ncmVzc0luZGljYXRvclwiO1xuaW1wb3J0IFJhdGluZ0luZGljYXRvciBmcm9tIFwic2FwL20vUmF0aW5nSW5kaWNhdG9yXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgTWRjTGluayBmcm9tIFwic2FwL3VpL21kYy9MaW5rXCI7XG5pbXBvcnQgRmllbGRSdW50aW1lSGVscGVyIGZyb20gXCIuLi9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXJcIjtcbmltcG9ydCBEYXRhUG9pbnRGb3JtYXRPcHRpb25zIGZyb20gXCIuL0RhdGFQb2ludEZvcm1hdE9wdGlvbnNcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC5EYXRhUG9pbnRcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFQb2ludCBleHRlbmRzIEJ1aWxkaW5nQmxvY2s8Q29udHJvbD4ge1xuXHQvKipcblx0ICogUHJlZml4IGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgSUQgb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRAYXNzb2NpYXRpb24oe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0cHVibGljIGlkUHJlZml4Pzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBNZXRhZGF0YSBwYXRoIHRvIHRoZSBkYXRhUG9pbnQuXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0cHVibGljIG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgY29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmludGVybmFsLkRhdGFQb2ludEZvcm1hdE9wdGlvbnNcIiwgbXVsdGlwbGU6IGZhbHNlLCBkZWZhdWx0Q2xhc3M6IERhdGFQb2ludEZvcm1hdE9wdGlvbnMgfSlcblx0Zm9ybWF0T3B0aW9ucyE6IERhdGFQb2ludEZvcm1hdE9wdGlvbnM7XG5cblx0LyoqXG5cdCAqIFByb3BlcnR5IHRvIHNldCBhbiBleHRlcm5hbCB2YWx1ZSB0aGF0IGNvbWVzIGZyb20gYSBkaWZmZXJlbnQgbW9kZWwgdGhhbiB0aGUgb0RhdGEgbW9kZWxcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRpc0JpbmRpbmdJbmZvOiB0cnVlXG5cdH0pXG5cdHB1YmxpYyB2YWx1ZT86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJvcGVydHkgdG8gc2V0IHRoZSB2aXN1YWxpemF0aW9uIHR5cGVcblx0ICovXG5cdHByaXZhdGUgdmlzdWFsaXphdGlvbj86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJvcGVydHkgdG8gc2V0IHRoZSB2aXNpYmlsaXR5XG5cdCAqL1xuXHRwcml2YXRlIHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSB0byBzZXQgcHJvcGVydHkgaWYgdGhlIHByb3BlcnR5IGhhcyBhIFF1aWNrdmlld1xuXHQgKi9cblx0cHJpdmF0ZSBoYXNRdWlja1ZpZXcgPSBmYWxzZTtcblxuXHRwcml2YXRlIGRhdGFNb2RlbFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+O1xuXG5cdHByaXZhdGUgdmFsdWVEYXRhTW9kZWxQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxEYXRhUG9pbnQ+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcywgb3RoZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25NZXRhZGF0YUF2YWlsYWJsZSBldmVudC5cblx0ICovXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRUZW1wbGF0aW5nT2JqZWN0cygpO1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdG8gZ2V0IHRoZSB0ZW1wbGF0aW5nIG9iamVjdHMuXG5cdCAqL1xuXHRwcml2YXRlIGdldFRlbXBsYXRpbmdPYmplY3RzKCk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsRGF0YU1vZGVsUGF0aCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8RGF0YVBvaW50VHlwZT4odGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0aWYgKCFpbnRlcm5hbERhdGFNb2RlbFBhdGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IGludGVybmFsVmFsdWVEYXRhTW9kZWxQYXRoO1xuXHRcdHRoaXMudmlzaWJsZSA9IGdldFZpc2libGVFeHByZXNzaW9uKGludGVybmFsRGF0YU1vZGVsUGF0aCk7XG5cdFx0aWYgKGludGVybmFsRGF0YU1vZGVsUGF0aD8udGFyZ2V0T2JqZWN0Py5WYWx1ZT8ucGF0aCkge1xuXHRcdFx0aW50ZXJuYWxWYWx1ZURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHRcdGludGVybmFsRGF0YU1vZGVsUGF0aCxcblx0XHRcdFx0aW50ZXJuYWxEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdC5WYWx1ZS5wYXRoXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0YU1vZGVsUGF0aCA9IGludGVybmFsRGF0YU1vZGVsUGF0aDtcblx0XHR0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCA9IGludGVybmFsVmFsdWVEYXRhTW9kZWxQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRoYXQgY2FsY3VsYXRlcyB0aGUgdmlzdWFsaXphdGlvbiB0eXBlIGZvciB0aGlzIERhdGFQb2ludC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICovXG5cdHByaXZhdGUgZ2V0RGF0YVBvaW50VmlzdWFsaXphdGlvbihkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTogdm9pZCB7XG5cdFx0aWYgKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5WaXN1YWxpemF0aW9uID09PSBWaXN1YWxpemF0aW9uVHlwZS5SYXRpbmcpIHtcblx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiUmF0aW5nXCI7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVmlzdWFsaXphdGlvbiA9PT0gVmlzdWFsaXphdGlvblR5cGUuUHJvZ3Jlc3MpIHtcblx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiUHJvZ3Jlc3NcIjtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWVQcm9wZXJ0eSA9IHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoICYmIHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0XHQvL2NoZWNrIHdoZXRoZXIgdGhlIHZpc3VhbGl6YXRpb24gdHlwZSBzaG91bGQgYmUgYW4gb2JqZWN0IG51bWJlciBpbiBjYXNlIG9uZSBvZiB0aGUgaWYgY29uZGl0aW9ucyBtZXRcblx0XHR0aGlzLmhhc1F1aWNrVmlldyA9ICh2YWx1ZVByb3BlcnR5ICYmIGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMoZGF0YU1vZGVsUGF0aCwgdmFsdWVQcm9wZXJ0eSkpID8/IGZhbHNlO1xuXHRcdGlmICh0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCAmJiBnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCh0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCkpIHtcblx0XHRcdHRoaXMuaGFzUXVpY2tWaWV3ID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuaGFzUXVpY2tWaWV3ICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAoaXNQcm9wZXJ0eSh2YWx1ZVByb3BlcnR5KSAmJiAoaGFzVW5pdCh2YWx1ZVByb3BlcnR5KSB8fCBoYXNDdXJyZW5jeSh2YWx1ZVByb3BlcnR5KSkpIHtcblx0XHRcdFx0Ly8gd2Ugb25seSBzaG93IGFuIG9iamVjdE51bWJlciBpZiB0aGVyZSBpcyBubyBxdWlja3ZpZXcgYW5kIGEgdW5pdCBvciBhIGN1cnJlbmN5XG5cdFx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiT2JqZWN0TnVtYmVyXCI7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvL2RlZmF1bHQgY2FzZSB0byBoYW5kbGUgdGhpcyBhcyBvYmplY3RTdGF0dXMgdHlwZVxuXHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiT2JqZWN0U3RhdHVzXCI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY3VycmVudCBlbmFibGVtZW50IHN0YXRlIG9mIHRoZSBkYXRhUG9pbnQuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgd2l0aCB0aGUgZW5hYmxlbWVudCBzdGF0ZVxuXHQgKi9cblx0Z2V0RW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXRBY3RpdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGN1cnJlbnQgZW5hYmxlbWVudCBzdGF0ZSBvZiB0aGUgZGF0YXBvaW50LlxuXHQgKiBAcGFyYW0gZW5hYmxlZFxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBkYXRhcG9pbnQgcmVmZXJlbmNlXG5cdCAqL1xuXHRzZXRFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBDb250cm9sIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldFByb3BlcnR5KFwiYWN0aXZlXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBcInNldEVuYWJsZWQgaXNuJ3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgZmllbGQgdHlwZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgUmF0aW5nSW5kaWNhdG9yIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoXG5cdCAqIEByZXR1cm5zIFJhdGluZ0luZGljYXRvclxuXHQgKi9cblx0Y3JlYXRlUmF0aW5nSW5kaWNhdG9yKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pOiBSYXRpbmdJbmRpY2F0b3Ige1xuXHRcdGNvbnN0IGRhdGFQb2ludFRhcmdldCA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlID0gdGhpcy5nZXRUYXJnZXRWYWx1ZUJpbmRpbmcoZGF0YU1vZGVsUGF0aCk7XG5cblx0XHRjb25zdCBkYXRhUG9pbnRWYWx1ZSA9IGRhdGFQb2ludFRhcmdldD8uVmFsdWUgfHwgXCJcIjtcblx0XHRjb25zdCBwcm9wZXJ0eVR5cGUgPSBkYXRhUG9pbnRWYWx1ZT8uJHRhcmdldD8udHlwZTtcblxuXHRcdGxldCBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gXCJFZG0uRGVjaW1hbFwiICYmIGRhdGFQb2ludFRhcmdldD8uVmFsdWVGb3JtYXQpIHtcblx0XHRcdGlmIChkYXRhUG9pbnRUYXJnZXQuVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKSB7XG5cdFx0XHRcdG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA9IGRhdGFQb2ludFRhcmdldC5WYWx1ZUZvcm1hdC5OdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlID0gZ2V0VmFsdWVGb3JtYXR0ZWQodGhpcy52YWx1ZURhdGFNb2RlbFBhdGgsIGRhdGFQb2ludFZhbHVlLCBwcm9wZXJ0eVR5cGUsIG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFJhdGluZ0luZGljYXRvclxuXHRcdFx0XHRpZD17dGhpcy5pZFByZWZpeCA/IGdlbmVyYXRlKFt0aGlzLmlkUHJlZml4LCBcIlJhdGluZ0luZGljYXRvci1GaWVsZC1kaXNwbGF5XCJdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0bWF4VmFsdWU9e3RhcmdldFZhbHVlfVxuXHRcdFx0XHR2YWx1ZT17dGhpcy52YWx1ZSA/PyBjb21waWxlRXhwcmVzc2lvbih2YWx1ZSl9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMuZ2V0VG9vbHRpcFZhbHVlKGRhdGFNb2RlbFBhdGgpfVxuXHRcdFx0XHRpY29uU2l6ZT17dGhpcy5mb3JtYXRPcHRpb25zPy5pY29uU2l6ZX1cblx0XHRcdFx0Y2xhc3M9e3RoaXMuZm9ybWF0T3B0aW9ucz8uc2hvd0xhYmVscyA/PyBmYWxzZSA/IFwic2FwVWlUaW55TWFyZ2luVG9wQm90dG9tXCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGVkaXRhYmxlPVwiZmFsc2VcIlxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgUHJvZ3Jlc3NJbmRpY2F0b3IgY29udHJvbC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgUHJvZ3Jlc3NJbmRpY2F0b3Jcblx0ICovXG5cdGNyZWF0ZVByb2dyZXNzSW5kaWNhdG9yKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pOiBQcm9ncmVzc0luZGljYXRvciB7XG5cdFx0Y29uc3QgY3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0PyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGlzcGxheVZhbHVlID0gYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JEaXNwbGF5VmFsdWUoZGF0YU1vZGVsUGF0aCk7XG5cdFx0Y29uc3QgcGVyY2VudFZhbHVlID0gYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JQZXJjZW50VmFsdWUoZGF0YU1vZGVsUGF0aCk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFByb2dyZXNzSW5kaWNhdG9yXG5cdFx0XHRcdGlkPXt0aGlzLmlkUHJlZml4ID8gZ2VuZXJhdGUoW3RoaXMuaWRQcmVmaXgsIFwiUHJvZ3Jlc3NJbmRpY2F0b3ItRmllbGQtZGlzcGxheVwiXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGRpc3BsYXlWYWx1ZT17ZGlzcGxheVZhbHVlfVxuXHRcdFx0XHRwZXJjZW50VmFsdWU9e3BlcmNlbnRWYWx1ZX1cblx0XHRcdFx0c3RhdGU9e2NyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9ufVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLmdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoKX1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e3RoaXMuYXJpYUxhYmVsbGVkQnl9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBPYmplY3ROdW1iZXIgY29udHJvbC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgT2JqZWN0TnVtYmVyXG5cdCAqL1xuXHRjcmVhdGVPYmplY3ROdW1iZXIoZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPik6IE9iamVjdE51bWJlciB7XG5cdFx0Y29uc3QgY3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0PyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZW1wdHlJbmRpY2F0b3JNb2RlID0gdGhpcy5mb3JtYXRPcHRpb25zPy5zaG93RW1wdHlJbmRpY2F0b3IgPz8gZmFsc2UgPyBcIk9uXCIgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb2JqZWN0U3RhdHVzTnVtYmVyID0gYnVpbGRGaWVsZEJpbmRpbmdFeHByZXNzaW9uKGRhdGFNb2RlbFBhdGgsIHRoaXMuZm9ybWF0T3B0aW9ucywgdHJ1ZSk7XG5cdFx0Y29uc3QgbGltaXRTaG93RGVjaW1hbHMgPSB0aGlzLmdldE1hbmlmZXN0V3JhcHBlcigpPy5nZXRTYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbigpPy5hcHA/LnNob3dPbmx5VW5pdERlY2ltYWxzID09PSB0cnVlO1xuXHRcdGNvbnN0IHByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeSA9XG5cdFx0XHR0aGlzLmdldE1hbmlmZXN0V3JhcHBlcigpPy5nZXRTYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbigpPy5hcHA/LnByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeSA9PT0gdHJ1ZTtcblx0XHRjb25zdCB1bml0ID1cblx0XHRcdHRoaXMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlID09PSBcIkhpZGRlblwiXG5cdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdDogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ0ZvclVuaXRPckN1cnJlbmN5KFxuXHRcdFx0XHRcdFx0XHR0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0bGltaXRTaG93RGVjaW1hbHMsXG5cdFx0XHRcdFx0XHRcdHByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHQgICk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PE9iamVjdE51bWJlclxuXHRcdFx0XHRpZD17dGhpcy5pZFByZWZpeCA/IGdlbmVyYXRlKFt0aGlzLmlkUHJlZml4LCBcIk9iamVjdE51bWJlci1GaWVsZC1kaXNwbGF5XCJdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0c3RhdGU9e2NyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9ufVxuXHRcdFx0XHRudW1iZXI9e3RoaXMudmFsdWUgPz8gb2JqZWN0U3RhdHVzTnVtYmVyfVxuXHRcdFx0XHR1bml0PXt1bml0fVxuXHRcdFx0XHR2aXNpYmxlPXt0aGlzLnZpc2libGV9XG5cdFx0XHRcdGVtcGhhc2l6ZWQ9XCJmYWxzZVwiXG5cdFx0XHRcdGNsYXNzPXt0aGlzLmZvcm1hdE9wdGlvbnM/LmRhdGFQb2ludFN0eWxlID09PSBcImxhcmdlXCIgPyBcInNhcE1PYmplY3ROdW1iZXJMYXJnZVwiIDogdW5kZWZpbmVkfVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLmdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoKX1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtlbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZGVwZW5kZW50LlxuXHQgKiBAcmV0dXJucyBEZXBlbmRlbnQgZWl0aGVyIHdpdGggdGhlIFF1aWNrVmlldyBvciBhbiBlbXB0eSBzdHJpbmcuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZURlcGVuZGVudHMoKTogTWRjTGluayB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuaGFzUXVpY2tWaWV3KSB7XG5cdFx0XHRyZXR1cm4gbmV3IFF1aWNrVmlldyhcblx0XHRcdFx0dGhpcy52YWx1ZURhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdHRoaXMubWV0YVBhdGgsXG5cdFx0XHRcdHRoaXMuY29udGV4dFBhdGggPz8gXCJcIlxuXHRcdFx0KS5jcmVhdGVDb250ZW50KCkgYXMgTWRjTGluaztcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIE9iamVjdFN0YXR1cyBjb250cm9sLlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsUGF0aFxuXHQgKiBAcmV0dXJucyBPYmplY3RTdGF0dXNcblx0ICovXG5cdGNyZWF0ZU9iamVjdFN0YXR1cyhkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTogT2JqZWN0U3RhdHVzIHtcblx0XHRsZXQgY3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0PyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0aWYgKGNyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9uID09PSBcIk5vbmVcIiAmJiB0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCkge1xuXHRcdFx0Y3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSB0aGlzLmhhc1F1aWNrVmlldyA/IFwiSW5mb3JtYXRpb25cIiA6IFwiTm9uZVwiO1xuXHRcdH1cblx0XHRjb25zdCBlbXB0eUluZGljYXRvck1vZGUgPSB0aGlzLmZvcm1hdE9wdGlvbnM/LnNob3dFbXB0eUluZGljYXRvciA/PyBmYWxzZSA/IFwiT25cIiA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvYmplY3RTdGF0dXNUZXh0ID0gYnVpbGRGaWVsZEJpbmRpbmdFeHByZXNzaW9uKGRhdGFNb2RlbFBhdGgsIHRoaXMuZm9ybWF0T3B0aW9ucywgZmFsc2UpO1xuXHRcdGNvbnN0IGljb25FeHByZXNzaW9uID1cblx0XHRcdHRoaXMuZm9ybWF0T3B0aW9ucz8uZGF0YVBvaW50U3R5bGUgPT09IFwibGFyZ2VcIiB8fCAhZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Rcblx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0OiBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUljb24oZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QsIGRhdGFNb2RlbFBhdGgpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxPYmplY3RTdGF0dXNcblx0XHRcdFx0aWQ9e3RoaXMuaWRQcmVmaXggPyBnZW5lcmF0ZShbdGhpcy5pZFByZWZpeCwgXCJPYmplY3RTdGF0dXMtRmllbGQtZGlzcGxheVwiXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGNsYXNzPXt0aGlzLmZvcm1hdE9wdGlvbnM/LmRhdGFQb2ludFN0eWxlID09PSBcImxhcmdlXCIgPyBcInNhcE1PYmplY3RTdGF0dXNMYXJnZSBzYXBNT2JqZWN0U3RhdHVzTG9uZ1RleHRcIiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0aWNvbj17aWNvbkV4cHJlc3Npb259XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMuZ2V0VG9vbHRpcFZhbHVlKGRhdGFNb2RlbFBhdGgpfVxuXHRcdFx0XHRzdGF0ZT17Y3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb259XG5cdFx0XHRcdHRleHQ9e3RoaXMudmFsdWUgPz8gb2JqZWN0U3RhdHVzVGV4dH1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtlbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdGFjdGl2ZT17dGhpcy5oYXNRdWlja1ZpZXd9XG5cdFx0XHRcdHByZXNzPXtGaWVsZFJ1bnRpbWVIZWxwZXIucHJlc3NMaW5rIGFzIHVua25vd24gYXMgKG9FdmVudDogT2JqZWN0U3RhdHVzJFByZXNzRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXt0aGlzLmFyaWFMYWJlbGxlZEJ5fVxuXHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXt0aGlzLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0ZGVwZW5kZW50czogdGhpcy5jcmVhdGVEZXBlbmRlbnRzKClcblx0XHRcdFx0fX1cblx0XHRcdDwvT2JqZWN0U3RhdHVzPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGhlbHBlciBtZXRob2QgdG8gZ2V0IGEgcG9zc2libGUgdG9vbHRpcCB0ZXh0LlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsUGF0aFxuXHQgKiBAcmV0dXJucyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cblx0ICovXG5cdHByaXZhdGUgZ2V0VG9vbHRpcFZhbHVlKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm9cblx0XHRcdD8gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm8sIGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsUGF0aCkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgaGVscGVyIG1ldGhvZCB0byBnZXQgYSBwb3NzaWJsZSB0YXJnZXQgdmFsdWUgYmluZGluZy5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG5cdCAqL1xuXHRwcml2YXRlIGdldFRhcmdldFZhbHVlQmluZGluZyhcblx0XHRkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+XG5cdCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmcgfCBudW1iZXI+IHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LlRhcmdldFZhbHVlXG5cdFx0XHQ/IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVGFyZ2V0VmFsdWUsIGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsUGF0aCkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogT2JqZWN0U3RhdHVzIHwgT2JqZWN0TnVtYmVyIHwgUmF0aW5nSW5kaWNhdG9yIHwgUHJvZ3Jlc3NJbmRpY2F0b3IgfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5kYXRhTW9kZWxQYXRoKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHR0aGlzLmdldERhdGFQb2ludFZpc3VhbGl6YXRpb24odGhpcy5kYXRhTW9kZWxQYXRoKTtcblx0XHRzd2l0Y2ggKHRoaXMudmlzdWFsaXphdGlvbikge1xuXHRcdFx0Y2FzZSBcIlJhdGluZ1wiOiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZVJhdGluZ0luZGljYXRvcih0aGlzLmRhdGFNb2RlbFBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcIlByb2dyZXNzXCI6IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlUHJvZ3Jlc3NJbmRpY2F0b3IodGhpcy5kYXRhTW9kZWxQYXRoKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJPYmplY3ROdW1iZXJcIjoge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVPYmplY3ROdW1iZXIodGhpcy5kYXRhTW9kZWxQYXRoKTtcblx0XHRcdH1cblx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlT2JqZWN0U3RhdHVzKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZGF0YXBvaW50LlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZGF0YXBvaW50XG5cdCAqL1xuXHRnZXRWYWx1ZSgpOiBib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXRUZXh0KCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxPYmplY3ROdW1iZXI+KFwic2FwLm0uT2JqZWN0TnVtYmVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb250ZW50LmdldE51bWJlcigpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8UHJvZ3Jlc3NJbmRpY2F0b3I+KFwic2FwLm0uUHJvZ3Jlc3NJbmRpY2F0b3JcIikpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0RGlzcGxheVZhbHVlKCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxSYXRpbmdJbmRpY2F0b3I+KFwic2FwLm0uUmF0aW5nSW5kaWNhdG9yXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb250ZW50LmdldFZhbHVlKCkudG9TdHJpbmcoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5nZXRQcm9wZXJ0eShcInZhbHVlXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIHZhbHVlXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGZpZWxkIHJlZmVyZW5jZVxuXHQgKi9cblx0c2V0VmFsdWUodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBDb250cm9sIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwidmFsdWVcIiwgdmFsdWUpO1xuXHRcdGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxPYmplY3RTdGF0dXM+KFwic2FwLm0uT2JqZWN0U3RhdHVzXCIpKSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQuc2V0VGV4dCh2YWx1ZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0TnVtYmVyPihcInNhcC5tLk9iamVjdE51bWJlclwiKSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldE51bWJlcih2YWx1ZSBhcyBzdHJpbmcpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8UHJvZ3Jlc3NJbmRpY2F0b3I+KFwic2FwLm0uUHJvZ3Jlc3NJbmRpY2F0b3JcIikpIHtcblx0XHRcdExvZy5lcnJvcihcInNldFZhbHVlIGlzbid0IGltcGxlbWVudGVkIGZvciB0aGlzIGZpZWxkIHR5cGUgeWV0XCIpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8UmF0aW5nSW5kaWNhdG9yPihcInNhcC5tLlJhdGluZ0luZGljYXRvclwiKSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldFZhbHVlKHZhbHVlIGFzIG51bWJlcik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BbUNxQkEsU0FBUyxJQUFBQyxJQUFBLEdBRDdCQyxjQUFjLENBQUMsa0NBQWtDLENBQUMsRUFBQUMsS0FBQSxHQUtqREMsV0FBVyxDQUFDO0lBQ1pDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBTURDLFFBQVEsQ0FBQztJQUNURixJQUFJLEVBQUUsUUFBUTtJQUNkRyxRQUFRLEVBQUU7RUFDWCxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdERixRQUFRLENBQUM7SUFDVEYsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFLLEtBQUEsR0FHREMsV0FBVyxDQUFDO0lBQUVOLElBQUksRUFBRSwrQ0FBK0M7SUFBRU8sUUFBUSxFQUFFLEtBQUs7SUFBRUMsWUFBWSxFQUFFQztFQUF1QixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU03SFIsUUFBUSxDQUFDO0lBQ1RGLElBQUksRUFBRSxRQUFRO0lBQ2RXLGFBQWEsRUFBRTtFQUNoQixDQUFDLENBQUMsRUFBQWYsSUFBQSxDQUFBZ0IsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxjQUFBO0lBc0JGLFNBQUFuQixVQUFZb0IsVUFBc0QsRUFBRUMsTUFBeUIsRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFDOUZBLEtBQUEsR0FBQUgsY0FBQSxDQUFBSSxJQUFBLE9BQU1ILFVBQVUsRUFBRUMsTUFBTSxDQUFDO01BdEQxQjtBQUNEO0FBQ0E7TUFGQ0csMEJBQUEsQ0FBQUYsS0FBQSxjQUFBRyxXQUFBLEVBQUFILEtBQUE7TUFRQTtBQUNEO0FBQ0E7TUFGQ0UsMEJBQUEsQ0FBQUYsS0FBQSxjQUFBSSxZQUFBLEVBQUFKLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FB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
@@ -249,10 +249,19 @@ export default class DataPoint extends BuildingBlock<Control> {
249
249
  const emptyIndicatorMode = this.formatOptions?.showEmptyIndicator ?? false ? "On" : undefined;
250
250
  const objectStatusNumber = buildFieldBindingExpression(dataModelPath, this.formatOptions, true);
251
251
  const limitShowDecimals = this.getManifestWrapper()?.getSapFeManifestConfiguration()?.app?.showOnlyUnitDecimals === true;
252
+ const preserveDecimalsForCurrency =
253
+ this.getManifestWrapper()?.getSapFeManifestConfiguration()?.app?.preserveDecimalsForCurrency === true;
252
254
  const unit =
253
255
  this.formatOptions?.measureDisplayMode === "Hidden"
254
256
  ? undefined
255
- : compileExpression(UIFormatters.getBindingForUnitOrCurrency(this.valueDataModelPath, true, limitShowDecimals));
257
+ : compileExpression(
258
+ UIFormatters.getBindingForUnitOrCurrency(
259
+ this.valueDataModelPath,
260
+ true,
261
+ limitShowDecimals,
262
+ preserveDecimalsForCurrency
263
+ )
264
+ );
256
265
 
257
266
  return (
258
267
  <ObjectNumber
@@ -5,7 +5,7 @@
5
5
  sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor", "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/ListReport/FilterField", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/PropertyFormatters", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/CommonHelper", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/filter/FilterFieldHelper", "sap/fe/macros/filter/FilterFieldTemplating", "sap/fe/macros/filterBar/ExtendedSemanticDateOperators"], function (Log, BindingToolkit, BuildingBlockSupport, BuildingBlockTemplateProcessor, BuildingBlockTemplatingBase, MetaModelConverter, FilterField, StableIdHelper, DataModelPathHelper, PropertyFormatters, PropertyHelper, UIFormatters, CommonHelper, FieldHelper, FilterFieldHelper, FilterFieldTemplating, ExtendedSemanticDateOperators) {
6
6
  "use strict";
7
7
 
8
- var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;
9
9
  var _exports = {};
10
10
  var getFilterFieldDisplayFormat = FilterFieldTemplating.getFilterFieldDisplayFormat;
11
11
  var isRequiredInFilter = FilterFieldHelper.isRequiredInFilter;
@@ -75,6 +75,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/buildi
75
75
  }), _dec9 = blockAttribute({
76
76
  type: "string",
77
77
  isPublic: false
78
+ }), _dec10 = blockAttribute({
79
+ type: "string",
80
+ isPublic: false
78
81
  }), _dec(_class = (_class2 = /*#__PURE__*/function (_BuildingBlockTemplat) {
79
82
  /***********************************************
80
83
  * INTERNAL ATTRIBUTES *
@@ -97,7 +100,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/buildi
97
100
  */
98
101
 
99
102
  /**
100
- * Label for filterfield.
103
+ * Tooltip content from @Common.QuickInfo annotation
101
104
  */
102
105
 
103
106
  /**
@@ -191,6 +194,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/buildi
191
194
  * Speficies the enablement of the filter field.
192
195
  */
193
196
  _initializerDefineProperty(_this, "editMode", _descriptor8, _this);
197
+ /**
198
+ * Label for filterfield.
199
+ */
200
+ _initializerDefineProperty(_this, "label", _descriptor9, _this);
194
201
  const propertyConverted = MetaModelConverter.convertMetaModelContext(_this.property);
195
202
  const externalIdPropertyPath = getAssociatedExternalIdPropertyPath(propertyConverted);
196
203
  if (externalIdPropertyPath) {
@@ -206,8 +213,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/buildi
206
213
  _this.controlId = _this.idPrefix && generate([_this.idPrefix, originalPropertyName]);
207
214
  _this.sourcePath = getTargetObjectPath(dataModelPath);
208
215
  _this.documentRefText = dataModelPath.targetObject?.annotations.Common?.DocumentationRef?.toString();
216
+ _this.tooltip = propertyConverted?.annotations?.Common?.QuickInfo?.toString();
209
217
  _this.dataType = getDataType(propertyConvertedExternalId || propertyConverted); // data type for LR-FilterBar condition of the value help
210
- const labelTerm = propertyConverted?.annotations?.Common?.Label;
218
+ const labelTerm = _this.label ? _this.label : propertyConverted?.annotations?.Common?.Label;
211
219
  const labelExpression = labelTerm?.toString() ?? constant(propertyName);
212
220
  _this.label = compileExpression(labelExpression) || propertyName;
213
221
  _this.conditionsBinding = getConditionsBinding(dataModelPath) || "";
@@ -310,7 +318,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/buildi
310
318
  if (this.isFilterable) {
311
319
  let display;
312
320
  const companionTextAvailable = this.documentRefText === undefined || null ? false : true;
313
- const formattedResult = compileExpression(formatResult([this.documentRefText], "sap.fe.core.formatters.StandardFormatter#asArray"));
321
+ const formattedResult = compileExpression(formatResult([this.documentRefText], "._formatters.StandardFormatter#asArray"));
314
322
  try {
315
323
  const dataModelPathExternalId = this.propertyExternalId && MetaModelConverter.getInvolvedDataModelObjects(this.propertyExternalId, this.contextPath);
316
324
  display = dataModelPathExternalId ? getDisplayMode(dataModelPathExternalId) : await this.display;
@@ -339,6 +347,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/buildi
339
347
  required="${this.required}"
340
348
  operators="${this.operators}"
341
349
  placeholder="${this.placeholder}"
350
+ ${this.attr("tooltip", this.tooltip)}
342
351
  ${this.attr("editMode", this.editMode)}
343
352
  >
344
353
  ${companionTextAvailable ? xml`
@@ -403,8 +412,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/buildi
403
412
  enumerable: true,
404
413
  writable: true,
405
414
  initializer: null
415
+ }), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "label", [_dec10], {
416
+ configurable: true,
417
+ enumerable: true,
418
+ writable: true,
419
+ initializer: null
406
420
  }), _class2)) || _class);
407
421
  _exports = FilterFieldBlock;
408
422
  return _exports;
409
423
  }, false);
410
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWx0ZXJGaWVsZEJsb2NrIiwiX2RlYyIsImRlZmluZUJ1aWxkaW5nQmxvY2siLCJuYW1lIiwibmFtZXNwYWNlIiwiX2RlYzIiLCJibG9ja0F0dHJpYnV0ZSIsInR5cGUiLCJyZXF1aXJlZCIsImlzUHVibGljIiwiX2RlYzMiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0J1aWxkaW5nQmxvY2tUZW1wbGF0IiwicHJvcHMiLCJjb25maWd1cmF0aW9uIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwicHJvcGVydHlDb252ZXJ0ZWQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsInByb3BlcnR5IiwiZXh0ZXJuYWxJZFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHlQYXRoIiwicHJvcGVydHlFeHRlcm5hbElkIiwiZ2V0TW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldFBhdGgiLCJyZXBsYWNlIiwicHJvcGVydHlDb252ZXJ0ZWRFeHRlcm5hbElkIiwidW5kZWZpbmVkIiwiZGF0YU1vZGVsUGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImNvbnRleHRQYXRoIiwicHJvcGVydHlOYW1lIiwib3JpZ2luYWxQcm9wZXJ0eU5hbWUiLCJmaXhlZFZhbHVlcyIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiY29udHJvbElkIiwiaWRQcmVmaXgiLCJnZW5lcmF0ZSIsInNvdXJjZVBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiZG9jdW1lbnRSZWZUZXh0IiwidGFyZ2V0T2JqZWN0IiwiRG9jdW1lbnRhdGlvblJlZiIsInRvU3RyaW5nIiwiZGF0YVR5cGUiLCJnZXREYXRhVHlwZSIsImxhYmVsVGVybSIsIkxhYmVsIiwibGFiZWxFeHByZXNzaW9uIiwiY29uc3RhbnQiLCJsYWJlbCIsImNvbXBpbGVFeHByZXNzaW9uIiwiY29uZGl0aW9uc0JpbmRpbmciLCJnZXRDb25kaXRpb25zQmluZGluZyIsInBsYWNlaG9sZGVyIiwiZ2V0UGxhY2Vob2xkZXIiLCJwcm9wZXJ0eUtleSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJ2ZkVuYWJsZWQiLCJ2aXN1YWxGaWx0ZXIiLCJpbmNsdWRlcyIsInZmSWQiLCJ2ZlJ1bnRpbWVJZCIsInByb3BlcnR5Q29udGV4dCIsIm1vZGVsIiwidmhQcm9wZXJ0eVBhdGgiLCJGaWVsZEhlbHBlciIsInZhbHVlSGVscFByb3BlcnR5Rm9yRmlsdGVyRmllbGQiLCJmaWx0ZXJhYmxlIiwiQ29tbW9uSGVscGVyIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJwcm9wZXJ0eU9iamVjdCIsImdldE9iamVjdCIsInByb3BlcnR5SW50ZXJmYWNlIiwiY29udGV4dCIsImRpc3BsYXkiLCJnZXRGaWx0ZXJGaWVsZERpc3BsYXlGb3JtYXQiLCJpc0ZpbHRlcmFibGUiLCJtYXhDb25kaXRpb25zIiwiZ2V0TWF4Q29uZGl0aW9ucyIsImRhdGFUeXBlQ29uc3RyYWludHMiLCJjb25zdHJhaW50cyIsImRhdGFUeXBlRm9ybWF0T3B0aW9ucyIsImZvcm1hdE9wdGlvbnMiLCJpc1JlcXVpcmVkSW5GaWx0ZXIiLCJvcGVyYXRvcnMiLCJ1c2VTZW1hbnRpY0RhdGVSYW5nZSIsIkV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiYWRkRXh0ZW5kZWRGaWx0ZXJPcGVyYXRvcnMiLCJzcGxpdCIsInZoUHJvcGVydHkiLCJ2aFByb3BlcnR5T2JqZWN0IiwidmhQcm9wZXJ0eUludGVyZmFjZSIsInJlbGF0aXZlVmhQcm9wZXJ0eVBhdGgiLCJnZXRSZWxhdGl2ZVByb3BlcnR5UGF0aCIsInJlbGF0aXZlUHJvcGVydHlQYXRoIiwidmFsdWVIZWxwUHJvcGVydHkiLCJnZXRWYWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkIiwiJFR5cGUiLCJ2aElkUHJlZml4IiwidGFyZ2V0RW50aXR5VHlwZSIsIl9leHBvcnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJnZXRWaXN1YWxGaWx0ZXJDb250ZW50IiwidmlzdWFsRmlsdGVyT2JqZWN0IiwidmZYTUwiLCJpc0EiLCJTQVBfVUlfTU9ERUxfQ09OVEVYVCIsInByZXNlbnRhdGlvbkFubm90YXRpb24iLCJvdXRQYXJhbWV0ZXIiLCJpblBhcmFtZXRlcnMiLCJ2YWx1ZWxpc3RQcm9wZXJ0eSIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwibXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwic2hvd092ZXJsYXlJbml0aWFsbHkiLCJyZW5kZXJMaW5lQ2hhcnQiLCJpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsImluaXRpYWxDaGFydEJpbmRpbmdFbmFibGVkIiwieG1sIiwic3RyaW5naWZ5Q3VzdG9tRGF0YSIsImdldFRlbXBsYXRlIiwieG1sUmV0IiwiY29tcGFuaW9uVGV4dEF2YWlsYWJsZSIsImZvcm1hdHRlZFJlc3VsdCIsImZvcm1hdFJlc3VsdCIsImRhdGFNb2RlbFBhdGhFeHRlcm5hbElkIiwiZ2V0RGlzcGxheU1vZGUiLCJlcnIiLCJMb2ciLCJlcnJvciIsImF0dHIiLCJlZGl0TW9kZSIsIkJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyRmllbGQuYmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGZvcm1hdFJlc3VsdCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBibG9ja0F0dHJpYnV0ZSwgZGVmaW5lQnVpbGRpbmdCbG9jayB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IFNBUF9VSV9NT0RFTF9DT05URVhULCB4bWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRNYXhDb25kaXRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBWaXN1YWxGaWx0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHR0eXBlIERhdGFNb2RlbE9iamVjdFBhdGhcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVsYXRpdmVQcm9wZXJ0eVBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHlQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlLCB0eXBlIENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSwgdHlwZSBNZXRhTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQge1xuXHRjb25zdHJhaW50cyxcblx0Zm9ybWF0T3B0aW9ucyxcblx0Z2V0Q29uZGl0aW9uc0JpbmRpbmcsXG5cdGdldERhdGFUeXBlLFxuXHRnZXRQbGFjZWhvbGRlcixcblx0aXNSZXF1aXJlZEluRmlsdGVyXG59IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJGaWVsZEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0RmlsdGVyRmllbGREaXNwbGF5Rm9ybWF0IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlckZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IEV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9FeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9yc1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01ldGFNb2RlbFwiO1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIEZpbHRlciBGaWVsZCBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgT0RhdGEgVjQuXG4gKiA8YnI+XG4gKiBJdCBpcyBkZXNpZ25lZCB0byB3b3JrIGJhc2VkIG9uIGEgcHJvcGVydHkgY29udGV4dChwcm9wZXJ0eSkgcG9pbnRpbmcgdG8gYW4gZW50aXR5IHR5cGUgcHJvcGVydHlcbiAqIG5lZWRlZCB0byBiZSB1c2VkIGFzIGZpbHRlcmZpZWxkIGFuZCBlbnRpdHlUeXBlIGNvbnRleHQoY29udGV4dFBhdGgpIHRvIGNvbnNpZGVyIHRoZSByZWxhdGl2aXR5IG9mXG4gKiB0aGUgcHJvcGVydHlQYXRoIG9mIHRoZSBwcm9wZXJ0eSB3cnQgZW50aXR5VHlwZS5cbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6RmlsdGVyRmllbGQgaWQ9XCJNeUZpbHRlckZpZWxkXCIgcHJvcGVydHk9XCJDb21wYW55TmFtZVwiIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqIEBwcml2YXRlXG4gKi9cbkBkZWZpbmVCdWlsZGluZ0Jsb2NrKHtcblx0bmFtZTogXCJGaWx0ZXJGaWVsZFwiLFxuXHRuYW1lc3BhY2U6IFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbFwiXG59KVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsdGVyRmllbGRCbG9jayBleHRlbmRzIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSB7XG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBtZXRhZGF0YSBwYXRoIHRvIHRoZSBwcm9wZXJ0eS5cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiLFxuXHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdGlzUHVibGljOiB0cnVlXG5cdH0pXG5cdHByb3BlcnR5ITogQ29udGV4dDtcblxuXHQvKipcblx0ICogTWV0YWRhdGEgcGF0aCB0byB0aGUgZW50aXR5U2V0IG9yIG5hdmlnYXRpb25Qcm9wZXJ0eVxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIsXG5cdFx0cmVxdWlyZWQ6IHRydWUsXG5cdFx0aXNQdWJsaWM6IHRydWVcblx0fSlcblx0Y29udGV4dFBhdGghOiBDb250ZXh0O1xuXG5cdC8qKlxuXHQgKiBWaXN1YWwgZmlsdGVyIHNldHRpbmdzIGZvciBmaWx0ZXIgZmllbGQuXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIixcblx0XHRpc1B1YmxpYzogdHJ1ZVxuXHR9KVxuXHR2aXN1YWxGaWx0ZXI/OiBDb250ZXh0IHwgVmlzdWFsRmlsdGVycztcblxuXHQvKipcblx0ICogQSBwcmVmaXggdGhhdCBpcyBhZGRlZCB0byB0aGUgZ2VuZXJhdGVkIElEIG9mIHRoZSBmaWx0ZXIgZmllbGQuXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0aXNQdWJsaWM6IHRydWVcblx0fSlcblx0aWRQcmVmaXggPSBcIkZpbHRlckZpZWxkXCI7XG5cblx0LyoqXG5cdCAqIEEgcHJlZml4IHRoYXQgaXMgYWRkZWQgdG8gdGhlIGdlbmVyYXRlZCBJRCBvZiB0aGUgdmFsdWUgaGVscCB1c2VkIGZvciB0aGUgZmlsdGVyIGZpZWxkLlxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdGlzUHVibGljOiB0cnVlXG5cdH0pXG5cdHZoSWRQcmVmaXggPSBcIkZpbHRlckZpZWxkVmFsdWVIZWxwXCI7XG5cblx0LyoqXG5cdCAqIFNwZWNpZmllcyB0aGUgU2VtYXRpYyBEYXRlIFJhbmdlIG9wdGlvbiBmb3IgdGhlIGZpbHRlciBmaWVsZC5cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCIsXG5cdFx0aXNQdWJsaWM6IHRydWVcblx0fSlcblx0dXNlU2VtYW50aWNEYXRlUmFuZ2UgPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBTZXR0aW5ncyBmcm9tIHRoZSBtYW5pZmVzdC5cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRpc1B1YmxpYzogdHJ1ZVxuXHR9KVxuXHRzZXR0aW5ncyA9IFwiXCI7XG5cblx0LyoqXG5cdCAqIFNwZWZpY2llcyB0aGUgZW5hYmxlbWVudCBvZiB0aGUgZmlsdGVyIGZpZWxkLlxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdGlzUHVibGljOiBmYWxzZVxuXHR9KVxuXHRlZGl0TW9kZT86IHN0cmluZztcblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0ICogICAgICAgICAgICBJTlRFUk5BTCBBVFRSSUJVVEVTICAgICAgICAgICAgICAqXG5cdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdC8qKlxuXHQgKiBDb250cm9sIElkIGZvciBNREMgZmlsdGVyIGZpZWxkIHVzZWQgaW5zaWRlLlxuXHQgKi9cblx0Y29udHJvbElkITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSBrZXkgZm9yIGZpbHRlciBmaWVsZC5cblx0ICovXG5cdHByb3BlcnR5S2V5ITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBTb3VyY2UgYW5ub3RhdGlvbiBwYXRoIG9mIHRoZSBwcm9wZXJ0eS5cblx0ICovXG5cdHNvdXJjZVBhdGghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFNvdXJjZSBhbm5vdGF0aW9uIHBhdGggb2YgdGhlIHByb3BlcnR5LlxuXHQgKi9cblx0ZG9jdW1lbnRSZWZUZXh0Pzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBMYWJlbCBmb3IgZmlsdGVyZmllbGQuXG5cdCAqL1xuXHRsYWJlbCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGF0YSBUeXBlIG9mIHRoZSBmaWx0ZXIgZmllbGQuXG5cdCAqL1xuXHRkYXRhVHlwZSE6IHN0cmluZztcblxuXHQvKipcblx0ICogTWF4aW11bSBjb25kaXRpb25zIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBmaWx0ZXIgZmllbGQuXG5cdCAqL1xuXHRtYXhDb25kaXRpb25zITogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBWYWx1ZSBIZWxwIGlkIGFzIGFzc29jaWF0aW9uIGZvciB0aGUgZmlsdGVyIGZpZWxkLlxuXHQgKi9cblx0dmFsdWVIZWxwUHJvcGVydHk/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEJpbmRpbmcgcGF0aCBmb3IgY29uZGl0aW9ucyBhZGRlZCB0byBmaWx0ZXIgZmllbGQuXG5cdCAqL1xuXHRjb25kaXRpb25zQmluZGluZyE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGF0YXR5cGUgY29uc3RyYWludHMgb2YgdGhlIGZpbHRlciBmaWVsZC5cblx0ICovXG5cdGRhdGFUeXBlQ29uc3RyYWludHM/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERhdGF0eXBlIGZvcm1hdCBvcHRpb25zIG9mIHRoZSBmaWx0ZXIgZmllbGQuXG5cdCAqL1xuXHRkYXRhVHlwZUZvcm1hdE9wdGlvbnM/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRvIHNwZWNpZnkgZmlsdGVyIGZpZWxkIGlzIG1hbmRhdG9yeSBmb3IgZmlsdGVyaW5nLlxuXHQgKi9cblx0cmVxdWlyZWQhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBWYWxpZCBvcGVyYXRvcnMgZm9yIHRoZSBmaWx0ZXIgZmllbGQuXG5cdCAqL1xuXHRvcGVyYXRvcnM/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFZpc3VhbCBGaWx0ZXIgaWQgdG8gYmUgdXNlZC5cblx0ICovXG5cdHZmSWQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFZpc3VhbCBGaWx0ZXIgYnVpbGRpbmcgYmxvY2sgaWQgdG8gYmUgdXNlZC5cblx0ICovXG5cdHZmUnVudGltZUlkPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBWaXN1YWwgRmlsdGVyIGlzIGV4cGVjdGVkLlxuXHQgKi9cblx0dmZFbmFibGVkITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogUHJvcGVydHkgdXNlZCBpcyBmaWx0ZXJhYmxlXG5cdCAqL1xuXHRpc0ZpbHRlcmFibGUhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSBmb3IgcGxhY2Vob2xkZXJcblx0ICovXG5cdHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSB0byBob2xkIHByb21pc2UgZm9yIGRpc3BsYXlcblx0ICovXG5cdGRpc3BsYXk/OiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG5cblx0cHJvcGVydHlFeHRlcm5hbElkPzogQ29udGV4dDtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wczogUHJvcGVydGllc09mPEZpbHRlckZpZWxkQmxvY2s+LCBjb25maWd1cmF0aW9uOiB1bmtub3duLCBzZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BzLCBjb25maWd1cmF0aW9uLCBzZXR0aW5ncyk7XG5cblx0XHRjb25zdCBwcm9wZXJ0eUNvbnZlcnRlZCA9IE1ldGFNb2RlbENvbnZlcnRlci5jb252ZXJ0TWV0YU1vZGVsQ29udGV4dCh0aGlzLnByb3BlcnR5KSBhcyBQcm9wZXJ0eTtcblxuXHRcdGNvbnN0IGV4dGVybmFsSWRQcm9wZXJ0eVBhdGggPSBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5UGF0aChwcm9wZXJ0eUNvbnZlcnRlZCkgYXMgc3RyaW5nO1xuXHRcdGlmIChleHRlcm5hbElkUHJvcGVydHlQYXRoKSB7XG5cdFx0XHR0aGlzLnByb3BlcnR5RXh0ZXJuYWxJZCA9IHRoaXMucHJvcGVydHlcblx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRoaXMucHJvcGVydHkuZ2V0UGF0aCgpLnJlcGxhY2UocHJvcGVydHlDb252ZXJ0ZWQubmFtZSwgZXh0ZXJuYWxJZFByb3BlcnR5UGF0aCksIHRoaXMucHJvcGVydHkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHByb3BlcnR5Q29udmVydGVkRXh0ZXJuYWxJZCA9IHRoaXMucHJvcGVydHlFeHRlcm5hbElkXG5cdFx0XHQ/IChNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydE1ldGFNb2RlbENvbnRleHQodGhpcy5wcm9wZXJ0eUV4dGVybmFsSWQpIGFzIFByb3BlcnR5KVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBkYXRhTW9kZWxQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQcm9wZXJ0eT4odGhpcy5wcm9wZXJ0eSwgdGhpcy5jb250ZXh0UGF0aCk7XG5cblx0XHQvLyBQcm9wZXJ0eSBzZXR0aW5nc1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Q29udmVydGVkLm5hbWUsXG5cdFx0XHRvcmlnaW5hbFByb3BlcnR5TmFtZSA9IHByb3BlcnR5Q29udmVydGVkLm5hbWUsXG5cdFx0XHRmaXhlZFZhbHVlcyA9XG5cdFx0XHRcdCEhcHJvcGVydHlDb252ZXJ0ZWRFeHRlcm5hbElkPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgfHxcblx0XHRcdFx0ISFwcm9wZXJ0eUNvbnZlcnRlZC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM7XG5cblx0XHR0aGlzLmNvbnRyb2xJZCA9IHRoaXMuaWRQcmVmaXggJiYgZ2VuZXJhdGUoW3RoaXMuaWRQcmVmaXgsIG9yaWdpbmFsUHJvcGVydHlOYW1lXSk7XG5cdFx0dGhpcy5zb3VyY2VQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxQYXRoKTtcblxuXHRcdHR5cGUgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tb25fZXh0ZW5kZWQgPSBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiAmIHsgRG9jdW1lbnRhdGlvblJlZj86IHN0cmluZyB9O1xuXHRcdHRoaXMuZG9jdW1lbnRSZWZUZXh0ID0gKFxuXHRcdFx0ZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zLkNvbW1vbiBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbl9leHRlbmRlZFxuXHRcdCk/LkRvY3VtZW50YXRpb25SZWY/LnRvU3RyaW5nKCk7XG5cblx0XHR0aGlzLmRhdGFUeXBlID0gZ2V0RGF0YVR5cGUocHJvcGVydHlDb252ZXJ0ZWRFeHRlcm5hbElkIHx8IHByb3BlcnR5Q29udmVydGVkKTsgLy8gZGF0YSB0eXBlIGZvciBMUi1GaWx0ZXJCYXIgY29uZGl0aW9uIG9mIHRoZSB2YWx1ZSBoZWxwXG5cdFx0Y29uc3QgbGFiZWxUZXJtID0gcHJvcGVydHlDb252ZXJ0ZWQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsO1xuXHRcdGNvbnN0IGxhYmVsRXhwcmVzc2lvbiA9IGxhYmVsVGVybT8udG9TdHJpbmcoKSA/PyBjb25zdGFudChwcm9wZXJ0eU5hbWUpO1xuXHRcdHRoaXMubGFiZWwgPSBjb21waWxlRXhwcmVzc2lvbihsYWJlbEV4cHJlc3Npb24pIHx8IHByb3BlcnR5TmFtZTtcblx0XHR0aGlzLmNvbmRpdGlvbnNCaW5kaW5nID0gZ2V0Q29uZGl0aW9uc0JpbmRpbmcoZGF0YU1vZGVsUGF0aCkgfHwgXCJcIjtcblx0XHR0aGlzLnBsYWNlaG9sZGVyID0gZ2V0UGxhY2Vob2xkZXIocHJvcGVydHlDb252ZXJ0ZWQpO1xuXHRcdHRoaXMucHJvcGVydHlLZXkgPSBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbFBhdGgsIGZhbHNlLCB0cnVlKSB8fCBwcm9wZXJ0eU5hbWU7XG5cdFx0Ly8gVmlzdWFsIEZpbHRlciBzZXR0aW5nc1xuXHRcdHRoaXMudmZFbmFibGVkID0gISF0aGlzLnZpc3VhbEZpbHRlciAmJiAhKHRoaXMuaWRQcmVmaXggJiYgdGhpcy5pZFByZWZpeC5pbmNsdWRlcyhcIkFkYXB0YXRpb25cIikpO1xuXHRcdHRoaXMudmZJZCA9IHRoaXMudmZFbmFibGVkID8gZ2VuZXJhdGUoW3RoaXMuaWRQcmVmaXgsIHByb3BlcnR5TmFtZSwgXCJWaXN1YWxGaWx0ZXJcIl0pIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMudmZSdW50aW1lSWQgPSB0aGlzLnZmRW5hYmxlZCA/IGdlbmVyYXRlKFt0aGlzLmlkUHJlZml4LCBwcm9wZXJ0eU5hbWUsIFwiVmlzdWFsRmlsdGVyQ29udGFpbmVyXCJdKSA6IHVuZGVmaW5lZDtcblxuXHRcdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXHRcdC8vIFRPRE86IG5lZWQgdG8gY2hhbmdlIG9wZXJhdGlvbnMgZnJvbSBNZXRhTW9kZWwgdG8gQ29udmVydGVycy5cblx0XHQvLyBUaGlzIG1haW5seSBpbmNsdWRlZCBjaGFuZ2luZyBjaGFuZ2luZyBnZXRGaWx0ZXJSZXN0cmljdGlvbnMgb3BlcmF0aW9ucyBmcm9tIG1ldGFNb2RlbCB0byBjb252ZXJ0ZXJzXG5cdFx0Y29uc3QgcHJvcGVydHlDb250ZXh0ID0gdGhpcy5wcm9wZXJ0eSxcblx0XHRcdG1vZGVsOiBNZXRhTW9kZWwgPSBwcm9wZXJ0eUNvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdHZoUHJvcGVydHlQYXRoOiBzdHJpbmcgPSBGaWVsZEhlbHBlci52YWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkKHByb3BlcnR5Q29udGV4dCksXG5cdFx0XHRmaWx0ZXJhYmxlID0gQ29tbW9uSGVscGVyLmlzUHJvcGVydHlGaWx0ZXJhYmxlKHByb3BlcnR5Q29udGV4dCksXG5cdFx0XHRwcm9wZXJ0eU9iamVjdCA9IHByb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdHByb3BlcnR5SW50ZXJmYWNlID0geyBjb250ZXh0OiBwcm9wZXJ0eUNvbnRleHQgfSBhcyBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2U7XG5cblx0XHR0aGlzLmRpc3BsYXkgPSBnZXRGaWx0ZXJGaWVsZERpc3BsYXlGb3JtYXQoZGF0YU1vZGVsUGF0aCwgcHJvcGVydHlDb252ZXJ0ZWQsIHByb3BlcnR5SW50ZXJmYWNlKTtcblx0XHR0aGlzLmlzRmlsdGVyYWJsZSA9ICEoZmlsdGVyYWJsZSA9PT0gZmFsc2UgfHwgZmlsdGVyYWJsZSA9PT0gXCJmYWxzZVwiKTtcblx0XHR0aGlzLm1heENvbmRpdGlvbnMgPSBnZXRNYXhDb25kaXRpb25zKGRhdGFNb2RlbFBhdGgpO1xuXHRcdHRoaXMuZGF0YVR5cGVDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzKHByb3BlcnR5T2JqZWN0LCBwcm9wZXJ0eUludGVyZmFjZSk7XG5cdFx0dGhpcy5kYXRhVHlwZUZvcm1hdE9wdGlvbnMgPSBmb3JtYXRPcHRpb25zKHByb3BlcnR5T2JqZWN0LCBwcm9wZXJ0eUludGVyZmFjZSk7XG5cdFx0dGhpcy5yZXF1aXJlZCA9IGlzUmVxdWlyZWRJbkZpbHRlcihwcm9wZXJ0eU9iamVjdCwgcHJvcGVydHlJbnRlcmZhY2UpO1xuXHRcdHRoaXMub3BlcmF0b3JzID0gRmllbGRIZWxwZXIub3BlcmF0b3JzKFxuXHRcdFx0cHJvcGVydHlDb250ZXh0LFxuXHRcdFx0cHJvcGVydHlPYmplY3QsXG5cdFx0XHR0aGlzLnVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0dGhpcy5zZXR0aW5ncyB8fCBcIlwiLFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRQYXRoKClcblx0XHQpO1xuXHRcdGlmICh0aGlzLm9wZXJhdG9ycykge1xuXHRcdFx0Ly8gRXh0ZW5kZWQgb3BlcmF0b3JzIGFyZSBub3QgYWRkZWQgYnkgZGVmYXVsdC5cblx0XHRcdC8vIFdlIGFkZCB0aGVtIHRvIE1EQyBmaWx0ZXIgZW52aXJvbm1lbnQuXG5cdFx0XHRFeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycy5hZGRFeHRlbmRlZEZpbHRlck9wZXJhdG9ycyh0aGlzLm9wZXJhdG9ycy5zcGxpdChcIixcIikpO1xuXHRcdH1cblx0XHQvLyBWYWx1ZSBIZWxwIHNldHRpbmdzXG5cdFx0Ly8gVE9ETzogVGhpcyBuZWVkcyB0byBiZSB1cGRhdGVkIHdoZW4gVkggbWFjcm8gaXMgY29udmVydGVkIHRvIDIuMFxuXHRcdGNvbnN0IHZoUHJvcGVydHkgPSBtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh2aFByb3BlcnR5UGF0aCkgYXMgQ29udGV4dDtcblx0XHRjb25zdCB2aFByb3BlcnR5T2JqZWN0ID0gdmhQcm9wZXJ0eS5nZXRPYmplY3QoKSBhcyBNZXRhTW9kZWxDb250ZXh0LFxuXHRcdFx0dmhQcm9wZXJ0eUludGVyZmFjZSA9IHsgY29udGV4dDogdmhQcm9wZXJ0eSB9LFxuXHRcdFx0cmVsYXRpdmVWaFByb3BlcnR5UGF0aCA9IGdldFJlbGF0aXZlUHJvcGVydHlQYXRoKHZoUHJvcGVydHlPYmplY3QsIHZoUHJvcGVydHlJbnRlcmZhY2UpLFxuXHRcdFx0cmVsYXRpdmVQcm9wZXJ0eVBhdGggPSBnZXRSZWxhdGl2ZVByb3BlcnR5UGF0aChwcm9wZXJ0eU9iamVjdCwgcHJvcGVydHlJbnRlcmZhY2UpO1xuXHRcdHRoaXMudmFsdWVIZWxwUHJvcGVydHkgPSBGaWVsZEhlbHBlci5nZXRWYWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkKFxuXHRcdFx0cHJvcGVydHlDb250ZXh0LFxuXHRcdFx0cHJvcGVydHlPYmplY3QsXG5cdFx0XHRwcm9wZXJ0eU9iamVjdC4kVHlwZSxcblx0XHRcdHRoaXMudmhJZFByZWZpeCxcblx0XHRcdGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5uYW1lLFxuXHRcdFx0cmVsYXRpdmVQcm9wZXJ0eVBhdGgsXG5cdFx0XHRyZWxhdGl2ZVZoUHJvcGVydHlQYXRoLFxuXHRcdFx0Zml4ZWRWYWx1ZXMsXG5cdFx0XHR0aGlzLnVzZVNlbWFudGljRGF0ZVJhbmdlXG5cdFx0KTtcblxuXHRcdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXHR9XG5cblx0Z2V0VmlzdWFsRmlsdGVyQ29udGVudCgpOiBzdHJpbmcge1xuXHRcdGxldCB2aXN1YWxGaWx0ZXJPYmplY3QgPSB0aGlzLnZpc3VhbEZpbHRlcixcblx0XHRcdHZmWE1MID0gXCJcIjtcblx0XHRpZiAoIXRoaXMudmZFbmFibGVkIHx8ICF2aXN1YWxGaWx0ZXJPYmplY3QpIHtcblx0XHRcdHJldHVybiB2ZlhNTDtcblx0XHR9XG5cdFx0aWYgKCh2aXN1YWxGaWx0ZXJPYmplY3QgYXMgQ29udGV4dCk/LmlzQT8uKFNBUF9VSV9NT0RFTF9DT05URVhUKSkge1xuXHRcdFx0dmlzdWFsRmlsdGVyT2JqZWN0ID0gKHZpc3VhbEZpbHRlck9iamVjdCBhcyBDb250ZXh0KS5nZXRPYmplY3QoKSBhcyBWaXN1YWxGaWx0ZXJzO1xuXHRcdH1cblxuXHRcdGNvbnN0IHtcblx0XHRcdGNvbnRleHRQYXRoLFxuXHRcdFx0cHJlc2VudGF0aW9uQW5ub3RhdGlvbixcblx0XHRcdG91dFBhcmFtZXRlcixcblx0XHRcdGluUGFyYW1ldGVycyxcblx0XHRcdHZhbHVlbGlzdFByb3BlcnR5LFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQsXG5cdFx0XHRyZXF1aXJlZCxcblx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9IFtdLFxuXHRcdFx0c2hvd092ZXJsYXlJbml0aWFsbHksXG5cdFx0XHRyZW5kZXJMaW5lQ2hhcnQsXG5cdFx0XHRpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyxcblx0XHRcdGluaXRpYWxDaGFydEJpbmRpbmdFbmFibGVkXG5cdFx0fSA9IHZpc3VhbEZpbHRlck9iamVjdCBhcyBWaXN1YWxGaWx0ZXJzO1xuXHRcdHZmWE1MID0geG1sYFxuXHRcdFx0XHQ8dmlzdWFsRmlsdGVyOlZpc3VhbEZpbHRlclxuXHRcdFx0XHQgICAgeG1sbnM6dmlzdWFsRmlsdGVyPSBcInNhcC5mZS5tYWNyb3MudmlzdWFsZmlsdGVyc1wiXG5cdFx0XHRcdFx0aWQ9XCIke3RoaXMudmZSdW50aW1lSWR9XCJcblx0XHRcdFx0XHRfY29udGVudElkPVwiJHt0aGlzLnZmSWR9XCJcblx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIiR7Y29udGV4dFBhdGh9XCJcblx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7cHJlc2VudGF0aW9uQW5ub3RhdGlvbn1cIlxuXHRcdFx0XHRcdG91dFBhcmFtZXRlcj1cIiR7b3V0UGFyYW1ldGVyfVwiXG5cdFx0XHRcdFx0aW5QYXJhbWV0ZXJzPVwiJHtDb21tb25IZWxwZXIuc3RyaW5naWZ5Q3VzdG9tRGF0YShpblBhcmFtZXRlcnMpfVwiXG5cdFx0XHRcdFx0dmFsdWVsaXN0UHJvcGVydHk9XCIke3ZhbHVlbGlzdFByb3BlcnR5fVwiXG5cdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb249XCIke3NlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9ufVwiXG5cdFx0XHRcdFx0bXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkPVwiJHttdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWR9XCJcblx0XHRcdFx0XHRyZXF1aXJlZD1cIiR7cmVxdWlyZWR9XCJcblx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXM9XCIke0NvbW1vbkhlbHBlci5zdHJpbmdpZnlDdXN0b21EYXRhKHJlcXVpcmVkUHJvcGVydGllcyl9XCJcblx0XHRcdFx0XHRzaG93T3ZlcmxheUluaXRpYWxseT1cIiR7c2hvd092ZXJsYXlJbml0aWFsbHl9XCJcblx0XHRcdFx0XHRyZW5kZXJMaW5lQ2hhcnQ9XCIke3JlbmRlckxpbmVDaGFydH1cIlxuXHRcdFx0XHRcdGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPVwiJHtpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc31cIlxuXHRcdFx0XHRcdGZpbHRlckJhckVudGl0eVR5cGU9XCIke2NvbnRleHRQYXRofVwiXG5cdFx0XHRcdFx0ZW5hYmxlQ2hhcnRCaW5kaW5nPVwiJHtpbml0aWFsQ2hhcnRCaW5kaW5nRW5hYmxlZH1cIlxuXHRcdFx0XHQvPlxuXHRcdFx0YDtcblxuXHRcdHJldHVybiB2ZlhNTDtcblx0fVxuXG5cdGFzeW5jIGdldFRlbXBsYXRlKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0bGV0IHhtbFJldCA9IGBgO1xuXHRcdGlmICh0aGlzLmlzRmlsdGVyYWJsZSkge1xuXHRcdFx0bGV0IGRpc3BsYXk7XG5cdFx0XHRjb25zdCBjb21wYW5pb25UZXh0QXZhaWxhYmxlID0gdGhpcy5kb2N1bWVudFJlZlRleHQgPT09IHVuZGVmaW5lZCB8fCBudWxsID8gZmFsc2UgOiB0cnVlO1xuXHRcdFx0Y29uc3QgZm9ybWF0dGVkUmVzdWx0OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRmb3JtYXRSZXN1bHQoW3RoaXMuZG9jdW1lbnRSZWZUZXh0XSwgXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2FzQXJyYXlcIilcblx0XHRcdCk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJZCA9XG5cdFx0XHRcdFx0dGhpcy5wcm9wZXJ0eUV4dGVybmFsSWQgJiYgTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyh0aGlzLnByb3BlcnR5RXh0ZXJuYWxJZCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0XHRcdGRpc3BsYXkgPSBkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJZFxuXHRcdFx0XHRcdD8gZ2V0RGlzcGxheU1vZGUoZGF0YU1vZGVsUGF0aEV4dGVybmFsSWQgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pXG5cdFx0XHRcdFx0OiBhd2FpdCB0aGlzLmRpc3BsYXk7XG5cdFx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGBGRSA6IEZpbHRlckZpZWxkIEJ1aWxkaW5nQmxvY2sgOiBFcnJvciBmZXRjaGluZyBkaXNwbGF5IHByb3BlcnR5IGZvciAke3RoaXMuc291cmNlUGF0aH0gOiAke2Vycn1gKTtcblx0XHRcdH1cblx0XHRcdHhtbFJldCA9IHhtbGBcblx0XHRcdFx0PG1kYzpGaWx0ZXJGaWVsZFxuXHRcdFx0XHRcdHhtbG5zOm1kYz1cInNhcC51aS5tZGNcIlxuXHRcdFx0XHRcdHhtbG5zOnRlbXBsYXRlPVwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLnRlbXBsYXRlLzFcIlxuXHRcdFx0XHRcdHhtbG5zOm1hY3JvPVwic2FwLmZlLm1hY3Jvc1wiXG5cdFx0XHRcdFx0eG1sbnM6Y3VzdG9tRGF0YT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIlxuXHRcdFx0XHRcdHhtbG5zOmZpZWxkaGVscD1cInNhcC51aS5jb3JlLmZpZWxkaGVscFwiXG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTpzb3VyY2VQYXRoPVwiJHt0aGlzLnNvdXJjZVBhdGh9XCJcblx0XHRcdFx0XHRpZD1cIiR7dGhpcy5jb250cm9sSWR9XCJcblx0XHRcdFx0XHRkZWxlZ2F0ZT1cIntuYW1lOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEJhc2VEZWxlZ2F0ZScsIHBheWxvYWQ6e2lzRmlsdGVyRmllbGQ6dHJ1ZX19XCJcblx0XHRcdFx0XHRwcm9wZXJ0eUtleT1cIiR7dGhpcy5wcm9wZXJ0eUtleX1cIlxuXHRcdFx0XHRcdGxhYmVsPVwiJHt0aGlzLmxhYmVsfVwiXG5cdFx0XHRcdFx0ZGF0YVR5cGU9XCIke3RoaXMuZGF0YVR5cGV9XCJcblx0XHRcdFx0XHRkaXNwbGF5PVwiJHtkaXNwbGF5fVwiXG5cdFx0XHRcdFx0bWF4Q29uZGl0aW9ucz1cIiR7dGhpcy5tYXhDb25kaXRpb25zfVwiXG5cdFx0XHRcdFx0dmFsdWVIZWxwPVwiJHt0aGlzLnZhbHVlSGVscFByb3BlcnR5fVwiXG5cdFx0XHRcdFx0Y29uZGl0aW9ucz1cIiR7dGhpcy5jb25kaXRpb25zQmluZGluZ31cIlxuXHRcdFx0XHRcdGRhdGFUeXBlQ29uc3RyYWludHM9XCIke3RoaXMuZGF0YVR5cGVDb25zdHJhaW50c31cIlxuXHRcdFx0XHRcdGRhdGFUeXBlRm9ybWF0T3B0aW9ucz1cIiR7dGhpcy5kYXRhVHlwZUZvcm1hdE9wdGlvbnN9XCJcblx0XHRcdFx0XHRyZXF1aXJlZD1cIiR7dGhpcy5yZXF1aXJlZH1cIlxuXHRcdFx0XHRcdG9wZXJhdG9ycz1cIiR7dGhpcy5vcGVyYXRvcnN9XCJcblx0XHRcdFx0XHRwbGFjZWhvbGRlcj1cIiR7dGhpcy5wbGFjZWhvbGRlcn1cIlxuXHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiZWRpdE1vZGVcIiwgdGhpcy5lZGl0TW9kZSl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQke1xuXHRcdFx0XHRcdFx0Y29tcGFuaW9uVGV4dEF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHQ/IHhtbGBcblx0XHRcdFx0XHRcdDxtZGM6Y3VzdG9tRGF0YT5cblx0XHRcdFx0XHRcdFx0PGZpZWxkaGVscDpGaWVsZEhlbHBDdXN0b21EYXRhXG5cdFx0XHRcdFx0XHRcdFx0JHt0aGlzLmF0dHIoXCJ2YWx1ZVwiLCBmb3JtYXR0ZWRSZXN1bHQpfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC9tZGM6Y3VzdG9tRGF0YT5cblx0XHRcdFx0XHRgXG5cdFx0XHRcdFx0XHRcdDogXCJcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQke3RoaXMudmZFbmFibGVkID8gdGhpcy5nZXRWaXN1YWxGaWx0ZXJDb250ZW50KCkgOiBcIlwifVxuXHRcdFx0XHQ8L21kYzpGaWx0ZXJGaWVsZD5cblx0XHRcdGA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHhtbFJldDtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVpBLElBaUJxQkEsZ0JBQWdCLElBQUFDLElBQUEsR0FKcENDLG1CQUFtQixDQUFDO0lBQ3BCQyxJQUFJLEVBQUUsYUFBYTtJQUNuQkMsU0FBUyxFQUFFO0VBQ1osQ0FBQyxDQUFDLEVBQUFDLEtB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
424
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWx0ZXJGaWVsZEJsb2NrIiwiX2RlYyIsImRlZmluZUJ1aWxkaW5nQmxvY2siLCJuYW1lIiwibmFtZXNwYWNlIiwiX2RlYzIiLCJibG9ja0F0dHJpYnV0ZSIsInR5cGUiLCJyZXF1aXJlZCIsImlzUHVibGljIiwiX2RlYzMiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJfZGVjMTAiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0J1aWxkaW5nQmxvY2tUZW1wbGF0IiwicHJvcHMiLCJjb25maWd1cmF0aW9uIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwicHJvcGVydHlDb252ZXJ0ZWQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsInByb3BlcnR5IiwiZXh0ZXJuYWxJZFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHlQYXRoIiwicHJvcGVydHlFeHRlcm5hbElkIiwiZ2V0TW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldFBhdGgiLCJyZXBsYWNlIiwicHJvcGVydHlDb252ZXJ0ZWRFeHRlcm5hbElkIiwidW5kZWZpbmVkIiwiZGF0YU1vZGVsUGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImNvbnRleHRQYXRoIiwicHJvcGVydHlOYW1lIiwib3JpZ2luYWxQcm9wZXJ0eU5hbWUiLCJmaXhlZFZhbHVlcyIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiY29udHJvbElkIiwiaWRQcmVmaXgiLCJnZW5lcmF0ZSIsInNvdXJjZVBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiZG9jdW1lbnRSZWZUZXh0IiwidGFyZ2V0T2JqZWN0IiwiRG9jdW1lbnRhdGlvblJlZiIsInRvU3RyaW5nIiwidG9vbHRpcCIsIlF1aWNrSW5mbyIsImRhdGFUeXBlIiwiZ2V0RGF0YVR5cGUiLCJsYWJlbFRlcm0iLCJsYWJlbCIsIkxhYmVsIiwibGFiZWxFeHByZXNzaW9uIiwiY29uc3RhbnQiLCJjb21waWxlRXhwcmVzc2lvbiIsImNvbmRpdGlvbnNCaW5kaW5nIiwiZ2V0Q29uZGl0aW9uc0JpbmRpbmciLCJwbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwicHJvcGVydHlLZXkiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwidmZFbmFibGVkIiwidmlzdWFsRmlsdGVyIiwiaW5jbHVkZXMiLCJ2ZklkIiwidmZSdW50aW1lSWQiLCJwcm9wZXJ0eUNvbnRleHQiLCJtb2RlbCIsInZoUHJvcGVydHlQYXRoIiwiRmllbGRIZWxwZXIiLCJ2YWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkIiwiZmlsdGVyYWJsZSIsIkNvbW1vbkhlbHBlciIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwicHJvcGVydHlPYmplY3QiLCJnZXRPYmplY3QiLCJwcm9wZXJ0eUludGVyZmFjZSIsImNvbnRleHQiLCJkaXNwbGF5IiwiZ2V0RmlsdGVyRmllbGREaXNwbGF5Rm9ybWF0IiwiaXNGaWx0ZXJhYmxlIiwibWF4Q29uZGl0aW9ucyIsImdldE1heENvbmRpdGlvbnMiLCJkYXRhVHlwZUNvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJkYXRhVHlwZUZvcm1hdE9wdGlvbnMiLCJmb3JtYXRPcHRpb25zIiwiaXNSZXF1aXJlZEluRmlsdGVyIiwib3BlcmF0b3JzIiwidXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJFeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImFkZEV4dGVuZGVkRmlsdGVyT3BlcmF0b3JzIiwic3BsaXQiLCJ2aFByb3BlcnR5IiwidmhQcm9wZXJ0eU9iamVjdCIsInZoUHJvcGVydHlJbnRlcmZhY2UiLCJyZWxhdGl2ZVZoUHJvcGVydHlQYXRoIiwiZ2V0UmVsYXRpdmVQcm9wZXJ0eVBhdGgiLCJyZWxhdGl2ZVByb3BlcnR5UGF0aCIsInZhbHVlSGVscFByb3BlcnR5IiwiZ2V0VmFsdWVIZWxwUHJvcGVydHlGb3JGaWx0ZXJGaWVsZCIsIiRUeXBlIiwidmhJZFByZWZpeCIsInRhcmdldEVudGl0eVR5cGUiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0VmlzdWFsRmlsdGVyQ29udGVudCIsInZpc3VhbEZpbHRlck9iamVjdCIsInZmWE1MIiwiaXNBIiwiU0FQX1VJX01PREVMX0NPTlRFWFQiLCJwcmVzZW50YXRpb25Bbm5vdGF0aW9uIiwib3V0UGFyYW1ldGVyIiwiaW5QYXJhbWV0ZXJzIiwidmFsdWVsaXN0UHJvcGVydHkiLCJzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiIsIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCIsInJlcXVpcmVkUHJvcGVydGllcyIsInNob3dPdmVybGF5SW5pdGlhbGx5IiwicmVuZGVyTGluZUNoYXJ0IiwiaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJpbml0aWFsQ2hhcnRCaW5kaW5nRW5hYmxlZCIsInhtbCIsInN0cmluZ2lmeUN1c3RvbURhdGEiLCJnZXRUZW1wbGF0ZSIsInhtbFJldCIsImNvbXBhbmlvblRleHRBdmFpbGFibGUiLCJmb3JtYXR0ZWRSZXN1bHQiLCJmb3JtYXRSZXN1bHQiLCJkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJZCIsImdldERpc3BsYXlNb2RlIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJhdHRyIiwiZWRpdE1vZGUiLCJCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpbHRlckZpZWxkLmJsb2NrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vbl9FZG1cIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGNvbnN0YW50LCBmb3JtYXRSZXN1bHQgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYmxvY2tBdHRyaWJ1dGUsIGRlZmluZUJ1aWxkaW5nQmxvY2sgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgeyBTQVBfVUlfTU9ERUxfQ09OVEVYVCwgeG1sIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZVwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0TWF4Q29uZGl0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgVmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aCxcblx0dHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlbGF0aXZlUHJvcGVydHlQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSwgdHlwZSBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UsIHR5cGUgTWV0YU1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBGaWVsZEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Y29uc3RyYWludHMsXG5cdGZvcm1hdE9wdGlvbnMsXG5cdGdldENvbmRpdGlvbnNCaW5kaW5nLFxuXHRnZXREYXRhVHlwZSxcblx0Z2V0UGxhY2Vob2xkZXIsXG5cdGlzUmVxdWlyZWRJbkZpbHRlclxufSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyRmllbGRIZWxwZXJcIjtcbmltcG9ydCB7IGdldEZpbHRlckZpZWxkRGlzcGxheUZvcm1hdCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJGaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCBFeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBGaWx0ZXIgRmllbGQgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IE9EYXRhIFY0LlxuICogPGJyPlxuICogSXQgaXMgZGVzaWduZWQgdG8gd29yayBiYXNlZCBvbiBhIHByb3BlcnR5IGNvbnRleHQocHJvcGVydHkpIHBvaW50aW5nIHRvIGFuIGVudGl0eSB0eXBlIHByb3BlcnR5XG4gKiBuZWVkZWQgdG8gYmUgdXNlZCBhcyBmaWx0ZXJmaWVsZCBhbmQgZW50aXR5VHlwZSBjb250ZXh0KGNvbnRleHRQYXRoKSB0byBjb25zaWRlciB0aGUgcmVsYXRpdml0eSBvZlxuICogdGhlIHByb3BlcnR5UGF0aCBvZiB0aGUgcHJvcGVydHkgd3J0IGVudGl0eVR5cGUuXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm9zOkZpbHRlckZpZWxkIGlkPVwiTXlGaWx0ZXJGaWVsZFwiIHByb3BlcnR5PVwiQ29tcGFueU5hbWVcIiAvJmd0O1xuICogPC9wcmU+XG4gKiBAcHJpdmF0ZVxuICovXG5AZGVmaW5lQnVpbGRpbmdCbG9jayh7XG5cdG5hbWU6IFwiRmlsdGVyRmllbGRcIixcblx0bmFtZXNwYWNlOiBcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWxcIlxufSlcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbHRlckZpZWxkQmxvY2sgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2Uge1xuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgbWV0YWRhdGEgcGF0aCB0byB0aGUgcHJvcGVydHkuXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIixcblx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRpc1B1YmxpYzogdHJ1ZVxuXHR9KVxuXHRwcm9wZXJ0eSE6IENvbnRleHQ7XG5cblx0LyoqXG5cdCAqIE1ldGFkYXRhIHBhdGggdG8gdGhlIGVudGl0eVNldCBvciBuYXZpZ2F0aW9uUHJvcGVydHlcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiLFxuXHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdGlzUHVibGljOiB0cnVlXG5cdH0pXG5cdGNvbnRleHRQYXRoITogQ29udGV4dDtcblxuXHQvKipcblx0ICogVmlzdWFsIGZpbHRlciBzZXR0aW5ncyBmb3IgZmlsdGVyIGZpZWxkLlxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIsXG5cdFx0aXNQdWJsaWM6IHRydWVcblx0fSlcblx0dmlzdWFsRmlsdGVyPzogQ29udGV4dCB8IFZpc3VhbEZpbHRlcnM7XG5cblx0LyoqXG5cdCAqIEEgcHJlZml4IHRoYXQgaXMgYWRkZWQgdG8gdGhlIGdlbmVyYXRlZCBJRCBvZiB0aGUgZmlsdGVyIGZpZWxkLlxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdGlzUHVibGljOiB0cnVlXG5cdH0pXG5cdGlkUHJlZml4ID0gXCJGaWx0ZXJGaWVsZFwiO1xuXG5cdC8qKlxuXHQgKiBBIHByZWZpeCB0aGF0IGlzIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgSUQgb2YgdGhlIHZhbHVlIGhlbHAgdXNlZCBmb3IgdGhlIGZpbHRlciBmaWVsZC5cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRpc1B1YmxpYzogdHJ1ZVxuXHR9KVxuXHR2aElkUHJlZml4ID0gXCJGaWx0ZXJGaWVsZFZhbHVlSGVscFwiO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgdGhlIFNlbWF0aWMgRGF0ZSBSYW5nZSBvcHRpb24gZm9yIHRoZSBmaWx0ZXIgZmllbGQuXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiLFxuXHRcdGlzUHVibGljOiB0cnVlXG5cdH0pXG5cdHVzZVNlbWFudGljRGF0ZVJhbmdlID0gdHJ1ZTtcblxuXHQvKipcblx0ICogU2V0dGluZ3MgZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0aXNQdWJsaWM6IHRydWVcblx0fSlcblx0c2V0dGluZ3MgPSBcIlwiO1xuXG5cdC8qKlxuXHQgKiBTcGVmaWNpZXMgdGhlIGVuYWJsZW1lbnQgb2YgdGhlIGZpbHRlciBmaWVsZC5cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRpc1B1YmxpYzogZmFsc2Vcblx0fSlcblx0ZWRpdE1vZGU/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIExhYmVsIGZvciBmaWx0ZXJmaWVsZC5cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRpc1B1YmxpYzogZmFsc2Vcblx0fSlcblx0bGFiZWwhOiBzdHJpbmc7XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdCAqICAgICAgICAgICAgSU5URVJOQUwgQVRUUklCVVRFUyAgICAgICAgICAgICAgKlxuXHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHQvKipcblx0ICogQ29udHJvbCBJZCBmb3IgTURDIGZpbHRlciBmaWVsZCB1c2VkIGluc2lkZS5cblx0ICovXG5cdGNvbnRyb2xJZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogUHJvcGVydHkga2V5IGZvciBmaWx0ZXIgZmllbGQuXG5cdCAqL1xuXHRwcm9wZXJ0eUtleSE6IHN0cmluZztcblxuXHQvKipcblx0ICogU291cmNlIGFubm90YXRpb24gcGF0aCBvZiB0aGUgcHJvcGVydHkuXG5cdCAqL1xuXHRzb3VyY2VQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBTb3VyY2UgYW5ub3RhdGlvbiBwYXRoIG9mIHRoZSBwcm9wZXJ0eS5cblx0ICovXG5cdGRvY3VtZW50UmVmVGV4dD86IHN0cmluZztcblxuXHQvKipcblx0ICogVG9vbHRpcCBjb250ZW50IGZyb20gQENvbW1vbi5RdWlja0luZm8gYW5ub3RhdGlvblxuXHQgKi9cblx0dG9vbHRpcD86IHN0cmluZztcblxuXHQvKipcblx0ICogRGF0YSBUeXBlIG9mIHRoZSBmaWx0ZXIgZmllbGQuXG5cdCAqL1xuXHRkYXRhVHlwZSE6IHN0cmluZztcblxuXHQvKipcblx0ICogTWF4aW11bSBjb25kaXRpb25zIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBmaWx0ZXIgZmllbGQuXG5cdCAqL1xuXHRtYXhDb25kaXRpb25zITogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBWYWx1ZSBIZWxwIGlkIGFzIGFzc29jaWF0aW9uIGZvciB0aGUgZmlsdGVyIGZpZWxkLlxuXHQgKi9cblx0dmFsdWVIZWxwUHJvcGVydHk/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEJpbmRpbmcgcGF0aCBmb3IgY29uZGl0aW9ucyBhZGRlZCB0byBmaWx0ZXIgZmllbGQuXG5cdCAqL1xuXHRjb25kaXRpb25zQmluZGluZyE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGF0YXR5cGUgY29uc3RyYWludHMgb2YgdGhlIGZpbHRlciBmaWVsZC5cblx0ICovXG5cdGRhdGFUeXBlQ29uc3RyYWludHM/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERhdGF0eXBlIGZvcm1hdCBvcHRpb25zIG9mIHRoZSBmaWx0ZXIgZmllbGQuXG5cdCAqL1xuXHRkYXRhVHlwZUZvcm1hdE9wdGlvbnM/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRvIHNwZWNpZnkgZmlsdGVyIGZpZWxkIGlzIG1hbmRhdG9yeSBmb3IgZmlsdGVyaW5nLlxuXHQgKi9cblx0cmVxdWlyZWQhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBWYWxpZCBvcGVyYXRvcnMgZm9yIHRoZSBmaWx0ZXIgZmllbGQuXG5cdCAqL1xuXHRvcGVyYXRvcnM/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFZpc3VhbCBGaWx0ZXIgaWQgdG8gYmUgdXNlZC5cblx0ICovXG5cdHZmSWQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFZpc3VhbCBGaWx0ZXIgYnVpbGRpbmcgYmxvY2sgaWQgdG8gYmUgdXNlZC5cblx0ICovXG5cdHZmUnVudGltZUlkPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBWaXN1YWwgRmlsdGVyIGlzIGV4cGVjdGVkLlxuXHQgKi9cblx0dmZFbmFibGVkITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogUHJvcGVydHkgdXNlZCBpcyBmaWx0ZXJhYmxlXG5cdCAqL1xuXHRpc0ZpbHRlcmFibGUhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSBmb3IgcGxhY2Vob2xkZXJcblx0ICovXG5cdHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSB0byBob2xkIHByb21pc2UgZm9yIGRpc3BsYXlcblx0ICovXG5cdGRpc3BsYXk/OiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG5cblx0cHJvcGVydHlFeHRlcm5hbElkPzogQ29udGV4dDtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wczogUHJvcGVydGllc09mPEZpbHRlckZpZWxkQmxvY2s+LCBjb25maWd1cmF0aW9uOiB1bmtub3duLCBzZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BzLCBjb25maWd1cmF0aW9uLCBzZXR0aW5ncyk7XG5cblx0XHRjb25zdCBwcm9wZXJ0eUNvbnZlcnRlZCA9IE1ldGFNb2RlbENvbnZlcnRlci5jb252ZXJ0TWV0YU1vZGVsQ29udGV4dCh0aGlzLnByb3BlcnR5KSBhcyBQcm9wZXJ0eTtcblxuXHRcdGNvbnN0IGV4dGVybmFsSWRQcm9wZXJ0eVBhdGggPSBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5UGF0aChwcm9wZXJ0eUNvbnZlcnRlZCkgYXMgc3RyaW5nO1xuXHRcdGlmIChleHRlcm5hbElkUHJvcGVydHlQYXRoKSB7XG5cdFx0XHR0aGlzLnByb3BlcnR5RXh0ZXJuYWxJZCA9IHRoaXMucHJvcGVydHlcblx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRoaXMucHJvcGVydHkuZ2V0UGF0aCgpLnJlcGxhY2UocHJvcGVydHlDb252ZXJ0ZWQubmFtZSwgZXh0ZXJuYWxJZFByb3BlcnR5UGF0aCksIHRoaXMucHJvcGVydHkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHByb3BlcnR5Q29udmVydGVkRXh0ZXJuYWxJZCA9IHRoaXMucHJvcGVydHlFeHRlcm5hbElkXG5cdFx0XHQ/IChNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydE1ldGFNb2RlbENvbnRleHQodGhpcy5wcm9wZXJ0eUV4dGVybmFsSWQpIGFzIFByb3BlcnR5KVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBkYXRhTW9kZWxQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQcm9wZXJ0eT4odGhpcy5wcm9wZXJ0eSwgdGhpcy5jb250ZXh0UGF0aCk7XG5cblx0XHQvLyBQcm9wZXJ0eSBzZXR0aW5nc1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Q29udmVydGVkLm5hbWUsXG5cdFx0XHRvcmlnaW5hbFByb3BlcnR5TmFtZSA9IHByb3BlcnR5Q29udmVydGVkLm5hbWUsXG5cdFx0XHRmaXhlZFZhbHVlcyA9XG5cdFx0XHRcdCEhcHJvcGVydHlDb252ZXJ0ZWRFeHRlcm5hbElkPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgfHxcblx0XHRcdFx0ISFwcm9wZXJ0eUNvbnZlcnRlZC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM7XG5cblx0XHR0aGlzLmNvbnRyb2xJZCA9IHRoaXMuaWRQcmVmaXggJiYgZ2VuZXJhdGUoW3RoaXMuaWRQcmVmaXgsIG9yaWdpbmFsUHJvcGVydHlOYW1lXSk7XG5cdFx0dGhpcy5zb3VyY2VQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxQYXRoKTtcblxuXHRcdHR5cGUgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tb25fZXh0ZW5kZWQgPSBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiAmIHsgRG9jdW1lbnRhdGlvblJlZj86IHN0cmluZyB9O1xuXHRcdHRoaXMuZG9jdW1lbnRSZWZUZXh0ID0gKFxuXHRcdFx0ZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zLkNvbW1vbiBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbl9leHRlbmRlZFxuXHRcdCk/LkRvY3VtZW50YXRpb25SZWY/LnRvU3RyaW5nKCk7XG5cblx0XHR0aGlzLnRvb2x0aXAgPSBwcm9wZXJ0eUNvbnZlcnRlZD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvPy50b1N0cmluZygpO1xuXG5cdFx0dGhpcy5kYXRhVHlwZSA9IGdldERhdGFUeXBlKHByb3BlcnR5Q29udmVydGVkRXh0ZXJuYWxJZCB8fCBwcm9wZXJ0eUNvbnZlcnRlZCk7IC8vIGRhdGEgdHlwZSBmb3IgTFItRmlsdGVyQmFyIGNvbmRpdGlvbiBvZiB0aGUgdmFsdWUgaGVscFxuXHRcdGNvbnN0IGxhYmVsVGVybSA9IHRoaXMubGFiZWwgPyB0aGlzLmxhYmVsIDogcHJvcGVydHlDb252ZXJ0ZWQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsO1xuXHRcdGNvbnN0IGxhYmVsRXhwcmVzc2lvbiA9IGxhYmVsVGVybT8udG9TdHJpbmcoKSA/PyBjb25zdGFudChwcm9wZXJ0eU5hbWUpO1xuXHRcdHRoaXMubGFiZWwgPSBjb21waWxlRXhwcmVzc2lvbihsYWJlbEV4cHJlc3Npb24pIHx8IHByb3BlcnR5TmFtZTtcblx0XHR0aGlzLmNvbmRpdGlvbnNCaW5kaW5nID0gZ2V0Q29uZGl0aW9uc0JpbmRpbmcoZGF0YU1vZGVsUGF0aCkgfHwgXCJcIjtcblx0XHR0aGlzLnBsYWNlaG9sZGVyID0gZ2V0UGxhY2Vob2xkZXIocHJvcGVydHlDb252ZXJ0ZWQpO1xuXHRcdHRoaXMucHJvcGVydHlLZXkgPSBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbFBhdGgsIGZhbHNlLCB0cnVlKSB8fCBwcm9wZXJ0eU5hbWU7XG5cdFx0Ly8gVmlzdWFsIEZpbHRlciBzZXR0aW5nc1xuXHRcdHRoaXMudmZFbmFibGVkID0gISF0aGlzLnZpc3VhbEZpbHRlciAmJiAhKHRoaXMuaWRQcmVmaXggJiYgdGhpcy5pZFByZWZpeC5pbmNsdWRlcyhcIkFkYXB0YXRpb25cIikpO1xuXHRcdHRoaXMudmZJZCA9IHRoaXMudmZFbmFibGVkID8gZ2VuZXJhdGUoW3RoaXMuaWRQcmVmaXgsIHByb3BlcnR5TmFtZSwgXCJWaXN1YWxGaWx0ZXJcIl0pIDogdW5kZWZpbmVkO1xuXHRcdHRoaXMudmZSdW50aW1lSWQgPSB0aGlzLnZmRW5hYmxlZCA/IGdlbmVyYXRlKFt0aGlzLmlkUHJlZml4LCBwcm9wZXJ0eU5hbWUsIFwiVmlzdWFsRmlsdGVyQ29udGFpbmVyXCJdKSA6IHVuZGVmaW5lZDtcblxuXHRcdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXHRcdC8vIFRPRE86IG5lZWQgdG8gY2hhbmdlIG9wZXJhdGlvbnMgZnJvbSBNZXRhTW9kZWwgdG8gQ29udmVydGVycy5cblx0XHQvLyBUaGlzIG1haW5seSBpbmNsdWRlZCBjaGFuZ2luZyBjaGFuZ2luZyBnZXRGaWx0ZXJSZXN0cmljdGlvbnMgb3BlcmF0aW9ucyBmcm9tIG1ldGFNb2RlbCB0byBjb252ZXJ0ZXJzXG5cdFx0Y29uc3QgcHJvcGVydHlDb250ZXh0ID0gdGhpcy5wcm9wZXJ0eSxcblx0XHRcdG1vZGVsOiBNZXRhTW9kZWwgPSBwcm9wZXJ0eUNvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdHZoUHJvcGVydHlQYXRoOiBzdHJpbmcgPSBGaWVsZEhlbHBlci52YWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkKHByb3BlcnR5Q29udGV4dCksXG5cdFx0XHRmaWx0ZXJhYmxlID0gQ29tbW9uSGVscGVyLmlzUHJvcGVydHlGaWx0ZXJhYmxlKHByb3BlcnR5Q29udGV4dCksXG5cdFx0XHRwcm9wZXJ0eU9iamVjdCA9IHByb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdHByb3BlcnR5SW50ZXJmYWNlID0geyBjb250ZXh0OiBwcm9wZXJ0eUNvbnRleHQgfSBhcyBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2U7XG5cblx0XHR0aGlzLmRpc3BsYXkgPSBnZXRGaWx0ZXJGaWVsZERpc3BsYXlGb3JtYXQoZGF0YU1vZGVsUGF0aCwgcHJvcGVydHlDb252ZXJ0ZWQsIHByb3BlcnR5SW50ZXJmYWNlKTtcblx0XHR0aGlzLmlzRmlsdGVyYWJsZSA9ICEoZmlsdGVyYWJsZSA9PT0gZmFsc2UgfHwgZmlsdGVyYWJsZSA9PT0gXCJmYWxzZVwiKTtcblx0XHR0aGlzLm1heENvbmRpdGlvbnMgPSBnZXRNYXhDb25kaXRpb25zKGRhdGFNb2RlbFBhdGgpO1xuXHRcdHRoaXMuZGF0YVR5cGVDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzKHByb3BlcnR5T2JqZWN0LCBwcm9wZXJ0eUludGVyZmFjZSk7XG5cdFx0dGhpcy5kYXRhVHlwZUZvcm1hdE9wdGlvbnMgPSBmb3JtYXRPcHRpb25zKHByb3BlcnR5T2JqZWN0LCBwcm9wZXJ0eUludGVyZmFjZSk7XG5cdFx0dGhpcy5yZXF1aXJlZCA9IGlzUmVxdWlyZWRJbkZpbHRlcihwcm9wZXJ0eU9iamVjdCwgcHJvcGVydHlJbnRlcmZhY2UpO1xuXHRcdHRoaXMub3BlcmF0b3JzID0gRmllbGRIZWxwZXIub3BlcmF0b3JzKFxuXHRcdFx0cHJvcGVydHlDb250ZXh0LFxuXHRcdFx0cHJvcGVydHlPYmplY3QsXG5cdFx0XHR0aGlzLnVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0dGhpcy5zZXR0aW5ncyB8fCBcIlwiLFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRQYXRoKClcblx0XHQpO1xuXHRcdGlmICh0aGlzLm9wZXJhdG9ycykge1xuXHRcdFx0Ly8gRXh0ZW5kZWQgb3BlcmF0b3JzIGFyZSBub3QgYWRkZWQgYnkgZGVmYXVsdC5cblx0XHRcdC8vIFdlIGFkZCB0aGVtIHRvIE1EQyBmaWx0ZXIgZW52aXJvbm1lbnQuXG5cdFx0XHRFeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycy5hZGRFeHRlbmRlZEZpbHRlck9wZXJhdG9ycyh0aGlzLm9wZXJhdG9ycy5zcGxpdChcIixcIikpO1xuXHRcdH1cblx0XHQvLyBWYWx1ZSBIZWxwIHNldHRpbmdzXG5cdFx0Ly8gVE9ETzogVGhpcyBuZWVkcyB0byBiZSB1cGRhdGVkIHdoZW4gVkggbWFjcm8gaXMgY29udmVydGVkIHRvIDIuMFxuXHRcdGNvbnN0IHZoUHJvcGVydHkgPSBtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh2aFByb3BlcnR5UGF0aCkgYXMgQ29udGV4dDtcblx0XHRjb25zdCB2aFByb3BlcnR5T2JqZWN0ID0gdmhQcm9wZXJ0eS5nZXRPYmplY3QoKSBhcyBNZXRhTW9kZWxDb250ZXh0LFxuXHRcdFx0dmhQcm9wZXJ0eUludGVyZmFjZSA9IHsgY29udGV4dDogdmhQcm9wZXJ0eSB9LFxuXHRcdFx0cmVsYXRpdmVWaFByb3BlcnR5UGF0aCA9IGdldFJlbGF0aXZlUHJvcGVydHlQYXRoKHZoUHJvcGVydHlPYmplY3QsIHZoUHJvcGVydHlJbnRlcmZhY2UpLFxuXHRcdFx0cmVsYXRpdmVQcm9wZXJ0eVBhdGggPSBnZXRSZWxhdGl2ZVByb3BlcnR5UGF0aChwcm9wZXJ0eU9iamVjdCwgcHJvcGVydHlJbnRlcmZhY2UpO1xuXHRcdHRoaXMudmFsdWVIZWxwUHJvcGVydHkgPSBGaWVsZEhlbHBlci5nZXRWYWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkKFxuXHRcdFx0cHJvcGVydHlDb250ZXh0LFxuXHRcdFx0cHJvcGVydHlPYmplY3QsXG5cdFx0XHRwcm9wZXJ0eU9iamVjdC4kVHlwZSxcblx0XHRcdHRoaXMudmhJZFByZWZpeCxcblx0XHRcdGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5uYW1lLFxuXHRcdFx0cmVsYXRpdmVQcm9wZXJ0eVBhdGgsXG5cdFx0XHRyZWxhdGl2ZVZoUHJvcGVydHlQYXRoLFxuXHRcdFx0Zml4ZWRWYWx1ZXMsXG5cdFx0XHR0aGlzLnVzZVNlbWFudGljRGF0ZVJhbmdlXG5cdFx0KTtcblxuXHRcdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXHR9XG5cblx0Z2V0VmlzdWFsRmlsdGVyQ29udGVudCgpOiBzdHJpbmcge1xuXHRcdGxldCB2aXN1YWxGaWx0ZXJPYmplY3QgPSB0aGlzLnZpc3VhbEZpbHRlcixcblx0XHRcdHZmWE1MID0gXCJcIjtcblx0XHRpZiAoIXRoaXMudmZFbmFibGVkIHx8ICF2aXN1YWxGaWx0ZXJPYmplY3QpIHtcblx0XHRcdHJldHVybiB2ZlhNTDtcblx0XHR9XG5cdFx0aWYgKCh2aXN1YWxGaWx0ZXJPYmplY3QgYXMgQ29udGV4dCk/LmlzQT8uKFNBUF9VSV9NT0RFTF9DT05URVhUKSkge1xuXHRcdFx0dmlzdWFsRmlsdGVyT2JqZWN0ID0gKHZpc3VhbEZpbHRlck9iamVjdCBhcyBDb250ZXh0KS5nZXRPYmplY3QoKSBhcyBWaXN1YWxGaWx0ZXJzO1xuXHRcdH1cblxuXHRcdGNvbnN0IHtcblx0XHRcdGNvbnRleHRQYXRoLFxuXHRcdFx0cHJlc2VudGF0aW9uQW5ub3RhdGlvbixcblx0XHRcdG91dFBhcmFtZXRlcixcblx0XHRcdGluUGFyYW1ldGVycyxcblx0XHRcdHZhbHVlbGlzdFByb3BlcnR5LFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQsXG5cdFx0XHRyZXF1aXJlZCxcblx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9IFtdLFxuXHRcdFx0c2hvd092ZXJsYXlJbml0aWFsbHksXG5cdFx0XHRyZW5kZXJMaW5lQ2hhcnQsXG5cdFx0XHRpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyxcblx0XHRcdGluaXRpYWxDaGFydEJpbmRpbmdFbmFibGVkXG5cdFx0fSA9IHZpc3VhbEZpbHRlck9iamVjdCBhcyBWaXN1YWxGaWx0ZXJzO1xuXHRcdHZmWE1MID0geG1sYFxuXHRcdFx0XHQ8dmlzdWFsRmlsdGVyOlZpc3VhbEZpbHRlclxuXHRcdFx0XHQgICAgeG1sbnM6dmlzdWFsRmlsdGVyPSBcInNhcC5mZS5tYWNyb3MudmlzdWFsZmlsdGVyc1wiXG5cdFx0XHRcdFx0aWQ9XCIke3RoaXMudmZSdW50aW1lSWR9XCJcblx0XHRcdFx0XHRfY29udGVudElkPVwiJHt0aGlzLnZmSWR9XCJcblx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIiR7Y29udGV4dFBhdGh9XCJcblx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7cHJlc2VudGF0aW9uQW5ub3RhdGlvbn1cIlxuXHRcdFx0XHRcdG91dFBhcmFtZXRlcj1cIiR7b3V0UGFyYW1ldGVyfVwiXG5cdFx0XHRcdFx0aW5QYXJhbWV0ZXJzPVwiJHtDb21tb25IZWxwZXIuc3RyaW5naWZ5Q3VzdG9tRGF0YShpblBhcmFtZXRlcnMpfVwiXG5cdFx0XHRcdFx0dmFsdWVsaXN0UHJvcGVydHk9XCIke3ZhbHVlbGlzdFByb3BlcnR5fVwiXG5cdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb249XCIke3NlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9ufVwiXG5cdFx0XHRcdFx0bXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkPVwiJHttdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWR9XCJcblx0XHRcdFx0XHRyZXF1aXJlZD1cIiR7cmVxdWlyZWR9XCJcblx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXM9XCIke0NvbW1vbkhlbHBlci5zdHJpbmdpZnlDdXN0b21EYXRhKHJlcXVpcmVkUHJvcGVydGllcyl9XCJcblx0XHRcdFx0XHRzaG93T3ZlcmxheUluaXRpYWxseT1cIiR7c2hvd092ZXJsYXlJbml0aWFsbHl9XCJcblx0XHRcdFx0XHRyZW5kZXJMaW5lQ2hhcnQ9XCIke3JlbmRlckxpbmVDaGFydH1cIlxuXHRcdFx0XHRcdGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPVwiJHtpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc31cIlxuXHRcdFx0XHRcdGZpbHRlckJhckVudGl0eVR5cGU9XCIke2NvbnRleHRQYXRofVwiXG5cdFx0XHRcdFx0ZW5hYmxlQ2hhcnRCaW5kaW5nPVwiJHtpbml0aWFsQ2hhcnRCaW5kaW5nRW5hYmxlZH1cIlxuXHRcdFx0XHQvPlxuXHRcdFx0YDtcblxuXHRcdHJldHVybiB2ZlhNTDtcblx0fVxuXG5cdGFzeW5jIGdldFRlbXBsYXRlKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0bGV0IHhtbFJldCA9IGBgO1xuXHRcdGlmICh0aGlzLmlzRmlsdGVyYWJsZSkge1xuXHRcdFx0bGV0IGRpc3BsYXk7XG5cdFx0XHRjb25zdCBjb21wYW5pb25UZXh0QXZhaWxhYmxlID0gdGhpcy5kb2N1bWVudFJlZlRleHQgPT09IHVuZGVmaW5lZCB8fCBudWxsID8gZmFsc2UgOiB0cnVlO1xuXHRcdFx0Y29uc3QgZm9ybWF0dGVkUmVzdWx0OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRmb3JtYXRSZXN1bHQoW3RoaXMuZG9jdW1lbnRSZWZUZXh0XSwgXCIuX2Zvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIjYXNBcnJheVwiKVxuXHRcdFx0KTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGRhdGFNb2RlbFBhdGhFeHRlcm5hbElkID1cblx0XHRcdFx0XHR0aGlzLnByb3BlcnR5RXh0ZXJuYWxJZCAmJiBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKHRoaXMucHJvcGVydHlFeHRlcm5hbElkLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0XHRcdFx0ZGlzcGxheSA9IGRhdGFNb2RlbFBhdGhFeHRlcm5hbElkXG5cdFx0XHRcdFx0PyBnZXREaXNwbGF5TW9kZShkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJZCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pilcblx0XHRcdFx0XHQ6IGF3YWl0IHRoaXMuZGlzcGxheTtcblx0XHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEZFIDogRmlsdGVyRmllbGQgQnVpbGRpbmdCbG9jayA6IEVycm9yIGZldGNoaW5nIGRpc3BsYXkgcHJvcGVydHkgZm9yICR7dGhpcy5zb3VyY2VQYXRofSA6ICR7ZXJyfWApO1xuXHRcdFx0fVxuXHRcdFx0eG1sUmV0ID0geG1sYFxuXHRcdFx0XHQ8bWRjOkZpbHRlckZpZWxkXG5cdFx0XHRcdFx0eG1sbnM6bWRjPVwic2FwLnVpLm1kY1wiXG5cdFx0XHRcdFx0eG1sbnM6dGVtcGxhdGU9XCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUudGVtcGxhdGUvMVwiXG5cdFx0XHRcdFx0eG1sbnM6bWFjcm89XCJzYXAuZmUubWFjcm9zXCJcblx0XHRcdFx0XHR4bWxuczpjdXN0b21EYXRhPVwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiXG5cdFx0XHRcdFx0eG1sbnM6ZmllbGRoZWxwPVwic2FwLnVpLmNvcmUuZmllbGRoZWxwXCJcblx0XHRcdFx0XHRjdXN0b21EYXRhOnNvdXJjZVBhdGg9XCIke3RoaXMuc291cmNlUGF0aH1cIlxuXHRcdFx0XHRcdGlkPVwiJHt0aGlzLmNvbnRyb2xJZH1cIlxuXHRcdFx0XHRcdGRlbGVnYXRlPVwie25hbWU6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkQmFzZURlbGVnYXRlJywgcGF5bG9hZDp7aXNGaWx0ZXJGaWVsZDp0cnVlfX1cIlxuXHRcdFx0XHRcdHByb3BlcnR5S2V5PVwiJHt0aGlzLnByb3BlcnR5S2V5fVwiXG5cdFx0XHRcdFx0bGFiZWw9XCIke3RoaXMubGFiZWx9XCJcblx0XHRcdFx0XHRkYXRhVHlwZT1cIiR7dGhpcy5kYXRhVHlwZX1cIlxuXHRcdFx0XHRcdGRpc3BsYXk9XCIke2Rpc3BsYXl9XCJcblx0XHRcdFx0XHRtYXhDb25kaXRpb25zPVwiJHt0aGlzLm1heENvbmRpdGlvbnN9XCJcblx0XHRcdFx0XHR2YWx1ZUhlbHA9XCIke3RoaXMudmFsdWVIZWxwUHJvcGVydHl9XCJcblx0XHRcdFx0XHRjb25kaXRpb25zPVwiJHt0aGlzLmNvbmRpdGlvbnNCaW5kaW5nfVwiXG5cdFx0XHRcdFx0ZGF0YVR5cGVDb25zdHJhaW50cz1cIiR7dGhpcy5kYXRhVHlwZUNvbnN0cmFpbnRzfVwiXG5cdFx0XHRcdFx0ZGF0YVR5cGVGb3JtYXRPcHRpb25zPVwiJHt0aGlzLmRhdGFUeXBlRm9ybWF0T3B0aW9uc31cIlxuXHRcdFx0XHRcdHJlcXVpcmVkPVwiJHt0aGlzLnJlcXVpcmVkfVwiXG5cdFx0XHRcdFx0b3BlcmF0b3JzPVwiJHt0aGlzLm9wZXJhdG9yc31cIlxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyPVwiJHt0aGlzLnBsYWNlaG9sZGVyfVwiXG5cdFx0XHRcdFx0JHt0aGlzLmF0dHIoXCJ0b29sdGlwXCIsIHRoaXMudG9vbHRpcCl9XG5cdFx0XHRcdFx0JHt0aGlzLmF0dHIoXCJlZGl0TW9kZVwiLCB0aGlzLmVkaXRNb2RlKX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdCR7XG5cdFx0XHRcdFx0XHRjb21wYW5pb25UZXh0QXZhaWxhYmxlXG5cdFx0XHRcdFx0XHRcdD8geG1sYFxuXHRcdFx0XHRcdFx0PG1kYzpjdXN0b21EYXRhPlxuXHRcdFx0XHRcdFx0XHQ8ZmllbGRoZWxwOkZpZWxkSGVscEN1c3RvbURhdGFcblx0XHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcInZhbHVlXCIsIGZvcm1hdHRlZFJlc3VsdCl9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L21kYzpjdXN0b21EYXRhPlxuXHRcdFx0XHRcdGBcblx0XHRcdFx0XHRcdFx0OiBcIlwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCR7dGhpcy52ZkVuYWJsZWQgPyB0aGlzLmdldFZpc3VhbEZpbHRlckNvbnRlbnQoKSA6IFwiXCJ9XG5cdFx0XHRcdDwvbWRjOkZpbHRlckZpZWxkPlxuXHRcdFx0YDtcblx0XHR9XG5cblx0XHRyZXR1cm4geG1sUmV0O1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBcUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBWkEsSUFpQnFCQSxnQkFBZ0IsSUFBQUMsSUFBQSxHQUpwQ0MsbUJBQW1CLENBQUM7SUFDcEJDLElBQUksRUFBRSxhQUFhO0lBQ25CQyxTQUFTLEVBQUU7RUFDWixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUtBQyxjQUFjLENBQUM7SUFDZkMsSUFBSSxFQUFFLHNCQUFzQjtJQUM1QkMsUUFBUSxFQUFFLElBQUk7SUFDZEMsUUFBUSxFQUFFO0VBQ1gsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FNREosY0FBYyxDQUFDO0lBQ2ZDLElBQUksRUFBRSxzQkFBc0I7SUFDNUJDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLFFBQVEsRUFBRTtFQUNYLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBTURMLGNBQWMsQ0FBQztJQUNmQyxJQUFJLEVBQUUsc0JBQXNCO0lBQzVCRSxRQUFRLEVBQUU7RUFDWCxDQUFDLENBQUMsRUFBQUcsS0FBQSxHQU1ETixjQUFjLENBQUM7SUFDZkMsSUFBSSxFQUFFLFFBQVE7SUFDZEUsUUFBUSxFQUFFO0VBQ1gsQ0FBQyxDQUFDLEVBQUFJLEtBQUEsR0FNRFAsY0FBYyxDQUFDO0lBQ2ZDLElBQUksRUFBRSxRQUFRO0lBQ2RFLFFBQVEsRUFBRTtFQUNYLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBTURSLGNBQWMsQ0FBQztJQUNmQyxJQUFJLEVBQUUsU0FBUztJQUNmRSxRQUFRLEVBQUU7RUFDWCxDQUFDLENBQUMsRUFBQU0sS0FBQSxHQU1EVCxjQUFj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
@@ -127,6 +127,15 @@ export default class FilterFieldBlock extends BuildingBlockTemplatingBase {
127
127
  })
128
128
  editMode?: string;
129
129
 
130
+ /**
131
+ * Label for filterfield.
132
+ */
133
+ @blockAttribute({
134
+ type: "string",
135
+ isPublic: false
136
+ })
137
+ label!: string;
138
+
130
139
  /***********************************************
131
140
  * INTERNAL ATTRIBUTES *
132
141
  **********************************************/
@@ -152,9 +161,9 @@ export default class FilterFieldBlock extends BuildingBlockTemplatingBase {
152
161
  documentRefText?: string;
153
162
 
154
163
  /**
155
- * Label for filterfield.
164
+ * Tooltip content from @Common.QuickInfo annotation
156
165
  */
157
- label!: string;
166
+ tooltip?: string;
158
167
 
159
168
  /**
160
169
  * Data Type of the filter field.
@@ -261,8 +270,10 @@ export default class FilterFieldBlock extends BuildingBlockTemplatingBase {
261
270
  dataModelPath.targetObject?.annotations.Common as PropertyAnnotations_Common_extended
262
271
  )?.DocumentationRef?.toString();
263
272
 
273
+ this.tooltip = propertyConverted?.annotations?.Common?.QuickInfo?.toString();
274
+
264
275
  this.dataType = getDataType(propertyConvertedExternalId || propertyConverted); // data type for LR-FilterBar condition of the value help
265
- const labelTerm = propertyConverted?.annotations?.Common?.Label;
276
+ const labelTerm = this.label ? this.label : propertyConverted?.annotations?.Common?.Label;
266
277
  const labelExpression = labelTerm?.toString() ?? constant(propertyName);
267
278
  this.label = compileExpression(labelExpression) || propertyName;
268
279
  this.conditionsBinding = getConditionsBinding(dataModelPath) || "";
@@ -379,7 +390,7 @@ export default class FilterFieldBlock extends BuildingBlockTemplatingBase {
379
390
  let display;
380
391
  const companionTextAvailable = this.documentRefText === undefined || null ? false : true;
381
392
  const formattedResult: CompiledBindingToolkitExpression = compileExpression(
382
- formatResult([this.documentRefText], "sap.fe.core.formatters.StandardFormatter#asArray")
393
+ formatResult([this.documentRefText], "._formatters.StandardFormatter#asArray")
383
394
  );
384
395
  try {
385
396
  const dataModelPathExternalId =
@@ -412,6 +423,7 @@ export default class FilterFieldBlock extends BuildingBlockTemplatingBase {
412
423
  required="${this.required}"
413
424
  operators="${this.operators}"
414
425
  placeholder="${this.placeholder}"
426
+ ${this.attr("tooltip", this.tooltip)}
415
427
  ${this.attr("editMode", this.editMode)}
416
428
  >
417
429
  ${