@sapui5/sap.fe.core 1.102.0 → 1.103.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 (311) hide show
  1. package/package.json +5 -5
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +62 -26
  4. package/src/sap/fe/core/AppComponent.ts +56 -40
  5. package/src/sap/fe/core/AppStateHandler.js +10 -10
  6. package/src/sap/fe/core/AppStateHandler.ts +9 -9
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +236 -109
  10. package/src/sap/fe/core/CommonUtils.ts +252 -136
  11. package/src/sap/fe/core/ExtensionAPI.js +24 -27
  12. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  13. package/src/sap/fe/core/PageController.js +4 -4
  14. package/src/sap/fe/core/PageController.ts +4 -5
  15. package/src/sap/fe/core/TemplateComponent.js +1 -1
  16. package/src/sap/fe/core/TemplateComponent.ts +6 -6
  17. package/src/sap/fe/core/TemplateModel.js +1 -1
  18. package/src/sap/fe/core/TemplateModel.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +8 -8
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +11 -10
  23. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
  24. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
  25. package/src/sap/fe/core/controllerextensions/EditFlow.js +129 -118
  26. package/src/sap/fe/core/controllerextensions/EditFlow.ts +154 -141
  27. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  28. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  29. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +31 -26
  30. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +34 -35
  31. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +70 -70
  32. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +77 -77
  33. package/src/sap/fe/core/controllerextensions/InternalRouting.js +84 -78
  34. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +105 -101
  35. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  36. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  37. package/src/sap/fe/core/controllerextensions/MassEdit.js +8 -8
  38. package/src/sap/fe/core/controllerextensions/MassEdit.ts +19 -26
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +29 -14
  41. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  42. package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
  43. package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
  44. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
  45. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  46. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  47. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  49. package/src/sap/fe/core/controllerextensions/Share.js +22 -22
  50. package/src/sap/fe/core/controllerextensions/Share.ts +30 -29
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  53. package/src/sap/fe/core/controllerextensions/ViewState.js +65 -62
  54. package/src/sap/fe/core/controllerextensions/ViewState.ts +68 -63
  55. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  56. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -6
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +12 -17
  59. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  60. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
  61. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
  62. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
  63. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +184 -137
  64. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +253 -206
  65. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +113 -121
  66. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +148 -158
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +198 -148
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +223 -159
  69. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
  70. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
  71. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -44
  72. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +90 -60
  73. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +52 -55
  74. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -58
  75. package/src/sap/fe/core/controls/Any.js +9 -5
  76. package/src/sap/fe/core/controls/Any.ts +10 -4
  77. package/src/sap/fe/core/controls/CommandExecution.js +11 -25
  78. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  79. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  80. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  81. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
  82. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  83. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
  84. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  85. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  86. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  87. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  88. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  89. package/src/sap/fe/core/controls/FileWrapper.js +2 -2
  90. package/src/sap/fe/core/controls/FileWrapper.ts +11 -11
  91. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  92. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  93. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  94. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  95. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  96. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  97. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  98. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  99. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  100. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  101. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  102. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +47 -47
  103. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +52 -52
  104. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  105. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  106. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  107. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  108. package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
  109. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  110. package/src/sap/fe/core/converters/ManifestSettings.ts +14 -14
  111. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  112. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  113. package/src/sap/fe/core/converters/MetaModelConverter.js +50 -32
  114. package/src/sap/fe/core/converters/MetaModelConverter.ts +145 -127
  115. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  116. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  117. package/src/sap/fe/core/converters/annotations/DataField.js +54 -34
  118. package/src/sap/fe/core/converters/annotations/DataField.ts +97 -75
  119. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  120. package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
  121. package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
  122. package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
  123. package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -26
  124. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  125. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  126. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
  127. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
  128. package/src/sap/fe/core/converters/controls/Common/Form.js +25 -27
  129. package/src/sap/fe/core/converters/controls/Common/Form.ts +37 -45
  130. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  131. package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
  132. package/src/sap/fe/core/converters/controls/Common/Table.js +174 -183
  133. package/src/sap/fe/core/converters/controls/Common/Table.ts +237 -250
  134. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  135. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
  136. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
  137. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +64 -57
  138. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  139. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  140. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  141. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  142. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  143. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  144. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +73 -72
  145. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +98 -96
  146. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  147. package/src/sap/fe/core/converters/helpers/Aggregation.ts +10 -13
  148. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  149. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  150. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  151. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  152. package/src/sap/fe/core/converters/helpers/ID.js +46 -46
  153. package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
  154. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  155. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  156. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  157. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
  158. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  159. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  160. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  161. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  162. package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
  163. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
  164. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
  165. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
  166. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  167. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  168. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  169. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  170. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  171. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  172. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  173. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  174. package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
  175. package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
  176. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  177. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  178. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  179. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  180. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  181. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  182. package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
  183. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +365 -264
  184. package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
  185. package/src/sap/fe/core/helpers/ClassSupport.ts +14 -10
  186. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  187. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  188. package/src/sap/fe/core/helpers/EditState.js +1 -6
  189. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  190. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  191. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  192. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  193. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  194. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  195. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  196. package/src/sap/fe/core/helpers/MassEditHelper.js +281 -254
  197. package/src/sap/fe/core/helpers/MassEditHelper.ts +337 -289
  198. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  199. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  200. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  201. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  202. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  203. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  204. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  205. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  206. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  207. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  208. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  209. package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
  210. package/src/sap/fe/core/library.js +42 -3
  211. package/src/sap/fe/core/library.ts +38 -0
  212. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  213. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  214. package/src/sap/fe/core/messagebundle.properties +49 -35
  215. package/src/sap/fe/core/messagebundle_ar.properties +13 -5
  216. package/src/sap/fe/core/messagebundle_bg.properties +13 -5
  217. package/src/sap/fe/core/messagebundle_ca.properties +13 -5
  218. package/src/sap/fe/core/messagebundle_cs.properties +13 -5
  219. package/src/sap/fe/core/messagebundle_cy.properties +14 -6
  220. package/src/sap/fe/core/messagebundle_da.properties +13 -5
  221. package/src/sap/fe/core/messagebundle_de.properties +15 -7
  222. package/src/sap/fe/core/messagebundle_el.properties +14 -6
  223. package/src/sap/fe/core/messagebundle_en.properties +9 -1
  224. package/src/sap/fe/core/messagebundle_en_GB.properties +11 -3
  225. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -1
  226. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -1
  227. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -85
  228. package/src/sap/fe/core/messagebundle_es.properties +13 -5
  229. package/src/sap/fe/core/messagebundle_es_MX.properties +13 -5
  230. package/src/sap/fe/core/messagebundle_et.properties +13 -5
  231. package/src/sap/fe/core/messagebundle_fi.properties +14 -6
  232. package/src/sap/fe/core/messagebundle_fr.properties +14 -6
  233. package/src/sap/fe/core/messagebundle_fr_CA.properties +14 -6
  234. package/src/sap/fe/core/messagebundle_hi.properties +14 -6
  235. package/src/sap/fe/core/messagebundle_hr.properties +14 -6
  236. package/src/sap/fe/core/messagebundle_hu.properties +13 -5
  237. package/src/sap/fe/core/messagebundle_id.properties +13 -5
  238. package/src/sap/fe/core/messagebundle_it.properties +33 -25
  239. package/src/sap/fe/core/messagebundle_iw.properties +13 -5
  240. package/src/sap/fe/core/messagebundle_ja.properties +14 -6
  241. package/src/sap/fe/core/messagebundle_kk.properties +13 -5
  242. package/src/sap/fe/core/messagebundle_ko.properties +13 -5
  243. package/src/sap/fe/core/messagebundle_lt.properties +13 -5
  244. package/src/sap/fe/core/messagebundle_lv.properties +14 -6
  245. package/src/sap/fe/core/messagebundle_ms.properties +13 -5
  246. package/src/sap/fe/core/messagebundle_nl.properties +13 -5
  247. package/src/sap/fe/core/messagebundle_no.properties +13 -5
  248. package/src/sap/fe/core/messagebundle_pl.properties +13 -5
  249. package/src/sap/fe/core/messagebundle_pt.properties +13 -5
  250. package/src/sap/fe/core/messagebundle_pt_PT.properties +14 -6
  251. package/src/sap/fe/core/messagebundle_ro.properties +13 -5
  252. package/src/sap/fe/core/messagebundle_ru.properties +13 -5
  253. package/src/sap/fe/core/messagebundle_sh.properties +13 -5
  254. package/src/sap/fe/core/messagebundle_sk.properties +13 -5
  255. package/src/sap/fe/core/messagebundle_sl.properties +17 -9
  256. package/src/sap/fe/core/messagebundle_sv.properties +14 -6
  257. package/src/sap/fe/core/messagebundle_th.properties +13 -5
  258. package/src/sap/fe/core/messagebundle_tr.properties +13 -5
  259. package/src/sap/fe/core/messagebundle_uk.properties +13 -5
  260. package/src/sap/fe/core/messagebundle_vi.properties +13 -5
  261. package/src/sap/fe/core/messagebundle_zh_CN.properties +14 -6
  262. package/src/sap/fe/core/messagebundle_zh_TW.properties +13 -5
  263. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  264. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  265. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
  266. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
  267. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  268. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  269. package/src/sap/fe/core/services/NavigationServiceFactory.js +53 -44
  270. package/src/sap/fe/core/services/NavigationServiceFactory.ts +54 -46
  271. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  272. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  273. package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
  274. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  275. package/src/sap/fe/core/services/ShellServicesFactory.js +72 -76
  276. package/src/sap/fe/core/services/ShellServicesFactory.ts +76 -82
  277. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  278. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  279. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +20 -15
  280. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +26 -21
  281. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  282. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  283. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  284. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  285. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  286. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  287. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  288. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  289. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  290. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  291. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  292. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  293. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  294. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  295. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  296. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  297. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  298. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  299. package/src/sap/fe/core/templating/FilterHelper.js +10 -9
  300. package/src/sap/fe/core/templating/FilterHelper.ts +13 -13
  301. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  302. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  303. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  304. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  305. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  306. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  307. package/src/sap/fe/core/templating/UIFormatters.js +148 -93
  308. package/src/sap/fe/core/templating/UIFormatters.ts +196 -124
  309. package/src/sap/fe/core/type/Email.js +2 -2
  310. package/src/sap/fe/core/type/Email.ts +2 -2
  311. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/converters/ManifestWrapper"], function (MetaModelConverter, DataModelPathHelper, ManifestWrapper) {
