@sapui5/sap.fe.core 1.102.3 → 1.105.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 (359) hide show
  1. package/package.json +6 -6
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +120 -0
  4. package/src/sap/fe/core/ActionRuntime.ts +108 -0
  5. package/src/sap/fe/core/AppComponent.js +81 -35
  6. package/src/sap/fe/core/AppComponent.ts +68 -44
  7. package/src/sap/fe/core/AppStateHandler.js +82 -70
  8. package/src/sap/fe/core/AppStateHandler.ts +32 -37
  9. package/src/sap/fe/core/BaseController.js +12 -10
  10. package/src/sap/fe/core/BaseController.ts +15 -13
  11. package/src/sap/fe/core/CommonUtils.js +291 -218
  12. package/src/sap/fe/core/CommonUtils.ts +315 -251
  13. package/src/sap/fe/core/ExtensionAPI.js +25 -28
  14. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  15. package/src/sap/fe/core/PageController.js +5 -5
  16. package/src/sap/fe/core/PageController.ts +4 -5
  17. package/src/sap/fe/core/TemplateComponent.js +21 -10
  18. package/src/sap/fe/core/TemplateComponent.ts +9 -6
  19. package/src/sap/fe/core/TemplateModel.js +2 -2
  20. package/src/sap/fe/core/TemplateModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +11 -3
  22. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +8 -2
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +197 -43
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +164 -24
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +14 -0
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.ts +5 -0
  27. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +609 -230
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +275 -128
  29. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
  30. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
  31. package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
  32. package/src/sap/fe/core/controllerextensions/EditFlow.js +761 -700
  33. package/src/sap/fe/core/controllerextensions/EditFlow.ts +478 -514
  34. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +10 -10
  35. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  36. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +104 -75
  37. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -79
  38. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +68 -68
  39. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
  40. package/src/sap/fe/core/controllerextensions/InternalRouting.js +162 -102
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +177 -121
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +67 -69
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +10 -10
  45. package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
  46. package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
  47. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
  48. package/src/sap/fe/core/controllerextensions/PageReady.js +98 -26
  49. package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
  50. package/src/sap/fe/core/controllerextensions/Paginator.js +31 -32
  51. package/src/sap/fe/core/controllerextensions/Paginator.ts +33 -34
  52. package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -7
  53. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  54. package/src/sap/fe/core/controllerextensions/Routing.js +11 -12
  55. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  56. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  57. package/src/sap/fe/core/controllerextensions/Share.js +171 -140
  58. package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
  59. package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
  60. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  61. package/src/sap/fe/core/controllerextensions/ViewState.js +201 -132
  62. package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
  63. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  64. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  65. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +13 -12
  66. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
  67. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +13 -12
  68. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +15 -15
  69. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +57 -18
  70. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +60 -28
  71. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +29 -21
  72. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1424 -940
  73. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +799 -836
  74. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +410 -377
  75. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +275 -358
  76. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +309 -0
  77. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +320 -0
  78. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +752 -579
  79. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +631 -599
  80. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +92 -74
  81. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +49 -52
  82. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -41
  83. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +110 -84
  84. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +69 -81
  85. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +64 -73
  86. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +18 -2
  87. package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +35 -0
  88. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +25 -24
  89. package/src/sap/fe/core/controls/Any.js +9 -5
  90. package/src/sap/fe/core/controls/Any.ts +10 -4
  91. package/src/sap/fe/core/controls/CommandExecution.js +12 -26
  92. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  93. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -3
  94. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  95. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +26 -26
  96. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  97. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -3
  98. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  99. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  100. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  101. package/src/sap/fe/core/controls/FieldWrapper.js +3 -3
  102. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  103. package/src/sap/fe/core/controls/FileWrapper.js +9 -4
  104. package/src/sap/fe/core/controls/FileWrapper.ts +16 -12
  105. package/src/sap/fe/core/controls/FilterBar.js +7 -3
  106. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  107. package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
  108. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  109. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  110. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  111. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
  112. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +44 -19
  113. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -2
  114. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +17 -13
  115. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  116. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +4 -4
  117. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  118. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
  119. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
  120. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  121. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  122. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  123. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  124. package/src/sap/fe/core/converters/ConverterContext.js +48 -34
  125. package/src/sap/fe/core/converters/ConverterContext.ts +81 -67
  126. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  127. package/src/sap/fe/core/converters/ManifestSettings.ts +18 -15
  128. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  129. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  130. package/src/sap/fe/core/converters/MetaModelConverter.js +74 -40
  131. package/src/sap/fe/core/converters/MetaModelConverter.ts +176 -140
  132. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  133. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  134. package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
  135. package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
  136. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1956 -1494
  137. package/src/sap/fe/core/converters/controls/Common/Action.js +78 -51
  138. package/src/sap/fe/core/converters/controls/Common/Action.ts +87 -52
  139. package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -16
  140. package/src/sap/fe/core/converters/controls/Common/Chart.ts +42 -43
  141. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  142. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  143. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +65 -29
  144. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +93 -62
  145. package/src/sap/fe/core/converters/controls/Common/Form.js +31 -31
  146. package/src/sap/fe/core/converters/controls/Common/Form.ts +46 -57
  147. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  148. package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
  149. package/src/sap/fe/core/converters/controls/Common/Table.js +251 -264
  150. package/src/sap/fe/core/converters/controls/Common/Table.ts +344 -370
  151. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  152. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +147 -144
  153. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +89 -59
  154. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +118 -71
  155. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  156. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  157. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  158. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  159. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +131 -95
  160. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +123 -87
  161. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +98 -87
  162. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +121 -117
  163. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  164. package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
  165. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  166. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  167. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +8 -6
  168. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +18 -10
  169. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +136 -0
  170. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +139 -0
  171. package/src/sap/fe/core/converters/helpers/ID.js +48 -46
  172. package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
  173. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  174. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  175. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  176. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  177. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
  178. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  179. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  180. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +53 -75
  181. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +59 -90
  182. package/src/sap/fe/core/converters/templates/ListReportConverter.js +58 -57
  183. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +93 -86
  184. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +58 -44
  185. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +87 -80
  186. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  187. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  188. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  189. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  190. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  191. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  192. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  193. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  194. package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
  195. package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
  196. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  197. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  198. package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
  199. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  200. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  201. package/src/sap/fe/core/fpm/Component.js +33 -7
  202. package/src/sap/fe/core/fpm/Component.ts +14 -0
  203. package/src/sap/fe/core/helpers/AnnotationEnum.js +1 -1
  204. package/src/sap/fe/core/helpers/AppStartupHelper.js +19 -18
  205. package/src/sap/fe/core/helpers/AppStartupHelper.ts +41 -43
  206. package/src/sap/fe/core/helpers/BindingToolkit.js +1836 -0
  207. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +397 -270
  208. package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
  209. package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
  210. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  211. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  212. package/src/sap/fe/core/helpers/EditState.js +1 -6
  213. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  214. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  215. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  216. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  217. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  218. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  219. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  220. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
  221. package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
  222. package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
  223. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  224. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  225. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  226. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  227. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  228. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  229. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  230. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  231. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  232. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  233. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  234. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  235. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  236. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  237. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  238. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  239. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  240. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +109 -0
  241. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +47 -0
  242. package/src/sap/fe/core/jsx-runtime/jsx-control.js +110 -0
  243. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +92 -0
  244. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  245. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  246. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  247. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  248. package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
  249. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +179 -0
  250. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +150 -0
  251. package/src/sap/fe/core/library.js +42 -3
  252. package/src/sap/fe/core/library.support.js +1 -1
  253. package/src/sap/fe/core/library.ts +38 -0
  254. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  255. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  256. package/src/sap/fe/core/messagebundle.properties +39 -67
  257. package/src/sap/fe/core/messagebundle_ar.properties +27 -44
  258. package/src/sap/fe/core/messagebundle_bg.properties +27 -44
  259. package/src/sap/fe/core/messagebundle_ca.properties +27 -44
  260. package/src/sap/fe/core/messagebundle_cs.properties +27 -44
  261. package/src/sap/fe/core/messagebundle_cy.properties +26 -43
  262. package/src/sap/fe/core/messagebundle_da.properties +27 -44
  263. package/src/sap/fe/core/messagebundle_de.properties +25 -42
  264. package/src/sap/fe/core/messagebundle_el.properties +28 -45
  265. package/src/sap/fe/core/messagebundle_en.properties +27 -44
  266. package/src/sap/fe/core/messagebundle_en_GB.properties +27 -44
  267. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -42
  268. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -40
  269. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +25 -42
  270. package/src/sap/fe/core/messagebundle_es.properties +27 -44
  271. package/src/sap/fe/core/messagebundle_es_MX.properties +27 -44
  272. package/src/sap/fe/core/messagebundle_et.properties +27 -44
  273. package/src/sap/fe/core/messagebundle_fi.properties +27 -44
  274. package/src/sap/fe/core/messagebundle_fr.properties +26 -43
  275. package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -42
  276. package/src/sap/fe/core/messagebundle_hi.properties +27 -44
  277. package/src/sap/fe/core/messagebundle_hr.properties +27 -44
  278. package/src/sap/fe/core/messagebundle_hu.properties +27 -44
  279. package/src/sap/fe/core/messagebundle_id.properties +27 -44
  280. package/src/sap/fe/core/messagebundle_it.properties +43 -60
  281. package/src/sap/fe/core/messagebundle_iw.properties +27 -44
  282. package/src/sap/fe/core/messagebundle_ja.properties +27 -44
  283. package/src/sap/fe/core/messagebundle_kk.properties +27 -44
  284. package/src/sap/fe/core/messagebundle_ko.properties +30 -47
  285. package/src/sap/fe/core/messagebundle_lt.properties +27 -44
  286. package/src/sap/fe/core/messagebundle_lv.properties +27 -44
  287. package/src/sap/fe/core/messagebundle_ms.properties +27 -44
  288. package/src/sap/fe/core/messagebundle_nl.properties +29 -46
  289. package/src/sap/fe/core/messagebundle_no.properties +27 -44
  290. package/src/sap/fe/core/messagebundle_pl.properties +28 -45
  291. package/src/sap/fe/core/messagebundle_pt.properties +28 -45
  292. package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -44
  293. package/src/sap/fe/core/messagebundle_ro.properties +27 -44
  294. package/src/sap/fe/core/messagebundle_ru.properties +27 -44
  295. package/src/sap/fe/core/messagebundle_sh.properties +27 -44
  296. package/src/sap/fe/core/messagebundle_sk.properties +27 -44
  297. package/src/sap/fe/core/messagebundle_sl.properties +27 -44
  298. package/src/sap/fe/core/messagebundle_sv.properties +27 -44
  299. package/src/sap/fe/core/messagebundle_th.properties +25 -42
  300. package/src/sap/fe/core/messagebundle_tr.properties +27 -44
  301. package/src/sap/fe/core/messagebundle_uk.properties +27 -44
  302. package/src/sap/fe/core/messagebundle_vi.properties +27 -44
  303. package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -44
  304. package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -44
  305. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
  306. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  307. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +103 -75
  308. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +72 -73
  309. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
  310. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  311. package/src/sap/fe/core/services/NavigationServiceFactory.js +62 -50
  312. package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
  313. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
  314. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  315. package/src/sap/fe/core/services/RoutingServiceFactory.js +56 -56
  316. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  317. package/src/sap/fe/core/services/ShellServicesFactory.js +93 -77
  318. package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
  319. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +64 -64
  320. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  321. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +232 -200
  322. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +145 -142
  323. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
  324. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
  325. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
  326. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
  327. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  328. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  329. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  330. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  331. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
  332. package/src/sap/fe/core/templating/CommonFormatters.js +85 -0
  333. package/src/sap/fe/core/templating/CommonFormatters.ts +90 -0
  334. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  335. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  336. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  337. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  338. package/src/sap/fe/core/templating/DataModelPathHelper.js +23 -15
  339. package/src/sap/fe/core/templating/DataModelPathHelper.ts +47 -34
  340. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  341. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  342. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  343. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  344. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  345. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  346. package/src/sap/fe/core/templating/FilterHelper.js +18 -17
  347. package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
  348. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  349. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  350. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  351. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  352. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  353. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  354. package/src/sap/fe/core/templating/UIFormatters.js +152 -95
  355. package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
  356. package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
  357. package/src/sap/fe/core/type/Email.js +3 -3
  358. package/src/sap/fe/core/type/Email.ts +2 -2
  359. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -11,7 +11,6 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
11
11
  var aResolveFunctions = [];
12
12
  var oDialog;
13
13
  var oBackButton;
14
- var oMessageTemplate;
15
14
  var oMessageView;
16
15
 
17
16
  function fnFormatTechnicalDetails() {
@@ -39,68 +38,67 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
39
38
 
40
39
  return [{
41
40
  "groupName": "",
42
- "property": sTD + "/status"
41
+ "property": "".concat(sTD, "/status")
43
42
  }, {
44
43
  "groupName": "",
45
- "property": sTD + "/statusText"
44
+ "property": "".concat(sTD, "/statusText")
46
45
  }, {
47
46
  "groupName": "Application",
48
- "property": sTD + "/error/@SAP__common.Application/ComponentId"
47
+ "property": "".concat(sTD, "/error/@SAP__common.Application/ComponentId")
49
48
  }, {
50
49
  "groupName": "Application",
51
- "property": sTD + "/error/@SAP__common.Application/ServiceId"
50
+ "property": "".concat(sTD, "/error/@SAP__common.Application/ServiceId")
52
51
  }, {
53
52
  "groupName": "Application",
54
- "property": sTD + "/error/@SAP__common.Application/ServiceRepository"
53
+ "property": "".concat(sTD, "/error/@SAP__common.Application/ServiceRepository")
55
54
  }, {
56
55
  "groupName": "Application",
57
- "property": sTD + "/error/@SAP__common.Application/ServiceVersion"
56
+ "property": "".concat(sTD, "/error/@SAP__common.Application/ServiceVersion")
58
57
  }, {
59
58
  "groupName": "ErrorResolution",
60
- "property": sTD + "/error/@SAP__common.ErrorResolution/Analysis"
59
+ "property": "".concat(sTD, "/error/@SAP__common.ErrorResolution/Analysis")
61
60
  }, {
62
61
  "groupName": "ErrorResolution",
63
- "property": sTD + "/error/@SAP__common.ErrorResolution/Note"
62
+ "property": "".concat(sTD, "/error/@SAP__common.ErrorResolution/Note")
64
63
  }, {
65
64
  "groupName": "ErrorResolution",
66
- "property": sTD + "/error/@SAP__common.ErrorResolution/DetailedNote"
65
+ "property": "".concat(sTD, "/error/@SAP__common.ErrorResolution/DetailedNote")
67
66
  }, {
68
67
  "groupName": "ErrorResolution",
69
- "property": sTD + "/error/@SAP__common.ExceptionCategory"
68
+ "property": "".concat(sTD, "/error/@SAP__common.ExceptionCategory")
70
69
  }, {
71
70
  "groupName": "ErrorResolution",
72
- "property": sTD + "/error/@SAP__common.TimeStamp"
71
+ "property": "".concat(sTD, "/error/@SAP__common.TimeStamp")
73
72
  }, {
74
73
  "groupName": "ErrorResolution",
75
- "property": sTD + "/error/@SAP__common.TransactionId"
74
+ "property": "".concat(sTD, "/error/@SAP__common.TransactionId")
76
75
  }, {
77
76
  "groupName": "Messages",
78
- "property": sTD + "/error/code"
77
+ "property": "".concat(sTD, "/error/code")
79
78
  }, {
80
79
  "groupName": "Messages",
81
- "property": sTD + "/error/message"
80
+ "property": "".concat(sTD, "/error/message")
82
81
  }];
83
82
  }
