@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,7 +2,7 @@
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/helpers/BindingToolkit", "sap/fe/core/helpers/TypeGuards"], function (BindingToolkit, TypeGuards) {
5
+ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/TypeGuards"], function (BindingToolkit, TypeGuards) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -232,4 +232,4 @@ sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/TypeGu
232
232
  _exports.manageSemanticObjectsForCurrentUser = manageSemanticObjectsForCurrentUser;
233
233
  return _exports;
234
234
  }, false);
235
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXREeW5hbWljUGF0aEZyb21TZW1hbnRpY09iamVjdCIsInNlbWFudGljT2JqZWN0IiwiZHluYW1pY1NlbU9iamVjdFJlZ2V4IiwibWF0Y2giLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwiaGFzU2VtYW50aWNPYmplY3QiLCJwcm9wZXJ0eSIsIl9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJrZXkiLCJ0ZXJtIiwiZ2V0U2VtYW50aWNPYmplY3RzIiwic2VtYW50aWNPYmplY3RzIiwiYW5ub3RhdGlvbiIsImlzQW5ub3RhdGlvbk9mVGVybSIsInB1c2giLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwic2VtYW50aWNPYmplY3RNYXBwaW5ncyIsImdldFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwic2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJwcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibmF2UHJvcGVydHkiLCJjb250ZXh0TG9jYXRpb24iLCJmaW5kIiwiY29udGV4dE5hdlByb3AiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJnZXRTZW1hbnRpY09iamVjdHNBbmRRdWFsaWZpZXJNYXAiLCJxdWFsaWZpZXJNYXAiLCJzZW1hbnRpY09iamVjdHNMaXN0Iiwic2VtYW50aWNPYmplY3RzRXhwcmVzc2lvbkxpc3QiLCJ1bmRlZmluZWQiLCJzZW1hbnRpY09iamVjdEV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJjb21waWxlZFNlbWFudGljT2JqZWN0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJpbmNsdWRlcyIsInF1YWxpZmllciIsImdldFJlYWNoYWJsZVNlbWFudGljT2JqZWN0c1NldHRpbmdzIiwic2VtYW50aWNPYmplY3RzQ3VycmVudFVzZXJDYW5OYXZpZ2F0ZVRvIiwic2VtYW50aWNPYmplY3RMaXN0IiwiZHluYW1pY1NlbWFudGljT2JqZWN0c0xpc3QiLCJyZXN1bHQiLCJhY3R1YWxTZW1hbnRpY09iamVjdCIsImZvckVhY2giLCJfdHlwZSIsImhhc1JlYWNoYWJsZVN0YXRpY1NlbWFudGljT2JqZWN0IiwiZHluYW1pY1NlbWFudGljT2JqZWN0cyIsIm1hbmFnZVNlbWFudGljT2JqZWN0c0ZvckN1cnJlbnRVc2VyIiwiZGF0YU1vZGVsUGF0aCIsInNldHRpbmdzIiwiaW50ZXJuYWxEYXRhTW9kZWwiLCJtb2RlbHMiLCJpbnRlcm5hbCIsImFwcENvbXBvbmVudCIsImdldE1vZGVsIiwiZ2V0UHJvcGVydHkiLCJwcm9wZXJ0eVNlbWFudGljT2JqZWN0TGlzdCIsInByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0RnJvbU5hdmlnYXRpb24iLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsIlNlbWFudGljT2JqZWN0Iiwic2VtYW50aWNPYmplY3RWYWx1ZSIsImN1c3RvbVNlbWFudGljT2JqZWN0cyIsIkpTT04iLCJwYXJzZSIsImludGVybmFsU2VtYW50aWNPYmplY3QiLCJzZW1hbnRpY09iamVjdEV4cHJlc3Npb25Gcm9tRmllbGQiLCJyZXNvbHZlQmluZGluZ1N0cmluZyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2VtYW50aWNPYmplY3RIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdFNlbWFudGljT2JqZWN0LFxuXHRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBEYXRhUG9pbnRUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZyxcblx0dHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdHR5cGUgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVGVybSwgaXNOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5cbnR5cGUgUHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eSA9IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEdldCB0aGUgcGF0aCBvZiB0aGUgc2VtYW50aWMgb2JqZWN0IGlmIGl0IGlzIGEgZHluYW1pYyBTZW1hbnRpY09iamVjdC5cbiAqXG4gKiBAcGFyYW0gc2VtYW50aWNPYmplY3QgVGhlIHZhbHVlIG9mIHRoZSBDb21tb24uU2VtYW50aWNPYmplY3QgYW5ub3RhdGlvbi5cbiAqIEByZXR1cm5zICBUaGUgcGF0aCBvZiB0aGUgc2VtYW50aWMgb2JqZWN0IGlmIGl0IGlzIGEgZHluYW1pYyBTZW1hbnRpY09iamVjdCBudWxsIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldER5bmFtaWNQYXRoRnJvbVNlbWFudGljT2JqZWN0ID0gKHNlbWFudGljT2JqZWN0OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcblx0Y29uc3QgZHluYW1pY1NlbU9iamVjdFJlZ2V4ID0gc2VtYW50aWNPYmplY3Q/Lm1hdGNoKC97KC4qPyl9Lyk7XG5cdGlmIChzZW1hbnRpY09iamVjdD8uc3RhcnRzV2l0aChcIns9XCIpKSB7XG5cdFx0cmV0dXJuIHNlbWFudGljT2JqZWN0O1xuXHR9XG5cdGlmIChkeW5hbWljU2VtT2JqZWN0UmVnZXg/Lmxlbmd0aCAmJiBkeW5hbWljU2VtT2JqZWN0UmVnZXgubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiBkeW5hbWljU2VtT2JqZWN0UmVnZXhbMV07XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBwcm9wZXJ0eSBvciBhIE5hdmlnYXRpb25Qcm9wZXJ0eSBoYXMgYSBzZW1hbnRpYyBvYmplY3QgZGVmaW5lZCBvciBub3QuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgYSBzZW1hbnRpYyBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1NlbWFudGljT2JqZWN0ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlKTogYm9vbGVhbiB7XG5cdGNvbnN0IF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbiBhcyBSZWNvcmQ8c3RyaW5nLCB7IHRlcm0/OiBDb21tb25Bbm5vdGF0aW9uVGVybXM7IHF1YWxpZmllcj86IHN0cmluZyB9Pjtcblx0aWYgKF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnMpIHtcblx0XHRcdGlmIChfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9uc1trZXldPy50ZXJtID09PSBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZW1hbnRpY09iamVjdHMgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5KTogU2VtYW50aWNPYmplY3RbXSB7XG5cdGNvbnN0IHNlbWFudGljT2JqZWN0czogU2VtYW50aWNPYmplY3RbXSA9IFtdO1xuXHRjb25zdCBfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucyA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24gYXMgUmVjb3JkPHN0cmluZywgeyB0ZXJtPzogQ29tbW9uQW5ub3RhdGlvblRlcm1zOyBxdWFsaWZpZXI/OiBzdHJpbmcgfT47XG5cdGlmIChfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucykge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uID0gX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnNba2V5XTtcblx0XHRcdGlmIChpc0Fubm90YXRpb25PZlRlcm08U2VtYW50aWNPYmplY3Q+KGFubm90YXRpb24sIENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdCkpIHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RzLnB1c2goYW5ub3RhdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzZW1hbnRpY09iamVjdHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHkpOiBTZW1hbnRpY09iamVjdE1hcHBpbmdbXSB7XG5cdGNvbnN0IHNlbWFudGljT2JqZWN0TWFwcGluZ3M6IFNlbWFudGljT2JqZWN0TWFwcGluZ1tdID0gW107XG5cdGNvbnN0IF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbiBhcyBSZWNvcmQ8c3RyaW5nLCB7IHRlcm0/OiBDb21tb25Bbm5vdGF0aW9uVGVybXM7IHF1YWxpZmllcj86IHN0cmluZyB9Pjtcblx0aWYgKF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnMpIHtcblx0XHRcdGNvbnN0IGFubm90YXRpb24gPSBfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9uc1trZXldO1xuXHRcdFx0aWYgKGlzQW5ub3RhdGlvbk9mVGVybTxTZW1hbnRpY09iamVjdE1hcHBpbmc+KGFubm90YXRpb24sIENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdE1hcHBpbmcpKSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZ3MucHVzaChhbm5vdGF0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHNlbWFudGljT2JqZWN0TWFwcGluZ3M7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5KTogU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNbXSB7XG5cdGNvbnN0IHNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zOiBTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1tdID0gW107XG5cdGNvbnN0IF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbiBhcyBSZWNvcmQ8c3RyaW5nLCB7IHRlcm0/OiBDb21tb25Bbm5vdGF0aW9uVGVybXM7IHF1YWxpZmllcj86IHN0cmluZyB9Pjtcblx0aWYgKF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnMpIHtcblx0XHRcdGNvbnN0IGFubm90YXRpb24gPSBfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9uc1trZXldO1xuXHRcdFx0aWYgKGlzQW5ub3RhdGlvbk9mVGVybTxTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucz4oYW5ub3RhdGlvbiwgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zKSkge1xuXHRcdFx0XHRzZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucy5wdXNoKGFubm90YXRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gc2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydHkgb3IgdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgaW4gIGl0cyByZWxhdGl2ZSBwYXRoIHRoYXQgaG9sZHMgc2VtYW50aWNPYmplY3QgYW5ub3RhdGlvbiBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIEEgcHJvcGVydHkgb3IgYSBOYXZQcm9wZXJ0eSBvciB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0ID0gZnVuY3Rpb24gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGU+XG4pOiBQcm9wZXJ0eU9yTmF2aWdhdGlvblByb3BlcnR5IHtcblx0bGV0IHByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0OiBQcm9wZXJ0eU9yTmF2aWdhdGlvblByb3BlcnR5O1xuXHRpZiAoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgJiYgaGFzU2VtYW50aWNPYmplY3QoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpKSB7XG5cdFx0cHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eTtcblx0fSBlbHNlIGlmIChkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcblx0XHQvLyB0aGVyZSBhcmUgbm8gc2VtYW50aWMgb2JqZWN0cyBvbiB0aGUgcHJvcGVydHkgaXRzZWxmIHNvIHdlIGxvb2sgZm9yIHNvbWUgb24gbmF2IHByb3BlcnRpZXNcblx0XHRmb3IgKGNvbnN0IG5hdlByb3BlcnR5IG9mIGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0IWRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKFxuXHRcdFx0XHRcdChjb250ZXh0TmF2UHJvcCkgPT4gY29udGV4dE5hdlByb3AuZnVsbHlRdWFsaWZpZWROYW1lID09PSBuYXZQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdFx0KSAmJlxuXHRcdFx0XHQhcHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QgJiZcblx0XHRcdFx0aGFzU2VtYW50aWNPYmplY3QobmF2UHJvcGVydHkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QgPSBuYXZQcm9wZXJ0eTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0O1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIHNlbWFudGljT2JqZWN0IGNvbXBpbGUgYmluZGluZyBmcm9tIG1ldGFkYXRhIGFuZCBhIG1hcCB0byB0aGUgcXVhbGlmaWVycy5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QgVGhlIHByb3BlcnR5IHRoYXQgaG9sZHMgc2VtYW50aWNPYmplY3QgYW5ub3RhdGFpb25zIGlmIGl0IGV4aXN0c1xuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgc2VtYW50aWNPYmplY3RMaXN0IGFuZCBxdWFsaWZpZXJNYXBcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlbWFudGljT2JqZWN0c0FuZFF1YWxpZmllck1hcCA9IGZ1bmN0aW9uIChwcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdDogUHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eSk6IHtcblx0c2VtYW50aWNPYmplY3RzTGlzdDogc3RyaW5nW107XG5cdHNlbWFudGljT2JqZWN0c0V4cHJlc3Npb25MaXN0OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPltdO1xuXHRxdWFsaWZpZXJNYXA6IFJlY29yZDxzdHJpbmcsIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPjtcbn0ge1xuXHRjb25zdCBxdWFsaWZpZXJNYXA6IFJlY29yZDxzdHJpbmcsIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPiA9IHt9O1xuXHRjb25zdCBzZW1hbnRpY09iamVjdHNMaXN0OiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBzZW1hbnRpY09iamVjdHNFeHByZXNzaW9uTGlzdDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXSA9IFtdO1xuXHRpZiAocHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvciAoY29uc3Qgc2VtYW50aWNPYmplY3Qgb2YgZ2V0U2VtYW50aWNPYmplY3RzKHByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0KSkge1xuXHRcdFx0Y29uc3Qgc2VtYW50aWNPYmplY3RFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHNlbWFudGljT2JqZWN0KTtcblx0XHRcdGNvbnN0IGNvbXBpbGVkU2VtYW50aWNPYmplY3QgPSBjb21waWxlRXhwcmVzc2lvbihzZW1hbnRpY09iamVjdEV4cHJlc3Npb24pO1xuXHRcdFx0Ly8gdGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IHdlIG1ha2Ugc3VyZSBub3QgdG8gYWRkIHR3aWNlIHRoZSBzZW1hbnRpY09iamVjdCBvdGhlcndpc2UgdGhlIG1kY0xpbmsgY3Jhc2hlc1xuXHRcdFx0aWYgKGNvbXBpbGVkU2VtYW50aWNPYmplY3QgJiYgIXNlbWFudGljT2JqZWN0c0xpc3QuaW5jbHVkZXMoY29tcGlsZWRTZW1hbnRpY09iamVjdCkpIHtcblx0XHRcdFx0cXVhbGlmaWVyTWFwW3NlbWFudGljT2JqZWN0LnF1YWxpZmllciB8fCBcIlwiXSA9IGNvbXBpbGVkU2VtYW50aWNPYmplY3Q7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0c0xpc3QucHVzaChjb21waWxlZFNlbWFudGljT2JqZWN0KTtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RzRXhwcmVzc2lvbkxpc3QucHVzaChzZW1hbnRpY09iamVjdEV4cHJlc3Npb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4geyBzZW1hbnRpY09iamVjdHNMaXN0LCBzZW1hbnRpY09iamVjdHNFeHByZXNzaW9uTGlzdCwgcXVhbGlmaWVyTWFwIH07XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGN1cnJlbnQgdXNlciBjYW4gbmF2aWdhdGUgdG8gc2VtYW50aWMgb2JqZWN0cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgbGlzdHMuXG4gKlxuICogQHBhcmFtIHNlbWFudGljT2JqZWN0c0N1cnJlbnRVc2VyQ2FuTmF2aWdhdGVUbyBUaGUgbGlzdCBvZiBzZW1hbnRpYyBvYmplY3RzIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvLlxuICogQHBhcmFtIHNlbWFudGljT2JqZWN0TGlzdCBBbiBvYmplY3QgY29udGFpbmluZyBsaXN0cyBhbmQgbWFwcyBvZiBzZW1hbnRpYyBvYmplY3RzLlxuICogQHBhcmFtIHNlbWFudGljT2JqZWN0TGlzdC5zZW1hbnRpY09iamVjdHNMaXN0IFRoZSBsaXN0IG9mIGFsbCBzZW1hbnRpYyBvYmplY3RzLlxuICogQHBhcmFtIHNlbWFudGljT2JqZWN0TGlzdC5zZW1hbnRpY09iamVjdHNFeHByZXNzaW9uTGlzdCBUaGUgbGlzdCBvZiBleHByZXNzaW9ucyBmb3Igc2VtYW50aWMgb2JqZWN0cy5cbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdExpc3QucXVhbGlmaWVyTWFwIEEgbWFwIG9mIHF1YWxpZmllcnMgdG8gY29tcGlsZWQgZXhwcmVzc2lvbnMuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBzdGF0aWMgYW5kIGR5bmFtaWMgc2VtYW50aWMgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFJlYWNoYWJsZVNlbWFudGljT2JqZWN0c1NldHRpbmdzID0gZnVuY3Rpb24gKFxuXHRzZW1hbnRpY09iamVjdHNDdXJyZW50VXNlckNhbk5hdmlnYXRlVG86IHN0cmluZ1tdLFxuXHRzZW1hbnRpY09iamVjdExpc3Q6IHtcblx0XHRzZW1hbnRpY09iamVjdHNMaXN0OiBzdHJpbmdbXTtcblx0XHRzZW1hbnRpY09iamVjdHNFeHByZXNzaW9uTGlzdDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXTtcblx0XHRxdWFsaWZpZXJNYXA6IFJlY29yZDxzdHJpbmcsIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPjtcblx0fVxuKTogeyBoYXNSZWFjaGFibGVTdGF0aWNTZW1hbnRpY09iamVjdDogYm9vbGVhbjsgZHluYW1pY1NlbWFudGljT2JqZWN0czogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXSB9IHtcblx0Y29uc3QgZHluYW1pY1NlbWFudGljT2JqZWN0c0xpc3Q6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+W10gPSBbXTtcblx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXHRpZiAoc2VtYW50aWNPYmplY3RzQ3VycmVudFVzZXJDYW5OYXZpZ2F0ZVRvKSB7XG5cdFx0Zm9yIChjb25zdCBzZW1hbnRpY09iamVjdCBvZiBzZW1hbnRpY09iamVjdHNDdXJyZW50VXNlckNhbk5hdmlnYXRlVG8pIHtcblx0XHRcdGZvciAoY29uc3QgYWN0dWFsU2VtYW50aWNPYmplY3Qgb2Ygc2VtYW50aWNPYmplY3RMaXN0LnNlbWFudGljT2JqZWN0c0xpc3QpIHtcblx0XHRcdFx0aWYgKHNlbWFudGljT2JqZWN0ID09PSBhY3R1YWxTZW1hbnRpY09iamVjdCkge1xuXHRcdFx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHNlbWFudGljT2JqZWN0TGlzdC5zZW1hbnRpY09iamVjdHNFeHByZXNzaW9uTGlzdC5mb3JFYWNoKChzZW1hbnRpY09iamVjdEV4cHJlc3Npb24pID0+IHtcblx0XHRcdGlmIChzZW1hbnRpY09iamVjdEV4cHJlc3Npb24uX3R5cGUgIT09IFwiQ29uc3RhbnRcIikge1xuXHRcdFx0XHRkeW5hbWljU2VtYW50aWNPYmplY3RzTGlzdC5wdXNoKHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHsgaGFzUmVhY2hhYmxlU3RhdGljU2VtYW50aWNPYmplY3Q6IHJlc3VsdCwgZHluYW1pY1NlbWFudGljT2JqZWN0czogZHluYW1pY1NlbWFudGljT2JqZWN0c0xpc3QgfTtcbn07XG5cbi8qKlxuICogQ2hlY2sgdGhlIHVzZXIgcmlnaHRzIHRvIG5hdmlnYXRlIHRvIHRoZSBzZW1hbnRpYyBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdCBUaGUgc2VtYW50aWMgb2JqZWN0IG5hbWVcbiAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoIFRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIHNldHRpbmdzIFRoZSBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIG9mIHRoZSBpbnRlcm5hbCBmaWVsZFxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgc2VtYW50aWNPYmplY3RMaXN0IGFuZCBxdWFsaWZpZXJNYXBcbiAqL1xuZXhwb3J0IGNvbnN0IG1hbmFnZVNlbWFudGljT2JqZWN0c0ZvckN1cnJlbnRVc2VyID0gZnVuY3Rpb24gKFxuXHRzZW1hbnRpY09iamVjdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0c2V0dGluZ3M6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3Ncbik6IHsgaGFzUmVhY2hhYmxlU3RhdGljU2VtYW50aWNPYmplY3Q6IGJvb2xlYW47IGR5bmFtaWNTZW1hbnRpY09iamVjdHM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+W10gfSB7XG5cdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0ITtcblx0Y29uc3QgaW50ZXJuYWxEYXRhTW9kZWwgPSBzZXR0aW5ncy5tb2RlbHMuaW50ZXJuYWwgfHwgc2V0dGluZ3MuYXBwQ29tcG9uZW50Py5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRjb25zdCBzZW1hbnRpY09iamVjdHNDdXJyZW50VXNlckNhbk5hdmlnYXRlVG8gPSBpbnRlcm5hbERhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvc2VtYW50aWNPYmplY3RzXCIpO1xuXHRjb25zdCBwcm9wZXJ0eVNlbWFudGljT2JqZWN0TGlzdCA9IGdldFNlbWFudGljT2JqZWN0c0FuZFF1YWxpZmllck1hcChwcm9wZXJ0eSk7XG5cblx0Ly8gc2VtYW50aWMgb2JqZWN0IGlzIGluIG5hdmlnYXRpb25cblx0Y29uc3QgcHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3RGcm9tTmF2aWdhdGlvbiA9IGdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0KGRhdGFNb2RlbFBhdGgpO1xuXHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3RGcm9tTmF2aWdhdGlvbikpIHtcblx0XHRjb25zdCBzZW1hbnRpY09iamVjdEV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRwcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdEZyb21OYXZpZ2F0aW9uPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY09iamVjdFxuXHRcdCk7XG5cdFx0Y29uc3Qgc2VtYW50aWNPYmplY3RWYWx1ZSA9IGNvbXBpbGVFeHByZXNzaW9uKHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbik7XG5cdFx0cHJvcGVydHlTZW1hbnRpY09iamVjdExpc3Quc2VtYW50aWNPYmplY3RzRXhwcmVzc2lvbkxpc3QucHVzaChzZW1hbnRpY09iamVjdEV4cHJlc3Npb24pO1xuXHRcdHByb3BlcnR5U2VtYW50aWNPYmplY3RMaXN0LnNlbWFudGljT2JqZWN0c0xpc3QucHVzaChzZW1hbnRpY09iamVjdFZhbHVlIGFzIHN0cmluZyk7XG5cdH1cblxuXHQvLyBjdXN0b20gc2VtYW50aWNPYmplY3QgZnJvbSBmaWVsZCBwcm9wZXJ0eVxuXHRpZiAoc2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCAmJiBzZW1hbnRpY09iamVjdCAhPT0gXCJcIikge1xuXHRcdGlmIChzZW1hbnRpY09iamVjdFswXSA9PT0gXCJbXCIpIHtcblx0XHRcdGNvbnN0IGN1c3RvbVNlbWFudGljT2JqZWN0cyA9IEpTT04ucGFyc2Uoc2VtYW50aWNPYmplY3QpO1xuXHRcdFx0Y3VzdG9tU2VtYW50aWNPYmplY3RzLmZvckVhY2goKGludGVybmFsU2VtYW50aWNPYmplY3Q6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRwcm9wZXJ0eVNlbWFudGljT2JqZWN0TGlzdC5zZW1hbnRpY09iamVjdHNMaXN0LnB1c2goaW50ZXJuYWxTZW1hbnRpY09iamVjdCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcGVydHlTZW1hbnRpY09iamVjdExpc3Quc2VtYW50aWNPYmplY3RzTGlzdC5wdXNoKHNlbWFudGljT2JqZWN0KTtcblx0XHRcdC8vIFRoZSBzZW1hbnRpY09iamVjdCBwcm9wZXJ0eSBvZiB0aGUgZmllbGQgY29udGFpbnMgYSBmb3JtYXR0ZXIgb3IgYSBiaW5kaW5nIGV4cHJlc3Npb25cblx0XHRcdGlmIChzZW1hbnRpY09iamVjdC5zdGFydHNXaXRoKFwie1wiKSB8fCBzZW1hbnRpY09iamVjdC5zdGFydHNXaXRoKFwiez1cIikpIHtcblx0XHRcdFx0Y29uc3Qgc2VtYW50aWNPYmplY3RFeHByZXNzaW9uRnJvbUZpZWxkID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmcoc2VtYW50aWNPYmplY3QpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdFx0XHRwcm9wZXJ0eVNlbWFudGljT2JqZWN0TGlzdC5zZW1hbnRpY09iamVjdHNFeHByZXNzaW9uTGlzdC5wdXNoKHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbkZyb21GaWVsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBnZXRSZWFjaGFibGVTZW1hbnRpY09iamVjdHNTZXR0aW5ncyhzZW1hbnRpY09iamVjdHNDdXJyZW50VXNlckNhbk5hdmlnYXRlVG8sIHByb3BlcnR5U2VtYW50aWNPYmplY3RMaXN0KTtcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7RUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sTUFBTUEsZ0NBQWdDLEdBQUlDLGNBQXNCLElBQW9CO0lBQzFGLE1BQU1DLHFCQUFxQixHQUFHRCxjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUM5RCxJQUFJRixjQUFjLGFBQWRBLGNBQWMsZUFBZEEsY0FBYyxDQUFFRyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7TUFDckMsT0FBT0gsY0FBYztJQUN0QjtJQUNBLElBQUlDLHFCQUFxQixhQUFyQkEscUJBQXFCLGVBQXJCQSxxQkFBcUIsQ0FBRUcsTUFBTSxJQUFJSCxxQkFBcUIsQ0FBQ0csTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN0RSxPQUFPSCxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7SUFDaEM7SUFDQSxPQUFPLElBQUk7RUFDWixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sTUFBTUksaUJBQWlCLEdBQUcsVUFBVUMsUUFBZ0YsRUFBVztJQUFBO0lBQ3JJLE1BQU1DLDBCQUEwQiw0QkFBR0QsUUFBUSxDQUFDRSxXQUFXLDBEQUFwQixzQkFBc0JDLE1BQThFO0lBQ3ZJLElBQUlGLDBCQUEwQixFQUFFO01BQy9CLEtBQUssTUFBTUcsR0FBRyxJQUFJSCwwQkFBMEIsRUFBRTtRQUFBO1FBQzdDLElBQUksMEJBQUFBLDBCQUEwQixDQUFDRyxHQUFHLENBQUMsMERBQS9CLHNCQUFpQ0MsSUFBSSxxREFBeUMsRUFB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
235
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXREeW5hbWljUGF0aEZyb21TZW1hbnRpY09iamVjdCIsInNlbWFudGljT2JqZWN0IiwiZHluYW1pY1NlbU9iamVjdFJlZ2V4IiwibWF0Y2giLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwiaGFzU2VtYW50aWNPYmplY3QiLCJwcm9wZXJ0eSIsIl9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJrZXkiLCJ0ZXJtIiwiZ2V0U2VtYW50aWNPYmplY3RzIiwic2VtYW50aWNPYmplY3RzIiwiYW5ub3RhdGlvbiIsImlzQW5ub3RhdGlvbk9mVGVybSIsInB1c2giLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwic2VtYW50aWNPYmplY3RNYXBwaW5ncyIsImdldFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwic2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJwcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibmF2UHJvcGVydHkiLCJjb250ZXh0TG9jYXRpb24iLCJmaW5kIiwiY29udGV4dE5hdlByb3AiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJnZXRTZW1hbnRpY09iamVjdHNBbmRRdWFsaWZpZXJNYXAiLCJxdWFsaWZpZXJNYXAiLCJzZW1hbnRpY09iamVjdHNMaXN0Iiwic2VtYW50aWNPYmplY3RzRXhwcmVzc2lvbkxpc3QiLCJ1bmRlZmluZWQiLCJzZW1hbnRpY09iamVjdEV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJjb21waWxlZFNlbWFudGljT2JqZWN0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJpbmNsdWRlcyIsInF1YWxpZmllciIsImdldFJlYWNoYWJsZVNlbWFudGljT2JqZWN0c1NldHRpbmdzIiwic2VtYW50aWNPYmplY3RzQ3VycmVudFVzZXJDYW5OYXZpZ2F0ZVRvIiwic2VtYW50aWNPYmplY3RMaXN0IiwiZHluYW1pY1NlbWFudGljT2JqZWN0c0xpc3QiLCJyZXN1bHQiLCJhY3R1YWxTZW1hbnRpY09iamVjdCIsImZvckVhY2giLCJfdHlwZSIsImhhc1JlYWNoYWJsZVN0YXRpY1NlbWFudGljT2JqZWN0IiwiZHluYW1pY1NlbWFudGljT2JqZWN0cyIsIm1hbmFnZVNlbWFudGljT2JqZWN0c0ZvckN1cnJlbnRVc2VyIiwiZGF0YU1vZGVsUGF0aCIsInNldHRpbmdzIiwiaW50ZXJuYWxEYXRhTW9kZWwiLCJtb2RlbHMiLCJpbnRlcm5hbCIsImFwcENvbXBvbmVudCIsImdldE1vZGVsIiwiZ2V0UHJvcGVydHkiLCJwcm9wZXJ0eVNlbWFudGljT2JqZWN0TGlzdCIsInByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0RnJvbU5hdmlnYXRpb24iLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsIlNlbWFudGljT2JqZWN0Iiwic2VtYW50aWNPYmplY3RWYWx1ZSIsImN1c3RvbVNlbWFudGljT2JqZWN0cyIsIkpTT04iLCJwYXJzZSIsImludGVybmFsU2VtYW50aWNPYmplY3QiLCJzZW1hbnRpY09iamVjdEV4cHJlc3Npb25Gcm9tRmllbGQiLCJyZXNvbHZlQmluZGluZ1N0cmluZyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2VtYW50aWNPYmplY3RIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdFNlbWFudGljT2JqZWN0LFxuXHRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBEYXRhUG9pbnRUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHtcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmcsXG5cdHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHR0eXBlIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlRlcm0sIGlzTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuXG50eXBlIFByb3BlcnR5T3JOYXZpZ2F0aW9uUHJvcGVydHkgPSBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBHZXQgdGhlIHBhdGggb2YgdGhlIHNlbWFudGljIG9iamVjdCBpZiBpdCBpcyBhIGR5bmFtaWMgU2VtYW50aWNPYmplY3QuXG4gKlxuICogQHBhcmFtIHNlbWFudGljT2JqZWN0IFRoZSB2YWx1ZSBvZiB0aGUgQ29tbW9uLlNlbWFudGljT2JqZWN0IGFubm90YXRpb24uXG4gKiBAcmV0dXJucyAgVGhlIHBhdGggb2YgdGhlIHNlbWFudGljIG9iamVjdCBpZiBpdCBpcyBhIGR5bmFtaWMgU2VtYW50aWNPYmplY3QgbnVsbCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREeW5hbWljUGF0aEZyb21TZW1hbnRpY09iamVjdCA9IChzZW1hbnRpY09iamVjdDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG5cdGNvbnN0IGR5bmFtaWNTZW1PYmplY3RSZWdleCA9IHNlbWFudGljT2JqZWN0Py5tYXRjaCgveyguKj8pfS8pO1xuXHRpZiAoc2VtYW50aWNPYmplY3Q/LnN0YXJ0c1dpdGgoXCJ7PVwiKSkge1xuXHRcdHJldHVybiBzZW1hbnRpY09iamVjdDtcblx0fVxuXHRpZiAoZHluYW1pY1NlbU9iamVjdFJlZ2V4Py5sZW5ndGggJiYgZHluYW1pY1NlbU9iamVjdFJlZ2V4Lmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gZHluYW1pY1NlbU9iamVjdFJlZ2V4WzFdO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgcHJvcGVydHkgb3IgYSBOYXZpZ2F0aW9uUHJvcGVydHkgaGFzIGEgc2VtYW50aWMgb2JqZWN0IGRlZmluZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaGFzIGEgc2VtYW50aWMgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBoYXNTZW1hbnRpY09iamVjdCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZSk6IGJvb2xlYW4ge1xuXHRjb25zdCBfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucyA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24gYXMgUmVjb3JkPHN0cmluZywgeyB0ZXJtPzogQ29tbW9uQW5ub3RhdGlvblRlcm1zOyBxdWFsaWZpZXI/OiBzdHJpbmcgfT47XG5cdGlmIChfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucykge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0XHRpZiAoX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnNba2V5XT8udGVybSA9PT0gQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VtYW50aWNPYmplY3RzID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSk6IFNlbWFudGljT2JqZWN0W10ge1xuXHRjb25zdCBzZW1hbnRpY09iamVjdHM6IFNlbWFudGljT2JqZWN0W10gPSBbXTtcblx0Y29uc3QgX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnMgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uIGFzIFJlY29yZDxzdHJpbmcsIHsgdGVybT86IENvbW1vbkFubm90YXRpb25UZXJtczsgcXVhbGlmaWVyPzogc3RyaW5nIH0+O1xuXHRpZiAoX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnMpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucykge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbiA9IF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zW2tleV07XG5cdFx0XHRpZiAoaXNBbm5vdGF0aW9uT2ZUZXJtPFNlbWFudGljT2JqZWN0Pihhbm5vdGF0aW9uLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpKSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0cy5wdXNoKGFubm90YXRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gc2VtYW50aWNPYmplY3RzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbWFudGljT2JqZWN0TWFwcGluZ3MgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5KTogU2VtYW50aWNPYmplY3RNYXBwaW5nW10ge1xuXHRjb25zdCBzZW1hbnRpY09iamVjdE1hcHBpbmdzOiBTZW1hbnRpY09iamVjdE1hcHBpbmdbXSA9IFtdO1xuXHRjb25zdCBfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucyA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24gYXMgUmVjb3JkPHN0cmluZywgeyB0ZXJtPzogQ29tbW9uQW5ub3RhdGlvblRlcm1zOyBxdWFsaWZpZXI/OiBzdHJpbmcgfT47XG5cdGlmIChfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucykge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uID0gX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnNba2V5XTtcblx0XHRcdGlmIChpc0Fubm90YXRpb25PZlRlcm08U2VtYW50aWNPYmplY3RNYXBwaW5nPihhbm5vdGF0aW9uLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RNYXBwaW5nKSkge1xuXHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmdzLnB1c2goYW5ub3RhdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzZW1hbnRpY09iamVjdE1hcHBpbmdzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSk6IFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zW10ge1xuXHRjb25zdCBzZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uczogU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNbXSA9IFtdO1xuXHRjb25zdCBfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucyA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24gYXMgUmVjb3JkPHN0cmluZywgeyB0ZXJtPzogQ29tbW9uQW5ub3RhdGlvblRlcm1zOyBxdWFsaWZpZXI/OiBzdHJpbmcgfT47XG5cdGlmIChfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucykge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uID0gX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnNba2V5XTtcblx0XHRcdGlmIChpc0Fubm90YXRpb25PZlRlcm08U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM+KGFubm90YXRpb24sIENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucykpIHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMucHVzaChhbm5vdGF0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnR5IG9yIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IGluICBpdHMgcmVsYXRpdmUgcGF0aCB0aGF0IGhvbGRzIHNlbWFudGljT2JqZWN0IGFubm90YXRpb24gaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBBIHByb3BlcnR5IG9yIGEgTmF2UHJvcGVydHkgb3IgdW5kZWZpbmVkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCA9IGZ1bmN0aW9uIChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlPlxuKTogUHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eSB7XG5cdGxldCBwcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdDogUHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eTtcblx0aWYgKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0ICYmIGhhc1NlbWFudGljT2JqZWN0KGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSkge1xuXHRcdHByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0ID0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdH0gZWxzZSBpZiAoZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG5cdFx0Ly8gdGhlcmUgYXJlIG5vIHNlbWFudGljIG9iamVjdHMgb24gdGhlIHByb3BlcnR5IGl0c2VsZiBzbyB3ZSBsb29rIGZvciBzb21lIG9uIG5hdiBwcm9wZXJ0aWVzXG5cdFx0Zm9yIChjb25zdCBuYXZQcm9wZXJ0eSBvZiBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZChcblx0XHRcdFx0XHQoY29udGV4dE5hdlByb3ApID0+IGNvbnRleHROYXZQcm9wLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gbmF2UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdCkgJiZcblx0XHRcdFx0IXByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0ICYmXG5cdFx0XHRcdGhhc1NlbWFudGljT2JqZWN0KG5hdlByb3BlcnR5KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0ID0gbmF2UHJvcGVydHk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdDtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBzZW1hbnRpY09iamVjdCBjb21waWxlIGJpbmRpbmcgZnJvbSBtZXRhZGF0YSBhbmQgYSBtYXAgdG8gdGhlIHF1YWxpZmllcnMuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0IFRoZSBwcm9wZXJ0eSB0aGF0IGhvbGRzIHNlbWFudGljT2JqZWN0IGFubm90YXRhaW9ucyBpZiBpdCBleGlzdHNcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHNlbWFudGljT2JqZWN0TGlzdCBhbmQgcXVhbGlmaWVyTWFwXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZW1hbnRpY09iamVjdHNBbmRRdWFsaWZpZXJNYXAgPSBmdW5jdGlvbiAocHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3Q6IFByb3BlcnR5T3JOYXZpZ2F0aW9uUHJvcGVydHkpOiB7XG5cdHNlbWFudGljT2JqZWN0c0xpc3Q6IHN0cmluZ1tdO1xuXHRzZW1hbnRpY09iamVjdHNFeHByZXNzaW9uTGlzdDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXTtcblx0cXVhbGlmaWVyTWFwOiBSZWNvcmQ8c3RyaW5nLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbj47XG59IHtcblx0Y29uc3QgcXVhbGlmaWVyTWFwOiBSZWNvcmQ8c3RyaW5nLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbj4gPSB7fTtcblx0Y29uc3Qgc2VtYW50aWNPYmplY3RzTGlzdDogc3RyaW5nW10gPSBbXTtcblx0Y29uc3Qgc2VtYW50aWNPYmplY3RzRXhwcmVzc2lvbkxpc3Q6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+W10gPSBbXTtcblx0aWYgKHByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3IgKGNvbnN0IHNlbWFudGljT2JqZWN0IG9mIGdldFNlbWFudGljT2JqZWN0cyhwcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCkpIHtcblx0XHRcdGNvbnN0IHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihzZW1hbnRpY09iamVjdCk7XG5cdFx0XHRjb25zdCBjb21waWxlZFNlbWFudGljT2JqZWN0ID0gY29tcGlsZUV4cHJlc3Npb24oc2VtYW50aWNPYmplY3RFeHByZXNzaW9uKTtcblx0XHRcdC8vIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCB3ZSBtYWtlIHN1cmUgbm90IHRvIGFkZCB0d2ljZSB0aGUgc2VtYW50aWNPYmplY3Qgb3RoZXJ3aXNlIHRoZSBtZGNMaW5rIGNyYXNoZXNcblx0XHRcdGlmIChjb21waWxlZFNlbWFudGljT2JqZWN0ICYmICFzZW1hbnRpY09iamVjdHNMaXN0LmluY2x1ZGVzKGNvbXBpbGVkU2VtYW50aWNPYmplY3QpKSB7XG5cdFx0XHRcdHF1YWxpZmllck1hcFtzZW1hbnRpY09iamVjdC5xdWFsaWZpZXIgfHwgXCJcIl0gPSBjb21waWxlZFNlbWFudGljT2JqZWN0O1xuXHRcdFx0XHRzZW1hbnRpY09iamVjdHNMaXN0LnB1c2goY29tcGlsZWRTZW1hbnRpY09iamVjdCk7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0c0V4cHJlc3Npb25MaXN0LnB1c2goc2VtYW50aWNPYmplY3RFeHByZXNzaW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHsgc2VtYW50aWNPYmplY3RzTGlzdCwgc2VtYW50aWNPYmplY3RzRXhwcmVzc2lvbkxpc3QsIHF1YWxpZmllck1hcCB9O1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvIHNlbWFudGljIG9iamVjdHMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGxpc3RzLlxuICpcbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdHNDdXJyZW50VXNlckNhbk5hdmlnYXRlVG8gVGhlIGxpc3Qgb2Ygc2VtYW50aWMgb2JqZWN0cyB0aGUgY3VycmVudCB1c2VyIGNhbiBuYXZpZ2F0ZSB0by5cbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdExpc3QgQW4gb2JqZWN0IGNvbnRhaW5pbmcgbGlzdHMgYW5kIG1hcHMgb2Ygc2VtYW50aWMgb2JqZWN0cy5cbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdExpc3Quc2VtYW50aWNPYmplY3RzTGlzdCBUaGUgbGlzdCBvZiBhbGwgc2VtYW50aWMgb2JqZWN0cy5cbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdExpc3Quc2VtYW50aWNPYmplY3RzRXhwcmVzc2lvbkxpc3QgVGhlIGxpc3Qgb2YgZXhwcmVzc2lvbnMgZm9yIHNlbWFudGljIG9iamVjdHMuXG4gKiBAcGFyYW0gc2VtYW50aWNPYmplY3RMaXN0LnF1YWxpZmllck1hcCBBIG1hcCBvZiBxdWFsaWZpZXJzIHRvIGNvbXBpbGVkIGV4cHJlc3Npb25zLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgc3RhdGljIGFuZCBkeW5hbWljIHNlbWFudGljIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRSZWFjaGFibGVTZW1hbnRpY09iamVjdHNTZXR0aW5ncyA9IGZ1bmN0aW9uIChcblx0c2VtYW50aWNPYmplY3RzQ3VycmVudFVzZXJDYW5OYXZpZ2F0ZVRvOiBzdHJpbmdbXSxcblx0c2VtYW50aWNPYmplY3RMaXN0OiB7XG5cdFx0c2VtYW50aWNPYmplY3RzTGlzdDogc3RyaW5nW107XG5cdFx0c2VtYW50aWNPYmplY3RzRXhwcmVzc2lvbkxpc3Q6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+W107XG5cdFx0cXVhbGlmaWVyTWFwOiBSZWNvcmQ8c3RyaW5nLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbj47XG5cdH1cbik6IHsgaGFzUmVhY2hhYmxlU3RhdGljU2VtYW50aWNPYmplY3Q6IGJvb2xlYW47IGR5bmFtaWNTZW1hbnRpY09iamVjdHM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+W10gfSB7XG5cdGNvbnN0IGR5bmFtaWNTZW1hbnRpY09iamVjdHNMaXN0OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPltdID0gW107XG5cdGxldCByZXN1bHQgPSBmYWxzZTtcblx0aWYgKHNlbWFudGljT2JqZWN0c0N1cnJlbnRVc2VyQ2FuTmF2aWdhdGVUbykge1xuXHRcdGZvciAoY29uc3Qgc2VtYW50aWNPYmplY3Qgb2Ygc2VtYW50aWNPYmplY3RzQ3VycmVudFVzZXJDYW5OYXZpZ2F0ZVRvKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGFjdHVhbFNlbWFudGljT2JqZWN0IG9mIHNlbWFudGljT2JqZWN0TGlzdC5zZW1hbnRpY09iamVjdHNMaXN0KSB7XG5cdFx0XHRcdGlmIChzZW1hbnRpY09iamVjdCA9PT0gYWN0dWFsU2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRzZW1hbnRpY09iamVjdExpc3Quc2VtYW50aWNPYmplY3RzRXhwcmVzc2lvbkxpc3QuZm9yRWFjaCgoc2VtYW50aWNPYmplY3RFeHByZXNzaW9uKSA9PiB7XG5cdFx0XHRpZiAoc2VtYW50aWNPYmplY3RFeHByZXNzaW9uLl90eXBlICE9PSBcIkNvbnN0YW50XCIpIHtcblx0XHRcdFx0ZHluYW1pY1NlbWFudGljT2JqZWN0c0xpc3QucHVzaChzZW1hbnRpY09iamVjdEV4cHJlc3Npb24pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7IGhhc1JlYWNoYWJsZVN0YXRpY1NlbWFudGljT2JqZWN0OiByZXN1bHQsIGR5bmFtaWNTZW1hbnRpY09iamVjdHM6IGR5bmFtaWNTZW1hbnRpY09iamVjdHNMaXN0IH07XG59O1xuXG4vKipcbiAqIENoZWNrIHRoZSB1c2VyIHJpZ2h0cyB0byBuYXZpZ2F0ZSB0byB0aGUgc2VtYW50aWMgb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gc2VtYW50aWNPYmplY3QgVGhlIHNlbWFudGljIG9iamVjdCBuYW1lXG4gKiBAcGFyYW0gZGF0YU1vZGVsUGF0aCBUaGUgRGF0YU1vZGVsT2JqZWN0UGF0aCBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBzZXR0aW5ncyBUaGUgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyBvZiB0aGUgaW50ZXJuYWwgZmllbGRcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHNlbWFudGljT2JqZWN0TGlzdCBhbmQgcXVhbGlmaWVyTWFwXG4gKi9cbmV4cG9ydCBjb25zdCBtYW5hZ2VTZW1hbnRpY09iamVjdHNGb3JDdXJyZW50VXNlciA9IGZ1bmN0aW9uIChcblx0c2VtYW50aWNPYmplY3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0ZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHNldHRpbmdzOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzXG4pOiB7IGhhc1JlYWNoYWJsZVN0YXRpY1NlbWFudGljT2JqZWN0OiBib29sZWFuOyBkeW5hbWljU2VtYW50aWNPYmplY3RzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPltdIH0ge1xuXHRjb25zdCBwcm9wZXJ0eTogUHJvcGVydHkgPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCE7XG5cdGNvbnN0IGludGVybmFsRGF0YU1vZGVsID0gc2V0dGluZ3MubW9kZWxzLmludGVybmFsIHx8IHNldHRpbmdzLmFwcENvbXBvbmVudD8uZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0Y29uc3Qgc2VtYW50aWNPYmplY3RzQ3VycmVudFVzZXJDYW5OYXZpZ2F0ZVRvID0gaW50ZXJuYWxEYXRhTW9kZWw/LmdldFByb3BlcnR5KFwiL3NlbWFudGljT2JqZWN0c1wiKTtcblx0Y29uc3QgcHJvcGVydHlTZW1hbnRpY09iamVjdExpc3QgPSBnZXRTZW1hbnRpY09iamVjdHNBbmRRdWFsaWZpZXJNYXAocHJvcGVydHkpO1xuXG5cdC8vIHNlbWFudGljIG9iamVjdCBpcyBpbiBuYXZpZ2F0aW9uXG5cdGNvbnN0IHByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0RnJvbU5hdmlnYXRpb24gPSBnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdChkYXRhTW9kZWxQYXRoKTtcblx0aWYgKGlzTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0RnJvbU5hdmlnYXRpb24pKSB7XG5cdFx0Y29uc3Qgc2VtYW50aWNPYmplY3RFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0cHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3RGcm9tTmF2aWdhdGlvbj8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNPYmplY3Rcblx0XHQpO1xuXHRcdGNvbnN0IHNlbWFudGljT2JqZWN0VmFsdWUgPSBjb21waWxlRXhwcmVzc2lvbihzZW1hbnRpY09iamVjdEV4cHJlc3Npb24pO1xuXHRcdHByb3BlcnR5U2VtYW50aWNPYmplY3RMaXN0LnNlbWFudGljT2JqZWN0c0V4cHJlc3Npb25MaXN0LnB1c2goc2VtYW50aWNPYmplY3RFeHByZXNzaW9uKTtcblx0XHRwcm9wZXJ0eVNlbWFudGljT2JqZWN0TGlzdC5zZW1hbnRpY09iamVjdHNMaXN0LnB1c2goc2VtYW50aWNPYmplY3RWYWx1ZSBhcyBzdHJpbmcpO1xuXHR9XG5cblx0Ly8gY3VzdG9tIHNlbWFudGljT2JqZWN0IGZyb20gZmllbGQgcHJvcGVydHlcblx0aWYgKHNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQgJiYgc2VtYW50aWNPYmplY3QgIT09IFwiXCIpIHtcblx0XHRpZiAoc2VtYW50aWNPYmplY3RbMF0gPT09IFwiW1wiKSB7XG5cdFx0XHRjb25zdCBjdXN0b21TZW1hbnRpY09iamVjdHMgPSBKU09OLnBhcnNlKHNlbWFudGljT2JqZWN0KTtcblx0XHRcdGN1c3RvbVNlbWFudGljT2JqZWN0cy5mb3JFYWNoKChpbnRlcm5hbFNlbWFudGljT2JqZWN0OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0cHJvcGVydHlTZW1hbnRpY09iamVjdExpc3Quc2VtYW50aWNPYmplY3RzTGlzdC5wdXNoKGludGVybmFsU2VtYW50aWNPYmplY3QpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BlcnR5U2VtYW50aWNPYmplY3RMaXN0LnNlbWFudGljT2JqZWN0c0xpc3QucHVzaChzZW1hbnRpY09iamVjdCk7XG5cdFx0XHQvLyBUaGUgc2VtYW50aWNPYmplY3QgcHJvcGVydHkgb2YgdGhlIGZpZWxkIGNvbnRhaW5zIGEgZm9ybWF0dGVyIG9yIGEgYmluZGluZyBleHByZXNzaW9uXG5cdFx0XHRpZiAoc2VtYW50aWNPYmplY3Quc3RhcnRzV2l0aChcIntcIikgfHwgc2VtYW50aWNPYmplY3Quc3RhcnRzV2l0aChcIns9XCIpKSB7XG5cdFx0XHRcdGNvbnN0IHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbkZyb21GaWVsZCA9IHJlc29sdmVCaW5kaW5nU3RyaW5nKHNlbWFudGljT2JqZWN0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPjtcblx0XHRcdFx0cHJvcGVydHlTZW1hbnRpY09iamVjdExpc3Quc2VtYW50aWNPYmplY3RzRXhwcmVzc2lvbkxpc3QucHVzaChzZW1hbnRpY09iamVjdEV4cHJlc3Npb25Gcm9tRmllbGQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZ2V0UmVhY2hhYmxlU2VtYW50aWNPYmplY3RzU2V0dGluZ3Moc2VtYW50aWNPYmplY3RzQ3VycmVudFVzZXJDYW5OYXZpZ2F0ZVRvLCBwcm9wZXJ0eVNlbWFudGljT2JqZWN0TGlzdCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7O0VBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLE1BQU1BLGdDQUFnQyxHQUFJQyxjQUFzQixJQUFvQjtJQUMxRixNQUFNQyxxQkFBcUIsR0FBR0QsY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUVFLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDOUQsSUFBSUYsY0FBYyxhQUFkQSxjQUFjLGVBQWRBLGNBQWMsQ0FBRUcsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO01BQ3JDLE9BQU9ILGNBQWM7SUFDdEI7SUFDQSxJQUFJQyxxQkFBcUIsYUFBckJBLHFCQUFxQixlQUFyQkEscUJBQXFCLENBQUVHLE1BQU0sSUFBSUgscUJBQXFCLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDdEUsT0FBT0gscUJBQXFCLENBQUMsQ0FBQyxDQUFDO0lBQ2hDO0lBQ0EsT0FBTyxJQUFJO0VBQ1osQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTtFQU1PLE1BQU1JLGlCQUFpQixHQUFHLFVBQVVDLFFBQWdGLEVBQVc7SUFBQTtJQUNySSxNQUFNQywwQkFBMEIsNEJBQUdELFFBQVEsQ0FBQ0UsV0FBVywwREFBcEIsc0JBQXNCQyxNQUE4RTtJQUN2SSxJQUFJRiwwQkFBMEIsRUFBRTtNQUMvQixLQUFLLE1BQU1HLEdBQUcsSUFBSUgsMEJBQTBCLEVBQUU7UUFBQTtRQUM3QyxJQUFJLDBCQUFBQSwwQkFBMEIsQ0FBQ0csR0FBRyxDQUFDLDBEQUEvQixzQkFBaUNDLElBQUkscURBQXlDLEVBQUU7VUFDbkYs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
@@ -6,14 +6,14 @@ import type {
6
6
  } from "@sap-ux/vocabularies-types/vocabularies/Common";
