@sapui5/sap.fe.core 1.100.0 → 1.102.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 (295) hide show
  1. package/package.json +4 -4
  2. package/src/sap/fe/core/.library +2 -3
  3. package/src/sap/fe/core/AppComponent.js +23 -30
  4. package/src/sap/fe/core/AppComponent.ts +35 -40
  5. package/src/sap/fe/core/AppStateHandler.js +8 -8
  6. package/src/sap/fe/core/AppStateHandler.ts +11 -11
  7. package/src/sap/fe/core/BaseController.js +9 -9
  8. package/src/sap/fe/core/BaseController.ts +3 -4
  9. package/src/sap/fe/core/CommonUtils.js +122 -101
  10. package/src/sap/fe/core/CommonUtils.ts +239 -193
  11. package/src/sap/fe/core/ExtensionAPI.js +12 -13
  12. package/src/sap/fe/core/ExtensionAPI.ts +21 -31
  13. package/src/sap/fe/core/PageController.js +19 -13
  14. package/src/sap/fe/core/PageController.ts +40 -34
  15. package/src/sap/fe/core/TemplateComponent.js +198 -123
  16. package/src/sap/fe/core/TemplateComponent.ts +109 -121
  17. package/src/sap/fe/core/TemplateModel.js +7 -9
  18. package/src/sap/fe/core/TemplateModel.ts +3 -3
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +935 -0
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +837 -0
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
  27. package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
  28. package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
  29. package/src/sap/fe/core/controllerextensions/EditFlow.js +660 -288
  30. package/src/sap/fe/core/controllerextensions/EditFlow.ts +513 -331
  31. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -11
  32. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -7
  33. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +43 -25
  34. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +132 -103
  35. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +16 -16
  36. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +64 -55
  37. package/src/sap/fe/core/controllerextensions/InternalRouting.js +166 -99
  38. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +187 -149
  39. package/src/sap/fe/core/controllerextensions/KPIManagement.js +14 -14
  40. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -11
  41. package/src/sap/fe/core/controllerextensions/MassEdit.js +13 -12
  42. package/src/sap/fe/core/controllerextensions/MassEdit.ts +22 -22
  43. package/src/sap/fe/core/controllerextensions/MessageHandler.js +14 -26
  44. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +20 -30
  45. package/src/sap/fe/core/controllerextensions/PageReady.js +25 -23
  46. package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -47
  47. package/src/sap/fe/core/controllerextensions/Paginator.js +24 -15
  48. package/src/sap/fe/core/controllerextensions/Paginator.ts +35 -20
  49. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -10
  50. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  51. package/src/sap/fe/core/controllerextensions/Routing.js +11 -11
  52. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  53. package/src/sap/fe/core/controllerextensions/Share.js +34 -16
  54. package/src/sap/fe/core/controllerextensions/Share.ts +50 -32
  55. package/src/sap/fe/core/controllerextensions/SideEffects.js +15 -15
  56. package/src/sap/fe/core/controllerextensions/SideEffects.ts +64 -65
  57. package/src/sap/fe/core/controllerextensions/ViewState.js +27 -31
  58. package/src/sap/fe/core/controllerextensions/ViewState.ts +103 -102
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
  60. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +98 -0
  61. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
  62. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +90 -132
  63. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +146 -0
  64. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +18 -8
  65. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +264 -0
  66. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +35 -33
  67. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +100 -0
  68. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
  69. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1584 -0
  70. package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +190 -159
  71. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +780 -0
  72. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +329 -76
  73. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1149 -0
  74. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +169 -97
  75. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +190 -0
  76. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/sticky.ts +76 -12
  77. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +592 -0
  78. package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +83 -60
  79. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +940 -0
  80. package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +52 -36
  81. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
  82. package/src/sap/fe/core/controls/Any.js +28 -0
  83. package/src/sap/fe/core/controls/Any.ts +30 -0
  84. package/src/sap/fe/core/controls/CommandExecution.js +50 -16
  85. package/src/sap/fe/core/controls/CommandExecution.ts +31 -22
  86. package/src/sap/fe/core/controls/ConditionalWrapper.js +136 -65
  87. package/src/sap/fe/core/controls/ConditionalWrapper.ts +49 -58
  88. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +371 -0
  89. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +282 -0
  90. package/src/sap/fe/core/controls/CustomQuickViewPage.js +74 -36
  91. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +23 -32
  92. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +52 -5
  93. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +127 -67
  94. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +127 -67
  95. package/src/sap/fe/core/controls/FieldWrapper.js +171 -87
  96. package/src/sap/fe/core/controls/FieldWrapper.ts +69 -80
  97. package/src/sap/fe/core/controls/FileWrapper.js +360 -0
  98. package/src/sap/fe/core/controls/FileWrapper.ts +202 -0
  99. package/src/sap/fe/core/controls/FilterBar.js +154 -119
  100. package/src/sap/fe/core/controls/FilterBar.ts +128 -123
  101. package/src/sap/fe/core/controls/FormElementWrapper.js +102 -37
  102. package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -35
  103. package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
  104. package/src/sap/fe/core/controls/MassEditSelect.ts +45 -0
  105. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +111 -89
  106. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +86 -82
  107. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -193
  108. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +211 -204
  109. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +152 -116
  110. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +105 -105
  111. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -2
  112. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +23 -28
  113. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +41 -81
  114. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
  115. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +550 -35
  116. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +604 -35
  117. package/src/sap/fe/core/converters/ManifestSettings.js +3 -1
  118. package/src/sap/fe/core/converters/ManifestSettings.ts +9 -2
  119. package/src/sap/fe/core/converters/MetaModelConverter.js +11 -40
  120. package/src/sap/fe/core/converters/MetaModelConverter.ts +56 -84
  121. package/src/sap/fe/core/converters/annotations/DataField.js +20 -5
  122. package/src/sap/fe/core/converters/annotations/DataField.ts +27 -6
  123. package/src/sap/fe/core/converters/controls/Common/Action.js +14 -21
  124. package/src/sap/fe/core/converters/controls/Common/Action.ts +23 -28
  125. package/src/sap/fe/core/converters/controls/Common/Chart.js +17 -10
  126. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -14
  127. package/src/sap/fe/core/converters/controls/Common/Form.js +16 -18
  128. package/src/sap/fe/core/converters/controls/Common/Form.ts +20 -20
  129. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  130. package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -3
  131. package/src/sap/fe/core/converters/controls/Common/Table.js +389 -173
  132. package/src/sap/fe/core/converters/controls/Common/Table.ts +440 -244
  133. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +26 -16
  134. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +27 -19
  135. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +78 -47
  136. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +146 -107
  137. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
  138. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
  139. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +30 -25
  140. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +39 -34
  141. package/src/sap/fe/core/converters/helpers/Aggregation.js +10 -2
  142. package/src/sap/fe/core/converters/helpers/Aggregation.ts +18 -13
  143. package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
  144. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +6 -5
  145. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  146. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
  147. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +27 -24
  148. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +49 -40
  149. package/src/sap/fe/core/converters/templates/ListReportConverter.js +33 -22
  150. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +77 -62
  151. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +28 -28
  152. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +38 -45
  153. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -3
  154. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +8 -6
  155. package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
  156. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
  157. package/src/sap/fe/core/formatters/TableFormatter.js +74 -13
  158. package/src/sap/fe/core/formatters/TableFormatter.ts +71 -16
  159. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
  160. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
  161. package/src/sap/fe/core/fpm/Component.js +46 -17
  162. package/src/sap/fe/core/fpm/Component.ts +11 -16
  163. package/src/sap/fe/core/helpers/AppStartupHelper.js +4 -4
  164. package/src/sap/fe/core/helpers/AppStartupHelper.ts +3 -3
  165. package/src/sap/fe/core/helpers/BindingExpression.js +10 -7
  166. package/src/sap/fe/core/helpers/BindingExpression.ts +37 -35
  167. package/src/sap/fe/core/helpers/ClassSupport.js +273 -256
  168. package/src/sap/fe/core/helpers/ClassSupport.ts +315 -237
  169. package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
  170. package/src/sap/fe/core/helpers/FPMHelper.ts +9 -8
  171. package/src/sap/fe/core/helpers/MassEditHelper.js +522 -147
  172. package/src/sap/fe/core/helpers/MassEditHelper.ts +563 -236
  173. package/src/sap/fe/core/helpers/ModelHelper.js +29 -1
  174. package/src/sap/fe/core/helpers/ModelHelper.ts +39 -26
  175. package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
  176. package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
  177. package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -3
  178. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +3 -1
  179. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  180. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
  181. package/src/sap/fe/core/helpers/StableIdHelper.js +5 -7
  182. package/src/sap/fe/core/helpers/StableIdHelper.ts +8 -8
  183. package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
  184. package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
  185. package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
  186. package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
  187. package/src/sap/fe/core/library.js +13 -5
  188. package/src/sap/fe/core/library.ts +26 -17
  189. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  190. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -3
  191. package/src/sap/fe/core/messagebundle.properties +135 -180
  192. package/src/sap/fe/core/messagebundle_ar.properties +31 -64
  193. package/src/sap/fe/core/messagebundle_bg.properties +31 -64
  194. package/src/sap/fe/core/messagebundle_ca.properties +31 -64
  195. package/src/sap/fe/core/messagebundle_cs.properties +31 -64
  196. package/src/sap/fe/core/messagebundle_cy.properties +32 -65
  197. package/src/sap/fe/core/messagebundle_da.properties +31 -64
  198. package/src/sap/fe/core/messagebundle_de.properties +29 -62
  199. package/src/sap/fe/core/messagebundle_el.properties +32 -65
  200. package/src/sap/fe/core/messagebundle_en.properties +32 -65
  201. package/src/sap/fe/core/messagebundle_en_GB.properties +29 -62
  202. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -74
  203. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +32 -65
  204. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +20 -6
  205. package/src/sap/fe/core/messagebundle_es.properties +31 -64
  206. package/src/sap/fe/core/messagebundle_es_MX.properties +31 -64
  207. package/src/sap/fe/core/messagebundle_et.properties +31 -64
  208. package/src/sap/fe/core/messagebundle_fi.properties +29 -62
  209. package/src/sap/fe/core/messagebundle_fr.properties +36 -69
  210. package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -66
  211. package/src/sap/fe/core/messagebundle_hi.properties +29 -62
  212. package/src/sap/fe/core/messagebundle_hr.properties +32 -65
  213. package/src/sap/fe/core/messagebundle_hu.properties +30 -63
  214. package/src/sap/fe/core/messagebundle_id.properties +32 -65
  215. package/src/sap/fe/core/messagebundle_it.properties +31 -64
  216. package/src/sap/fe/core/messagebundle_iw.properties +31 -64
  217. package/src/sap/fe/core/messagebundle_ja.properties +29 -62
  218. package/src/sap/fe/core/messagebundle_kk.properties +31 -64
  219. package/src/sap/fe/core/messagebundle_ko.properties +31 -64
  220. package/src/sap/fe/core/messagebundle_lt.properties +31 -64
  221. package/src/sap/fe/core/messagebundle_lv.properties +32 -65
  222. package/src/sap/fe/core/messagebundle_ms.properties +31 -64
  223. package/src/sap/fe/core/messagebundle_nl.properties +31 -64
  224. package/src/sap/fe/core/messagebundle_no.properties +31 -64
  225. package/src/sap/fe/core/messagebundle_pl.properties +34 -67
  226. package/src/sap/fe/core/messagebundle_pt.properties +32 -65
  227. package/src/sap/fe/core/messagebundle_pt_PT.properties +31 -64
  228. package/src/sap/fe/core/messagebundle_ro.properties +33 -66
  229. package/src/sap/fe/core/messagebundle_ru.properties +33 -66
  230. package/src/sap/fe/core/messagebundle_sh.properties +31 -64
  231. package/src/sap/fe/core/messagebundle_sk.properties +31 -64
  232. package/src/sap/fe/core/messagebundle_sl.properties +29 -62
  233. package/src/sap/fe/core/messagebundle_sv.properties +30 -63
  234. package/src/sap/fe/core/messagebundle_th.properties +31 -64
  235. package/src/sap/fe/core/messagebundle_tr.properties +31 -64
  236. package/src/sap/fe/core/messagebundle_uk.properties +32 -65
  237. package/src/sap/fe/core/messagebundle_vi.properties +31 -64
  238. package/src/sap/fe/core/messagebundle_zh_CN.properties +32 -65
  239. package/src/sap/fe/core/messagebundle_zh_TW.properties +34 -67
  240. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +4 -4
  241. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
  242. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +5 -5
  243. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -2
  244. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +11 -8
  245. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -13
  246. package/src/sap/fe/core/services/NavigationServiceFactory.js +5 -5
  247. package/src/sap/fe/core/services/NavigationServiceFactory.ts +9 -5
  248. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -4
  249. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +1 -1
  250. package/src/sap/fe/core/services/RoutingServiceFactory.js +105 -66
  251. package/src/sap/fe/core/services/RoutingServiceFactory.ts +59 -49
  252. package/src/sap/fe/core/services/ShellServicesFactory.js +104 -29
  253. package/src/sap/fe/core/services/ShellServicesFactory.ts +64 -30
  254. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
  255. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
  256. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +11 -10
  257. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +38 -51
  258. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
  259. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +6 -3
  260. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  261. package/src/sap/fe/core/support/CommonHelper.ts +0 -3
  262. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -9
  263. package/src/sap/fe/core/templating/DataModelPathHelper.ts +32 -38
  264. package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
  265. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +27 -6
  266. package/src/sap/fe/core/templating/EntitySetHelper.js +1 -9
  267. package/src/sap/fe/core/templating/EntitySetHelper.ts +11 -13
  268. package/src/sap/fe/core/templating/FilterHelper.js +4 -4
  269. package/src/sap/fe/core/templating/FilterHelper.ts +6 -5
  270. package/src/sap/fe/core/templating/PropertyHelper.js +70 -33
  271. package/src/sap/fe/core/templating/PropertyHelper.ts +49 -27
  272. package/src/sap/fe/core/templating/UIFormatters.js +133 -22
  273. package/src/sap/fe/core/templating/UIFormatters.ts +144 -50
  274. package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
  275. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
  276. package/src/sap/fe/core/type/Email.js +26 -8
  277. package/src/sap/fe/core/type/Email.ts +8 -7
  278. package/src/sap/fe/core/AnnotationHelper.js +0 -312
  279. package/src/sap/fe/core/AnnotationHelper.ts +0 -315
  280. package/src/sap/fe/core/RouterProxy.js +0 -926
  281. package/src/sap/fe/core/TransactionHelper.js +0 -1562
  282. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -392
  283. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +0 -136
  284. package/src/sap/fe/core/actions/collaboration/Manage.js +0 -262
  285. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +0 -103
  286. package/src/sap/fe/core/actions/draft.js +0 -523
  287. package/src/sap/fe/core/actions/messageHandling.js +0 -567
  288. package/src/sap/fe/core/actions/nonDraft.js +0 -20
  289. package/src/sap/fe/core/actions/nonDraft.ts +0 -12
  290. package/src/sap/fe/core/actions/operations.js +0 -1096
  291. package/src/sap/fe/core/actions/sticky.js +0 -130
  292. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -78
  293. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +0 -65
  294. package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
  295. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
