@sapui5/sap.fe.core 1.97.0 → 1.100.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 (306) hide show
  1. package/package.json +7 -4
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +309 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +315 -0
  5. package/src/sap/fe/core/AppComponent.js +389 -397
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +198 -181
  8. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  9. package/src/sap/fe/core/BaseController.js +83 -58
  10. package/src/sap/fe/core/BaseController.ts +68 -0
  11. package/src/sap/fe/core/BusyLocker.js +105 -121
  12. package/src/sap/fe/core/BusyLocker.ts +98 -0
  13. package/src/sap/fe/core/CommonUtils.js +2164 -2379
  14. package/src/sap/fe/core/CommonUtils.ts +2177 -0
  15. package/src/sap/fe/core/ExtensionAPI.js +279 -266
  16. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  17. package/src/sap/fe/core/PageController.js +218 -125
  18. package/src/sap/fe/core/PageController.ts +129 -0
  19. package/src/sap/fe/core/RouterProxy.js +924 -807
  20. package/src/sap/fe/core/RouterProxy.ts +840 -0
  21. package/src/sap/fe/core/Synchronization.js +41 -35
  22. package/src/sap/fe/core/Synchronization.ts +29 -0
  23. package/src/sap/fe/core/TemplateComponent.js +173 -155
  24. package/src/sap/fe/core/TemplateComponent.ts +173 -0
  25. package/src/sap/fe/core/TemplateModel.js +79 -54
  26. package/src/sap/fe/core/TemplateModel.ts +63 -0
  27. package/src/sap/fe/core/TransactionHelper.js +1560 -1579
  28. package/src/sap/fe/core/TransactionHelper.ts +1717 -0
  29. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  30. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  31. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  32. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  33. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  34. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  35. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  36. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  37. package/src/sap/fe/core/actions/draft.js +521 -581
  38. package/src/sap/fe/core/actions/draft.ts +566 -0
  39. package/src/sap/fe/core/actions/messageHandling.js +564 -511
  40. package/src/sap/fe/core/actions/messageHandling.ts +552 -0
  41. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  42. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  43. package/src/sap/fe/core/actions/operations.js +1093 -1211
  44. package/src/sap/fe/core/actions/operations.ts +1192 -0
  45. package/src/sap/fe/core/actions/sticky.js +114 -104
  46. package/src/sap/fe/core/actions/sticky.ts +119 -0
  47. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +70 -66
  48. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  49. package/src/sap/fe/core/controllerextensions/EditFlow.js +1594 -1701
  50. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  51. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +80 -54
  52. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  53. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +719 -505
  54. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  55. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +797 -813
  56. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  57. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1005 -973
  58. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  59. package/src/sap/fe/core/controllerextensions/KPIManagement.js +530 -476
  60. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +137 -46
  61. package/src/sap/fe/core/controllerextensions/MassEdit.js +144 -0
  62. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  63. package/src/sap/fe/core/controllerextensions/MessageHandler.js +234 -232
  64. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  65. package/src/sap/fe/core/controllerextensions/PageReady.js +302 -337
  66. package/src/sap/fe/core/controllerextensions/PageReady.ts +23 -17
  67. package/src/sap/fe/core/controllerextensions/Paginator.js +189 -148
  68. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  69. package/src/sap/fe/core/controllerextensions/Placeholder.js +158 -146
  70. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  71. package/src/sap/fe/core/controllerextensions/Routing.js +145 -106
  72. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  73. package/src/sap/fe/core/controllerextensions/RoutingListener.js +8 -6
  74. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  75. package/src/sap/fe/core/controllerextensions/Share.js +220 -244
  76. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  77. package/src/sap/fe/core/controllerextensions/SideEffects.js +593 -634
  78. package/src/sap/fe/core/controllerextensions/SideEffects.ts +29 -27
  79. package/src/sap/fe/core/controllerextensions/ViewState.js +789 -806
  80. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  81. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -3
  82. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  83. package/src/sap/fe/core/controls/CommandExecution.js +68 -66
  84. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  85. package/src/sap/fe/core/controls/ConditionalWrapper.js +91 -75
  86. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  87. package/src/sap/fe/core/controls/CustomQuickViewPage.js +131 -125
  88. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  89. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +105 -110
  90. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  91. package/src/sap/fe/core/controls/FieldWrapper.js +122 -140
  92. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  93. package/src/sap/fe/core/controls/FilterBar.js +163 -159
  94. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +46 -44
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  97. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +38 -42
  98. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
  100. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +127 -116
  101. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  102. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -255
  103. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  104. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +151 -141
  105. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  106. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +336 -322
  107. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  108. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
  110. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  111. package/src/sap/fe/core/converters/ConverterContext.js +348 -367
  112. package/src/sap/fe/core/converters/ConverterContext.ts +33 -19
  113. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  114. package/src/sap/fe/core/converters/ManifestSettings.ts +16 -1
  115. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -354
  116. package/src/sap/fe/core/converters/ManifestWrapper.ts +34 -6
  117. package/src/sap/fe/core/converters/MetaModelConverter.js +72 -9
  118. package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -16
  119. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  120. package/src/sap/fe/core/converters/TemplateConverter.ts +4 -3
  121. package/src/sap/fe/core/converters/annotations/DataField.js +28 -14
  122. package/src/sap/fe/core/converters/annotations/DataField.ts +38 -14
  123. package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
  124. package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
  125. package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
  126. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  127. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  128. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  130. package/src/sap/fe/core/converters/controls/Common/Form.js +21 -11
  131. package/src/sap/fe/core/converters/controls/Common/Form.ts +28 -6
  132. package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
  133. package/src/sap/fe/core/converters/controls/Common/KPI.ts +75 -2
  134. package/src/sap/fe/core/converters/controls/Common/Table.js +507 -408
  135. package/src/sap/fe/core/converters/controls/Common/Table.ts +618 -500
  136. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +592 -0
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +718 -0
  138. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +465 -59
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +462 -72
  140. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  142. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
  143. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
  144. package/src/sap/fe/core/converters/helpers/Aggregation.js +118 -121
  145. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
  146. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  147. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  148. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  149. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  150. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
  151. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
  152. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  153. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  154. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +28 -7
  155. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +23 -6
  156. package/src/sap/fe/core/converters/templates/ListReportConverter.js +20 -7
  157. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -14
  158. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  159. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  160. package/src/sap/fe/core/designtime/AppComponent.designtime.js +93 -90
  161. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  162. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  163. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  164. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  165. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  166. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  167. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  168. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  169. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  170. package/src/sap/fe/core/formatters/TableFormatter.js +91 -29
  171. package/src/sap/fe/core/formatters/TableFormatter.ts +94 -28
  172. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  173. package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
  174. package/src/sap/fe/core/fpm/Component.js +51 -54
  175. package/src/sap/fe/core/fpm/Component.ts +48 -0
  176. package/src/sap/fe/core/helpers/AppStartupHelper.js +373 -0
  177. package/src/sap/fe/core/helpers/AppStartupHelper.ts +417 -0
  178. package/src/sap/fe/core/helpers/BindingExpression.js +489 -442
  179. package/src/sap/fe/core/helpers/BindingExpression.ts +486 -469
  180. package/src/sap/fe/core/helpers/ClassSupport.js +212 -76
  181. package/src/sap/fe/core/helpers/ClassSupport.ts +198 -71
  182. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +64 -59
  183. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +52 -0
  184. package/src/sap/fe/core/helpers/EditState.js +81 -84
  185. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  186. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  187. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  188. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  189. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  190. package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
  191. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
  192. package/src/sap/fe/core/helpers/MassEditHelper.js +604 -0
  193. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  194. package/src/sap/fe/core/helpers/ModelHelper.js +253 -225
  195. package/src/sap/fe/core/helpers/ModelHelper.ts +250 -0
  196. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  197. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  198. package/src/sap/fe/core/helpers/SemanticDateOperators.js +336 -313
  199. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +334 -0
  200. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  201. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  202. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  203. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  204. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  205. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  206. package/src/sap/fe/core/library.js +427 -425
  207. package/src/sap/fe/core/library.support.js +23 -27
  208. package/src/sap/fe/core/library.support.ts +23 -0
  209. package/src/sap/fe/core/library.ts +420 -0
  210. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +64 -0
  211. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +69 -0
  212. package/src/sap/fe/core/messagebundle.properties +78 -13
  213. package/src/sap/fe/core/messagebundle_ar.properties +58 -7
  214. package/src/sap/fe/core/messagebundle_bg.properties +58 -7
  215. package/src/sap/fe/core/messagebundle_ca.properties +58 -7
  216. package/src/sap/fe/core/messagebundle_cs.properties +59 -8
  217. package/src/sap/fe/core/messagebundle_cy.properties +58 -7
  218. package/src/sap/fe/core/messagebundle_da.properties +58 -7
  219. package/src/sap/fe/core/messagebundle_de.properties +58 -7
  220. package/src/sap/fe/core/messagebundle_el.properties +58 -7
  221. package/src/sap/fe/core/messagebundle_en.properties +57 -6
  222. package/src/sap/fe/core/messagebundle_en_GB.properties +57 -6
  223. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +61 -6
  224. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +58 -7
  225. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +58 -7
  226. package/src/sap/fe/core/messagebundle_es.properties +58 -7
  227. package/src/sap/fe/core/messagebundle_es_MX.properties +58 -7
  228. package/src/sap/fe/core/messagebundle_et.properties +58 -7
  229. package/src/sap/fe/core/messagebundle_fi.properties +60 -9
  230. package/src/sap/fe/core/messagebundle_fr.properties +64 -13
  231. package/src/sap/fe/core/messagebundle_fr_CA.properties +59 -8
  232. package/src/sap/fe/core/messagebundle_hi.properties +58 -7
  233. package/src/sap/fe/core/messagebundle_hr.properties +58 -7
  234. package/src/sap/fe/core/messagebundle_hu.properties +59 -8
  235. package/src/sap/fe/core/messagebundle_id.properties +61 -10
  236. package/src/sap/fe/core/messagebundle_it.properties +58 -7
  237. package/src/sap/fe/core/messagebundle_iw.properties +58 -7
  238. package/src/sap/fe/core/messagebundle_ja.properties +58 -7
  239. package/src/sap/fe/core/messagebundle_kk.properties +58 -7
  240. package/src/sap/fe/core/messagebundle_ko.properties +58 -7
  241. package/src/sap/fe/core/messagebundle_lt.properties +58 -7
  242. package/src/sap/fe/core/messagebundle_lv.properties +59 -8
  243. package/src/sap/fe/core/messagebundle_ms.properties +58 -7
  244. package/src/sap/fe/core/messagebundle_nl.properties +58 -7
  245. package/src/sap/fe/core/messagebundle_no.properties +58 -7
  246. package/src/sap/fe/core/messagebundle_pl.properties +58 -7
  247. package/src/sap/fe/core/messagebundle_pt.properties +59 -8
  248. package/src/sap/fe/core/messagebundle_pt_PT.properties +58 -7
  249. package/src/sap/fe/core/messagebundle_ro.properties +58 -7
  250. package/src/sap/fe/core/messagebundle_ru.properties +58 -7
  251. package/src/sap/fe/core/messagebundle_sh.properties +58 -7
  252. package/src/sap/fe/core/messagebundle_sk.properties +58 -7
  253. package/src/sap/fe/core/messagebundle_sl.properties +58 -7
  254. package/src/sap/fe/core/messagebundle_sv.properties +59 -8
  255. package/src/sap/fe/core/messagebundle_th.properties +58 -7
  256. package/src/sap/fe/core/messagebundle_tr.properties +60 -9
  257. package/src/sap/fe/core/messagebundle_uk.properties +58 -7
  258. package/src/sap/fe/core/messagebundle_vi.properties +58 -7
  259. package/src/sap/fe/core/messagebundle_zh_CN.properties +58 -7
  260. package/src/sap/fe/core/messagebundle_zh_TW.properties +58 -7
  261. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  262. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  263. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +231 -202
  264. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  265. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +67 -92
  266. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -6
  267. package/src/sap/fe/core/services/NavigationServiceFactory.js +351 -300
  268. package/src/sap/fe/core/services/NavigationServiceFactory.ts +313 -0
  269. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +114 -81
  270. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +83 -0
  271. package/src/sap/fe/core/services/RoutingServiceFactory.js +927 -1152
  272. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  273. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -707
  274. package/src/sap/fe/core/services/ShellServicesFactory.ts +52 -15
  275. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +569 -637
  276. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +78 -102
  277. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +429 -478
  278. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +460 -0
  279. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  280. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  281. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  282. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  283. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  284. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  285. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  286. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  287. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  288. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  289. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  290. package/src/sap/fe/core/templating/DataModelPathHelper.js +97 -127
  291. package/src/sap/fe/core/templating/DataModelPathHelper.ts +112 -135
  292. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  293. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  294. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  295. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  296. package/src/sap/fe/core/templating/FilterHelper.js +140 -78
  297. package/src/sap/fe/core/templating/FilterHelper.ts +149 -78
  298. package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
  299. package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
  300. package/src/sap/fe/core/templating/UIFormatters.js +76 -135
  301. package/src/sap/fe/core/templating/UIFormatters.ts +76 -99
  302. package/src/sap/fe/core/type/Email.js +1 -1
  303. package/src/sap/fe/core/type/Email.ts +4 -6
  304. package/ui5.yaml +0 -3
  305. package/src/sap/fe/core/controls/filterbar.d.js +0 -8
  306. package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
