@sapui5/sap.fe.core 1.131.0 → 1.133.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 (317) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +17 -23
  4. package/src/sap/fe/core/AppComponent.js +74 -36
  5. package/src/sap/fe/core/AppComponent.ts +70 -3
  6. package/src/sap/fe/core/AppStateHandler.js +44 -13
  7. package/src/sap/fe/core/AppStateHandler.ts +38 -0
  8. package/src/sap/fe/core/BaseController.js +3 -3
  9. package/src/sap/fe/core/CommonUtils.js +30 -37
  10. package/src/sap/fe/core/CommonUtils.ts +15 -13
  11. package/src/sap/fe/core/ExtensionAPI.js +29 -34
  12. package/src/sap/fe/core/ExtensionAPI.ts +3 -0
  13. package/src/sap/fe/core/InsightsFormattersExtension.js +2 -2
  14. package/src/sap/fe/core/PageController.js +40 -31
  15. package/src/sap/fe/core/PageController.ts +14 -1
  16. package/src/sap/fe/core/ResourceModel.js +4 -4
  17. package/src/sap/fe/core/ReuseComponent.js +27 -13
  18. package/src/sap/fe/core/ReuseComponent.ts +18 -0
  19. package/src/sap/fe/core/TemplateComponent.js +102 -89
  20. package/src/sap/fe/core/TemplateComponent.ts +20 -1
  21. package/src/sap/fe/core/TemplateModel.js +6 -7
  22. package/src/sap/fe/core/UIProvider.js +1 -1
  23. package/src/sap/fe/core/UIProvider.ts +2 -9
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +63 -48
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +56 -27
  26. package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +9 -0
  27. package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.ts +48 -0
  28. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -6
  29. package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +2 -2
  30. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -3
  31. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +32 -18
  32. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +30 -3
  33. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +9 -13
  34. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +2 -1
  35. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +2 -2
  36. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +19 -25
  37. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -1
  38. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +3 -4
  39. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +20 -24
  40. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +10 -15
  41. package/src/sap/fe/core/controllerextensions/ContextSharing.js +3 -3
  42. package/src/sap/fe/core/controllerextensions/EditFlow.js +296 -246
  43. package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -175
  44. package/src/sap/fe/core/controllerextensions/Feedback.js +10 -11
  45. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +6 -6
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -0
  47. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +27 -36
  48. package/src/sap/fe/core/controllerextensions/InternalRouting.js +57 -78
  49. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +42 -50
  50. package/src/sap/fe/core/controllerextensions/KPIManagement.js +12 -19
  51. package/src/sap/fe/core/controllerextensions/MessageHandler.js +23 -17
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -7
  53. package/src/sap/fe/core/controllerextensions/PageReady.js +15 -21
  54. package/src/sap/fe/core/controllerextensions/Paginator.js +3 -3
  55. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/Recommendations.js +23 -36
  57. package/src/sap/fe/core/controllerextensions/Recommendations.ts +1 -1
  58. package/src/sap/fe/core/controllerextensions/Routing.js +3 -3
  59. package/src/sap/fe/core/controllerextensions/Share.js +19 -28
  60. package/src/sap/fe/core/controllerextensions/SideEffects.js +68 -32
  61. package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -6
  62. package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -5
  63. package/src/sap/fe/core/controllerextensions/ViewState.js +23 -24
  64. package/src/sap/fe/core/controllerextensions/ViewState.ts +6 -1
  65. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +13 -10
  66. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +13 -8
  67. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  68. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +15 -16
  69. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +3 -4
  70. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +288 -0
  71. package/src/sap/fe/core/controllerextensions/dialog/{OperationsDialog.block.tsx → OperationsDialog.tsx} +27 -29
  72. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +41 -5
  73. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +61 -8
  74. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +404 -0
  75. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +502 -0
  76. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +35 -43
  77. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +34 -14
  78. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -27
  79. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +27 -15
  80. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +51 -39
  81. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +75 -34
  82. package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +4 -4
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +88 -427
  84. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +82 -620
  85. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +9 -5
  86. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +6 -5
  87. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +116 -79
  88. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +87 -13
  89. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +4 -6
  90. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +5 -7
  91. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +6 -7
  92. package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +4 -4
  93. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +58 -20
  94. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -4
  95. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
  96. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +1 -1
  97. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +9 -12
  98. package/src/sap/fe/core/controls/CommandExecution.js +2 -2
  99. package/src/sap/fe/core/controls/ComponentLoader.js +20 -21
  100. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +250 -0
  101. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/{DraftDataLossDialog.block.tsx → DraftDataLossDialog.tsx} +31 -19
  102. package/src/sap/fe/core/controls/FormElementWrapper.js +19 -21
  103. package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +114 -0
  104. package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +115 -0
  105. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +454 -0
  106. package/src/sap/fe/core/controls/Recommendations/{ConfirmRecommendationDialog.block.tsx → ConfirmRecommendationDialog.tsx} +5 -9
  107. package/src/sap/fe/core/converters/ConverterContext.js +17 -18
  108. package/src/sap/fe/core/converters/ConverterContext.ts +10 -15
  109. package/src/sap/fe/core/converters/ManifestSettings.js +29 -28
  110. package/src/sap/fe/core/converters/ManifestSettings.ts +22 -1
  111. package/src/sap/fe/core/converters/ManifestWrapper.js +26 -48
  112. package/src/sap/fe/core/converters/MetaModelConverter.js +21 -28
  113. package/src/sap/fe/core/converters/MetaModelConverter.ts +2 -0
  114. package/src/sap/fe/core/converters/TemplateConverter.js +17 -21
  115. package/src/sap/fe/core/converters/TemplateConverter.ts +5 -3
  116. package/src/sap/fe/core/converters/annotations/DataField.js +69 -66
  117. package/src/sap/fe/core/converters/annotations/DataField.ts +30 -0
  118. package/src/sap/fe/core/converters/common/AnnotationConverter.js +20 -23
  119. package/src/sap/fe/core/converters/controls/Common/Action.js +178 -43
  120. package/src/sap/fe/core/converters/controls/Common/Action.ts +202 -19
  121. package/src/sap/fe/core/converters/controls/Common/Chart.js +47 -22
  122. package/src/sap/fe/core/converters/controls/Common/Chart.ts +50 -5
  123. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +16 -23
  124. package/src/sap/fe/core/converters/controls/Common/Form.js +25 -38
  125. package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -0
  126. package/src/sap/fe/core/converters/controls/Common/KPI.js +32 -47
  127. package/src/sap/fe/core/converters/controls/Common/Table.js +464 -506
  128. package/src/sap/fe/core/converters/controls/Common/Table.ts +335 -219
  129. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +17 -28
  130. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -2
  131. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +66 -90
  132. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +10 -1
  133. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +49 -73
  134. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +6 -10
  135. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +35 -50
  136. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +110 -60
  137. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +137 -41
  138. package/src/sap/fe/core/converters/helpers/Aggregation.js +19 -30
  139. package/src/sap/fe/core/converters/helpers/Aggregation.ts +5 -5
  140. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +11 -14
  141. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +14 -21
  142. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +4 -6
  143. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -7
  144. package/src/sap/fe/core/converters/helpers/Key.js +1 -1
  145. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +2 -3
  146. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +18 -52
  147. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -34
  148. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +103 -74
  149. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +111 -39
  150. package/src/sap/fe/core/converters/templates/ListReportConverter.js +28 -31
  151. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +17 -9
  152. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +61 -52
  153. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +60 -21
  154. package/src/sap/fe/core/definition/FEDefinition.js +104 -44
  155. package/src/sap/fe/core/designtime/AppComponent.designtime.js +37 -7
  156. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +42 -2
  157. package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -5
  158. package/src/sap/fe/core/formatters/FiscalFormat.js +24 -24
  159. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -23
  160. package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -18
  161. package/src/sap/fe/core/fpm/Component.js +12 -14
  162. package/src/sap/fe/core/fpm/manifest.json +1 -1
  163. package/src/sap/fe/core/helpers/AppStartupHelper.js +20 -15
  164. package/src/sap/fe/core/helpers/AppStartupHelper.ts +22 -13
  165. package/src/sap/fe/core/helpers/BindingHelper.js +3 -3
  166. package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
  167. package/src/sap/fe/core/helpers/DeleteHelper.js +55 -62
  168. package/src/sap/fe/core/helpers/DeleteHelper.ts +48 -51
  169. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +4 -7
  170. package/src/sap/fe/core/helpers/FPMHelper.js +4 -7
  171. package/src/sap/fe/core/helpers/HTTP503Handler.js +2 -1
  172. package/src/sap/fe/core/helpers/HTTP503Handler.ts +4 -3
  173. package/src/sap/fe/core/helpers/KeepAliveHelper.js +5 -5
  174. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +6 -6
  175. package/src/sap/fe/core/helpers/LoaderUtils.js +8 -3
  176. package/src/sap/fe/core/helpers/LoaderUtils.ts +15 -4
  177. package/src/sap/fe/core/helpers/MessageStrip.js +3 -4
  178. package/src/sap/fe/core/helpers/MetaModelFunction.js +26 -40
  179. package/src/sap/fe/core/helpers/MetaPath.js +9 -7
  180. package/src/sap/fe/core/helpers/MetaPath.ts +9 -3
  181. package/src/sap/fe/core/helpers/ModelHelper.js +33 -57
  182. package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
  183. package/src/sap/fe/core/helpers/PasteHelper.js +11 -19
  184. package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
  185. package/src/sap/fe/core/helpers/RecommendationHelper.js +3 -4
  186. package/src/sap/fe/core/helpers/ResourceModelHelper.js +3 -5
  187. package/src/sap/fe/core/helpers/SizeHelper.js +3 -5
  188. package/src/sap/fe/core/helpers/StableIdHelper.js +13 -11
  189. package/src/sap/fe/core/helpers/StableIdHelper.ts +5 -1
  190. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +28 -38
  191. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  192. package/src/sap/fe/core/helpers/TitleHelper.js +19 -40
  193. package/src/sap/fe/core/helpers/TitleHelper.ts +5 -25
  194. package/src/sap/fe/core/helpers/TypeGuards.js +25 -18
  195. package/src/sap/fe/core/helpers/TypeGuards.ts +7 -0
  196. package/src/sap/fe/core/helpers/WebSocket.js +4 -4
  197. package/src/sap/fe/core/library.js +8 -7
  198. package/src/sap/fe/core/library.ts +2 -0
  199. package/src/sap/fe/core/manifestMerger/AddNewPage.js +9 -11
  200. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +14 -25
  201. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +15 -17
  202. package/src/sap/fe/core/messagebundle.properties +21 -0
  203. package/src/sap/fe/core/messagebundle_ar.properties +5 -1
  204. package/src/sap/fe/core/messagebundle_bg.properties +4 -0
  205. package/src/sap/fe/core/messagebundle_ca.properties +4 -0
  206. package/src/sap/fe/core/messagebundle_cnr.properties +4 -0
  207. package/src/sap/fe/core/messagebundle_cs.properties +8 -4
  208. package/src/sap/fe/core/messagebundle_cy.properties +4 -0
  209. package/src/sap/fe/core/messagebundle_da.properties +4 -0
  210. package/src/sap/fe/core/messagebundle_de.properties +4 -0
  211. package/src/sap/fe/core/messagebundle_el.properties +4 -0
  212. package/src/sap/fe/core/messagebundle_en.properties +4 -0
  213. package/src/sap/fe/core/messagebundle_en_GB.properties +4 -0
  214. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -0
  215. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +249 -231
  216. package/src/sap/fe/core/messagebundle_es.properties +5 -1
  217. package/src/sap/fe/core/messagebundle_es_MX.properties +4 -0
  218. package/src/sap/fe/core/messagebundle_et.properties +4 -0
  219. package/src/sap/fe/core/messagebundle_fi.properties +4 -0
  220. package/src/sap/fe/core/messagebundle_fr.properties +6 -2
  221. package/src/sap/fe/core/messagebundle_fr_CA.properties +4 -0
  222. package/src/sap/fe/core/messagebundle_hi.properties +4 -0
  223. package/src/sap/fe/core/messagebundle_hr.properties +4 -0
  224. package/src/sap/fe/core/messagebundle_hu.properties +4 -0
  225. package/src/sap/fe/core/messagebundle_id.properties +4 -0
  226. package/src/sap/fe/core/messagebundle_it.properties +4 -0
  227. package/src/sap/fe/core/messagebundle_iw.properties +4 -0
  228. package/src/sap/fe/core/messagebundle_ja.properties +4 -0
  229. package/src/sap/fe/core/messagebundle_kk.properties +4 -0
  230. package/src/sap/fe/core/messagebundle_ko.properties +4 -0
  231. package/src/sap/fe/core/messagebundle_lt.properties +4 -0
  232. package/src/sap/fe/core/messagebundle_lv.properties +4 -0
  233. package/src/sap/fe/core/messagebundle_mk.properties +4 -0
  234. package/src/sap/fe/core/messagebundle_ms.properties +4 -0
  235. package/src/sap/fe/core/messagebundle_nl.properties +4 -0
  236. package/src/sap/fe/core/messagebundle_no.properties +4 -0
  237. package/src/sap/fe/core/messagebundle_pl.properties +4 -0
  238. package/src/sap/fe/core/messagebundle_pt.properties +4 -0
  239. package/src/sap/fe/core/messagebundle_pt_PT.properties +4 -0
  240. package/src/sap/fe/core/messagebundle_ro.properties +4 -0
  241. package/src/sap/fe/core/messagebundle_ru.properties +4 -0
  242. package/src/sap/fe/core/messagebundle_sh.properties +4 -0
  243. package/src/sap/fe/core/messagebundle_sk.properties +4 -0
  244. package/src/sap/fe/core/messagebundle_sl.properties +4 -0
  245. package/src/sap/fe/core/messagebundle_sr.properties +4 -0
  246. package/src/sap/fe/core/messagebundle_sv.properties +4 -0
  247. package/src/sap/fe/core/messagebundle_th.properties +4 -0
  248. package/src/sap/fe/core/messagebundle_tr.properties +5 -1
  249. package/src/sap/fe/core/messagebundle_uk.properties +4 -0
  250. package/src/sap/fe/core/messagebundle_vi.properties +4 -0
  251. package/src/sap/fe/core/messagebundle_zh_CN.properties +4 -0
  252. package/src/sap/fe/core/messagebundle_zh_TW.properties +4 -0
  253. package/src/sap/fe/core/operationsHelper.js +23 -27
  254. package/src/sap/fe/core/operationsHelper.ts +6 -7
  255. package/src/sap/fe/core/rootView/Fcl.controller.js +53 -40
  256. package/src/sap/fe/core/rootView/Fcl.controller.ts +42 -7
  257. package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -10
  258. package/src/sap/fe/core/rootView/RootViewBaseController.js +22 -21
  259. package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -2
  260. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
  261. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +4 -3
  262. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -0
  263. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +12 -10
  264. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +6 -2
  265. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +8 -13
  266. package/src/sap/fe/core/services/ContextSharingServiceFactory.js +5 -7
  267. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +31 -8
  268. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +31 -5
  269. package/src/sap/fe/core/services/InlineEditServiceFactory.js +190 -0
  270. package/src/sap/fe/core/services/InlineEditServiceFactory.ts +226 -0
  271. package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -15
  272. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
  273. package/src/sap/fe/core/services/RoutingServiceFactory.js +76 -56
  274. package/src/sap/fe/core/services/RoutingServiceFactory.ts +47 -14
  275. package/src/sap/fe/core/services/ShellServicesFactory.js +32 -34
  276. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +75 -60
  277. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +58 -12
  278. package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -9
  279. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +13 -18
  280. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -0
  281. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +7 -9
  282. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +12 -16
  283. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +1 -1
  284. package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +4 -7
  285. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +5 -6
  286. package/src/sap/fe/core/support/CommonHelper.js +2 -3
  287. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  288. package/src/sap/fe/core/templating/ActionHelper.js +3 -4
  289. package/src/sap/fe/core/templating/CommonFormatters.js +6 -8
  290. package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
  291. package/src/sap/fe/core/templating/CriticalityFormatters.js +53 -5
  292. package/src/sap/fe/core/templating/CriticalityFormatters.ts +129 -7
  293. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -11
  294. package/src/sap/fe/core/templating/DataFieldFormatters.ts +1 -1
  295. package/src/sap/fe/core/templating/DataModelPathHelper.js +33 -56
  296. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  297. package/src/sap/fe/core/templating/EntitySetHelper.js +11 -19
  298. package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
  299. package/src/sap/fe/core/templating/FieldControlHelper.js +13 -20
  300. package/src/sap/fe/core/templating/FilterTemplating.js +6 -9
  301. package/src/sap/fe/core/templating/PropertyHelper.js +33 -63
  302. package/src/sap/fe/core/templating/PropertyHelper.ts +0 -1
  303. package/src/sap/fe/core/templating/SemanticObjectHelper.js +13 -21
  304. package/src/sap/fe/core/templating/UIFormatters.js +57 -78
  305. package/src/sap/fe/core/templating/UIFormatters.ts +2 -1
  306. package/src/sap/fe/core/type/Date.js +2 -2
  307. package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
  308. package/src/sap/fe/core/type/EDM.js +3 -5
  309. package/src/sap/fe/core/type/Email.js +17 -6
  310. package/src/sap/fe/core/type/Email.ts +23 -4
  311. package/src/sap/fe/core/type/FiscalDate.js +8 -9
  312. package/src/sap/fe/core/type/InputMask.js +3 -4
  313. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +0 -299
  314. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +0 -87
  315. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +0 -43
  316. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +0 -251
  317. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +0 -471
@@ -5,15 +5,13 @@
5
5
  sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppStateHandler", "sap/fe/core/controllerextensions/routing/RouterProxy", "sap/fe/core/helpers/HTTP503Handler", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/PromiseKeeper", "sap/fe/core/library", "sap/fe/core/manifestMerger/ChangePageConfiguration", "sap/fe/core/support/Diagnostics", "sap/m/routing/Router", "sap/ui/core/Lib", "sap/ui/core/UIComponent", "sap/ui/model/json/JSONModel", "./controllerextensions/BusyLocker", "./converters/MetaModelConverter", "./helpers/ResourceModelHelper"], function (Log, ClassSupport, AppStateHandler, RouterProxy, HTTP503Handler, ModelHelper, PromiseKeeper, library, ChangePageConfiguration, Diagnostics, Router, Library, UIComponent, JSONModel, BusyLocker, MetaModelConverter, ResourceModelHelper) {
6
6
  "use strict";
7
7
 
8
- var _dec, _dec2, _class, _class2, _descriptor, _class3;
8
+ var _dec, _dec2, _class, _class2, _descriptor, _AppComponent;
9
9
  var getResourceModel = ResourceModelHelper.getResourceModel;
10
10
  var deleteModelCacheData = MetaModelConverter.deleteModelCacheData;
11
- var cleanPageConfigurationChanges = ChangePageConfiguration.cleanPageConfigurationChanges;
12
11
  var changeConfiguration = ChangePageConfiguration.changeConfiguration;
13
12
  var implementInterface = ClassSupport.implementInterface;
14
13
  var defineUI5Class = ClassSupport.defineUI5Class;
15
14
  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }
16
- function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
17
15
  function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
18
16
  function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
19
17
  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