5
+ sap.ui.define(["sap/fe/core/converters/ManifestWrapper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templating/DataModelPathHelper"], function (ManifestWrapper, MetaModelConverter, DataModelPathHelper) {
6
6
  "use strict";
7
7
 
8
8
  var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
@@ -13,8 +13,8 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
13
13
  /**
14
14
  * Checks whether an object is an annotation term.
15
15
  *
16
- * @param {string|AnnotationTerm<object>} vAnnotationPath
17
- * @returns {boolean}
16
+ * @param vAnnotationPath
17
+ * @returns `true` if it's an annotation term
18
18
  */
19
19
  var isAnnotationTerm = function (vAnnotationPath) {
20
20
  return typeof vAnnotationPath === "object";
@@ -81,14 +81,12 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
81
81
  /**
82
82
  * Create a ConverterContext object that will be used within the converters.
83
83
  *
84
- * @param {ConverterOutput} oConvertedTypes The converted annotation and service types
84
+ * @param {ConvertedMetadata} oConvertedTypes The converted annotation and service types
85
85
  * @param {BaseManifestSettings} oManifestSettings The manifestSettings that applies to this page
86
86
  * @param {TemplateType} templateType The type of template we're looking at right now
87
- * @param {IShellServicesProxy} shellServices The current instance of the shellservice
88
87
  * @param {IDiagnostics} diagnostics The diagnostics shim
89
88
  * @param {Function} mergeFn The function to be used to perfom some deep merges between object
90
89
  * @param {DataModelObjectPath} targetDataModelPath The global path to reach the entitySet
91
- *
92
90
  * @returns {ConverterContext} A converter context for the converters
93
91
  */
94
92
 
@@ -103,18 +101,11 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
103
101
  this.manifestWrapper = new ManifestWrapper(this.manifestSettings, mergeFn);
104
102
  this.baseContextPath = getTargetObjectPath(this.targetDataModelPath);
105
103
  }
106
- /**
107
- * Retrieve the property based on the path.
108
- *
109
- * @param fullyQualifiedName The fully qualified name
110
- * @returns {Property} The property EntityType based
111
- */
112
-
113
104
 
114
105
  var _proto = ConverterContext.prototype;
115
106
 
116
107
  _proto._getEntityTypeFromFullyQualifiedName = function _getEntityTypeFromFullyQualifiedName(fullyQualifiedName) {
117
- var targetEntityType = this.convertedTypes.entityTypes.find(function (entityType) {
108
+ return this.convertedTypes.entityTypes.find(function (entityType) {
118
109
  if (fullyQualifiedName.startsWith(entityType.fullyQualifiedName)) {
119
110
  var replaceAnnotation = fullyQualifiedName.replace(entityType.fullyQualifiedName, "");
120
111
  return replaceAnnotation.startsWith("/") || replaceAnnotation.startsWith("@");
@@ -122,13 +113,12 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
122
113
 
123
114
  return false;
124
115
  });
125
- return targetEntityType;
126
116
  }
127
117
  /**
128
118
  * Retrieve the entityType associated with an annotation object.
129
119
  *
130
120
  * @param annotation The annotation object for which we want to find the entityType
131
- * @returns {EntityType} The EntityType the annotation refers to
121
+ * @returns The EntityType the annotation refers to
132
122
  */
133
123
  ;
134
124
 
@@ -139,7 +129,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
139
129
  var targetEntityType = this._getEntityTypeFromFullyQualifiedName(annotationPath);
140
130
 
141
131
  if (!targetEntityType) {
142
- throw new Error("Cannot find Entity Type for " + annotation.fullyQualifiedName);
132
+ throw new Error("Cannot find Entity Type for ".concat(annotation.fullyQualifiedName));
143
133
  }
144
134
 
145
135
  return targetEntityType;
@@ -179,7 +169,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
179
169
  return sAnnotationPath;
180
170
  }
181
171
 
182
- return this.baseContextPath + "/" + sAnnotationPath;
172
+ return "".concat(this.baseContextPath, "/").concat(sAnnotationPath);
183
173
  }
184
174
  /**
185
175
  * Retrieve the current entitySet.
@@ -233,7 +223,8 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
233
223
  }
234
224
  /**
235
225
  * Gets the entity type of the parameter in case of a parameterized service.
236
- * @returns {EntityType} The entity type of the parameter
226
+ *
227
+ * @returns The entity type of the parameter
237
228
  */
238
229
  ;
239
230
 
@@ -256,7 +247,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
256
247
  var _startingEntityType$a;
257
248
 
258
249
  if (annotationPath.indexOf("@") === -1) {
259
- annotationPath = "@" + annotationPath;
250
+ annotationPath = "@".concat(annotationPath);
260
251
  }
261
252
 
262
253
  var targetObject = this.targetDataModelPath.targetEntityType.resolvePath(annotationPath, true);
@@ -325,6 +316,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
325
316
  }
326
317
  /**
327
318
  * Retrieve the converted types.
319
+ *
328
320
  * @returns The current converted types
329
321
  */
330
322
  ;
@@ -366,9 +358,9 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
366
358
  replacedAnnotationPath = replacedAnnotationPath.substr(1);
367
359
  }
368
360
 
369
- return this.baseContextPath + (replacedAnnotationPath.startsWith("/") ? replacedAnnotationPath : "/" + replacedAnnotationPath);
361
+ return this.baseContextPath + (replacedAnnotationPath.startsWith("/") ? replacedAnnotationPath : "/".concat(replacedAnnotationPath));
370
362
  } else {
371
- return "/" + annotationPath;
363
+ return "/".concat(annotationPath);
372
364
  }
373
365
  }
374
366
  /**
@@ -388,8 +380,8 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
388
380
  /**
389
381
  * Retrieve the target from an absolute path.
390
382
  *
391
- * @param {string} path The path we want to get the target
392
- * @returns {ConverterContext}
383
+ * @param path The path we want to get the target
384
+ * @returns The absolute path
393
385
  */
394
386
  ;
395
387
 
@@ -399,8 +391,8 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
399
391
  /**
400
392
  * Retrieve a new converter context, scoped for a different context path.
401
393
  *
402
- * @param {string} contextPath The path we want to orchestrate the converter context around
403
- * @returns {ConverterContext}
394
+ * @param contextPath The path we want to orchestrate the converter context around
395
+ * @returns The converted context for the sub path
404
396
  */
405
397
  ;
406
398
 
@@ -442,7 +434,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
442
434
  /**
443
435
  * Retrieves the relative model path based on the current context path.
444
436
  *
445
- * @returns {string|undefined} The relative model path or undefined if the path is not resolveable
437
+ * @returns The relative model path or undefined if the path is not resolveable
446
438
  */
447
439
  ;
448
440
 
@@ -455,21 +447,22 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
455
447
  }
456
448
  /**
457
449
  * Create the converter context necessary for a macro based on a metamodel context.
450
+ *
458
451
  * @param sEntitySetName
459
452
  * @param oMetaModelContext
460
453
  * @param diagnostics
461
454
  * @param mergeFn
462
455
  * @param targetDataModelPath
463
456
  * @param manifestSettings
464
- * @returns {ConverterContext} The current converter context
457
+ * @returns The current converter context
465
458
  */
466
459
  ;
467
460
 
468
461
  ConverterContext.createConverterContextForMacro = function createConverterContextForMacro(sEntitySetName, oMetaModelContext, diagnostics, mergeFn, targetDataModelPath) {
469
462
  var manifestSettings = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
470
463
  var oMetaModel = oMetaModelContext.isA("sap.ui.model.odata.v4.ODataMetaModel") ? oMetaModelContext : oMetaModelContext.getModel();
471
- var oConverterOutput = convertTypes(oMetaModel);
472
- var targetEntitySet = oConverterOutput.entitySets.find(function (entitySet) {
464
+ var oConvertedMetadata = convertTypes(oMetaModel);
465
+ var targetEntitySet = oConvertedMetadata.entitySets.find(function (entitySet) {
473
466
  return entitySet.name === sEntitySetName;
474
467
  });
475
468
 
@@ -480,11 +473,11 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
480
473
  targetEntitySet: targetEntitySet,
481
474
  targetEntityType: targetEntitySet.entityType,
482
475
  targetObject: targetEntitySet,
483
- convertedTypes: oConverterOutput
476
+ convertedTypes: oConvertedMetadata
484
477
  };
485
478
  }
486
479
 
487
- return new ConverterContext(oConverterOutput, manifestSettings, diagnostics, mergeFn, targetDataModelPath);
480
+ return new ConverterContext(oConvertedMetadata, manifestSettings, diagnostics, mergeFn, targetDataModelPath);
488
481
  };
489
482
 
490
483
  return ConverterContext;
@@ -492,4 +485,4 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
492
485
 
493
486
  return ConverterContext;
494
487
  }, false);