7
7
  import { CommonAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/Common";
8
8
  import type { DataFieldAbstractTypes, DataPointType } from "@sap-ux/vocabularies-types/vocabularies/UI";
9
- import type { TemplateProcessorSettings } from "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor";
10
9
  import {
11
10
  compileExpression,
12
11
  getExpressionFromAnnotation,
13
12
  resolveBindingString,
14
13
  type BindingToolkitExpression,
15
14
  type CompiledBindingToolkitExpression
16
- } from "sap/fe/core/helpers/BindingToolkit";
15
+ } from "sap/fe/base/BindingToolkit";
16
+ import type { TemplateProcessorSettings } from "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor";
17
17
  import { isAnnotationOfTerm, isNavigationProperty } from "sap/fe/core/helpers/TypeGuards";
18
18
  import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
19
19
 
@@ -2,7 +2,7 @@
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/MetaModelConverter", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper"], function (MetaModelConverter, valueFormatters, BindingHelper, BindingToolkit, TypeGuards, DataModelPathHelper, DisplayModeFormatter, FieldControlHelper, PropertyHelper) {
5
+ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper"], function (BindingToolkit, MetaModelConverter, valueFormatters, BindingHelper, TypeGuards, DataModelPathHelper, DisplayModeFormatter, FieldControlHelper, PropertyHelper) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -27,6 +27,11 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/formatt
27
27
  var isPathAnnotationExpression = TypeGuards.isPathAnnotationExpression;
28
28
  var isMultipleNavigationProperty = TypeGuards.isMultipleNavigationProperty;
29
29
  var isAnnotationOfType = TypeGuards.isAnnotationOfType;
30
+ var singletonPathVisitor = BindingHelper.singletonPathVisitor;
31
+ var bindingContextPathVisitor = BindingHelper.bindingContextPathVisitor;
32
+ var UI = BindingHelper.UI;
33
+ var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
34
+ var convertMetaModelContext = MetaModelConverter.convertMetaModelContext;
30
35
  var unresolvableExpression = BindingToolkit.unresolvableExpression;
31
36
  var pathInModel = BindingToolkit.pathInModel;
32
37
  var or = BindingToolkit.or;
@@ -43,11 +48,6 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/formatt
43
48
  var and = BindingToolkit.and;
44
49
  var addTypeInformation = BindingToolkit.addTypeInformation;
45
50
  var EDM_TYPE_MAPPING = BindingToolkit.EDM_TYPE_MAPPING;
46
- var singletonPathVisitor = BindingHelper.singletonPathVisitor;
47
- var bindingContextPathVisitor = BindingHelper.bindingContextPathVisitor;
48
- var UI = BindingHelper.UI;
49
- var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
50
- var convertMetaModelContext = MetaModelConverter.convertMetaModelContext;
51
51
  const FieldEditMode = {
52
52
  /**
53
53
  * {@link sap.ui.mdc.Field Field}, {@link sap.ui.mdc.FilterField FilterField} or {@link sap.ui.mdc.MultiValueField MultiValueField }
@@ -649,4 +649,4 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/formatt
649
649
  _exports.isMultiLineLabelAndNeedVisibility = isMultiLineLabelAndNeedVisibility;
650
650
  return _exports;
651
651
  }, false);
652
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEVkaXRNb2RlIiwiRGlzYWJsZWQiLCJEaXNwbGF5IiwiRWRpdGFibGUiLCJFZGl0YWJsZURpc3BsYXkiLCJFZGl0YWJsZVJlYWRPbmx5IiwiUmVhZE9ubHkiLCJnZXREaXNwbGF5TW9kZSIsIm9EYXRhTW9kZWxPYmplY3RQYXRoIiwiRGlzcGxheU1vZGVGb3JtYXR0ZXIiLCJ0YXJnZXRPYmplY3QiLCJnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCIsIm9Qcm9wZXJ0eVBhdGgiLCJvRGF0YUZpZWxkQ29udmVydGVkIiwiaXNFZGl0YWJsZSIsIlVJIiwiSXNFZGl0YWJsZSIsImNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uIiwidW5kZWZpbmVkIiwiYkFzT2JqZWN0IiwicmVsYXRpdmVQYXRoIiwiZ2V0UmVsYXRpdmVQYXRocyIsImNvbXBpbGVFeHByZXNzaW9uIiwiZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uIiwiY29uc3RhbnQiLCJpc1Byb3BlcnR5IiwiaWZFbHNlIiwiaXNOb25FZGl0YWJsZUV4cHJlc3Npb24iLCJvUHJvcGVydHkiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIiR0YXJnZXQiLCJpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uIiwiaXNQYXRoVXBkYXRhYmxlIiwicHJvcGVydHlQYXRoIiwicGF0aFZpc2l0b3IiLCJwYXRoIiwibmF2aWdhdGlvblBhdGhzIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJjb252ZXJ0ZWRUeXBlcyIsImVkaXRhYmxlRXhwcmVzc2lvbiIsIm9yIiwiYW5kIiwibm90IiwiaXNDb21wdXRlZCIsImlzS2V5IiwiaXNJbW11dGFibGUiLCJJc1RyYW5zaWVudEJpbmRpbmciLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwiZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24iLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiZm9ybWF0dGVyIiwib2JqZWN0UGF0aCIsImdldFRhcmdldE9iamVjdFBhdGgiLCJhY3Rpdml0eUV4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsImtleXMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwia2V5c0V4cHJlc3Npb25zIiwiZm9yRWFjaCIsImtleSIsImtleUV4cHJlc3Npb24iLCJuYW1lIiwicHVzaCIsImZvcm1hdFJlc3VsdCIsImdldEVuYWJsZWRFeHByZXNzaW9uQXNPYmplY3QiLCJnZXRFbmFibGVkRXhwcmVzc2lvbiIsImRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uIiwiaXNEaXNhYmxlZEV4cHJlc3Npb24iLCJlbmFibGVkRXhwcmVzc2lvbiIsImdldEVkaXRNb2RlIiwibWVhc3VyZVJlYWRPbmx5IiwiYXNPYmplY3QiLCJkYXRhRmllbGRDb252ZXJ0ZWQiLCIkVHlwZSIsInByb3BlcnR5IiwiYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJyZXN1bHRFeHByZXNzaW9uIiwiaXNVbml0UmVhZE9ubHkiLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJhbm5vdGF0aW9ucyIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwicmVhZE9ubHlFeHByZXNzaW9uIiwiZWRpdE1vZGVFeHByZXNzaW9uIiwiaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQiLCJvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwib1Byb3BlcnR5RGVmaW5pdGlvbiIsImN1cnJlbmN5IiwibWVhc3VyZSIsImlzVHJ1dGh5IiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiSXNUb3RhbCIsImdldEZpZWxkRGlzcGxheSIsInNUYXJnZXREaXNwbGF5TW9kZSIsIm9Db21wdXRlZEVkaXRNb2RlIiwiaGFzVGV4dEFubm90YXRpb24iLCJDb21tb24iLCJUZXh0IiwiaGFzVmFsdWVIZWxwIiwiZXF1YWwiLCJnZXRUeXBlQ29uZmlnIiwiZGF0YVR5cGUiLCJvVGFyZ2V0TWFwcGluZyIsIkVETV9UWVBFX01BUFBJTkciLCJ0eXBlIiwicHJvcGVydHlUeXBlQ29uZmlnIiwiY29uc3RyYWludHMiLCJmb3JtYXRPcHRpb25zIiwic2NhbGUiLCIkU2NhbGUiLCJwcmVjaXNpb24iLCIkUHJlY2lzaW9uIiwibWF4TGVuZ3RoIiwiJE1heExlbmd0aCIsIm51bGxhYmxlIiwiJE51bGxhYmxlIiwibWluaW11bSIsImlzTmFOIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtYXhpbXVtIiwiTWF4aW11bSIsImlzRGlnaXRTZXF1ZW5jZSIsIklzRGlnaXRTZXF1ZW5jZSIsIlY0IiwiJFY0IiwicGFyc2VBc1N0cmluZyIsImluZGV4T2YiLCJlbXB0eVN0cmluZyIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsImlnbm9yZVVuaXRDb25zdHJhaW50IiwidW5pdCIsInJlbGF0aXZlTG9jYXRpb24iLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwiaGFzU3RhdGljUGVyY2VudFVuaXQiLCJzaG93TWVhc3VyZSIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhQZXJjZW50YWdlIiwiY29tcGxleFR5cGUiLCJ1bml0QmluZGluZ0V4cHJlc3Npb24iLCJhZGRUeXBlSW5mb3JtYXRpb24iLCJnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwic2hvd051bWJlciIsImdldEJpbmRpbmdXaXRoVGltZXpvbmUiLCJoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcyIsImRhdGVGb3JtYXRPcHRpb25zIiwidGltZXpvbmUiLCJUaW1lem9uZSIsInNob3dUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwic2hvd1RpbWUiLCJzaG93RGF0ZSIsInNob3dUaW1lem9uZSIsImdldEJpbmRpbmdGb3JUaW1lem9uZSIsInByb3BlcnR5RGF0YU1vZGVsUGF0aCIsInByb3BlcnR5RGVmaW5pdGlvbiIsImdldEFsaWdubWVudEV4cHJlc3Npb24iLCJzQWxpZ25EaXNwbGF5Iiwic0FsaWduRWRpdCIsImdldENvbnZlcnRlckNvbnRleHQiLCJvQ29udGV4dCIsIm9JbnRlcmZhY2UiLCJjb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJyZXF1aXJlc0lDb250ZXh0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzTXVsdGlWYWx1ZUZpZWxkIiwib0RhdGFNb2RlbFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImxlbmd0aCIsImhhc09uZVRvTWFueU5hdmlnYXRpb24iLCJmaW5kSW5kZXgiLCJvTmF2IiwiaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImNvbnRleHRMb2NhdGlvbiIsIm9Db250ZXh0TmF2IiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QiLCJmb3JjZUVkaXRNb2RlIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyIsImRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiIsImlzUmVxdWlyZWRFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRFeHByZXNzaW9uIiwiZWRpdE1vZGUiLCJpbmNsdWRlcyIsIklzQ3JlYXRlTW9kZSIsInJldHVybkV4cHJlc3Npb24iLCJnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQiLCJkYXRhRmllbGRPYmplY3RQYXRoIiwiZGF0YSIsIkRhdGEiLCJPYmplY3QiLCJkYXRhRmllbGRzIiwiaXNSZXF1aXJlZEV4cHJlc3Npb25zIiwiZGF0YUZpZWxkIiwiVmFsdWUiLCJUYXJnZXQiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJpc1Zpc2libGUiLCJIaWRkZW4iLCJpc011bHRpTGluZSIsImlzTXVsdGlMaW5lVGV4dCIsImdldEFjdGlvbkVuYWJsZWRFeHByZXNzaW9uIiwiYWN0aW9uVGFyZ2V0IiwicGF0aEZyb21Db250ZXh0TG9jYXRpb24iLCJvcGVyYXRpb25BdmFpbGFibGVJc0Fubm90YXRlZCIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJ0ZXJtIiwicHJlZml4Iiwic291cmNlRW50aXR5VHlwZSIsIm5hdmlnYXRpb25zIiwic291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0IiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJuYXYiLCJqb2luIiwiYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lIiwiaXNCb3VuZCIsInBhcmFtZXRlcnMiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJvcGVyYXRpb25BdmFpbGFibGVFeHByZXNzaW9uIiwiYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciIsImlzTXVsdGlMaW5lTGFiZWxBbmROZWVkVmlzaWJpbGl0eSIsImlzTXVsdGlMaW5lRmllbGQiLCJmb3JtRWxlbWVudHNMZW5ndGgiLCJ1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVUlGb3JtYXR0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uLCBBY3Rpb25QYXJhbWV0ZXIsIENvbnZlcnRlZE1ldGFkYXRhLCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25QYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHsgQ29yZUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29yZVwiO1xuaW1wb3J0IHR5cGUgeyBVbml0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9NZWFzdXJlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRDb2xsZWN0aW9uRmFjZXQsXG5cdENvbm5lY3RlZEZpZWxkc1R5cGUsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdERhdGFQb2ludFR5cGUsXG5cdERhdGFQb2ludFR5cGVUeXBlcyxcblx0UmVmZXJlbmNlRmFjZXRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCwgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBVSSwgYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciwgc2luZ2xldG9uUGF0aFZpc2l0b3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIEZuIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGFkZFR5cGVJbmZvcm1hdGlvbixcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24sXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRpc1RydXRoeSxcblx0bm90LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHVucmVzb2x2YWJsZUV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRlbmhhbmNlRGF0YU1vZGVsUGF0aCxcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCxcblx0Z2V0UmVsYXRpdmVQYXRocyxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aCxcblx0aXNQYXRoVXBkYXRhYmxlXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCAqIGFzIERpc3BsYXlNb2RlRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQge1xuXHRpc0Rpc2FibGVkRXhwcmVzc2lvbixcblx0aXNOb25FZGl0YWJsZUV4cHJlc3Npb24sXG5cdGlzUmVhZE9ubHlFeHByZXNzaW9uLFxuXHRpc1JlcXVpcmVkRXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWVsZENvbnRyb2xIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5LFxuXHRoYXNTdGF0aWNQZXJjZW50VW5pdCxcblx0aGFzVmFsdWVIZWxwLFxuXHRpc0NvbXB1dGVkLFxuXHRpc0ltbXV0YWJsZSxcblx0aXNLZXksXG5cdGlzTXVsdGlMaW5lVGV4dFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuLy8gSW1wb3J0LWV4cG9ydCBtZXRob2QgdXNlZCBieSB0aGUgY29udmVydGVyIHRvIHVzZSB0aGVtIGluIHRoZSB0ZW1wbGF0aW5nIHRocm91Z2ggdGhlIFVJRm9ybWF0dGVycy5cbmV4cG9ydCB0eXBlIERpc3BsYXlNb2RlID0gRGlzcGxheU1vZGVGb3JtYXR0ZXIuRGlzcGxheU1vZGU7XG5cbmV4cG9ydCB0eXBlIEZpZWxkRWRpdFN0eWxlID0gXCJSYWRpb0J1dHRvbnNcIjtcblxuZXhwb3J0IHR5cGUgUHJvcGVydHlPclBhdGg8UD4gPSBzdHJpbmcgfCBQIHwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFA+O1xuZXhwb3J0IHR5cGUgTWV0YU1vZGVsQ29udGV4dCA9IHtcblx0JGtpbmQ6IHN0cmluZztcblx0JFR5cGU6IHN0cmluZztcblx0JE51bGxhYmxlPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogSW50ZXJmYWNlIHJlcHJlc2VudGluZyB0aGUgc3RydWN0dXJlIHJldHVybmVkIGJ5IHRoZSBPRGF0YU1ldGFNb2RlbCB3aGVuIHVzaW5nIHRoZSBAQCBvcGVyYXRvciBpbiBYTUwgdGVtcGxhdGVzLlxuICovXG5leHBvcnQgdHlwZSBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UgPSB7XG5cdGNvbnRleHQ6IENvbnRleHQ7XG5cdGFyZ3VtZW50cz86IHVua25vd25bXTtcblx0JCR2YWx1ZUFzUHJvbWlzZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlQ29uc3RyYWludHMgPSB7XG5cdHNjYWxlPzogbnVtYmVyO1xuXHRwcmVjaXNpb24/OiBudW1iZXI7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0bnVsbGFibGU/OiBib29sZWFuO1xuXHRtaW5pbXVtPzogc3RyaW5nO1xuXHRtYXhpbXVtPzogc3RyaW5nO1xuXHRpc0RpZ2l0U2VxdWVuY2U/OiBib29sZWFuO1xuXHRWND86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlZm9ybWF0T3B0aW9ucyA9IHtcblx0cGFyc2VBc1N0cmluZz86IGJvb2xlYW47XG5cdGVtcHR5U3RyaW5nPzogc3RyaW5nO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ29uZmlnVHlwZSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRjb25zdHJhaW50czogY29uZmlnVHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBjb25maWdUeXBlZm9ybWF0T3B0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCBGaWVsZEVkaXRNb2RlID0ge1xuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIGRpc2FibGVkIG1vZGVcblx0ICovXG5cdERpc2FibGVkOiBcIkRpc2FibGVkXCIsXG5cdC8qKlxuXHQgKiB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkfSBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkIH1cblx0ICogaXMgcmVuZGVyZWQgaW4gZGlzcGxheSBtb2RlXG5cdCAqL1xuXHREaXNwbGF5OiBcIkRpc3BsYXlcIixcblx0LyoqXG5cdCAqIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGR9IG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGQgfVxuXHQgKiBpcyByZW5kZXJlZCBpbiBlZGl0YWJsZSBtb2RlXG5cdCAqL1xuXHRFZGl0YWJsZTogXCJFZGl0YWJsZVwiLFxuXHQvKipcblx0ICogSWYgbW9yZSB0aGFuIG9uZSBjb250cm9sIGlzIHJlbmRlcmVkIGJ5IHRoZSB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkIH1cblx0ICogb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZH0gY29udHJvbCwgdGhlIGZpcnN0IHBhcnQgaXMgZWRpdGFibGUsIGFuZCB0aGUgb3RoZXJcblx0ICogcGFydHMgYXJlIGluIGRpc3BsYXkgbW9kZS5cblx0ICovXG5cdEVkaXRhYmxlRGlzcGxheTogXCJFZGl0YWJsZURpc3BsYXlcIixcblx0LyoqXG5cdCAqIElmIG1vcmUgdGhhbiBvbmUgY29udHJvbCBpcyByZW5kZXJlZCBieSB0aGUge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZCB9XG5cdCAqIG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGR9IGNvbnRyb2wsIHRoZSBmaXJzdCBwYXJ0IGlzIGVkaXRhYmxlLCBhbmQgdGhlIG90aGVyXG5cdCAqIHBhcnRzIGFyZSByZWFkLW9ubHkuXG5cdCAqL1xuXHRFZGl0YWJsZVJlYWRPbmx5OiBcIkVkaXRhYmxlUmVhZE9ubHlcIixcblx0LyoqXG5cdCAqIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGR9IG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGQgfVxuXHQgKiBpcyByZW5kZXJlZCBpbiByZWFkLW9ubHkgbW9kZVxuXHQgKi9cblx0UmVhZE9ubHk6IFwiUmVhZE9ubHlcIlxufTtcblxuZXhwb3J0IGNvbnN0IGdldERpc3BsYXlNb2RlID0gZnVuY3Rpb24gKFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXM+XG4pOiBEaXNwbGF5TW9kZSB7XG5cdHJldHVybiBEaXNwbGF5TW9kZUZvcm1hdHRlci5nZXREaXNwbGF5TW9kZShvRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QsIG9EYXRhTW9kZWxPYmplY3RQYXRoKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZDogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPixcblx0aXNFZGl0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gVUkuSXNFZGl0YWJsZSxcblx0Y29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMgPSB0cnVlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gZ2V0RWRpdGFibGVFeHByZXNzaW9uKFxuXHRcdG9Qcm9wZXJ0eVBhdGgsXG5cdFx0b0RhdGFGaWVsZENvbnZlcnRlZCxcblx0XHRvRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHR0cnVlLFxuXHRcdGlzRWRpdGFibGUsXG5cdFx0Y29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnNcblx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgdHlwZSBkYXRlRm9ybWF0T3B0aW9ucyA9IHtcblx0c2hvd0RhdGU/OiBib29sZWFuO1xuXHRzaG93VGltZT86IGJvb2xlYW47XG5cdHNob3dUaW1lem9uZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVkaXRhYmxlXCIgQm9vbGVhbiB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgb2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGggVGhlIHBhdGggdG8gdGhpcyBwcm9wZXJ0eSBvYmplY3RcbiAqIEBwYXJhbSBiQXNPYmplY3QgV2hldGhlciBvciBub3QgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG9yIGEgYmluZGluZyBzdHJpbmdcbiAqIEBwYXJhbSBpc0VkaXRhYmxlIFdoZXRoZXIgb3Igbm90IFVJLklzRWRpdGFibGUgYmUgY29uc2lkZXJlZC5cbiAqIEBwYXJhbSBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyBXaGV0aGVyIHdlIHdhbnQgdG8gdGFrZSBpbnRvIGFjY291bnQgVXBkYXRlUmVzdHJpY3Rpb25zIHRvIGNvbXB1dGUgdGhlIGVkaXRhYmxlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZWRpdGFibGUgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZDogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPixcblx0YkFzT2JqZWN0ID0gZmFsc2UsXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGUsXG5cdGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zID0gdHJ1ZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKG9EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZhbHNlKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudCh0cnVlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCAmJiAhaXNQcm9wZXJ0eShvRGF0YUZpZWxkQ29udmVydGVkKSkge1xuXHRcdGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbiA9IGlmRWxzZShpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIGlzRWRpdGFibGUpO1xuXHR9IGVsc2UgaWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbiA9IGlzRWRpdGFibGU7XG5cdH1cblxuXHRjb25zdCBvUHJvcGVydHkgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSA/IG9Qcm9wZXJ0eVBhdGguJHRhcmdldCA6IG9Qcm9wZXJ0eVBhdGg7XG5cblx0Ly8gRWRpdGFiaWxpdHkgZGVwZW5kcyBvbiB0aGUgZmllbGQgY29udHJvbCBleHByZXNzaW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIHN0YXRpY2FsbHkgaW4gUmVhZE9ubHkgb3IgSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGtleSAtPiBub3QgZWRpdGFibGUgZXhjZXB0IGluIGNyZWF0aW9uIGlmIG5vdCBjb21wdXRlZFxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgY29tcHV0ZWQgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgdXBkYXRhYmxlIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgaW1tdXRhYmxlIC0+IG5vdCBlZGl0YWJsZSBleGNlcHQgaW4gY3JlYXRpb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgYSBwYXRoIHJlc29sdmluZyB0byBSZWFkT25seSBvciBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAoPD0gMSkgLT4gbm90IGVkaXRhYmxlXG5cdC8vIEVsc2UsIHRvIGJlIGVkaXRhYmxlIHlvdSBuZWVkXG5cdC8vIGltbXV0YWJsZSBhbmQga2V5IHdoaWxlIGluIHRoZSBjcmVhdGlvbiByb3dcblx0Ly8gdWkvaXNFZGl0YWJsZVxuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gaXNQYXRoVXBkYXRhYmxlKG9EYXRhTW9kZWxPYmplY3RQYXRoLCB7XG5cdFx0cHJvcGVydHlQYXRoOiBvUHJvcGVydHlQYXRoLFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgb0RhdGFNb2RlbE9iamVjdFBhdGguY29udmVydGVkVHlwZXMsIG5hdmlnYXRpb25QYXRocylcblx0fSk7XG5cdGlmIChjb21waWxlRXhwcmVzc2lvbihpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uKSA9PT0gXCJmYWxzZVwiICYmIGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zKSB7XG5cdFx0cmV0dXJuIGJBc09iamVjdCA/IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gOiBcImZhbHNlXCI7XG5cdH1cblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID1cblx0XHRvUHJvcGVydHkgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyBpZkVsc2UoXG5cdFx0XHRcdFx0b3IoXG5cdFx0XHRcdFx0XHRhbmQobm90KGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyksXG5cdFx0XHRcdFx0XHRpc0NvbXB1dGVkKG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0XHRpc0tleShvUHJvcGVydHkpLFxuXHRcdFx0XHRcdFx0aXNJbW11dGFibGUob1Byb3BlcnR5KSxcblx0XHRcdFx0XHRcdGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0aWZFbHNlKG9yKGlzQ29tcHV0ZWQob1Byb3BlcnR5KSwgaXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpKSwgZmFsc2UsIFVJLklzVHJhbnNpZW50QmluZGluZyksXG5cdFx0XHRcdFx0aXNFZGl0YWJsZVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiA8VD4oXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRmb3JtYXR0ZXI6IEZuPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBvYmplY3RQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgYWN0aXZpdHlFeHByZXNzaW9uID0gcGF0aEluTW9kZWwoYC9jb2xsYWJvcmF0aW9uL2FjdGl2aXRpZXMke29iamVjdFBhdGh9YCwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3Qga2V5cyA9IGRhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGU/LmtleXM7XG5cdGNvbnN0IGtleXNFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W10gPSBbXTtcblx0a2V5cz8uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0Y29uc3Qga2V5RXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGtleS5uYW1lKTtcblx0XHRrZXlzRXhwcmVzc2lvbnMucHVzaChrZXlFeHByZXNzaW9uKTtcblx0fSk7XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoW2FjdGl2aXR5RXhwcmVzc2lvbiwgLi4ua2V5c0V4cHJlc3Npb25zXSwgZm9ybWF0dGVyKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRFbmFibGVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCB0cnVlLCBvRGF0YU1vZGVsT2JqZWN0UGF0aCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZW5hYmxlZFwiIEJvb2xlYW4gdmFsdWUuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eVBhdGggVGhlIGlucHV0IHByb3BlcnR5XG4gKiBAcGFyYW0gb0RhdGFGaWVsZENvbnZlcnRlZCBUaGUgRGF0YUZpZWxkQ29udmVydGVkIE9iamVjdCB0byByZWFkIHRoZSBmaWVsZENvbnRyb2wgYW5ub3RhdGlvblxuICogQHBhcmFtIGJBc09iamVjdCBXaGV0aGVyIG9yIG5vdCB0aGlzIHNob3VsZCBiZSByZXR1cm5lZCBhcyBhbiBvYmplY3Qgb3IgYSBiaW5kaW5nIHN0cmluZ1xuICogQHBhcmFtIG9EYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHRvIGRldGVybWluZSBpZiBhIHByb3BlcnR5IGlzIGVuYWJsZWQgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbmFibGVkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRiQXNPYmplY3QgPSBmYWxzZSxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbih0cnVlKTtcblx0fVxuXHRsZXQgcmVsYXRpdmVQYXRoO1xuXHRpZiAob0RhdGFNb2RlbE9iamVjdFBhdGgpIHtcblx0XHRyZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKG9EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KHRydWUpO1xuXHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gdW5kZWZpbmVkICYmICFpc1Byb3BlcnR5KG9EYXRhRmllbGRDb252ZXJ0ZWQpKSB7XG5cdFx0ZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24gPSBpZkVsc2UoaXNEaXNhYmxlZEV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCksIGZhbHNlLCB0cnVlKTtcblx0fVxuXG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpID8gb1Byb3BlcnR5UGF0aC4kdGFyZ2V0IDogb1Byb3BlcnR5UGF0aDtcblx0Ly8gRW5hYmxlbWVudCBkZXBlbmRzIG9uIHRoZSBmaWVsZCBjb250cm9sIGV4cHJlc3Npb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgc3RhdGljYWxseSBpbiBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAtPiBub3QgZW5hYmxlZFxuXHRjb25zdCBlbmFibGVkRXhwcmVzc2lvbiA9XG5cdFx0b1Byb3BlcnR5ICE9PSB1bmRlZmluZWQgPyBpZkVsc2UoaXNEaXNhYmxlZEV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpLCBmYWxzZSwgdHJ1ZSkgOiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQoZW5hYmxlZEV4cHJlc3Npb24sIGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uKSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVkaXRNb2RlXCIgZW51bSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGxpc3Qgb2YgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIHRvIHJlYWNoIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSBtZWFzdXJlUmVhZE9ubHkgV2hldGhlciB3ZSBzaG91bGQgc2V0IFVvTSAvIGN1cnJlbmN5IGZpZWxkIG1vZGUgdG8gcmVhZCBvbmx5XG4gKiBAcGFyYW0gYXNPYmplY3QgV2hldGhlciB3ZSBzaG91bGQgcmV0dXJuIHRoaXMgYXMgYW4gZXhwcmVzc2lvbiBvciBhcyBhIHN0cmluZ1xuICogQHBhcmFtIGRhdGFGaWVsZENvbnZlcnRlZCBUaGUgZGF0YUZpZWxkIG9iamVjdFxuICogQHBhcmFtIGlzRWRpdGFibGUgV2hldGhlciBvciBub3QgVUkuSXNFZGl0YWJsZSBiZSBjb25zaWRlcmVkLlxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgcHJvcGVydHkgZWRpdCBtb2RlLCBjb21wbGlhbnQgd2l0aCB0aGUgTURDIEZpZWxkIGRlZmluaXRpb24gb2YgZWRpdE1vZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0TW9kZSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdG1lYXN1cmVSZWFkT25seSA9IGZhbHNlLFxuXHRhc09iamVjdCA9IGZhbHNlLFxuXHRkYXRhRmllbGRDb252ZXJ0ZWQ6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcblx0aXNFZGl0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gVUkuSXNFZGl0YWJsZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGlmIChcblx0XHQhcHJvcGVydHlQYXRoIHx8XG5cdFx0dHlwZW9mIHByb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIiB8fFxuXHRcdCghaXNQcm9wZXJ0eShkYXRhRmllbGRDb252ZXJ0ZWQpICYmIGRhdGFGaWVsZENvbnZlcnRlZD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aClcblx0KSB7XG5cdFx0cmV0dXJuIEZpZWxkRWRpdE1vZGUuRGlzcGxheTtcblx0fVxuXHRjb25zdCBwcm9wZXJ0eSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5UGF0aCkgPyBwcm9wZXJ0eVBhdGguJHRhcmdldCA6IHByb3BlcnR5UGF0aDtcblx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IGlzUGF0aFVwZGF0YWJsZShkYXRhTW9kZWxPYmplY3RQYXRoLCB7XG5cdFx0cHJvcGVydHlQYXRoOiBwcm9wZXJ0eSxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGRhdGFNb2RlbE9iamVjdFBhdGguY29udmVydGVkVHlwZXMsIG5hdmlnYXRpb25QYXRocylcblx0fSk7XG5cblx0Ly8gd2UgZ2V0IHRoZSBlZGl0YWJsZSBFeHByZXNzaW9uIHdpdGhvdXQgY29uc2lkZXJpbmcgdXBkYXRlIFJlc3RyaWN0aW9ucyBiZWNhdXNlIHRoZXkgYXJlIGhhbmRsZWQgc2VwYXJhdGVseVxuXHRjb25zdCBlZGl0YWJsZUV4cHJlc3Npb24gPSBnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdChwcm9wZXJ0eVBhdGgsIGRhdGFGaWVsZENvbnZlcnRlZCwgZGF0YU1vZGVsT2JqZWN0UGF0aCwgaXNFZGl0YWJsZSwgZmFsc2UpO1xuXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID0gZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdChwcm9wZXJ0eVBhdGgsIGRhdGFGaWVsZENvbnZlcnRlZCwgZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkocHJvcGVydHkpO1xuXHRjb25zdCB1bml0UHJvcGVydHkgPSBhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KTtcblx0bGV0IHJlc3VsdEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0gY29uc3RhbnQoRmllbGRFZGl0TW9kZS5FZGl0YWJsZSk7XG5cdGlmICh1bml0UHJvcGVydHkpIHtcblx0XHRjb25zdCBpc1VuaXRSZWFkT25seSA9IGlzUmVhZE9ubHlFeHByZXNzaW9uKHVuaXRQcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0XHRyZXN1bHRFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdFx0b3IoaXNVbml0UmVhZE9ubHksIGlzQ29tcHV0ZWQodW5pdFByb3BlcnR5KSwgYW5kKGlzSW1tdXRhYmxlKHVuaXRQcm9wZXJ0eSksIG5vdChVSS5Jc1RyYW5zaWVudEJpbmRpbmcpKSwgbWVhc3VyZVJlYWRPbmx5KSxcblx0XHRcdGlmRWxzZSghaXNDb25zdGFudChpc1VuaXRSZWFkT25seSkgJiYgaXNVbml0UmVhZE9ubHksIEZpZWxkRWRpdE1vZGUuRWRpdGFibGVSZWFkT25seSwgRmllbGRFZGl0TW9kZS5FZGl0YWJsZURpc3BsYXkpLFxuXHRcdFx0RmllbGRFZGl0TW9kZS5FZGl0YWJsZVxuXHRcdCk7XG5cdH1cblx0aWYgKCF1bml0UHJvcGVydHkgJiYgKHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQpKSB7XG5cdFx0Ly8gbm8gdW5pdCBwcm9wZXJ0eSBhc3NvY2lhdGVkIG1lYW5zIHRoaXMgaXMgYSBzdGF0aWMgdW5pdFxuXHRcdHJlc3VsdEV4cHJlc3Npb24gPSBjb25zdGFudChGaWVsZEVkaXRNb2RlLkVkaXRhYmxlRGlzcGxheSk7XG5cdH1cblx0bGV0IHJlYWRPbmx5RXhwcmVzc2lvbjtcblx0aWYgKGRhdGFGaWVsZENvbnZlcnRlZCAhPSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkoZGF0YUZpZWxkQ29udmVydGVkKSkge1xuXHRcdHJlYWRPbmx5RXhwcmVzc2lvbiA9IG9yKGlzUmVhZE9ubHlFeHByZXNzaW9uKHByb3BlcnR5LCByZWxhdGl2ZVBhdGgpLCBpc1JlYWRPbmx5RXhwcmVzc2lvbihkYXRhRmllbGRDb252ZXJ0ZWQpKTtcblx0fSBlbHNlIHtcblx0XHRyZWFkT25seUV4cHJlc3Npb24gPSBpc1JlYWRPbmx5RXhwcmVzc2lvbihwcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0fVxuXG5cdC8vIGlmIHRoZXJlIGFyZSB1cGRhdGUgUmVzdHJpY3Rpb25zIGl0IGlzIGFsd2F5cyBkaXNwbGF5IG1vZGVcblx0Y29uc3QgZWRpdE1vZGVFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdG9yKGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24sIFVJLklzVHJhbnNpZW50QmluZGluZyksXG5cdFx0aWZFbHNlKFxuXHRcdFx0ZW5hYmxlZEV4cHJlc3Npb24sXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdFx0cmVzdWx0RXhwcmVzc2lvbixcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGFuZCghaXNDb25zdGFudChyZWFkT25seUV4cHJlc3Npb24pICYmIHJlYWRPbmx5RXhwcmVzc2lvbiwgaXNFZGl0YWJsZSksXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5SZWFkT25seSxcblx0XHRcdFx0XHRGaWVsZEVkaXRNb2RlLkRpc3BsYXlcblx0XHRcdFx0KVxuXHRcdFx0KSxcblx0XHRcdGlmRWxzZShpc0VkaXRhYmxlLCBGaWVsZEVkaXRNb2RlLkRpc2FibGVkLCBGaWVsZEVkaXRNb2RlLkRpc3BsYXkpXG5cdFx0KSxcblx0XHRGaWVsZEVkaXRNb2RlLkRpc3BsYXlcblx0KTtcblx0aWYgKGFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGVkaXRNb2RlRXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZWRpdE1vZGVFeHByZXNzaW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWRcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdDtcblx0Y29uc3QgY3VycmVuY3kgPSBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXHRjb25zdCBtZWFzdXJlID0gY3VycmVuY3kgPyBjdXJyZW5jeSA6IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0aWYgKG1lYXN1cmUpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob3IoaXNUcnV0aHkoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKG1lYXN1cmUpKSwgbm90KFVJLklzVG90YWwpKSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGNvbnN0YW50KHRydWUpKTtcblx0fVxufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGZpZWxkRGlzcGxheS5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aFxuICogQHBhcmFtIHNUYXJnZXREaXNwbGF5TW9kZVxuICogQHBhcmFtIG9Db21wdXRlZEVkaXRNb2RlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwcm9wZXJ0eSBkaXNwbGF5IG1vZGUsIGNvbXBsaWFudCB3aXRoIHRoZSBNREMgRmllbGQgZGVmaW5pdGlvbiBvZiBkaXNwbGF5TW9kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpZWxkRGlzcGxheSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRzVGFyZ2V0RGlzcGxheU1vZGU6IHN0cmluZyxcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Y29uc3QgaGFzVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCAhPT0gdW5kZWZpbmVkO1xuXG5cdGlmIChoYXNWYWx1ZUhlbHAob1Byb3BlcnR5KSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihzVGFyZ2V0RGlzcGxheU1vZGUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBoYXNUZXh0QW5ub3RhdGlvbiA/IGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJFZGl0YWJsZVwiKSwgXCJWYWx1ZVwiLCBzVGFyZ2V0RGlzcGxheU1vZGUpKSA6IFwiVmFsdWVcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFR5cGVDb25maWcgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBDb25maWdUeXBlIHtcblx0Y29uc3Qgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50eXBlXSB8fCAoZGF0YVR5cGUgPyBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXSA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogQ29uZmlnVHlwZSA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZy50eXBlLFxuXHRcdGNvbnN0cmFpbnRzOiB7fSxcblx0XHRmb3JtYXRPcHRpb25zOiB7fVxuXHR9O1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzID0ge1xuXHRcdFx0c2NhbGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kU2NhbGUgPyBvUHJvcGVydHkuc2NhbGUgOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVjaXNpb246IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uID8gb1Byb3BlcnR5LnByZWNpc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heExlbmd0aDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRNYXhMZW5ndGggPyBvUHJvcGVydHkubWF4TGVuZ3RoIDogdW5kZWZpbmVkLFxuXHRcdFx0bnVsbGFibGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTnVsbGFibGUgPyBvUHJvcGVydHkubnVsbGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRtaW5pbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRtYXhpbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0RpZ2l0U2VxdWVuY2U6XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiXSAmJlxuXHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRWNDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRWNCA/IHRydWUgOiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRpZ25vcmVVbml0Q29uc3RyYWludD86IGJvb2xlYW4sXG5cdGZvcm1hdE9wdGlvbnM/OiB7XG5cdFx0c2hvd01lYXN1cmU/OiBib29sZWFuO1xuXHR9XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0bGV0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRpZiAoaGFzU3RhdGljUGVyY2VudFVuaXQob1Byb3BlcnR5RGVmaW5pdGlvbikpIHtcblx0XHRpZiAoZm9ybWF0T3B0aW9ucz8uc2hvd01lYXN1cmUgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbl0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoUGVyY2VudGFnZSk7XG5cdH1cblx0Y29uc3QgY29tcGxleFR5cGUgPSB1bml0ID8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIgOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCI7XG5cdHVuaXQgPSB1bml0ID8gdW5pdCA6IChvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgYXMgdW5rbm93biBhcyBVbml0IHwgdW5kZWZpbmVkKTtcblx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0KSAmJiB1bml0LiR0YXJnZXRcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbih1bml0LiR0YXJnZXQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSwgaWdub3JlVW5pdENvbnN0cmFpbnQpXG5cdFx0XHQ6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHN0cmluZyB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoPy50YXJnZXRPYmplY3Q7XG5cdGlmICghb1Byb3BlcnR5RGVmaW5pdGlvbikge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0bGV0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0aWYgKGhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eURlZmluaXRpb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KFwiJVwiKTtcblx0fVxuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblxuXHRjb25zdCBjb21wbGV4VHlwZSA9IHVuaXQgPyBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIiA6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIjtcblx0dW5pdCA9IHVuaXQgPyB1bml0IDogKG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSBhcyB1bmtub3duIGFzIFVuaXQgfCB1bmRlZmluZWQpO1xuXHRjb25zdCB1bml0QmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVuaXQpICYmIHVuaXQuJHRhcmdldFxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHVuaXQuJHRhcmdldCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pKVxuXHRcdFx0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cblx0bGV0IHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChcblx0XHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpXG5cdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz47XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHRydWUpO1xuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCB7XG5cdFx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiB0cnVlLFxuXHRcdHNob3dOdW1iZXI6IGZhbHNlXG5cdH0pO1xufTtcbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nV2l0aFRpbWV6b25lID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZVVuaXRDb25zdHJhaW50ID0gZmFsc2UsXG5cdGhpZGVUaW1lem9uZUZvckVtcHR5VmFsdWVzID0gZmFsc2UsXG5cdGRhdGVGb3JtYXRPcHRpb25zPzogZGF0ZUZvcm1hdE9wdGlvbnNcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRjb25zdCB0aW1lem9uZSA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblxuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5EYXRlVGltZVdpdGhUaW1lem9uZVwiO1xuXHRjb25zdCB1bml0QmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHRpbWV6b25lKSAmJiB0aW1lem9uZS4kdGFyZ2V0XG5cdFx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24oXG5cdFx0XHRcdFx0KHRpbWV6b25lIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjx1bmtub3duPikuJHRhcmdldCBhcyBQcm9wZXJ0eSxcblx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGltZXpvbmUsIHJlbGF0aXZlTG9jYXRpb24pLFxuXHRcdFx0XHRcdGlnbm9yZVVuaXRDb25zdHJhaW50XG5cdFx0XHQgIClcblx0XHRcdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRpbWV6b25lLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0bGV0IGZvcm1hdE9wdGlvbnMgPSB7fTtcblx0aWYgKGhpZGVUaW1lem9uZUZvckVtcHR5VmFsdWVzKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdHNob3dUaW1lem9uZUZvckVtcHR5VmFsdWVzOiBmYWxzZVxuXHRcdH07XG5cdH1cblxuXHRpZiAoZGF0ZUZvcm1hdE9wdGlvbnM/LnNob3dUaW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dUaW1lOiBkYXRlRm9ybWF0T3B0aW9ucy5zaG93VGltZSB9IH07XG5cdH1cblx0aWYgKGRhdGVGb3JtYXRPcHRpb25zPy5zaG93RGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBzaG93RGF0ZTogZGF0ZUZvcm1hdE9wdGlvbnMuc2hvd0RhdGUgfSB9O1xuXHR9XG5cdGlmIChkYXRlRm9ybWF0T3B0aW9ucz8uc2hvd1RpbWV6b25lICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dUaW1lem9uZTogZGF0ZUZvcm1hdE9wdGlvbnMuc2hvd1RpbWV6b25lIH0gfTtcblx0fVxuXG5cdHJldHVybiBhZGRUeXBlSW5mb3JtYXRpb24oW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHVuaXRCaW5kaW5nRXhwcmVzc2lvbl0sIGNvbXBsZXhUeXBlLCB1bmRlZmluZWQsIGZvcm1hdE9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdGb3JUaW1lem9uZSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgcHJvcGVydHlEZWZpbml0aW9uID0gcHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ocHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbi50eXBlID0gXCJhbnlcIjtcblx0Y29uc3QgY29tcGxleFR5cGUgPSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRhdGVUaW1lV2l0aFRpbWV6b25lXCI7XG5cdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSB7IHNob3dUaW1lOiBmYWxzZSwgc2hvd0RhdGU6IGZhbHNlLCBzaG93VGltZXpvbmU6IHRydWUgfTtcblxuXHQvLyBudWxsIGlzIHJlcXVpcmVkIGJ5IGZvcm1hdHRlciB3aGVuIHRoZXJlIGlzIGp1c3QgYSB0aW1lem9uZVxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtudWxsLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRzQWxpZ25EaXNwbGF5ID0gXCJCZWdpblwiLFxuXHRzQWxpZ25FZGl0ID0gXCJCZWdpblwiXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJEaXNwbGF5XCIpLCBzQWxpZ25EaXNwbGF5LCBzQWxpZ25FZGl0KSk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHRlciBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIGNvbnZlcnRlckNvbnRleHQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBvcmlnaW5hbCBtZXRhbW9kZWwgY29udGV4dFxuICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIGN1cnJlbnQgdGVtcGxhdGluZyBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgQ29udmVydGVyQ29udGV4dCByZXByZXNlbnRpbmcgdGhhdCBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHQgPSBmdW5jdGlvbiAob0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IG9iamVjdCB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gY29udmVydE1ldGFNb2RlbENvbnRleHQob0ludGVyZmFjZS5jb250ZXh0KSBhcyBvYmplY3Q7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0Q29udmVydGVyQ29udGV4dC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBGb3JtYXR0ZXIgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBvcmlnaW5hbCBPRGF0YU1ldGFNb2RlbCBjb250ZXh0XG4gKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgY3VycmVudCB0ZW1wbGF0aW5nIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVudGl0eXNldHMgYW5kIG5hdnByb3BlcnRpZXMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gZ2V0IHRvIGEgc3BlY2lmaWMgb2JqZWN0IGluIHRoZSBtZXRhbW9kZWxcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGggPSBmdW5jdGlvbiA8VD4oXG5cdG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LFxuXHRvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2Vcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gfCBudWxsIHtcblx0aWYgKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0KSB7XG5cdFx0cmV0dXJuIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvSW50ZXJmYWNlLmNvbnRleHQpO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbmdldERhdGFNb2RlbE9iamVjdFBhdGgucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSByZWZlcmVuY2VkIHByb3BlcnR5IGlzIHBhcnQgb2YgYSAxLi5uIG5hdmlnYXRpb24uXG4gKlxuICogQHBhcmFtIG9EYXRhTW9kZWxQYXRoIFRoZSBkYXRhIG1vZGVsIHBhdGggdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHBhcnQgb2YgYSAxLi5uIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGlzTXVsdGlWYWx1ZUZpZWxkID0gZnVuY3Rpb24gKG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+KTogYm9vbGVhbiB7XG5cdGlmIChvRGF0YU1vZGVsUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0Y29uc3QgaGFzT25lVG9NYW55TmF2aWdhdGlvbiA9XG5cdFx0XHRvRGF0YU1vZGVsUGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KChvTmF2KSA9PiB7XG5cdFx0XHRcdGlmIChpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KG9OYXYpKSB7XG5cdFx0XHRcdFx0aWYgKG9EYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly93ZSBjaGVjayB0aGUgb25lIHRvIG1hbnkgbmF2IGlzIG5vdCBhbHJlYWR5IHBhcnQgb2YgdGhlIGNvbnRleHRcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdG9EYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KFxuXHRcdFx0XHRcdFx0XHRcdChvQ29udGV4dE5hdikgPT4gb0NvbnRleHROYXYubmFtZSA9PT0gb05hdi5uYW1lXG5cdFx0XHRcdFx0XHRcdCkgPT09IC0xXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KSA+IC0xO1xuXHRcdGlmIChoYXNPbmVUb01hbnlOYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRmb3JjZUVkaXRNb2RlID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRSZXF1aXJlZEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCwgb0RhdGFGaWVsZENvbnZlcnRlZCwgZm9yY2VFZGl0TW9kZSwgdHJ1ZSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyxcblx0Zm9yY2VFZGl0TW9kZSA9IGZhbHNlLFxuXHRiQXNPYmplY3QgPSBmYWxzZSxcblx0b1JlcXVpcmVkUHJvcGVydGllczoge1xuXHRcdHJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM/OiB1bmtub3duW107XG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucz86IHVua25vd25bXTtcblx0fSA9IHt9LFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyA9IG9SZXF1aXJlZFByb3BlcnRpZXMucmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucztcblx0Y29uc3QgYVJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMgPSBvUmVxdWlyZWRQcm9wZXJ0aWVzLnJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnM7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGlmIChiQXNPYmplY3QpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihjb25zdGFudChmYWxzZSkpO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGg7XG5cdGlmIChkYXRhTW9kZWxPYmplY3RQYXRoKSB7XG5cdFx0cmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkob0RhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHQvLyBGb3IgdGhlIGRhdGFmaWVsZCBleHByZXNzaW9uIHdlIHNob3VsZCBub3QgIGNvbnNpZGVyIHRoZSByZWxhdGl2ZSBwYXRoXG5cdFx0ZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uID0gaXNSZXF1aXJlZEV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCk7XG5cdH1cblx0bGV0IHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpO1xuXHRsZXQgcmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSk7XG5cblx0Y29uc3Qgb1Byb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Ly8gRW5hYmxlbWVudCBkZXBlbmRzIG9uIHRoZSBmaWVsZCBjb250cm9sIGV4cHJlc3Npb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgc3RhdGljYWxseSBpbiBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAtPiBub3QgZW5hYmxlZFxuXHRjb25zdCByZXF1aXJlZEV4cHJlc3Npb24gPSBpc1JlcXVpcmVkRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCk7XG5cdGNvbnN0IGVkaXRNb2RlID0gZm9yY2VFZGl0TW9kZSB8fCBVSS5Jc0VkaXRhYmxlO1xuXHRpZiAoYVJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM/LmluY2x1ZGVzKG9Qcm9wZXJ0eS5uYW1lKSkge1xuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbiA9IFVJLklzQ3JlYXRlTW9kZTtcblx0fVxuXHRpZiAoYVJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnM/LmluY2x1ZGVzKG9Qcm9wZXJ0eS5uYW1lKSkge1xuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tVXBkYXRlUmVzdHJpY3Rpb25zRXhwcmVzc2lvbiA9IGFuZChVSS5Jc0VkaXRhYmxlLCBub3QoVUkuSXNDcmVhdGVNb2RlKSk7XG5cdH1cblx0Y29uc3QgcmV0dXJuRXhwcmVzc2lvbiA9IG9yKFxuXHRcdGFuZChvcihyZXF1aXJlZEV4cHJlc3Npb24sIGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiksIGVkaXRNb2RlKSxcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb24sXG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uXG5cdCk7XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gcmV0dXJuRXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ocmV0dXJuRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPEFubm90YXRpb25QYXRoPENvbm5lY3RlZEZpZWxkc1R5cGU+PlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzPiA9IChkYXRhRmllbGRPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/LiR0YXJnZXQ/LkRhdGEgPz8ge30pIGFzIFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlc1xuXHQ+O1xuXHRjb25zdCBrZXlzOiBBcnJheTxzdHJpbmc+ID0gT2JqZWN0LmtleXMoZGF0YSk7XG5cdGNvbnN0IGRhdGFGaWVsZHMgPSBbXTtcblx0bGV0IHByb3BlcnR5UGF0aDtcblx0Y29uc3QgaXNSZXF1aXJlZEV4cHJlc3Npb25zOiAoQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pW10gfCB1bmRlZmluZWQgPSBbXTtcblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGlmIChkYXRhW2tleV0/LltcIiRUeXBlXCJdICYmIGRhdGFba2V5XVtcIiRUeXBlXCJdPy5pbmNsdWRlcyhcIkRhdGFGaWVsZFwiKSkge1xuXHRcdFx0ZGF0YUZpZWxkcy5wdXNoKGRhdGFba2V5XSk7XG5cdFx0fVxuXHR9XG5cdGZvciAoY29uc3QgZGF0YUZpZWxkIG9mIGRhdGFGaWVsZHMpIHtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBkYXRhRmllbGQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkIHwgRGF0YVBvaW50VHlwZT4oZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LCBbXG5cdFx0XHRcdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCxcblx0XHRcdFx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZVxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5UYXJnZXQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0fVxuXHRcdGlzUmVxdWlyZWRFeHByZXNzaW9ucy5wdXNoKGdldFJlcXVpcmVkRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkLCBmYWxzZSkpO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihvciguLi4oaXNSZXF1aXJlZEV4cHJlc3Npb25zIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKSkpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBoZWFkZXIgZmFjZXQgb3IgYWN0aW9uIGlzIHZpc2libGUuXG4gKlxuICogQHBhcmFtIHRhcmdldE9iamVjdCBIZWFkZXIgZmFjZXRzIG9yIEFjdGlvbnNcbiAqIEByZXR1cm5zIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWaXNpYmxlKFxuXHR0YXJnZXRPYmplY3Q6XG5cdFx0fCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG5cdFx0fCBEYXRhUG9pbnRUeXBlVHlwZXNcblx0XHR8IFJlZmVyZW5jZUZhY2V0XG5cdFx0fCBDb2xsZWN0aW9uRmFjZXRcblx0XHR8IERhdGFGaWVsZEZvckFjdGlvblR5cGVzXG5cdFx0fCBQcm9wZXJ0eVxuXHRcdHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gbm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFjdGlvbiBwYXJhbWV0ZXIgaXMgc3VwcG9ydHMgbXVsdGkgbGluZSBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBPYmplY3QgcGF0aCB0byB0aGUgYWN0aW9uIHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIEJvb2xlYW5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzTXVsdGlMaW5lID0gZnVuY3Rpb24gKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8QWN0aW9uUGFyYW1ldGVyPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaXNNdWx0aUxpbmVUZXh0KGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGFjdGlvbiBpcyBlbmFibGVkLlxuICogQHBhcmFtIGFjdGlvblRhcmdldCBBY3Rpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZWRUeXBlcyBDb252ZXJ0ZWRNZXRhZGF0YVxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIHBhdGhGcm9tQ29udGV4dExvY2F0aW9uIEJvb2xlYW5cbiAqIEByZXR1cm5zIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9uRW5hYmxlZEV4cHJlc3Npb24oXG5cdGFjdGlvblRhcmdldDogQWN0aW9uLFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uPzogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlSXNBbm5vdGF0ZWQgPVxuXHRcdGFjdGlvblRhcmdldC5hbm5vdGF0aW9ucy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnRlcm0gPT09IENvcmVBbm5vdGF0aW9uVGVybXMuT3BlcmF0aW9uQXZhaWxhYmxlO1xuXG5cdGlmICghb3BlcmF0aW9uQXZhaWxhYmxlSXNBbm5vdGF0ZWQpIHtcblx0XHQvLyBPcGVyYXRpb25BdmFpbGFibGUgdGVybSBkb2Vzbid0IGV4aXN0IGZvciB0aGUgYWN0aW9uXG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9XG5cblx0bGV0IHByZWZpeCA9IFwiXCI7XG5cdGlmIChcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoICYmXG5cdFx0cGF0aEZyb21Db250ZXh0TG9jYXRpb24gJiZcblx0XHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiA9PT0gdHJ1ZSAmJlxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlUeXBlICYmXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24udGFyZ2V0RW50aXR5VHlwZSAhPT0gYWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGVcblx0KSB7XG5cdFx0Y29uc3QgbmF2aWdhdGlvbnMgPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdGxldCBzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbik7XG5cdFx0Ly9TdGFydCBmcm9tIGNvbnRleHRMb2NhdGlvbiBhbmQgbmF2aWdhdGUgdW50aWwgdGhlIHNvdXJjZSBlbnRpdHlUeXBlIG9mIHRoZSBhY3Rpb24gdG8gZ2V0IHRoZSByaWdodCBwcmVmaXhcblx0XHRmb3IgKGNvbnN0IG5hdiBvZiBuYXZpZ2F0aW9ucykge1xuXHRcdFx0c291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0ID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0LCBuYXYpO1xuXHRcdFx0aWYgKHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdC50YXJnZXRFbnRpdHlUeXBlID09PSBhY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZSkge1xuXHRcdFx0XHRwcmVmaXggPSBgJHtnZXRSZWxhdGl2ZVBhdGhzKHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdCkuam9pbihcIi9cIil9L2A7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUgPSBhY3Rpb25UYXJnZXQuaXNCb3VuZCA/IGFjdGlvblRhcmdldC5wYXJhbWV0ZXJzWzBdPy5mdWxseVF1YWxpZmllZE5hbWUgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0YWN0aW9uVGFyZ2V0LmFubm90YXRpb25zLkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSxcblx0XHRbXSxcblx0XHR1bmRlZmluZWQsXG5cdFx0KHBhdGg6IHN0cmluZykgPT4gYCR7cHJlZml4fSR7YmluZGluZ0NvbnRleHRQYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZWRUeXBlcywgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lKX1gXG5cdCk7XG5cblx0cmV0dXJuIGVxdWFsKG9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24sIHRydWUpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBmaWVsZCBpcyBNdWx0aUxpbmUgYW5kIG5lZWRzIHZpc2liaWxpdHkuXG4gKiBAcGFyYW0gaXNNdWx0aUxpbmVGaWVsZCBUcnVlIGlmIHRoZSBmaWVsZCBpcyBtdWx0aWxpbmVcbiAqIEBwYXJhbSBmb3JtRWxlbWVudHNMZW5ndGggTnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBmb3JtXG4gKiBAcGFyYW0gdXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMgSWYgdGhlIG9ubHkgZmllbGQgd2l0aGluIGEgZm9ybSBjb250YWluZXIgaXMgYSB0ZXh0LWFyZWEgZmllbGQsIHRoZSBsYWJlbCBpcyBoaWRkZW5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZvcm0gaGFzIG9ubHkgMSBlbGVtZW50IGFuZCBpcyBtdWx0aWxpbmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTXVsdGlMaW5lTGFiZWxBbmROZWVkVmlzaWJpbGl0eShcblx0aXNNdWx0aUxpbmVGaWVsZDogYm9vbGVhbixcblx0Zm9ybUVsZW1lbnRzTGVuZ3RoOiBudW1iZXIsXG5cdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzOiBib29sZWFuXG4pOiBib29sZWFuIHtcblx0aWYgKHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzICYmIGlzTXVsdGlMaW5lRmllbGQgJiYgZm9ybUVsZW1lbnRzTGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQThHTyxNQUFNQSxhQUFhLEdBQUc7SUFDNUI7QUFDRDtBQUNBO0FBQ0E7SUFDQ0MsUUFBUSxFQUFFLFVBQVU7SUFDcEI7QUFDRDtBQUNBO0FBQ0E7SUFDQ0MsT0FBTyxFQUFFLFNBQVM7SUFDbEI7QUFDRDtBQUNBO0FBQ0E7SUFDQ0MsUUFBUSxFQUFFLFVBQVU7SUFDcEI7QUFDRDtBQUNBO0FBQ0E7QUFD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
652
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEVkaXRNb2RlIiwiRGlzYWJsZWQiLCJEaXNwbGF5IiwiRWRpdGFibGUiLCJFZGl0YWJsZURpc3BsYXkiLCJFZGl0YWJsZVJlYWRPbmx5IiwiUmVhZE9ubHkiLCJnZXREaXNwbGF5TW9kZSIsIm9EYXRhTW9kZWxPYmplY3RQYXRoIiwiRGlzcGxheU1vZGVGb3JtYXR0ZXIiLCJ0YXJnZXRPYmplY3QiLCJnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCIsIm9Qcm9wZXJ0eVBhdGgiLCJvRGF0YUZpZWxkQ29udmVydGVkIiwiaXNFZGl0YWJsZSIsIlVJIiwiSXNFZGl0YWJsZSIsImNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uIiwidW5kZWZpbmVkIiwiYkFzT2JqZWN0IiwicmVsYXRpdmVQYXRoIiwiZ2V0UmVsYXRpdmVQYXRocyIsImNvbXBpbGVFeHByZXNzaW9uIiwiZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uIiwiY29uc3RhbnQiLCJpc1Byb3BlcnR5IiwiaWZFbHNlIiwiaXNOb25FZGl0YWJsZUV4cHJlc3Npb24iLCJvUHJvcGVydHkiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIiR0YXJnZXQiLCJpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uIiwiaXNQYXRoVXBkYXRhYmxlIiwicHJvcGVydHlQYXRoIiwicGF0aFZpc2l0b3IiLCJwYXRoIiwibmF2aWdhdGlvblBhdGhzIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJjb252ZXJ0ZWRUeXBlcyIsImVkaXRhYmxlRXhwcmVzc2lvbiIsIm9yIiwiYW5kIiwibm90IiwiaXNDb21wdXRlZCIsImlzS2V5IiwiaXNJbW11dGFibGUiLCJJc1RyYW5zaWVudEJpbmRpbmciLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwiZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24iLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiZm9ybWF0dGVyIiwib2JqZWN0UGF0aCIsImdldFRhcmdldE9iamVjdFBhdGgiLCJhY3Rpdml0eUV4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsImtleXMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwia2V5c0V4cHJlc3Npb25zIiwiZm9yRWFjaCIsImtleSIsImtleUV4cHJlc3Npb24iLCJuYW1lIiwicHVzaCIsImZvcm1hdFJlc3VsdCIsImdldEVuYWJsZWRFeHByZXNzaW9uQXNPYmplY3QiLCJnZXRFbmFibGVkRXhwcmVzc2lvbiIsImRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uIiwiaXNEaXNhYmxlZEV4cHJlc3Npb24iLCJlbmFibGVkRXhwcmVzc2lvbiIsImdldEVkaXRNb2RlIiwibWVhc3VyZVJlYWRPbmx5IiwiYXNPYmplY3QiLCJkYXRhRmllbGRDb252ZXJ0ZWQiLCIkVHlwZSIsInByb3BlcnR5IiwiYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJyZXN1bHRFeHByZXNzaW9uIiwiaXNVbml0UmVhZE9ubHkiLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJhbm5vdGF0aW9ucyIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwicmVhZE9ubHlFeHByZXNzaW9uIiwiZWRpdE1vZGVFeHByZXNzaW9uIiwiaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQiLCJvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwib1Byb3BlcnR5RGVmaW5pdGlvbiIsImN1cnJlbmN5IiwibWVhc3VyZSIsImlzVHJ1dGh5IiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiSXNUb3RhbCIsImdldEZpZWxkRGlzcGxheSIsInNUYXJnZXREaXNwbGF5TW9kZSIsIm9Db21wdXRlZEVkaXRNb2RlIiwiaGFzVGV4dEFubm90YXRpb24iLCJDb21tb24iLCJUZXh0IiwiaGFzVmFsdWVIZWxwIiwiZXF1YWwiLCJnZXRUeXBlQ29uZmlnIiwiZGF0YVR5cGUiLCJvVGFyZ2V0TWFwcGluZyIsIkVETV9UWVBFX01BUFBJTkciLCJ0eXBlIiwicHJvcGVydHlUeXBlQ29uZmlnIiwiY29uc3RyYWludHMiLCJmb3JtYXRPcHRpb25zIiwic2NhbGUiLCIkU2NhbGUiLCJwcmVjaXNpb24iLCIkUHJlY2lzaW9uIiwibWF4TGVuZ3RoIiwiJE1heExlbmd0aCIsIm51bGxhYmxlIiwiJE51bGxhYmxlIiwibWluaW11bSIsImlzTmFOIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtYXhpbXVtIiwiTWF4aW11bSIsImlzRGlnaXRTZXF1ZW5jZSIsIklzRGlnaXRTZXF1ZW5jZSIsIlY0IiwiJFY0IiwicGFyc2VBc1N0cmluZyIsImluZGV4T2YiLCJlbXB0eVN0cmluZyIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsImlnbm9yZVVuaXRDb25zdHJhaW50IiwidW5pdCIsInJlbGF0aXZlTG9jYXRpb24iLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwiaGFzU3RhdGljUGVyY2VudFVuaXQiLCJzaG93TWVhc3VyZSIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhQZXJjZW50YWdlIiwiY29tcGxleFR5cGUiLCJ1bml0QmluZGluZ0V4cHJlc3Npb24iLCJhZGRUeXBlSW5mb3JtYXRpb24iLCJnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwic2hvd051bWJlciIsImdldEJpbmRpbmdXaXRoVGltZXpvbmUiLCJoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcyIsImRhdGVGb3JtYXRPcHRpb25zIiwidGltZXpvbmUiLCJUaW1lem9uZSIsInNob3dUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwic2hvd1RpbWUiLCJzaG93RGF0ZSIsInNob3dUaW1lem9uZSIsImdldEJpbmRpbmdGb3JUaW1lem9uZSIsInByb3BlcnR5RGF0YU1vZGVsUGF0aCIsInByb3BlcnR5RGVmaW5pdGlvbiIsImdldEFsaWdubWVudEV4cHJlc3Npb24iLCJzQWxpZ25EaXNwbGF5Iiwic0FsaWduRWRpdCIsImdldENvbnZlcnRlckNvbnRleHQiLCJvQ29udGV4dCIsIm9JbnRlcmZhY2UiLCJjb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJyZXF1aXJlc0lDb250ZXh0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzTXVsdGlWYWx1ZUZpZWxkIiwib0RhdGFNb2RlbFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImxlbmd0aCIsImhhc09uZVRvTWFueU5hdmlnYXRpb24iLCJmaW5kSW5kZXgiLCJvTmF2IiwiaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImNvbnRleHRMb2NhdGlvbiIsIm9Db250ZXh0TmF2IiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QiLCJmb3JjZUVkaXRNb2RlIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyIsImRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiIsImlzUmVxdWlyZWRFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRFeHByZXNzaW9uIiwiZWRpdE1vZGUiLCJpbmNsdWRlcyIsIklzQ3JlYXRlTW9kZSIsInJldHVybkV4cHJlc3Npb24iLCJnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQiLCJkYXRhRmllbGRPYmplY3RQYXRoIiwiZGF0YSIsIkRhdGEiLCJPYmplY3QiLCJkYXRhRmllbGRzIiwiaXNSZXF1aXJlZEV4cHJlc3Npb25zIiwiZGF0YUZpZWxkIiwiVmFsdWUiLCJUYXJnZXQiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJpc1Zpc2libGUiLCJIaWRkZW4iLCJpc011bHRpTGluZSIsImlzTXVsdGlMaW5lVGV4dCIsImdldEFjdGlvbkVuYWJsZWRFeHByZXNzaW9uIiwiYWN0aW9uVGFyZ2V0IiwicGF0aEZyb21Db250ZXh0TG9jYXRpb24iLCJvcGVyYXRpb25BdmFpbGFibGVJc0Fubm90YXRlZCIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJ0ZXJtIiwicHJlZml4Iiwic291cmNlRW50aXR5VHlwZSIsIm5hdmlnYXRpb25zIiwic291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0IiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJuYXYiLCJqb2luIiwiYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lIiwiaXNCb3VuZCIsInBhcmFtZXRlcnMiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJvcGVyYXRpb25BdmFpbGFibGVFeHByZXNzaW9uIiwiYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciIsImlzTXVsdGlMaW5lTGFiZWxBbmROZWVkVmlzaWJpbGl0eSIsImlzTXVsdGlMaW5lRmllbGQiLCJmb3JtRWxlbWVudHNMZW5ndGgiLCJ1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVUlGb3JtYXR0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uLCBBY3Rpb25QYXJhbWV0ZXIsIENvbnZlcnRlZE1ldGFkYXRhLCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25QYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHsgQ29yZUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29yZVwiO1xuaW1wb3J0IHR5cGUgeyBVbml0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9NZWFzdXJlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRDb2xsZWN0aW9uRmFjZXQsXG5cdENvbm5lY3RlZEZpZWxkc1R5cGUsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdERhdGFQb2ludFR5cGUsXG5cdERhdGFQb2ludFR5cGVUeXBlcyxcblx0UmVmZXJlbmNlRmFjZXRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIEZuIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRFRE1fVFlQRV9NQVBQSU5HLFxuXHRhZGRUeXBlSW5mb3JtYXRpb24sXG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNUcnV0aHksXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHR1bnJlc29sdmFibGVFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29udmVydE1ldGFNb2RlbENvbnRleHQsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgVUksIGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IsIHNpbmdsZXRvblBhdGhWaXNpdG9yIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUeXBlLCBpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5LCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRSZWxhdGl2ZVBhdGhzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhVcGRhdGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgRGlzcGxheU1vZGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7XG5cdGlzRGlzYWJsZWRFeHByZXNzaW9uLFxuXHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbixcblx0aXNSZWFkT25seUV4cHJlc3Npb24sXG5cdGlzUmVxdWlyZWRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGhhc1N0YXRpY1BlcmNlbnRVbml0LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGlzQ29tcHV0ZWQsXG5cdGlzSW1tdXRhYmxlLFxuXHRpc0tleSxcblx0aXNNdWx0aUxpbmVUZXh0XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuXG4vLyBJbXBvcnQtZXhwb3J0IG1ldGhvZCB1c2VkIGJ5IHRoZSBjb252ZXJ0ZXIgdG8gdXNlIHRoZW0gaW4gdGhlIHRlbXBsYXRpbmcgdGhyb3VnaCB0aGUgVUlGb3JtYXR0ZXJzLlxuZXhwb3J0IHR5cGUgRGlzcGxheU1vZGUgPSBEaXNwbGF5TW9kZUZvcm1hdHRlci5EaXNwbGF5TW9kZTtcblxuZXhwb3J0IHR5cGUgRmllbGRFZGl0U3R5bGUgPSBcIlJhZGlvQnV0dG9uc1wiO1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eU9yUGF0aDxQPiA9IHN0cmluZyB8IFAgfCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248UD47XG5leHBvcnQgdHlwZSBNZXRhTW9kZWxDb250ZXh0ID0ge1xuXHQka2luZDogc3RyaW5nO1xuXHQkVHlwZTogc3RyaW5nO1xuXHQkTnVsbGFibGU/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBJbnRlcmZhY2UgcmVwcmVzZW50aW5nIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuZWQgYnkgdGhlIE9EYXRhTWV0YU1vZGVsIHdoZW4gdXNpbmcgdGhlIEBAIG9wZXJhdG9yIGluIFhNTCB0ZW1wbGF0ZXMuXG4gKi9cbmV4cG9ydCB0eXBlIENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSA9IHtcblx0Y29udGV4dDogQ29udGV4dDtcblx0YXJndW1lbnRzPzogdW5rbm93bltdO1xuXHQkJHZhbHVlQXNQcm9taXNlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIGNvbmZpZ1R5cGVDb25zdHJhaW50cyA9IHtcblx0c2NhbGU/OiBudW1iZXI7XG5cdHByZWNpc2lvbj86IG51bWJlcjtcblx0bWF4TGVuZ3RoPzogbnVtYmVyO1xuXHRudWxsYWJsZT86IGJvb2xlYW47XG5cdG1pbmltdW0/OiBzdHJpbmc7XG5cdG1heGltdW0/OiBzdHJpbmc7XG5cdGlzRGlnaXRTZXF1ZW5jZT86IGJvb2xlYW47XG5cdFY0PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIGNvbmZpZ1R5cGVmb3JtYXRPcHRpb25zID0ge1xuXHRwYXJzZUFzU3RyaW5nPzogYm9vbGVhbjtcblx0ZW1wdHlTdHJpbmc/OiBzdHJpbmc7XG5cdHBhcnNlS2VlcHNFbXB0eVN0cmluZz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDb25maWdUeXBlID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzOiBjb25maWdUeXBlQ29uc3RyYWludHM7XG5cdGZvcm1hdE9wdGlvbnM6IGNvbmZpZ1R5cGVmb3JtYXRPcHRpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IEZpZWxkRWRpdE1vZGUgPSB7XG5cdC8qKlxuXHQgKiB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkfSBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkIH1cblx0ICogaXMgcmVuZGVyZWQgaW4gZGlzYWJsZWQgbW9kZVxuXHQgKi9cblx0RGlzYWJsZWQ6IFwiRGlzYWJsZWRcIixcblx0LyoqXG5cdCAqIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGR9IG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGQgfVxuXHQgKiBpcyByZW5kZXJlZCBpbiBkaXNwbGF5IG1vZGVcblx0ICovXG5cdERpc3BsYXk6IFwiRGlzcGxheVwiLFxuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIGVkaXRhYmxlIG1vZGVcblx0ICovXG5cdEVkaXRhYmxlOiBcIkVkaXRhYmxlXCIsXG5cdC8qKlxuXHQgKiBJZiBtb3JlIHRoYW4gb25lIGNvbnRyb2wgaXMgcmVuZGVyZWQgYnkgdGhlIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGQgfVxuXHQgKiBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkfSBjb250cm9sLCB0aGUgZmlyc3QgcGFydCBpcyBlZGl0YWJsZSwgYW5kIHRoZSBvdGhlclxuXHQgKiBwYXJ0cyBhcmUgaW4gZGlzcGxheSBtb2RlLlxuXHQgKi9cblx0RWRpdGFibGVEaXNwbGF5OiBcIkVkaXRhYmxlRGlzcGxheVwiLFxuXHQvKipcblx0ICogSWYgbW9yZSB0aGFuIG9uZSBjb250cm9sIGlzIHJlbmRlcmVkIGJ5IHRoZSB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkIH1cblx0ICogb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZH0gY29udHJvbCwgdGhlIGZpcnN0IHBhcnQgaXMgZWRpdGFibGUsIGFuZCB0aGUgb3RoZXJcblx0ICogcGFydHMgYXJlIHJlYWQtb25seS5cblx0ICovXG5cdEVkaXRhYmxlUmVhZE9ubHk6IFwiRWRpdGFibGVSZWFkT25seVwiLFxuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIHJlYWQtb25seSBtb2RlXG5cdCAqL1xuXHRSZWFkT25seTogXCJSZWFkT25seVwiXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheU1vZGUgPSBmdW5jdGlvbiAoXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcz5cbik6IERpc3BsYXlNb2RlIHtcblx0cmV0dXJuIERpc3BsYXlNb2RlRm9ybWF0dGVyLmdldERpc3BsYXlNb2RlKG9EYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCwgb0RhdGFNb2RlbE9iamVjdFBhdGgpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRpc0VkaXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBVSS5Jc0VkaXRhYmxlLFxuXHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyA9IHRydWVcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRFZGl0YWJsZUV4cHJlc3Npb24oXG5cdFx0b1Byb3BlcnR5UGF0aCxcblx0XHRvRGF0YUZpZWxkQ29udmVydGVkLFxuXHRcdG9EYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdHRydWUsXG5cdFx0aXNFZGl0YWJsZSxcblx0XHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9uc1xuXHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5cbmV4cG9ydCB0eXBlIGRhdGVGb3JtYXRPcHRpb25zID0ge1xuXHRzaG93RGF0ZT86IGJvb2xlYW47XG5cdHNob3dUaW1lPzogYm9vbGVhbjtcblx0c2hvd1RpbWV6b25lPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdGFibGVcIiBCb29sZWFuIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIG9EYXRhRmllbGRDb252ZXJ0ZWQgVGhlIERhdGFGaWVsZENvbnZlcnRlZCBvYmplY3QgdG8gcmVhZCB0aGUgZmllbGRDb250cm9sIGFubm90YXRpb25cbiAqIEBwYXJhbSBvRGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgcGF0aCB0byB0aGlzIHByb3BlcnR5IG9iamVjdFxuICogQHBhcmFtIGJBc09iamVjdCBXaGV0aGVyIG9yIG5vdCB0aGlzIHNob3VsZCBiZSByZXR1cm5lZCBhcyBhbiBvYmplY3Qgb3IgYSBiaW5kaW5nIHN0cmluZ1xuICogQHBhcmFtIGlzRWRpdGFibGUgV2hldGhlciBvciBub3QgVUkuSXNFZGl0YWJsZSBiZSBjb25zaWRlcmVkLlxuICogQHBhcmFtIGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zIFdoZXRoZXIgd2Ugd2FudCB0byB0YWtlIGludG8gYWNjb3VudCBVcGRhdGVSZXN0cmljdGlvbnMgdG8gY29tcHV0ZSB0aGUgZWRpdGFibGVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBwcm9wZXJ0eSBpcyBlZGl0YWJsZSBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVkaXRhYmxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRiQXNPYmplY3QgPSBmYWxzZSxcblx0aXNFZGl0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gVUkuSXNFZGl0YWJsZSxcblx0Y29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMgPSB0cnVlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMob0RhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZmFsc2UpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KHRydWUpO1xuXHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gdW5kZWZpbmVkICYmICFpc1Byb3BlcnR5KG9EYXRhRmllbGRDb252ZXJ0ZWQpKSB7XG5cdFx0ZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uID0gaWZFbHNlKGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9EYXRhRmllbGRDb252ZXJ0ZWQpLCBmYWxzZSwgaXNFZGl0YWJsZSk7XG5cdH0gZWxzZSBpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0ZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uID0gaXNFZGl0YWJsZTtcblx0fVxuXG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpID8gb1Byb3BlcnR5UGF0aC4kdGFyZ2V0IDogb1Byb3BlcnR5UGF0aDtcblxuXHQvLyBFZGl0YWJpbGl0eSBkZXBlbmRzIG9uIHRoZSBmaWVsZCBjb250cm9sIGV4cHJlc3Npb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgc3RhdGljYWxseSBpbiBSZWFkT25seSBvciBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGEga2V5IC0+IG5vdCBlZGl0YWJsZSBleGNlcHQgaW4gY3JlYXRpb24gaWYgbm90IGNvbXB1dGVkXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBjb21wdXRlZCAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCB1cGRhdGFibGUgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBpbW11dGFibGUgLT4gbm90IGVkaXRhYmxlIGV4Y2VwdCBpbiBjcmVhdGlvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBhIHBhdGggcmVzb2x2aW5nIHRvIFJlYWRPbmx5IG9yIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpICg8PSAxKSAtPiBub3QgZWRpdGFibGVcblx0Ly8gRWxzZSwgdG8gYmUgZWRpdGFibGUgeW91IG5lZWRcblx0Ly8gaW1tdXRhYmxlIGFuZCBrZXkgd2hpbGUgaW4gdGhlIGNyZWF0aW9uIHJvd1xuXHQvLyB1aS9pc0VkaXRhYmxlXG5cdGNvbnN0IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBpc1BhdGhVcGRhdGFibGUob0RhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRwcm9wZXJ0eVBhdGg6IG9Qcm9wZXJ0eVBhdGgsXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBvRGF0YU1vZGVsT2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblx0aWYgKGNvbXBpbGVFeHByZXNzaW9uKGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pID09PSBcImZhbHNlXCIgJiYgY29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMpIHtcblx0XHRyZXR1cm4gYkFzT2JqZWN0ID8gaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA6IFwiZmFsc2VcIjtcblx0fVxuXHRjb25zdCBlZGl0YWJsZUV4cHJlc3Npb24gPVxuXHRcdG9Qcm9wZXJ0eSAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IGlmRWxzZShcblx0XHRcdFx0XHRvcihcblx0XHRcdFx0XHRcdGFuZChub3QoaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiksIGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zKSxcblx0XHRcdFx0XHRcdGlzQ29tcHV0ZWQob1Byb3BlcnR5KSxcblx0XHRcdFx0XHRcdGlzS2V5KG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0XHRpc0ltbXV0YWJsZShvUHJvcGVydHkpLFxuXHRcdFx0XHRcdFx0aXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRpZkVsc2Uob3IoaXNDb21wdXRlZChvUHJvcGVydHkpLCBpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCkpLCBmYWxzZSwgVUkuSXNUcmFuc2llbnRCaW5kaW5nKSxcblx0XHRcdFx0XHRpc0VkaXRhYmxlXG5cdFx0XHQgIClcblx0XHRcdDogdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0aWYgKGJBc09iamVjdCkge1xuXHRcdHJldHVybiBhbmQoZWRpdGFibGVFeHByZXNzaW9uLCBkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24pO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQoZWRpdGFibGVFeHByZXNzaW9uLCBkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIDxUPihcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGZvcm1hdHRlcjogRm48VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IG9iamVjdFBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBhY3Rpdml0eUV4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChgL2NvbGxhYm9yYXRpb24vYWN0aXZpdGllcyR7b2JqZWN0UGF0aH1gLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBrZXlzID0gZGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZT8ua2V5cztcblx0Y29uc3Qga2V5c0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXSA9IFtdO1xuXHRrZXlzPy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRjb25zdCBrZXlFeHByZXNzaW9uID0gcGF0aEluTW9kZWwoa2V5Lm5hbWUpO1xuXHRcdGtleXNFeHByZXNzaW9ucy5wdXNoKGtleUV4cHJlc3Npb24pO1xuXHR9KTtcblx0cmV0dXJuIGZvcm1hdFJlc3VsdChbYWN0aXZpdHlFeHByZXNzaW9uLCAuLi5rZXlzRXhwcmVzc2lvbnNdLCBmb3JtYXR0ZXIpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRFbmFibGVkRXhwcmVzc2lvbkFzT2JqZWN0ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGdldEVuYWJsZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgsIG9EYXRhRmllbGRDb252ZXJ0ZWQsIHRydWUsIG9EYXRhTW9kZWxPYmplY3RQYXRoKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuLyoqXG4gKiBDcmVhdGUgdGhlIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgYW4gXCJlbmFibGVkXCIgQm9vbGVhbiB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgT2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gYkFzT2JqZWN0IFdoZXRoZXIgb3Igbm90IHRoaXMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBvciBhIGJpbmRpbmcgc3RyaW5nXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZW5hYmxlZCBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVuYWJsZWRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGJBc09iamVjdCA9IGZhbHNlLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHRydWUpO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGg7XG5cdGlmIChvRGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRcdHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMob0RhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQodHJ1ZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkob0RhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiA9IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIHRydWUpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgPyBvUHJvcGVydHlQYXRoLiR0YXJnZXQgOiBvUHJvcGVydHlQYXRoO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID1cblx0XHRvUHJvcGVydHkgIT09IHVuZGVmaW5lZCA/IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCksIGZhbHNlLCB0cnVlKSA6IHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVuYWJsZWRFeHByZXNzaW9uLCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdE1vZGVcIiBlbnVtIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIGlucHV0IHByb3BlcnR5XG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgbGlzdCBvZiBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gcmVhY2ggdGhhdCBwcm9wZXJ0eVxuICogQHBhcmFtIG1lYXN1cmVSZWFkT25seSBXaGV0aGVyIHdlIHNob3VsZCBzZXQgVW9NIC8gY3VycmVuY3kgZmllbGQgbW9kZSB0byByZWFkIG9ubHlcbiAqIEBwYXJhbSBhc09iamVjdCBXaGV0aGVyIHdlIHNob3VsZCByZXR1cm4gdGhpcyBhcyBhbiBleHByZXNzaW9uIG9yIGFzIGEgc3RyaW5nXG4gKiBAcGFyYW0gZGF0YUZpZWxkQ29udmVydGVkIFRoZSBkYXRhRmllbGQgb2JqZWN0XG4gKiBAcGFyYW0gaXNFZGl0YWJsZSBXaGV0aGVyIG9yIG5vdCBVSS5Jc0VkaXRhYmxlIGJlIGNvbnNpZGVyZWQuXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwcm9wZXJ0eSBlZGl0IG1vZGUsIGNvbXBsaWFudCB3aXRoIHRoZSBNREMgRmllbGQgZGVmaW5pdGlvbiBvZiBlZGl0TW9kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVkaXRNb2RlID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPixcblx0bWVhc3VyZVJlYWRPbmx5ID0gZmFsc2UsXG5cdGFzT2JqZWN0ID0gZmFsc2UsXG5cdGRhdGFGaWVsZENvbnZlcnRlZDogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuXHRpc0VkaXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBVSS5Jc0VkaXRhYmxlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0aWYgKFxuXHRcdCFwcm9wZXJ0eVBhdGggfHxcblx0XHR0eXBlb2YgcHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiIHx8XG5cdFx0KCFpc1Byb3BlcnR5KGRhdGFGaWVsZENvbnZlcnRlZCkgJiYgZGF0YUZpZWxkQ29udmVydGVkPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKVxuXHQpIHtcblx0XHRyZXR1cm4gRmllbGRFZGl0TW9kZS5EaXNwbGF5O1xuXHR9XG5cdGNvbnN0IHByb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHlQYXRoKSA/IHByb3BlcnR5UGF0aC4kdGFyZ2V0IDogcHJvcGVydHlQYXRoO1xuXHRjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gaXNQYXRoVXBkYXRhYmxlKGRhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRwcm9wZXJ0eVBhdGg6IHByb3BlcnR5LFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgZGF0YU1vZGVsT2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblxuXHQvLyB3ZSBnZXQgdGhlIGVkaXRhYmxlIEV4cHJlc3Npb24gd2l0aG91dCBjb25zaWRlcmluZyB1cGRhdGUgUmVzdHJpY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5XG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9IGdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkQ29udmVydGVkLCBkYXRhTW9kZWxPYmplY3RQYXRoLCBpc0VkaXRhYmxlLCBmYWxzZSk7XG5cblx0Y29uc3QgZW5hYmxlZEV4cHJlc3Npb24gPSBnZXRFbmFibGVkRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkQ29udmVydGVkLCBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IGFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkocHJvcGVydHkpO1xuXHRsZXQgcmVzdWx0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPSBjb25zdGFudChGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKTtcblx0aWYgKHVuaXRQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IGlzVW5pdFJlYWRPbmx5ID0gaXNSZWFkT25seUV4cHJlc3Npb24odW5pdFByb3BlcnR5LCByZWxhdGl2ZVBhdGgpO1xuXHRcdHJlc3VsdEV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0XHRvcihpc1VuaXRSZWFkT25seSwgaXNDb21wdXRlZCh1bml0UHJvcGVydHkpLCBhbmQoaXNJbW11dGFibGUodW5pdFByb3BlcnR5KSwgbm90KFVJLklzVHJhbnNpZW50QmluZGluZykpLCBtZWFzdXJlUmVhZE9ubHkpLFxuXHRcdFx0aWZFbHNlKCFpc0NvbnN0YW50KGlzVW5pdFJlYWRPbmx5KSAmJiBpc1VuaXRSZWFkT25seSwgRmllbGRFZGl0TW9kZS5FZGl0YWJsZVJlYWRPbmx5LCBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlRGlzcGxheSksXG5cdFx0XHRGaWVsZEVkaXRNb2RlLkVkaXRhYmxlXG5cdFx0KTtcblx0fVxuXHRpZiAoIXVuaXRQcm9wZXJ0eSAmJiAocHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgcHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCkpIHtcblx0XHQvLyBubyB1bml0IHByb3BlcnR5IGFzc29jaWF0ZWQgbWVhbnMgdGhpcyBpcyBhIHN0YXRpYyB1bml0XG5cdFx0cmVzdWx0RXhwcmVzc2lvbiA9IGNvbnN0YW50KEZpZWxkRWRpdE1vZGUuRWRpdGFibGVEaXNwbGF5KTtcblx0fVxuXHRsZXQgcmVhZE9ubHlFeHByZXNzaW9uO1xuXHRpZiAoZGF0YUZpZWxkQ29udmVydGVkICE9IHVuZGVmaW5lZCAmJiAhaXNQcm9wZXJ0eShkYXRhRmllbGRDb252ZXJ0ZWQpKSB7XG5cdFx0cmVhZE9ubHlFeHByZXNzaW9uID0gb3IoaXNSZWFkT25seUV4cHJlc3Npb24ocHJvcGVydHksIHJlbGF0aXZlUGF0aCksIGlzUmVhZE9ubHlFeHByZXNzaW9uKGRhdGFGaWVsZENvbnZlcnRlZCkpO1xuXHR9IGVsc2Uge1xuXHRcdHJlYWRPbmx5RXhwcmVzc2lvbiA9IGlzUmVhZE9ubHlFeHByZXNzaW9uKHByb3BlcnR5LCByZWxhdGl2ZVBhdGgpO1xuXHR9XG5cblx0Ly8gaWYgdGhlcmUgYXJlIHVwZGF0ZSBSZXN0cmljdGlvbnMgaXQgaXMgYWx3YXlzIGRpc3BsYXkgbW9kZVxuXHRjb25zdCBlZGl0TW9kZUV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0b3IoaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiwgVUkuSXNUcmFuc2llbnRCaW5kaW5nKSxcblx0XHRpZkVsc2UoXG5cdFx0XHRlbmFibGVkRXhwcmVzc2lvbixcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0ZWRpdGFibGVFeHByZXNzaW9uLFxuXHRcdFx0XHRyZXN1bHRFeHByZXNzaW9uLFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0YW5kKCFpc0NvbnN0YW50KHJlYWRPbmx5RXhwcmVzc2lvbikgJiYgcmVhZE9ubHlFeHByZXNzaW9uLCBpc0VkaXRhYmxlKSxcblx0XHRcdFx0XHRGaWVsZEVkaXRNb2RlLlJlYWRPbmx5LFxuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuRGlzcGxheVxuXHRcdFx0XHQpXG5cdFx0XHQpLFxuXHRcdFx0aWZFbHNlKGlzRWRpdGFibGUsIEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQsIEZpZWxkRWRpdE1vZGUuRGlzcGxheSlcblx0XHQpLFxuXHRcdEZpZWxkRWRpdE1vZGUuRGlzcGxheVxuXHQpO1xuXHRpZiAoYXNPYmplY3QpIHtcblx0XHRyZXR1cm4gZWRpdE1vZGVFeHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihlZGl0TW9kZUV4cHJlc3Npb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1ZhbGlkQW5hbHl0aWNhbEN1cnJlbmN5T3JVbml0ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiB8IHVuZGVmaW5lZFxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0O1xuXHRjb25zdCBjdXJyZW5jeSA9IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdGNvbnN0IG1lYXN1cmUgPSBjdXJyZW5jeSA/IGN1cnJlbmN5IDogb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRpZiAobWVhc3VyZSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihvcihpc1RydXRoeShnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24obWVhc3VyZSkpLCBub3QoVUkuSXNUb3RhbCkpKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oY29uc3RhbnQodHJ1ZSkpO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgZmllbGREaXNwbGF5LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHlQYXRoXG4gKiBAcGFyYW0gc1RhcmdldERpc3BsYXlNb2RlXG4gKiBAcGFyYW0gb0NvbXB1dGVkRWRpdE1vZGVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHByb3BlcnR5IGRpc3BsYXkgbW9kZSwgY29tcGxpYW50IHdpdGggdGhlIE1EQyBGaWVsZCBkZWZpbml0aW9uIG9mIGRpc3BsYXlNb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RmllbGREaXNwbGF5ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdHNUYXJnZXREaXNwbGF5TW9kZTogc3RyaW5nLFxuXHRvQ29tcHV0ZWRFZGl0TW9kZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3Qgb1Byb3BlcnR5ID0gKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHRjb25zdCBoYXNUZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0ICE9PSB1bmRlZmluZWQ7XG5cblx0aWYgKGhhc1ZhbHVlSGVscChvUHJvcGVydHkpKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHNUYXJnZXREaXNwbGF5TW9kZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGhhc1RleHRBbm5vdGF0aW9uID8gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGVxdWFsKG9Db21wdXRlZEVkaXRNb2RlLCBcIkVkaXRhYmxlXCIpLCBcIlZhbHVlXCIsIHNUYXJnZXREaXNwbGF5TW9kZSkpIDogXCJWYWx1ZVwiO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IENvbmZpZ1R5cGUge1xuXHRjb25zdCBvVGFyZ2V0TWFwcGluZyA9IEVETV9UWVBFX01BUFBJTkdbKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSk/LnR5cGVdIHx8IChkYXRhVHlwZSA/IEVETV9UWVBFX01BUFBJTkdbZGF0YVR5cGVdIDogdW5kZWZpbmVkKTtcblx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnOiBDb25maWdUeXBlID0ge1xuXHRcdHR5cGU6IG9UYXJnZXRNYXBwaW5nLnR5cGUsXG5cdFx0Y29uc3RyYWludHM6IHt9LFxuXHRcdGZvcm1hdE9wdGlvbnM6IHt9XG5cdH07XG5cdGlmIChpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkpIHtcblx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMgPSB7XG5cdFx0XHRzY2FsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRTY2FsZSA/IG9Qcm9wZXJ0eS5zY2FsZSA6IHVuZGVmaW5lZCxcblx0XHRcdHByZWNpc2lvbjogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRQcmVjaXNpb24gPyBvUHJvcGVydHkucHJlY2lzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4TGVuZ3RoOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE1heExlbmd0aCA/IG9Qcm9wZXJ0eS5tYXhMZW5ndGggOiB1bmRlZmluZWQsXG5cdFx0XHRudWxsYWJsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiROdWxsYWJsZSA/IG9Qcm9wZXJ0eS5udWxsYWJsZSA6IHVuZGVmaW5lZCxcblx0XHRcdG1pbmltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdG1heGltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdGlzRGlnaXRTZXF1ZW5jZTpcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCJdICYmXG5cdFx0XHRcdG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0RpZ2l0U2VxdWVuY2Vcblx0XHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdFY0OiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJFY0ID8gdHJ1ZSA6IHVuZGVmaW5lZFxuXHRcdH07XG5cdH1cblx0cHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0cGFyc2VBc1N0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwXG5cdFx0XHRcdD8gZmFsc2Vcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0ZW1wdHlTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IFwiXCJcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiBwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiA/IHRydWUgOiB1bmRlZmluZWRcblx0fTtcblx0cmV0dXJuIHByb3BlcnR5VHlwZUNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZVVuaXRDb25zdHJhaW50PzogYm9vbGVhbixcblx0Zm9ybWF0T3B0aW9ucz86IHtcblx0XHRzaG93TWVhc3VyZT86IGJvb2xlYW47XG5cdH1cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRsZXQgdW5pdCA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdGlmIChoYXNTdGF0aWNQZXJjZW50VW5pdChvUHJvcGVydHlEZWZpbml0aW9uKSkge1xuXHRcdGlmIChmb3JtYXRPcHRpb25zPy5zaG93TWVhc3VyZSA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybiBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uO1xuXHRcdH1cblx0XHRyZXR1cm4gZm9ybWF0UmVzdWx0KFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uXSwgdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhQZXJjZW50YWdlKTtcblx0fVxuXHRjb25zdCBjb21wbGV4VHlwZSA9IHVuaXQgPyBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIiA6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIjtcblx0dW5pdCA9IHVuaXQgPyB1bml0IDogKG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSBhcyB1bmtub3duIGFzIFVuaXQgfCB1bmRlZmluZWQpO1xuXHRjb25zdCB1bml0QmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVuaXQpICYmIHVuaXQuJHRhcmdldFxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHVuaXQuJHRhcmdldCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pLCBpZ25vcmVVbml0Q29uc3RyYWludClcblx0XHRcdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pO1xuXG5cdHJldHVybiBhZGRUeXBlSW5mb3JtYXRpb24oW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHVuaXRCaW5kaW5nRXhwcmVzc2lvbl0sIGNvbXBsZXhUeXBlLCB1bmRlZmluZWQsIGZvcm1hdE9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nIHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg/LnRhcmdldE9iamVjdDtcblx0aWYgKCFvUHJvcGVydHlEZWZpbml0aW9uKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRsZXQgdW5pdCA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRpZiAoaGFzU3RhdGljUGVyY2VudFVuaXQob1Byb3BlcnR5RGVmaW5pdGlvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoXCIlXCIpO1xuXHR9XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gdW5pdCA/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiIDogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiO1xuXHR1bml0ID0gdW5pdCA/IHVuaXQgOiAob1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IGFzIHVua25vd24gYXMgVW5pdCB8IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odW5pdCkgJiYgdW5pdC4kdGFyZ2V0XG5cdFx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odW5pdC4kdGFyZ2V0LCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikpXG5cdFx0XHQ6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblxuXHRsZXQgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKFxuXHRcdGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob1Byb3BlcnR5RGF0YU1vZGVsUGF0aClcblx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPjtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdHJ1ZSk7XG5cdHJldHVybiBhZGRUeXBlSW5mb3JtYXRpb24oW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHVuaXRCaW5kaW5nRXhwcmVzc2lvbl0sIGNvbXBsZXhUeXBlLCB1bmRlZmluZWQsIHtcblx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IHRydWUsXG5cdFx0c2hvd051bWJlcjogZmFsc2Vcblx0fSk7XG59O1xuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdXaXRoVGltZXpvbmUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0aWdub3JlVW5pdENvbnN0cmFpbnQgPSBmYWxzZSxcblx0aGlkZVRpbWV6b25lRm9yRW1wdHlWYWx1ZXMgPSBmYWxzZSxcblx0ZGF0ZUZvcm1hdE9wdGlvbnM/OiBkYXRlRm9ybWF0T3B0aW9uc1xuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHRpbWV6b25lID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZTtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gXCJzYXAuZmUuY29yZS50eXBlLkRhdGVUaW1lV2l0aFRpbWV6b25lXCI7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odGltZXpvbmUpICYmIHRpbWV6b25lLiR0YXJnZXRcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihcblx0XHRcdFx0XHQodGltZXpvbmUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHVua25vd24+KS4kdGFyZ2V0IGFzIFByb3BlcnR5LFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aW1lem9uZSwgcmVsYXRpdmVMb2NhdGlvbiksXG5cdFx0XHRcdFx0aWdub3JlVW5pdENvbnN0cmFpbnRcblx0XHRcdCAgKVxuXHRcdFx0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGltZXpvbmUsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRsZXQgZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRpZiAoaGlkZVRpbWV6b25lRm9yRW1wdHlWYWx1ZXMpIHtcblx0XHRmb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0c2hvd1RpbWV6b25lRm9yRW1wdHlWYWx1ZXM6IGZhbHNlXG5cdFx0fTtcblx0fVxuXG5cdGlmIChkYXRlRm9ybWF0T3B0aW9ucz8uc2hvd1RpbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd1RpbWU6IGRhdGVGb3JtYXRPcHRpb25zLnNob3dUaW1lIH0gfTtcblx0fVxuXHRpZiAoZGF0ZUZvcm1hdE9wdGlvbnM/LnNob3dEYXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dEYXRlOiBkYXRlRm9ybWF0T3B0aW9ucy5zaG93RGF0ZSB9IH07XG5cdH1cblx0aWYgKGRhdGVGb3JtYXRPcHRpb25zPy5zaG93VGltZXpvbmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd1RpbWV6b25lOiBkYXRlRm9ybWF0T3B0aW9ucy5zaG93VGltZXpvbmUgfSB9O1xuXHR9XG5cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ0ZvclRpbWV6b25lID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBwcm9wZXJ0eURlZmluaXRpb24gPSBwcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihwcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLnR5cGUgPSBcImFueVwiO1xuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGF0ZVRpbWVXaXRoVGltZXpvbmVcIjtcblx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHsgc2hvd1RpbWU6IGZhbHNlLCBzaG93RGF0ZTogZmFsc2UsIHNob3dUaW1lem9uZTogdHJ1ZSB9O1xuXG5cdC8vIG51bGwgaXMgcmVxdWlyZWQgYnkgZm9ybWF0dGVyIHdoZW4gdGhlcmUgaXMganVzdCBhIHRpbWV6b25lXG5cdHJldHVybiBhZGRUeXBlSW5mb3JtYXRpb24oW251bGwsIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGlnbm1lbnRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvQ29tcHV0ZWRFZGl0TW9kZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdHNBbGlnbkRpc3BsYXkgPSBcIkJlZ2luXCIsXG5cdHNBbGlnbkVkaXQgPSBcIkJlZ2luXCJcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGVxdWFsKG9Db21wdXRlZEVkaXRNb2RlLCBcIkRpc3BsYXlcIiksIHNBbGlnbkRpc3BsYXksIHNBbGlnbkVkaXQpKTtcbn07XG5cbi8qKlxuICogRm9ybWF0dGVyIGhlbHBlciB0byByZXRyaWV2ZSB0aGUgY29udmVydGVyQ29udGV4dCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGV4dC5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIG9yaWdpbmFsIG1ldGFtb2RlbCBjb250ZXh0XG4gKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgY3VycmVudCB0ZW1wbGF0aW5nIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBDb252ZXJ0ZXJDb250ZXh0IHJlcHJlc2VudGluZyB0aGF0IG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dCA9IGZ1bmN0aW9uIChvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogb2JqZWN0IHwgbnVsbCB7XG5cdGlmIChvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCkge1xuXHRcdHJldHVybiBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvSW50ZXJmYWNlLmNvbnRleHQpIGFzIG9iamVjdDtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5nZXRDb252ZXJ0ZXJDb250ZXh0LnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG4vKipcbiAqIEZvcm1hdHRlciBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGV4dC5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIG9yaWdpbmFsIE9EYXRhTWV0YU1vZGVsIGNvbnRleHRcbiAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZW50aXR5c2V0cyBhbmQgbmF2cHJvcGVydGllcyB0aGF0IGFyZSBpbnZvbHZlZCB0byBnZXQgdG8gYSBzcGVjaWZpYyBvYmplY3QgaW4gdGhlIG1ldGFtb2RlbFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGZ1bmN0aW9uIDxUPihcblx0b0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsXG5cdG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9JbnRlcmZhY2UuY29udGV4dCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHJlZmVyZW5jZWQgcHJvcGVydHkgaXMgcGFydCBvZiBhIDEuLm4gbmF2aWdhdGlvbi5cbiAqXG4gKiBAcGFyYW0gb0RhdGFNb2RlbFBhdGggVGhlIGRhdGEgbW9kZWwgcGF0aCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgcGFydCBvZiBhIDEuLm4gbmF2aWdhdGlvblxuICovXG5leHBvcnQgY29uc3QgaXNNdWx0aVZhbHVlRmllbGQgPSBmdW5jdGlvbiAob0RhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4pOiBib29sZWFuIHtcblx0aWYgKG9EYXRhTW9kZWxQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRjb25zdCBoYXNPbmVUb01hbnlOYXZpZ2F0aW9uID1cblx0XHRcdG9EYXRhTW9kZWxQYXRoPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kSW5kZXgoKG9OYXYpID0+IHtcblx0XHRcdFx0aWYgKGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkob05hdikpIHtcblx0XHRcdFx0XHRpZiAob0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHQvL3dlIGNoZWNrIHRoZSBvbmUgdG8gbWFueSBuYXYgaXMgbm90IGFscmVhZHkgcGFydCBvZiB0aGUgY29udGV4dFxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0b0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kSW5kZXgoXG5cdFx0XHRcdFx0XHRcdFx0KG9Db250ZXh0TmF2KSA9PiBvQ29udGV4dE5hdi5uYW1lID09PSBvTmF2Lm5hbWVcblx0XHRcdFx0XHRcdFx0KSA9PT0gLTFcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pID4gLTE7XG5cdFx0aWYgKGhhc09uZVRvTWFueU5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbkFzT2JqZWN0ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGZvcmNlRWRpdE1vZGUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGdldFJlcXVpcmVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCBmb3JjZUVkaXRNb2RlLCB0cnVlKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRmb3JjZUVkaXRNb2RlID0gZmFsc2UsXG5cdGJBc09iamVjdCA9IGZhbHNlLFxuXHRvUmVxdWlyZWRQcm9wZXJ0aWVzOiB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucz86IHVua25vd25bXTtcblx0XHRyZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zPzogdW5rbm93bltdO1xuXHR9ID0ge30sXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zID0gb1JlcXVpcmVkUHJvcGVydGllcy5yZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyA9IG9SZXF1aXJlZFByb3BlcnRpZXMucmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucztcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKGJBc09iamVjdCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGNvbnN0YW50KGZhbHNlKSk7XG5cdH1cblx0bGV0IHJlbGF0aXZlUGF0aDtcblx0aWYgKGRhdGFNb2RlbE9iamVjdFBhdGgpIHtcblx0XHRyZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCAmJiAhaXNQcm9wZXJ0eShvRGF0YUZpZWxkQ29udmVydGVkKSkge1xuXHRcdC8vIEZvciB0aGUgZGF0YWZpZWxkIGV4cHJlc3Npb24gd2Ugc2hvdWxkIG5vdCAgY29uc2lkZXIgdGhlIHJlbGF0aXZlIHBhdGhcblx0XHRkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb24gPSBpc1JlcXVpcmVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKTtcblx0fVxuXHRsZXQgcmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSk7XG5cdGxldCByZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKTtcblxuXHRjb25zdCBvUHJvcGVydHk6IFByb3BlcnR5ID0gKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IHJlcXVpcmVkRXhwcmVzc2lvbiA9IGlzUmVxdWlyZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0Y29uc3QgZWRpdE1vZGUgPSBmb3JjZUVkaXRNb2RlIHx8IFVJLklzRWRpdGFibGU7XG5cdGlmIChhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucz8uaW5jbHVkZXMob1Byb3BlcnR5Lm5hbWUpKSB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uID0gVUkuSXNDcmVhdGVNb2RlO1xuXHR9XG5cdGlmIChhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucz8uaW5jbHVkZXMob1Byb3BlcnR5Lm5hbWUpKSB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uID0gYW5kKFVJLklzRWRpdGFibGUsIG5vdChVSS5Jc0NyZWF0ZU1vZGUpKTtcblx0fVxuXHRjb25zdCByZXR1cm5FeHByZXNzaW9uID0gb3IoXG5cdFx0YW5kKG9yKHJlcXVpcmVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uKSwgZWRpdE1vZGUpLFxuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbixcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb25cblx0KTtcblx0aWYgKGJBc09iamVjdCkge1xuXHRcdHJldHVybiByZXR1cm5FeHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihyZXR1cm5FeHByZXNzaW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8QW5ub3RhdGlvblBhdGg8Q29ubmVjdGVkRmllbGRzVHlwZT4+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIERhdGFGaWVsZEFic3RyYWN0VHlwZXM+ID0gKGRhdGFGaWVsZE9iamVjdFBhdGg/LnRhcmdldE9iamVjdD8uJHRhcmdldD8uRGF0YSA/PyB7fSkgYXMgUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHREYXRhRmllbGRBYnN0cmFjdFR5cGVzXG5cdD47XG5cdGNvbnN0IGtleXM6IEFycmF5PHN0cmluZz4gPSBPYmplY3Qua2V5cyhkYXRhKTtcblx0Y29uc3QgZGF0YUZpZWxkcyA9IFtdO1xuXHRsZXQgcHJvcGVydHlQYXRoO1xuXHRjb25zdCBpc1JlcXVpcmVkRXhwcmVzc2lvbnM6IChDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPilbXSB8IHVuZGVmaW5lZCA9IFtdO1xuXHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0aWYgKGRhdGFba2V5XT8uW1wiJFR5cGVcIl0gJiYgZGF0YVtrZXldW1wiJFR5cGVcIl0/LmluY2x1ZGVzKFwiRGF0YUZpZWxkXCIpKSB7XG5cdFx0XHRkYXRhRmllbGRzLnB1c2goZGF0YVtrZXldKTtcblx0XHR9XG5cdH1cblx0Zm9yIChjb25zdCBkYXRhRmllbGQgb2YgZGF0YUZpZWxkcykge1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGRhdGFGaWVsZC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldCkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlPihkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQsIFtcblx0XHRcdFx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlXG5cdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLlRhcmdldCA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHR9XG5cdFx0aXNSZXF1aXJlZEV4cHJlc3Npb25zLnB1c2goZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGQsIGZhbHNlKSk7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9yKC4uLihpc1JlcXVpcmVkRXhwcmVzc2lvbnMgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pKSk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGhlYWRlciBmYWNldCBvciBhY3Rpb24gaXMgdmlzaWJsZS5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0T2JqZWN0IEhlYWRlciBmYWNldHMgb3IgQWN0aW9uc1xuICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Zpc2libGUoXG5cdHRhcmdldE9iamVjdDpcblx0XHR8IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcblx0XHR8IERhdGFQb2ludFR5cGVUeXBlc1xuXHRcdHwgUmVmZXJlbmNlRmFjZXRcblx0XHR8IENvbGxlY3Rpb25GYWNldFxuXHRcdHwgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNcblx0XHR8IFByb3BlcnR5XG5cdFx0fCB1bmRlZmluZWRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYWN0aW9uIHBhcmFtZXRlciBpcyBzdXBwb3J0cyBtdWx0aSBsaW5lIGlucHV0LlxuICpcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIE9iamVjdCBwYXRoIHRvIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuICogQHJldHVybnMgQm9vbGVhblxuICovXG5leHBvcnQgY29uc3QgaXNNdWx0aUxpbmUgPSBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxBY3Rpb25QYXJhbWV0ZXI+KTogYm9vbGVhbiB7XG5cdHJldHVybiBpc011bHRpTGluZVRleHQoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgYWN0aW9uIGlzIGVuYWJsZWQuXG4gKiBAcGFyYW0gYWN0aW9uVGFyZ2V0IEFjdGlvblxuICogQHBhcmFtIGNvbnZlcnRlZFR5cGVzIENvbnZlcnRlZE1ldGFkYXRhXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gcGF0aEZyb21Db250ZXh0TG9jYXRpb24gQm9vbGVhblxuICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25FbmFibGVkRXhwcmVzc2lvbihcblx0YWN0aW9uVGFyZ2V0OiBBY3Rpb24sXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cGF0aEZyb21Db250ZXh0TG9jYXRpb24/OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVJc0Fubm90YXRlZCA9XG5cdFx0YWN0aW9uVGFyZ2V0LmFubm90YXRpb25zLkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udGVybSA9PT0gQ29yZUFubm90YXRpb25UZXJtcy5PcGVyYXRpb25BdmFpbGFibGU7XG5cblx0aWYgKCFvcGVyYXRpb25BdmFpbGFibGVJc0Fubm90YXRlZCkge1xuXHRcdC8vIE9wZXJhdGlvbkF2YWlsYWJsZSB0ZXJtIGRvZXNuJ3QgZXhpc3QgZm9yIHRoZSBhY3Rpb25cblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblxuXHRsZXQgcHJlZml4ID0gXCJcIjtcblx0aWYgKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGggJiZcblx0XHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiAmJlxuXHRcdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uID09PSB0cnVlICYmXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVR5cGUgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbi50YXJnZXRFbnRpdHlUeXBlICE9PSBhY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZVxuXHQpIHtcblx0XHRjb25zdCBuYXZpZ2F0aW9ucyA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0bGV0IHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uKTtcblx0XHQvL1N0YXJ0IGZyb20gY29udGV4dExvY2F0aW9uIGFuZCBuYXZpZ2F0ZSB1bnRpbCB0aGUgc291cmNlIGVudGl0eVR5cGUgb2YgdGhlIGFjdGlvbiB0byBnZXQgdGhlIHJpZ2h0IHByZWZpeFxuXHRcdGZvciAoY29uc3QgbmF2IG9mIG5hdmlnYXRpb25zKSB7XG5cdFx0XHRzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QsIG5hdik7XG5cdFx0XHRpZiAoc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0LnRhcmdldEVudGl0eVR5cGUgPT09IGFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdHByZWZpeCA9IGAke2dldFJlbGF0aXZlUGF0aHMoc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0KS5qb2luKFwiL1wiKX0vYDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSA9IGFjdGlvblRhcmdldC5pc0JvdW5kID8gYWN0aW9uVGFyZ2V0LnBhcmFtZXRlcnNbMF0/LmZ1bGx5UXVhbGlmaWVkTmFtZSA6IHVuZGVmaW5lZDtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRhY3Rpb25UYXJnZXQuYW5ub3RhdGlvbnMuQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRcdFtdLFxuXHRcdHVuZGVmaW5lZCxcblx0XHQocGF0aDogc3RyaW5nKSA9PiBgJHtwcmVmaXh9JHtiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlZFR5cGVzLCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUpfWBcblx0KTtcblxuXHRyZXR1cm4gZXF1YWwob3BlcmF0aW9uQXZhaWxhYmxlRXhwcmVzc2lvbiwgdHJ1ZSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGZpZWxkIGlzIE11bHRpTGluZSBhbmQgbmVlZHMgdmlzaWJpbGl0eS5cbiAqIEBwYXJhbSBpc011bHRpTGluZUZpZWxkIFRydWUgaWYgdGhlIGZpZWxkIGlzIG11bHRpbGluZVxuICogQHBhcmFtIGZvcm1FbGVtZW50c0xlbmd0aCBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGZvcm1cbiAqIEBwYXJhbSB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyBJZiB0aGUgb25seSBmaWVsZCB3aXRoaW4gYSBmb3JtIGNvbnRhaW5lciBpcyBhIHRleHQtYXJlYSBmaWVsZCwgdGhlIGxhYmVsIGlzIGhpZGRlblxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZm9ybSBoYXMgb25seSAxIGVsZW1lbnQgYW5kIGlzIG11bHRpbGluZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNdWx0aUxpbmVMYWJlbEFuZE5lZWRWaXNpYmlsaXR5KFxuXHRpc011bHRpTGluZUZpZWxkOiBib29sZWFuLFxuXHRmb3JtRWxlbWVudHNMZW5ndGg6IG51bWJlcixcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRpZiAodXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMgJiYgaXNNdWx0aUxpbmVGaWVsZCAmJiBmb3JtRWxlbWVudHNMZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBOEdPLE1BQU1BLGFBQWEsR0FBRztJQUM1QjtBQUNEO0FBQ0E7QUFDQTtJQUNDQyxRQUFRLEVBQUUsVUFBVTtJQUNwQjtBQUNEO0FBQ0E7QUFDQTtJQUNDQyxPQUFPLEVBQUUsU0FBUztJQUNsQjtBQUNEO0FBQ0E7QUFDQTtJQUNDQyxRQUFRLEVBQUUsVUFBVTtJQUNwQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLGVBQWUsRUFB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
@@ -13,11 +13,7 @@ import type {
13
13
  ReferenceFacet
14
14
  } from "@sap-ux/vocabularies-types/vocabularies/UI";
15
15
  import { UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
16
- import { convertMetaModelContext, getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
17
- import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
18
- import valueFormatters from "sap/fe/core/formatters/ValueFormatter";
19
- import { UI, bindingContextPathVisitor, singletonPathVisitor } from "sap/fe/core/helpers/BindingHelper";
20
- import type { BindingToolkitExpression, CompiledBindingToolkitExpression, Fn } from "sap/fe/core/helpers/BindingToolkit";
16
+ import type { BindingToolkitExpression, CompiledBindingToolkitExpression, Fn } from "sap/fe/base/BindingToolkit";
21
17
  import {
22
18
  EDM_TYPE_MAPPING,
23
19
  addTypeInformation,
@@ -35,7 +31,11 @@ import {
35
31
  or,
36
32
  pathInModel,
37
33
  unresolvableExpression
38
- } from "sap/fe/core/helpers/BindingToolkit";
34
+ } from "sap/fe/base/BindingToolkit";
35
+ import { convertMetaModelContext, getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
36
+ import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
37
+ import valueFormatters from "sap/fe/core/formatters/ValueFormatter";
38
+ import { UI, bindingContextPathVisitor, singletonPathVisitor } from "sap/fe/core/helpers/BindingHelper";
39
39
  import { isAnnotationOfType, isMultipleNavigationProperty, isPathAnnotationExpression, isProperty } from "sap/fe/core/helpers/TypeGuards";
40
40
  import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
41
41
  import {