84
83
 
85
84
  var sHTML = "Object.keys(" + "${technicalDetails}" + ').length > 0 ? "<h2>Technical Details</h2>" : "" ';
86
85
  getPaths().forEach(function (oProperty) {
87
- sHTML = sHTML + insertGroupName(oProperty) + "" + insertDetail(oProperty) + " + ";
86
+ sHTML = "".concat(sHTML + insertGroupName(oProperty)).concat(insertDetail(oProperty), " + ");
88
87
  });
89
88
  return sHTML;
90
89
  }
91
90
 
92
91
  function fnFormatDescription() {
93
- var sHTML = "(${" + 'description} ? ("<h2>Description</h2>" + ${' + 'description}) : "")';
94
- return sHTML;
92
+ return "(${" + 'description} ? ("<h2>Description</h2>" + ${' + 'description}) : "")';
95
93
  }
96
94
  /**
97
95
  * Calculates the highest priority message type(Error/Warning/Success/Information) from the available messages.
98
-
96
+ *
99
97
  * @function
100
98
  * @name sap.fe.core.actions.messageHandling.fnGetHighestMessagePriority
101
99
  * @memberof sap.fe.core.actions.messageHandling
102
- * @param {Array} [aMessages] Messages list
103
- * @returns {string} Highest priority message from the available messages
100
+ * @param [aMessages] Messages list
101
+ * @returns Highest priority message from the available messages
104
102
  * @private
105
103
  * @ui5-restricted
106
104
  */
@@ -193,7 +191,7 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
193
191
  //same year
