@sapui5/sap.fe.core 1.124.2 → 1.126.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 (300) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +5 -1
  3. package/src/sap/fe/core/ActionRuntime.js +2 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +4 -4
  5. package/src/sap/fe/core/AppComponent.js +2 -2
  6. package/src/sap/fe/core/AppComponent.ts +1 -1
  7. package/src/sap/fe/core/AppStateHandler.js +2 -2
  8. package/src/sap/fe/core/AppStateHandler.ts +1 -1
  9. package/src/sap/fe/core/BaseController.js +2 -2
  10. package/src/sap/fe/core/BaseController.ts +1 -1
  11. package/src/sap/fe/core/CommonUtils.js +3 -3
  12. package/src/sap/fe/core/CommonUtils.ts +12 -15
  13. package/src/sap/fe/core/ExtensionAPI.js +2 -2
  14. package/src/sap/fe/core/ExtensionAPI.ts +4 -3
  15. package/src/sap/fe/core/PageController.js +2 -2
  16. package/src/sap/fe/core/PageController.ts +1 -1
  17. package/src/sap/fe/core/ResourceModel.js +2 -2
  18. package/src/sap/fe/core/ResourceModel.ts +1 -1
  19. package/src/sap/fe/core/ReuseComponent.js +172 -0
  20. package/src/sap/fe/core/ReuseComponent.ts +165 -0
  21. package/src/sap/fe/core/TemplateComponent.js +2 -2
  22. package/src/sap/fe/core/TemplateComponent.ts +5 -1
  23. package/src/sap/fe/core/TemplateModel.js +2 -2
  24. package/src/sap/fe/core/TemplateModel.ts +1 -1
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +92 -6
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +90 -10
  27. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  28. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -1
  29. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +30 -3
  30. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +28 -4
  31. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +10 -16
  32. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +19 -16
  33. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +3 -3
  34. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +5 -5
  35. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +2 -2
  36. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +1 -1
  37. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +17 -5
  38. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +14 -6
  39. package/src/sap/fe/core/controllerextensions/ContextSharing.js +2 -2
  40. package/src/sap/fe/core/controllerextensions/ContextSharing.ts +1 -1
  41. package/src/sap/fe/core/controllerextensions/EditFlow.js +57 -43
  42. package/src/sap/fe/core/controllerextensions/EditFlow.ts +61 -46
  43. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
  44. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -1
  45. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -11
  46. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +8 -16
  47. package/src/sap/fe/core/controllerextensions/InternalRouting.js +10 -7
  48. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +5 -5
  49. package/src/sap/fe/core/controllerextensions/KPIManagement.js +22 -18
  50. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +28 -23
  51. package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +4 -1
  53. package/src/sap/fe/core/controllerextensions/PageReady.js +21 -15
  54. package/src/sap/fe/core/controllerextensions/PageReady.ts +29 -20
  55. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  56. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  57. package/src/sap/fe/core/controllerextensions/Placeholder.js +12 -6
  58. package/src/sap/fe/core/controllerextensions/Placeholder.ts +15 -1
  59. package/src/sap/fe/core/controllerextensions/Recommendations.js +26 -8
  60. package/src/sap/fe/core/controllerextensions/Recommendations.ts +29 -3
  61. package/src/sap/fe/core/controllerextensions/Routing.js +5 -7
  62. package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
  63. package/src/sap/fe/core/controllerextensions/Share.js +4 -4
  64. package/src/sap/fe/core/controllerextensions/Share.ts +10 -6
  65. package/src/sap/fe/core/controllerextensions/SideEffects.js +20 -5
  66. package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -2
  67. package/src/sap/fe/core/controllerextensions/Telemetry.js +2 -2
  68. package/src/sap/fe/core/controllerextensions/Telemetry.ts +1 -1
  69. package/src/sap/fe/core/controllerextensions/ViewState.js +79 -81
  70. package/src/sap/fe/core/controllerextensions/ViewState.ts +117 -105
  71. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +3 -3
  72. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +1 -1
  73. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  74. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +2 -2
  75. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +17 -8
  76. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +8 -2
  77. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
  78. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +10 -9
  79. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +15 -10
  80. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
  81. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +1 -1
  82. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +130 -158
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +240 -275
  84. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +2 -2
  85. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +1 -1
  86. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +46 -28
  87. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +60 -32
  88. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +2 -2
  89. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -1
  90. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +2 -2
  91. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +27 -3
  92. package/src/sap/fe/core/controls/CommandExecution.js +2 -2
  93. package/src/sap/fe/core/controls/CommandExecution.ts +2 -2
  94. package/src/sap/fe/core/controls/ComponentLoader.js +3 -3
  95. package/src/sap/fe/core/controls/ComponentLoader.ts +2 -2
  96. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +3 -3
  97. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +2 -2
  98. package/src/sap/fe/core/controls/EventDelegateHook.js +2 -2
  99. package/src/sap/fe/core/controls/EventDelegateHook.ts +2 -2
  100. package/src/sap/fe/core/controls/FormElementWrapper.js +51 -6
  101. package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -2
  102. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +3 -3
  103. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +3 -3
  104. package/src/sap/fe/core/converters/ConverterContext.js +4 -2
  105. package/src/sap/fe/core/converters/ConverterContext.ts +5 -2
  106. package/src/sap/fe/core/converters/ManifestSettings.js +8 -2
  107. package/src/sap/fe/core/converters/ManifestSettings.ts +25 -3
  108. package/src/sap/fe/core/converters/ManifestWrapper.js +12 -3
  109. package/src/sap/fe/core/converters/ManifestWrapper.ts +11 -1
  110. package/src/sap/fe/core/converters/MetaModelConverter.js +7 -6
  111. package/src/sap/fe/core/converters/MetaModelConverter.ts +6 -2
  112. package/src/sap/fe/core/converters/annotations/DataField.js +56 -16
  113. package/src/sap/fe/core/converters/annotations/DataField.ts +74 -25
  114. package/src/sap/fe/core/converters/common/AnnotationConverter.js +19 -18
  115. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -5
  116. package/src/sap/fe/core/converters/controls/Common/Action.ts +14 -14
  117. package/src/sap/fe/core/converters/controls/Common/Chart.js +40 -7
  118. package/src/sap/fe/core/converters/controls/Common/Chart.ts +56 -20
  119. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +8 -11
  120. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +23 -27
  121. package/src/sap/fe/core/converters/controls/Common/Form.js +10 -3
  122. package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -4
  123. package/src/sap/fe/core/converters/controls/Common/KPI.js +3 -2
  124. package/src/sap/fe/core/converters/controls/Common/KPI.ts +6 -2
  125. package/src/sap/fe/core/converters/controls/Common/Table.js +137 -48
  126. package/src/sap/fe/core/converters/controls/Common/Table.ts +174 -52
  127. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +73 -21
  128. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +91 -20
  129. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +4 -4
  130. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
  131. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +2 -2
  132. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +2 -2
  133. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -3
  134. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +1 -1
  135. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -16
  136. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +18 -17
  137. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +2 -2
  138. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +1 -1
  139. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +9 -9
  140. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +12 -12
  141. package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -7
  142. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -5
  143. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +9 -73
  144. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +4 -74
  145. package/src/sap/fe/core/designtime/AppComponent.designtime.js +5 -10
  146. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +3 -12
  147. package/src/sap/fe/core/formatters/CriticalityFormatter.js +4 -7
  148. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +3 -3
  149. package/src/sap/fe/core/formatters/FiscalFormat.js +5 -3
  150. package/src/sap/fe/core/formatters/FiscalFormat.ts +4 -2
  151. package/src/sap/fe/core/formatters/StandardFormatter.js +2 -2
  152. package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
  153. package/src/sap/fe/core/fpm/Component.js +3 -3
  154. package/src/sap/fe/core/fpm/Component.ts +3 -3
  155. package/src/sap/fe/core/fpm/manifest.json +1 -1
  156. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +2 -2
  157. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +1 -1
  158. package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
  159. package/src/sap/fe/core/helpers/BindingHelper.ts +2 -2
  160. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +2 -2
  161. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +2 -2
  162. package/src/sap/fe/core/helpers/DeleteHelper.js +7 -4
  163. package/src/sap/fe/core/helpers/DeleteHelper.ts +9 -3
  164. package/src/sap/fe/core/helpers/MetaModelFunction.js +5 -5
  165. package/src/sap/fe/core/helpers/MetaModelFunction.ts +2 -2
  166. package/src/sap/fe/core/helpers/MetaPath.js +9 -3
  167. package/src/sap/fe/core/helpers/MetaPath.ts +8 -2
  168. package/src/sap/fe/core/helpers/ModelHelper.js +149 -3
  169. package/src/sap/fe/core/helpers/ModelHelper.ts +202 -6
  170. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +3 -3
  171. package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +2 -2
  172. package/src/sap/fe/core/helpers/TitleHelper.js +4 -4
  173. package/src/sap/fe/core/helpers/TitleHelper.ts +4 -4
  174. package/src/sap/fe/core/library.js +4 -4
  175. package/src/sap/fe/core/library.ts +2 -1
  176. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +11 -3
  177. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +10 -2
  178. package/src/sap/fe/core/messagebundle.properties +8 -57
  179. package/src/sap/fe/core/messagebundle_ar.properties +2 -0
  180. package/src/sap/fe/core/messagebundle_bg.properties +2 -0
  181. package/src/sap/fe/core/messagebundle_ca.properties +2 -0
  182. package/src/sap/fe/core/messagebundle_cnr.properties +2 -0
  183. package/src/sap/fe/core/messagebundle_cs.properties +2 -0
  184. package/src/sap/fe/core/messagebundle_cy.properties +4 -2
  185. package/src/sap/fe/core/messagebundle_da.properties +2 -0
  186. package/src/sap/fe/core/messagebundle_de.properties +2 -0
  187. package/src/sap/fe/core/messagebundle_el.properties +2 -0
  188. package/src/sap/fe/core/messagebundle_en.properties +6 -57
  189. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
  190. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +3 -36
  191. package/src/sap/fe/core/messagebundle_es.properties +2 -0
  192. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
  193. package/src/sap/fe/core/messagebundle_et.properties +2 -0
  194. package/src/sap/fe/core/messagebundle_fi.properties +2 -0
  195. package/src/sap/fe/core/messagebundle_fr.properties +2 -0
  196. package/src/sap/fe/core/messagebundle_fr_CA.properties +3 -1
  197. package/src/sap/fe/core/messagebundle_hi.properties +2 -0
  198. package/src/sap/fe/core/messagebundle_hr.properties +2 -0
  199. package/src/sap/fe/core/messagebundle_hu.properties +3 -1
  200. package/src/sap/fe/core/messagebundle_id.properties +2 -0
  201. package/src/sap/fe/core/messagebundle_it.properties +2 -0
  202. package/src/sap/fe/core/messagebundle_iw.properties +3 -1
  203. package/src/sap/fe/core/messagebundle_ja.properties +2 -0
  204. package/src/sap/fe/core/messagebundle_kk.properties +2 -0
  205. package/src/sap/fe/core/messagebundle_ko.properties +2 -0
  206. package/src/sap/fe/core/messagebundle_lt.properties +2 -0
  207. package/src/sap/fe/core/messagebundle_lv.properties +2 -0
  208. package/src/sap/fe/core/messagebundle_mk.properties +2 -0
  209. package/src/sap/fe/core/messagebundle_ms.properties +2 -0
  210. package/src/sap/fe/core/messagebundle_nl.properties +2 -0
  211. package/src/sap/fe/core/messagebundle_no.properties +2 -0
  212. package/src/sap/fe/core/messagebundle_pl.properties +2 -0
  213. package/src/sap/fe/core/messagebundle_pt.properties +2 -0
  214. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
  215. package/src/sap/fe/core/messagebundle_ro.properties +2 -0
  216. package/src/sap/fe/core/messagebundle_ru.properties +2 -0
  217. package/src/sap/fe/core/messagebundle_sh.properties +64 -62
  218. package/src/sap/fe/core/messagebundle_sk.properties +2 -0
  219. package/src/sap/fe/core/messagebundle_sl.properties +2 -0
  220. package/src/sap/fe/core/messagebundle_sr.properties +2 -0
  221. package/src/sap/fe/core/messagebundle_sv.properties +2 -0
  222. package/src/sap/fe/core/messagebundle_th.properties +2 -0
  223. package/src/sap/fe/core/messagebundle_tr.properties +2 -0
  224. package/src/sap/fe/core/messagebundle_uk.properties +3 -1
  225. package/src/sap/fe/core/messagebundle_vi.properties +2 -0
  226. package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
  227. package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
  228. package/src/sap/fe/core/operationsHelper.js +3 -3
  229. package/src/sap/fe/core/operationsHelper.ts +2 -2
  230. package/src/sap/fe/core/rootView/Fcl.controller.js +3 -3
  231. package/src/sap/fe/core/rootView/Fcl.controller.ts +2 -2
  232. package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
  233. package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
  234. package/src/sap/fe/core/rootView/RootViewBaseController.js +114 -92
  235. package/src/sap/fe/core/rootView/RootViewBaseController.ts +120 -106
  236. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +2 -2
  237. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +1 -1
  238. package/src/sap/fe/core/services/NavigationServiceFactory.js +6 -4
  239. package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -3
  240. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
  241. package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -1
  242. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  243. package/src/sap/fe/core/services/ShellServicesFactory.ts +12 -2
  244. package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -2
  245. package/src/sap/fe/core/services/TelemetryServiceFactory.ts +7 -1
  246. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +16 -9
  247. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +22 -11
  248. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +2 -2
  249. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
  250. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
  251. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  252. package/src/sap/fe/core/templating/ActionHelper.js +2 -2
  253. package/src/sap/fe/core/templating/ActionHelper.ts +2 -2
  254. package/src/sap/fe/core/templating/CommonFormatters.js +2 -2
  255. package/src/sap/fe/core/templating/CommonFormatters.ts +3 -3
  256. package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
  257. package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
  258. package/src/sap/fe/core/templating/DataFieldFormatters.js +4 -4
  259. package/src/sap/fe/core/templating/DataFieldFormatters.ts +2 -2
  260. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -2
  261. package/src/sap/fe/core/templating/DataModelPathHelper.ts +2 -2
  262. package/src/sap/fe/core/templating/EntityTypeHelper.js +2 -2
  263. package/src/sap/fe/core/templating/EntityTypeHelper.ts +2 -2
  264. package/src/sap/fe/core/templating/FieldControlHelper.js +2 -2
  265. package/src/sap/fe/core/templating/FieldControlHelper.ts +2 -2
  266. package/src/sap/fe/core/templating/SemanticObjectHelper.js +2 -2
  267. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +2 -2
  268. package/src/sap/fe/core/templating/UIFormatters.js +7 -7
  269. package/src/sap/fe/core/templating/UIFormatters.ts +6 -6
  270. package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
  271. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +1 -1
  272. package/src/sap/fe/core/type/Email.js +2 -2
  273. package/src/sap/fe/core/type/Email.ts +1 -1
  274. package/src/sap/fe/core/type/FiscalDate.js +2 -2
  275. package/src/sap/fe/core/type/FiscalDate.ts +1 -1
  276. package/src/sap/fe/core/type/InputMask.js +124 -0
  277. package/src/sap/fe/core/type/InputMask.ts +131 -0
  278. package/ui5.yaml +19 -0
  279. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +0 -81
  280. package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +0 -117
  281. package/src/sap/fe/core/helpers/AnnotationEnum.js +0 -33
  282. package/src/sap/fe/core/helpers/AnnotationEnum.ts +0 -21
  283. package/src/sap/fe/core/helpers/BindingToolkit.js +0 -1813
  284. package/src/sap/fe/core/helpers/BindingToolkit.ts +0 -2450
  285. package/src/sap/fe/core/helpers/ClassSupport.js +0 -584
  286. package/src/sap/fe/core/helpers/ClassSupport.ts +0 -697
  287. package/src/sap/fe/core/jsx-runtime/Fragment.js +0 -14
  288. package/src/sap/fe/core/jsx-runtime/Fragment.ts +0 -3
  289. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +0 -93
  290. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +0 -86
  291. package/src/sap/fe/core/jsx-runtime/jsx-control.js +0 -177
  292. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +0 -197
  293. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +0 -237
  294. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +0 -246
  295. package/src/sap/fe/core/jsx-runtime/jsx.js +0 -47
  296. package/src/sap/fe/core/jsx-runtime/jsx.ts +0 -71
  297. package/src/sap/fe/core/jsx-runtime/jsxs.js +0 -10
  298. package/src/sap/fe/core/jsx-runtime/jsxs.ts +0 -3
  299. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +0 -172
  300. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +0 -194
@@ -2,19 +2,19 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/type/EDM", "../converters/MetaModelConverter"], function (IssueManager, BindingToolkit, ModelHelper, EDM, MetaModelConverter) {
5
+ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/type/EDM", "../converters/MetaModelConverter"], function (BindingToolkit, IssueManager, ModelHelper, EDM, MetaModelConverter) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
9
  var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
10
10
  var isTypeFilterable = EDM.isTypeFilterable;
11
+ var IssueSeverity = IssueManager.IssueSeverity;
12
+ var IssueCategoryType = IssueManager.IssueCategoryType;
13
+ var IssueCategory = IssueManager.IssueCategory;
11
14
  var pathInModel = BindingToolkit.pathInModel;
12
15
  var or = BindingToolkit.or;
13
16
  var not = BindingToolkit.not;
14
17
  var compileExpression = BindingToolkit.compileExpression;
15
- var IssueSeverity = IssueManager.IssueSeverity;
16
- var IssueCategoryType = IssueManager.IssueCategoryType;
17
- var IssueCategory = IssueManager.IssueCategory;
18
18
  // From FilterBar.block.ts only
19
19
  function getSearchRestrictions(fullPath, metaModel) {
20
20
  let searchRestrictions;
@@ -540,4 +540,4 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/helpe
540
540
  _exports.METAMODEL_FUNCTIONS = METAMODEL_FUNCTIONS;
541
541
  return _exports;
542
542
  }, false);