@@ -56,6 +56,7 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
56
56
  * Retrieve all the IBN actions for the identification annotation.
57
57
  * They must be
58
58
  * - Not statically hidden.
59
+ *
59
60
  * @param {EntityType} entityType The current entitytype
60
61
  * @param {boolean} bDetermining Whether or not the action should be determining
61
62
  * @returns {DataFieldForIntentBasedNavigationTypes[]} An array of datafield for action respecting the bDetermining property.
@@ -97,7 +98,7 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
97
98
  // Set absolute binding path for Singleton references, otherwise the configured annotation path itself.
98
99
  // For e.g. /com.sap.namespace.EntityContainer/Singleton/Property to /Singleton/Property
99
100
  deleteHiddenExpression = annotationExpression(deleteHidden, visitedNavigationPaths, undefined, function (path) {
100
- return singletonPathVisitor(path, converterContext, []);
101
+ return singletonPathVisitor(path, converterContext.getConvertedTypes(), []);
101
102
  }),
102
103
  manifestWrapper = converterContext.getManifestWrapper(),
103
104
  viewLevel = manifestWrapper.getViewLevel(),
@@ -148,7 +149,7 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
148
149
  // Set absolute binding path for Singleton references, otherwise the configured annotation path itself.
149
150
  // For e.g. /com.sap.namespace.EntityContainer/Singleton/Property to /Singleton/Property
150
151
  updateHiddenExpression = annotationExpression(updateHidden, visitedNavigationPaths, undefined, function (path) {
151
- return singletonPathVisitor(path, converterContext, visitedNavigationPaths);
152
+ return singletonPathVisitor(path, converterContext.getConvertedTypes(), visitedNavigationPaths);
152
153
  }),
153
154
  notEditableExpression = not(UI.IsEditable); // If UI.UpdateHidden annotation on entity set or type is either not defined or explicitly set to false,
154
155
  // Edit button is visible in display mode.
@@ -207,6 +208,11 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
207
208
 
208
209
  return true;
209
210
  }
211
+ /**
212
+ * @param converterContext
213
+ * @returns {BaseAction[]}
214
+ */
215
+
210
216
 
211
217
  _exports.getEditButtonEnabled = getEditButtonEnabled;
212
218
 
@@ -221,7 +227,11 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
221
227
  oEntityDeleteRestrictions = entitySet && ((_entitySet$annotation11 = entitySet.annotations) === null || _entitySet$annotation11 === void 0 ? void 0 : (_entitySet$annotation12 = _entitySet$annotation11.Capabilities) === null || _entitySet$annotation12 === void 0 ? void 0 : _entitySet$annotation12.DeleteRestrictions),
222
228
  bUpdateHidden = entitySet && ((_entitySet$annotation13 = entitySet.annotations.UI) === null || _entitySet$annotation13 === void 0 ? void 0 : (_entitySet$annotation14 = _entitySet$annotation13.UpdateHidden) === null || _entitySet$annotation14 === void 0 ? void 0 : _entitySet$annotation14.valueOf()),
223
229
  dataModelObjectPath = converterContext.getDataModelObjectPath(),
224
- isParentDeletable = isPathDeletable(dataModelObjectPath),
230
+ isParentDeletable = isPathDeletable(dataModelObjectPath, {
231
+ pathVisitor: function (path, navigationPaths) {
232
+ return singletonPathVisitor(path, converterContext.getConvertedTypes(), navigationPaths);
233
+ }
234
+ }),
225
235
  bParentEntitySetDeletable = isParentDeletable ? compileBinding(isParentDeletable) : isParentDeletable,
226
236
  headerDataFieldForActions = getIdentificationDataFieldForActions(converterContext.getEntityType(), false); // First add the "Critical" DataFieldForActions
227
237
 
@@ -280,7 +290,7 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
280
290
  var headerDataFieldForIBNActions = getIdentificationDataFieldForIBNActions(converterContext.getEntityType(), false);
281
291
  headerDataFieldForIBNActions.filter(function (dataField) {
282
292
  return IMPORTANT_CRITICALITIES.indexOf(dataField === null || dataField === void 0 ? void 0 : dataField.Criticality) === -1;
283
- }).map(function (dataField) {
293
+ }).forEach(function (dataField) {
284
294
  var _dataField$RequiresCo, _dataField$Inline, _dataField$Label, _dataField$annotation3, _dataField$annotation4, _dataField$annotation5, _dataField$Navigation;
285
295
 
286
296
  var oNavigationParams = {
@@ -312,7 +322,7 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
312
322
 
313
323
  headerDataFieldForActions.filter(function (dataField) {
314
324
  return IMPORTANT_CRITICALITIES.indexOf(dataField === null || dataField === void 0 ? void 0 : dataField.Criticality) === -1;
315
- }).map(function (dataField) {
325
+ }).forEach(function (dataField) {
316
326
  var _dataField$annotation6, _dataField$annotation7;
317
327
 
318
328
  headerActions.push({
@@ -326,6 +336,11 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
326
336
  });
327
337
  return headerActions;
328
338
  }
339
+ /**
340
+ * @param converterContext
341
+ * @returns {BaseAction[]}
342
+ */
343
+
329
344
 
330
345
  _exports.getHeaderDefaultActions = getHeaderDefaultActions;
331
346
 
@@ -345,6 +360,12 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
345
360
  };
346
361
  });
347
362
  }
363
+ /**
364
+ * @param viewLevel
365
+ * @param converterContext
366
+ * @returns {BaseAction[]}
367
+ */
368
+
348
369
 
349
370
  _exports.getHiddenHeaderActions = getHiddenHeaderActions;
350
371
 
@@ -395,7 +416,7 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
395
416
 
