@sapui5/sap.fe.core 1.110.0 → 1.111.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 (654) hide show
  1. package/README.md +0 -4
  2. package/package.json +2 -23
  3. package/src/sap/fe/core/.library +1 -1
  4. package/src/sap/fe/core/ActionRuntime-dbg.js +182 -0
  5. package/src/sap/fe/core/ActionRuntime.js +3 -181
  6. package/src/sap/fe/core/ActionRuntime.js.map +1 -0
  7. package/src/sap/fe/core/ActionRuntime.ts +3 -5
  8. package/src/sap/fe/core/AppComponent-dbg.js +435 -0
  9. package/src/sap/fe/core/AppComponent.js +3 -439
  10. package/src/sap/fe/core/AppComponent.js.map +1 -0
  11. package/src/sap/fe/core/AppComponent.ts +0 -3
  12. package/src/sap/fe/core/AppStateHandler-dbg.js +200 -0
  13. package/src/sap/fe/core/AppStateHandler.js +3 -227
  14. package/src/sap/fe/core/AppStateHandler.js.map +1 -0
  15. package/src/sap/fe/core/BaseController-dbg.js +76 -0
  16. package/src/sap/fe/core/BaseController.js +3 -73
  17. package/src/sap/fe/core/BaseController.js.map +1 -0
  18. package/src/sap/fe/core/CommonUtils-dbg.js +2135 -0
  19. package/src/sap/fe/core/CommonUtils.js +3 -2296
  20. package/src/sap/fe/core/CommonUtils.js.map +1 -0
  21. package/src/sap/fe/core/CommonUtils.ts +34 -28
  22. package/src/sap/fe/core/ExtensionAPI-dbg.js +273 -0
  23. package/src/sap/fe/core/ExtensionAPI.js +3 -280
  24. package/src/sap/fe/core/ExtensionAPI.js.map +1 -0
  25. package/src/sap/fe/core/PageController-dbg.js +203 -0
  26. package/src/sap/fe/core/PageController.js +3 -200
  27. package/src/sap/fe/core/PageController.js.map +1 -0
  28. package/src/sap/fe/core/TemplateComponent-dbg.js +218 -0
  29. package/src/sap/fe/core/TemplateComponent.js +3 -216
  30. package/src/sap/fe/core/TemplateComponent.js.map +1 -0
  31. package/src/sap/fe/core/TemplateModel-dbg.js +75 -0
  32. package/src/sap/fe/core/TemplateModel.js +3 -72
  33. package/src/sap/fe/core/TemplateModel.js.map +1 -0
  34. package/src/sap/fe/core/buildingBlocks/AttributeModel-dbg.js +57 -0
  35. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +3 -54
  36. package/src/sap/fe/core/buildingBlocks/AttributeModel.js.map +1 -0
  37. package/src/sap/fe/core/buildingBlocks/BuildingBlock-dbg.js +410 -0
  38. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +11 -355
  39. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js.map +1 -0
  40. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +118 -52
  41. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter-dbg.js +14 -0
  42. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +3 -11
  43. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js.map +1 -0
  44. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment-dbg.js +44 -0
  45. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js +3 -40
  46. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js.map +1 -0
  47. package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.ts +3 -0
  48. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime-dbg.js +932 -0
  49. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +16 -1292
  50. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js.map +1 -0
  51. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +40 -42
  52. package/src/sap/fe/core/buildingBlocks/TraceInfo-dbg.js +434 -0
  53. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +3 -481
  54. package/src/sap/fe/core/buildingBlocks/TraceInfo.js.map +1 -0
  55. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +5 -5
  56. package/src/sap/fe/core/controllerextensions/BusyLocker-dbg.js +92 -0
  57. package/src/sap/fe/core/controllerextensions/BusyLocker.js +3 -89
  58. package/src/sap/fe/core/controllerextensions/BusyLocker.js.map +1 -0
  59. package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +1659 -0
  60. package/src/sap/fe/core/controllerextensions/EditFlow.js +3 -1868
  61. package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -0
  62. package/src/sap/fe/core/controllerextensions/EditFlow.ts +180 -125
  63. package/src/sap/fe/core/controllerextensions/Feedback-dbg.js +70 -0
  64. package/src/sap/fe/core/controllerextensions/Feedback.js +3 -67
  65. package/src/sap/fe/core/controllerextensions/Feedback.js.map +1 -0
  66. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation-dbg.js +83 -0
  67. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -84
  68. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js.map +1 -0
  69. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -8
  70. package/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +711 -0
  71. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +3 -707
  72. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js.map +1 -0
  73. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +79 -48
  74. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +791 -0
  75. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +3 -696
  76. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -0
  77. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +107 -7
  78. package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +984 -0
  79. package/src/sap/fe/core/controllerextensions/InternalRouting.js +3 -996
  80. package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -0
  81. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +43 -23
  82. package/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +1013 -0
  83. package/src/sap/fe/core/controllerextensions/KPIManagement.js +3 -1011
  84. package/src/sap/fe/core/controllerextensions/KPIManagement.js.map +1 -0
  85. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -10
  86. package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +135 -0
  87. package/src/sap/fe/core/controllerextensions/MassEdit.js +3 -133
  88. package/src/sap/fe/core/controllerextensions/MassEdit.js.map +1 -0
  89. package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
  90. package/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +221 -0
  91. package/src/sap/fe/core/controllerextensions/MessageHandler.js +3 -224
  92. package/src/sap/fe/core/controllerextensions/MessageHandler.js.map +1 -0
  93. package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +254 -0
  94. package/src/sap/fe/core/controllerextensions/PageReady.js +3 -279
  95. package/src/sap/fe/core/controllerextensions/PageReady.js.map +1 -0
  96. package/src/sap/fe/core/controllerextensions/PageReady.ts +2 -2
  97. package/src/sap/fe/core/controllerextensions/Paginator-dbg.js +169 -0
  98. package/src/sap/fe/core/controllerextensions/Paginator.js +3 -174
  99. package/src/sap/fe/core/controllerextensions/Paginator.js.map +1 -0
  100. package/src/sap/fe/core/controllerextensions/Paginator.ts +4 -5
  101. package/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +132 -0
  102. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -130
  103. package/src/sap/fe/core/controllerextensions/Placeholder.js.map +1 -0
  104. package/src/sap/fe/core/controllerextensions/Routing-dbg.js +138 -0
  105. package/src/sap/fe/core/controllerextensions/Routing.js +3 -135
  106. package/src/sap/fe/core/controllerextensions/Routing.js.map +1 -0
  107. package/src/sap/fe/core/controllerextensions/RoutingListener-dbg.js +10 -0
  108. package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -7
  109. package/src/sap/fe/core/controllerextensions/RoutingListener.js.map +1 -0
  110. package/src/sap/fe/core/controllerextensions/Share-dbg.js +317 -0
  111. package/src/sap/fe/core/controllerextensions/Share.js +3 -356
  112. package/src/sap/fe/core/controllerextensions/Share.js.map +1 -0
  113. package/src/sap/fe/core/controllerextensions/Share.ts +6 -1
  114. package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +553 -0
  115. package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -651
  116. package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -0
  117. package/src/sap/fe/core/controllerextensions/SideEffects.ts +411 -553
  118. package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +903 -0
  119. package/src/sap/fe/core/controllerextensions/ViewState.js +3 -967
  120. package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -0
  121. package/src/sap/fe/core/controllerextensions/ViewState.ts +90 -41
  122. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase-dbg.js +99 -0
  123. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +3 -96
  124. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js.map +1 -0
  125. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +314 -0
  126. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +3 -336
  127. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -0
  128. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +152 -0
  129. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +3 -161
  130. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -0
  131. package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +243 -0
  132. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +3 -302
  133. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -0
  134. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block-dbg.js +252 -0
  135. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +6 -0
  136. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js.map +1 -0
  137. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +188 -0
  138. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +1196 -0
  139. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +3 -1479
  140. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -0
  141. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +239 -289
  142. package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +689 -0
  143. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -785
  144. package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -0
  145. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +134 -142
  146. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup-dbg.js +236 -0
  147. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -287
  148. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -0
  149. package/src/sap/fe/core/controllerextensions/editFlow/operations-dbg.js +1422 -0
  150. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +3 -1598
  151. package/src/sap/fe/core/controllerextensions/editFlow/operations.js.map +1 -0
  152. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +40 -24
  153. package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +185 -0
  154. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +3 -214
  155. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -0
  156. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -5
  157. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +1219 -0
  158. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -1213
  159. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -0
  160. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher-dbg.js +304 -0
  161. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +3 -339
  162. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js.map +1 -0
  163. package/src/sap/fe/core/controllerextensions/routing/NavigationReason-dbg.js +15 -0
  164. package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +6 -0
  165. package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js.map +1 -0
  166. package/src/sap/fe/core/controllerextensions/routing/NavigationReason.ts +6 -0
  167. package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +798 -0
  168. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +3 -799
  169. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -0
  170. package/src/sap/fe/core/controls/Any-dbg.js +32 -0
  171. package/src/sap/fe/core/controls/Any.js +3 -29
  172. package/src/sap/fe/core/controls/Any.js.map +1 -0
  173. package/src/sap/fe/core/controls/AnyElement-dbg.js +29 -0
  174. package/src/sap/fe/core/controls/AnyElement.js +3 -26
  175. package/src/sap/fe/core/controls/AnyElement.js.map +1 -0
  176. package/src/sap/fe/core/controls/CommandExecution-dbg.js +72 -0
  177. package/src/sap/fe/core/controls/CommandExecution.js +3 -69
  178. package/src/sap/fe/core/controls/CommandExecution.js.map +1 -0
  179. package/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +151 -0
  180. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -148
  181. package/src/sap/fe/core/controls/ConditionalWrapper.js.map +1 -0
  182. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper-dbg.js +330 -0
  183. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +3 -328
  184. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js.map +1 -0
  185. package/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +126 -0
  186. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -124
  187. package/src/sap/fe/core/controls/CustomQuickViewPage.js.map +1 -0
  188. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +170 -0
  189. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -171
  190. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +1 -0
  191. package/src/sap/fe/core/controls/FieldWrapper-dbg.js +194 -0
  192. package/src/sap/fe/core/controls/FieldWrapper.js +3 -191
  193. package/src/sap/fe/core/controls/FieldWrapper.js.map +1 -0
  194. package/src/sap/fe/core/controls/FileWrapper-dbg.js +280 -0
  195. package/src/sap/fe/core/controls/FileWrapper.js +3 -277
  196. package/src/sap/fe/core/controls/FileWrapper.js.map +1 -0
  197. package/src/sap/fe/core/controls/FilterBar-dbg.js +167 -0
  198. package/src/sap/fe/core/controls/FilterBar.js +3 -166
  199. package/src/sap/fe/core/controls/FilterBar.js.map +1 -0
  200. package/src/sap/fe/core/controls/FormElementWrapper-dbg.js +92 -0
  201. package/src/sap/fe/core/controls/FormElementWrapper.js +3 -89
  202. package/src/sap/fe/core/controls/FormElementWrapper.js.map +1 -0
  203. package/src/sap/fe/core/controls/MassEditSelect-dbg.js +33 -0
  204. package/src/sap/fe/core/controls/MassEditSelect.js +3 -30
  205. package/src/sap/fe/core/controls/MassEditSelect.js.map +1 -0
  206. package/src/sap/fe/core/controls/MultiValueParameterDelegate-dbg.js +37 -0
  207. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -34
  208. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js.map +1 -0
  209. package/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +119 -0
  210. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -121
  211. package/src/sap/fe/core/controls/filterbar/FilterContainer.js.map +1 -0
  212. package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +267 -0
  213. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +3 -264
  214. package/src/sap/fe/core/controls/filterbar/VisualFilter.js.map +1 -0
  215. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +150 -0
  216. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -150
  217. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js.map +1 -0
  218. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +310 -0
  219. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -307
  220. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -0
  221. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +1 -1
  222. package/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +491 -0
  223. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +3 -504
  224. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js.map +1 -0
  225. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +2 -2
  226. package/src/sap/fe/core/converters/ConverterContext-dbg.js +403 -0
  227. package/src/sap/fe/core/converters/ConverterContext.js +3 -406
  228. package/src/sap/fe/core/converters/ConverterContext.js.map +1 -0
  229. package/src/sap/fe/core/converters/ManifestSettings-dbg.js +88 -0
  230. package/src/sap/fe/core/converters/ManifestSettings.js +3 -84
  231. package/src/sap/fe/core/converters/ManifestSettings.js.map +1 -0
  232. package/src/sap/fe/core/converters/ManifestSettings.ts +3 -1
  233. package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +402 -0
  234. package/src/sap/fe/core/converters/ManifestWrapper.js +3 -406
  235. package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -0
  236. package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +1161 -0
  237. package/src/sap/fe/core/converters/MetaModelConverter.js +3 -1225
  238. package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -0
  239. package/src/sap/fe/core/converters/MetaModelConverter.ts +193 -199
  240. package/src/sap/fe/core/converters/TemplateConverter-dbg.js +89 -0
  241. package/src/sap/fe/core/converters/TemplateConverter.js +3 -86
  242. package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -0
  243. package/src/sap/fe/core/converters/annotations/DataField-dbg.js +396 -0
  244. package/src/sap/fe/core/converters/annotations/DataField.js +3 -394
  245. package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -0
  246. package/src/sap/fe/core/converters/annotations/DataField.ts +5 -5
  247. package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +1948 -0
  248. package/src/sap/fe/core/converters/common/AnnotationConverter.js +3 -1868
  249. package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -0
  250. package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +424 -0
  251. package/src/sap/fe/core/converters/controls/Common/Action.js +3 -446
  252. package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -0
  253. package/src/sap/fe/core/converters/controls/Common/Action.ts +31 -14
  254. package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +276 -0
  255. package/src/sap/fe/core/converters/controls/Common/Chart.js +3 -260
  256. package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -0
  257. package/src/sap/fe/core/converters/controls/Common/Chart.ts +52 -7
  258. package/src/sap/fe/core/converters/controls/Common/Criticality-dbg.js +42 -0
  259. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -39
  260. package/src/sap/fe/core/converters/controls/Common/Criticality.js.map +1 -0
  261. package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +247 -0
  262. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -242
  263. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -0
  264. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +1 -1
  265. package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +229 -0
  266. package/src/sap/fe/core/converters/controls/Common/Form.js +3 -234
  267. package/src/sap/fe/core/converters/controls/Common/Form.js.map +1 -0
  268. package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +374 -0
  269. package/src/sap/fe/core/converters/controls/Common/KPI.js +3 -371
  270. package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -0
  271. package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +2596 -0
  272. package/src/sap/fe/core/converters/controls/Common/Table.js +3 -2527
  273. package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -0
  274. package/src/sap/fe/core/converters/controls/Common/Table.ts +214 -77
  275. package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +522 -0
  276. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +3 -527
  277. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -0
  278. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +51 -50
  279. package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +786 -0
  280. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +3 -845
  281. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -0
  282. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +0 -64
  283. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +291 -0
  284. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +3 -316
  285. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -0
  286. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +30 -12
  287. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar-dbg.js +56 -0
  288. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +3 -53
  289. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js.map +1 -0
  290. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet-dbg.js +438 -0
  291. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -431
  292. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js.map +1 -0
  293. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +597 -0
  294. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +3 -630
  295. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -0
  296. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +1 -1
  297. package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +204 -0
  298. package/src/sap/fe/core/converters/helpers/Aggregation.js +3 -204
  299. package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -0
  300. package/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +100 -0
  301. package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -99
  302. package/src/sap/fe/core/converters/helpers/BindingHelper.js.map +1 -0
  303. package/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +199 -0
  304. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +3 -199
  305. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js.map +1 -0
  306. package/src/sap/fe/core/converters/helpers/DataFieldHelper-dbg.js +143 -0
  307. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +3 -140
  308. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js.map +1 -0
  309. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +2 -1
  310. package/src/sap/fe/core/converters/helpers/ID-dbg.js +92 -0
  311. package/src/sap/fe/core/converters/helpers/ID.js +3 -89
  312. package/src/sap/fe/core/converters/helpers/ID.js.map +1 -0
  313. package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +62 -0
  314. package/src/sap/fe/core/converters/helpers/IssueManager.js +3 -59
  315. package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -0
  316. package/src/sap/fe/core/converters/helpers/Key-dbg.js +62 -0
  317. package/src/sap/fe/core/converters/helpers/Key.js +3 -59
  318. package/src/sap/fe/core/converters/helpers/Key.js.map +1 -0
  319. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  320. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper-dbg.js +80 -0
  321. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +3 -77
  322. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js.map +1 -0
  323. package/src/sap/fe/core/converters/objectPage/FormMenuActions-dbg.js +142 -0
  324. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +3 -139
  325. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js.map +1 -0
  326. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +406 -0
  327. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +3 -422
  328. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -0
  329. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +132 -111
  330. package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +557 -0
  331. package/src/sap/fe/core/converters/templates/ListReportConverter.js +3 -589
  332. package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -0
  333. package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +474 -0
  334. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +3 -477
  335. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -0
  336. package/src/sap/fe/core/designtime/AppComponent-dbg.designtime.js +103 -0
  337. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -100
  338. package/src/sap/fe/core/designtime/AppComponent.designtime.js.map +1 -0
  339. package/src/sap/fe/core/designtime/library-preload.designtime.js +7 -0
  340. package/src/sap/fe/core/designtime/library-preload.designtime.js.map +1 -0
  341. package/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +95 -0
  342. package/src/sap/fe/core/formatters/CollaborationFormatter.js +3 -92
  343. package/src/sap/fe/core/formatters/CollaborationFormatter.js.map +1 -0
  344. package/src/sap/fe/core/formatters/FPMFormatter-dbg.js +46 -0
  345. package/src/sap/fe/core/formatters/FPMFormatter.js +3 -44
  346. package/src/sap/fe/core/formatters/FPMFormatter.js.map +1 -0
  347. package/src/sap/fe/core/formatters/FPMFormatter.ts +3 -2
  348. package/src/sap/fe/core/formatters/FiscalFormat-dbg.js +343 -0
  349. package/src/sap/fe/core/formatters/FiscalFormat.js +6 -0
  350. package/src/sap/fe/core/formatters/FiscalFormat.js.map +1 -0
  351. package/src/sap/fe/core/formatters/FiscalFormat.ts +319 -0
  352. package/src/sap/fe/core/formatters/KPIFormatter-dbg.js +86 -0
  353. package/src/sap/fe/core/formatters/KPIFormatter.js +3 -83
  354. package/src/sap/fe/core/formatters/KPIFormatter.js.map +1 -0
  355. package/src/sap/fe/core/formatters/StandardFormatter-dbg.js +80 -0
  356. package/src/sap/fe/core/formatters/StandardFormatter.js +3 -78
  357. package/src/sap/fe/core/formatters/StandardFormatter.js.map +1 -0
  358. package/src/sap/fe/core/formatters/TableFormatter-dbg.js +276 -0
  359. package/src/sap/fe/core/formatters/TableFormatter.js +3 -275
  360. package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -0
  361. package/src/sap/fe/core/formatters/TableFormatter.ts +1 -1
  362. package/src/sap/fe/core/formatters/TableFormatterTypes-dbg.js +20 -0
  363. package/src/sap/fe/core/formatters/TableFormatterTypes.js +3 -17
  364. package/src/sap/fe/core/formatters/TableFormatterTypes.js.map +1 -0
  365. package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +172 -0
  366. package/src/sap/fe/core/formatters/ValueFormatter.js +3 -161
  367. package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -0
  368. package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -8
  369. package/src/sap/fe/core/fpm/Component-dbg.js +94 -0
  370. package/src/sap/fe/core/fpm/Component.js +3 -91
  371. package/src/sap/fe/core/fpm/Component.js.map +1 -0
  372. package/src/sap/fe/core/fpm/manifest.json +1 -1
  373. package/src/sap/fe/core/helpers/AnnotationEnum-dbg.js +30 -0
  374. package/src/sap/fe/core/helpers/AnnotationEnum.js +3 -36
  375. package/src/sap/fe/core/helpers/AnnotationEnum.js.map +1 -0
  376. package/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +334 -0
  377. package/src/sap/fe/core/helpers/AppStartupHelper.js +3 -335
  378. package/src/sap/fe/core/helpers/AppStartupHelper.js.map +1 -0
  379. package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +1739 -0
  380. package/src/sap/fe/core/helpers/BindingToolkit.js +3 -1611
  381. package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -0
  382. package/src/sap/fe/core/helpers/BindingToolkit.ts +277 -97
  383. package/src/sap/fe/core/helpers/ClassSupport-dbg.js +421 -0
  384. package/src/sap/fe/core/helpers/ClassSupport.js +3 -420
  385. package/src/sap/fe/core/helpers/ClassSupport.js.map +1 -0
  386. package/src/sap/fe/core/helpers/ClassSupport.ts +13 -15
  387. package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +526 -0
  388. package/src/sap/fe/core/helpers/DeleteHelper.js +3 -618
  389. package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -0
  390. package/src/sap/fe/core/helpers/DeleteHelper.ts +116 -134
  391. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper-dbg.js +55 -0
  392. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +3 -52
  393. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js.map +1 -0
  394. package/src/sap/fe/core/helpers/EditState-dbg.js +80 -0
  395. package/src/sap/fe/core/helpers/EditState.js +3 -77
  396. package/src/sap/fe/core/helpers/EditState.js.map +1 -0
  397. package/src/sap/fe/core/helpers/ExcelFormatHelper-dbg.js +55 -0
  398. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +3 -52
  399. package/src/sap/fe/core/helpers/ExcelFormatHelper.js.map +1 -0
  400. package/src/sap/fe/core/helpers/FPMHelper-dbg.js +55 -0
  401. package/src/sap/fe/core/helpers/FPMHelper.js +3 -52
  402. package/src/sap/fe/core/helpers/FPMHelper.js.map +1 -0
  403. package/src/sap/fe/core/helpers/KeepAliveHelper-dbg.js +180 -0
  404. package/src/sap/fe/core/helpers/KeepAliveHelper.js +3 -177
  405. package/src/sap/fe/core/helpers/KeepAliveHelper.js.map +1 -0
  406. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes-dbg.js +28 -0
  407. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +3 -25
  408. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js.map +1 -0
  409. package/src/sap/fe/core/helpers/LoaderUtils-dbg.js +29 -0
  410. package/src/sap/fe/core/helpers/LoaderUtils.js +3 -30
  411. package/src/sap/fe/core/helpers/LoaderUtils.js.map +1 -0
  412. package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +1229 -0
  413. package/src/sap/fe/core/helpers/MassEditHelper.js +3 -1309
  414. package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -0
  415. package/src/sap/fe/core/helpers/MassEditHelper.ts +6 -6
  416. package/src/sap/fe/core/helpers/MessageStrip-dbg.js +65 -0
  417. package/src/sap/fe/core/helpers/MessageStrip.js +3 -62
  418. package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -0
  419. package/src/sap/fe/core/helpers/ModelHelper-dbg.js +489 -0
  420. package/src/sap/fe/core/helpers/ModelHelper.js +3 -503
  421. package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -0
  422. package/src/sap/fe/core/helpers/ModelHelper.ts +13 -36
  423. package/src/sap/fe/core/helpers/PasteHelper-dbg.js +174 -0
  424. package/src/sap/fe/core/helpers/PasteHelper.js +3 -185
  425. package/src/sap/fe/core/helpers/PasteHelper.js.map +1 -0
  426. package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +371 -0
  427. package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -368
  428. package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -0
  429. package/src/sap/fe/core/helpers/SemanticKeyHelper-dbg.js +70 -0
  430. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -67
  431. package/src/sap/fe/core/helpers/SemanticKeyHelper.js.map +1 -0
  432. package/src/sap/fe/core/helpers/SideEffectsHelper-dbg.js +141 -0
  433. package/src/sap/fe/core/helpers/SideEffectsHelper.js +3 -137
  434. package/src/sap/fe/core/helpers/SideEffectsHelper.js.map +1 -0
  435. package/src/sap/fe/core/helpers/SideEffectsHelper.ts +3 -2
  436. package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +204 -0
  437. package/src/sap/fe/core/helpers/StableIdHelper.js +3 -208
  438. package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -0
  439. package/src/sap/fe/core/helpers/Synchronization-dbg.js +35 -0
  440. package/src/sap/fe/core/helpers/Synchronization.js +3 -33
  441. package/src/sap/fe/core/helpers/Synchronization.js.map +1 -0
  442. package/src/sap/fe/core/helpers/ToES6Promise-dbg.js +29 -0
  443. package/src/sap/fe/core/helpers/ToES6Promise.js +3 -26
  444. package/src/sap/fe/core/helpers/ToES6Promise.js.map +1 -0
  445. package/src/sap/fe/core/helpers/TypeGuards-dbg.js +20 -0
  446. package/src/sap/fe/core/helpers/TypeGuards.js +3 -19
  447. package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -0
  448. package/src/sap/fe/core/helpers/TypeGuards.ts +5 -1
  449. package/src/sap/fe/core/jsx-runtime/Fragment-dbg.js +14 -0
  450. package/src/sap/fe/core/jsx-runtime/Fragment.js +3 -11
  451. package/src/sap/fe/core/jsx-runtime/Fragment.js.map +1 -0
  452. package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +76 -0
  453. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +3 -86
  454. package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -0
  455. package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +124 -0
  456. package/src/sap/fe/core/jsx-runtime/jsx-control.js +3 -98
  457. package/src/sap/fe/core/jsx-runtime/jsx-control.js.map +1 -0
  458. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +43 -17
  459. package/src/sap/fe/core/jsx-runtime/jsx-dbg.js +41 -0
  460. package/src/sap/fe/core/jsx-runtime/jsx-xml-dbg.js +94 -0
  461. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +3 -90
  462. package/src/sap/fe/core/jsx-runtime/jsx-xml.js.map +1 -0
  463. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +1 -1
  464. package/src/sap/fe/core/jsx-runtime/jsx.js +3 -28
  465. package/src/sap/fe/core/jsx-runtime/jsx.js.map +1 -0
  466. package/src/sap/fe/core/jsx-runtime/jsx.ts +19 -1
  467. package/src/sap/fe/core/jsx-runtime/jsxs-dbg.js +10 -0
  468. package/src/sap/fe/core/jsx-runtime/jsxs.js +3 -7
  469. package/src/sap/fe/core/jsx-runtime/jsxs.js.map +1 -0
  470. package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +154 -0
  471. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +3 -153
  472. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -0
  473. package/src/sap/fe/core/library-dbg.js +437 -0
  474. package/src/sap/fe/core/library-preload.js +900 -0
  475. package/src/sap/fe/core/library-preload.js.map +1 -0
  476. package/src/sap/fe/core/library-preload.support.js +177 -0
  477. package/src/sap/fe/core/library-preload.support.js.map +1 -0
  478. package/src/sap/fe/core/library.js +3 -461
  479. package/src/sap/fe/core/library.js.map +1 -0
  480. package/src/sap/fe/core/library.support.js +1 -1
  481. package/src/sap/fe/core/library.ts +12 -25
  482. package/src/sap/fe/core/manifest.json +100 -0
  483. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +99 -0
  484. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -96
  485. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -0
  486. package/src/sap/fe/core/messagebundle.properties +6 -0
  487. package/src/sap/fe/core/messagebundle_ar.properties +22 -0
  488. package/src/sap/fe/core/messagebundle_bg.properties +22 -0
  489. package/src/sap/fe/core/messagebundle_ca.properties +22 -0
  490. package/src/sap/fe/core/messagebundle_cs.properties +22 -0
  491. package/src/sap/fe/core/messagebundle_cy.properties +22 -0
  492. package/src/sap/fe/core/messagebundle_da.properties +22 -0
  493. package/src/sap/fe/core/messagebundle_de.properties +22 -0
  494. package/src/sap/fe/core/messagebundle_el.properties +22 -0
  495. package/src/sap/fe/core/messagebundle_en.properties +22 -0
  496. package/src/sap/fe/core/messagebundle_en_GB.properties +22 -0
  497. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +22 -0
  498. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -0
  499. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +4 -0
  500. package/src/sap/fe/core/messagebundle_es.properties +22 -0
  501. package/src/sap/fe/core/messagebundle_es_MX.properties +22 -0
  502. package/src/sap/fe/core/messagebundle_et.properties +22 -0
  503. package/src/sap/fe/core/messagebundle_fi.properties +22 -0
  504. package/src/sap/fe/core/messagebundle_fr.properties +22 -0
  505. package/src/sap/fe/core/messagebundle_fr_CA.properties +22 -0
  506. package/src/sap/fe/core/messagebundle_hi.properties +22 -0
  507. package/src/sap/fe/core/messagebundle_hr.properties +23 -1
  508. package/src/sap/fe/core/messagebundle_hu.properties +22 -0
  509. package/src/sap/fe/core/messagebundle_id.properties +22 -0
  510. package/src/sap/fe/core/messagebundle_it.properties +22 -0
  511. package/src/sap/fe/core/messagebundle_iw.properties +22 -0
  512. package/src/sap/fe/core/messagebundle_ja.properties +22 -0
  513. package/src/sap/fe/core/messagebundle_kk.properties +22 -0
  514. package/src/sap/fe/core/messagebundle_ko.properties +22 -0
  515. package/src/sap/fe/core/messagebundle_lt.properties +22 -0
  516. package/src/sap/fe/core/messagebundle_lv.properties +22 -0
  517. package/src/sap/fe/core/messagebundle_ms.properties +22 -0
  518. package/src/sap/fe/core/messagebundle_nl.properties +22 -0
  519. package/src/sap/fe/core/messagebundle_no.properties +22 -0
  520. package/src/sap/fe/core/messagebundle_pl.properties +22 -0
  521. package/src/sap/fe/core/messagebundle_pt.properties +22 -0
  522. package/src/sap/fe/core/messagebundle_pt_PT.properties +22 -0
  523. package/src/sap/fe/core/messagebundle_ro.properties +22 -0
  524. package/src/sap/fe/core/messagebundle_ru.properties +22 -0
  525. package/src/sap/fe/core/messagebundle_sh.properties +22 -0
  526. package/src/sap/fe/core/messagebundle_sk.properties +22 -0
  527. package/src/sap/fe/core/messagebundle_sl.properties +22 -0
  528. package/src/sap/fe/core/messagebundle_sv.properties +22 -0
  529. package/src/sap/fe/core/messagebundle_th.properties +22 -0
  530. package/src/sap/fe/core/messagebundle_tr.properties +22 -0
  531. package/src/sap/fe/core/messagebundle_uk.properties +22 -0
  532. package/src/sap/fe/core/messagebundle_vi.properties +22 -0
  533. package/src/sap/fe/core/messagebundle_zh_CN.properties +22 -0
  534. package/src/sap/fe/core/messagebundle_zh_TW.properties +22 -0
  535. package/src/sap/fe/core/operationsHelper-dbg.js +155 -0
  536. package/src/sap/fe/core/operationsHelper.js +3 -205
  537. package/src/sap/fe/core/operationsHelper.js.map +1 -0
  538. package/src/sap/fe/core/operationsHelper.ts +14 -68
  539. package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +837 -0
  540. package/src/sap/fe/core/rootView/Fcl.controller.js +3 -855
  541. package/src/sap/fe/core/rootView/Fcl.controller.js.map +1 -0
  542. package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +190 -0
  543. package/src/sap/fe/core/rootView/NavContainer.controller.js +3 -190
  544. package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -0
  545. package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +506 -0
  546. package/src/sap/fe/core/rootView/RootViewBaseController.js +3 -538
  547. package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -0
  548. package/src/sap/fe/core/rootView/RootViewBaseController.ts +3 -4
  549. package/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +60 -0
  550. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -60
  551. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js.map +1 -0
  552. package/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +196 -0
  553. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +3 -219
  554. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js.map +1 -0
  555. package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +80 -0
  556. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -82
  557. package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -0
  558. package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +320 -0
  559. package/src/sap/fe/core/services/NavigationServiceFactory.js +3 -320
  560. package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -0
  561. package/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +91 -0
  562. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -89
  563. package/src/sap/fe/core/services/ResourceModelServiceFactory.js.map +1 -0
  564. package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +817 -0
  565. package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -847
  566. package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -0
  567. package/src/sap/fe/core/services/RoutingServiceFactory.ts +6 -3
  568. package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +732 -0
  569. package/src/sap/fe/core/services/ShellServicesFactory.js +3 -752
  570. package/src/sap/fe/core/services/ShellServicesFactory.js.map +1 -0
  571. package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +569 -0
  572. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +3 -599
  573. package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -0
  574. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -3
  575. package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +355 -0
  576. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +3 -387
  577. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -0
  578. package/src/sap/fe/core/services/view/TemplatingErrorPage-dbg.controller.js +37 -0
  579. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +3 -34
  580. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js.map +1 -0
  581. package/src/sap/fe/core/support/AnnotationIssue.support.js +4 -4
  582. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +3 -3
  583. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +3 -3
  584. package/src/sap/fe/core/support/CommonHelper-dbg.js +63 -0
  585. package/src/sap/fe/core/support/CommonHelper.js +3 -60
  586. package/src/sap/fe/core/support/CommonHelper.js.map +1 -0
  587. package/src/sap/fe/core/support/Diagnostics-dbg.js +44 -0
  588. package/src/sap/fe/core/support/Diagnostics.js +3 -49
  589. package/src/sap/fe/core/support/Diagnostics.js.map +1 -0
  590. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +3 -3
  591. package/src/sap/fe/core/templating/CommonFormatters-dbg.js +70 -0
  592. package/src/sap/fe/core/templating/CommonFormatters.js +3 -66
  593. package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -0
  594. package/src/sap/fe/core/templating/CommonFormatters.ts +9 -3
  595. package/src/sap/fe/core/templating/CriticalityFormatters-dbg.js +136 -0
  596. package/src/sap/fe/core/templating/CriticalityFormatters.js +3 -133
  597. package/src/sap/fe/core/templating/CriticalityFormatters.js.map +1 -0
  598. package/src/sap/fe/core/templating/DataFieldFormatters-dbg.js +58 -0
  599. package/src/sap/fe/core/templating/DataFieldFormatters.js +3 -55
  600. package/src/sap/fe/core/templating/DataFieldFormatters.js.map +1 -0
  601. package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +363 -0
  602. package/src/sap/fe/core/templating/DataModelPathHelper.js +3 -372
  603. package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -0
  604. package/src/sap/fe/core/templating/DataModelPathHelper.ts +17 -8
  605. package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +56 -0
  606. package/src/sap/fe/core/templating/DisplayModeFormatter.js +3 -124
  607. package/src/sap/fe/core/templating/DisplayModeFormatter.js.map +1 -0
  608. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +0 -47
  609. package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +68 -0
  610. package/src/sap/fe/core/templating/EntitySetHelper.js +3 -81
  611. package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -0
  612. package/src/sap/fe/core/templating/FieldControlHelper-dbg.js +77 -0
  613. package/src/sap/fe/core/templating/FieldControlHelper.js +3 -74
  614. package/src/sap/fe/core/templating/FieldControlHelper.js.map +1 -0
  615. package/src/sap/fe/core/templating/FilterHelper-dbg.js +346 -0
  616. package/src/sap/fe/core/templating/FilterHelper.js +3 -339
  617. package/src/sap/fe/core/templating/FilterHelper.js.map +1 -0
  618. package/src/sap/fe/core/templating/FilterHelper.ts +2 -21
  619. package/src/sap/fe/core/templating/FilterTemplating-dbg.js +62 -0
  620. package/src/sap/fe/core/templating/FilterTemplating.js +3 -59
  621. package/src/sap/fe/core/templating/FilterTemplating.js.map +1 -0
  622. package/src/sap/fe/core/templating/PropertyFormatters-dbg.js +93 -0
  623. package/src/sap/fe/core/templating/PropertyFormatters.js +3 -90
  624. package/src/sap/fe/core/templating/PropertyFormatters.js.map +1 -0
  625. package/src/sap/fe/core/templating/PropertyHelper-dbg.js +340 -0
  626. package/src/sap/fe/core/templating/PropertyHelper.js +3 -337
  627. package/src/sap/fe/core/templating/PropertyHelper.js.map +1 -0
  628. package/src/sap/fe/core/templating/SemanticObjectHelper-dbg.js +91 -0
  629. package/src/sap/fe/core/templating/SemanticObjectHelper.js +3 -43
  630. package/src/sap/fe/core/templating/SemanticObjectHelper.js.map +1 -0
  631. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +45 -1
  632. package/src/sap/fe/core/templating/UIFormatters-dbg.js +498 -0
  633. package/src/sap/fe/core/templating/UIFormatters.js +3 -544
  634. package/src/sap/fe/core/templating/UIFormatters.js.map +1 -0
  635. package/src/sap/fe/core/templating/UIFormatters.ts +60 -110
  636. package/src/sap/fe/core/type/DateTimeWithTimezone-dbg.js +35 -0
  637. package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -33
  638. package/src/sap/fe/core/type/DateTimeWithTimezone.js.map +1 -0
  639. package/src/sap/fe/core/type/EDM-dbg.js +84 -0
  640. package/src/sap/fe/core/type/EDM.js +6 -0
  641. package/src/sap/fe/core/type/EDM.js.map +1 -0
  642. package/src/sap/fe/core/type/EDM.ts +70 -0
  643. package/src/sap/fe/core/type/Email-dbg.js +29 -0
  644. package/src/sap/fe/core/type/Email.js +3 -26
  645. package/src/sap/fe/core/type/Email.js.map +1 -0
  646. package/src/sap/fe/core/type/FiscalDate-dbg.js +174 -0
  647. package/src/sap/fe/core/type/FiscalDate.js +6 -0
  648. package/src/sap/fe/core/type/FiscalDate.js.map +1 -0
  649. package/src/sap/fe/core/type/FiscalDate.ts +179 -0
  650. package/src/sap/fe/core/type/TypeUtil-dbg.js +58 -0
  651. package/src/sap/fe/core/type/TypeUtil.js +3 -55
  652. package/src/sap/fe/core/type/TypeUtil.js.map +1 -0
  653. package/src/sap/fe/core/type/TypeUtil.ts +1 -0
  654. package/src/.eslintrc +0 -7
