@sapui5/sap.fe.core 1.102.3 → 1.105.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 (359) hide show
  1. package/package.json +6 -6
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +120 -0
  4. package/src/sap/fe/core/ActionRuntime.ts +108 -0
  5. package/src/sap/fe/core/AppComponent.js +81 -35
  6. package/src/sap/fe/core/AppComponent.ts +68 -44
  7. package/src/sap/fe/core/AppStateHandler.js +82 -70
  8. package/src/sap/fe/core/AppStateHandler.ts +32 -37
  9. package/src/sap/fe/core/BaseController.js +12 -10
  10. package/src/sap/fe/core/BaseController.ts +15 -13
  11. package/src/sap/fe/core/CommonUtils.js +291 -218
  12. package/src/sap/fe/core/CommonUtils.ts +315 -251
  13. package/src/sap/fe/core/ExtensionAPI.js +25 -28
  14. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  15. package/src/sap/fe/core/PageController.js +5 -5
  16. package/src/sap/fe/core/PageController.ts +4 -5
  17. package/src/sap/fe/core/TemplateComponent.js +21 -10
  18. package/src/sap/fe/core/TemplateComponent.ts +9 -6
  19. package/src/sap/fe/core/TemplateModel.js +2 -2
  20. package/src/sap/fe/core/TemplateModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +11 -3
  22. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +8 -2
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +197 -43
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +164 -24
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +14 -0
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.ts +5 -0
  27. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +609 -230
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +275 -128
  29. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
  30. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
  31. package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
  32. package/src/sap/fe/core/controllerextensions/EditFlow.js +761 -700
  33. package/src/sap/fe/core/controllerextensions/EditFlow.ts +478 -514
  34. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +10 -10
  35. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  36. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +104 -75
  37. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -79
  38. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +68 -68
  39. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
  40. package/src/sap/fe/core/controllerextensions/InternalRouting.js +162 -102
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +177 -121
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +67 -69
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +10 -10
  45. package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
  46. package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
  47. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
  48. package/src/sap/fe/core/controllerextensions/PageReady.js +98 -26
  49. package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
  50. package/src/sap/fe/core/controllerextensions/Paginator.js +31 -32
  51. package/src/sap/fe/core/controllerextensions/Paginator.ts +33 -34
  52. package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -7
  53. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  54. package/src/sap/fe/core/controllerextensions/Routing.js +11 -12
  55. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  56. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  57. package/src/sap/fe/core/controllerextensions/Share.js +171 -140
  58. package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
  59. package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
  60. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  61. package/src/sap/fe/core/controllerextensions/ViewState.js +201 -132
  62. package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
  63. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  64. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  65. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +13 -12
  66. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
  67. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +13 -12
  68. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +15 -15
  69. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +57 -18
  70. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +60 -28
  71. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +29 -21
  72. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1424 -940
  73. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +799 -836
  74. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +410 -377
  75. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +275 -358
  76. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +309 -0
  77. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +320 -0
  78. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +752 -579
  79. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +631 -599
  80. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +92 -74
  81. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +49 -52
  82. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -41
  83. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +110 -84
  84. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +69 -81
  85. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +64 -73
  86. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +18 -2
  87. package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +35 -0
  88. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +25 -24
  89. package/src/sap/fe/core/controls/Any.js +9 -5
  90. package/src/sap/fe/core/controls/Any.ts +10 -4
  91. package/src/sap/fe/core/controls/CommandExecution.js +12 -26
  92. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  93. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -3
  94. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  95. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +26 -26
  96. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  97. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -3
  98. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  99. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  100. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  101. package/src/sap/fe/core/controls/FieldWrapper.js +3 -3
  102. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  103. package/src/sap/fe/core/controls/FileWrapper.js +9 -4
  104. package/src/sap/fe/core/controls/FileWrapper.ts +16 -12
  105. package/src/sap/fe/core/controls/FilterBar.js +7 -3
  106. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  107. package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
  108. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  109. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  110. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  111. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
  112. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +44 -19
  113. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -2
  114. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +17 -13
  115. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  116. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +4 -4
  117. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  118. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
  119. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
  120. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  121. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  122. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  123. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  124. package/src/sap/fe/core/converters/ConverterContext.js +48 -34
  125. package/src/sap/fe/core/converters/ConverterContext.ts +81 -67
  126. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  127. package/src/sap/fe/core/converters/ManifestSettings.ts +18 -15
  128. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  129. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  130. package/src/sap/fe/core/converters/MetaModelConverter.js +74 -40
  131. package/src/sap/fe/core/converters/MetaModelConverter.ts +176 -140
  132. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  133. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  134. package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
  135. package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
  136. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1956 -1494
  137. package/src/sap/fe/core/converters/controls/Common/Action.js +78 -51
  138. package/src/sap/fe/core/converters/controls/Common/Action.ts +87 -52
  139. package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -16
  140. package/src/sap/fe/core/converters/controls/Common/Chart.ts +42 -43
  141. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  142. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  143. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +65 -29
  144. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +93 -62
  145. package/src/sap/fe/core/converters/controls/Common/Form.js +31 -31
  146. package/src/sap/fe/core/converters/controls/Common/Form.ts +46 -57
  147. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  148. package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
  149. package/src/sap/fe/core/converters/controls/Common/Table.js +251 -264
  150. package/src/sap/fe/core/converters/controls/Common/Table.ts +344 -370
  151. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  152. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +147 -144
  153. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +89 -59
  154. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +118 -71
  155. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  156. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  157. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  158. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  159. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +131 -95
  160. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +123 -87
  161. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +98 -87
  162. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +121 -117
  163. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  164. package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
  165. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  166. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  167. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +8 -6
  168. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +18 -10
  169. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +136 -0
  170. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +139 -0
  171. package/src/sap/fe/core/converters/helpers/ID.js +48 -46
  172. package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
  173. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  174. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  175. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  176. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  177. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
  178. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  179. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  180. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +53 -75
  181. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +59 -90
  182. package/src/sap/fe/core/converters/templates/ListReportConverter.js +58 -57
  183. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +93 -86
  184. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +58 -44
  185. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +87 -80
  186. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  187. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  188. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  189. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  190. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  191. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  192. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  193. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  194. package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
  195. package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
  196. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  197. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  198. package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
  199. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  200. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  201. package/src/sap/fe/core/fpm/Component.js +33 -7
  202. package/src/sap/fe/core/fpm/Component.ts +14 -0
  203. package/src/sap/fe/core/helpers/AnnotationEnum.js +1 -1
  204. package/src/sap/fe/core/helpers/AppStartupHelper.js +19 -18
  205. package/src/sap/fe/core/helpers/AppStartupHelper.ts +41 -43
  206. package/src/sap/fe/core/helpers/BindingToolkit.js +1836 -0
  207. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +397 -270
  208. package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
  209. package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
  210. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  211. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  212. package/src/sap/fe/core/helpers/EditState.js +1 -6
  213. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  214. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  215. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  216. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  217. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  218. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  219. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  220. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
  221. package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
  222. package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
  223. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  224. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  225. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  226. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  227. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  228. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  229. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  230. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  231. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  232. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  233. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  234. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  235. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  236. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  237. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  238. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  239. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  240. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +109 -0
  241. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +47 -0
  242. package/src/sap/fe/core/jsx-runtime/jsx-control.js +110 -0
  243. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +92 -0
  244. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  245. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  246. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  247. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  248. package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
  249. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +179 -0
  250. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +150 -0
  251. package/src/sap/fe/core/library.js +42 -3
  252. package/src/sap/fe/core/library.support.js +1 -1
  253. package/src/sap/fe/core/library.ts +38 -0
  254. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  255. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  256. package/src/sap/fe/core/messagebundle.properties +39 -67
  257. package/src/sap/fe/core/messagebundle_ar.properties +27 -44
  258. package/src/sap/fe/core/messagebundle_bg.properties +27 -44
  259. package/src/sap/fe/core/messagebundle_ca.properties +27 -44
  260. package/src/sap/fe/core/messagebundle_cs.properties +27 -44
  261. package/src/sap/fe/core/messagebundle_cy.properties +26 -43
  262. package/src/sap/fe/core/messagebundle_da.properties +27 -44
  263. package/src/sap/fe/core/messagebundle_de.properties +25 -42
  264. package/src/sap/fe/core/messagebundle_el.properties +28 -45
  265. package/src/sap/fe/core/messagebundle_en.properties +27 -44
  266. package/src/sap/fe/core/messagebundle_en_GB.properties +27 -44
  267. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -42
  268. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -40
  269. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +25 -42
  270. package/src/sap/fe/core/messagebundle_es.properties +27 -44
  271. package/src/sap/fe/core/messagebundle_es_MX.properties +27 -44
  272. package/src/sap/fe/core/messagebundle_et.properties +27 -44
  273. package/src/sap/fe/core/messagebundle_fi.properties +27 -44
  274. package/src/sap/fe/core/messagebundle_fr.properties +26 -43
  275. package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -42
  276. package/src/sap/fe/core/messagebundle_hi.properties +27 -44
  277. package/src/sap/fe/core/messagebundle_hr.properties +27 -44
  278. package/src/sap/fe/core/messagebundle_hu.properties +27 -44
  279. package/src/sap/fe/core/messagebundle_id.properties +27 -44
  280. package/src/sap/fe/core/messagebundle_it.properties +43 -60
  281. package/src/sap/fe/core/messagebundle_iw.properties +27 -44
  282. package/src/sap/fe/core/messagebundle_ja.properties +27 -44
  283. package/src/sap/fe/core/messagebundle_kk.properties +27 -44
  284. package/src/sap/fe/core/messagebundle_ko.properties +30 -47
  285. package/src/sap/fe/core/messagebundle_lt.properties +27 -44
  286. package/src/sap/fe/core/messagebundle_lv.properties +27 -44
  287. package/src/sap/fe/core/messagebundle_ms.properties +27 -44
  288. package/src/sap/fe/core/messagebundle_nl.properties +29 -46
  289. package/src/sap/fe/core/messagebundle_no.properties +27 -44
  290. package/src/sap/fe/core/messagebundle_pl.properties +28 -45
  291. package/src/sap/fe/core/messagebundle_pt.properties +28 -45
  292. package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -44
  293. package/src/sap/fe/core/messagebundle_ro.properties +27 -44
  294. package/src/sap/fe/core/messagebundle_ru.properties +27 -44
  295. package/src/sap/fe/core/messagebundle_sh.properties +27 -44
  296. package/src/sap/fe/core/messagebundle_sk.properties +27 -44
  297. package/src/sap/fe/core/messagebundle_sl.properties +27 -44
  298. package/src/sap/fe/core/messagebundle_sv.properties +27 -44
  299. package/src/sap/fe/core/messagebundle_th.properties +25 -42
  300. package/src/sap/fe/core/messagebundle_tr.properties +27 -44
  301. package/src/sap/fe/core/messagebundle_uk.properties +27 -44
  302. package/src/sap/fe/core/messagebundle_vi.properties +27 -44
  303. package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -44
  304. package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -44
  305. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
  306. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  307. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +103 -75
  308. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +72 -73
  309. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
  310. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  311. package/src/sap/fe/core/services/NavigationServiceFactory.js +62 -50
  312. package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
  313. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
  314. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  315. package/src/sap/fe/core/services/RoutingServiceFactory.js +56 -56
  316. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  317. package/src/sap/fe/core/services/ShellServicesFactory.js +93 -77
  318. package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
  319. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +64 -64
  320. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  321. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +232 -200
  322. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +145 -142
  323. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
  324. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
  325. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
  326. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
  327. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  328. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  329. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  330. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  331. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
  332. package/src/sap/fe/core/templating/CommonFormatters.js +85 -0
  333. package/src/sap/fe/core/templating/CommonFormatters.ts +90 -0
  334. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  335. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  336. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  337. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  338. package/src/sap/fe/core/templating/DataModelPathHelper.js +23 -15
  339. package/src/sap/fe/core/templating/DataModelPathHelper.ts +47 -34
  340. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  341. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  342. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  343. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  344. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  345. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  346. package/src/sap/fe/core/templating/FilterHelper.js +18 -17
  347. package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
  348. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  349. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  350. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  351. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  352. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  353. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  354. package/src/sap/fe/core/templating/UIFormatters.js +152 -95
  355. package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
  356. package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
  357. package/src/sap/fe/core/type/Email.js +3 -3
  358. package/src/sap/fe/core/type/Email.ts +2 -2
  359. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -1,54 +1,53 @@