543
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRTZWFyY2hSZXN0cmljdGlvbnMiLCJmdWxsUGF0aCIsIm1ldGFNb2RlbCIsInNlYXJjaFJlc3RyaWN0aW9ucyIsIm5hdmlnYXRpb25TZWFyY2hSZXN0cmljdGlvbnMiLCJuYXZpZ2F0aW9uVGV4dCIsInNlYXJjaFJlc3RyaWN0aW9uc1Rlcm0iLCJlbnRpdHlUeXBlUGF0aFBhcnRzIiwicmVwbGFjZUFsbCIsInNwbGl0IiwiZmlsdGVyIiwiTW9kZWxIZWxwZXIiLCJmaWx0ZXJPdXROYXZQcm9wQmluZGluZyIsImVudGl0eVNldFBhdGgiLCJnZXRFbnRpdHlTZXRQYXRoIiwiZW50aXR5U2V0UGF0aFBhcnRzIiwiaXNDb250YWlubWVudCIsImdldE9iamVjdCIsImpvaW4iLCJjb250YWlubWVudE5hdlBhdGgiLCJsZW5ndGgiLCJuYXZQYXRoIiwiam9pblN0cmluZyIsInBhcmVudEVudGl0eVNldFBhdGgiLCJzbGljZSIsIm5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJNRVRBTU9ERUxfRlVOQ1RJT05TIiwiZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIlNlYXJjaFJlc3RyaWN0aW9ucyIsIm1ldGFNb2RlbENvbnRleHQiLCJuYXZpZ2F0aW9uUGF0aCIsInJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJmaW5kIiwicmVzdHJpY3RlZFByb3BlcnR5IiwiTmF2aWdhdGlvblByb3BlcnR5IiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJpc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJtZXRhbW9kZWxDb250ZXh0IiwiY29udGV4dFBhdGgiLCJpc05vdEZpbHRlcmFibGUiLCJmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzb21lIiwicHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiaXNDdXN0b21BZ2dyZWdhdGUiLCJpbnRlcmFubElzQ3VzdG9tQWdncmVnYXRlIiwiaXNBcHBseVN1cHBvcnRlZCIsImVudGl0eVNldEFubm90YXRpb25zIiwiY3VzdG9tQWdncmVnYXRlc0Fubm90YXRpb25zIiwiZ2V0QWxsQ3VzdG9tQWdncmVnYXRlcyIsImN1c3RvbUFnZ3JlZ2F0ZXMiLCJPYmplY3QiLCJrZXlzIiwidW5kZWZpbmVkIiwiaW5jbHVkZXMiLCJjaGVja0VudGl0eVNldElzRmlsdGVyYWJsZSIsIm5hdmlnYXRpb25Db250ZXh0IiwiaXNGaWx0ZXJhYmxlIiwiaXNDb250ZXh0UGF0aEZpbHRlcmFibGUiLCJwcm9wZXJ0eURhdGFUeXBlIiwiZ2V0UHJvcGVydHlEYXRhVHlwZSIsImlzVHlwZUZpbHRlcmFibGUiLCJlc1BhcnRzIiwic3BsaWNlIiwiY29udGV4dHMiLCJpc05vRmlsdGVyYWJsZSIsImNvbnRleHQiLCJpdGVtIiwiaW5kZXgiLCJhcnJheSIsImZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIm5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwidGFyZ2V0UHJvcGVydHlQYXRoIiwicHJvcGVydHlQYXRoIiwiZGF0YVR5cGUiLCJnZXRQcm9wZXJ0eSIsImFubm90YXRpb25QYXRoIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJza2lwSGlkZGVuRmlsdGVycyIsIkVycm9yIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJoaWRkZW5QYXRoIiwiaGlkZGVuRmlsdGVyUGF0aCIsImNvbXBpbGVFeHByZXNzaW9uIiwibm90Iiwib3IiLCJwYXRoSW5Nb2RlbCIsImdldENyZWF0ZVBvcHVwRmllbGRzIiwicGF0aCIsImFwcENvbXBvbmVudCIsImRhdGFNb2RlbCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJub25Db21wdXRlZFZpc2libGVLZXlzIiwiaW1tdXRhYmxlVmlzaWJsZUZpZWxkcyIsInZpc2liaWxlUmVxdWlyZWRQcm9wZXJ0aWVzIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImVudGl0eVByb3BlcnRpZXMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwicHJvcCIsImFubm90YXRpb25zIiwiaXNLZXkiLCJwcm9wTmFtZSIsIm5hbWUiLCJpc0ltbXV0YWJsZSIsIkNvcmUiLCJJbW11dGFibGUiLCJ2YWx1ZU9mIiwiaXNOb25Db21wdXRlZCIsIkNvbXB1dGVkIiwiaXNWaXNpYmxlIiwiVUkiLCJIaWRkZW4iLCJpc0NvbXB1dGVkRGVmYXVsdFZhbHVlIiwiQ29tcHV0ZWREZWZhdWx0VmFsdWUiLCJpc0tleUNvbXB1dGVkRGVmYXVsdFZhbHVlV2l0aFRleHQiLCJ0eXBlIiwiQ29tbW9uIiwiVGV4dCIsInB1c2giLCJkaWFnbm9zdGljcyIsImdldERpYWdub3N0aWNzIiwibWVzc2FnZSIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTWVkaXVtIiwiSXNzdWVDYXRlZ29yeVR5cGUiLCJBbm5vdGF0aW9ucyIsIklnbm9yZWRBbm5vdGF0aW9uIiwiY29uY2F0IiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzIiwiY2hlY2tVcGRhdGVSZXN0cmljdGlvbnMiLCJyZXF1aXJlZFByb3BlcnRpZXNXaXRoUGF0aCIsImVudGl0eVNldEFubm90YXRpb24iLCJlbmRzV2l0aCIsInJlcGxhY2UiLCJqb2luVGV4dCIsImhhc1Jlc3RyaWN0ZWRQcm9wZXJ0aWVzSW5Bbm5vdGF0aW9ucyIsIlVwZGF0ZVJlc3RyaWN0aW9ucyIsIlJlcXVpcmVkUHJvcGVydGllcyIsIkluc2VydFJlc3RyaWN0aW9ucyIsImdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21Bbm5vdGF0aW9ucyIsImZvckVhY2giLCJyZXF1aXJlZFByb3BlcnR5IiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyIsImlzTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIm5hdkFubm90YXRpb25zIiwiZW50aXR5QW5ub3RhdGlvbnMiLCJlbnRpdHl0U2V0QW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbktleSIsInN0YXJ0c1dpdGgiLCJhbm5vdGF0aW9uUGFydHMiLCJjdXN0b21BZ2dyZWdhdGUiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwibGFiZWwiLCJzb3J0YWJsZSIsInNvcnRPcmRlciIsImN1c3RvbSIsImdldFNvcnRSZXN0cmljdGlvbnNJbmZvIiwic29ydFJlc3RyaWN0aW9uc0luZm8iLCJwcm9wZXJ0eUluZm8iLCJzb3J0UmVzdHJpY3Rpb25zIiwiU29ydGFibGUiLCJwcm9wZXJ0eUl0ZW0iLCJOb25Tb3J0YWJsZVByb3BlcnRpZXMiLCJwcm9wZXJ0eU5hbWUiLCJBc2NlbmRpbmdPbmx5UHJvcGVydGllcyIsInNvcnREaXJlY3Rpb24iLCJEZXNjZW5kaW5nT25seVByb3BlcnRpZXMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNJbmZvIiwiaSIsImZpbHRlclJlc3RyaWN0aW9uc0luZm8iLCJmaWx0ZXJhYmxlIiwicmVxdWlyZXNGaWx0ZXIiLCJSZXF1aXJlc0ZpbHRlciIsIkZpbHRlcmFibGUiLCJtYXAiLCJmaWx0ZXJhYmxlUHJvcGVydGllcyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJQcm9wZXJ0eSIsImdldEZpbHRlcmFibGVEYXRhIiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiZmlsdGVyRGF0YU9iaiIsImlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24iLCJmaWx0ZXJFeHByZXNzaW9uIiwiaXNNdWx0aVZhbHVlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXRhTW9kZWxGdW5jdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgZ29hbCBvZiB0aGlzIGZpbGUgaXMgdG8gZGlzYXBwZWFyIGFzIHNvb24gYXMgd2UgY2FuLlxuLy8gSXQgaXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gdG8gbW92ZSBhbGwgbWV0YW1vZGVsIHJlbGF0ZWQgb3BlcmF0aW9uIGZyb20gQ29tbW9uVXRpbHMgdG8gYSBzZXBhcmF0ZSBmaWxlLlxuXG5pbXBvcnQgdHlwZSAqIGFzIEVkbSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpbHRlclJlc3RyaWN0aW9uc1R5cGUsXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMsXG5cdE5hdmlnYXRpb25SZXN0cmljdGlvbnNUeXBlLFxuXHRTZWFyY2hSZXN0cmljdGlvbnNUeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVDYXRlZ29yeVR5cGUsIElzc3VlU2V2ZXJpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgbm90LCBvciwgcGF0aEluTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRUeXBlRm9yRWRtVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHsgaXNUeXBlRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXhwYW5kUGF0aFR5cGUsIE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24sIE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwiLi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcblxuLy8gRnJvbSBGaWx0ZXJCYXIuYmxvY2sudHMgb25seVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaFJlc3RyaWN0aW9ucyhmdWxsUGF0aDogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogTWV0YU1vZGVsVHlwZTxTZWFyY2hSZXN0cmljdGlvbnNUeXBlPiB8IHVuZGVmaW5lZCB7XG5cdGxldCBzZWFyY2hSZXN0cmljdGlvbnM7XG5cdGxldCBuYXZpZ2F0aW9uU2VhcmNoUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGV4dCA9IFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIjtcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zVGVybSA9IFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2VhcmNoUmVzdHJpY3Rpb25zXCI7XG5cdGNvbnN0IGVudGl0eVR5cGVQYXRoUGFydHMgPSBmdWxsUGF0aC5yZXBsYWNlQWxsKFwiJTJGXCIsIFwiL1wiKS5zcGxpdChcIi9cIikuZmlsdGVyKE1vZGVsSGVscGVyLmZpbHRlck91dE5hdlByb3BCaW5kaW5nKTtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoZnVsbFBhdGgsIG1ldGFNb2RlbCk7XG5cdGNvbnN0IGVudGl0eVNldFBhdGhQYXJ0cyA9IGVudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZyk7XG5cdGNvbnN0IGlzQ29udGFpbm1lbnQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtlbnRpdHlUeXBlUGF0aFBhcnRzLmpvaW4oXCIvXCIpfS8kQ29udGFpbnNUYXJnZXRgKSA/IHRydWUgOiBmYWxzZTtcblx0Y29uc3QgY29udGFpbm1lbnROYXZQYXRoID0gaXNDb250YWlubWVudCA/IGVudGl0eVR5cGVQYXRoUGFydHNbZW50aXR5VHlwZVBhdGhQYXJ0cy5sZW5ndGggLSAxXSA6IFwiXCI7XG5cblx0Ly9MRUFTVCBQUklPUklUWSAtIFNlYXJjaCByZXN0cmljdGlvbnMgZGlyZWN0bHkgYXQgRW50aXR5IFNldFxuXHQvL2UuZy4gRlIgaW4gXCJOUy5FbnRpdHlDb250YWluZXIvU2FsZXNPcmRlck1hbmFnZVwiIENvbnRleHRQYXRoOiAvU2FsZXNPcmRlck1hbmFnZVxuXHRpZiAoIWlzQ29udGFpbm1lbnQpIHtcblx0XHRzZWFyY2hSZXN0cmljdGlvbnMgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9JHtzZWFyY2hSZXN0cmljdGlvbnNUZXJtfWApIGFzXG5cdFx0XHR8IE1ldGFNb2RlbFR5cGU8U2VhcmNoUmVzdHJpY3Rpb25zVHlwZT5cblx0XHRcdHwgdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChlbnRpdHlUeXBlUGF0aFBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRjb25zdCBuYXZQYXRoOiBzdHJpbmcgPSBpc0NvbnRhaW5tZW50ID8gY29udGFpbm1lbnROYXZQYXRoIDogZW50aXR5U2V0UGF0aFBhcnRzW2VudGl0eVNldFBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHQvLyBJbiBjYXNlIG9mIGNvbnRhaW5tZW50IHdlIHRha2UgZW50aXR5U2V0IHByb3ZpZGVkIGFzIHBhcmVudC4gQW5kIGluIGNhc2Ugb2Ygbm9ybWFsIHdlIHdvdWxkIHJlbW92ZSB0aGUgbGFzdCBuYXZpZ2F0aW9uIGZyb20gZW50aXR5U2V0UGF0aC5cblx0XHRjb25zdCBqb2luU3RyaW5nID0gYC8ke25hdmlnYXRpb25UZXh0fS9gO1xuXHRcdGNvbnN0IHBhcmVudEVudGl0eVNldFBhdGggPSBpc0NvbnRhaW5tZW50ID8gZW50aXR5U2V0UGF0aCA6IGAvJHtlbnRpdHlTZXRQYXRoUGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oam9pblN0cmluZyl9YDtcblxuXHRcdC8vSElHSEVTVCBwcmlvcml0eSAtIE5hdmlnYXRpb24gcmVzdHJpY3Rpb25zXG5cdFx0Ly9lLmcuIFBhcmVudCBcIi9DdXN0b21lclwiIHdpdGggTmF2aWdhdGlvblByb3BlcnR5UGF0aD1cIlNldFwiIENvbnRleHRQYXRoOiBDdXN0b21lci9TZXRcblx0XHRjb25zdCBuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gTUVUQU1PREVMX0ZVTkNUSU9OUy5nZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0bWV0YU1vZGVsLFxuXHRcdFx0cGFyZW50RW50aXR5U2V0UGF0aCxcblx0XHRcdG5hdlBhdGgucmVwbGFjZUFsbChcIiUyRlwiLCBcIi9cIilcblx0XHQpO1xuXHRcdG5hdmlnYXRpb25TZWFyY2hSZXN0cmljdGlvbnMgPSBuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zPy5TZWFyY2hSZXN0cmljdGlvbnM7XG5cdH1cblx0cmV0dXJuIG5hdmlnYXRpb25TZWFyY2hSZXN0cmljdGlvbnMgPz8gc2VhcmNoUmVzdHJpY3Rpb25zO1xufVxuXG4vLyBGcm9tIENvbW1vblV0aWxzXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhcblx0bWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdGVudGl0eVNldFBhdGg6IHN0cmluZyxcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZ1xuKTogTWV0YU1vZGVsVHlwZTxOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzPiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBtZXRhTW9kZWxDb250ZXh0LmdldE9iamVjdChgJHtlbnRpdHlTZXRQYXRofUBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNgKSBhc1xuXHRcdHwgTWV0YU1vZGVsVHlwZTxOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zVHlwZT5cblx0XHR8IHVuZGVmaW5lZDtcblx0Y29uc3QgcmVzdHJpY3RlZFByb3BlcnRpZXMgPSBuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zPy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0cmV0dXJuIHJlc3RyaWN0ZWRQcm9wZXJ0aWVzPy5maW5kKGZ1bmN0aW9uIChyZXN0cmljdGVkUHJvcGVydHkpIHtcblx0XHRyZXR1cm4gcmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eT8uJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IG5hdmlnYXRpb25QYXRoO1xuXHR9KTtcbn1cblxuLy8gSW50ZXJuYWwgdXNhZ2Ugb25seVxuZnVuY3Rpb24gaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG1ldGFtb2RlbENvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLCBlbnRpdHlTZXRQYXRoOiBzdHJpbmcsIGNvbnRleHRQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0bGV0IGlzTm90RmlsdGVyYWJsZSA9IGZhbHNlO1xuXHRjb25zdCBmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uID0gbWV0YW1vZGVsQ29udGV4dC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH1AT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNgKSBhc1xuXHRcdHwgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPlxuXHRcdHwgdW5kZWZpbmVkO1xuXHRpZiAoZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbj8uTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMpIHtcblx0XHRpc05vdEZpbHRlcmFibGUgPSBmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLnNvbWUoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQocHJvcGVydHkgYXMgdW5rbm93biBhcyBFeHBhbmRQYXRoVHlwZTxFZG0uTmF2aWdhdGlvblByb3BlcnR5UGF0aD4pLiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoID09PSBjb250ZXh0UGF0aCB8fFxuXHRcdFx0XHRwcm9wZXJ0eS4kUHJvcGVydHlQYXRoID09PSBjb250ZXh0UGF0aFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gaXNOb3RGaWx0ZXJhYmxlO1xufVxuXG4vLyBJbnRlcm5hbCB1c2FnZSBvbmx5XG5leHBvcnQgZnVuY3Rpb24gaXNDdXN0b21BZ2dyZWdhdGUobWV0YW1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldFBhdGg6IHN0cmluZywgY29udGV4dFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRsZXQgaW50ZXJhbmxJc0N1c3RvbUFnZ3JlZ2F0ZSA9IGZhbHNlO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXgvaW52YWxpZC13YXJuXG5cdGNvbnN0IGlzQXBwbHlTdXBwb3J0ZWQgPSBtZXRhbW9kZWxDb250ZXh0LmdldE9iamVjdChlbnRpdHlTZXRQYXRoICsgXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkXCIpID8gdHJ1ZSA6IGZhbHNlO1xuXHRpZiAoaXNBcHBseVN1cHBvcnRlZCkge1xuXHRcdGNvbnN0IGVudGl0eVNldEFubm90YXRpb25zID0gbWV0YW1vZGVsQ29udGV4dC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH1AYCkgYXMgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbjtcblx0XHRjb25zdCBjdXN0b21BZ2dyZWdhdGVzQW5ub3RhdGlvbnMgPSBNRVRBTU9ERUxfRlVOQ1RJT05TLmdldEFsbEN1c3RvbUFnZ3JlZ2F0ZXMoZW50aXR5U2V0QW5ub3RhdGlvbnMpIGFzIG9iamVjdCB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBjdXN0b21BZ2dyZWdhdGVzID0gY3VzdG9tQWdncmVnYXRlc0Fubm90YXRpb25zID8gT2JqZWN0LmtleXMoY3VzdG9tQWdncmVnYXRlc0Fubm90YXRpb25zKSA6IHVuZGVmaW5lZDtcblx0XHRpZiAoY3VzdG9tQWdncmVnYXRlcz8uaW5jbHVkZXMoY29udGV4dFBhdGgpKSB7XG5cdFx0XHRpbnRlcmFubElzQ3VzdG9tQWdncmVnYXRlID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGludGVyYW5sSXNDdXN0b21BZ2dyZWdhdGU7XG59XG5cbi8vIEludGVybmFsIHVzYWdlIG9ubHlcblxuZnVuY3Rpb24gY2hlY2tFbnRpdHlTZXRJc0ZpbHRlcmFibGUoXG5cdGVudGl0eVNldFBhdGg6IHN0cmluZyxcblx0bWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdHByb3BlcnR5OiBzdHJpbmcsXG5cdG5hdmlnYXRpb25Db250ZXh0OiBDb250ZXh0IHwgbnVsbFxuKTogYm9vbGVhbiB7XG5cdGxldCBpc0ZpbHRlcmFibGUgPVxuXHRcdGVudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpLmxlbmd0aCA9PT0gMiAmJiAhcHJvcGVydHkuaW5jbHVkZXMoXCIvXCIpXG5cdFx0XHQ/ICFpc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMobWV0YU1vZGVsQ29udGV4dCwgZW50aXR5U2V0UGF0aCwgcHJvcGVydHkpICYmXG5cdFx0XHQgICFpc0N1c3RvbUFnZ3JlZ2F0ZShtZXRhTW9kZWxDb250ZXh0LCBlbnRpdHlTZXRQYXRoLCBwcm9wZXJ0eSlcblx0XHRcdDogIWlzQ29udGV4dFBhdGhGaWx0ZXJhYmxlKG1ldGFNb2RlbENvbnRleHQsIGVudGl0eVNldFBhdGgsIHByb3BlcnR5KTtcblx0Ly8gY2hlY2sgaWYgdHlwZSBjYW4gYmUgdXNlZCBmb3IgZmlsdGVyaW5nXG5cdGlmIChpc0ZpbHRlcmFibGUgJiYgbmF2aWdhdGlvbkNvbnRleHQpIHtcblx0XHRjb25zdCBwcm9wZXJ0eURhdGFUeXBlID0gZ2V0UHJvcGVydHlEYXRhVHlwZShuYXZpZ2F0aW9uQ29udGV4dCk7XG5cdFx0aWYgKHByb3BlcnR5RGF0YVR5cGUpIHtcblx0XHRcdGlzRmlsdGVyYWJsZSA9IHByb3BlcnR5RGF0YVR5cGUgPyBpc1R5cGVGaWx0ZXJhYmxlKHByb3BlcnR5RGF0YVR5cGUgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSkgOiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aXNGaWx0ZXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpc0ZpbHRlcmFibGU7XG59XG5cbi8vIEludGVybmFsIHVzYWdlIG9ubHlcbmZ1bmN0aW9uIGlzQ29udGV4dFBhdGhGaWx0ZXJhYmxlKG1ldGFNb2RlbENvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLCBlbnRpdHlTZXRQYXRoOiBzdHJpbmcsIGNvbnRleHRQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0Y29uc3QgZnVsbFBhdGggPSBgJHtlbnRpdHlTZXRQYXRofS8ke2NvbnRleHRQYXRofWAsXG5cdFx0ZXNQYXJ0cyA9IGZ1bGxQYXRoLnNwbGl0KFwiL1wiKS5zcGxpY2UoMCwgMiksXG5cdFx0Y29udGV4dHMgPSBmdWxsUGF0aC5zcGxpdChcIi9cIikuc3BsaWNlKDIpO1xuXHRsZXQgaXNOb0ZpbHRlcmFibGUgPSBmYWxzZSxcblx0XHRjb250ZXh0ID0gXCJcIjtcblxuXHRlbnRpdHlTZXRQYXRoID0gZXNQYXJ0cy5qb2luKFwiL1wiKTtcblxuXHRpc05vRmlsdGVyYWJsZSA9IGNvbnRleHRzLnNvbWUoZnVuY3Rpb24gKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlciwgYXJyYXk6IHN0cmluZ1tdKSB7XG5cdFx0aWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29udGV4dCArPSBgLyR7aXRlbX1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZXh0ID0gaXRlbTtcblx0XHR9XG5cdFx0aWYgKGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAyKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIFwiL0N1c3RvbWVyL1NldC9Qcm9wZXJ0eVwiIHRoaXMgaXMgdG8gY2hlY2sgbmF2aWdhdGlvbiByZXN0cmljdGlvbnMgb2YgXCJDdXN0b21lclwiIGZvciBub24tZmlsdGVyYWJsZSBwcm9wZXJ0aWVzIGluIFwiU2V0XCJcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBNRVRBTU9ERUxfRlVOQ1RJT05TLmdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMobWV0YU1vZGVsQ29udGV4dCwgZW50aXR5U2V0UGF0aCwgaXRlbSk7XG5cdFx0XHRjb25zdCBmaWx0ZXJSZXN0cmljdGlvbnMgPSBuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zPy5GaWx0ZXJSZXN0cmljdGlvbnM7XG5cdFx0XHRjb25zdCBub25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IGZpbHRlclJlc3RyaWN0aW9ucz8uTm9uRmlsdGVyYWJsZVByb3BlcnRpZXM7XG5cdFx0XHRjb25zdCB0YXJnZXRQcm9wZXJ0eVBhdGggPSBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcblx0XHRcdGlmIChcblx0XHRcdFx0bm9uRmlsdGVyYWJsZVByb3BlcnRpZXM/LmZpbmQoZnVuY3Rpb24gKHByb3BlcnR5UGF0aCkge1xuXHRcdFx0XHRcdHJldHVybiBwcm9wZXJ0eVBhdGguJFByb3BlcnR5UGF0aCA9PT0gdGFyZ2V0UHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcblx0XHRcdC8vbGFzdCBwYXRoIHNlZ21lbnRcblx0XHRcdGlzTm9GaWx0ZXJhYmxlID0gaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG1ldGFNb2RlbENvbnRleHQsIGVudGl0eVNldFBhdGgsIGNvbnRleHQpO1xuXHRcdH0gZWxzZSBpZiAobWV0YU1vZGVsQ29udGV4dC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH0vJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHtpdGVtfWApKSB7XG5cdFx0XHQvL2NoZWNrIGV4aXN0aW5nIGNvbnRleHQgcGF0aCBhbmQgaW5pdGlhbGl6ZSBpdFxuXHRcdFx0aXNOb0ZpbHRlcmFibGUgPSBpc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMobWV0YU1vZGVsQ29udGV4dCwgZW50aXR5U2V0UGF0aCwgY29udGV4dCk7XG5cdFx0XHRjb250ZXh0ID0gXCJcIjtcblx0XHRcdC8vc2V0IHRoZSBuZXcgRW50aXR5U2V0XG5cdFx0XHRlbnRpdHlTZXRQYXRoID0gXCIvXCIgKyBtZXRhTW9kZWxDb250ZXh0LmdldE9iamVjdChgJHtlbnRpdHlTZXRQYXRofS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke2l0ZW19YCk7XG5cdFx0fVxuXHRcdHJldHVybiBpc05vRmlsdGVyYWJsZTtcblx0fSk7XG5cdHJldHVybiBpc05vRmlsdGVyYWJsZTtcbn1cblxuLy8gSW50ZXJuYWwgdXNhZ2Ugb25seVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eURhdGFUeXBlKG5hdmlnYXRpb25Db250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGRhdGFUeXBlID0gbmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCIkVHlwZVwiKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdC8vIGlmICRraW5kIGV4aXN0cywgaXQncyBub3QgYSBEYXRhRmllbGQgYW5kIHdlIGhhdmUgdGhlIGZpbmFsIHR5cGUgYWxyZWFkeVxuXHRpZiAoIW5hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiJGtpbmRcIikpIHtcblx0XHRzd2l0Y2ggKGRhdGFUeXBlKSB7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdGRhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhVcmxcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEFjdGlvblwiOlxuXHRcdFx0XHRkYXRhVHlwZSA9IG5hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiVmFsdWUvJFBhdGgvJFR5cGVcIikgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gbmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoXCIpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0aWYgKGFubm90YXRpb25QYXRoLmluY2x1ZGVzKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0XCIpKSB7XG5cdFx0XHRcdFx0XHRkYXRhVHlwZSA9IG5hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9mbi8kUGF0aC8kVHlwZVwiKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSkge1xuXHRcdFx0XHRcdFx0ZGF0YVR5cGUgPSBuYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIlZhbHVlLyRQYXRoLyRUeXBlXCIpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gZS5nLiBGaWVsZEdyb3VwIG9yIENoYXJ0XG5cdFx0XHRcdFx0XHRkYXRhVHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGRhdGFUeXBlO1xufVxuXG4vLyBGcm9tIENvbW1vblV0aWxzLCBDb21tb25IZWxwZXIsIEZpbHRlckJhckRlbGVnYXRlLCBGaWx0ZXJGaWVsZCwgVmFsdWVMaXN0SGVscGVyLCBUYWJsZURlbGVnYXRlXG4vLyBUT0RPIGNoZWNrIHVzZWQgcGxhY2VzIGFuZCByZXdvcmsgdGhpc1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHlGaWx0ZXJhYmxlKFxuXHRtZXRhTW9kZWxDb250ZXh0OiBPRGF0YU1ldGFNb2RlbCxcblx0ZW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRwcm9wZXJ0eTogc3RyaW5nLFxuXHRza2lwSGlkZGVuRmlsdGVycz86IGJvb2xlYW5cbik6IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmICh0eXBlb2YgcHJvcGVydHkgIT09IFwic3RyaW5nXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzUHJvcGVydHkgcGFyYW1ldGVyIG11c3QgYmUgYSBzdHJpbmdcIik7XG5cdH1cblxuXHQvLyBQYXJhbWV0ZXJzIHNob3VsZCBiZSByZW5kZXJlZCBhcyBmaWx0ZXJmaWVsZHNcblx0aWYgKG1ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjb25zdCBuYXZpZ2F0aW9uQ29udGV4dCA9IG1ldGFNb2RlbENvbnRleHQuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7ZW50aXR5U2V0UGF0aH0vJHtwcm9wZXJ0eX1gKTtcblxuXHRpZiAobmF2aWdhdGlvbkNvbnRleHQgJiYgIXNraXBIaWRkZW5GaWx0ZXJzKSB7XG5cdFx0aWYgKFxuXHRcdFx0bmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCIpID09PSB0cnVlIHx8XG5cdFx0XHRuYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXJcIikgPT09IHRydWVcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgaGlkZGVuUGF0aCA9IG5hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbi8kUGF0aFwiKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaGlkZGVuRmlsdGVyUGF0aCA9IG5hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbkZpbHRlci8kUGF0aFwiKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoaGlkZGVuUGF0aCAmJiBoaWRkZW5GaWx0ZXJQYXRoKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24obm90KG9yKHBhdGhJbk1vZGVsKGhpZGRlblBhdGgpLCBwYXRoSW5Nb2RlbChoaWRkZW5GaWx0ZXJQYXRoKSkpKTtcblx0XHR9IGVsc2UgaWYgKGhpZGRlblBhdGgpIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihub3QocGF0aEluTW9kZWwoaGlkZGVuUGF0aCkpKTtcblx0XHR9IGVsc2UgaWYgKGhpZGRlbkZpbHRlclBhdGgpIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihub3QocGF0aEluTW9kZWwoaGlkZGVuRmlsdGVyUGF0aCkpKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNoZWNrRW50aXR5U2V0SXNGaWx0ZXJhYmxlKGVudGl0eVNldFBhdGgsIG1ldGFNb2RlbENvbnRleHQsIHByb3BlcnR5LCBuYXZpZ2F0aW9uQ29udGV4dCk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIGVudGl0eSBwcm9wZXJ0aWVzIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHJlcXVpcmVkLCBub24tY29tcHV0ZWQga2V5IGFuZCBpbW11dGFibGUgZmllbGRzLlxuICogQHBhcmFtIG1ldGFNb2RlbCBNZXRhbW9kZWxcbiAqIEBwYXJhbSBwYXRoIEVudGl0eXNldCBQYXRoXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50IEFwcCBDb21wb25lbnRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHJlcXVpcmVkLCBub24tY29tcHV0ZWQga2V5IGFuZCBpbW11dGFibGUgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGVQb3B1cEZpZWxkcyhtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBwYXRoOiBzdHJpbmcsIGFwcENvbXBvbmVudD86IEFwcENvbXBvbmVudCk6IHN0cmluZ1tdIHtcblx0Y29uc3QgZGF0YU1vZGVsID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KHBhdGgpKTtcblx0Y29uc3Qgbm9uQ29tcHV0ZWRWaXNpYmxlS2V5czogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgaW1tdXRhYmxlVmlzaWJsZUZpZWxkczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgdmlzaWJpbGVSZXF1aXJlZFByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdC8vV2UgZmlyc3QgcHJvY2VzcyB0aGUgcmVxdWlyZWQgcHJvcGVydGllc1xuXHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSBNRVRBTU9ERUxfRlVOQ1RJT05TLmdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMocGF0aCwgbWV0YU1vZGVsKTtcblx0Y29uc3QgZW50aXR5UHJvcGVydGllcyA9IGRhdGFNb2RlbC50YXJnZXRFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXM7XG5cdGZvciAoY29uc3QgcHJvcCBvZiBlbnRpdHlQcm9wZXJ0aWVzKSB7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbnMgPSBwcm9wLmFubm90YXRpb25zLFxuXHRcdFx0aXNLZXkgPSBwcm9wLmlzS2V5LFxuXHRcdFx0cHJvcE5hbWUgPSBwcm9wLm5hbWUsXG5cdFx0XHRpc0ltbXV0YWJsZSA9IGFubm90YXRpb25zLkNvcmU/LkltbXV0YWJsZT8udmFsdWVPZigpID09PSB0cnVlLFxuXHRcdFx0aXNOb25Db21wdXRlZCA9ICEoYW5ub3RhdGlvbnMuQ29yZT8uQ29tcHV0ZWQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZSksXG5cdFx0XHRpc1Zpc2libGUgPSAhKGFubm90YXRpb25zLlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSksXG5cdFx0XHRpc0NvbXB1dGVkRGVmYXVsdFZhbHVlID0gYW5ub3RhdGlvbnMuQ29yZT8uQ29tcHV0ZWREZWZhdWx0VmFsdWU/LnZhbHVlT2YoKSA9PT0gdHJ1ZSxcblx0XHRcdGlzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCA9XG5cdFx0XHRcdGlzS2V5ICYmIHByb3AudHlwZSA9PT0gXCJFZG0uR3VpZFwiID8gaXNDb21wdXRlZERlZmF1bHRWYWx1ZSAmJiBhbm5vdGF0aW9ucy5Db21tb24/LlRleHQgOiBmYWxzZTtcblx0XHRpZiAoKGlzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCB8fCAoaXNLZXkgJiYgcHJvcC50eXBlICE9PSBcIkVkbS5HdWlkXCIpKSAmJiBpc05vbkNvbXB1dGVkICYmIGlzVmlzaWJsZSkge1xuXHRcdFx0bm9uQ29tcHV0ZWRWaXNpYmxlS2V5cy5wdXNoKHByb3BOYW1lKTtcblx0XHR9IGVsc2UgaWYgKHJlcXVpcmVkUHJvcGVydGllcy5pbmNsdWRlcyhwcm9wTmFtZSkgJiYgaXNWaXNpYmxlICYmICEoaXNLZXkgJiYgIW5vbkNvbXB1dGVkVmlzaWJsZUtleXMuaW5jbHVkZXMocHJvcE5hbWUpKSkge1xuXHRcdFx0dmlzaWJpbGVSZXF1aXJlZFByb3BlcnRpZXMucHVzaChwcm9wTmFtZSk7XG5cdFx0fSBlbHNlIGlmIChpc0ltbXV0YWJsZSAmJiBpc05vbkNvbXB1dGVkICYmIGlzVmlzaWJsZSkge1xuXHRcdFx0aW1tdXRhYmxlVmlzaWJsZUZpZWxkcy5wdXNoKHByb3BOYW1lKTtcblx0XHR9XG5cblx0XHRpZiAoIWlzTm9uQ29tcHV0ZWQgJiYgaXNDb21wdXRlZERlZmF1bHRWYWx1ZSAmJiBhcHBDb21wb25lbnQpIHtcblx0XHRcdGNvbnN0IGRpYWdub3N0aWNzID0gYXBwQ29tcG9uZW50LmdldERpYWdub3N0aWNzKCk7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gXCJDb3JlLkNvbXB1dGVkRGVmYXVsdFZhbHVlIGlzIGlnbm9yZWQgYXMgQ29yZS5Db21wdXRlZCBpcyBhbHJlYWR5IHNldCB0byB0cnVlXCI7XG5cdFx0XHRkaWFnbm9zdGljcy5hZGRJc3N1ZShcblx0XHRcdFx0SXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRJc3N1ZVNldmVyaXR5Lk1lZGl1bSxcblx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUsXG5cdFx0XHRcdElzc3VlQ2F0ZWdvcnlUeXBlLkFubm90YXRpb25zLklnbm9yZWRBbm5vdGF0aW9uXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHQvL1RoZSBvcmRlciBvZiBmaWVsZHMgd2lsbCBiZSBub24gY29tcHV0ZWQga2V5IGZpZWxkcywgcmVxdWlyZWQgcHJvcGVydGllcyBhbmQgdGhlbiBub24gY29tcHV0ZWQgaW1tdXRhYmxlIGZpZWxkcy5cblx0cmV0dXJuIG5vbkNvbXB1dGVkVmlzaWJsZUtleXMuY29uY2F0KHZpc2liaWxlUmVxdWlyZWRQcm9wZXJ0aWVzKS5jb25jYXQoaW1tdXRhYmxlVmlzaWJsZUZpZWxkcyk7XG59XG4vLyBJbnRlcm5hbCBvbmx5LCBleHBvc2VkIGZvciB0ZXN0c1xuZnVuY3Rpb24gZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzKHBhdGg6IHN0cmluZywgbWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsIGNoZWNrVXBkYXRlUmVzdHJpY3Rpb25zID0gZmFsc2UpOiBzdHJpbmdbXSB7XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0bGV0IHJlcXVpcmVkUHJvcGVydGllc1dpdGhQYXRoOiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9W10gPSBbXTtcblx0Y29uc3QgbmF2aWdhdGlvblRleHQgPSBcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCI7XG5cdGxldCBlbnRpdHlTZXRBbm5vdGF0aW9uOiBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uIHwgbnVsbCA9IG51bGw7XG5cdGlmIChwYXRoLmVuZHNXaXRoKFwiJFwiKSkge1xuXHRcdC8vIGlmIHNQYXRoIGNvbWVzIHdpdGggYSAkIGluIHRoZSBlbmQsIHJlbW92aW5nIGl0IGFzIGl0IGlzIG9mIG5vIHNpZ25pZmljYW5jZVxuXHRcdHBhdGggPSBwYXRoLnJlcGxhY2UoXCIvJFwiLCBcIlwiKTtcblx0fVxuXHRjb25zdCBlbnRpdHlUeXBlUGF0aFBhcnRzID0gcGF0aC5yZXBsYWNlQWxsKFwiJTJGXCIsIFwiL1wiKS5zcGxpdChcIi9cIikuZmlsdGVyKE1vZGVsSGVscGVyLmZpbHRlck91dE5hdlByb3BCaW5kaW5nKTtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgocGF0aCwgbWV0YU1vZGVsQ29udGV4dCk7XG5cdGNvbnN0IGVudGl0eVNldFBhdGhQYXJ0cyA9IGVudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZyk7XG5cdGNvbnN0IGlzQ29udGFpbm1lbnQgPSBtZXRhTW9kZWxDb250ZXh0LmdldE9iamVjdChgLyR7ZW50aXR5VHlwZVBhdGhQYXJ0cy5qb2luKFwiL1wiKX0vJENvbnRhaW5zVGFyZ2V0YCkgPyB0cnVlIDogZmFsc2U7XG5cdGNvbnN0IGNvbnRhaW5tZW50TmF2UGF0aCA9IGlzQ29udGFpbm1lbnQgPyBlbnRpdHlUeXBlUGF0aFBhcnRzW2VudGl0eVR5cGVQYXRoUGFydHMubGVuZ3RoIC0gMV0gOiBcIlwiO1xuXG5cdC8vUmVzdHJpY3Rpb25zIGRpcmVjdGx5IGF0IEVudGl0eSBTZXRcblx0Ly9lLmcuIEZSIGluIFwiTlMuRW50aXR5Q29udGFpbmVyL1NhbGVzT3JkZXJNYW5hZ2VcIiBDb250ZXh0UGF0aDogL1NhbGVzT3JkZXJNYW5hZ2Vcblx0aWYgKCFpc0NvbnRhaW5tZW50KSB7XG5cdFx0ZW50aXR5U2V0QW5ub3RhdGlvbiA9IG1ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9QGApIGFzIE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb247XG5cdH1cblx0aWYgKGVudGl0eVR5cGVQYXRoUGFydHMubGVuZ3RoID4gMSkge1xuXHRcdGNvbnN0IG5hdlBhdGggPSBpc0NvbnRhaW5tZW50ID8gY29udGFpbm1lbnROYXZQYXRoIDogZW50aXR5U2V0UGF0aFBhcnRzW2VudGl0eVNldFBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRjb25zdCBqb2luVGV4dCA9IGAvJHtuYXZpZ2F0aW9uVGV4dH0vYDtcblx0XHRjb25zdCBwYXJlbnRFbnRpdHlTZXRQYXRoID0gaXNDb250YWlubWVudCA/IGVudGl0eVNldFBhdGggOiBgLyR7ZW50aXR5U2V0UGF0aFBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKGpvaW5UZXh0KX1gO1xuXHRcdC8vTmF2aWdhdGlvbiByZXN0cmljdGlvbnNcblx0XHQvL2UuZy4gUGFyZW50IFwiL0N1c3RvbWVyXCIgd2l0aCBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoPVwiU2V0XCIgQ29udGV4dFBhdGg6IEN1c3RvbWVyL1NldFxuXHRcdGNvbnN0IG5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBNRVRBTU9ERUxfRlVOQ1RJT05TLmdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMoXG5cdFx0XHRtZXRhTW9kZWxDb250ZXh0LFxuXHRcdFx0cGFyZW50RW50aXR5U2V0UGF0aCxcblx0XHRcdG5hdlBhdGgucmVwbGFjZUFsbChcIiUyRlwiLCBcIi9cIilcblx0XHQpO1xuXG5cdFx0aWYgKFxuXHRcdFx0bmF2aWdhdGlvblJlc3RyaWN0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRNRVRBTU9ERUxfRlVOQ1RJT05TLmhhc1Jlc3RyaWN0ZWRQcm9wZXJ0aWVzSW5Bbm5vdGF0aW9ucyhuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLCB0cnVlLCBjaGVja1VwZGF0ZVJlc3RyaWN0aW9ucylcblx0XHQpIHtcblx0XHRcdHJlcXVpcmVkUHJvcGVydGllc1dpdGhQYXRoID0gY2hlY2tVcGRhdGVSZXN0cmljdGlvbnNcblx0XHRcdFx0PyBuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLlVwZGF0ZVJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzID8/IFtdXG5cdFx0XHRcdDogbmF2aWdhdGlvblJlc3RyaWN0aW9ucy5JbnNlcnRSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyA/PyBbXTtcblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0IXJlcXVpcmVkUHJvcGVydGllc1dpdGhQYXRoLmxlbmd0aCAmJlxuXHRcdFx0TUVUQU1PREVMX0ZVTkNUSU9OUy5oYXNSZXN0cmljdGVkUHJvcGVydGllc0luQW5ub3RhdGlvbnMoZW50aXR5U2V0QW5ub3RhdGlvbiwgZmFsc2UsIGNoZWNrVXBkYXRlUmVzdHJpY3Rpb25zKVxuXHRcdCkge1xuXHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzV2l0aFBhdGggPSBNRVRBTU9ERUxfRlVOQ1RJT05TLmdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21Bbm5vdGF0aW9ucyhcblx0XHRcdFx0ZW50aXR5U2V0QW5ub3RhdGlvbixcblx0XHRcdFx0Y2hlY2tVcGRhdGVSZXN0cmljdGlvbnNcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKE1FVEFNT0RFTF9GVU5DVElPTlMuaGFzUmVzdHJpY3RlZFByb3BlcnRpZXNJbkFubm90YXRpb25zKGVudGl0eVNldEFubm90YXRpb24sIGZhbHNlLCBjaGVja1VwZGF0ZVJlc3RyaWN0aW9ucykpIHtcblx0XHRyZXF1aXJlZFByb3BlcnRpZXNXaXRoUGF0aCA9IE1FVEFNT0RFTF9GVU5DVElPTlMuZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUFubm90YXRpb25zKGVudGl0eVNldEFubm90YXRpb24sIGNoZWNrVXBkYXRlUmVzdHJpY3Rpb25zKTtcblx0fVxuXHRyZXF1aXJlZFByb3BlcnRpZXNXaXRoUGF0aC5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1aXJlZFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gcmVxdWlyZWRQcm9wZXJ0eS4kUHJvcGVydHlQYXRoO1xuXHRcdHJlcXVpcmVkUHJvcGVydGllcy5wdXNoKHByb3BlcnR5UGF0aCk7XG5cdH0pO1xuXHRyZXR1cm4gcmVxdWlyZWRQcm9wZXJ0aWVzO1xufVxuXG4vLyBUcmFuc2FjdGlvbkhlbHBlciAvLyBJbnRlcm5hbEZpZWxkXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyhwYXRoOiBzdHJpbmcsIG1ldGFtb2RlbENvbnRleHQ6IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nW10ge1xuXHRyZXR1cm4gTUVUQU1PREVMX0ZVTkNUSU9OUy5nZXRSZXF1aXJlZFByb3BlcnRpZXMocGF0aCwgbWV0YW1vZGVsQ29udGV4dCk7XG59XG5cbi8vIEludGVybmFsRmllbGRcbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zKHBhdGg6IHN0cmluZywgbWV0YW1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmdbXSB7XG5cdHJldHVybiBNRVRBTU9ERUxfRlVOQ1RJT05TLmdldFJlcXVpcmVkUHJvcGVydGllcyhwYXRoLCBtZXRhbW9kZWxDb250ZXh0LCB0cnVlKTtcbn1cblxuLy8gSW50ZXJuYWwgb25seSwgZXhwb3NlZCBmb3IgdGVzdHNcbmZ1bmN0aW9uIGdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21Bbm5vdGF0aW9ucyhcblx0YW5ub3RhdGlvbnM6IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24gfCBudWxsLFxuXHRjaGVja1VwZGF0ZVJlc3RyaWN0aW9ucyA9IGZhbHNlXG4pOiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9W10ge1xuXHRpZiAoY2hlY2tVcGRhdGVSZXN0cmljdGlvbnMpIHtcblx0XHRyZXR1cm4gYW5ub3RhdGlvbnM/LltcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlVwZGF0ZVJlc3RyaWN0aW9uc1wiXT8uUmVxdWlyZWRQcm9wZXJ0aWVzID8/IFtdO1xuXHR9XG5cdHJldHVybiBhbm5vdGF0aW9ucz8uW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zXCJdPy5SZXF1aXJlZFByb3BlcnRpZXMgPz8gW107XG59XG5cbi8vIEludGVybmFsIG9ubHksIGV4cG9zZWQgZm9yIHRlc3RzXG5mdW5jdGlvbiBoYXNSZXN0cmljdGVkUHJvcGVydGllc0luQW5ub3RhdGlvbnMoXG5cdGFubm90YXRpb25zOiBNZXRhTW9kZWxUeXBlPE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXM+IHwgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbiB8IG51bGwsXG5cdGlzTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGZhbHNlLFxuXHRjaGVja1VwZGF0ZVJlc3RyaWN0aW9ucyA9IGZhbHNlXG4pOiBib29sZWFuIHtcblx0aWYgKGlzTmF2aWdhdGlvblJlc3RyaWN0aW9ucykge1xuXHRcdGNvbnN0IG5hdkFubm90YXRpb25zID0gYW5ub3RhdGlvbnMgYXMgTWV0YU1vZGVsVHlwZTxOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzPiB8IHVuZGVmaW5lZDtcblx0XHRpZiAoY2hlY2tVcGRhdGVSZXN0cmljdGlvbnMpIHtcblx0XHRcdHJldHVybiBuYXZBbm5vdGF0aW9ucz8uVXBkYXRlUmVzdHJpY3Rpb25zPy5SZXF1aXJlZFByb3BlcnRpZXMgPyB0cnVlIDogZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBuYXZBbm5vdGF0aW9ucz8uSW5zZXJ0UmVzdHJpY3Rpb25zPy5SZXF1aXJlZFByb3BlcnRpZXMgPyB0cnVlIDogZmFsc2U7XG5cdH0gZWxzZSBpZiAoY2hlY2tVcGRhdGVSZXN0cmljdGlvbnMpIHtcblx0XHRjb25zdCBlbnRpdHlBbm5vdGF0aW9ucyA9IGFubm90YXRpb25zIGFzIE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24gfCB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIGVudGl0eUFubm90YXRpb25zPy5bXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5VcGRhdGVSZXN0cmljdGlvbnNcIl0/LlJlcXVpcmVkUHJvcGVydGllcyA/IHRydWUgOiBmYWxzZTtcblx0fVxuXHRjb25zdCBlbnRpdHl0U2V0QW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9ucyBhcyBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uIHwgdW5kZWZpbmVkO1xuXHRyZXR1cm4gZW50aXR5dFNldEFubm90YXRpb25zPy5bXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5JbnNlcnRSZXN0cmljdGlvbnNcIl0/LlJlcXVpcmVkUHJvcGVydGllcyA/IHRydWUgOiBmYWxzZTtcbn1cblxuZXhwb3J0IHR5cGUgQ3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbiA9IHtcblx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHRsYWJlbD86IHN0cmluZztcblx0bmFtZT86IHN0cmluZztcblx0cHJvcGVydHlQYXRoPzogc3RyaW5nO1xuXHRzb3J0YWJsZT86IGJvb2xlYW47XG5cdHNvcnRPcmRlcj86IHN0cmluZztcblx0Y3VzdG9tPzogYm9vbGVhbjtcbn07XG5cbi8vIFVzZWQgaW4gdGhpcyBmaWxlIGFuZCBGaWx0ZXJVdGlsc1xuLyoqXG4gKiBSZXR1cm5zIGN1c3RvbSBhZ2dyZWdhdGVzIGZvciBhIGdpdmVuIGVudGl0eVNldC5cbiAqXG4gKiBAcGFyYW0gYW5ub3RhdGlvbnMgQSBsaXN0IG9mIGFubm90YXRpb25zIG9mIHRoZSBlbnRpdHkgc2V0XG4gKiBAcmV0dXJucyBBIG1hcCB0byB0aGUgY3VzdG9tIGFnZ3JlZ2F0ZXMga2V5ZWQgYnkgdGhlaXIgcXVhbGlmaWVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsQ3VzdG9tQWdncmVnYXRlcyhhbm5vdGF0aW9uczogTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb24+IHtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbj4gPSB7fTtcblx0bGV0IGFubm90YXRpb247XG5cdGZvciAoY29uc3QgYW5ub3RhdGlvbktleSBpbiBhbm5vdGF0aW9ucykge1xuXHRcdGlmIChhbm5vdGF0aW9uS2V5LnN0YXJ0c1dpdGgoXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkN1c3RvbUFnZ3JlZ2F0ZVwiKSkge1xuXHRcdFx0YW5ub3RhdGlvbiA9IGFubm90YXRpb25LZXkucmVwbGFjZShcIkBPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQ3VzdG9tQWdncmVnYXRlI1wiLCBcIlwiKTtcblx0XHRcdGNvbnN0IGFubm90YXRpb25QYXJ0cyA9IGFubm90YXRpb24uc3BsaXQoXCJAXCIpO1xuXG5cdFx0XHRpZiAoYW5ub3RhdGlvblBhcnRzLmxlbmd0aCA9PSAyKSB7XG5cdFx0XHRcdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0ZTogQ3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbiA9IHt9O1xuXHRcdFx0XHQvL2lubmVyIGFubm90YXRpb24gdGhhdCBpcyBub3QgcGFydCBvZiBcdFZhbGlkYXRpb24uQWdncmVnYXRhYmxlVGVybXNcblx0XHRcdFx0aWYgKGFubm90YXRpb25QYXJ0c1sxXSA9PSBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzXCIpIHtcblx0XHRcdFx0XHRjdXN0b21BZ2dyZWdhdGUuY29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGFubm90YXRpb25zW2Fubm90YXRpb25LZXldIGFzIHN0cmluZ1tdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGFubm90YXRpb25QYXJ0c1sxXSA9PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiKSB7XG5cdFx0XHRcdFx0Y3VzdG9tQWdncmVnYXRlLmxhYmVsID0gYW5ub3RhdGlvbnNbYW5ub3RhdGlvbktleV0gYXMgc3RyaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZXNbYW5ub3RhdGlvblBhcnRzWzBdXSA9IGN1c3RvbUFnZ3JlZ2F0ZTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvblBhcnRzLmxlbmd0aCA9PSAxKSB7XG5cdFx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZXNbYW5ub3RhdGlvblBhcnRzWzBdXSA9IHtcblx0XHRcdFx0XHRuYW1lOiBhbm5vdGF0aW9uUGFydHNbMF0sXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uUGFydHNbMF0sXG5cdFx0XHRcdFx0bGFiZWw6IGBDdXN0b20gQWdncmVnYXRlICgke2Fubm90YXRpb259KWAsXG5cdFx0XHRcdFx0c29ydGFibGU6IHRydWUsXG5cdFx0XHRcdFx0c29ydE9yZGVyOiBcImJvdGhcIixcblx0XHRcdFx0XHRjdXN0b206IHRydWVcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3VzdG9tQWdncmVnYXRlcztcbn1cblxuLy8gVXNlZCBpbiBWYWx1ZUxpc3RIZWxwZXIsIENoYXJ0RGVsZWdhdGUgYW5kIFZhbHVlSGVscC1UYWJsZURlbGVnYXRlXG5leHBvcnQgdHlwZSBTb3J0UmVzdHJpY3Rpb25zUHJvcGVydHlJbmZvVHlwZSA9IHtcblx0c29ydGFibGU6IGJvb2xlYW47XG5cdHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUgPSB7XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHRwcm9wZXJ0eUluZm86IFJlY29yZDxzdHJpbmcsIFNvcnRSZXN0cmljdGlvbnNQcm9wZXJ0eUluZm9UeXBlPjtcbn07XG4vKipcbiAqIERldGVybWluZXMgdGhlIHNvcnRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVzdHJpY3Rpb24gYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZW50aXR5U2V0QW5ub3RhdGlvbnMgRW50aXR5U2V0IG9yIGNvbGxlY3Rpb24gYW5ub3RhdGlvbnMgd2l0aCB0aGUgc29ydCByZXN0cmljdGlvbnMgYW5ub3RhdGlvblxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNvcnQgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNvcnRSZXN0cmljdGlvbnNJbmZvKGVudGl0eVNldEFubm90YXRpb25zOiBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uKTogU29ydFJlc3RyaWN0aW9uc0luZm9UeXBlIHtcblx0Y29uc3Qgc29ydFJlc3RyaWN0aW9uc0luZm86IFNvcnRSZXN0cmljdGlvbnNJbmZvVHlwZSA9IHtcblx0XHRzb3J0YWJsZTogdHJ1ZSxcblx0XHRwcm9wZXJ0eUluZm86IHt9XG5cdH07XG5cblx0Y29uc3Qgc29ydFJlc3RyaWN0aW9ucyA9IGVudGl0eVNldEFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU29ydFJlc3RyaWN0aW9uc1wiXTtcblxuXHRpZiAoIXNvcnRSZXN0cmljdGlvbnMpIHtcblx0XHRyZXR1cm4gc29ydFJlc3RyaWN0aW9uc0luZm87XG5cdH1cblxuXHRpZiAoc29ydFJlc3RyaWN0aW9ucy5Tb3J0YWJsZSA9PT0gZmFsc2UpIHtcblx0XHRzb3J0UmVzdHJpY3Rpb25zSW5mby5zb3J0YWJsZSA9IGZhbHNlO1xuXHR9XG5cblx0Zm9yIChjb25zdCBwcm9wZXJ0eUl0ZW0gb2Ygc29ydFJlc3RyaWN0aW9ucy5Ob25Tb3J0YWJsZVByb3BlcnRpZXMgfHwgW10pIHtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUl0ZW0uJFByb3BlcnR5UGF0aDtcblx0XHRzb3J0UmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bcHJvcGVydHlOYW1lXSA9IHtcblx0XHRcdHNvcnRhYmxlOiBmYWxzZVxuXHRcdH07XG5cdH1cblxuXHRmb3IgKGNvbnN0IHByb3BlcnR5SXRlbSBvZiBzb3J0UmVzdHJpY3Rpb25zLkFzY2VuZGluZ09ubHlQcm9wZXJ0aWVzIHx8IFtdKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJdGVtLiRQcm9wZXJ0eVBhdGg7XG5cdFx0c29ydFJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3Byb3BlcnR5TmFtZV0gPSB7XG5cdFx0XHRzb3J0YWJsZTogdHJ1ZSxcblx0XHRcdHNvcnREaXJlY3Rpb246IFwiYXNjXCIgLy8gbm90IHVzZWQsIHlldFxuXHRcdH07XG5cdH1cblxuXHRmb3IgKGNvbnN0IHByb3BlcnR5SXRlbSBvZiBzb3J0UmVzdHJpY3Rpb25zLkRlc2NlbmRpbmdPbmx5UHJvcGVydGllcyB8fCBbXSkge1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHByb3BlcnR5SXRlbS4kUHJvcGVydHlQYXRoO1xuXHRcdHNvcnRSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1twcm9wZXJ0eU5hbWVdID0ge1xuXHRcdFx0c29ydGFibGU6IHRydWUsXG5cdFx0XHRzb3J0RGlyZWN0aW9uOiBcImRlc2NcIiAvLyBub3QgdXNlZCwgeWV0XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBzb3J0UmVzdHJpY3Rpb25zSW5mbztcbn1cblxuLy8gVXNlZCBpbiBDaGFydERlbGVnYXRlIGFuZCBWYWx1ZUhlbHAtVGFibGVEZWxlZ2F0ZVxuZXhwb3J0IHR5cGUgRmlsdGVyUmVzdHJpY3Rpb25zUHJvcGVydHlJbmZvVHlwZSA9IHtcblx0ZmlsdGVyYWJsZTogYm9vbGVhbjtcblx0YWxsb3dlZEV4cHJlc3Npb25zPzogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJSZXN0cmljdGlvbnNJbmZvVHlwZSA9IHtcblx0ZmlsdGVyYWJsZTogYm9vbGVhbjtcblx0cmVxdWlyZXNGaWx0ZXI6IGJvb2xlYW47XG5cdHByb3BlcnR5SW5mbzogUmVjb3JkPHN0cmluZywgRmlsdGVyUmVzdHJpY3Rpb25zUHJvcGVydHlJbmZvVHlwZT47XG5cdHJlcXVpcmVkUHJvcGVydGllczogc3RyaW5nW107XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBmaWx0ZXIgaW5mb3JtYXRpb24gYmFzZWQgb24gdGhlIGZpbHRlciByZXN0cmljdGlvbnMgYW5ub2F0aW9uLlxuICpcbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnMgVGhlIGZpbHRlciByZXN0cmljdGlvbnMgYW5ub3RhdGlvblxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbHRlciByZXN0cmljdGlvbiBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zSW5mbyhmaWx0ZXJSZXN0cmljdGlvbnM/OiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+KTogRmlsdGVyUmVzdHJpY3Rpb25zSW5mb1R5cGUge1xuXHRsZXQgaSwgcHJvcGVydHlOYW1lO1xuXHRjb25zdCBmaWx0ZXJSZXN0cmljdGlvbnNJbmZvOiBGaWx0ZXJSZXN0cmljdGlvbnNJbmZvVHlwZSA9IHtcblx0XHRmaWx0ZXJhYmxlOiB0cnVlLFxuXHRcdHJlcXVpcmVzRmlsdGVyOiBmaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVzRmlsdGVyIHx8IGZhbHNlLFxuXHRcdHByb3BlcnR5SW5mbzoge30sXG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzOiBbXVxuXHR9O1xuXG5cdGlmICghZmlsdGVyUmVzdHJpY3Rpb25zKSB7XG5cdFx0cmV0dXJuIGZpbHRlclJlc3RyaWN0aW9uc0luZm87XG5cdH1cblxuXHRpZiAoZmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlcmFibGUgPT09IGZhbHNlKSB7XG5cdFx0ZmlsdGVyUmVzdHJpY3Rpb25zSW5mby5maWx0ZXJhYmxlID0gZmFsc2U7XG5cdH1cblxuXHQvL0hpZXJhcmNoaWNhbCBDYXNlXG5cdGlmIChmaWx0ZXJSZXN0cmljdGlvbnMuUmVxdWlyZWRQcm9wZXJ0aWVzKSB7XG5cdFx0Zm9yIChpID0gMDsgaSA8IGZpbHRlclJlc3RyaWN0aW9ucy5SZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHByb3BlcnR5TmFtZSA9IGZpbHRlclJlc3RyaWN0aW9ucy5SZXF1aXJlZFByb3BlcnRpZXNbaV0uJFByb3BlcnR5UGF0aDtcblx0XHRcdGZpbHRlclJlc3RyaWN0aW9uc0luZm8ucmVxdWlyZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlOYW1lKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBub25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IGZpbHRlclJlc3RyaWN0aW9ucy5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcz8ubWFwKChwcm9wKSA9PiBwcm9wLiRQcm9wZXJ0eVBhdGgpIHx8IFtdO1xuXHRjb25zdCBmaWx0ZXJhYmxlUHJvcGVydGllcyA9IGZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zPy5tYXAoKHByb3ApID0+IHByb3AuUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGgpIHx8IFtdO1xuXHRnZXRGaWx0ZXJhYmxlRGF0YShmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mbywgbm9uRmlsdGVyYWJsZVByb3BlcnRpZXMsIGZpbHRlcmFibGVQcm9wZXJ0aWVzKTtcblxuXHRpZiAoZmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMpIHtcblx0XHQvL1RCRFxuXHRcdGZvciAoaSA9IDA7IGkgPCBmaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0cHJvcGVydHlOYW1lID0gZmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnNbaV0uUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lKSB7XG5cdFx0XHRcdGZpbHRlclJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3Byb3BlcnR5TmFtZV1bXCJhbGxvd2VkRXhwcmVzc2lvbnNcIl0gPSBmaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uc1tpXVxuXHRcdFx0XHRcdC5BbGxvd2VkRXhwcmVzc2lvbnMgYXMgdW5rbm93biBhcyBzdHJpbmdbXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmlsdGVyUmVzdHJpY3Rpb25zSW5mbztcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBkYXRlIHRoZSBvYmogdG8gaGF2ZSBsaXN0IG9mIHByb3BlcnRpZXMgd2hpY2ggY2FuIGJlIGZpbHRlcmVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0gZmlsdGVyRGF0YU9ialxuICogQHBhcmFtIG5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXG4gKiBAcGFyYW0gZmlsdGVyYWJsZVByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlcmFibGVEYXRhKFxuXHRmaWx0ZXJEYXRhT2JqOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJSZXN0cmljdGlvbnNQcm9wZXJ0eUluZm9UeXBlPixcblx0bm9uRmlsdGVyYWJsZVByb3BlcnRpZXM6IHN0cmluZ1tdLFxuXHRmaWx0ZXJhYmxlUHJvcGVydGllczogKHN0cmluZyB8IHVuZGVmaW5lZClbXVxuKTogdm9pZCB7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgbm9uRmlsdGVyYWJsZVByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRmaWx0ZXJEYXRhT2JqW25vbkZpbHRlcmFibGVQcm9wZXJ0aWVzW2ldXSA9IHtcblx0XHRcdGZpbHRlcmFibGU6IGZhbHNlXG5cdFx0fTtcblx0fVxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcmFibGVQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgcHJvcE5hbWUgPSBmaWx0ZXJhYmxlUHJvcGVydGllc1tpXTtcblx0XHRpZiAocHJvcE5hbWUpIHtcblx0XHRcdGZpbHRlckRhdGFPYmpbcHJvcE5hbWVdID0ge1xuXHRcdFx0XHRmaWx0ZXJhYmxlOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufVxuXG4vLyBVc2VkIGluIENoYXJ0RGVsZWdhdGUgYW5kIFZhbHVlSGVscC1UYWJsZURlbGVnYXRlXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBpbmZvcm1hdGlvbiBpZiB0aGUgRmlsdGVyRXhwcmVzc2lvbiBpcyBhIG11bHRpVmFsdWUgRmlsdGVyIEV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIGZpbHRlckV4cHJlc3Npb24gVGhlIEZpbHRlckV4cHJlc3Npb25UeXBlXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUgd2V0aGVyIGl0IGlzIGEgbXVsdGlWYWx1ZSBGaWx0ZXIgRXhwcmVzc2lvbiBvciBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24oZmlsdGVyRXhwcmVzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGxldCBpc011bHRpVmFsdWUgPSB0cnVlO1xuXG5cdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0c3dpdGNoIChmaWx0ZXJFeHByZXNzaW9uKSB7XG5cdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRjYXNlIFwiU2luZ2xlUmFuZ2VcIjpcblx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdGlzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIGlzTXVsdGlWYWx1ZTtcbn1cblxuLy8gRE8gTk9UIFVTRSwgb25seSBmb3IgdGVzdHMgYW5kIGludGVybmFsbHkgaW4gdGhpcyBmaWxlXG5leHBvcnQgY29uc3QgTUVUQU1PREVMX0ZVTkNUSU9OUyA9IHtcblx0Z2V0UmVxdWlyZWRQcm9wZXJ0aWVzLFxuXHRnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tQW5ub3RhdGlvbnMsXG5cdGhhc1Jlc3RyaWN0ZWRQcm9wZXJ0aWVzSW5Bbm5vdGF0aW9ucyxcblx0Z2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyxcblx0Z2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyxcblx0Z2V0QWxsQ3VzdG9tQWdncmVnYXRlcyxcblx0Z2V0RmlsdGVyYWJsZURhdGFcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0VBc0JBO0VBQ08sU0FBU0EscUJBQXFCLENBQUNDLFFBQWdCLEVBQUVDLFNBQXlCLEVBQXFEO0lBQ3JJLElBQUlDLGtCQUFrQjtJQUN0QixJQUFJQyw0QkFBNEI7SUFDaEMsTUFBTUMsY0FBYyxHQUFHLDRCQUE0QjtJQUNuRCxNQUFNQyxzQkFBc0IsR0FBRywrQ0FBK0M7SUFDOUUsTUFBTUMsbUJBQW1CLEdBQUdOLFFBQVEsQ0FBQ08sVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxNQUFNLENBQUNDLFdBQVcsQ0FBQ0MsdUJBQXVCLENBQUM7SUFDbEgsTUFBTUMsYUFBYSxHQUFHRixXQUFXLENBQUNHLGdCQUFnQixDQUFDYixRQUFRLEVBQUVDLFNBQVMsQ0FBQztJQUN2RSxNQUFNYSxrQkFBa0IsR0FBR0YsYUFBYSxDQUFDSixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNDLE1BQU0sQ0FBQ0MsV0FBVyxDQUFDQyx1QkFBdUIsQ0FBQztJQUMvRixNQUFNSSxhQUFhLEdBQUdkLFNBQVMsQ0FBQ2UsU0FBUyxDQUFFLElBQUdWLG1CQUFtQixDQUFDVyxJQUFJLENBQUMsR0FBRyxDQUFFLGtCQUFpQixDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUs7SUFDN0csTUFBTUMsa0JBQWtCLEdBQUdILGFBQWEsR0FBR1QsbUJB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
543
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRTZWFyY2hSZXN0cmljdGlvbnMiLCJmdWxsUGF0aCIsIm1ldGFNb2RlbCIsInNlYXJjaFJlc3RyaWN0aW9ucyIsIm5hdmlnYXRpb25TZWFyY2hSZXN0cmljdGlvbnMiLCJuYXZpZ2F0aW9uVGV4dCIsInNlYXJjaFJlc3RyaWN0aW9uc1Rlcm0iLCJlbnRpdHlUeXBlUGF0aFBhcnRzIiwicmVwbGFjZUFsbCIsInNwbGl0IiwiZmlsdGVyIiwiTW9kZWxIZWxwZXIiLCJmaWx0ZXJPdXROYXZQcm9wQmluZGluZyIsImVudGl0eVNldFBhdGgiLCJnZXRFbnRpdHlTZXRQYXRoIiwiZW50aXR5U2V0UGF0aFBhcnRzIiwiaXNDb250YWlubWVudCIsImdldE9iamVjdCIsImpvaW4iLCJjb250YWlubWVudE5hdlBhdGgiLCJsZW5ndGgiLCJuYXZQYXRoIiwiam9pblN0cmluZyIsInBhcmVudEVudGl0eVNldFBhdGgiLCJzbGljZSIsIm5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJNRVRBTU9ERUxfRlVOQ1RJT05TIiwiZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIlNlYXJjaFJlc3RyaWN0aW9ucyIsIm1ldGFNb2RlbENvbnRleHQiLCJuYXZpZ2F0aW9uUGF0aCIsInJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJmaW5kIiwicmVzdHJpY3RlZFByb3BlcnR5IiwiTmF2aWdhdGlvblByb3BlcnR5IiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJpc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJtZXRhbW9kZWxDb250ZXh0IiwiY29udGV4dFBhdGgiLCJpc05vdEZpbHRlcmFibGUiLCJmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzb21lIiwicHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiaXNDdXN0b21BZ2dyZWdhdGUiLCJpbnRlcmFubElzQ3VzdG9tQWdncmVnYXRlIiwiaXNBcHBseVN1cHBvcnRlZCIsImVudGl0eVNldEFubm90YXRpb25zIiwiY3VzdG9tQWdncmVnYXRlc0Fubm90YXRpb25zIiwiZ2V0QWxsQ3VzdG9tQWdncmVnYXRlcyIsImN1c3RvbUFnZ3JlZ2F0ZXMiLCJPYmplY3QiLCJrZXlzIiwidW5kZWZpbmVkIiwiaW5jbHVkZXMiLCJjaGVja0VudGl0eVNldElzRmlsdGVyYWJsZSIsIm5hdmlnYXRpb25Db250ZXh0IiwiaXNGaWx0ZXJhYmxlIiwiaXNDb250ZXh0UGF0aEZpbHRlcmFibGUiLCJwcm9wZXJ0eURhdGFUeXBlIiwiZ2V0UHJvcGVydHlEYXRhVHlwZSIsImlzVHlwZUZpbHRlcmFibGUiLCJlc1BhcnRzIiwic3BsaWNlIiwiY29udGV4dHMiLCJpc05vRmlsdGVyYWJsZSIsImNvbnRleHQiLCJpdGVtIiwiaW5kZXgiLCJhcnJheSIsImZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIm5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwidGFyZ2V0UHJvcGVydHlQYXRoIiwicHJvcGVydHlQYXRoIiwiZGF0YVR5cGUiLCJnZXRQcm9wZXJ0eSIsImFubm90YXRpb25QYXRoIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJza2lwSGlkZGVuRmlsdGVycyIsIkVycm9yIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJoaWRkZW5QYXRoIiwiaGlkZGVuRmlsdGVyUGF0aCIsImNvbXBpbGVFeHByZXNzaW9uIiwibm90Iiwib3IiLCJwYXRoSW5Nb2RlbCIsImdldENyZWF0ZVBvcHVwRmllbGRzIiwicGF0aCIsImFwcENvbXBvbmVudCIsImRhdGFNb2RlbCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJub25Db21wdXRlZFZpc2libGVLZXlzIiwiaW1tdXRhYmxlVmlzaWJsZUZpZWxkcyIsInZpc2liaWxlUmVxdWlyZWRQcm9wZXJ0aWVzIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImVudGl0eVByb3BlcnRpZXMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwicHJvcCIsImFubm90YXRpb25zIiwiaXNLZXkiLCJwcm9wTmFtZSIsIm5hbWUiLCJpc0ltbXV0YWJsZSIsIkNvcmUiLCJJbW11dGFibGUiLCJ2YWx1ZU9mIiwiaXNOb25Db21wdXRlZCIsIkNvbXB1dGVkIiwiaXNWaXNpYmxlIiwiVUkiLCJIaWRkZW4iLCJpc0NvbXB1dGVkRGVmYXVsdFZhbHVlIiwiQ29tcHV0ZWREZWZhdWx0VmFsdWUiLCJpc0tleUNvbXB1dGVkRGVmYXVsdFZhbHVlV2l0aFRleHQiLCJ0eXBlIiwiQ29tbW9uIiwiVGV4dCIsInB1c2giLCJkaWFnbm9zdGljcyIsImdldERpYWdub3N0aWNzIiwibWVzc2FnZSIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTWVkaXVtIiwiSXNzdWVDYXRlZ29yeVR5cGUiLCJBbm5vdGF0aW9ucyIsIklnbm9yZWRBbm5vdGF0aW9uIiwiY29uY2F0IiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzIiwiY2hlY2tVcGRhdGVSZXN0cmljdGlvbnMiLCJyZXF1aXJlZFByb3BlcnRpZXNXaXRoUGF0aCIsImVudGl0eVNldEFubm90YXRpb24iLCJlbmRzV2l0aCIsInJlcGxhY2UiLCJqb2luVGV4dCIsImhhc1Jlc3RyaWN0ZWRQcm9wZXJ0aWVzSW5Bbm5vdGF0aW9ucyIsIlVwZGF0ZVJlc3RyaWN0aW9ucyIsIlJlcXVpcmVkUHJvcGVydGllcyIsIkluc2VydFJlc3RyaWN0aW9ucyIsImdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21Bbm5vdGF0aW9ucyIsImZvckVhY2giLCJyZXF1aXJlZFByb3BlcnR5IiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyIsImlzTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIm5hdkFubm90YXRpb25zIiwiZW50aXR5QW5ub3RhdGlvbnMiLCJlbnRpdHl0U2V0QW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbktleSIsInN0YXJ0c1dpdGgiLCJhbm5vdGF0aW9uUGFydHMiLCJjdXN0b21BZ2dyZWdhdGUiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwibGFiZWwiLCJzb3J0YWJsZSIsInNvcnRPcmRlciIsImN1c3RvbSIsImdldFNvcnRSZXN0cmljdGlvbnNJbmZvIiwic29ydFJlc3RyaWN0aW9uc0luZm8iLCJwcm9wZXJ0eUluZm8iLCJzb3J0UmVzdHJpY3Rpb25zIiwiU29ydGFibGUiLCJwcm9wZXJ0eUl0ZW0iLCJOb25Tb3J0YWJsZVByb3BlcnRpZXMiLCJwcm9wZXJ0eU5hbWUiLCJBc2NlbmRpbmdPbmx5UHJvcGVydGllcyIsInNvcnREaXJlY3Rpb24iLCJEZXNjZW5kaW5nT25seVByb3BlcnRpZXMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNJbmZvIiwiaSIsImZpbHRlclJlc3RyaWN0aW9uc0luZm8iLCJmaWx0ZXJhYmxlIiwicmVxdWlyZXNGaWx0ZXIiLCJSZXF1aXJlc0ZpbHRlciIsIkZpbHRlcmFibGUiLCJtYXAiLCJmaWx0ZXJhYmxlUHJvcGVydGllcyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJQcm9wZXJ0eSIsImdldEZpbHRlcmFibGVEYXRhIiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiZmlsdGVyRGF0YU9iaiIsImlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24iLCJmaWx0ZXJFeHByZXNzaW9uIiwiaXNNdWx0aVZhbHVlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXRhTW9kZWxGdW5jdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgZ29hbCBvZiB0aGlzIGZpbGUgaXMgdG8gZGlzYXBwZWFyIGFzIHNvb24gYXMgd2UgY2FuLlxuLy8gSXQgaXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gdG8gbW92ZSBhbGwgbWV0YW1vZGVsIHJlbGF0ZWQgb3BlcmF0aW9uIGZyb20gQ29tbW9uVXRpbHMgdG8gYSBzZXBhcmF0ZSBmaWxlLlxuXG5pbXBvcnQgdHlwZSAqIGFzIEVkbSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpbHRlclJlc3RyaWN0aW9uc1R5cGUsXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMsXG5cdE5hdmlnYXRpb25SZXN0cmljdGlvbnNUeXBlLFxuXHRTZWFyY2hSZXN0cmljdGlvbnNUeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgbm90LCBvciwgcGF0aEluTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZUNhdGVnb3J5VHlwZSwgSXNzdWVTZXZlcml0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG5pbXBvcnQgeyBpc1R5cGVGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBFeHBhbmRQYXRoVHlwZSwgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbiwgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuXG4vLyBGcm9tIEZpbHRlckJhci5ibG9jay50cyBvbmx5XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGZ1bGxQYXRoOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBNZXRhTW9kZWxUeXBlPFNlYXJjaFJlc3RyaWN0aW9uc1R5cGU+IHwgdW5kZWZpbmVkIHtcblx0bGV0IHNlYXJjaFJlc3RyaWN0aW9ucztcblx0bGV0IG5hdmlnYXRpb25TZWFyY2hSZXN0cmljdGlvbnM7XG5cdGNvbnN0IG5hdmlnYXRpb25UZXh0ID0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnNUZXJtID0gXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNcIjtcblx0Y29uc3QgZW50aXR5VHlwZVBhdGhQYXJ0cyA9IGZ1bGxQYXRoLnJlcGxhY2VBbGwoXCIlMkZcIiwgXCIvXCIpLnNwbGl0KFwiL1wiKS5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpO1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChmdWxsUGF0aCwgbWV0YU1vZGVsKTtcblx0Y29uc3QgZW50aXR5U2V0UGF0aFBhcnRzID0gZW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKE1vZGVsSGVscGVyLmZpbHRlck91dE5hdlByb3BCaW5kaW5nKTtcblx0Y29uc3QgaXNDb250YWlubWVudCA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYC8ke2VudGl0eVR5cGVQYXRoUGFydHMuam9pbihcIi9cIil9LyRDb250YWluc1RhcmdldGApID8gdHJ1ZSA6IGZhbHNlO1xuXHRjb25zdCBjb250YWlubWVudE5hdlBhdGggPSBpc0NvbnRhaW5tZW50ID8gZW50aXR5VHlwZVBhdGhQYXJ0c1tlbnRpdHlUeXBlUGF0aFBhcnRzLmxlbmd0aCAtIDFdIDogXCJcIjtcblxuXHQvL0xFQVNUIFBSSU9SSVRZIC0gU2VhcmNoIHJlc3RyaWN0aW9ucyBkaXJlY3RseSBhdCBFbnRpdHkgU2V0XG5cdC8vZS5nLiBGUiBpbiBcIk5TLkVudGl0eUNvbnRhaW5lci9TYWxlc09yZGVyTWFuYWdlXCIgQ29udGV4dFBhdGg6IC9TYWxlc09yZGVyTWFuYWdlXG5cdGlmICghaXNDb250YWlubWVudCkge1xuXHRcdHNlYXJjaFJlc3RyaWN0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH0ke3NlYXJjaFJlc3RyaWN0aW9uc1Rlcm19YCkgYXNcblx0XHRcdHwgTWV0YU1vZGVsVHlwZTxTZWFyY2hSZXN0cmljdGlvbnNUeXBlPlxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGVudGl0eVR5cGVQYXRoUGFydHMubGVuZ3RoID4gMSkge1xuXHRcdGNvbnN0IG5hdlBhdGg6IHN0cmluZyA9IGlzQ29udGFpbm1lbnQgPyBjb250YWlubWVudE5hdlBhdGggOiBlbnRpdHlTZXRQYXRoUGFydHNbZW50aXR5U2V0UGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdC8vIEluIGNhc2Ugb2YgY29udGFpbm1lbnQgd2UgdGFrZSBlbnRpdHlTZXQgcHJvdmlkZWQgYXMgcGFyZW50LiBBbmQgaW4gY2FzZSBvZiBub3JtYWwgd2Ugd291bGQgcmVtb3ZlIHRoZSBsYXN0IG5hdmlnYXRpb24gZnJvbSBlbnRpdHlTZXRQYXRoLlxuXHRcdGNvbnN0IGpvaW5TdHJpbmcgPSBgLyR7bmF2aWdhdGlvblRleHR9L2A7XG5cdFx0Y29uc3QgcGFyZW50RW50aXR5U2V0UGF0aCA9IGlzQ29udGFpbm1lbnQgPyBlbnRpdHlTZXRQYXRoIDogYC8ke2VudGl0eVNldFBhdGhQYXJ0cy5zbGljZSgwLCAtMSkuam9pbihqb2luU3RyaW5nKX1gO1xuXG5cdFx0Ly9ISUdIRVNUIHByaW9yaXR5IC0gTmF2aWdhdGlvbiByZXN0cmljdGlvbnNcblx0XHQvL2UuZy4gUGFyZW50IFwiL0N1c3RvbWVyXCIgd2l0aCBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoPVwiU2V0XCIgQ29udGV4dFBhdGg6IEN1c3RvbWVyL1NldFxuXHRcdGNvbnN0IG5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBNRVRBTU9ERUxfRlVOQ1RJT05TLmdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMoXG5cdFx0XHRtZXRhTW9kZWwsXG5cdFx0XHRwYXJlbnRFbnRpdHlTZXRQYXRoLFxuXHRcdFx0bmF2UGF0aC5yZXBsYWNlQWxsKFwiJTJGXCIsIFwiL1wiKVxuXHRcdCk7XG5cdFx0bmF2aWdhdGlvblNlYXJjaFJlc3RyaWN0aW9ucyA9IG5hdmlnYXRpb25SZXN0cmljdGlvbnM/LlNlYXJjaFJlc3RyaWN0aW9ucztcblx0fVxuXHRyZXR1cm4gbmF2aWdhdGlvblNlYXJjaFJlc3RyaWN0aW9ucyA/PyBzZWFyY2hSZXN0cmljdGlvbnM7XG59XG5cbi8vIEZyb20gQ29tbW9uVXRpbHNcbmV4cG9ydCBmdW5jdGlvbiBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKFxuXHRtZXRhTW9kZWxDb250ZXh0OiBPRGF0YU1ldGFNb2RlbCxcblx0ZW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nXG4pOiBNZXRhTW9kZWxUeXBlPE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXM+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IG1ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9QE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTmF2aWdhdGlvblJlc3RyaWN0aW9uc2ApIGFzXG5cdFx0fCBNZXRhTW9kZWxUeXBlPE5hdmlnYXRpb25SZXN0cmljdGlvbnNUeXBlPlxuXHRcdHwgdW5kZWZpbmVkO1xuXHRjb25zdCByZXN0cmljdGVkUHJvcGVydGllcyA9IG5hdmlnYXRpb25SZXN0cmljdGlvbnM/LlJlc3RyaWN0ZWRQcm9wZXJ0aWVzO1xuXHRyZXR1cm4gcmVzdHJpY3RlZFByb3BlcnRpZXM/LmZpbmQoZnVuY3Rpb24gKHJlc3RyaWN0ZWRQcm9wZXJ0eSkge1xuXHRcdHJldHVybiByZXN0cmljdGVkUHJvcGVydHkuTmF2aWdhdGlvblByb3BlcnR5Py4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCA9PT0gbmF2aWdhdGlvblBhdGg7XG5cdH0pO1xufVxuXG4vLyBJbnRlcm5hbCB1c2FnZSBvbmx5XG5mdW5jdGlvbiBpc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMobWV0YW1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldFBhdGg6IHN0cmluZywgY29udGV4dFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRsZXQgaXNOb3RGaWx0ZXJhYmxlID0gZmFsc2U7XG5cdGNvbnN0IGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gPSBtZXRhbW9kZWxDb250ZXh0LmdldE9iamVjdChgJHtlbnRpdHlTZXRQYXRofUBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc2ApIGFzXG5cdFx0fCBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+XG5cdFx0fCB1bmRlZmluZWQ7XG5cdGlmIChmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uPy5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcykge1xuXHRcdGlzTm90RmlsdGVyYWJsZSA9IGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuc29tZShmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdChwcm9wZXJ0eSBhcyB1bmtub3duIGFzIEV4cGFuZFBhdGhUeXBlPEVkbS5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoPikuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IGNvbnRleHRQYXRoIHx8XG5cdFx0XHRcdHByb3BlcnR5LiRQcm9wZXJ0eVBhdGggPT09IGNvbnRleHRQYXRoXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBpc05vdEZpbHRlcmFibGU7XG59XG5cbi8vIEludGVybmFsIHVzYWdlIG9ubHlcbmV4cG9ydCBmdW5jdGlvbiBpc0N1c3RvbUFnZ3JlZ2F0ZShtZXRhbW9kZWxDb250ZXh0OiBPRGF0YU1ldGFNb2RlbCwgZW50aXR5U2V0UGF0aDogc3RyaW5nLCBjb250ZXh0UGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGxldCBpbnRlcmFubElzQ3VzdG9tQWdncmVnYXRlID0gZmFsc2U7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleC9pbnZhbGlkLXdhcm5cblx0Y29uc3QgaXNBcHBseVN1cHBvcnRlZCA9IG1ldGFtb2RlbENvbnRleHQuZ2V0T2JqZWN0KGVudGl0eVNldFBhdGggKyBcIkBPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRcIikgPyB0cnVlIDogZmFsc2U7XG5cdGlmIChpc0FwcGx5U3VwcG9ydGVkKSB7XG5cdFx0Y29uc3QgZW50aXR5U2V0QW5ub3RhdGlvbnMgPSBtZXRhbW9kZWxDb250ZXh0LmdldE9iamVjdChgJHtlbnRpdHlTZXRQYXRofUBgKSBhcyBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uO1xuXHRcdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0ZXNBbm5vdGF0aW9ucyA9IE1FVEFNT0RFTF9GVU5DVElPTlMuZ2V0QWxsQ3VzdG9tQWdncmVnYXRlcyhlbnRpdHlTZXRBbm5vdGF0aW9ucykgYXMgb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0ZXMgPSBjdXN0b21BZ2dyZWdhdGVzQW5ub3RhdGlvbnMgPyBPYmplY3Qua2V5cyhjdXN0b21BZ2dyZWdhdGVzQW5ub3RhdGlvbnMpIDogdW5kZWZpbmVkO1xuXHRcdGlmIChjdXN0b21BZ2dyZWdhdGVzPy5pbmNsdWRlcyhjb250ZXh0UGF0aCkpIHtcblx0XHRcdGludGVyYW5sSXNDdXN0b21BZ2dyZWdhdGUgPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW50ZXJhbmxJc0N1c3RvbUFnZ3JlZ2F0ZTtcbn1cblxuLy8gSW50ZXJuYWwgdXNhZ2Ugb25seVxuXG5mdW5jdGlvbiBjaGVja0VudGl0eVNldElzRmlsdGVyYWJsZShcblx0ZW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRtZXRhTW9kZWxDb250ZXh0OiBPRGF0YU1ldGFNb2RlbCxcblx0cHJvcGVydHk6IHN0cmluZyxcblx0bmF2aWdhdGlvbkNvbnRleHQ6IENvbnRleHQgfCBudWxsXG4pOiBib29sZWFuIHtcblx0bGV0IGlzRmlsdGVyYWJsZSA9XG5cdFx0ZW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIikubGVuZ3RoID09PSAyICYmICFwcm9wZXJ0eS5pbmNsdWRlcyhcIi9cIilcblx0XHRcdD8gIWlzSW5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyhtZXRhTW9kZWxDb250ZXh0LCBlbnRpdHlTZXRQYXRoLCBwcm9wZXJ0eSkgJiZcblx0XHRcdCAgIWlzQ3VzdG9tQWdncmVnYXRlKG1ldGFNb2RlbENvbnRleHQsIGVudGl0eVNldFBhdGgsIHByb3BlcnR5KVxuXHRcdFx0OiAhaXNDb250ZXh0UGF0aEZpbHRlcmFibGUobWV0YU1vZGVsQ29udGV4dCwgZW50aXR5U2V0UGF0aCwgcHJvcGVydHkpO1xuXHQvLyBjaGVjayBpZiB0eXBlIGNhbiBiZSB1c2VkIGZvciBmaWx0ZXJpbmdcblx0aWYgKGlzRmlsdGVyYWJsZSAmJiBuYXZpZ2F0aW9uQ29udGV4dCkge1xuXHRcdGNvbnN0IHByb3BlcnR5RGF0YVR5cGUgPSBnZXRQcm9wZXJ0eURhdGFUeXBlKG5hdmlnYXRpb25Db250ZXh0KTtcblx0XHRpZiAocHJvcGVydHlEYXRhVHlwZSkge1xuXHRcdFx0aXNGaWx0ZXJhYmxlID0gcHJvcGVydHlEYXRhVHlwZSA/IGlzVHlwZUZpbHRlcmFibGUocHJvcGVydHlEYXRhVHlwZSBhcyBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlKSA6IGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpc0ZpbHRlcmFibGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGlzRmlsdGVyYWJsZTtcbn1cblxuLy8gSW50ZXJuYWwgdXNhZ2Ugb25seVxuZnVuY3Rpb24gaXNDb250ZXh0UGF0aEZpbHRlcmFibGUobWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldFBhdGg6IHN0cmluZywgY29udGV4dFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRjb25zdCBmdWxsUGF0aCA9IGAke2VudGl0eVNldFBhdGh9LyR7Y29udGV4dFBhdGh9YCxcblx0XHRlc1BhcnRzID0gZnVsbFBhdGguc3BsaXQoXCIvXCIpLnNwbGljZSgwLCAyKSxcblx0XHRjb250ZXh0cyA9IGZ1bGxQYXRoLnNwbGl0KFwiL1wiKS5zcGxpY2UoMik7XG5cdGxldCBpc05vRmlsdGVyYWJsZSA9IGZhbHNlLFxuXHRcdGNvbnRleHQgPSBcIlwiO1xuXG5cdGVudGl0eVNldFBhdGggPSBlc1BhcnRzLmpvaW4oXCIvXCIpO1xuXG5cdGlzTm9GaWx0ZXJhYmxlID0gY29udGV4dHMuc29tZShmdW5jdGlvbiAoaXRlbTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBhcnJheTogc3RyaW5nW10pIHtcblx0XHRpZiAoY29udGV4dC5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb250ZXh0ICs9IGAvJHtpdGVtfWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBpdGVtO1xuXHRcdH1cblx0XHRpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDIpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgXCIvQ3VzdG9tZXIvU2V0L1Byb3BlcnR5XCIgdGhpcyBpcyB0byBjaGVjayBuYXZpZ2F0aW9uIHJlc3RyaWN0aW9ucyBvZiBcIkN1c3RvbWVyXCIgZm9yIG5vbi1maWx0ZXJhYmxlIHByb3BlcnRpZXMgaW4gXCJTZXRcIlxuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IE1FVEFNT0RFTF9GVU5DVElPTlMuZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhtZXRhTW9kZWxDb250ZXh0LCBlbnRpdHlTZXRQYXRoLCBpdGVtKTtcblx0XHRcdGNvbnN0IGZpbHRlclJlc3RyaWN0aW9ucyA9IG5hdmlnYXRpb25SZXN0cmljdGlvbnM/LkZpbHRlclJlc3RyaWN0aW9ucztcblx0XHRcdGNvbnN0IG5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gZmlsdGVyUmVzdHJpY3Rpb25zPy5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcztcblx0XHRcdGNvbnN0IHRhcmdldFByb3BlcnR5UGF0aCA9IGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRub25GaWx0ZXJhYmxlUHJvcGVydGllcz8uZmluZChmdW5jdGlvbiAocHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb3BlcnR5UGF0aC4kUHJvcGVydHlQYXRoID09PSB0YXJnZXRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChpbmRleCA9PT0gYXJyYXkubGVuZ3RoIC0gMSkge1xuXHRcdFx0Ly9sYXN0IHBhdGggc2VnbWVudFxuXHRcdFx0aXNOb0ZpbHRlcmFibGUgPSBpc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMobWV0YU1vZGVsQ29udGV4dCwgZW50aXR5U2V0UGF0aCwgY29udGV4dCk7XG5cdFx0fSBlbHNlIGlmIChtZXRhTW9kZWxDb250ZXh0LmdldE9iamVjdChgJHtlbnRpdHlTZXRQYXRofS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke2l0ZW19YCkpIHtcblx0XHRcdC8vY2hlY2sgZXhpc3RpbmcgY29udGV4dCBwYXRoIGFuZCBpbml0aWFsaXplIGl0XG5cdFx0XHRpc05vRmlsdGVyYWJsZSA9IGlzSW5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyhtZXRhTW9kZWxDb250ZXh0LCBlbnRpdHlTZXRQYXRoLCBjb250ZXh0KTtcblx0XHRcdGNvbnRleHQgPSBcIlwiO1xuXHRcdFx0Ly9zZXQgdGhlIG5ldyBFbnRpdHlTZXRcblx0XHRcdGVudGl0eVNldFBhdGggPSBcIi9cIiArIG1ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9LyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLyR7aXRlbX1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzTm9GaWx0ZXJhYmxlO1xuXHR9KTtcblx0cmV0dXJuIGlzTm9GaWx0ZXJhYmxlO1xufVxuXG4vLyBJbnRlcm5hbCB1c2FnZSBvbmx5XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5RGF0YVR5cGUobmF2aWdhdGlvbkNvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgZGF0YVR5cGUgPSBuYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIiRUeXBlXCIpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0Ly8gaWYgJGtpbmQgZXhpc3RzLCBpdCdzIG5vdCBhIERhdGFGaWVsZCBhbmQgd2UgaGF2ZSB0aGUgZmluYWwgdHlwZSBhbHJlYWR5XG5cdGlmICghbmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCIka2luZFwiKSkge1xuXHRcdHN3aXRjaCAoZGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0ZGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aFVybFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uXCI6XG5cdFx0XHRcdGRhdGFUeXBlID0gbmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJWYWx1ZS8kUGF0aC8kVHlwZVwiKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBuYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIlRhcmdldC8kQW5ub3RhdGlvblBhdGhcIikgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGguaW5jbHVkZXMoXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RcIikpIHtcblx0XHRcdFx0XHRcdGRhdGFUeXBlID0gbmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL2ZuLyRQYXRoLyRUeXBlXCIpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25QYXRoLmluY2x1ZGVzKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpKSB7XG5cdFx0XHRcdFx0XHRkYXRhVHlwZSA9IG5hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiVmFsdWUvJFBhdGgvJFR5cGVcIikgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBlLmcuIEZpZWxkR3JvdXAgb3IgQ2hhcnRcblx0XHRcdFx0XHRcdGRhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZGF0YVR5cGU7XG59XG5cbi8vIEZyb20gQ29tbW9uVXRpbHMsIENvbW1vbkhlbHBlciwgRmlsdGVyQmFyRGVsZWdhdGUsIEZpbHRlckZpZWxkLCBWYWx1ZUxpc3RIZWxwZXIsIFRhYmxlRGVsZWdhdGVcbi8vIFRPRE8gY2hlY2sgdXNlZCBwbGFjZXMgYW5kIHJld29yayB0aGlzXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eUZpbHRlcmFibGUoXG5cdG1ldGFNb2RlbENvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLFxuXHRlbnRpdHlTZXRQYXRoOiBzdHJpbmcsXG5cdHByb3BlcnR5OiBzdHJpbmcsXG5cdHNraXBIaWRkZW5GaWx0ZXJzPzogYm9vbGVhblxuKTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0aWYgKHR5cGVvZiBwcm9wZXJ0eSAhPT0gXCJzdHJpbmdcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInNQcm9wZXJ0eSBwYXJhbWV0ZXIgbXVzdCBiZSBhIHN0cmluZ1wiKTtcblx0fVxuXG5cdC8vIFBhcmFtZXRlcnMgc2hvdWxkIGJlIHJlbmRlcmVkIGFzIGZpbHRlcmZpZWxkc1xuXHRpZiAobWV0YU1vZGVsQ29udGV4dC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCkgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRpb25Db250ZXh0ID0gbWV0YU1vZGVsQ29udGV4dC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtlbnRpdHlTZXRQYXRofS8ke3Byb3BlcnR5fWApO1xuXG5cdGlmIChuYXZpZ2F0aW9uQ29udGV4dCAmJiAhc2tpcEhpZGRlbkZpbHRlcnMpIHtcblx0XHRpZiAoXG5cdFx0XHRuYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIikgPT09IHRydWUgfHxcblx0XHRcdG5hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbkZpbHRlclwiKSA9PT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCBoaWRkZW5QYXRoID0gbmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuLyRQYXRoXCIpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBoaWRkZW5GaWx0ZXJQYXRoID0gbmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyLyRQYXRoXCIpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdGlmIChoaWRkZW5QYXRoICYmIGhpZGRlbkZpbHRlclBhdGgpIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihub3Qob3IocGF0aEluTW9kZWwoaGlkZGVuUGF0aCksIHBhdGhJbk1vZGVsKGhpZGRlbkZpbHRlclBhdGgpKSkpO1xuXHRcdH0gZWxzZSBpZiAoaGlkZGVuUGF0aCkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG5vdChwYXRoSW5Nb2RlbChoaWRkZW5QYXRoKSkpO1xuXHRcdH0gZWxzZSBpZiAoaGlkZGVuRmlsdGVyUGF0aCkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG5vdChwYXRoSW5Nb2RlbChoaWRkZW5GaWx0ZXJQYXRoKSkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY2hlY2tFbnRpdHlTZXRJc0ZpbHRlcmFibGUoZW50aXR5U2V0UGF0aCwgbWV0YU1vZGVsQ29udGV4dCwgcHJvcGVydHksIG5hdmlnYXRpb25Db250ZXh0KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgZW50aXR5IHByb3BlcnRpZXMgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgcmVxdWlyZWQsIG5vbi1jb21wdXRlZCBrZXkgYW5kIGltbXV0YWJsZSBmaWVsZHMuXG4gKiBAcGFyYW0gbWV0YU1vZGVsIE1ldGFtb2RlbFxuICogQHBhcmFtIHBhdGggRW50aXR5c2V0IFBhdGhcbiAqIEBwYXJhbSBhcHBDb21wb25lbnQgQXBwIENvbXBvbmVudFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgcmVxdWlyZWQsIG5vbi1jb21wdXRlZCBrZXkgYW5kIGltbXV0YWJsZSBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVBvcHVwRmllbGRzKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHBhdGg6IHN0cmluZywgYXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50KTogc3RyaW5nW10ge1xuXHRjb25zdCBkYXRhTW9kZWwgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldENvbnRleHQocGF0aCkpO1xuXHRjb25zdCBub25Db21wdXRlZFZpc2libGVLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBpbW11dGFibGVWaXNpYmxlRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCB2aXNpYmlsZVJlcXVpcmVkUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0Ly9XZSBmaXJzdCBwcm9jZXNzIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzXG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllcyA9IE1FVEFNT0RFTF9GVU5DVElPTlMuZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyhwYXRoLCBtZXRhTW9kZWwpO1xuXHRjb25zdCBlbnRpdHlQcm9wZXJ0aWVzID0gZGF0YU1vZGVsLnRhcmdldEVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcztcblx0Zm9yIChjb25zdCBwcm9wIG9mIGVudGl0eVByb3BlcnRpZXMpIHtcblx0XHRjb25zdCBhbm5vdGF0aW9ucyA9IHByb3AuYW5ub3RhdGlvbnMsXG5cdFx0XHRpc0tleSA9IHByb3AuaXNLZXksXG5cdFx0XHRwcm9wTmFtZSA9IHByb3AubmFtZSxcblx0XHRcdGlzSW1tdXRhYmxlID0gYW5ub3RhdGlvbnMuQ29yZT8uSW1tdXRhYmxlPy52YWx1ZU9mKCkgPT09IHRydWUsXG5cdFx0XHRpc05vbkNvbXB1dGVkID0gIShhbm5vdGF0aW9ucy5Db3JlPy5Db21wdXRlZD8udmFsdWVPZigpID09PSB0cnVlKSxcblx0XHRcdGlzVmlzaWJsZSA9ICEoYW5ub3RhdGlvbnMuVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlKSxcblx0XHRcdGlzQ29tcHV0ZWREZWZhdWx0VmFsdWUgPSBhbm5vdGF0aW9ucy5Db3JlPy5Db21wdXRlZERlZmF1bHRWYWx1ZT8udmFsdWVPZigpID09PSB0cnVlLFxuXHRcdFx0aXNLZXlDb21wdXRlZERlZmF1bHRWYWx1ZVdpdGhUZXh0ID1cblx0XHRcdFx0aXNLZXkgJiYgcHJvcC50eXBlID09PSBcIkVkbS5HdWlkXCIgPyBpc0NvbXB1dGVkRGVmYXVsdFZhbHVlICYmIGFubm90YXRpb25zLkNvbW1vbj8uVGV4dCA6IGZhbHNlO1xuXHRcdGlmICgoaXNLZXlDb21wdXRlZERlZmF1bHRWYWx1ZVdpdGhUZXh0IHx8IChpc0tleSAmJiBwcm9wLnR5cGUgIT09IFwiRWRtLkd1aWRcIikpICYmIGlzTm9uQ29tcHV0ZWQgJiYgaXNWaXNpYmxlKSB7XG5cdFx0XHRub25Db21wdXRlZFZpc2libGVLZXlzLnB1c2gocHJvcE5hbWUpO1xuXHRcdH0gZWxzZSBpZiAocmVxdWlyZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKHByb3BOYW1lKSAmJiBpc1Zpc2libGUgJiYgIShpc0tleSAmJiAhbm9uQ29tcHV0ZWRWaXNpYmxlS2V5cy5pbmNsdWRlcyhwcm9wTmFtZSkpKSB7XG5cdFx0XHR2aXNpYmlsZVJlcXVpcmVkUHJvcGVydGllcy5wdXNoKHByb3BOYW1lKTtcblx0XHR9IGVsc2UgaWYgKGlzSW1tdXRhYmxlICYmIGlzTm9uQ29tcHV0ZWQgJiYgaXNWaXNpYmxlKSB7XG5cdFx0XHRpbW11dGFibGVWaXNpYmxlRmllbGRzLnB1c2gocHJvcE5hbWUpO1xuXHRcdH1cblxuXHRcdGlmICghaXNOb25Db21wdXRlZCAmJiBpc0NvbXB1dGVkRGVmYXVsdFZhbHVlICYmIGFwcENvbXBvbmVudCkge1xuXHRcdFx0Y29uc3QgZGlhZ25vc3RpY3MgPSBhcHBDb21wb25lbnQuZ2V0RGlhZ25vc3RpY3MoKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBcIkNvcmUuQ29tcHV0ZWREZWZhdWx0VmFsdWUgaXMgaWdub3JlZCBhcyBDb3JlLkNvbXB1dGVkIGlzIGFscmVhZHkgc2V0IHRvIHRydWVcIjtcblx0XHRcdGRpYWdub3N0aWNzLmFkZElzc3VlKFxuXHRcdFx0XHRJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sXG5cdFx0XHRcdElzc3VlU2V2ZXJpdHkuTWVkaXVtLFxuXHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZSxcblx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUuQW5ub3RhdGlvbnMuSWdub3JlZEFubm90YXRpb25cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdC8vVGhlIG9yZGVyIG9mIGZpZWxkcyB3aWxsIGJlIG5vbiBjb21wdXRlZCBrZXkgZmllbGRzLCByZXF1aXJlZCBwcm9wZXJ0aWVzIGFuZCB0aGVuIG5vbiBjb21wdXRlZCBpbW11dGFibGUgZmllbGRzLlxuXHRyZXR1cm4gbm9uQ29tcHV0ZWRWaXNpYmxlS2V5cy5jb25jYXQodmlzaWJpbGVSZXF1aXJlZFByb3BlcnRpZXMpLmNvbmNhdChpbW11dGFibGVWaXNpYmxlRmllbGRzKTtcbn1cbi8vIEludGVybmFsIG9ubHksIGV4cG9zZWQgZm9yIHRlc3RzXG5mdW5jdGlvbiBnZXRSZXF1aXJlZFByb3BlcnRpZXMocGF0aDogc3RyaW5nLCBtZXRhTW9kZWxDb250ZXh0OiBPRGF0YU1ldGFNb2RlbCwgY2hlY2tVcGRhdGVSZXN0cmljdGlvbnMgPSBmYWxzZSk6IHN0cmluZ1tdIHtcblx0Y29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRsZXQgcmVxdWlyZWRQcm9wZXJ0aWVzV2l0aFBhdGg6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH1bXSA9IFtdO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGV4dCA9IFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIjtcblx0bGV0IGVudGl0eVNldEFubm90YXRpb246IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24gfCBudWxsID0gbnVsbDtcblx0aWYgKHBhdGguZW5kc1dpdGgoXCIkXCIpKSB7XG5cdFx0Ly8gaWYgc1BhdGggY29tZXMgd2l0aCBhICQgaW4gdGhlIGVuZCwgcmVtb3ZpbmcgaXQgYXMgaXQgaXMgb2Ygbm8gc2lnbmlmaWNhbmNlXG5cdFx0cGF0aCA9IHBhdGgucmVwbGFjZShcIi8kXCIsIFwiXCIpO1xuXHR9XG5cdGNvbnN0IGVudGl0eVR5cGVQYXRoUGFydHMgPSBwYXRoLnJlcGxhY2VBbGwoXCIlMkZcIiwgXCIvXCIpLnNwbGl0KFwiL1wiKS5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpO1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChwYXRoLCBtZXRhTW9kZWxDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5U2V0UGF0aFBhcnRzID0gZW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKE1vZGVsSGVscGVyLmZpbHRlck91dE5hdlByb3BCaW5kaW5nKTtcblx0Y29uc3QgaXNDb250YWlubWVudCA9IG1ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KGAvJHtlbnRpdHlUeXBlUGF0aFBhcnRzLmpvaW4oXCIvXCIpfS8kQ29udGFpbnNUYXJnZXRgKSA/IHRydWUgOiBmYWxzZTtcblx0Y29uc3QgY29udGFpbm1lbnROYXZQYXRoID0gaXNDb250YWlubWVudCA/IGVudGl0eVR5cGVQYXRoUGFydHNbZW50aXR5VHlwZVBhdGhQYXJ0cy5sZW5ndGggLSAxXSA6IFwiXCI7XG5cblx0Ly9SZXN0cmljdGlvbnMgZGlyZWN0bHkgYXQgRW50aXR5IFNldFxuXHQvL2UuZy4gRlIgaW4gXCJOUy5FbnRpdHlDb250YWluZXIvU2FsZXNPcmRlck1hbmFnZVwiIENvbnRleHRQYXRoOiAvU2FsZXNPcmRlck1hbmFnZVxuXHRpZiAoIWlzQ29udGFpbm1lbnQpIHtcblx0XHRlbnRpdHlTZXRBbm5vdGF0aW9uID0gbWV0YU1vZGVsQ29udGV4dC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH1AYCkgYXMgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbjtcblx0fVxuXHRpZiAoZW50aXR5VHlwZVBhdGhQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0Y29uc3QgbmF2UGF0aCA9IGlzQ29udGFpbm1lbnQgPyBjb250YWlubWVudE5hdlBhdGggOiBlbnRpdHlTZXRQYXRoUGFydHNbZW50aXR5U2V0UGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdGNvbnN0IGpvaW5UZXh0ID0gYC8ke25hdmlnYXRpb25UZXh0fS9gO1xuXHRcdGNvbnN0IHBhcmVudEVudGl0eVNldFBhdGggPSBpc0NvbnRhaW5tZW50ID8gZW50aXR5U2V0UGF0aCA6IGAvJHtlbnRpdHlTZXRQYXRoUGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oam9pblRleHQpfWA7XG5cdFx0Ly9OYXZpZ2F0aW9uIHJlc3RyaWN0aW9uc1xuXHRcdC8vZS5nLiBQYXJlbnQgXCIvQ3VzdG9tZXJcIiB3aXRoIE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg9XCJTZXRcIiBDb250ZXh0UGF0aDogQ3VzdG9tZXIvU2V0XG5cdFx0Y29uc3QgbmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IE1FVEFNT0RFTF9GVU5DVElPTlMuZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhcblx0XHRcdG1ldGFNb2RlbENvbnRleHQsXG5cdFx0XHRwYXJlbnRFbnRpdHlTZXRQYXRoLFxuXHRcdFx0bmF2UGF0aC5yZXBsYWNlQWxsKFwiJTJGXCIsIFwiL1wiKVxuXHRcdCk7XG5cblx0XHRpZiAoXG5cdFx0XHRuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdE1FVEFNT0RFTF9GVU5DVElPTlMuaGFzUmVzdHJpY3RlZFByb3BlcnRpZXNJbkFubm90YXRpb25zKG5hdmlnYXRpb25SZXN0cmljdGlvbnMsIHRydWUsIGNoZWNrVXBkYXRlUmVzdHJpY3Rpb25zKVxuXHRcdCkge1xuXHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzV2l0aFBhdGggPSBjaGVja1VwZGF0ZVJlc3RyaWN0aW9uc1xuXHRcdFx0XHQ/IG5hdmlnYXRpb25SZXN0cmljdGlvbnMuVXBkYXRlUmVzdHJpY3Rpb25zPy5SZXF1aXJlZFByb3BlcnRpZXMgPz8gW11cblx0XHRcdFx0OiBuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLkluc2VydFJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzID8/IFtdO1xuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHQhcmVxdWlyZWRQcm9wZXJ0aWVzV2l0aFBhdGgubGVuZ3RoICYmXG5cdFx0XHRNRVRBTU9ERUxfRlVOQ1RJT05TLmhhc1Jlc3RyaWN0ZWRQcm9wZXJ0aWVzSW5Bbm5vdGF0aW9ucyhlbnRpdHlTZXRBbm5vdGF0aW9uLCBmYWxzZSwgY2hlY2tVcGRhdGVSZXN0cmljdGlvbnMpXG5cdFx0KSB7XG5cdFx0XHRyZXF1aXJlZFByb3BlcnRpZXNXaXRoUGF0aCA9IE1FVEFNT0RFTF9GVU5DVElPTlMuZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUFubm90YXRpb25zKFxuXHRcdFx0XHRlbnRpdHlTZXRBbm5vdGF0aW9uLFxuXHRcdFx0XHRjaGVja1VwZGF0ZVJlc3RyaWN0aW9uc1xuXHRcdFx0KTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoTUVUQU1PREVMX0ZVTkNUSU9OUy5oYXNSZXN0cmljdGVkUHJvcGVydGllc0luQW5ub3RhdGlvbnMoZW50aXR5U2V0QW5ub3RhdGlvbiwgZmFsc2UsIGNoZWNrVXBkYXRlUmVzdHJpY3Rpb25zKSkge1xuXHRcdHJlcXVpcmVkUHJvcGVydGllc1dpdGhQYXRoID0gTUVUQU1PREVMX0ZVTkNUSU9OUy5nZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tQW5ub3RhdGlvbnMoZW50aXR5U2V0QW5ub3RhdGlvbiwgY2hlY2tVcGRhdGVSZXN0cmljdGlvbnMpO1xuXHR9XG5cdHJlcXVpcmVkUHJvcGVydGllc1dpdGhQYXRoLmZvckVhY2goZnVuY3Rpb24gKHJlcXVpcmVkUHJvcGVydHkpIHtcblx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSByZXF1aXJlZFByb3BlcnR5LiRQcm9wZXJ0eVBhdGg7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlQYXRoKTtcblx0fSk7XG5cdHJldHVybiByZXF1aXJlZFByb3BlcnRpZXM7XG59XG5cbi8vIFRyYW5zYWN0aW9uSGVscGVyIC8vIEludGVybmFsRmllbGRcbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zKHBhdGg6IHN0cmluZywgbWV0YW1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmdbXSB7XG5cdHJldHVybiBNRVRBTU9ERUxfRlVOQ1RJT05TLmdldFJlcXVpcmVkUHJvcGVydGllcyhwYXRoLCBtZXRhbW9kZWxDb250ZXh0KTtcbn1cblxuLy8gSW50ZXJuYWxGaWVsZFxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMocGF0aDogc3RyaW5nLCBtZXRhbW9kZWxDb250ZXh0OiBPRGF0YU1ldGFNb2RlbCk6IHN0cmluZ1tdIHtcblx0cmV0dXJuIE1FVEFNT0RFTF9GVU5DVElPTlMuZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzKHBhdGgsIG1ldGFtb2RlbENvbnRleHQsIHRydWUpO1xufVxuXG4vLyBJbnRlcm5hbCBvbmx5LCBleHBvc2VkIGZvciB0ZXN0c1xuZnVuY3Rpb24gZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUFubm90YXRpb25zKFxuXHRhbm5vdGF0aW9uczogTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbiB8IG51bGwsXG5cdGNoZWNrVXBkYXRlUmVzdHJpY3Rpb25zID0gZmFsc2Vcbik6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH1bXSB7XG5cdGlmIChjaGVja1VwZGF0ZVJlc3RyaWN0aW9ucykge1xuXHRcdHJldHVybiBhbm5vdGF0aW9ucz8uW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVXBkYXRlUmVzdHJpY3Rpb25zXCJdPy5SZXF1aXJlZFByb3BlcnRpZXMgPz8gW107XG5cdH1cblx0cmV0dXJuIGFubm90YXRpb25zPy5bXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5JbnNlcnRSZXN0cmljdGlvbnNcIl0/LlJlcXVpcmVkUHJvcGVydGllcyA/PyBbXTtcbn1cblxuLy8gSW50ZXJuYWwgb25seSwgZXhwb3NlZCBmb3IgdGVzdHNcbmZ1bmN0aW9uIGhhc1Jlc3RyaWN0ZWRQcm9wZXJ0aWVzSW5Bbm5vdGF0aW9ucyhcblx0YW5ub3RhdGlvbnM6IE1ldGFNb2RlbFR5cGU8TmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb25UeXBlcz4gfCBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uIHwgbnVsbCxcblx0aXNOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZmFsc2UsXG5cdGNoZWNrVXBkYXRlUmVzdHJpY3Rpb25zID0gZmFsc2Vcbik6IGJvb2xlYW4ge1xuXHRpZiAoaXNOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKSB7XG5cdFx0Y29uc3QgbmF2QW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9ucyBhcyBNZXRhTW9kZWxUeXBlPE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXM+IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChjaGVja1VwZGF0ZVJlc3RyaWN0aW9ucykge1xuXHRcdFx0cmV0dXJuIG5hdkFubm90YXRpb25zPy5VcGRhdGVSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyA/IHRydWUgOiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG5hdkFubm90YXRpb25zPy5JbnNlcnRSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyA/IHRydWUgOiBmYWxzZTtcblx0fSBlbHNlIGlmIChjaGVja1VwZGF0ZVJlc3RyaWN0aW9ucykge1xuXHRcdGNvbnN0IGVudGl0eUFubm90YXRpb25zID0gYW5ub3RhdGlvbnMgYXMgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4gZW50aXR5QW5ub3RhdGlvbnM/LltcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlVwZGF0ZVJlc3RyaWN0aW9uc1wiXT8uUmVxdWlyZWRQcm9wZXJ0aWVzID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cdGNvbnN0IGVudGl0eXRTZXRBbm5vdGF0aW9ucyA9IGFubm90YXRpb25zIGFzIE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24gfCB1bmRlZmluZWQ7XG5cdHJldHVybiBlbnRpdHl0U2V0QW5ub3RhdGlvbnM/LltcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluc2VydFJlc3RyaWN0aW9uc1wiXT8uUmVxdWlyZWRQcm9wZXJ0aWVzID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG5leHBvcnQgdHlwZSBDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9uID0ge1xuXHRjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRuYW1lPzogc3RyaW5nO1xuXHRwcm9wZXJ0eVBhdGg/OiBzdHJpbmc7XG5cdHNvcnRhYmxlPzogYm9vbGVhbjtcblx0c29ydE9yZGVyPzogc3RyaW5nO1xuXHRjdXN0b20/OiBib29sZWFuO1xufTtcblxuLy8gVXNlZCBpbiB0aGlzIGZpbGUgYW5kIEZpbHRlclV0aWxzXG4vKipcbiAqIFJldHVybnMgY3VzdG9tIGFnZ3JlZ2F0ZXMgZm9yIGEgZ2l2ZW4gZW50aXR5U2V0LlxuICpcbiAqIEBwYXJhbSBhbm5vdGF0aW9ucyBBIGxpc3Qgb2YgYW5ub3RhdGlvbnMgb2YgdGhlIGVudGl0eSBzZXRcbiAqIEByZXR1cm5zIEEgbWFwIHRvIHRoZSBjdXN0b20gYWdncmVnYXRlcyBrZXllZCBieSB0aGVpciBxdWFsaWZpZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxDdXN0b21BZ2dyZWdhdGVzKGFubm90YXRpb25zOiBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbj4ge1xuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9uPiA9IHt9O1xuXHRsZXQgYW5ub3RhdGlvbjtcblx0Zm9yIChjb25zdCBhbm5vdGF0aW9uS2V5IGluIGFubm90YXRpb25zKSB7XG5cdFx0aWYgKGFubm90YXRpb25LZXkuc3RhcnRzV2l0aChcIkBPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQ3VzdG9tQWdncmVnYXRlXCIpKSB7XG5cdFx0XHRhbm5vdGF0aW9uID0gYW5ub3RhdGlvbktleS5yZXBsYWNlKFwiQE9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5DdXN0b21BZ2dyZWdhdGUjXCIsIFwiXCIpO1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhcnRzID0gYW5ub3RhdGlvbi5zcGxpdChcIkBcIik7XG5cblx0XHRcdGlmIChhbm5vdGF0aW9uUGFydHMubGVuZ3RoID09IDIpIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tQWdncmVnYXRlOiBDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9uID0ge307XG5cdFx0XHRcdC8vaW5uZXIgYW5ub3RhdGlvbiB0aGF0IGlzIG5vdCBwYXJ0IG9mIFx0VmFsaWRhdGlvbi5BZ2dyZWdhdGFibGVUZXJtc1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhcnRzWzFdID09IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNcIikge1xuXHRcdFx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZS5jb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gYW5ub3RhdGlvbnNbYW5ub3RhdGlvbktleV0gYXMgc3RyaW5nW107XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhcnRzWzFdID09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCIpIHtcblx0XHRcdFx0XHRjdXN0b21BZ2dyZWdhdGUubGFiZWwgPSBhbm5vdGF0aW9uc1thbm5vdGF0aW9uS2V5XSBhcyBzdHJpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3VzdG9tQWdncmVnYXRlc1thbm5vdGF0aW9uUGFydHNbMF1dID0gY3VzdG9tQWdncmVnYXRlO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uUGFydHMubGVuZ3RoID09IDEpIHtcblx0XHRcdFx0Y3VzdG9tQWdncmVnYXRlc1thbm5vdGF0aW9uUGFydHNbMF1dID0ge1xuXHRcdFx0XHRcdG5hbWU6IGFubm90YXRpb25QYXJ0c1swXSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGg6IGFubm90YXRpb25QYXJ0c1swXSxcblx0XHRcdFx0XHRsYWJlbDogYEN1c3RvbSBBZ2dyZWdhdGUgKCR7YW5ub3RhdGlvbn0pYCxcblx0XHRcdFx0XHRzb3J0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzb3J0T3JkZXI6IFwiYm90aFwiLFxuXHRcdFx0XHRcdGN1c3RvbTogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjdXN0b21BZ2dyZWdhdGVzO1xufVxuXG4vLyBVc2VkIGluIFZhbHVlTGlzdEhlbHBlciwgQ2hhcnREZWxlZ2F0ZSBhbmQgVmFsdWVIZWxwLVRhYmxlRGVsZWdhdGVcbmV4cG9ydCB0eXBlIFNvcnRSZXN0cmljdGlvbnNQcm9wZXJ0eUluZm9UeXBlID0ge1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0c29ydERpcmVjdGlvbj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNvcnRSZXN0cmljdGlvbnNJbmZvVHlwZSA9IHtcblx0c29ydGFibGU6IGJvb2xlYW47XG5cdHByb3BlcnR5SW5mbzogUmVjb3JkPHN0cmluZywgU29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5SW5mb1R5cGU+O1xufTtcbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgc29ydGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZXN0cmljdGlvbiBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBlbnRpdHlTZXRBbm5vdGF0aW9ucyBFbnRpdHlTZXQgb3IgY29sbGVjdGlvbiBhbm5vdGF0aW9ucyB3aXRoIHRoZSBzb3J0IHJlc3RyaWN0aW9ucyBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgc29ydCByZXN0cmljdGlvbiBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8oZW50aXR5U2V0QW5ub3RhdGlvbnM6IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24pOiBTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUge1xuXHRjb25zdCBzb3J0UmVzdHJpY3Rpb25zSW5mbzogU29ydFJlc3RyaWN0aW9uc0luZm9UeXBlID0ge1xuXHRcdHNvcnRhYmxlOiB0cnVlLFxuXHRcdHByb3BlcnR5SW5mbzoge31cblx0fTtcblxuXHRjb25zdCBzb3J0UmVzdHJpY3Rpb25zID0gZW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zXCJdO1xuXG5cdGlmICghc29ydFJlc3RyaWN0aW9ucykge1xuXHRcdHJldHVybiBzb3J0UmVzdHJpY3Rpb25zSW5mbztcblx0fVxuXG5cdGlmIChzb3J0UmVzdHJpY3Rpb25zLlNvcnRhYmxlID09PSBmYWxzZSkge1xuXHRcdHNvcnRSZXN0cmljdGlvbnNJbmZvLnNvcnRhYmxlID0gZmFsc2U7XG5cdH1cblxuXHRmb3IgKGNvbnN0IHByb3BlcnR5SXRlbSBvZiBzb3J0UmVzdHJpY3Rpb25zLk5vblNvcnRhYmxlUHJvcGVydGllcyB8fCBbXSkge1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHByb3BlcnR5SXRlbS4kUHJvcGVydHlQYXRoO1xuXHRcdHNvcnRSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1twcm9wZXJ0eU5hbWVdID0ge1xuXHRcdFx0c29ydGFibGU6IGZhbHNlXG5cdFx0fTtcblx0fVxuXG5cdGZvciAoY29uc3QgcHJvcGVydHlJdGVtIG9mIHNvcnRSZXN0cmljdGlvbnMuQXNjZW5kaW5nT25seVByb3BlcnRpZXMgfHwgW10pIHtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUl0ZW0uJFByb3BlcnR5UGF0aDtcblx0XHRzb3J0UmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bcHJvcGVydHlOYW1lXSA9IHtcblx0XHRcdHNvcnRhYmxlOiB0cnVlLFxuXHRcdFx0c29ydERpcmVjdGlvbjogXCJhc2NcIiAvLyBub3QgdXNlZCwgeWV0XG5cdFx0fTtcblx0fVxuXG5cdGZvciAoY29uc3QgcHJvcGVydHlJdGVtIG9mIHNvcnRSZXN0cmljdGlvbnMuRGVzY2VuZGluZ09ubHlQcm9wZXJ0aWVzIHx8IFtdKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJdGVtLiRQcm9wZXJ0eVBhdGg7XG5cdFx0c29ydFJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3Byb3BlcnR5TmFtZV0gPSB7XG5cdFx0XHRzb3J0YWJsZTogdHJ1ZSxcblx0XHRcdHNvcnREaXJlY3Rpb246IFwiZGVzY1wiIC8vIG5vdCB1c2VkLCB5ZXRcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHNvcnRSZXN0cmljdGlvbnNJbmZvO1xufVxuXG4vLyBVc2VkIGluIENoYXJ0RGVsZWdhdGUgYW5kIFZhbHVlSGVscC1UYWJsZURlbGVnYXRlXG5leHBvcnQgdHlwZSBGaWx0ZXJSZXN0cmljdGlvbnNQcm9wZXJ0eUluZm9UeXBlID0ge1xuXHRmaWx0ZXJhYmxlOiBib29sZWFuO1xuXHRhbGxvd2VkRXhwcmVzc2lvbnM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlclJlc3RyaWN0aW9uc0luZm9UeXBlID0ge1xuXHRmaWx0ZXJhYmxlOiBib29sZWFuO1xuXHRyZXF1aXJlc0ZpbHRlcjogYm9vbGVhbjtcblx0cHJvcGVydHlJbmZvOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJSZXN0cmljdGlvbnNQcm9wZXJ0eUluZm9UeXBlPjtcblx0cmVxdWlyZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXTtcbn07XG4vKipcbiAqIERldGVybWluZXMgdGhlIGZpbHRlciBpbmZvcm1hdGlvbiBiYXNlZCBvbiB0aGUgZmlsdGVyIHJlc3RyaWN0aW9ucyBhbm5vYXRpb24uXG4gKlxuICogQHBhcmFtIGZpbHRlclJlc3RyaWN0aW9ucyBUaGUgZmlsdGVyIHJlc3RyaWN0aW9ucyBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsdGVyIHJlc3RyaWN0aW9uIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJSZXN0cmljdGlvbnNJbmZvKGZpbHRlclJlc3RyaWN0aW9ucz86IE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4pOiBGaWx0ZXJSZXN0cmljdGlvbnNJbmZvVHlwZSB7XG5cdGxldCBpLCBwcm9wZXJ0eU5hbWU7XG5cdGNvbnN0IGZpbHRlclJlc3RyaWN0aW9uc0luZm86IEZpbHRlclJlc3RyaWN0aW9uc0luZm9UeXBlID0ge1xuXHRcdGZpbHRlcmFibGU6IHRydWUsXG5cdFx0cmVxdWlyZXNGaWx0ZXI6IGZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZXNGaWx0ZXIgfHwgZmFsc2UsXG5cdFx0cHJvcGVydHlJbmZvOiB7fSxcblx0XHRyZXF1aXJlZFByb3BlcnRpZXM6IFtdXG5cdH07XG5cblx0aWYgKCFmaWx0ZXJSZXN0cmljdGlvbnMpIHtcblx0XHRyZXR1cm4gZmlsdGVyUmVzdHJpY3Rpb25zSW5mbztcblx0fVxuXG5cdGlmIChmaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLmZpbHRlcmFibGUgPSBmYWxzZTtcblx0fVxuXG5cdC8vSGllcmFyY2hpY2FsIENhc2Vcblx0aWYgKGZpbHRlclJlc3RyaWN0aW9ucy5SZXF1aXJlZFByb3BlcnRpZXMpIHtcblx0XHRmb3IgKGkgPSAwOyBpIDwgZmlsdGVyUmVzdHJpY3Rpb25zLlJlcXVpcmVkUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0cHJvcGVydHlOYW1lID0gZmlsdGVyUmVzdHJpY3Rpb25zLlJlcXVpcmVkUHJvcGVydGllc1tpXS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0ZmlsdGVyUmVzdHJpY3Rpb25zSW5mby5yZXF1aXJlZFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eU5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gZmlsdGVyUmVzdHJpY3Rpb25zLk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzPy5tYXAoKHByb3ApID0+IHByb3AuJFByb3BlcnR5UGF0aCkgfHwgW107XG5cdGNvbnN0IGZpbHRlcmFibGVQcm9wZXJ0aWVzID0gZmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnM/Lm1hcCgocHJvcCkgPT4gcHJvcC5Qcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCkgfHwgW107XG5cdGdldEZpbHRlcmFibGVEYXRhKGZpbHRlclJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvLCBub25GaWx0ZXJhYmxlUHJvcGVydGllcywgZmlsdGVyYWJsZVByb3BlcnRpZXMpO1xuXG5cdGlmIChmaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucykge1xuXHRcdC8vVEJEXG5cdFx0Zm9yIChpID0gMDsgaSA8IGZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRwcm9wZXJ0eU5hbWUgPSBmaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uc1tpXS5Qcm9wZXJ0eT8uJFByb3BlcnR5UGF0aDtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0ZmlsdGVyUmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bcHJvcGVydHlOYW1lXVtcImFsbG93ZWRFeHByZXNzaW9uc1wiXSA9IGZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zW2ldXG5cdFx0XHRcdFx0LkFsbG93ZWRFeHByZXNzaW9ucyBhcyB1bmtub3duIGFzIHN0cmluZ1tdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmaWx0ZXJSZXN0cmljdGlvbnNJbmZvO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCB1cGRhdGUgdGhlIG9iaiB0byBoYXZlIGxpc3Qgb2YgcHJvcGVydGllcyB3aGljaCBjYW4gYmUgZmlsdGVyZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSBmaWx0ZXJEYXRhT2JqXG4gKiBAcGFyYW0gbm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcbiAqIEBwYXJhbSBmaWx0ZXJhYmxlUHJvcGVydGllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyYWJsZURhdGEoXG5cdGZpbHRlckRhdGFPYmo6IFJlY29yZDxzdHJpbmcsIEZpbHRlclJlc3RyaWN0aW9uc1Byb3BlcnR5SW5mb1R5cGU+LFxuXHRub25GaWx0ZXJhYmxlUHJvcGVydGllczogc3RyaW5nW10sXG5cdGZpbHRlcmFibGVQcm9wZXJ0aWVzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdXG4pOiB2b2lkIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBub25GaWx0ZXJhYmxlUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuXHRcdGZpbHRlckRhdGFPYmpbbm9uRmlsdGVyYWJsZVByb3BlcnRpZXNbaV1dID0ge1xuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2Vcblx0XHR9O1xuXHR9XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVyYWJsZVByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBwcm9wTmFtZSA9IGZpbHRlcmFibGVQcm9wZXJ0aWVzW2ldO1xuXHRcdGlmIChwcm9wTmFtZSkge1xuXHRcdFx0ZmlsdGVyRGF0YU9ialtwcm9wTmFtZV0gPSB7XG5cdFx0XHRcdGZpbHRlcmFibGU6IHRydWVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59XG5cbi8vIFVzZWQgaW4gQ2hhcnREZWxlZ2F0ZSBhbmQgVmFsdWVIZWxwLVRhYmxlRGVsZWdhdGVcbi8qKlxuICogUHJvdmlkZXMgdGhlIGluZm9ybWF0aW9uIGlmIHRoZSBGaWx0ZXJFeHByZXNzaW9uIGlzIGEgbXVsdGlWYWx1ZSBGaWx0ZXIgRXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gZmlsdGVyRXhwcmVzc2lvbiBUaGUgRmlsdGVyRXhwcmVzc2lvblR5cGVcbiAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZSB3ZXRoZXIgaXQgaXMgYSBtdWx0aVZhbHVlIEZpbHRlciBFeHByZXNzaW9uIG9yIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbihmaWx0ZXJFeHByZXNzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcblx0bGV0IGlzTXVsdGlWYWx1ZSA9IHRydWU7XG5cblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRzd2l0Y2ggKGZpbHRlckV4cHJlc3Npb24pIHtcblx0XHRjYXNlIFwiU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdGNhc2UgXCJTaW5nbGVSYW5nZVwiOlxuXHRcdGNhc2UgXCJTaW5nbGVWYWx1ZVwiOlxuXHRcdFx0aXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gaXNNdWx0aVZhbHVlO1xufVxuXG4vLyBETyBOT1QgVVNFLCBvbmx5IGZvciB0ZXN0cyBhbmQgaW50ZXJuYWxseSBpbiB0aGlzIGZpbGVcbmV4cG9ydCBjb25zdCBNRVRBTU9ERUxfRlVOQ1RJT05TID0ge1xuXHRnZXRSZXF1aXJlZFByb3BlcnRpZXMsXG5cdGdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21Bbm5vdGF0aW9ucyxcblx0aGFzUmVzdHJpY3RlZFByb3BlcnRpZXNJbkFubm90YXRpb25zLFxuXHRnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zLFxuXHRnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLFxuXHRnZXRBbGxDdXN0b21BZ2dyZWdhdGVzLFxuXHRnZXRGaWx0ZXJhYmxlRGF0YVxufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFzQkE7RUFDTyxTQUFTQSxxQkFBcUIsQ0FBQ0MsUUFBZ0IsRUFBRUMsU0FBeUIsRUFBcUQ7SUFDckksSUFBSUMsa0JBQWtCO0lBQ3RCLElBQUlDLDRCQUE0QjtJQUNoQyxNQUFNQyxjQUFjLEdBQUcsNEJBQTRCO0lBQ25ELE1BQU1DLHNCQUFzQixHQUFHLCtDQUErQztJQUM5RSxNQUFNQyxtQkFBbUIsR0FBR04sUUFBUSxDQUFDTyxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNDLE1BQU0sQ0FBQ0MsV0FBVyxDQUFDQyx1QkFBdUIsQ0FBQztJQUNsSCxNQUFNQyxhQUFhLEdBQUdGLFdBQVcsQ0FBQ0csZ0JBQWdCLENBQUNiLFFBQVEsRUFBRUMsU0FBUyxDQUFDO0lBQ3ZFLE1BQU1hLGtCQUFrQixHQUFHRixhQUFhLENBQUNKLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsTUFBTSxDQUFDQyxXQUFXLENBQUNDLHVCQUF1QixDQUFDO0lBQy9GLE1BQU1JLGFBQWEsR0FBR2QsU0FBUyxDQUFDZSxTQUFTLENBQUUsSUFBR1YsbUJBQW1CLENBQUNXLElBQUksQ0FBQyxHQUFHLENBQUUsa0JBQWlCLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSztJQUM3RyxNQUFNQyxrQkFBa0IsR0FBR0gsYUFBYSxHQUFHVCxtQkFBbUIsQ0FBQ0EsbUJBQW1C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
@@ -8,10 +8,10 @@ import type {
8
8
  NavigationRestrictionsType,
9
9
  SearchRestrictionsType
10
10
  } from "@sap-ux/vocabularies-types/vocabularies/Capabilities";
