@sapui5/sap.fe.core 1.97.0 → 1.100.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 (306) hide show
  1. package/package.json +7 -4
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +309 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +315 -0
  5. package/src/sap/fe/core/AppComponent.js +389 -397
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +198 -181
  8. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  9. package/src/sap/fe/core/BaseController.js +83 -58
  10. package/src/sap/fe/core/BaseController.ts +68 -0
  11. package/src/sap/fe/core/BusyLocker.js +105 -121
  12. package/src/sap/fe/core/BusyLocker.ts +98 -0
  13. package/src/sap/fe/core/CommonUtils.js +2164 -2379
  14. package/src/sap/fe/core/CommonUtils.ts +2177 -0
  15. package/src/sap/fe/core/ExtensionAPI.js +279 -266
  16. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  17. package/src/sap/fe/core/PageController.js +218 -125
  18. package/src/sap/fe/core/PageController.ts +129 -0
  19. package/src/sap/fe/core/RouterProxy.js +924 -807
  20. package/src/sap/fe/core/RouterProxy.ts +840 -0
  21. package/src/sap/fe/core/Synchronization.js +41 -35
  22. package/src/sap/fe/core/Synchronization.ts +29 -0
  23. package/src/sap/fe/core/TemplateComponent.js +173 -155
  24. package/src/sap/fe/core/TemplateComponent.ts +173 -0
  25. package/src/sap/fe/core/TemplateModel.js +79 -54
  26. package/src/sap/fe/core/TemplateModel.ts +63 -0
  27. package/src/sap/fe/core/TransactionHelper.js +1560 -1579
  28. package/src/sap/fe/core/TransactionHelper.ts +1717 -0
  29. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  30. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  31. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  32. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  33. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  34. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  35. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  36. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  37. package/src/sap/fe/core/actions/draft.js +521 -581
  38. package/src/sap/fe/core/actions/draft.ts +566 -0
  39. package/src/sap/fe/core/actions/messageHandling.js +564 -511
  40. package/src/sap/fe/core/actions/messageHandling.ts +552 -0
  41. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  42. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  43. package/src/sap/fe/core/actions/operations.js +1093 -1211
  44. package/src/sap/fe/core/actions/operations.ts +1192 -0
  45. package/src/sap/fe/core/actions/sticky.js +114 -104
  46. package/src/sap/fe/core/actions/sticky.ts +119 -0
  47. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +70 -66
  48. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  49. package/src/sap/fe/core/controllerextensions/EditFlow.js +1594 -1701
  50. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  51. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +80 -54
  52. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  53. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +719 -505
  54. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  55. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +797 -813
  56. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  57. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1005 -973
  58. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  59. package/src/sap/fe/core/controllerextensions/KPIManagement.js +530 -476
  60. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +137 -46
  61. package/src/sap/fe/core/controllerextensions/MassEdit.js +144 -0
  62. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  63. package/src/sap/fe/core/controllerextensions/MessageHandler.js +234 -232
  64. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  65. package/src/sap/fe/core/controllerextensions/PageReady.js +302 -337
  66. package/src/sap/fe/core/controllerextensions/PageReady.ts +23 -17
  67. package/src/sap/fe/core/controllerextensions/Paginator.js +189 -148
  68. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  69. package/src/sap/fe/core/controllerextensions/Placeholder.js +158 -146
  70. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  71. package/src/sap/fe/core/controllerextensions/Routing.js +145 -106
  72. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  73. package/src/sap/fe/core/controllerextensions/RoutingListener.js +8 -6
  74. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  75. package/src/sap/fe/core/controllerextensions/Share.js +220 -244
  76. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  77. package/src/sap/fe/core/controllerextensions/SideEffects.js +593 -634
  78. package/src/sap/fe/core/controllerextensions/SideEffects.ts +29 -27
  79. package/src/sap/fe/core/controllerextensions/ViewState.js +789 -806
  80. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  81. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -3
  82. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  83. package/src/sap/fe/core/controls/CommandExecution.js +68 -66
  84. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  85. package/src/sap/fe/core/controls/ConditionalWrapper.js +91 -75
  86. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  87. package/src/sap/fe/core/controls/CustomQuickViewPage.js +131 -125
  88. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  89. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +105 -110
  90. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  91. package/src/sap/fe/core/controls/FieldWrapper.js +122 -140
  92. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  93. package/src/sap/fe/core/controls/FilterBar.js +163 -159
  94. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +46 -44
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  97. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +38 -42
  98. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
  100. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +127 -116
  101. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  102. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -255
  103. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  104. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +151 -141
  105. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  106. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +336 -322
  107. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  108. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
  110. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  111. package/src/sap/fe/core/converters/ConverterContext.js +348 -367
  112. package/src/sap/fe/core/converters/ConverterContext.ts +33 -19
  113. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  114. package/src/sap/fe/core/converters/ManifestSettings.ts +16 -1
  115. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -354
  116. package/src/sap/fe/core/converters/ManifestWrapper.ts +34 -6
  117. package/src/sap/fe/core/converters/MetaModelConverter.js +72 -9
  118. package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -16
  119. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  120. package/src/sap/fe/core/converters/TemplateConverter.ts +4 -3
  121. package/src/sap/fe/core/converters/annotations/DataField.js +28 -14
  122. package/src/sap/fe/core/converters/annotations/DataField.ts +38 -14
  123. package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
  124. package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
  125. package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
  126. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  127. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  128. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  130. package/src/sap/fe/core/converters/controls/Common/Form.js +21 -11
  131. package/src/sap/fe/core/converters/controls/Common/Form.ts +28 -6
  132. package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
  133. package/src/sap/fe/core/converters/controls/Common/KPI.ts +75 -2
  134. package/src/sap/fe/core/converters/controls/Common/Table.js +507 -408
  135. package/src/sap/fe/core/converters/controls/Common/Table.ts +618 -500
  136. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +592 -0
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +718 -0
  138. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +465 -59
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +462 -72
  140. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  142. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
  143. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
  144. package/src/sap/fe/core/converters/helpers/Aggregation.js +118 -121
  145. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
  146. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  147. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  148. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  149. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  150. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
  151. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
  152. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  153. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  154. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +28 -7
  155. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +23 -6
  156. package/src/sap/fe/core/converters/templates/ListReportConverter.js +20 -7
  157. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -14
  158. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  159. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  160. package/src/sap/fe/core/designtime/AppComponent.designtime.js +93 -90
  161. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  162. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  163. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  164. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  165. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  166. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  167. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  168. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  169. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  170. package/src/sap/fe/core/formatters/TableFormatter.js +91 -29
  171. package/src/sap/fe/core/formatters/TableFormatter.ts +94 -28
  172. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  173. package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
  174. package/src/sap/fe/core/fpm/Component.js +51 -54
  175. package/src/sap/fe/core/fpm/Component.ts +48 -0
  176. package/src/sap/fe/core/helpers/AppStartupHelper.js +373 -0
  177. package/src/sap/fe/core/helpers/AppStartupHelper.ts +417 -0
  178. package/src/sap/fe/core/helpers/BindingExpression.js +489 -442
  179. package/src/sap/fe/core/helpers/BindingExpression.ts +486 -469
  180. package/src/sap/fe/core/helpers/ClassSupport.js +212 -76
  181. package/src/sap/fe/core/helpers/ClassSupport.ts +198 -71
  182. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +64 -59
  183. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +52 -0
  184. package/src/sap/fe/core/helpers/EditState.js +81 -84
  185. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  186. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  187. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  188. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  189. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  190. package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
  191. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
  192. package/src/sap/fe/core/helpers/MassEditHelper.js +604 -0
  193. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  194. package/src/sap/fe/core/helpers/ModelHelper.js +253 -225
  195. package/src/sap/fe/core/helpers/ModelHelper.ts +250 -0
  196. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  197. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  198. package/src/sap/fe/core/helpers/SemanticDateOperators.js +336 -313
  199. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +334 -0
  200. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  201. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  202. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  203. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  204. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  205. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  206. package/src/sap/fe/core/library.js +427 -425
  207. package/src/sap/fe/core/library.support.js +23 -27
  208. package/src/sap/fe/core/library.support.ts +23 -0
  209. package/src/sap/fe/core/library.ts +420 -0
  210. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +64 -0
  211. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +69 -0
  212. package/src/sap/fe/core/messagebundle.properties +78 -13
  213. package/src/sap/fe/core/messagebundle_ar.properties +58 -7
  214. package/src/sap/fe/core/messagebundle_bg.properties +58 -7
  215. package/src/sap/fe/core/messagebundle_ca.properties +58 -7
  216. package/src/sap/fe/core/messagebundle_cs.properties +59 -8
  217. package/src/sap/fe/core/messagebundle_cy.properties +58 -7
  218. package/src/sap/fe/core/messagebundle_da.properties +58 -7
  219. package/src/sap/fe/core/messagebundle_de.properties +58 -7
  220. package/src/sap/fe/core/messagebundle_el.properties +58 -7
  221. package/src/sap/fe/core/messagebundle_en.properties +57 -6
  222. package/src/sap/fe/core/messagebundle_en_GB.properties +57 -6
  223. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +61 -6
  224. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +58 -7
  225. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +58 -7
  226. package/src/sap/fe/core/messagebundle_es.properties +58 -7
  227. package/src/sap/fe/core/messagebundle_es_MX.properties +58 -7
  228. package/src/sap/fe/core/messagebundle_et.properties +58 -7
  229. package/src/sap/fe/core/messagebundle_fi.properties +60 -9
  230. package/src/sap/fe/core/messagebundle_fr.properties +64 -13
  231. package/src/sap/fe/core/messagebundle_fr_CA.properties +59 -8
  232. package/src/sap/fe/core/messagebundle_hi.properties +58 -7
  233. package/src/sap/fe/core/messagebundle_hr.properties +58 -7
  234. package/src/sap/fe/core/messagebundle_hu.properties +59 -8
  235. package/src/sap/fe/core/messagebundle_id.properties +61 -10
  236. package/src/sap/fe/core/messagebundle_it.properties +58 -7
  237. package/src/sap/fe/core/messagebundle_iw.properties +58 -7
  238. package/src/sap/fe/core/messagebundle_ja.properties +58 -7
  239. package/src/sap/fe/core/messagebundle_kk.properties +58 -7
  240. package/src/sap/fe/core/messagebundle_ko.properties +58 -7
  241. package/src/sap/fe/core/messagebundle_lt.properties +58 -7
  242. package/src/sap/fe/core/messagebundle_lv.properties +59 -8
  243. package/src/sap/fe/core/messagebundle_ms.properties +58 -7
  244. package/src/sap/fe/core/messagebundle_nl.properties +58 -7
  245. package/src/sap/fe/core/messagebundle_no.properties +58 -7
  246. package/src/sap/fe/core/messagebundle_pl.properties +58 -7
  247. package/src/sap/fe/core/messagebundle_pt.properties +59 -8
  248. package/src/sap/fe/core/messagebundle_pt_PT.properties +58 -7
  249. package/src/sap/fe/core/messagebundle_ro.properties +58 -7
  250. package/src/sap/fe/core/messagebundle_ru.properties +58 -7
  251. package/src/sap/fe/core/messagebundle_sh.properties +58 -7
  252. package/src/sap/fe/core/messagebundle_sk.properties +58 -7
  253. package/src/sap/fe/core/messagebundle_sl.properties +58 -7
  254. package/src/sap/fe/core/messagebundle_sv.properties +59 -8
  255. package/src/sap/fe/core/messagebundle_th.properties +58 -7
  256. package/src/sap/fe/core/messagebundle_tr.properties +60 -9
  257. package/src/sap/fe/core/messagebundle_uk.properties +58 -7
  258. package/src/sap/fe/core/messagebundle_vi.properties +58 -7
  259. package/src/sap/fe/core/messagebundle_zh_CN.properties +58 -7
  260. package/src/sap/fe/core/messagebundle_zh_TW.properties +58 -7
  261. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  262. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  263. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +231 -202
  264. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  265. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +67 -92
  266. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -6
  267. package/src/sap/fe/core/services/NavigationServiceFactory.js +351 -300
  268. package/src/sap/fe/core/services/NavigationServiceFactory.ts +313 -0
  269. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +114 -81
  270. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +83 -0
  271. package/src/sap/fe/core/services/RoutingServiceFactory.js +927 -1152
  272. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  273. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -707
  274. package/src/sap/fe/core/services/ShellServicesFactory.ts +52 -15
  275. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +569 -637
  276. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +78 -102
  277. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +429 -478
  278. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +460 -0
  279. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  280. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  281. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  282. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  283. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  284. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  285. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  286. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  287. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  288. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  289. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  290. package/src/sap/fe/core/templating/DataModelPathHelper.js +97 -127
  291. package/src/sap/fe/core/templating/DataModelPathHelper.ts +112 -135
  292. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  293. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  294. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  295. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  296. package/src/sap/fe/core/templating/FilterHelper.js +140 -78
  297. package/src/sap/fe/core/templating/FilterHelper.ts +149 -78
  298. package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
  299. package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
  300. package/src/sap/fe/core/templating/UIFormatters.js +76 -135
  301. package/src/sap/fe/core/templating/UIFormatters.ts +76 -99
  302. package/src/sap/fe/core/type/Email.js +1 -1
  303. package/src/sap/fe/core/type/Email.ts +4 -6
  304. package/ui5.yaml +0 -3
  305. package/src/sap/fe/core/controls/filterbar.d.js +0 -8
  306. package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