1
- import {
2
- AnnotationTerm,
1
+ import { CommunicationAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/Communication";
2
+ import type {
3
3
  CollectionFacetTypes,
4
4
  DataFieldAbstractTypes,
5
+ Emphasized,
5
6
  FacetTypes,
6
7
  FieldGroup,
7
- Identification,
8
8
  OperationGroupingType,
9
- ReferenceFacetTypes,
10
- StatusInfo,
11
- UIAnnotationTerms,
12
- UIAnnotationTypes
13
- } from "@sap-ux/vocabularies-types";
14
- import { CommunicationAnnotationTerms } from "@sap-ux/vocabularies-types/dist/generated/Communication";
9
+ ReferenceFacetTypes
10
+ } from "@sap-ux/vocabularies-types/vocabularies/UI";
11
+ import { UIAnnotationTerms, UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
12
+ import type { BaseAction, CombinedAction, ConverterAction, CustomAction } from "sap/fe/core/converters/controls/Common/Action";
15
13
  import {
16
- BaseAction,
17
14
  ButtonType,
18
- ConverterAction,
19
- CustomAction,
20
15
  getActionsFromManifest,
21
16
  getEnabledForAnnotationAction,
22
17
  getSemanticObjectMapping,
23
18
  isActionNavigable,
24
19
  removeDuplicateActions
25
20
  } from "sap/fe/core/converters/controls/Common/Action";
21
+ import type { CustomObjectPageHeaderFacet, FlexSettings } from "sap/fe/core/converters/controls/ObjectPage/HeaderFacet";
26
22
  import {
27
- CustomObjectPageHeaderFacet,
28
- FlexSettings,
29
23
  getDesignTimeMetadataSettingsForHeaderFacet,
30
24
  getHeaderFacetsFromManifest,
31
25
  getStashedSettingsForHeaderFacet
32
26
  } from "sap/fe/core/converters/controls/ObjectPage/HeaderFacet";
33
27
  import { IssueCategory, IssueSeverity, IssueType } from "sap/fe/core/converters/helpers/IssueManager";
34
28
  import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
29
+ import type { CompiledBindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
35
30
  import {
36
- annotationExpression,
37
- bindingExpression,
38
- BindingExpression,
39
- compileBinding,
31
+ compileExpression,
40
32
  equal,
41
33
  fn,
34
+ getExpressionFromAnnotation,
35
+ ifElse,
42
36
  not,
37
+ pathInModel,
43
38
  ref
44
- } from "sap/fe/core/helpers/BindingExpression";
45
- import ConverterContext from "../../ConverterContext";
46
- import { ConfigurableObject, ConfigurableRecord, CustomElement, insertCustomElements, Placement } from "../../helpers/ConfigurableObject";
47
- import { CustomSubSectionID, FormID, SideContentID, SubSectionID } from "../../helpers/ID";
48
- import { ActionType, ManifestAction, ManifestSubSection } from "../../ManifestSettings";
39
+ } from "sap/fe/core/helpers/BindingToolkit";
40
+ import type ConverterContext from "../../ConverterContext";
41
+ import type { ConfigurableObject, ConfigurableRecord, CustomElement } from "../../helpers/ConfigurableObject";
42
+ import { insertCustomElements, Placement } from "../../helpers/ConfigurableObject";
43
+ import { getCustomSubSectionID, getFormID, getSideContentID, getSubSectionID } from "../../helpers/ID";
44
+ import type { ManifestAction, ManifestSubSection } from "../../ManifestSettings";
45
+ import { ActionType } from "../../ManifestSettings";
49
46
  import { getFormActions, getFormHiddenActions, getVisibilityEnablementFormMenuActions } from "../../objectPage/FormMenuActions";
50
- import { DataVisualizationDefinition, getDataVisualizationConfiguration } from "../Common/DataVisualization";
51
- import { createFormDefinition, FormDefinition, isReferenceFacet } from "../Common/Form";
47
+ import type { DataVisualizationDefinition } from "../Common/DataVisualization";
48
+ import { getDataVisualizationConfiguration } from "../Common/DataVisualization";
49
+ import type { FormDefinition } from "../Common/Form";
50
+ import { createFormDefinition, isReferenceFacet } from "../Common/Form";
52
51
 
53
52
  export enum SubSectionType {
54
53
  Unknown = "Unknown", // Default Type
@@ -71,10 +70,10 @@ export type ObjectPageSubSection =
71
70
  type BaseSubSection = {
72
71
  id: string;
73
72
  key: string;
74
- title: BindingExpression<string>;
73
+ title: CompiledBindingToolkitExpression;
75
74
  annotationPath: string;
76
75
  type: SubSectionType;
77
- visible: BindingExpression<boolean>;
76
+ visible: CompiledBindingToolkitExpression;
78
77
  isVisibilityDynamic?: boolean | "";
79
78
  flexSettings?: FlexSettings;
80
79
  stashed?: boolean;
@@ -102,10 +101,6 @@ type XMLFragmentSubSection = Omit<BaseSubSection, "annotationPath"> & {
102
101
  actions: Record<string, CustomAction>;
103
102
  };
104
103
 
105
- type Emphasized = {
106
- path: string;
107
- };
108
-
109
104
  type PlaceholderFragmentSubSection = Omit<BaseSubSection, "annotationPath"> & {
110
105
  type: SubSectionType.Placeholder;
111
106
  actions: Record<string, CustomAction>;
@@ -119,13 +114,14 @@ export type FormSubSection = BaseSubSection & {
119
114
  type: SubSectionType.Form;
120
115
  formDefinition: FormDefinition;
121
116
  actions: ConverterAction[] | BaseAction[];
117
+ commandActions: Record<string, CustomAction>;
122
118
  };
123
119
 
124
120
  export type ObjectPageSection = ConfigurableObject & {
125
121
  id: string;
126
- title: BindingExpression<string>;
127
- showTitle?: BindingExpression<boolean>;
128
- visible: BindingExpression<boolean>;
122
+ title: CompiledBindingToolkitExpression;
123
+ showTitle?: boolean;
124
+ visible: CompiledBindingToolkitExpression;
129
125
  subSections: ObjectPageSubSection[];
130
126
  };
131
127
 
@@ -144,6 +140,7 @@ export type CustomObjectPageSubSection = CustomElement<ObjectPageSubSection>;
144
140
 
145
141
  const targetTerms: string[] = [
146
142
  UIAnnotationTerms.LineItem,
143
+ UIAnnotationTerms.Chart,
147
144
  UIAnnotationTerms.PresentationVariant,
148
145
  UIAnnotationTerms.SelectionPresentationVariant
149
146
  ];
@@ -156,10 +153,10 @@ const hasTable = (facets: any[] = []) => {
156
153
  /**
157
154
  * Create subsections based on facet definition.
158
155
  *
159
- * @param {FacetTypes[]} facetCollection Collection of facets
160
- * @param {ConverterContext} converterContext The converter context
161
- * @param {boolean} isHeaderSection True if header section is generated in this iteration
162
- * @returns {ObjectPageSubSection[]} The current subsections
156
+ * @param facetCollection Collection of facets
157
+ * @param converterContext The converter context
158
+ * @param isHeaderSection True if header section is generated in this iteration
159
+ * @returns The current subsections
163
160
  */
164
161
  export function createSubSections(
165
162
  facetCollection: FacetTypes[],
@@ -197,8 +194,8 @@ export function createSubSections(
197
194
  /**
198
195
  * Creates subsections based on the definition of the custom header facet.
199
196
  *
200
- * @param {ConverterContext} converterContext The converter context
201
- * @returns {ObjectPageSubSection[]} The current subsections
197
+ * @param converterContext The converter context
198
+ * @returns The current subsections
202
199
  */
203
200
  export function createCustomHeaderFacetSubSections(converterContext: ConverterContext): ObjectPageSubSection[] {
204
201
  const customHeaderFacets: Record<string, CustomObjectPageHeaderFacet> = getHeaderFacetsFromManifest(
@@ -223,11 +220,10 @@ export function createCustomHeaderFacetSubSections(converterContext: ConverterCo
223
220
  * Creates a subsection based on a custom header facet.
224
221
  *
225
222
  * @param customHeaderFacet A custom header facet
226
- *
227
- * @returns {ObjectPageSubSection} A definition for a subsection
223
+ * @returns A definition for a subsection
228
224
  */
229
225
  function createCustomHeaderFacetSubSection(customHeaderFacet: CustomObjectPageHeaderFacet): ObjectPageSubSection {
230
- const subSectionID = CustomSubSectionID(customHeaderFacet.key);
226
+ const subSectionID = getCustomSubSectionID(customHeaderFacet.key);
231
227
  const subSection: XMLFragmentSubSection = {
232
228
  id: subSectionID,
233
229
  key: customHeaderFacet.key,
@@ -252,73 +248,72 @@ const getSubSectionKey = (facetDefinition: FacetTypes, fallback: string): string
252
248
  };
253
249
  /**
254
250
  * Adds Form menu action to all form actions, removes duplicate actions and hidden actions.
251
+ *
255
252
  * @param actions The actions involved
256
253
  * @param facetDefinition The definition for the facet
257
254
  * @param converterContext The converter context
258
- * @returns {BaseAction[] | ConverterAction[]}
255
+ * @returns The form menu actions
259
256
  */
260
- function addFormMenuActions(
261
- actions: ConverterAction[],
262
- facetDefinition: FacetTypes,
263
- converterContext: ConverterContext
264
- ): BaseAction[] | ConverterAction[] {
257
+ function addFormMenuActions(actions: ConverterAction[], facetDefinition: FacetTypes, converterContext: ConverterContext): CombinedAction {
265
258
  const hiddenActions: BaseAction[] = getFormHiddenActions(facetDefinition, converterContext) || [],
266
259
  formActions: ConfigurableRecord<ManifestAction> = getFormActions(facetDefinition, converterContext),
267
- formAllActions = insertCustomElements(
268
- actions,
269
- getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions),
270
- { command: "overwrite" }
271
- );
272
- return formAllActions ? getVisibilityEnablementFormMenuActions(removeDuplicateActions(formAllActions)) : actions;
260
+ manifestActions = getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions),
261
+ formAllActions = insertCustomElements(actions, manifestActions.actions, { command: "overwrite" });
262
+ return {
263
+ "actions": formAllActions ? getVisibilityEnablementFormMenuActions(removeDuplicateActions(formAllActions)) : actions,
264
+ "commandActions": manifestActions.commandActions
265
+ };
273
266
  }
274
267
 
275
268
  /**
276
269
  * Retrieves the action form a facet.
270
+ *
277
271
  * @param facetDefinition
278
272
  * @param converterContext
279
- * @returns {ConverterAction[] | BaseAction[]} The current facet actions
273
+ * @returns The current facet actions
280
274
  */
281
- function getFacetActions(facetDefinition: FacetTypes, converterContext: ConverterContext): BaseAction[] | ConverterAction[] {
275
+ function getFacetActions(facetDefinition: FacetTypes, converterContext: ConverterContext): CombinedAction {
282
276
  let actions = new Array<ConverterAction>();
283
277
  switch (facetDefinition.$Type) {
284
278
  case UIAnnotationTypes.CollectionFacet:
285
279
  actions = (
286
- facetDefinition.Facets.filter((facetDefinition) => isReferenceFacet(facetDefinition)) as ReferenceFacetTypes[]
280
+ facetDefinition.Facets.filter((subFacetDefinition) => isReferenceFacet(subFacetDefinition)) as ReferenceFacetTypes[]
287
281
  ).reduce(
288
- (actions: ConverterAction[], facetDefinition) => createFormActionReducer(actions, facetDefinition, converterContext),
282
+ (actionReducer: ConverterAction[], referenceFacet) =>
283
+ createFormActionReducer(actionReducer, referenceFacet, converterContext),
289
284
  []
290
285
  );
291
286
  break;
292
287
  case UIAnnotationTypes.ReferenceFacet:
293
- actions = createFormActionReducer([], facetDefinition as ReferenceFacetTypes, converterContext);
288
+ actions = createFormActionReducer([], facetDefinition, converterContext);
289
+ break;
290
+ default:
294
291
  break;
295
292
  }
296
293
  return addFormMenuActions(actions, facetDefinition, converterContext);
297
294
  }
298
295
  /**
299
- * Retruns the button type based on @UI.Emphasized annotation.
300
- * @param Emphasized Emphasized annotation value.
301
- * @returns {ButtonType | string} The button type or path based expression.
296
+ * Returns the button type based on @UI.Emphasized annotation.
297
+ *
298
+ * @param emphasized Emphasized annotation value.
299
+ * @returns The button type or path based expression.
302
300
  */
303
- function getButtonType(Emphasized: Emphasized): ButtonType | string {
304
- const PathForButtonType: string = Emphasized?.path;
305
- if (PathForButtonType) {
306
- return "{= " + "!${" + PathForButtonType + "} ? '" + ButtonType.Transparent + "' : ${" + PathForButtonType + "}" + "}";
307
- } else if (Emphasized) {
308
- return ButtonType.Ghost;
309
- }
310
- return ButtonType.Transparent;
301
+ function getButtonType(emphasized: Emphasized | undefined): ButtonType {
302
+ // Emphasized is a boolean so if it's equal to true we show the button as Ghost, otherwise as Transparent
303
+ const buttonTypeCondition = equal(getExpressionFromAnnotation(emphasized), true);
304
+ return compileExpression(ifElse(buttonTypeCondition, ButtonType.Ghost, ButtonType.Transparent)) as ButtonType;
311
305
  }
312
306
 
313
307
  /**
314
308
  * Create a subsection based on FacetTypes.
309
+ *
315
310
  * @param facetDefinition
316
311
  * @param facetsToCreate
317
312
  * @param converterContext
318
313
  * @param level
319
314
  * @param hasSingleContent
320
315
  * @param isHeaderSection
321
- * @returns {ObjectPageSubSection} A subsection definition
316
+ * @returns A subsection definition
322
317
  */
323
318
  export function createSubSection(
324
319
  facetDefinition: FacetTypes,
@@ -328,14 +323,14 @@ export function createSubSection(
328
323
  hasSingleContent: boolean,
329
324
  isHeaderSection?: boolean
330
325
  ): ObjectPageSubSection {
331
- const subSectionID = SubSectionID({ Facet: facetDefinition });
326
+ const subSectionID = getSubSectionID({ Facet: facetDefinition });
332
327
  const oHiddenAnnotation: any = facetDefinition.annotations?.UI?.Hidden;
333
- const isVisible = compileBinding(not(equal(true, annotationExpression(oHiddenAnnotation))));
328
+ const isVisible = compileExpression(not(equal(true, getExpressionFromAnnotation(oHiddenAnnotation))));
334
329
  const isDynamicExpression =
335
330
  isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0 && oHiddenAnnotation?.type !== "Path";
336
331
  const isVisibleDynamicExpression =
337
332
  isVisible && isDynamicExpression ? isVisible.substring(isVisible.indexOf("{=") + 2, isVisible.lastIndexOf("}")) : false;
338
- const title = compileBinding(annotationExpression(facetDefinition.Label));
333
+ const title = compileExpression(getExpressionFromAnnotation(facetDefinition.Label));
339
334
  const subSection: BaseSubSection = {
340
335
  id: subSectionID,
341
336
  key: getSubSectionKey(facetDefinition, subSectionID),
@@ -388,13 +383,14 @@ export function createSubSection(
388
383
  };
389
384
  return mixedSubSection;
390
385
  } else {
391
- const actions = getFacetActions(facetDefinition, converterContext),
386
+ const facetActions = getFacetActions(facetDefinition, converterContext),
392
387
  formCollectionSubSection: FormSubSection = {
393
388
  ...subSection,
394
389
  type: SubSectionType.Form,
395
- formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, actions),
390
+ formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, facetActions.actions),
396
391
  level: level,
397
- actions: actions.filter((action) => action.facetName === undefined)
392
+ actions: facetActions.actions.filter((action) => action.facetName === undefined),
393
+ commandActions: facetActions.commandActions
398
394
  };
399
395
  return formCollectionSubSection;
400
396
  }
@@ -436,13 +432,14 @@ export function createSubSection(
436
432
  case UIAnnotationTerms.StatusInfo:
437
433
  case CommunicationAnnotationTerms.Contact:
438
434
  // All those element belong to a form facet
439
- const actions = getFacetActions(facetDefinition, converterContext),
435
+ const facetActions = getFacetActions(facetDefinition, converterContext),
440
436
  formElementSubSection: FormSubSection = {
441
437
  ...subSection,
442
438
  type: SubSectionType.Form,
443
439
  level: level,
444
- formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, actions),
445
- actions: actions.filter((action) => action.facetName === undefined)
440
+ formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, facetActions.actions),
441
+ actions: facetActions.actions.filter((action) => action.facetName === undefined),
442
+ commandActions: facetActions.commandActions
446
443
  };
447
444
  return formElementSubSection;
448
445
 
@@ -465,7 +462,11 @@ export function createSubSection(
465
462
  };
466
463
  return unsupportedSubSection;
467
464
  }
468
- function isSubsectionTitleShown(hasSingleContent: boolean, subSectionTitle: BindingExpression<string>, controlTitle: string): boolean {
465
+ function isSubsectionTitleShown(
466
+ hasSingleContent: boolean,
467
+ subSectionTitle: CompiledBindingToolkitExpression,
468
+ controlTitle: string
469
+ ): boolean {
469
470
  if (hasSingleContent && controlTitle === subSectionTitle) {
470
471
  return false;
471
472
  }
@@ -476,7 +477,7 @@ function createFormActionReducer(
476
477
  facetDefinition: ReferenceFacetTypes,
477
478
  converterContext: ConverterContext
478
479
  ): ConverterAction[] {
479
- const referenceTarget: AnnotationTerm<any> = facetDefinition.Target.$target;
480
+ const referenceTarget = facetDefinition.Target.$target;
480
481
  const targetValue = facetDefinition.Target.value;
481
482
  let manifestActions: Record<string, CustomAction> = {};
482
483
  let dataFieldCollection: DataFieldAbstractTypes[] = [];
@@ -500,20 +501,21 @@ function createFormActionReducer(
500
501
  undefined,
501
502
  undefined,
502
503
  undefined,
503
- facetDefinition.fullyQualifiedName as string
504
- );
504
+ facetDefinition.fullyQualifiedName
505
+ ).actions;
505
506
  break;
506
507
  case UIAnnotationTerms.Identification:
507
508
  case UIAnnotationTerms.StatusInfo:
508
509
  if (referenceTarget.qualifier) {
509
- dataFieldCollection = referenceTarget as Identification | StatusInfo;
510
+ dataFieldCollection = referenceTarget;
510
511
  }
511
512
  break;
513
+ default:
514
+ break;
512
515
  }
513
516
  }
514
517
 
515
- actions = dataFieldCollection.reduce((actions, dataField: DataFieldAbstractTypes) => {
516
- const UIAnnotation: any = dataField?.annotations?.UI;
518
+ actions = dataFieldCollection.reduce((actionReducer, dataField: DataFieldAbstractTypes) => {
517
519
  switch (dataField.$Type) {
518
520
  case UIAnnotationTypes.DataFieldForIntentBasedNavigation:
519
521
  if (dataField.RequiresContext?.valueOf() === true) {
@@ -535,57 +537,57 @@ function createFormActionReducer(
535
537
  if (dataField.Mapping) {
536
538
  mNavigationParameters.semanticObjectMapping = getSemanticObjectMapping(dataField.Mapping);
537
539
  }
538
- actions.push({
540
+ actionReducer.push({
539
541
  type: ActionType.DataFieldForIntentBasedNavigation,
540
- id: FormID({ Facet: facetDefinition }, dataField),
542
+ id: getFormID({ Facet: facetDefinition }, dataField),
541
543
  key: KeyHelper.generateKeyFromDataField(dataField),
542
544
  text: dataField.Label?.toString(),
543
545
  annotationPath: "",
544
546
  enabled:
545
547
  dataField.NavigationAvailable !== undefined
546
- ? compileBinding(equal(annotationExpression(dataField.NavigationAvailable?.valueOf()), true))
547
- : true,
548
- visible: compileBinding(not(equal(annotationExpression(dataField.annotations?.UI?.Hidden?.valueOf()), true))),
549
- buttonType: getButtonType(UIAnnotation?.Emphasized),
550
- press: compileBinding(
548
+ ? compileExpression(equal(getExpressionFromAnnotation(dataField.NavigationAvailable?.valueOf()), true))
549
+ : "true",
550
+ visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden?.valueOf()), true))),
551
+ buttonType: getButtonType(dataField.annotations?.UI?.Emphasized),
552
+ press: compileExpression(
551
553
  fn("._intentBasedNavigation.navigate", [
552
- annotationExpression(dataField.SemanticObject),
553
- annotationExpression(dataField.Action),
554
+ getExpressionFromAnnotation(dataField.SemanticObject),
555
+ getExpressionFromAnnotation(dataField.Action),
554
556
  mNavigationParameters
555
557
  ])
556
558
  ),
557
- customData: compileBinding({
558
- semanticObject: annotationExpression(dataField.SemanticObject),
559
- action: annotationExpression(dataField.Action)
559
+ customData: compileExpression({
560
+ semanticObject: getExpressionFromAnnotation(dataField.SemanticObject),
561
+ action: getExpressionFromAnnotation(dataField.Action)
560
562
  })
561
563
  });
562
564
  break;
563
565
  case UIAnnotationTypes.DataFieldForAction:
564
566
  const formManifestActionsConfiguration: any = converterContext.getManifestControlConfiguration(referenceTarget).actions;
565
567
  const key: string = KeyHelper.generateKeyFromDataField(dataField);
566
- actions.push({
568
+ actionReducer.push({
567
569
  type: ActionType.DataFieldForAction,
568
- id: FormID({ Facet: facetDefinition }, dataField),
570
+ id: getFormID({ Facet: facetDefinition }, dataField),
569
571
  key: key,
570
572
  text: dataField.Label?.toString(),
571
573
  annotationPath: "",
572
574
  enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
573
- binding: navigationPropertyPath ? "{ 'path' : '" + navigationPropertyPath + "'}" : undefined,
574
- visible: compileBinding(not(equal(annotationExpression(dataField.annotations?.UI?.Hidden?.valueOf()), true))),
575
+ binding: navigationPropertyPath ? `{ 'path' : '${navigationPropertyPath}'}` : undefined,
576
+ visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden?.valueOf()), true))),
575
577
  requiresDialog: isDialog(dataField.ActionTarget),
576
- buttonType: getButtonType(UIAnnotation?.Emphasized),
577
- press: compileBinding(
578
+ buttonType: getButtonType(dataField.annotations?.UI?.Emphasized),
579
+ press: compileExpression(
578
580
  fn(
579
581
  "invokeAction",
580
582
  [
581
583
  dataField.Action,
582
584
  {
583
- contexts: fn("getBindingContext", [], bindingExpression("", "$source")),
585
+ contexts: fn("getBindingContext", [], pathInModel("", "$source")),
584
586
  invocationGrouping: (dataField.InvocationGrouping === "UI.OperationGroupingType/ChangeSet"
585
587
  ? "ChangeSet"
586
588
  : "Isolated") as OperationGroupingType,
587
- label: annotationExpression(dataField.Label),
588
- model: fn("getModel", [], bindingExpression("/", "$source")),
589
+ label: getExpressionFromAnnotation(dataField.Label),
590
+ model: fn("getModel", [], pathInModel("/", "$source")),
589
591
  isNavigable: isActionNavigable(
590
592
  formManifestActionsConfiguration && formManifestActionsConfiguration[key]
591
593
  )
@@ -594,11 +596,13 @@ function createFormActionReducer(
594
596
  ref(".editFlow")
595
597
  )
596
598
  ),
597
- facetName: dataField.Inline ? (facetDefinition.fullyQualifiedName as string) : undefined
599
+ facetName: dataField.Inline ? facetDefinition.fullyQualifiedName : undefined
598
600
  });
599
601
  break;
602
+ default:
603
+ break;
600
604
  }
601
- return actions;
605
+ return actionReducer;
602
606
  }, actions);
603
607
  return insertCustomElements(actions, manifestActions);
604
608
  }
@@ -636,7 +640,7 @@ export function createCustomSubSection(
636
640
  const sideContent: SideContentDef | undefined = manifestSubSection.sideContent
637
641
  ? {
638
642
  template: manifestSubSection.sideContent.template,
639
- id: SideContentID(subSectionKey),
643
+ id: getSideContentID(subSectionKey),
640
644
  visible: false,
641
645
  equalSplit: manifestSubSection.sideContent.equalSplit
642
646
  }
@@ -649,10 +653,11 @@ export function createCustomSubSection(
649
653
  }
650
654
  const isVisible = manifestSubSection.visible !== undefined ? manifestSubSection.visible : true;
651
655
  const isDynamicExpression = isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0;
656
+ const manifestActions = getActionsFromManifest(manifestSubSection.actions, converterContext);
652
657
  const subSectionDefinition = {
653
658
  type: SubSectionType.Unknown,
654
- id: manifestSubSection.id || CustomSubSectionID(subSectionKey),
655
- actions: getActionsFromManifest(manifestSubSection.actions, converterContext),
659
+ id: manifestSubSection.id || getCustomSubSectionID(subSectionKey),
660
+ actions: manifestActions.actions,
656
661
  key: subSectionKey,
657
662
  title: manifestSubSection.title,
658
663
  level: 1,
@@ -676,8 +681,7 @@ export function createCustomSubSection(
676
681
  * @param currentFacet
677
682
  * @param facetsToCreateInSection
678
683
  * @param converterContext
679
- *
680
- * @returns {boolean} `true` for compliant, false otherwise
684
+ * @returns `true` for compliant, false otherwise
681
685
  */
682
686
  function getCondensedTableLayoutCompliance(
683
687
  currentFacet: FacetTypes,
@@ -702,7 +706,7 @@ function hasNoOtherVisibleTableInTargets(currentFacet: FacetTypes, facetsToCreat
702
706
  return facetsToCreateInSection.every(function (subFacet) {
703
707
  if (subFacet !== currentFacet) {
704
708
  if (subFacet.$Type === UIAnnotationTypes.ReferenceFacet) {
705
- const refFacet = subFacet as ReferenceFacetTypes;
709
+ const refFacet = subFacet;
706
710
  if (
707
711
  refFacet.Target?.$target?.term === UIAnnotationTerms.LineItem ||
708
712
  refFacet.Target?.$target?.term === UIAnnotationTerms.PresentationVariant ||
@@ -156,9 +156,7 @@ sap.ui.define([], function () {
156
156
  };
157
157
 
158
158
  _proto.getTransAggregations = function getTransAggregations() {
159
- var aTransAggregationAnnotations = this._converterContext.getAnnotationsByTerm("Analytics", "com.sap.vocabularies.Analytics.v1.AggregatedProperties", [this._converterContext.getEntityContainer(), this._converterContext.getEntityType()]);
160
-
161
- return aTransAggregationAnnotations;
159
+ return this._converterContext.getAnnotationsByTerm("Analytics", "com.sap.vocabularies.Analytics.v1.AggregatedProperties", [this._converterContext.getEntityContainer(), this._converterContext.getEntityType()]);
162
160
  }
163
161
  /**
164
162
  * Returns the list of custom aggregate definitions for the entity type.
@@ -194,4 +192,4 @@ sap.ui.define([], function () {
194
192
  _exports.AggregationHelper = AggregationHelper;
195
193
  return _exports;
196
194
  }, false);
197
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFnZ3JlZ2F0aW9uLnRzIl0sIm5hbWVzIjpbIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZW50aXR5VHlwZSIsImNvbnZlcnRlckNvbnRleHQiLCJfZW50aXR5VHlwZSIsIl9jb252ZXJ0ZXJDb250ZXh0IiwiX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQiLCJfZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0IiwiX3R5cGUiLCJvVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJfYkFwcGx5U3VwcG9ydGVkIiwiQXBwbHlTdXBwb3J0ZWQiLCJfYUdyb3VwYWJsZVByb3BlcnRpZXMiLCJHcm91cGFibGVQcm9wZXJ0aWVzIiwiX2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiQWdncmVnYXRhYmxlUHJvcGVydGllcyIsIm9Db250YWluZXJBZ2dyZWdhdGlvbkFubm90YXRpb24iLCJnZXRFbnRpdHlDb250YWluZXIiLCJiSXNQYXJhbWV0ZXJpemVkIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldEVudGl0eVNldCIsIkNvbW1vbiIsIlJlc3VsdENvbnRleHQiLCJvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0IiwidGFyZ2V0T2JqZWN0Iiwib0VudGl0eVR5cGVPYmplY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwib0VudGl0eVNldE9iamVjdCIsImdldEVudGl0eVNldCIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImlzUHJvcGVydHlHcm91cGFibGUiLCJwcm9wZXJ0eSIsInVuZGVmaW5lZCIsImxlbmd0aCIsImZpbmRJbmRleCIsInBhdGgiLCIkdGFyZ2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSIsImFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyIsImdldEFubm90YXRpb25zQnlUZXJtIiwic29tZSIsImFubm90YXRpb24iLCJuYW1lIiwicXVhbGlmaWVyIiwiZ2V0R3JvdXBhYmxlUHJvcGVydGllcyIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJnZXRUcmFuc0FnZ3JlZ2F0aW9ucyIsImFUcmFuc0FnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJUcmFuc2Zvcm1hdGlvbnMiLCJBcHBseVN1cHBvcnRlZERlZmF1bHRzIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFVQTtBQUNBO0FBQ0E7TUFDYUEsaUI7QUFjWjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQywrQkFBWUMsVUFBWixFQUFvQ0MsZ0JBQXBDLEVBQXdFO0FBQUE7O0FBQ3ZFLFdBQUtDLFdBQUwsR0FBbUJGLFVBQW5CO0FBQ0EsV0FBS0csaUJBQUwsR0FBeUJGLGdCQUF6QjtBQUVBLFdBQUtHLDZCQUFMLEdBQXFDLEtBQUtDLHFDQUFMLEVBQXJDOztBQUNBLFVBQUksK0JBQUtELDZCQUFMLGdGQUFvQ0UsS0FBcEMsTUFBOEMsb0JBQWxELEVBQXdFO0FBQUE7O0FBQ3ZFLGFBQUtDLDZCQUFMLDZCQUFxQyxLQUFLSCw2QkFBMUMscUZBQXFDLHVCQUFvQ0ksV0FBekUsMkRBQXFDLHVCQUNsQ0MsV0FESDtBQUVBLE9BSEQsTUFHTyxJQUFJLGdDQUFLTCw2QkFBTCxrRkFBb0NFLEtBQXBDLE1BQThDLFlBQWxELEVBQWdFO0FBQUE7O0FBQ3RFLGFBQUtDLDZCQUFMLDZCQUFxQyxLQUFLSCw2QkFBMUMscUZBQXFDLHVCQUFvQ0ksV0FBekUsMkRBQXFDLHVCQUNsQ0MsV0FESDtBQUVBLE9BSE0sTUFHQSxJQUFJLGdDQUFLTCw2QkFBTCxrRkFBb0NFLEtBQXBDLE1BQThDLFdBQWxELEVBQStEO0FBQUE7O0FBQ3JFLGFBQUtD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Q0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNRQyw2QixHQUFQLHlDQUF1QztBQUN0QztBQUNBLFVBQU1WLDJCQUE4RCxHQUFHLEtBQUt2QyxpQkFBTCxDQUF1QndDLG9CQUF2QixDQUN0RSxhQURzRSw4Q0FHdEUsQ0FBQyxLQUFLdkMsNkJBQU4sQ0FIc0UsQ0FBdkU7O0FBTUEsYUFBT3NDLDJCQUFQO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNRVyx5QixHQUFQLHFDQUF5RDtBQUFBOztBQUN4RCxhQUNDLDJCQUFDLEtBQUs5Qyw2QkFBTixxRkFBQyx1QkFBb0NJLGNBQXJDLDJEQUFDLHVCQUFvRDJDLGVBQXJELCtCQUNDLEtBQUt0QywrQkFETixvRkFDQyxzQkFBc0N1QyxzQkFEdkMsMkRBQ0MsdUJBQThERCxlQUQvRCxDQUREO0FBSUEsSyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IEFubm90YXRpb25UZXJtIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9FZG1cIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uQW5ub3RhdGlvblRlcm1zLCBDdXN0b21BZ2dyZWdhdGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25Bbm5vdGF0aW9uc19BZ2dyZWdhdGlvbixcblx0RW50aXR5Q29udGFpbmVyQW5ub3RhdGlvbnNfQWdncmVnYXRpb24sXG5cdEVudGl0eVNldEFubm90YXRpb25zX0FnZ3JlZ2F0aW9uLFxuXHRFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQWdncmVnYXRpb25cbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL0FnZ3JlZ2F0aW9uX0VkbVwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuLyoqXG4gKiBoZWxwZXIgY2xhc3MgZm9yIEFnZ3JlZ2F0aW9uIGFubm90YXRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgQWdncmVnYXRpb25IZWxwZXIge1xuXHRfZW50aXR5VHlwZTogRW50aXR5VHlwZTtcblx0X2NvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ7XG5cdF9iQXBwbHlTdXBwb3J0ZWQ6IGJvb2xlYW47XG5cdF9hR3JvdXBhYmxlUHJvcGVydGllcz86IFByb3BlcnR5UGF0aFtdO1xuXHRfYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM/O1xuXHRfb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldDogRW50aXR5VHlwZSB8IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eTtcblx0b1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/OlxuXHRcdHwgQ29sbGVjdGlvbkFubm90YXRpb25zX0FnZ3JlZ2F0aW9uXG5cdFx0fCBFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQWdncmVnYXRpb25cblx0XHR8IEVudGl0eVNldEFubm90YXRpb25zX0FnZ3JlZ2F0aW9uO1xuXG5cdG9Db250YWluZXJBZ2dyZWdhdGlvbkFubm90YXRpb24/OiBFbnRpdHlDb250YWluZXJBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGhlbHBlciBmb3IgYSBzcGVjaWZpYyBlbnRpdHkgdHlwZSBhbmQgYSBjb252ZXJ0ZXIgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIEVudGl0eVR5cGVcblx0ICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIENvbnZlcnRlckNvbnRleHRcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpIHtcblx0XHR0aGlzLl9lbnRpdHlUeXBlID0gZW50aXR5VHlwZTtcblx0XHR0aGlzLl9jb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dDtcblxuXHRcdHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQgPSB0aGlzLl9kZXRlcm1pbmVBZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQoKTtcblx0XHRpZiAodGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIpIHtcblx0XHRcdHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMgPSB0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5hbm5vdGF0aW9uc1xuXHRcdFx0XHQ/LkFnZ3JlZ2F0aW9uIGFzIENvbGxlY3Rpb25Bbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/Ll90eXBlID09PSBcIkVudGl0eVR5cGVcIikge1xuXHRcdFx0dGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucyA9IHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/LmFubm90YXRpb25zXG5cdFx0XHRcdD8uQWdncmVnYXRpb24gYXMgRW50aXR5VHlwZUFubm90YXRpb25zX0FnZ3JlZ2F0aW9uO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uX3R5cGUgPT09IFwiRW50aXR5U2V0XCIpIHtcblx0XHRcdHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMgPSB0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5hbm5vdGF0aW9uc1xuXHRcdFx0XHQ/LkFnZ3JlZ2F0aW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX0FnZ3JlZ2F0aW9uO1xuXHRcdH1cblx0XHR0aGlzLl9iQXBwbHlTdXBwb3J0ZWQgPSB0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZCA/IHRydWUgOiBmYWxzZTtcblxuXHRcdGlmICh0aGlzLl9iQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdHRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzID0gdGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucz8uQXBwbHlTdXBwb3J0ZWQ/Lkdyb3VwYWJsZVByb3BlcnRpZXMgYXMgUHJvcGVydHlQYXRoW107XG5cdFx0XHR0aGlzLl9hQWdncmVnYXRhYmxlUHJvcGVydGllcyA9IHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/LkFwcGx5U3VwcG9ydGVkPy5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzO1xuXG5cdFx0XHR0aGlzLm9Db250YWluZXJBZ2dyZWdhdGlvbkFubm90YXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eUNvbnRhaW5lcigpLmFubm90YXRpb25zXG5cdFx0XHRcdC5BZ2dyZWdhdGlvbiBhcyBFbnRpdHlDb250YWluZXJBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIERldGVybWluZXMgdGhlIG1vc3QgYXBwcm9wcmlhdGUgdGFyZ2V0IGZvciB0aGUgYWdncmVnYXRpb24gYW5ub3RhdGlvbnMuXG5cdCAqXG5cdCAqIEByZXR1cm5zICBFbnRpdHlUeXBlLCBFbnRpdHlTZXQgb3IgTmF2aWdhdGlvblByb3BlcnR5IHdoZXJlIGFnZ3JlZ2F0aW9uIGFubm90YXRpb25zIHNob3VsZCBiZSByZWFkIGZyb20uXG5cdCAqL1xuXHRwcml2YXRlIF9kZXRlcm1pbmVBZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQoKTogRW50aXR5VHlwZSB8IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eSB7XG5cdFx0Y29uc3QgYklzUGFyYW1ldGVyaXplZCA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpPy50YXJnZXRFbnRpdHlTZXQ/LmVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb25cblx0XHRcdD8uUmVzdWx0Q29udGV4dFxuXHRcdFx0PyB0cnVlXG5cdFx0XHQ6IGZhbHNlO1xuXHRcdGxldCBvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlO1xuXG5cdFx0Ly8gZmluZCBBcHBseVN1cHBvcnRlZFxuXHRcdGlmIChiSXNQYXJhbWV0ZXJpemVkKSB7XG5cdFx0XHQvLyBpZiB0aGlzIGlzIGEgcGFyYW1ldGVyaXplZCB2aWV3IHRoZW4gYXBwbHlzdXBwb3J0ZWQgY2FuIGJlIGZvdW5kIGF0IGVpdGhlciB0aGUgbmF2UHJvcCBwb2ludGluZyB0byB0aGUgcmVzdWx0IHNldCBvciBlbnRpdHlUeXBlLlxuXHRcdFx0Ly8gSWYgYXBwbHlTdXBwb3J0ZWQgaXMgcHJlc2VudCBhdCBib3RoIHRoZSBuYXZQcm9wIGFuZCB0aGUgZW50aXR5VHlwZSB0aGVuIG5hdlByb3AgaXMgbW9yZSBzcGVjaWZpYyBzbyB0YWtlIGFubm90YXRpb25zIGZyb20gdGhlcmVcblx0XHRcdC8vIHRhcmdldE9iamVjdCBpbiB0aGUgY29udmVydGVyIGNvbnRleHQgZm9yIGEgcGFyYW1ldGVyaXplZCB2aWV3IGlzIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IHBvaW50aW5nIHRvIHRoIHJlc3VsdCBzZXRcblx0XHRcdGNvbnN0IG9EYXRhTW9kZWxPYmplY3RQYXRoID0gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdFx0XHRjb25zdCBvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0ID0gb0RhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdDtcblx0XHRcdGNvbnN0IG9FbnRpdHlUeXBlT2JqZWN0ID0gb0RhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGU7XG5cdFx0XHRpZiAob05hdmlnYXRpb25Qcm9wZXJ0eU9iamVjdD8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5BcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0XHRvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlID0gb05hdmlnYXRpb25Qcm9wZXJ0eU9iamVjdDtcblx0XHRcdH0gZWxzZSBpZiAob0VudGl0eVR5cGVPYmplY3Q/LmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSA9IG9FbnRpdHlUeXBlT2JqZWN0O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBGb3IgdGhlIHRpbWUgYmVpbmcsIHdlIGlnbm9yZSBhbm5vdGF0aW9ucyBhdCB0aGUgY29udGFpbmVyIGxldmVsLCB1bnRpbCB0aGUgdm9jYWJ1bGFyeSBpcyBzdGFiaWxpemVkXG5cdFx0XHRjb25zdCBvRW50aXR5U2V0T2JqZWN0ID0gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRcdGlmIChvRW50aXR5U2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2UgPSBvRW50aXR5U2V0T2JqZWN0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGVudGl0eSBzdXBwb3J0cyBhbmFseXRpY2FsIHF1ZXJpZXMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBhbmFseXRpY2FsIHF1ZXJpZXMgYXJlIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGlzQW5hbHl0aWNzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9iQXBwbHlTdXBwb3J0ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgaXMgZ3JvdXBhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBzdXBwb3J0IGFuYWx5dGljYWwgcXVlcmllcywgdHJ1ZSBvciBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHB1YmxpYyBpc1Byb3BlcnR5R3JvdXBhYmxlKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5fYkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzIHx8IHRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Ly8gTm8gZ3JvdXBhYmxlUHJvcGVydGllcyAtLT4gYWxsIHByb3BlcnRpZXMgYXJlIGdyb3VwYWJsZVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcy5maW5kSW5kZXgoKHBhdGgpID0+IHBhdGguJHRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUgPT09IHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSkgPj0gMDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBzdXBwb3J0IGFuYWx5dGljYWwgcXVlcmllcywgdHJ1ZSBvciBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHB1YmxpYyBpc1Byb3BlcnR5QWdncmVnYXRhYmxlKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5fYkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBHZXQgdGhlIGN1c3RvbSBhZ2dyZWdhdGVzXG5cdFx0XHRjb25zdCBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnM6IEFubm90YXRpb25UZXJtPEN1c3RvbUFnZ3JlZ2F0ZT5bXSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXG5cdFx0XHRcdFwiQWdncmVnYXRpb25cIixcblx0XHRcdFx0QWdncmVnYXRpb25Bbm5vdGF0aW9uVGVybXMuQ3VzdG9tQWdncmVnYXRlLFxuXHRcdFx0XHRbdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldF1cblx0XHRcdCk7XG5cblx0XHRcdC8vIENoZWNrIGlmIGEgY3VzdG9tIGFnZ3JlZ2F0ZSBoYXMgYSBxdWFsaWZpZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcHJvcGVydHkgbmFtZVxuXHRcdFx0cmV0dXJuIGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucy5zb21lKChhbm5vdGF0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBwcm9wZXJ0eS5uYW1lID09PSBhbm5vdGF0aW9uLnF1YWxpZmllcjtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRHcm91cGFibGVQcm9wZXJ0aWVzKCkge1xuXHRcdHJldHVybiB0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcztcblx0fVxuXG5cdHB1YmxpYyBnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzKCkge1xuXHRcdHJldHVybiB0aGlzLl9hQWdncmVnYXRhYmxlUHJvcGVydGllcztcblx0fVxuXG5cdHB1YmxpYyBnZXRUcmFuc0FnZ3JlZ2F0aW9ucygpIHtcblx0XHRjb25zdCBhVHJhbnNBZ2dyZWdhdGlvbkFubm90YXRpb25zID0gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcblx0XHRcdFwiQW5hbHl0aWNzXCIsXG5cdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydGllc1wiLFxuXHRcdFx0W3RoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5Q29udGFpbmVyKCksIHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXVxuXHRcdCk7XG5cdFx0cmV0dXJuIGFUcmFuc0FnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM7XG5cdH1cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY3VzdG9tIGFnZ3JlZ2F0ZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVudGl0eSB0eXBlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBBIG1hcCAocHJvcGVydHlOYW1lIC0tPiBhcnJheSBvZiBjb250ZXh0LWRlZmluaW5nIHByb3BlcnR5IG5hbWVzKSBmb3IgZWFjaCBjdXN0b20gYWdncmVnYXRlIGNvcnJlc3BvbmRpbmcgdG8gYSBwcm9wZXJ0eS4gVGhlIGFycmF5IG9mXG5cdCAqIGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydHkgbmFtZXMgaXMgZW1wdHkgaWYgdGhlIGN1c3RvbSBhZ2dyZWdhdGUgZG9lc24ndCBoYXZlIGFueSBjb250ZXh0LWRlZmluaW5nIHByb3BlcnR5LlxuXHQgKi9cblx0cHVibGljIGdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCkge1xuXHRcdC8vIEdldCB0aGUgY3VzdG9tIGFnZ3JlZ2F0ZXNcblx0XHRjb25zdCBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnM6IEFubm90YXRpb25UZXJtPEN1c3RvbUFnZ3JlZ2F0ZT5bXSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXG5cdFx0XHRcIkFnZ3JlZ2F0aW9uXCIsXG5cdFx0XHRBZ2dyZWdhdGlvbkFubm90YXRpb25UZXJtcy5DdXN0b21BZ2dyZWdhdGUsXG5cdFx0XHRbdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldF1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbG93ZWQgdHJhbnNmb3JtYXRpb25zIGluIHRoZSAkYXBwbHkuXG5cdCAqIEZpcnN0IGxvb2sgYXQgdGhlIGN1cnJlbnQgRW50aXR5U2V0LCB0aGVuIGxvb2sgYXQgdGhlIGRlZmF1bHQgdmFsdWVzIHByb3ZpZGVkIGF0IHRoZSBjb250YWluZXIgbGV2ZWwuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHRyYW5zZm9ybWF0aW9ucywgb3IgdW5kZWZpbmVkIGlmIG5vIGxpc3QgaXMgZm91bmRcblx0ICovXG5cdHB1YmxpYyBnZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk6IFN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0KHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/LkFwcGx5U3VwcG9ydGVkPy5UcmFuc2Zvcm1hdGlvbnMgYXMgU3RyaW5nW10pIHx8XG5cdFx0XHQodGhpcy5vQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uPy5BcHBseVN1cHBvcnRlZERlZmF1bHRzPy5UcmFuc2Zvcm1hdGlvbnMgYXMgU3RyaW5nW10pXG5cdFx0KTtcblx0fVxufVxuIl19
195
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBZ2dyZWdhdGlvbkhlbHBlciIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiX2VudGl0eVR5cGUiLCJfY29udmVydGVyQ29udGV4dCIsIl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0IiwiX2RldGVybWluZUFnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldCIsIl90eXBlIiwib1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiX2JBcHBseVN1cHBvcnRlZCIsIkFwcGx5U3VwcG9ydGVkIiwiX2FHcm91cGFibGVQcm9wZXJ0aWVzIiwiR3JvdXBhYmxlUHJvcGVydGllcyIsIl9hQWdncmVnYXRhYmxlUHJvcGVydGllcyIsIkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJvQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uIiwiZ2V0RW50aXR5Q29udGFpbmVyIiwiYklzUGFyYW1ldGVyaXplZCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlTZXQiLCJDb21tb24iLCJSZXN1bHRDb250ZXh0Iiwib0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSIsIm9EYXRhTW9kZWxPYmplY3RQYXRoIiwib05hdmlnYXRpb25Qcm9wZXJ0eU9iamVjdCIsInRhcmdldE9iamVjdCIsIm9FbnRpdHlUeXBlT2JqZWN0IiwidGFyZ2V0RW50aXR5VHlwZSIsIm9FbnRpdHlTZXRPYmplY3QiLCJnZXRFbnRpdHlTZXQiLCJnZXRFbnRpdHlUeXBlIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJpc1Byb3BlcnR5R3JvdXBhYmxlIiwicHJvcGVydHkiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJmaW5kSW5kZXgiLCJwYXRoIiwiJHRhcmdldCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzUHJvcGVydHlBZ2dyZWdhdGFibGUiLCJhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsInNvbWUiLCJhbm5vdGF0aW9uIiwibmFtZSIsInF1YWxpZmllciIsImdldEdyb3VwYWJsZVByb3BlcnRpZXMiLCJnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJUcmFuc2Zvcm1hdGlvbnMiLCJBcHBseVN1cHBvcnRlZERlZmF1bHRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBZ2dyZWdhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUFnZ3JlZ2F0ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHR5cGUge1xuXHRDb2xsZWN0aW9uQW5ub3RhdGlvbnNfQWdncmVnYXRpb24sXG5cdEVudGl0eUNvbnRhaW5lckFubm90YXRpb25zX0FnZ3JlZ2F0aW9uLFxuXHRFbnRpdHlTZXRBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbixcblx0RW50aXR5VHlwZUFubm90YXRpb25zX0FnZ3JlZ2F0aW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQWdncmVnYXRpb25fRWRtXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5cbi8qKlxuICogaGVscGVyIGNsYXNzIGZvciBBZ2dyZWdhdGlvbiBhbm5vdGF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0aW9uSGVscGVyIHtcblx0X2VudGl0eVR5cGU6IEVudGl0eVR5cGU7XG5cdF9jb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0O1xuXHRfYkFwcGx5U3VwcG9ydGVkOiBib29sZWFuO1xuXHRfYUdyb3VwYWJsZVByb3BlcnRpZXM/OiBQcm9wZXJ0eVBhdGhbXTtcblx0X2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzPztcblx0X29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ6IEVudGl0eVR5cGUgfCBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdG9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPzpcblx0XHR8IENvbGxlY3Rpb25Bbm5vdGF0aW9uc19BZ2dyZWdhdGlvblxuXHRcdHwgRW50aXR5VHlwZUFubm90YXRpb25zX0FnZ3JlZ2F0aW9uXG5cdFx0fCBFbnRpdHlTZXRBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblxuXHRvQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uPzogRW50aXR5Q29udGFpbmVyQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGEgc3BlY2lmaWMgZW50aXR5IHR5cGUgYW5kIGEgY29udmVydGVyIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBFbnRpdHlUeXBlXG5cdCAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBDb252ZXJ0ZXJDb250ZXh0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0dGhpcy5fZW50aXR5VHlwZSA9IGVudGl0eVR5cGU7XG5cdFx0dGhpcy5fY29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQ7XG5cblx0XHR0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0ID0gdGhpcy5fZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0KCk7XG5cdFx0aWYgKHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHR0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zID0gdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uYW5ub3RhdGlvbnNcblx0XHRcdFx0Py5BZ2dyZWdhdGlvbiBhcyBDb2xsZWN0aW9uQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5fdHlwZSA9PT0gXCJFbnRpdHlUeXBlXCIpIHtcblx0XHRcdHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMgPSB0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5hbm5vdGF0aW9uc1xuXHRcdFx0XHQ/LkFnZ3JlZ2F0aW9uIGFzIEVudGl0eVR5cGVBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/Ll90eXBlID09PSBcIkVudGl0eVNldFwiKSB7XG5cdFx0XHR0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zID0gdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uYW5ub3RhdGlvbnNcblx0XHRcdFx0Py5BZ2dyZWdhdGlvbiBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblx0XHR9XG5cdFx0dGhpcy5fYkFwcGx5U3VwcG9ydGVkID0gdGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucz8uQXBwbHlTdXBwb3J0ZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRpZiAodGhpcy5fYkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHR0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcyA9IHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/LkFwcGx5U3VwcG9ydGVkPy5Hcm91cGFibGVQcm9wZXJ0aWVzIGFzIFByb3BlcnR5UGF0aFtdO1xuXHRcdFx0dGhpcy5fYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgPSB0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZD8uQWdncmVnYXRhYmxlUHJvcGVydGllcztcblxuXHRcdFx0dGhpcy5vQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKS5hbm5vdGF0aW9uc1xuXHRcdFx0XHQuQWdncmVnYXRpb24gYXMgRW50aXR5Q29udGFpbmVyQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHRhcmdldCBmb3IgdGhlIGFnZ3JlZ2F0aW9uIGFubm90YXRpb25zLlxuXHQgKlxuXHQgKiBAcmV0dXJucyAgRW50aXR5VHlwZSwgRW50aXR5U2V0IG9yIE5hdmlnYXRpb25Qcm9wZXJ0eSB3aGVyZSBhZ2dyZWdhdGlvbiBhbm5vdGF0aW9ucyBzaG91bGQgYmUgcmVhZCBmcm9tLlxuXHQgKi9cblx0cHJpdmF0ZSBfZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0KCk6IEVudGl0eVR5cGUgfCBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHkge1xuXHRcdGNvbnN0IGJJc1BhcmFtZXRlcml6ZWQgPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKT8udGFyZ2V0RW50aXR5U2V0Py5lbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uXG5cdFx0XHQ/LlJlc3VsdENvbnRleHRcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0XHRsZXQgb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZTtcblxuXHRcdC8vIGZpbmQgQXBwbHlTdXBwb3J0ZWRcblx0XHRpZiAoYklzUGFyYW1ldGVyaXplZCkge1xuXHRcdFx0Ly8gaWYgdGhpcyBpcyBhIHBhcmFtZXRlcml6ZWQgdmlldyB0aGVuIGFwcGx5c3VwcG9ydGVkIGNhbiBiZSBmb3VuZCBhdCBlaXRoZXIgdGhlIG5hdlByb3AgcG9pbnRpbmcgdG8gdGhlIHJlc3VsdCBzZXQgb3IgZW50aXR5VHlwZS5cblx0XHRcdC8vIElmIGFwcGx5U3VwcG9ydGVkIGlzIHByZXNlbnQgYXQgYm90aCB0aGUgbmF2UHJvcCBhbmQgdGhlIGVudGl0eVR5cGUgdGhlbiBuYXZQcm9wIGlzIG1vcmUgc3BlY2lmaWMgc28gdGFrZSBhbm5vdGF0aW9ucyBmcm9tIHRoZXJlXG5cdFx0XHQvLyB0YXJnZXRPYmplY3QgaW4gdGhlIGNvbnZlcnRlciBjb250ZXh0IGZvciBhIHBhcmFtZXRlcml6ZWQgdmlldyBpcyB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBwb2ludGluZyB0byB0aCByZXN1bHQgc2V0XG5cdFx0XHRjb25zdCBvRGF0YU1vZGVsT2JqZWN0UGF0aCA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25Qcm9wZXJ0eU9iamVjdCA9IG9EYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q7XG5cdFx0XHRjb25zdCBvRW50aXR5VHlwZU9iamVjdCA9IG9EYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlO1xuXHRcdFx0aWYgKG9OYXZpZ2F0aW9uUHJvcGVydHlPYmplY3Q/LmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSA9IG9OYXZpZ2F0aW9uUHJvcGVydHlPYmplY3Q7XG5cdFx0XHR9IGVsc2UgaWYgKG9FbnRpdHlUeXBlT2JqZWN0Py5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2UgPSBvRW50aXR5VHlwZU9iamVjdDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRm9yIHRoZSB0aW1lIGJlaW5nLCB3ZSBpZ25vcmUgYW5ub3RhdGlvbnMgYXQgdGhlIGNvbnRhaW5lciBsZXZlbCwgdW50aWwgdGhlIHZvY2FidWxhcnkgaXMgc3RhYmlsaXplZFxuXHRcdFx0Y29uc3Qgb0VudGl0eVNldE9iamVjdCA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0XHRpZiAob0VudGl0eVNldE9iamVjdD8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5BcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0XHRvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlID0gb0VudGl0eVNldE9iamVjdDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2UgPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2U7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBlbnRpdHkgc3VwcG9ydHMgYW5hbHl0aWNhbCBxdWVyaWVzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYW5hbHl0aWNhbCBxdWVyaWVzIGFyZSBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBpc0FuYWx5dGljc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fYkFwcGx5U3VwcG9ydGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIHByb3BlcnR5IGlzIGdyb3VwYWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXMsIHRydWUgb3IgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwdWJsaWMgaXNQcm9wZXJ0eUdyb3VwYWJsZShwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuX2JBcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKCF0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcyB8fCB0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcy5sZW5ndGggPT09IDApIHtcblx0XHRcdC8vIE5vIGdyb3VwYWJsZVByb3BlcnRpZXMgLS0+IGFsbCBwcm9wZXJ0aWVzIGFyZSBncm91cGFibGVcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXMuZmluZEluZGV4KChwYXRoKSA9PiBwYXRoLiR0YXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lID09PSBwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUpID49IDA7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIHByb3BlcnR5IGlzIGFnZ3JlZ2F0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXMsIHRydWUgb3IgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwdWJsaWMgaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZShwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuX2JBcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gR2V0IHRoZSBjdXN0b20gYWdncmVnYXRlc1xuXHRcdFx0Y29uc3QgYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zOiBDdXN0b21BZ2dyZWdhdGVbXSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXG5cdFx0XHRcdFwiQWdncmVnYXRpb25cIixcblx0XHRcdFx0QWdncmVnYXRpb25Bbm5vdGF0aW9uVGVybXMuQ3VzdG9tQWdncmVnYXRlLFxuXHRcdFx0XHRbdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldF1cblx0XHRcdCk7XG5cblx0XHRcdC8vIENoZWNrIGlmIGEgY3VzdG9tIGFnZ3JlZ2F0ZSBoYXMgYSBxdWFsaWZpZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcHJvcGVydHkgbmFtZVxuXHRcdFx0cmV0dXJuIGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucy5zb21lKChhbm5vdGF0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBwcm9wZXJ0eS5uYW1lID09PSBhbm5vdGF0aW9uLnF1YWxpZmllcjtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRHcm91cGFibGVQcm9wZXJ0aWVzKCkge1xuXHRcdHJldHVybiB0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcztcblx0fVxuXG5cdHB1YmxpYyBnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzKCkge1xuXHRcdHJldHVybiB0aGlzLl9hQWdncmVnYXRhYmxlUHJvcGVydGllcztcblx0fVxuXG5cdHB1YmxpYyBnZXRUcmFuc0FnZ3JlZ2F0aW9ucygpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIkFuYWx5dGljc1wiLCBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydGllc1wiLCBbXG5cdFx0XHR0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eUNvbnRhaW5lcigpLFxuXHRcdFx0dGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHRdKTtcblx0fVxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGlzdCBvZiBjdXN0b20gYWdncmVnYXRlIGRlZmluaXRpb25zIGZvciB0aGUgZW50aXR5IHR5cGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEEgbWFwIChwcm9wZXJ0eU5hbWUgLS0+IGFycmF5IG9mIGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydHkgbmFtZXMpIGZvciBlYWNoIGN1c3RvbSBhZ2dyZWdhdGUgY29ycmVzcG9uZGluZyB0byBhIHByb3BlcnR5LiBUaGUgYXJyYXkgb2Zcblx0ICogY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0eSBuYW1lcyBpcyBlbXB0eSBpZiB0aGUgY3VzdG9tIGFnZ3JlZ2F0ZSBkb2Vzbid0IGhhdmUgYW55IGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydHkuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKSB7XG5cdFx0Ly8gR2V0IHRoZSBjdXN0b20gYWdncmVnYXRlc1xuXHRcdGNvbnN0IGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9uczogQ3VzdG9tQWdncmVnYXRlW10gPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdFx0XCJBZ2dyZWdhdGlvblwiLFxuXHRcdFx0QWdncmVnYXRpb25Bbm5vdGF0aW9uVGVybXMuQ3VzdG9tQWdncmVnYXRlLFxuXHRcdFx0W3RoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXRdXG5cdFx0KTtcblxuXHRcdHJldHVybiBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGlzdCBvZiBhbGxvd2VkIHRyYW5zZm9ybWF0aW9ucyBpbiB0aGUgJGFwcGx5LlxuXHQgKiBGaXJzdCBsb29rIGF0IHRoZSBjdXJyZW50IEVudGl0eVNldCwgdGhlbiBsb29rIGF0IHRoZSBkZWZhdWx0IHZhbHVlcyBwcm92aWRlZCBhdCB0aGUgY29udGFpbmVyIGxldmVsLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiB0cmFuc2Zvcm1hdGlvbnMsIG9yIHVuZGVmaW5lZCBpZiBubyBsaXN0IGlzIGZvdW5kXG5cdCAqL1xuXHRwdWJsaWMgZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpOiBTdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChcblx0XHRcdCh0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZD8uVHJhbnNmb3JtYXRpb25zIGFzIFN0cmluZ1tdKSB8fFxuXHRcdFx0KHRoaXMub0NvbnRhaW5lckFnZ3JlZ2F0aW9uQW5ub3RhdGlvbj8uQXBwbHlTdXBwb3J0ZWREZWZhdWx0cz8uVHJhbnNmb3JtYXRpb25zIGFzIFN0cmluZ1tdKVxuXHRcdCk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7O0VBV0E7QUFDQTtBQUNBO01BQ2FBLGlCO0lBY1o7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0MsMkJBQVlDLFVBQVosRUFBb0NDLGdCQUFwQyxFQUF3RTtNQUFBOztNQUN2RSxLQUFLQyxXQUFMLEdBQW1CRixVQUFuQjtNQUNBLEtBQUtHLGlCQUFMLEdBQXlCRixnQkFBekI7TUFFQSxLQUFLRyw2QkFBTCxHQUFxQyxLQUFLQyxxQ0FBTCxFQUFyQzs7TUFDQSxJQUFJLCtCQUFLRCw2QkFBTCxnRkFBb0NFLEtBQXBDLE1BQThDLG9CQUFsRCxF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