@@ -0,0 +1,791 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2023 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/KeepAliveHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/navigation/SelectionVariant", "sap/ui/core/Core", "sap/ui/core/Fragment", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/XMLTemplateProcessor", "sap/ui/model/json/JSONModel", "../converters/helpers/Aggregation"], function (Log, mergeObjects, CommonUtils, draft, MetaModelConverter, ClassSupport, KeepAliveHelper, ModelHelper, SelectionVariant, Core, Fragment, ControllerExtension, OverrideExecution, XMLPreprocessor, XMLTemplateProcessor, JSONModel, Aggregation) {
6
+ "use strict";
7
+
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _class, _class2;
9
+ var AggregationHelper = Aggregation.AggregationHelper;
10
+ var publicExtension = ClassSupport.publicExtension;
11
+ var privateExtension = ClassSupport.privateExtension;
12
+ var methodOverride = ClassSupport.methodOverride;
13
+ var finalExtension = ClassSupport.finalExtension;
14
+ var extensible = ClassSupport.extensible;
15
+ var defineUI5Class = ClassSupport.defineUI5Class;
16
+ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
17
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
18
+ function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
19
+ /**
20
+ * {@link sap.ui.core.mvc.ControllerExtension Controller extension}
21
+ *
22
+ * @namespace
23
+ * @alias sap.fe.core.controllerextensions.InternalInternalBasedNavigation
24
+ * @private
25
+ * @since 1.84.0
26
+ */
27
+ let InternalIntentBasedNavigation = (_dec = defineUI5Class("sap.fe.core.controllerextensions.InternalInternalBasedNavigation"), _dec2 = methodOverride(), _dec3 = publicExtension(), _dec4 = finalExtension(), _dec5 = publicExtension(), _dec6 = finalExtension(), _dec7 = publicExtension(), _dec8 = finalExtension(), _dec9 = publicExtension(), _dec10 = extensible(OverrideExecution.Instead), _dec11 = publicExtension(), _dec12 = finalExtension(), _dec13 = privateExtension(), _dec14 = publicExtension(), _dec15 = finalExtension(), _dec16 = publicExtension(), _dec17 = finalExtension(), _dec18 = publicExtension(), _dec19 = finalExtension(), _dec20 = publicExtension(), _dec21 = finalExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
28
+ _inheritsLoose(InternalIntentBasedNavigation, _ControllerExtension);
29
+ function InternalIntentBasedNavigation() {
30
+ return _ControllerExtension.apply(this, arguments) || this;
31
+ }
32
+ var _proto = InternalIntentBasedNavigation.prototype;
33
+ _proto.onInit = function onInit() {
34
+ this._oAppComponent = this.base.getAppComponent();
35
+ this._oMetaModel = this._oAppComponent.getModel().getMetaModel();
36
+ this._oNavigationService = this._oAppComponent.getNavigationService();
37
+ this._oView = this.base.getView();
38
+ }
39
+
40
+ /**
41
+ * Enables intent-based navigation (SemanticObject-Action) with the provided context.
42
+ * If semantic object mapping is provided, this is also applied to the selection variant after the adaptation by a consumer.
43
+ * This takes care of removing any technical parameters and determines if an explace or inplace navigation should take place.
44
+ *
45
+ * @param sSemanticObject Semantic object for the target app
46
+ * @param sAction Action for the target app
47
+ * @param [mNavigationParameters] Optional parameters to be passed to the external navigation
48
+ * @param [mNavigationParameters.navigationContexts] Uses one of the following to be passed to the intent:
49
+ * a single instance of {@link sap.ui.model.odata.v4.Context}
50
+ * multiple instances of {@link sap.ui.model.odata.v4.Context}
51
+ * an object or an array of objects
52
+ * If an array of objects is passed, the context is used to determine the metaPath and to remove any sensitive data
53
+ * If an array of objects is passed, the following format ix expected:
54
+ * {
55
+ * data: {
56
+ * ProductID: 7634,
57
+ * Name: "Laptop"
58
+ * },
59
+ * metaPath: "/SalesOrderManage"
60
+ * }
61
+ * @param [mNavigationParameters.semanticObjectMapping] String representation of the SemanticObjectMapping or SemanticObjectMapping that applies to this navigation
62
+ * @param [mNavigationParameters.defaultRefreshStrategy] Default refresh strategy to be used in case no refresh strategy is specified for the intent in the view.
63
+ * @param [mNavigationParameters.refreshStrategies]
64
+ * @param [mNavigationParameters.additionalNavigationParameters] Additional navigation parameters configured in the crossAppNavigation outbound parameters.
65
+ */;
66
+ _proto.navigate = function navigate(sSemanticObject, sAction, mNavigationParameters) {
67
+ const _doNavigate = oContext => {
68
+ const vNavigationContexts = mNavigationParameters && mNavigationParameters.navigationContexts,
69
+ aNavigationContexts = vNavigationContexts && !Array.isArray(vNavigationContexts) ? [vNavigationContexts] : vNavigationContexts,
70
+ vSemanticObjectMapping = mNavigationParameters && mNavigationParameters.semanticObjectMapping,
71
+ vOutboundParams = mNavigationParameters && mNavigationParameters.additionalNavigationParameters,
72
+ oTargetInfo = {
73
+ semanticObject: sSemanticObject,
74
+ action: sAction
75
+ },
76
+ oView = this.base.getView(),
77
+ oController = oView.getController();
78
+ if (oContext) {
79
+ this._oView.setBindingContext(oContext);
80
+ }
81
+ if (sSemanticObject && sAction) {
82
+ let aSemanticAttributes = [],
83
+ oSelectionVariant = new SelectionVariant();
84
+ // 1. get SemanticAttributes for navigation
85
+ if (aNavigationContexts && aNavigationContexts.length) {
86
+ aNavigationContexts.forEach(oNavigationContext => {
87
+ // 1.1.a if navigation context is instance of sap.ui.mode.odata.v4.Context
88
+ // else check if navigation context is of type object
89
+ if (oNavigationContext.isA && oNavigationContext.isA("sap.ui.model.odata.v4.Context")) {
90
+ // 1.1.b remove sensitive data
91
+ let oSemanticAttributes = oNavigationContext.getObject();
92
+ const sMetaPath = this._oMetaModel.getMetaPath(oNavigationContext.getPath());
93
+ // TODO: also remove sensitive data from navigation properties
94
+ oSemanticAttributes = this.removeSensitiveData(oSemanticAttributes, sMetaPath);
95
+ const oNavContext = this.prepareContextForExternalNavigation(oSemanticAttributes, oNavigationContext);
96
+ oTargetInfo["propertiesWithoutConflict"] = oNavContext.propertiesWithoutConflict;
97
+ aSemanticAttributes.push(oNavContext.semanticAttributes);
98
+ } else if (!(oNavigationContext && Array.isArray(oNavigationContext.data)) && typeof oNavigationContext === "object") {
99
+ // 1.1.b remove sensitive data from object
100
+ aSemanticAttributes.push(this.removeSensitiveData(oNavigationContext.data, oNavigationContext.metaPath));
101
+ } else if (oNavigationContext && Array.isArray(oNavigationContext.data)) {
102
+ // oNavigationContext.data can be array already ex : [{Customer: "10001"}, {Customer: "10091"}]
103
+ // hence assigning it to the aSemanticAttributes
104
+ aSemanticAttributes = this.removeSensitiveData(oNavigationContext.data, oNavigationContext.metaPath);
105
+ }
106
+ });
107
+ }
108
+ // 2.1 Merge base selection variant and sanitized semantic attributes into one SelectionVariant
109
+ if (aSemanticAttributes && aSemanticAttributes.length) {
110
+ oSelectionVariant = this._oNavigationService.mixAttributesAndSelectionVariant(aSemanticAttributes, oSelectionVariant.toJSONString());
111
+ }
112
+
113
+ // 3. Add filterContextUrl to SV so the NavigationHandler can remove any sensitive data based on view entitySet
114
+ const oModel = this._oView.getModel(),
115
+ sEntitySet = this.getEntitySet(),
116
+ sContextUrl = sEntitySet ? this._oNavigationService.constructContextUrl(sEntitySet, oModel) : undefined;
117
+ if (sContextUrl) {
118
+ oSelectionVariant.setFilterContextUrl(sContextUrl);
119
+ }
120
+
121
+ // Apply Outbound Parameters to the SV
122
+ if (vOutboundParams) {
123
+ this._applyOutboundParams(oSelectionVariant, vOutboundParams);
124
+ }
125
+
126
+ // 4. give an opportunity for the application to influence the SelectionVariant
127
+ oController.intentBasedNavigation.adaptNavigationContext(oSelectionVariant, oTargetInfo);
128
+
129
+ // 5. Apply semantic object mappings to the SV
130
+ if (vSemanticObjectMapping) {
131
+ this._applySemanticObjectMappings(oSelectionVariant, vSemanticObjectMapping);
132
+ }
133
+
134
+ // 6. remove technical parameters from Selection Variant
135
+ this._removeTechnicalParameters(oSelectionVariant);
136
+
137
+ // 7. check if programming model is sticky and page is editable
138
+ const sNavMode = oController._intentBasedNavigation.getNavigationMode();
139
+
140
+ // 8. Updating refresh strategy in internal model
141
+ const mRefreshStrategies = mNavigationParameters && mNavigationParameters.refreshStrategies || {},
142
+ oInternalModel = oView.getModel("internal");
143
+ if (oInternalModel) {
144
+ if ((oView && oView.getViewData()).refreshStrategyOnAppRestore) {
145
+ const mViewRefreshStrategies = oView.getViewData().refreshStrategyOnAppRestore || {};
146
+ mergeObjects(mRefreshStrategies, mViewRefreshStrategies);
147
+ }
148
+ const mRefreshStrategy = KeepAliveHelper.getRefreshStrategyForIntent(mRefreshStrategies, sSemanticObject, sAction);
149
+ if (mRefreshStrategy) {
150
+ oInternalModel.setProperty("/refreshStrategyOnAppRestore", mRefreshStrategy);
151
+ }
152
+ }
153
+
154
+ // 9. Navigate via NavigationHandler
155
+ const onError = function () {
156
+ sap.ui.require(["sap/m/MessageBox"], function (MessageBox) {
157
+ const oResourceBundle = Core.getLibraryResourceBundle("sap.fe.core");
158
+ MessageBox.error(oResourceBundle.getText("C_COMMON_HELPER_NAVIGATION_ERROR_MESSAGE"), {
159
+ title: oResourceBundle.getText("C_COMMON_SAPFE_ERROR")
160
+ });
161
+ });
162
+ };
163
+ this._oNavigationService.navigate(sSemanticObject, sAction, oSelectionVariant.toJSONString(), undefined, onError, undefined, sNavMode);
164
+ } else {
165
+ throw new Error("Semantic Object/action is not provided");
166
+ }
167
+ };
168
+ const oBindingContext = this.base.getView().getBindingContext();
169
+ const oMetaModel = oBindingContext && oBindingContext.getModel().getMetaModel();
170
+ if (this.getView().getViewData().converterType === "ObjectPage" && oMetaModel && !ModelHelper.isStickySessionSupported(oMetaModel)) {
171
+ draft.processDataLossOrDraftDiscardConfirmation(_doNavigate.bind(this), Function.prototype, this.base.getView().getBindingContext(), this.base.getView().getController(), true, draft.NavigationType.ForwardNavigation);
172
+ } else {
173
+ _doNavigate();
174
+ }
175
+ }
176
+
177
+ /**
178
+ * Prepare attributes to be passed to external navigation.
179
+ *
180
+ * @param oSemanticAttributes Context data after removing all sensitive information.
181
+ * @param oContext Actual context from which the semanticAttributes were derived.
182
+ * @returns Object of prepared attributes for external navigation and no conflict properties.
183
+ */;
184
+ _proto.prepareContextForExternalNavigation = function prepareContextForExternalNavigation(oSemanticAttributes, oContext) {
185
+ // 1. Find all distinct keys in the object SemanticAttributes
186
+ // Store meta path for each occurence of the key
187
+ const oDistinctKeys = {},
188
+ sContextPath = oContext.getPath(),
189
+ oMetaModel = oContext.getModel().getMetaModel(),
190
+ sMetaPath = oMetaModel.getMetaPath(sContextPath),
191
+ aMetaPathParts = sMetaPath.split("/").filter(Boolean);
192
+ function _findDistinctKeysInObject(LookUpObject, sLookUpObjectMetaPath) {
193
+ for (const sKey in LookUpObject) {
194
+ // null case??
195
+ if (LookUpObject[sKey] === null || typeof LookUpObject[sKey] !== "object") {
196
+ if (!oDistinctKeys[sKey]) {
197
+ // if key is found for the first time then create array
198
+ oDistinctKeys[sKey] = [];
199
+ }
200
+ // push path to array
201
+ oDistinctKeys[sKey].push(sLookUpObjectMetaPath);
202
+ } else {
203
+ // if a nested object is found
204
+ const oNewLookUpObject = LookUpObject[sKey];
205
+ _findDistinctKeysInObject(oNewLookUpObject, `${sLookUpObjectMetaPath}/${sKey}`);
206
+ }
207
+ }
208
+ }
209
+ _findDistinctKeysInObject(oSemanticAttributes, sMetaPath);
210
+
211
+ // 2. Determine distinct key value and add conflicted paths to semantic attributes
212
+ const sMainEntitySetName = aMetaPathParts[0],
213
+ sMainEntityTypeName = oMetaModel.getObject(`/${sMainEntitySetName}/@sapui.name`),
214
+ oPropertiesWithoutConflict = {};
215
+ let sMainEntityValuePath, sCurrentValuePath, sLastValuePath;
216
+ for (const sDistinctKey in oDistinctKeys) {
217
+ const aConflictingPaths = oDistinctKeys[sDistinctKey];
218
+ let sWinnerValuePath;
219
+ // Find winner value for each distinct key in case of conflict by the following rule:
220
+
221
+ // -> A. if any meta path for a distinct key is the same as main entity take that as the value
222
+ // -> B. if A is not met keep the value from the current context (sMetaPath === path of distince key)
223
+ // -> C. if A, B or C are not met take the last path for value
224
+ if (aConflictingPaths.length > 1) {
225
+ // conflict
226
+ for (let i = 0; i <= aConflictingPaths.length - 1; i++) {
227
+ const sPath = aConflictingPaths[i];
228
+ let sPathInContext = sPath.replace(sPath === sMetaPath ? sMetaPath : `${sMetaPath}/`, "");
229
+ sPathInContext = (sPathInContext === "" ? sPathInContext : `${sPathInContext}/`) + sDistinctKey;
230
+ const sEntityTypeName = oMetaModel.getObject(`${sPath}/@sapui.name`);
231
+ // rule A
232
+
233
+ // rule A
234
+ if (sEntityTypeName === sMainEntityTypeName) {
235
+ sMainEntityValuePath = sPathInContext;
236
+ }
237
+
238
+ // rule B
239
+ if (sPath === sMetaPath) {
240
+ sCurrentValuePath = sPathInContext;
241
+ }
242
+
243
+ // rule C
244
+ sLastValuePath = sPathInContext;
245
+
246
+ // add conflicted path to semantic attributes
247
+ // check if the current path points to main entity and prefix attribute names accordingly
248
+ oSemanticAttributes[`${sMetaPath}/${sPathInContext}`.split("/").filter(function (sValue) {
249
+ return sValue != "";
250
+ }).join(".")] = oContext.getProperty(sPathInContext);
251
+ }
252
+ // A || B || C
253
+ sWinnerValuePath = sMainEntityValuePath || sCurrentValuePath || sLastValuePath;
254
+ oSemanticAttributes[sDistinctKey] = oContext.getProperty(sWinnerValuePath);
255
+ sMainEntityValuePath = undefined;
256
+ sCurrentValuePath = undefined;
257
+ sLastValuePath = undefined;
258
+ } else {
259
+ // no conflict, add distinct key without adding paths
260
+ const sPath = aConflictingPaths[0]; // because there is only one and hence no conflict
261
+ let sPathInContext = sPath.replace(sPath === sMetaPath ? sMetaPath : `${sMetaPath}/`, "");
262
+ sPathInContext = (sPathInContext === "" ? sPathInContext : `${sPathInContext}/`) + sDistinctKey;
263
+ oSemanticAttributes[sDistinctKey] = oContext.getProperty(sPathInContext);
264
+ oPropertiesWithoutConflict[sDistinctKey] = `${sMetaPath}/${sPathInContext}`.split("/").filter(function (sValue) {
265
+ return sValue != "";
266
+ }).join(".");
267
+ }
268
+ }
269
+ // 3. Remove all Navigation properties
270
+ for (const sProperty in oSemanticAttributes) {
271
+ if (oSemanticAttributes[sProperty] !== null && typeof oSemanticAttributes[sProperty] === "object") {
272
+ delete oSemanticAttributes[sProperty];
273
+ }
274
+ }
275
+ return {
276
+ semanticAttributes: oSemanticAttributes,
277
+ propertiesWithoutConflict: oPropertiesWithoutConflict
278
+ };
279
+ }
280
+ /**
281
+ * Prepare filter conditions to be passed to external navigation.
282
+ *
283
+ * @param oFilterBarConditions Filter conditions.
284
+ * @param sRootPath Root path of the application.
285
+ * @param aParameters Names of parameters to be considered.
286
+ * @returns Object of prepared filter conditions for external navigation and no conflict filters.
287
+ */;
288
+ _proto.prepareFiltersForExternalNavigation = function prepareFiltersForExternalNavigation(oFilterBarConditions, sRootPath, aParameters) {
289
+ let sPath;
290
+ const oDistinctKeys = {};
291
+ const oFilterConditionsWithoutConflict = {};
292
+ let sMainEntityValuePath, sCurrentValuePath, sFullContextPath, sWinnerValuePath, sPathInContext;
293
+ function _findDistinctKeysInObject(LookUpObject) {
294
+ let sLookUpObjectMetaPath;
295
+ for (let sKey in LookUpObject) {
296
+ if (LookUpObject[sKey]) {
297
+ if (sKey.includes("/")) {
298
+ sLookUpObjectMetaPath = sKey; // "/SalesOrdermanage/_Item/Material"
299
+ const aPathParts = sKey.split("/");
300
+ sKey = aPathParts[aPathParts.length - 1];
301
+ } else {
302
+ sLookUpObjectMetaPath = sRootPath;
303
+ }
304
+ if (!oDistinctKeys[sKey]) {
305
+ // if key is found for the first time then create array
306
+ oDistinctKeys[sKey] = [];
307
+ }
308
+
309
+ // push path to array
310
+ oDistinctKeys[sKey].push(sLookUpObjectMetaPath);
311
+ }
312
+ }
313
+ }
314
+ _findDistinctKeysInObject(oFilterBarConditions);
315
+ for (const sDistinctKey in oDistinctKeys) {
316
+ const aConflictingPaths = oDistinctKeys[sDistinctKey];
317
+ if (aConflictingPaths.length > 1) {
318
+ // conflict
319
+ for (let i = 0; i <= aConflictingPaths.length - 1; i++) {
320
+ sPath = aConflictingPaths[i];
321
+ if (sPath === sRootPath) {
322
+ sFullContextPath = `${sRootPath}/${sDistinctKey}`;
323
+ sPathInContext = sDistinctKey;
324
+ sMainEntityValuePath = sDistinctKey;
325
+ if (aParameters && aParameters.includes(sDistinctKey)) {
326
+ oFilterBarConditions[`$Parameter.${sDistinctKey}`] = oFilterBarConditions[sDistinctKey];
327
+ }
328
+ } else {
329
+ sPathInContext = sPath;
330
+ sFullContextPath = `${sRootPath}/${sPath}`.replaceAll(/\*/g, "");
331
+ sCurrentValuePath = sPath;
332
+ }
333
+ oFilterBarConditions[sFullContextPath.split("/").filter(function (sValue) {
334
+ return sValue != "";
335
+ }).join(".")] = oFilterBarConditions[sPathInContext];
336
+ delete oFilterBarConditions[sPath];
337
+ }
338
+ sWinnerValuePath = sMainEntityValuePath || sCurrentValuePath;
339
+ oFilterBarConditions[sDistinctKey] = oFilterBarConditions[sWinnerValuePath];
340
+ } else {
341
+ // no conflict, add distinct key without adding paths
342
+ sPath = aConflictingPaths[0];
343
+ sFullContextPath = sPath === sRootPath ? `${sRootPath}/${sDistinctKey}` : `${sRootPath}/${sPath}`.replaceAll("*", "");
344
+ oFilterConditionsWithoutConflict[sDistinctKey] = sFullContextPath.split("/").filter(function (sValue) {
345
+ return sValue != "";
346
+ }).join(".");
347
+ if (aParameters && aParameters.includes(sDistinctKey)) {
348
+ oFilterBarConditions[`$Parameter.${sDistinctKey}`] = oFilterBarConditions[sDistinctKey];
349
+ }
350
+ }
351
+ }
352
+ return {
353
+ filterConditions: oFilterBarConditions,
354
+ filterConditionsWithoutConflict: oFilterConditionsWithoutConflict
355
+ };
356
+ }
357
+
358
+ /**
359
+ * Get Navigation mode.
360
+ *
361
+ * @returns The navigation mode
362
+ */;
363
+ _proto.getNavigationMode = function getNavigationMode() {
364
+ return undefined;
365
+ }
366
+ /**
367
+ * Allows for navigation to a given intent (SemanticObject-Action) with the provided context, using a dialog that shows the contexts which cannot be passed
368
+ * If semantic object mapping is provided, this setting is also applied to the selection variant after adaptation by a consumer.
369
+ * This setting also removes any technical parameters and determines if an inplace or explace navigation should take place.
370
+ *
371
+ * @param sSemanticObject Semantic object for the target app
372
+ * @param sAction Action for the target app
373
+ * @param [mNavigationParameters] Optional parameters to be passed to the external navigation
374
+ * @param [mNavigationParameters.label]
375
+ * @param [mNavigationParameters.navigationContexts] Single instance or multiple instances of {@link sap.ui.model.odata.v4.Context}, or alternatively an object or array of objects, to be passed to the intent.
376
+ * @param [mNavigationParameters.applicableContexts] Single instance or multiple instances of {@link sap.ui.model.odata.v4.Context}, or alternatively an object or array of objects, to be passed to the intent and for which the IBN button is enabled
377
+ * @param [mNavigationParameters.notApplicableContexts] Single instance or multiple instances of {@link sap.ui.model.odata.v4.Context}, or alternatively an object or array of objects, which cannot be passed to the intent.
378
+ * if an array of contexts is passed the context is used to determine the meta path and accordingly remove the sensitive data
379
+ * If an array of objects is passed, the following format is expected:
380
+ * {
381
+ * data: {
382
+ * ProductID: 7634,
383
+ * Name: "Laptop"
384
+ * },
385
+ * metaPath: "/SalesOrderManage"
386
+ * }
387
+ * The metaPath is used to remove any sensitive data.
388
+ * @param [mNavigationParameters.semanticObjectMapping] String representation of SemanticObjectMapping or SemanticObjectMapping that applies to this navigation
389
+ */;
390
+ _proto.navigateWithConfirmationDialog = function navigateWithConfirmationDialog(sSemanticObject, sAction, mNavigationParameters) {
391
+ var _mNavigationParameter;
392
+ if (mNavigationParameters !== null && mNavigationParameters !== void 0 && mNavigationParameters.notApplicableContexts && ((_mNavigationParameter = mNavigationParameters.notApplicableContexts) === null || _mNavigationParameter === void 0 ? void 0 : _mNavigationParameter.length) >= 1) {
393
+ let oApplicableContextDialog;
394
+ const oController = {
395
+ onClose: function () {
396
+ // User cancels action
397
+ oApplicableContextDialog.close();
398
+ },
399
+ onContinue: () => {
400
+ // Users continues the action with the bound contexts
401
+ mNavigationParameters.navigationContexts = mNavigationParameters.applicableContexts;
402
+ oApplicableContextDialog.close();
403
+ this.navigate(sSemanticObject, sAction, mNavigationParameters);
404
+ }
405
+ };
406
+ const fnOpenAndFillDialog = function () {
407
+ let oDialogContent;
408
+ const nNotApplicable = mNavigationParameters.notApplicableContexts.length,
409
+ aNotApplicableItems = [];
410
+ for (let i = 0; i < mNavigationParameters.notApplicableContexts.length; i++) {
411
+ oDialogContent = mNavigationParameters.notApplicableContexts[i].getObject();
412
+ aNotApplicableItems.push(oDialogContent);
413
+ }
414
+ const oNotApplicableItemsModel = new JSONModel(aNotApplicableItems);
415
+ const oTotals = new JSONModel({
416
+ total: nNotApplicable,
417
+ label: mNavigationParameters.label
418
+ });
419
+ oApplicableContextDialog.setModel(oNotApplicableItemsModel, "notApplicable");
420
+ oApplicableContextDialog.setModel(oTotals, "totals");
421
+ oApplicableContextDialog.open();
422
+ };
423
+ // Show the contexts that are not applicable and will not therefore be processed
424
+ const sFragmentName = "sap.fe.core.controls.ActionPartial";
425
+ const oDialogFragment = XMLTemplateProcessor.loadTemplate(sFragmentName, "fragment");
426
+ const oModel = this._oView.getModel();
427
+ const oMetaModel = oModel.getMetaModel();
428
+ const sCanonicalPath = mNavigationParameters.notApplicableContexts[0].getCanonicalPath();
429
+ const sEntitySet = `${sCanonicalPath.substr(0, sCanonicalPath.indexOf("("))}/`;
430
+ Promise.resolve(XMLPreprocessor.process(oDialogFragment, {
431
+ name: sFragmentName
432
+ }, {
433
+ bindingContexts: {
434
+ entityType: oMetaModel.createBindingContext(sEntitySet)
435
+ },
436
+ models: {
437
+ entityType: oMetaModel,
438
+ metaModel: oMetaModel
439
+ }
440
+ })).then(function (oFragment) {
441
+ return Fragment.load({
442
+ definition: oFragment,
443
+ controller: oController
444
+ });
445
+ }).then(oPopover => {
446
+ oApplicableContextDialog = oPopover;
447
+ this.getView().addDependent(oPopover);
448
+ fnOpenAndFillDialog();
449
+ }).catch(function () {
450
+ Log.error("Error");
451
+ });
452
+ } else {
453
+ this.navigate(sSemanticObject, sAction, mNavigationParameters);
454
+ }
455
+ };
456
+ _proto._removeTechnicalParameters = function _removeTechnicalParameters(oSelectionVariant) {
457
+ oSelectionVariant.removeSelectOption("@odata.context");
458
+ oSelectionVariant.removeSelectOption("@odata.metadataEtag");
459
+ oSelectionVariant.removeSelectOption("SAP__Messages");
460
+ }
461
+ /**
462
+ * Get targeted Entity set.
463
+ *
464
+ * @returns Entity set name
465
+ */;
466
+ _proto.getEntitySet = function getEntitySet() {
467
+ return this._oView.getViewData().entitySet;
468
+ }
469
+ /**
470
+ * Removes sensitive data from the semantic attribute with respect to the entitySet.
471
+ *
472
+ * @param oAttributes Context data
473
+ * @param sMetaPath Meta path to reach the entitySet in the MetaModel
474
+ * @returns Array of semantic Attributes
475
+ * @private
476
+ */
477
+ // TO-DO add unit tests for this function in the controller extension qunit.
478
+ ;
479
+ _proto.removeSensitiveData = function removeSensitiveData(oAttributes, sMetaPath) {
480
+ if (oAttributes) {
481
+ const {
482
+ transAggregations,
483
+ customAggregates
484
+ } = this._getAggregates(sMetaPath, this.base.getView(), this.base.getAppComponent().getDiagnostics());
485
+ const aProperties = Object.keys(oAttributes);
486
+ if (aProperties.length) {
487
+ delete oAttributes["@odata.context"];
488
+ delete oAttributes["@odata.metadataEtag"];
489
+ delete oAttributes["SAP__Messages"];
490
+ for (let j = 0; j < aProperties.length; j++) {
491
+ if (oAttributes[aProperties[j]] && typeof oAttributes[aProperties[j]] === "object") {
492
+ this.removeSensitiveData(oAttributes[aProperties[j]], `${sMetaPath}/${aProperties[j]}`);
493
+ }
494
+ const sProp = aProperties[j];
495
+ if (sProp.indexOf("@odata.type") > -1) {
496
+ delete oAttributes[aProperties[j]];
497
+ continue;
498
+ }
499
+ this._deleteAggregates([...transAggregations, ...customAggregates], aProperties[j], oAttributes);
500
+ const aPropertyAnnotations = this._getPropertyAnnotations(sProp, sMetaPath, oAttributes, this._oMetaModel);
501
+ if (aPropertyAnnotations) {
502
+ if (aPropertyAnnotations["com.sap.vocabularies.PersonalData.v1.IsPotentiallySensitive"] || aPropertyAnnotations["com.sap.vocabularies.UI.v1.ExcludeFromNavigationContext"] || aPropertyAnnotations["com.sap.vocabularies.Analytics.v1.Measure"]) {
503
+ delete oAttributes[sProp];
504
+ } else if (aPropertyAnnotations["com.sap.vocabularies.Common.v1.FieldControl"]) {
505
+ const oFieldControl = aPropertyAnnotations["com.sap.vocabularies.Common.v1.FieldControl"];
506
+ if (oFieldControl["$EnumMember"] && oFieldControl["$EnumMember"].split("/")[1] === "Inapplicable") {
507
+ delete oAttributes[sProp];
508
+ } else if (oFieldControl["$Path"] && this._isFieldControlPathInapplicable(oFieldControl["$Path"], oAttributes)) {
509
+ delete oAttributes[sProp];
510
+ }
511
+ }
512
+ }
513
+ }
514
+ }
515
+ }
516
+ return oAttributes;
517
+ }
518
+
519
+ /**
520
+ * Remove the attribute from navigation data if it is a measure.
521
+ *
522
+ * @param aggregates Array of Aggregates
523
+ * @param sProp Attribute name
524
+ * @param oAttributes SemanticAttributes
525
+ */;
526
+ _proto._deleteAggregates = function _deleteAggregates(aggregates, sProp, oAttributes) {
527
+ if (aggregates && aggregates.indexOf(sProp) > -1) {
528
+ delete oAttributes[sProp];
529
+ }
530
+ }
531
+
532
+ /**
533
+ * Returns the property annotations.
534
+ *
535
+ * @param sProp
536
+ * @param sMetaPath
537
+ * @param oAttributes
538
+ * @param oMetaModel
539
+ * @returns - The property annotations
540
+ */;
541
+ _proto._getPropertyAnnotations = function _getPropertyAnnotations(sProp, sMetaPath, oAttributes, oMetaModel) {
542
+ if (oAttributes[sProp] && sMetaPath && !sMetaPath.includes("undefined")) {
543
+ var _oFullContext$targetO, _oFullContext$targetO2;
544
+ const oContext = oMetaModel.createBindingContext(`${sMetaPath}/${sProp}`);
545
+ const oFullContext = MetaModelConverter.getInvolvedDataModelObjects(oContext);
546
+ return oFullContext === null || oFullContext === void 0 ? void 0 : (_oFullContext$targetO = oFullContext.targetObject) === null || _oFullContext$targetO === void 0 ? void 0 : (_oFullContext$targetO2 = _oFullContext$targetO.annotations) === null || _oFullContext$targetO2 === void 0 ? void 0 : _oFullContext$targetO2._annotations;
547
+ }
548
+ return null;
549
+ }
550
+
551
+ /**
552
+ * Returns the aggregates part of the EntitySet or EntityType.
553
+ *
554
+ * @param sMetaPath
555
+ * @param oView
556
+ * @param oDiagnostics
557
+ * @returns - The aggregates
558
+ */;
559
+ _proto._getAggregates = function _getAggregates(sMetaPath, oView, oDiagnostics) {
560
+ const converterContext = this._getConverterContext(sMetaPath, oView, oDiagnostics);
561
+ const aggregationHelper = new AggregationHelper(converterContext.getEntityType(), converterContext);
562
+ const isAnalyticsSupported = aggregationHelper.isAnalyticsSupported();
563
+ let transAggregations = [],
564
+ customAggregates = [];
565
+ if (isAnalyticsSupported) {
566
+ transAggregations = aggregationHelper.getTransAggregations();
567
+ if (transAggregations.length) {
568
+ transAggregations = transAggregations.map(transAgg => {
569
+ return transAgg.Name || transAgg.Value;
570
+ });
571
+ }
572
+ customAggregates = aggregationHelper.getCustomAggregateDefinitions();
573
+ if (customAggregates.length) {
574
+ customAggregates = customAggregates.map(customAggregate => {
575
+ return customAggregate.qualifier;
576
+ });
577
+ }
578
+ }
579
+ return {
580
+ transAggregations,
581
+ customAggregates
582
+ };
583
+ }
584
+
585
+ /**
586
+ * Returns converterContext.
587
+ *
588
+ * @param sMetaPath
589
+ * @param oView
590
+ * @param oDiagnostics
591
+ * @returns - ConverterContext
592
+ */;
593
+ _proto._getConverterContext = function _getConverterContext(sMetaPath, oView, oDiagnostics) {
594
+ const oViewData = oView.getViewData();
595
+ let sEntitySet = oViewData.entitySet;
596
+ const sContextPath = oViewData.contextPath;
597
+ if (sContextPath && (!sEntitySet || sEntitySet.includes("/"))) {
598
+ sEntitySet = oViewData === null || oViewData === void 0 ? void 0 : oViewData.fullContextPath.split("/")[1];
599
+ }
600
+ return CommonUtils.getConverterContextForPath(sMetaPath, oView.getModel().getMetaModel(), sEntitySet, oDiagnostics);
601
+ }
602
+
603
+ /**
604
+ * Check if path-based FieldControl evaluates to inapplicable.
605
+ *
606
+ * @param sFieldControlPath Field control path
607
+ * @param oAttribute SemanticAttributes
608
+ * @returns `true` if inapplicable
609
+ */;
610
+ _proto._isFieldControlPathInapplicable = function _isFieldControlPathInapplicable(sFieldControlPath, oAttribute) {
611
+ let bInapplicable = false;
612
+ const aParts = sFieldControlPath.split("/");
613
+ // sensitive data is removed only if the path has already been resolved.
614
+ if (aParts.length > 1) {
615
+ bInapplicable = oAttribute[aParts[0]] && oAttribute[aParts[0]].hasOwnProperty(aParts[1]) && oAttribute[aParts[0]][aParts[1]] === 0;
616
+ } else {
617
+ bInapplicable = oAttribute[sFieldControlPath] === 0;
618
+ }
619
+ return bInapplicable;
620
+ }
621
+ /**
622
+ * Method to replace Local Properties with Semantic Object mappings.
623
+ *
624
+ * @param oSelectionVariant SelectionVariant consisting of filterbar, Table and Page Context
625
+ * @param vMappings A string representation of semantic object mapping
626
+ * @returns - Modified SelectionVariant with LocalProperty replaced with SemanticObjectProperties.
627
+ */;
628
+ _proto._applySemanticObjectMappings = function _applySemanticObjectMappings(oSelectionVariant, vMappings) {
629
+ const oMappings = typeof vMappings === "string" ? JSON.parse(vMappings) : vMappings;
630
+ for (let i = 0; i < oMappings.length; i++) {
631
+ const sLocalProperty = oMappings[i]["LocalProperty"] && oMappings[i]["LocalProperty"]["$PropertyPath"] || oMappings[i]["@com.sap.vocabularies.Common.v1.LocalProperty"] && oMappings[i]["@com.sap.vocabularies.Common.v1.LocalProperty"]["$Path"];
632
+ const sSemanticObjectProperty = oMappings[i]["SemanticObjectProperty"] || oMappings[i]["@com.sap.vocabularies.Common.v1.SemanticObjectProperty"];
633
+ const oSelectOption = oSelectionVariant.getSelectOption(sLocalProperty);
634
+ if (oSelectOption) {
635
+ //Create a new SelectOption with sSemanticObjectProperty as the property Name and remove the older one
636
+ oSelectionVariant.removeSelectOption(sLocalProperty);
637
+ oSelectionVariant.massAddSelectOption(sSemanticObjectProperty, oSelectOption);
638
+ }
639
+ }
640
+ return oSelectionVariant;
641
+ }
642
+ /**
643
+ * Navigates to an Outbound provided in the manifest.
644
+ *
645
+ * @function
646
+ * @param sOutbound Identifier to location the outbound in the manifest
647
+ * @param mNavigationParameters Optional map containing key/value pairs to be passed to the intent
648
+ * @alias sap.fe.core.controllerextensions.IntentBasedNavigation#navigateOutbound
649
+ * @since 1.86.0
650
+ */;
651
+ _proto.navigateOutbound = function navigateOutbound(sOutbound, mNavigationParameters) {
652
+ var _oManifestEntry$cross, _oManifestEntry$cross2;
653
+ let aNavParams;
654
+ const oManifestEntry = this.base.getAppComponent().getManifestEntry("sap.app"),
655
+ oOutbound = (_oManifestEntry$cross = oManifestEntry.crossNavigation) === null || _oManifestEntry$cross === void 0 ? void 0 : (_oManifestEntry$cross2 = _oManifestEntry$cross.outbounds) === null || _oManifestEntry$cross2 === void 0 ? void 0 : _oManifestEntry$cross2[sOutbound];
656
+ if (!oOutbound) {
657
+ Log.error("Outbound is not defined in manifest!!");
658
+ return;
659
+ }
660
+ const sSemanticObject = oOutbound.semanticObject,
661
+ sAction = oOutbound.action,
662
+ outboundParams = oOutbound.parameters && this.getOutboundParams(oOutbound.parameters);
663
+ if (mNavigationParameters) {
664
+ aNavParams = [];
665
+ Object.keys(mNavigationParameters).forEach(function (key) {
666
+ let oParams;
667
+ if (Array.isArray(mNavigationParameters[key])) {
668
+ const aValues = mNavigationParameters[key];
669
+ for (let i = 0; i < aValues.length; i++) {
670
+ var _aNavParams;
671
+ oParams = {};
672
+ oParams[key] = aValues[i];
673
+ (_aNavParams = aNavParams) === null || _aNavParams === void 0 ? void 0 : _aNavParams.push(oParams);
674
+ }
675
+ } else {
676
+ var _aNavParams2;
677
+ oParams = {};
678
+ oParams[key] = mNavigationParameters[key];
679
+ (_aNavParams2 = aNavParams) === null || _aNavParams2 === void 0 ? void 0 : _aNavParams2.push(oParams);
680
+ }
681
+ });
682
+ }
683
+ if (aNavParams || outboundParams) {
684
+ mNavigationParameters = {
685
+ navigationContexts: {
686
+ data: aNavParams || outboundParams
687
+ }
688
+ };
689
+ }
690
+ this.base._intentBasedNavigation.navigate(sSemanticObject, sAction, mNavigationParameters);
691
+ }
692
+
693
+ /**
694
+ * Method to apply outbound parameters defined in the manifest.
695
+ *
696
+ * @param oSelectionVariant SelectionVariant consisting of a filter bar, a table, and a page context
697
+ * @param vOutboundParams Outbound Properties defined in the manifest
698
+ * @returns - The modified SelectionVariant with outbound parameters.
699
+ */;
700
+ _proto._applyOutboundParams = function _applyOutboundParams(oSelectionVariant, vOutboundParams) {
701
+ const aParameters = Object.keys(vOutboundParams);
702
+ const aSelectProperties = oSelectionVariant.getSelectOptionsPropertyNames();
703
+ aParameters.forEach(function (key) {
704
+ if (!aSelectProperties.includes(key)) {
705
+ oSelectionVariant.addSelectOption(key, "I", "EQ", vOutboundParams[key]);
706
+ }
707
+ });
708
+ return oSelectionVariant;
709
+ }
710
+ /**
711
+ * Method to get the outbound parameters defined in the manifest.
712
+ *
713
+ * @function
714
+ * @param oOutboundParams Parameters defined in the outbounds. Only "plain" is supported
715
+ * @returns Parameters with the key-Value pair
716
+ */;
717
+ _proto.getOutboundParams = function getOutboundParams(oOutboundParams) {
718
+ const oParamsMapping = {};
719
+ if (oOutboundParams) {
720
+ const aParameters = Object.keys(oOutboundParams) || [];
721
+ if (aParameters.length > 0) {
722
+ aParameters.forEach(function (key) {
723
+ const oMapping = oOutboundParams[key];
724
+ if (oMapping.value && oMapping.value.value && oMapping.value.format === "plain") {
725
+ if (!oParamsMapping[key]) {
726
+ oParamsMapping[key] = oMapping.value.value;
727
+ }
728
+ }
729
+ });
730
+ }
731
+ }
732
+ return oParamsMapping;
733
+ }
734
+
735
+ /**
736
+ * Triggers an outbound navigation when a user chooses the chevron.
737
+ *
738
+ * @param {object} oController
739
+ * @param {string} sOutboundTarget Name of the outbound target (needs to be defined in the manifest)
740
+ * @param {sap.ui.model.odata.v4.Context} oContext The context that contains the data for the target app
741
+ * @param {string} sCreatePath Create path when the chevron is created.
742
+ * @returns {Promise} Promise which is resolved once the navigation is triggered
743
+ */;
744
+ _proto.onChevronPressNavigateOutBound = function onChevronPressNavigateOutBound(oController, sOutboundTarget, oContext, sCreatePath) {
745
+ const oOutbounds = oController.getAppComponent().getRoutingService().getOutbounds();
746
+ const oDisplayOutbound = oOutbounds[sOutboundTarget];
747
+ let additionalNavigationParameters;
748
+ if (oDisplayOutbound && oDisplayOutbound.semanticObject && oDisplayOutbound.action) {
749
+ const oRefreshStrategies = {
750
+ intents: {}
751
+ };
752
+ const oDefaultRefreshStrategy = {};
753
+ let sMetaPath;
754
+ if (oContext) {
755
+ if (oContext.isA && oContext.isA("sap.ui.model.odata.v4.Context")) {
756
+ sMetaPath = ModelHelper.getMetaPathForContext(oContext);
757
+ oContext = [oContext];
758
+ } else {
759
+ sMetaPath = ModelHelper.getMetaPathForContext(oContext[0]);
760
+ }
761
+ oDefaultRefreshStrategy[sMetaPath] = "self";
762
+ oRefreshStrategies["_feDefault"] = oDefaultRefreshStrategy;
763
+ }
764
+ if (sCreatePath) {
765
+ const sKey = `${oDisplayOutbound.semanticObject}-${oDisplayOutbound.action}`;
766
+ oRefreshStrategies.intents[sKey] = {};
767
+ oRefreshStrategies.intents[sKey][sCreatePath] = "self";
768
+ }
769
+ if (oDisplayOutbound && oDisplayOutbound.parameters) {
770
+ const oParams = oDisplayOutbound.parameters && this.getOutboundParams(oDisplayOutbound.parameters);
771
+ if (Object.keys(oParams).length > 0) {
772
+ additionalNavigationParameters = oParams;
773
+ }
774
+ }
775
+ oController._intentBasedNavigation.navigate(oDisplayOutbound.semanticObject, oDisplayOutbound.action, {
776
+ navigationContexts: oContext,
777
+ refreshStrategies: oRefreshStrategies,
778
+ additionalNavigationParameters: additionalNavigationParameters
779
+ });
780
+
781
+ //TODO: check why returning a promise is required
782
+ return Promise.resolve();
783
+ } else {
784
+ throw new Error(`outbound target ${sOutboundTarget} not found in cross navigation definition of manifest`);
785
+ }
786
+ };
787
+ return InternalIntentBasedNavigation;
788
+ }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigate", [_dec3, _dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "navigate"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "prepareContextForExternalNavigation", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "prepareContextForExternalNavigation"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "prepareFiltersForExternalNavigation", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "prepareFiltersForExternalNavigation"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getNavigationMode", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "getNavigationMode"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateWithConfirmationDialog", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateWithConfirmationDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getEntitySet", [_dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getEntitySet"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeSensitiveData", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "removeSensitiveData"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateOutbound", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateOutbound"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getOutboundParams", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "getOutboundParams"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onChevronPressNavigateOutBound", [_dec20, _dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "onChevronPressNavigateOutBound"), _class2.prototype)), _class2)) || _class);
789
+ return InternalIntentBasedNavigation;
790
+ }, false);
791
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImRlZmluZVVJNUNsYXNzIiwibWV0aG9kT3ZlcnJpZGUiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJwcml2YXRlRXh0ZW5zaW9uIiwib25Jbml0IiwiX29BcHBDb21wb25lbnQiLCJiYXNlIiwiZ2V0QXBwQ29tcG9uZW50IiwiX29NZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIl9vTmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsIl9vVmlldyIsImdldFZpZXciLCJuYXZpZ2F0ZSIsInNTZW1hbnRpY09iamVjdCIsInNBY3Rpb24iLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJfZG9OYXZpZ2F0ZSIsIm9Db250ZXh0Iiwidk5hdmlnYXRpb25Db250ZXh0cyIsIm5hdmlnYXRpb25Db250ZXh0cyIsImFOYXZpZ2F0aW9uQ29udGV4dHMiLCJBcnJheSIsImlzQXJyYXkiLCJ2U2VtYW50aWNPYmplY3RNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwidk91dGJvdW5kUGFyYW1zIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwib1RhcmdldEluZm8iLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIm9WaWV3Iiwib0NvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwic2V0QmluZGluZ0NvbnRleHQiLCJhU2VtYW50aWNBdHRyaWJ1dGVzIiwib1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50IiwibGVuZ3RoIiwiZm9yRWFjaCIsIm9OYXZpZ2F0aW9uQ29udGV4dCIsImlzQSIsIm9TZW1hbnRpY0F0dHJpYnV0ZXMiLCJnZXRPYmplY3QiLCJzTWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib05hdkNvbnRleHQiLCJwcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvbiIsInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJwdXNoIiwic2VtYW50aWNBdHRyaWJ1dGVzIiwiZGF0YSIsIm1ldGFQYXRoIiwibWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQiLCJ0b0pTT05TdHJpbmciLCJvTW9kZWwiLCJzRW50aXR5U2V0IiwiZ2V0RW50aXR5U2V0Iiwic0NvbnRleHRVcmwiLCJjb25zdHJ1Y3RDb250ZXh0VXJsIiwidW5kZWZpbmVkIiwic2V0RmlsdGVyQ29udGV4dFVybCIsIl9hcHBseU91dGJvdW5kUGFyYW1zIiwiaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiYWRhcHROYXZpZ2F0aW9uQ29udGV4dCIsIl9hcHBseVNlbWFudGljT2JqZWN0TWFwcGluZ3MiLCJfcmVtb3ZlVGVjaG5pY2FsUGFyYW1ldGVycyIsInNOYXZNb2RlIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwibVJlZnJlc2hTdHJhdGVnaWVzIiwicmVmcmVzaFN0cmF0ZWdpZXMiLCJvSW50ZXJuYWxNb2RlbCIsImdldFZpZXdEYXRhIiwicmVmcmVzaFN0cmF0ZWd5T25BcHBSZXN0b3JlIiwibVZpZXdSZWZyZXNoU3RyYXRlZ2llcyIsIm1lcmdlT2JqZWN0cyIsIm1SZWZyZXNoU3RyYXRlZ3kiLCJLZWVwQWxpdmVIZWxwZXIiLCJnZXRSZWZyZXNoU3RyYXRlZ3lGb3JJbnRlbnQiLCJzZXRQcm9wZXJ0eSIsIm9uRXJyb3IiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJNZXNzYWdlQm94Iiwib1Jlc291cmNlQnVuZGxlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImVycm9yIiwiZ2V0VGV4dCIsInRpdGxlIiwiRXJyb3IiLCJvQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9NZXRhTW9kZWwiLCJjb252ZXJ0ZXJUeXBlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiYmluZCIsIkZ1bmN0aW9uIiwicHJvdG90eXBlIiwiTmF2aWdhdGlvblR5cGUiLCJGb3J3YXJkTmF2aWdhdGlvbiIsIm9EaXN0aW5jdEtleXMiLCJzQ29udGV4dFBhdGgiLCJhTWV0YVBhdGhQYXJ0cyIsInNwbGl0IiwiZmlsdGVyIiwiQm9vbGVhbiIsIl9maW5kRGlzdGluY3RLZXlzSW5PYmplY3QiLCJMb29rVXBPYmplY3QiLCJzTG9va1VwT2JqZWN0TWV0YVBhdGgiLCJzS2V5Iiwib05ld0xvb2tVcE9iamVjdCIsInNNYWluRW50aXR5U2V0TmFtZSIsInNNYWluRW50aXR5VHlwZU5hbWUiLCJvUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsInNNYWluRW50aXR5VmFsdWVQYXRoIiwic0N1cnJlbnRWYWx1ZVBhdGgiLCJzTGFzdFZhbHVlUGF0aCIsInNEaXN0aW5jdEtleSIsImFDb25mbGljdGluZ1BhdGhzIiwic1dpbm5lclZhbHVlUGF0aCIsImkiLCJzUGF0aCIsInNQYXRoSW5Db250ZXh0IiwicmVwbGFjZSIsInNFbnRpdHlUeXBlTmFtZSIsInNWYWx1ZSIsImpvaW4iLCJnZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eSIsInByZXBhcmVGaWx0ZXJzRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwib0ZpbHRlckJhckNvbmRpdGlvbnMiLCJzUm9vdFBhdGgiLCJhUGFyYW1ldGVycyIsIm9GaWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0Iiwic0Z1bGxDb250ZXh0UGF0aCIsImluY2x1ZGVzIiwiYVBhdGhQYXJ0cyIsInJlcGxhY2VBbGwiLCJmaWx0ZXJDb25kaXRpb25zIiwiZmlsdGVyQ29uZGl0aW9uc1dpdGhvdXRDb25mbGljdCIsIm5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsIm9BcHBsaWNhYmxlQ29udGV4dERpYWxvZyIsIm9uQ2xvc2UiLCJjbG9zZSIsIm9uQ29udGludWUiLCJhcHBsaWNhYmxlQ29udGV4dHMiLCJmbk9wZW5BbmRGaWxsRGlhbG9nIiwib0RpYWxvZ0NvbnRlbnQiLCJuTm90QXBwbGljYWJsZSIsImFOb3RBcHBsaWNhYmxlSXRlbXMiLCJvTm90QXBwbGljYWJsZUl0ZW1zTW9kZWwiLCJKU09OTW9kZWwiLCJvVG90YWxzIiwidG90YWwiLCJsYWJlbCIsInNldE1vZGVsIiwib3BlbiIsInNGcmFnbWVudE5hbWUiLCJvRGlhbG9nRnJhZ21lbnQiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsInNDYW5vbmljYWxQYXRoIiwiZ2V0Q2Fub25pY2FsUGF0aCIsInN1YnN0ciIsImluZGV4T2YiLCJQcm9taXNlIiwicmVzb2x2ZSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJuYW1lIiwiYmluZGluZ0NvbnRleHRzIiwiZW50aXR5VHlwZSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibW9kZWxzIiwibWV0YU1vZGVsIiwidGhlbiIsIm9GcmFnbWVudCIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJjb250cm9sbGVyIiwib1BvcG92ZXIiLCJhZGREZXBlbmRlbnQiLCJjYXRjaCIsIkxvZyIsInJlbW92ZVNlbGVjdE9wdGlvbiIsImVudGl0eVNldCIsIm9BdHRyaWJ1dGVzIiwidHJhbnNBZ2dyZWdhdGlvbnMiLCJjdXN0b21BZ2dyZWdhdGVzIiwiX2dldEFnZ3JlZ2F0ZXMiLCJnZXREaWFnbm9zdGljcyIsImFQcm9wZXJ0aWVzIiwiT2JqZWN0Iiwia2V5cyIsImoiLCJzUHJvcCIsIl9kZWxldGVBZ2dyZWdhdGVzIiwiYVByb3BlcnR5QW5ub3RhdGlvbnMiLCJfZ2V0UHJvcGVydHlBbm5vdGF0aW9ucyIsIm9GaWVsZENvbnRyb2wiLCJfaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlIiwiYWdncmVnYXRlcyIsIm9GdWxsQ29udGV4dCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRhcmdldE9iamVjdCIsImFubm90YXRpb25zIiwiX2Fubm90YXRpb25zIiwib0RpYWdub3N0aWNzIiwiY29udmVydGVyQ29udGV4dCIsIl9nZXRDb252ZXJ0ZXJDb250ZXh0IiwiYWdncmVnYXRpb25IZWxwZXIiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImdldFRyYW5zQWdncmVnYXRpb25zIiwibWFwIiwidHJhbnNBZ2ciLCJOYW1lIiwiVmFsdWUiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImN1c3RvbUFnZ3JlZ2F0ZSIsInF1YWxpZmllciIsIm9WaWV3RGF0YSIsImNvbnRleHRQYXRoIiwiZnVsbENvbnRleHRQYXRoIiwiQ29tbW9uVXRpbHMiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aCIsInNGaWVsZENvbnRyb2xQYXRoIiwib0F0dHJpYnV0ZSIsImJJbmFwcGxpY2FibGUiLCJhUGFydHMiLCJoYXNPd25Qcm9wZXJ0eSIsInZNYXBwaW5ncyIsIm9NYXBwaW5ncyIsIkpTT04iLCJwYXJzZSIsInNMb2NhbFByb3BlcnR5Iiwic1NlbWFudGljT2JqZWN0UHJvcGVydHkiLCJvU2VsZWN0T3B0aW9uIiwiZ2V0U2VsZWN0T3B0aW9uIiwibWFzc0FkZFNlbGVjdE9wdGlvbiIsIm5hdmlnYXRlT3V0Ym91bmQiLCJzT3V0Ym91bmQiLCJhTmF2UGFyYW1zIiwib01hbmlmZXN0RW50cnkiLCJnZXRNYW5pZmVzdEVudHJ5Iiwib091dGJvdW5kIiwiY3Jvc3NOYXZpZ2F0aW9uIiwib3V0Ym91bmRzIiwib3V0Ym91bmRQYXJhbXMiLCJwYXJhbWV0ZXJzIiwiZ2V0T3V0Ym91bmRQYXJhbXMiLCJrZXkiLCJvUGFyYW1zIiwiYVZhbHVlcyIsImFTZWxlY3RQcm9wZXJ0aWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJhZGRTZWxlY3RPcHRpb24iLCJvT3V0Ym91bmRQYXJhbXMiLCJvUGFyYW1zTWFwcGluZyIsIm9NYXBwaW5nIiwidmFsdWUiLCJmb3JtYXQiLCJvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQiLCJzT3V0Ym91bmRUYXJnZXQiLCJzQ3JlYXRlUGF0aCIsIm9PdXRib3VuZHMiLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9EaXNwbGF5T3V0Ym91bmQiLCJvUmVmcmVzaFN0cmF0ZWdpZXMiLCJpbnRlbnRzIiwib0RlZmF1bHRSZWZyZXNoU3RyYXRlZ3kiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQge1xuXHRkZWZpbmVVSTVDbGFzcyxcblx0ZXh0ZW5zaWJsZSxcblx0ZmluYWxFeHRlbnNpb24sXG5cdG1ldGhvZE92ZXJyaWRlLFxuXHRwcml2YXRlRXh0ZW5zaW9uLFxuXHRwdWJsaWNFeHRlbnNpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgS2VlcEFsaXZlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvTmF2aWdhdGlvblNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcblxuLyoqXG4gKiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLkNvbnRyb2xsZXJFeHRlbnNpb24gQ29udHJvbGxlciBleHRlbnNpb259XG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkludGVybmFsSW50ZXJuYWxCYXNlZE5hdmlnYXRpb25cbiAqIEBwcml2YXRlXG4gKiBAc2luY2UgMS44NC4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkludGVybmFsSW50ZXJuYWxCYXNlZE5hdmlnYXRpb25cIilcbmNsYXNzIEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByb3RlY3RlZCBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cdHByaXZhdGUgX29BcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cdHByaXZhdGUgX29NZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbDtcblx0cHJpdmF0ZSBfb05hdmlnYXRpb25TZXJ2aWNlITogTmF2aWdhdGlvblNlcnZpY2U7XG5cdHByaXZhdGUgX29WaWV3ITogVmlldztcblx0QG1ldGhvZE92ZXJyaWRlKClcblx0b25Jbml0KCkge1xuXHRcdHRoaXMuX29BcHBDb21wb25lbnQgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0dGhpcy5fb01ldGFNb2RlbCA9IHRoaXMuX29BcHBDb21wb25lbnQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHR0aGlzLl9vTmF2aWdhdGlvblNlcnZpY2UgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCk7XG5cdFx0dGhpcy5fb1ZpZXcgPSB0aGlzLmJhc2UuZ2V0VmlldygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuYWJsZXMgaW50ZW50LWJhc2VkIG5hdmlnYXRpb24gKFNlbWFudGljT2JqZWN0LUFjdGlvbikgd2l0aCB0aGUgcHJvdmlkZWQgY29udGV4dC5cblx0ICogSWYgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgaXMgcHJvdmlkZWQsIHRoaXMgaXMgYWxzbyBhcHBsaWVkIHRvIHRoZSBzZWxlY3Rpb24gdmFyaWFudCBhZnRlciB0aGUgYWRhcHRhdGlvbiBieSBhIGNvbnN1bWVyLlxuXHQgKiBUaGlzIHRha2VzIGNhcmUgb2YgcmVtb3ZpbmcgYW55IHRlY2huaWNhbCBwYXJhbWV0ZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGFuIGV4cGxhY2Ugb3IgaW5wbGFjZSBuYXZpZ2F0aW9uIHNob3VsZCB0YWtlIHBsYWNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1NlbWFudGljT2JqZWN0IFNlbWFudGljIG9iamVjdCBmb3IgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIHNBY3Rpb24gIEFjdGlvbiBmb3IgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIFttTmF2aWdhdGlvblBhcmFtZXRlcnNdIE9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIHRoZSBleHRlcm5hbCBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBbbU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5hdmlnYXRpb25Db250ZXh0c10gVXNlcyBvbmUgb2YgdGhlIGZvbGxvd2luZyB0byBiZSBwYXNzZWQgdG8gdGhlIGludGVudDpcblx0ICogICAgYSBzaW5nbGUgaW5zdGFuY2Ugb2Yge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fVxuXHQgKiAgICBtdWx0aXBsZSBpbnN0YW5jZXMgb2Yge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fVxuXHQgKiAgICBhbiBvYmplY3Qgb3IgYW4gYXJyYXkgb2Ygb2JqZWN0c1xuXHQgKlx0XHQgIElmIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcGFzc2VkLCB0aGUgY29udGV4dCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgbWV0YVBhdGggYW5kIHRvIHJlbW92ZSBhbnkgc2Vuc2l0aXZlIGRhdGFcblx0ICpcdFx0ICBJZiBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHBhc3NlZCwgdGhlIGZvbGxvd2luZyBmb3JtYXQgaXggZXhwZWN0ZWQ6XG5cdCAqXHRcdCAge1xuXHQgKlx0XHRcdGRhdGE6IHtcblx0ICpcdCBcdFx0XHRQcm9kdWN0SUQ6IDc2MzQsXG5cdCAqXHRcdFx0XHROYW1lOiBcIkxhcHRvcFwiXG5cdCAqXHRcdFx0IH0sXG5cdCAqXHRcdFx0IG1ldGFQYXRoOiBcIi9TYWxlc09yZGVyTWFuYWdlXCJcblx0ICogICAgICAgIH1cblx0ICogQHBhcmFtIFttTmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nXSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFNlbWFudGljT2JqZWN0TWFwcGluZyBvciBTZW1hbnRpY09iamVjdE1hcHBpbmcgdGhhdCBhcHBsaWVzIHRvIHRoaXMgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW21OYXZpZ2F0aW9uUGFyYW1ldGVycy5kZWZhdWx0UmVmcmVzaFN0cmF0ZWd5XSBEZWZhdWx0IHJlZnJlc2ggc3RyYXRlZ3kgdG8gYmUgdXNlZCBpbiBjYXNlIG5vIHJlZnJlc2ggc3RyYXRlZ3kgaXMgc3BlY2lmaWVkIGZvciB0aGUgaW50ZW50IGluIHRoZSB2aWV3LlxuXHQgKiBAcGFyYW0gW21OYXZpZ2F0aW9uUGFyYW1ldGVycy5yZWZyZXNoU3RyYXRlZ2llc11cblx0ICogQHBhcmFtIFttTmF2aWdhdGlvblBhcmFtZXRlcnMuYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzXSBBZGRpdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVycyBjb25maWd1cmVkIGluIHRoZSBjcm9zc0FwcE5hdmlnYXRpb24gb3V0Ym91bmQgcGFyYW1ldGVycy5cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRuYXZpZ2F0ZShcblx0XHRzU2VtYW50aWNPYmplY3Q6IHN0cmluZyxcblx0XHRzQWN0aW9uOiBzdHJpbmcsXG5cdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzOlxuXHRcdFx0fCB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzPzogb2JqZWN0IHwgYW55W10gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nPzogc3RyaW5nIHwgb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGRlZmF1bHRSZWZyZXNoU3RyYXRlZ3k/OiBvYmplY3QgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0cmVmcmVzaFN0cmF0ZWdpZXM/OiBhbnk7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzPzogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0ICB9XG5cdFx0XHR8IHVuZGVmaW5lZFxuXHQpIHtcblx0XHRjb25zdCBfZG9OYXZpZ2F0ZSA9IChvQ29udGV4dD86IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgdk5hdmlnYXRpb25Db250ZXh0cyA9IG1OYXZpZ2F0aW9uUGFyYW1ldGVycyAmJiBtTmF2aWdhdGlvblBhcmFtZXRlcnMubmF2aWdhdGlvbkNvbnRleHRzLFxuXHRcdFx0XHRhTmF2aWdhdGlvbkNvbnRleHRzID1cblx0XHRcdFx0XHR2TmF2aWdhdGlvbkNvbnRleHRzICYmICFBcnJheS5pc0FycmF5KHZOYXZpZ2F0aW9uQ29udGV4dHMpID8gW3ZOYXZpZ2F0aW9uQ29udGV4dHNdIDogdk5hdmlnYXRpb25Db250ZXh0cyxcblx0XHRcdFx0dlNlbWFudGljT2JqZWN0TWFwcGluZyA9IG1OYXZpZ2F0aW9uUGFyYW1ldGVycyAmJiBtTmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRcdFx0XHR2T3V0Ym91bmRQYXJhbXMgPSBtTmF2aWdhdGlvblBhcmFtZXRlcnMgJiYgbU5hdmlnYXRpb25QYXJhbWV0ZXJzLmFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0b1RhcmdldEluZm86IGFueSA9IHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdGFjdGlvbjogc0FjdGlvblxuXHRcdFx0XHR9LFxuXHRcdFx0XHRvVmlldyA9IHRoaXMuYmFzZS5nZXRWaWV3KCksXG5cdFx0XHRcdG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyO1xuXG5cdFx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdFx0dGhpcy5fb1ZpZXcuc2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc1NlbWFudGljT2JqZWN0ICYmIHNBY3Rpb24pIHtcblx0XHRcdFx0bGV0IGFTZW1hbnRpY0F0dHJpYnV0ZXM6IGFueVtdID0gW10sXG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQ6IGFueSA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0XHRcdC8vIDEuIGdldCBTZW1hbnRpY0F0dHJpYnV0ZXMgZm9yIG5hdmlnYXRpb25cblx0XHRcdFx0aWYgKGFOYXZpZ2F0aW9uQ29udGV4dHMgJiYgYU5hdmlnYXRpb25Db250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRhTmF2aWdhdGlvbkNvbnRleHRzLmZvckVhY2goKG9OYXZpZ2F0aW9uQ29udGV4dDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHQvLyAxLjEuYSBpZiBuYXZpZ2F0aW9uIGNvbnRleHQgaXMgaW5zdGFuY2Ugb2Ygc2FwLnVpLm1vZGUub2RhdGEudjQuQ29udGV4dFxuXHRcdFx0XHRcdFx0Ly8gZWxzZSBjaGVjayBpZiBuYXZpZ2F0aW9uIGNvbnRleHQgaXMgb2YgdHlwZSBvYmplY3Rcblx0XHRcdFx0XHRcdGlmIChvTmF2aWdhdGlvbkNvbnRleHQuaXNBICYmIG9OYXZpZ2F0aW9uQ29udGV4dC5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKSkge1xuXHRcdFx0XHRcdFx0XHQvLyAxLjEuYiByZW1vdmUgc2Vuc2l0aXZlIGRhdGFcblx0XHRcdFx0XHRcdFx0bGV0IG9TZW1hbnRpY0F0dHJpYnV0ZXMgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNNZXRhUGF0aCA9IHRoaXMuX29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob05hdmlnYXRpb25Db250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IGFsc28gcmVtb3ZlIHNlbnNpdGl2ZSBkYXRhIGZyb20gIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzID0gdGhpcy5yZW1vdmVTZW5zaXRpdmVEYXRhKG9TZW1hbnRpY0F0dHJpYnV0ZXMsIHNNZXRhUGF0aCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9OYXZDb250ZXh0ID0gdGhpcy5wcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvbihvU2VtYW50aWNBdHRyaWJ1dGVzLCBvTmF2aWdhdGlvbkNvbnRleHQpO1xuXHRcdFx0XHRcdFx0XHRvVGFyZ2V0SW5mb1tcInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3RcIl0gPSBvTmF2Q29udGV4dC5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0O1xuXHRcdFx0XHRcdFx0XHRhU2VtYW50aWNBdHRyaWJ1dGVzLnB1c2gob05hdkNvbnRleHQuc2VtYW50aWNBdHRyaWJ1dGVzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdCEob05hdmlnYXRpb25Db250ZXh0ICYmIEFycmF5LmlzQXJyYXkob05hdmlnYXRpb25Db250ZXh0LmRhdGEpKSAmJlxuXHRcdFx0XHRcdFx0XHR0eXBlb2Ygb05hdmlnYXRpb25Db250ZXh0ID09PSBcIm9iamVjdFwiXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gMS4xLmIgcmVtb3ZlIHNlbnNpdGl2ZSBkYXRhIGZyb20gb2JqZWN0XG5cdFx0XHRcdFx0XHRcdGFTZW1hbnRpY0F0dHJpYnV0ZXMucHVzaCh0aGlzLnJlbW92ZVNlbnNpdGl2ZURhdGEob05hdmlnYXRpb25Db250ZXh0LmRhdGEsIG9OYXZpZ2F0aW9uQ29udGV4dC5tZXRhUGF0aCkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvTmF2aWdhdGlvbkNvbnRleHQgJiYgQXJyYXkuaXNBcnJheShvTmF2aWdhdGlvbkNvbnRleHQuZGF0YSkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gb05hdmlnYXRpb25Db250ZXh0LmRhdGEgY2FuIGJlIGFycmF5IGFscmVhZHkgZXggOiBbe0N1c3RvbWVyOiBcIjEwMDAxXCJ9LCB7Q3VzdG9tZXI6IFwiMTAwOTFcIn1dXG5cdFx0XHRcdFx0XHRcdC8vIGhlbmNlIGFzc2lnbmluZyBpdCB0byB0aGUgYVNlbWFudGljQXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHRhU2VtYW50aWNBdHRyaWJ1dGVzID0gdGhpcy5yZW1vdmVTZW5zaXRpdmVEYXRhKG9OYXZpZ2F0aW9uQ29udGV4dC5kYXRhLCBvTmF2aWdhdGlvbkNvbnRleHQubWV0YVBhdGgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIDIuMSBNZXJnZSBiYXNlIHNlbGVjdGlvbiB2YXJpYW50IGFuZCBzYW5pdGl6ZWQgc2VtYW50aWMgYXR0cmlidXRlcyBpbnRvIG9uZSBTZWxlY3Rpb25WYXJpYW50XG5cdFx0XHRcdGlmIChhU2VtYW50aWNBdHRyaWJ1dGVzICYmIGFTZW1hbnRpY0F0dHJpYnV0ZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQgPSB0aGlzLl9vTmF2aWdhdGlvblNlcnZpY2UubWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQoXG5cdFx0XHRcdFx0XHRhU2VtYW50aWNBdHRyaWJ1dGVzLFxuXHRcdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQudG9KU09OU3RyaW5nKClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gMy4gQWRkIGZpbHRlckNvbnRleHRVcmwgdG8gU1Ygc28gdGhlIE5hdmlnYXRpb25IYW5kbGVyIGNhbiByZW1vdmUgYW55IHNlbnNpdGl2ZSBkYXRhIGJhc2VkIG9uIHZpZXcgZW50aXR5U2V0XG5cdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuX29WaWV3LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0c0VudGl0eVNldCA9IHRoaXMuZ2V0RW50aXR5U2V0KCksXG5cdFx0XHRcdFx0c0NvbnRleHRVcmwgPSBzRW50aXR5U2V0ID8gdGhpcy5fb05hdmlnYXRpb25TZXJ2aWNlLmNvbnN0cnVjdENvbnRleHRVcmwoc0VudGl0eVNldCwgb01vZGVsKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKHNDb250ZXh0VXJsKSB7XG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQuc2V0RmlsdGVyQ29udGV4dFVybChzQ29udGV4dFVybCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBPdXRib3VuZCBQYXJhbWV0ZXJzIHRvIHRoZSBTVlxuXHRcdFx0XHRpZiAodk91dGJvdW5kUGFyYW1zKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlPdXRib3VuZFBhcmFtcyhvU2VsZWN0aW9uVmFyaWFudCwgdk91dGJvdW5kUGFyYW1zKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIDQuIGdpdmUgYW4gb3Bwb3J0dW5pdHkgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBpbmZsdWVuY2UgdGhlIFNlbGVjdGlvblZhcmlhbnRcblx0XHRcdFx0b0NvbnRyb2xsZXIuaW50ZW50QmFzZWROYXZpZ2F0aW9uLmFkYXB0TmF2aWdhdGlvbkNvbnRleHQob1NlbGVjdGlvblZhcmlhbnQsIG9UYXJnZXRJbmZvKTtcblxuXHRcdFx0XHQvLyA1LiBBcHBseSBzZW1hbnRpYyBvYmplY3QgbWFwcGluZ3MgdG8gdGhlIFNWXG5cdFx0XHRcdGlmICh2U2VtYW50aWNPYmplY3RNYXBwaW5nKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50LCB2U2VtYW50aWNPYmplY3RNYXBwaW5nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIDYuIHJlbW92ZSB0ZWNobmljYWwgcGFyYW1ldGVycyBmcm9tIFNlbGVjdGlvbiBWYXJpYW50XG5cdFx0XHRcdHRoaXMuX3JlbW92ZVRlY2huaWNhbFBhcmFtZXRlcnMob1NlbGVjdGlvblZhcmlhbnQpO1xuXG5cdFx0XHRcdC8vIDcuIGNoZWNrIGlmIHByb2dyYW1taW5nIG1vZGVsIGlzIHN0aWNreSBhbmQgcGFnZSBpcyBlZGl0YWJsZVxuXHRcdFx0XHRjb25zdCBzTmF2TW9kZSA9IG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0TmF2aWdhdGlvbk1vZGUoKTtcblxuXHRcdFx0XHQvLyA4LiBVcGRhdGluZyByZWZyZXNoIHN0cmF0ZWd5IGluIGludGVybmFsIG1vZGVsXG5cdFx0XHRcdGNvbnN0IG1SZWZyZXNoU3RyYXRlZ2llcyA9IChtTmF2aWdhdGlvblBhcmFtZXRlcnMgJiYgbU5hdmlnYXRpb25QYXJhbWV0ZXJzLnJlZnJlc2hTdHJhdGVnaWVzKSB8fCB7fSxcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbCA9IG9WaWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0XHRpZiAob0ludGVybmFsTW9kZWwpIHtcblx0XHRcdFx0XHRpZiAoKG9WaWV3ICYmIChvVmlldy5nZXRWaWV3RGF0YSgpIGFzIGFueSkpLnJlZnJlc2hTdHJhdGVneU9uQXBwUmVzdG9yZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgbVZpZXdSZWZyZXNoU3RyYXRlZ2llcyA9IChvVmlldy5nZXRWaWV3RGF0YSgpIGFzIGFueSkucmVmcmVzaFN0cmF0ZWd5T25BcHBSZXN0b3JlIHx8IHt9O1xuXHRcdFx0XHRcdFx0bWVyZ2VPYmplY3RzKG1SZWZyZXNoU3RyYXRlZ2llcywgbVZpZXdSZWZyZXNoU3RyYXRlZ2llcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IG1SZWZyZXNoU3RyYXRlZ3kgPSBLZWVwQWxpdmVIZWxwZXIuZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50KG1SZWZyZXNoU3RyYXRlZ2llcywgc1NlbWFudGljT2JqZWN0LCBzQWN0aW9uKTtcblx0XHRcdFx0XHRpZiAobVJlZnJlc2hTdHJhdGVneSkge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVmcmVzaFN0cmF0ZWd5T25BcHBSZXN0b3JlXCIsIG1SZWZyZXNoU3RyYXRlZ3kpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIDkuIE5hdmlnYXRlIHZpYSBOYXZpZ2F0aW9uSGFuZGxlclxuXHRcdFx0XHRjb25zdCBvbkVycm9yID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC9tL01lc3NhZ2VCb3hcIl0sIGZ1bmN0aW9uIChNZXNzYWdlQm94OiBhbnkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdFx0XHRcdFx0XHRNZXNzYWdlQm94LmVycm9yKG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fSEVMUEVSX05BVklHQVRJT05fRVJST1JfTUVTU0FHRVwiKSwge1xuXHRcdFx0XHRcdFx0XHR0aXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXMuX29OYXZpZ2F0aW9uU2VydmljZS5uYXZpZ2F0ZShcblx0XHRcdFx0XHRzU2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0c0FjdGlvbixcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC50b0pTT05TdHJpbmcoKSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0b25FcnJvcixcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0c05hdk1vZGVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlNlbWFudGljIE9iamVjdC9hY3Rpb24gaXMgbm90IHByb3ZpZGVkXCIpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQmluZGluZ0NvbnRleHQgJiYgKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKTtcblx0XHRpZiAoXG5cdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmNvbnZlcnRlclR5cGUgPT09IFwiT2JqZWN0UGFnZVwiICYmXG5cdFx0XHRvTWV0YU1vZGVsICYmXG5cdFx0XHQhTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9NZXRhTW9kZWwpXG5cdFx0KSB7XG5cdFx0XHRkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0X2RvTmF2aWdhdGUuYmluZCh0aGlzKSxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRcdHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5Gb3J3YXJkTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0X2RvTmF2aWdhdGUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJlcGFyZSBhdHRyaWJ1dGVzIHRvIGJlIHBhc3NlZCB0byBleHRlcm5hbCBuYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1NlbWFudGljQXR0cmlidXRlcyBDb250ZXh0IGRhdGEgYWZ0ZXIgcmVtb3ZpbmcgYWxsIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cblx0ICogQHBhcmFtIG9Db250ZXh0IEFjdHVhbCBjb250ZXh0IGZyb20gd2hpY2ggdGhlIHNlbWFudGljQXR0cmlidXRlcyB3ZXJlIGRlcml2ZWQuXG5cdCAqIEByZXR1cm5zIE9iamVjdCBvZiBwcmVwYXJlZCBhdHRyaWJ1dGVzIGZvciBleHRlcm5hbCBuYXZpZ2F0aW9uIGFuZCBubyBjb25mbGljdCBwcm9wZXJ0aWVzLlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHByZXBhcmVDb250ZXh0Rm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKG9TZW1hbnRpY0F0dHJpYnV0ZXM6IGFueSwgb0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHQvLyAxLiBGaW5kIGFsbCBkaXN0aW5jdCBrZXlzIGluIHRoZSBvYmplY3QgU2VtYW50aWNBdHRyaWJ1dGVzXG5cdFx0Ly8gU3RvcmUgbWV0YSBwYXRoIGZvciBlYWNoIG9jY3VyZW5jZSBvZiB0aGUga2V5XG5cdFx0Y29uc3Qgb0Rpc3RpbmN0S2V5czogYW55ID0ge30sXG5cdFx0XHRzQ29udGV4dFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc0NvbnRleHRQYXRoKSxcblx0XHRcdGFNZXRhUGF0aFBhcnRzID0gc01ldGFQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG5cblx0XHRmdW5jdGlvbiBfZmluZERpc3RpbmN0S2V5c0luT2JqZWN0KExvb2tVcE9iamVjdDogYW55LCBzTG9va1VwT2JqZWN0TWV0YVBhdGg6IGFueSkge1xuXHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIExvb2tVcE9iamVjdCkge1xuXHRcdFx0XHQvLyBudWxsIGNhc2U/P1xuXHRcdFx0XHRpZiAoTG9va1VwT2JqZWN0W3NLZXldID09PSBudWxsIHx8IHR5cGVvZiBMb29rVXBPYmplY3Rbc0tleV0gIT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRpZiAoIW9EaXN0aW5jdEtleXNbc0tleV0pIHtcblx0XHRcdFx0XHRcdC8vIGlmIGtleSBpcyBmb3VuZCBmb3IgdGhlIGZpcnN0IHRpbWUgdGhlbiBjcmVhdGUgYXJyYXlcblx0XHRcdFx0XHRcdG9EaXN0aW5jdEtleXNbc0tleV0gPSBbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gcHVzaCBwYXRoIHRvIGFycmF5XG5cdFx0XHRcdFx0b0Rpc3RpbmN0S2V5c1tzS2V5XS5wdXNoKHNMb29rVXBPYmplY3RNZXRhUGF0aCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gaWYgYSBuZXN0ZWQgb2JqZWN0IGlzIGZvdW5kXG5cdFx0XHRcdFx0Y29uc3Qgb05ld0xvb2tVcE9iamVjdCA9IExvb2tVcE9iamVjdFtzS2V5XTtcblx0XHRcdFx0XHRfZmluZERpc3RpbmN0S2V5c0luT2JqZWN0KG9OZXdMb29rVXBPYmplY3QsIGAke3NMb29rVXBPYmplY3RNZXRhUGF0aH0vJHtzS2V5fWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0X2ZpbmREaXN0aW5jdEtleXNJbk9iamVjdChvU2VtYW50aWNBdHRyaWJ1dGVzLCBzTWV0YVBhdGgpO1xuXG5cdFx0Ly8gMi4gRGV0ZXJtaW5lIGRpc3RpbmN0IGtleSB2YWx1ZSBhbmQgYWRkIGNvbmZsaWN0ZWQgcGF0aHMgdG8gc2VtYW50aWMgYXR0cmlidXRlc1xuXHRcdGNvbnN0IHNNYWluRW50aXR5U2V0TmFtZSA9IGFNZXRhUGF0aFBhcnRzWzBdLFxuXHRcdFx0c01haW5FbnRpdHlUeXBlTmFtZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtzTWFpbkVudGl0eVNldE5hbWV9L0BzYXB1aS5uYW1lYCksXG5cdFx0XHRvUHJvcGVydGllc1dpdGhvdXRDb25mbGljdDogYW55ID0ge307XG5cdFx0bGV0IHNNYWluRW50aXR5VmFsdWVQYXRoLCBzQ3VycmVudFZhbHVlUGF0aCwgc0xhc3RWYWx1ZVBhdGg7XG5cdFx0Zm9yIChjb25zdCBzRGlzdGluY3RLZXkgaW4gb0Rpc3RpbmN0S2V5cykge1xuXHRcdFx0Y29uc3QgYUNvbmZsaWN0aW5nUGF0aHMgPSBvRGlzdGluY3RLZXlzW3NEaXN0aW5jdEtleV07XG5cdFx0XHRsZXQgc1dpbm5lclZhbHVlUGF0aDtcblx0XHRcdC8vIEZpbmQgd2lubmVyIHZhbHVlIGZvciBlYWNoIGRpc3RpbmN0IGtleSBpbiBjYXNlIG9mIGNvbmZsaWN0IGJ5IHRoZSBmb2xsb3dpbmcgcnVsZTpcblxuXHRcdFx0Ly8gLT4gQS4gaWYgYW55IG1ldGEgcGF0aCBmb3IgYSBkaXN0aW5jdCBrZXkgaXMgdGhlIHNhbWUgYXMgbWFpbiBlbnRpdHkgdGFrZSB0aGF0IGFzIHRoZSB2YWx1ZVxuXHRcdFx0Ly8gLT4gQi4gaWYgQSBpcyBub3QgbWV0IGtlZXAgdGhlIHZhbHVlIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCAoc01ldGFQYXRoID09PSBwYXRoIG9mIGRpc3RpbmNlIGtleSlcblx0XHRcdC8vIC0+IEMuIGlmIEEsIEIgb3IgQyBhcmUgbm90IG1ldCB0YWtlIHRoZSBsYXN0IHBhdGggZm9yIHZhbHVlXG5cdFx0XHRpZiAoYUNvbmZsaWN0aW5nUGF0aHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHQvLyBjb25mbGljdFxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8PSBhQ29uZmxpY3RpbmdQYXRocy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBzUGF0aCA9IGFDb25mbGljdGluZ1BhdGhzW2ldO1xuXHRcdFx0XHRcdGxldCBzUGF0aEluQ29udGV4dCA9IHNQYXRoLnJlcGxhY2Uoc1BhdGggPT09IHNNZXRhUGF0aCA/IHNNZXRhUGF0aCA6IGAke3NNZXRhUGF0aH0vYCwgXCJcIik7XG5cdFx0XHRcdFx0c1BhdGhJbkNvbnRleHQgPSAoc1BhdGhJbkNvbnRleHQgPT09IFwiXCIgPyBzUGF0aEluQ29udGV4dCA6IGAke3NQYXRoSW5Db250ZXh0fS9gKSArIHNEaXN0aW5jdEtleTtcblx0XHRcdFx0XHRjb25zdCBzRW50aXR5VHlwZU5hbWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aH0vQHNhcHVpLm5hbWVgKTtcblx0XHRcdFx0XHQvLyBydWxlIEFcblxuXHRcdFx0XHRcdC8vIHJ1bGUgQVxuXHRcdFx0XHRcdGlmIChzRW50aXR5VHlwZU5hbWUgPT09IHNNYWluRW50aXR5VHlwZU5hbWUpIHtcblx0XHRcdFx0XHRcdHNNYWluRW50aXR5VmFsdWVQYXRoID0gc1BhdGhJbkNvbnRleHQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gcnVsZSBCXG5cdFx0XHRcdFx0aWYgKHNQYXRoID09PSBzTWV0YVBhdGgpIHtcblx0XHRcdFx0XHRcdHNDdXJyZW50VmFsdWVQYXRoID0gc1BhdGhJbkNvbnRleHQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gcnVsZSBDXG5cdFx0XHRcdFx0c0xhc3RWYWx1ZVBhdGggPSBzUGF0aEluQ29udGV4dDtcblxuXHRcdFx0XHRcdC8vIGFkZCBjb25mbGljdGVkIHBhdGggdG8gc2VtYW50aWMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdC8vIGNoZWNrIGlmIHRoZSBjdXJyZW50IHBhdGggcG9pbnRzIHRvIG1haW4gZW50aXR5IGFuZCBwcmVmaXggYXR0cmlidXRlIG5hbWVzIGFjY29yZGluZ2x5XG5cdFx0XHRcdFx0b1NlbWFudGljQXR0cmlidXRlc1tcblx0XHRcdFx0XHRcdGAke3NNZXRhUGF0aH0vJHtzUGF0aEluQ29udGV4dH1gXG5cdFx0XHRcdFx0XHRcdC5zcGxpdChcIi9cIilcblx0XHRcdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc1ZhbHVlICE9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC5qb2luKFwiLlwiKVxuXHRcdFx0XHRcdF0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShzUGF0aEluQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQSB8fCBCIHx8IENcblx0XHRcdFx0c1dpbm5lclZhbHVlUGF0aCA9IHNNYWluRW50aXR5VmFsdWVQYXRoIHx8IHNDdXJyZW50VmFsdWVQYXRoIHx8IHNMYXN0VmFsdWVQYXRoO1xuXHRcdFx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzW3NEaXN0aW5jdEtleV0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShzV2lubmVyVmFsdWVQYXRoKTtcblx0XHRcdFx0c01haW5FbnRpdHlWYWx1ZVBhdGggPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHNDdXJyZW50VmFsdWVQYXRoID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRzTGFzdFZhbHVlUGF0aCA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIG5vIGNvbmZsaWN0LCBhZGQgZGlzdGluY3Qga2V5IHdpdGhvdXQgYWRkaW5nIHBhdGhzXG5cdFx0XHRcdGNvbnN0IHNQYXRoID0gYUNvbmZsaWN0aW5nUGF0aHNbMF07IC8vIGJlY2F1c2UgdGhlcmUgaXMgb25seSBvbmUgYW5kIGhlbmNlIG5vIGNvbmZsaWN0XG5cdFx0XHRcdGxldCBzUGF0aEluQ29udGV4dCA9IHNQYXRoLnJlcGxhY2Uoc1BhdGggPT09IHNNZXRhUGF0aCA/IHNNZXRhUGF0aCA6IGAke3NNZXRhUGF0aH0vYCwgXCJcIik7XG5cdFx0XHRcdHNQYXRoSW5Db250ZXh0ID0gKHNQYXRoSW5Db250ZXh0ID09PSBcIlwiID8gc1BhdGhJbkNvbnRleHQgOiBgJHtzUGF0aEluQ29udGV4dH0vYCkgKyBzRGlzdGluY3RLZXk7XG5cdFx0XHRcdG9TZW1hbnRpY0F0dHJpYnV0ZXNbc0Rpc3RpbmN0S2V5XSA9IG9Db250ZXh0LmdldFByb3BlcnR5KHNQYXRoSW5Db250ZXh0KTtcblx0XHRcdFx0b1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rbc0Rpc3RpbmN0S2V5XSA9IGAke3NNZXRhUGF0aH0vJHtzUGF0aEluQ29udGV4dH1gXG5cdFx0XHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc1ZhbHVlICE9IFwiXCI7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuam9pbihcIi5cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIDMuIFJlbW92ZSBhbGwgTmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Zm9yIChjb25zdCBzUHJvcGVydHkgaW4gb1NlbWFudGljQXR0cmlidXRlcykge1xuXHRcdFx0aWYgKG9TZW1hbnRpY0F0dHJpYnV0ZXNbc1Byb3BlcnR5XSAhPT0gbnVsbCAmJiB0eXBlb2Ygb1NlbWFudGljQXR0cmlidXRlc1tzUHJvcGVydHldID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGRlbGV0ZSBvU2VtYW50aWNBdHRyaWJ1dGVzW3NQcm9wZXJ0eV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRzZW1hbnRpY0F0dHJpYnV0ZXM6IG9TZW1hbnRpY0F0dHJpYnV0ZXMsXG5cdFx0XHRwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0OiBvUHJvcGVydGllc1dpdGhvdXRDb25mbGljdFxuXHRcdH07XG5cdH1cblx0LyoqXG5cdCAqIFByZXBhcmUgZmlsdGVyIGNvbmRpdGlvbnMgdG8gYmUgcGFzc2VkIHRvIGV4dGVybmFsIG5hdmlnYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBvRmlsdGVyQmFyQ29uZGl0aW9ucyBGaWx0ZXIgY29uZGl0aW9ucy5cblx0ICogQHBhcmFtIHNSb290UGF0aCBSb290IHBhdGggb2YgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKiBAcGFyYW0gYVBhcmFtZXRlcnMgTmFtZXMgb2YgcGFyYW1ldGVycyB0byBiZSBjb25zaWRlcmVkLlxuXHQgKiBAcmV0dXJucyBPYmplY3Qgb2YgcHJlcGFyZWQgZmlsdGVyIGNvbmRpdGlvbnMgZm9yIGV4dGVybmFsIG5hdmlnYXRpb24gYW5kIG5vIGNvbmZsaWN0IGZpbHRlcnMuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHJlcGFyZUZpbHRlcnNGb3JFeHRlcm5hbE5hdmlnYXRpb24ob0ZpbHRlckJhckNvbmRpdGlvbnM6IGFueSwgc1Jvb3RQYXRoOiBzdHJpbmcsIGFQYXJhbWV0ZXJzPzogYW55W10pIHtcblx0XHRsZXQgc1BhdGg7XG5cdFx0Y29uc3Qgb0Rpc3RpbmN0S2V5czogYW55ID0ge307XG5cdFx0Y29uc3Qgb0ZpbHRlckNvbmRpdGlvbnNXaXRob3V0Q29uZmxpY3Q6IGFueSA9IHt9O1xuXHRcdGxldCBzTWFpbkVudGl0eVZhbHVlUGF0aCwgc0N1cnJlbnRWYWx1ZVBhdGgsIHNGdWxsQ29udGV4dFBhdGgsIHNXaW5uZXJWYWx1ZVBhdGgsIHNQYXRoSW5Db250ZXh0O1xuXG5cdFx0ZnVuY3Rpb24gX2ZpbmREaXN0aW5jdEtleXNJbk9iamVjdChMb29rVXBPYmplY3Q6IGFueSkge1xuXHRcdFx0bGV0IHNMb29rVXBPYmplY3RNZXRhUGF0aDtcblx0XHRcdGZvciAobGV0IHNLZXkgaW4gTG9va1VwT2JqZWN0KSB7XG5cdFx0XHRcdGlmIChMb29rVXBPYmplY3Rbc0tleV0pIHtcblx0XHRcdFx0XHRpZiAoc0tleS5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRcdFx0XHRcdHNMb29rVXBPYmplY3RNZXRhUGF0aCA9IHNLZXk7IC8vIFwiL1NhbGVzT3JkZXJtYW5hZ2UvX0l0ZW0vTWF0ZXJpYWxcIlxuXHRcdFx0XHRcdFx0Y29uc3QgYVBhdGhQYXJ0cyA9IHNLZXkuc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRcdFx0c0tleSA9IGFQYXRoUGFydHNbYVBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c0xvb2tVcE9iamVjdE1ldGFQYXRoID0gc1Jvb3RQYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIW9EaXN0aW5jdEtleXNbc0tleV0pIHtcblx0XHRcdFx0XHRcdC8vIGlmIGtleSBpcyBmb3VuZCBmb3IgdGhlIGZpcnN0IHRpbWUgdGhlbiBjcmVhdGUgYXJyYXlcblx0XHRcdFx0XHRcdG9EaXN0aW5jdEtleXNbc0tleV0gPSBbXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBwdXNoIHBhdGggdG8gYXJyYXlcblx0XHRcdFx0XHRvRGlzdGluY3RLZXlzW3NLZXldLnB1c2goc0xvb2tVcE9iamVjdE1ldGFQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdF9maW5kRGlzdGluY3RLZXlzSW5PYmplY3Qob0ZpbHRlckJhckNvbmRpdGlvbnMpO1xuXHRcdGZvciAoY29uc3Qgc0Rpc3RpbmN0S2V5IGluIG9EaXN0aW5jdEtleXMpIHtcblx0XHRcdGNvbnN0IGFDb25mbGljdGluZ1BhdGhzID0gb0Rpc3RpbmN0S2V5c1tzRGlzdGluY3RLZXldO1xuXG5cdFx0XHRpZiAoYUNvbmZsaWN0aW5nUGF0aHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHQvLyBjb25mbGljdFxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8PSBhQ29uZmxpY3RpbmdQYXRocy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0XHRzUGF0aCA9IGFDb25mbGljdGluZ1BhdGhzW2ldO1xuXHRcdFx0XHRcdGlmIChzUGF0aCA9PT0gc1Jvb3RQYXRoKSB7XG5cdFx0XHRcdFx0XHRzRnVsbENvbnRleHRQYXRoID0gYCR7c1Jvb3RQYXRofS8ke3NEaXN0aW5jdEtleX1gO1xuXHRcdFx0XHRcdFx0c1BhdGhJbkNvbnRleHQgPSBzRGlzdGluY3RLZXk7XG5cdFx0XHRcdFx0XHRzTWFpbkVudGl0eVZhbHVlUGF0aCA9IHNEaXN0aW5jdEtleTtcblx0XHRcdFx0XHRcdGlmIChhUGFyYW1ldGVycyAmJiBhUGFyYW1ldGVycy5pbmNsdWRlcyhzRGlzdGluY3RLZXkpKSB7XG5cdFx0XHRcdFx0XHRcdG9GaWx0ZXJCYXJDb25kaXRpb25zW2AkUGFyYW1ldGVyLiR7c0Rpc3RpbmN0S2V5fWBdID0gb0ZpbHRlckJhckNvbmRpdGlvbnNbc0Rpc3RpbmN0S2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c1BhdGhJbkNvbnRleHQgPSBzUGF0aDtcblx0XHRcdFx0XHRcdHNGdWxsQ29udGV4dFBhdGggPSAoYCR7c1Jvb3RQYXRofS8ke3NQYXRofWAgYXMgYW55KS5yZXBsYWNlQWxsKC9cXCovZywgXCJcIik7XG5cdFx0XHRcdFx0XHRzQ3VycmVudFZhbHVlUGF0aCA9IHNQYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvRmlsdGVyQmFyQ29uZGl0aW9uc1tcblx0XHRcdFx0XHRcdHNGdWxsQ29udGV4dFBhdGhcblx0XHRcdFx0XHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0XHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzVmFsdWU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBzVmFsdWUgIT0gXCJcIjtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmpvaW4oXCIuXCIpXG5cdFx0XHRcdFx0XSA9IG9GaWx0ZXJCYXJDb25kaXRpb25zW3NQYXRoSW5Db250ZXh0XTtcblx0XHRcdFx0XHRkZWxldGUgb0ZpbHRlckJhckNvbmRpdGlvbnNbc1BhdGhdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c1dpbm5lclZhbHVlUGF0aCA9IHNNYWluRW50aXR5VmFsdWVQYXRoIHx8IHNDdXJyZW50VmFsdWVQYXRoO1xuXHRcdFx0XHRvRmlsdGVyQmFyQ29uZGl0aW9uc1tzRGlzdGluY3RLZXldID0gb0ZpbHRlckJhckNvbmRpdGlvbnNbc1dpbm5lclZhbHVlUGF0aF07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBubyBjb25mbGljdCwgYWRkIGRpc3RpbmN0IGtleSB3aXRob3V0IGFkZGluZyBwYXRoc1xuXHRcdFx0XHRzUGF0aCA9IGFDb25mbGljdGluZ1BhdGhzWzBdO1xuXHRcdFx0XHRzRnVsbENvbnRleHRQYXRoID1cblx0XHRcdFx0XHRzUGF0aCA9PT0gc1Jvb3RQYXRoID8gYCR7c1Jvb3RQYXRofS8ke3NEaXN0aW5jdEtleX1gIDogKGAke3NSb290UGF0aH0vJHtzUGF0aH1gIGFzIGFueSkucmVwbGFjZUFsbChcIipcIiwgXCJcIik7XG5cdFx0XHRcdG9GaWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0W3NEaXN0aW5jdEtleV0gPSBzRnVsbENvbnRleHRQYXRoXG5cdFx0XHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKHNWYWx1ZTogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc1ZhbHVlICE9IFwiXCI7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuam9pbihcIi5cIik7XG5cdFx0XHRcdGlmIChhUGFyYW1ldGVycyAmJiBhUGFyYW1ldGVycy5pbmNsdWRlcyhzRGlzdGluY3RLZXkpKSB7XG5cdFx0XHRcdFx0b0ZpbHRlckJhckNvbmRpdGlvbnNbYCRQYXJhbWV0ZXIuJHtzRGlzdGluY3RLZXl9YF0gPSBvRmlsdGVyQmFyQ29uZGl0aW9uc1tzRGlzdGluY3RLZXldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGZpbHRlckNvbmRpdGlvbnM6IG9GaWx0ZXJCYXJDb25kaXRpb25zLFxuXHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1dpdGhvdXRDb25mbGljdDogb0ZpbHRlckNvbmRpdGlvbnNXaXRob3V0Q29uZmxpY3Rcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBOYXZpZ2F0aW9uIG1vZGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBuYXZpZ2F0aW9uIG1vZGVcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRnZXROYXZpZ2F0aW9uTW9kZSgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdC8qKlxuXHQgKiBBbGxvd3MgZm9yIG5hdmlnYXRpb24gdG8gYSBnaXZlbiBpbnRlbnQgKFNlbWFudGljT2JqZWN0LUFjdGlvbikgd2l0aCB0aGUgcHJvdmlkZWQgY29udGV4dCwgdXNpbmcgYSBkaWFsb2cgdGhhdCBzaG93cyB0aGUgY29udGV4dHMgd2hpY2ggY2Fubm90IGJlIHBhc3NlZFxuXHQgKiBJZiBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBpcyBwcm92aWRlZCwgdGhpcyBzZXR0aW5nIGlzIGFsc28gYXBwbGllZCB0byB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgYWZ0ZXIgYWRhcHRhdGlvbiBieSBhIGNvbnN1bWVyLlxuXHQgKiBUaGlzIHNldHRpbmcgYWxzbyByZW1vdmVzIGFueSB0ZWNobmljYWwgcGFyYW1ldGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBhbiBpbnBsYWNlIG9yIGV4cGxhY2UgbmF2aWdhdGlvbiBzaG91bGQgdGFrZSBwbGFjZS5cblx0ICpcblx0ICogQHBhcmFtIHNTZW1hbnRpY09iamVjdCBTZW1hbnRpYyBvYmplY3QgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdCAqIEBwYXJhbSBzQWN0aW9uICBBY3Rpb24gZm9yIHRoZSB0YXJnZXQgYXBwXG5cdCAqIEBwYXJhbSBbbU5hdmlnYXRpb25QYXJhbWV0ZXJzXSBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byB0aGUgZXh0ZXJuYWwgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW21OYXZpZ2F0aW9uUGFyYW1ldGVycy5sYWJlbF1cblx0ICogQHBhcmFtIFttTmF2aWdhdGlvblBhcmFtZXRlcnMubmF2aWdhdGlvbkNvbnRleHRzXSBTaW5nbGUgaW5zdGFuY2Ugb3IgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0sIG9yIGFsdGVybmF0aXZlbHkgYW4gb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMsIHRvIGJlIHBhc3NlZCB0byB0aGUgaW50ZW50LlxuXHQgKiBAcGFyYW0gW21OYXZpZ2F0aW9uUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dHNdIFNpbmdsZSBpbnN0YW5jZSBvciBtdWx0aXBsZSBpbnN0YW5jZXMgb2Yge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSwgb3IgYWx0ZXJuYXRpdmVseSBhbiBvYmplY3Qgb3IgYXJyYXkgb2Ygb2JqZWN0cywgdG8gYmUgcGFzc2VkIHRvIHRoZSBpbnRlbnQgYW5kIGZvciB3aGljaCB0aGUgSUJOIGJ1dHRvbiBpcyBlbmFibGVkXG5cdCAqIEBwYXJhbSBbbU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0c10gU2luZ2xlIGluc3RhbmNlIG9yIG11bHRpcGxlIGluc3RhbmNlcyBvZiB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9LCBvciBhbHRlcm5hdGl2ZWx5IGFuIG9iamVjdCBvciBhcnJheSBvZiBvYmplY3RzLCB3aGljaCBjYW5ub3QgYmUgcGFzc2VkIHRvIHRoZSBpbnRlbnQuXG5cdCAqXHRcdCAgaWYgYW4gYXJyYXkgb2YgY29udGV4dHMgaXMgcGFzc2VkIHRoZSBjb250ZXh0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBtZXRhIHBhdGggYW5kIGFjY29yZGluZ2x5IHJlbW92ZSB0aGUgc2Vuc2l0aXZlIGRhdGFcblx0ICpcdFx0ICBJZiBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHBhc3NlZCwgdGhlIGZvbGxvd2luZyBmb3JtYXQgaXMgZXhwZWN0ZWQ6XG5cdCAqXHRcdCAge1xuXHQgKlx0XHRcdGRhdGE6IHtcblx0ICpcdCBcdFx0XHRQcm9kdWN0SUQ6IDc2MzQsXG5cdCAqXHRcdFx0XHROYW1lOiBcIkxhcHRvcFwiXG5cdCAqXHRcdFx0IH0sXG5cdCAqXHRcdFx0IG1ldGFQYXRoOiBcIi9TYWxlc09yZGVyTWFuYWdlXCJcblx0ICogICAgICAgIH1cblx0ICpcdFx0VGhlIG1ldGFQYXRoIGlzIHVzZWQgdG8gcmVtb3ZlIGFueSBzZW5zaXRpdmUgZGF0YS5cblx0ICogQHBhcmFtIFttTmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nXSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgU2VtYW50aWNPYmplY3RNYXBwaW5nIG9yIFNlbWFudGljT2JqZWN0TWFwcGluZyB0aGF0IGFwcGxpZXMgdG8gdGhpcyBuYXZpZ2F0aW9uXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0bmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nKFxuXHRcdHNTZW1hbnRpY09iamVjdDogc3RyaW5nLFxuXHRcdHNBY3Rpb246IHN0cmluZyxcblx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnM/OiB7XG5cdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM/OiBvYmplY3QgfCBhbnlbXTtcblx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IG9iamVjdCB8IGFueVtdO1xuXHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogYW55O1xuXHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc/OiBzdHJpbmcgfCBvYmplY3Q7XG5cdFx0fVxuXHQpIHtcblx0XHRpZiAobU5hdmlnYXRpb25QYXJhbWV0ZXJzPy5ub3RBcHBsaWNhYmxlQ29udGV4dHMgJiYgbU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0cz8ubGVuZ3RoID49IDEpIHtcblx0XHRcdGxldCBvQXBwbGljYWJsZUNvbnRleHREaWFsb2c6IERpYWxvZztcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0ge1xuXHRcdFx0XHRvbkNsb3NlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Ly8gVXNlciBjYW5jZWxzIGFjdGlvblxuXHRcdFx0XHRcdG9BcHBsaWNhYmxlQ29udGV4dERpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbkNvbnRpbnVlOiAoKSA9PiB7XG5cdFx0XHRcdFx0Ly8gVXNlcnMgY29udGludWVzIHRoZSBhY3Rpb24gd2l0aCB0aGUgYm91bmQgY29udGV4dHNcblx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMubmF2aWdhdGlvbkNvbnRleHRzID0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzLmFwcGxpY2FibGVDb250ZXh0cztcblx0XHRcdFx0XHRvQXBwbGljYWJsZUNvbnRleHREaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHR0aGlzLm5hdmlnYXRlKHNTZW1hbnRpY09iamVjdCwgc0FjdGlvbiwgbU5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGZuT3BlbkFuZEZpbGxEaWFsb2cgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGxldCBvRGlhbG9nQ29udGVudDtcblx0XHRcdFx0Y29uc3Qgbk5vdEFwcGxpY2FibGUgPSBtTmF2aWdhdGlvblBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRzLmxlbmd0aCxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUl0ZW1zID0gW107XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdG9EaWFsb2dDb250ZW50ID0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0c1tpXS5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUl0ZW1zLnB1c2gob0RpYWxvZ0NvbnRlbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG9Ob3RBcHBsaWNhYmxlSXRlbXNNb2RlbCA9IG5ldyBKU09OTW9kZWwoYU5vdEFwcGxpY2FibGVJdGVtcyk7XG5cdFx0XHRcdGNvbnN0IG9Ub3RhbHMgPSBuZXcgSlNPTk1vZGVsKHsgdG90YWw6IG5Ob3RBcHBsaWNhYmxlLCBsYWJlbDogbU5hdmlnYXRpb25QYXJhbWV0ZXJzLmxhYmVsIH0pO1xuXHRcdFx0XHRvQXBwbGljYWJsZUNvbnRleHREaWFsb2cuc2V0TW9kZWwob05vdEFwcGxpY2FibGVJdGVtc01vZGVsLCBcIm5vdEFwcGxpY2FibGVcIik7XG5cdFx0XHRcdG9BcHBsaWNhYmxlQ29udGV4dERpYWxvZy5zZXRNb2RlbChvVG90YWxzLCBcInRvdGFsc1wiKTtcblx0XHRcdFx0b0FwcGxpY2FibGVDb250ZXh0RGlhbG9nLm9wZW4oKTtcblx0XHRcdH07XG5cdFx0XHQvLyBTaG93IHRoZSBjb250ZXh0cyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSBhbmQgd2lsbCBub3QgdGhlcmVmb3JlIGJlIHByb2Nlc3NlZFxuXHRcdFx0Y29uc3Qgc0ZyYWdtZW50TmFtZSA9IFwic2FwLmZlLmNvcmUuY29udHJvbHMuQWN0aW9uUGFydGlhbFwiO1xuXHRcdFx0Y29uc3Qgb0RpYWxvZ0ZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIik7XG5cdFx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLl9vVmlldy5nZXRNb2RlbCgpO1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRcdGNvbnN0IHNDYW5vbmljYWxQYXRoID0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0c1swXS5nZXRDYW5vbmljYWxQYXRoKCk7XG5cdFx0XHRjb25zdCBzRW50aXR5U2V0ID0gYCR7c0Nhbm9uaWNhbFBhdGguc3Vic3RyKDAsIHNDYW5vbmljYWxQYXRoLmluZGV4T2YoXCIoXCIpKX0vYDtcblx0XHRcdFByb21pc2UucmVzb2x2ZShcblx0XHRcdFx0WE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdFx0b0RpYWxvZ0ZyYWdtZW50LFxuXHRcdFx0XHRcdHsgbmFtZTogc0ZyYWdtZW50TmFtZSB9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0XHRlbnRpdHlUeXBlOiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlTZXQpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdGVudGl0eVR5cGU6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KVxuXHRcdFx0KVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0ZyYWdtZW50OiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7IGRlZmluaXRpb246IG9GcmFnbWVudCwgY29udHJvbGxlcjogb0NvbnRyb2xsZXIgfSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKChvUG9wb3ZlcjogYW55KSA9PiB7XG5cdFx0XHRcdFx0b0FwcGxpY2FibGVDb250ZXh0RGlhbG9nID0gb1BvcG92ZXI7XG5cdFx0XHRcdFx0dGhpcy5nZXRWaWV3KCkuYWRkRGVwZW5kZW50KG9Qb3BvdmVyKTtcblx0XHRcdFx0XHRmbk9wZW5BbmRGaWxsRGlhbG9nKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3JcIik7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5hdmlnYXRlKHNTZW1hbnRpY09iamVjdCwgc0FjdGlvbiwgbU5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9XG5cdH1cblx0X3JlbW92ZVRlY2huaWNhbFBhcmFtZXRlcnMob1NlbGVjdGlvblZhcmlhbnQ6IGFueSkge1xuXHRcdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihcIkBvZGF0YS5jb250ZXh0XCIpO1xuXHRcdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihcIkBvZGF0YS5tZXRhZGF0YUV0YWdcIik7XG5cdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKFwiU0FQX19NZXNzYWdlc1wiKTtcblx0fVxuXHQvKipcblx0ICogR2V0IHRhcmdldGVkIEVudGl0eSBzZXQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEVudGl0eSBzZXQgbmFtZVxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRnZXRFbnRpdHlTZXQoKSB7XG5cdFx0cmV0dXJuICh0aGlzLl9vVmlldy5nZXRWaWV3RGF0YSgpIGFzIGFueSkuZW50aXR5U2V0O1xuXHR9XG5cdC8qKlxuXHQgKiBSZW1vdmVzIHNlbnNpdGl2ZSBkYXRhIGZyb20gdGhlIHNlbWFudGljIGF0dHJpYnV0ZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGVudGl0eVNldC5cblx0ICpcblx0ICogQHBhcmFtIG9BdHRyaWJ1dGVzIENvbnRleHQgZGF0YVxuXHQgKiBAcGFyYW0gc01ldGFQYXRoIE1ldGEgcGF0aCB0byByZWFjaCB0aGUgZW50aXR5U2V0IGluIHRoZSBNZXRhTW9kZWxcblx0ICogQHJldHVybnMgQXJyYXkgb2Ygc2VtYW50aWMgQXR0cmlidXRlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Ly8gVE8tRE8gYWRkIHVuaXQgdGVzdHMgZm9yIHRoaXMgZnVuY3Rpb24gaW4gdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHF1bml0LlxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cmVtb3ZlU2Vuc2l0aXZlRGF0YShvQXR0cmlidXRlczogYW55LCBzTWV0YVBhdGg6IHN0cmluZykge1xuXHRcdGlmIChvQXR0cmlidXRlcykge1xuXHRcdFx0Y29uc3QgeyB0cmFuc0FnZ3JlZ2F0aW9ucywgY3VzdG9tQWdncmVnYXRlcyB9ID0gdGhpcy5fZ2V0QWdncmVnYXRlcyhcblx0XHRcdFx0c01ldGFQYXRoLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob0F0dHJpYnV0ZXMpO1xuXHRcdFx0aWYgKGFQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZXNbXCJAb2RhdGEuY29udGV4dFwiXTtcblx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVzW1wiQG9kYXRhLm1ldGFkYXRhRXRhZ1wiXTtcblx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVzW1wiU0FQX19NZXNzYWdlc1wiXTtcblx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhUHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdGlmIChvQXR0cmlidXRlc1thUHJvcGVydGllc1tqXV0gJiYgdHlwZW9mIG9BdHRyaWJ1dGVzW2FQcm9wZXJ0aWVzW2pdXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVTZW5zaXRpdmVEYXRhKG9BdHRyaWJ1dGVzW2FQcm9wZXJ0aWVzW2pdXSwgYCR7c01ldGFQYXRofS8ke2FQcm9wZXJ0aWVzW2pdfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBzUHJvcCA9IGFQcm9wZXJ0aWVzW2pdO1xuXHRcdFx0XHRcdGlmIChzUHJvcC5pbmRleE9mKFwiQG9kYXRhLnR5cGVcIikgPiAtMSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVzW2FQcm9wZXJ0aWVzW2pdXTtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLl9kZWxldGVBZ2dyZWdhdGVzKFsuLi50cmFuc0FnZ3JlZ2F0aW9ucywgLi4uY3VzdG9tQWdncmVnYXRlc10sIGFQcm9wZXJ0aWVzW2pdLCBvQXR0cmlidXRlcyk7XG5cdFx0XHRcdFx0Y29uc3QgYVByb3BlcnR5QW5ub3RhdGlvbnMgPSB0aGlzLl9nZXRQcm9wZXJ0eUFubm90YXRpb25zKHNQcm9wLCBzTWV0YVBhdGgsIG9BdHRyaWJ1dGVzLCB0aGlzLl9vTWV0YU1vZGVsKTtcblx0XHRcdFx0XHRpZiAoYVByb3BlcnR5QW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiXSB8fFxuXHRcdFx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9uc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkV4Y2x1ZGVGcm9tTmF2aWdhdGlvbkNvbnRleHRcIl0gfHxcblx0XHRcdFx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuTWVhc3VyZVwiXVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tzUHJvcF07XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFQcm9wZXJ0eUFubm90YXRpb25zW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFwiXSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvRmllbGRDb250cm9sID0gYVByb3BlcnR5QW5ub3RhdGlvbnNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdO1xuXHRcdFx0XHRcdFx0XHRpZiAob0ZpZWxkQ29udHJvbFtcIiRFbnVtTWVtYmVyXCJdICYmIG9GaWVsZENvbnRyb2xbXCIkRW51bU1lbWJlclwiXS5zcGxpdChcIi9cIilbMV0gPT09IFwiSW5hcHBsaWNhYmxlXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZXNbc1Byb3BdO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRcdG9GaWVsZENvbnRyb2xbXCIkUGF0aFwiXSAmJlxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2lzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZShvRmllbGRDb250cm9sW1wiJFBhdGhcIl0sIG9BdHRyaWJ1dGVzKVxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZXNbc1Byb3BdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQXR0cmlidXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIGF0dHJpYnV0ZSBmcm9tIG5hdmlnYXRpb24gZGF0YSBpZiBpdCBpcyBhIG1lYXN1cmUuXG5cdCAqXG5cdCAqIEBwYXJhbSBhZ2dyZWdhdGVzIEFycmF5IG9mIEFnZ3JlZ2F0ZXNcblx0ICogQHBhcmFtIHNQcm9wIEF0dHJpYnV0ZSBuYW1lXG5cdCAqIEBwYXJhbSBvQXR0cmlidXRlcyBTZW1hbnRpY0F0dHJpYnV0ZXNcblx0ICovXG5cdF9kZWxldGVBZ2dyZWdhdGVzKGFnZ3JlZ2F0ZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLCBzUHJvcDogc3RyaW5nLCBvQXR0cmlidXRlczogYW55KSB7XG5cdFx0aWYgKGFnZ3JlZ2F0ZXMgJiYgYWdncmVnYXRlcy5pbmRleE9mKHNQcm9wKSA+IC0xKSB7XG5cdFx0XHRkZWxldGUgb0F0dHJpYnV0ZXNbc1Byb3BdO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBhbm5vdGF0aW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHNQcm9wXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGhcblx0ICogQHBhcmFtIG9BdHRyaWJ1dGVzXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIC0gVGhlIHByb3BlcnR5IGFubm90YXRpb25zXG5cdCAqL1xuXHRfZ2V0UHJvcGVydHlBbm5vdGF0aW9ucyhzUHJvcDogc3RyaW5nLCBzTWV0YVBhdGg6IHN0cmluZywgb0F0dHJpYnV0ZXM6IGFueSwgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0XHRpZiAob0F0dHJpYnV0ZXNbc1Byb3BdICYmIHNNZXRhUGF0aCAmJiAhc01ldGFQYXRoLmluY2x1ZGVzKFwidW5kZWZpbmVkXCIpKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c01ldGFQYXRofS8ke3NQcm9wfWApIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb0Z1bGxDb250ZXh0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvQ29udGV4dCk7XG5cdFx0XHRyZXR1cm4gb0Z1bGxDb250ZXh0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5fYW5ub3RhdGlvbnM7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGFnZ3JlZ2F0ZXMgcGFydCBvZiB0aGUgRW50aXR5U2V0IG9yIEVudGl0eVR5cGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGhcblx0ICogQHBhcmFtIG9WaWV3XG5cdCAqIEBwYXJhbSBvRGlhZ25vc3RpY3Ncblx0ICogQHJldHVybnMgLSBUaGUgYWdncmVnYXRlc1xuXHQgKi9cblx0X2dldEFnZ3JlZ2F0ZXMoc01ldGFQYXRoOiBzdHJpbmcsIG9WaWV3OiBWaWV3LCBvRGlhZ25vc3RpY3M6IERpYWdub3N0aWNzKSB7XG5cdFx0Y29uc3QgY29udmVydGVyQ29udGV4dCA9IHRoaXMuX2dldENvbnZlcnRlckNvbnRleHQoc01ldGFQYXRoLCBvVmlldywgb0RpYWdub3N0aWNzKTtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0Y29uc3QgaXNBbmFseXRpY3NTdXBwb3J0ZWQgPSBhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpO1xuXHRcdGxldCB0cmFuc0FnZ3JlZ2F0aW9ucyA9IFtdLFxuXHRcdFx0Y3VzdG9tQWdncmVnYXRlcyA9IFtdO1xuXHRcdGlmIChpc0FuYWx5dGljc1N1cHBvcnRlZCkge1xuXHRcdFx0dHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRUcmFuc0FnZ3JlZ2F0aW9ucygpO1xuXHRcdFx0aWYgKHRyYW5zQWdncmVnYXRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHR0cmFuc0FnZ3JlZ2F0aW9ucyA9IHRyYW5zQWdncmVnYXRpb25zLm1hcCgodHJhbnNBZ2c6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0cmFuc0FnZy5OYW1lIHx8IHRyYW5zQWdnLlZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRcdFx0aWYgKGN1c3RvbUFnZ3JlZ2F0ZXMubGVuZ3RoKSB7XG5cdFx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZXMgPSBjdXN0b21BZ2dyZWdhdGVzLm1hcCgoY3VzdG9tQWdncmVnYXRlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gY3VzdG9tQWdncmVnYXRlLnF1YWxpZmllcjtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IHRyYW5zQWdncmVnYXRpb25zLCBjdXN0b21BZ2dyZWdhdGVzIH07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBjb252ZXJ0ZXJDb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gc01ldGFQYXRoXG5cdCAqIEBwYXJhbSBvVmlld1xuXHQgKiBAcGFyYW0gb0RpYWdub3N0aWNzXG5cdCAqIEByZXR1cm5zIC0gQ29udmVydGVyQ29udGV4dFxuXHQgKi9cblx0X2dldENvbnZlcnRlckNvbnRleHQoc01ldGFQYXRoOiBzdHJpbmcsIG9WaWV3OiBWaWV3LCBvRGlhZ25vc3RpY3M6IERpYWdub3N0aWNzKSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhOiBhbnkgPSBvVmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdGxldCBzRW50aXR5U2V0ID0gb1ZpZXdEYXRhLmVudGl0eVNldDtcblx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvVmlld0RhdGEuY29udGV4dFBhdGg7XG5cdFx0aWYgKHNDb250ZXh0UGF0aCAmJiAoIXNFbnRpdHlTZXQgfHwgc0VudGl0eVNldC5pbmNsdWRlcyhcIi9cIikpKSB7XG5cdFx0XHRzRW50aXR5U2V0ID0gb1ZpZXdEYXRhPy5mdWxsQ29udGV4dFBhdGguc3BsaXQoXCIvXCIpWzFdO1xuXHRcdH1cblx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0Q29udmVydGVyQ29udGV4dEZvclBhdGgoXG5cdFx0XHRzTWV0YVBhdGgsXG5cdFx0XHRvVmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c0VudGl0eVNldCxcblx0XHRcdG9EaWFnbm9zdGljc1xuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgcGF0aC1iYXNlZCBGaWVsZENvbnRyb2wgZXZhbHVhdGVzIHRvIGluYXBwbGljYWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHNGaWVsZENvbnRyb2xQYXRoIEZpZWxkIGNvbnRyb2wgcGF0aFxuXHQgKiBAcGFyYW0gb0F0dHJpYnV0ZSBTZW1hbnRpY0F0dHJpYnV0ZXNcblx0ICogQHJldHVybnMgYHRydWVgIGlmIGluYXBwbGljYWJsZVxuXHQgKi9cblx0X2lzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZShzRmllbGRDb250cm9sUGF0aDogc3RyaW5nLCBvQXR0cmlidXRlOiBhbnkpIHtcblx0XHRsZXQgYkluYXBwbGljYWJsZSA9IGZhbHNlO1xuXHRcdGNvbnN0IGFQYXJ0cyA9IHNGaWVsZENvbnRyb2xQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHQvLyBzZW5zaXRpdmUgZGF0YSBpcyByZW1vdmVkIG9ubHkgaWYgdGhlIHBhdGggaGFzIGFscmVhZHkgYmVlbiByZXNvbHZlZC5cblx0XHRpZiAoYVBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGJJbmFwcGxpY2FibGUgPVxuXHRcdFx0XHRvQXR0cmlidXRlW2FQYXJ0c1swXV0gJiYgb0F0dHJpYnV0ZVthUGFydHNbMF1dLmhhc093blByb3BlcnR5KGFQYXJ0c1sxXSkgJiYgb0F0dHJpYnV0ZVthUGFydHNbMF1dW2FQYXJ0c1sxXV0gPT09IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJJbmFwcGxpY2FibGUgPSBvQXR0cmlidXRlW3NGaWVsZENvbnRyb2xQYXRoXSA9PT0gMDtcblx0XHR9XG5cdFx0cmV0dXJuIGJJbmFwcGxpY2FibGU7XG5cdH1cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZXBsYWNlIExvY2FsIFByb3BlcnRpZXMgd2l0aCBTZW1hbnRpYyBPYmplY3QgbWFwcGluZ3MuXG5cdCAqXG5cdCAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudCBTZWxlY3Rpb25WYXJpYW50IGNvbnNpc3Rpbmcgb2YgZmlsdGVyYmFyLCBUYWJsZSBhbmQgUGFnZSBDb250ZXh0XG5cdCAqIEBwYXJhbSB2TWFwcGluZ3MgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Ygc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdcblx0ICogQHJldHVybnMgLSBNb2RpZmllZCBTZWxlY3Rpb25WYXJpYW50IHdpdGggTG9jYWxQcm9wZXJ0eSByZXBsYWNlZCB3aXRoIFNlbWFudGljT2JqZWN0UHJvcGVydGllcy5cblx0ICovXG5cdF9hcHBseVNlbWFudGljT2JqZWN0TWFwcGluZ3Mob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHZNYXBwaW5nczogb2JqZWN0IHwgc3RyaW5nKSB7XG5cdFx0Y29uc3Qgb01hcHBpbmdzID0gdHlwZW9mIHZNYXBwaW5ncyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uodk1hcHBpbmdzKSA6IHZNYXBwaW5ncztcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG9NYXBwaW5ncy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPVxuXHRcdFx0XHQob01hcHBpbmdzW2ldW1wiTG9jYWxQcm9wZXJ0eVwiXSAmJiBvTWFwcGluZ3NbaV1bXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXSkgfHxcblx0XHRcdFx0KG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXSAmJlxuXHRcdFx0XHRcdG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXVtcIiRQYXRoXCJdKTtcblx0XHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdFByb3BlcnR5ID1cblx0XHRcdFx0b01hcHBpbmdzW2ldW1wiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXSB8fCBvTWFwcGluZ3NbaV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0XHRjb25zdCBvU2VsZWN0T3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRcdGlmIChvU2VsZWN0T3B0aW9uKSB7XG5cdFx0XHRcdC8vQ3JlYXRlIGEgbmV3IFNlbGVjdE9wdGlvbiB3aXRoIHNTZW1hbnRpY09iamVjdFByb3BlcnR5IGFzIHRoZSBwcm9wZXJ0eSBOYW1lIGFuZCByZW1vdmUgdGhlIG9sZGVyIG9uZVxuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oc0xvY2FsUHJvcGVydHkpO1xuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5tYXNzQWRkU2VsZWN0T3B0aW9uKHNTZW1hbnRpY09iamVjdFByb3BlcnR5LCBvU2VsZWN0T3B0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9TZWxlY3Rpb25WYXJpYW50O1xuXHR9XG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYW4gT3V0Ym91bmQgcHJvdmlkZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHNPdXRib3VuZCBJZGVudGlmaWVyIHRvIGxvY2F0aW9uIHRoZSBvdXRib3VuZCBpbiB0aGUgbWFuaWZlc3Rcblx0ICogQHBhcmFtIG1OYXZpZ2F0aW9uUGFyYW1ldGVycyBPcHRpb25hbCBtYXAgY29udGFpbmluZyBrZXkvdmFsdWUgcGFpcnMgdG8gYmUgcGFzc2VkIHRvIHRoZSBpbnRlbnRcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkludGVudEJhc2VkTmF2aWdhdGlvbiNuYXZpZ2F0ZU91dGJvdW5kXG5cdCAqIEBzaW5jZSAxLjg2LjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRuYXZpZ2F0ZU91dGJvdW5kKHNPdXRib3VuZDogc3RyaW5nLCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGxldCBhTmF2UGFyYW1zOiBhbnlbXSB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvTWFuaWZlc3RFbnRyeSA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKSxcblx0XHRcdG9PdXRib3VuZCA9IG9NYW5pZmVzdEVudHJ5LmNyb3NzTmF2aWdhdGlvbj8ub3V0Ym91bmRzPy5bc091dGJvdW5kXTtcblx0XHRpZiAoIW9PdXRib3VuZCkge1xuXHRcdFx0TG9nLmVycm9yKFwiT3V0Ym91bmQgaXMgbm90IGRlZmluZWQgaW4gbWFuaWZlc3QhIVwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0ID0gb091dGJvdW5kLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0c0FjdGlvbiA9IG9PdXRib3VuZC5hY3Rpb24sXG5cdFx0XHRvdXRib3VuZFBhcmFtcyA9IG9PdXRib3VuZC5wYXJhbWV0ZXJzICYmIHRoaXMuZ2V0T3V0Ym91bmRQYXJhbXMob091dGJvdW5kLnBhcmFtZXRlcnMpO1xuXG5cdFx0aWYgKG1OYXZpZ2F0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0YU5hdlBhcmFtcyA9IFtdO1xuXHRcdFx0T2JqZWN0LmtleXMobU5hdmlnYXRpb25QYXJhbWV0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0XHRsZXQgb1BhcmFtczogYW55O1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShtTmF2aWdhdGlvblBhcmFtZXRlcnNba2V5XSkpIHtcblx0XHRcdFx0XHRjb25zdCBhVmFsdWVzID0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzW2tleV07XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRvUGFyYW1zID0ge307XG5cdFx0XHRcdFx0XHRvUGFyYW1zW2tleV0gPSBhVmFsdWVzW2ldO1xuXHRcdFx0XHRcdFx0YU5hdlBhcmFtcz8ucHVzaChvUGFyYW1zKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b1BhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdG9QYXJhbXNba2V5XSA9IG1OYXZpZ2F0aW9uUGFyYW1ldGVyc1trZXldO1xuXHRcdFx0XHRcdGFOYXZQYXJhbXM/LnB1c2gob1BhcmFtcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoYU5hdlBhcmFtcyB8fCBvdXRib3VuZFBhcmFtcykge1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IHtcblx0XHRcdFx0XHRkYXRhOiBhTmF2UGFyYW1zIHx8IG91dGJvdW5kUGFyYW1zXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdHRoaXMuYmFzZS5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKHNTZW1hbnRpY09iamVjdCwgc0FjdGlvbiwgbU5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gYXBwbHkgb3V0Ym91bmQgcGFyYW1ldGVycyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHBhcmFtIG9TZWxlY3Rpb25WYXJpYW50IFNlbGVjdGlvblZhcmlhbnQgY29uc2lzdGluZyBvZiBhIGZpbHRlciBiYXIsIGEgdGFibGUsIGFuZCBhIHBhZ2UgY29udGV4dFxuXHQgKiBAcGFyYW0gdk91dGJvdW5kUGFyYW1zIE91dGJvdW5kIFByb3BlcnRpZXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3Rcblx0ICogQHJldHVybnMgLSBUaGUgbW9kaWZpZWQgU2VsZWN0aW9uVmFyaWFudCB3aXRoIG91dGJvdW5kIHBhcmFtZXRlcnMuXG5cdCAqL1xuXHRfYXBwbHlPdXRib3VuZFBhcmFtcyhvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCwgdk91dGJvdW5kUGFyYW1zOiBhbnkpIHtcblx0XHRjb25zdCBhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKHZPdXRib3VuZFBhcmFtcyk7XG5cdFx0Y29uc3QgYVNlbGVjdFByb3BlcnRpZXMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpO1xuXHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRpZiAoIWFTZWxlY3RQcm9wZXJ0aWVzLmluY2x1ZGVzKGtleSkpIHtcblx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQuYWRkU2VsZWN0T3B0aW9uKGtleSwgXCJJXCIsIFwiRVFcIiwgdk91dGJvdW5kUGFyYW1zW2tleV0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBvU2VsZWN0aW9uVmFyaWFudDtcblx0fVxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgb3V0Ym91bmQgcGFyYW1ldGVycyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBvT3V0Ym91bmRQYXJhbXMgUGFyYW1ldGVycyBkZWZpbmVkIGluIHRoZSBvdXRib3VuZHMuIE9ubHkgXCJwbGFpblwiIGlzIHN1cHBvcnRlZFxuXHQgKiBAcmV0dXJucyBQYXJhbWV0ZXJzIHdpdGggdGhlIGtleS1WYWx1ZSBwYWlyXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0T3V0Ym91bmRQYXJhbXMob091dGJvdW5kUGFyYW1zOiBhbnkpIHtcblx0XHRjb25zdCBvUGFyYW1zTWFwcGluZzogYW55ID0ge307XG5cdFx0aWYgKG9PdXRib3VuZFBhcmFtcykge1xuXHRcdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvT3V0Ym91bmRQYXJhbXMpIHx8IFtdO1xuXHRcdFx0aWYgKGFQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoa2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0XHRjb25zdCBvTWFwcGluZyA9IG9PdXRib3VuZFBhcmFtc1trZXldO1xuXHRcdFx0XHRcdGlmIChvTWFwcGluZy52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS5mb3JtYXQgPT09IFwicGxhaW5cIikge1xuXHRcdFx0XHRcdFx0aWYgKCFvUGFyYW1zTWFwcGluZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbXNNYXBwaW5nW2tleV0gPSBvTWFwcGluZy52YWx1ZS52YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmFtc01hcHBpbmc7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbnRyb2xsZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0b25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsIG9Db250ZXh0OiBhbnksIHNDcmVhdGVQYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBvT3V0Ym91bmRzID0gKG9Db250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpIGFzIGFueSkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKTtcblx0XHRjb25zdCBvRGlzcGxheU91dGJvdW5kID0gb091dGJvdW5kc1tzT3V0Ym91bmRUYXJnZXRdO1xuXHRcdGxldCBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cdFx0aWYgKG9EaXNwbGF5T3V0Ym91bmQgJiYgb0Rpc3BsYXlPdXRib3VuZC5zZW1hbnRpY09iamVjdCAmJiBvRGlzcGxheU91dGJvdW5kLmFjdGlvbikge1xuXHRcdFx0Y29uc3Qgb1JlZnJlc2hTdHJhdGVnaWVzOiBhbnkgPSB7XG5cdFx0XHRcdGludGVudHM6IHt9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgb0RlZmF1bHRSZWZyZXNoU3RyYXRlZ3k6IGFueSA9IHt9O1xuXHRcdFx0bGV0IHNNZXRhUGF0aDtcblxuXHRcdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRcdGlmIChvQ29udGV4dC5pc0EgJiYgb0NvbnRleHQuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdFx0XHRzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0XHRcdG9Db250ZXh0ID0gW29Db250ZXh0XTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0NvbnRleHRbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9EZWZhdWx0UmVmcmVzaFN0cmF0ZWd5W3NNZXRhUGF0aF0gPSBcInNlbGZcIjtcblx0XHRcdFx0b1JlZnJlc2hTdHJhdGVnaWVzW1wiX2ZlRGVmYXVsdFwiXSA9IG9EZWZhdWx0UmVmcmVzaFN0cmF0ZWd5O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc0NyZWF0ZVBhdGgpIHtcblx0XHRcdFx0Y29uc3Qgc0tleSA9IGAke29EaXNwbGF5T3V0Ym91bmQuc2VtYW50aWNPYmplY3R9LSR7b0Rpc3BsYXlPdXRib3VuZC5hY3Rpb259YDtcblx0XHRcdFx0b1JlZnJlc2hTdHJhdGVnaWVzLmludGVudHNbc0tleV0gPSB7fTtcblx0XHRcdFx0b1JlZnJlc2hTdHJhdGVnaWVzLmludGVudHNbc0tleV1bc0NyZWF0ZVBhdGhdID0gXCJzZWxmXCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0Rpc3BsYXlPdXRib3VuZCAmJiBvRGlzcGxheU91dGJvdW5kLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9EaXNwbGF5T3V0Ym91bmQucGFyYW1ldGVycyAmJiB0aGlzLmdldE91dGJvdW5kUGFyYW1zKG9EaXNwbGF5T3V0Ym91bmQucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9EaXNwbGF5T3V0Ym91bmQuc2VtYW50aWNPYmplY3QsIG9EaXNwbGF5T3V0Ym91bmQuYWN0aW9uLCB7XG5cdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogb0NvbnRleHQsXG5cdFx0XHRcdHJlZnJlc2hTdHJhdGVnaWVzOiBvUmVmcmVzaFN0cmF0ZWdpZXMsXG5cdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyczogYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHR9KTtcblxuXHRcdFx0Ly9UT0RPOiBjaGVjayB3aHkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpcyByZXF1aXJlZFxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYG91dGJvdW5kIHRhcmdldCAke3NPdXRib3VuZFRhcmdldH0gbm90IGZvdW5kIGluIGNyb3NzIG5hdmlnYXRpb24gZGVmaW5pdGlvbiBvZiBtYW5pZmVzdGApO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0VBa0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQSxJQVNNQSw2QkFBNkIsV0FEbENDLGNBQWMsQ0FBQyxrRUFBa0UsQ0FBQyxVQU9qRkMsY0FBYyxFQUFFLFVBa0NoQkMsZUFBZSxFQUFFLFVBQ2pCQyxjQUFjLEVBQUUsVUErSmhCRCxlQUFlLEVBQUUsVUFDakJDLGNBQWMsRUFBRSxVQW1IaEJELGVBQWUsRUFBRSxVQUNqQkMsY0FBYyxFQUFFLFVBMEZoQkQsZUFBZSxFQUFF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