11
+ import type { CompiledBindingToolkitExpression } from "sap/fe/base/BindingToolkit";
12
+ import { compileExpression, not, or, pathInModel } from "sap/fe/base/BindingToolkit";
11
13
  import type AppComponent from "sap/fe/core/AppComponent";
12
14
  import { IssueCategory, IssueCategoryType, IssueSeverity } from "sap/fe/core/converters/helpers/IssueManager";
13
- import type { CompiledBindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
14
- import { compileExpression, not, or, pathInModel } from "sap/fe/core/helpers/BindingToolkit";
15
15
  import ModelHelper from "sap/fe/core/helpers/ModelHelper";
16
16
  import type { DefaultTypeForEdmType } from "sap/fe/core/type/EDM";
17
17
  import { isTypeFilterable } from "sap/fe/core/type/EDM";
@@ -39,8 +39,11 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards"], function (TypeGuards) {
39
39
  this.contextPath = contextPath;
40
40
  this.navigationProperties = [];
41
41
  this.contextNavigationProperties = [];
42
- this.absolutePath = metaPath; //enhancePath(contextPath, metaPath);
42
+ this.absolutePath = enhancePath(contextPath, metaPath);
43
43
  this.relativePath = this.absolutePath.replace(contextPath, "");
44
+ if (this.relativePath.startsWith("/")) {
45
+ this.relativePath = this.relativePath.substring(1);
46
+ }
44
47
  const resolvedMetaPath = this.convertedMetadata.resolvePath(this.absolutePath);
45
48
  const resolvedContextPath = this.convertedMetadata.resolvePath(contextPath);
46
49
  if (resolvedMetaPath.target === undefined || resolvedMetaPath.target === null) {
@@ -86,7 +89,10 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards"], function (TypeGuards) {
86
89
  if (rootEntitySet === undefined || currentEntityType === undefined) {
87
90
  throw new Error("MetaPath doesn't contain an entitySet -> Should never happen");
88
91
  }
89
- this.serviceObjectPath = this.contextPath + this.navigationProperties.map(nav => nav.name).join("/");
92
+ this.serviceObjectPath = this.contextPath;
93
+ if (this.navigationProperties.length) {
94
+ this.serviceObjectPath += "/" + this.navigationProperties.map(nav => nav.name).join("/");
95
+ }
90
96
  this.rootEntitySet = rootEntitySet;
91
97
  this.currentEntitySet = currentEntitySet;
92
98
  this.currentEntityType = currentEntityType;
@@ -209,4 +215,4 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards"], function (TypeGuards) {
209
215
  _exports = MetaPath;
210
216
  return _exports;
211
217
  }, false);