396
417
  footerDataFieldForActions.filter(function (dataField) {
397
418
  return IMPORTANT_CRITICALITIES.indexOf(dataField === null || dataField === void 0 ? void 0 : dataField.Criticality) === -1;
398
- }).map(function (dataField) {
419
+ }).forEach(function (dataField) {
399
420
  var _dataField$annotation10, _dataField$annotation11;
400
421
 
401
422
  footerActions.push({
@@ -424,4 +445,4 @@ sap.ui.define(["../ManifestSettings", "sap/fe/core/converters/controls/Common/Ac
424
445
  _exports.getFooterDefaultActions = getFooterDefaultActions;
425
446
  return _exports;
426
447
  }, false);
427
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkhlYWRlckFuZEZvb3RlckFjdGlvbi50cyJdLCJuYW1lcyI6WyJnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMiLCJlbnRpdHlUeXBlIiwiYkRldGVybWluaW5nIiwiYW5ub3RhdGlvbnMiLCJVSSIsIklkZW50aWZpY2F0aW9uIiwiZmlsdGVyIiwiaWRlbnRpZmljYXRpb25EYXRhRmllbGQiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiJFR5cGUiLCJEZXRlcm1pbmluZyIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwiZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zIiwiSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMiLCJnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5IiwiY29udmVydGVyQ29udGV4dCIsImRlbGV0ZUhpZGRlbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibmF2UHJvcCIsIm5hbWUiLCJkZWxldGVIaWRkZW5FeHByZXNzaW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJ1bmRlZmluZWQiLCJwYXRoIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJ2aWV3TGV2ZWwiLCJnZXRWaWV3TGV2ZWwiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJJc0VkaXRhYmxlIiwibm90IiwiaWZFbHNlIiwiYW5kIiwiZXF1YWwiLCJnZXREZWxldGVCdXR0b25FbmFibGVkIiwiaXNEZWxldGFibGUiLCJpc1BhcmVudERlbGV0YWJsZSIsImNvbnN0YW50IiwiZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkiLCJ1cGRhdGVIaWRkZW4iLCJlbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJiSXNEcmFmdFJvb3QiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJ1cGRhdGVIaWRkZW5FeHByZXNzaW9uIiwibm90RWRpdGFibGVFeHByZXNzaW9uIiwicmVzdWx0YW50RXhwcmVzc2lvbiIsIkRyYWZ0IiwiSGFzTm9EcmFmdEZvckN1cnJlbnRVc2VyIiwiZ2V0RWRpdEJ1dHRvbkVuYWJsZWQiLCJpc0RyYWZ0Um9vdCIsImlzU3RpY2t5IiwiU2Vzc2lvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJlZGl0QWN0aW9uTmFtZSIsIkVkaXRBY3Rpb24iLCJlZGl0QWN0aW9uQW5ub3RhdGlvblBhdGgiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwiZWRpdEFjdGlvbnMiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJhY3Rpb25zIiwibGVuZ3RoIiwiZWRpdEFjdGlvbiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIiwiZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMiLCJnZXRFbnRpdHlUeXBlIiwib1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJvRHJhZnRSb290Iiwib0VudGl0eURlbGV0ZVJlc3RyaWN0aW9ucyIsIkNhcGFiaWxpdGllcyIsIkRlbGV0ZVJlc3RyaWN0aW9ucyIsImJVcGRhdGVIaWRkZW4iLCJVcGRhdGVIaWRkZW4iLCJpc1BhdGhEZWxldGFibGUiLCJiUGFyZW50RW50aXR5U2V0RGVsZXRhYmxlIiwiY29tcGlsZUJpbmRpbmciLCJoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zIiwiaGVhZGVyQWN0aW9ucyIsImRhdGFGaWVsZCIsImluZGV4T2YiLCJDcml0aWNhbGl0eSIsInR5cGUiLCJBY3Rpb25UeXBlIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwia2V5IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwidmlzaWJsZSIsImVuYWJsZWQiLCJpc05hdmlnYWJsZSIsInB1c2giLCJQcmltYXJ5IiwiRGVsZXRhYmxlIiwiRGVsZXRlSGlkZGVuIiwiU2Vjb25kYXJ5IiwicGFyZW50RW50aXR5RGVsZXRlRW5hYmxlZCIsIlN3aXRjaFRvQWN0aXZlT2JqZWN0IiwiU3dpdGNoVG9EcmFmdE9iamVjdCIsImhlYWRlckRhdGFGaWVsZEZvcklCTkFjdGlvbnMiLCJvTmF2aWdhdGlvblBhcmFtcyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIk1hcHBpbmciLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJSZXF1aXJlc0NvbnRleHQiLCJFcnJvciIsIkxhYmVsIiwiSW5saW5lIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwidGV4dCIsInRvU3RyaW5nIiwiYnV0dG9uVHlwZSIsIkJ1dHRvblR5cGUiLCJHaG9zdCIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJwcmVzcyIsImZuIiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJjdXN0b21EYXRhIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJnZXRIaWRkZW5IZWFkZXJBY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsIkRlZmF1bHQiLCJnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyIsInNFbnRpdHlTZXREcmFmdFJvb3QiLCJ0ZXJtIiwiYkNvbmRpdGlvblNhdmUiLCJTYXZlQWN0aW9uIiwiYkNvbmRpdGlvbkFwcGx5IiwiYkNvbmRpdGlvbkNhbmNlbCIsIkRpc2NhcmRBY3Rpb24iLCJmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zIiwiZm9vdGVyQWN0aW9ucyIsImVudGl0eVR5cGVOYW1lIiwiRGVmYXVsdEFwcGx5IiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJFbmQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFFbEJDLFFBQUFBLGNBQWMsRUFBRTVFLGdCQUFnQixDQUFDNkUsK0JBQWpCLENBQWlEUCxTQUFTLENBQUNRLGtCQUEzRCxDQUZFO0FBR2xCQyxRQUFBQSxHQUFHLEVBQUVDLFNBQVMsQ0FBQ0Msd0JBQVYsQ0FBbUNYLFNBQW5DLENBSGE7QUFJbEJZLFFBQUFBLE9BQU8sRUFBRWYsY0FBYyxDQUFDL0MsR0FBRyxDQUFDRyxLQUFLLENBQUNiLG9CQUFvQiw0QkFBQzRELFNBQVMsQ0FBQ3RGLFdBQVgsdUZBQUMsd0JBQXVCQyxFQUF4Qiw0REFBQyx3QkFBMkJJLE1BQTVCLENBQXJCLEVBQTBELElBQTFELENBQU4sQ0FBSixDQUpMO0FBS2xCOEYsUUFBQUEsT0FBTyxFQUFFNUIsNkJBQTZCLENBQUN2RCxnQkFBRCxFQUFtQnNFLFNBQVMsQ0FBQzdFLFlBQTdCLENBTHBCO0FBTWxCMkYsUUFBQUEsV0FBVyxFQUFFO0FBTkssT0FBbkI7QUFRQSxLQWJGLEVBNUM0RyxDQTJENUc7O0FBQ0EsUUFBSXlDLGdCQUFKLEVBQXNCO0FBQ3JCRyxNQUFBQSxhQUFhLENBQUMzQyxJQUFkLENBQW1CO0FBQ2xCWixRQUFBQSxJQUFJLEVBQUVDLFVBQVUsQ0FBQ2UsU0FEQztBQUVsQlYsUUFBQUEsR0FBRyxFQUFFLGNBRmE7QUFHbEJvRCxRQUFBQSxRQUFRLEVBQUU7QUFBRUMsVUFBQUEsU0FBUyxFQUFFQyxTQUFTLENBQUNDO0FBQXZCO0FBSFEsT0FBbkI7QUFLQTs7QUFDRCxXQUFPTixhQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvblR5cGUgfSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQge1xuXHRBbm5vdGF0aW9uQWN0aW9uLFxuXHRCYXNlQWN0aW9uLFxuXHRCdXR0b25UeXBlLFxuXHRnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbixcblx0Z2V0U2VtYW50aWNPYmplY3RNYXBwaW5nXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IERhdGFGaWVsZEZvckFjdGlvblR5cGVzLCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25UeXBlcywgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQge1xuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdG5vdCxcblx0ZXF1YWwsXG5cdGZuLFxuXHRFeHByZXNzaW9uLFxuXHRhbmQsXG5cdGlmRWxzZSxcblx0QmluZGluZ0V4cHJlc3Npb24sXG5cdGNvbnN0YW50XG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHsgaXNQYXRoRGVsZXRhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IERyYWZ0LCBzaW5nbGV0b25QYXRoVmlzaXRvciwgVUkgfSBmcm9tIFwiLi4vaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCB0aGUgZGF0YSBmaWVsZCBmb3IgYWN0aW9ucyBmb3IgdGhlIGlkZW50aWZpY2F0aW9uIGFubm90YXRpb25cbiAqIFRoZXkgbXVzdCBiZVxuICogLSBOb3Qgc3RhdGljYWxseSBoaWRkZW5cbiAqIC0gRWl0aGVyIGxpbmtlZCB0byBhbiBVbmJvdW5kIGFjdGlvbiBvciB0byBhbiBhY3Rpb24gd2hpY2ggaGFzIGFuIE9wZXJhdGlvbkF2YWlsYWJsZSB0aGF0IGlzIG5vdCBzZXQgdG8gZmFsc2Ugc3RhdGljYWxseS5cbiAqXG4gKiBAcGFyYW0ge0VudGl0eVR5cGV9IGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYkRldGVybWluaW5nIFRoZSBmbGFnIHdoaWNoIGRlbm90ZXMgd2hldGhlciBvciBub3QgdGhlIGFjdGlvbiBpcyBhIGRldGVybWluaW5nIGFjdGlvblxuICogQHJldHVybnMge0RhdGFGaWVsZEZvckFjdGlvblR5cGVzW119IEFuIGFycmF5IG9mIERhdGFGaWVsZCBmb3IgYWN0aW9uIHJlc3BlY3RpbmcgdGhlIGlucHV0IHBhcmFtZXRlciAnYkRldGVybWluaW5nJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIGJEZXRlcm1pbmluZzogYm9vbGVhbik6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzW10ge1xuXHRyZXR1cm4gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbj8uZmlsdGVyKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkID0+IHtcblx0XHRpZiAoaWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgIT09IHRydWUpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiICYmXG5cdFx0XHRcdCEhaWRlbnRpZmljYXRpb25EYXRhRmllbGQuRGV0ZXJtaW5pbmcgPT09IGJEZXRlcm1pbmluZyAmJlxuXHRcdFx0XHQoIWlkZW50aWZpY2F0aW9uRGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgfHxcblx0XHRcdFx0XHRpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlPy52YWx1ZU9mKCkgIT09IGZhbHNlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pIHx8IFtdKSBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1tdO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGFsbCB0aGUgSUJOIGFjdGlvbnMgZm9yIHRoZSBpZGVudGlmaWNhdGlvbiBhbm5vdGF0aW9uLlxuICogVGhleSBtdXN0IGJlXG4gKiAtIE5vdCBzdGF0aWNhbGx5IGhpZGRlbi5cbiAqIEBwYXJhbSB7RW50aXR5VHlwZX0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHl0eXBlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJEZXRlcm1pbmluZyBXaGV0aGVyIG9yIG5vdCB0aGUgYWN0aW9uIHNob3VsZCBiZSBkZXRlcm1pbmluZ1xuICogQHJldHVybnMge0RhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblR5cGVzW119IEFuIGFycmF5IG9mIGRhdGFmaWVsZCBmb3IgYWN0aW9uIHJlc3BlY3RpbmcgdGhlIGJEZXRlcm1pbmluZyBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIGJEZXRlcm1pbmluZzogYm9vbGVhbik6IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblR5cGVzW10ge1xuXHRyZXR1cm4gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbj8uZmlsdGVyKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkID0+IHtcblx0XHRpZiAoaWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgIT09IHRydWUpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiICYmXG5cdFx0XHRcdCEhaWRlbnRpZmljYXRpb25EYXRhRmllbGQuRGV0ZXJtaW5pbmcgPT09IGJEZXRlcm1pbmluZ1xuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fSkgfHwgW10pIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblR5cGVzW107XG59XG5cbmNvbnN0IElNUE9SVEFOVF9DUklUSUNBTElUSUVTID0gW1xuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9WZXJ5UG9zaXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvUG9zaXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvTmVnYXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvVmVyeU5lZ2F0aXZlXCJcbl07XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBEZWxldGUgYnV0dG9uIG9uIGFuIG9iamVjdCBwYWdlLlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBJbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0ge1Byb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+IHwgdW5kZWZpbmVkfSBkZWxldGVIaWRkZW4gVGhlIHZhbHVlIG9mIHRoZSBVSS5EZWxldGVIaWRkZW4gYW5ub3RhdGlvbiBvbiB0aGUgZW50aXR5IHNldCAvIHR5cGUuXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPn0gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgRGVsZXRlIGJ1dHRvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZUJ1dHRvblZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGRlbGV0ZUhpZGRlbjogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj4gfCB1bmRlZmluZWRcbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyA9IGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubWFwKG5hdlByb3AgPT4gbmF2UHJvcC5uYW1lKSxcblx0XHQvLyBTZXQgYWJzb2x1dGUgYmluZGluZyBwYXRoIGZvciBTaW5nbGV0b24gcmVmZXJlbmNlcywgb3RoZXJ3aXNlIHRoZSBjb25maWd1cmVkIGFubm90YXRpb24gcGF0aCBpdHNlbGYuXG5cdFx0Ly8gRm9yIGUuZy4gL2NvbS5zYXAubmFtZXNwYWNlLkVudGl0eUNvbnRhaW5lci9TaW5nbGV0b24vUHJvcGVydHkgdG8gL1NpbmdsZXRvbi9Qcm9wZXJ0eVxuXHRcdGRlbGV0ZUhpZGRlbkV4cHJlc3Npb246IEV4cHJlc3Npb248Ym9vbGVhbiB8IHVuZGVmaW5lZD4gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdGRlbGV0ZUhpZGRlbixcblx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHQocGF0aDogc3RyaW5nKSA9PiBzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBbXSlcblx0XHQpLFxuXHRcdG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCksXG5cdFx0dmlld0xldmVsID0gbWFuaWZlc3RXcmFwcGVyLmdldFZpZXdMZXZlbCgpLFxuXHRcdC8vIERlbGV0ZSBidXR0b24gaXMgdmlzaWJsZVxuXHRcdC8vIEluIE9QIFx0XHQtLT4gIHdoZW4gbm90IGluIGVkaXQgbW9kZVxuXHRcdC8vIEluIHN1Yi1PUCBcdC0tPiAgd2hlbiBpbiBlZGl0IG1vZGVcblx0XHRlZGl0YWJsZUV4cHJlc3Npb246IEV4cHJlc3Npb248Ym9vbGVhbj4gPSB2aWV3TGV2ZWwgPiAxID8gVUkuSXNFZGl0YWJsZSA6IG5vdChVSS5Jc0VkaXRhYmxlKTtcblxuXHQvLyBJZiBVSS5EZWxldGVIaWRkZW4gYW5ub3RhdGlvbiBvbiBlbnRpdHkgc2V0IG9yIHR5cGUgaXMgZWl0aGVyIG5vdCBkZWZpbmVkIG9yIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLFxuXHQvLyBEZWxldGUgYnV0dG9uIGlzIHZpc2libGUgYmFzZWQgb24gZWRpdGFibGVFeHByZXNzaW9uLlxuXHQvLyBlbHNlLFxuXHQvLyBEZWxldGUgYnV0dG9uIGlzIHZpc2libGUgYmFzZWQgb24gYm90aCBhbm5vdGF0aW9uIHBhdGggYW5kIGVkaXRhYmxlRXhwcmVzc2lvbi5cblx0cmV0dXJuIGlmRWxzZShcblx0XHRkZWxldGVIaWRkZW4gPT09IHVuZGVmaW5lZCB8fCBkZWxldGVIaWRkZW4udmFsdWVPZigpID09PSBmYWxzZSxcblx0XHRlZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0YW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZXF1YWwoZGVsZXRlSGlkZGVuRXhwcmVzc2lvbiwgZmFsc2UpKVxuXHQpO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBkZXRlcm1pbmUgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBiaW5kaW5nIGZvciB0aGUgRGVsZXRlIGJ1dHRvbiBvbiBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+fHVuZGVmaW5lZH0gaXNEZWxldGFibGUgVGhlIGRlbGV0ZSByZXN0cmljdGlvbiBjb25maWd1cmVkXG4gKiBAcGFyYW0ge0V4cHJlc3Npb248Ym9vbGVhbj59IGlzUGFyZW50RGVsZXRhYmxlIFRoZSBkZWxldGUgcmVzdHJpY3Rpb24gY29uZmlndXJlZCBvbiB0aGUgcGFyZW50IGVudGl0eVxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIERlbGV0ZSBidXR0b25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZUJ1dHRvbkVuYWJsZWQoXG5cdGlzRGVsZXRhYmxlOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxCb29sZWFuPiB8IHVuZGVmaW5lZCxcblx0aXNQYXJlbnREZWxldGFibGU6IEV4cHJlc3Npb248Ym9vbGVhbj5cbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdGlzUGFyZW50RGVsZXRhYmxlICE9PSB1bmRlZmluZWQsXG5cdFx0aXNQYXJlbnREZWxldGFibGUsXG5cdFx0aWZFbHNlKGlzRGVsZXRhYmxlICE9PSB1bmRlZmluZWQsIGVxdWFsKGlzRGVsZXRhYmxlLCB0cnVlKSwgY29uc3RhbnQodHJ1ZSkpXG5cdCk7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBFZGl0IGJ1dHRvbiBvbiBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHtQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPiB8IHVuZGVmaW5lZH0gdXBkYXRlSGlkZGVuIFRoZSB2YWx1ZSBvZiB0aGUgVUkuVXBkYXRlSGlkZGVuIGFubm90YXRpb24gb24gdGhlIGVudGl0eSBzZXQgLyB0eXBlLlxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHVwZGF0ZUhpZGRlbjogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj4gfCB1bmRlZmluZWRcbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpLFxuXHRcdGJJc0RyYWZ0Um9vdCA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgPyB0cnVlIDogZmFsc2UsXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcChuYXZQcm9wID0+IG5hdlByb3AubmFtZSksXG5cdFx0Ly8gU2V0IGFic29sdXRlIGJpbmRpbmcgcGF0aCBmb3IgU2luZ2xldG9uIHJlZmVyZW5jZXMsIG90aGVyd2lzZSB0aGUgY29uZmlndXJlZCBhbm5vdGF0aW9uIHBhdGggaXRzZWxmLlxuXHRcdC8vIEZvciBlLmcuIC9jb20uc2FwLm5hbWVzcGFjZS5FbnRpdHlDb250YWluZXIvU2luZ2xldG9uL1Byb3BlcnR5IHRvIC9TaW5nbGV0b24vUHJvcGVydHlcblx0XHR1cGRhdGVIaWRkZW5FeHByZXNzaW9uOiBFeHByZXNzaW9uPGJvb2xlYW4gfCB1bmRlZmluZWQ+ID0gYW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHR1cGRhdGVIaWRkZW4sXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0KHBhdGg6IHN0cmluZykgPT4gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocylcblx0XHQpLFxuXHRcdG5vdEVkaXRhYmxlRXhwcmVzc2lvbjogRXhwcmVzc2lvbjxib29sZWFuPiA9IG5vdChVSS5Jc0VkaXRhYmxlKTtcblxuXHQvLyBJZiBVSS5VcGRhdGVIaWRkZW4gYW5ub3RhdGlvbiBvbiBlbnRpdHkgc2V0IG9yIHR5cGUgaXMgZWl0aGVyIG5vdCBkZWZpbmVkIG9yIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLFxuXHQvLyBFZGl0IGJ1dHRvbiBpcyB2aXNpYmxlIGluIGRpc3BsYXkgbW9kZS5cblx0Ly8gZWxzZSxcblx0Ly8gRWRpdCBidXR0b24gaXMgdmlzaWJsZSBiYXNlZCBvbiBib3RoIGFubm90YXRpb24gcGF0aCBhbmQgaW4gZGlzcGxheSBtb2RlLlxuXHRjb25zdCByZXN1bHRhbnRFeHByZXNzaW9uOiBFeHByZXNzaW9uPGJvb2xlYW4+ID0gaWZFbHNlKFxuXHRcdHVwZGF0ZUhpZGRlbiA9PT0gdW5kZWZpbmVkIHx8IHVwZGF0ZUhpZGRlbi52YWx1ZU9mKCkgPT09IGZhbHNlLFxuXHRcdG5vdEVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRhbmQobm90RWRpdGFibGVFeHByZXNzaW9uLCBlcXVhbCh1cGRhdGVIaWRkZW5FeHByZXNzaW9uLCBmYWxzZSkpXG5cdCk7XG5cdHJldHVybiBpZkVsc2UoYklzRHJhZnRSb290LCBhbmQocmVzdWx0YW50RXhwcmVzc2lvbiwgRHJhZnQuSGFzTm9EcmFmdEZvckN1cnJlbnRVc2VyKSwgcmVzdWx0YW50RXhwcmVzc2lvbik7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBFZGl0IGJ1dHRvbiBvbiBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvbkVuYWJsZWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSxcblx0XHRpc0RyYWZ0Um9vdCA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgPyB0cnVlIDogZmFsc2UsXG5cdFx0aXNTdGlja3kgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zLlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0bGV0IGVkaXRBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChpc0RyYWZ0Um9vdCkge1xuXHRcdGVkaXRBY3Rpb25OYW1lID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdD8uRWRpdEFjdGlvbiBhcyBzdHJpbmc7XG5cdH0gZWxzZSBpZiAoaXNTdGlja3kpIHtcblx0XHRlZGl0QWN0aW9uTmFtZSA9IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uRWRpdEFjdGlvbiBhcyBzdHJpbmc7XG5cdH1cblx0aWYgKGVkaXRBY3Rpb25OYW1lKSB7XG5cdFx0Y29uc3QgZWRpdEFjdGlvbkFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGVkaXRBY3Rpb25OYW1lIGFzIHN0cmluZyksXG5cdFx0XHRlZGl0QWN0aW9ucyA9IChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGVkaXRBY3Rpb25Bbm5vdGF0aW9uUGF0aCk/LmFubm90YXRpb24gYXMgYW55KT8uYWN0aW9ucztcblx0XHRpZiAoZWRpdEFjdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgZWRpdEFjdGlvbiA9IGVkaXRBY3Rpb25zWzBdO1xuXHRcdFx0aWYgKGVkaXRBY3Rpb24/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIFwiez0gJHsjXCIgKyBlZGl0QWN0aW9uTmFtZSArIFwifSA/IHRydWUgOiBmYWxzZSB9XCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZWRpdEFjdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0ZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdG9TdGlja3lTZXNzaW9uU3VwcG9ydGVkID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucz8uU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCwgLy9mb3Igc3RpY2t5IGFwcFxuXHRcdG9EcmFmdFJvb3QgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290LFxuXHRcdG9FbnRpdHlEZWxldGVSZXN0cmljdGlvbnMgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/LkRlbGV0ZVJlc3RyaWN0aW9ucyxcblx0XHRiVXBkYXRlSGlkZGVuID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuPy52YWx1ZU9mKCksXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGRhdGFNb2RlbE9iamVjdFBhdGgpLFxuXHRcdGJQYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSBpc1BhcmVudERlbGV0YWJsZSA/IGNvbXBpbGVCaW5kaW5nKGlzUGFyZW50RGVsZXRhYmxlKSA6IGlzUGFyZW50RGVsZXRhYmxlLFxuXHRcdGhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnMgPSBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGZhbHNlKTtcblxuXHQvLyBGaXJzdCBhZGQgdGhlIFwiQ3JpdGljYWxcIiBEYXRhRmllbGRGb3JBY3Rpb25zXG5cdGNvbnN0IGhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnNcblx0XHQuZmlsdGVyKGRhdGFGaWVsZCA9PiB7XG5cdFx0XHRyZXR1cm4gSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5kZXhPZihkYXRhRmllbGQ/LkNyaXRpY2FsaXR5IGFzIHN0cmluZykgPiAtMTtcblx0XHR9KVxuXHRcdC5tYXAoZGF0YUZpZWxkID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcobm90KGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0XHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9KTtcblxuXHQvLyBUaGVuIHRoZSBlZGl0IGFjdGlvbiBpZiBpdCBleGlzdHNcblx0aWYgKChvRHJhZnRSb290Py5FZGl0QWN0aW9uIHx8IG9TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5FZGl0QWN0aW9uKSAmJiBiVXBkYXRlSGlkZGVuICE9PSB0cnVlKSB7XG5cdFx0Y29uc3QgdXBkYXRlSGlkZGVuID0gKGVudGl0eVNldD8uYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlbj8udmFsdWVPZigpICE9PSB1bmRlZmluZWRcblx0XHRcdD8gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuXG5cdFx0XHQ6IGVudGl0eVR5cGU/LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW4pIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+O1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLlByaW1hcnksXG5cdFx0XHRrZXk6IFwiRWRpdEFjdGlvblwiLFxuXHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcoZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgdXBkYXRlSGlkZGVuKSksXG5cdFx0XHRlbmFibGVkOiBnZXRFZGl0QnV0dG9uRW5hYmxlZChjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH0pO1xuXHR9XG5cdC8vIFRoZW4gdGhlIGRlbGV0ZSBhY3Rpb24gaWYgd2UncmUgbm90IHN0YXRpY2FsbHkgbm90IGRlbGV0YWJsZVxuXHRpZiAoXG5cdFx0KGJQYXJlbnRFbnRpdHlTZXREZWxldGFibGUgJiYgYlBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKSB8fFxuXHRcdChvRW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zPy5EZWxldGFibGU/LnZhbHVlT2YoKSAhPT0gZmFsc2UgJiYgYlBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKVxuXHQpIHtcblx0XHRjb25zdCBkZWxldGVIaWRkZW4gPSAoZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uRGVsZXRlSGlkZGVuPy52YWx1ZU9mKCkgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyBlbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJPy5EZWxldGVIaWRkZW5cblx0XHRcdDogZW50aXR5VHlwZT8uYW5ub3RhdGlvbnMuVUk/LkRlbGV0ZUhpZGRlbikgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj47XG5cdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuU2Vjb25kYXJ5LFxuXHRcdFx0a2V5OiBcIkRlbGV0ZUFjdGlvblwiLFxuXHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcoZ2V0RGVsZXRlQnV0dG9uVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBkZWxldGVIaWRkZW4pKSxcblx0XHRcdGVuYWJsZWQ6IGNvbXBpbGVCaW5kaW5nKGdldERlbGV0ZUJ1dHRvbkVuYWJsZWQob0VudGl0eURlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlLCBpc1BhcmVudERlbGV0YWJsZSkpLFxuXHRcdFx0cGFyZW50RW50aXR5RGVsZXRlRW5hYmxlZDogYlBhcmVudEVudGl0eVNldERlbGV0YWJsZVxuXHRcdH0pO1xuXHR9XG5cblx0aWYgKG9EcmFmdFJvb3Q/LkVkaXRBY3Rpb24gJiYgYlVwZGF0ZUhpZGRlbiAhPT0gdHJ1ZSkge1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuU3dpdGNoVG9BY3RpdmVPYmplY3QsIGtleTogXCJTd2l0Y2hUb0FjdGl2ZU9iamVjdFwiIH0pO1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuU3dpdGNoVG9EcmFmdE9iamVjdCwga2V5OiBcIlN3aXRjaFRvRHJhZnRPYmplY3RcIiB9KTtcblx0fVxuXG5cdGNvbnN0IGhlYWRlckRhdGFGaWVsZEZvcklCTkFjdGlvbnMgPSBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvcklCTkFjdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGZhbHNlKTtcblxuXHRoZWFkZXJEYXRhRmllbGRGb3JJQk5BY3Rpb25zXG5cdFx0LmZpbHRlcihkYXRhRmllbGQgPT4ge1xuXHRcdFx0cmV0dXJuIElNUE9SVEFOVF9DUklUSUNBTElUSUVTLmluZGV4T2YoZGF0YUZpZWxkPy5Dcml0aWNhbGl0eSBhcyBzdHJpbmcpID09PSAtMTtcblx0XHR9KVxuXHRcdC5tYXAoZGF0YUZpZWxkID0+IHtcblx0XHRcdGNvbnN0IG9OYXZpZ2F0aW9uUGFyYW1zID0ge1xuXHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGRhdGFGaWVsZC5NYXBwaW5nID8gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKGRhdGFGaWVsZC5NYXBwaW5nKSA6IFtdXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dD8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlJlcXVpcmVzQ29udGV4dCBwcm9wZXJ0eSBzaG91bGQgbm90IGJlIHRydWUgZm9yIGhlYWRlciBJQk4gYWN0aW9uIDogXCIgKyBkYXRhRmllbGQuTGFiZWwpO1xuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW5saW5lIHByb3BlcnR5IHNob3VsZCBub3QgYmUgdHJ1ZSBmb3IgaGVhZGVyIElCTiBhY3Rpb24gOiBcIiArIGRhdGFGaWVsZC5MYWJlbCk7XG5cdFx0XHR9XG5cdFx0XHRoZWFkZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRidXR0b25UeXBlOiBCdXR0b25UeXBlLkdob3N0LFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRlbmFibGVkOlxuXHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdD8gY29tcGlsZUJpbmRpbmcoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSksIHRydWUpKVxuXHRcdFx0XHRcdFx0OiB0cnVlLFxuXHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWUsXG5cdFx0XHRcdHByZXNzOiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRmbihcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsIFtcblx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuQWN0aW9uKSxcblx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uUGFyYW1zXG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0KSxcblx0XHRcdFx0Y3VzdG9tRGF0YTogY29tcGlsZUJpbmRpbmcoe1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0XHRcdGFjdGlvbjogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkFjdGlvbilcblx0XHRcdFx0fSlcblx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbik7XG5cdFx0fSk7XG5cdC8vIEZpbmFsbHkgdGhlIG5vbiBjcml0aWNhbCBEYXRhRmllbGRGb3JBY3Rpb25zXG5cdGhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnNcblx0XHQuZmlsdGVyKGRhdGFGaWVsZCA9PiB7XG5cdFx0XHRyZXR1cm4gSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5kZXhPZihkYXRhRmllbGQ/LkNyaXRpY2FsaXR5IGFzIHN0cmluZykgPT09IC0xO1xuXHRcdH0pXG5cdFx0Lm1hcChkYXRhRmllbGQgPT4ge1xuXHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb24pO1xuXHRcdH0pO1xuXG5cdHJldHVybiBoZWFkZXJBY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBoaWRkZW5BY3Rpb25zID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbj8uZmlsdGVyKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkID0+IHtcblx0XHRyZXR1cm4gaWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWU7XG5cdH0pIHx8IFtdKSBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1tdO1xuXHRyZXR1cm4gaGlkZGVuQWN0aW9ucy5tYXAoZGF0YUZpZWxkID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZClcblx0XHR9O1xuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvb3RlckRlZmF1bHRBY3Rpb25zKHZpZXdMZXZlbDogbnVtYmVyLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQsIC8vZm9yIHN0aWNreSBhcHBcblx0XHRzRW50aXR5U2V0RHJhZnRSb290ID1cblx0XHRcdGVudGl0eVNldCAmJiAoZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290Py50ZXJtIHx8IGVudGl0eVNldC5hbm5vdGF0aW9ucz8uU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8udGVybSksXG5cdFx0YkNvbmRpdGlvblNhdmUgPVxuXHRcdFx0c0VudGl0eVNldERyYWZ0Um9vdCA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCIgfHxcblx0XHRcdChvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCAmJiBvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uU2F2ZUFjdGlvbiksXG5cdFx0YkNvbmRpdGlvbkFwcGx5ID0gdmlld0xldmVsID4gMSxcblx0XHRiQ29uZGl0aW9uQ2FuY2VsID1cblx0XHRcdHNFbnRpdHlTZXREcmFmdFJvb3QgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiIHx8XG5cdFx0XHQob1N0aWNreVNlc3Npb25TdXBwb3J0ZWQgJiYgb1N0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LkRpc2NhcmRBY3Rpb24pO1xuXG5cdC8vIFJldHJpZXZlIGFsbCBkZXRlcm1pbmluZyBhY3Rpb25zXG5cdGNvbnN0IGZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnMgPSBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIHRydWUpO1xuXG5cdC8vIEZpcnN0IGFkZCB0aGUgXCJDcml0aWNhbFwiIERhdGFGaWVsZEZvckFjdGlvbnNcblx0Y29uc3QgZm9vdGVyQWN0aW9uczogQmFzZUFjdGlvbltdID0gZm9vdGVyRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRcdC5maWx0ZXIoZGF0YUZpZWxkID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA+IC0xO1xuXHRcdH0pXG5cdFx0Lm1hcChkYXRhRmllbGQgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH0pO1xuXG5cdC8vIFRoZW4gdGhlIHNhdmUgYWN0aW9uIGlmIGl0IGV4aXN0c1xuXHRpZiAoZW50aXR5U2V0Py5lbnRpdHlUeXBlTmFtZSA9PT0gZW50aXR5VHlwZT8uZnVsbHlRdWFsaWZpZWROYW1lICYmIGJDb25kaXRpb25TYXZlKSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHsgdHlwZTogQWN0aW9uVHlwZS5QcmltYXJ5LCBrZXk6IFwiU2F2ZUFjdGlvblwiIH0pO1xuXHR9XG5cblx0Ly8gVGhlbiB0aGUgYXBwbHkgYWN0aW9uIGlmIGl0IGV4aXN0c1xuXHRpZiAoYkNvbmRpdGlvbkFwcGx5KSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHsgdHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0QXBwbHksIGtleTogXCJBcHBseUFjdGlvblwiIH0pO1xuXHR9XG5cblx0Ly8gVGhlbiB0aGUgbm9uIGNyaXRpY2FsIERhdGFGaWVsZEZvckFjdGlvbnNcblx0Zm9vdGVyRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRcdC5maWx0ZXIoZGF0YUZpZWxkID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA9PT0gLTE7XG5cdFx0fSlcblx0XHQubWFwKGRhdGFGaWVsZCA9PiB7XG5cdFx0XHRmb290ZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSkpLFxuXHRcdFx0XHRlbmFibGVkOiBnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWVcblx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbik7XG5cdFx0fSk7XG5cblx0Ly8gVGhlbiB0aGUgY2FuY2VsIGFjdGlvbiBpZiBpdCBleGlzdHNcblx0aWYgKGJDb25kaXRpb25DYW5jZWwpIHtcblx0XHRmb290ZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5TZWNvbmRhcnksXG5cdFx0XHRrZXk6IFwiQ2FuY2VsQWN0aW9uXCIsXG5cdFx0XHRwb3NpdGlvbjogeyBwbGFjZW1lbnQ6IFBsYWNlbWVudC5FbmQgfVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBmb290ZXJBY3Rpb25zO1xufVxuIl19
448
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkhlYWRlckFuZEZvb3RlckFjdGlvbi50cyJdLCJuYW1lcyI6WyJnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMiLCJlbnRpdHlUeXBlIiwiYkRldGVybWluaW5nIiwiYW5ub3RhdGlvbnMiLCJVSSIsIklkZW50aWZpY2F0aW9uIiwiZmlsdGVyIiwiaWRlbnRpZmljYXRpb25EYXRhRmllbGQiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiJFR5cGUiLCJEZXRlcm1pbmluZyIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwiZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zIiwiSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMiLCJnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5IiwiY29udmVydGVyQ29udGV4dCIsImRlbGV0ZUhpZGRlbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibmF2UHJvcCIsIm5hbWUiLCJkZWxldGVIaWRkZW5FeHByZXNzaW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJ1bmRlZmluZWQiLCJwYXRoIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsInZpZXdMZXZlbCIsImdldFZpZXdMZXZlbCIsImVkaXRhYmxlRXhwcmVzc2lvbiIsIklzRWRpdGFibGUiLCJub3QiLCJpZkVsc2UiLCJhbmQiLCJlcXVhbCIsImdldERlbGV0ZUJ1dHRvbkVuYWJsZWQiLCJpc0RlbGV0YWJsZSIsImlzUGFyZW50RGVsZXRhYmxlIiwiY29uc3RhbnQiLCJnZXRFZGl0QnV0dG9uVmlzaWJpbGl0eSIsInVwZGF0ZUhpZGRlbiIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImJJc0RyYWZ0Um9vdCIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsInVwZGF0ZUhpZGRlbkV4cHJlc3Npb24iLCJub3RFZGl0YWJsZUV4cHJlc3Npb24iLCJyZXN1bHRhbnRFeHByZXNzaW9uIiwiRHJhZnQiLCJIYXNOb0RyYWZ0Rm9yQ3VycmVudFVzZXIiLCJnZXRFZGl0QnV0dG9uRW5hYmxlZCIsImlzRHJhZnRSb290IiwiaXNTdGlja3kiLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImVkaXRBY3Rpb25OYW1lIiwiRWRpdEFjdGlvbiIsImVkaXRBY3Rpb25Bbm5vdGF0aW9uUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJlZGl0QWN0aW9ucyIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsImFjdGlvbnMiLCJsZW5ndGgiLCJlZGl0QWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsImdldEVudGl0eVR5cGUiLCJvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIm9EcmFmdFJvb3QiLCJvRW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zIiwiQ2FwYWJpbGl0aWVzIiwiRGVsZXRlUmVzdHJpY3Rpb25zIiwiYlVwZGF0ZUhpZGRlbiIsIlVwZGF0ZUhpZGRlbiIsImlzUGF0aERlbGV0YWJsZSIsInBhdGhWaXNpdG9yIiwibmF2aWdhdGlvblBhdGhzIiwiYlBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsImNvbXBpbGVCaW5kaW5nIiwiaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucyIsImhlYWRlckFjdGlvbnMiLCJkYXRhRmllbGQiLCJpbmRleE9mIiwiQ3JpdGljYWxpdHkiLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImtleSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsInZpc2libGUiLCJlbmFibGVkIiwiaXNOYXZpZ2FibGUiLCJwdXNoIiwiUHJpbWFyeSIsIkRlbGV0YWJsZSIsIkRlbGV0ZUhpZGRlbiIsIlNlY29uZGFyeSIsInBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQiLCJTd2l0Y2hUb0FjdGl2ZU9iamVjdCIsIlN3aXRjaFRvRHJhZnRPYmplY3QiLCJoZWFkZXJEYXRhRmllbGRGb3JJQk5BY3Rpb25zIiwiZm9yRWFjaCIsIm9OYXZpZ2F0aW9uUGFyYW1zIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiTWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIlJlcXVpcmVzQ29udGV4dCIsIkVycm9yIiwiTGFiZWwiLCJJbmxpbmUiLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJ0ZXh0IiwidG9TdHJpbmciLCJidXR0b25UeXBlIiwiQnV0dG9uVHlwZSIsIkdob3N0IiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsInByZXNzIiwiZm4iLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsImN1c3RvbURhdGEiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsImdldEhpZGRlbkhlYWRlckFjdGlvbnMiLCJoaWRkZW5BY3Rpb25zIiwiRGVmYXVsdCIsImdldEZvb3RlckRlZmF1bHRBY3Rpb25zIiwic0VudGl0eVNldERyYWZ0Um9vdCIsInRlcm0iLCJiQ29uZGl0aW9uU2F2ZSIsIlNhdmVBY3Rpb24iLCJiQ29uZGl0aW9uQXBwbHkiLCJiQ29uZGl0aW9uQ2FuY2VsIiwiRGlzY2FyZEFjdGlvbiIsImZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnMiLCJmb290ZXJBY3Rpb25zIiwiZW50aXR5VHlwZU5hbWUiLCJEZWZhdWx0QXBwbHkiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkVuZCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7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UUFBQUEsUUFBUSxFQUFFO0FBQUVDLFVBQUFBLFNBQVMsRUFBRUMsU0FBUyxDQUFDQztBQUF2QjtBQUhRLE9BQW5CO0FBS0E7O0FBQ0QsV0FBT04sYUFBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IHtcblx0QW5ub3RhdGlvbkFjdGlvbixcblx0QmFzZUFjdGlvbixcblx0QnV0dG9uVHlwZSxcblx0Z2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24sXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZ1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcywgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXMsIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHtcblx0YW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdGNvbXBpbGVCaW5kaW5nLFxuXHRub3QsXG5cdGVxdWFsLFxuXHRmbixcblx0RXhwcmVzc2lvbixcblx0YW5kLFxuXHRpZkVsc2UsXG5cdEJpbmRpbmdFeHByZXNzaW9uLFxuXHRjb25zdGFudFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IGlzUGF0aERlbGV0YWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBEcmFmdCwgc2luZ2xldG9uUGF0aFZpc2l0b3IsIFVJIH0gZnJvbSBcIi4uL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgdGhlIGRhdGEgZmllbGQgZm9yIGFjdGlvbnMgZm9yIHRoZSBpZGVudGlmaWNhdGlvbiBhbm5vdGF0aW9uXG4gKiBUaGV5IG11c3QgYmVcbiAqIC0gTm90IHN0YXRpY2FsbHkgaGlkZGVuXG4gKiAtIEVpdGhlciBsaW5rZWQgdG8gYW4gVW5ib3VuZCBhY3Rpb24gb3IgdG8gYW4gYWN0aW9uIHdoaWNoIGhhcyBhbiBPcGVyYXRpb25BdmFpbGFibGUgdGhhdCBpcyBub3Qgc2V0IHRvIGZhbHNlIHN0YXRpY2FsbHkuXG4gKlxuICogQHBhcmFtIHtFbnRpdHlUeXBlfSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eSB0eXBlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJEZXRlcm1pbmluZyBUaGUgZmxhZyB3aGljaCBkZW5vdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBhY3Rpb24gaXMgYSBkZXRlcm1pbmluZyBhY3Rpb25cbiAqIEByZXR1cm5zIHtEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1tdfSBBbiBhcnJheSBvZiBEYXRhRmllbGQgZm9yIGFjdGlvbiByZXNwZWN0aW5nIHRoZSBpbnB1dCBwYXJhbWV0ZXIgJ2JEZXRlcm1pbmluZydcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucyhlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBiRGV0ZXJtaW5pbmc6IGJvb2xlYW4pOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1tdIHtcblx0cmV0dXJuIChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSWRlbnRpZmljYXRpb24/LmZpbHRlcihpZGVudGlmaWNhdGlvbkRhdGFGaWVsZCA9PiB7XG5cdFx0aWYgKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIiAmJlxuXHRcdFx0XHQhIWlkZW50aWZpY2F0aW9uRGF0YUZpZWxkLkRldGVybWluaW5nID09PSBiRGV0ZXJtaW5pbmcgJiZcblx0XHRcdFx0KCFpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kIHx8XG5cdFx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbGwgdGhlIElCTiBhY3Rpb25zIGZvciB0aGUgaWRlbnRpZmljYXRpb24gYW5ub3RhdGlvbi5cbiAqIFRoZXkgbXVzdCBiZVxuICogLSBOb3Qgc3RhdGljYWxseSBoaWRkZW4uXG4gKlxuICogQHBhcmFtIHtFbnRpdHlUeXBlfSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eXR5cGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYkRldGVybWluaW5nIFdoZXRoZXIgb3Igbm90IHRoZSBhY3Rpb24gc2hvdWxkIGJlIGRldGVybWluaW5nXG4gKiBAcmV0dXJucyB7RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXX0gQW4gYXJyYXkgb2YgZGF0YWZpZWxkIGZvciBhY3Rpb24gcmVzcGVjdGluZyB0aGUgYkRldGVybWluaW5nIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvcklCTkFjdGlvbnMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgYkRldGVybWluaW5nOiBib29sZWFuKTogRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXSB7XG5cdHJldHVybiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LklkZW50aWZpY2F0aW9uPy5maWx0ZXIoaWRlbnRpZmljYXRpb25EYXRhRmllbGQgPT4ge1xuXHRcdGlmIChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIgJiZcblx0XHRcdFx0ISFpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC5EZXRlcm1pbmluZyA9PT0gYkRldGVybWluaW5nXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXTtcbn1cblxuY29uc3QgSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMgPSBbXG5cdFwiVUkuQ3JpdGljYWxpdHlUeXBlL1ZlcnlQb3NpdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9Qb3NpdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9OZWdhdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9WZXJ5TmVnYXRpdmVcIlxuXTtcblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAndmlzaWJsZScgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB7UHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj4gfCB1bmRlZmluZWR9IGRlbGV0ZUhpZGRlbiBUaGUgdmFsdWUgb2YgdGhlIFVJLkRlbGV0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIHRoZSBlbnRpdHkgc2V0IC8gdHlwZS5cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSBEZWxldGUgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlQnV0dG9uVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZGVsZXRlSGlkZGVuOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPiB8IHVuZGVmaW5lZFxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5tYXAobmF2UHJvcCA9PiBuYXZQcm9wLm5hbWUpLFxuXHRcdC8vIFNldCBhYnNvbHV0ZSBiaW5kaW5nIHBhdGggZm9yIFNpbmdsZXRvbiByZWZlcmVuY2VzLCBvdGhlcndpc2UgdGhlIGNvbmZpZ3VyZWQgYW5ub3RhdGlvbiBwYXRoIGl0c2VsZi5cblx0XHQvLyBGb3IgZS5nLiAvY29tLnNhcC5uYW1lc3BhY2UuRW50aXR5Q29udGFpbmVyL1NpbmdsZXRvbi9Qcm9wZXJ0eSB0byAvU2luZ2xldG9uL1Byb3BlcnR5XG5cdFx0ZGVsZXRlSGlkZGVuRXhwcmVzc2lvbjogRXhwcmVzc2lvbjxib29sZWFuIHwgdW5kZWZpbmVkPiA9IGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0ZGVsZXRlSGlkZGVuLFxuXHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdChwYXRoOiBzdHJpbmcpID0+IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdFx0KSxcblx0XHRtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLFxuXHRcdHZpZXdMZXZlbCA9IG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3TGV2ZWwoKSxcblx0XHQvLyBEZWxldGUgYnV0dG9uIGlzIHZpc2libGVcblx0XHQvLyBJbiBPUCBcdFx0LS0+ICB3aGVuIG5vdCBpbiBlZGl0IG1vZGVcblx0XHQvLyBJbiBzdWItT1AgXHQtLT4gIHdoZW4gaW4gZWRpdCBtb2RlXG5cdFx0ZWRpdGFibGVFeHByZXNzaW9uOiBFeHByZXNzaW9uPGJvb2xlYW4+ID0gdmlld0xldmVsID4gMSA/IFVJLklzRWRpdGFibGUgOiBub3QoVUkuSXNFZGl0YWJsZSk7XG5cblx0Ly8gSWYgVUkuRGVsZXRlSGlkZGVuIGFubm90YXRpb24gb24gZW50aXR5IHNldCBvciB0eXBlIGlzIGVpdGhlciBub3QgZGVmaW5lZCBvciBleHBsaWNpdGx5IHNldCB0byBmYWxzZSxcblx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGVkaXRhYmxlRXhwcmVzc2lvbi5cblx0Ly8gZWxzZSxcblx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGJvdGggYW5ub3RhdGlvbiBwYXRoIGFuZCBlZGl0YWJsZUV4cHJlc3Npb24uXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0ZGVsZXRlSGlkZGVuID09PSB1bmRlZmluZWQgfHwgZGVsZXRlSGlkZGVuLnZhbHVlT2YoKSA9PT0gZmFsc2UsXG5cdFx0ZWRpdGFibGVFeHByZXNzaW9uLFxuXHRcdGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGVxdWFsKGRlbGV0ZUhpZGRlbkV4cHJlc3Npb24sIGZhbHNlKSlcblx0KTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPnx1bmRlZmluZWR9IGlzRGVsZXRhYmxlIFRoZSBkZWxldGUgcmVzdHJpY3Rpb24gY29uZmlndXJlZFxuICogQHBhcmFtIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBpc1BhcmVudERlbGV0YWJsZSBUaGUgZGVsZXRlIHJlc3RyaWN0aW9uIGNvbmZpZ3VyZWQgb24gdGhlIHBhcmVudCBlbnRpdHlcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBEZWxldGUgYnV0dG9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVCdXR0b25FbmFibGVkKFxuXHRpc0RlbGV0YWJsZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Qm9vbGVhbj4gfCB1bmRlZmluZWQsXG5cdGlzUGFyZW50RGVsZXRhYmxlOiBFeHByZXNzaW9uPGJvb2xlYW4+XG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGlmRWxzZShcblx0XHRpc1BhcmVudERlbGV0YWJsZSAhPT0gdW5kZWZpbmVkLFxuXHRcdGlzUGFyZW50RGVsZXRhYmxlLFxuXHRcdGlmRWxzZShpc0RlbGV0YWJsZSAhPT0gdW5kZWZpbmVkLCBlcXVhbChpc0RlbGV0YWJsZSwgdHJ1ZSksIGNvbnN0YW50KHRydWUpKVxuXHQpO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBkZXRlcm1pbmUgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBiaW5kaW5nIGZvciB0aGUgRWRpdCBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB7UHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj4gfCB1bmRlZmluZWR9IHVwZGF0ZUhpZGRlbiBUaGUgdmFsdWUgb2YgdGhlIFVJLlVwZGF0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIHRoZSBlbnRpdHkgc2V0IC8gdHlwZS5cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSBFZGl0IGJ1dHRvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRCdXR0b25WaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR1cGRhdGVIaWRkZW46IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+IHwgdW5kZWZpbmVkXG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSxcblx0XHRiSXNEcmFmdFJvb3QgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ID8gdHJ1ZSA6IGZhbHNlLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5tYXAobmF2UHJvcCA9PiBuYXZQcm9wLm5hbWUpLFxuXHRcdC8vIFNldCBhYnNvbHV0ZSBiaW5kaW5nIHBhdGggZm9yIFNpbmdsZXRvbiByZWZlcmVuY2VzLCBvdGhlcndpc2UgdGhlIGNvbmZpZ3VyZWQgYW5ub3RhdGlvbiBwYXRoIGl0c2VsZi5cblx0XHQvLyBGb3IgZS5nLiAvY29tLnNhcC5uYW1lc3BhY2UuRW50aXR5Q29udGFpbmVyL1NpbmdsZXRvbi9Qcm9wZXJ0eSB0byAvU2luZ2xldG9uL1Byb3BlcnR5XG5cdFx0dXBkYXRlSGlkZGVuRXhwcmVzc2lvbjogRXhwcmVzc2lvbjxib29sZWFuIHwgdW5kZWZpbmVkPiA9IGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0dXBkYXRlSGlkZGVuLFxuXHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdChwYXRoOiBzdHJpbmcpID0+IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocylcblx0XHQpLFxuXHRcdG5vdEVkaXRhYmxlRXhwcmVzc2lvbjogRXhwcmVzc2lvbjxib29sZWFuPiA9IG5vdChVSS5Jc0VkaXRhYmxlKTtcblxuXHQvLyBJZiBVSS5VcGRhdGVIaWRkZW4gYW5ub3RhdGlvbiBvbiBlbnRpdHkgc2V0IG9yIHR5cGUgaXMgZWl0aGVyIG5vdCBkZWZpbmVkIG9yIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLFxuXHQvLyBFZGl0IGJ1dHRvbiBpcyB2aXNpYmxlIGluIGRpc3BsYXkgbW9kZS5cblx0Ly8gZWxzZSxcblx0Ly8gRWRpdCBidXR0b24gaXMgdmlzaWJsZSBiYXNlZCBvbiBib3RoIGFubm90YXRpb24gcGF0aCBhbmQgaW4gZGlzcGxheSBtb2RlLlxuXHRjb25zdCByZXN1bHRhbnRFeHByZXNzaW9uOiBFeHByZXNzaW9uPGJvb2xlYW4+ID0gaWZFbHNlKFxuXHRcdHVwZGF0ZUhpZGRlbiA9PT0gdW5kZWZpbmVkIHx8IHVwZGF0ZUhpZGRlbi52YWx1ZU9mKCkgPT09IGZhbHNlLFxuXHRcdG5vdEVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRhbmQobm90RWRpdGFibGVFeHByZXNzaW9uLCBlcXVhbCh1cGRhdGVIaWRkZW5FeHByZXNzaW9uLCBmYWxzZSkpXG5cdCk7XG5cdHJldHVybiBpZkVsc2UoYklzRHJhZnRSb290LCBhbmQocmVzdWx0YW50RXhwcmVzc2lvbiwgRHJhZnQuSGFzTm9EcmFmdEZvckN1cnJlbnRVc2VyKSwgcmVzdWx0YW50RXhwcmVzc2lvbik7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBFZGl0IGJ1dHRvbiBvbiBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvbkVuYWJsZWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSxcblx0XHRpc0RyYWZ0Um9vdCA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgPyB0cnVlIDogZmFsc2UsXG5cdFx0aXNTdGlja3kgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zLlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0bGV0IGVkaXRBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChpc0RyYWZ0Um9vdCkge1xuXHRcdGVkaXRBY3Rpb25OYW1lID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdD8uRWRpdEFjdGlvbiBhcyBzdHJpbmc7XG5cdH0gZWxzZSBpZiAoaXNTdGlja3kpIHtcblx0XHRlZGl0QWN0aW9uTmFtZSA9IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uRWRpdEFjdGlvbiBhcyBzdHJpbmc7XG5cdH1cblx0aWYgKGVkaXRBY3Rpb25OYW1lKSB7XG5cdFx0Y29uc3QgZWRpdEFjdGlvbkFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGVkaXRBY3Rpb25OYW1lIGFzIHN0cmluZyksXG5cdFx0XHRlZGl0QWN0aW9ucyA9IChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGVkaXRBY3Rpb25Bbm5vdGF0aW9uUGF0aCk/LmFubm90YXRpb24gYXMgYW55KT8uYWN0aW9ucztcblx0XHRpZiAoZWRpdEFjdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgZWRpdEFjdGlvbiA9IGVkaXRBY3Rpb25zWzBdO1xuXHRcdFx0aWYgKGVkaXRBY3Rpb24/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIFwiez0gJHsjXCIgKyBlZGl0QWN0aW9uTmFtZSArIFwifSA/IHRydWUgOiBmYWxzZSB9XCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZWRpdEFjdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7QmFzZUFjdGlvbltdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0ZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdG9TdGlja3lTZXNzaW9uU3VwcG9ydGVkID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucz8uU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCwgLy9mb3Igc3RpY2t5IGFwcFxuXHRcdG9EcmFmdFJvb3QgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290LFxuXHRcdG9FbnRpdHlEZWxldGVSZXN0cmljdGlvbnMgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/LkRlbGV0ZVJlc3RyaWN0aW9ucyxcblx0XHRiVXBkYXRlSGlkZGVuID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuPy52YWx1ZU9mKCksXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGRhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIG5hdmlnYXRpb25QYXRocylcblx0XHR9KSxcblx0XHRiUGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlQmluZGluZyhpc1BhcmVudERlbGV0YWJsZSkgOiBpc1BhcmVudERlbGV0YWJsZSxcblx0XHRoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zID0gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBmYWxzZSk7XG5cblx0Ly8gRmlyc3QgYWRkIHRoZSBcIkNyaXRpY2FsXCIgRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zXG5cdFx0LmZpbHRlcihkYXRhRmllbGQgPT4ge1xuXHRcdFx0cmV0dXJuIElNUE9SVEFOVF9DUklUSUNBTElUSUVTLmluZGV4T2YoZGF0YUZpZWxkPy5Dcml0aWNhbGl0eSBhcyBzdHJpbmcpID4gLTE7XG5cdFx0fSlcblx0XHQubWFwKGRhdGFGaWVsZCA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSkpLFxuXHRcdFx0XHRlbmFibGVkOiBnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWVcblx0XHRcdH07XG5cdFx0fSk7XG5cblx0Ly8gVGhlbiB0aGUgZWRpdCBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmICgob0RyYWZ0Um9vdD8uRWRpdEFjdGlvbiB8fCBvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uRWRpdEFjdGlvbikgJiYgYlVwZGF0ZUhpZGRlbiAhPT0gdHJ1ZSkge1xuXHRcdGNvbnN0IHVwZGF0ZUhpZGRlbiA9IChlbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW4/LnZhbHVlT2YoKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlblxuXHRcdFx0OiBlbnRpdHlUeXBlPy5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuKSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPjtcblx0XHRoZWFkZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5QcmltYXJ5LFxuXHRcdFx0a2V5OiBcIkVkaXRBY3Rpb25cIixcblx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKGdldEVkaXRCdXR0b25WaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHVwZGF0ZUhpZGRlbikpLFxuXHRcdFx0ZW5hYmxlZDogZ2V0RWRpdEJ1dHRvbkVuYWJsZWQoY29udmVydGVyQ29udGV4dClcblx0XHR9KTtcblx0fVxuXHQvLyBUaGVuIHRoZSBkZWxldGUgYWN0aW9uIGlmIHdlJ3JlIG5vdCBzdGF0aWNhbGx5IG5vdCBkZWxldGFibGVcblx0aWYgKFxuXHRcdChiUGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICYmIGJQYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIikgfHxcblx0XHQob0VudGl0eURlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlPy52YWx1ZU9mKCkgIT09IGZhbHNlICYmIGJQYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIilcblx0KSB7XG5cdFx0Y29uc3QgZGVsZXRlSGlkZGVuID0gKGVudGl0eVNldD8uYW5ub3RhdGlvbnMuVUk/LkRlbGV0ZUhpZGRlbj8udmFsdWVPZigpICE9PSB1bmRlZmluZWRcblx0XHRcdD8gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uRGVsZXRlSGlkZGVuXG5cdFx0XHQ6IGVudGl0eVR5cGU/LmFubm90YXRpb25zLlVJPy5EZWxldGVIaWRkZW4pIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+O1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLlNlY29uZGFyeSxcblx0XHRcdGtleTogXCJEZWxldGVBY3Rpb25cIixcblx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKGdldERlbGV0ZUJ1dHRvblZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgZGVsZXRlSGlkZGVuKSksXG5cdFx0XHRlbmFibGVkOiBjb21waWxlQmluZGluZyhnZXREZWxldGVCdXR0b25FbmFibGVkKG9FbnRpdHlEZWxldGVSZXN0cmljdGlvbnM/LkRlbGV0YWJsZSwgaXNQYXJlbnREZWxldGFibGUpKSxcblx0XHRcdHBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQ6IGJQYXJlbnRFbnRpdHlTZXREZWxldGFibGVcblx0XHR9KTtcblx0fVxuXG5cdGlmIChvRHJhZnRSb290Py5FZGl0QWN0aW9uICYmIGJVcGRhdGVIaWRkZW4gIT09IHRydWUpIHtcblx0XHRoZWFkZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLlN3aXRjaFRvQWN0aXZlT2JqZWN0LCBrZXk6IFwiU3dpdGNoVG9BY3RpdmVPYmplY3RcIiB9KTtcblx0XHRoZWFkZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLlN3aXRjaFRvRHJhZnRPYmplY3QsIGtleTogXCJTd2l0Y2hUb0RyYWZ0T2JqZWN0XCIgfSk7XG5cdH1cblxuXHRjb25zdCBoZWFkZXJEYXRhRmllbGRGb3JJQk5BY3Rpb25zID0gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBmYWxzZSk7XG5cblx0aGVhZGVyRGF0YUZpZWxkRm9ySUJOQWN0aW9uc1xuXHRcdC5maWx0ZXIoZGF0YUZpZWxkID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA9PT0gLTE7XG5cdFx0fSlcblx0XHQuZm9yRWFjaChkYXRhRmllbGQgPT4ge1xuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25QYXJhbXMgPSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogZGF0YUZpZWxkLk1hcHBpbmcgPyBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcoZGF0YUZpZWxkLk1hcHBpbmcpIDogW11cblx0XHRcdH07XG5cblx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0Py52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUmVxdWlyZXNDb250ZXh0IHByb3BlcnR5IHNob3VsZCBub3QgYmUgdHJ1ZSBmb3IgaGVhZGVyIElCTiBhY3Rpb24gOiBcIiArIGRhdGFGaWVsZC5MYWJlbCk7XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC5JbmxpbmU/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbmxpbmUgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB0cnVlIGZvciBoZWFkZXIgSUJOIGFjdGlvbiA6IFwiICsgZGF0YUZpZWxkLkxhYmVsKTtcblx0XHRcdH1cblx0XHRcdGhlYWRlckFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGJ1dHRvblR5cGU6IEJ1dHRvblR5cGUuR2hvc3QsXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSksIHRydWUpKSksXG5cdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0ZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0PyBjb21waWxlQmluZGluZyhlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0XHQ6IHRydWUsXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZSxcblx0XHRcdFx0cHJlc3M6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdGZuKFwiLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVcIiwgW1xuXHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5BY3Rpb24pLFxuXHRcdFx0XHRcdFx0b05hdmlnYXRpb25QYXJhbXNcblx0XHRcdFx0XHRdKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRjdXN0b21EYXRhOiBjb21waWxlQmluZGluZyh7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0YWN0aW9uOiBhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuQWN0aW9uKVxuXHRcdFx0XHR9KVxuXHRcdFx0fSBhcyBBbm5vdGF0aW9uQWN0aW9uKTtcblx0XHR9KTtcblx0Ly8gRmluYWxseSB0aGUgbm9uIGNyaXRpY2FsIERhdGFGaWVsZEZvckFjdGlvbnNcblx0aGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRcdC5maWx0ZXIoZGF0YUZpZWxkID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA9PT0gLTE7XG5cdFx0fSlcblx0XHQuZm9yRWFjaChkYXRhRmllbGQgPT4ge1xuXHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb24pO1xuXHRcdH0pO1xuXG5cdHJldHVybiBoZWFkZXJBY3Rpb25zO1xufVxuXG4vKipcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7QmFzZUFjdGlvbltdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBoaWRkZW5BY3Rpb25zID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbj8uZmlsdGVyKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkID0+IHtcblx0XHRyZXR1cm4gaWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWU7XG5cdH0pIHx8IFtdKSBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1tdO1xuXHRyZXR1cm4gaGlkZGVuQWN0aW9ucy5tYXAoZGF0YUZpZWxkID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZClcblx0XHR9O1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdmlld0xldmVsXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge0Jhc2VBY3Rpb25bXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvb3RlckRlZmF1bHRBY3Rpb25zKHZpZXdMZXZlbDogbnVtYmVyLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQsIC8vZm9yIHN0aWNreSBhcHBcblx0XHRzRW50aXR5U2V0RHJhZnRSb290ID1cblx0XHRcdGVudGl0eVNldCAmJiAoZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290Py50ZXJtIHx8IGVudGl0eVNldC5hbm5vdGF0aW9ucz8uU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8udGVybSksXG5cdFx0YkNvbmRpdGlvblNhdmUgPVxuXHRcdFx0c0VudGl0eVNldERyYWZ0Um9vdCA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCIgfHxcblx0XHRcdChvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCAmJiBvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uU2F2ZUFjdGlvbiksXG5cdFx0YkNvbmRpdGlvbkFwcGx5ID0gdmlld0xldmVsID4gMSxcblx0XHRiQ29uZGl0aW9uQ2FuY2VsID1cblx0XHRcdHNFbnRpdHlTZXREcmFmdFJvb3QgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiIHx8XG5cdFx0XHQob1N0aWNreVNlc3Npb25TdXBwb3J0ZWQgJiYgb1N0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LkRpc2NhcmRBY3Rpb24pO1xuXG5cdC8vIFJldHJpZXZlIGFsbCBkZXRlcm1pbmluZyBhY3Rpb25zXG5cdGNvbnN0IGZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnMgPSBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIHRydWUpO1xuXG5cdC8vIEZpcnN0IGFkZCB0aGUgXCJDcml0aWNhbFwiIERhdGFGaWVsZEZvckFjdGlvbnNcblx0Y29uc3QgZm9vdGVyQWN0aW9uczogQmFzZUFjdGlvbltdID0gZm9vdGVyRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRcdC5maWx0ZXIoZGF0YUZpZWxkID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA+IC0xO1xuXHRcdH0pXG5cdFx0Lm1hcChkYXRhRmllbGQgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH0pO1xuXG5cdC8vIFRoZW4gdGhlIHNhdmUgYWN0aW9uIGlmIGl0IGV4aXN0c1xuXHRpZiAoZW50aXR5U2V0Py5lbnRpdHlUeXBlTmFtZSA9PT0gZW50aXR5VHlwZT8uZnVsbHlRdWFsaWZpZWROYW1lICYmIGJDb25kaXRpb25TYXZlKSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHsgdHlwZTogQWN0aW9uVHlwZS5QcmltYXJ5LCBrZXk6IFwiU2F2ZUFjdGlvblwiIH0pO1xuXHR9XG5cblx0Ly8gVGhlbiB0aGUgYXBwbHkgYWN0aW9uIGlmIGl0IGV4aXN0c1xuXHRpZiAoYkNvbmRpdGlvbkFwcGx5KSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHsgdHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0QXBwbHksIGtleTogXCJBcHBseUFjdGlvblwiIH0pO1xuXHR9XG5cblx0Ly8gVGhlbiB0aGUgbm9uIGNyaXRpY2FsIERhdGFGaWVsZEZvckFjdGlvbnNcblx0Zm9vdGVyRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRcdC5maWx0ZXIoZGF0YUZpZWxkID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA9PT0gLTE7XG5cdFx0fSlcblx0XHQuZm9yRWFjaChkYXRhRmllbGQgPT4ge1xuXHRcdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb24pO1xuXHRcdH0pO1xuXG5cdC8vIFRoZW4gdGhlIGNhbmNlbCBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmIChiQ29uZGl0aW9uQ2FuY2VsKSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuU2Vjb25kYXJ5LFxuXHRcdFx0a2V5OiBcIkNhbmNlbEFjdGlvblwiLFxuXHRcdFx0cG9zaXRpb246IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuRW5kIH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZm9vdGVyQWN0aW9ucztcbn1cbiJdfQ==
@@ -56,6 +56,7 @@ export function getIdentificationDataFieldForActions(entityType: EntityType, bDe
56
56
  * Retrieve all the IBN actions for the identification annotation.
57
57
  * They must be
58
58
  * - Not statically hidden.
59
+ *
59
60
  * @param {EntityType} entityType The current entitytype
60
61
  * @param {boolean} bDetermining Whether or not the action should be determining
61
62
  * @returns {DataFieldForIntentBasedNavigationTypes[]} An array of datafield for action respecting the bDetermining property.
@@ -101,7 +102,7 @@ export function getDeleteButtonVisibility(
101
102
  deleteHidden,
102
103
  visitedNavigationPaths,
103
104
  undefined,
104
- (path: string) => singletonPathVisitor(path, converterContext, [])
105
+ (path: string) => singletonPathVisitor(path, converterContext.getConvertedTypes(), [])
105
106
  ),
106
107
  manifestWrapper = converterContext.getManifestWrapper(),
107
108
  viewLevel = manifestWrapper.getViewLevel(),
@@ -160,7 +161,7 @@ export function getEditButtonVisibility(
160
161
  updateHidden,
161
162
  visitedNavigationPaths,
162
163
  undefined,
163
- (path: string) => singletonPathVisitor(path, converterContext, visitedNavigationPaths)
164
+ (path: string) => singletonPathVisitor(path, converterContext.getConvertedTypes(), visitedNavigationPaths)
164
165
  ),
165
166
  notEditableExpression: Expression<boolean> = not(UI.IsEditable);
166
167
 
@@ -208,6 +209,10 @@ export function getEditButtonEnabled(converterContext: ConverterContext): Bindin
208
209
  return true;
209
210
  }
210
211
 
212
+ /**
213
+ * @param converterContext
214
+ * @returns {BaseAction[]}
215
+ */
211
216
  export function getHeaderDefaultActions(converterContext: ConverterContext): BaseAction[] {
212
217
  const entitySet = converterContext.getEntitySet(),
213
218
  entityType = converterContext.getEntityType(),
@@ -216,7 +221,10 @@ export function getHeaderDefaultActions(converterContext: ConverterContext): Bas
216
221
  oEntityDeleteRestrictions = entitySet && entitySet.annotations?.Capabilities?.DeleteRestrictions,
217
222
  bUpdateHidden = entitySet && entitySet.annotations.UI?.UpdateHidden?.valueOf(),
218
223
  dataModelObjectPath = converterContext.getDataModelObjectPath(),
219
- isParentDeletable = isPathDeletable(dataModelObjectPath),
224
+ isParentDeletable = isPathDeletable(dataModelObjectPath, {
225
+ pathVisitor: (path: string, navigationPaths: string[]) =>
226
+ singletonPathVisitor(path, converterContext.getConvertedTypes(), navigationPaths)
227
+ }),
220
228
  bParentEntitySetDeletable = isParentDeletable ? compileBinding(isParentDeletable) : isParentDeletable,
221
229
  headerDataFieldForActions = getIdentificationDataFieldForActions(converterContext.getEntityType(), false);
222
230
 
@@ -276,7 +284,7 @@ export function getHeaderDefaultActions(converterContext: ConverterContext): Bas
276
284
  .filter(dataField => {
277
285
  return IMPORTANT_CRITICALITIES.indexOf(dataField?.Criticality as string) === -1;
278
286
  })
279
- .map(dataField => {
287
+ .forEach(dataField => {
280
288
  const oNavigationParams = {
281
289
  semanticObjectMapping: dataField.Mapping ? getSemanticObjectMapping(dataField.Mapping) : []
282
290
  };
@@ -316,7 +324,7 @@ export function getHeaderDefaultActions(converterContext: ConverterContext): Bas
316
324
  .filter(dataField => {
317
325
  return IMPORTANT_CRITICALITIES.indexOf(dataField?.Criticality as string) === -1;
318
326
  })
319
- .map(dataField => {
327
+ .forEach(dataField => {
320
328
  headerActions.push({
321
329
  type: ActionType.DataFieldForAction,
322
330
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
@@ -330,6 +338,10 @@ export function getHeaderDefaultActions(converterContext: ConverterContext): Bas
330
338
  return headerActions;
331
339
  }
332
340
 
341
+ /**
342
+ * @param converterContext
343
+ * @returns {BaseAction[]}
344
+ */
333
345
  export function getHiddenHeaderActions(converterContext: ConverterContext): BaseAction[] {
334
346
  const entityType = converterContext.getEntityType();
335
347
  const hiddenActions = (entityType.annotations?.UI?.Identification?.filter(identificationDataField => {
@@ -343,6 +355,11 @@ export function getHiddenHeaderActions(converterContext: ConverterContext): Base
343
355
  });
344
356
  }
345
357
 
358
+ /**
359
+ * @param viewLevel
360
+ * @param converterContext
361
+ * @returns {BaseAction[]}
362
+ */
346
363
  export function getFooterDefaultActions(viewLevel: number, converterContext: ConverterContext): BaseAction[] {
347
364
  const entitySet = converterContext.getEntitySet();
348
365
  const entityType = converterContext.getEntityType();
@@ -391,7 +408,7 @@ export function getFooterDefaultActions(viewLevel: number, converterContext: Con
391
408
  .filter(dataField => {
392
409
  return IMPORTANT_CRITICALITIES.indexOf(dataField?.Criticality as string) === -1;
393
410
  })
394
- .map(dataField => {
411
+ .forEach(dataField => {
395
412
  footerActions.push({
396
413
  type: ActionType.DataFieldForAction,
397
414
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),