194
192
  if (bMessageDialog) {
195
193
  //less than 2 min
196
- sRetryAfterMessage = oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_TITLE") + " " + oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_DESC");
194
+ sRetryAfterMessage = "".concat(oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_TITLE"), " ").concat(oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_DESC"));
197
195
  } else if (dNow.getMonth() !== dRetryAfter.getMonth() || dNow.getDate() !== dRetryAfter.getDate()) {
198
196
  oDateFormat = DateFormat.getDateTimeInstance({
199
197
  pattern: "MMMM dd 'at' hh:mm a"
@@ -218,8 +216,10 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
218
216
  }
219
217
 
220
218
  function prepareMessageViewForDialog(oMessageDialogModel, bStrictHandlingFlow) {
219
+ var oMessageTemplate;
220
+
221
221
  if (!bStrictHandlingFlow) {
222
- oMessageTemplate = oMessageTemplate || new MessageItem(undefined, {
222
+ oMessageTemplate = new MessageItem(undefined, {
223
223
  counter: {
224
224
  path: "counter"
225
225
  },
@@ -235,12 +235,14 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
235
235
  } else {
236
236
  oMessageTemplate = new MessageItem({
237
237
  title: "{message}",
238
- type: "Warning",
238
+ type: {
239
+ path: "type"
240
+ },
239
241
  longtextUrl: "{descriptionUrl}"
240
242
  });
241
243
  }
242
244
 
243
- oMessageView = oMessageView || new MessageView({
245
+ oMessageView = new MessageView({
244
246
  showDetailsPageHeader: false,
245
247
  itemSelect: function () {
246
248
  oBackButton.setVisible(true);
@@ -266,7 +268,7 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
266
268
  };
267
269
  }
268
270
 
269
- function showUnboundMessages(aCustomMessages, oContext, bHasEtagMessage, bShowBoundTransition, errorTargetsInAPM, bShowMessageBox, concurrentEditFlag) {
271
+ function showUnboundMessages(aCustomMessages, oContext, bHasEtagMessage, bShowBoundTransition, showErrorInAPD, bShowMessageBox, concurrentEditFlag, bOnlyForTest) {
270
272
  var aUnboundMessages = this.getMessages();
271
273
  var oMessageManager = Core.getMessageManager();
272
274
  var sHighestPriority;
@@ -348,7 +350,7 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
348
350
 
349
351
  if (aUnboundMessages.length === 1 && (aUnboundMessages[0].getCode() === "503" || bShowMessageBox)) {
350
352
  if (aUnboundMessages[0].getCode() !== "503") {
351
- showMessageBox = !errorTargetsInAPM;
353
+ showMessageBox = !showErrorInAPD;
352
354
  } else {
353
355
  showMessageBox = true;
354
356
  }
@@ -357,15 +359,22 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
357
359
  aCurrentContexts = oListBinding.getCurrentContexts();
358
360
 
359
361
  if (aCurrentContexts && aCurrentContexts.length > 0) {
362
+ var _oContext$getObject;
363
+
360
364
  // Don't show dialog incase there are no errors to show
361
- showMessageDialog = !errorTargetsInAPM; // if false, show messages in dialog
365
+ if (oContext && oContext !== null && oContext !== void 0 && (_oContext$getObject = oContext.getObject()) !== null && _oContext$getObject !== void 0 && _oContext$getObject.IsActiveEntity && !showErrorInAPD) {
366
+ showMessageDialog = true;
367
+ } else {
368
+ showMessageDialog = !showErrorInAPD;
369
+ } // if false, show messages in dialog
362
370
  // As fitering has already happened here hence
363
371
  // using the message model again for the message dialog view and then filtering on that binding again is unnecessary.
364
372
  // So we create new json model to use for the message dialog view.
365
373
 
374
+
366
375
  var aMessages = [];
367
- aCurrentContexts.forEach(function (oContext) {
368
- var oMessage = oContext.getObject();
376
+ aCurrentContexts.forEach(function (currentContext) {
377
+ var oMessage = currentContext.getObject();
369
378
  aMessages.push(oMessage);
370
379
  aMessageDataList = aMessages;
371
380
  }); // if(aMessages.length === 0 && aMessageList.length) {
@@ -412,7 +421,6 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
412
421
  var oMessageObject = prepareMessageViewForDialog(oMessageDialogModel, bStrictHandlingFlow);
413
422
  oDialog = oDialog || new Dialog({
414
423
  resizable: true,
415
- content: oMessageObject.oMessageView,
416
424
  endButton: new Button({
417
425
  press: function () {
418
426
  dialogCloseHandler(); // also remove bound transition messages if we were showing them
@@ -440,6 +448,8 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
440
448
  aResolveFunctions = [];
441
449
  }
442
450
  });
451
+ oDialog.removeAllContent();
452
+ oDialog.addContent(oMessageObject.oMessageView);
443
453
 
444
454
  if (messageHasETag) {
445
455
  sap.ui.require(["sap/m/ButtonType"], function (ButtonType) {
@@ -467,6 +477,10 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
467
477
  oDialog.getCustomHeader().getContentMiddle()[0].setText(sHighestPriorityText);
468
478
  oMessageView.navigateBack();
469
479
  oDialog.open();
480
+
481
+ if (bOnlyForTest) {
482
+ resolve(oDialog);
483
+ }
470
484
  }).catch(reject);
471
485
  });
472
486
  } else if (showMessageBox) {
@@ -479,13 +493,13 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
479
493
  var retryAfterMessage = getRetryAfterMessage(oMessage, true);
480
494
 
481
495
  if (retryAfterMessage) {
482
- formattedTextString = "<h6>" + retryAfterMessage + "</h6><br>";
496
+ formattedTextString = "<h6>".concat(retryAfterMessage, "</h6><br>");
483
497
  }
484
498
 
485
499
  if (oMessage.getCode() !== "503" && oMessage.getAdditionalText() !== undefined) {
486
- formattedTextString = formattedTextString + oMessage.getAdditionalText() + ": " + oMessage.getMessage() + "</html></body>";
500
+ formattedTextString = "".concat(formattedTextString + oMessage.getAdditionalText(), ": ").concat(oMessage.getMessage(), "</html></body>");
487
501
  } else {
488
- formattedTextString = formattedTextString + oMessage.getMessage() + "</html></body>";
502
+ formattedTextString = "".concat(formattedTextString + oMessage.getMessage(), "</html></body>");
489
503
  }
490
504
 
491
505
  var formattedText = new FormattedText({
@@ -535,19 +549,42 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
535
549
  removeTransitionMessages(false);
536
550
  }
537
551
 
538
- function removeBoundTransitionMessages() {
539
- removeTransitionMessages(true);
552
+ function removeBoundTransitionMessages(sPathToBeRemoved) {
553
+ removeTransitionMessages(true, sPathToBeRemoved);
554
+ }
555
+
556
+ function getMessagesFromMessageModel(oMessageModel, sPathToBeRemoved) {
557
+ if (sPathToBeRemoved === undefined) {
558
+ return oMessageModel.getObject("/");
559
+ }
560
+
561
+ var listBinding = oMessageModel.bindList("/");
562
+ listBinding.filter(new Filter({
563
+ path: "target",
564
+ operator: FilterOperator.StartsWith,
565
+ value1: sPathToBeRemoved
566
+ }));
567
+ return listBinding.getCurrentContexts().map(function (oContext) {
568
+ return oContext.getObject();
569
+ });
540
570
  }
541
571
 
542
572
  function getMessages() {
543
573
  var bBoundMessages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
544
574
  var bTransitionOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
575
+ var sPathToBeRemoved = arguments.length > 2 ? arguments[2] : undefined;
545
576
  var i;
546
577
  var oMessageManager = Core.getMessageManager(),
547
578
  oMessageModel = oMessageManager.getMessageModel(),
548
- aMessages = oMessageModel.getObject("/"),
549
579
  oResourceBundle = Core.getLibraryResourceBundle("sap.fe.core"),
550
580
  aTransitionMessages = [];
581
+ var aMessages = [];
582
+
583
+ if (bBoundMessages && bTransitionOnly && sPathToBeRemoved) {
584
+ aMessages = getMessagesFromMessageModel(oMessageModel, sPathToBeRemoved);
585
+ } else {
586
+ aMessages = oMessageModel.getObject("/");
587
+ }
551
588
 
552
589
  for (i = 0; i < aMessages.length; i++) {
553
590
  if ((!bTransitionOnly || aMessages[i].persistent) && (bBoundMessages && aMessages[i].target !== "" || !bBoundMessages && (!aMessages[i].target || aMessages[i].target === "")) && aMessages[i].code) {
@@ -557,15 +594,15 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
557
594
 
558
595
  for (i = 0; i < aTransitionMessages.length; i++) {
559
596
  if (aTransitionMessages[i].code === "503" && aTransitionMessages[i].message !== "" && aTransitionMessages[i].message.indexOf(oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_BACKEND_PREFIX")) === -1) {
560
- aTransitionMessages[i].message = "\n" + oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_BACKEND_PREFIX") + aTransitionMessages[i].message;
597
+ aTransitionMessages[i].message = "\n".concat(oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_BACKEND_PREFIX")).concat(aTransitionMessages[i].message);
561
598
  }
562
599
  }
563
600
 
564
601
  return aTransitionMessages;
565
602
  }
566
603
 
567
- function removeTransitionMessages(bBoundMessages) {
568
- var aMessagesToBeDeleted = getMessages(bBoundMessages, true);
604
+ function removeTransitionMessages(bBoundMessages, sPathToBeRemoved) {
605
+ var aMessagesToBeDeleted = getMessages(bBoundMessages, true, sPathToBeRemoved);
569
606
 
570
607
  if (aMessagesToBeDeleted.length > 0) {
571
608
  Core.getMessageManager().removeMessages(aMessagesToBeDeleted);
@@ -593,4 +630,4 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
593
630
  };
594
631
  return messageHandling;
595
632
  }, false);
596
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1lc3NhZ2VIYW5kbGluZy50cyJdLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVRlbXBsYXRlIiwib01lc3NhZ2VWaWV3IiwiZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzIiwic1ByZXZpb3VzR3JvdXBOYW1lIiwiaW5zZXJ0RGV0YWlsIiwib1Byb3BlcnR5IiwicHJvcGVydHkiLCJzdWJzdHIiLCJNYXRoIiwibWF4IiwibGFzdEluZGV4T2YiLCJpbnNlcnRHcm91cE5hbWUiLCJzSFRNTCIsImdyb3VwTmFtZSIsImdldFBhdGhzIiwic1REIiwiZm9yRWFjaCIsImZuRm9ybWF0RGVzY3JpcHRpb24iLCJmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkiLCJhTWVzc2FnZXMiLCJzTWVzc2FnZVByaW9yaXR5IiwiTm9uZSIsImlMZW5ndGgiLCJsZW5ndGgiLCJvTWVzc2FnZUNvdW50IiwiRXJyb3IiLCJXYXJuaW5nIiwiU3VjY2VzcyIsIkluZm9ybWF0aW9uIiwiaSIsImdldFR5cGUiLCJmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkiLCJvTWVzc2FnZU1hbmFnZXIiLCJvUmVzb3VyY2VCdW5kbGUiLCJjb25jdXJyZW50RWRpdEZsYWciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXRPYmplY3QiLCJiTWVzc2FnZXNNb2RpZmllZCIsInNFdGFnTWVzc2FnZSIsIm9NZXNzYWdlIiwib1RlY2huaWNhbERldGFpbHMiLCJnZXRUZWNobmljYWxEZXRhaWxzIiwiaHR0cFN0YXR1cyIsImlzQ29uY3VycmVudE1vZGlmaWNhdGlvbiIsImdldFRleHQiLCJyZW1vdmVNZXNzYWdlcyIsInNldE1lc3NhZ2UiLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsImRpYWxvZ0Nsb3NlSGFuZGxlciIsImNsb3NlIiwic2V0VmlzaWJsZSIsIm9NZXNzYWdlRGlhbG9nTW9kZWwiLCJnZXRNb2RlbCIsInNldERhdGEiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0UmV0cnlBZnRlck1lc3NhZ2UiLCJiTWVzc2FnZURpYWxvZyIsImROb3ciLCJEYXRlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsInNSZXRyeUFmdGVyTWVzc2FnZSIsInJldHJ5QWZ0ZXIiLCJkUmV0cnlBZnRlciIsIm9EYXRlRm9ybWF0IiwiZ2V0RnVsbFllYXIiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZVRpbWVJbnN0YW5jZSIsInBhdHRlcm4iLCJmb3JtYXQiLCJnZXRNb250aCIsImdldERhdGUiLCJwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2ciLCJiU3RyaWN0SGFuZGxpbmdGbG93IiwiTWVzc2FnZUl0ZW0iLCJ1bmRlZmluZWQiLCJjb3VudGVyIiwicGF0aCIsInRpdGxlIiwic3VidGl0bGUiLCJsb25ndGV4dFVybCIsInR5cGUiLCJkZXNjcmlwdGlvbiIsIm1hcmt1cERlc2NyaXB0aW9uIiwiTWVzc2FnZVZpZXciLCJzaG93RGV0YWlsc1BhZ2VIZWFkZXIiLCJpdGVtU2VsZWN0IiwiaXRlbXMiLCJ0ZW1wbGF0ZSIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsInNob3dVbmJvdW5kTWVzc2FnZXMiLCJhQ3VzdG9tTWVzc2FnZXMiLCJvQ29udGV4dCIsImJIYXNFdGFnTWVzc2FnZSIsImJTaG93Qm91bmRUcmFuc2l0aW9uIiwiZXJyb3JUYXJnZXRzSW5BUE0iLCJiU2hvd01lc3NhZ2VCb3giLCJhVW5ib3VuZE1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJnZXRNZXNzYWdlTWFuYWdlciIsInNIaWdoZXN0UHJpb3JpdHkiLCJzSGlnaGVzdFByaW9yaXR5VGV4dCIsImFGaWx0ZXJzIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIk5FIiwidmFsdWUxIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsImNvbmNhdCIsInB1c2giLCJFUSIsImZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyIsImFDb250cm9sSWRzIiwiaW5kZXgiLCJJbmZpbml0eSIsIm9Db250cm9sIiwiYnlJZCIsImVycm9yRmllbGRDb250cm9sIiwiZmllbGRSYW5raW5EaWFsb2ciLCJEaWFsb2ciLCJnZXRQYXJlbnQiLCJmaW5kRWxlbWVudHMiLCJpbmRleE9mIiwiZm9jdXMiLCJ0ZXN0IiwiY2FzZVNlbnNpdGl2ZSIsIm1lc3NhZ2VDb2RlIiwiY29kZSIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwidGV4dCIsInBlcnNpc3RlbnQiLCJKU09OTW9kZWwiLCJnZXRDb2RlIiwib0xpc3RCaW5kaW5nIiwiYmluZExpc3QiLCJhQ3VycmVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZXhpc3RpbmdNZXNzYWdlcyIsIkFycmF5IiwiaXNBcnJheSIsImdldERhdGEiLCJvVW5pcXVlT2JqIiwiYU1vZGVsRGF0YUFycmF5IiwiZmlsdGVyIiwib2JqIiwiaWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJyZWplY3QiLCJ0aGVuIiwibWVzc2FnZUhhc0VUYWciLCJvTWVzc2FnZU9iamVjdCIsInJlc2l6YWJsZSIsImNvbnRlbnQiLCJlbmRCdXR0b24iLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRNaWRkbGUiLCJUZXh0IiwiY29udGVudExlZnQiLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwidmVydGljYWxTY3JvbGxpbmciLCJhZnRlckNsb3NlIiwiY2FsbCIsInNhcCIsInVpIiwicmVxdWlyZSIsIkJ1dHRvblR5cGUiLCJzZXRCZWdpbkJ1dHRvbiIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiZ2V0QmluZGluZyIsInJlc2V0Q2hhbmdlcyIsInJlZnJlc2giLCJFbXBoYXNpemVkIiwiZGVzdHJveUJlZ2luQnV0dG9uIiwiZ2V0SXRlbXMiLCJnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2ciLCJzZXRTdGF0ZSIsImdldEN1c3RvbUhlYWRlciIsImdldENvbnRlbnRNaWRkbGUiLCJzZXRUZXh0Iiwib3BlbiIsImNhdGNoIiwidGVjaG5pY2FsRGV0YWlscyIsIm9yaWdpbmFsTWVzc2FnZSIsImZvcm1hdHRlZFRleHRTdHJpbmciLCJyZXRyeUFmdGVyTWVzc2FnZSIsImdldEFkZGl0aW9uYWxUZXh0IiwiZ2V0TWVzc2FnZSIsImZvcm1hdHRlZFRleHQiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJNZXNzYWdlQm94IiwiZXJyb3IiLCJvbkNsb3NlIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwiYkJvdW5kTWVzc2FnZXMiLCJiVHJhbnNpdGlvbk9ubHkiLCJvTWVzc2FnZU1vZGVsIiwiYVRyYW5zaXRpb25NZXNzYWdlcyIsImFNZXNzYWdlc1RvQmVEZWxldGVkIiwibWVzc2FnZUhhbmRsaW5nIiwibW9kaWZ5RVRhZ01lc3NhZ2VzT25seSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQW1CQSxNQUFNQSxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0QsV0FBNUI7QUFDQSxNQUFJRSxZQUFtQixHQUFHLEVBQTFCO0FBQ0EsTUFBSUMsZ0JBQXVCLEdBQUcsRUFBOUI7QUFDQSxNQUFJQyxpQkFBd0IsR0FBRyxFQUEvQjtBQUNBLE1BQUlDLE9BQUo7QUFDQSxNQUFJQyxXQUFKO0FBQ0EsTUFBSUMsZ0JBQUo7QUFDQSxNQUFJQyxZQUFKOztBQW9CQSxXQUFTQyx3QkFBVCxHQUFvQztBQUNuQyxRQUFJQyxrQkFBSixDQURtQyxDQUduQzs7QUFDQSxhQUFTQyxZQUFULENBQXNCQyxTQUF0QixFQUFzQztBQUNyQyxhQUFPQSxTQUFTLENBQUNDLFFBQVYsR0FDSixTQUNBRCxTQUFTLENBQUNDLFFB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Q0FBdkMsTUFBbUgsQ0FBQyxDQUhySCxFQUlFO0FBQ0QwSyxRQUFBQSxtQkFBbUIsQ0FBQ3pMLENBQUQsQ0FBbkIsQ0FBdUI4RyxPQUF2QixHQUNDLE9BQU8xRyxlQUFlLENBQUNXLE9BQWhCLENBQXdCLDZDQUF4QixDQUFQLEdBQWdGMEssbUJBQW1CLENBQUN6TCxDQUFELENBQW5CLENBQXVCOEcsT0FEeEc7QUFFQTtBQUNEOztBQUNELFdBQU8yRSxtQkFBUDtBQUNBOztBQUNELFdBQVNKLHdCQUFULENBQWtDQyxjQUFsQyxFQUF1RDtBQUN0RCxRQUFNSSxvQkFBb0IsR0FBRzdHLFdBQVcsQ0FBQ3lHLGNBQUQsRUFBaUIsSUFBakIsQ0FBeEM7O0FBRUEsUUFBSUksb0JBQW9CLENBQUNoTSxNQUFyQixHQUE4QixDQUFsQyxFQUFxQztBQUNwQ3FDLE1BQUFBLElBQUksQ0FBQytDLGlCQUFMLEdBQXlCOUQsY0FBekIsQ0FBd0MwSyxvQkFBeEM7QUFDQTtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxNQUFNQyxlQUFvQyxHQUFHO0FBQzVDOUcsSUFBQUEsV0FBVyxFQUFFQSxXQUQrQjtBQUU1Q1IsSUFBQUEsbUJBQW1CLEVBQUVBLG1CQUZ1QjtBQUc1QzNDLElBQUFBLCtCQUErQixFQUFFQSwrQkFIVztBQUk1Q2lILElBQUFBLDZCQUE2QixFQUFFQSw2QkFKYTtBQUs1Q2lELElBQUFBLHNCQUFzQixFQUFFMUwsd0JBTG9CO0FBTTVDeUIsSUFBQUEsb0JBQW9CLEVBQUVBLG9CQU5zQjtBQU81Q2lCLElBQUFBLDJCQUEyQixFQUFFQTtBQVBlLEdBQTdDO1NBVWUrSSxlIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFyIGZyb20gXCJzYXAvbS9CYXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRm9ybWF0dGVkVGV4dCBmcm9tIFwic2FwL20vRm9ybWF0dGVkVGV4dFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlSXRlbSBmcm9tIFwic2FwL20vTWVzc2FnZUl0ZW1cIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IE1lc3NhZ2VWaWV3IGZyb20gXCJzYXAvbS9NZXNzYWdlVmlld1wiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IERhdGVGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9EYXRlRm9ybWF0XCI7XG5pbXBvcnQgSWNvblBvb2wgZnJvbSBcInNhcC91aS9jb3JlL0ljb25Qb29sXCI7XG5pbXBvcnQgQ29yZUxpYiBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHsgQ29yZUV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuXG5jb25zdCBNZXNzYWdlVHlwZSA9IENvcmVMaWIuTWVzc2FnZVR5cGU7XG5sZXQgYU1lc3NhZ2VMaXN0OiBhbnlbXSA9IFtdO1xubGV0IGFNZXNzYWdlRGF0YUxpc3Q6IGFueVtdID0gW107XG5sZXQgYVJlc29sdmVGdW5jdGlvbnM6IGFueVtdID0gW107XG5sZXQgb0RpYWxvZzogRGlhbG9nO1xubGV0IG9CYWNrQnV0dG9uOiBCdXR0b247XG5sZXQgb01lc3NhZ2VUZW1wbGF0ZTogTWVzc2FnZUl0ZW07XG5sZXQgb01lc3NhZ2VWaWV3OiBNZXNzYWdlVmlldztcblxuZXhwb3J0IHR5cGUgbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IChiQm91bmRNZXNzYWdlcz86IGFueSwgYlRyYW5zaXRpb25Pbmx5PzogYW55KSA9PiBhbnlbXTtcblx0c2hvd1VuYm91bmRNZXNzYWdlczogKFxuXHRcdGFDdXN0b21NZXNzYWdlcz86IGFueVtdLFxuXHRcdG9Db250ZXh0PzogYW55LFxuXHRcdGJIYXNFdGFnTWVzc2FnZT86IGJvb2xlYW4sXG5cdFx0YlNob3dCb3VuZFRyYW5zaXRpb24/OiBib29sZWFuLFxuXHRcdGVycm9yVGFyZ2V0c0luQVBNPzogYm9vbGVhbixcblx0XHRiU2hvd01lc3NhZ2VCb3g/OiBib29sZWFuLFxuXHRcdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW5cblx0KSA9PiBQcm9taXNlPGFueT47XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6ICgpID0+IHZvaWQ7XG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoKSA9PiB2b2lkO1xuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiAob01lc3NhZ2VNYW5hZ2VyOiBhbnksIG9SZXNvdXJjZUJ1bmRsZTogYW55LCBjb25jdXJyZW50RWRpdEZsYWc6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiAob01lc3NhZ2U6IGFueSwgYk1lc3NhZ2VEaWFsb2c/OiBhbnkpID0+IGFueTtcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiAob01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuKSA9PiBhbnk7XG59O1xuXG5mdW5jdGlvbiBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKSB7XG5cdGxldCBzUHJldmlvdXNHcm91cE5hbWU6IHN0cmluZztcblxuXHQvLyBJbnNlcnQgdGVjaG5pY2FsIGRldGFpbCBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0RGV0YWlsKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eS5wcm9wZXJ0eVxuXHRcdFx0PyBcIiggJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSA/IChcIjxwPicgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eS5zdWJzdHIoTWF0aC5tYXgob1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiL1wiKSwgb1Byb3BlcnR5LnByb3BlcnR5Lmxhc3RJbmRleE9mKFwiLlwiKSkgKyAxKSArXG5cdFx0XHRcdFx0JyA6IFwiICsgJyArXG5cdFx0XHRcdFx0XCIke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ICsgXCI8L3A+XCIpIDogXCJcIiApJ1xuXHRcdFx0OiBcIlwiO1xuXHR9XG5cdC8vIEluc2VydCBncm91cG5hbWUgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHk6IGFueSkge1xuXHRcdGxldCBzSFRNTCA9IFwiXCI7XG5cdFx0aWYgKG9Qcm9wZXJ0eS5ncm91cE5hbWUgJiYgb1Byb3BlcnR5LnByb3BlcnR5ICYmIG9Qcm9wZXJ0eS5ncm91cE5hbWUgIT09IHNQcmV2aW91c0dyb3VwTmFtZSkge1xuXHRcdFx0c0hUTUwgKz0gXCIoICR7XCIgKyBvUHJvcGVydHkucHJvcGVydHkgKyAnfSA/IFwiPGJyPjxoMz4nICsgb1Byb3BlcnR5Lmdyb3VwTmFtZSArICc8L2gzPlwiIDogXCJcIiApICsgJztcblx0XHRcdHNQcmV2aW91c0dyb3VwTmFtZSA9IG9Qcm9wZXJ0eS5ncm91cE5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBzSFRNTDtcblx0fVxuXG5cdC8vIExpc3Qgb2YgdGVjaG5pY2FsIGRldGFpbHMgdG8gYmUgc2hvd25cblx0ZnVuY3Rpb24gZ2V0UGF0aHMoKSB7XG5cdFx0Y29uc3Qgc1REID0gXCJ0ZWNobmljYWxEZXRhaWxzXCI7IC8vIG5hbWUgb2YgcHJvcGVydHkgaW4gbWVzc2FnZSBtb2RlbCBkYXRhIGZvciB0ZWNobmljYWwgZGV0YWlsc1xuXHRcdHJldHVybiBbXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvc3RhdHVzXCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJcIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9zdGF0dXNUZXh0XCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJBcHBsaWNhdGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9Db21wb25lbnRJZFwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiQXBwbGljYXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZUlkXCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJBcHBsaWNhdGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlUmVwb3NpdG9yeVwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiQXBwbGljYXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVZlcnNpb25cIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vQW5hbHlzaXNcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vTm90ZVwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9EZXRhaWxlZE5vdGVcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5FeGNlcHRpb25DYXRlZ29yeVwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLlRpbWVTdGFtcFwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLlRyYW5zYWN0aW9uSWRcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIk1lc3NhZ2VzXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvY29kZVwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiTWVzc2FnZXNcIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9tZXNzYWdlXCIgfVxuXHRcdF07XG5cdH1cblxuXHRsZXQgc0hUTUwgPSBcIk9iamVjdC5rZXlzKFwiICsgXCIke3RlY2huaWNhbERldGFpbHN9XCIgKyAnKS5sZW5ndGggPiAwID8gXCI8aDI+VGVjaG5pY2FsIERldGFpbHM8L2gyPlwiIDogXCJcIiAnO1xuXHRnZXRQYXRocygpLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9KSB7XG5cdFx0c0hUTUwgPSBzSFRNTCArIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHkpICsgXCJcIiArIGluc2VydERldGFpbChvUHJvcGVydHkpICsgXCIgKyBcIjtcblx0fSk7XG5cdHJldHVybiBzSFRNTDtcbn1cbmZ1bmN0aW9uIGZuRm9ybWF0RGVzY3JpcHRpb24oKSB7XG5cdGNvbnN0IHNIVE1MID0gXCIoJHtcIiArICdkZXNjcmlwdGlvbn0gPyAoXCI8aDI+RGVzY3JpcHRpb248L2gyPlwiICsgJHsnICsgJ2Rlc2NyaXB0aW9ufSkgOiBcIlwiKSc7XG5cdHJldHVybiBzSFRNTDtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIHR5cGUoRXJyb3IvV2FybmluZy9TdWNjZXNzL0luZm9ybWF0aW9uKSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXMuXG5cbiAqIEBmdW5jdGlvblxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5tZXNzYWdlSGFuZGxpbmcuZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5XG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5tZXNzYWdlSGFuZGxpbmdcbiAqIEBwYXJhbSB7QXJyYXl9IFthTWVzc2FnZXNdIE1lc3NhZ2VzIGxpc3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXNcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KGFNZXNzYWdlczogYW55W10pIHtcblx0bGV0IHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRjb25zdCBpTGVuZ3RoID0gYU1lc3NhZ2VzLmxlbmd0aDtcblx0Y29uc3Qgb01lc3NhZ2VDb3VudDogYW55ID0geyBFcnJvcjogMCwgV2FybmluZzogMCwgU3VjY2VzczogMCwgSW5mb3JtYXRpb246IDAgfTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGlMZW5ndGg7IGkrKykge1xuXHRcdCsrb01lc3NhZ2VDb3VudFthTWVzc2FnZXNbaV0uZ2V0VHlwZSgpXTtcblx0fVxuXHRpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5FcnJvcl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuV2FybmluZ10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5TdWNjZXNzXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuSW5mb3JtYXRpb247XG5cdH1cblx0cmV0dXJuIHNNZXNzYWdlUHJpb3JpdHk7XG59XG4vLyBmdW5jdGlvbiB3aGljaCBtb2RpZnkgZS1UYWcgbWVzc2FnZXMgb25seS5cbi8vIHJldHVybnMgOiB0cnVlLCBpZiBhbnkgZS1UYWcgbWVzc2FnZSBpcyBtb2RpZmllZCwgb3RoZXJ3aXNlIGZhbHNlLlxuZnVuY3Rpb24gZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5KG9NZXNzYWdlTWFuYWdlcjogYW55LCBvUmVzb3VyY2VCdW5kbGU6IGFueSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG5cdGNvbnN0IGFNZXNzYWdlcyA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5nZXRPYmplY3QoXCIvXCIpO1xuXHRsZXQgYk1lc3NhZ2VzTW9kaWZpZWQgPSBmYWxzZTtcblx0bGV0IHNFdGFnTWVzc2FnZSA9IFwiXCI7XG5cdGFNZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55LCBpOiBhbnkpIHtcblx0XHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKTtcblx0XHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNDEyKSB7XG5cdFx0XHRpZiAob1RlY2huaWNhbERldGFpbHMuaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uICYmIGNvbmN1cnJlbnRFZGl0RmxhZykge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPVxuXHRcdFx0XHRcdHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNfQ09OQ1VSUkVOVF9NT0RJRklDQVRJT05cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPSBzRXRhZ01lc3NhZ2UgfHwgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19URUNITklDQUxfSVNTVUVTXCIpO1xuXHRcdFx0fVxuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKGFNZXNzYWdlc1tpXSk7XG5cdFx0XHRvTWVzc2FnZS5zZXRNZXNzYWdlKHNFdGFnTWVzc2FnZSk7XG5cdFx0XHRvTWVzc2FnZS50YXJnZXQgPSBcIlwiO1xuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLmFkZE1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRcdGJNZXNzYWdlc01vZGlmaWVkID0gdHJ1ZTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYk1lc3NhZ2VzTW9kaWZpZWQ7XG59XG4vLyBEaWFsb2cgY2xvc2UgSGFuZGxpbmdcbmZ1bmN0aW9uIGRpYWxvZ0Nsb3NlSGFuZGxlcigpIHtcblx0b0RpYWxvZy5jbG9zZSgpO1xuXHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKGZhbHNlKTtcblx0YU1lc3NhZ2VMaXN0ID0gW107XG5cdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWw6IGFueSA9IG9NZXNzYWdlVmlldy5nZXRNb2RlbCgpO1xuXHRpZiAob01lc3NhZ2VEaWFsb2dNb2RlbCkge1xuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdH1cblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xufVxuZnVuY3Rpb24gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2U6IGFueSwgYk1lc3NhZ2VEaWFsb2c/OiBhbnkpIHtcblx0Y29uc3QgZE5vdyA9IG5ldyBEYXRlKCk7XG5cdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRsZXQgc1JldHJ5QWZ0ZXJNZXNzYWdlO1xuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmIG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRjb25zdCBkUmV0cnlBZnRlciA9IG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXI7XG5cdFx0bGV0IG9EYXRlRm9ybWF0O1xuXHRcdGlmIChkTm93LmdldEZ1bGxZZWFyKCkgIT09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vZGlmZmVyZW50IHllYXJzXG5cdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCwgeXl5eSAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0fSk7XG5cdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0RnVsbFllYXIoKSA9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL3NhbWUgeWVhclxuXHRcdFx0aWYgKGJNZXNzYWdlRGlhbG9nKSB7XG5cdFx0XHRcdC8vbGVzcyB0aGFuIDIgbWluXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9XG5cdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX1RJVExFXCIpICtcblx0XHRcdFx0XHRcIiBcIiArXG5cdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0RFU0NcIik7XG5cdFx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0TW9udGgoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0TW9udGgoKSB8fCBkTm93LmdldERhdGUoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RGF0ZSgpKSB7XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQgJ2F0JyBoaDptbSBhXCJcblx0XHRcdFx0fSk7IC8vZGlmZmVyZW50IG1vbnRocyBvciBkaWZmZXJlbnQgZGF5cyBvZiBzYW1lIG1vbnRoXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9zYW1lIGRheVxuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJoaDptbSBhXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9EQVlcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmICFvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX05PX1JFVFJZX0FGVEVSXCIpO1xuXHR9XG5cdHJldHVybiBzUmV0cnlBZnRlck1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4pIHtcblx0aWYgKCFiU3RyaWN0SGFuZGxpbmdGbG93KSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9XG5cdFx0XHRvTWVzc2FnZVRlbXBsYXRlIHx8XG5cdFx0XHRuZXcgTWVzc2FnZUl0ZW0odW5kZWZpbmVkLCB7XG5cdFx0XHRcdGNvdW50ZXI6IHsgcGF0aDogXCJjb3VudGVyXCIgfSxcblx0XHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRcdHN1YnRpdGxlOiBcInthZGRpdGlvbmFsVGV4dH1cIixcblx0XHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiLFxuXHRcdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRcdGRlc2NyaXB0aW9uOlxuXHRcdFx0XHRcdFwiez0gJHtcIiArXG5cdFx0XHRcdFx0XCJkZXNjcmlwdGlvbn0gfHwgJHt0ZWNobmljYWxEZXRhaWxzfSA/IFwiICtcblx0XHRcdFx0XHQnXCI8aHRtbD48Ym9keT5cIiArICcgK1xuXHRcdFx0XHRcdGZuRm9ybWF0RGVzY3JpcHRpb24oKSArXG5cdFx0XHRcdFx0XCIgKyBcIiArXG5cdFx0XHRcdFx0Zm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzKCkgK1xuXHRcdFx0XHRcdCdcIjwvYm9keT48L2h0bWw+XCInICtcblx0XHRcdFx0XHQnIDogXCJcIiB9Jyxcblx0XHRcdFx0bWFya3VwRGVzY3JpcHRpb246IHRydWVcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0oe1xuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHR0eXBlOiBcIldhcm5pbmdcIixcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIlxuXHRcdH0pO1xuXHR9XG5cdG9NZXNzYWdlVmlldyA9XG5cdFx0b01lc3NhZ2VWaWV3IHx8XG5cdFx0bmV3IE1lc3NhZ2VWaWV3KHtcblx0XHRcdHNob3dEZXRhaWxzUGFnZUhlYWRlcjogZmFsc2UsXG5cdFx0XHRpdGVtU2VsZWN0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdG9CYWNrQnV0dG9uLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHR9LFxuXHRcdFx0aXRlbXM6IHtcblx0XHRcdFx0cGF0aDogXCIvXCIsXG5cdFx0XHRcdHRlbXBsYXRlOiBvTWVzc2FnZVRlbXBsYXRlXG5cdFx0XHR9XG5cdFx0fSk7XG5cdG9CYWNrQnV0dG9uID1cblx0XHRvQmFja0J1dHRvbiB8fFxuXHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0aWNvbjogSWNvblBvb2wuZ2V0SWNvblVSSShcIm5hdi1iYWNrXCIpLFxuXHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRwcmVzczogZnVuY3Rpb24gKHRoaXM6IEJ1dHRvbikge1xuXHRcdFx0XHRvTWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRcdHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdC8vIFVwZGF0ZSBwcm9wZXIgRVRhZyBNaXNtYXRjaCBlcnJvclxuXHRvTWVzc2FnZVZpZXcuc2V0TW9kZWwob01lc3NhZ2VEaWFsb2dNb2RlbCk7XG5cdHJldHVybiB7XG5cdFx0b01lc3NhZ2VWaWV3LFxuXHRcdG9CYWNrQnV0dG9uXG5cdH07XG59XG5cbmZ1bmN0aW9uIHNob3dVbmJvdW5kTWVzc2FnZXMoXG5cdHRoaXM6IG1lc3NhZ2VIYW5kbGluZ1R5cGUsXG5cdGFDdXN0b21NZXNzYWdlcz86IGFueVtdLFxuXHRvQ29udGV4dD86IGFueSxcblx0Ykhhc0V0YWdNZXNzYWdlPzogYm9vbGVhbixcblx0YlNob3dCb3VuZFRyYW5zaXRpb24/OiBib29sZWFuLFxuXHRlcnJvclRhcmdldHNJbkFQTT86IGJvb2xlYW4sXG5cdGJTaG93TWVzc2FnZUJveD86IGJvb2xlYW4sXG5cdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW5cbikge1xuXHRsZXQgYVVuYm91bmRNZXNzYWdlcyA9IHRoaXMuZ2V0TWVzc2FnZXMoKTtcblx0Y29uc3Qgb01lc3NhZ2VNYW5hZ2VyID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRsZXQgc0hpZ2hlc3RQcmlvcml0eTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHlUZXh0O1xuXHRjb25zdCBhRmlsdGVycyA9IFtcblx0XHRuZXcgRmlsdGVyKHsgcGF0aDogXCJjb2RlXCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBudWxsIH0pLFxuXHRcdG5ldyBGaWx0ZXIoeyBwYXRoOiBcInBlcnNpc3RlbnRcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLk5FLCB2YWx1ZTE6IGZhbHNlIH0pXG5cdF07XG5cdGxldCBzaG93TWVzc2FnZURpYWxvZzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuXHRcdHNob3dNZXNzYWdlQm94OiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cblx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0YVVuYm91bmRNZXNzYWdlcyA9IGFVbmJvdW5kTWVzc2FnZXMuY29uY2F0KGdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTtcblx0XHQvLyB3ZSBvbmx5IHdhbnQgdG8gc2hvdyBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIG5vdCBib3VuZCBzdGF0ZSBtZXNzYWdlcyBoZW5jZSBhZGQgYSBmaWx0ZXIgZm9yIHRoZSBzYW1lXG5cdFx0YUZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSwgdmFsdWUxOiB0cnVlIH0pKTtcblx0XHRjb25zdCBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2cgPSBmdW5jdGlvbiAoYUNvbnRyb2xJZHM6IGFueSkge1xuXHRcdFx0bGV0IGluZGV4ID0gSW5maW5pdHksXG5cdFx0XHRcdG9Db250cm9sID0gQ29yZS5ieUlkKGFDb250cm9sSWRzWzBdKSBhcyBNYW5hZ2VkT2JqZWN0O1xuXHRcdFx0Y29uc3QgZXJyb3JGaWVsZENvbnRyb2wgPSBDb3JlLmJ5SWQoYUNvbnRyb2xJZHNbMF0pIGFzIENvbnRyb2w7XG5cdFx0XHR3aGlsZSAob0NvbnRyb2wpIHtcblx0XHRcdFx0Y29uc3QgZmllbGRSYW5raW5EaWFsb2cgPVxuXHRcdFx0XHRcdG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nXG5cdFx0XHRcdFx0XHQ/IChlcnJvckZpZWxkQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBhbnkpLmZpbmRFbGVtZW50cyh0cnVlKS5pbmRleE9mKGVycm9yRmllbGRDb250cm9sKVxuXHRcdFx0XHRcdFx0OiBJbmZpbml0eTtcblx0XHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nKSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4ID4gZmllbGRSYW5raW5EaWFsb2cpIHtcblx0XHRcdFx0XHRcdGluZGV4ID0gZmllbGRSYW5raW5EaWFsb2c7XG5cdFx0XHRcdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBkaWFsb2cncyBjb250cm9sXG5cdFx0XHRcdFx0XHRlcnJvckZpZWxkQ29udHJvbC5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBtZXNzYWdlcyB3aXRoIHRhcmdldCBpbnNpZGUgc2FwLm0uRGlhbG9nIHNob3VsZCBub3QgYnJpbmcgdXAgdGhlIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHRcdGFGaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdHRlc3Q6IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIG9ubHkgdW5ib3VuZCBtZXNzYWdlcyBoYXZlIHRvIGJlIHNob3duIHNvIGFkZCBmaWx0ZXIgYWNjb3JkaW5nbHlcblx0XHRhRmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBcInRhcmdldFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogXCJcIiB9KSk7XG5cdH1cblx0aWYgKGFDdXN0b21NZXNzYWdlcyAmJiBhQ3VzdG9tTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0YUN1c3RvbU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VDb2RlID0gb01lc3NhZ2UuY29kZSA/IG9NZXNzYWdlLmNvZGUgOiBcIlwiO1xuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLmFkZE1lc3NhZ2VzKFxuXHRcdFx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0bWVzc2FnZTogb01lc3NhZ2UudGV4dCxcblx0XHRcdFx0XHR0eXBlOiBvTWVzc2FnZS50eXBlLFxuXHRcdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdGNvZGU6IG1lc3NhZ2VDb2RlXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0Ly9UaGUgdGFyZ2V0IGFuZCBwZXJzaXN0ZW50IHByb3BlcnRpZXMgb2YgdGhlIG1lc3NhZ2UgYXJlIGhhcmRjb2RlZCBhcyBcIlwiIGFuZCB0cnVlIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGRlYWxzIHdpdGggb25seSB1bmJvdW5kIG1lc3NhZ2VzLlxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSAob01lc3NhZ2VWaWV3ICYmIChvTWVzc2FnZVZpZXcuZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwpKSB8fCBuZXcgSlNPTk1vZGVsKCk7XG5cdGlmIChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiAoYVVuYm91bmRNZXNzYWdlc1swXS5nZXRDb2RlKCkgPT09IFwiNTAzXCIgfHwgYlNob3dNZXNzYWdlQm94KSkge1xuXHRcdGlmIChhVW5ib3VuZE1lc3NhZ2VzWzBdLmdldENvZGUoKSAhPT0gXCI1MDNcIikge1xuXHRcdFx0c2hvd01lc3NhZ2VCb3ggPSAhZXJyb3JUYXJnZXRzSW5BUE07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNob3dNZXNzYWdlQm94ID0gdHJ1ZTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYUZpbHRlcnMpLFxuXHRcdFx0YUN1cnJlbnRDb250ZXh0cyA9IG9MaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0XHRpZiAoYUN1cnJlbnRDb250ZXh0cyAmJiBhQ3VycmVudENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIERvbid0IHNob3cgZGlhbG9nIGluY2FzZSB0aGVyZSBhcmUgbm8gZXJyb3JzIHRvIHNob3dcblx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gIWVycm9yVGFyZ2V0c0luQVBNOyAvLyBpZiBmYWxzZSwgc2hvdyBtZXNzYWdlcyBpbiBkaWFsb2dcblx0XHRcdC8vIEFzIGZpdGVyaW5nIGhhcyBhbHJlYWR5IGhhcHBlbmVkIGhlcmUgaGVuY2Vcblx0XHRcdC8vIHVzaW5nIHRoZSBtZXNzYWdlIG1vZGVsIGFnYWluIGZvciB0aGUgbWVzc2FnZSBkaWFsb2cgdmlldyBhbmQgdGhlbiBmaWx0ZXJpbmcgb24gdGhhdCBiaW5kaW5nIGFnYWluIGlzIHVubmVjZXNzYXJ5LlxuXHRcdFx0Ly8gU28gd2UgY3JlYXRlIG5ldyBqc29uIG1vZGVsIHRvIHVzZSBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcuXG5cdFx0XHRjb25zdCBhTWVzc2FnZXM6IGFueVtdID0gW107XG5cdFx0XHRhQ3VycmVudENvbnRleHRzLmZvckVhY2goZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0YU1lc3NhZ2VzLnB1c2gob01lc3NhZ2UpO1xuXHRcdFx0XHRhTWVzc2FnZURhdGFMaXN0ID0gYU1lc3NhZ2VzO1xuXHRcdFx0fSk7XG5cdFx0XHQvLyBpZihhTWVzc2FnZXMubGVuZ3RoID09PSAwICYmIGFNZXNzYWdlTGlzdC5sZW5ndGgpIHtcblx0XHRcdC8vIFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNZXNzYWdlcyk7XG5cdFx0XHQvLyB9XG5cdFx0XHRsZXQgZXhpc3RpbmdNZXNzYWdlczogYW55W10gPSBbXTtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KG9NZXNzYWdlRGlhbG9nTW9kZWwuZ2V0RGF0YSgpKSkge1xuXHRcdFx0XHRleGlzdGluZ01lc3NhZ2VzID0gb01lc3NhZ2VEaWFsb2dNb2RlbC5nZXREYXRhKCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvVW5pcXVlT2JqOiBhbnkgPSB7fTtcblx0XHRcdGxldCBhTW9kZWxEYXRhQXJyYXk6IGFueVtdID0gW107XG5cdFx0XHRhTW9kZWxEYXRhQXJyYXkgPSBhTWVzc2FnZURhdGFMaXN0LmNvbmNhdChleGlzdGluZ01lc3NhZ2VzKS5maWx0ZXIoZnVuY3Rpb24gKG9iaikge1xuXHRcdFx0XHQvLyByZW1vdmUgZW50cmllcyBoYXZpbmcgZHVwbGljYXRlIG1lc3NhZ2UgaWRzXG5cdFx0XHRcdHJldHVybiAhb1VuaXF1ZU9ialtvYmouaWRdICYmIChvVW5pcXVlT2JqW29iai5pZF0gPSB0cnVlKTtcblx0XHRcdH0pO1xuXHRcdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNb2RlbERhdGFBcnJheSk7XG5cdFx0fVxuXHR9XG5cdGlmIChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMCAmJiAhYUN1c3RvbU1lc3NhZ2VzICYmICFiSGFzRXRhZ01lc3NhZ2UpIHtcblx0XHQvLyBEb24ndCBzaG93IHRoZSBwb3B1cCBpZiB0aGVyZSBhcmUgbm8gdHJhbnNpZW50IG1lc3NhZ2VzXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fSBlbHNlIGlmIChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiBhVW5ib3VuZE1lc3NhZ2VzWzBdLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuU3VjY2VzcyAmJiAhYUN1c3RvbU1lc3NhZ2VzKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhhVW5ib3VuZE1lc3NhZ2VzWzBdLm1lc3NhZ2UpO1xuXHRcdFx0aWYgKG9NZXNzYWdlRGlhbG9nTW9kZWwpIHtcblx0XHRcdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKHt9KTtcblx0XHRcdH1cblx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhhVW5ib3VuZE1lc3NhZ2VzKTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZURpYWxvZykge1xuXHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gYVJlc29sdmVGdW5jdGlvbnMgfHwgW107XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkKSB7XG5cdFx0XHRhUmVzb2x2ZUZ1bmN0aW9ucy5wdXNoKHJlc29sdmUpO1xuXHRcdFx0KENvcmUgYXMgQ29yZUV4KVxuXHRcdFx0XHQuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIiwgdHJ1ZSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9SZXNvdXJjZUJ1bmRsZTogYW55KSB7XG5cdFx0XHRcdFx0Y29uc3QgYlN0cmljdEhhbmRsaW5nRmxvdyA9IGZhbHNlO1xuXHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VIYXNFVGFnID0gZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5KG9NZXNzYWdlTWFuYWdlciwgb1Jlc291cmNlQnVuZGxlLCBjb25jdXJyZW50RWRpdEZsYWcpO1xuXHRcdFx0XHRcdGNvbnN0IG9NZXNzYWdlT2JqZWN0ID0gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdFx0XHRcdG9EaWFsb2cgPVxuXHRcdFx0XHRcdFx0b0RpYWxvZyB8fFxuXHRcdFx0XHRcdFx0bmV3IERpYWxvZyh7XG5cdFx0XHRcdFx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0Y29udGVudDogb01lc3NhZ2VPYmplY3Qub01lc3NhZ2VWaWV3LFxuXHRcdFx0XHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGFsc28gcmVtb3ZlIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgd2Ugd2VyZSBzaG93aW5nIHRoZW1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9DTE9TRVwiKVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0Y3VzdG9tSGVhZGVyOiBuZXcgQmFyKHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50TWlkZGxlOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRuZXcgVGV4dCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIilcblx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50TGVmdDogW29CYWNrQnV0dG9uXVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjM3LjVlbVwiLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50SGVpZ2h0OiBcIjIxLjVlbVwiLFxuXHRcdFx0XHRcdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFSZXNvbHZlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhUmVzb2x2ZUZ1bmN0aW9uc1tpXS5jYWxsKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gW107XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKG1lc3NhZ2VIYXNFVGFnKSB7XG5cdFx0XHRcdFx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvbS9CdXR0b25UeXBlXCJdLCBmdW5jdGlvbiAoQnV0dG9uVHlwZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdG9EaWFsb2cuc2V0QmVnaW5CdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9Db250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQucmVmcmVzaCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKSxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IEJ1dHRvblR5cGUuRW1waGFzaXplZFxuXHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0RpYWxvZy5kZXN0cm95QmVnaW5CdXR0b24oKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c0hpZ2hlc3RQcmlvcml0eSA9IGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShvTWVzc2FnZVZpZXcuZ2V0SXRlbXMoKSk7XG5cdFx0XHRcdFx0c0hpZ2hlc3RQcmlvcml0eVRleHQgPSBnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2coc0hpZ2hlc3RQcmlvcml0eSk7XG5cdFx0XHRcdFx0b0RpYWxvZy5zZXRTdGF0ZShzSGlnaGVzdFByaW9yaXR5KTtcblx0XHRcdFx0XHQob0RpYWxvZy5nZXRDdXN0b21IZWFkZXIoKSBhcyBhbnkpLmdldENvbnRlbnRNaWRkbGUoKVswXS5zZXRUZXh0KHNIaWdoZXN0UHJpb3JpdHlUZXh0KTtcblx0XHRcdFx0XHRvTWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRcdFx0b0RpYWxvZy5vcGVuKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHNob3dNZXNzYWdlQm94KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0XHRjb25zdCBvTWVzc2FnZSA9IGFVbmJvdW5kTWVzc2FnZXNbMF07XG5cdFx0XHRpZiAob01lc3NhZ2UudGVjaG5pY2FsRGV0YWlscyAmJiBhTWVzc2FnZUxpc3QuaW5kZXhPZihvTWVzc2FnZS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZS5tZXNzYWdlKSA9PT0gLTEpIHtcblx0XHRcdFx0YU1lc3NhZ2VMaXN0LnB1c2gob01lc3NhZ2UudGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UubWVzc2FnZSk7XG5cdFx0XHRcdGxldCBmb3JtYXR0ZWRUZXh0U3RyaW5nID0gXCI8aHRtbD48Ym9keT5cIjtcblx0XHRcdFx0Y29uc3QgcmV0cnlBZnRlck1lc3NhZ2UgPSBnZXRSZXRyeUFmdGVyTWVzc2FnZShvTWVzc2FnZSwgdHJ1ZSk7XG5cdFx0XHRcdGlmIChyZXRyeUFmdGVyTWVzc2FnZSkge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBcIjxoNj5cIiArIHJldHJ5QWZ0ZXJNZXNzYWdlICsgXCI8L2g2Pjxicj5cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob01lc3NhZ2UuZ2V0Q29kZSgpICE9PSBcIjUwM1wiICYmIG9NZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0KCkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPVxuXHRcdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyArIG9NZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0KCkgKyBcIjogXCIgKyBvTWVzc2FnZS5nZXRNZXNzYWdlKCkgKyBcIjwvaHRtbD48L2JvZHk+XCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGZvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRNZXNzYWdlKCkgKyBcIjwvaHRtbD48L2JvZHk+XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVkVGV4dDogYW55ID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0XHRcdGh0bWxUZXh0OiBmb3JtYXR0ZWRUZXh0U3RyaW5nXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRNZXNzYWdlQm94LmVycm9yKGZvcm1hdHRlZFRleHQsIHtcblx0XHRcdFx0XHRvbkNsb3NlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRhTWVzc2FnZUxpc3QgPSBbXTtcblx0XHRcdFx0XHRcdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5OiBhbnkpIHtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0c3dpdGNoIChzSGlnaGVzdFByaW9yaXR5KSB7XG5cdFx0Y2FzZSBcIkVycm9yXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCIpO1xuXHRcdGNhc2UgXCJJbmZvcm1hdGlvblwiOlxuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfSU5GT1wiKTtcblx0XHRjYXNlIFwiU3VjY2Vzc1wiOlxuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfU1VDQ0VTU1wiKTtcblx0XHRjYXNlIFwiV2FybmluZ1wiOlxuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfV0FSTklOR1wiKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIik7XG5cdH1cbn1cbmZ1bmN0aW9uIHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKSB7XG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhmYWxzZSk7XG59XG5mdW5jdGlvbiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUpO1xufVxuZnVuY3Rpb24gZ2V0TWVzc2FnZXMoYkJvdW5kTWVzc2FnZXM6IGJvb2xlYW4gPSBmYWxzZSwgYlRyYW5zaXRpb25Pbmx5OiBib29sZWFuID0gZmFsc2UpIHtcblx0bGV0IGk7XG5cdGNvbnN0IG9NZXNzYWdlTWFuYWdlciA9IChDb3JlIGFzIENvcmVFeCBhcyBhbnkpLmdldE1lc3NhZ2VNYW5hZ2VyKCksXG5cdFx0b01lc3NhZ2VNb2RlbCA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKSxcblx0XHRhTWVzc2FnZXMgPSBvTWVzc2FnZU1vZGVsLmdldE9iamVjdChcIi9cIiksXG5cdFx0b1Jlc291cmNlQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKSxcblx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzID0gW107XG5cblx0Zm9yIChpID0gMDsgaSA8IGFNZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdCghYlRyYW5zaXRpb25Pbmx5IHx8IGFNZXNzYWdlc1tpXS5wZXJzaXN0ZW50KSAmJlxuXHRcdFx0KChiQm91bmRNZXNzYWdlcyAmJiBhTWVzc2FnZXNbaV0udGFyZ2V0ICE9PSBcIlwiKSB8fCAoIWJCb3VuZE1lc3NhZ2VzICYmICghYU1lc3NhZ2VzW2ldLnRhcmdldCB8fCBhTWVzc2FnZXNbaV0udGFyZ2V0ID09PSBcIlwiKSkpICYmXG5cdFx0XHRhTWVzc2FnZXNbaV0uY29kZVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlcy5wdXNoKGFNZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmNvZGUgPT09IFwiNTAzXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZSAhPT0gXCJcIiAmJlxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5tZXNzYWdlLmluZGV4T2Yob1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0JBQ0tFTkRfUFJFRklYXCIpKSA9PT0gLTFcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZSA9XG5cdFx0XHRcdFwiXFxuXCIgKyBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIikgKyBhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhVHJhbnNpdGlvbk1lc3NhZ2VzO1xufVxuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzOiBhbnkpIHtcblx0Y29uc3QgYU1lc3NhZ2VzVG9CZURlbGV0ZWQgPSBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlcywgdHJ1ZSk7XG5cblx0aWYgKGFNZXNzYWdlc1RvQmVEZWxldGVkLmxlbmd0aCA+IDApIHtcblx0XHRDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkucmVtb3ZlTWVzc2FnZXMoYU1lc3NhZ2VzVG9CZURlbGV0ZWQpO1xuXHR9XG59XG5cbi8qKlxuICogU3RhdGljIGZ1bmN0aW9ucyBmb3IgRmlvcmkgTWVzc2FnZSBIYW5kbGluZ1xuICpcbiAqIEBuYW1lc3BhY2VcbiAqIEBhbGlhcyBzYXAuZmUuY29yZS5hY3Rpb25zLm1lc3NhZ2VIYW5kbGluZ1xuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG1lc3NhZ2VIYW5kbGluZzogbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IGdldE1lc3NhZ2VzLFxuXHRzaG93VW5ib3VuZE1lc3NhZ2VzOiBzaG93VW5ib3VuZE1lc3NhZ2VzLFxuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiByZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMsXG5cdG1vZGlmeUVUYWdNZXNzYWdlc09ubHk6IGZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seSxcblx0Z2V0UmV0cnlBZnRlck1lc3NhZ2U6IGdldFJldHJ5QWZ0ZXJNZXNzYWdlLFxuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbWVzc2FnZUhhbmRsaW5nO1xuIl19
633
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0ciIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJOb25lIiwiaUxlbmd0aCIsImxlbmd0aCIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJpIiwiZ2V0VHlwZSIsImZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsIm9NZXNzYWdlTWFuYWdlciIsIm9SZXNvdXJjZUJ1bmRsZSIsImNvbmN1cnJlbnRFZGl0RmxhZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldE9iamVjdCIsImJNZXNzYWdlc01vZGlmaWVkIiwic0V0YWdNZXNzYWdlIiwib01lc3NhZ2UiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uIiwiZ2V0VGV4dCIsInJlbW92ZU1lc3NhZ2VzIiwic2V0TWVzc2FnZSIsInRhcmdldCIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwib01lc3NhZ2VEaWFsb2dNb2RlbCIsImdldE1vZGVsIiwic2V0RGF0YSIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImJNZXNzYWdlRGlhbG9nIiwiZE5vdyIsIkRhdGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwic1JldHJ5QWZ0ZXJNZXNzYWdlIiwicmV0cnlBZnRlciIsImRSZXRyeUFmdGVyIiwib0RhdGVGb3JtYXQiLCJnZXRGdWxsWWVhciIsIkRhdGVGb3JtYXQiLCJnZXREYXRlVGltZUluc3RhbmNlIiwicGF0dGVybiIsImZvcm1hdCIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJvTWVzc2FnZVRlbXBsYXRlIiwiTWVzc2FnZUl0ZW0iLCJ1bmRlZmluZWQiLCJjb3VudGVyIiwicGF0aCIsInRpdGxlIiwic3VidGl0bGUiLCJsb25ndGV4dFVybCIsInR5cGUiLCJkZXNjcmlwdGlvbiIsIm1hcmt1cERlc2NyaXB0aW9uIiwiTWVzc2FnZVZpZXciLCJzaG93RGV0YWlsc1BhZ2VIZWFkZXIiLCJpdGVtU2VsZWN0IiwiaXRlbXMiLCJ0ZW1wbGF0ZSIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsInNob3dVbmJvdW5kTWVzc2FnZXMiLCJhQ3VzdG9tTWVzc2FnZXMiLCJvQ29udGV4dCIsImJIYXNFdGFnTWVzc2FnZSIsImJTaG93Qm91bmRUcmFuc2l0aW9uIiwic2hvd0Vycm9ySW5BUEQiLCJiU2hvd01lc3NhZ2VCb3giLCJiT25seUZvclRlc3QiLCJhVW5ib3VuZE1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJnZXRNZXNzYWdlTWFuYWdlciIsInNIaWdoZXN0UHJpb3JpdHkiLCJzSGlnaGVzdFByaW9yaXR5VGV4dCIsImFGaWx0ZXJzIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIk5FIiwidmFsdWUxIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsImNvbmNhdCIsInB1c2giLCJFUSIsImZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyIsImFDb250cm9sSWRzIiwiaW5kZXgiLCJJbmZpbml0eSIsIm9Db250cm9sIiwiYnlJZCIsImVycm9yRmllbGRDb250cm9sIiwiZmllbGRSYW5raW5EaWFsb2ciLCJEaWFsb2ciLCJnZXRQYXJlbnQiLCJmaW5kRWxlbWVudHMiLCJpbmRleE9mIiwiZm9jdXMiLCJ0ZXN0IiwiY2FzZVNlbnNpdGl2ZSIsIm1lc3NhZ2VDb2RlIiwiY29kZSIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwidGV4dCIsInBlcnNpc3RlbnQiLCJKU09OTW9kZWwiLCJnZXRDb2RlIiwib0xpc3RCaW5kaW5nIiwiYmluZExpc3QiLCJhQ3VycmVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiSXNBY3RpdmVFbnRpdHkiLCJjdXJyZW50Q29udGV4dCIsImV4aXN0aW5nTWVzc2FnZXMiLCJBcnJheSIsImlzQXJyYXkiLCJnZXREYXRhIiwib1VuaXF1ZU9iaiIsImFNb2RlbERhdGFBcnJheSIsImZpbHRlciIsIm9iaiIsImlkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwicmVqZWN0IiwidGhlbiIsIm1lc3NhZ2VIYXNFVGFnIiwib01lc3NhZ2VPYmplY3QiLCJyZXNpemFibGUiLCJlbmRCdXR0b24iLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRNaWRkbGUiLCJUZXh0IiwiY29udGVudExlZnQiLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwidmVydGljYWxTY3JvbGxpbmciLCJhZnRlckNsb3NlIiwiY2FsbCIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwiQnV0dG9uVHlwZSIsInNldEJlZ2luQnV0dG9uIiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsIkVtcGhhc2l6ZWQiLCJkZXN0cm95QmVnaW5CdXR0b24iLCJnZXRJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyIsInNldFN0YXRlIiwiZ2V0Q3VzdG9tSGVhZGVyIiwiZ2V0Q29udGVudE1pZGRsZSIsInNldFRleHQiLCJvcGVuIiwiY2F0Y2giLCJ0ZWNobmljYWxEZXRhaWxzIiwib3JpZ2luYWxNZXNzYWdlIiwiZm9ybWF0dGVkVGV4dFN0cmluZyIsInJldHJ5QWZ0ZXJNZXNzYWdlIiwiZ2V0QWRkaXRpb25hbFRleHQiLCJnZXRNZXNzYWdlIiwiZm9ybWF0dGVkVGV4dCIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsIk1lc3NhZ2VCb3giLCJlcnJvciIsIm9uQ2xvc2UiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJzUGF0aFRvQmVSZW1vdmVkIiwiZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsIiwib01lc3NhZ2VNb2RlbCIsImxpc3RCaW5kaW5nIiwiU3RhcnRzV2l0aCIsIm1hcCIsImJCb3VuZE1lc3NhZ2VzIiwiYlRyYW5zaXRpb25Pbmx5IiwiYVRyYW5zaXRpb25NZXNzYWdlcyIsImFNZXNzYWdlc1RvQmVEZWxldGVkIiwibWVzc2FnZUhhbmRsaW5nIiwibW9kaWZ5RVRhZ01lc3NhZ2VzT25seSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsibWVzc2FnZUhhbmRsaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBGb3JtYXR0ZWRUZXh0IGZyb20gXCJzYXAvbS9Gb3JtYXR0ZWRUZXh0XCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IE1lc3NhZ2VJdGVtIGZyb20gXCJzYXAvbS9NZXNzYWdlSXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgTWVzc2FnZVZpZXcgZnJvbSBcInNhcC9tL01lc3NhZ2VWaWV3XCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IEljb25Qb29sIGZyb20gXCJzYXAvdWkvY29yZS9JY29uUG9vbFwiO1xuaW1wb3J0IENvcmVMaWIgZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBDb3JlRXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5cbmNvbnN0IE1lc3NhZ2VUeXBlID0gQ29yZUxpYi5NZXNzYWdlVHlwZTtcbmxldCBhTWVzc2FnZUxpc3Q6IGFueVtdID0gW107XG5sZXQgYU1lc3NhZ2VEYXRhTGlzdDogYW55W10gPSBbXTtcbmxldCBhUmVzb2x2ZUZ1bmN0aW9uczogYW55W10gPSBbXTtcbmxldCBvRGlhbG9nOiBEaWFsb2c7XG5sZXQgb0JhY2tCdXR0b246IEJ1dHRvbjtcbmxldCBvTWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXG5leHBvcnQgdHlwZSBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogKGJCb3VuZE1lc3NhZ2VzPzogYW55LCBiVHJhbnNpdGlvbk9ubHk/OiBhbnkpID0+IGFueVtdO1xuXHRzaG93VW5ib3VuZE1lc3NhZ2VzOiAoXG5cdFx0YUN1c3RvbU1lc3NhZ2VzPzogYW55W10sXG5cdFx0b0NvbnRleHQ/OiBhbnksXG5cdFx0Ykhhc0V0YWdNZXNzYWdlPzogYm9vbGVhbixcblx0XHRiU2hvd0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW4sXG5cdFx0c2hvd0Vycm9ySW5BUEQ/OiBib29sZWFuLFxuXHRcdGJTaG93TWVzc2FnZUJveD86IGJvb2xlYW4sXG5cdFx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0XHRiT25seUZvclRlc3Q/OiBib29sZWFuXG5cdCkgPT4gUHJvbWlzZTxhbnk+O1xuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoKSA9PiB2b2lkO1xuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiAob01lc3NhZ2VNYW5hZ2VyOiBhbnksIG9SZXNvdXJjZUJ1bmRsZTogYW55LCBjb25jdXJyZW50RWRpdEZsYWc6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykgPT4gdm9pZDtcblx0Z2V0UmV0cnlBZnRlck1lc3NhZ2U6IChvTWVzc2FnZTogYW55LCBiTWVzc2FnZURpYWxvZz86IGFueSkgPT4gYW55O1xuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IChvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4pID0+IGFueTtcbn07XG5cbmZ1bmN0aW9uIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpIHtcblx0bGV0IHNQcmV2aW91c0dyb3VwTmFtZTogc3RyaW5nO1xuXG5cdC8vIEluc2VydCB0ZWNobmljYWwgZGV0YWlsIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnREZXRhaWwob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRyZXR1cm4gb1Byb3BlcnR5LnByb3BlcnR5XG5cdFx0XHQ/IFwiKCAke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ID8gKFwiPHA+JyArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5LnN1YnN0cihNYXRoLm1heChvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpLCBvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIuXCIpKSArIDEpICtcblx0XHRcdFx0XHQnIDogXCIgKyAnICtcblx0XHRcdFx0XHRcIiR7XCIgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSArXG5cdFx0XHRcdFx0J30gKyBcIjwvcD5cIikgOiBcIlwiICknXG5cdFx0XHQ6IFwiXCI7XG5cdH1cblx0Ly8gSW5zZXJ0IGdyb3VwbmFtZSBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0R3JvdXBOYW1lKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0bGV0IHNIVE1MID0gXCJcIjtcblx0XHRpZiAob1Byb3BlcnR5Lmdyb3VwTmFtZSAmJiBvUHJvcGVydHkucHJvcGVydHkgJiYgb1Byb3BlcnR5Lmdyb3VwTmFtZSAhPT0gc1ByZXZpb3VzR3JvdXBOYW1lKSB7XG5cdFx0XHRzSFRNTCArPSBcIiggJHtcIiArIG9Qcm9wZXJ0eS5wcm9wZXJ0eSArICd9ID8gXCI8YnI+PGgzPicgKyBvUHJvcGVydHkuZ3JvdXBOYW1lICsgJzwvaDM+XCIgOiBcIlwiICkgKyAnO1xuXHRcdFx0c1ByZXZpb3VzR3JvdXBOYW1lID0gb1Byb3BlcnR5Lmdyb3VwTmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIHNIVE1MO1xuXHR9XG5cblx0Ly8gTGlzdCBvZiB0ZWNobmljYWwgZGV0YWlscyB0byBiZSBzaG93blxuXHRmdW5jdGlvbiBnZXRQYXRocygpIHtcblx0XHRjb25zdCBzVEQgPSBcInRlY2huaWNhbERldGFpbHNcIjsgLy8gbmFtZSBvZiBwcm9wZXJ0eSBpbiBtZXNzYWdlIG1vZGVsIGRhdGEgZm9yIHRlY2huaWNhbCBkZXRhaWxzXG5cdFx0cmV0dXJuIFtcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJcIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L3N0YXR1c2AgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJcIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L3N0YXR1c1RleHRgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiQXBwbGljYXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9Db21wb25lbnRJZGAgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJBcHBsaWNhdGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VJZGAgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJBcHBsaWNhdGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VSZXBvc2l0b3J5YCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkFwcGxpY2F0aW9uXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVZlcnNpb25gIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL0FuYWx5c2lzYCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9Ob3RlYCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9EZXRhaWxlZE5vdGVgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXhjZXB0aW9uQ2F0ZWdvcnlgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uVGltZVN0YW1wYCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLlRyYW5zYWN0aW9uSWRgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiTWVzc2FnZXNcIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL2NvZGVgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiTWVzc2FnZXNcIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL21lc3NhZ2VgIH1cblx0XHRdO1xuXHR9XG5cblx0bGV0IHNIVE1MID0gXCJPYmplY3Qua2V5cyhcIiArIFwiJHt0ZWNobmljYWxEZXRhaWxzfVwiICsgJykubGVuZ3RoID4gMCA/IFwiPGgyPlRlY2huaWNhbCBEZXRhaWxzPC9oMj5cIiA6IFwiXCIgJztcblx0Z2V0UGF0aHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSkge1xuXHRcdHNIVE1MID0gYCR7c0hUTUwgKyBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5KX0ke2luc2VydERldGFpbChvUHJvcGVydHkpfSArIGA7XG5cdH0pO1xuXHRyZXR1cm4gc0hUTUw7XG59XG5mdW5jdGlvbiBmbkZvcm1hdERlc2NyaXB0aW9uKCkge1xuXHRyZXR1cm4gXCIoJHtcIiArICdkZXNjcmlwdGlvbn0gPyAoXCI8aDI+RGVzY3JpcHRpb248L2gyPlwiICsgJHsnICsgJ2Rlc2NyaXB0aW9ufSkgOiBcIlwiKSc7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSB0eXBlKEVycm9yL1dhcm5pbmcvU3VjY2Vzcy9JbmZvcm1hdGlvbikgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5tZXNzYWdlSGFuZGxpbmcuZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5XG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5tZXNzYWdlSGFuZGxpbmdcbiAqIEBwYXJhbSBbYU1lc3NhZ2VzXSBNZXNzYWdlcyBsaXN0XG4gKiBAcmV0dXJucyBIaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShhTWVzc2FnZXM6IGFueVtdKSB7XG5cdGxldCBzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgaUxlbmd0aCA9IGFNZXNzYWdlcy5sZW5ndGg7XG5cdGNvbnN0IG9NZXNzYWdlQ291bnQ6IGFueSA9IHsgRXJyb3I6IDAsIFdhcm5pbmc6IDAsIFN1Y2Nlc3M6IDAsIEluZm9ybWF0aW9uOiAwIH07XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpTGVuZ3RoOyBpKyspIHtcblx0XHQrK29NZXNzYWdlQ291bnRbYU1lc3NhZ2VzW2ldLmdldFR5cGUoKV07XG5cdH1cblx0aWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuRXJyb3JdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLldhcm5pbmddID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuU3VjY2Vzc10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uO1xuXHR9XG5cdHJldHVybiBzTWVzc2FnZVByaW9yaXR5O1xufVxuLy8gZnVuY3Rpb24gd2hpY2ggbW9kaWZ5IGUtVGFnIG1lc3NhZ2VzIG9ubHkuXG4vLyByZXR1cm5zIDogdHJ1ZSwgaWYgYW55IGUtVGFnIG1lc3NhZ2UgaXMgbW9kaWZpZWQsIG90aGVyd2lzZSBmYWxzZS5cbmZ1bmN0aW9uIGZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seShvTWVzc2FnZU1hbmFnZXI6IGFueSwgb1Jlc291cmNlQnVuZGxlOiBhbnksIGNvbmN1cnJlbnRFZGl0RmxhZzogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuXHRjb25zdCBhTWVzc2FnZXMgPSBvTWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0T2JqZWN0KFwiL1wiKTtcblx0bGV0IGJNZXNzYWdlc01vZGlmaWVkID0gZmFsc2U7XG5cdGxldCBzRXRhZ01lc3NhZ2UgPSBcIlwiO1xuXHRhTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IGFueSwgaTogYW55KSB7XG5cdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCk7XG5cdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDQxMikge1xuXHRcdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzLmlzQ29uY3VycmVudE1vZGlmaWNhdGlvbiAmJiBjb25jdXJyZW50RWRpdEZsYWcpIHtcblx0XHRcdFx0c0V0YWdNZXNzYWdlID1cblx0XHRcdFx0XHRzRXRhZ01lc3NhZ2UgfHwgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19URUNITklDQUxfSVNTVUVTX0NPTkNVUlJFTlRfTU9ESUZJQ0FUSU9OXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c0V0YWdNZXNzYWdlID0gc0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU1wiKTtcblx0XHRcdH1cblx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNbaV0pO1xuXHRcdFx0b01lc3NhZ2Uuc2V0TWVzc2FnZShzRXRhZ01lc3NhZ2UpO1xuXHRcdFx0b01lc3NhZ2UudGFyZ2V0ID0gXCJcIjtcblx0XHRcdG9NZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRiTWVzc2FnZXNNb2RpZmllZCA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJNZXNzYWdlc01vZGlmaWVkO1xufVxuLy8gRGlhbG9nIGNsb3NlIEhhbmRsaW5nXG5mdW5jdGlvbiBkaWFsb2dDbG9zZUhhbmRsZXIoKSB7XG5cdG9EaWFsb2cuY2xvc2UoKTtcblx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZShmYWxzZSk7XG5cdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsOiBhbnkgPSBvTWVzc2FnZVZpZXcuZ2V0TW9kZWwoKTtcblx0aWYgKG9NZXNzYWdlRGlhbG9nTW9kZWwpIHtcblx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoe30pO1xuXHR9XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcbn1cbmZ1bmN0aW9uIGdldFJldHJ5QWZ0ZXJNZXNzYWdlKG9NZXNzYWdlOiBhbnksIGJNZXNzYWdlRGlhbG9nPzogYW55KSB7XG5cdGNvbnN0IGROb3cgPSBuZXcgRGF0ZSgpO1xuXHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKTtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0bGV0IHNSZXRyeUFmdGVyTWVzc2FnZTtcblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0Y29uc3QgZFJldHJ5QWZ0ZXIgPSBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyO1xuXHRcdGxldCBvRGF0ZUZvcm1hdDtcblx0XHRpZiAoZE5vdy5nZXRGdWxsWWVhcigpICE9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL2RpZmZlcmVudCB5ZWFyc1xuXHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQsIHl5eXkgJ2F0JyBoaDptbSBhXCJcblx0XHRcdH0pO1xuXHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0fSBlbHNlIGlmIChkTm93LmdldEZ1bGxZZWFyKCkgPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9zYW1lIHllYXJcblx0XHRcdGlmIChiTWVzc2FnZURpYWxvZykge1xuXHRcdFx0XHQvL2xlc3MgdGhhbiAyIG1pblxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBgJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfVElUTEVcIil9ICR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0RFU0NcIlxuXHRcdFx0XHQpfWA7XG5cdFx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0TW9udGgoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0TW9udGgoKSB8fCBkTm93LmdldERhdGUoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RGF0ZSgpKSB7XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQgJ2F0JyBoaDptbSBhXCJcblx0XHRcdFx0fSk7IC8vZGlmZmVyZW50IG1vbnRocyBvciBkaWZmZXJlbnQgZGF5cyBvZiBzYW1lIG1vbnRoXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9zYW1lIGRheVxuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJoaDptbSBhXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9EQVlcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmICFvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX05PX1JFVFJZX0FGVEVSXCIpO1xuXHR9XG5cdHJldHVybiBzUmV0cnlBZnRlck1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4pIHtcblx0bGV0IG9NZXNzYWdlVGVtcGxhdGU6IE1lc3NhZ2VJdGVtO1xuXHRpZiAoIWJTdHJpY3RIYW5kbGluZ0Zsb3cpIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRkZXNjcmlwdGlvbjpcblx0XHRcdFx0XCJ7PSAke1wiICtcblx0XHRcdFx0XCJkZXNjcmlwdGlvbn0gfHwgJHt0ZWNobmljYWxEZXRhaWxzfSA/IFwiICtcblx0XHRcdFx0J1wiPGh0bWw+PGJvZHk+XCIgKyAnICtcblx0XHRcdFx0Zm5Gb3JtYXREZXNjcmlwdGlvbigpICtcblx0XHRcdFx0XCIgKyBcIiArXG5cdFx0XHRcdGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpICtcblx0XHRcdFx0J1wiPC9ib2R5PjwvaHRtbD5cIicgK1xuXHRcdFx0XHQnIDogXCJcIiB9Jyxcblx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh7XG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIlxuXHRcdH0pO1xuXHR9XG5cdG9NZXNzYWdlVmlldyA9IG5ldyBNZXNzYWdlVmlldyh7XG5cdFx0c2hvd0RldGFpbHNQYWdlSGVhZGVyOiBmYWxzZSxcblx0XHRpdGVtU2VsZWN0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdH0sXG5cdFx0aXRlbXM6IHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0dGVtcGxhdGU6IG9NZXNzYWdlVGVtcGxhdGVcblx0XHR9XG5cdH0pO1xuXHRvQmFja0J1dHRvbiA9XG5cdFx0b0JhY2tCdXR0b24gfHxcblx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdGljb246IEljb25Qb29sLmdldEljb25VUkkoXCJuYXYtYmFja1wiKSxcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0cHJlc3M6IGZ1bmN0aW9uICh0aGlzOiBCdXR0b24pIHtcblx0XHRcdFx0b01lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHQvLyBVcGRhdGUgcHJvcGVyIEVUYWcgTWlzbWF0Y2ggZXJyb3Jcblx0b01lc3NhZ2VWaWV3LnNldE1vZGVsKG9NZXNzYWdlRGlhbG9nTW9kZWwpO1xuXHRyZXR1cm4ge1xuXHRcdG9NZXNzYWdlVmlldyxcblx0XHRvQmFja0J1dHRvblxuXHR9O1xufVxuXG5mdW5jdGlvbiBzaG93VW5ib3VuZE1lc3NhZ2VzKFxuXHR0aGlzOiBtZXNzYWdlSGFuZGxpbmdUeXBlLFxuXHRhQ3VzdG9tTWVzc2FnZXM/OiBhbnlbXSxcblx0b0NvbnRleHQ/OiBhbnksXG5cdGJIYXNFdGFnTWVzc2FnZT86IGJvb2xlYW4sXG5cdGJTaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0c2hvd0Vycm9ySW5BUEQ/OiBib29sZWFuLFxuXHRiU2hvd01lc3NhZ2VCb3g/OiBib29sZWFuLFxuXHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuLFxuXHRiT25seUZvclRlc3Q/OiBib29sZWFuXG4pOiBQcm9taXNlPGFueT4ge1xuXHRsZXQgYVVuYm91bmRNZXNzYWdlcyA9IHRoaXMuZ2V0TWVzc2FnZXMoKTtcblx0Y29uc3Qgb01lc3NhZ2VNYW5hZ2VyID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRsZXQgc0hpZ2hlc3RQcmlvcml0eTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHlUZXh0O1xuXHRjb25zdCBhRmlsdGVycyA9IFtcblx0XHRuZXcgRmlsdGVyKHsgcGF0aDogXCJjb2RlXCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBudWxsIH0pLFxuXHRcdG5ldyBGaWx0ZXIoeyBwYXRoOiBcInBlcnNpc3RlbnRcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLk5FLCB2YWx1ZTE6IGZhbHNlIH0pXG5cdF07XG5cdGxldCBzaG93TWVzc2FnZURpYWxvZzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuXHRcdHNob3dNZXNzYWdlQm94OiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cblx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0YVVuYm91bmRNZXNzYWdlcyA9IGFVbmJvdW5kTWVzc2FnZXMuY29uY2F0KGdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTtcblx0XHQvLyB3ZSBvbmx5IHdhbnQgdG8gc2hvdyBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIG5vdCBib3VuZCBzdGF0ZSBtZXNzYWdlcyBoZW5jZSBhZGQgYSBmaWx0ZXIgZm9yIHRoZSBzYW1lXG5cdFx0YUZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSwgdmFsdWUxOiB0cnVlIH0pKTtcblx0XHRjb25zdCBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2cgPSBmdW5jdGlvbiAoYUNvbnRyb2xJZHM6IGFueSkge1xuXHRcdFx0bGV0IGluZGV4ID0gSW5maW5pdHksXG5cdFx0XHRcdG9Db250cm9sID0gQ29yZS5ieUlkKGFDb250cm9sSWRzWzBdKSBhcyBNYW5hZ2VkT2JqZWN0O1xuXHRcdFx0Y29uc3QgZXJyb3JGaWVsZENvbnRyb2wgPSBDb3JlLmJ5SWQoYUNvbnRyb2xJZHNbMF0pIGFzIENvbnRyb2w7XG5cdFx0XHR3aGlsZSAob0NvbnRyb2wpIHtcblx0XHRcdFx0Y29uc3QgZmllbGRSYW5raW5EaWFsb2cgPVxuXHRcdFx0XHRcdG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nXG5cdFx0XHRcdFx0XHQ/IChlcnJvckZpZWxkQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBhbnkpLmZpbmRFbGVtZW50cyh0cnVlKS5pbmRleE9mKGVycm9yRmllbGRDb250cm9sKVxuXHRcdFx0XHRcdFx0OiBJbmZpbml0eTtcblx0XHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nKSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4ID4gZmllbGRSYW5raW5EaWFsb2cpIHtcblx0XHRcdFx0XHRcdGluZGV4ID0gZmllbGRSYW5raW5EaWFsb2c7XG5cdFx0XHRcdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBkaWFsb2cncyBjb250cm9sXG5cdFx0XHRcdFx0XHRlcnJvckZpZWxkQ29udHJvbC5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBtZXNzYWdlcyB3aXRoIHRhcmdldCBpbnNpZGUgc2FwLm0uRGlhbG9nIHNob3VsZCBub3QgYnJpbmcgdXAgdGhlIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHRcdGFGaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdHRlc3Q6IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIG9ubHkgdW5ib3VuZCBtZXNzYWdlcyBoYXZlIHRvIGJlIHNob3duIHNvIGFkZCBmaWx0ZXIgYWNjb3JkaW5nbHlcblx0XHRhRmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBcInRhcmdldFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogXCJcIiB9KSk7XG5cdH1cblx0aWYgKGFDdXN0b21NZXNzYWdlcyAmJiBhQ3VzdG9tTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0YUN1c3RvbU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VDb2RlID0gb01lc3NhZ2UuY29kZSA/IG9NZXNzYWdlLmNvZGUgOiBcIlwiO1xuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLmFkZE1lc3NhZ2VzKFxuXHRcdFx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0bWVzc2FnZTogb01lc3NhZ2UudGV4dCxcblx0XHRcdFx0XHR0eXBlOiBvTWVzc2FnZS50eXBlLFxuXHRcdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdGNvZGU6IG1lc3NhZ2VDb2RlXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0Ly9UaGUgdGFyZ2V0IGFuZCBwZXJzaXN0ZW50IHByb3BlcnRpZXMgb2YgdGhlIG1lc3NhZ2UgYXJlIGhhcmRjb2RlZCBhcyBcIlwiIGFuZCB0cnVlIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGRlYWxzIHdpdGggb25seSB1bmJvdW5kIG1lc3NhZ2VzLlxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSAob01lc3NhZ2VWaWV3ICYmIChvTWVzc2FnZVZpZXcuZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwpKSB8fCBuZXcgSlNPTk1vZGVsKCk7XG5cdGlmIChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiAoYVVuYm91bmRNZXNzYWdlc1swXS5nZXRDb2RlKCkgPT09IFwiNTAzXCIgfHwgYlNob3dNZXNzYWdlQm94KSkge1xuXHRcdGlmIChhVW5ib3VuZE1lc3NhZ2VzWzBdLmdldENvZGUoKSAhPT0gXCI1MDNcIikge1xuXHRcdFx0c2hvd01lc3NhZ2VCb3ggPSAhc2hvd0Vycm9ySW5BUEQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNob3dNZXNzYWdlQm94ID0gdHJ1ZTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYUZpbHRlcnMpLFxuXHRcdFx0YUN1cnJlbnRDb250ZXh0cyA9IG9MaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0XHRpZiAoYUN1cnJlbnRDb250ZXh0cyAmJiBhQ3VycmVudENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIERvbid0IHNob3cgZGlhbG9nIGluY2FzZSB0aGVyZSBhcmUgbm8gZXJyb3JzIHRvIHNob3dcblx0XHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dD8uZ2V0T2JqZWN0KCk/LklzQWN0aXZlRW50aXR5ICYmICFzaG93RXJyb3JJbkFQRCkge1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9ICFzaG93RXJyb3JJbkFQRDtcblx0XHRcdH0gLy8gaWYgZmFsc2UsIHNob3cgbWVzc2FnZXMgaW4gZGlhbG9nXG5cdFx0XHQvLyBBcyBmaXRlcmluZyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBoZXJlIGhlbmNlXG5cdFx0XHQvLyB1c2luZyB0aGUgbWVzc2FnZSBtb2RlbCBhZ2FpbiBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcgYW5kIHRoZW4gZmlsdGVyaW5nIG9uIHRoYXQgYmluZGluZyBhZ2FpbiBpcyB1bm5lY2Vzc2FyeS5cblx0XHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdFx0Y29uc3QgYU1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRcdFx0YUN1cnJlbnRDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChjdXJyZW50Q29udGV4dDogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9NZXNzYWdlID0gY3VycmVudENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGFNZXNzYWdlcy5wdXNoKG9NZXNzYWdlKTtcblx0XHRcdFx0YU1lc3NhZ2VEYXRhTGlzdCA9IGFNZXNzYWdlcztcblx0XHRcdH0pO1xuXHRcdFx0Ly8gaWYoYU1lc3NhZ2VzLmxlbmd0aCA9PT0gMCAmJiBhTWVzc2FnZUxpc3QubGVuZ3RoKSB7XG5cdFx0XHQvLyBcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YShhTWVzc2FnZXMpO1xuXHRcdFx0Ly8gfVxuXHRcdFx0bGV0IGV4aXN0aW5nTWVzc2FnZXM6IGFueVtdID0gW107XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKSkpIHtcblx0XHRcdFx0ZXhpc3RpbmdNZXNzYWdlcyA9IG9NZXNzYWdlRGlhbG9nTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb1VuaXF1ZU9iajogYW55ID0ge307XG5cdFx0XHRsZXQgYU1vZGVsRGF0YUFycmF5OiBhbnlbXSA9IFtdO1xuXHRcdFx0YU1vZGVsRGF0YUFycmF5ID0gYU1lc3NhZ2VEYXRhTGlzdC5jb25jYXQoZXhpc3RpbmdNZXNzYWdlcykuZmlsdGVyKGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdFx0Ly8gcmVtb3ZlIGVudHJpZXMgaGF2aW5nIGR1cGxpY2F0ZSBtZXNzYWdlIGlkc1xuXHRcdFx0XHRyZXR1cm4gIW9VbmlxdWVPYmpbb2JqLmlkXSAmJiAob1VuaXF1ZU9ialtvYmouaWRdID0gdHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YShhTW9kZWxEYXRhQXJyYXkpO1xuXHRcdH1cblx0fVxuXHRpZiAoYVVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDAgJiYgIWFDdXN0b21NZXNzYWdlcyAmJiAhYkhhc0V0YWdNZXNzYWdlKSB7XG5cdFx0Ly8gRG9uJ3Qgc2hvdyB0aGUgcG9wdXAgaWYgdGhlcmUgYXJlIG5vIHRyYW5zaWVudCBtZXNzYWdlc1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH0gZWxzZSBpZiAoYVVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgYVVuYm91bmRNZXNzYWdlc1swXS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MgJiYgIWFDdXN0b21NZXNzYWdlcykge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3coYVVuYm91bmRNZXNzYWdlc1swXS5tZXNzYWdlKTtcblx0XHRcdGlmIChvTWVzc2FnZURpYWxvZ01vZGVsKSB7XG5cdFx0XHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdFx0XHR9XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMoYVVuYm91bmRNZXNzYWdlcyk7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoc2hvd01lc3NhZ2VEaWFsb2cpIHtcblx0XHRhUmVzb2x2ZUZ1bmN0aW9ucyA9IGFSZXNvbHZlRnVuY3Rpb25zIHx8IFtdO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0YVJlc29sdmVGdW5jdGlvbnMucHVzaChyZXNvbHZlKTtcblx0XHRcdChDb3JlIGFzIENvcmVFeClcblx0XHRcdFx0LmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIsIHRydWUpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGU6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IGJTdHJpY3RIYW5kbGluZ0Zsb3cgPSBmYWxzZTtcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlSGFzRVRhZyA9IGZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seShvTWVzc2FnZU1hbmFnZXIsIG9SZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnKTtcblx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93KTtcblx0XHRcdFx0XHRvRGlhbG9nID1cblx0XHRcdFx0XHRcdG9EaWFsb2cgfHxcblx0XHRcdFx0XHRcdG5ldyBEaWFsb2coe1xuXHRcdFx0XHRcdFx0XHRyZXNpemFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gYWxzbyByZW1vdmUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpZiB3ZSB3ZXJlIHNob3dpbmcgdGhlbVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0NMT1NFXCIpXG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRjdXN0b21IZWFkZXI6IG5ldyBCYXIoe1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnRNaWRkbGU6IFtcblx0XHRcdFx0XHRcdFx0XHRcdG5ldyBUZXh0KHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnRMZWZ0OiBbb0JhY2tCdXR0b25dXG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMzcuNWVtXCIsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnRIZWlnaHQ6IFwiMjEuNWVtXCIsXG5cdFx0XHRcdFx0XHRcdHZlcnRpY2FsU2Nyb2xsaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVJlc29sdmVGdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zW2ldLmNhbGwoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YVJlc29sdmVGdW5jdGlvbnMgPSBbXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0b0RpYWxvZy5yZW1vdmVBbGxDb250ZW50KCk7XG5cdFx0XHRcdFx0b0RpYWxvZy5hZGRDb250ZW50KG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldyk7XG5cblx0XHRcdFx0XHRpZiAobWVzc2FnZUhhc0VUYWcpIHtcblx0XHRcdFx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC9tL0J1dHRvblR5cGVcIl0sIGZ1bmN0aW9uIChCdXR0b25UeXBlOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0b0RpYWxvZy5zZXRCZWdpbkJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dC5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9SRUZSRVNIXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogQnV0dG9uVHlwZS5FbXBoYXNpemVkXG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3lCZWdpbkJ1dHRvbigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzSGlnaGVzdFByaW9yaXR5ID0gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KG9NZXNzYWdlVmlldy5nZXRJdGVtcygpKTtcblx0XHRcdFx0XHRzSGlnaGVzdFByaW9yaXR5VGV4dCA9IGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5KTtcblx0XHRcdFx0XHRvRGlhbG9nLnNldFN0YXRlKHNIaWdoZXN0UHJpb3JpdHkpO1xuXHRcdFx0XHRcdChvRGlhbG9nLmdldEN1c3RvbUhlYWRlcigpIGFzIGFueSkuZ2V0Q29udGVudE1pZGRsZSgpWzBdLnNldFRleHQoc0hpZ2hlc3RQcmlvcml0eVRleHQpO1xuXHRcdFx0XHRcdG9NZXNzYWdlVmlldy5uYXZpZ2F0ZUJhY2soKTtcblx0XHRcdFx0XHRvRGlhbG9nLm9wZW4oKTtcblx0XHRcdFx0XHRpZiAoYk9ubHlGb3JUZXN0KSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKG9EaWFsb2cpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoc2hvd01lc3NhZ2VCb3gpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlID0gYVVuYm91bmRNZXNzYWdlc1swXTtcblx0XHRcdGlmIChvTWVzc2FnZS50ZWNobmljYWxEZXRhaWxzICYmIGFNZXNzYWdlTGlzdC5pbmRleE9mKG9NZXNzYWdlLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlLm1lc3NhZ2UpID09PSAtMSkge1xuXHRcdFx0XHRhTWVzc2FnZUxpc3QucHVzaChvTWVzc2FnZS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZS5tZXNzYWdlKTtcblx0XHRcdFx0bGV0IGZvcm1hdHRlZFRleHRTdHJpbmcgPSBcIjxodG1sPjxib2R5PlwiO1xuXHRcdFx0XHRjb25zdCByZXRyeUFmdGVyTWVzc2FnZSA9IGdldFJldHJ5QWZ0ZXJNZXNzYWdlKG9NZXNzYWdlLCB0cnVlKTtcblx0XHRcdFx0aWYgKHJldHJ5QWZ0ZXJNZXNzYWdlKSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGA8aDY+JHtyZXRyeUFmdGVyTWVzc2FnZX08L2g2Pjxicj5gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvTWVzc2FnZS5nZXRDb2RlKCkgIT09IFwiNTAzXCIgJiYgb01lc3NhZ2UuZ2V0QWRkaXRpb25hbFRleHQoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRBZGRpdGlvbmFsVGV4dCgpfTogJHtvTWVzc2FnZS5nZXRNZXNzYWdlKCl9PC9odG1sPjwvYm9keT5gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nICsgb01lc3NhZ2UuZ2V0TWVzc2FnZSgpfTwvaHRtbD48L2JvZHk+YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZWRUZXh0OiBhbnkgPSBuZXcgRm9ybWF0dGVkVGV4dCh7XG5cdFx0XHRcdFx0aHRtbFRleHQ6IGZvcm1hdHRlZFRleHRTdHJpbmdcblx0XHRcdFx0fSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3IoZm9ybWF0dGVkVGV4dCwge1xuXHRcdFx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHk6IGFueSkge1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRzd2l0Y2ggKHNIaWdoZXN0UHJpb3JpdHkpIHtcblx0XHRjYXNlIFwiRXJyb3JcIjpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfRVJST1JcIik7XG5cdFx0Y2FzZSBcIkluZm9ybWF0aW9uXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIpO1xuXHRcdGNhc2UgXCJTdWNjZXNzXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9TVUNDRVNTXCIpO1xuXHRcdGNhc2UgXCJXYXJuaW5nXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9XQVJOSU5HXCIpO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKTtcblx0fVxufVxuZnVuY3Rpb24gcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbDogYW55LCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSB7XG5cdGlmIChzUGF0aFRvQmVSZW1vdmVkID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gb01lc3NhZ2VNb2RlbC5iaW5kTGlzdChcIi9cIik7XG5cdGxpc3RCaW5kaW5nLmZpbHRlcihcblx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdHBhdGg6IFwidGFyZ2V0XCIsXG5cdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuU3RhcnRzV2l0aCxcblx0XHRcdHZhbHVlMTogc1BhdGhUb0JlUmVtb3ZlZFxuXHRcdH0pXG5cdCk7XG5cblx0cmV0dXJuIGxpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpLm1hcChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0fSk7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYm9vbGVhbiA9IGZhbHNlLCBiVHJhbnNpdGlvbk9ubHk6IGJvb2xlYW4gPSBmYWxzZSwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykge1xuXHRsZXQgaTtcblx0Y29uc3Qgb01lc3NhZ2VNYW5hZ2VyID0gKENvcmUgYXMgQ29yZUV4IGFzIGFueSkuZ2V0TWVzc2FnZU1hbmFnZXIoKSxcblx0XHRvTWVzc2FnZU1vZGVsID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLFxuXHRcdG9SZXNvdXJjZUJ1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIiksXG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IFtdO1xuXHRsZXQgYU1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRpZiAoYkJvdW5kTWVzc2FnZXMgJiYgYlRyYW5zaXRpb25Pbmx5ICYmIHNQYXRoVG9CZVJlbW92ZWQpIHtcblx0XHRhTWVzc2FnZXMgPSBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbCwgc1BhdGhUb0JlUmVtb3ZlZCk7XG5cdH0gZWxzZSB7XG5cdFx0YU1lc3NhZ2VzID0gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGZvciAoaSA9IDA7IGkgPCBhTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHQoIWJUcmFuc2l0aW9uT25seSB8fCBhTWVzc2FnZXNbaV0ucGVyc2lzdGVudCkgJiZcblx0XHRcdCgoYkJvdW5kTWVzc2FnZXMgJiYgYU1lc3NhZ2VzW2ldLnRhcmdldCAhPT0gXCJcIikgfHwgKCFiQm91bmRNZXNzYWdlcyAmJiAoIWFNZXNzYWdlc1tpXS50YXJnZXQgfHwgYU1lc3NhZ2VzW2ldLnRhcmdldCA9PT0gXCJcIikpKSAmJlxuXHRcdFx0YU1lc3NhZ2VzW2ldLmNvZGVcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMucHVzaChhTWVzc2FnZXNbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGZvciAoaSA9IDA7IGkgPCBhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5jb2RlID09PSBcIjUwM1wiICYmXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2UgIT09IFwiXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZS5pbmRleE9mKG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKSkgPT09IC0xXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2UgPSBgXFxuJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIil9JHtcblx0XHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5tZXNzYWdlXG5cdFx0XHR9YDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFUcmFuc2l0aW9uTWVzc2FnZXM7XG59XG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoYkJvdW5kTWVzc2FnZXM6IGFueSwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykge1xuXHRjb25zdCBhTWVzc2FnZXNUb0JlRGVsZXRlZCA9IGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzLCB0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcblxuXHRpZiAoYU1lc3NhZ2VzVG9CZURlbGV0ZWQubGVuZ3RoID4gMCkge1xuXHRcdENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNUb0JlRGVsZXRlZCk7XG5cdH1cbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIGZvciBGaW9yaSBNZXNzYWdlIEhhbmRsaW5nXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIHNhcC5mZS5jb3JlLmFjdGlvbnMubWVzc2FnZUhhbmRsaW5nXG4gKiBAcHJpdmF0ZVxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjU2LjBcbiAqL1xuY29uc3QgbWVzc2FnZUhhbmRsaW5nOiBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogZ2V0TWVzc2FnZXMsXG5cdHNob3dVbmJvdW5kTWVzc2FnZXM6IHNob3dVbmJvdW5kTWVzc2FnZXMsXG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMsXG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5LFxuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogZ2V0UmV0cnlBZnRlck1lc3NhZ2UsXG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXNzYWdlSGFuZGxpbmc7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7RUFxQkEsSUFBTUEsV0FBVyxHQUFHQyxPQUFPLENBQUNELFdBQTVCO0VBQ0Es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