@@ -1,567 +0,0 @@
1
- /*!
2
- * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
- */
5
- sap.ui.define(["sap/m/MessageToast", "sap/m/MessageItem", "sap/m/MessageView", "sap/m/Button", "sap/m/Dialog", "sap/m/Text", "sap/ui/core/library", "sap/ui/model/Filter", "sap/ui/model/FilterOperator", "sap/ui/core/message/Message", "sap/ui/core/IconPool", "sap/ui/model/json/JSONModel", "sap/ui/core/format/DateFormat", "sap/m/Bar", "sap/m/MessageBox", "sap/m/FormattedText"], function (MessageToast, MessageItem, MessageView, Button, Dialog, Text, CoreLib, Filter, FilterOperator, Message, IconPool, JSONModel, DateFormat, Bar, MessageBox, FormattedText) {
6
- "use strict";
7
-
8
- var MessageType = CoreLib.MessageType;
9
- var aMessageList = [];
10
- var aMessageDataList = [];
11
- var aResolveFunctions = [];
12
- var oDialog;
13
- var oBackButton;
14
- var oMessageTemplate;
15
- var oMessageView;
16
-
17
- function fnFormatTechnicalDetails() {
18
- var sPreviousGroupName; // Insert technical detail if it exists
19
-
20
- function insertDetail(oProperty) {
21
- return oProperty.property ? "( ${" + oProperty.property + '} ? ("<p>' + oProperty.property.substr(Math.max(oProperty.property.lastIndexOf("/"), oProperty.property.lastIndexOf(".")) + 1) + ' : " + ' + "${" + oProperty.property + '} + "</p>") : "" )' : "";
22
- } // Insert groupname if it exists
23
-
24
-
25
- function insertGroupName(oProperty) {
26
- var sHTML = "";
27
-
28
- if (oProperty.groupName && oProperty.property && oProperty.groupName !== sPreviousGroupName) {
29
- sHTML += "( ${" + oProperty.property + '} ? "<br><h3>' + oProperty.groupName + '</h3>" : "" ) + ';
30
- sPreviousGroupName = oProperty.groupName;
31
- }
32
-
33
- return sHTML;
34
- } // List of technical details to be shown
35
-
36
-
37
- function getPaths() {
38
- var sTD = "technicalDetails"; // name of property in message model data for technical details
39
-
40
- return [{
41
- "groupName": "",
42
- "property": sTD + "/status"
43
- }, {
44
- "groupName": "",
45
- "property": sTD + "/statusText"
46
- }, {
47
- "groupName": "Application",
48
- "property": sTD + "/error/@SAP__common.Application/ComponentId"
49
- }, {
50
- "groupName": "Application",
51
- "property": sTD + "/error/@SAP__common.Application/ServiceId"
52
- }, {
53
- "groupName": "Application",
54
- "property": sTD + "/error/@SAP__common.Application/ServiceRepository"
55
- }, {
56
- "groupName": "Application",
57
- "property": sTD + "/error/@SAP__common.Application/ServiceVersion"
58
- }, {
59
- "groupName": "ErrorResolution",
60
- "property": sTD + "/error/@SAP__common.ErrorResolution/Analysis"
61
- }, {
62
- "groupName": "ErrorResolution",
63
- "property": sTD + "/error/@SAP__common.ErrorResolution/Note"
64
- }, {
65
- "groupName": "ErrorResolution",
66
- "property": sTD + "/error/@SAP__common.ErrorResolution/DetailedNote"
67
- }, {
68
- "groupName": "ErrorResolution",
69
- "property": sTD + "/error/@SAP__common.ExceptionCategory"
70
- }, {
71
- "groupName": "ErrorResolution",
72
- "property": sTD + "/error/@SAP__common.TimeStamp"
73
- }, {
74
- "groupName": "ErrorResolution",
75
- "property": sTD + "/error/@SAP__common.TransactionId"
76
- }, {
77
- "groupName": "Messages",
78
- "property": sTD + "/error/code"
79
- }, {
80
- "groupName": "Messages",
81
- "property": sTD + "/error/message"
82
- }];
83
- }
84
-
85
- var sHTML = "Object.keys(" + "${technicalDetails}" + ').length > 0 ? "<h2>Technical Details</h2>" : "" ';
86
- getPaths().forEach(function (oProperty) {
87
- sHTML = sHTML + insertGroupName(oProperty) + "" + insertDetail(oProperty) + " + ";
88
- });
89
- return sHTML;
90
- }
91
-
92
- function fnFormatDescription() {
93
- var sHTML = "(${" + 'description} ? ("<h2>Description</h2>" + ${' + 'description}) : "")';
94
- return sHTML;
95
- }
96
- /**
97
- * Calculates the highest priority message type(Error/Warning/Success/Information) from the available messages.
98
-
99
- * @function
100
- * @name sap.fe.core.actions.messageHandling.fnGetHighestMessagePriority
101
- * @memberof sap.fe.core.actions.messageHandling
102
- * @param {Array} [aMessages] Messages list
103
- * @returns {string} Highest priority message from the available messages
104
- * @private
105
- * @ui5-restricted
106
- */
107
-
108
-
109
- function fnGetHighestMessagePriority(aMessages) {
110
- var sMessagePriority = MessageType.None;
111
- var iLength = aMessages.length;
112
- var oMessageCount = {
113
- Error: 0,
114
- Warning: 0,
115
- Success: 0,
116
- Information: 0
117
- };
118
-
119
- for (var i = 0; i < iLength; i++) {
120
- ++oMessageCount[aMessages[i].getType()];
121
- }
122
-
123
- if (oMessageCount[MessageType.Error] > 0) {
124
- sMessagePriority = MessageType.Error;
125
- } else if (oMessageCount[MessageType.Warning] > 0) {
126
- sMessagePriority = MessageType.Warning;
127
- } else if (oMessageCount[MessageType.Success] > 0) {
128
- sMessagePriority = MessageType.Success;
129
- } else if (oMessageCount[MessageType.Information] > 0) {
130
- sMessagePriority = MessageType.Information;
131
- }
132
-
133
- return sMessagePriority;
134
- } // function which modify e-Tag messages only.
135
- // returns : true, if any e-Tag message is modified, otherwise false.
136
-
137
-
138
- function fnModifyETagMessagesOnly(oMessageManager, oResourceBundle) {
139
- var aMessages = oMessageManager.getMessageModel().getObject("/");
140
- var bMessagesModified = false;
141
- var sEtagMessage = "";
142
- aMessages.forEach(function (oMessage, i) {
143
- var oTechnicalDetails = oMessage.getTechnicalDetails();
144
-
145
- if (oTechnicalDetails && oTechnicalDetails.httpStatus === 412) {
146
- sEtagMessage = sEtagMessage || oResourceBundle.getText("C_APP_COMPONENT_SAPFE_ETAG_TECHNICAL_ISSUES");
147
- oMessageManager.removeMessages(aMessages[i]);
148
- oMessage.setMessage(sEtagMessage);
149
- oMessage.target = "";
150
- oMessageManager.addMessages(oMessage);
151
- bMessagesModified = true;
152
- }
153
- });
154
- return bMessagesModified;
155
- } // Dialog close Handling
156
-
157
-
158
- function dialogCloseHandler() {
159
- oDialog.close();
160
- oBackButton.setVisible(false);
161
- aMessageList = [];
162
- removeUnboundTransitionMessages();
163
- }
164
-
165
- function getRetryAfterMessage(oMessage, bMessageDialog) {
166
- var dNow = new Date();
167
- var oTechnicalDetails = oMessage.getTechnicalDetails();
168
- var oResourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
169
- var sRetryAfterMessage;
170
-
171
- if (oTechnicalDetails && oTechnicalDetails.httpStatus === 503 && oTechnicalDetails.retryAfter) {
172
- var dRetryAfter = oTechnicalDetails.retryAfter;
173
- var oDateFormat;
174
-
175
- if (dNow.getFullYear() !== dRetryAfter.getFullYear()) {
176
- //different years
177
- oDateFormat = DateFormat.getDateTimeInstance({
178
- pattern: "MMMM dd, yyyy 'at' hh:mm a"
179
- });
180
- sRetryAfterMessage = oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_ERROR", [oDateFormat.format(dRetryAfter)]);
181
- } else if (dNow.getFullYear() == dRetryAfter.getFullYear()) {
182
- //same year
183
- if (bMessageDialog) {
184
- //less than 2 min
185
- sRetryAfterMessage = oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_TITLE") + " " + oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_DESC");
186
- } else if (dNow.getMonth() !== dRetryAfter.getMonth() || dNow.getDate() !== dRetryAfter.getDate()) {
187
- oDateFormat = DateFormat.getDateTimeInstance({
188
- pattern: "MMMM dd 'at' hh:mm a"
189
- }); //different months or different days of same month
190
-
191
- sRetryAfterMessage = oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_ERROR", [oDateFormat.format(dRetryAfter)]);
192
- } else {
193
- //same day
194
- oDateFormat = DateFormat.getDateTimeInstance({
195
- pattern: "hh:mm a"
196
- });
197
- sRetryAfterMessage = oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_ERROR_DAY", [oDateFormat.format(dRetryAfter)]);
198
- }
199
- }
200
- }
201
-
202
- if (oTechnicalDetails && oTechnicalDetails.httpStatus === 503 && !oTechnicalDetails.retryAfter) {
203
- sRetryAfterMessage = oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_ERROR_NO_RETRY_AFTER");
204
- }
205
-
206
- return sRetryAfterMessage;
207
- }
208
-
209
- function prepareMessageViewForDialog(oMessageDialogModel, bStrictHandlingFlow) {
210
- if (!bStrictHandlingFlow) {
211
- oMessageTemplate = oMessageTemplate || new MessageItem(undefined, {
212
- counter: {
213
- path: "counter"
214
- },
215
- title: "{message}",
216
- subtitle: "{additionalText}",
217
- longtextUrl: "{descriptionUrl}",
218
- type: {
219
- path: "type"
220
- },
221
- description: "{= ${" + "description} || ${technicalDetails} ? " + '"<html><body>" + ' + fnFormatDescription() + " + " + fnFormatTechnicalDetails() + '"</body></html>"' + ' : "" }',
222
- markupDescription: true
223
- });
224
- } else {
225
- oMessageTemplate = new MessageItem({
226
- title: "{message}",
227
- type: "Warning",
228
- longtextUrl: "{descriptionUrl}"
229
- });
230
- }
231
-
232
- oMessageView = oMessageView || new MessageView({
233
- showDetailsPageHeader: false,
234
- itemSelect: function () {
235
- oBackButton.setVisible(true);
236
- },
237
- items: {
238
- path: "/",
239
- template: oMessageTemplate
240
- }
241
- });
242
- oBackButton = oBackButton || new Button({
243
- icon: IconPool.getIconURI("nav-back"),
244
- visible: false,
245
- press: function () {
246
- oMessageView.navigateBack();
247
- this.setVisible(false);
248
- }
249
- }); // Update proper ETag Mismatch error
250
-
251
- oMessageView.setModel(oMessageDialogModel);
252
- return {
253
- oMessageView: oMessageView,
254
- oBackButton: oBackButton
255
- };
256
- }
257
-
258
- function showUnboundMessages(aCustomMessages, oContext, bHasEtagMessage, bShowBoundTransition) {
259
- var aUnboundMessages = this.getMessages();
260
- var oMessageManager = sap.ui.getCore().getMessageManager();
261
- var sHighestPriority;
262
- var sHighestPriorityText;
263
- var aFilters = [new Filter({
264
- path: "code",
265
- operator: FilterOperator.NE,
266
- value1: null
267
- }), new Filter({
268
- path: "persistent",
269
- operator: FilterOperator.NE,
270
- value1: false
271
- })];
272
- var showMessageDialog = false,
273
- showMessageBox = false;
274
-
275
- if (bShowBoundTransition) {
276
- aUnboundMessages = aUnboundMessages.concat(getMessages(true, true)); // we only want to show bound transition messages not bound state messages hence add a filter for the same
277
-
278
- aFilters.push(new Filter({
279
- path: "persistent",
280
- operator: FilterOperator.EQ,
281
- value1: true
282
- }));
283
-
284
- var fnCheckControlIdInDialog = function (aControlIds) {
285
- var index = Infinity,
286
- oControl = sap.ui.getCore().byId(aControlIds[0]);
287
- var errorFieldControl = sap.ui.getCore().byId(aControlIds[0]);
288
-
289
- while (oControl) {
290
- var fieldRankinDialog = oControl instanceof Dialog ? errorFieldControl.getParent().findElements(true).indexOf(errorFieldControl) : Infinity;
291
-
292
- if (oControl instanceof Dialog) {
293
- if (index > fieldRankinDialog) {
294
- index = fieldRankinDialog; // Set the focus to the dialog's control
295
-
296
- errorFieldControl.focus();
297
- } // messages with target inside sap.m.Dialog should not bring up the message dialog
298
-
299
-
300
- return false;
301
- }
302
-
303
- oControl = oControl.getParent();
304
- }
305
-
306
- return true;
307
- };
308
-
309
- aFilters.push(new Filter({
310
- path: "controlIds",
311
- test: fnCheckControlIdInDialog,
312
- caseSensitive: true
313
- }));
314
- } else {
315
- // only unbound messages have to be shown so add filter accordingly
316
- aFilters.push(new Filter({
317
- path: "target",
318
- operator: FilterOperator.EQ,
319
- value1: ""
320
- }));
321
- }
322
-
323
- if (aCustomMessages && aCustomMessages.length) {
324
- aCustomMessages.forEach(function (oMessage) {
325
- var messageCode = oMessage.code ? oMessage.code : "";
326
- oMessageManager.addMessages(new Message({
327
- message: oMessage.text,
328
- type: oMessage.type,
329
- target: "",
330
- persistent: true,
331
- code: messageCode
332
- })); //The target and persistent properties of the message are hardcoded as "" and true because the function deals with only unbound messages.
333
- });
334
- }
335
-
336
- var oMessageDialogModel = new JSONModel();
337
-
338
- if (aUnboundMessages.length === 1 && aUnboundMessages[0].getCode() === "503") {
339
- showMessageBox = true;
340
- } else {
341
- var oListBinding = oMessageManager.getMessageModel().bindList("/", undefined, undefined, aFilters),
342
- aCurrentContexts = oListBinding.getCurrentContexts();
343
-
344
- if (aCurrentContexts && aCurrentContexts.length > 0) {
345
- // Don't show dialog incase there are no errors to show
346
- showMessageDialog = true; // As fitering has already happened here hence
347
- // using the message model again for the message dialog view and then filtering on that binding again is unnecessary.
348
- // So we create new json model to use for the message dialog view.
349
-
350
- var aMessages = [];
351
- aCurrentContexts.forEach(function (oContext) {
352
- var oMessage;
353
-
354
- if (oContext.getObject().technicalDetails && aMessageList.indexOf(oContext.getObject().technicalDetails.originalMessage.message) === -1) {
355
- aMessageList.push(oContext.getObject().technicalDetails.originalMessage.message);
356
- oMessage = oContext.getObject();
357
- aMessages.push(oMessage);
358
- aMessageDataList = aMessages;
359
- } else if (!oContext.getObject().technicalDetails) {
360
- oMessage = oContext.getObject();
361
- aMessages.push(oMessage);
362
- aMessageDataList = aMessages;
363
- }
364
- }); // if(aMessages.length === 0 && aMessageList.length) {
365
- // oMessageDialogModel.setData(aMessages);
366
- // }
367
-
368
- oMessageDialogModel.setData(aMessageDataList);
369
- }
370
- }
371
-
372
- if (aUnboundMessages.length === 0 && !aCustomMessages && !bHasEtagMessage) {
373
- // Don't show the popup if there are no transient messages
374
- return Promise.resolve(true);
375
- } else if (aUnboundMessages.length === 1 && aUnboundMessages[0].getType() === MessageType.Success && !aCustomMessages) {
376
- return new Promise(function (resolve) {
377
- MessageToast.show(aUnboundMessages[0].message);
378
- oMessageManager.removeMessages(aUnboundMessages);
379
- resolve();
380
- });
381
- } else if (showMessageDialog) {
382
- aResolveFunctions = aResolveFunctions || [];
383
- return new Promise(function (resolve, reject) {
384
- aResolveFunctions.push(resolve);
385
- sap.ui.getCore().getLibraryResourceBundle("sap.fe.core", true).then(function (oResourceBundle) {
386
- var bStrictHandlingFlow = false;
387
- var bHasEtagMessage = fnModifyETagMessagesOnly(oMessageManager, oResourceBundle);
388
- var oMessageObject = prepareMessageViewForDialog(oMessageDialogModel, bStrictHandlingFlow);
389
- oDialog = oDialog || new Dialog({
390
- resizable: true,
391
- content: oMessageObject.oMessageView,
392
- endButton: new Button({
393
- press: function () {
394
- dialogCloseHandler(); // also remove bound transition messages if we were showing them
395
-
396
- if (bShowBoundTransition) {
397
- removeBoundTransitionMessages();
398
- }
399
- },
400
- text: oResourceBundle.getText("C_COMMON_SAPFE_CLOSE")
401
- }),
402
- customHeader: new Bar({
403
- contentMiddle: [new Text({
404
- text: oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE")
405
- })],
406
- contentLeft: [oBackButton]
407
- }),
408
- contentWidth: "37.5em",
409
- contentHeight: "21.5em",
410
- verticalScrolling: false,
411
- afterClose: function () {
412
- for (var i = 0; i < aResolveFunctions.length; i++) {
413
- aResolveFunctions[i].call();
414
- }
415
-
416
- aResolveFunctions = [];
417
- }
418
- });
419
-
420
- if (bHasEtagMessage) {
421
- sap.ui.require(["sap/m/ButtonType"], function (ButtonType) {
422
- oDialog.setBeginButton(new Button({
423
- press: function () {
424
- dialogCloseHandler();
425
-
426
- if (oContext.hasPendingChanges()) {
427
- oContext.getBinding().resetChanges();
428
- }
429
-
430
- oContext.refresh();
431
- },
432
- text: oResourceBundle.getText("C_COMMON_SAPFE_REFRESH"),
433
- type: ButtonType.Emphasized
434
- }));
435
- });
436
- } else {
437
- oDialog.destroyBeginButton();
438
- }
439
-
440
- sHighestPriority = fnGetHighestMessagePriority(oMessageView.getItems());
441
- sHighestPriorityText = getTranslatedTextForMessageDialog(sHighestPriority);
442
- oDialog.setState(sHighestPriority);
443
- oDialog.getCustomHeader().getContentMiddle()[0].setText(sHighestPriorityText);
444
- oMessageView.navigateBack();
445
- oDialog.open();
446
- }).catch(reject);
447
- });
448
- } else if (showMessageBox) {
449
- return new Promise(function (resolve) {
450
- var oMessage = aUnboundMessages[0];
451
-
452
- if (oMessage.technicalDetails && aMessageList.indexOf(oMessage.technicalDetails.originalMessage.message) === -1) {
453
- aMessageList.push(oMessage.technicalDetails.originalMessage.message);
454
- var formattedTextString = "<html><body>";
455
- var retryAfterMessage = getRetryAfterMessage(oMessage, true);
456
-
457
- if (retryAfterMessage) {
458
- formattedTextString = "<h6>" + retryAfterMessage + "</h6><br>";
459
- }
460
-
461
- formattedTextString = formattedTextString + oMessage.getMessage() + "</html></body>";
462
- var formattedText = new FormattedText({
463
- htmlText: formattedTextString
464
- });
465
- MessageBox.error(formattedText, {
466
- onClose: function () {
467
- aMessageList = [];
468
-
469
- if (bShowBoundTransition) {
470
- removeBoundTransitionMessages();
471
- }
472
-
473
- removeUnboundTransitionMessages();
474
- resolve(true);
475
- }
476
- });
477
- }
478
- });
479
- } else {
480
- return Promise.resolve(true);
481
- }
482
- }
483
-
484
- function getTranslatedTextForMessageDialog(sHighestPriority) {
485
- var oResourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
486
-
487
- switch (sHighestPriority) {
488
- case "Error":
489
- return oResourceBundle.getText("C_COMMON_SAPFE_ERROR_MESSAGES_PAGE_TITLE_ERROR");
490
-
491
- case "Information":
492
- return oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE_INFO");
493
-
494
- case "Success":
495
- return oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE_SUCCESS");
496
-
497
- case "Warning":
498
- return oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE_WARNING");
499
-
500
- default:
501
- return oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE");
502
- }
503
- }
504
-
505
- function removeUnboundTransitionMessages() {
506
- removeTransitionMessages(false);
507
- }
508
-
509
- function removeBoundTransitionMessages() {
510
- removeTransitionMessages(true);
511
- }
512
-
513
- function getMessages() {
514
- var bBoundMessages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
515
- var bTransitionOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
516
- var i;
517
- var oMessageManager = sap.ui.getCore().getMessageManager(),
518
- oMessageModel = oMessageManager.getMessageModel(),
519
- aMessages = oMessageModel.getObject("/"),
520
- oResourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core"),
521
- aTransitionMessages = [];
522
-
523
- for (i = 0; i < aMessages.length; i++) {
524
- if ((!bTransitionOnly || aMessages[i].persistent) && (bBoundMessages && aMessages[i].target !== "" || !bBoundMessages && (!aMessages[i].target || aMessages[i].target === "")) && aMessages[i].code) {
525
- aTransitionMessages.push(aMessages[i]);
526
- }
527
- }
528
-
529
- for (i = 0; i < aTransitionMessages.length; i++) {
530
- if (aTransitionMessages[i].code === "503" && aTransitionMessages[i].message !== "" && aTransitionMessages[i].message.indexOf(oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_BACKEND_PREFIX")) === -1) {
531
- aTransitionMessages[i].message = "\n" + oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_BACKEND_PREFIX") + aTransitionMessages[i].message;
532
- }
533
- }
534
-
535
- return aTransitionMessages;
536
- }
537
-
538
- function removeTransitionMessages(bBoundMessages) {
539
- var aMessagesToBeDeleted = getMessages(bBoundMessages, true);
540
-
541
- if (aMessagesToBeDeleted.length > 0) {
542
- sap.ui.getCore().getMessageManager().removeMessages(aMessagesToBeDeleted);
543
- }
544
- }
545
- /**
546
- * Static functions for Fiori Message Handling
547
- *
548
- * @namespace
549
- * @alias sap.fe.core.actions.messageHandling
550
- * @private
551
- * @experimental This module is only for experimental use! <br/><b>This is only a POC and maybe deleted</b>
552
- * @since 1.56.0
553
- */
554
-
555
-
556
- var messageHandling = {
557
- getMessages: getMessages,
558
- showUnboundMessages: showUnboundMessages,
559
- removeUnboundTransitionMessages: removeUnboundTransitionMessages,
560
- removeBoundTransitionMessages: removeBoundTransitionMessages,
561
- modifyETagMessagesOnly: fnModifyETagMessagesOnly,
562
- getRetryAfterMessage: getRetryAfterMessage,
563
- prepareMessageViewForDialog: prepareMessageViewForDialog
564
- };
565
- return messageHandling;
566
- }, false);
567
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1lc3NhZ2VIYW5kbGluZy50cyJdLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVRlbXBsYXRlIiwib01lc3NhZ2VWaWV3IiwiZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzIiwic1ByZXZpb3VzR3JvdXBOYW1lIiwiaW5zZXJ0RGV0YWlsIiwib1Byb3BlcnR5IiwicHJvcGVydHkiLCJzdWJzdHIiLCJNYXRoIiwibWF4IiwibGFzdEluZGV4T2YiLCJpbnNlcnRHcm91cE5hbWUiLCJzSFRNTCIsImdyb3VwTmFtZSIsImdldFBhdGhzIiwic1REIiwiZm9yRWFjaCIsImZuRm9ybWF0RGVzY3JpcHRpb24iLCJmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkiLCJhTWVzc2FnZXMiLCJzTWVzc2FnZVByaW9yaXR5IiwiTm9uZSIsImlMZW5ndGgiLCJsZW5ndGgiLCJvTWVzc2FnZUNvdW50IiwiRXJyb3IiLCJXYXJuaW5nIiwiU3VjY2VzcyIsIkluZm9ybWF0aW9uIiwiaSIsImdldFR5cGUiLCJmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkiLCJvTWVzc2FnZU1hbmFnZXIiLCJvUmVzb3VyY2VCdW5kbGUiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXRPYmplY3QiLCJiTWVzc2FnZXNNb2RpZmllZCIsInNFdGFnTWVzc2FnZSIsIm9NZXNzYWdlIiwib1RlY2huaWNhbERldGFpbHMiLCJnZXRUZWNobmljYWxEZXRhaWxzIiwiaHR0cFN0YXR1cyIsImdldFRleHQiLCJyZW1vdmVNZXNzYWdlcyIsInNldE1lc3NhZ2UiLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsImRpYWxvZ0Nsb3NlSGFuZGxlciIsImNsb3NlIiwic2V0VmlzaWJsZSIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImJNZXNzYWdlRGlhbG9nIiwiZE5vdyIsIkRhdGUiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJzUmV0cnlBZnRlck1lc3NhZ2UiLCJyZXRyeUFmdGVyIiwiZFJldHJ5QWZ0ZXIiLCJvRGF0ZUZvcm1hdCIsImdldEZ1bGxZZWFyIiwiRGF0ZUZvcm1hdCIsImdldERhdGVUaW1lSW5zdGFuY2UiLCJwYXR0ZXJuIiwiZm9ybWF0IiwiZ2V0TW9udGgiLCJnZXREYXRlIiwicHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nIiwib01lc3NhZ2VEaWFsb2dNb2RlbCIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJNZXNzYWdlSXRlbSIsInVuZGVmaW5lZCIsImNvdW50ZXIiLCJwYXRoIiwidGl0bGUiLCJzdWJ0aXRsZSIsImxvbmd0ZXh0VXJsIiwidHlwZSIsImRlc2NyaXB0aW9uIiwibWFya3VwRGVzY3JpcHRpb24iLCJNZXNzYWdlVmlldyIsInNob3dEZXRhaWxzUGFnZUhlYWRlciIsIml0ZW1TZWxlY3QiLCJpdGVtcyIsInRlbXBsYXRlIiwiQnV0dG9uIiwiaWNvbiIsIkljb25Qb29sIiwiZ2V0SWNvblVSSSIsInZpc2libGUiLCJwcmVzcyIsIm5hdmlnYXRlQmFjayIsInNldE1vZGVsIiwic2hvd1VuYm91bmRNZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsIm9Db250ZXh0IiwiYkhhc0V0YWdNZXNzYWdlIiwiYlNob3dCb3VuZFRyYW5zaXRpb24iLCJhVW5ib3VuZE1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJnZXRNZXNzYWdlTWFuYWdlciIsInNIaWdoZXN0UHJpb3JpdHkiLCJzSGlnaGVzdFByaW9yaXR5VGV4dCIsImFGaWx0ZXJzIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIk5FIiwidmFsdWUxIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsImNvbmNhdCIsInB1c2giLCJFUSIsImZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyIsImFDb250cm9sSWRzIiwiaW5kZXgiLCJJbmZpbml0eSIsIm9Db250cm9sIiwiYnlJZCIsImVycm9yRmllbGRDb250cm9sIiwiZmllbGRSYW5raW5EaWFsb2ciLCJEaWFsb2ciLCJnZXRQYXJlbnQiLCJmaW5kRWxlbWVudHMiLCJpbmRleE9mIiwiZm9jdXMiLCJ0ZXN0IiwiY2FzZVNlbnNpdGl2ZSIsIm1lc3NhZ2VDb2RlIiwiY29kZSIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwidGV4dCIsInBlcnNpc3RlbnQiLCJKU09OTW9kZWwiLCJnZXRDb2RlIiwib0xpc3RCaW5kaW5nIiwiYmluZExpc3QiLCJhQ3VycmVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwidGVjaG5pY2FsRGV0YWlscyIsIm9yaWdpbmFsTWVzc2FnZSIsInNldERhdGEiLCJQcm9taXNlIiwicmVzb2x2ZSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJyZWplY3QiLCJ0aGVuIiwib01lc3NhZ2VPYmplY3QiLCJyZXNpemFibGUiLCJjb250ZW50IiwiZW5kQnV0dG9uIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TWlkZGxlIiwiVGV4dCIsImNvbnRlbnRMZWZ0IiwiY29udGVudFdpZHRoIiwiY29udGVudEhlaWdodCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiYWZ0ZXJDbG9zZSIsImNhbGwiLCJyZXF1aXJlIiwiQnV0dG9uVHlwZSIsInNldEJlZ2luQnV0dG9uIiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaCIsIkVtcGhhc2l6ZWQiLCJkZXN0cm95QmVnaW5CdXR0b24iLCJnZXRJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyIsInNldFN0YXRlIiwiZ2V0Q3VzdG9tSGVhZGVyIiwiZ2V0Q29udGVudE1pZGRsZSIsInNldFRleHQiLCJvcGVuIiwiY2F0Y2giLCJmb3JtYXR0ZWRUZXh0U3RyaW5nIiwicmV0cnlBZnRlck1lc3NhZ2UiLCJnZXRNZXNzYWdlIiwiZm9ybWF0dGVkVGV4dCIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsIk1lc3NhZ2VCb3giLCJlcnJvciIsIm9uQ2xvc2UiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJiQm91bmRNZXNzYWdlcyIsImJUcmFuc2l0aW9uT25seSIsIm9NZXNzYWdlTW9kZWwiLCJhVHJhbnNpdGlvbk1lc3NhZ2VzIiwiYU1lc3NhZ2VzVG9CZURlbGV0ZWQiLCJtZXNzYWdlSGFuZGxpbmciLCJtb2RpZnlFVGFnTWVzc2FnZXNPbmx5Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBa0JBLE1BQU1BLFdBQVcsR0FBR0MsT0FBTyxDQUFDRCxXQUE1QjtBQUNBLE1BQUlFLFlBQW1CLEdBQUcsRUFBMUI7QUFDQSxNQUFJQyxnQkFBdUIsR0FBRyxFQUE5QjtBQUNBLE1BQUlDLGlCQUF3QixHQUFHLEVBQS9CO0FBQ0EsTUFBSUMsT0FBSjtBQUNBLE1BQUlDLFdBQUo7QUFDQSxNQUFJQyxnQkFBSjtBQUNBLE1BQUlDLFlBQUo7O0FBaUJBLFdBQVNDLHdCQUFULEdBQW9DO0FBQ25DLFFBQUlDLGtCQUFKLENBRG1DLENBR25DOztBQUNBLGFBQVNDLFlBQVQsQ0FBc0JDLFNBQXRCLEVBQXNDO0FBQ3JDLGFBQU9BLFNBQVMsQ0FBQ0MsUUFBVixHQUNKLFNBQ0FELFNBQVMsQ0FBQ0MsUUFEVixHQUVBLFdBRkEsR0FHQUQsU0FBUyxDQUFDQyxRQUFWLENBQW1CQyxNQUFuQixDQUEwQkMsSUFBSSxDQUFDQyxHQUFMLENBQVNKLFNBQVMsQ0FBQ0MsUUFBVixDQUFtQkksV0FBbkIsQ0FBK0IsR0FBL0IsQ0FBVCxFQUE4Q0wsU0FBUyxDQUFDQyxRQUFWLENBQW1CSSxXQUFuQixDQUErQixHQUEvQixDQUE5QyxJQUFxRixDQUEvRyxDQUhBLEdBSUEsU0FKQSxHQUtBLElBTEEsR0FNQUwsU0FBUyxDQUFDQyxRQU5WLEdBT0Esb0JBUkksR0FTSixFQVRIO0FBVUEsS0Fma0MsQ0FnQm5DOzs7QUFDQSxhQUFTSyxlQUFULENBQXlCTixTQUF6QixFQUF5QztBQUN4QyxVQUFJTyxLQUFLLEdBQUcsRUFBWjs7QUFDQSxVQUFJUCxTQUFTLENBQUNRLFNBQVYsSUFBdUJSLFNBQVMsQ0FBQ0MsUUFBakMsSUFBNkNELFNBQVMsQ0FBQ1EsU0FBVixLQUF3QlYsa0JBQXpFLEVBQTZGO0FBQzVGUyxRQUFBQSxLQUFLLElBQUksU0FBU1AsU0FBUyxDQUFDQyxRQUFuQixHQUE4QixlQUE5QixHQUFnREQsU0FBUyxDQUFDUSxTQUExRCxHQUFzRSxrQkFBL0U7QUFDQVYsUUFBQUEsa0JBQWtCLEdBQUdFLFNBQVMsQ0FBQ1EsU0FBL0I7QUFDQTs7QUFDRCxhQUFPRCxLQUFQO0FBQ0EsS0F4QmtDLENBMEJuQzs7O0FBQ0EsYUFBU0UsUUFBVCxHQUFvQjtBQUNuQixVQUFNQyxHQUFHLEdBQUcsa0JBQVosQ0FEbUIsQ0FDYTs7QUFDaEMsYUFBTyxDQUNOO0FBQUUscUJBQWEsRUFBZjtBQUFtQixvQkFBWUEsR0FBRyxHQUFHO0FBQXJDLE9BRE0sRUFFTjtBQUFFLHFCQUFhLEVBQWY7QUFBbUIsb0JBQVlBLEdBQUcsR0FBRztBQUFyQyxPQUZNLEVBR047QUFBRSxxQkFBYSxhQUFmO0FBQThCLG9CQUFZQSxHQUFHLEdBQUc7QUFBaEQsT0FITSxFQUlOO0FBQUUscUJBQWEsYUFBZjtBQUE4QixvQkFBWUEsR0FBRyxHQUFHO0FBQWhELE9BSk0sRUFLTjtBQUFFLHFCQUFhLGFBQWY7QUFBOEIsb0JBQVlBLEdBQUcsR0FBRztBQUFoRCxPQUxNLEVBTU47QUFBRSxxQkFBYSxhQUFmO0FBQThCLG9CQUFZQSxHQUFHLEdBQUc7QUFBaEQsT0FOTSxFQU9OO0FBQUUscUJBQWEsaUJBQWY7QUFBa0Msb0JBQVlBLEdBQUcsR0FBRztBQUFwRCxPQVBNLEVBUU47QUFBRSxxQkFBYSxpQkFBZjtBQUFrQyxvQkFBWUEsR0FBRyxHQUFHO0FBQXBELE9BUk0sRUFTTjtBQUFFLHFCQUFhLGlCQUFmO0FBQWtDLG9CQUFZQSxHQUFHLEdBQUc7QUFBcEQsT0FUTSxFQVVOO0FBQUUscUJBQWEsaUJBQWY7QUFBa0Msb0JBQVlBLEdBQUcsR0FBRztBQUFwRCxPQVZNLEVBV047QUFBRSxxQkFBYSxpQkFBZjtBQUFrQyxvQkFBWUEsR0FBRyxHQUFHO0FBQXBELE9BWE0sRUFZTjtBQUFFLHFCQUFhLGlCQUFmO0FBQWtDLG9CQUFZQSxHQUFHLEdBQUc7QUFBcEQsT0FaTSxFQWFOO0FBQUUscUJBQWEsVUFBZjtBQUEyQixvQkFBWUEsR0FBRyxHQUFHO0FBQTdDLE9BYk0sRUFjTjtBQUFFLHFCQUFhLFVBQWY7QUFBMkIsb0JBQVlBLEdBQUcsR0FBRztBQUE3QyxPQWRNLENBQVA7QUFnQkE7O0FBRUQsUUFBSUgsS0FBSyxHQUFHLGlCQUFpQixxQkFBakIsR0FBeUMsbURBQXJEO0FBQ0FFLElBQUFBLFFBQVEsR0FBR0UsT0FBWCxDQUFtQixVQUFTWCxTQUFULEVBQTZEO0FBQy9FTyxNQUFBQSxLQUFLLEdBQUdBLEtBQUssR0FBR0QsZUFBZSxDQUFDTixTQUFELENBQXZCLEdBQXFDLEVBQXJDLEdBQTBDRCxZQUFZLENBQUNDLFNBQUQsQ0FBdEQsR0FBb0UsS0FBNUU7QUFDQSxLQUZEO0FBR0EsV0FBT08sS0FBUDtBQUNBOztBQUNELFdBQVNLLG1CQUFULEdBQStCO0FBQzlCLFFBQU1MLEtBQUssR0FBRyxRQUFRLDZDQUFSLEdBQXdELHFCQUF0RTtBQUNBLFdBQU9BLEtBQVA7QUFDQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFdBQVNNLDJCQUFULENBQXFDQyxTQUFyQyxFQUF1RDtBQUN0RCxRQUFJQyxnQkFBZ0IsR0FBRzNCLFdBQVcsQ0FBQzRCLElBQW5DO0FBQ0EsUUFBTUMsT0FBTyxHQUFHSCxTQUFTLENBQUNJLE1BQTFCO0FBQ0EsUUFBTUMsYUFBa0IsR0FBRztBQUFFQyxNQUFBQSxLQUFLLEVBQUUsQ0FBVDtBQUFZQyxNQUFBQSxPQUFPLEVBQUUsQ0FBckI7QUFBd0JDLE1BQUFBLE9BQU8sRUFBRSxDQUFqQztBQUFvQ0MsTUFBQUEsV0FBVyxFQUFFO0FBQWpELEtBQTNCOztBQUVBLFNBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR1AsT0FBcEIsRUFBNkJPLENBQUMsRUFBOUIsRUFBa0M7QUFDakMsUUFBRUwsYUFBYSxDQUFDTCxTQUFTLENBQUNVLENBQUQsQ0FBVCxDQUFhQyxPQUFiLEVBQUQsQ0FBZjtBQUNBOztBQUNELFFBQUlOLGFBQWEsQ0FBQy9CLFdBQVcsQ0FBQ2dDLEtBQWIsQ0FBYixHQUFtQyxDQUF2QyxFQUEwQztBQUN6Q0wsTUFBQUEsZ0JBQWdCLEdBQUczQixXQUFXLENBQUNnQyxLQUEvQjtBQUNBLEtBRkQsTUFFTyxJQUFJRCxhQUFhLENBQUMvQixXQUFXLENBQUNpQyxPQUFiLENBQWIsR0FBcUMsQ0FBekMsRUFBNEM7QUFDbEROLE1BQUFBLGdCQUFnQixHQUFHM0IsV0FBVyxDQUFDaUMsT0FBL0I7QUFDQSxLQUZNLE1BRUEsSUFBSUYsYUFBYSxDQUFDL0IsV0FBVyxDQUFDa0MsT0FBYixDQUFiLEdBQXFDLENBQXpDLEVBQTRDO0FBQ2xEUCxNQUFBQSxnQkFBZ0IsR0FBRzNCLFdBQVcsQ0FBQ2tDLE9BQS9CO0FBQ0EsS0FGTSxNQUVBLElBQUlILGFBQWEsQ0FBQy9CLFdBQVcsQ0FBQ21DLFdBQWIsQ0FBYixHQUF5QyxDQUE3QyxFQUFnRDtBQUN0RFIsTUFBQUEsZ0JBQWdCLEdBQUczQixXQUFXLENBQUNtQyxXQUEvQjtBQUNBOztBQUNELFdBQU9SLGdCQUFQO0FBQ0EsRyxDQUNEO0FBQ0E7OztBQUNBLFdBQVNXLHdCQUFULENBQWtDQyxlQUFsQyxFQUF3REMsZUFBeEQsRUFBOEU7QUFDN0UsUUFBTWQsU0FBUyxHQUFHYSxlQUFlLENBQUNFLGVBQWhCLEdBQWtDQyxTQUFsQyxDQUE0QyxHQUE1QyxDQUFsQjtBQUNBLFFBQUlDLGlCQUFpQixHQUFHLEtBQXhCO0FBQ0EsUUFBSUMsWUFBWSxHQUFHLEVBQW5CO0FBQ0FsQixJQUFBQSxTQUFTLENBQUNILE9BQVYsQ0FBa0IsVUFBU3NCLFFBQVQsRUFBd0JULENBQXhCLEVBQWdDO0FBQ2pELFVBQU1VLGlCQUFpQixHQUFHRCxRQUFRLENBQUNFLG1CQUFULEVBQTFCOztBQUNBLFVBQUlELGlCQUFpQixJQUFJQSxpQkFBaUIsQ0FBQ0UsVUFBbEIsS0FBaUMsR0FBMUQsRUFBK0Q7QUFDOURKLFFBQUFBLFlBQVksR0FBR0EsWUFBWSxJQUFJSixlQUFlLENBQUNTLE9BQWhCLENBQXdCLDZDQUF4QixDQUEvQjtBQUNBVixRQUFBQSxlQUFlLENBQUNXLGNBQWhCLENBQStCeEIsU0FBUyxDQUFDVSxDQUFELENBQXhDO0FBQ0FTLFFBQUFBLFFBQVEsQ0FBQ00sVUFBVCxDQUFvQlAsWUFBcEI7QUFDQUMsUUFBQUEsUUFBUSxDQUFDTyxNQUFULEdBQWtCLEVBQWxCO0FBQ0FiLFFBQUFBLGVBQWUsQ0FBQ2MsV0FBaEIsQ0FBNEJSLFFBQTVCO0FBQ0FGLFFBQUFBLGlCQUFpQixHQUFHLElBQXBCO0FBQ0E7QUFDRCxLQVZEO0FBV0EsV0FBT0EsaUJBQVA7QUFDQSxHLENBQ0Q7OztBQUNBLFdBQVNXLGtCQUFULEdBQThCO0FBQzdCakQsSUFBQUEsT0FBTyxDQUFDa0QsS0FBUjtBQUNBakQsSUFBQUEsV0FBVyxDQUFDa0QsVUFBWixDQUF1QixLQUF2QjtBQUNBdEQsSUFBQUEsWUFBWSxHQUFHLEVBQWY7QUFDQXVELElBQUFBLCtCQUErQjtBQUMvQjs7QUFDRCxXQUFTQyxvQkFBVCxDQUE4QmIsUUFBOUIsRUFBNkNjLGNBQTdDLEVBQW1FO0FBQ2xFLFFBQU1DLElBQUksR0FBRyxJQUFJQyxJQUFKLEVBQWI7QUFDQSxRQUFNZixpQkFBaUIsR0FBR0QsUUFBUSxDQUFDRSxtQkFBVCxFQUExQjtBQUNBLFFBQU1QLGVBQWUsR0FBR3NCLEdBQUcsQ0FBQ0MsRUFBSixDQUFPQyxPQUFQLEdBQWlCQyx3QkFBakIsQ0FBMEMsYUFBMUMsQ0FBeEI7QUFDQSxRQUFJQyxrQkFBSjs7QUFDQSxRQUFJcEIsaUJBQWlCLElBQUlBLGlCQUFpQixDQUFDRSxVQUFsQixLQUFpQyxHQUF0RCxJQUE2REYsaUJBQWlCLENBQUNxQixVQUFuRixFQUErRjtBQUM5RixVQUFNQyxXQUFXLEdBQUd0QixpQkFBaUIsQ0FBQ3FCLFVBQXRDO0FBQ0EsVUFBSUUsV0FBSjs7QUFDQSxVQUFJVCxJQUFJLENBQUNVLFdBQUwsT0FBdUJGLFdBQVcsQ0FBQ0UsV0FBWixFQUEzQixFQUFzRDtBQUNyRDtBQUNBRCxRQUFBQSxXQUFXLEdBQUdFLFVBQVUsQ0FBQ0MsbUJBQVgsQ0FBK0I7QUFDNUNDLFVBQUFBLE9BQU8sRUFBRTtBQURtQyxTQUEvQixDQUFkO0FBR0FQLFFBQUFBLGtCQUFrQixHQUFHMUIsZUFBZSxDQUFDUyxPQUFoQixDQUF3QixvQ0FBeEIsRUFBOEQsQ0FBQ29CLFdBQVcsQ0FBQ0ssTUFBWixDQUFtQk4sV0FBbkIsQ0FBRCxDQUE5RCxDQUFyQjtBQUNBLE9BTkQsTUFNTyxJQUFJUixJQUFJLENBQUNVLFdBQUwsTUFBc0JGLFdBQVcsQ0FBQ0UsV0FBWixFQUExQixFQUFxRDtBQUMzRDtBQUNBLFlBQUlYLGNBQUosRUFBb0I7QUFDbkI7QUFDQU8sVUFBQUEsa0JBQWtCLEdBQ2pCMUIsZUFBZSxDQUFDUyxPQUFoQixDQUF3QixvQ0FBeEIsSUFDQSxHQURBLEdBRUFULGVBQWUsQ0FBQ1MsT0FBaEIsQ0FBd0IsbUNBQXhCLENBSEQ7QUFJQSxTQU5ELE1BTU8sSUFBSVcsSUFBSSxDQUFDZSxRQUFMLE9BQW9CUCxXQUFXLENBQUNPLFFBQVosRUFBcEIsSUFBOENmLElBQUksQ0FBQ2dCLE9BQUwsT0FBbUJSLFdBQVcsQ0FBQ1EsT0FBWixFQUFyRSxFQUE0RjtBQUNsR1AsVUFBQUEsV0FBVyxHQUFHRSxVQUFVLENBQUNDLG1CQUFYLENBQStCO0FBQzVDQyxZQUFBQSxPQUFPLEVBQUU7QUFEbUMsV0FBL0IsQ0FBZCxDQURrRyxDQUc5Rjs7QUFDSlAsVUFBQUEsa0JBQWtCLEdBQUcxQixlQUFlLENBQUNTLE9BQWhCLENBQXdCLG9DQUF4QixFQUE4RCxDQUFDb0IsV0FBVyxDQUFDSyxNQUFaLENBQW1CTixXQUFuQixDQUFELENBQTlELENBQXJCO0FBQ0EsU0FMTSxNQUtBO0FBQ047QUFDQUMsVUFBQUEsV0FBVyxHQUFHRSxVQUFVLENBQUNDLG1CQUFYLENBQStCO0FBQzVDQyxZQUFBQSxPQUFPLEVBQUU7QUFEbUMsV0FBL0IsQ0FBZDtBQUdBUCxVQUFBQSxrQkFBa0IsR0FBRzFCLGVBQWUsQ0FBQ1MsT0FBaEIsQ0FBd0Isd0NBQXhCLEVBQWtFLENBQUNvQixXQUFXLENBQUNLLE1BQVosQ0FBbUJOLFdBQW5CLENBQUQsQ0FBbEUsQ0FBckI7QUFDQTtBQUNEO0FBQ0Q7O0FBRUQsUUFBSXRCLGlCQUFpQixJQUFJQSxpQkFBaUIsQ0FBQ0UsVUFBbEIsS0FBaUMsR0FBdEQsSUFBNkQsQ0FBQ0YsaUJBQWlCLENBQUNxQixVQUFwRixFQUFnRztBQUMvRkQsTUFBQUEsa0JBQWtCLEdBQUcxQixlQUFlLENBQUNTLE9BQWhCLENBQXdCLG1EQUF4QixDQUFyQjtBQUNBOztBQUNELFdBQU9pQixrQkFBUDtBQUNBOztBQUVELFdBQVNXLDJCQUFULENBQXFDQyxtQkFBckMsRUFBcUVDLG1CQUFyRSxFQUFtRztBQUNsRyxRQUFJLENBQUNBLG1CQUFMLEVBQTBCO0FBQ3pCeEUsTUFBQUEsZ0JBQWdCLEdBQ2ZBLGdCQUFnQixJQUNoQixJQUFJeUUsV0FBSixDQUFnQkMsU0FBaEIsRUFBMkI7QUFDMUJDLFFBQUFBLE9BQU8sRUFBRTtBQUFFQyxVQUFBQSxJQUFJLEVBQUU7QUFBUixTQURpQjtBQUUxQkMsUUFBQUEsS0FBSyxFQUFFLFdBRm1CO0FBRzFCQyxRQUFBQSxRQUFRLEVBQUUsa0JBSGdCO0FBSTFCQyxRQUFBQSxXQUFXLEVBQUUsa0JBSmE7QUFLMUJDLFFBQUFBLElBQUksRUFBRTtBQUFFSixVQUFBQSxJQUFJLEVBQUU7QUFBUixTQUxvQjtBQU0xQkssUUFBQUEsV0FBVyxFQUNWLFVBQ0Esd0NBREEsR0FFQSxtQkFGQSxHQUdBaEUsbUJBQW1CLEVBSG5CLEdBSUEsS0FKQSxHQUtBZix3QkFBd0IsRUFMeEIsR0FNQSxrQkFOQSxHQU9BLFNBZHlCO0FBZTFCZ0YsUUFBQUEsaUJBQWlCLEVBQUU7QUFmTyxPQUEzQixDQUZEO0FBbUJBLEtBcEJELE1Bb0JPO0FBQ05sRixNQUFBQSxnQkFBZ0IsR0FBRyxJQUFJeUUsV0FBSixDQUFnQjtBQUNsQ0ksUUFBQUEsS0FBSyxFQUFFLFdBRDJCO0FBRWxDRyxRQUFBQSxJQUFJLEVBQUUsU0FGNEI7QUFHbENELFFBQUFBLFdBQVcsRUFBRTtBQUhxQixPQUFoQixDQUFuQjtBQUtBOztBQUNEOUUsSUFBQUEsWUFBWSxHQUNYQSxZQUFZLElBQ1osSUFBSWtGLFdBQUosQ0FBZ0I7QUFDZkMsTUFBQUEscUJBQXFCLEVBQUUsS0FEUjtBQUVmQyxNQUFBQSxVQUFVLEVBQUUsWUFBVztBQUN0QnRGLFFBQUFBLFdBQVcsQ0FBQ2tELFVBQVosQ0FBdUIsSUFBdkI7QUFDQSxPQUpjO0FBS2ZxQyxNQUFBQSxLQUFLLEVBQUU7QUFDTlYsUUFBQUEsSUFBSSxFQUFFLEdBREE7QUFFTlcsUUFBQUEsUUFBUSxFQUFFdkY7QUFGSjtBQUxRLEtBQWhCLENBRkQ7QUFZQUQsSUFBQUEsV0FBVyxHQUNWQSxXQUFXLElBQ1gsSUFBSXlGLE1BQUosQ0FBVztBQUNWQyxNQUFBQSxJQUFJLEVBQUVDLFFBQVEsQ0FBQ0MsVUFBVCxDQUFvQixVQUFwQixDQURJO0FBRVZDLE1BQUFBLE9BQU8sRUFBRSxLQUZDO0FBR1ZDLE1BQUFBLEtBQUssRUFBRSxZQUF1QjtBQUM3QjVGLFFBQUFBLFlBQVksQ0FBQzZGLFlBQWI7QUFDQSxhQUFLN0MsVUFBTCxDQUFnQixLQUFoQjtBQUNBO0FBTlMsS0FBWCxDQUZELENBeENrRyxDQWtEbEc7O0FBQ0FoRCxJQUFBQSxZQUFZLENBQUM4RixRQUFiLENBQXNCeEIsbUJBQXRCO0FBQ0EsV0FBTztBQUNOdEUsTUFBQUEsWUFBWSxFQUFaQSxZQURNO0FBRU5GLE1BQUFBLFdBQVcsRUFBWEE7QUFGTSxLQUFQO0FBSUE7O0FBRUQsV0FBU2lHLG1CQUFULENBRUNDLGVBRkQsRUFHQ0MsUUFIRCxFQUlDQyxlQUpELEVBS0NDLG9CQUxELEVBTUU7QUFDRCxRQUFJQyxnQkFBZ0IsR0FBRyxLQUFLQyxXQUFMLEVBQXZCO0FBQ0EsUUFBTXRFLGVBQWUsR0FBSXVCLEdBQUcsQ0FBQ0MsRUFBSixDQUFPQyxPQUFQLEVBQUQsQ0FBMEI4QyxpQkFBMUIsRUFBeEI7QUFDQSxRQUFJQyxnQkFBSjtBQUNBLFFBQUlDLG9CQUFKO0FBQ0EsUUFBTUMsUUFBUSxHQUFHLENBQ2hCLElBQUlDLE1BQUosQ0FBVztBQUFFL0IsTUFBQUEsSUFBSSxFQUFFLE1BQVI7QUFBZ0JnQyxNQUFBQSxRQUFRLEVBQUVDLGNBQWMsQ0FBQ0MsRUFBekM7QUFBNkNDLE1BQUFBLE1BQU0sRUFBRTtBQUFyRCxLQUFYLENBRGdCLEVBRWhCLElBQUlKLE1BQUosQ0FBVztBQUFFL0IsTUFBQUEsSUFBSSxFQUFFLFlBQVI7QUFBc0JnQyxNQUFBQSxRQUFRLEVBQUVDLGNBQWMsQ0FBQ0MsRUFBL0M7QUFBbURDLE1BQUFBLE1BQU0sRUFBRTtBQUEzRCxLQUFYLENBRmdCLENBQWpCO0FBSUEsUUFBSUMsaUJBQWlCLEdBQUcsS0FBeEI7QUFBQSxRQUNDQyxjQUFjLEdBQUcsS0FEbEI7O0FBR0EsUUFBSWIsb0JBQUosRUFBMEI7QUFDekJDLE1BQUFBLGdCQUFnQixHQUFHQSxnQkFBZ0IsQ0FBQ2EsTUFBakIsQ0FBd0JaLFdBQVcsQ0FBQyxJQUFELEVBQU8sSUFBUCxDQUFuQyxDQUFuQixDQUR5QixDQUV6Qjs7QUFDQUksTUFBQUEsUUFBUSxDQUFDUyxJQUFULENBQWMsSUFBSVIsTUFBSixDQUFXO0FBQUUvQixRQUFBQSxJQUFJLEVBQUUsWUFBUjtBQUFzQmdDLFFBQUFBLFFBQVEsRUFBRUMsY0FBYyxDQUFDTyxFQUEvQztBQUFtREwsUUFBQUEsTUFBTSxFQUFFO0FBQTNELE9BQVgsQ0FBZDs7QUFDQSxVQUFNTSx3QkFBd0IsR0FBRyxVQUFTQyxXQUFULEVBQTJCO0FBQzNELFlBQUlDLEtBQUssR0FBR0MsUUFBWjtBQUFBLFlBQ0NDLFFBQVEsR0FBR2xFLEdBQUcsQ0FBQ0MsRUFBSixDQUFPQyxPQUFQLEdBQWlCaUUsSUFBakIsQ0FBc0JKLFdBQVcsQ0FBQyxDQUFELENBQWpDLENBRFo7QUFFQSxZQUFNSyxpQkFBaUIsR0FBR3BFLEdBQUcsQ0FBQ0MsRUFBSixDQUFPQyxPQUFQLEdBQWlCaUUsSUFBakIsQ0FBc0JKLFdBQVcsQ0FBQyxDQUFELENBQWpDLENBQTFCOztBQUNBLGVBQU9HLFFBQVAsRUFBaUI7QUFDaEIsY0FBTUcsaUJBQWlCLEdBQ3RCSCxRQUFRLFlBQVlJLE1BQXBCLEdBQ0lGLGlCQUFpQixDQUFDRyxTQUFsQixFQUFELENBQXVDQyxZQUF2QyxDQUFvRCxJQUFwRCxFQUEwREMsT0FBMUQsQ0FBa0VMLGlCQUFsRSxDQURILEdBRUdILFFBSEo7O0FBSUEsY0FBSUMsUUFBUSxZQUFZSSxNQUF4QixFQUFnQztBQUMvQixnQkFBSU4sS0FBSyxHQUFHSyxpQkFBWixFQUErQjtBQUM5QkwsY0FBQUEsS0FBSyxHQUFHSyxpQkFBUixDQUQ4QixDQUU5Qjs7QUFDQUQsY0FBQUEsaUJBQWlCLENBQUNNLEtBQWxCO0FBQ0EsYUFMOEIsQ0FNL0I7OztBQUNBLG1CQUFPLEtBQVA7QUFDQTs7QUFDRFIsVUFBQUEsUUFBUSxHQUFHQSxRQUFRLENBQUNLLFNBQVQsRUFBWDtBQUNBOztBQUNELGVBQU8sSUFBUDtBQUNBLE9BckJEOztBQXNCQXBCLE1BQUFBLFFBQVEsQ0FBQ1MsSUFBVCxDQUNDLElBQUlSLE1BQUosQ0FBVztBQUNWL0IsUUFBQUEsSUFBSSxFQUFFLFlBREk7QUFFVnNELFFBQUFBLElBQUksRUFBRWIsd0JBRkk7QUFHVmMsUUFBQUEsYUFBYSxFQUFFO0FBSEwsT0FBWCxDQUREO0FBT0EsS0FqQ0QsTUFpQ087QUFDTjtBQUNBekIsTUFBQUEsUUFBUSxDQUFDUyxJQUFULENBQWMsSUFBSVIsTUFBSixDQUFXO0FBQUUvQixRQUFBQSxJQUFJLEVBQUUsUUFBUjtBQUFrQmdDLFFBQUFBLFFBQVEsRUFBRUMsY0FBYyxDQUFDTyxFQUEzQztBQUErQ0wsUUFBQUEsTUFBTSxFQUFFO0FBQXZELE9BQVgsQ0FBZDtBQUNBOztBQUNELFFBQUlkLGVBQWUsSUFBSUEsZUFBZSxDQUFDMUUsTUFBdkMsRUFBK0M7QUFDOUMwRSxNQUFBQSxlQUFlLENBQUNqRixPQUFoQixDQUF3QixVQUFTc0IsUUFBVCxFQUF3QjtBQUMvQyxZQUFNOEYsV0FBVyxHQUFHOUYsUUFBUSxDQUFDK0YsSUFBVCxHQUFnQi9GLFFBQVEsQ0FBQytGLElBQXpCLEdBQWdDLEVBQXBEO0FBQ0FyRyxRQUFBQSxlQUFlLENBQUNjLFdBQWhCLENBQ0MsSUFBSXdGLE9BQUosQ0FBWTtBQUNYQyxVQUFBQSxPQUFPLEVBQUVqRyxRQUFRLENBQUNrRyxJQURQO0FBRVh4RCxVQUFBQSxJQUFJLEVBQUUxQyxRQUFRLENBQUMwQyxJQUZKO0FBR1huQyxVQUFBQSxNQUFNLEVBQUUsRUFIRztBQUlYNEYsVUFBQUEsVUFBVSxFQUFFLElBSkQ7QUFLWEosVUFBQUEsSUFBSSxFQUFFRDtBQUxLLFNBQVosQ0FERCxFQUYrQyxDQVcvQztBQUNBLE9BWkQ7QUFhQTs7QUFDRCxRQUFNN0QsbUJBQW1CLEdBQUcsSUFBSW1FLFNBQUosRUFBNUI7O0FBQ0EsUUFBSXJDLGdCQUFnQixDQUFDOUUsTUFBakIsS0FBNEIsQ0FBNUIsSUFBaUM4RSxnQkFBZ0IsQ0FBQyxDQUFELENBQWhCLENBQW9Cc0MsT0FBcEIsT0FBa0MsS0FBdkUsRUFBOEU7QUFDN0UxQixNQUFBQSxjQUFjLEdBQUcsSUFBakI7QUFDQSxLQUZELE1BRU87QUFDTixVQUFNMkIsWUFBWSxHQUFHNUcsZUFBZSxDQUFDRSxlQUFoQixHQUFrQzJHLFFBQWxDLENBQTJDLEdBQTNDLEVBQWdEbkUsU0FBaEQsRUFBMkRBLFNBQTNELEVBQXNFZ0MsUUFBdEUsQ0FBckI7QUFBQSxVQUNDb0MsZ0JBQWdCLEdBQUdGLFlBQVksQ0FBQ0csa0JBQWIsRUFEcEI7O0FBRUEsVUFBSUQsZ0JBQWdCLElBQUlBLGdCQUFnQixDQUFDdkgsTUFBakIsR0FBMEIsQ0FBbEQsRUFBcUQ7QUFDcEQ7QUFDQXlGLFFBQUFBLGlCQUFpQixHQUFHLElBQXBCLENBRm9ELENBR3BEO0FBQ0E7QUFDQTs7QUFDQSxZQUFNN0YsU0FBZ0IsR0FBRyxFQUF6QjtBQUNBMkgsUUFBQUEsZ0JBQWdCLENBQUM5SCxPQUFqQixDQUF5QixVQUFTa0YsUUFBVCxFQUF3QjtBQUNoRCxjQUFJNUQsUUFBSjs7QUFDQSxjQUNDNEQsUUFBUSxDQUFDL0QsU0FBVCxHQUFxQjZHLGdCQUFyQixJQUNBckosWUFBWSxDQUFDcUksT0FBYixDQUFxQjlCLFFBQVEsQ0FBQy9ELFNBQVQsR0FBcUI2RyxnQkFBckIsQ0FBc0NDLGVBQXRDLENBQXNEVixPQUEzRSxNQUF3RixDQUFDLENBRjFGLEVBR0U7QUFDRDVJLFlBQUFBLFlBQVksQ0FBQ3dILElBQWIsQ0FBa0JqQixRQUFRLENBQUMvRCxTQUFULEdBQXFCNkcsZ0JBQXJCLENBQXNDQyxlQUF0QyxDQUFzRFYsT0FBeEU7QUFDQWpHLFlBQUFBLFFBQVEsR0FBRzRELFFBQVEsQ0FBQy9ELFNBQVQsRUFBWDtBQUNBaEIsWUFBQUEsU0FBUyxDQUFDZ0csSUFBVixDQUFlN0UsUUFBZjtBQUNBMUMsWUFBQUEsZ0JBQWdCLEdBQUd1QixTQUFuQjtBQUNBLFdBUkQsTUFRTyxJQUFJLENBQUMrRSxRQUFRLENBQUMvRCxTQUFULEdBQXFCNkcsZ0JBQTFCLEVBQTRDO0FBQ2xEMUcsWUFBQUEsUUFBUSxHQUFHNEQsUUFBUSxDQUFDL0QsU0FBVCxFQUFYO0FBQ0FoQixZQUFBQSxTQUFTLENBQUNnRyxJQUFWLENBQWU3RSxRQUFmO0FBQ0ExQyxZQUFBQSxnQkFBZ0IsR0FBR3VCLFNBQW5CO0FBQ0E7QUFDRCxTQWZELEVBUG9ELENBdUJwRDtBQUNBO0FBQ0E7O0FBQ0FvRCxRQUFBQSxtQkFBbUIsQ0FBQzJFLE9BQXBCLENBQTRCdEosZ0JBQTVCO0FBQ0E7QUFDRDs7QUFDRCxRQUFJeUcsZ0JBQWdCLENBQUM5RSxNQUFqQixLQUE0QixDQUE1QixJQUFpQyxDQUFDMEUsZUFBbEMsSUFBcUQsQ0FBQ0UsZUFBMUQsRUFBMkU7QUFDMUU7QUFDQSxhQUFPZ0QsT0FBTyxDQUFDQyxPQUFSLENBQWdCLElBQWhCLENBQVA7QUFDQSxLQUhELE1BR08sSUFBSS9DLGdCQUFnQixDQUFDOUUsTUFBakIsS0FBNEIsQ0FBNUIsSUFBaUM4RSxnQkFBZ0IsQ0FBQyxDQUFELENBQWhCLENBQW9CdkUsT0FBcEIsT0FBa0NyQyxXQUFXLENBQUNrQyxPQUEvRSxJQUEwRixDQUFDc0UsZUFBL0YsRUFBZ0g7QUFDdEgsYUFBTyxJQUFJa0QsT0FBSixDQUFrQixVQUFBQyxPQUFPLEVBQUk7QUFDbkNDLFFBQUFBLFlBQVksQ0FBQ0MsSUFBYixDQUFrQmpELGdCQUFnQixDQUFDLENBQUQsQ0FBaEIsQ0FBb0JrQyxPQUF0QztBQUNBdkcsUUFBQUEsZUFBZSxDQUFDVyxjQUFoQixDQUErQjBELGdCQUEvQjtBQUNBK0MsUUFBQUEsT0FBTztBQUNQLE9BSk0sQ0FBUDtBQUtBLEtBTk0sTUFNQSxJQUFJcEMsaUJBQUosRUFBdUI7QUFDN0JuSCxNQUFBQSxpQkFBaUIsR0FBR0EsaUJBQWlCLElBQUksRUFBekM7QUFDQSxhQUFPLElBQUlzSixPQUFKLENBQVksVUFBU0MsT0FBVCxFQUF3Q0csTUFBeEMsRUFBd0U7QUFDMUYxSixRQUFBQSxpQkFBaUIsQ0FBQ3NILElBQWxCLENBQXVCaUMsT0FBdkI7QUFDQzdGLFFBQUFBLEdBQUcsQ0FBQ0MsRUFBSixDQUFPQyxPQUFQLEdBQWlCQyx3QkFBakIsQ0FBMEMsYUFBMUMsRUFBeUQsSUFBekQsQ0FBRCxDQUNFOEYsSUFERixDQUNPLFVBQVN2SCxlQUFULEVBQStCO0FBQ3BDLGNBQU11QyxtQkFBbUIsR0FBRyxLQUE1QjtBQUNBLGNBQU0yQixlQUFlLEdBQUdwRSx3QkFBd0IsQ0FBQ0MsZUFBRCxFQUFrQkMsZUFBbEIsQ0FBaEQ7QUFDQSxjQUFNd0gsY0FBYyxHQUFHbkYsMkJBQTJCLENBQUNDLG1CQUFELEVBQXNCQyxtQkFBdEIsQ0FBbEQ7QUFDQTFFLFVBQUFBLE9BQU8sR0FDTkEsT0FBTyxJQUNQLElBQUkrSCxNQUFKLENBQVc7QUFDVjZCLFlBQUFBLFNBQVMsRUFBRSxJQUREO0FBRVZDLFlBQUFBLE9BQU8sRUFBRUYsY0FBYyxDQUFDeEosWUFGZDtBQUdWMkosWUFBQUEsU0FBUyxFQUFFLElBQUlwRSxNQUFKLENBQVc7QUFDckJLLGNBQUFBLEtBQUssRUFBRSxZQUFXO0FBQ2pCOUMsZ0JBQUFBLGtCQUFrQixHQURELENBRWpCOztBQUNBLG9CQUFJcUQsb0JBQUosRUFBMEI7QUFDekJ5RCxrQkFBQUEsNkJBQTZCO0FBQzdCO0FBQ0QsZUFQb0I7QUFRckJyQixjQUFBQSxJQUFJLEVBQUV2RyxlQUFlLENBQUNTLE9BQWhCLENBQXdCLHNCQUF4QjtBQVJlLGFBQVgsQ0FIRDtBQWFWb0gsWUFBQUEsWUFBWSxFQUFFLElBQUlDLEdBQUosQ0FBUTtBQUNyQkMsY0FBQUEsYUFBYSxFQUFFLENBQ2QsSUFBSUMsSUFBSixDQUFTO0FBQ1J6QixnQkFBQUEsSUFBSSxFQUFFdkcsZUFBZSxDQUFDUyxPQUFoQixDQUF3QixvREFBeEI7QUFERSxlQUFULENBRGMsQ0FETTtBQU1yQndILGNBQUFBLFdBQVcsRUFBRSxDQUFDbkssV0FBRDtBQU5RLGFBQVIsQ0FiSjtBQXFCVm9LLFlBQUFBLFlBQVksRUFBRSxRQXJCSjtBQXNCVkMsWUFBQUEsYUFBYSxFQUFFLFFBdEJMO0FBdUJWQyxZQUFBQSxpQkFBaUIsRUFBRSxLQXZCVDtBQXdCVkMsWUFBQUEsVUFBVSxFQUFFLFlBQVc7QUFDdEIsbUJBQUssSUFBSXpJLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdoQyxpQkFBaUIsQ0FBQzBCLE1BQXRDLEVBQThDTSxDQUFDLEVBQS9DLEVBQW1EO0FBQ2xEaEMsZ0JBQUFBLGlCQUFpQixDQUFDZ0MsQ0FBRCxDQUFqQixDQUFxQjBJLElBQXJCO0FBQ0E7O0FBQ0QxSyxjQUFBQSxpQkFBaUIsR0FBRyxFQUFwQjtBQUNBO0FBN0JTLFdBQVgsQ0FGRDs7QUFrQ0EsY0FBSXNHLGVBQUosRUFBcUI7QUFDcEI1QyxZQUFBQSxHQUFHLENBQUNDLEVBQUosQ0FBT2dILE9BQVAsQ0FBZSxDQUFDLGtCQUFELENBQWYsRUFBcUMsVUFBU0MsVUFBVCxFQUEwQjtBQUM5RDNLLGNBQUFBLE9BQU8sQ0FBQzRLLGNBQVIsQ0FDQyxJQUFJbEYsTUFBSixDQUFXO0FBQ1ZLLGdCQUFBQSxLQUFLLEVBQUUsWUFBVztBQUNqQjlDLGtCQUFBQSxrQkFBa0I7O0FBQ2xCLHNCQUFJbUQsUUFBUSxDQUFDeUUsaUJBQVQsRUFBSixFQUFrQztBQUNqQ3pFLG9CQUFBQSxRQUFRLENBQUMwRSxVQUFULEdBQXNCQyxZQUF0QjtBQUNBOztBQUNEM0Usa0JBQUFBLFFBQVEsQ0FBQzRFLE9BQVQ7QUFDQSxpQkFQUztBQVFWdEMsZ0JBQUFBLElBQUksRUFBRXZHLGVBQWUsQ0FBQ1MsT0FBaEIsQ0FBd0Isd0JBQXhCLENBUkk7QUFTVnNDLGdCQUFBQSxJQUFJLEVBQUV5RixVQUFVLENBQUNNO0FBVFAsZUFBWCxDQUREO0FBYUEsYUFkRDtBQWVBLFdBaEJELE1BZ0JPO0FBQ05qTCxZQUFBQSxPQUFPLENBQUNrTCxrQkFBUjtBQUNBOztBQUNEeEUsVUFBQUEsZ0JBQWdCLEdBQUd0RiwyQkFBMkIsQ0FBQ2pCLFlBQVksQ0FBQ2dMLFFBQWIsRUFBRCxDQUE5QztBQUNBeEUsVUFBQUEsb0JBQW9CLEdBQUd5RSxpQ0FBaUMsQ0FBQzFFLGdCQUFELENBQXhEO0FBQ0ExRyxVQUFBQSxPQUFPLENBQUNxTCxRQUFSLENBQWlCM0UsZ0JBQWpCO0FBQ0MxRyxVQUFBQSxPQUFPLENBQUNzTCxlQUFSLEVBQUQsQ0FBbUNDLGdCQUFuQyxHQUFzRCxDQUF0RCxFQUF5REMsT0FBekQsQ0FBaUU3RSxvQkFBakU7QUFDQXhHLFVBQUFBLFlBQVksQ0FBQzZGLFlBQWI7QUFDQWhHLFVBQUFBLE9BQU8sQ0FBQ3lMLElBQVI7QUFDQSxTQWhFRixFQWlFRUMsS0FqRUYsQ0FpRVFqQyxNQWpFUjtBQWtFQSxPQXBFTSxDQUFQO0FBcUVBLEtBdkVNLE1BdUVBLElBQUl0QyxjQUFKLEVBQW9CO0FBQzFCLGFBQU8sSUFBSWtDLE9BQUosQ0FBWSxVQUFTQyxPQUFULEVBQWtCO0FBQ3BDLFlBQU05RyxRQUFRLEdBQUcrRCxnQkFBZ0IsQ0FBQyxDQUFELENBQWpDOztBQUNBLFlBQUkvRCxRQUFRLENBQUMwRyxnQkFBVCxJQUE2QnJKLFlBQVksQ0FBQ3FJLE9BQWIsQ0FBcUIxRixRQUFRLENBQUMwRyxnQkFBVCxDQUEwQkMsZUFBMUIsQ0FBMENWLE9BQS9ELE1BQTRFLENBQUMsQ0FBOUcsRUFBaUg7QUFDaEg1SSxVQUFBQSxZQUFZLENBQUN3SCxJQUFiLENBQWtCN0UsUUFBUSxDQUFDMEcsZ0JBQVQsQ0FBMEJDLGVBQTFCLENBQTBDVixPQUE1RDtBQUNBLGNBQUlrRCxtQkFBbUIsR0FBRyxjQUExQjtBQUNBLGNBQU1DLGlCQUFpQixHQUFHdkksb0JBQW9CLENBQUNiLFFBQUQsRUFBVyxJQUFYLENBQTlDOztBQUNBLGNBQUlvSixpQkFBSixFQUF1QjtBQUN0QkQsWUFBQUEsbUJBQW1CLEdBQUcsU0FBU0MsaUJBQVQsR0FBNkIsV0FBbkQ7QUFDQTs7QUFDREQsVUFBQUEsbUJBQW1CLEdBQUdBLG1CQUFtQixHQUFHbkosUUFBUSxDQUFDcUosVUFBVCxFQUF0QixHQUE4QyxnQkFBcEU7QUFDQSxjQUFNQyxhQUFrQixHQUFHLElBQUlDLGFBQUosQ0FBa0I7QUFDNUNDLFlBQUFBLFFBQVEsRUFBRUw7QUFEa0MsV0FBbEIsQ0FBM0I7QUFHQU0sVUFBQUEsVUFBVSxDQUFDQyxLQUFYLENBQWlCSixhQUFqQixFQUFnQztBQUMvQkssWUFBQUEsT0FBTyxFQUFFLFlBQVc7QUFDbkJ0TSxjQUFBQSxZQUFZLEdBQUcsRUFBZjs7QUFDQSxrQkFBSXlHLG9CQUFKLEVBQTBCO0FBQ3pCeUQsZ0JBQUFBLDZCQUE2QjtBQUM3Qjs7QUFDRDNHLGNBQUFBLCtCQUErQjtBQUMvQmtHLGNBQUFBLE9BQU8sQ0FBQyxJQUFELENBQVA7QUFDQTtBQVI4QixXQUFoQztBQVVBO0FBQ0QsT0F4Qk0sQ0FBUDtBQXlCQSxLQTFCTSxNQTBCQTtBQUNOLGFBQU9ELE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixJQUFoQixDQUFQO0FBQ0E7QUFDRDs7QUFDRCxXQUFTOEIsaUNBQVQsQ0FBMkMxRSxnQkFBM0MsRUFBa0U7QUFDakUsUUFBTXZFLGVBQWUsR0FBR3NCLEdBQUcsQ0FBQ0MsRUFBSixDQUFPQyxPQUFQLEdBQWlCQyx3QkFBakIsQ0FBMEMsYUFBMUMsQ0FBeEI7O0FBQ0EsWUFBUThDLGdCQUFSO0FBQ0MsV0FBSyxPQUFMO0FBQ0MsZUFBT3ZFLGVBQWUsQ0FBQ1MsT0FBaEIsQ0FBd0IsZ0RBQXhCLENBQVA7O0FBQ0QsV0FBSyxhQUFMO0FBQ0MsZUFBT1QsZUFBZSxDQUFDUyxPQUFoQixDQUF3Qix5REFBeEIsQ0FBUDs7QUFDRCxXQUFLLFNBQUw7QUFDQyxlQUFPVCxlQUFlLENBQUNTLE9BQWhCLENBQXdCLDREQUF4QixDQUFQOztBQUNELFdBQUssU0FBTDtBQUNDLGVBQU9ULGVBQWUsQ0FBQ1MsT0FBaEIsQ0FBd0IsNERBQXhCLENBQVA7O0FBQ0Q7QUFDQyxlQUFPVCxlQUFlLENBQUNTLE9BQWhCLENBQXdCLG9EQUF4QixDQUFQO0FBVkY7QUFZQTs7QUFDRCxXQUFTUSwrQkFBVCxHQUEyQztBQUMxQ2dKLElBQUFBLHdCQUF3QixDQUFDLEtBQUQsQ0FBeEI7QUFDQTs7QUFDRCxXQUFTckMsNkJBQVQsR0FBeUM7QUFDeENxQyxJQUFBQSx3QkFBd0IsQ0FBQyxJQUFELENBQXhCO0FBQ0E7O0FBQ0QsV0FBUzVGLFdBQVQsR0FBd0Y7QUFBQSxRQUFuRTZGLGNBQW1FLHVFQUF6QyxLQUF5QztBQUFBLFFBQWxDQyxlQUFrQyx1RUFBUCxLQUFPO0FBQ3ZGLFFBQUl2SyxDQUFKO0FBQ0EsUUFBTUcsZUFBZSxHQUFJdUIsR0FBRyxDQUFDQyxFQUFKLENBQU9DLE9BQVAsRUFBRCxDQUEwQjhDLGlCQUExQixFQUF4QjtBQUFBLFFBQ0M4RixhQUFhLEdBQUdySyxlQUFlLENBQUNFLGVBQWhCLEVBRGpCO0FBQUEsUUFFQ2YsU0FBUyxHQUFHa0wsYUFBYSxDQUFDbEssU0FBZCxDQUF3QixHQUF4QixDQUZiO0FBQUEsUUFHQ0YsZUFBZSxHQUFHc0IsR0FBRyxDQUFDQyxFQUFKLENBQU9DLE9BQVAsR0FBaUJDLHdCQUFqQixDQUEwQyxhQUExQyxDQUhuQjtBQUFBLFFBSUM0SSxtQkFBbUIsR0FBRyxFQUp2Qjs7QUFNQSxTQUFLekssQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHVixTQUFTLENBQUNJLE1BQTFCLEVBQWtDTSxDQUFDLEVBQW5DLEVBQXVDO0FBQ3RDLFVBQ0MsQ0FBQyxDQUFDdUssZUFBRCxJQUFvQmpMLFNBQVMsQ0FBQ1UsQ0FBRCxDQUFULENBQWE0RyxVQUFsQyxNQUNFMEQsY0FBYyxJQUFJaEwsU0FBUyxDQUFDVSxDQUFELENBQVQsQ0FBYWdCLE1BQWIsS0FBd0IsRUFBM0MsSUFBbUQsQ0FBQ3NKLGNBQUQsS0FBb0IsQ0FBQ2hMLFNBQVMsQ0FBQ1UsQ0FBRCxDQUFULENBQWFnQixNQUFkLElBQXdCMUIsU0FBUyxDQUFDVSxDQUFELENBQVQsQ0FBYWdCLE1BQWIsS0FBd0IsRUFBcEUsQ0FEcEQsS0FFQTFCLFNBQVMsQ0FBQ1UsQ0FBRCxDQUFULENBQWF3RyxJQUhkLEVBSUU7QUFDRGlFLFFBQUFBLG1CQUFtQixDQUFDbkYsSUFBcEIsQ0FBeUJoRyxTQUFTLENBQUNVLENBQUQsQ0FBbEM7QUFDQTtBQUNEOztBQUVELFNBQUtBLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR3lLLG1CQUFtQixDQUFDL0ssTUFBcEMsRUFBNENNLENBQUMsRUFBN0MsRUFBaUQ7QUFDaEQsVUFDQ3lLLG1CQUFtQixDQUFDekssQ0FBRCxDQUFuQixDQUF1QndHLElBQXZCLEtBQWdDLEtBQWhDLElBQ0FpRSxtQkFBbUIsQ0FBQ3pLLENBQUQsQ0FBbkIsQ0FBdUIwRyxPQUF2QixLQUFtQyxFQURuQyxJQUVBK0QsbUJBQW1CLENBQUN6SyxDQUFELENBQW5CLENBQXVCMEcsT0FBdkIsQ0FBK0JQLE9BQS9CLENBQXVDL0YsZUFBZSxDQUFDUyxPQUFoQixDQUF3Qiw2Q0FBeEIsQ0FBdkMsTUFBbUgsQ0FBQyxDQUhySCxFQUlFO0FBQ0Q0SixRQUFBQSxtQkFBbUIsQ0FBQ3pLLENBQUQsQ0FBbkIsQ0FBdUIwRyxPQUF2QixHQUNDLE9BQU90RyxlQUFlLENBQUNTLE9BQWhCLENBQXdCLDZDQUF4QixDQUFQLEdBQWdGNEosbUJBQW1CLENBQUN6SyxDQUFELENBQW5CLENBQXVCMEcsT0FEeEc7QUFFQTtBQUNEOztBQUNELFdBQU8rRCxtQkFBUDtBQUNBOztBQUNELFdBQVNKLHdCQUFULENBQWtDQyxjQUFsQyxFQUF1RDtBQUN0RCxRQUFNSSxvQkFBb0IsR0FBR2pHLFdBQVcsQ0FBQzZGLGNBQUQsRUFBaUIsSUFBakIsQ0FBeEM7O0FBRUEsUUFBSUksb0JBQW9CLENBQUNoTCxNQUFyQixHQUE4QixDQUFsQyxFQUFxQztBQUNuQ2dDLE1BQUFBLEdBQUcsQ0FBQ0MsRUFBSixDQUFPQyxPQUFQLEVBQUQsQ0FBMEI4QyxpQkFBMUIsR0FBOEM1RCxjQUE5QyxDQUE2RDRKLG9CQUE3RDtBQUNBO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLE1BQU1DLGVBQW9DLEdBQUc7QUFDNUNsRyxJQUFBQSxXQUFXLEVBQUVBLFdBRCtCO0FBRTVDTixJQUFBQSxtQkFBbUIsRUFBRUEsbUJBRnVCO0FBRzVDOUMsSUFBQUEsK0JBQStCLEVBQUVBLCtCQUhXO0FBSTVDMkcsSUFBQUEsNkJBQTZCLEVBQUVBLDZCQUphO0FBSzVDNEMsSUFBQUEsc0JBQXNCLEVBQUUxSyx3QkFMb0I7QUFNNUNvQixJQUFBQSxvQkFBb0IsRUFBRUEsb0JBTnNCO0FBTzVDbUIsSUFBQUEsMkJBQTJCLEVBQUVBO0FBUGUsR0FBN0M7U0FVZWtJLGUiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IE1lc3NhZ2VJdGVtIGZyb20gXCJzYXAvbS9NZXNzYWdlSXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VWaWV3IGZyb20gXCJzYXAvbS9NZXNzYWdlVmlld1wiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgQ29yZUxpYiBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBJY29uUG9vbCBmcm9tIFwic2FwL3VpL2NvcmUvSWNvblBvb2xcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IERhdGVGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9EYXRlRm9ybWF0XCI7XG5pbXBvcnQgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQmFyIGZyb20gXCJzYXAvbS9CYXJcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgRm9ybWF0dGVkVGV4dCBmcm9tIFwic2FwL20vRm9ybWF0dGVkVGV4dFwiO1xuXG5jb25zdCBNZXNzYWdlVHlwZSA9IENvcmVMaWIuTWVzc2FnZVR5cGU7XG5sZXQgYU1lc3NhZ2VMaXN0OiBhbnlbXSA9IFtdO1xubGV0IGFNZXNzYWdlRGF0YUxpc3Q6IGFueVtdID0gW107XG5sZXQgYVJlc29sdmVGdW5jdGlvbnM6IGFueVtdID0gW107XG5sZXQgb0RpYWxvZzogRGlhbG9nO1xubGV0IG9CYWNrQnV0dG9uOiBCdXR0b247XG5sZXQgb01lc3NhZ2VUZW1wbGF0ZTogTWVzc2FnZUl0ZW07XG5sZXQgb01lc3NhZ2VWaWV3OiBNZXNzYWdlVmlldztcblxuZXhwb3J0IHR5cGUgbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IChiQm91bmRNZXNzYWdlcz86IGFueSwgYlRyYW5zaXRpb25Pbmx5PzogYW55KSA9PiBhbnlbXTtcblx0c2hvd1VuYm91bmRNZXNzYWdlczogKFxuXHRcdGFDdXN0b21NZXNzYWdlcz86IGFueVtdLFxuXHRcdG9Db250ZXh0PzogYW55LFxuXHRcdGJIYXNFdGFnTWVzc2FnZT86IGJvb2xlYW4sXG5cdFx0YlNob3dCb3VuZFRyYW5zaXRpb24/OiBib29sZWFuXG5cdCkgPT4gUHJvbWlzZTxhbnk+O1xuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoKSA9PiB2b2lkO1xuXHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogKCkgPT4gdm9pZDtcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogKG9NZXNzYWdlTWFuYWdlcjogYW55LCBvUmVzb3VyY2VCdW5kbGU6IGFueSkgPT4gYm9vbGVhbjtcblx0Z2V0UmV0cnlBZnRlck1lc3NhZ2U6IChvTWVzc2FnZTogYW55LCBiTWVzc2FnZURpYWxvZz86IGFueSkgPT4gYW55O1xuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IChvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3c6IGJvb2xlYW4pID0+IGFueTtcbn07XG5cbmZ1bmN0aW9uIGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpIHtcblx0bGV0IHNQcmV2aW91c0dyb3VwTmFtZTogc3RyaW5nO1xuXG5cdC8vIEluc2VydCB0ZWNobmljYWwgZGV0YWlsIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnREZXRhaWwob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRyZXR1cm4gb1Byb3BlcnR5LnByb3BlcnR5XG5cdFx0XHQ/IFwiKCAke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ID8gKFwiPHA+JyArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5LnN1YnN0cihNYXRoLm1heChvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpLCBvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIuXCIpKSArIDEpICtcblx0XHRcdFx0XHQnIDogXCIgKyAnICtcblx0XHRcdFx0XHRcIiR7XCIgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSArXG5cdFx0XHRcdFx0J30gKyBcIjwvcD5cIikgOiBcIlwiICknXG5cdFx0XHQ6IFwiXCI7XG5cdH1cblx0Ly8gSW5zZXJ0IGdyb3VwbmFtZSBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0R3JvdXBOYW1lKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0bGV0IHNIVE1MID0gXCJcIjtcblx0XHRpZiAob1Byb3BlcnR5Lmdyb3VwTmFtZSAmJiBvUHJvcGVydHkucHJvcGVydHkgJiYgb1Byb3BlcnR5Lmdyb3VwTmFtZSAhPT0gc1ByZXZpb3VzR3JvdXBOYW1lKSB7XG5cdFx0XHRzSFRNTCArPSBcIiggJHtcIiArIG9Qcm9wZXJ0eS5wcm9wZXJ0eSArICd9ID8gXCI8YnI+PGgzPicgKyBvUHJvcGVydHkuZ3JvdXBOYW1lICsgJzwvaDM+XCIgOiBcIlwiICkgKyAnO1xuXHRcdFx0c1ByZXZpb3VzR3JvdXBOYW1lID0gb1Byb3BlcnR5Lmdyb3VwTmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIHNIVE1MO1xuXHR9XG5cblx0Ly8gTGlzdCBvZiB0ZWNobmljYWwgZGV0YWlscyB0byBiZSBzaG93blxuXHRmdW5jdGlvbiBnZXRQYXRocygpIHtcblx0XHRjb25zdCBzVEQgPSBcInRlY2huaWNhbERldGFpbHNcIjsgLy8gbmFtZSBvZiBwcm9wZXJ0eSBpbiBtZXNzYWdlIG1vZGVsIGRhdGEgZm9yIHRlY2huaWNhbCBkZXRhaWxzXG5cdFx0cmV0dXJuIFtcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJcIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9zdGF0dXNcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIlwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL3N0YXR1c1RleHRcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkFwcGxpY2F0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL0NvbXBvbmVudElkXCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJBcHBsaWNhdGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlSWRcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkFwcGxpY2F0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VSZXBvc2l0b3J5XCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJBcHBsaWNhdGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlVmVyc2lvblwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9BbmFseXNpc1wiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9Ob3RlXCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJFcnJvclJlc29sdXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL0RldGFpbGVkTm90ZVwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLkV4Y2VwdGlvbkNhdGVnb3J5XCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJFcnJvclJlc29sdXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9AU0FQX19jb21tb24uVGltZVN0YW1wXCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJFcnJvclJlc29sdXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9AU0FQX19jb21tb24uVHJhbnNhY3Rpb25JZFwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiTWVzc2FnZXNcIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9jb2RlXCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJNZXNzYWdlc1wiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL21lc3NhZ2VcIiB9XG5cdFx0XTtcblx0fVxuXG5cdGxldCBzSFRNTCA9IFwiT2JqZWN0LmtleXMoXCIgKyBcIiR7dGVjaG5pY2FsRGV0YWlsc31cIiArICcpLmxlbmd0aCA+IDAgPyBcIjxoMj5UZWNobmljYWwgRGV0YWlsczwvaDI+XCIgOiBcIlwiICc7XG5cdGdldFBhdGhzKCkuZm9yRWFjaChmdW5jdGlvbihvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSkge1xuXHRcdHNIVE1MID0gc0hUTUwgKyBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5KSArIFwiXCIgKyBpbnNlcnREZXRhaWwob1Byb3BlcnR5KSArIFwiICsgXCI7XG5cdH0pO1xuXHRyZXR1cm4gc0hUTUw7XG59XG5mdW5jdGlvbiBmbkZvcm1hdERlc2NyaXB0aW9uKCkge1xuXHRjb25zdCBzSFRNTCA9IFwiKCR7XCIgKyAnZGVzY3JpcHRpb259ID8gKFwiPGgyPkRlc2NyaXB0aW9uPC9oMj5cIiArICR7JyArICdkZXNjcmlwdGlvbn0pIDogXCJcIiknO1xuXHRyZXR1cm4gc0hUTUw7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSB0eXBlKEVycm9yL1dhcm5pbmcvU3VjY2Vzcy9JbmZvcm1hdGlvbikgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzLlxuXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMubWVzc2FnZUhhbmRsaW5nLmZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eVxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMubWVzc2FnZUhhbmRsaW5nXG4gKiBAcGFyYW0ge0FycmF5fSBbYU1lc3NhZ2VzXSBNZXNzYWdlcyBsaXN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBIaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShhTWVzc2FnZXM6IGFueVtdKSB7XG5cdGxldCBzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgaUxlbmd0aCA9IGFNZXNzYWdlcy5sZW5ndGg7XG5cdGNvbnN0IG9NZXNzYWdlQ291bnQ6IGFueSA9IHsgRXJyb3I6IDAsIFdhcm5pbmc6IDAsIFN1Y2Nlc3M6IDAsIEluZm9ybWF0aW9uOiAwIH07XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpTGVuZ3RoOyBpKyspIHtcblx0XHQrK29NZXNzYWdlQ291bnRbYU1lc3NhZ2VzW2ldLmdldFR5cGUoKV07XG5cdH1cblx0aWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuRXJyb3JdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLldhcm5pbmddID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuU3VjY2Vzc10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uO1xuXHR9XG5cdHJldHVybiBzTWVzc2FnZVByaW9yaXR5O1xufVxuLy8gZnVuY3Rpb24gd2hpY2ggbW9kaWZ5IGUtVGFnIG1lc3NhZ2VzIG9ubHkuXG4vLyByZXR1cm5zIDogdHJ1ZSwgaWYgYW55IGUtVGFnIG1lc3NhZ2UgaXMgbW9kaWZpZWQsIG90aGVyd2lzZSBmYWxzZS5cbmZ1bmN0aW9uIGZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seShvTWVzc2FnZU1hbmFnZXI6IGFueSwgb1Jlc291cmNlQnVuZGxlOiBhbnkpIHtcblx0Y29uc3QgYU1lc3NhZ2VzID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmdldE9iamVjdChcIi9cIik7XG5cdGxldCBiTWVzc2FnZXNNb2RpZmllZCA9IGZhbHNlO1xuXHRsZXQgc0V0YWdNZXNzYWdlID0gXCJcIjtcblx0YU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24ob01lc3NhZ2U6IGFueSwgaTogYW55KSB7XG5cdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCk7XG5cdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDQxMikge1xuXHRcdFx0c0V0YWdNZXNzYWdlID0gc0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU1wiKTtcblx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNbaV0pO1xuXHRcdFx0b01lc3NhZ2Uuc2V0TWVzc2FnZShzRXRhZ01lc3NhZ2UpO1xuXHRcdFx0b01lc3NhZ2UudGFyZ2V0ID0gXCJcIjtcblx0XHRcdG9NZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRiTWVzc2FnZXNNb2RpZmllZCA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJNZXNzYWdlc01vZGlmaWVkO1xufVxuLy8gRGlhbG9nIGNsb3NlIEhhbmRsaW5nXG5mdW5jdGlvbiBkaWFsb2dDbG9zZUhhbmRsZXIoKSB7XG5cdG9EaWFsb2cuY2xvc2UoKTtcblx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZShmYWxzZSk7XG5cdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG59XG5mdW5jdGlvbiBnZXRSZXRyeUFmdGVyTWVzc2FnZShvTWVzc2FnZTogYW55LCBiTWVzc2FnZURpYWxvZz86IGFueSkge1xuXHRjb25zdCBkTm93ID0gbmV3IERhdGUoKTtcblx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCk7XG5cdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdGxldCBzUmV0cnlBZnRlck1lc3NhZ2U7XG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikge1xuXHRcdGNvbnN0IGRSZXRyeUFmdGVyID0gb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcjtcblx0XHRsZXQgb0RhdGVGb3JtYXQ7XG5cdFx0aWYgKGROb3cuZ2V0RnVsbFllYXIoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9kaWZmZXJlbnQgeWVhcnNcblx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0cGF0dGVybjogXCJNTU1NIGRkLCB5eXl5ICdhdCcgaGg6bW0gYVwiXG5cdFx0XHR9KTtcblx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRGdWxsWWVhcigpID09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vc2FtZSB5ZWFyXG5cdFx0XHRpZiAoYk1lc3NhZ2VEaWFsb2cpIHtcblx0XHRcdFx0Ly9sZXNzIHRoYW4gMiBtaW5cblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID1cblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfVElUTEVcIikgK1xuXHRcdFx0XHRcdFwiIFwiICtcblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfREVTQ1wiKTtcblx0XHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRNb250aCgpICE9PSBkUmV0cnlBZnRlci5nZXRNb250aCgpIHx8IGROb3cuZ2V0RGF0ZSgpICE9PSBkUmV0cnlBZnRlci5nZXREYXRlKCkpIHtcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0XHR9KTsgLy9kaWZmZXJlbnQgbW9udGhzIG9yIGRpZmZlcmVudCBkYXlzIG9mIHNhbWUgbW9udGhcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL3NhbWUgZGF5XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcImhoOm1tIGFcIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX0RBWVwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgIW9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfTk9fUkVUUllfQUZURVJcIik7XG5cdH1cblx0cmV0dXJuIHNSZXRyeUFmdGVyTWVzc2FnZTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWw6IEpTT05Nb2RlbCwgYlN0cmljdEhhbmRsaW5nRmxvdzogYm9vbGVhbikge1xuXHRpZiAoIWJTdHJpY3RIYW5kbGluZ0Zsb3cpIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID1cblx0XHRcdG9NZXNzYWdlVGVtcGxhdGUgfHxcblx0XHRcdG5ldyBNZXNzYWdlSXRlbSh1bmRlZmluZWQsIHtcblx0XHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdFx0c3VidGl0bGU6IFwie2FkZGl0aW9uYWxUZXh0fVwiLFxuXHRcdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdFx0ZGVzY3JpcHRpb246XG5cdFx0XHRcdFx0XCJ7PSAke1wiICtcblx0XHRcdFx0XHRcImRlc2NyaXB0aW9ufSB8fCAke3RlY2huaWNhbERldGFpbHN9ID8gXCIgK1xuXHRcdFx0XHRcdCdcIjxodG1sPjxib2R5PlwiICsgJyArXG5cdFx0XHRcdFx0Zm5Gb3JtYXREZXNjcmlwdGlvbigpICtcblx0XHRcdFx0XHRcIiArIFwiICtcblx0XHRcdFx0XHRmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKSArXG5cdFx0XHRcdFx0J1wiPC9ib2R5PjwvaHRtbD5cIicgK1xuXHRcdFx0XHRcdCcgOiBcIlwiIH0nLFxuXHRcdFx0XHRtYXJrdXBEZXNjcmlwdGlvbjogdHJ1ZVxuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh7XG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHR5cGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiXG5cdFx0fSk7XG5cdH1cblx0b01lc3NhZ2VWaWV3ID1cblx0XHRvTWVzc2FnZVZpZXcgfHxcblx0XHRuZXcgTWVzc2FnZVZpZXcoe1xuXHRcdFx0c2hvd0RldGFpbHNQYWdlSGVhZGVyOiBmYWxzZSxcblx0XHRcdGl0ZW1TZWxlY3Q6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdGl0ZW1zOiB7XG5cdFx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0XHR0ZW1wbGF0ZTogb01lc3NhZ2VUZW1wbGF0ZVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRvQmFja0J1dHRvbiA9XG5cdFx0b0JhY2tCdXR0b24gfHxcblx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdGljb246IEljb25Qb29sLmdldEljb25VUkkoXCJuYXYtYmFja1wiKSxcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0cHJlc3M6IGZ1bmN0aW9uKHRoaXM6IEJ1dHRvbikge1xuXHRcdFx0XHRvTWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRcdHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdC8vIFVwZGF0ZSBwcm9wZXIgRVRhZyBNaXNtYXRjaCBlcnJvclxuXHRvTWVzc2FnZVZpZXcuc2V0TW9kZWwob01lc3NhZ2VEaWFsb2dNb2RlbCk7XG5cdHJldHVybiB7XG5cdFx0b01lc3NhZ2VWaWV3LFxuXHRcdG9CYWNrQnV0dG9uXG5cdH07XG59XG5cbmZ1bmN0aW9uIHNob3dVbmJvdW5kTWVzc2FnZXMoXG5cdHRoaXM6IG1lc3NhZ2VIYW5kbGluZ1R5cGUsXG5cdGFDdXN0b21NZXNzYWdlcz86IGFueVtdLFxuXHRvQ29udGV4dD86IGFueSxcblx0Ykhhc0V0YWdNZXNzYWdlPzogYm9vbGVhbixcblx0YlNob3dCb3VuZFRyYW5zaXRpb24/OiBib29sZWFuXG4pIHtcblx0bGV0IGFVbmJvdW5kTWVzc2FnZXMgPSB0aGlzLmdldE1lc3NhZ2VzKCk7XG5cdGNvbnN0IG9NZXNzYWdlTWFuYWdlciA9IChzYXAudWkuZ2V0Q29yZSgpIGFzIGFueSkuZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHk7XG5cdGxldCBzSGlnaGVzdFByaW9yaXR5VGV4dDtcblx0Y29uc3QgYUZpbHRlcnMgPSBbXG5cdFx0bmV3IEZpbHRlcih7IHBhdGg6IFwiY29kZVwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHZhbHVlMTogbnVsbCB9KSxcblx0XHRuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBmYWxzZSB9KVxuXHRdO1xuXHRsZXQgc2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZSxcblx0XHRzaG93TWVzc2FnZUJveCA9IGZhbHNlO1xuXG5cdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdGFVbmJvdW5kTWVzc2FnZXMgPSBhVW5ib3VuZE1lc3NhZ2VzLmNvbmNhdChnZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSk7XG5cdFx0Ly8gd2Ugb25seSB3YW50IHRvIHNob3cgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBub3QgYm91bmQgc3RhdGUgbWVzc2FnZXMgaGVuY2UgYWRkIGEgZmlsdGVyIGZvciB0aGUgc2FtZVxuXHRcdGFGaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogdHJ1ZSB9KSk7XG5cdFx0Y29uc3QgZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nID0gZnVuY3Rpb24oYUNvbnRyb2xJZHM6IGFueSkge1xuXHRcdFx0bGV0IGluZGV4ID0gSW5maW5pdHksXG5cdFx0XHRcdG9Db250cm9sID0gc2FwLnVpLmdldENvcmUoKS5ieUlkKGFDb250cm9sSWRzWzBdKSBhcyBNYW5hZ2VkT2JqZWN0O1xuXHRcdFx0Y29uc3QgZXJyb3JGaWVsZENvbnRyb2wgPSBzYXAudWkuZ2V0Q29yZSgpLmJ5SWQoYUNvbnRyb2xJZHNbMF0pIGFzIENvbnRyb2w7XG5cdFx0XHR3aGlsZSAob0NvbnRyb2wpIHtcblx0XHRcdFx0Y29uc3QgZmllbGRSYW5raW5EaWFsb2cgPVxuXHRcdFx0XHRcdG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nXG5cdFx0XHRcdFx0XHQ/IChlcnJvckZpZWxkQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBhbnkpLmZpbmRFbGVtZW50cyh0cnVlKS5pbmRleE9mKGVycm9yRmllbGRDb250cm9sKVxuXHRcdFx0XHRcdFx0OiBJbmZpbml0eTtcblx0XHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nKSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4ID4gZmllbGRSYW5raW5EaWFsb2cpIHtcblx0XHRcdFx0XHRcdGluZGV4ID0gZmllbGRSYW5raW5EaWFsb2c7XG5cdFx0XHRcdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBkaWFsb2cncyBjb250cm9sXG5cdFx0XHRcdFx0XHRlcnJvckZpZWxkQ29udHJvbC5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBtZXNzYWdlcyB3aXRoIHRhcmdldCBpbnNpZGUgc2FwLm0uRGlhbG9nIHNob3VsZCBub3QgYnJpbmcgdXAgdGhlIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHRcdGFGaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogXCJjb250cm9sSWRzXCIsXG5cdFx0XHRcdHRlc3Q6IGZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIG9ubHkgdW5ib3VuZCBtZXNzYWdlcyBoYXZlIHRvIGJlIHNob3duIHNvIGFkZCBmaWx0ZXIgYWNjb3JkaW5nbHlcblx0XHRhRmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBcInRhcmdldFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogXCJcIiB9KSk7XG5cdH1cblx0aWYgKGFDdXN0b21NZXNzYWdlcyAmJiBhQ3VzdG9tTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0YUN1c3RvbU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24ob01lc3NhZ2U6IGFueSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZUNvZGUgPSBvTWVzc2FnZS5jb2RlID8gb01lc3NhZ2UuY29kZSA6IFwiXCI7XG5cdFx0XHRvTWVzc2FnZU1hbmFnZXIuYWRkTWVzc2FnZXMoXG5cdFx0XHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRtZXNzYWdlOiBvTWVzc2FnZS50ZXh0LFxuXHRcdFx0XHRcdHR5cGU6IG9NZXNzYWdlLnR5cGUsXG5cdFx0XHRcdFx0dGFyZ2V0OiBcIlwiLFxuXHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0Y29kZTogbWVzc2FnZUNvZGVcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0XHQvL1RoZSB0YXJnZXQgYW5kIHBlcnNpc3RlbnQgcHJvcGVydGllcyBvZiB0aGUgbWVzc2FnZSBhcmUgaGFyZGNvZGVkIGFzIFwiXCIgYW5kIHRydWUgYmVjYXVzZSB0aGUgZnVuY3Rpb24gZGVhbHMgd2l0aCBvbmx5IHVuYm91bmQgbWVzc2FnZXMuXG5cdFx0fSk7XG5cdH1cblx0Y29uc3Qgb01lc3NhZ2VEaWFsb2dNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0aWYgKGFVbmJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIGFVbmJvdW5kTWVzc2FnZXNbMF0uZ2V0Q29kZSgpID09PSBcIjUwM1wiKSB7XG5cdFx0c2hvd01lc3NhZ2VCb3ggPSB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFGaWx0ZXJzKSxcblx0XHRcdGFDdXJyZW50Q29udGV4dHMgPSBvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0aWYgKGFDdXJyZW50Q29udGV4dHMgJiYgYUN1cnJlbnRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBEb24ndCBzaG93IGRpYWxvZyBpbmNhc2UgdGhlcmUgYXJlIG5vIGVycm9ycyB0byBzaG93XG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHQvLyBBcyBmaXRlcmluZyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBoZXJlIGhlbmNlXG5cdFx0XHQvLyB1c2luZyB0aGUgbWVzc2FnZSBtb2RlbCBhZ2FpbiBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcgYW5kIHRoZW4gZmlsdGVyaW5nIG9uIHRoYXQgYmluZGluZyBhZ2FpbiBpcyB1bm5lY2Vzc2FyeS5cblx0XHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdFx0Y29uc3QgYU1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRcdFx0YUN1cnJlbnRDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uKG9Db250ZXh0OiBhbnkpIHtcblx0XHRcdFx0bGV0IG9NZXNzYWdlO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0NvbnRleHQuZ2V0T2JqZWN0KCkudGVjaG5pY2FsRGV0YWlscyAmJlxuXHRcdFx0XHRcdGFNZXNzYWdlTGlzdC5pbmRleE9mKG9Db250ZXh0LmdldE9iamVjdCgpLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlLm1lc3NhZ2UpID09PSAtMVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhTWVzc2FnZUxpc3QucHVzaChvQ29udGV4dC5nZXRPYmplY3QoKS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZS5tZXNzYWdlKTtcblx0XHRcdFx0XHRvTWVzc2FnZSA9IG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdGFNZXNzYWdlcy5wdXNoKG9NZXNzYWdlKTtcblx0XHRcdFx0XHRhTWVzc2FnZURhdGFMaXN0ID0gYU1lc3NhZ2VzO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFvQ29udGV4dC5nZXRPYmplY3QoKS50ZWNobmljYWxEZXRhaWxzKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2UgPSBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRhTWVzc2FnZXMucHVzaChvTWVzc2FnZSk7XG5cdFx0XHRcdFx0YU1lc3NhZ2VEYXRhTGlzdCA9IGFNZXNzYWdlcztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQvLyBpZihhTWVzc2FnZXMubGVuZ3RoID09PSAwICYmIGFNZXNzYWdlTGlzdC5sZW5ndGgpIHtcblx0XHRcdC8vIFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNZXNzYWdlcyk7XG5cdFx0XHQvLyB9XG5cdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoYU1lc3NhZ2VEYXRhTGlzdCk7XG5cdFx0fVxuXHR9XG5cdGlmIChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMCAmJiAhYUN1c3RvbU1lc3NhZ2VzICYmICFiSGFzRXRhZ01lc3NhZ2UpIHtcblx0XHQvLyBEb24ndCBzaG93IHRoZSBwb3B1cCBpZiB0aGVyZSBhcmUgbm8gdHJhbnNpZW50IG1lc3NhZ2VzXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fSBlbHNlIGlmIChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiBhVW5ib3VuZE1lc3NhZ2VzWzBdLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuU3VjY2VzcyAmJiAhYUN1c3RvbU1lc3NhZ2VzKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3coYVVuYm91bmRNZXNzYWdlc1swXS5tZXNzYWdlKTtcblx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhhVW5ib3VuZE1lc3NhZ2VzKTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZURpYWxvZykge1xuXHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gYVJlc29sdmVGdW5jdGlvbnMgfHwgW107XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zLnB1c2gocmVzb2x2ZSk7XG5cdFx0XHQoc2FwLnVpLmdldENvcmUoKS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiLCB0cnVlKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24ob1Jlc291cmNlQnVuZGxlOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBiU3RyaWN0SGFuZGxpbmdGbG93ID0gZmFsc2U7XG5cdFx0XHRcdFx0Y29uc3QgYkhhc0V0YWdNZXNzYWdlID0gZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5KG9NZXNzYWdlTWFuYWdlciwgb1Jlc291cmNlQnVuZGxlKTtcblx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU9iamVjdCA9IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93KTtcblx0XHRcdFx0XHRvRGlhbG9nID1cblx0XHRcdFx0XHRcdG9EaWFsb2cgfHxcblx0XHRcdFx0XHRcdG5ldyBEaWFsb2coe1xuXHRcdFx0XHRcdFx0XHRyZXNpemFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldyxcblx0XHRcdFx0XHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGFsc28gcmVtb3ZlIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgd2Ugd2VyZSBzaG93aW5nIHRoZW1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9DTE9TRVwiKVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0Y3VzdG9tSGVhZGVyOiBuZXcgQmFyKHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50TWlkZGxlOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRuZXcgVGV4dCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIilcblx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50TGVmdDogW29CYWNrQnV0dG9uXVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjM3LjVlbVwiLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50SGVpZ2h0OiBcIjIxLjVlbVwiLFxuXHRcdFx0XHRcdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVJlc29sdmVGdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zW2ldLmNhbGwoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YVJlc29sdmVGdW5jdGlvbnMgPSBbXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRpZiAoYkhhc0V0YWdNZXNzYWdlKSB7XG5cdFx0XHRcdFx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvbS9CdXR0b25UeXBlXCJdLCBmdW5jdGlvbihCdXR0b25UeXBlOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0b0RpYWxvZy5zZXRCZWdpbkJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0LnJlZnJlc2goKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIiksXG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBCdXR0b25UeXBlLkVtcGhhc2l6ZWRcblx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9EaWFsb2cuZGVzdHJveUJlZ2luQnV0dG9uKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNIaWdoZXN0UHJpb3JpdHkgPSBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkob01lc3NhZ2VWaWV3LmdldEl0ZW1zKCkpO1xuXHRcdFx0XHRcdHNIaWdoZXN0UHJpb3JpdHlUZXh0ID0gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHkpO1xuXHRcdFx0XHRcdG9EaWFsb2cuc2V0U3RhdGUoc0hpZ2hlc3RQcmlvcml0eSk7XG5cdFx0XHRcdFx0KG9EaWFsb2cuZ2V0Q3VzdG9tSGVhZGVyKCkgYXMgYW55KS5nZXRDb250ZW50TWlkZGxlKClbMF0uc2V0VGV4dChzSGlnaGVzdFByaW9yaXR5VGV4dCk7XG5cdFx0XHRcdFx0b01lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2gocmVqZWN0KTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZUJveCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0XHRjb25zdCBvTWVzc2FnZSA9IGFVbmJvdW5kTWVzc2FnZXNbMF07XG5cdFx0XHRpZiAob01lc3NhZ2UudGVjaG5pY2FsRGV0YWlscyAmJiBhTWVzc2FnZUxpc3QuaW5kZXhPZihvTWVzc2FnZS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZS5tZXNzYWdlKSA9PT0gLTEpIHtcblx0XHRcdFx0YU1lc3NhZ2VMaXN0LnB1c2gob01lc3NhZ2UudGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UubWVzc2FnZSk7XG5cdFx0XHRcdGxldCBmb3JtYXR0ZWRUZXh0U3RyaW5nID0gXCI8aHRtbD48Ym9keT5cIjtcblx0XHRcdFx0Y29uc3QgcmV0cnlBZnRlck1lc3NhZ2UgPSBnZXRSZXRyeUFmdGVyTWVzc2FnZShvTWVzc2FnZSwgdHJ1ZSk7XG5cdFx0XHRcdGlmIChyZXRyeUFmdGVyTWVzc2FnZSkge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBcIjxoNj5cIiArIHJldHJ5QWZ0ZXJNZXNzYWdlICsgXCI8L2g2Pjxicj5cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gZm9ybWF0dGVkVGV4dFN0cmluZyArIG9NZXNzYWdlLmdldE1lc3NhZ2UoKSArIFwiPC9odG1sPjwvYm9keT5cIjtcblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVkVGV4dDogYW55ID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0XHRcdGh0bWxUZXh0OiBmb3JtYXR0ZWRUZXh0U3RyaW5nXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRNZXNzYWdlQm94LmVycm9yKGZvcm1hdHRlZFRleHQsIHtcblx0XHRcdFx0XHRvbkNsb3NlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHk6IGFueSkge1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBzYXAudWkuZ2V0Q29yZSgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRzd2l0Y2ggKHNIaWdoZXN0UHJpb3JpdHkpIHtcblx0XHRjYXNlIFwiRXJyb3JcIjpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfRVJST1JcIik7XG5cdFx0Y2FzZSBcIkluZm9ybWF0aW9uXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIpO1xuXHRcdGNhc2UgXCJTdWNjZXNzXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9TVUNDRVNTXCIpO1xuXHRcdGNhc2UgXCJXYXJuaW5nXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9XQVJOSU5HXCIpO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKTtcblx0fVxufVxuZnVuY3Rpb24gcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCkge1xuXHRyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXModHJ1ZSk7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYm9vbGVhbiA9IGZhbHNlLCBiVHJhbnNpdGlvbk9ubHk6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRsZXQgaTtcblx0Y29uc3Qgb01lc3NhZ2VNYW5hZ2VyID0gKHNhcC51aS5nZXRDb3JlKCkgYXMgYW55KS5nZXRNZXNzYWdlTWFuYWdlcigpLFxuXHRcdG9NZXNzYWdlTW9kZWwgPSBvTWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCksXG5cdFx0YU1lc3NhZ2VzID0gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpLFxuXHRcdG9SZXNvdXJjZUJ1bmRsZSA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGUsXG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IFtdO1xuXG5cdGZvciAoaSA9IDA7IGkgPCBhTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHQoIWJUcmFuc2l0aW9uT25seSB8fCBhTWVzc2FnZXNbaV0ucGVyc2lzdGVudCkgJiZcblx0XHRcdCgoYkJvdW5kTWVzc2FnZXMgJiYgYU1lc3NhZ2VzW2ldLnRhcmdldCAhPT0gXCJcIikgfHwgKCFiQm91bmRNZXNzYWdlcyAmJiAoIWFNZXNzYWdlc1tpXS50YXJnZXQgfHwgYU1lc3NhZ2VzW2ldLnRhcmdldCA9PT0gXCJcIikpKSAmJlxuXHRcdFx0YU1lc3NhZ2VzW2ldLmNvZGVcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMucHVzaChhTWVzc2FnZXNbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGZvciAoaSA9IDA7IGkgPCBhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5jb2RlID09PSBcIjUwM1wiICYmXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2UgIT09IFwiXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZS5pbmRleE9mKG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKSkgPT09IC0xXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2UgPVxuXHRcdFx0XHRcIlxcblwiICsgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0JBQ0tFTkRfUFJFRklYXCIpICsgYVRyYW5zaXRpb25NZXNzYWdlc1tpXS5tZXNzYWdlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYVRyYW5zaXRpb25NZXNzYWdlcztcbn1cbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYW55KSB7XG5cdGNvbnN0IGFNZXNzYWdlc1RvQmVEZWxldGVkID0gZ2V0TWVzc2FnZXMoYkJvdW5kTWVzc2FnZXMsIHRydWUpO1xuXG5cdGlmIChhTWVzc2FnZXNUb0JlRGVsZXRlZC5sZW5ndGggPiAwKSB7XG5cdFx0KHNhcC51aS5nZXRDb3JlKCkgYXMgYW55KS5nZXRNZXNzYWdlTWFuYWdlcigpLnJlbW92ZU1lc3NhZ2VzKGFNZXNzYWdlc1RvQmVEZWxldGVkKTtcblx0fVxufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIEZpb3JpIE1lc3NhZ2UgSGFuZGxpbmdcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAYWxpYXMgc2FwLmZlLmNvcmUuYWN0aW9ucy5tZXNzYWdlSGFuZGxpbmdcbiAqIEBwcml2YXRlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBtZXNzYWdlSGFuZGxpbmc6IG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGdldE1lc3NhZ2VzOiBnZXRNZXNzYWdlcyxcblx0c2hvd1VuYm91bmRNZXNzYWdlczogc2hvd1VuYm91bmRNZXNzYWdlcyxcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHksXG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiBnZXRSZXRyeUFmdGVyTWVzc2FnZSxcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2dcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1lc3NhZ2VIYW5kbGluZztcbiJdfQ==