495
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbnZlcnRlckNvbnRleHQudHMiXSwibmFtZXMiOlsiaXNBbm5vdGF0aW9uVGVybSIsInZBbm5vdGF0aW9uUGF0aCIsImlzU2VydmljZU9iamVjdCIsIm9iamVjdFBhcnQiLCJoYXNPd25Qcm9wZXJ0eSIsImdldERhdGFNb2RlbFBhdGhGb3JFbnRpdHlTZXQiLCJyZXNvbHZlZE1ldGFQYXRoIiwiY29udmVydGVkVHlwZXMiLCJyb290RW50aXR5U2V0IiwiY3VycmVudEVudGl0eVNldCIsInByZXZpb3VzRW50aXR5U2V0IiwiY3VycmVudEVudGl0eVR5cGUiLCJuYXZpZ2F0ZWRQYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwib2JqZWN0UGF0aCIsImZvckVhY2giLCJfdHlwZSIsInB1c2giLCJuYW1lIiwidGFyZ2V0VHlwZSIsIm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJqb2luIiwidW5kZWZpbmVkIiwiZW50aXR5VHlwZSIsImRhdGFNb2RlbFBhdGgiLCJzdGFydGluZ0VudGl0eVNldCIsInRhcmdldEVudGl0eVR5cGUiLCJ0YXJnZXRFbnRpdHlTZXQiLCJjb250ZXh0TG9jYXRpb24iLCJ0YXJnZXRPYmplY3QiLCJ0YXJnZXQiLCJDb252ZXJ0ZXJDb250ZXh0IiwibWFuaWZlc3RTZXR0aW5ncyIsImRpYWdub3N0aWNzIiwibWVyZ2VGbiIsInRhcmdldERhdGFNb2RlbFBhdGgiLCJtYW5pZmVzdFdyYXBwZXIiLCJNYW5pZmVzdFdyYXBwZXIiLCJiYXNlQ29udGV4dFBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiX2dldEVudGl0eVR5cGVGcm9tRnVsbHlRdWFsaWZpZWROYW1lIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZW50aXR5VHlwZXMiLCJmaW5kIiwic3RhcnRzV2l0aCIsInJlcGxhY2VBbm5vdGF0aW9uIiwicmVwbGFjZSIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiYW5ub3RhdGlvbiIsImFubm90YXRpb25QYXRoIiwiRXJyb3IiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwic0Fubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiZ2V0RW50aXR5Q29udGFpbmVyIiwiZW50aXR5Q29udGFpbmVyIiwiZ2V0RW50aXR5VHlwZSIsImdldFBhcmFtZXRlckVudGl0eVR5cGUiLCJwYXJhbWV0ZXJFbnRpdHlUeXBlIiwiaXNQYXJhbWV0ZXJpemVkIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJSZXN1bHRDb250ZXh0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJpbmRleE9mIiwicmVzb2x2ZVBhdGgiLCJzdGFydGluZ0VudGl0eVR5cGUiLCJjb25jYXQiLCJpIiwiY3VycmVudE9iamVjdCIsInZpc2l0ZWRPYmplY3RzIiwibmF2T2JqZWN0IiwibGVuZ3RoIiwibmF2UGF0aCIsIm91dERhdGFNb2RlbFBhdGgiLCJjb252ZXJ0ZXJDb250ZXh0IiwiZ2V0VGVtcGxhdGVUeXBlIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImVudGl0eVR5cGVGUU4iLCJtYXRjaCIsInJlcGxhY2VkQW5ub3RhdGlvblBhdGgiLCJzdWJzdHIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXREaWFnbm9zdGljcyIsInJlc29sdmVBYnNvbHV0ZVBhdGgiLCJwYXRoIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImNvbnRleHRQYXRoIiwidGFyZ2V0UGF0aCIsImdldEFubm90YXRpb25zQnlUZXJtIiwidm9jYWJ1bGFyeU5hbWUiLCJhbm5vdGF0aW9uVGVybSIsImFubm90YXRpb25Tb3VyY2VzIiwib3V0QW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uU291cmNlIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsInRlcm0iLCJyZWR1Y2UiLCJwcmV2aW91c1ZhbHVlIiwia2V5IiwiZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbiIsInNQYXRoIiwiZW5oYW5jZWRQYXRoIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwic0VudGl0eVNldE5hbWUiLCJvTWV0YU1vZGVsQ29udGV4dCIsIm9NZXRhTW9kZWwiLCJpc0EiLCJnZXRNb2RlbCIsIm9Db252ZXJ0ZXJPdXRwdXQiLCJjb252ZXJ0VHlwZXMiLCJlbnRpdHlTZXRzIiwiZW50aXR5U2V0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7QUE2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUEsZ0JBQWdCLEdBQUcsVUFBU0MsZUFBVCxFQUFnRztBQUN4SCxXQUFPLE9BQU9BLGVBQVAsS0FBMkIsUUFBbEM7QUFDQSxHQUZEOztBQUlBLFdBQVNDLGVBQVQsQ0FBeUJDLFVBQXpCLEVBQThGO0FBQzdGLFdBQU9BLFVBQVUsSUFBSUEsVUFBVSxDQUFDQyxjQUFYLENBQTBCLE9BQTFCLENBQXJCO0FBQ0E7O0FBRUQsTUFBTUMsNEJBQTRCLEdBQUcsVUFDcENDLGdCQURvQyxFQUVwQ0MsY0FGb0MsRUFHZDtBQUN0QixRQUFJQyxhQUFKO0FBQ0EsUUFBSUMsZ0JBQUo7QUFDQSxRQUFJQyxpQkFBSjtBQUNBLFFBQUlDLGlCQUFKO0FBQ0EsUUFBSUMsY0FBd0IsR0FBRyxFQUEvQjtBQUNBLFFBQU1DLG9CQUEwQyxHQUFHLEVBQW5EO0FBQ0FQLElBQUFBLGdCQUFnQixDQUFDUSxVQUFqQixDQUE0QkMsT0FBNUIsQ0FBb0MsVUFBQ1osVUFBRCxFQUE0QztBQUFBOztBQUMvRSxVQUFJRCxlQUFlLENBQUNDLFVBQUQsQ0FBbkIsRUFBaUM7QUFDaEMsZ0JBQVFBLFVBQVUs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ckJjLFVBQUFBLGVBQWUsRUFBRUEsZUFISTtBQUlyQkQsVUFBQUEsZ0JBQWdCLEVBQUVDLGVBQWUsQ0FBQ0osVUFKYjtBQUtyQk0sVUFBQUEsWUFBWSxFQUFFRixlQUxPO0FBTXJCcEIsVUFBQUEsY0FBYyxFQUFFZ0g7QUFOSyxTQUF0QjtBQVFBOztBQUNELGFBQU8sSUFBSXhGLGdCQUFKLENBQXFCd0YsZ0JBQXJCLEVBQXVDdkYsZ0JBQXZDLEVBQXlEQyxXQUF6RCxFQUFzRUMsT0FBdEUsRUFBK0VDLG1CQUEvRSxDQUFQO0FBQ0EsSzs7Ozs7U0FHYUosZ0IiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFubm90YXRpb25UZXJtIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQge1xuXHRBbnlBbm5vdGF0aW9uLFxuXHRDb252ZXJ0ZXJPdXRwdXQsXG5cdEVudGl0eVNldCxcblx0RW50aXR5VHlwZSxcblx0RW50aXR5Q29udGFpbmVyLFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFNlcnZpY2VPYmplY3QsXG5cdFJlc29sdXRpb25UYXJnZXQsXG5cdFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uXG59IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncywgVGVtcGxhdGVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCBSZXNvbHZlZFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgSURpYWdub3N0aWNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IEVudGl0eVR5cGVBbm5vdGF0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy90eXBlcy9nZW5lcmF0ZWQvRWRtX1R5cGVzXCI7XG5pbXBvcnQgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0V3JhcHBlclwiO1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlZEFubm90YXRpb25Db250ZXh0ID0ge1xuXHRhbm5vdGF0aW9uOiBBbnlBbm5vdGF0aW9uO1xuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0O1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBvYmplY3QgaXMgYW4gYW5ub3RhdGlvbiB0ZXJtLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEFubm90YXRpb25UZXJtPG9iamVjdD59IHZBbm5vdGF0aW9uUGF0aFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGlzQW5ub3RhdGlvblRlcm0gPSBmdW5jdGlvbih2QW5ub3RhdGlvblBhdGg6IHN0cmluZyB8IEFubm90YXRpb25UZXJtPGFueT4pOiB2QW5ub3RhdGlvblBhdGggaXMgQW5ub3RhdGlvblRlcm08YW55PiB7XG5cdHJldHVybiB0eXBlb2YgdkFubm90YXRpb25QYXRoID09PSBcIm9iamVjdFwiO1xufTtcblxuZnVuY3Rpb24gaXNTZXJ2aWNlT2JqZWN0KG9iamVjdFBhcnQ6IFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uKTogb2JqZWN0UGFydCBpcyBTZXJ2aWNlT2JqZWN0IHtcblx0cmV0dXJuIG9iamVjdFBhcnQgJiYgb2JqZWN0UGFydC5oYXNPd25Qcm9wZXJ0eShcIl90eXBlXCIpO1xufVxuXG5jb25zdCBnZXREYXRhTW9kZWxQYXRoRm9yRW50aXR5U2V0ID0gZnVuY3Rpb24oXG5cdHJlc29sdmVkTWV0YVBhdGg6IFJlc29sdXRpb25UYXJnZXQ8YW55Pixcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlck91dHB1dFxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGxldCByb290RW50aXR5U2V0OiBFbnRpdHlTZXQgfCB1bmRlZmluZWQ7XG5cdGxldCBjdXJyZW50RW50aXR5U2V0OiBFbnRpdHlTZXQgfCB1bmRlZmluZWQ7XG5cdGxldCBwcmV2aW91c0VudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkO1xuXHRsZXQgY3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQ7XG5cdGxldCBuYXZpZ2F0ZWRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXM6IE5hdmlnYXRpb25Qcm9wZXJ0eVtdID0gW107XG5cdHJlc29sdmVkTWV0YVBhdGgub2JqZWN0UGF0aC5mb3JFYWNoKChvYmplY3RQYXJ0OiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbikgPT4ge1xuXHRcdGlmIChpc1NlcnZpY2VPYmplY3Qob2JqZWN0UGFydCkpIHtcblx0XHRcdHN3aXRjaCAob2JqZWN0UGFydC5fdHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiTmF2aWdhdGlvblByb3BlcnR5XCI6XG5cdFx0XHRcdFx0bmF2aWdhdGVkUGF0aHMucHVzaChvYmplY3RQYXJ0Lm5hbWUpO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2gob2JqZWN0UGFydCk7XG5cdFx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSBvYmplY3RQYXJ0LnRhcmdldFR5cGU7XG5cdFx0XHRcdFx0aWYgKHByZXZpb3VzRW50aXR5U2V0ICYmIHByZXZpb3VzRW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcuaGFzT3duUHJvcGVydHkobmF2aWdhdGVkUGF0aHMuam9pbihcIi9cIikpKSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gcHJldmlvdXNFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0ZWRQYXRocy5qb2luKFwiL1wiKV07XG5cdFx0XHRcdFx0XHRwcmV2aW91c0VudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdFx0XHRcdFx0XHRuYXZpZ2F0ZWRQYXRocyA9IFtdO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0XHRcdGlmIChyb290RW50aXR5U2V0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQgPSBvYmplY3RQYXJ0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gb2JqZWN0UGFydDtcblx0XHRcdFx0XHRwcmV2aW91c0VudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdFx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSBjdXJyZW50RW50aXR5U2V0Py5lbnRpdHlUeXBlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IHJvb3RFbnRpdHlTZXQgYXMgRW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGN1cnJlbnRFbnRpdHlUeXBlIGFzIEVudGl0eVR5cGUsXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBjdXJyZW50RW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBuYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRjb250ZXh0TG9jYXRpb246IHVuZGVmaW5lZCxcblx0XHR0YXJnZXRPYmplY3Q6IHJlc29sdmVkTWV0YVBhdGgudGFyZ2V0LFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHRkYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbiA9IGRhdGFNb2RlbFBhdGg7XG5cdHJldHVybiBkYXRhTW9kZWxQYXRoO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBDb252ZXJ0ZXJDb250ZXh0IG9iamVjdCB0aGF0IHdpbGwgYmUgdXNlZCB3aXRoaW4gdGhlIGNvbnZlcnRlcnMuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJPdXRwdXR9IG9Db252ZXJ0ZWRUeXBlcyBUaGUgY29udmVydGVkIGFubm90YXRpb24gYW5kIHNlcnZpY2UgdHlwZXNcbiAqIEBwYXJhbSB7QmFzZU1hbmlmZXN0U2V0dGluZ3N9IG9NYW5pZmVzdFNldHRpbmdzIFRoZSBtYW5pZmVzdFNldHRpbmdzIHRoYXQgYXBwbGllcyB0byB0aGlzIHBhZ2VcbiAqIEBwYXJhbSB7VGVtcGxhdGVUeXBlfSB0ZW1wbGF0ZVR5cGUgVGhlIHR5cGUgb2YgdGVtcGxhdGUgd2UncmUgbG9va2luZyBhdCByaWdodCBub3dcbiAqIEBwYXJhbSB7SVNoZWxsU2VydmljZXNQcm94eX0gc2hlbGxTZXJ2aWNlcyBUaGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgc2hlbGxzZXJ2aWNlXG4gKiBAcGFyYW0ge0lEaWFnbm9zdGljc30gZGlhZ25vc3RpY3MgVGhlIGRpYWdub3N0aWNzIHNoaW1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRm4gVGhlIGZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gcGVyZm9tIHNvbWUgZGVlcCBtZXJnZXMgYmV0d2VlbiBvYmplY3RcbiAqIEBwYXJhbSB7RGF0YU1vZGVsT2JqZWN0UGF0aH0gdGFyZ2V0RGF0YU1vZGVsUGF0aCBUaGUgZ2xvYmFsIHBhdGggdG8gcmVhY2ggdGhlIGVudGl0eVNldFxuICpcbiAqIEByZXR1cm5zIHtDb252ZXJ0ZXJDb250ZXh0fSBBIGNvbnZlcnRlciBjb250ZXh0IGZvciB0aGUgY29udmVydGVyc1xuICovXG5jbGFzcyBDb252ZXJ0ZXJDb250ZXh0IHtcblx0cHJpdmF0ZSBtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlcjtcblx0cHJpdmF0ZSBiYXNlQ29udGV4dFBhdGg6IHN0cmluZztcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZXJPdXRwdXQsXG5cdFx0cHJpdmF0ZSBtYW5pZmVzdFNldHRpbmdzOiBCYXNlTWFuaWZlc3RTZXR0aW5ncyxcblx0XHRwcml2YXRlIGRpYWdub3N0aWNzOiBJRGlhZ25vc3RpY3MsXG5cdFx0cHJpdmF0ZSBtZXJnZUZuOiBGdW5jdGlvbixcblx0XHRwcml2YXRlIHRhcmdldERhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGhcblx0KSB7XG5cdFx0dGhpcy5tYW5pZmVzdFdyYXBwZXIgPSBuZXcgTWFuaWZlc3RXcmFwcGVyKHRoaXMubWFuaWZlc3RTZXR0aW5ncywgbWVyZ2VGbik7XG5cdFx0dGhpcy5iYXNlQ29udGV4dFBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0gZnVsbHlRdWFsaWZpZWROYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZVxuXHQgKiBAcmV0dXJucyB7UHJvcGVydHl9IFRoZSBwcm9wZXJ0eSBFbnRpdHlUeXBlIGJhc2VkXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRFbnRpdHlUeXBlRnJvbUZ1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyk6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSB0aGlzLmNvbnZlcnRlZFR5cGVzLmVudGl0eVR5cGVzLmZpbmQoZW50aXR5VHlwZSA9PiB7XG5cdFx0XHRpZiAoZnVsbHlRdWFsaWZpZWROYW1lLnN0YXJ0c1dpdGgoZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUpKSB7XG5cdFx0XHRcdGNvbnN0IHJlcGxhY2VBbm5vdGF0aW9uID0gZnVsbHlRdWFsaWZpZWROYW1lLnJlcGxhY2UoZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIFwiXCIpO1xuXHRcdFx0XHRyZXR1cm4gcmVwbGFjZUFubm90YXRpb24uc3RhcnRzV2l0aChcIi9cIikgfHwgcmVwbGFjZUFubm90YXRpb24uc3RhcnRzV2l0aChcIkBcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRhcmdldEVudGl0eVR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIGVudGl0eVR5cGUgYXNzb2NpYXRlZCB3aXRoIGFuIGFubm90YXRpb24gb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbiBUaGUgYW5ub3RhdGlvbiBvYmplY3QgZm9yIHdoaWNoIHdlIHdhbnQgdG8gZmluZCB0aGUgZW50aXR5VHlwZVxuXHQgKiBAcmV0dXJucyB7RW50aXR5VHlwZX0gVGhlIEVudGl0eVR5cGUgdGhlIGFubm90YXRpb24gcmVmZXJzIHRvXG5cdCAqL1xuXHRnZXRBbm5vdGF0aW9uRW50aXR5VHlwZShhbm5vdGF0aW9uPzogQW5ub3RhdGlvblRlcm08YW55Pik6IEVudGl0eVR5cGUge1xuXHRcdGlmIChhbm5vdGF0aW9uKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IHRoaXMuX2dldEVudGl0eVR5cGVGcm9tRnVsbHlRdWFsaWZpZWROYW1lKGFubm90YXRpb25QYXRoKTtcblx0XHRcdGlmICghdGFyZ2V0RW50aXR5VHlwZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBFbnRpdHkgVHlwZSBmb3IgXCIgKyBhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGFyZ2V0RW50aXR5VHlwZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgbWFuaWZlc3Qgc2V0dGluZ3MgZGVmaW5lZCBmb3IgYSBzcGVjaWZpYyBjb250cm9sIHdpdGhpbiBjb250cm9sQ29uZmlndXJhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHZBbm5vdGF0aW9uUGF0aCBUaGUgYW5ub3RhdGlvbiBwYXRoIG9yIG9iamVjdCB0byBldmFsdWF0ZVxuXHQgKiBAcmV0dXJucyBUaGUgY29udHJvbCBjb25maWd1cmF0aW9uIGZvciB0aGF0IHNwZWNpZmljIGFubnRvYXRpb24gcGF0aCBpZiBpdCBleGlzdHNcblx0ICovXG5cdGdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odkFubm90YXRpb25QYXRoOiBzdHJpbmcgfCBBbm5vdGF0aW9uVGVybTxhbnk+KTogYW55IHtcblx0XHRpZiAoaXNBbm5vdGF0aW9uVGVybSh2QW5ub3RhdGlvblBhdGgpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5tYW5pZmVzdFdyYXBwZXIuZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24oXG5cdFx0XHRcdHZBbm5vdGF0aW9uUGF0aC5mdWxseVF1YWxpZmllZE5hbWUucmVwbGFjZSh0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIFwiXCIpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5tYW5pZmVzdFdyYXBwZXIuZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24odkFubm90YXRpb25QYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYW4gYWJzb2x1dGUgYW5ub3RhdGlvbiBwYXRoIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1ldGEgbW9kZWwgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIHNBbm5vdGF0aW9uUGF0aCBUaGUgcmVsYXRpdmUgYW5ub3RhdGlvbiBwYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0IGFubm90YXRpb24gcGF0aCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0XG5cdCAqL1xuXHRnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNBbm5vdGF0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0cmV0dXJuIHNBbm5vdGF0aW9uUGF0aDtcblx0XHR9XG5cdFx0aWYgKHNBbm5vdGF0aW9uUGF0aFswXSA9PT0gXCIvXCIpIHtcblx0XHRcdHJldHVybiBzQW5ub3RhdGlvblBhdGg7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmJhc2VDb250ZXh0UGF0aCArIFwiL1wiICsgc0Fubm90YXRpb25QYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBjdXJyZW50IGVudGl0eVNldC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgRW50aXR5U2V0IGlmIGl0IGV4aXN0cy5cblx0ICovXG5cdGdldEVudGl0eVNldCgpOiBFbnRpdHlTZXQgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBjb250ZXh0IHBhdGguXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IHBhdGggb2YgdGhlIGNvbnZlcnRlci5cblx0ICovXG5cdGdldENvbnRleHRQYXRoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuYmFzZUNvbnRleHRQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBjdXJyZW50IGRhdGEgbW9kZWwgb2JqZWN0IHBhdGguXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGRhdGEgbW9kZWwgb2JqZWN0IHBhdGhcblx0ICovXG5cdGdldERhdGFNb2RlbE9iamVjdFBhdGgoKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdFx0cmV0dXJuIHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIEVudGl0eUNvbnRhaW5lci5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgc2VydmljZSBFbnRpdHlDb250YWluZXJcblx0ICovXG5cdGdldEVudGl0eUNvbnRhaW5lcigpOiBFbnRpdHlDb250YWluZXIge1xuXHRcdHJldHVybiB0aGlzLmNvbnZlcnRlZFR5cGVzLmVudGl0eUNvbnRhaW5lcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIEVudGl0eVR5cGUgYmFzZWQgb24gdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBFbnRpdHlUeXBlLlxuXHQgKi9cblx0Z2V0RW50aXR5VHlwZSgpOiBFbnRpdHlUeXBlIHtcblx0XHRyZXR1cm4gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZW50aXR5IHR5cGUgb2YgdGhlIHBhcmFtZXRlciBpbiBjYXNlIG9mIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuXHQgKiBAcmV0dXJucyB7RW50aXR5VHlwZX0gVGhlIGVudGl0eSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXJcblx0ICovXG5cdGdldFBhcmFtZXRlckVudGl0eVR5cGUoKTogRW50aXR5VHlwZSB7XG5cdFx0Y29uc3QgcGFyYW1ldGVyRW50aXR5VHlwZSA9IHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdGNvbnN0IGlzUGFyYW1ldGVyaXplZCA9ICEhcGFyYW1ldGVyRW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0O1xuXHRcdHJldHVybiAoaXNQYXJhbWV0ZXJpemVkICYmIHBhcmFtZXRlckVudGl0eVR5cGUpIGFzIEVudGl0eVR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGFuIGFubm90YXRpb24gZnJvbSBhbiBlbnRpdHkgdHlwZSBiYXNlZCBvbiBhbm5vdGF0aW9uIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBUaGUgYW5ub3RhdGlvbiBwYXRoIHRvIGJlIGV2YWx1YXRlZFxuXHQgKiBAcmV0dXJucyBUaGUgdGFyZ2V0IGFubm90YXRpb24gcGF0aCBhcyB3ZWxsIGFzIGEgY29udmVydGVyIGNvbnRleHQgdG8gZ28gd2l0aCBpdFxuXHQgKi9cblx0Z2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IFJlc29sdmVkQW5ub3RhdGlvbkNvbnRleHQge1xuXHRcdGlmIChhbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiQFwiKSA9PT0gLTEpIHtcblx0XHRcdGFubm90YXRpb25QYXRoID0gXCJAXCIgKyBhbm5vdGF0aW9uUGF0aDtcblx0XHR9XG5cdFx0Y29uc3QgdGFyZ2V0T2JqZWN0OiBSZXNvbHZlZFRhcmdldCA9IHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKGFubm90YXRpb25QYXRoLCB0cnVlKTtcblxuXHRcdGxldCByb290RW50aXR5U2V0ID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldDtcblx0XHRsZXQgY3VycmVudEVudGl0eVR5cGUgPSB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZTtcblx0XHRjb25zdCBzdGFydGluZ0VudGl0eVR5cGUgPSB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllcyA9IHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5jb25jYXQoKTtcblx0XHRsZXQgaSA9IDE7XG5cdFx0bGV0IGN1cnJlbnRPYmplY3Q7XG5cdFx0bGV0IG5hdmlnYXRlZFBhdGhzID0gW107XG5cdFx0Y29uc3QgdmlzaXRlZE9iamVjdHMgPSB0YXJnZXRPYmplY3QudmlzaXRlZE9iamVjdHM7XG5cdFx0Ly8gSW4gY2FzZSBvZiBwYXJhbWV0ZXJpemVkIHNlcnZpY2Vcblx0XHRpZiAoIXJvb3RFbnRpdHlTZXQgJiYgc3RhcnRpbmdFbnRpdHlUeXBlLmFubm90YXRpb25zLkNvbW1vbj8uUmVzdWx0Q29udGV4dCkge1xuXHRcdFx0cm9vdEVudGl0eVNldCA9IHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldDtcblx0XHRcdHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKG5hdk9iamVjdCkge1xuXHRcdFx0XHRuYXZpZ2F0ZWRQYXRocy5wdXNoKG5hdk9iamVjdC5uYW1lKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR3aGlsZSAoaSA8IHZpc2l0ZWRPYmplY3RzLmxlbmd0aCkge1xuXHRcdFx0Y3VycmVudE9iamVjdCA9IHZpc2l0ZWRPYmplY3RzW2krK107XG5cdFx0XHRpZiAoY3VycmVudE9iamVjdC5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIikge1xuXHRcdFx0XHRuYXZpZ2F0ZWRQYXRocy5wdXNoKGN1cnJlbnRPYmplY3QubmFtZSk7XG5cdFx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2goY3VycmVudE9iamVjdCBhcyBOYXZpZ2F0aW9uUHJvcGVydHkpO1xuXHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IChjdXJyZW50T2JqZWN0IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSkudGFyZ2V0VHlwZTtcblx0XHRcdFx0aWYgKHJvb3RFbnRpdHlTZXQgJiYgcm9vdEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLmhhc093blByb3BlcnR5KG5hdmlnYXRlZFBhdGhzLmpvaW4oXCIvXCIpKSkge1xuXHRcdFx0XHRcdGNvbnN0IG5hdlBhdGggPSBuYXZpZ2F0ZWRQYXRocy5qb2luKFwiL1wiKTtcblx0XHRcdFx0XHRyb290RW50aXR5U2V0ID1cblx0XHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tjdXJyZW50T2JqZWN0Lm5hbWVdIHx8IHJvb3RFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZQYXRoXTtcblx0XHRcdFx0XHRuYXZpZ2F0ZWRQYXRocyA9IFtdO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChjdXJyZW50T2JqZWN0Ll90eXBlID09PSBcIkVudGl0eVNldFwiKSB7XG5cdFx0XHRcdHJvb3RFbnRpdHlTZXQgPSBjdXJyZW50T2JqZWN0IGFzIEVudGl0eVNldDtcblx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSByb290RW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IG91dERhdGFNb2RlbFBhdGggPSB7XG5cdFx0XHRzdGFydGluZ0VudGl0eVNldDogdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LFxuXHRcdFx0dGFyZ2V0RW50aXR5U2V0OiByb290RW50aXR5U2V0LFxuXHRcdFx0dGFyZ2V0RW50aXR5VHlwZTogY3VycmVudEVudGl0eVR5cGUsXG5cdFx0XHR0YXJnZXRPYmplY3Q6IG5hdmlnYXRpb25Qcm9wZXJ0aWVzW25hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCAtIDFdLFxuXHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHRjb250ZXh0TG9jYXRpb246IHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24sXG5cdFx0XHRjb252ZXJ0ZWRUeXBlczogdGhpcy5jb252ZXJ0ZWRUeXBlc1xuXHRcdH07XG5cdFx0cmV0dXJuIHtcblx0XHRcdGFubm90YXRpb246IHRhcmdldE9iamVjdC50YXJnZXQgYXMgQW55QW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG5ldyBDb252ZXJ0ZXJDb250ZXh0KFxuXHRcdFx0XHR0aGlzLmNvbnZlcnRlZFR5cGVzLFxuXHRcdFx0XHR0aGlzLm1hbmlmZXN0U2V0dGluZ3MsXG5cdFx0XHRcdHRoaXMuZGlhZ25vc3RpY3MsXG5cdFx0XHRcdHRoaXMubWVyZ2VGbixcblx0XHRcdFx0b3V0RGF0YU1vZGVsUGF0aFxuXHRcdFx0KVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHR5cGUgb2YgdGVtcGxhdGUgd2UncmUgd29ya2luZyBvbiAoZS5nLiBMaXN0UmVwb3J0IC8gT2JqZWN0UGFnZSAvIC4uLikuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHRlbnBsYXRlIHR5cGVcblx0ICovXG5cdGdldFRlbXBsYXRlVHlwZSgpOiBUZW1wbGF0ZVR5cGUge1xuXHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgY29udmVydGVkIHR5cGVzLlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBjb252ZXJ0ZWQgdHlwZXNcblx0ICovXG5cdGdldENvbnZlcnRlZFR5cGVzKCk6IENvbnZlcnRlck91dHB1dCB7XG5cdFx0cmV0dXJuIHRoaXMuY29udmVydGVkVHlwZXM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgYSByZWxhdGl2ZSBhbm5vdGF0aW9uIHBhdGggYmV0d2VlbiBhbiBhbm5vdGF0aW9uIHBhdGggYW5kIGFuIGVudGl0eSB0eXBlLlxuXHQgKlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvblBhdGhcblx0ICogQHBhcmFtIGVudGl0eVR5cGVcblx0ICogQHJldHVybnMgVGhlIHJlbGF0aXZlIGFubnRvdGF0aW9uIHBhdGguXG5cdCAqL1xuXHRnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKGFubm90YXRpb25QYXRoOiBzdHJpbmcsIGVudGl0eVR5cGU6IEVudGl0eVR5cGUpOiBzdHJpbmcge1xuXHRcdHJldHVybiBhbm5vdGF0aW9uUGF0aC5yZXBsYWNlKGVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLCBcIlwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmFuc2Zvcm0gYW4gZW50aXR5VHlwZSBiYXNlZCBwYXRoIHRvIGFuIGVudGl0eVNldCBiYXNlZCBvbmUgKHVpNSB0ZW1wbGF0aW5nIGdlbmVyYWxseSBleHBlY3QgYW4gZW50aXR5U2V0QmFzZWRQYXRoKS5cblx0ICpcblx0ICogQHBhcmFtIGFubm90YXRpb25QYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBFbnRpdHlTZXQgYmFzZWQgYW5ub3RhdGlvbiBwYXRoXG5cdCAqL1xuXHRnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGFubm90YXRpb25QYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmICghYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uUGF0aDtcblx0XHR9XG5cdFx0Y29uc3QgZW50aXR5VHlwZUZRTiA9IHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRpZiAoXG5cdFx0XHR0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0IHx8XG5cdFx0XHQoKHRoaXMuYmFzZUNvbnRleHRQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpICYmIHRoaXMuYmFzZUNvbnRleHRQYXRoLm1hdGNoKC9cXC8vZykpIHx8IFtdKS5sZW5ndGggPiAxXG5cdFx0KSB7XG5cdFx0XHRsZXQgcmVwbGFjZWRBbm5vdGF0aW9uUGF0aCA9IGFubm90YXRpb25QYXRoLnJlcGxhY2UoZW50aXR5VHlwZUZRTiwgXCIvXCIpO1xuXHRcdFx0aWYgKHJlcGxhY2VkQW5ub3RhdGlvblBhdGgubGVuZ3RoID4gMiAmJiByZXBsYWNlZEFubm90YXRpb25QYXRoWzBdID09PSBcIi9cIiAmJiByZXBsYWNlZEFubm90YXRpb25QYXRoWzFdID09PSBcIi9cIikge1xuXHRcdFx0XHRyZXBsYWNlZEFubm90YXRpb25QYXRoID0gcmVwbGFjZWRBbm5vdGF0aW9uUGF0aC5zdWJzdHIoMSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5iYXNlQ29udGV4dFBhdGggKyAocmVwbGFjZWRBbm5vdGF0aW9uUGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IHJlcGxhY2VkQW5ub3RhdGlvblBhdGggOiBcIi9cIiArIHJlcGxhY2VkQW5ub3RhdGlvblBhdGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCIvXCIgKyBhbm5vdGF0aW9uUGF0aDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIG1hbmlmZXN0IHdyYXBwZXIgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IG1hbmlmZXN0IHdyYXBwZXJcblx0ICovXG5cdGdldE1hbmlmZXN0V3JhcHBlcigpOiBNYW5pZmVzdFdyYXBwZXIge1xuXHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlcjtcblx0fVxuXG5cdGdldERpYWdub3N0aWNzKCk6IElEaWFnbm9zdGljcyB7XG5cdFx0cmV0dXJuIHRoaXMuZGlhZ25vc3RpY3M7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHRhcmdldCBmcm9tIGFuIGFic29sdXRlIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHdlIHdhbnQgdG8gZ2V0IHRoZSB0YXJnZXRcblx0ICogQHJldHVybnMge0NvbnZlcnRlckNvbnRleHR9XG5cdCAqL1xuXHRyZXNvbHZlQWJzb2x1dGVQYXRoPFQ+KHBhdGg6IHN0cmluZyk6IFJlc29sdXRpb25UYXJnZXQ8VD4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoKHBhdGgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIGEgbmV3IGNvbnZlcnRlciBjb250ZXh0LCBzY29wZWQgZm9yIGEgZGlmZmVyZW50IGNvbnRleHQgcGF0aC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHRQYXRoIFRoZSBwYXRoIHdlIHdhbnQgdG8gb3JjaGVzdHJhdGUgdGhlIGNvbnZlcnRlciBjb250ZXh0IGFyb3VuZFxuXHQgKiBAcmV0dXJucyB7Q29udmVydGVyQ29udGV4dH1cblx0ICovXG5cdGdldENvbnZlcnRlckNvbnRleHRGb3I8VD4oY29udGV4dFBhdGg6IHN0cmluZyk6IENvbnZlcnRlckNvbnRleHQge1xuXHRcdGNvbnN0IHJlc29sdmVkTWV0YVBhdGg6IFJlc29sdXRpb25UYXJnZXQ8VD4gPSB0aGlzLmNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoKGNvbnRleHRQYXRoKTtcblx0XHRjb25zdCB0YXJnZXRQYXRoID0gZ2V0RGF0YU1vZGVsUGF0aEZvckVudGl0eVNldChyZXNvbHZlZE1ldGFQYXRoLCB0aGlzLmNvbnZlcnRlZFR5cGVzKTtcblx0XHRyZXR1cm4gbmV3IENvbnZlcnRlckNvbnRleHQodGhpcy5jb252ZXJ0ZWRUeXBlcywgdGhpcy5tYW5pZmVzdFNldHRpbmdzLCB0aGlzLmRpYWdub3N0aWNzLCB0aGlzLm1lcmdlRm4sIHRhcmdldFBhdGgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhbGwgYW5ub3RhdGlvbnMgb2YgYSBnaXZlbiB0ZXJtIGFuZCB2b2NhYnVsYXJ5IG9uIGFuIGVudGl0eSB0eXBlXG5cdCAqIChvciBvbiB0aGUgY3VycmVudCBlbnRpdHkgdHlwZSBpZiBlbnRpdHlUeXBlIGlzbid0IHNwZWNpZmllZCkuXG5cdCAqXG5cdCAqIEBwYXJhbSB2b2NhYnVsYXJ5TmFtZVxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvblRlcm1cblx0ICogQHBhcmFtIFthbm5vdGF0aW9uU291cmNlc11cblx0ICogQHJldHVybnMgQWxsIHRoZSBhbm5vdGF0aW9uIGZvciBhIHNwZWNpZmljIHRlcm0gYW5kIHZvY2FidWxhcnkgZnJvbSBhbiBlbnRpdHkgdHlwZVxuXHQgKi9cblx0Z2V0QW5ub3RhdGlvbnNCeVRlcm0oXG5cdFx0dm9jYWJ1bGFyeU5hbWU6IGtleW9mIEVudGl0eVR5cGVBbm5vdGF0aW9ucyxcblx0XHRhbm5vdGF0aW9uVGVybTogc3RyaW5nLFxuXHRcdGFubm90YXRpb25Tb3VyY2VzOiAoU2VydmljZU9iamVjdCB8IHVuZGVmaW5lZClbXSA9IFt0aGlzLmdldEVudGl0eVR5cGUoKV1cblx0KTogQW5ub3RhdGlvblRlcm08YW55PltdIHtcblx0XHRsZXQgb3V0QW5ub3RhdGlvbnM6IEFubm90YXRpb25UZXJtPGFueT5bXSA9IFtdO1xuXHRcdGFubm90YXRpb25Tb3VyY2VzLmZvckVhY2goYW5ub3RhdGlvblNvdXJjZSA9PiB7XG5cdFx0XHRpZiAoYW5ub3RhdGlvblNvdXJjZSkge1xuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvblRlcm08YW55Pj4gPSBhbm5vdGF0aW9uU291cmNlPy5hbm5vdGF0aW9uc1t2b2NhYnVsYXJ5TmFtZV0gfHwge307XG5cdFx0XHRcdGlmIChhbm5vdGF0aW9ucykge1xuXHRcdFx0XHRcdG91dEFubm90YXRpb25zID0gT2JqZWN0LmtleXMoYW5ub3RhdGlvbnMpXG5cdFx0XHRcdFx0XHQuZmlsdGVyKGFubm90YXRpb24gPT4gYW5ub3RhdGlvbnNbYW5ub3RhdGlvbl0udGVybSA9PT0gYW5ub3RhdGlvblRlcm0pXG5cdFx0XHRcdFx0XHQucmVkdWNlKChwcmV2aW91c1ZhbHVlOiBBbm5vdGF0aW9uVGVybTxhbnk+W10sIGtleTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHByZXZpb3VzVmFsdWUucHVzaChhbm5vdGF0aW9uc1trZXldKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHByZXZpb3VzVmFsdWU7XG5cdFx0XHRcdFx0XHR9LCBvdXRBbm5vdGF0aW9ucyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gb3V0QW5ub3RhdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSByZWxhdGl2ZSBtb2RlbCBwYXRoIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRleHQgcGF0aC5cblx0ICpcblx0ICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IFRoZSByZWxhdGl2ZSBtb2RlbCBwYXRoIG9yIHVuZGVmaW5lZCBpZiB0aGUgcGF0aCBpcyBub3QgcmVzb2x2ZWFibGVcblx0ICovXG5cdGdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKTogRnVuY3Rpb24ge1xuXHRcdGNvbnN0IHRhcmdldERhdGFNb2RlbFBhdGggPSB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGg7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHNQYXRoOiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IGVuaGFuY2VkUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKHRhcmdldERhdGFNb2RlbFBhdGgsIHNQYXRoKTtcblx0XHRcdHJldHVybiBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGVuaGFuY2VkUGF0aCwgdHJ1ZSk7XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgdGhlIGNvbnZlcnRlciBjb250ZXh0IG5lY2Vzc2FyeSBmb3IgYSBtYWNybyBiYXNlZCBvbiBhIG1ldGFtb2RlbCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gc0VudGl0eVNldE5hbWVcblx0ICogQHBhcmFtIG9NZXRhTW9kZWxDb250ZXh0XG5cdCAqIEBwYXJhbSBkaWFnbm9zdGljc1xuXHQgKiBAcGFyYW0gbWVyZ2VGblxuXHQgKiBAcGFyYW0gdGFyZ2V0RGF0YU1vZGVsUGF0aFxuXHQgKiBAcGFyYW0gbWFuaWZlc3RTZXR0aW5nc1xuXHQgKiBAcmV0dXJucyB7Q29udmVydGVyQ29udGV4dH0gVGhlIGN1cnJlbnQgY29udmVydGVyIGNvbnRleHRcblx0ICovXG5cdHN0YXRpYyBjcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0c0VudGl0eVNldE5hbWU6IHN0cmluZyxcblx0XHRvTWV0YU1vZGVsQ29udGV4dDogQ29udGV4dCB8IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGRpYWdub3N0aWNzOiBJRGlhZ25vc3RpY3MsXG5cdFx0bWVyZ2VGbjogRnVuY3Rpb24sXG5cdFx0dGFyZ2V0RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCB8IHVuZGVmaW5lZCxcblx0XHRtYW5pZmVzdFNldHRpbmdzOiBCYXNlTWFuaWZlc3RTZXR0aW5ncyA9IHt9IGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzXG5cdCk6IENvbnZlcnRlckNvbnRleHQge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsID0gb01ldGFNb2RlbENvbnRleHQuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTWV0YU1vZGVsXCIpXG5cdFx0XHQ/IChvTWV0YU1vZGVsQ29udGV4dCBhcyBPRGF0YU1ldGFNb2RlbClcblx0XHRcdDogKChvTWV0YU1vZGVsQ29udGV4dCBhcyBDb250ZXh0KS5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKTtcblx0XHRjb25zdCBvQ29udmVydGVyT3V0cHV0ID0gY29udmVydFR5cGVzKG9NZXRhTW9kZWwpO1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVNldCA9IG9Db252ZXJ0ZXJPdXRwdXQuZW50aXR5U2V0cy5maW5kKGVudGl0eVNldCA9PiBlbnRpdHlTZXQubmFtZSA9PT0gc0VudGl0eVNldE5hbWUpIGFzIEVudGl0eVNldDtcblx0XHRpZiAoIXRhcmdldERhdGFNb2RlbFBhdGgpIHtcblx0XHRcdHRhcmdldERhdGFNb2RlbFBhdGggPSB7XG5cdFx0XHRcdHN0YXJ0aW5nRW50aXR5U2V0OiB0YXJnZXRFbnRpdHlTZXQsXG5cdFx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXSxcblx0XHRcdFx0dGFyZ2V0RW50aXR5U2V0OiB0YXJnZXRFbnRpdHlTZXQsXG5cdFx0XHRcdHRhcmdldEVudGl0eVR5cGU6IHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlLFxuXHRcdFx0XHR0YXJnZXRPYmplY3Q6IHRhcmdldEVudGl0eVNldCxcblx0XHRcdFx0Y29udmVydGVkVHlwZXM6IG9Db252ZXJ0ZXJPdXRwdXRcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgQ29udmVydGVyQ29udGV4dChvQ29udmVydGVyT3V0cHV0LCBtYW5pZmVzdFNldHRpbmdzLCBkaWFnbm9zdGljcywgbWVyZ2VGbiwgdGFyZ2V0RGF0YU1vZGVsUGF0aCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29udmVydGVyQ29udGV4dDtcbiJdfQ==
488
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbnZlcnRlckNvbnRleHQudHMiXSwibmFtZXMiOlsiaXNBbm5vdGF0aW9uVGVybSIsInZBbm5vdGF0aW9uUGF0aCIsImlzU2VydmljZU9iamVjdCIsIm9iamVjdFBhcnQiLCJoYXNPd25Qcm9wZXJ0eSIsImdldERhdGFNb2RlbFBhdGhGb3JFbnRpdHlTZXQiLCJyZXNvbHZlZE1ldGFQYXRoIiwiY29udmVydGVkVHlwZXMiLCJyb290RW50aXR5U2V0IiwiY3VycmVudEVudGl0eVNldCIsInByZXZpb3VzRW50aXR5U2V0IiwiY3VycmVudEVudGl0eVR5cGUiLCJuYXZpZ2F0ZWRQYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwib2JqZWN0UGF0aCIsImZvckVhY2giLCJfdHlwZSIsInB1c2giLCJuYW1lIiwidGFyZ2V0VHlwZSIsIm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJqb2luIiwidW5kZWZpbmVkIiwiZW50aXR5VHlwZSIsImRhdGFNb2RlbFBhdGgiLCJzdGFydGluZ0VudGl0eVNldCIsInRhcmdldEVudGl0eVR5cGUiLCJ0YXJnZXRFbnRpdHlTZXQiLCJjb250ZXh0TG9jYXRpb24iLCJ0YXJnZXRPYmplY3QiLCJ0YXJnZXQiLCJDb252ZXJ0ZXJDb250ZXh0IiwibWFuaWZlc3RTZXR0aW5ncyIsImRpYWdub3N0aWNzIiwibWVyZ2VGbiIsInRhcmdldERhdGFNb2RlbFBhdGgiLCJtYW5pZmVzdFdyYXBwZXIiLCJNYW5pZmVzdFdyYXBwZXIiLCJiYXNlQ29udGV4dFBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiX2dldEVudGl0eVR5cGVGcm9tRnVsbHlRdWFsaWZpZWROYW1lIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZW50aXR5VHlwZXMiLCJmaW5kIiwic3RhcnRzV2l0aCIsInJlcGxhY2VBbm5vdGF0aW9uIiwicmVwbGFjZSIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiYW5ub3RhdGlvbiIsImFubm90YXRpb25QYXRoIiwiRXJyb3IiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwic0Fubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiZ2V0RW50aXR5Q29udGFpbmVyIiwiZW50aXR5Q29udGFpbmVyIiwiZ2V0RW50aXR5VHlwZSIsImdldFBhcmFtZXRlckVudGl0eVR5cGUiLCJwYXJhbWV0ZXJFbnRpdHlUeXBlIiwiaXNQYXJhbWV0ZXJpemVkIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJSZXN1bHRDb250ZXh0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJpbmRleE9mIiwicmVzb2x2ZVBhdGgiLCJzdGFydGluZ0VudGl0eVR5cGUiLCJjb25jYXQiLCJpIiwiY3VycmVudE9iamVjdCIsInZpc2l0ZWRPYmplY3RzIiwibmF2T2JqZWN0IiwibGVuZ3RoIiwibmF2UGF0aCIsIm91dERhdGFNb2RlbFBhdGgiLCJjb252ZXJ0ZXJDb250ZXh0IiwiZ2V0VGVtcGxhdGVUeXBlIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImVudGl0eVR5cGVGUU4iLCJtYXRjaCIsInJlcGxhY2VkQW5ub3RhdGlvblBhdGgiLCJzdWJzdHIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXREaWFnbm9zdGljcyIsInJlc29sdmVBYnNvbHV0ZVBhdGgiLCJwYXRoIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImNvbnRleHRQYXRoIiwidGFyZ2V0UGF0aCIsImdldEFubm90YXRpb25zQnlUZXJtIiwidm9jYWJ1bGFyeU5hbWUiLCJhbm5vdGF0aW9uVGVybSIsImFubm90YXRpb25Tb3VyY2VzIiwib3V0QW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uU291cmNlIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsInRlcm0iLCJyZWR1Y2UiLCJwcmV2aW91c1ZhbHVlIiwia2V5IiwiZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbiIsInNQYXRoIiwiZW5oYW5jZWRQYXRoIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwic0VudGl0eVNldE5hbWUiLCJvTWV0YU1vZGVsQ29udGV4dCIsIm9NZXRhTW9kZWwiLCJpc0EiLCJnZXRNb2RlbCIsIm9Db252ZXJ0ZWRNZXRhZGF0YSIsImNvbnZlcnRUeXBlcyIsImVudGl0eVNldHMiLCJlbnRpdHlTZXQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNQSxnQkFBZ0IsR0FBRyxVQUFVQyxlQUFWLEVBQWlHO0FBQ3pILFdBQU8sT0FBT0EsZUFBUCxLQUEyQixRQUFsQztBQUNBLEdBRkQ7O0FBSUEsV0FBU0MsZUFBVCxDQUF5QkMsVUFBekIsRUFBOEY7QUFDN0YsV0FBT0EsVUFBVSxJQUFJQSxVQUFVLENBQUNDLGNBQVgsQ0FBMEIsT0FBMUIsQ0FBckI7QUFDQTs7QUFFRCxNQUFNQyw0QkFBNEIsR0FBRyxVQUNwQ0MsZ0JBRG9DLEVBRXBDQyxjQUZvQyxFQUdkO0FBQ3RCLFFBQUlDLGFBQUo7QUFDQSxRQUFJQyxnQkFBSjtBQUNBLFFBQUlDLGlCQUFKO0FBQ0EsUUFBSUMsaUJBQUo7QUFDQSxRQUFJQyxjQUF3QixHQUFHLEVBQS9CO0FBQ0EsUUFBTUMsb0JBQTBDLEdBQUcsRUFBbkQ7QUFDQVAsSUFBQUEsZ0JBQWdCLENBQUNRLFVBQWpCLENBQTRCQyxPQUE1QixDQUFvQyxVQUFDWixVQUFELEVBQTRDO0FBQUE7O0FBQy9FLFVBQUlELGVBQWUsQ0FBQ0MsVUFBRCxDQUFuQixFQUFpQztBQUNoQyxnQkFBUUEsVUFB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QUFBLFlBQVksRUFBRUYsZUFMTztBQU1yQnBCLFVBQUFBLGNBQWMsRUFBRWdIO0FBTkssU0FBdEI7QUFRQTs7QUFDRCxhQUFPLElBQUl4RixnQkFBSixDQUFxQndGLGtCQUFyQixFQUF5Q3ZGLGdCQUF6QyxFQUEyREMsV0FBM0QsRUFBd0VDLE9BQXhFLEVBQWlGQyxtQkFBakYsQ0FBUDtBQUNBLEs7Ozs7O1NBR2FKLGdCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UZXJtLFxuXHRBbnlBbm5vdGF0aW9uLFxuXHRDb252ZXJ0ZWRNZXRhZGF0YSxcblx0RW50aXR5Q29udGFpbmVyLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UmVzb2x1dGlvblRhcmdldCxcblx0U2VydmljZU9iamVjdCxcblx0U2VydmljZU9iamVjdEFuZEFubm90YXRpb25cbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVR5cGVBbm5vdGF0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvRWRtX1R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VNYW5pZmVzdFNldHRpbmdzLCBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgeyBSZXNvbHZlZFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IElEaWFnbm9zdGljcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCwgZ2V0VGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5cbmV4cG9ydCB0eXBlIFJlc29sdmVkQW5ub3RhdGlvbkNvbnRleHQgPSB7XG5cdGFubm90YXRpb246IEFueUFubm90YXRpb247XG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFuIG9iamVjdCBpcyBhbiBhbm5vdGF0aW9uIHRlcm0uXG4gKlxuICogQHBhcmFtIHZBbm5vdGF0aW9uUGF0aFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0J3MgYW4gYW5ub3RhdGlvbiB0ZXJtXG4gKi9cbmNvbnN0IGlzQW5ub3RhdGlvblRlcm0gPSBmdW5jdGlvbiAodkFubm90YXRpb25QYXRoOiBzdHJpbmcgfCBBbm5vdGF0aW9uVGVybTxhbnk+KTogdkFubm90YXRpb25QYXRoIGlzIEFubm90YXRpb25UZXJtPGFueT4ge1xuXHRyZXR1cm4gdHlwZW9mIHZBbm5vdGF0aW9uUGF0aCA9PT0gXCJvYmplY3RcIjtcbn07XG5cbmZ1bmN0aW9uIGlzU2VydmljZU9iamVjdChvYmplY3RQYXJ0OiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbik6IG9iamVjdFBhcnQgaXMgU2VydmljZU9iamVjdCB7XG5cdHJldHVybiBvYmplY3RQYXJ0ICYmIG9iamVjdFBhcnQuaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKTtcbn1cblxuY29uc3QgZ2V0RGF0YU1vZGVsUGF0aEZvckVudGl0eVNldCA9IGZ1bmN0aW9uIChcblx0cmVzb2x2ZWRNZXRhUGF0aDogUmVzb2x1dGlvblRhcmdldDxhbnk+LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGFcbik6IERhdGFNb2RlbE9iamVjdFBhdGgge1xuXHRsZXQgcm9vdEVudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkO1xuXHRsZXQgY3VycmVudEVudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkO1xuXHRsZXQgcHJldmlvdXNFbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZDtcblx0bGV0IGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkO1xuXHRsZXQgbmF2aWdhdGVkUGF0aHM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBOYXZpZ2F0aW9uUHJvcGVydHlbXSA9IFtdO1xuXHRyZXNvbHZlZE1ldGFQYXRoLm9iamVjdFBhdGguZm9yRWFjaCgob2JqZWN0UGFydDogU2VydmljZU9iamVjdEFuZEFubm90YXRpb24pID0+IHtcblx0XHRpZiAoaXNTZXJ2aWNlT2JqZWN0KG9iamVjdFBhcnQpKSB7XG5cdFx0XHRzd2l0Y2ggKG9iamVjdFBhcnQuX3R5cGUpIHtcblx0XHRcdFx0Y2FzZSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiOlxuXHRcdFx0XHRcdG5hdmlnYXRlZFBhdGhzLnB1c2gob2JqZWN0UGFydC5uYW1lKTtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKG9iamVjdFBhcnQpO1xuXHRcdFx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gb2JqZWN0UGFydC50YXJnZXRUeXBlO1xuXHRcdFx0XHRcdGlmIChwcmV2aW91c0VudGl0eVNldCAmJiBwcmV2aW91c0VudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLmhhc093blByb3BlcnR5KG5hdmlnYXRlZFBhdGhzLmpvaW4oXCIvXCIpKSkge1xuXHRcdFx0XHRcdFx0Y3VycmVudEVudGl0eVNldCA9IHByZXZpb3VzRW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2aWdhdGVkUGF0aHMuam9pbihcIi9cIildIGFzIEVudGl0eVNldDtcblx0XHRcdFx0XHRcdHByZXZpb3VzRW50aXR5U2V0ID0gY3VycmVudEVudGl0eVNldDtcblx0XHRcdFx0XHRcdG5hdmlnYXRlZFBhdGhzID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiRW50aXR5U2V0XCI6XG5cdFx0XHRcdFx0aWYgKHJvb3RFbnRpdHlTZXQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0cm9vdEVudGl0eVNldCA9IG9iamVjdFBhcnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBvYmplY3RQYXJ0O1xuXHRcdFx0XHRcdHByZXZpb3VzRW50aXR5U2V0ID0gY3VycmVudEVudGl0eVNldDtcblx0XHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IGN1cnJlbnRFbnRpdHlTZXQ/LmVudGl0eVR5cGU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCA9IHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogcm9vdEVudGl0eVNldCBhcyBFbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZTogY3VycmVudEVudGl0eVR5cGUgYXMgRW50aXR5VHlwZSxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGN1cnJlbnRFbnRpdHlTZXQsXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IG5hdmlnYXRpb25Qcm9wZXJ0aWVzLFxuXHRcdGNvbnRleHRMb2NhdGlvbjogdW5kZWZpbmVkLFxuXHRcdHRhcmdldE9iamVjdDogcmVzb2x2ZWRNZXRhUGF0aC50YXJnZXQsXG5cdFx0Y29udmVydGVkVHlwZXM6IGNvbnZlcnRlZFR5cGVzXG5cdH07XG5cdGRhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uID0gZGF0YU1vZGVsUGF0aDtcblx0cmV0dXJuIGRhdGFNb2RlbFBhdGg7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIENvbnZlcnRlckNvbnRleHQgb2JqZWN0IHRoYXQgd2lsbCBiZSB1c2VkIHdpdGhpbiB0aGUgY29udmVydGVycy5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlZE1ldGFkYXRhfSBvQ29udmVydGVkVHlwZXMgVGhlIGNvbnZlcnRlZCBhbm5vdGF0aW9uIGFuZCBzZXJ2aWNlIHR5cGVzXG4gKiBAcGFyYW0ge0Jhc2VNYW5pZmVzdFNldHRpbmdzfSBvTWFuaWZlc3RTZXR0aW5ncyBUaGUgbWFuaWZlc3RTZXR0aW5ncyB0aGF0IGFwcGxpZXMgdG8gdGhpcyBwYWdlXG4gKiBAcGFyYW0ge1RlbXBsYXRlVHlwZX0gdGVtcGxhdGVUeXBlIFRoZSB0eXBlIG9mIHRlbXBsYXRlIHdlJ3JlIGxvb2tpbmcgYXQgcmlnaHQgbm93XG4gKiBAcGFyYW0ge0lEaWFnbm9zdGljc30gZGlhZ25vc3RpY3MgVGhlIGRpYWdub3N0aWNzIHNoaW1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRm4gVGhlIGZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gcGVyZm9tIHNvbWUgZGVlcCBtZXJnZXMgYmV0d2VlbiBvYmplY3RcbiAqIEBwYXJhbSB7RGF0YU1vZGVsT2JqZWN0UGF0aH0gdGFyZ2V0RGF0YU1vZGVsUGF0aCBUaGUgZ2xvYmFsIHBhdGggdG8gcmVhY2ggdGhlIGVudGl0eVNldFxuICogQHJldHVybnMge0NvbnZlcnRlckNvbnRleHR9IEEgY29udmVydGVyIGNvbnRleHQgZm9yIHRoZSBjb252ZXJ0ZXJzXG4gKi9cbmNsYXNzIENvbnZlcnRlckNvbnRleHQge1xuXHRwcml2YXRlIG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyO1xuXHRwcml2YXRlIGJhc2VDb250ZXh0UGF0aDogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgY29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRcdHByaXZhdGUgbWFuaWZlc3RTZXR0aW5nczogQmFzZU1hbmlmZXN0U2V0dGluZ3MsXG5cdFx0cHJpdmF0ZSBkaWFnbm9zdGljczogSURpYWdub3N0aWNzLFxuXHRcdHByaXZhdGUgbWVyZ2VGbjogRnVuY3Rpb24sXG5cdFx0cHJpdmF0ZSB0YXJnZXREYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoXG5cdCkge1xuXHRcdHRoaXMubWFuaWZlc3RXcmFwcGVyID0gbmV3IE1hbmlmZXN0V3JhcHBlcih0aGlzLm1hbmlmZXN0U2V0dGluZ3MsIG1lcmdlRm4pO1xuXHRcdHRoaXMuYmFzZUNvbnRleHRQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aCh0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2V0RW50aXR5VHlwZUZyb21GdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmcpOiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5jb252ZXJ0ZWRUeXBlcy5lbnRpdHlUeXBlcy5maW5kKChlbnRpdHlUeXBlKSA9PiB7XG5cdFx0XHRpZiAoZnVsbHlRdWFsaWZpZWROYW1lLnN0YXJ0c1dpdGgoZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUpKSB7XG5cdFx0XHRcdGNvbnN0IHJlcGxhY2VBbm5vdGF0aW9uID0gZnVsbHlRdWFsaWZpZWROYW1lLnJlcGxhY2UoZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIFwiXCIpO1xuXHRcdFx0XHRyZXR1cm4gcmVwbGFjZUFubm90YXRpb24uc3RhcnRzV2l0aChcIi9cIikgfHwgcmVwbGFjZUFubm90YXRpb24uc3RhcnRzV2l0aChcIkBcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIGVudGl0eVR5cGUgYXNzb2NpYXRlZCB3aXRoIGFuIGFubm90YXRpb24gb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbiBUaGUgYW5ub3RhdGlvbiBvYmplY3QgZm9yIHdoaWNoIHdlIHdhbnQgdG8gZmluZCB0aGUgZW50aXR5VHlwZVxuXHQgKiBAcmV0dXJucyBUaGUgRW50aXR5VHlwZSB0aGUgYW5ub3RhdGlvbiByZWZlcnMgdG9cblx0ICovXG5cdGdldEFubm90YXRpb25FbnRpdHlUeXBlKGFubm90YXRpb24/OiBBbm5vdGF0aW9uVGVybTxhbnk+KTogRW50aXR5VHlwZSB7XG5cdFx0aWYgKGFubm90YXRpb24pIHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWU7XG5cdFx0XHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gdGhpcy5fZ2V0RW50aXR5VHlwZUZyb21GdWxseVF1YWxpZmllZE5hbWUoYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0aWYgKCF0YXJnZXRFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgRW50aXR5IFR5cGUgZm9yICR7YW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWV9YCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGFyZ2V0RW50aXR5VHlwZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgbWFuaWZlc3Qgc2V0dGluZ3MgZGVmaW5lZCBmb3IgYSBzcGVjaWZpYyBjb250cm9sIHdpdGhpbiBjb250cm9sQ29uZmlndXJhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHZBbm5vdGF0aW9uUGF0aCBUaGUgYW5ub3RhdGlvbiBwYXRoIG9yIG9iamVjdCB0byBldmFsdWF0ZVxuXHQgKiBAcmV0dXJucyBUaGUgY29udHJvbCBjb25maWd1cmF0aW9uIGZvciB0aGF0IHNwZWNpZmljIGFubnRvYXRpb24gcGF0aCBpZiBpdCBleGlzdHNcblx0ICovXG5cdGdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odkFubm90YXRpb25QYXRoOiBzdHJpbmcgfCBBbm5vdGF0aW9uVGVybTxhbnk+KTogYW55IHtcblx0XHRpZiAoaXNBbm5vdGF0aW9uVGVybSh2QW5ub3RhdGlvblBhdGgpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5tYW5pZmVzdFdyYXBwZXIuZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24oXG5cdFx0XHRcdHZBbm5vdGF0aW9uUGF0aC5mdWxseVF1YWxpZmllZE5hbWUucmVwbGFjZSh0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIFwiXCIpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5tYW5pZmVzdFdyYXBwZXIuZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24odkFubm90YXRpb25QYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYW4gYWJzb2x1dGUgYW5ub3RhdGlvbiBwYXRoIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1ldGEgbW9kZWwgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIHNBbm5vdGF0aW9uUGF0aCBUaGUgcmVsYXRpdmUgYW5ub3RhdGlvbiBwYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0IGFubm90YXRpb24gcGF0aCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0XG5cdCAqL1xuXHRnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNBbm5vdGF0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0cmV0dXJuIHNBbm5vdGF0aW9uUGF0aDtcblx0XHR9XG5cdFx0aWYgKHNBbm5vdGF0aW9uUGF0aFswXSA9PT0gXCIvXCIpIHtcblx0XHRcdHJldHVybiBzQW5ub3RhdGlvblBhdGg7XG5cdFx0fVxuXHRcdHJldHVybiBgJHt0aGlzLmJhc2VDb250ZXh0UGF0aH0vJHtzQW5ub3RhdGlvblBhdGh9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBlbnRpdHlTZXQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IEVudGl0eVNldCBpZiBpdCBleGlzdHMuXG5cdCAqL1xuXHRnZXRFbnRpdHlTZXQoKTogRW50aXR5U2V0IHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgY29udGV4dCBwYXRoLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgY29udGV4dCBwYXRoIG9mIHRoZSBjb252ZXJ0ZXIuXG5cdCAqL1xuXHRnZXRDb250ZXh0UGF0aCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmJhc2VDb250ZXh0UGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBkYXRhIG1vZGVsIG9iamVjdCBwYXRoLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBkYXRhIG1vZGVsIG9iamVjdCBwYXRoXG5cdCAqL1xuXHRnZXREYXRhTW9kZWxPYmplY3RQYXRoKCk6IERhdGFNb2RlbE9iamVjdFBhdGgge1xuXHRcdHJldHVybiB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBFbnRpdHlDb250YWluZXIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHNlcnZpY2UgRW50aXR5Q29udGFpbmVyXG5cdCAqL1xuXHRnZXRFbnRpdHlDb250YWluZXIoKTogRW50aXR5Q29udGFpbmVyIHtcblx0XHRyZXR1cm4gdGhpcy5jb252ZXJ0ZWRUeXBlcy5lbnRpdHlDb250YWluZXI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBFbnRpdHlUeXBlIGJhc2VkIG9uIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZS5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgRW50aXR5VHlwZS5cblx0ICovXG5cdGdldEVudGl0eVR5cGUoKTogRW50aXR5VHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGVudGl0eSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIgaW4gY2FzZSBvZiBhIHBhcmFtZXRlcml6ZWQgc2VydmljZS5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGVudGl0eSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXJcblx0ICovXG5cdGdldFBhcmFtZXRlckVudGl0eVR5cGUoKTogRW50aXR5VHlwZSB7XG5cdFx0Y29uc3QgcGFyYW1ldGVyRW50aXR5VHlwZSA9IHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdGNvbnN0IGlzUGFyYW1ldGVyaXplZCA9ICEhcGFyYW1ldGVyRW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0O1xuXHRcdHJldHVybiAoaXNQYXJhbWV0ZXJpemVkICYmIHBhcmFtZXRlckVudGl0eVR5cGUpIGFzIEVudGl0eVR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGFuIGFubm90YXRpb24gZnJvbSBhbiBlbnRpdHkgdHlwZSBiYXNlZCBvbiBhbm5vdGF0aW9uIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBUaGUgYW5ub3RhdGlvbiBwYXRoIHRvIGJlIGV2YWx1YXRlZFxuXHQgKiBAcmV0dXJucyBUaGUgdGFyZ2V0IGFubm90YXRpb24gcGF0aCBhcyB3ZWxsIGFzIGEgY29udmVydGVyIGNvbnRleHQgdG8gZ28gd2l0aCBpdFxuXHQgKi9cblx0Z2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IFJlc29sdmVkQW5ub3RhdGlvbkNvbnRleHQge1xuXHRcdGlmIChhbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiQFwiKSA9PT0gLTEpIHtcblx0XHRcdGFubm90YXRpb25QYXRoID0gYEAke2Fubm90YXRpb25QYXRofWA7XG5cdFx0fVxuXHRcdGNvbnN0IHRhcmdldE9iamVjdDogUmVzb2x2ZWRUYXJnZXQgPSB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChhbm5vdGF0aW9uUGF0aCwgdHJ1ZSk7XG5cblx0XHRsZXQgcm9vdEVudGl0eVNldCA9IHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQ7XG5cdFx0bGV0IGN1cnJlbnRFbnRpdHlUeXBlID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGU7XG5cdFx0Y29uc3Qgc3RhcnRpbmdFbnRpdHlUeXBlID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXMgPSB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMuY29uY2F0KCk7XG5cdFx0bGV0IGkgPSAxO1xuXHRcdGxldCBjdXJyZW50T2JqZWN0O1xuXHRcdGxldCBuYXZpZ2F0ZWRQYXRocyA9IFtdO1xuXHRcdGNvbnN0IHZpc2l0ZWRPYmplY3RzID0gdGFyZ2V0T2JqZWN0LnZpc2l0ZWRPYmplY3RzO1xuXHRcdC8vIEluIGNhc2Ugb2YgcGFyYW1ldGVyaXplZCBzZXJ2aWNlXG5cdFx0aWYgKCFyb290RW50aXR5U2V0ICYmIHN0YXJ0aW5nRW50aXR5VHlwZS5hbm5vdGF0aW9ucy5Db21tb24/LlJlc3VsdENvbnRleHQpIHtcblx0XHRcdHJvb3RFbnRpdHlTZXQgPSB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQ7XG5cdFx0XHR0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAobmF2T2JqZWN0KSB7XG5cdFx0XHRcdG5hdmlnYXRlZFBhdGhzLnB1c2gobmF2T2JqZWN0Lm5hbWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHdoaWxlIChpIDwgdmlzaXRlZE9iamVjdHMubGVuZ3RoKSB7XG5cdFx0XHRjdXJyZW50T2JqZWN0ID0gdmlzaXRlZE9iamVjdHNbaSsrXTtcblx0XHRcdGlmIChjdXJyZW50T2JqZWN0Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdG5hdmlnYXRlZFBhdGhzLnB1c2goY3VycmVudE9iamVjdC5uYW1lKTtcblx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChjdXJyZW50T2JqZWN0IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSk7XG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gKGN1cnJlbnRPYmplY3QgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlO1xuXHRcdFx0XHRpZiAocm9vdEVudGl0eVNldCAmJiByb290RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcuaGFzT3duUHJvcGVydHkobmF2aWdhdGVkUGF0aHMuam9pbihcIi9cIikpKSB7XG5cdFx0XHRcdFx0Y29uc3QgbmF2UGF0aCA9IG5hdmlnYXRlZFBhdGhzLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQgPSAocm9vdEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW2N1cnJlbnRPYmplY3QubmFtZV0gfHxcblx0XHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZQYXRoXSkgYXMgRW50aXR5U2V0O1xuXHRcdFx0XHRcdG5hdmlnYXRlZFBhdGhzID0gW107XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cm9vdEVudGl0eVNldCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRPYmplY3QuX3R5cGUgPT09IFwiRW50aXR5U2V0XCIpIHtcblx0XHRcdFx0cm9vdEVudGl0eVNldCA9IGN1cnJlbnRPYmplY3QgYXMgRW50aXR5U2V0O1xuXHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IHJvb3RFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3Qgb3V0RGF0YU1vZGVsUGF0aCA9IHtcblx0XHRcdHN0YXJ0aW5nRW50aXR5U2V0OiB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQsXG5cdFx0XHR0YXJnZXRFbnRpdHlTZXQ6IHJvb3RFbnRpdHlTZXQsXG5cdFx0XHR0YXJnZXRFbnRpdHlUeXBlOiBjdXJyZW50RW50aXR5VHlwZSxcblx0XHRcdHRhcmdldE9iamVjdDogbmF2aWdhdGlvblByb3BlcnRpZXNbbmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoIC0gMV0sXG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRcdGNvbnRleHRMb2NhdGlvbjogdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbixcblx0XHRcdGNvbnZlcnRlZFR5cGVzOiB0aGlzLmNvbnZlcnRlZFR5cGVzXG5cdFx0fTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0YW5ub3RhdGlvbjogdGFyZ2V0T2JqZWN0LnRhcmdldCBhcyBBbnlBbm5vdGF0aW9uLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dDogbmV3IENvbnZlcnRlckNvbnRleHQoXG5cdFx0XHRcdHRoaXMuY29udmVydGVkVHlwZXMsXG5cdFx0XHRcdHRoaXMubWFuaWZlc3RTZXR0aW5ncyxcblx0XHRcdFx0dGhpcy5kaWFnbm9zdGljcyxcblx0XHRcdFx0dGhpcy5tZXJnZUZuLFxuXHRcdFx0XHRvdXREYXRhTW9kZWxQYXRoXG5cdFx0XHQpXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgdHlwZSBvZiB0ZW1wbGF0ZSB3ZSdyZSB3b3JraW5nIG9uIChlLmcuIExpc3RSZXBvcnQgLyBPYmplY3RQYWdlIC8gLi4uKS5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgdGVucGxhdGUgdHlwZVxuXHQgKi9cblx0Z2V0VGVtcGxhdGVUeXBlKCk6IFRlbXBsYXRlVHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMubWFuaWZlc3RXcmFwcGVyLmdldFRlbXBsYXRlVHlwZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBjb252ZXJ0ZWQgdHlwZXMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGNvbnZlcnRlZCB0eXBlc1xuXHQgKi9cblx0Z2V0Q29udmVydGVkVHlwZXMoKTogQ29udmVydGVkTWV0YWRhdGEge1xuXHRcdHJldHVybiB0aGlzLmNvbnZlcnRlZFR5cGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIGEgcmVsYXRpdmUgYW5ub3RhdGlvbiBwYXRoIGJldHdlZW4gYW4gYW5ub3RhdGlvbiBwYXRoIGFuZCBhbiBlbnRpdHkgdHlwZS5cblx0ICpcblx0ICogQHBhcmFtIGFubm90YXRpb25QYXRoXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlXG5cdCAqIEByZXR1cm5zIFRoZSByZWxhdGl2ZSBhbm50b3RhdGlvbiBwYXRoLlxuXHQgKi9cblx0Z2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChhbm5vdGF0aW9uUGF0aDogc3RyaW5nLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYW5ub3RhdGlvblBhdGgucmVwbGFjZShlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSwgXCJcIik7XG5cdH1cblxuXHQvKipcblx0ICogVHJhbnNmb3JtIGFuIGVudGl0eVR5cGUgYmFzZWQgcGF0aCB0byBhbiBlbnRpdHlTZXQgYmFzZWQgb25lICh1aTUgdGVtcGxhdGluZyBnZW5lcmFsbHkgZXhwZWN0IGFuIGVudGl0eVNldEJhc2VkUGF0aCkuXG5cdCAqXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aFxuXHQgKiBAcmV0dXJucyBUaGUgRW50aXR5U2V0IGJhc2VkIGFubm90YXRpb24gcGF0aFxuXHQgKi9cblx0Z2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChhbm5vdGF0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoIWFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvblBhdGg7XG5cdFx0fVxuXHRcdGNvbnN0IGVudGl0eVR5cGVGUU4gPSB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWU7XG5cdFx0aWYgKFxuXHRcdFx0dGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCB8fFxuXHRcdFx0KCh0aGlzLmJhc2VDb250ZXh0UGF0aC5zdGFydHNXaXRoKFwiL1wiKSAmJiB0aGlzLmJhc2VDb250ZXh0UGF0aC5tYXRjaCgvXFwvL2cpKSB8fCBbXSkubGVuZ3RoID4gMVxuXHRcdCkge1xuXHRcdFx0bGV0IHJlcGxhY2VkQW5ub3RhdGlvblBhdGggPSBhbm5vdGF0aW9uUGF0aC5yZXBsYWNlKGVudGl0eVR5cGVGUU4sIFwiL1wiKTtcblx0XHRcdGlmIChyZXBsYWNlZEFubm90YXRpb25QYXRoLmxlbmd0aCA+IDIgJiYgcmVwbGFjZWRBbm5vdGF0aW9uUGF0aFswXSA9PT0gXCIvXCIgJiYgcmVwbGFjZWRBbm5vdGF0aW9uUGF0aFsxXSA9PT0gXCIvXCIpIHtcblx0XHRcdFx0cmVwbGFjZWRBbm5vdGF0aW9uUGF0aCA9IHJlcGxhY2VkQW5ub3RhdGlvblBhdGguc3Vic3RyKDEpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuYmFzZUNvbnRleHRQYXRoICsgKHJlcGxhY2VkQW5ub3RhdGlvblBhdGguc3RhcnRzV2l0aChcIi9cIikgPyByZXBsYWNlZEFubm90YXRpb25QYXRoIDogYC8ke3JlcGxhY2VkQW5ub3RhdGlvblBhdGh9YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBgLyR7YW5ub3RhdGlvblBhdGh9YDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIG1hbmlmZXN0IHdyYXBwZXIgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IG1hbmlmZXN0IHdyYXBwZXJcblx0ICovXG5cdGdldE1hbmlmZXN0V3JhcHBlcigpOiBNYW5pZmVzdFdyYXBwZXIge1xuXHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlcjtcblx0fVxuXG5cdGdldERpYWdub3N0aWNzKCk6IElEaWFnbm9zdGljcyB7XG5cdFx0cmV0dXJuIHRoaXMuZGlhZ25vc3RpY3M7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHRhcmdldCBmcm9tIGFuIGFic29sdXRlIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHdlIHdhbnQgdG8gZ2V0IHRoZSB0YXJnZXRcblx0ICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGhcblx0ICovXG5cdHJlc29sdmVBYnNvbHV0ZVBhdGg8VD4ocGF0aDogc3RyaW5nKTogUmVzb2x1dGlvblRhcmdldDxUPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udmVydGVkVHlwZXMucmVzb2x2ZVBhdGgocGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgYSBuZXcgY29udmVydGVyIGNvbnRleHQsIHNjb3BlZCBmb3IgYSBkaWZmZXJlbnQgY29udGV4dCBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggVGhlIHBhdGggd2Ugd2FudCB0byBvcmNoZXN0cmF0ZSB0aGUgY29udmVydGVyIGNvbnRleHQgYXJvdW5kXG5cdCAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgY29udGV4dCBmb3IgdGhlIHN1YiBwYXRoXG5cdCAqL1xuXHRnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFQ+KGNvbnRleHRQYXRoOiBzdHJpbmcpOiBDb252ZXJ0ZXJDb250ZXh0IHtcblx0XHRjb25zdCByZXNvbHZlZE1ldGFQYXRoOiBSZXNvbHV0aW9uVGFyZ2V0PFQ+ID0gdGhpcy5jb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aChjb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgdGFyZ2V0UGF0aCA9IGdldERhdGFNb2RlbFBhdGhGb3JFbnRpdHlTZXQocmVzb2x2ZWRNZXRhUGF0aCwgdGhpcy5jb252ZXJ0ZWRUeXBlcyk7XG5cdFx0cmV0dXJuIG5ldyBDb252ZXJ0ZXJDb250ZXh0KHRoaXMuY29udmVydGVkVHlwZXMsIHRoaXMubWFuaWZlc3RTZXR0aW5ncywgdGhpcy5kaWFnbm9zdGljcywgdGhpcy5tZXJnZUZuLCB0YXJnZXRQYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWxsIGFubm90YXRpb25zIG9mIGEgZ2l2ZW4gdGVybSBhbmQgdm9jYWJ1bGFyeSBvbiBhbiBlbnRpdHkgdHlwZVxuXHQgKiAob3Igb24gdGhlIGN1cnJlbnQgZW50aXR5IHR5cGUgaWYgZW50aXR5VHlwZSBpc24ndCBzcGVjaWZpZWQpLlxuXHQgKlxuXHQgKiBAcGFyYW0gdm9jYWJ1bGFyeU5hbWVcblx0ICogQHBhcmFtIGFubm90YXRpb25UZXJtXG5cdCAqIEBwYXJhbSBbYW5ub3RhdGlvblNvdXJjZXNdXG5cdCAqIEByZXR1cm5zIEFsbCB0aGUgYW5ub3RhdGlvbiBmb3IgYSBzcGVjaWZpYyB0ZXJtIGFuZCB2b2NhYnVsYXJ5IGZyb20gYW4gZW50aXR5IHR5cGVcblx0ICovXG5cdGdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdHZvY2FidWxhcnlOYW1lOiBrZXlvZiBFbnRpdHlUeXBlQW5ub3RhdGlvbnMsXG5cdFx0YW5ub3RhdGlvblRlcm06IHN0cmluZyxcblx0XHRhbm5vdGF0aW9uU291cmNlczogKFNlcnZpY2VPYmplY3QgfCB1bmRlZmluZWQpW10gPSBbdGhpcy5nZXRFbnRpdHlUeXBlKCldXG5cdCk6IEFubm90YXRpb25UZXJtPGFueT5bXSB7XG5cdFx0bGV0IG91dEFubm90YXRpb25zOiBBbm5vdGF0aW9uVGVybTxhbnk+W10gPSBbXTtcblx0XHRhbm5vdGF0aW9uU291cmNlcy5mb3JFYWNoKChhbm5vdGF0aW9uU291cmNlKSA9PiB7XG5cdFx0XHRpZiAoYW5ub3RhdGlvblNvdXJjZSkge1xuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvblRlcm08YW55Pj4gPSBhbm5vdGF0aW9uU291cmNlPy5hbm5vdGF0aW9uc1t2b2NhYnVsYXJ5TmFtZV0gfHwge307XG5cdFx0XHRcdGlmIChhbm5vdGF0aW9ucykge1xuXHRcdFx0XHRcdG91dEFubm90YXRpb25zID0gT2JqZWN0LmtleXMoYW5ub3RhdGlvbnMpXG5cdFx0XHRcdFx0XHQuZmlsdGVyKChhbm5vdGF0aW9uKSA9PiBhbm5vdGF0aW9uc1thbm5vdGF0aW9uXS50ZXJtID09PSBhbm5vdGF0aW9uVGVybSlcblx0XHRcdFx0XHRcdC5yZWR1Y2UoKHByZXZpb3VzVmFsdWU6IEFubm90YXRpb25UZXJtPGFueT5bXSwga2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdFx0cHJldmlvdXNWYWx1ZS5wdXNoKGFubm90YXRpb25zW2tleV0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0XHRcdFx0XHRcdH0sIG91dEFubm90YXRpb25zKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBvdXRBbm5vdGF0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHJlbGF0aXZlIG1vZGVsIHBhdGggYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dCBwYXRoLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgbW9kZWwgcGF0aCBvciB1bmRlZmluZWQgaWYgdGhlIHBhdGggaXMgbm90IHJlc29sdmVhYmxlXG5cdCAqL1xuXHRnZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKCk6IEZ1bmN0aW9uIHtcblx0XHRjb25zdCB0YXJnZXREYXRhTW9kZWxQYXRoID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoO1xuXHRcdHJldHVybiBmdW5jdGlvbiAoc1BhdGg6IHN0cmluZykge1xuXHRcdFx0Y29uc3QgZW5oYW5jZWRQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgodGFyZ2V0RGF0YU1vZGVsUGF0aCwgc1BhdGgpO1xuXHRcdFx0cmV0dXJuIGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZW5oYW5jZWRQYXRoLCB0cnVlKTtcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSB0aGUgY29udmVydGVyIGNvbnRleHQgbmVjZXNzYXJ5IGZvciBhIG1hY3JvIGJhc2VkIG9uIGEgbWV0YW1vZGVsIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBzRW50aXR5U2V0TmFtZVxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbENvbnRleHRcblx0ICogQHBhcmFtIGRpYWdub3N0aWNzXG5cdCAqIEBwYXJhbSBtZXJnZUZuXG5cdCAqIEBwYXJhbSB0YXJnZXREYXRhTW9kZWxQYXRoXG5cdCAqIEBwYXJhbSBtYW5pZmVzdFNldHRpbmdzXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGNvbnZlcnRlciBjb250ZXh0XG5cdCAqL1xuXHRzdGF0aWMgY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKFxuXHRcdHNFbnRpdHlTZXROYW1lOiBzdHJpbmcsXG5cdFx0b01ldGFNb2RlbENvbnRleHQ6IENvbnRleHQgfCBPRGF0YU1ldGFNb2RlbCxcblx0XHRkaWFnbm9zdGljczogSURpYWdub3N0aWNzLFxuXHRcdG1lcmdlRm46IEZ1bmN0aW9uLFxuXHRcdHRhcmdldERhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggfCB1bmRlZmluZWQsXG5cdFx0bWFuaWZlc3RTZXR0aW5nczogQmFzZU1hbmlmZXN0U2V0dGluZ3MgPSB7fSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5nc1xuXHQpOiBDb252ZXJ0ZXJDb250ZXh0IHtcblx0XHRjb25zdCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCA9IG9NZXRhTW9kZWxDb250ZXh0LmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1ldGFNb2RlbFwiKVxuXHRcdFx0PyAob01ldGFNb2RlbENvbnRleHQgYXMgT0RhdGFNZXRhTW9kZWwpXG5cdFx0XHQ6ICgob01ldGFNb2RlbENvbnRleHQgYXMgQ29udGV4dCkuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdFx0Y29uc3Qgb0NvbnZlcnRlZE1ldGFkYXRhID0gY29udmVydFR5cGVzKG9NZXRhTW9kZWwpO1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVNldCA9IG9Db252ZXJ0ZWRNZXRhZGF0YS5lbnRpdHlTZXRzLmZpbmQoKGVudGl0eVNldCkgPT4gZW50aXR5U2V0Lm5hbWUgPT09IHNFbnRpdHlTZXROYW1lKSBhcyBFbnRpdHlTZXQ7XG5cdFx0aWYgKCF0YXJnZXREYXRhTW9kZWxQYXRoKSB7XG5cdFx0XHR0YXJnZXREYXRhTW9kZWxQYXRoID0ge1xuXHRcdFx0XHRzdGFydGluZ0VudGl0eVNldDogdGFyZ2V0RW50aXR5U2V0LFxuXHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0XHRcdHRhcmdldEVudGl0eVNldDogdGFyZ2V0RW50aXR5U2V0LFxuXHRcdFx0XHR0YXJnZXRFbnRpdHlUeXBlOiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZSxcblx0XHRcdFx0dGFyZ2V0T2JqZWN0OiB0YXJnZXRFbnRpdHlTZXQsXG5cdFx0XHRcdGNvbnZlcnRlZFR5cGVzOiBvQ29udmVydGVkTWV0YWRhdGFcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgQ29udmVydGVyQ29udGV4dChvQ29udmVydGVkTWV0YWRhdGEsIG1hbmlmZXN0U2V0dGluZ3MsIGRpYWdub3N0aWNzLCBtZXJnZUZuLCB0YXJnZXREYXRhTW9kZWxQYXRoKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb252ZXJ0ZXJDb250ZXh0O1xuIl19