@@ -1,268 +1,281 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(
6
- ["sap/ui/base/Object", "sap/fe/core/CommonUtils", "sap/base/Log", "sap/ui/core/Component", "sap/ui/model/json/JSONModel"],
7
- function(BaseObject, CommonUtils, Log, Component, JSONModel) {
8
- "use strict";
9
-
10
- /**
11
- * @class Common Extension API for all pages of SAP Fiori elements for OData V4.
12
- * @alias sap.fe.core.ExtensionAPI
13
- * @public
14
- * @hideconstructor
15
- * @extends sap.ui.base.Object
16
- * @since 1.79.0
17
- */
18
-
19
- var extensionAPI = BaseObject.extend("sap.fe.core.ExtensionAPI", {
20
- metadata: {
21
- /**
22
- * Properties.
23
- */
24
- associations: {
25
- /**
26
- * A controller extension offering hooks into the edit flow of the application.
27
- * @public
28
- */
29
- editFlow: {
30
- type: "sap.fe.core.controllerextensions.EditFlow",
31
- multiple: false
32
- },
33
- /**
34
- * A controller extension offering hooks into the routing flow of the application.
35
- * @public
36
- */
37
- routing: {
38
- type: "sap.fe.core.controllerextensions.Routing",
39
- multiple: false
40
- }
41
- }
42
- },
43
-
44
- constructor: function(oController, sId) {
45
- this._controller = oController;
46
- this._view = oController.getView();
47
- this.extension = this._controller.extension;
48
- this.editFlow = this._controller.editFlow;
49
- this.routing = this._controller.routing;
50
- this._routing = this._controller._routing;
51
- this.intentBasedNavigation._controller = this._controller;
52
- this._prefix = sId;
53
- },
54
- destroy: function() {
55
- delete this._controller;
56
- delete this._view;
57
- delete this.editFlow._controller;
58
- delete this.intentBasedNavigation._controller;
59
- },
60
-
61
- /**
62
- * @private
63
- * @name sap.fe.core.ExtensionAPI.getMetadata
64
- * @function
65
- */
66
- /**
67
- * @private
68
- * @name sap.fe.core.ExtensionAPI.extend
69
- * @function
70
- */
71
-
72
- /**
73
- * Access any control by ID.
74
- *
75
- * @alias sap.fe.core.ExtensionAPI#byId
76
- * @param {string} sId ID of the control without the view prefix. Either the ID prefixed by SAP Fiori elements
77
- * (for example with the section) or the control ID only. The latter works only for an extension running in
78
- * the same context (like in the same section). You can use the prefix for SAP Fiori elements to also access other controls located in different sections.
79
- * @returns {sap.ui.core.Control} The requested control, if found in the view.
80
- *
81
- * @private
82
- */
83
- byId: function(sId) {
84
- var oControl = this._view.byId(sId);
85
-
86
- if (!oControl && this._prefix) {
87
- // give it a try with the prefix
88
- oControl = this._view.byId(this._prefix + "--" + sId);
89
- }
90
-
91
- if (oControl) {
92
- return oControl;
93
- }
94
- },
95
-
96
- /**
97
- * Get access to models managed by SAP Fiori elements.<br>
98
- * The following models can be accessed:
99
- * <ul>
100
- * <li>undefined: the undefined model returns the SAPUI5 OData V4 model bound to this page</li>
101
- * <li>i18n / further data models defined in the manifest</li>
102
- * <li>ui: returns a SAPUI5 JSON model containing UI information.
103
- * Only the following properties are public and supported:
104
- * <ul>
105
- * <li>editMode: contains either 'Editable' or 'Display'</li>
106
- * </ul>
107
- * </li>
108
- * </ul>.
109
- *
110
- * @alias sap.fe.core.ExtensionAPI#getModel
111
- * @param {string} sModelName Name of the model
112
- * @returns {sap.ui.model.Model} The required model
113
- *
114
- * @public
115
- */
116
- getModel: function(sModelName) {
117
- var oAppComponent;
118
-
119
- if (sModelName && sModelName !== "ui") {
120
- oAppComponent = CommonUtils.getAppComponent(this._view);
121
- if (!oAppComponent.getManifestEntry("sap.ui5").models[sModelName]) {
122
- // don't allow access to our internal models
123
- return null;
124
- }
125
- }
126
-
127
- return this._view.getModel(sModelName);
128
- },
129
-
130
- /**
131
- * Add any control as a dependent control to this SAP Fiori elements page.
132
- *
133
- * @alias sap.fe.core.ExtensionAPI#addDependent
134
- * @param {sap.ui.core.Control} oControl Control to be added as a dependent control
135
- *
136
- * @public
137
- */
138
- addDependent: function(oControl) {
139
- this._view.addDependent(oControl);
140
- },
141
-
142
- /**
143
- * Remove a dependent control from this SAP Fiori elements page.
144
- *
145
- * @alias sap.fe.core.ExtensionAPI#removeDependent
146
- * @param {sap.ui.core.Control} oControl Control to be added as a dependent control
147
- *
148
- * @public
149
- */
150
- removeDependent: function(oControl) {
151
- this._view.removeDependent(oControl);
152
- },
153
-
154
- /**
155
- * Navigate to another target.
156
- *
157
- * @alias sap.fe.core.ExtensionAPI#navigateToTarget
158
- * @param {string} sTarget Name of the target route
159
- * @param {sap.ui.model.Context} [oContext] Context instance
160
- *
161
- * @public
162
- */
163
- navigateToTarget: function(sTarget, oContext) {
164
- this._controller._routing.navigateToTarget(oContext, sTarget);
165
- },
166
-
167
- /**
168
- * Load a fragment and go through the template preprocessor with the current page context.
169
- *
170
- * @alias sap.fe.core.ExtensionAPI#loadFragment
171
- * @param {object} mSettings The settings object
172
- * @param {string} mSettings.id The ID of the fragment itself
173
- * @param {string} mSettings.name The name of the fragment to be loaded
174
- * @param {object} mSettings.controller The controller to be attached to the fragment
175
- * @param {string} mSettings.contextPath The contextPath to be used for the templating process
176
- * @param {sap.ui.model.Context} mSettings.initialBindingContext The initial binding context
177
- * @returns {Promise<Element[]|sap.ui.core.Element[]>} The fragment definition
178
- *
179
- * @public
180
- */
181
- loadFragment: function(mSettings) {
182
- var that = this;
183
- var oTemplateComponent = Component.getOwnerComponentFor(this._view);
184
- var oPageModel = this._view.getModel("_pageModel");
185
- var oMetaModel = this.getModel().getMetaModel();
186
- var mViewData = oTemplateComponent.getViewData();
187
- var oViewDataModel = new JSONModel(mViewData),
188
- oPreprocessorSettings = {
189
- bindingContexts: {
190
- "contextPath": oMetaModel.createBindingContext(
191
- mSettings.contextPath || "/" + oTemplateComponent.getEntitySet()
192
- ),
193
- converterContext: oPageModel.createBindingContext("/", null, { noResolve: true }),
194
- viewData: mViewData ? oViewDataModel.createBindingContext("/") : null
195
- },
196
- models: {
197
- "contextPath": oMetaModel,
198
- converterContext: oPageModel,
199
- metaModel: oMetaModel,
200
- viewData: oViewDataModel
201
- },
202
- appComponent: CommonUtils.getAppComponent(this._view)
203
- };
204
- var oTemplatePromise = CommonUtils.templateControlFragment(mSettings.name, oPreprocessorSettings, {
205
- controller: mSettings.controller || this,
206
- isXML: false,
207
- id: mSettings.id
208
- });
209
- oTemplatePromise
210
- .then(function(oFragment) {
211
- if (mSettings.initialBindingContext !== undefined) {
212
- oFragment.setBindingContext(mSettings.initialBindingContext);
213
- }
214
- that.addDependent(oFragment);
215
- })
216
- .catch(function(oError) {
217
- Log.error(oError);
218
- });
219
- return oTemplatePromise;
220
- },
221
-
222
- /**
223
- * Triggers an update of the app state.
224
- * Should be called if the state of a control, or any other state-relevant information, was changed.
225
- *
226
- * @alias sap.fe.core.ExtensionAPI#updateAppState
227
- * @returns {Promise} A promise that resolves with the new app state object.
228
- *
229
- * @public
230
- */
231
- updateAppState: function() {
232
- return this._controller
233
- .getAppComponent()
234
- .getAppStateHandler()
235
- .createAppState();
236
- },
237
-
238
- /**
239
- * ExtensionAPI for intent-based navigation
240
- * @namespace sap.fe.core.ExtensionAPI.intentBasedNavigation
241
- * @public
242
- * @since 1.86.0
243
- */
244
- intentBasedNavigation: {
245
- /**
246
- * Navigates to an intent defined by an outbound definition in the manifest.
247
- *
248
- * @static
249
- * @alias sap.fe.core.ExtensionAPI.intentBasedNavigation#navigateOutbound
250
- * @param {string} sOutbound Identifier to locate the outbound definition in the manifest.
251
- * This provides the semantic object and action for the intent-based navigation.
252
- * Additionally, the outbound definition can be used to provide parameters for intent-based navigation.
253
- * See {@link topic:be0cf40f61184b358b5faedaec98b2da Descriptor for Applications, Components, and Libraries} for more information.
254
- * @param {object} mNavigationParameters Optional map containing key/value pairs to be passed to the intent.
255
- * If mNavigationParameters are provided, the parameters provided in the outbound definition of the manifest are ignored.
256
- * @public
257
- */
258
- navigateOutbound: function(sOutbound, mNavigationParameters) {
259
- var oInternalModelContext = this._controller.getView().getBindingContext("internal");
260
- oInternalModelContext.setProperty("externalNavigationContext", { "page": false });
261
- this._controller._intentBasedNavigation.navigateOutbound(sOutbound, mNavigationParameters);
262
- }
263
- }
264
- });
265
-
266
- return extensionAPI;
267
- }
268
- );
5
+ sap.ui.define(["sap/ui/base/Object", "sap/fe/core/CommonUtils", "sap/base/Log", "sap/ui/core/Component", "sap/ui/model/json/JSONModel", "sap/ui/base/Metadata", "./helpers/ClassSupport"], function (BaseObject, CommonUtils, Log, Component, JSONModel, Metadata, ClassSupport) {
6
+ "use strict";
7
+
8
+ var _dec, _dec2, _dec3, _dec4, _class, _class2, _descriptor, _descriptor2, _descriptor3;
9
+
10
+ var UI5Class = ClassSupport.UI5Class;
11
+ var Property = ClassSupport.Property;
12
+
13
+ function _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }
14
+
15
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
16
+
17
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
18
+
19
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
20
+
21
+ function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
22
+
23
+ function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and runs after the decorators transform.'); }
24
+
25
+ /**
26
+ * Common Extension API for all pages of SAP Fiori elements for OData V4.
27
+ * @alias sap.fe.core.ExtensionAPI
28
+ * @public
29
+ * @hideconstructor
30
+ * @extends sap.ui.base.Object
31
+ * @since 1.79.0
32
+ */
33
+ var ExtensionAPI = (_dec = UI5Class("sap.fe.core.ExtensionAPI", Metadata), _dec2 = Property({
34
+ type: "sap/fe/core/controllerextensions/EditFlow"
35
+ }), _dec3 = Property({
36
+ type: "sap/fe/core/controllerextensions/Routing"
37
+ }), _dec4 = Property({
38
+ type: "sap/fe/core/controllerextensions/IntentBasedNavigation"
39
+ }), _dec(_class = (_class2 = /*#__PURE__*/function (_BaseObject) {
40
+ _inherits(ExtensionAPI, _BaseObject);
41
+
42
+ /**
43
+ * A controller extension offering hooks into the edit flow of the application.
44
+ * @public
45
+ */
46
+
47
+ /**
48
+ * A controller extension offering hooks into the routing flow of the application.
49
+ * @public
50
+ */
51
+
52
+ /**
53
+ * ExtensionAPI for intent-based navigation
54
+ * @public
55
+ */
56
+ function ExtensionAPI(oController, sId) {
57
+ var _this;
58
+
59
+ _this = _BaseObject.call(this) || this;
60
+
61
+ _initializerDefineProperty(_this, "editFlow", _descriptor, _assertThisInitialized(_this));
62
+
63
+ _initializerDefineProperty(_this, "routing", _descriptor2, _assertThisInitialized(_this));
64
+
65
+ _initializerDefineProperty(_this, "intentBasedNavigation", _descriptor3, _assertThisInitialized(_this));
66
+
67
+ _this._controller = oController;
68
+ _this._view = oController.getView();
69
+ _this.extension = _this._controller.extension;
70
+ _this.editFlow = _this._controller.editFlow;
71
+ _this.routing = _this._controller.routing;
72
+ _this._routing = _this._controller._routing;
73
+ _this.intentBasedNavigation = _this._controller.intentBasedNavigation;
74
+ _this._prefix = sId;
75
+ return _this;
76
+ }
77
+
78
+ var _proto = ExtensionAPI.prototype;
79
+
80
+ _proto.destroy = function destroy() {// delete this._controller;
81
+ // delete this._view;
82
+ // delete this.editFlow._controller;
83
+ // delete this.intentBasedNavigation._controller;
84
+ }
85
+ /**
86
+ * Access any control by ID.
87
+ *
88
+ * @alias sap.fe.core.ExtensionAPI#byId
89
+ * @param {string} sId ID of the control without the view prefix. Either the ID prefixed by SAP Fiori elements
90
+ * (for example with the section) or the control ID only. The latter works only for an extension running in
91
+ * the same context (like in the same section). You can use the prefix for SAP Fiori elements to also access other controls located in different sections.
92
+ * @returns {sap.ui.core.Control} The requested control, if found in the view.
93
+ *
94
+ * @private
95
+ */
96
+ ;
97
+
98
+ _proto.byId = function byId(sId) {
99
+ var oControl = this._view.byId(sId);
100
+
101
+ if (!oControl && this._prefix) {
102
+ // give it a try with the prefix
103
+ oControl = this._view.byId(this._prefix + "--" + sId);
104
+ }
105
+
106
+ if (oControl) {
107
+ return oControl;
108
+ }
109
+ }
110
+ /**
111
+ * Get access to models managed by SAP Fiori elements.<br>
112
+ * The following models can be accessed:
113
+ * <ul>
114
+ * <li>undefined: the undefined model returns the SAPUI5 OData V4 model bound to this page</li>
115
+ * <li>i18n / further data models defined in the manifest</li>
116
+ * <li>ui: returns a SAPUI5 JSON model containing UI information.
117
+ * Only the following properties are public and supported:
118
+ * <ul>
119
+ * <li>editMode: contains either 'Editable' or 'Display'</li>
120
+ * </ul>
121
+ * </li>
122
+ * </ul>.
123
+ *
124
+ * @alias sap.fe.core.ExtensionAPI#getModel
125
+ * @param {string} sModelName Name of the model
126
+ * @returns {sap.ui.model.Model} The required model
127
+ *
128
+ * @public
129
+ */
130
+ ;
131
+
132
+ _proto.getModel = function getModel(sModelName) {
133
+ var oAppComponent;
134
+
135
+ if (sModelName && sModelName !== "ui") {
136
+ oAppComponent = CommonUtils.getAppComponent(this._view);
137
+
138
+ if (!oAppComponent.getManifestEntry("sap.ui5").models[sModelName]) {
139
+ // don't allow access to our internal models
140
+ return undefined;
141
+ }
142
+ }
143
+
144
+ return this._view.getModel(sModelName);
145
+ }
146
+ /**
147
+ * Add any control as a dependent control to this SAP Fiori elements page.
148
+ *
149
+ * @alias sap.fe.core.ExtensionAPI#addDependent
150
+ * @param {sap.ui.core.Control} oControl Control to be added as a dependent control
151
+ *
152
+ * @public
153
+ */
154
+ ;
155
+
156
+ _proto.addDependent = function addDependent(oControl) {
157
+ this._view.addDependent(oControl);
158
+ }
159
+ /**
160
+ * Remove a dependent control from this SAP Fiori elements page.
161
+ *
162
+ * @alias sap.fe.core.ExtensionAPI#removeDependent
163
+ * @param {sap.ui.core.Control} oControl Control to be added as a dependent control
164
+ *
165
+ * @public
166
+ */
167
+ ;
168
+
169
+ _proto.removeDependent = function removeDependent(oControl) {
170
+ this._view.removeDependent(oControl);
171
+ }
172
+ /**
173
+ * Navigate to another target.
174
+ *
175
+ * @alias sap.fe.core.ExtensionAPI#navigateToTarget
176
+ * @param {string} sTarget Name of the target route
177
+ * @param {sap.ui.model.Context} [oContext] Context instance
178
+ * @returns {void}
179
+ * @public
180
+ */
181
+ ;
182
+
183
+ _proto.navigateToTarget = function navigateToTarget(sTarget, oContext) {
184
+ return this._controller._routing.navigateToTarget(oContext, sTarget);
185
+ }
186
+ /**
187
+ * Load a fragment and go through the template preprocessor with the current page context.
188
+ *
189
+ * @alias sap.fe.core.ExtensionAPI#loadFragment
190
+ * @param {object} mSettings The settings object
191
+ * @param {string} mSettings.id The ID of the fragment itself
192
+ * @param {string} mSettings.name The name of the fragment to be loaded
193
+ * @param {object} mSettings.controller The controller to be attached to the fragment
194
+ * @param {string} mSettings.contextPath The contextPath to be used for the templating process
195
+ * @param {sap.ui.model.Context} mSettings.initialBindingContext The initial binding context
196
+ * @returns {Promise<Element[]|sap.ui.core.Element[]>} The fragment definition
197
+ *
198
+ * @public
199
+ */
200
+ ;
201
+
202
+ _proto.loadFragment = function loadFragment(mSettings) {
203
+ var _this$getModel,
204
+ _this2 = this;
205
+
206
+ var oTemplateComponent = Component.getOwnerComponentFor(this._view);
207
+
208
+ var oPageModel = this._view.getModel("_pageModel");
209
+
210
+ var oMetaModel = (_this$getModel = this.getModel()) === null || _this$getModel === void 0 ? void 0 : _this$getModel.getMetaModel();
211
+ var mViewData = oTemplateComponent.getViewData();
212
+ var oViewDataModel = new JSONModel(mViewData),
213
+ oPreprocessorSettings = {
214
+ bindingContexts: {
215
+ "contextPath": oMetaModel === null || oMetaModel === void 0 ? void 0 : oMetaModel.createBindingContext(mSettings.contextPath || "/" + oTemplateComponent.getEntitySet()),
216
+ converterContext: oPageModel.createBindingContext("/", undefined, {
217
+ noResolve: true
218
+ }),
219
+ viewData: mViewData ? oViewDataModel.createBindingContext("/") : null
220
+ },
221
+ models: {
222
+ "contextPath": oMetaModel,
223
+ converterContext: oPageModel,
224
+ metaModel: oMetaModel,
225
+ viewData: oViewDataModel
226
+ },
227
+ appComponent: CommonUtils.getAppComponent(this._view)
228
+ };
229
+ var oTemplatePromise = CommonUtils.templateControlFragment(mSettings.name, oPreprocessorSettings, {
230
+ controller: mSettings.controller || this,
231
+ isXML: false,
232
+ id: mSettings.id
233
+ });
234
+ oTemplatePromise.then(function (oFragment) {
235
+ if (mSettings.initialBindingContext !== undefined) {
236
+ oFragment.setBindingContext(mSettings.initialBindingContext);
237
+ }
238
+
239
+ _this2.addDependent(oFragment);
240
+ }).catch(function (oError) {
241
+ Log.error(oError);
242
+ });
243
+ return oTemplatePromise;
244
+ }
245
+ /**
246
+ * Triggers an update of the app state.
247
+ * Should be called if the state of a control, or any other state-relevant information, was changed.
248
+ *
249
+ * @alias sap.fe.core.ExtensionAPI#updateAppState
250
+ * @returns {Promise} A promise that resolves with the new app state object.
251
+ *
252
+ * @public
253
+ */
254
+ ;
255
+
256
+ _proto.updateAppState = function updateAppState() {
257
+ if (!this._controller.getAppComponent().getModel("internal").getProperty("/uiAdaptation")) {
258
+ return this._controller.getAppComponent().getAppStateHandler().createAppState();
259
+ }
260
+ };
261
+
262
+ return ExtensionAPI;
263
+ }(BaseObject), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "editFlow", [_dec2], {
264
+ configurable: true,
265
+ enumerable: true,
266
+ writable: true,
267
+ initializer: null
268
+ }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "routing", [_dec3], {
269
+ configurable: true,
270
+ enumerable: true,
271
+ writable: true,
272
+ initializer: null
273
+ }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "intentBasedNavigation", [_dec4], {
274
+ configurable: true,
275
+ enumerable: true,
276
+ writable: true,
277
+ initializer: null
278
+ })), _class2)) || _class);
279
+ return ExtensionAPI;
280
+ }, false);
281
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkV4dGVuc2lvbkFQSS50cyJdLCJuYW1lcyI6WyJFeHRlbnNpb25BUEkiLCJVSTVDbGFzcyIsIk1ldGFkYXRhIiwiUHJvcGVydHkiLCJ0eXBlIiwib0NvbnRyb2xsZXIiLCJzSWQiLCJfY29udHJvbGxlciIsIl92aWV3IiwiZ2V0VmlldyIsImV4dGVuc2lvbiIsImVkaXRGbG93Iiwicm91dGluZyIsIl9yb3V0aW5nIiwiaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiX3ByZWZpeCIsImRlc3Ryb3kiLCJieUlkIiwib0NvbnRyb2wiLCJnZXRNb2RlbCIsInNNb2RlbE5hbWUiLCJvQXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRNYW5pZmVzdEVudHJ5IiwibW9kZWxzIiwidW5kZWZpbmVkIiwiYWRkRGVwZW5kZW50IiwicmVtb3ZlRGVwZW5kZW50IiwibmF2aWdhdGVUb1RhcmdldCIsInNUYXJnZXQiLCJvQ29udGV4dCIsImxvYWRGcmFnbWVudCIsIm1TZXR0aW5ncyIsIm9UZW1wbGF0ZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwib1BhZ2VNb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJtVmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsIm9WaWV3RGF0YU1vZGVsIiwiSlNPTk1vZGVsIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiYmluZGluZ0NvbnRleHRzIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJjb250ZXh0UGF0aCIsImdldEVudGl0eVNldCIsImNvbnZlcnRlckNvbnRleHQiLCJub1Jlc29sdmUiLCJ2aWV3RGF0YSIsIm1ldGFNb2RlbCIsImFwcENvbXBvbmVudCIsIm9UZW1wbGF0ZVByb21pc2UiLCJ0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCIsIm5hbWUiLCJjb250cm9sbGVyIiwiaXNYTUwiLCJpZCIsInRoZW4iLCJvRnJhZ21lbnQiLCJpbml0aWFsQmluZGluZ0NvbnRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJ1cGRhdGVBcHBTdGF0ZSIsImdldFByb3BlcnR5IiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiY3JlYXRlQXBwU3RhdGUiLCJCYXNlT2JqZWN0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQUVNQSxZLFdBRExDLFFBQVEsQ0FBQywwQkFBRCxFQUE2QkMsUUFBN0IsQyxVQU1QQyxRQUFRLENBQUM7QUFBRUMsSUFBQUEsSUFBSSxFQUFFO0FBQVIsR0FBRCxDLFVBTVJELFFBQVEsQ0FBQztBQUFFQyxJQUFBQSxJQUFJLEVBQUU7QUFBUixHQUFELEMsVUFNUkQsUUFBUSxDQUFDO0FBQUVDLElBQUFBLElBQUksRUFBRTtBQUFSLEdBQUQsQzs7O0FBaEJUO0FBQ0Q7QUFDQTtBQUNBOztBQUdDO0FBQ0Q7QUFDQTtBQUNBOztBQUdDO0FBQ0Q7QUFDQTtBQUNBO0FBVUMsMEJBQVlDLFdBQVosRUFBeUNDLEdBQXpDLEVBQXVEO0FBQUE7O0FBQ3REOztBQURzRDs7QUFBQTs7QUFBQTs7QUFFdEQsWUFBS0MsV0FBTCxHQUFtQkYsV0FBbkI7QUFDQSxZQUFLRyxLQUFMLEdBQWFILFdBQVcsQ0FBQ0ksT0FBWixFQUFiO0FBQ0EsWUFBS0MsU0FBTCxHQUFrQixNQUFLSCxXQUFOLENBQTBCRyxTQUEzQztBQUNBLFlBQUtDLFFBQUwsR0FBZ0IsTUFBS0osV0FBTCxDQUFpQkksUUFBakM7QUFDQSxZQUFLQyxPQUFMLEdBQWUsTUFBS0wsV0FBTCxDQUFpQkssT0FBaEM7QUFDQSxZQUFLQyxRQUFMLEdBQWdCLE1BQUtOLFdBQUwsQ0FBaUJNLFFBQWpDO0FBQ0EsWUFBS0MscUJBQUwsR0FBNkIsTUFBS1AsV0FBTCxDQUFpQk8scUJBQTlDO0FBQ0EsWUFBS0MsT0FBTCxHQUFlVCxHQUFmO0FBVHNE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QXNCO0FBQzVCQyxRQUFBQSxHQUFHLENBQUNDLEtBQUosQ0FBVUYsTUFBVjtBQUNBLE9BVEY7QUFVQSxhQUFPWCxnQkFBUDtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ2MsYyxHQUFBLDBCQUE0QztBQUMzQyxVQUNDLENBQUMsS0FBSzdELFdBQUwsQ0FDQ2dCLGVBREQsR0FFQ0osUUFGRCxDQUVVLFVBRlYsRUFHQ2tELFdBSEQsQ0FHYSxlQUhiLENBREYsRUFLRTtBQUNELGVBQU8sS0FBSzlELFdBQUwsQ0FDTGdCLGVBREssR0FFTCtDLGtCQUZLLEdBR0xDLGNBSEssRUFBUDtBQUlBO0FBQ0QsSzs7O0lBMU55QkMsVTs7Ozs7Ozs7Ozs7Ozs7OztTQTZOWnhFLFkiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXNlT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9PYmplY3RcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgTWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01ldGFkYXRhXCI7XG5pbXBvcnQgeyBQcm9wZXJ0eSwgVUk1Q2xhc3MgfSBmcm9tIFwiLi9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1JvdXRpbmdcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5cbi8qKlxuICogQ29tbW9uIEV4dGVuc2lvbiBBUEkgZm9yIGFsbCBwYWdlcyBvZiBTQVAgRmlvcmkgZWxlbWVudHMgZm9yIE9EYXRhIFY0LlxuICogQGFsaWFzIHNhcC5mZS5jb3JlLkV4dGVuc2lvbkFQSVxuICogQHB1YmxpY1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgc2FwLnVpLmJhc2UuT2JqZWN0XG4gKiBAc2luY2UgMS43OS4wXG4gKi9cbkBVSTVDbGFzcyhcInNhcC5mZS5jb3JlLkV4dGVuc2lvbkFQSVwiLCBNZXRhZGF0YSlcbmNsYXNzIEV4dGVuc2lvbkFQSSBleHRlbmRzIEJhc2VPYmplY3Qge1xuXHQvKipcblx0ICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBob29rcyBpbnRvIHRoZSBlZGl0IGZsb3cgb2YgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAUHJvcGVydHkoeyB0eXBlOiBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0VkaXRGbG93XCIgfSlcblx0ZWRpdEZsb3c6IEVkaXRGbG93O1xuXHQvKipcblx0ICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBob29rcyBpbnRvIHRoZSByb3V0aW5nIGZsb3cgb2YgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAUHJvcGVydHkoeyB0eXBlOiBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1JvdXRpbmdcIiB9KVxuXHRyb3V0aW5nOiBSb3V0aW5nO1xuXHQvKipcblx0ICogRXh0ZW5zaW9uQVBJIGZvciBpbnRlbnQtYmFzZWQgbmF2aWdhdGlvblxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAUHJvcGVydHkoeyB0eXBlOiBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiIH0pXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbjogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdHByaXZhdGUgX2NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyO1xuXHRwcml2YXRlIF92aWV3OiBWaWV3O1xuXHRwcml2YXRlIF9yb3V0aW5nOiBJbnRlcm5hbFJvdXRpbmc7XG5cdHByaXZhdGUgX3ByZWZpeD86IHN0cmluZztcblx0cHJpdmF0ZSBleHRlbnNpb246IGFueTtcblxuXHRjb25zdHJ1Y3RvcihvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIHNJZD86IHN0cmluZykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fY29udHJvbGxlciA9IG9Db250cm9sbGVyO1xuXHRcdHRoaXMuX3ZpZXcgPSBvQ29udHJvbGxlci5nZXRWaWV3KCk7XG5cdFx0dGhpcy5leHRlbnNpb24gPSAodGhpcy5fY29udHJvbGxlciBhcyBhbnkpLmV4dGVuc2lvbjtcblx0XHR0aGlzLmVkaXRGbG93ID0gdGhpcy5fY29udHJvbGxlci5lZGl0Rmxvdztcblx0XHR0aGlzLnJvdXRpbmcgPSB0aGlzLl9jb250cm9sbGVyLnJvdXRpbmc7XG5cdFx0dGhpcy5fcm91dGluZyA9IHRoaXMuX2NvbnRyb2xsZXIuX3JvdXRpbmc7XG5cdFx0dGhpcy5pbnRlbnRCYXNlZE5hdmlnYXRpb24gPSB0aGlzLl9jb250cm9sbGVyLmludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0XHR0aGlzLl9wcmVmaXggPSBzSWQ7XG5cdH1cblx0ZGVzdHJveSgpIHtcblx0XHQvLyBkZWxldGUgdGhpcy5fY29udHJvbGxlcjtcblx0XHQvLyBkZWxldGUgdGhpcy5fdmlldztcblx0XHQvLyBkZWxldGUgdGhpcy5lZGl0Rmxvdy5fY29udHJvbGxlcjtcblx0XHQvLyBkZWxldGUgdGhpcy5pbnRlbnRCYXNlZE5hdmlnYXRpb24uX2NvbnRyb2xsZXI7XG5cdH1cblxuXHQvKipcblx0ICogQWNjZXNzIGFueSBjb250cm9sIGJ5IElELlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuRXh0ZW5zaW9uQVBJI2J5SWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJZCBJRCBvZiB0aGUgY29udHJvbCB3aXRob3V0IHRoZSB2aWV3IHByZWZpeC4gRWl0aGVyIHRoZSBJRCBwcmVmaXhlZCBieSBTQVAgRmlvcmkgZWxlbWVudHNcblx0ICogKGZvciBleGFtcGxlIHdpdGggdGhlIHNlY3Rpb24pIG9yIHRoZSBjb250cm9sIElEIG9ubHkuIFRoZSBsYXR0ZXIgd29ya3Mgb25seSBmb3IgYW4gZXh0ZW5zaW9uIHJ1bm5pbmcgaW5cblx0ICogdGhlIHNhbWUgY29udGV4dCAobGlrZSBpbiB0aGUgc2FtZSBzZWN0aW9uKS4gWW91IGNhbiB1c2UgdGhlIHByZWZpeCBmb3IgU0FQIEZpb3JpIGVsZW1lbnRzIHRvIGFsc28gYWNjZXNzIG90aGVyIGNvbnRyb2xzIGxvY2F0ZWQgaW4gZGlmZmVyZW50IHNlY3Rpb25zLlxuXHQgKiBAcmV0dXJucyB7c2FwLnVpLmNvcmUuQ29udHJvbH0gVGhlIHJlcXVlc3RlZCBjb250cm9sLCBpZiBmb3VuZCBpbiB0aGUgdmlldy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGJ5SWQoc0lkOiBzdHJpbmcpIHtcblx0XHRsZXQgb0NvbnRyb2wgPSB0aGlzLl92aWV3LmJ5SWQoc0lkKTtcblxuXHRcdGlmICghb0NvbnRyb2wgJiYgdGhpcy5fcHJlZml4KSB7XG5cdFx0XHQvLyBnaXZlIGl0IGEgdHJ5IHdpdGggdGhlIHByZWZpeFxuXHRcdFx0b0NvbnRyb2wgPSB0aGlzLl92aWV3LmJ5SWQodGhpcy5fcHJlZml4ICsgXCItLVwiICsgc0lkKTtcblx0XHR9XG5cblx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGFjY2VzcyB0byBtb2RlbHMgbWFuYWdlZCBieSBTQVAgRmlvcmkgZWxlbWVudHMuPGJyPlxuXHQgKiBUaGUgZm9sbG93aW5nIG1vZGVscyBjYW4gYmUgYWNjZXNzZWQ6XG5cdCAqIDx1bD5cblx0ICogPGxpPnVuZGVmaW5lZDogdGhlIHVuZGVmaW5lZCBtb2RlbCByZXR1cm5zIHRoZSBTQVBVSTUgT0RhdGEgVjQgbW9kZWwgYm91bmQgdG8gdGhpcyBwYWdlPC9saT5cblx0ICogPGxpPmkxOG4gLyBmdXJ0aGVyIGRhdGEgbW9kZWxzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0PC9saT5cblx0ICogPGxpPnVpOiByZXR1cm5zIGEgU0FQVUk1IEpTT04gbW9kZWwgY29udGFpbmluZyBVSSBpbmZvcm1hdGlvbi5cblx0ICogT25seSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIHB1YmxpYyBhbmQgc3VwcG9ydGVkOlxuXHQgKiBcdDx1bD5cblx0ICogICAgIDxsaT5lZGl0TW9kZTogY29udGFpbnMgZWl0aGVyICdFZGl0YWJsZScgb3IgJ0Rpc3BsYXknPC9saT5cblx0ICogIDwvdWw+XG5cdCAqIDwvbGk+XG5cdCAqIDwvdWw+LlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuRXh0ZW5zaW9uQVBJI2dldE1vZGVsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTW9kZWxOYW1lIE5hbWUgb2YgdGhlIG1vZGVsXG5cdCAqIEByZXR1cm5zIHtzYXAudWkubW9kZWwuTW9kZWx9IFRoZSByZXF1aXJlZCBtb2RlbFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRNb2RlbChzTW9kZWxOYW1lPzogc3RyaW5nKTogTW9kZWwgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvQXBwQ29tcG9uZW50O1xuXG5cdFx0aWYgKHNNb2RlbE5hbWUgJiYgc01vZGVsTmFtZSAhPT0gXCJ1aVwiKSB7XG5cdFx0XHRvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX3ZpZXcpO1xuXHRcdFx0aWYgKCFvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpLm1vZGVsc1tzTW9kZWxOYW1lXSkge1xuXHRcdFx0XHQvLyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gb3VyIGludGVybmFsIG1vZGVsc1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl92aWV3LmdldE1vZGVsKHNNb2RlbE5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhbnkgY29udHJvbCBhcyBhIGRlcGVuZGVudCBjb250cm9sIHRvIHRoaXMgU0FQIEZpb3JpIGVsZW1lbnRzIHBhZ2UuXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5FeHRlbnNpb25BUEkjYWRkRGVwZW5kZW50XG5cdCAqIEBwYXJhbSB7c2FwLnVpLmNvcmUuQ29udHJvbH0gb0NvbnRyb2wgQ29udHJvbCB0byBiZSBhZGRlZCBhcyBhIGRlcGVuZGVudCBjb250cm9sXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFkZERlcGVuZGVudChvQ29udHJvbDogQ29udHJvbCkge1xuXHRcdHRoaXMuX3ZpZXcuYWRkRGVwZW5kZW50KG9Db250cm9sKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYSBkZXBlbmRlbnQgY29udHJvbCBmcm9tIHRoaXMgU0FQIEZpb3JpIGVsZW1lbnRzIHBhZ2UuXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5FeHRlbnNpb25BUEkjcmVtb3ZlRGVwZW5kZW50XG5cdCAqIEBwYXJhbSB7c2FwLnVpLmNvcmUuQ29udHJvbH0gb0NvbnRyb2wgQ29udHJvbCB0byBiZSBhZGRlZCBhcyBhIGRlcGVuZGVudCBjb250cm9sXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJlbW92ZURlcGVuZGVudChvQ29udHJvbDogQ29udHJvbCkge1xuXHRcdHRoaXMuX3ZpZXcucmVtb3ZlRGVwZW5kZW50KG9Db250cm9sKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZSB0byBhbm90aGVyIHRhcmdldC5cblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLkV4dGVuc2lvbkFQSSNuYXZpZ2F0ZVRvVGFyZ2V0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVGFyZ2V0IE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5Db250ZXh0fSBbb0NvbnRleHRdIENvbnRleHQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdG5hdmlnYXRlVG9UYXJnZXQoc1RhcmdldDogc3RyaW5nLCBvQ29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRcdHJldHVybiB0aGlzLl9jb250cm9sbGVyLl9yb3V0aW5nLm5hdmlnYXRlVG9UYXJnZXQob0NvbnRleHQsIHNUYXJnZXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIExvYWQgYSBmcmFnbWVudCBhbmQgZ28gdGhyb3VnaCB0aGUgdGVtcGxhdGUgcHJlcHJvY2Vzc29yIHdpdGggdGhlIGN1cnJlbnQgcGFnZSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuRXh0ZW5zaW9uQVBJI2xvYWRGcmFnbWVudFxuXHQgKiBAcGFyYW0ge29iamVjdH0gbVNldHRpbmdzIFRoZSBzZXR0aW5ncyBvYmplY3Rcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1TZXR0aW5ncy5pZCBUaGUgSUQgb2YgdGhlIGZyYWdtZW50IGl0c2VsZlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbVNldHRpbmdzLm5hbWUgVGhlIG5hbWUgb2YgdGhlIGZyYWdtZW50IHRvIGJlIGxvYWRlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gbVNldHRpbmdzLmNvbnRyb2xsZXIgVGhlIGNvbnRyb2xsZXIgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGZyYWdtZW50XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtU2V0dGluZ3MuY29udGV4dFBhdGggVGhlIGNvbnRleHRQYXRoIHRvIGJlIHVzZWQgZm9yIHRoZSB0ZW1wbGF0aW5nIHByb2Nlc3Ncblx0ICogQHBhcmFtIHtzYXAudWkubW9kZWwuQ29udGV4dH0gbVNldHRpbmdzLmluaXRpYWxCaW5kaW5nQ29udGV4dCBUaGUgaW5pdGlhbCBiaW5kaW5nIGNvbnRleHRcblx0ICogQHJldHVybnMge1Byb21pc2U8RWxlbWVudFtdfHNhcC51aS5jb3JlLkVsZW1lbnRbXT59IFRoZSBmcmFnbWVudCBkZWZpbml0aW9uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGxvYWRGcmFnbWVudChtU2V0dGluZ3M6IHtcblx0XHRpZDogc3RyaW5nO1xuXHRcdG5hbWU6IHN0cmluZztcblx0XHRjb250cm9sbGVyOiBvYmplY3Q7XG5cdFx0Y29udGV4dFBhdGg6IHN0cmluZztcblx0XHRpbml0aWFsQmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdH0pOiBQcm9taXNlPEVsZW1lbnQgfCBFbGVtZW50W10+IHtcblx0XHRjb25zdCBvVGVtcGxhdGVDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IodGhpcy5fdmlldykgYXMgdHlwZW9mIFRlbXBsYXRlQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9QYWdlTW9kZWwgPSB0aGlzLl92aWV3LmdldE1vZGVsKFwiX3BhZ2VNb2RlbFwiKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBtVmlld0RhdGEgPSBvVGVtcGxhdGVDb21wb25lbnQuZ2V0Vmlld0RhdGEoKTtcblx0XHRjb25zdCBvVmlld0RhdGFNb2RlbCA9IG5ldyBKU09OTW9kZWwobVZpZXdEYXRhKSxcblx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XCJjb250ZXh0UGF0aFwiOiBvTWV0YU1vZGVsPy5jcmVhdGVCaW5kaW5nQ29udGV4dChtU2V0dGluZ3MuY29udGV4dFBhdGggfHwgXCIvXCIgKyBvVGVtcGxhdGVDb21wb25lbnQuZ2V0RW50aXR5U2V0KCkpLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG9QYWdlTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIsIHVuZGVmaW5lZCwgeyBub1Jlc29sdmU6IHRydWUgfSksXG5cdFx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSA/IG9WaWV3RGF0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSA6IG51bGxcblx0XHRcdFx0fSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XCJjb250ZXh0UGF0aFwiOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG9QYWdlTW9kZWwsXG5cdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdHZpZXdEYXRhOiBvVmlld0RhdGFNb2RlbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcHBDb21wb25lbnQ6IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLl92aWV3KVxuXHRcdFx0fTtcblx0XHRjb25zdCBvVGVtcGxhdGVQcm9taXNlID0gQ29tbW9uVXRpbHMudGVtcGxhdGVDb250cm9sRnJhZ21lbnQobVNldHRpbmdzLm5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywge1xuXHRcdFx0Y29udHJvbGxlcjogbVNldHRpbmdzLmNvbnRyb2xsZXIgfHwgdGhpcyxcblx0XHRcdGlzWE1MOiBmYWxzZSxcblx0XHRcdGlkOiBtU2V0dGluZ3MuaWRcblx0XHR9KTtcblx0XHRvVGVtcGxhdGVQcm9taXNlXG5cdFx0XHQudGhlbigob0ZyYWdtZW50OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKG1TZXR0aW5ncy5pbml0aWFsQmluZGluZ0NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG9GcmFnbWVudC5zZXRCaW5kaW5nQ29udGV4dChtU2V0dGluZ3MuaW5pdGlhbEJpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmFkZERlcGVuZGVudChvRnJhZ21lbnQpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbihvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHRcdH0pO1xuXHRcdHJldHVybiBvVGVtcGxhdGVQcm9taXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyaWdnZXJzIGFuIHVwZGF0ZSBvZiB0aGUgYXBwIHN0YXRlLlxuXHQgKiBTaG91bGQgYmUgY2FsbGVkIGlmIHRoZSBzdGF0ZSBvZiBhIGNvbnRyb2wsIG9yIGFueSBvdGhlciBzdGF0ZS1yZWxldmFudCBpbmZvcm1hdGlvbiwgd2FzIGNoYW5nZWQuXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5FeHRlbnNpb25BUEkjdXBkYXRlQXBwU3RhdGVcblx0ICogQHJldHVybnMge1Byb21pc2V9IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhcHAgc3RhdGUgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHR1cGRhdGVBcHBTdGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoXG5cdFx0XHQhdGhpcy5fY29udHJvbGxlclxuXHRcdFx0XHQuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0LmdldE1vZGVsKFwiaW50ZXJuYWxcIilcblx0XHRcdFx0LmdldFByb3BlcnR5KFwiL3VpQWRhcHRhdGlvblwiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NvbnRyb2xsZXJcblx0XHRcdFx0LmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHRcdC5nZXRBcHBTdGF0ZUhhbmRsZXIoKVxuXHRcdFx0XHQuY3JlYXRlQXBwU3RhdGUoKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRXh0ZW5zaW9uQVBJO1xuIl19