212
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1NlcnZpY2VPYmplY3QiLCJvYmplY3RQYXJ0IiwiaGFzT3duUHJvcGVydHkiLCJlbmhhbmNlUGF0aCIsInNCYXNlUGF0aCIsInNQYXRoQWRkaXRpb24iLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJNZXRhUGF0aCIsImNvbnZlcnRlZE1ldGFkYXRhIiwibWV0YVBhdGgiLCJjb250ZXh0UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiY29udGV4dE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiYWJzb2x1dGVQYXRoIiwicmVsYXRpdmVQYXRoIiwicmVwbGFjZSIsInJlc29sdmVkTWV0YVBhdGgiLCJyZXNvbHZlUGF0aCIsInJlc29sdmVkQ29udGV4dFBhdGgiLCJ0YXJnZXQiLCJ1bmRlZmluZWQiLCJFcnJvciIsInRhcmdldE9iamVjdCIsInJvb3RFbnRpdHlTZXQiLCJjdXJyZW50RW50aXR5U2V0IiwiY3VycmVudEVudGl0eVR5cGUiLCJuYXZpZ2F0ZWRQYXRocyIsIm9iamVjdFBhdGgiLCJmb3JFYWNoIiwiX3R5cGUiLCJwdXNoIiwibmFtZSIsInRhcmdldFR5cGUiLCJuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwiam9pbiIsImVudGl0eVR5cGUiLCJnZXRSZXNvbHZlZENvbnRleHRQYXRoIiwic2VydmljZU9iamVjdFBhdGgiLCJtYXAiLCJuYXYiLCJjb250ZXh0Um9vdEVudGl0eVNldCIsImdldENvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInNQYXRoUGFydCIsImdldFJlbGF0aXZlUGF0aCIsImdldFRhcmdldCIsImdldENsb3Nlc3RFbnRpdHlTZXQiLCJjbG9zZXN0RW50aXR5U2V0IiwibmF2aWdhdGlvblByb3BlcnR5IiwiZ2V0Q2xvc2VzdEVudGl0eVR5cGUiLCJjbG9zZXN0RW50aXR5VHlwZSIsImdldENvbnRleHRDbG9zZXN0RW50aXR5U2V0IiwiZ2V0TmF2aWdhdGlvblByb3BlcnRpZXMiLCJnZXRNZXRhUGF0aEZvclBhdGgiLCJ0YXJnZXRQYXRoIiwiZ2V0TWV0YVBhdGhGb3JPYmplY3QiLCJpc0Fubm90YXRpb25QYXRoIiwidmFsdWUiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInBhdGgiLCJtZXRhUGF0aEFwcCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdldENvbnZlcnRlZE1ldGFkYXRhIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXRhUGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdENvbnZlcnRlZE1ldGFkYXRhLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRSZXNvbHV0aW9uVGFyZ2V0LFxuXHRTZXJ2aWNlT2JqZWN0LFxuXHRTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbixcblx0U2luZ2xldG9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uUGF0aCwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5cbmZ1bmN0aW9uIGlzU2VydmljZU9iamVjdChvYmplY3RQYXJ0OiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbik6IG9iamVjdFBhcnQgaXMgU2VydmljZU9iamVjdCB7XG5cdHJldHVybiBvYmplY3RQYXJ0ICYmIG9iamVjdFBhcnQuaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKTtcbn1cblxuZnVuY3Rpb24gZW5oYW5jZVBhdGgoc0Jhc2VQYXRoOiBzdHJpbmcsIHNQYXRoQWRkaXRpb24/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRpZiAoc1BhdGhBZGRpdGlvbikge1xuXHRcdGlmIChzUGF0aEFkZGl0aW9uLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRyZXR1cm4gc1BhdGhBZGRpdGlvbjtcblx0XHR9IGVsc2UgaWYgKHNQYXRoQWRkaXRpb24uc3RhcnRzV2l0aChcIkBcIikpIHtcblx0XHRcdHJldHVybiBzQmFzZVBhdGggKyBzUGF0aEFkZGl0aW9uO1xuXHRcdH0gZWxzZSBpZiAoIXNCYXNlUGF0aC5lbmRzV2l0aChcIi9cIikpIHtcblx0XHRcdHJldHVybiBzQmFzZVBhdGggKyBcIi9cIiArIHNQYXRoQWRkaXRpb247XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzQmFzZVBhdGggKyBzUGF0aEFkZGl0aW9uO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gc0Jhc2VQYXRoO1xufVxuXG50eXBlIFJlc29sdmVkVGFyZ2V0PFQ+ID0gVCBleHRlbmRzIEFubm90YXRpb25QYXRoPGluZmVyIEs+XG5cdD8gS1xuXHQ6IFQgZXh0ZW5kcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxpbmZlciBWIGV4dGVuZHMgc3RyaW5nPlxuXHQ/IFZcblx0OiBUIGV4dGVuZHMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHVua25vd24+XG5cdD8gUHJvcGVydHkgfCB1bmRlZmluZWRcblx0OiBUO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRhUGF0aDxUPiB7XG5cdHByaXZhdGUgcm9vdEVudGl0eVNldDogRW50aXR5U2V0O1xuXG5cdHByaXZhdGUgY29udGV4dFJvb3RFbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGFic29sdXRlUGF0aDogc3RyaW5nO1xuXG5cdHByaXZhdGUgc2VydmljZU9iamVjdFBhdGg6IHN0cmluZztcblxuXHRwcml2YXRlIHJlbGF0aXZlUGF0aDogc3RyaW5nO1xuXG5cdHByaXZhdGUgbmF2aWdhdGlvblByb3BlcnRpZXM6IE5hdmlnYXRpb25Qcm9wZXJ0eVtdO1xuXG5cdHByaXZhdGUgY29udGV4dE5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBOYXZpZ2F0aW9uUHJvcGVydHlbXTtcblxuXHRwcml2YXRlIGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGN1cnJlbnRFbnRpdHlUeXBlPzogRW50aXR5VHlwZTtcblxuXHRwcml2YXRlIHRhcmdldE9iamVjdDogVDtcblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBNZXRhUGF0aCBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb252ZXJ0ZWRNZXRhZGF0YSBUaGUgY3VycmVudCBtb2RlbCBjb252ZXJ0ZXIgb3V0cHV0XG5cdCAqIEBwYXJhbSBtZXRhUGF0aCBUaGUgY3VycmVudCBvYmplY3QgbWV0YVBhdGhcblx0ICogQHBhcmFtIGNvbnRleHRQYXRoIFRoZSBjdXJyZW50IGNvbnRleHRcblx0ICovXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgY29udmVydGVkTWV0YWRhdGE6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRcdHByaXZhdGUgbWV0YVBhdGg6IHN0cmluZyxcblx0XHRwcml2YXRlIGNvbnRleHRQYXRoOiBzdHJpbmdcblx0KSB7XG5cdFx0dGhpcy5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IFtdO1xuXHRcdHRoaXMuY29udGV4dE5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gW107XG5cdFx0dGhpcy5hYnNvbHV0ZVBhdGggPSBtZXRhUGF0aDsgLy9lbmhhbmNlUGF0aChjb250ZXh0UGF0aCwgbWV0YVBhdGgpO1xuXHRcdHRoaXMucmVsYXRpdmVQYXRoID0gdGhpcy5hYnNvbHV0ZVBhdGgucmVwbGFjZShjb250ZXh0UGF0aCwgXCJcIik7XG5cblx0XHRjb25zdCByZXNvbHZlZE1ldGFQYXRoOiBSZXNvbHV0aW9uVGFyZ2V0PFQ+ID0gdGhpcy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aCh0aGlzLmFic29sdXRlUGF0aCk7XG5cdFx0Y29uc3QgcmVzb2x2ZWRDb250ZXh0UGF0aDogUmVzb2x1dGlvblRhcmdldDxUPiA9IHRoaXMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoY29udGV4dFBhdGgpO1xuXHRcdGlmIChyZXNvbHZlZE1ldGFQYXRoLnRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IHJlc29sdmVkTWV0YVBhdGgudGFyZ2V0ID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE5vIGFubm90YXRpb24gdGFyZ2V0IGZvdW5kIGZvciAke21ldGFQYXRofWApO1xuXHRcdH1cblx0XHR0aGlzLnRhcmdldE9iamVjdCA9IHJlc29sdmVkTWV0YVBhdGgudGFyZ2V0O1xuXHRcdGxldCByb290RW50aXR5U2V0OiBFbnRpdHlTZXQgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZDtcblx0XHRsZXQgY3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IG5hdmlnYXRlZFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHJlc29sdmVkTWV0YVBhdGgub2JqZWN0UGF0aC5mb3JFYWNoKChvYmplY3RQYXJ0OiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbikgPT4ge1xuXHRcdFx0aWYgKGlzU2VydmljZU9iamVjdChvYmplY3RQYXJ0KSkge1xuXHRcdFx0XHRzd2l0Y2ggKG9iamVjdFBhcnQuX3R5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiTmF2aWdhdGlvblByb3BlcnR5XCI6XG5cdFx0XHRcdFx0XHRuYXZpZ2F0ZWRQYXRocy5wdXNoKG9iamVjdFBhcnQubmFtZSk7XG5cdFx0XHRcdFx0XHR0aGlzLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2gob2JqZWN0UGFydCk7XG5cdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IG9iamVjdFBhcnQudGFyZ2V0VHlwZTtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50RW50aXR5U2V0ICYmIGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZy5oYXNPd25Qcm9wZXJ0eShuYXZpZ2F0ZWRQYXRocy5qb2luKFwiL1wiKSkpIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0ZWRQYXRocy5qb2luKFwiL1wiKV07XG5cdFx0XHRcdFx0XHRcdG5hdmlnYXRlZFBhdGhzID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRW50aXR5U2V0XCI6XG5cdFx0XHRcdFx0XHRpZiAocm9vdEVudGl0eVNldCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQgPSBvYmplY3RQYXJ0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IG9iamVjdFBhcnQ7XG5cdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IGN1cnJlbnRFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJFbnRpdHlUeXBlXCI6XG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudEVudGl0eVR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IG9iamVjdFBhcnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXNvbHZlZENvbnRleHRQYXRoLm9iamVjdFBhdGguZm9yRWFjaCgob2JqZWN0UGFydDogU2VydmljZU9iamVjdEFuZEFubm90YXRpb24pID0+IHtcblx0XHRcdHJvb3RFbnRpdHlTZXQgPSB0aGlzLmdldFJlc29sdmVkQ29udGV4dFBhdGgob2JqZWN0UGFydCwgY3VycmVudEVudGl0eVR5cGUsIHJvb3RFbnRpdHlTZXQpO1xuXHRcdH0pO1xuXHRcdGlmIChyb290RW50aXR5U2V0ID09PSB1bmRlZmluZWQgfHwgY3VycmVudEVudGl0eVR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiTWV0YVBhdGggZG9lc24ndCBjb250YWluIGFuIGVudGl0eVNldCAtPiBTaG91bGQgbmV2ZXIgaGFwcGVuXCIpO1xuXHRcdH1cblx0XHR0aGlzLnNlcnZpY2VPYmplY3RQYXRoID0gdGhpcy5jb250ZXh0UGF0aCArIHRoaXMubmF2aWdhdGlvblByb3BlcnRpZXMubWFwKChuYXYpID0+IG5hdi5uYW1lKS5qb2luKFwiL1wiKTtcblx0XHR0aGlzLnJvb3RFbnRpdHlTZXQgPSByb290RW50aXR5U2V0O1xuXHRcdHRoaXMuY3VycmVudEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdFx0dGhpcy5jdXJyZW50RW50aXR5VHlwZSA9IGN1cnJlbnRFbnRpdHlUeXBlO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZXNvbHZlZENvbnRleHRQYXRoKFxuXHRcdG9iamVjdFBhcnQ6IFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uLFxuXHRcdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkLFxuXHRcdHJvb3RFbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZFxuXHQpOiBFbnRpdHlTZXQgfCB1bmRlZmluZWQge1xuXHRcdGlmIChpc1NlcnZpY2VPYmplY3Qob2JqZWN0UGFydCkpIHtcblx0XHRcdHN3aXRjaCAob2JqZWN0UGFydC5fdHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiTmF2aWdhdGlvblByb3BlcnR5XCI6XG5cdFx0XHRcdFx0dGhpcy5jb250ZXh0TmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChvYmplY3RQYXJ0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0XHRcdGlmICh0aGlzLmNvbnRleHRSb290RW50aXR5U2V0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdHRoaXMuY29udGV4dFJvb3RFbnRpdHlTZXQgPSBvYmplY3RQYXJ0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocm9vdEVudGl0eVNldCA9PT0gdW5kZWZpbmVkICYmIG9iamVjdFBhcnQuZW50aXR5VHlwZSA9PT0gY3VycmVudEVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQgPSBvYmplY3RQYXJ0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJvb3RFbnRpdHlTZXQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q29udGV4dFBhdGgoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5jb250ZXh0UGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgYWJzb2x1dGUgcGF0aCBmb3IgdGhpcyBNZXRhUGF0aC5cblx0ICpcblx0ICogQHBhcmFtIHNQYXRoUGFydCBUaGUgcGF0aCB0byBldmFsdWF0ZVxuXHQgKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aFxuXHQgKi9cblx0cHVibGljIGdldFBhdGgoc1BhdGhQYXJ0Pzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZW5oYW5jZVBhdGgodGhpcy5hYnNvbHV0ZVBhdGgsIHNQYXRoUGFydCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGNvbnRleHQgZm9yIHRoaXMgTWV0YVBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBzUGF0aFBhcnQgVGhlIHBhdGggdG8gZXZhbHVhdGVcblx0ICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGhcblx0ICovXG5cdHB1YmxpYyBnZXRSZWxhdGl2ZVBhdGgoc1BhdGhQYXJ0Pzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZW5oYW5jZVBhdGgodGhpcy5yZWxhdGl2ZVBhdGgsIHNQYXRoUGFydCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHR5cGVkIHRhcmdldCBmb3IgdGhpcyBvYmplY3QgY2FsbC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHR5cGVkIHRhcmdldCBvYmplY3Rcblx0ICovXG5cdHB1YmxpYyBnZXRUYXJnZXQoKTogVCB7XG5cdFx0cmV0dXJuIHRoaXMudGFyZ2V0T2JqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBjbG9zZXN0IGVudGl0eXNldCBpbiB0aGUgcGF0aC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGNsb3Nlc3QgZW50aXR5c2V0XG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q2xvc2VzdEVudGl0eVNldCgpOiBFbnRpdHlTZXQgfCBTaW5nbGV0b24ge1xuXHRcdGxldCBjbG9zZXN0RW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gPSB0aGlzLnJvb3RFbnRpdHlTZXQ7XG5cdFx0Zm9yIChjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHkgb2YgdGhpcy5uYXZpZ2F0aW9uUHJvcGVydGllcykge1xuXHRcdFx0aWYgKGNsb3Nlc3RFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0aW9uUHJvcGVydHkubmFtZV0pIHtcblx0XHRcdFx0Y2xvc2VzdEVudGl0eVNldCA9IGNsb3Nlc3RFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0aW9uUHJvcGVydHkubmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjbG9zZXN0RW50aXR5U2V0O1xuXHR9XG5cblx0cHVibGljIGdldENsb3Nlc3RFbnRpdHlUeXBlKCk6IEVudGl0eVR5cGUge1xuXHRcdGxldCBjbG9zZXN0RW50aXR5VHlwZTogRW50aXR5VHlwZSA9IHRoaXMucm9vdEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdGZvciAoY29uc3QgbmF2aWdhdGlvblByb3BlcnR5IG9mIHRoaXMubmF2aWdhdGlvblByb3BlcnRpZXMpIHtcblx0XHRcdGNsb3Nlc3RFbnRpdHlUeXBlID0gbmF2aWdhdGlvblByb3BlcnR5LnRhcmdldFR5cGU7XG5cdFx0fVxuXHRcdHJldHVybiBjbG9zZXN0RW50aXR5VHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgY2xvc2VzdCBlbnRpdHlzZXQgaW4gdGhlIHBhdGguXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjbG9zZXN0IGVudGl0eXNldFxuXHQgKi9cblx0cHVibGljIGdldENvbnRleHRDbG9zZXN0RW50aXR5U2V0KCk6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGNsb3Nlc3RFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCA9IHRoaXMuY29udGV4dFJvb3RFbnRpdHlTZXQ7XG5cdFx0aWYgKGNsb3Nlc3RFbnRpdHlTZXQpIHtcblx0XHRcdGZvciAoY29uc3QgbmF2aWdhdGlvblByb3BlcnR5IG9mIHRoaXMuY29udGV4dE5hdmlnYXRpb25Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGlmIChjbG9zZXN0RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2aWdhdGlvblByb3BlcnR5Lm5hbWVdKSB7XG5cdFx0XHRcdFx0Y2xvc2VzdEVudGl0eVNldCA9IGNsb3Nlc3RFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0aW9uUHJvcGVydHkubmFtZV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNsb3Nlc3RFbnRpdHlTZXQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TmF2aWdhdGlvblByb3BlcnRpZXMoKTogTmF2aWdhdGlvblByb3BlcnR5W10ge1xuXHRcdHJldHVybiB0aGlzLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHR9XG5cblx0cHVibGljIGdldE1ldGFQYXRoRm9yUGF0aDxTdWJUeXBlPih0YXJnZXRQYXRoOiBzdHJpbmcpOiBNZXRhUGF0aDxTdWJUeXBlPiB7XG5cdFx0cmV0dXJuIG5ldyBNZXRhUGF0aDxTdWJUeXBlPih0aGlzLmNvbnZlcnRlZE1ldGFkYXRhLCBlbmhhbmNlUGF0aCh0aGlzLnNlcnZpY2VPYmplY3RQYXRoLCB0YXJnZXRQYXRoKSwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWV0YVBhdGhGb3JPYmplY3Q8U3ViVHlwZSBleHRlbmRzIHsgZnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmcgfT4odGFyZ2V0T2JqZWN0OiBTdWJUeXBlKTogTWV0YVBhdGg8UmVzb2x2ZWRUYXJnZXQ8U3ViVHlwZT4+IHtcblx0XHRpZiAoaXNBbm5vdGF0aW9uUGF0aCh0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRNZXRhUGF0aEZvclBhdGg8UmVzb2x2ZWRUYXJnZXQ8U3ViVHlwZT4+KHRhcmdldE9iamVjdC52YWx1ZSk7XG5cdFx0fSBlbHNlIGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRNZXRhUGF0aEZvclBhdGg8UmVzb2x2ZWRUYXJnZXQ8U3ViVHlwZT4+KHRhcmdldE9iamVjdC5wYXRoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbWV0YVBhdGhBcHAgPSB0YXJnZXRPYmplY3Q/LmZ1bGx5UXVhbGlmaWVkTmFtZT8ucmVwbGFjZShcblx0XHRcdFx0dGhpcy5yb290RW50aXR5U2V0Py5lbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0dGhpcy5jb250ZXh0UGF0aFxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBuZXcgTWV0YVBhdGg8UmVzb2x2ZWRUYXJnZXQ8U3ViVHlwZT4+KHRoaXMuY29udmVydGVkTWV0YWRhdGEsIG1ldGFQYXRoQXBwLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q29udmVydGVkTWV0YWRhdGEoKTogQ29udmVydGVkTWV0YWRhdGEge1xuXHRcdHJldHVybiB0aGlzLmNvbnZlcnRlZE1ldGFkYXRhO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7RUFjQSxTQUFTQSxlQUFlLENBQUNDLFVBQXNDLEVBQStCO0lBQzdGLE9BQU9BLFVBQVUsSUFBSUEsVUFBVSxDQUFDQyxjQUFjLENBQUMsT0FBTyxDQUFDO0VBQ3hEO0VBRUEsU0FBU0MsV0FBVyxDQUFDQyxTQUFpQixFQUFFQyxhQUFzQixFQUFVO0lBQ3ZFLElBQUlBLGFBQWEsRUFBRTtNQUNsQixJQUFJQSxhQUFhLENBQUNDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNsQyxPQUFPRCxhQUFhO01BQ3JCLENBQUMsTUFBTSxJQUFJQSxhQUFhLENBQUNDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN6QyxPQUFPRixTQUFTLEdBQUdDLGFBQWE7TUFDakMsQ0FBQyxNQUFNLElBQUksQ0FBQ0QsU0FBUyxDQUFDRyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDcEMsT0FBT0gsU0FBUyxHQUFHLEdBQUcsR0FBR0MsYUFBYTtNQUN2QyxDQUFDLE1BQU07UUFDTixPQUFPRCxTQUFTLEdBQUdDLGFBQWE7TUFDakM7SUFDRDtJQUNBLE9BQU9ELFNBQVM7RUFDakI7RUFBQyxJQVVvQkksUUFBUTtJQXFCNUI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQyxrQkFDU0MsaUJBQW9DLEVBQ3BDQyxRQUFnQixFQUNoQkMsV0FBbUIsRUFDMUI7TUFBQSxLQUhPRixpQkFBb0MsR0FBcENBLGlCQUFvQztNQUFBLEtBQ3BDQyxRQUFnQixHQUFoQkEsUUFBZ0I7TUFBQSxLQUNoQkMsV0FBbUIsR0FBbkJBLFdBQW1CO01BRTNCLElB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
218
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1NlcnZpY2VPYmplY3QiLCJvYmplY3RQYXJ0IiwiaGFzT3duUHJvcGVydHkiLCJlbmhhbmNlUGF0aCIsInNCYXNlUGF0aCIsInNQYXRoQWRkaXRpb24iLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJNZXRhUGF0aCIsImNvbnZlcnRlZE1ldGFkYXRhIiwibWV0YVBhdGgiLCJjb250ZXh0UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiY29udGV4dE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiYWJzb2x1dGVQYXRoIiwicmVsYXRpdmVQYXRoIiwicmVwbGFjZSIsInN1YnN0cmluZyIsInJlc29sdmVkTWV0YVBhdGgiLCJyZXNvbHZlUGF0aCIsInJlc29sdmVkQ29udGV4dFBhdGgiLCJ0YXJnZXQiLCJ1bmRlZmluZWQiLCJFcnJvciIsInRhcmdldE9iamVjdCIsInJvb3RFbnRpdHlTZXQiLCJjdXJyZW50RW50aXR5U2V0IiwiY3VycmVudEVudGl0eVR5cGUiLCJuYXZpZ2F0ZWRQYXRocyIsIm9iamVjdFBhdGgiLCJmb3JFYWNoIiwiX3R5cGUiLCJwdXNoIiwibmFtZSIsInRhcmdldFR5cGUiLCJuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwiam9pbiIsImVudGl0eVR5cGUiLCJnZXRSZXNvbHZlZENvbnRleHRQYXRoIiwic2VydmljZU9iamVjdFBhdGgiLCJsZW5ndGgiLCJtYXAiLCJuYXYiLCJjb250ZXh0Um9vdEVudGl0eVNldCIsImdldENvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInNQYXRoUGFydCIsImdldFJlbGF0aXZlUGF0aCIsImdldFRhcmdldCIsImdldENsb3Nlc3RFbnRpdHlTZXQiLCJjbG9zZXN0RW50aXR5U2V0IiwibmF2aWdhdGlvblByb3BlcnR5IiwiZ2V0Q2xvc2VzdEVudGl0eVR5cGUiLCJjbG9zZXN0RW50aXR5VHlwZSIsImdldENvbnRleHRDbG9zZXN0RW50aXR5U2V0IiwiZ2V0TmF2aWdhdGlvblByb3BlcnRpZXMiLCJnZXRNZXRhUGF0aEZvclBhdGgiLCJ0YXJnZXRQYXRoIiwiZ2V0TWV0YVBhdGhGb3JPYmplY3QiLCJpc0Fubm90YXRpb25QYXRoIiwidmFsdWUiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInBhdGgiLCJtZXRhUGF0aEFwcCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdldENvbnZlcnRlZE1ldGFkYXRhIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXRhUGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdENvbnZlcnRlZE1ldGFkYXRhLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRSZXNvbHV0aW9uVGFyZ2V0LFxuXHRTZXJ2aWNlT2JqZWN0LFxuXHRTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbixcblx0U2luZ2xldG9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uUGF0aCwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5cbmZ1bmN0aW9uIGlzU2VydmljZU9iamVjdChvYmplY3RQYXJ0OiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbik6IG9iamVjdFBhcnQgaXMgU2VydmljZU9iamVjdCB7XG5cdHJldHVybiBvYmplY3RQYXJ0ICYmIG9iamVjdFBhcnQuaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKTtcbn1cblxuZnVuY3Rpb24gZW5oYW5jZVBhdGgoc0Jhc2VQYXRoOiBzdHJpbmcsIHNQYXRoQWRkaXRpb24/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRpZiAoc1BhdGhBZGRpdGlvbikge1xuXHRcdGlmIChzUGF0aEFkZGl0aW9uLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRyZXR1cm4gc1BhdGhBZGRpdGlvbjtcblx0XHR9IGVsc2UgaWYgKHNQYXRoQWRkaXRpb24uc3RhcnRzV2l0aChcIkBcIikpIHtcblx0XHRcdHJldHVybiBzQmFzZVBhdGggKyBzUGF0aEFkZGl0aW9uO1xuXHRcdH0gZWxzZSBpZiAoIXNCYXNlUGF0aC5lbmRzV2l0aChcIi9cIikpIHtcblx0XHRcdHJldHVybiBzQmFzZVBhdGggKyBcIi9cIiArIHNQYXRoQWRkaXRpb247XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzQmFzZVBhdGggKyBzUGF0aEFkZGl0aW9uO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gc0Jhc2VQYXRoO1xufVxuXG50eXBlIFJlc29sdmVkVGFyZ2V0PFQ+ID0gVCBleHRlbmRzIEFubm90YXRpb25QYXRoPGluZmVyIEs+XG5cdD8gS1xuXHQ6IFQgZXh0ZW5kcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxpbmZlciBWIGV4dGVuZHMgc3RyaW5nPlxuXHQ/IFZcblx0OiBUIGV4dGVuZHMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHVua25vd24+XG5cdD8gUHJvcGVydHkgfCB1bmRlZmluZWRcblx0OiBUO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRhUGF0aDxUPiB7XG5cdHByaXZhdGUgcm9vdEVudGl0eVNldDogRW50aXR5U2V0O1xuXG5cdHByaXZhdGUgY29udGV4dFJvb3RFbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGFic29sdXRlUGF0aDogc3RyaW5nO1xuXG5cdHByaXZhdGUgc2VydmljZU9iamVjdFBhdGg6IHN0cmluZztcblxuXHRwcml2YXRlIHJlbGF0aXZlUGF0aDogc3RyaW5nO1xuXG5cdHByaXZhdGUgbmF2aWdhdGlvblByb3BlcnRpZXM6IE5hdmlnYXRpb25Qcm9wZXJ0eVtdO1xuXG5cdHByaXZhdGUgY29udGV4dE5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBOYXZpZ2F0aW9uUHJvcGVydHlbXTtcblxuXHRwcml2YXRlIGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGN1cnJlbnRFbnRpdHlUeXBlPzogRW50aXR5VHlwZTtcblxuXHRwcml2YXRlIHRhcmdldE9iamVjdDogVDtcblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBNZXRhUGF0aCBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb252ZXJ0ZWRNZXRhZGF0YSBUaGUgY3VycmVudCBtb2RlbCBjb252ZXJ0ZXIgb3V0cHV0XG5cdCAqIEBwYXJhbSBtZXRhUGF0aCBUaGUgY3VycmVudCBvYmplY3QgbWV0YVBhdGhcblx0ICogQHBhcmFtIGNvbnRleHRQYXRoIFRoZSBjdXJyZW50IGNvbnRleHRcblx0ICovXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgY29udmVydGVkTWV0YWRhdGE6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRcdHByaXZhdGUgbWV0YVBhdGg6IHN0cmluZyxcblx0XHRwcml2YXRlIGNvbnRleHRQYXRoOiBzdHJpbmdcblx0KSB7XG5cdFx0dGhpcy5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IFtdO1xuXHRcdHRoaXMuY29udGV4dE5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gW107XG5cdFx0dGhpcy5hYnNvbHV0ZVBhdGggPSBlbmhhbmNlUGF0aChjb250ZXh0UGF0aCwgbWV0YVBhdGgpO1xuXHRcdHRoaXMucmVsYXRpdmVQYXRoID0gdGhpcy5hYnNvbHV0ZVBhdGgucmVwbGFjZShjb250ZXh0UGF0aCwgXCJcIik7XG5cdFx0aWYgKHRoaXMucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHR0aGlzLnJlbGF0aXZlUGF0aCA9IHRoaXMucmVsYXRpdmVQYXRoLnN1YnN0cmluZygxKTtcblx0XHR9XG5cblx0XHRjb25zdCByZXNvbHZlZE1ldGFQYXRoOiBSZXNvbHV0aW9uVGFyZ2V0PFQ+ID0gdGhpcy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aCh0aGlzLmFic29sdXRlUGF0aCk7XG5cdFx0Y29uc3QgcmVzb2x2ZWRDb250ZXh0UGF0aDogUmVzb2x1dGlvblRhcmdldDxUPiA9IHRoaXMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoY29udGV4dFBhdGgpO1xuXHRcdGlmIChyZXNvbHZlZE1ldGFQYXRoLnRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IHJlc29sdmVkTWV0YVBhdGgudGFyZ2V0ID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE5vIGFubm90YXRpb24gdGFyZ2V0IGZvdW5kIGZvciAke21ldGFQYXRofWApO1xuXHRcdH1cblx0XHR0aGlzLnRhcmdldE9iamVjdCA9IHJlc29sdmVkTWV0YVBhdGgudGFyZ2V0O1xuXHRcdGxldCByb290RW50aXR5U2V0OiBFbnRpdHlTZXQgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZDtcblx0XHRsZXQgY3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IG5hdmlnYXRlZFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHJlc29sdmVkTWV0YVBhdGgub2JqZWN0UGF0aC5mb3JFYWNoKChvYmplY3RQYXJ0OiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbikgPT4ge1xuXHRcdFx0aWYgKGlzU2VydmljZU9iamVjdChvYmplY3RQYXJ0KSkge1xuXHRcdFx0XHRzd2l0Y2ggKG9iamVjdFBhcnQuX3R5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiTmF2aWdhdGlvblByb3BlcnR5XCI6XG5cdFx0XHRcdFx0XHRuYXZpZ2F0ZWRQYXRocy5wdXNoKG9iamVjdFBhcnQubmFtZSk7XG5cdFx0XHRcdFx0XHR0aGlzLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2gob2JqZWN0UGFydCk7XG5cdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IG9iamVjdFBhcnQudGFyZ2V0VHlwZTtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50RW50aXR5U2V0ICYmIGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZy5oYXNPd25Qcm9wZXJ0eShuYXZpZ2F0ZWRQYXRocy5qb2luKFwiL1wiKSkpIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0ZWRQYXRocy5qb2luKFwiL1wiKV07XG5cdFx0XHRcdFx0XHRcdG5hdmlnYXRlZFBhdGhzID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRW50aXR5U2V0XCI6XG5cdFx0XHRcdFx0XHRpZiAocm9vdEVudGl0eVNldCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQgPSBvYmplY3RQYXJ0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IG9iamVjdFBhcnQ7XG5cdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IGN1cnJlbnRFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJFbnRpdHlUeXBlXCI6XG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudEVudGl0eVR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IG9iamVjdFBhcnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXNvbHZlZENvbnRleHRQYXRoLm9iamVjdFBhdGguZm9yRWFjaCgob2JqZWN0UGFydDogU2VydmljZU9iamVjdEFuZEFubm90YXRpb24pID0+IHtcblx0XHRcdHJvb3RFbnRpdHlTZXQgPSB0aGlzLmdldFJlc29sdmVkQ29udGV4dFBhdGgob2JqZWN0UGFydCwgY3VycmVudEVudGl0eVR5cGUsIHJvb3RFbnRpdHlTZXQpO1xuXHRcdH0pO1xuXHRcdGlmIChyb290RW50aXR5U2V0ID09PSB1bmRlZmluZWQgfHwgY3VycmVudEVudGl0eVR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiTWV0YVBhdGggZG9lc24ndCBjb250YWluIGFuIGVudGl0eVNldCAtPiBTaG91bGQgbmV2ZXIgaGFwcGVuXCIpO1xuXHRcdH1cblx0XHR0aGlzLnNlcnZpY2VPYmplY3RQYXRoID0gdGhpcy5jb250ZXh0UGF0aDtcblx0XHRpZiAodGhpcy5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuc2VydmljZU9iamVjdFBhdGggKz0gXCIvXCIgKyB0aGlzLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcCgobmF2KSA9PiBuYXYubmFtZSkuam9pbihcIi9cIik7XG5cdFx0fVxuXHRcdHRoaXMucm9vdEVudGl0eVNldCA9IHJvb3RFbnRpdHlTZXQ7XG5cdFx0dGhpcy5jdXJyZW50RW50aXR5U2V0ID0gY3VycmVudEVudGl0eVNldDtcblx0XHR0aGlzLmN1cnJlbnRFbnRpdHlUeXBlID0gY3VycmVudEVudGl0eVR5cGU7XG5cdH1cblxuXHRwcml2YXRlIGdldFJlc29sdmVkQ29udGV4dFBhdGgoXG5cdFx0b2JqZWN0UGFydDogU2VydmljZU9iamVjdEFuZEFubm90YXRpb24sXG5cdFx0Y3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQsXG5cdFx0cm9vdEVudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkXG5cdCk6IEVudGl0eVNldCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGlzU2VydmljZU9iamVjdChvYmplY3RQYXJ0KSkge1xuXHRcdFx0c3dpdGNoIChvYmplY3RQYXJ0Ll90eXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJOYXZpZ2F0aW9uUHJvcGVydHlcIjpcblx0XHRcdFx0XHR0aGlzLmNvbnRleHROYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKG9iamVjdFBhcnQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiRW50aXR5U2V0XCI6XG5cdFx0XHRcdFx0aWYgKHRoaXMuY29udGV4dFJvb3RFbnRpdHlTZXQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0dGhpcy5jb250ZXh0Um9vdEVudGl0eVNldCA9IG9iamVjdFBhcnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChyb290RW50aXR5U2V0ID09PSB1bmRlZmluZWQgJiYgb2JqZWN0UGFydC5lbnRpdHlUeXBlID09PSBjdXJyZW50RW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0cm9vdEVudGl0eVNldCA9IG9iamVjdFBhcnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcm9vdEVudGl0eVNldDtcblx0fVxuXG5cdHB1YmxpYyBnZXRDb250ZXh0UGF0aCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmNvbnRleHRQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSBwYXRoIGZvciB0aGlzIE1ldGFQYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1BhdGhQYXJ0IFRoZSBwYXRoIHRvIGV2YWx1YXRlXG5cdCAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoXG5cdCAqL1xuXHRwdWJsaWMgZ2V0UGF0aChzUGF0aFBhcnQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBlbmhhbmNlUGF0aCh0aGlzLmFic29sdXRlUGF0aCwgc1BhdGhQYXJ0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgY29udGV4dCBmb3IgdGhpcyBNZXRhUGF0aC5cblx0ICpcblx0ICogQHBhcmFtIHNQYXRoUGFydCBUaGUgcGF0aCB0byBldmFsdWF0ZVxuXHQgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aFxuXHQgKi9cblx0cHVibGljIGdldFJlbGF0aXZlUGF0aChzUGF0aFBhcnQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBlbmhhbmNlUGF0aCh0aGlzLnJlbGF0aXZlUGF0aCwgc1BhdGhQYXJ0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgdHlwZWQgdGFyZ2V0IGZvciB0aGlzIG9iamVjdCBjYWxsLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgdHlwZWQgdGFyZ2V0IG9iamVjdFxuXHQgKi9cblx0cHVibGljIGdldFRhcmdldCgpOiBUIHtcblx0XHRyZXR1cm4gdGhpcy50YXJnZXRPYmplY3Q7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIGNsb3Nlc3QgZW50aXR5c2V0IGluIHRoZSBwYXRoLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgY2xvc2VzdCBlbnRpdHlzZXRcblx0ICovXG5cdHB1YmxpYyBnZXRDbG9zZXN0RW50aXR5U2V0KCk6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB7XG5cdFx0bGV0IGNsb3Nlc3RFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiA9IHRoaXMucm9vdEVudGl0eVNldDtcblx0XHRmb3IgKGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSBvZiB0aGlzLm5hdmlnYXRpb25Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAoY2xvc2VzdEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdmlnYXRpb25Qcm9wZXJ0eS5uYW1lXSkge1xuXHRcdFx0XHRjbG9zZXN0RW50aXR5U2V0ID0gY2xvc2VzdEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdmlnYXRpb25Qcm9wZXJ0eS5uYW1lXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNsb3Nlc3RFbnRpdHlTZXQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q2xvc2VzdEVudGl0eVR5cGUoKTogRW50aXR5VHlwZSB7XG5cdFx0bGV0IGNsb3Nlc3RFbnRpdHlUeXBlOiBFbnRpdHlUeXBlID0gdGhpcy5yb290RW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdFx0Zm9yIChjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHkgb2YgdGhpcy5uYXZpZ2F0aW9uUHJvcGVydGllcykge1xuXHRcdFx0Y2xvc2VzdEVudGl0eVR5cGUgPSBuYXZpZ2F0aW9uUHJvcGVydHkudGFyZ2V0VHlwZTtcblx0XHR9XG5cdFx0cmV0dXJuIGNsb3Nlc3RFbnRpdHlUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBjbG9zZXN0IGVudGl0eXNldCBpbiB0aGUgcGF0aC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGNsb3Nlc3QgZW50aXR5c2V0XG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q29udGV4dENsb3Nlc3RFbnRpdHlTZXQoKTogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgY2xvc2VzdEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkID0gdGhpcy5jb250ZXh0Um9vdEVudGl0eVNldDtcblx0XHRpZiAoY2xvc2VzdEVudGl0eVNldCkge1xuXHRcdFx0Zm9yIChjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHkgb2YgdGhpcy5jb250ZXh0TmF2aWdhdGlvblByb3BlcnRpZXMpIHtcblx0XHRcdFx0aWYgKGNsb3Nlc3RFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0aW9uUHJvcGVydHkubmFtZV0pIHtcblx0XHRcdFx0XHRjbG9zZXN0RW50aXR5U2V0ID0gY2xvc2VzdEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdmlnYXRpb25Qcm9wZXJ0eS5uYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2xvc2VzdEVudGl0eVNldDtcblx0fVxuXG5cdHB1YmxpYyBnZXROYXZpZ2F0aW9uUHJvcGVydGllcygpOiBOYXZpZ2F0aW9uUHJvcGVydHlbXSB7XG5cdFx0cmV0dXJuIHRoaXMubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWV0YVBhdGhGb3JQYXRoPFN1YlR5cGU+KHRhcmdldFBhdGg6IHN0cmluZyk6IE1ldGFQYXRoPFN1YlR5cGU+IHtcblx0XHRyZXR1cm4gbmV3IE1ldGFQYXRoPFN1YlR5cGU+KHRoaXMuY29udmVydGVkTWV0YWRhdGEsIGVuaGFuY2VQYXRoKHRoaXMuc2VydmljZU9iamVjdFBhdGgsIHRhcmdldFBhdGgpLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRNZXRhUGF0aEZvck9iamVjdDxTdWJUeXBlIGV4dGVuZHMgeyBmdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyB9Pih0YXJnZXRPYmplY3Q6IFN1YlR5cGUpOiBNZXRhUGF0aDxSZXNvbHZlZFRhcmdldDxTdWJUeXBlPj4ge1xuXHRcdGlmIChpc0Fubm90YXRpb25QYXRoKHRhcmdldE9iamVjdCkpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldE1ldGFQYXRoRm9yUGF0aDxSZXNvbHZlZFRhcmdldDxTdWJUeXBlPj4odGFyZ2V0T2JqZWN0LnZhbHVlKTtcblx0XHR9IGVsc2UgaWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHRhcmdldE9iamVjdCkpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldE1ldGFQYXRoRm9yUGF0aDxSZXNvbHZlZFRhcmdldDxTdWJUeXBlPj4odGFyZ2V0T2JqZWN0LnBhdGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBtZXRhUGF0aEFwcCA9IHRhcmdldE9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lPy5yZXBsYWNlKFxuXHRcdFx0XHR0aGlzLnJvb3RFbnRpdHlTZXQ/LmVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHR0aGlzLmNvbnRleHRQYXRoXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIG5ldyBNZXRhUGF0aDxSZXNvbHZlZFRhcmdldDxTdWJUeXBlPj4odGhpcy5jb252ZXJ0ZWRNZXRhZGF0YSwgbWV0YVBhdGhBcHAsIHRoaXMuY29udGV4dFBhdGgpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRDb252ZXJ0ZWRNZXRhZGF0YSgpOiBDb252ZXJ0ZWRNZXRhZGF0YSB7XG5cdFx0cmV0dXJuIHRoaXMuY29udmVydGVkTWV0YWRhdGE7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7OztFQWNBLFNBQVNBLGVBQWUsQ0FBQ0MsVUFBc0MsRUFBK0I7SUFDN0YsT0FBT0EsVUFBVSxJQUFJQSxVQUFVLENBQUNDLGNBQWMsQ0FBQyxPQUFPLENBQUM7RUFDeEQ7RUFFQSxTQUFTQyxXQUFXLENBQUNDLFNBQWlCLEVBQUVDLGFBQXNCLEVBQVU7SUFDdkUsSUFBSUEsYUFBYSxFQUFFO01BQ2xCLElBQUlBLGFBQWEsQ0FBQ0MsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2xDLE9BQU9ELGFBQWE7TUFDckIsQ0FBQyxNQUFNLElBQUlBLGFBQWEsQ0FBQ0MsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3pDLE9BQU9GLFNBQVMsR0FBR0MsYUFBYTtNQUNqQyxDQUFDLE1BQU0sSUFBSSxDQUFDRCxTQUFTLENBQUNHLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNwQyxPQUFPSCxTQUFTLEdBQUcsR0FBRyxHQUFHQyxhQUFhO01BQ3ZDLENBQUMsTUFBTTtRQUNOLE9BQU9ELFNBQVMsR0FBR0MsYUFBYTtNQUNqQztJQUNEO0lBQ0EsT0FBT0QsU0FB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
@@ -74,8 +74,11 @@ export default class MetaPath<T> {
74
74
  ) {
75
75
  this.navigationProperties = [];
76
76
  this.contextNavigationProperties = [];
77
- this.absolutePath = metaPath; //enhancePath(contextPath, metaPath);
77
+ this.absolutePath = enhancePath(contextPath, metaPath);
78
78
  this.relativePath = this.absolutePath.replace(contextPath, "");
79
+ if (this.relativePath.startsWith("/")) {
80
+ this.relativePath = this.relativePath.substring(1);
81
+ }
79
82
 
80
83
  const resolvedMetaPath: ResolutionTarget<T> = this.convertedMetadata.resolvePath(this.absolutePath);
81
84
  const resolvedContextPath: ResolutionTarget<T> = this.convertedMetadata.resolvePath(contextPath);
@@ -122,7 +125,10 @@ export default class MetaPath<T> {
122
125
  if (rootEntitySet === undefined || currentEntityType === undefined) {
123
126
  throw new Error("MetaPath doesn't contain an entitySet -> Should never happen");
124
127
  }
125
- this.serviceObjectPath = this.contextPath + this.navigationProperties.map((nav) => nav.name).join("/");
128
+ this.serviceObjectPath = this.contextPath;
129
+ if (this.navigationProperties.length) {
130
+ this.serviceObjectPath += "/" + this.navigationProperties.map((nav) => nav.name).join("/");
131
+ }
126
132
  this.rootEntitySet = rootEntitySet;
127
133
  this.currentEntitySet = currentEntitySet;
128
134
  this.currentEntityType = currentEntityType;