@@ -110,6 +108,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
110
108
  ContextSharingService: {
111
109
  factoryName: "sap.fe.core.services.ContextSharingService",
112
110
  startup: "waitFor"
111
+ },
112
+ inlineEditService: {
113
+ factoryName: "sap.fe.core.services.InlineEditService",
114
+ startup: "waitFor"
113
115
  }
114
116
  },
115
117
  rootView: {
@@ -134,29 +136,26 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
134
136
  },
135
137
  designtime: "sap/fe/core/designtime/AppComponent.designtime",
136
138
  library: "sap.fe.core"
137
- }), _dec2 = implementInterface("sap.ui.core.IAsyncContentCreation"), _dec(_class = (_class2 = (_class3 = /*#__PURE__*/function (_UIComponent) {
138
- _inheritsLoose(AppComponent, _UIComponent);
139
+ }), _dec2 = implementInterface("sap.ui.core.IAsyncContentCreation"), _dec(_class = (_class2 = (_AppComponent = /*#__PURE__*/function (_UIComponent) {
139
140
  function AppComponent() {
140
141
  var _this;
141
142
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
142
143
  args[_key] = arguments[_key];
143
144
  }
144
145
  _this = _UIComponent.call(this, ...args) || this;
145
- _initializerDefineProperty(_this, "__implements__sap_ui_core_IAsyncContentCreation", _descriptor, _assertThisInitialized(_this));
146
+ _initializerDefineProperty(_this, "__implements__sap_ui_core_IAsyncContentCreation", _descriptor, _this);
146
147
  _this.startupMode = StartupMode.Normal;
147
148
  _this._startedServices = [];
148
149
  _this.isAdaptationEnabled = false;
149
150
  _this.isExiting = false;
151
+ _this.pageConfigurationChanges = {};
150
152
  return _this;
151
153
  }
152
- /**
153
- * Singleton to hold processes from libraries that need to be run for every instance prior to startup.
154
- */
154
+ _inheritsLoose(AppComponent, _UIComponent);
155
155
  var _proto = AppComponent.prototype;
156
156
  _proto._isFclEnabled = function _isFclEnabled() {
157
- var _oManifestUI5$routing, _oManifestUI5$routing2;
158
157
  const oManifestUI5 = this.getManifestEntry("sap.ui5");
159
- return (oManifestUI5 === null || oManifestUI5 === void 0 ? void 0 : (_oManifestUI5$routing = oManifestUI5.routing) === null || _oManifestUI5$routing === void 0 ? void 0 : (_oManifestUI5$routing2 = _oManifestUI5$routing.config) === null || _oManifestUI5$routing2 === void 0 ? void 0 : _oManifestUI5$routing2.routerClass) === NAVCONF.FCL.ROUTERCLASS;
158
+ return oManifestUI5?.routing?.config?.routerClass === NAVCONF.FCL.ROUTERCLASS;
160
159
  };
161
160
  _proto.setAdaptationMode = function setAdaptationMode(isAdaptationEnabled) {
162
161
  this.isAdaptationEnabled = isAdaptationEnabled;
@@ -188,13 +187,19 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
188
187
  * @public
189
188
  */;
190
189
  _proto.changePageConfiguration = function changePageConfiguration(pageId, path, value) {
191
- var _manifest$sapFe, _manifest$sapFe$app;
192
- const manifest = changeConfiguration(this.getManifest(), pageId, path, value, true);
193
- if (path === "app/disableInputAssistance" && (manifest === null || manifest === void 0 ? void 0 : (_manifest$sapFe = manifest["sap.fe"]) === null || _manifest$sapFe === void 0 ? void 0 : (_manifest$sapFe$app = _manifest$sapFe["app"]) === null || _manifest$sapFe$app === void 0 ? void 0 : _manifest$sapFe$app["disableInputAssistance"]) === value) {
190
+ const manifest = changeConfiguration(this.getManifest(), pageId, path, value, true, this);
191
+ if (path === "app/disableInputAssistance" && manifest?.["sap.fe"]?.["app"]?.["disableInputAssistance"] === value) {
194
192
  this.getEnvironmentCapabilities().setCapability("DisableInputAssistance", value);
195
193
  }
196
194
  }
197
195
 
196
+ /**
197
+ * Cleans all registered page configuration changes.
198
+ */;
199
+ _proto.cleanPageConfigurationChanges = function cleanPageConfigurationChanges() {
200
+ this.pageConfigurationChanges = {};
201
+ }
202
+
198
203
  /**
199
204
  * Get a reference to the RouterProxy.
200
205
  * @returns A Reference to the RouterProxy
@@ -263,7 +268,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
263
268
  this.startupMode = StartupMode.Deeplink;
264
269
  };
265
270
  _proto.init = function init() {
266
- var _oModel$isA, _this$getManifestEntr, _this$getManifestEntr2;
267
271
  this._initializedKeeper = new PromiseKeeper();
268
272
  this.initialized = this._initializedKeeper.promise;
269
273
  const uiModel = new JSONModel({
@@ -289,7 +293,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
289
293
  this._oAppStateHandler = new AppStateHandler(this);
290
294
  this._oDiagnostics = new Diagnostics();
291
295
  const oModel = this.getModel();
292
- if (oModel !== null && oModel !== void 0 && (_oModel$isA = oModel.isA) !== null && _oModel$isA !== void 0 && _oModel$isA.call(oModel, "sap.ui.model.odata.v4.ODataModel")) {
296
+ if (oModel?.isA?.("sap.ui.model.odata.v4.ODataModel")) {
293
297
  ModelHelper.enhanceODataModel(oModel, this);
294
298
  oModel.setRetryAfterHandler(this.http503RetryHandler.bind(this));
295
299
  this.entityContainer = oModel.getMetaModel().requestObject("/$EntityContainer/");
@@ -297,7 +301,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
297
301
  // not an OData v4 service
298
302
  this.entityContainer = Promise.resolve();
299
303
  }
300
- if ((_this$getManifestEntr = this.getManifestEntry("sap.fe")) !== null && _this$getManifestEntr !== void 0 && (_this$getManifestEntr2 = _this$getManifestEntr.app) !== null && _this$getManifestEntr2 !== void 0 && _this$getManifestEntr2.disableCollaborationDraft) {
304
+ if (this.getManifestEntry("sap.fe")?.app?.disableCollaborationDraft) {
301
305
  // disable the collaboration draft globally in case private manifest flag is set
302
306
  // this allows customers to disable the collaboration draft in case we run into issues with the first delivery
303
307
  // this will be removed with the next S/4 release
@@ -316,9 +320,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
316
320
  return HTTP503Handler.handle503Delay(error, this.getRootControl(), getResourceModel(this));
317
321
  };
318
322
  _proto.checkRoutingConfiguration = function checkRoutingConfiguration(oManifestUI5) {
319
- var _oManifestUI5$rootVie;
320
- if (oManifestUI5 !== null && oManifestUI5 !== void 0 && (_oManifestUI5$rootVie = oManifestUI5.rootView) !== null && _oManifestUI5$rootVie !== void 0 && _oManifestUI5$rootVie.viewName) {
321
- var _oManifestUI5$routing3, _oManifestUI5$routing4, _oManifestUI5$routing5, _oManifestUI5$routing6, _oManifestUI5$rootVie2, _oManifestUI5$rootVie3;
323
+ if (oManifestUI5?.rootView?.viewName) {
322
324
  // The application specified an own root view in the manifest
323
325
 
324
326
  // Root View was moved from sap.fe.templates to sap.fe.core - keep it compatible
@@ -327,13 +329,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
327
329
  } else if (oManifestUI5.rootView.viewName === NAVCONF.NAVCONTAINER.VIEWNAME_COMPATIBILITY) {
328
330
  oManifestUI5.rootView.viewName = NAVCONF.NAVCONTAINER.VIEWNAME;
329
331
  }
330
- if (oManifestUI5.rootView.viewName === NAVCONF.FCL.VIEWNAME && ((_oManifestUI5$routing3 = oManifestUI5.routing) === null || _oManifestUI5$routing3 === void 0 ? void 0 : (_oManifestUI5$routing4 = _oManifestUI5$routing3.config) === null || _oManifestUI5$routing4 === void 0 ? void 0 : _oManifestUI5$routing4.routerClass) === NAVCONF.FCL.ROUTERCLASS) {
332
+ if (oManifestUI5.rootView.viewName === NAVCONF.FCL.VIEWNAME && oManifestUI5.routing?.config?.routerClass === NAVCONF.FCL.ROUTERCLASS) {
331
333
  Log.info(`Rootcontainer: "${NAVCONF.FCL.VIEWNAME}" - Routerclass: "${NAVCONF.FCL.ROUTERCLASS}"`);
332
- } else if (oManifestUI5.rootView.viewName === NAVCONF.NAVCONTAINER.VIEWNAME && ((_oManifestUI5$routing5 = oManifestUI5.routing) === null || _oManifestUI5$routing5 === void 0 ? void 0 : (_oManifestUI5$routing6 = _oManifestUI5$routing5.config) === null || _oManifestUI5$routing6 === void 0 ? void 0 : _oManifestUI5$routing6.routerClass) === NAVCONF.NAVCONTAINER.ROUTERCLASS) {
334
+ } else if (oManifestUI5.rootView.viewName === NAVCONF.NAVCONTAINER.VIEWNAME && oManifestUI5.routing?.config?.routerClass === NAVCONF.NAVCONTAINER.ROUTERCLASS) {
333
335
  Log.info(`Rootcontainer: "${NAVCONF.NAVCONTAINER.VIEWNAME}" - Routerclass: "${NAVCONF.NAVCONTAINER.ROUTERCLASS}"`);
334
- } else if ((_oManifestUI5$rootVie2 = oManifestUI5.rootView) !== null && _oManifestUI5$rootVie2 !== void 0 && (_oManifestUI5$rootVie3 = _oManifestUI5$rootVie2.viewName) !== null && _oManifestUI5$rootVie3 !== void 0 && _oManifestUI5$rootVie3.includes("sap.fe.core.rootView")) {
335
- var _oManifestUI5$routing7, _oManifestUI5$routing8;
336
- throw Error(`\nWrong configuration for the couple (rootView/routerClass) in manifest file.\n` + `Current values are :(${oManifestUI5.rootView.viewName}/${((_oManifestUI5$routing7 = oManifestUI5.routing) === null || _oManifestUI5$routing7 === void 0 ? void 0 : (_oManifestUI5$routing8 = _oManifestUI5$routing7.config) === null || _oManifestUI5$routing8 === void 0 ? void 0 : _oManifestUI5$routing8.routerClass) || "<missing router class>"})\n` + `Expected values are \n` + `\t - (${NAVCONF.NAVCONTAINER.VIEWNAME}/${NAVCONF.NAVCONTAINER.ROUTERCLASS})\n` + `\t - (${NAVCONF.FCL.VIEWNAME}/${NAVCONF.FCL.ROUTERCLASS})`);
336
+ } else if (oManifestUI5.rootView?.viewName?.includes("sap.fe.core.rootView")) {
337
+ throw Error(`\nWrong configuration for the couple (rootView/routerClass) in manifest file.\n` + `Current values are :(${oManifestUI5.rootView.viewName}/${oManifestUI5.routing?.config?.routerClass || "<missing router class>"})\n` + `Expected values are \n` + `\t - (${NAVCONF.NAVCONTAINER.VIEWNAME}/${NAVCONF.NAVCONTAINER.ROUTERCLASS})\n` + `\t - (${NAVCONF.FCL.VIEWNAME}/${NAVCONF.FCL.ROUTERCLASS})`);
337
338
  } else {
338
339
  Log.info(`Rootcontainer: "${oManifestUI5.rootView.viewName}" - Routerclass: "${NAVCONF.NAVCONTAINER.ROUTERCLASS}"`);
339
340
  }
@@ -394,7 +395,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
394
395
  delete this._oRouterProxy;
395
396
  deleteModelCacheData(this.getMetaModel());
396
397
  this.getModel("ui").destroy();
397
- cleanPageConfigurationChanges();
398
+ this.cleanPageConfigurationChanges();
398
399
  };
399
400
  _proto.getMetaModel = function getMetaModel() {
400
401
  return this.getModel().getMetaModel();
@@ -403,11 +404,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
403
404
  return this._oDiagnostics;
404
405
  };
405
406
  _proto.destroy = function destroy(bSuppressInvalidate) {
406
- var _this$getRoutingServi, _this$getRoutingServi2;
407
407
  this.isExiting = true;
408
408
 
409
409
  // LEAKS, with workaround for some Flex / MDC issue
410
410
  try {
411
+ this.unregisterStickySessionCallbacks();
411
412
  delete AppComponent.instanceMap[this.getId()];
412
413
 
413
414
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -424,12 +425,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
424
425
  // @ts-ignore
425
426
  const oMainModel = this.oModels[undefined];
426
427
  let oHeaders;
427
- if (oMainModel !== null && oMainModel !== void 0 && oMainModel.oRequestor) {
428
+ if (oMainModel?.oRequestor) {
428
429
  oHeaders = Object.assign({}, oMainModel.oRequestor.mHeaders);
429
430
  }
430
431
 
431
432
  // As we need to cleanup the application / handle the dirty object we need to call our cleanup before the models are destroyed
432
- (_this$getRoutingServi = this.getRoutingService()) === null || _this$getRoutingServi === void 0 ? void 0 : (_this$getRoutingServi2 = _this$getRoutingServi.beforeExit) === null || _this$getRoutingServi2 === void 0 ? void 0 : _this$getRoutingServi2.call(_this$getRoutingServi);
433
+ this.getRoutingService()?.beforeExit?.();
433
434
  _UIComponent.prototype.destroy.call(this, bSuppressInvalidate);
434
435
  if (oHeaders && oMainModel.oRequestor) {
435
436
  oMainModel.oRequestor.mHeaders = oHeaders;
@@ -468,6 +469,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
468
469
  _proto.getValueHelpHistoryService = function getValueHelpHistoryService() {
469
470
  return {};
470
471
  };
472
+ _proto.getInlineEditService = function getInlineEditService() {
473
+ return {};
474
+ };
471
475
  _proto.getStartupParameters = async function getStartupParameters() {
472
476
  const oComponentData = this.getComponentData();
473
477
  return Promise.resolve(oComponentData && oComponentData.startupParameters || {});
@@ -475,16 +479,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
475
479
  _proto.restore = function restore() {
476
480
  // called by FLP when app sap-keep-alive is enabled and app is restored
477
481
  for (const startedService of this._startedServices) {
478
- var _startedService$onRes;
479
- (_startedService$onRes = startedService.onRestore) === null || _startedService$onRes === void 0 ? void 0 : _startedService$onRes.call(startedService);
482
+ startedService.onRestore?.();
480
483
  }
481
484
  this.getRootViewController().viewState.onRestore();
485
+
486
+ // Reset all values in versionActivationStatus to false
487
+ AppStateHandler.resetVersionActivationStatus();
482
488
  };
483
489
  _proto.suspend = function suspend() {
484
490
  // called by FLP when app sap-keep-alive is enabled and app is suspended
485
491
  for (const startedService of this._startedServices) {
486
- var _startedService$onSus;
487
- (_startedService$onSus = startedService.onSuspend) === null || _startedService$onSus === void 0 ? void 0 : _startedService$onSus.call(startedService);
492
+ startedService.onSuspend?.();
488
493
  }
489
494
  this.getRootViewController().viewState.onSuspend();
490
495
  }
@@ -525,16 +530,49 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
525
530
  */;
526
531
  AppComponent.registerInstanceDependentProcessForStartUp = function registerInstanceDependentProcessForStartUp(fnProcess) {
527
532
  this.instanceDependentProcesses.push(fnProcess);
533
+ }
534
+
535
+ /**
536
+ * Registers the callbacks related to a sticky edit session.
537
+ * @param dirtyStateProviderCallback
538
+ * @param sessionTimeoutCallback
539
+ * @param discardAfterNavigationCallback
540
+ */;
541
+ _proto.registerStickySessionCallbacks = function registerStickySessionCallbacks(dirtyStateProviderCallback, sessionTimeoutCallback, discardAfterNavigationCallback) {
542
+ this.stickyDirtyStateProviderCallback = dirtyStateProviderCallback;
543
+ this.getShellServices().registerDirtyStateProvider(dirtyStateProviderCallback);
544
+ this.stickySessionTimeoutCallback = sessionTimeoutCallback;
545
+ this.getModel().attachSessionTimeout(sessionTimeoutCallback);
546
+ this.stickyDiscardAfterNavigationCallback = discardAfterNavigationCallback;
547
+ this.getRoutingService().attachRouteMatched({}, discardAfterNavigationCallback);
548
+ }
549
+
550
+ /**
551
+ * Unregisters the callbacks related to a sticky edit session.
552
+ */;
553
+ _proto.unregisterStickySessionCallbacks = function unregisterStickySessionCallbacks() {
554
+ if (this.stickyDirtyStateProviderCallback) {
555
+ this.getShellServices().deregisterDirtyStateProvider(this.stickyDirtyStateProviderCallback);
556
+ this.stickyDirtyStateProviderCallback = undefined;
557
+ }
558
+ if (this.stickySessionTimeoutCallback && this.getModel()) {
559
+ this.getModel().detachSessionTimeout(this.stickySessionTimeoutCallback);
560
+ this.stickySessionTimeoutCallback = undefined;
561
+ }
562
+ if (this.stickyDiscardAfterNavigationCallback) {
563
+ this.getRoutingService().detachRouteMatched(this.stickyDiscardAfterNavigationCallback);
564
+ this.stickyDiscardAfterNavigationCallback = undefined;
565
+ }
528
566
  };
529
567
  return AppComponent;
530
- }(UIComponent), _class3.instanceMap = {}, _class3.instanceDependentProcesses = [], _class3), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "__implements__sap_ui_core_IAsyncContentCreation", [_dec2], {
568
+ }(UIComponent), _AppComponent.instanceMap = {}, _AppComponent.instanceDependentProcesses = [], _AppComponent), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "__implements__sap_ui_core_IAsyncContentCreation", [_dec2], {
531
569
  configurable: true,
532
570
  enumerable: true,
533
571
  writable: true,
534
572
  initializer: function () {
535
573
  return true;
536
574
  }
537
- })), _class2)) || _class);
575
+ }), _class2)) || _class);
538
576
  return AppComponent;
539
577
  }, false);
540
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJWSUVXTkFNRV9DT01QQVRJQklMSVRZIiwiUk9VVEVSQ0xBU1MiLCJOQVZDT05UQUlORVIiLCJfbVJvdXRlciIsIlJvdXRlciIsIkFwcENvbXBvbmVudCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsImNvbmZpZyIsImZ1bGxXaWR0aCIsIm1hbmlmZXN0Iiwic2VydmljZXMiLCJyZXNvdXJjZU1vZGVsIiwiZmFjdG9yeU5hbWUiLCJzdGFydHVwIiwic2V0dGluZ3MiLCJidW5kbGVzIiwibW9kZWxOYW1lIiwicm91dGluZ1NlcnZpY2UiLCJzaGVsbFNlcnZpY2VzIiwiU2hlbGxVSVNlcnZpY2UiLCJuYXZpZ2F0aW9uU2VydmljZSIsImVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiYXN5bmNDb21wb25lbnRTZXJ2aWNlIiwiY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsInRlbGVtZXRyeVNlcnZpY2UiLCJ2YWx1ZUhlbHBIaXN0b3J5U2VydmljZSIsIkNvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UiLCJDb250ZXh0U2hhcmluZ1NlcnZpY2UiLCJyb290VmlldyIsInZpZXdOYW1lIiwidHlwZSIsImFzeW5jIiwiaWQiLCJyb3V0aW5nIiwiY29udHJvbElkIiwicm91dGVyQ2xhc3MiLCJ2aWV3VHlwZSIsImNvbnRyb2xBZ2dyZWdhdGlvbiIsImNvbnRhaW5lck9wdGlvbnMiLCJwcm9wYWdhdGVNb2RlbCIsImRlc2lnbnRpbWUiLCJfZGVjMiIsImltcGxlbWVudEludGVyZmFjZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfY2xhc3MzIiwiX1VJQ29tcG9uZW50IiwiX2luaGVyaXRzTG9vc2UiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwic3RhcnR1cE1vZGUiLCJOb3JtYWwiLCJfc3RhcnRlZFNlcnZpY2VzIiwiaXNBZGFwdGF0aW9uRW5hYmxlZCIsImlzRXhpdGluZyIsIl9wcm90byIsInByb3RvdHlwZSIsIl9pc0ZjbEVuYWJsZWQiLCJfb01hbmlmZXN0VUk1JHJvdXRpbmciLCJfb01hbmlmZXN0VUk1JHJvdXRpbmcyIiwib01hbmlmZXN0VUk1IiwiZ2V0TWFuaWZlc3RFbnRyeSIsInNldEFkYXB0YXRpb25Nb2RlIiwiaXNBZGFwdGF0aW9uTW9kZSIsImluaXRpYWxpemVGZWF0dXJlVG9nZ2xlcyIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2hhbmdlUGFnZUNvbmZpZ3VyYXRpb24iLCJwYWdlSWQiLCJwYXRoIiwidmFsdWUiLCJfbWFuaWZlc3Qkc2FwRmUiLCJfbWFuaWZlc3Qkc2FwRmUkYXBwIiwiY2hhbmdlQ29uZmlndXJhdGlvbiIsImdldE1hbmlmZXN0IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJzZXRDYXBhYmlsaXR5IiwiZ2V0Um91dGVyUHJveHkiLCJfb1JvdXRlclByb3h5IiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiX29BcHBTdGF0ZUhhbmRsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q29udGVudCIsImdldFN0YXJ0dXBNb2RlIiwic2V0U3RhcnR1cE1vZGVDcmVhdGUiLCJDcmVhdGUiLCJzZXRTdGFydHVwTW9kZUF1dG9DcmVhdGUiLCJBdXRvQ3JlYXRlIiwic2V0U3RhcnR1cE1vZGVEZWVwbGluayIsIkRlZXBsaW5rIiwiaW5pdCIsIl9vTW9kZWwkaXNBIiwiX3RoaXMkZ2V0TWFuaWZlc3RFbnRyIiwiX3RoaXMkZ2V0TWFuaWZlc3RFbnRyMiIsIl9pbml0aWFsaXplZEtlZXBlciIsIlByb21pc2VLZWVwZXIiLCJpbml0aWFsaXplZCIsInByb21pc2UiLCJ1aU1vZGVsIiwiSlNPTk1vZGVsIiwiZWRpdE1vZGUiLCJFZGl0TW9kZSIsIkRpc3BsYXkiLCJpc0VkaXRhYmxlIiwiZHJhZnRTdGF0dXMiLCJEcmFmdFN0YXR1cyIsIkNsZWFyIiwiYnVzeSIsImJ1c3lMb2NhbCIsInBhZ2VzIiwib0ludGVybmFsTW9kZWwiLCJzZXREZWZhdWx0QmluZGluZ01vZGUiLCJNb2RlbEhlbHBlciIsImVuaGFuY2VVaUpTT05Nb2RlbCIsImVuaGFuY2VJbnRlcm5hbEpTT05Nb2RlbCIsInNldE1vZGVsIiwiYkluaXRpYWxpemVSb3V0aW5nIiwidW5kZWZpbmVkIiwiUm91dGVyUHJveHkiLCJBcHBTdGF0ZUhhbmRsZXIiLCJfb0RpYWdub3N0aWNzIiwiRGlhZ25vc3RpY3MiLCJvTW9kZWwiLCJnZXRNb2RlbCIsImlzQSIsImVuaGFuY2VPRGF0YU1vZGVsIiwic2V0UmV0cnlBZnRlckhhbmRsZXIiLCJodHRwNTAzUmV0cnlIYW5kbGVyIiwiYmluZCIsImVudGl0eUNvbnRhaW5lciIsImdldE1ldGFNb2RlbCIsInJlcXVlc3RPYmplY3QiLCJhcHAiLCJkaXNhYmxlQ29sbGFib3JhdGlvbkRyYWZ0IiwiY2hlY2tSb3V0aW5nQ29uZmlndXJhdGlvbiIsImluc3RhbmNlTWFwIiwiZ2V0SWQiLCJlcnJvciIsIkhUVFA1MDNIYW5kbGVyIiwiaGFuZGxlNTAzRGVsYXkiLCJnZXRSZXNvdXJjZU1vZGVsIiwiX29NYW5pZmVzdFVJNSRyb290VmllIiwiX29NYW5pZmVzdFVJNSRyb3V0aW5nMyIsIl9vTWFuaWZlc3RVSTUkcm91dGluZzQiLCJfb01hbmlmZXN0VUk1JHJvdXRpbmc1IiwiX29NYW5pZmVzdFVJNSRyb3V0aW5nNiIsIl9vTWFuaWZlc3RVSTUkcm9vdFZpZTIiLCJfb01hbmlmZXN0VUk1JHJvb3RWaWUzIiwiTG9nIiwiaW5mbyIsImluY2x1ZGVzIiwiX29NYW5pZmVzdFVJNSRyb3V0aW5nNyIsIl9vTWFuaWZlc3RVSTUkcm91dGluZzgiLCJFcnJvciIsIm9uU2VydmljZXNTdGFydGVkIiwiYWxsU2VydmljZXMiLCJhbGxTZXR0bGVkIiwiaW5zdGFuY2VEZXBlbmRlbnRQcm9jZXNzZXMiLCJtYXAiLCJmblByb2Nlc3MiLCJmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24iLCJ0aGVuIiwiYXR0YWNoUm91dGVNYXRjaGVycyIsImdldFJvdXRlciIsImluaXRpYWxpemUiLCJnZXRWYWx1ZUhlbHBIaXN0b3J5U2VydmljZSIsInJlZ2lzdGVyU2hlbGxIb29rIiwiY2F0Y2giLCJvUmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJkaXNwbGF5RXJyb3JQYWdlIiwiZ2V0VGV4dCIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJtZXNzYWdlIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJpbml0aWFsaXplUm91dGluZyIsImF0dGFjaEFmdGVySW5pdCIsImVyciIsInRvU3RyaW5nIiwiZXhpdCIsImRlc3Ryb3kiLCJkZWxldGVNb2RlbENhY2hlRGF0YSIsImNsZWFuUGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzIiwiZ2V0RGlhZ25vc3RpY3MiLCJiU3VwcHJlc3NJbnZhbGlkYXRlIiwiX3RoaXMkZ2V0Um91dGluZ1NlcnZpIiwiX3RoaXMkZ2V0Um91dGluZ1NlcnZpMiIsIndpbmRvdyIsIl9yb3V0aW5nIiwiZSIsIm9NYWluTW9kZWwiLCJvTW9kZWxzIiwib0hlYWRlcnMiLCJvUmVxdWVzdG9yIiwiT2JqZWN0IiwiYXNzaWduIiwibUhlYWRlcnMiLCJiZWZvcmVFeGl0IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsImdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UiLCJnZXRDb250ZXh0U2hhcmluZ1NlcnZpY2UiLCJnZXRUZWxlbWV0cnlTZXJ2aWNlIiwiZ2V0U3RhcnR1cFBhcmFtZXRlcnMiLCJvQ29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJzdGFydHVwUGFyYW1ldGVycyIsInJlc3RvcmUiLCJzdGFydGVkU2VydmljZSIsIl9zdGFydGVkU2VydmljZSRvblJlcyIsIm9uUmVzdG9yZSIsInZpZXdTdGF0ZSIsInN1c3BlbmQiLCJfc3RhcnRlZFNlcnZpY2Ukb25TdXMiLCJvblN1c3BlbmQiLCJuYXZpZ2F0ZUJhc2VkT25TdGFydHVwUGFyYW1ldGVyIiwiQnVzeUxvY2tlciIsImlzTG9ja2VkIiwiX21hbmFnZURlZXBMaW5rU3RhcnR1cCIsImV4Y2VwdGlvbiIsInVubG9jayIsImlzQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRW5hYmxlZCIsInJlZ2lzdGVySW5zdGFuY2VEZXBlbmRlbnRQcm9jZXNzRm9yU3RhcnRVcCIsInB1c2giLCJVSUNvbXBvbmVudCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQXBwQ29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgRmxleGlibGVDb2x1bW5MYXlvdXQgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgaW1wbGVtZW50SW50ZXJmYWNlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEFwcFN0YXRlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwU3RhdGVIYW5kbGVyXCI7XG5pbXBvcnQgUm91dGVyUHJveHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvUm91dGVyUHJveHlcIjtcbmltcG9ydCBIVFRQNTAzSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9IVFRQNTAzSGFuZGxlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgbGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgY2hhbmdlQ29uZmlndXJhdGlvbiwgY2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvbWFuaWZlc3RNZXJnZXIvQ2hhbmdlUGFnZUNvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB0eXBlIFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L1Jvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0U2hhcmluZ1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29udGV4dFNoYXJpbmdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvRW52aXJvbm1lbnRTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9OYXZpZ2F0aW9uU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgUm91dGluZ1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvUm91dGluZ1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IElTaGVsbFNlcnZpY2VzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NoZWxsU2VydmljZXNGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IFNpZGVFZmZlY3RzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IFRlbGVtZXRyeVNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVsZW1ldHJ5U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9jb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgdHlwZSBOYXZDb250YWluZXIgZnJvbSBcInNhcC9tL05hdkNvbnRhaW5lclwiO1xuaW1wb3J0IFJvdXRlciBmcm9tIFwic2FwL20vcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RDb250ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgVUlDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL1VJQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IElBc3luY0NvbnRlbnRDcmVhdGlvbiB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBkZWxldGVNb2RlbENhY2hlRGF0YSB9IGZyb20gXCIuL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcIi4vaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2VGYWN0b3J5XCI7XG5cbmNvbnN0IFN0YXJ0dXBNb2RlID0gbGlicmFyeS5TdGFydHVwTW9kZTtcbmNvbnN0IE5BVkNPTkYgPSB7XG5cdEZDTDoge1xuXHRcdFZJRVdOQU1FOiBcInNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbFwiLFxuXHRcdFZJRVdOQU1FX0NPTVBBVElCSUxJVFk6IFwic2FwLmZlLnRlbXBsYXRlcy5Sb290Q29udGFpbmVyLnZpZXcuRmNsXCIsXG5cdFx0Uk9VVEVSQ0xBU1M6IFwic2FwLmYucm91dGluZy5Sb3V0ZXJcIlxuXHR9LFxuXHROQVZDT05UQUlORVI6IHtcblx0XHRWSUVXTkFNRTogXCJzYXAuZmUuY29yZS5yb290Vmlldy5OYXZDb250YWluZXJcIixcblx0XHRWSUVXTkFNRV9DT01QQVRJQklMSVRZOiBcInNhcC5mZS50ZW1wbGF0ZXMuUm9vdENvbnRhaW5lci52aWV3Lk5hdkNvbnRhaW5lclwiLFxuXHRcdFJPVVRFUkNMQVNTOiBcInNhcC5tLnJvdXRpbmcuUm91dGVyXCJcblx0fVxufTtcblxuZXhwb3J0IHR5cGUgQ29tcG9uZW50RGF0YSA9IHtcblx0c3RhcnR1cFBhcmFtZXRlcnM/OiBTdGFydHVwUGFyYW1ldGVycztcblx0Ly9mZUVudmlyb25tZW50IGlzIG9iamVjdCB3aGljaCBpcyByZWNlaXZlZCBhcyBhIHBhcnQgb2YgdGhlIGNvbXBvbmVudCBkYXRhIGZvciBNeSBJbmJveCBhcHBsaWNhdGlvbnMuXG5cdGZlRW52aXJvbm1lbnQ/OiB7XG5cdFx0Ly9XaXRoaW4gdGhpcyBvYmplY3QgdGhleSBwYXNzIGEgZnVuY3Rpb24gY2FsbGVkIGdldEludGVudCgpIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNlbWFudGljT2JqZWN0IGFuZCBhY3Rpb24gYXMgc2VwYXJhdGUgcHJvcGVydHktdmFsdWUgZW50cmllcyB0aGF0IGFyZSB0aGVuIHVzZWQgdG8gdXBkYXRlIHRoZSByZWxhdGVkIGFwcHMgYnV0dG9uLlxuXHRcdGdldEludGVudDogRnVuY3Rpb247XG5cdFx0Ly9XaXRoaW4gdGhpcyBvYmplY3QgdGhleSBwYXNzIGEgZnVuY3Rpb24gY2FsbGVkIGdldFNoYXJlQ29udHJvbFZpc2liaWxpdHkoKSB0aGF0IHJldHVybnMgYm9vbGVhbiB2YWx1ZXModHJ1ZSBvciBmYWxzZSkgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgc2hhcmUgYnV0dG9uLlxuXHRcdGdldFNoYXJlQ29udHJvbFZpc2liaWxpdHk6IEZ1bmN0aW9uO1xuXHR9O1xufTtcbi8vIEtlZXAgYSByZWZlcmVuY2Ugc28gYXMgdG8ga2VlcCB0aGUgaW1wb3J0IGRlc3BpdGUgaXQgbm90IGJlaW5nIGRpcmVjdGx5IHVzZWRcbmNvbnN0IF9tUm91dGVyID0gUm91dGVyO1xuXG5leHBvcnQgdHlwZSBTdGFydHVwUGFyYW1ldGVycyA9IHtcblx0cHJlZmVycmVkTW9kZT86IHN0cmluZ1tdO1xufSAmIFJlY29yZDxzdHJpbmcsIHVua25vd25bXT47XG4vKipcbiAqIE1haW4gY2xhc3MgZm9yIGNvbXBvbmVudHMgdXNlZCBmb3IgYW4gYXBwbGljYXRpb24gaW4gU0FQIEZpb3JpIGVsZW1lbnRzLlxuICpcbiAqIEFwcGxpY2F0aW9uIGRldmVsb3BlcnMgdXNpbmcgdGhlIHRlbXBsYXRlcyBhbmQgYnVpbGRpbmcgYmxvY2tzIHByb3ZpZGVkIGJ5IFNBUCBGaW9yaSBlbGVtZW50cyBzaG91bGQgY3JlYXRlIHRoZWlyIGFwcHMgYnkgZXh0ZW5kaW5nIHRoaXMgY29tcG9uZW50LlxuICogVGhpcyBlbnN1cmVzIHRoYXQgYWxsIHRoZSBuZWNlc3Nhcnkgc2VydmljZXMgdGhhdCB5b3UgbmVlZCBmb3IgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhbmQgdGVtcGxhdGVzIHRvIHdvcmsgcHJvcGVybHkgYXJlIHN0YXJ0ZWQuXG4gKlxuICogV2hlbiB5b3UgdXNlIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCBhcyB0aGUgYmFzZSBjb21wb25lbnQsIHlvdSBhbHNvIG5lZWQgdG8gdXNlIGEgcm9vdFZpZXcuIFNBUCBGaW9yaSBlbGVtZW50cyBwcm92aWRlcyB0d28gb3B0aW9uczogPGJyLz5cbiAqIC0gc2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyIHdoZW4gdXNpbmcgc2FwLm0ucm91dGluZy5Sb3V0ZXIgPGJyLz5cbiAqIC0gc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsIHdoZW4gdXNpbmcgc2FwLmYucm91dGluZy5Sb3V0ZXIgKEZDTCB1c2UgY2FzZSkgPGJyLz5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XCIsIHtcblx0Y29uZmlnOiB7XG5cdFx0ZnVsbFdpZHRoOiB0cnVlXG5cdH0sXG5cdG1hbmlmZXN0OiB7XG5cdFx0XCJzYXAudWk1XCI6IHtcblx0XHRcdHNlcnZpY2VzOiB7XG5cdFx0XHRcdHJlc291cmNlTW9kZWw6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5SZXNvdXJjZU1vZGVsU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiLFxuXHRcdFx0XHRcdHNldHRpbmdzOiB7XG5cdFx0XHRcdFx0XHRidW5kbGVzOiBbXCJzYXAuZmUuY29yZS5tZXNzYWdlYnVuZGxlXCJdLFxuXHRcdFx0XHRcdFx0bW9kZWxOYW1lOiBcInNhcC5mZS5pMThuXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJvdXRpbmdTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuUm91dGluZ1NlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaGVsbFNlcnZpY2VzOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuU2hlbGxTZXJ2aWNlc1wiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFNoZWxsVUlTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLnVzaGVsbC51aTVzZXJ2aWNlLlNoZWxsVUlTZXJ2aWNlXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0bmF2aWdhdGlvblNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5OYXZpZ2F0aW9uU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVudmlyb25tZW50Q2FwYWJpbGl0aWVzOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuRW52aXJvbm1lbnRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0c2lkZUVmZmVjdHNTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuU2lkZUVmZmVjdHNTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXN5bmNDb21wb25lbnRTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQXN5bmNDb21wb25lbnRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y29sbGFib3JhdGl2ZVRvb2xzU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZWxlbWV0cnlTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuVGVsZW1ldHJ5U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdENvbnRleHRTaGFyaW5nU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkNvbnRleHRTaGFyaW5nU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRyb290Vmlldzoge1xuXHRcdFx0XHR2aWV3TmFtZTogTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUUsXG5cdFx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRpZDogXCJhcHBSb290Vmlld1wiXG5cdFx0XHR9LFxuXHRcdFx0cm91dGluZzoge1xuXHRcdFx0XHRjb25maWc6IHtcblx0XHRcdFx0XHRjb250cm9sSWQ6IFwiYXBwQ29udGVudFwiLFxuXHRcdFx0XHRcdHJvdXRlckNsYXNzOiBOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTUyxcblx0XHRcdFx0XHR2aWV3VHlwZTogXCJYTUxcIixcblx0XHRcdFx0XHRjb250cm9sQWdncmVnYXRpb246IFwicGFnZXNcIixcblx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRjb250YWluZXJPcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRwcm9wYWdhdGVNb2RlbDogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0ZGVzaWdudGltZTogXCJzYXAvZmUvY29yZS9kZXNpZ250aW1lL0FwcENvbXBvbmVudC5kZXNpZ250aW1lXCIsXG5cblx0bGlicmFyeTogXCJzYXAuZmUuY29yZVwiXG59KVxuY2xhc3MgQXBwQ29tcG9uZW50IGV4dGVuZHMgVUlDb21wb25lbnQgaW1wbGVtZW50cyBJQXN5bmNDb250ZW50Q3JlYXRpb24ge1xuXHRAaW1wbGVtZW50SW50ZXJmYWNlKFwic2FwLnVpLmNvcmUuSUFzeW5jQ29udGVudENyZWF0aW9uXCIpXG5cdF9faW1wbGVtZW50c19fc2FwX3VpX2NvcmVfSUFzeW5jQ29udGVudENyZWF0aW9uID0gdHJ1ZTtcblxuXHRzdGF0aWMgaW5zdGFuY2VNYXA6IFJlY29yZDxzdHJpbmcsIEFwcENvbXBvbmVudD4gPSB7fTtcblxuXHRwcml2YXRlIF9vUm91dGVyUHJveHkhOiBSb3V0ZXJQcm94eTtcblxuXHRwcml2YXRlIF9vQXBwU3RhdGVIYW5kbGVyITogQXBwU3RhdGVIYW5kbGVyO1xuXG5cdHByaXZhdGUgYkluaXRpYWxpemVSb3V0aW5nPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIF9vRGlhZ25vc3RpY3MhOiBEaWFnbm9zdGljcztcblxuXHRwcml2YXRlIGVudGl0eUNvbnRhaW5lciE6IFByb21pc2U8dm9pZD47XG5cblx0cHJpdmF0ZSBzdGFydHVwTW9kZTogc3RyaW5nID0gU3RhcnR1cE1vZGUuTm9ybWFsO1xuXG5cdHByaXZhdGUgX3N0YXJ0ZWRTZXJ2aWNlczogU2VydmljZTx1bmtub3duPltdID0gW107XG5cblx0cHVibGljIGluaXRpYWxpemVkITogUHJvbWlzZTx2b2lkPjtcblxuXHRwcml2YXRlIF9pbml0aWFsaXplZEtlZXBlciE6IFByb21pc2VLZWVwZXI8dm9pZD47XG5cblx0cHJpdmF0ZSBpc0FkYXB0YXRpb25FbmFibGVkID0gZmFsc2U7XG5cblx0cHVibGljIGlzRXhpdGluZyA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBTaW5nbGV0b24gdG8gaG9sZCBwcm9jZXNzZXMgZnJvbSBsaWJyYXJpZXMgdGhhdCBuZWVkIHRvIGJlIHJ1biBmb3IgZXZlcnkgaW5zdGFuY2UgcHJpb3IgdG8gc3RhcnR1cC5cblx0ICovXG5cdHByaXZhdGUgc3RhdGljIGluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc2VzOiAoKGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSA9PiBQcm9taXNlPHZvaWQ+KVtdID0gW107XG5cblx0X2lzRmNsRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBvTWFuaWZlc3RVSTUgPSB0aGlzLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpO1xuXHRcdHJldHVybiBvTWFuaWZlc3RVSTU/LnJvdXRpbmc/LmNvbmZpZz8ucm91dGVyQ2xhc3MgPT09IE5BVkNPTkYuRkNMLlJPVVRFUkNMQVNTO1xuXHR9XG5cblx0c2V0QWRhcHRhdGlvbk1vZGUoaXNBZGFwdGF0aW9uRW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuaXNBZGFwdGF0aW9uRW5hYmxlZCA9IGlzQWRhcHRhdGlvbkVuYWJsZWQ7XG5cdH1cblxuXHRpc0FkYXB0YXRpb25Nb2RlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmlzQWRhcHRhdGlvbkVuYWJsZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgYSBob29rIHRvIGluaXRpYWxpemUgZmVhdHVyZSB0b2dnbGVzLlxuXHQgKlxuXHQgKiBUaGlzIGhvb2sgaXMgYmVpbmcgY2FsbGVkIGJ5IHRoZSBTQVAgRmlvcmkgZWxlbWVudHMgQXBwQ29tcG9uZW50IGF0IHRoZSB0aW1lIGZlYXR1cmUgdG9nZ2xlcyBjYW4gYmUgaW5pdGlhbGl6ZWQuXG5cdCAqIFRvIGNoYW5nZSBwYWdlIGNvbmZpZ3VyYXRpb24sIHVzZSB0aGUge0BsaW5rIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCNjaGFuZ2VQYWdlQ29uZmlndXJhdGlvbn0gbWV0aG9kLlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aXRob3V0IGFueSB2YWx1ZSB0byBhbGxvdyBhc3luY2hyb25vdXMgcHJvY2Vzc2VzXG5cdCAqL1xuXHRhc3luYyBpbml0aWFsaXplRmVhdHVyZVRvZ2dsZXMoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gdGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYXBwbGljYXRpb25zXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZXMgdGhlIHBhZ2UgY29uZmlndXJhdGlvbiBvZiBTQVAgRmlvcmkgZWxlbWVudHMuXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIGVuYWJsZXMgeW91IHRvIGNoYW5nZSB0aGUgcGFnZSBjb25maWd1cmF0aW9uIG9mIFNBUCBGaW9yaSBlbGVtZW50cy5cblx0ICogQHBhcmFtIHBhZ2VJZCBUaGUgSUQgb2YgdGhlIHBhZ2UgZm9yIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGlzIHRvIGJlIGNoYW5nZWQuXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIGluIHRoZSBwYWdlIHNldHRpbmdzIGZvciB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpcyB0byBiZSBjaGFuZ2VkLlxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiB0aGUgY29uZmlndXJhdGlvbi4gVGhpcyBjb3VsZCBiZSBhIHBsYWluIHZhbHVlIGxpa2UgYSBzdHJpbmcsIG9yIGEgQm9vbGVhbiwgb3IgYSBzdHJ1Y3R1cmVkIG9iamVjdC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Y2hhbmdlUGFnZUNvbmZpZ3VyYXRpb24ocGFnZUlkOiBzdHJpbmcsIHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcblx0XHRjb25zdCBtYW5pZmVzdCA9IGNoYW5nZUNvbmZpZ3VyYXRpb24odGhpcy5nZXRNYW5pZmVzdCgpLCBwYWdlSWQsIHBhdGgsIHZhbHVlLCB0cnVlKSBhcyBNYW5pZmVzdENvbnRlbnQ7XG5cdFx0aWYgKFxuXHRcdFx0cGF0aCA9PT0gXCJhcHAvZGlzYWJsZUlucHV0QXNzaXN0YW5jZVwiICYmXG5cdFx0XHQobWFuaWZlc3Q/LltcInNhcC5mZVwiXSBhcyBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4pPy5bXCJhcHBcIl0/LltcImRpc2FibGVJbnB1dEFzc2lzdGFuY2VcIl0gPT09IHZhbHVlXG5cdFx0KSB7XG5cdFx0XHR0aGlzLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuc2V0Q2FwYWJpbGl0eShcIkRpc2FibGVJbnB1dEFzc2lzdGFuY2VcIiwgdmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5LlxuXHQgKiBAcmV0dXJucyBBIFJlZmVyZW5jZSB0byB0aGUgUm91dGVyUHJveHlcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRnZXRSb3V0ZXJQcm94eSgpOiBSb3V0ZXJQcm94eSB7XG5cdFx0cmV0dXJuIHRoaXMuX29Sb3V0ZXJQcm94eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIEFwcFN0YXRlSGFuZGxlci5cblx0ICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIEFwcFN0YXRlSGFuZGxlclxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldEFwcFN0YXRlSGFuZGxlcigpOiBBcHBTdGF0ZUhhbmRsZXIge1xuXHRcdHJldHVybiB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgbmF2L0ZDTCBDb250cm9sbGVyLlxuXHQgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gdGhlIEZDTCBDb250cm9sbGVyXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdFZpZXdDb250cm9sbGVyKCk6IFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIge1xuXHRcdHJldHVybiB0aGlzLmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgTmF2Q29udGFpbmVyIGNvbnRyb2wgb3IgdGhlIEZDTCBjb250cm9sLlxuXHQgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gTmF2Q29udGFpbmVyIGNvbnRyb2wgb3IgdGhlIEZDTCBjb250cm9sXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdENvbnRhaW5lcigpOiBOYXZDb250YWluZXIgfCBGbGV4aWJsZUNvbHVtbkxheW91dCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250ZW50KClbMF0gYXMgTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGFydHVwIG1vZGUgb2YgdGhlIGFwcC5cblx0ICogQHJldHVybnMgVGhlIHN0YXJ0dXAgbW9kZVxuXHQgKi9cblx0Z2V0U3RhcnR1cE1vZGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zdGFydHVwTW9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnQ3JlYXRlJy5cblx0ICpcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlQ3JlYXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5DcmVhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzdGFydHVwIG1vZGUgZm9yIHRoZSBhcHAgdG8gJ0F1dG9DcmVhdGUnLlxuXHQgKlxuXHQgKi9cblx0c2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5BdXRvQ3JlYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgc3RhcnR1cCBtb2RlIGZvciB0aGUgYXBwIHRvICdEZWVwbGluaycuXG5cdCAqXG5cdCAqL1xuXHRzZXRTdGFydHVwTW9kZURlZXBsaW5rKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5EZWVwbGluaztcblx0fVxuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5faW5pdGlhbGl6ZWRLZWVwZXIgPSBuZXcgUHJvbWlzZUtlZXBlcjx2b2lkPigpO1xuXHRcdHRoaXMuaW5pdGlhbGl6ZWQgPSB0aGlzLl9pbml0aWFsaXplZEtlZXBlci5wcm9taXNlO1xuXHRcdGNvbnN0IHVpTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGVkaXRNb2RlOiBsaWJyYXJ5LkVkaXRNb2RlLkRpc3BsYXksXG5cdFx0XHRpc0VkaXRhYmxlOiBmYWxzZSxcblx0XHRcdGRyYWZ0U3RhdHVzOiBsaWJyYXJ5LkRyYWZ0U3RhdHVzLkNsZWFyLFxuXHRcdFx0YnVzeTogZmFsc2UsXG5cdFx0XHRidXN5TG9jYWw6IHt9LFxuXHRcdFx0cGFnZXM6IHt9XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdHBhZ2VzOiB7fVxuXHRcdH0pO1xuXHRcdC8vIHNldCB0aGUgYmluZGluZyBPbmVXYXkgZm9yIHVpTW9kZWwgdG8gcHJldmVudCBjaGFuZ2VzIGlmIGNvbnRyb2xsZXIgZXh0ZW5zaW9ucyBtb2RpZnkgYSBib3VuZCBwcm9wZXJ0eSBvZiBhIGNvbnRyb2xcblx0XHR1aU1vZGVsLnNldERlZmF1bHRCaW5kaW5nTW9kZShcIk9uZVdheVwiKTtcblx0XHQvLyBmb3IgaW50ZXJuYWwgbW9kZWwgYmluZGluZyBuZWVkcyB0byBiZSB0d28gd2F5XG5cdFx0TW9kZWxIZWxwZXIuZW5oYW5jZVVpSlNPTk1vZGVsKHVpTW9kZWwsIGxpYnJhcnkpO1xuXHRcdE1vZGVsSGVscGVyLmVuaGFuY2VJbnRlcm5hbEpTT05Nb2RlbChvSW50ZXJuYWxNb2RlbCk7XG5cblx0XHR0aGlzLnNldE1vZGVsKHVpTW9kZWwsIFwidWlcIik7XG5cdFx0dGhpcy5zZXRNb2RlbChvSW50ZXJuYWxNb2RlbCwgXCJpbnRlcm5hbFwiKTtcblxuXHRcdHRoaXMuYkluaXRpYWxpemVSb3V0aW5nID0gdGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgIT09IHVuZGVmaW5lZCA/IHRoaXMuYkluaXRpYWxpemVSb3V0aW5nIDogdHJ1ZTtcblx0XHR0aGlzLl9vUm91dGVyUHJveHkgPSBuZXcgUm91dGVyUHJveHkoKTtcblx0XHR0aGlzLl9vQXBwU3RhdGVIYW5kbGVyID0gbmV3IEFwcFN0YXRlSGFuZGxlcih0aGlzKTtcblx0XHR0aGlzLl9vRGlhZ25vc3RpY3MgPSBuZXcgRGlhZ25vc3RpY3MoKTtcblxuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcblx0XHRpZiAob01vZGVsPy5pc0E/LjxPRGF0YU1vZGVsPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXCIpKSB7XG5cdFx0XHRNb2RlbEhlbHBlci5lbmhhbmNlT0RhdGFNb2RlbChvTW9kZWwsIHRoaXMpO1xuXHRcdFx0b01vZGVsLnNldFJldHJ5QWZ0ZXJIYW5kbGVyKHRoaXMuaHR0cDUwM1JldHJ5SGFuZGxlci5iaW5kKHRoaXMpKTtcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLnJlcXVlc3RPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lci9cIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5vdCBhbiBPRGF0YSB2NCBzZXJ2aWNlXG5cdFx0XHR0aGlzLmVudGl0eUNvbnRhaW5lciA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmdldE1hbmlmZXN0RW50cnkoXCJzYXAuZmVcIik/LmFwcD8uZGlzYWJsZUNvbGxhYm9yYXRpb25EcmFmdCkge1xuXHRcdFx0Ly8gZGlzYWJsZSB0aGUgY29sbGFib3JhdGlvbiBkcmFmdCBnbG9iYWxseSBpbiBjYXNlIHByaXZhdGUgbWFuaWZlc3QgZmxhZyBpcyBzZXRcblx0XHRcdC8vIHRoaXMgYWxsb3dzIGN1c3RvbWVycyB0byBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGluIGNhc2Ugd2UgcnVuIGludG8gaXNzdWVzIHdpdGggdGhlIGZpcnN0IGRlbGl2ZXJ5XG5cdFx0XHQvLyB0aGlzIHdpbGwgYmUgcmVtb3ZlZCB3aXRoIHRoZSBuZXh0IFMvNCByZWxlYXNlXG5cdFx0XHRNb2RlbEhlbHBlci5kaXNhYmxlQ29sbGFib3JhdGlvbkRyYWZ0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBvTWFuaWZlc3RVSTUgPSB0aGlzLmdldE1hbmlmZXN0KClbXCJzYXAudWk1XCJdO1xuXHRcdHRoaXMuY2hlY2tSb3V0aW5nQ29uZmlndXJhdGlvbihvTWFuaWZlc3RVSTUpO1xuXG5cdFx0Ly8gdGhlIGluaXQgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgcm91dGluZyBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGFib3ZlXG5cdFx0Ly8gaXQgd2lsbCBjYWxsIHRoZSBjcmVhdGVDb250ZW50IGZ1bmN0aW9uIHRvIGluc3RhbnRpYXRlIHRoZSBSb290VmlldyBhbmQgYWRkIGl0IHRvIHRoZSBVSUNvbXBvbmVudCBhZ2dyZWdhdGlvbnNcblxuXHRcdHN1cGVyLmluaXQoKTtcblx0XHRBcHBDb21wb25lbnQuaW5zdGFuY2VNYXBbdGhpcy5nZXRJZCgpXSA9IHRoaXM7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGh0dHA1MDNSZXRyeUhhbmRsZXIoZXJyb3I6IEVycm9yICYgeyByZXRyeUFmdGVyPzogRGF0ZSB9KTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gSFRUUDUwM0hhbmRsZXIuaGFuZGxlNTAzRGVsYXkoZXJyb3IsIHRoaXMuZ2V0Um9vdENvbnRyb2woKSwgZ2V0UmVzb3VyY2VNb2RlbCh0aGlzKSk7XG5cdH1cblxuXHRwcml2YXRlIGNoZWNrUm91dGluZ0NvbmZpZ3VyYXRpb24ob01hbmlmZXN0VUk1OiBNYW5pZmVzdENvbnRlbnRbXCJzYXAudWk1XCJdKTogdm9pZCB7XG5cdFx0aWYgKG9NYW5pZmVzdFVJNT8ucm9vdFZpZXc/LnZpZXdOYW1lKSB7XG5cdFx0XHQvLyBUaGUgYXBwbGljYXRpb24gc3BlY2lmaWVkIGFuIG93biByb290IHZpZXcgaW4gdGhlIG1hbmlmZXN0XG5cblx0XHRcdC8vIFJvb3QgVmlldyB3YXMgbW92ZWQgZnJvbSBzYXAuZmUudGVtcGxhdGVzIHRvIHNhcC5mZS5jb3JlIC0ga2VlcCBpdCBjb21wYXRpYmxlXG5cdFx0XHRpZiAob01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLkZDTC5WSUVXTkFNRV9DT01QQVRJQklMSVRZKSB7XG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9IE5BVkNPTkYuRkNMLlZJRVdOQU1FO1xuXHRcdFx0fSBlbHNlIGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FX0NPTVBBVElCSUxJVFkpIHtcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLkZDTC5WSUVXTkFNRSAmJlxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyA9PT0gTkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1Ncblx0XHRcdCkge1xuXHRcdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke05BVkNPTkYuRkNMLlZJRVdOQU1FfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLkZDTC5ST1VURVJDTEFTU31cImApO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRSAmJlxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyA9PT0gTkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1Ncblx0XHRcdCkge1xuXHRcdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU31cImApO1xuXHRcdFx0fSBlbHNlIGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXc/LnZpZXdOYW1lPy5pbmNsdWRlcyhcInNhcC5mZS5jb3JlLnJvb3RWaWV3XCIpKSB7XG5cdFx0XHRcdHRocm93IEVycm9yKFxuXHRcdFx0XHRcdGBcXG5Xcm9uZyBjb25maWd1cmF0aW9uIGZvciB0aGUgY291cGxlIChyb290Vmlldy9yb3V0ZXJDbGFzcykgaW4gbWFuaWZlc3QgZmlsZS5cXG5gICtcblx0XHRcdFx0XHRcdGBDdXJyZW50IHZhbHVlcyBhcmUgOigke29NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZX0vJHtcblx0XHRcdFx0XHRcdFx0b01hbmlmZXN0VUk1LnJvdXRpbmc/LmNvbmZpZz8ucm91dGVyQ2xhc3MgfHwgXCI8bWlzc2luZyByb3V0ZXIgY2xhc3M+XCJcblx0XHRcdFx0XHRcdH0pXFxuYCArXG5cdFx0XHRcdFx0XHRgRXhwZWN0ZWQgdmFsdWVzIGFyZSBcXG5gICtcblx0XHRcdFx0XHRcdGBcXHQgLSAoJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRX0vJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU30pXFxuYCArXG5cdFx0XHRcdFx0XHRgXFx0IC0gKCR7TkFWQ09ORi5GQ0wuVklFV05BTUV9LyR7TkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1N9KWBcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU31cImApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIG9uU2VydmljZXNTdGFydGVkKGFsbFNlcnZpY2VzOiBTZXJ2aWNlPHVua25vd24+W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLl9zdGFydGVkU2VydmljZXMgPSBhbGxTZXJ2aWNlcztcblx0XHRhd2FpdCB0aGlzLmluaXRpYWxpemVGZWF0dXJlVG9nZ2xlcygpO1xuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcblx0XHRcdEFwcENvbXBvbmVudC5pbnN0YW5jZURlcGVuZGVudFByb2Nlc3Nlcy5tYXAoYXN5bmMgKGZuUHJvY2VzcykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZm5Qcm9jZXNzLmNhbGwobnVsbCwgdGhpcyk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHQvL3JvdXRlciBtdXN0IGJlIHN0YXJ0ZWQgb25jZSB0aGUgcm9vdGNvbnRhaW5lciBpcyBpbml0aWFsaXplZFxuXHRcdC8vc3RhcnRpbmcgb2YgdGhlIHJvdXRlclxuXHRcdGNvbnN0IGZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbiA9ICgpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyXG5cdFx0XHRcdC50aGVuKGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5hdHRhY2hSb3V0ZU1hdGNoZXJzKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmF0dGFjaFJvdXRlTWF0Y2hlcnMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5nZXRSb3V0ZXIoKS5pbml0aWFsaXplKCk7XG5cdFx0XHRcdFx0dGhpcy5nZXRSb3V0ZXJQcm94eSgpLmluaXQodGhpcywgdGhpcy5faXNGY2xFbmFibGVkKCkpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0VmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UoKS5yZWdpc3RlclNoZWxsSG9vaygpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cblx0XHRcdFx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmRpc3BsYXlFcnJvclBhZ2UoXG5cdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9BUFBTVEFSVF9URUNITklDQUxfSVNTVUVTXCIpLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0aXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0aWYgKHRoaXMuYkluaXRpYWxpemVSb3V0aW5nKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRSb3V0aW5nU2VydmljZSgpXG5cdFx0XHRcdC5pbml0aWFsaXplUm91dGluZygpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSkge1xuXHRcdFx0XHRcdFx0ZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0Um9vdENvbnRyb2woKS5hdHRhY2hBZnRlckluaXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLl9pbml0aWFsaXplZEtlZXBlci5yZXNvbHZlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogRXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYGNhbm5vdCBjYW5ub3QgaW5pdGlhbGl6ZSByb3V0aW5nOiAke2Vyci50b1N0cmluZygpfWApO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5faW5pdGlhbGl6ZWRLZWVwZXIucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdGV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fc3RhcnRlZFNlcnZpY2VzID0gW107XG5cdFx0dGhpcy5fb0FwcFN0YXRlSGFuZGxlci5kZXN0cm95KCk7XG5cdFx0dGhpcy5fb1JvdXRlclByb3h5LmRlc3Ryb3koKTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGRlbGV0ZSB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29Sb3V0ZXJQcm94eTtcblx0XHRkZWxldGVNb2RlbENhY2hlRGF0YSh0aGlzLmdldE1ldGFNb2RlbCgpKTtcblx0XHR0aGlzLmdldE1vZGVsKFwidWlcIikuZGVzdHJveSgpO1xuXHRcdGNsZWFuUGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzKCk7XG5cdH1cblxuXHRnZXRNZXRhTW9kZWwoKTogT0RhdGFNZXRhTW9kZWwge1xuXHRcdHJldHVybiB0aGlzLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdH1cblxuXHRnZXREaWFnbm9zdGljcygpOiBEaWFnbm9zdGljcyB7XG5cdFx0cmV0dXJuIHRoaXMuX29EaWFnbm9zdGljcztcblx0fVxuXG5cdGRlc3Ryb3koYlN1cHByZXNzSW52YWxpZGF0ZT86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLmlzRXhpdGluZyA9IHRydWU7XG5cblx0XHQvLyBMRUFLUywgd2l0aCB3b3JrYXJvdW5kIGZvciBzb21lIEZsZXggLyBNREMgaXNzdWVcblx0XHR0cnkge1xuXHRcdFx0ZGVsZXRlIEFwcENvbXBvbmVudC5pbnN0YW5jZU1hcFt0aGlzLmdldElkKCldO1xuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRkZWxldGUgKHdpbmRvdyBhcyB1bmtub3duKS5fcm91dGluZztcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuaW5mbyhlIGFzIHN0cmluZyk7XG5cdFx0fVxuXG5cdFx0Ly9XT1JLQVJPVU5EIGZvciBzdGlja3kgZGlzY2FyZCByZXF1ZXN0IDogZHVlIHRvIGFzeW5jIGNhbGxiYWNrLCByZXF1ZXN0IHRyaWdnZXJlZCBieSB0aGUgZXhpdEFwcGxpY2F0aW9uIHdpbGwgYmUgc2VuZCBhZnRlciB0aGUgVUlDb21wb25lbnQucHJvdG90eXBlLmRlc3Ryb3lcblx0XHQvL3NvIHdlIG5lZWQgdG8gY29weSB0aGUgUmVxdWVzdG9yIGhlYWRlcnMgYXMgaXQgd2lsbCBiZSBkZXN0cm95XG5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNvbnN0IG9NYWluTW9kZWwgPSB0aGlzLm9Nb2RlbHNbdW5kZWZpbmVkXTtcblx0XHRsZXQgb0hlYWRlcnM7XG5cdFx0aWYgKG9NYWluTW9kZWw/Lm9SZXF1ZXN0b3IpIHtcblx0XHRcdG9IZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb01haW5Nb2RlbC5vUmVxdWVzdG9yLm1IZWFkZXJzKTtcblx0XHR9XG5cblx0XHQvLyBBcyB3ZSBuZWVkIHRvIGNsZWFudXAgdGhlIGFwcGxpY2F0aW9uIC8gaGFuZGxlIHRoZSBkaXJ0eSBvYmplY3Qgd2UgbmVlZCB0byBjYWxsIG91ciBjbGVhbnVwIGJlZm9yZSB0aGUgbW9kZWxzIGFyZSBkZXN0cm95ZWRcblx0XHR0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKCk/LmJlZm9yZUV4aXQ/LigpO1xuXHRcdHN1cGVyLmRlc3Ryb3koYlN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0aWYgKG9IZWFkZXJzICYmIG9NYWluTW9kZWwub1JlcXVlc3Rvcikge1xuXHRcdFx0b01haW5Nb2RlbC5vUmVxdWVzdG9yLm1IZWFkZXJzID0gb0hlYWRlcnM7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Um91dGluZ1NlcnZpY2UoKTogUm91dGluZ1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBSb3V0aW5nU2VydmljZTsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXG5cdGdldFNoZWxsU2VydmljZXMoKTogSVNoZWxsU2VydmljZXMge1xuXHRcdHJldHVybiB7fSBhcyBJU2hlbGxTZXJ2aWNlczsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXG5cdGdldE5hdmlnYXRpb25TZXJ2aWNlKCk6IE5hdmlnYXRpb25TZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgTmF2aWdhdGlvblNlcnZpY2U7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblxuXHRnZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTogU2lkZUVmZmVjdHNTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgU2lkZUVmZmVjdHNTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKTogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCk6IENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZTtcblx0fVxuXG5cdGdldENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UoKTogQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2U7XG5cdH1cblxuXHRnZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCk6IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0Q29udGV4dFNoYXJpbmdTZXJ2aWNlKCk6IENvbnRleHRTaGFyaW5nU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIENvbnRleHRTaGFyaW5nU2VydmljZTtcblx0fVxuXG5cdGdldFRlbGVtZXRyeVNlcnZpY2UoKTogVGVsZW1ldHJ5U2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFRlbGVtZXRyeVNlcnZpY2U7XG5cdH1cblxuXHRnZXRWYWx1ZUhlbHBIaXN0b3J5U2VydmljZSgpOiBWYWx1ZUhlbHBIaXN0b3J5U2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlO1xuXHR9XG5cblx0YXN5bmMgZ2V0U3RhcnR1cFBhcmFtZXRlcnMoKTogUHJvbWlzZTxTdGFydHVwUGFyYW1ldGVycz4ge1xuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gdGhpcy5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgob0NvbXBvbmVudERhdGEgJiYgb0NvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9KTtcblx0fVxuXG5cdHJlc3RvcmUoKTogdm9pZCB7XG5cdFx0Ly8gY2FsbGVkIGJ5IEZMUCB3aGVuIGFwcCBzYXAta2VlcC1hbGl2ZSBpcyBlbmFibGVkIGFuZCBhcHAgaXMgcmVzdG9yZWRcblx0XHRmb3IgKGNvbnN0IHN0YXJ0ZWRTZXJ2aWNlIG9mIHRoaXMuX3N0YXJ0ZWRTZXJ2aWNlcykge1xuXHRcdFx0c3RhcnRlZFNlcnZpY2Uub25SZXN0b3JlPy4oKTtcblx0XHR9XG5cdFx0dGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS52aWV3U3RhdGUub25SZXN0b3JlKCk7XG5cdH1cblxuXHRzdXNwZW5kKCk6IHZvaWQge1xuXHRcdC8vIGNhbGxlZCBieSBGTFAgd2hlbiBhcHAgc2FwLWtlZXAtYWxpdmUgaXMgZW5hYmxlZCBhbmQgYXBwIGlzIHN1c3BlbmRlZFxuXHRcdGZvciAoY29uc3Qgc3RhcnRlZFNlcnZpY2Ugb2YgdGhpcy5fc3RhcnRlZFNlcnZpY2VzKSB7XG5cdFx0XHRzdGFydGVkU2VydmljZS5vblN1c3BlbmQ/LigpO1xuXHRcdH1cblx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLnZpZXdTdGF0ZS5vblN1c3BlbmQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBuYXZpZ2F0ZUJhc2VkT25TdGFydHVwUGFyYW1ldGVyIGZ1bmN0aW9uIGlzIGEgcHVibGljIGFwaSB0aGF0IGFjdHMgYXMgYSB3cmFwcGVyIHRvIF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAgZnVuY3Rpb24uIEl0IHBhc3NlcyB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzIGZ1cnRoZXIgdG8gX21hbmFnZURlZXBMaW5rU3RhcnR1cCBmdW5jdGlvblxuXHQgKiBAcGFyYW0gc3RhcnR1cFBhcmFtZXRlcnMgRGVmaW5lcyB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzIHdoaWNoIGlzIGZ1cnRoZXIgcGFzc2VkIHRvIF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAgZnVuY3Rpb24uXG5cdCAqL1xuXG5cdGFzeW5jIG5hdmlnYXRlQmFzZWRPblN0YXJ0dXBQYXJhbWV0ZXIoc3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoIUJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcy5nZXRNb2RlbChcInVpXCIpKSkge1xuXHRcdFx0XHRpZiAoIXN0YXJ0dXBQYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0c3RhcnR1cFBhcmFtZXRlcnMgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJvdXRpbmdTZXJ2aWNlID0gdGhpcy5nZXRSb3V0aW5nU2VydmljZSgpO1xuXHRcdFx0XHRhd2FpdCByb3V0aW5nU2VydmljZS5fbWFuYWdlRGVlcExpbmtTdGFydHVwKHN0YXJ0dXBQYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChleGNlcHRpb246IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihleGNlcHRpb24gYXMgc3RyaW5nKTtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVzZWQgdG8gYWxsb3cgZGlzYWJsaW5nIHRoZSBDb2xsYWJvcmF0aW9uIE1hbmFnZXIgaW50ZWdyYXRpb24gZm9yIHRoZSBPVlAgdXNlIGNhc2UuXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbGxhYm9yYXRpb24gbWFuYWdlciBzZXJ2aWNlIGlzIGFjdGl2ZS5cblx0ICovXG5cdGlzQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlciBwcm9jZXNzZXMgdGhhdCBuZWVkIHRvIGJlIHJ1biBmb3IgZXZlcnkgaW5zdGFuY2UgcHJpb3IgdG8gc3RhcnR1cC5cblx0ICogQHBhcmFtIGZuUHJvY2VzcyBGdW5jdGlvbiB0aGF0IGhvbGQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwcm9jZXNzLlxuXHQgKlxuXHQgKiBUaGUgcmVnaXN0ZXJlZCBwcm9jZXNzIGNhbiBiZSBhbiBhc3luY2hyb25vdXMgcHJvY2Vzcy5cblx0ICogSXQgc2hhbGwgYmUgY2FsbGVkIHdpdGggdGhlIEFwcENvbXBvbmVudCBpbnN0YW5jZSBhcyBhIHBhcmFtZXRlciBiZWZvcmUgc3RhcnR1cC5cblx0ICovXG5cdHN0YXRpYyByZWdpc3Rlckluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc0ZvclN0YXJ0VXAoZm5Qcm9jZXNzOiAoYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcblx0XHR0aGlzLmluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc2VzLnB1c2goZm5Qcm9jZXNzKTtcblx0fVxufVxuXG5pbnRlcmZhY2UgQXBwQ29tcG9uZW50IGV4dGVuZHMgVUlDb21wb25lbnQge1xuXHRpc0FkYXB0YXRpb25Nb2RlKCk6IGJvb2xlYW47XG5cdGdldE1hbmlmZXN0KCk6IE1hbmlmZXN0Q29udGVudDtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuYXBwXCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdO1xuXHRnZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC51aTVcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl07XG5cdF9nZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC51aTVcIiwgbWVyZ2VkOiBib29sZWFuKTogTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXTtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAudWlcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aVwiXTtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuZmVcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXSB8IHVuZGVmaW5lZDtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuZmlvcmlcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC5maW9yaVwiXTtcblx0Z2V0Q29tcG9uZW50RGF0YSgpOiBDb21wb25lbnREYXRhO1xuXHRnZXRSb290Q29udHJvbCgpOiB7XG5cdFx0Z2V0Q29udHJvbGxlcigpOiBSb290Vmlld0Jhc2VDb250cm9sbGVyO1xuXHR9ICYgVmlldztcblx0Z2V0TW9kZWwoKTogT0RhdGFNb2RlbDtcblx0Z2V0TW9kZWwobmFtZTogXCJ1aVwiKTogSlNPTk1vZGVsO1xuXHRnZXRNb2RlbChuYW1lOiBzdHJpbmcpOiBNb2RlbCB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwQ29tcG9uZW50O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXVDQSxNQUFNQSxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0QsV0FBVztFQUN2QyxNQUFNRSxPQUFPLEdBQUc7SUFDZkMsR0FBRyxFQUFFO01BQ0pDLFFBQVEsRUFBRSwwQkFBMEI7TUFDcENDLHNCQUFzQixFQUFFLHlDQUF5QztNQUNqRUMsV0FBVyxFQUFFO0lBQ2QsQ0FBQztJQUNEQyxZQUFZLEVBQUU7TUFDYkgsUUFBUSxFQUFFLG1DQUFtQztNQUM3Q0Msc0JBQXNCLEVBQUUsa0RBQWtEO01BQzFFQyxXQUFXLEVBQUU7SUFDZDtFQUNELENBQUM7RUFZRDtFQUNBLE1BQU1FLFFBQVEsR0FBR0MsTUFBTTtFQUt2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFYQSxJQXVHTUMsWUFBWSxJQUFBQyxJQUFBLEdBM0ZqQkMsY0FB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
578
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJWSUVXTkFNRV9DT01QQVRJQklMSVRZIiwiUk9VVEVSQ0xBU1MiLCJOQVZDT05UQUlORVIiLCJfbVJvdXRlciIsIlJvdXRlciIsIkFwcENvbXBvbmVudCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsImNvbmZpZyIsImZ1bGxXaWR0aCIsIm1hbmlmZXN0Iiwic2VydmljZXMiLCJyZXNvdXJjZU1vZGVsIiwiZmFjdG9yeU5hbWUiLCJzdGFydHVwIiwic2V0dGluZ3MiLCJidW5kbGVzIiwibW9kZWxOYW1lIiwicm91dGluZ1NlcnZpY2UiLCJzaGVsbFNlcnZpY2VzIiwiU2hlbGxVSVNlcnZpY2UiLCJuYXZpZ2F0aW9uU2VydmljZSIsImVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiYXN5bmNDb21wb25lbnRTZXJ2aWNlIiwiY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsInRlbGVtZXRyeVNlcnZpY2UiLCJ2YWx1ZUhlbHBIaXN0b3J5U2VydmljZSIsIkNvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UiLCJDb250ZXh0U2hhcmluZ1NlcnZpY2UiLCJpbmxpbmVFZGl0U2VydmljZSIsInJvb3RWaWV3Iiwidmlld05hbWUiLCJ0eXBlIiwiYXN5bmMiLCJpZCIsInJvdXRpbmciLCJjb250cm9sSWQiLCJyb3V0ZXJDbGFzcyIsInZpZXdUeXBlIiwiY29udHJvbEFnZ3JlZ2F0aW9uIiwiY29udGFpbmVyT3B0aW9ucyIsInByb3BhZ2F0ZU1vZGVsIiwiZGVzaWdudGltZSIsIl9kZWMyIiwiaW1wbGVtZW50SW50ZXJmYWNlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9BcHBDb21wb25lbnQiLCJfVUlDb21wb25lbnQiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJzdGFydHVwTW9kZSIsIk5vcm1hbCIsIl9zdGFydGVkU2VydmljZXMiLCJpc0FkYXB0YXRpb25FbmFibGVkIiwiaXNFeGl0aW5nIiwicGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJfaXNGY2xFbmFibGVkIiwib01hbmlmZXN0VUk1IiwiZ2V0TWFuaWZlc3RFbnRyeSIsInNldEFkYXB0YXRpb25Nb2RlIiwiaXNBZGFwdGF0aW9uTW9kZSIsImluaXRpYWxpemVGZWF0dXJlVG9nZ2xlcyIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2hhbmdlUGFnZUNvbmZpZ3VyYXRpb24iLCJwYWdlSWQiLCJwYXRoIiwidmFsdWUiLCJjaGFuZ2VDb25maWd1cmF0aW9uIiwiZ2V0TWFuaWZlc3QiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsInNldENhcGFiaWxpdHkiLCJjbGVhblBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcyIsImdldFJvdXRlclByb3h5IiwiX29Sb3V0ZXJQcm94eSIsImdldEFwcFN0YXRlSGFuZGxlciIsIl9vQXBwU3RhdGVIYW5kbGVyIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRDb250cm9sbGVyIiwiZ2V0Um9vdENvbnRhaW5lciIsImdldENvbnRlbnQiLCJnZXRTdGFydHVwTW9kZSIsInNldFN0YXJ0dXBNb2RlQ3JlYXRlIiwiQ3JlYXRlIiwic2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlIiwiQXV0b0NyZWF0ZSIsInNldFN0YXJ0dXBNb2RlRGVlcGxpbmsiLCJEZWVwbGluayIsImluaXQiLCJfaW5pdGlhbGl6ZWRLZWVwZXIiLCJQcm9taXNlS2VlcGVyIiwiaW5pdGlhbGl6ZWQiLCJwcm9taXNlIiwidWlNb2RlbCIsIkpTT05Nb2RlbCIsImVkaXRNb2RlIiwiRWRpdE1vZGUiLCJEaXNwbGF5IiwiaXNFZGl0YWJsZSIsImRyYWZ0U3RhdHVzIiwiRHJhZnRTdGF0dXMiLCJDbGVhciIsImJ1c3kiLCJidXN5TG9jYWwiLCJwYWdlcyIsIm9JbnRlcm5hbE1vZGVsIiwic2V0RGVmYXVsdEJpbmRpbmdNb2RlIiwiTW9kZWxIZWxwZXIiLCJlbmhhbmNlVWlKU09OTW9kZWwiLCJlbmhhbmNlSW50ZXJuYWxKU09OTW9kZWwiLCJzZXRNb2RlbCIsImJJbml0aWFsaXplUm91dGluZyIsInVuZGVmaW5lZCIsIlJvdXRlclByb3h5IiwiQXBwU3RhdGVIYW5kbGVyIiwiX29EaWFnbm9zdGljcyIsIkRpYWdub3N0aWNzIiwib01vZGVsIiwiZ2V0TW9kZWwiLCJpc0EiLCJlbmhhbmNlT0RhdGFNb2RlbCIsInNldFJldHJ5QWZ0ZXJIYW5kbGVyIiwiaHR0cDUwM1JldHJ5SGFuZGxlciIsImJpbmQiLCJlbnRpdHlDb250YWluZXIiLCJnZXRNZXRhTW9kZWwiLCJyZXF1ZXN0T2JqZWN0IiwiYXBwIiwiZGlzYWJsZUNvbGxhYm9yYXRpb25EcmFmdCIsImNoZWNrUm91dGluZ0NvbmZpZ3VyYXRpb24iLCJpbnN0YW5jZU1hcCIsImdldElkIiwiZXJyb3IiLCJIVFRQNTAzSGFuZGxlciIsImhhbmRsZTUwM0RlbGF5IiwiZ2V0UmVzb3VyY2VNb2RlbCIsIkxvZyIsImluZm8iLCJpbmNsdWRlcyIsIkVycm9yIiwib25TZXJ2aWNlc1N0YXJ0ZWQiLCJhbGxTZXJ2aWNlcyIsImFsbFNldHRsZWQiLCJpbnN0YW5jZURlcGVuZGVudFByb2Nlc3NlcyIsIm1hcCIsImZuUHJvY2VzcyIsImZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbiIsInRoZW4iLCJhdHRhY2hSb3V0ZU1hdGNoZXJzIiwiZ2V0Um91dGVyIiwiaW5pdGlhbGl6ZSIsImdldFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlIiwicmVnaXN0ZXJTaGVsbEhvb2siLCJjYXRjaCIsIm9SZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImRpc3BsYXlFcnJvclBhZ2UiLCJnZXRUZXh0IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIm1lc3NhZ2UiLCJnZXRSb3V0aW5nU2VydmljZSIsImluaXRpYWxpemVSb3V0aW5nIiwiYXR0YWNoQWZ0ZXJJbml0IiwiZXJyIiwidG9TdHJpbmciLCJleGl0IiwiZGVzdHJveSIsImRlbGV0ZU1vZGVsQ2FjaGVEYXRhIiwiZ2V0RGlhZ25vc3RpY3MiLCJiU3VwcHJlc3NJbnZhbGlkYXRlIiwidW5yZWdpc3RlclN0aWNreVNlc3Npb25DYWxsYmFja3MiLCJ3aW5kb3ciLCJfcm91dGluZyIsImUiLCJvTWFpbk1vZGVsIiwib01vZGVscyIsIm9IZWFkZXJzIiwib1JlcXVlc3RvciIsIk9iamVjdCIsImFzc2lnbiIsIm1IZWFkZXJzIiwiYmVmb3JlRXhpdCIsImdldFNoZWxsU2VydmljZXMiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImdldENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIiwiZ2V0Q29udGV4dFNoYXJpbmdTZXJ2aWNlIiwiZ2V0VGVsZW1ldHJ5U2VydmljZSIsImdldElubGluZUVkaXRTZXJ2aWNlIiwiZ2V0U3RhcnR1cFBhcmFtZXRlcnMiLCJvQ29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJzdGFydHVwUGFyYW1ldGVycyIsInJlc3RvcmUiLCJzdGFydGVkU2VydmljZSIsIm9uUmVzdG9yZSIsInZpZXdTdGF0ZSIsInJlc2V0VmVyc2lvbkFjdGl2YXRpb25TdGF0dXMiLCJzdXNwZW5kIiwib25TdXNwZW5kIiwibmF2aWdhdGVCYXNlZE9uU3RhcnR1cFBhcmFtZXRlciIsIkJ1c3lMb2NrZXIiLCJpc0xvY2tlZCIsIl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAiLCJleGNlcHRpb24iLCJ1bmxvY2siLCJpc0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUVuYWJsZWQiLCJyZWdpc3Rlckluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc0ZvclN0YXJ0VXAiLCJwdXNoIiwicmVnaXN0ZXJTdGlja3lTZXNzaW9uQ2FsbGJhY2tzIiwiZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2siLCJzZXNzaW9uVGltZW91dENhbGxiYWNrIiwiZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrIiwic3RpY2t5RGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2siLCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsInN0aWNreVNlc3Npb25UaW1lb3V0Q2FsbGJhY2siLCJhdHRhY2hTZXNzaW9uVGltZW91dCIsInN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjayIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJkZXRhY2hTZXNzaW9uVGltZW91dCIsImRldGFjaFJvdXRlTWF0Y2hlZCIsIlVJQ29tcG9uZW50IiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBcHBDb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBGbGV4aWJsZUNvbHVtbkxheW91dCBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBpbXBsZW1lbnRJbnRlcmZhY2UgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQXBwU3RhdGVIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9BcHBTdGF0ZUhhbmRsZXJcIjtcbmltcG9ydCBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IEhUVFA1MDNIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0hUVFA1MDNIYW5kbGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQcm9taXNlS2VlcGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Byb21pc2VLZWVwZXJcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBjaGFuZ2VDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL21hbmlmZXN0TWVyZ2VyL0NoYW5nZVBhZ2VDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgdHlwZSBSb290Vmlld0Jhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9Sb290Vmlld0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dFNoYXJpbmdTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbnRleHRTaGFyaW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgSW5saW5lRWRpdFNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvSW5saW5lRWRpdFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL05hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Sb3V0aW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgVGVsZW1ldHJ5U2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZWxlbWV0cnlTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL2NvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgUm91dGVyIGZyb20gXCJzYXAvbS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdENvbnRlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBVSUNvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvVUlDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgSUFzeW5jQ29udGVudENyZWF0aW9uIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCIuL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB7IGRlbGV0ZU1vZGVsQ2FjaGVEYXRhIH0gZnJvbSBcIi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwiLi9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9WYWx1ZUhlbHBIaXN0b3J5U2VydmljZUZhY3RvcnlcIjtcblxuY29uc3QgU3RhcnR1cE1vZGUgPSBsaWJyYXJ5LlN0YXJ0dXBNb2RlO1xuY29uc3QgTkFWQ09ORiA9IHtcblx0RkNMOiB7XG5cdFx0VklFV05BTUU6IFwic2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsXCIsXG5cdFx0VklFV05BTUVfQ09NUEFUSUJJTElUWTogXCJzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5GY2xcIixcblx0XHRST1VURVJDTEFTUzogXCJzYXAuZi5yb3V0aW5nLlJvdXRlclwiXG5cdH0sXG5cdE5BVkNPTlRBSU5FUjoge1xuXHRcdFZJRVdOQU1FOiBcInNhcC5mZS5jb3JlLnJvb3RWaWV3Lk5hdkNvbnRhaW5lclwiLFxuXHRcdFZJRVdOQU1FX0NPTVBBVElCSUxJVFk6IFwic2FwLmZlLnRlbXBsYXRlcy5Sb290Q29udGFpbmVyLnZpZXcuTmF2Q29udGFpbmVyXCIsXG5cdFx0Uk9VVEVSQ0xBU1M6IFwic2FwLm0ucm91dGluZy5Sb3V0ZXJcIlxuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBDb21wb25lbnREYXRhID0ge1xuXHRzdGFydHVwUGFyYW1ldGVycz86IFN0YXJ0dXBQYXJhbWV0ZXJzO1xuXHQvL2ZlRW52aXJvbm1lbnQgaXMgb2JqZWN0IHdoaWNoIGlzIHJlY2VpdmVkIGFzIGEgcGFydCBvZiB0aGUgY29tcG9uZW50IGRhdGEgZm9yIE15IEluYm94IGFwcGxpY2F0aW9ucy5cblx0ZmVFbnZpcm9ubWVudD86IHtcblx0XHQvL1dpdGhpbiB0aGlzIG9iamVjdCB0aGV5IHBhc3MgYSBmdW5jdGlvbiBjYWxsZWQgZ2V0SW50ZW50KCkgd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgc2VtYW50aWNPYmplY3QgYW5kIGFjdGlvbiBhcyBzZXBhcmF0ZSBwcm9wZXJ0eS12YWx1ZSBlbnRyaWVzIHRoYXQgYXJlIHRoZW4gdXNlZCB0byB1cGRhdGUgdGhlIHJlbGF0ZWQgYXBwcyBidXR0b24uXG5cdFx0Z2V0SW50ZW50OiBGdW5jdGlvbjtcblx0XHQvL1dpdGhpbiB0aGlzIG9iamVjdCB0aGV5IHBhc3MgYSBmdW5jdGlvbiBjYWxsZWQgZ2V0U2hhcmVDb250cm9sVmlzaWJpbGl0eSgpIHRoYXQgcmV0dXJucyBib29sZWFuIHZhbHVlcyh0cnVlIG9yIGZhbHNlKSB3aGljaCBkZXRlcm1pbmVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzaGFyZSBidXR0b24uXG5cdFx0Z2V0U2hhcmVDb250cm9sVmlzaWJpbGl0eTogRnVuY3Rpb247XG5cdH07XG59O1xuLy8gS2VlcCBhIHJlZmVyZW5jZSBzbyBhcyB0byBrZWVwIHRoZSBpbXBvcnQgZGVzcGl0ZSBpdCBub3QgYmVpbmcgZGlyZWN0bHkgdXNlZFxuY29uc3QgX21Sb3V0ZXIgPSBSb3V0ZXI7XG5cbmV4cG9ydCB0eXBlIFN0YXJ0dXBQYXJhbWV0ZXJzID0ge1xuXHRwcmVmZXJyZWRNb2RlPzogc3RyaW5nW107XG59ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bltdPjtcbi8qKlxuICogTWFpbiBjbGFzcyBmb3IgY29tcG9uZW50cyB1c2VkIGZvciBhbiBhcHBsaWNhdGlvbiBpbiBTQVAgRmlvcmkgZWxlbWVudHMuXG4gKlxuICogQXBwbGljYXRpb24gZGV2ZWxvcGVycyB1c2luZyB0aGUgdGVtcGxhdGVzIGFuZCBidWlsZGluZyBibG9ja3MgcHJvdmlkZWQgYnkgU0FQIEZpb3JpIGVsZW1lbnRzIHNob3VsZCBjcmVhdGUgdGhlaXIgYXBwcyBieSBleHRlbmRpbmcgdGhpcyBjb21wb25lbnQuXG4gKiBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBzZXJ2aWNlcyB0aGF0IHlvdSBuZWVkIGZvciB0aGUgYnVpbGRpbmcgYmxvY2tzIGFuZCB0ZW1wbGF0ZXMgdG8gd29yayBwcm9wZXJseSBhcmUgc3RhcnRlZC5cbiAqXG4gKiBXaGVuIHlvdSB1c2Ugc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50IGFzIHRoZSBiYXNlIGNvbXBvbmVudCwgeW91IGFsc28gbmVlZCB0byB1c2UgYSByb290Vmlldy4gU0FQIEZpb3JpIGVsZW1lbnRzIHByb3ZpZGVzIHR3byBvcHRpb25zOiA8YnIvPlxuICogLSBzYXAuZmUuY29yZS5yb290Vmlldy5OYXZDb250YWluZXIgd2hlbiB1c2luZyBzYXAubS5yb3V0aW5nLlJvdXRlciA8YnIvPlxuICogLSBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wgd2hlbiB1c2luZyBzYXAuZi5yb3V0aW5nLlJvdXRlciAoRkNMIHVzZSBjYXNlKSA8YnIvPlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcIiwge1xuXHRjb25maWc6IHtcblx0XHRmdWxsV2lkdGg6IHRydWVcblx0fSxcblx0bWFuaWZlc3Q6IHtcblx0XHRcInNhcC51aTVcIjoge1xuXHRcdFx0c2VydmljZXM6IHtcblx0XHRcdFx0cmVzb3VyY2VNb2RlbDoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJlc291cmNlTW9kZWxTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCIsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdGJ1bmRsZXM6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRtb2RlbE5hbWU6IFwic2FwLmZlLmkxOG5cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cm91dGluZ1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Sb3V0aW5nU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWxsU2VydmljZXM6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaGVsbFNlcnZpY2VzXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0U2hlbGxVSVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAudXNoZWxsLnVpNXNlcnZpY2UuU2hlbGxVSVNlcnZpY2VcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLk5hdmlnYXRpb25TZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXM6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5FbnZpcm9ubWVudFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaWRlRWZmZWN0c1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaWRlRWZmZWN0c1NlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhc3luY0NvbXBvbmVudFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Bc3luY0NvbXBvbmVudFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbGVtZXRyeVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5UZWxlbWV0cnlTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0dmFsdWVIZWxwSGlzdG9yeVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5WYWx1ZUhlbHBIaXN0b3J5U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Q29udGV4dFNoYXJpbmdTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ29udGV4dFNoYXJpbmdTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0aW5saW5lRWRpdFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5JbmxpbmVFZGl0U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRyb290Vmlldzoge1xuXHRcdFx0XHR2aWV3TmFtZTogTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUUsXG5cdFx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRpZDogXCJhcHBSb290Vmlld1wiXG5cdFx0XHR9LFxuXHRcdFx0cm91dGluZzoge1xuXHRcdFx0XHRjb25maWc6IHtcblx0XHRcdFx0XHRjb250cm9sSWQ6IFwiYXBwQ29udGVudFwiLFxuXHRcdFx0XHRcdHJvdXRlckNsYXNzOiBOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTUyxcblx0XHRcdFx0XHR2aWV3VHlwZTogXCJYTUxcIixcblx0XHRcdFx0XHRjb250cm9sQWdncmVnYXRpb246IFwicGFnZXNcIixcblx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRjb250YWluZXJPcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRwcm9wYWdhdGVNb2RlbDogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0ZGVzaWdudGltZTogXCJzYXAvZmUvY29yZS9kZXNpZ250aW1lL0FwcENvbXBvbmVudC5kZXNpZ250aW1lXCIsXG5cblx0bGlicmFyeTogXCJzYXAuZmUuY29yZVwiXG59KVxuY2xhc3MgQXBwQ29tcG9uZW50IGV4dGVuZHMgVUlDb21wb25lbnQgaW1wbGVtZW50cyBJQXN5bmNDb250ZW50Q3JlYXRpb24ge1xuXHRAaW1wbGVtZW50SW50ZXJmYWNlKFwic2FwLnVpLmNvcmUuSUFzeW5jQ29udGVudENyZWF0aW9uXCIpXG5cdF9faW1wbGVtZW50c19fc2FwX3VpX2NvcmVfSUFzeW5jQ29udGVudENyZWF0aW9uID0gdHJ1ZTtcblxuXHRzdGF0aWMgaW5zdGFuY2VNYXA6IFJlY29yZDxzdHJpbmcsIEFwcENvbXBvbmVudD4gPSB7fTtcblxuXHRwcml2YXRlIF9vUm91dGVyUHJveHkhOiBSb3V0ZXJQcm94eTtcblxuXHRwcml2YXRlIF9vQXBwU3RhdGVIYW5kbGVyITogQXBwU3RhdGVIYW5kbGVyO1xuXG5cdHByaXZhdGUgYkluaXRpYWxpemVSb3V0aW5nPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIF9vRGlhZ25vc3RpY3MhOiBEaWFnbm9zdGljcztcblxuXHRwcml2YXRlIGVudGl0eUNvbnRhaW5lciE6IFByb21pc2U8dm9pZD47XG5cblx0cHJpdmF0ZSBzdGFydHVwTW9kZTogc3RyaW5nID0gU3RhcnR1cE1vZGUuTm9ybWFsO1xuXG5cdHByaXZhdGUgX3N0YXJ0ZWRTZXJ2aWNlczogU2VydmljZTx1bmtub3duPltdID0gW107XG5cblx0cHVibGljIGluaXRpYWxpemVkITogUHJvbWlzZTx2b2lkPjtcblxuXHRwcml2YXRlIF9pbml0aWFsaXplZEtlZXBlciE6IFByb21pc2VLZWVwZXI8dm9pZD47XG5cblx0cHJpdmF0ZSBpc0FkYXB0YXRpb25FbmFibGVkID0gZmFsc2U7XG5cblx0cHVibGljIGlzRXhpdGluZyA9IGZhbHNlO1xuXG5cdHB1YmxpYyBwYWdlQ29uZmlndXJhdGlvbkNoYW5nZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG5cdHByaXZhdGUgc3RpY2t5RGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2s/OiBGdW5jdGlvbjtcblxuXHRwcml2YXRlIHN0aWNreVNlc3Npb25UaW1lb3V0Q2FsbGJhY2s/OiBGdW5jdGlvbjtcblxuXHRwcml2YXRlIHN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjaz86IEZ1bmN0aW9uO1xuXG5cdC8qKlxuXHQgKiBTaW5nbGV0b24gdG8gaG9sZCBwcm9jZXNzZXMgZnJvbSBsaWJyYXJpZXMgdGhhdCBuZWVkIHRvIGJlIHJ1biBmb3IgZXZlcnkgaW5zdGFuY2UgcHJpb3IgdG8gc3RhcnR1cC5cblx0ICovXG5cdHByaXZhdGUgc3RhdGljIGluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc2VzOiAoKGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSA9PiBQcm9taXNlPHZvaWQ+KVtdID0gW107XG5cblx0X2lzRmNsRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBvTWFuaWZlc3RVSTUgPSB0aGlzLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpO1xuXHRcdHJldHVybiBvTWFuaWZlc3RVSTU/LnJvdXRpbmc/LmNvbmZpZz8ucm91dGVyQ2xhc3MgPT09IE5BVkNPTkYuRkNMLlJPVVRFUkNMQVNTO1xuXHR9XG5cblx0c2V0QWRhcHRhdGlvbk1vZGUoaXNBZGFwdGF0aW9uRW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuaXNBZGFwdGF0aW9uRW5hYmxlZCA9IGlzQWRhcHRhdGlvbkVuYWJsZWQ7XG5cdH1cblxuXHRpc0FkYXB0YXRpb25Nb2RlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmlzQWRhcHRhdGlvbkVuYWJsZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgYSBob29rIHRvIGluaXRpYWxpemUgZmVhdHVyZSB0b2dnbGVzLlxuXHQgKlxuXHQgKiBUaGlzIGhvb2sgaXMgYmVpbmcgY2FsbGVkIGJ5IHRoZSBTQVAgRmlvcmkgZWxlbWVudHMgQXBwQ29tcG9uZW50IGF0IHRoZSB0aW1lIGZlYXR1cmUgdG9nZ2xlcyBjYW4gYmUgaW5pdGlhbGl6ZWQuXG5cdCAqIFRvIGNoYW5nZSBwYWdlIGNvbmZpZ3VyYXRpb24sIHVzZSB0aGUge0BsaW5rIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCNjaGFuZ2VQYWdlQ29uZmlndXJhdGlvbn0gbWV0aG9kLlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aXRob3V0IGFueSB2YWx1ZSB0byBhbGxvdyBhc3luY2hyb25vdXMgcHJvY2Vzc2VzXG5cdCAqL1xuXHRhc3luYyBpbml0aWFsaXplRmVhdHVyZVRvZ2dsZXMoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gdGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYXBwbGljYXRpb25zXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZXMgdGhlIHBhZ2UgY29uZmlndXJhdGlvbiBvZiBTQVAgRmlvcmkgZWxlbWVudHMuXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIGVuYWJsZXMgeW91IHRvIGNoYW5nZSB0aGUgcGFnZSBjb25maWd1cmF0aW9uIG9mIFNBUCBGaW9yaSBlbGVtZW50cy5cblx0ICogQHBhcmFtIHBhZ2VJZCBUaGUgSUQgb2YgdGhlIHBhZ2UgZm9yIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGlzIHRvIGJlIGNoYW5nZWQuXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIGluIHRoZSBwYWdlIHNldHRpbmdzIGZvciB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpcyB0byBiZSBjaGFuZ2VkLlxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiB0aGUgY29uZmlndXJhdGlvbi4gVGhpcyBjb3VsZCBiZSBhIHBsYWluIHZhbHVlIGxpa2UgYSBzdHJpbmcsIG9yIGEgQm9vbGVhbiwgb3IgYSBzdHJ1Y3R1cmVkIG9iamVjdC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Y2hhbmdlUGFnZUNvbmZpZ3VyYXRpb24ocGFnZUlkOiBzdHJpbmcsIHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcblx0XHRjb25zdCBtYW5pZmVzdCA9IGNoYW5nZUNvbmZpZ3VyYXRpb24odGhpcy5nZXRNYW5pZmVzdCgpLCBwYWdlSWQsIHBhdGgsIHZhbHVlLCB0cnVlLCB0aGlzKSBhcyBNYW5pZmVzdENvbnRlbnQ7XG5cdFx0aWYgKFxuXHRcdFx0cGF0aCA9PT0gXCJhcHAvZGlzYWJsZUlucHV0QXNzaXN0YW5jZVwiICYmXG5cdFx0XHQobWFuaWZlc3Q/LltcInNhcC5mZVwiXSBhcyBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4pPy5bXCJhcHBcIl0/LltcImRpc2FibGVJbnB1dEFzc2lzdGFuY2VcIl0gPT09IHZhbHVlXG5cdFx0KSB7XG5cdFx0XHR0aGlzLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuc2V0Q2FwYWJpbGl0eShcIkRpc2FibGVJbnB1dEFzc2lzdGFuY2VcIiwgdmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhbnMgYWxsIHJlZ2lzdGVyZWQgcGFnZSBjb25maWd1cmF0aW9uIGNoYW5nZXMuXG5cdCAqL1xuXHRjbGVhblBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcygpOiB2b2lkIHtcblx0XHR0aGlzLnBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgUm91dGVyUHJveHkuXG5cdCAqIEByZXR1cm5zIEEgUmVmZXJlbmNlIHRvIHRoZSBSb3V0ZXJQcm94eVxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldFJvdXRlclByb3h5KCk6IFJvdXRlclByb3h5IHtcblx0XHRyZXR1cm4gdGhpcy5fb1JvdXRlclByb3h5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgQXBwU3RhdGVIYW5kbGVyLlxuXHQgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgQXBwU3RhdGVIYW5kbGVyXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0QXBwU3RhdGVIYW5kbGVyKCk6IEFwcFN0YXRlSGFuZGxlciB7XG5cdFx0cmV0dXJuIHRoaXMuX29BcHBTdGF0ZUhhbmRsZXI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBuYXYvRkNMIENvbnRyb2xsZXIuXG5cdCAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byB0aGUgRkNMIENvbnRyb2xsZXJcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRnZXRSb290Vmlld0NvbnRyb2xsZXIoKTogUm9vdFZpZXdCYXNlQ29udHJvbGxlciB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250cm9sbGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBOYXZDb250YWluZXIgY29udHJvbCBvciB0aGUgRkNMIGNvbnRyb2wuXG5cdCAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byBOYXZDb250YWluZXIgY29udHJvbCBvciB0aGUgRkNMIGNvbnRyb2xcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRnZXRSb290Q29udGFpbmVyKCk6IE5hdkNvbnRhaW5lciB8IEZsZXhpYmxlQ29sdW1uTGF5b3V0IHtcblx0XHRyZXR1cm4gdGhpcy5nZXRSb290Q29udHJvbCgpLmdldENvbnRlbnQoKVswXSBhcyBOYXZDb250YWluZXIgfCBGbGV4aWJsZUNvbHVtbkxheW91dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHN0YXJ0dXAgbW9kZSBvZiB0aGUgYXBwLlxuXHQgKiBAcmV0dXJucyBUaGUgc3RhcnR1cCBtb2RlXG5cdCAqL1xuXHRnZXRTdGFydHVwTW9kZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnN0YXJ0dXBNb2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgc3RhcnR1cCBtb2RlIGZvciB0aGUgYXBwIHRvICdDcmVhdGUnLlxuXHQgKlxuXHQgKi9cblx0c2V0U3RhcnR1cE1vZGVDcmVhdGUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGFydHVwTW9kZSA9IFN0YXJ0dXBNb2RlLkNyZWF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnQXV0b0NyZWF0ZScuXG5cdCAqXG5cdCAqL1xuXHRzZXRTdGFydHVwTW9kZUF1dG9DcmVhdGUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGFydHVwTW9kZSA9IFN0YXJ0dXBNb2RlLkF1dG9DcmVhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzdGFydHVwIG1vZGUgZm9yIHRoZSBhcHAgdG8gJ0RlZXBsaW5rJy5cblx0ICpcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlRGVlcGxpbmsoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGFydHVwTW9kZSA9IFN0YXJ0dXBNb2RlLkRlZXBsaW5rO1xuXHR9XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLl9pbml0aWFsaXplZEtlZXBlciA9IG5ldyBQcm9taXNlS2VlcGVyPHZvaWQ+KCk7XG5cdFx0dGhpcy5pbml0aWFsaXplZCA9IHRoaXMuX2luaXRpYWxpemVkS2VlcGVyLnByb21pc2U7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0ZWRpdE1vZGU6IGxpYnJhcnkuRWRpdE1vZGUuRGlzcGxheSxcblx0XHRcdGlzRWRpdGFibGU6IGZhbHNlLFxuXHRcdFx0ZHJhZnRTdGF0dXM6IGxpYnJhcnkuRHJhZnRTdGF0dXMuQ2xlYXIsXG5cdFx0XHRidXN5OiBmYWxzZSxcblx0XHRcdGJ1c3lMb2NhbDoge30sXG5cdFx0XHRwYWdlczoge31cblx0XHR9KTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0cGFnZXM6IHt9XG5cdFx0fSk7XG5cdFx0Ly8gc2V0IHRoZSBiaW5kaW5nIE9uZVdheSBmb3IgdWlNb2RlbCB0byBwcmV2ZW50IGNoYW5nZXMgaWYgY29udHJvbGxlciBleHRlbnNpb25zIG1vZGlmeSBhIGJvdW5kIHByb3BlcnR5IG9mIGEgY29udHJvbFxuXHRcdHVpTW9kZWwuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKFwiT25lV2F5XCIpO1xuXHRcdC8vIGZvciBpbnRlcm5hbCBtb2RlbCBiaW5kaW5nIG5lZWRzIHRvIGJlIHR3byB3YXlcblx0XHRNb2RlbEhlbHBlci5lbmhhbmNlVWlKU09OTW9kZWwodWlNb2RlbCwgbGlicmFyeSk7XG5cdFx0TW9kZWxIZWxwZXIuZW5oYW5jZUludGVybmFsSlNPTk1vZGVsKG9JbnRlcm5hbE1vZGVsKTtcblxuXHRcdHRoaXMuc2V0TW9kZWwodWlNb2RlbCwgXCJ1aVwiKTtcblx0XHR0aGlzLnNldE1vZGVsKG9JbnRlcm5hbE1vZGVsLCBcImludGVybmFsXCIpO1xuXG5cdFx0dGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgPSB0aGlzLmJJbml0aWFsaXplUm91dGluZyAhPT0gdW5kZWZpbmVkID8gdGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgOiB0cnVlO1xuXHRcdHRoaXMuX29Sb3V0ZXJQcm94eSA9IG5ldyBSb3V0ZXJQcm94eSgpO1xuXHRcdHRoaXMuX29BcHBTdGF0ZUhhbmRsZXIgPSBuZXcgQXBwU3RhdGVIYW5kbGVyKHRoaXMpO1xuXHRcdHRoaXMuX29EaWFnbm9zdGljcyA9IG5ldyBEaWFnbm9zdGljcygpO1xuXG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuXHRcdGlmIChvTW9kZWw/LmlzQT8uPE9EYXRhTW9kZWw+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcIikpIHtcblx0XHRcdE1vZGVsSGVscGVyLmVuaGFuY2VPRGF0YU1vZGVsKG9Nb2RlbCwgdGhpcyk7XG5cdFx0XHRvTW9kZWwuc2V0UmV0cnlBZnRlckhhbmRsZXIodGhpcy5odHRwNTAzUmV0cnlIYW5kbGVyLmJpbmQodGhpcykpO1xuXHRcdFx0dGhpcy5lbnRpdHlDb250YWluZXIgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkucmVxdWVzdE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyL1wiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gbm90IGFuIE9EYXRhIHY0IHNlcnZpY2Vcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKT8uYXBwPy5kaXNhYmxlQ29sbGFib3JhdGlvbkRyYWZ0KSB7XG5cdFx0XHQvLyBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGdsb2JhbGx5IGluIGNhc2UgcHJpdmF0ZSBtYW5pZmVzdCBmbGFnIGlzIHNldFxuXHRcdFx0Ly8gdGhpcyBhbGxvd3MgY3VzdG9tZXJzIHRvIGRpc2FibGUgdGhlIGNvbGxhYm9yYXRpb24gZHJhZnQgaW4gY2FzZSB3ZSBydW4gaW50byBpc3N1ZXMgd2l0aCB0aGUgZmlyc3QgZGVsaXZlcnlcblx0XHRcdC8vIHRoaXMgd2lsbCBiZSByZW1vdmVkIHdpdGggdGhlIG5leHQgUy80IHJlbGVhc2Vcblx0XHRcdE1vZGVsSGVscGVyLmRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9NYW5pZmVzdFVJNSA9IHRoaXMuZ2V0TWFuaWZlc3QoKVtcInNhcC51aTVcIl07XG5cdFx0dGhpcy5jaGVja1JvdXRpbmdDb25maWd1cmF0aW9uKG9NYW5pZmVzdFVJNSk7XG5cblx0XHQvLyB0aGUgaW5pdCBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSByb3V0aW5nIGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgYWJvdmVcblx0XHQvLyBpdCB3aWxsIGNhbGwgdGhlIGNyZWF0ZUNvbnRlbnQgZnVuY3Rpb24gdG8gaW5zdGFudGlhdGUgdGhlIFJvb3RWaWV3IGFuZCBhZGQgaXQgdG8gdGhlIFVJQ29tcG9uZW50IGFnZ3JlZ2F0aW9uc1xuXG5cdFx0c3VwZXIuaW5pdCgpO1xuXHRcdEFwcENvbXBvbmVudC5pbnN0YW5jZU1hcFt0aGlzLmdldElkKCldID0gdGhpcztcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaHR0cDUwM1JldHJ5SGFuZGxlcihlcnJvcjogRXJyb3IgJiB7IHJldHJ5QWZ0ZXI/OiBEYXRlIH0pOiBQcm9taXNlPHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiBIVFRQNTAzSGFuZGxlci5oYW5kbGU1MDNEZWxheShlcnJvciwgdGhpcy5nZXRSb290Q29udHJvbCgpLCBnZXRSZXNvdXJjZU1vZGVsKHRoaXMpKTtcblx0fVxuXG5cdHByaXZhdGUgY2hlY2tSb3V0aW5nQ29uZmlndXJhdGlvbihvTWFuaWZlc3RVSTU6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl0pOiB2b2lkIHtcblx0XHRpZiAob01hbmlmZXN0VUk1Py5yb290Vmlldz8udmlld05hbWUpIHtcblx0XHRcdC8vIFRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpZWQgYW4gb3duIHJvb3QgdmlldyBpbiB0aGUgbWFuaWZlc3RcblxuXHRcdFx0Ly8gUm9vdCBWaWV3IHdhcyBtb3ZlZCBmcm9tIHNhcC5mZS50ZW1wbGF0ZXMgdG8gc2FwLmZlLmNvcmUgLSBrZWVwIGl0IGNvbXBhdGlibGVcblx0XHRcdGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuRkNMLlZJRVdOQU1FX0NPTVBBVElCSUxJVFkpIHtcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID0gTkFWQ09ORi5GQ0wuVklFV05BTUU7XG5cdFx0XHR9IGVsc2UgaWYgKG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9PT0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUVfQ09NUEFUSUJJTElUWSkge1xuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPSBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuRkNMLlZJRVdOQU1FICYmXG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb3V0aW5nPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBOQVZDT05GLkZDTC5ST1VURVJDTEFTU1xuXHRcdFx0KSB7XG5cdFx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7TkFWQ09ORi5GQ0wuVklFV05BTUV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuRkNMLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FICYmXG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb3V0aW5nPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU1xuXHRcdFx0KSB7XG5cdFx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9NYW5pZmVzdFVJNS5yb290Vmlldz8udmlld05hbWU/LmluY2x1ZGVzKFwic2FwLmZlLmNvcmUucm9vdFZpZXdcIikpIHtcblx0XHRcdFx0dGhyb3cgRXJyb3IoXG5cdFx0XHRcdFx0YFxcbldyb25nIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb3VwbGUgKHJvb3RWaWV3L3JvdXRlckNsYXNzKSBpbiBtYW5pZmVzdCBmaWxlLlxcbmAgK1xuXHRcdFx0XHRcdFx0YEN1cnJlbnQgdmFsdWVzIGFyZSA6KCR7b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lfS8ke1xuXHRcdFx0XHRcdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyB8fCBcIjxtaXNzaW5nIHJvdXRlciBjbGFzcz5cIlxuXHRcdFx0XHRcdFx0fSlcXG5gICtcblx0XHRcdFx0XHRcdGBFeHBlY3RlZCB2YWx1ZXMgYXJlIFxcbmAgK1xuXHRcdFx0XHRcdFx0YFxcdCAtICgke05BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FfS8ke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfSlcXG5gICtcblx0XHRcdFx0XHRcdGBcXHQgLSAoJHtOQVZDT05GLkZDTC5WSUVXTkFNRX0vJHtOQVZDT05GLkZDTC5ST1VURVJDTEFTU30pYFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLmluZm8oYFJvb3Rjb250YWluZXI6IFwiJHtvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgb25TZXJ2aWNlc1N0YXJ0ZWQoYWxsU2VydmljZXM6IFNlcnZpY2U8dW5rbm93bj5bXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuX3N0YXJ0ZWRTZXJ2aWNlcyA9IGFsbFNlcnZpY2VzO1xuXHRcdGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUZlYXR1cmVUb2dnbGVzKCk7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuXHRcdFx0QXBwQ29tcG9uZW50Lmluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc2VzLm1hcChhc3luYyAoZm5Qcm9jZXNzKSA9PiB7XG5cdFx0XHRcdHJldHVybiBmblByb2Nlc3MuY2FsbChudWxsLCB0aGlzKTtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdC8vcm91dGVyIG11c3QgYmUgc3RhcnRlZCBvbmNlIHRoZSByb290Y29udGFpbmVyIGlzIGluaXRpYWxpemVkXG5cdFx0Ly9zdGFydGluZyBvZiB0aGUgcm91dGVyXG5cdFx0Y29uc3QgZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0dGhpcy5lbnRpdHlDb250YWluZXJcblx0XHRcdFx0LnRoZW4oYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmF0dGFjaFJvdXRlTWF0Y2hlcnMpIHtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkuYXR0YWNoUm91dGVNYXRjaGVycygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmdldFJvdXRlcigpLmluaXRpYWxpemUoKTtcblx0XHRcdFx0XHR0aGlzLmdldFJvdXRlclByb3h5KCkuaW5pdCh0aGlzLCB0aGlzLl9pc0ZjbEVuYWJsZWQoKSk7XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRWYWx1ZUhlbHBIaXN0b3J5U2VydmljZSgpLnJlZ2lzdGVyU2hlbGxIb29rKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblxuXHRcdFx0XHRcdHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkuZGlzcGxheUVycm9yUGFnZShcblx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0FQUFNUQVJUX1RFQ0hOSUNBTF9JU1NVRVNcIiksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZXJyb3IubWVzc2FnZVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRpZiAodGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKClcblx0XHRcdFx0LmluaXRpYWxpemVSb3V0aW5nKClcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpKSB7XG5cdFx0XHRcdFx0XHRmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5nZXRSb290Q29udHJvbCgpLmF0dGFjaEFmdGVySW5pdChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdGZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbigpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuX2luaXRpYWxpemVkS2VlcGVyLnJlc29sdmUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyOiBFcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgY2Fubm90IGNhbm5vdCBpbml0aWFsaXplIHJvdXRpbmc6ICR7ZXJyLnRvU3RyaW5nKCl9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9pbml0aWFsaXplZEtlZXBlci5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0ZXhpdCgpOiB2b2lkIHtcblx0XHR0aGlzLl9zdGFydGVkU2VydmljZXMgPSBbXTtcblx0XHR0aGlzLl9vQXBwU3RhdGVIYW5kbGVyLmRlc3Ryb3koKTtcblx0XHR0aGlzLl9vUm91dGVyUHJveHkuZGVzdHJveSgpO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29BcHBTdGF0ZUhhbmRsZXI7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRkZWxldGUgdGhpcy5fb1JvdXRlclByb3h5O1xuXHRcdGRlbGV0ZU1vZGVsQ2FjaGVEYXRhKHRoaXMuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKS5kZXN0cm95KCk7XG5cdFx0dGhpcy5jbGVhblBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcygpO1xuXHR9XG5cblx0Z2V0TWV0YU1vZGVsKCk6IE9EYXRhTWV0YU1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHR9XG5cblx0Z2V0RGlhZ25vc3RpY3MoKTogRGlhZ25vc3RpY3Mge1xuXHRcdHJldHVybiB0aGlzLl9vRGlhZ25vc3RpY3M7XG5cdH1cblxuXHRkZXN0cm95KGJTdXBwcmVzc0ludmFsaWRhdGU/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5pc0V4aXRpbmcgPSB0cnVlO1xuXG5cdFx0Ly8gTEVBS1MsIHdpdGggd29ya2Fyb3VuZCBmb3Igc29tZSBGbGV4IC8gTURDIGlzc3VlXG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMudW5yZWdpc3RlclN0aWNreVNlc3Npb25DYWxsYmFja3MoKTtcblx0XHRcdGRlbGV0ZSBBcHBDb21wb25lbnQuaW5zdGFuY2VNYXBbdGhpcy5nZXRJZCgpXTtcblxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0ZGVsZXRlICh3aW5kb3cgYXMgdW5rbm93bikuX3JvdXRpbmc7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmluZm8oZSBhcyBzdHJpbmcpO1xuXHRcdH1cblxuXHRcdC8vV09SS0FST1VORCBmb3Igc3RpY2t5IGRpc2NhcmQgcmVxdWVzdCA6IGR1ZSB0byBhc3luYyBjYWxsYmFjaywgcmVxdWVzdCB0cmlnZ2VyZWQgYnkgdGhlIGV4aXRBcHBsaWNhdGlvbiB3aWxsIGJlIHNlbmQgYWZ0ZXIgdGhlIFVJQ29tcG9uZW50LnByb3RvdHlwZS5kZXN0cm95XG5cdFx0Ly9zbyB3ZSBuZWVkIHRvIGNvcHkgdGhlIFJlcXVlc3RvciBoZWFkZXJzIGFzIGl0IHdpbGwgYmUgZGVzdHJveVxuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCBvTWFpbk1vZGVsID0gdGhpcy5vTW9kZWxzW3VuZGVmaW5lZF07XG5cdFx0bGV0IG9IZWFkZXJzO1xuXHRcdGlmIChvTWFpbk1vZGVsPy5vUmVxdWVzdG9yKSB7XG5cdFx0XHRvSGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9NYWluTW9kZWwub1JlcXVlc3Rvci5tSGVhZGVycyk7XG5cdFx0fVxuXG5cdFx0Ly8gQXMgd2UgbmVlZCB0byBjbGVhbnVwIHRoZSBhcHBsaWNhdGlvbiAvIGhhbmRsZSB0aGUgZGlydHkgb2JqZWN0IHdlIG5lZWQgdG8gY2FsbCBvdXIgY2xlYW51cCBiZWZvcmUgdGhlIG1vZGVscyBhcmUgZGVzdHJveWVkXG5cdFx0dGhpcy5nZXRSb3V0aW5nU2VydmljZSgpPy5iZWZvcmVFeGl0Py4oKTtcblx0XHRzdXBlci5kZXN0cm95KGJTdXBwcmVzc0ludmFsaWRhdGUpO1xuXHRcdGlmIChvSGVhZGVycyAmJiBvTWFpbk1vZGVsLm9SZXF1ZXN0b3IpIHtcblx0XHRcdG9NYWluTW9kZWwub1JlcXVlc3Rvci5tSGVhZGVycyA9IG9IZWFkZXJzO1xuXHRcdH1cblx0fVxuXG5cdGdldFJvdXRpbmdTZXJ2aWNlKCk6IFJvdXRpbmdTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgUm91dGluZ1NlcnZpY2U7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblxuXHRnZXRTaGVsbFNlcnZpY2VzKCk6IElTaGVsbFNlcnZpY2VzIHtcblx0XHRyZXR1cm4ge30gYXMgSVNoZWxsU2VydmljZXM7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblxuXHRnZXROYXZpZ2F0aW9uU2VydmljZSgpOiBOYXZpZ2F0aW9uU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIE5hdmlnYXRpb25TZXJ2aWNlOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cblx0Z2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk6IFNpZGVFZmZlY3RzU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFNpZGVFZmZlY3RzU2VydmljZTtcblx0fVxuXG5cdGdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZTtcblx0fVxuXG5cdGdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpOiBDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2U7XG5cdH1cblxuXHRnZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk6IENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpOiBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZTtcblx0fVxuXG5cdGdldENvbnRleHRTaGFyaW5nU2VydmljZSgpOiBDb250ZXh0U2hhcmluZ1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBDb250ZXh0U2hhcmluZ1NlcnZpY2U7XG5cdH1cblxuXHRnZXRUZWxlbWV0cnlTZXJ2aWNlKCk6IFRlbGVtZXRyeVNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBUZWxlbWV0cnlTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0VmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UoKTogVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBWYWx1ZUhlbHBIaXN0b3J5U2VydmljZTtcblx0fVxuXG5cdGdldElubGluZUVkaXRTZXJ2aWNlKCk6IElubGluZUVkaXRTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgSW5saW5lRWRpdFNlcnZpY2U7XG5cdH1cblxuXHRhc3luYyBnZXRTdGFydHVwUGFyYW1ldGVycygpOiBQcm9taXNlPFN0YXJ0dXBQYXJhbWV0ZXJzPiB7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudERhdGEgPSB0aGlzLmdldENvbXBvbmVudERhdGEoKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKChvQ29tcG9uZW50RGF0YSAmJiBvQ29tcG9uZW50RGF0YS5zdGFydHVwUGFyYW1ldGVycykgfHwge30pO1xuXHR9XG5cblx0cmVzdG9yZSgpOiB2b2lkIHtcblx0XHQvLyBjYWxsZWQgYnkgRkxQIHdoZW4gYXBwIHNhcC1rZWVwLWFsaXZlIGlzIGVuYWJsZWQgYW5kIGFwcCBpcyByZXN0b3JlZFxuXHRcdGZvciAoY29uc3Qgc3RhcnRlZFNlcnZpY2Ugb2YgdGhpcy5fc3RhcnRlZFNlcnZpY2VzKSB7XG5cdFx0XHRzdGFydGVkU2VydmljZS5vblJlc3RvcmU/LigpO1xuXHRcdH1cblx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLnZpZXdTdGF0ZS5vblJlc3RvcmUoKTtcblxuXHRcdC8vIFJlc2V0IGFsbCB2YWx1ZXMgaW4gdmVyc2lvbkFjdGl2YXRpb25TdGF0dXMgdG8gZmFsc2Vcblx0XHRBcHBTdGF0ZUhhbmRsZXIucmVzZXRWZXJzaW9uQWN0aXZhdGlvblN0YXR1cygpO1xuXHR9XG5cblx0c3VzcGVuZCgpOiB2b2lkIHtcblx0XHQvLyBjYWxsZWQgYnkgRkxQIHdoZW4gYXBwIHNhcC1rZWVwLWFsaXZlIGlzIGVuYWJsZWQgYW5kIGFwcCBpcyBzdXNwZW5kZWRcblx0XHRmb3IgKGNvbnN0IHN0YXJ0ZWRTZXJ2aWNlIG9mIHRoaXMuX3N0YXJ0ZWRTZXJ2aWNlcykge1xuXHRcdFx0c3RhcnRlZFNlcnZpY2Uub25TdXNwZW5kPy4oKTtcblx0XHR9XG5cdFx0dGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS52aWV3U3RhdGUub25TdXNwZW5kKCk7XG5cdH1cblxuXHQvKipcblx0ICogbmF2aWdhdGVCYXNlZE9uU3RhcnR1cFBhcmFtZXRlciBmdW5jdGlvbiBpcyBhIHB1YmxpYyBhcGkgdGhhdCBhY3RzIGFzIGEgd3JhcHBlciB0byBfbWFuYWdlRGVlcExpbmtTdGFydHVwIGZ1bmN0aW9uLiBJdCBwYXNzZXMgdGhlIHN0YXJ0dXAgcGFyYW1ldGVycyBmdXJ0aGVyIHRvIF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAgZnVuY3Rpb25cblx0ICogQHBhcmFtIHN0YXJ0dXBQYXJhbWV0ZXJzIERlZmluZXMgdGhlIHN0YXJ0dXAgcGFyYW1ldGVycyB3aGljaCBpcyBmdXJ0aGVyIHBhc3NlZCB0byBfbWFuYWdlRGVlcExpbmtTdGFydHVwIGZ1bmN0aW9uLlxuXHQgKi9cblxuXHRhc3luYyBuYXZpZ2F0ZUJhc2VkT25TdGFydHVwUGFyYW1ldGVyKHN0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKCFCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSkpIHtcblx0XHRcdFx0aWYgKCFzdGFydHVwUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdHN0YXJ0dXBQYXJhbWV0ZXJzID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByb3V0aW5nU2VydmljZSA9IHRoaXMuZ2V0Um91dGluZ1NlcnZpY2UoKTtcblx0XHRcdFx0YXdhaXQgcm91dGluZ1NlcnZpY2UuX21hbmFnZURlZXBMaW5rU3RhcnR1cChzdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXhjZXB0aW9uOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXhjZXB0aW9uIGFzIHN0cmluZyk7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzLmdldE1vZGVsKFwidWlcIikpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVc2VkIHRvIGFsbG93IGRpc2FibGluZyB0aGUgQ29sbGFib3JhdGlvbiBNYW5hZ2VyIGludGVncmF0aW9uIGZvciB0aGUgT1ZQIHVzZSBjYXNlLlxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb2xsYWJvcmF0aW9uIG1hbmFnZXIgc2VydmljZSBpcyBhY3RpdmUuXG5cdCAqL1xuXHRpc0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXIgcHJvY2Vzc2VzIHRoYXQgbmVlZCB0byBiZSBydW4gZm9yIGV2ZXJ5IGluc3RhbmNlIHByaW9yIHRvIHN0YXJ0dXAuXG5cdCAqIEBwYXJhbSBmblByb2Nlc3MgRnVuY3Rpb24gdGhhdCBob2xkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcHJvY2Vzcy5cblx0ICpcblx0ICogVGhlIHJlZ2lzdGVyZWQgcHJvY2VzcyBjYW4gYmUgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3MuXG5cdCAqIEl0IHNoYWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBBcHBDb21wb25lbnQgaW5zdGFuY2UgYXMgYSBwYXJhbWV0ZXIgYmVmb3JlIHN0YXJ0dXAuXG5cdCAqL1xuXHRzdGF0aWMgcmVnaXN0ZXJJbnN0YW5jZURlcGVuZGVudFByb2Nlc3NGb3JTdGFydFVwKGZuUHJvY2VzczogKGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG5cdFx0dGhpcy5pbnN0YW5jZURlcGVuZGVudFByb2Nlc3Nlcy5wdXNoKGZuUHJvY2Vzcyk7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIHRoZSBjYWxsYmFja3MgcmVsYXRlZCB0byBhIHN0aWNreSBlZGl0IHNlc3Npb24uXG5cdCAqIEBwYXJhbSBkaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFja1xuXHQgKiBAcGFyYW0gc2Vzc2lvblRpbWVvdXRDYWxsYmFja1xuXHQgKiBAcGFyYW0gZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrXG5cdCAqL1xuXHRyZWdpc3RlclN0aWNreVNlc3Npb25DYWxsYmFja3MoXG5cdFx0ZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2s6IEZ1bmN0aW9uLFxuXHRcdHNlc3Npb25UaW1lb3V0Q2FsbGJhY2s6IEZ1bmN0aW9uLFxuXHRcdGRpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjazogRnVuY3Rpb25cblx0KTogdm9pZCB7XG5cdFx0dGhpcy5zdGlja3lEaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjayA9IGRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrO1xuXHRcdHRoaXMuZ2V0U2hlbGxTZXJ2aWNlcygpLnJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrKTtcblxuXHRcdHRoaXMuc3RpY2t5U2Vzc2lvblRpbWVvdXRDYWxsYmFjayA9IHNlc3Npb25UaW1lb3V0Q2FsbGJhY2s7XG5cdFx0dGhpcy5nZXRNb2RlbCgpLmF0dGFjaFNlc3Npb25UaW1lb3V0KHNlc3Npb25UaW1lb3V0Q2FsbGJhY2spO1xuXG5cdFx0dGhpcy5zdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2sgPSBkaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2s7XG5cdFx0dGhpcy5nZXRSb3V0aW5nU2VydmljZSgpLmF0dGFjaFJvdXRlTWF0Y2hlZCh7fSwgZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVbnJlZ2lzdGVycyB0aGUgY2FsbGJhY2tzIHJlbGF0ZWQgdG8gYSBzdGlja3kgZWRpdCBzZXNzaW9uLlxuXHQgKi9cblx0dW5yZWdpc3RlclN0aWNreVNlc3Npb25DYWxsYmFja3MoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuc3RpY2t5RGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2spIHtcblx0XHRcdHRoaXMuZ2V0U2hlbGxTZXJ2aWNlcygpLmRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIodGhpcy5zdGlja3lEaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjayk7XG5cdFx0XHR0aGlzLnN0aWNreURpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAodGhpcy5zdGlja3lTZXNzaW9uVGltZW91dENhbGxiYWNrICYmIHRoaXMuZ2V0TW9kZWwoKSkge1xuXHRcdFx0dGhpcy5nZXRNb2RlbCgpLmRldGFjaFNlc3Npb25UaW1lb3V0KHRoaXMuc3RpY2t5U2Vzc2lvblRpbWVvdXRDYWxsYmFjayk7XG5cdFx0XHR0aGlzLnN0aWNreVNlc3Npb25UaW1lb3V0Q2FsbGJhY2sgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjaykge1xuXHRcdFx0dGhpcy5nZXRSb3V0aW5nU2VydmljZSgpLmRldGFjaFJvdXRlTWF0Y2hlZCh0aGlzLnN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjayk7XG5cdFx0XHR0aGlzLnN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjayA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cbn1cblxuaW50ZXJmYWNlIEFwcENvbXBvbmVudCBleHRlbmRzIFVJQ29tcG9uZW50IHtcblx0aXNBZGFwdGF0aW9uTW9kZSgpOiBib29sZWFuO1xuXHRnZXRNYW5pZmVzdCgpOiBNYW5pZmVzdENvbnRlbnQ7XG5cdGdldE1hbmlmZXN0RW50cnkoZW50cnk6IFwic2FwLmFwcFwiKTogTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXTtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAudWk1XCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAudWk1XCJdO1xuXHRfZ2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAudWk1XCIsIG1lcmdlZDogYm9vbGVhbik6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl07XG5cdGdldE1hbmlmZXN0RW50cnkoZW50cnk6IFwic2FwLnVpXCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAudWlcIl07XG5cdGdldE1hbmlmZXN0RW50cnkoZW50cnk6IFwic2FwLmZlXCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0gfCB1bmRlZmluZWQ7XG5cdGdldE1hbmlmZXN0RW50cnkoZW50cnk6IFwic2FwLmZpb3JpXCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAuZmlvcmlcIl07XG5cdGdldENvbXBvbmVudERhdGEoKTogQ29tcG9uZW50RGF0YTtcblx0Z2V0Um9vdENvbnRyb2woKToge1xuXHRcdGdldENvbnRyb2xsZXIoKTogUm9vdFZpZXdCYXNlQ29udHJvbGxlcjtcblx0fSAmIFZpZXc7XG5cdGdldE1vZGVsKCk6IE9EYXRhTW9kZWw7XG5cdGdldE1vZGVsKG5hbWU6IFwidWlcIik6IEpTT05Nb2RlbDtcblx0Z2V0TW9kZWwobmFtZTogc3RyaW5nKTogTW9kZWwgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcENvbXBvbmVudDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBd0NBLE1BQU1BLFdBQVcsR0FBR0MsT0FBTyxDQUFDRCxXQUFXO0VBQ3ZDLE1BQU1FLE9BQU8sR0FBRztJQUNmQyxHQUFHLEVBQUU7TUFDSkMsUUFBUSxFQUFFLDBCQUEwQjtNQUNwQ0Msc0JBQXNCLEVBQUUseUNBQXlDO01BQ2pFQyxXQUFXLEVBQUU7SUFDZCxDQUFDO0lBQ0RDLFlBQVksRUFBRTtNQUNiSCxRQUFRLEVBQUUsbUNBQW1DO01BQzdDQyxzQkFBc0IsRUFBRSxrREFBa0Q7TUFDMUVDLFdBQVcsRUFBRTtJQUNkO0VBQ0QsQ0FBQztFQVlEO0VBQ0EsTUFBTUUsUUFBUSxHQUFHQyxNQUFNO0VBS3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVhBLElBMkdNQyxZQUFZLElBQUFDLElBQUEsR0EvRmpCQyxjQUFjLENBQUMsMEJBQTBCLEVBQUU7SUFDM0NDLE1BQU0sRUFBRTtNQUNQQyxTQUFTLEVBQUU7SUFDWixDQUFDO0lBQ0RDLFFBQVEsRUFBRTtNQUNULFNBQVMsRUFBRTtRQUNWQyxRQUFRLEVBQUU7VUFDVEMsYUFBYSxFQUFFO1lBQ2RDLFdBQVcsRUFBRSwyQ0FBMkM7WUFDeERDLE9BQU8sRUFBRSxTQUFTO1lBQ2xCQyxRQUFRLEVBQUU7Y0FDVEMsT0FBTyxF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QyxDQUFDa0MsMEJBQTBCLENBQUNKLDBCQUEwQixDQUFDO01BRTlFLElBQUksQ0FBQ0ssNEJBQTRCLEdBQUdKLHNCQUFzQjtNQUMxRCxJQUFJLENBQUNqRyxRQUFRLENBQUMsQ0FBQyxDQUFDc0csb0JBQW9CLENBQUNMLHNCQUFzQixDQUFDO01BRTVELElBQUksQ0FBQ00sb0NBQW9DLEdBQUdMLDhCQUE4QjtNQUMxRSxJQUFJLENBQUN0RCxpQkFBaUIsQ0FBQyxDQUFDLENBQUM0RCxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRU4sOEJBQThCLENBQUM7SUFDaEY7O0lBRUE7QUFDRDtBQUNBLE9BRkM7SUFBQW5LLE1BQUEsQ0FHQXVILGdDQUFnQyxHQUFoQyxTQUFBQSxnQ0FBZ0NBLENBQUEsRUFBUztNQUN4QyxJQUFJLElBQUksQ0FBQzZDLGdDQUFnQyxFQUFFO1FBQzFDLElBQUksQ0FBQ2pDLGdCQUFnQixDQUFDLENBQUMsQ0FBQ3VDLDRCQUE0QixDQUFDLElBQUksQ0FBQ04sZ0NBQWdDLENBQUM7UUFDM0YsSUFBSSxDQUFDQSxnQ0FBZ0MsR0FBR3pHLFNBQVM7TUFDbEQ7TUFDQSxJQUFJLElBQUksQ0FBQzJHLDRCQUE0QixJQUFJLElBQUksQ0FBQ3JHLFFBQVEsQ0FBQyxDQUFDLEVBQUU7UUFDekQsSUFBSSxDQUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDMEcsb0JBQW9CLENBQUMsSUFBSSxDQUFDTCw0QkFBNEIsQ0FBQztRQUN2RSxJQUFJLENBQUNBLDRCQUE0QixHQUFHM0csU0FBUztNQUM5QztNQUNBLElBQUksSUFBSSxDQUFDNkcsb0NBQW9DLEVBQUU7UUFDOUMsSUFBSSxDQUFDM0QsaUJBQWlCLENBQUMsQ0FBQyxDQUFDK0Qsa0JBQWtCLENBQUMsSUFBSSxDQUFDSixvQ0FBb0MsQ0FBQztRQUN0RixJQUFJLENBQUNBLG9DQUFvQyxHQUFHN0csU0FBUztNQUN0RDtJQUNELENBQUM7SUFBQSxPQUFBMUgsWUFBQTtFQUFBLEVBdmdCeUI0TyxXQUFXLEdBQUFoTSxhQUFBLENBSTlCZ0csV0FBVyxHQUFpQyxDQUFDLENBQUMsRUFBQWhHLGFBQUEsQ0FtQ3RDNkcsMEJBQTBCLEdBQXNELEVBQUUsRUFBQTdHLGFBQUEsR0FBQVcsV0FBQSxHQUFBc0wseUJBQUEsQ0FBQWxNLE9BQUEsQ0FBQXFCLFNBQUEsc0RBQUF4QixLQUFBO0lBQUFzTSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBLFdBQUFBLENBQUE7TUFBQSxPQXJDL0MsSUFBSTtJQUFBO0VBQUEsSUFBQXRNLE9BQUEsTUFBQUQsTUFBQTtFQUFBLE9BMGhCeEMxQyxZQUFZO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=