@sap/open.fe 1.99.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 (969) hide show
  1. package/package.json +1 -1
  2. package/packages/sap.fe.common/src/sap/fe/common/.library +1 -1
  3. package/packages/sap.fe.common/src/sap/fe/common/.theming +1 -1
  4. package/packages/sap.fe.common/src/sap/fe/common/MessageButton-dbg.js +1748 -1813
  5. package/packages/sap.fe.common/src/sap/fe/common/MessageButton.js +2 -3
  6. package/packages/sap.fe.common/src/sap/fe/common/MessageButton.ts +1801 -0
  7. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter-dbg.js +77 -32
  8. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter.js +2 -3
  9. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter.ts +26 -0
  10. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover-dbg.js +43 -53
  11. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover.js +2 -3
  12. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover.ts +39 -0
  13. package/packages/sap.fe.common/src/sap/fe/common/library-dbg.js +31 -38
  14. package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js +8 -9
  15. package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js.map +3 -3
  16. package/packages/sap.fe.common/src/sap/fe/common/library-preload.js +23 -71
  17. package/packages/sap.fe.common/src/sap/fe/common/library-preload.js.map +4 -4
  18. package/packages/sap.fe.common/src/sap/fe/common/library.js +4 -5
  19. package/packages/sap.fe.common/src/sap/fe/common/library.ts +35 -0
  20. package/packages/sap.fe.common/src/sap/fe/common/manifest.json +3 -3
  21. package/packages/sap.fe.common/src/sap/fe/common/resources.json +54 -32
  22. package/packages/sap.fe.common/test/sap/fe/common/designtime/api.json +1 -1
  23. package/packages/sap.fe.common/test/sap/fe/common/designtime/apiref/api.json +1 -1
  24. package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.jsmeta.json +1 -1
  25. package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.xmlmeta.json +1 -1
  26. package/packages/sap.fe.core/src/sap/fe/core/.library +1 -1
  27. package/packages/sap.fe.core/src/sap/fe/core/.theming +1 -1
  28. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper-dbg.js +1 -69
  29. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper.js +1 -1
  30. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper.ts +0 -70
  31. package/packages/sap.fe.core/src/sap/fe/core/AppComponent-dbg.js +388 -399
  32. package/packages/sap.fe.core/src/sap/fe/core/AppComponent.js +2 -3
  33. package/packages/sap.fe.core/src/sap/fe/core/AppComponent.ts +403 -0
  34. package/packages/sap.fe.core/src/sap/fe/core/AppStateHandler-dbg.js +127 -158
  35. package/packages/sap.fe.core/src/sap/fe/core/AppStateHandler.js +1 -1
  36. package/packages/sap.fe.core/src/sap/fe/core/BaseController-dbg.js +82 -58
  37. package/packages/sap.fe.core/src/sap/fe/core/BaseController.js +2 -3
  38. package/packages/sap.fe.core/src/sap/fe/core/BaseController.ts +68 -0
  39. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils-dbg.js +111 -20
  40. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils.js +1 -1
  41. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils.ts +131 -32
  42. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI-dbg.js +278 -274
  43. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI.js +2 -3
  44. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI.ts +250 -0
  45. package/packages/sap.fe.core/src/sap/fe/core/PageController-dbg.js +157 -29
  46. package/packages/sap.fe.core/src/sap/fe/core/PageController.js +1 -1
  47. package/packages/sap.fe.core/src/sap/fe/core/PageController.ts +60 -32
  48. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy-dbg.js +694 -756
  49. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy.js +1 -1
  50. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy.ts +11 -9
  51. package/packages/sap.fe.core/src/sap/fe/core/Synchronization-dbg.js +21 -31
  52. package/packages/sap.fe.core/src/sap/fe/core/Synchronization.js +1 -1
  53. package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
  54. package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent.ts +10 -3
  55. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel-dbg.js +20 -38
  56. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel.js +1 -1
  57. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel.ts +1 -1
  58. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper-dbg.js +1354 -1370
  59. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper.js +1 -1
  60. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper.ts +33 -22
  61. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync-dbg.js +392 -0
  62. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync.js +5 -0
  63. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  64. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon-dbg.js +136 -0
  65. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +5 -0
  66. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  67. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage-dbg.js +262 -0
  68. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage.js +5 -0
  69. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  70. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  71. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  72. package/packages/sap.fe.core/src/sap/fe/core/actions/draft-dbg.js +30 -68
  73. package/packages/sap.fe.core/src/sap/fe/core/actions/draft.js +1 -1
  74. package/packages/sap.fe.core/src/sap/fe/core/actions/draft.ts +44 -71
  75. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling-dbg.js +55 -36
  76. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling.js +1 -1
  77. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling.ts +66 -46
  78. package/packages/sap.fe.core/src/sap/fe/core/actions/operations-dbg.js +34 -15
  79. package/packages/sap.fe.core/src/sap/fe/core/actions/operations.js +1 -1
  80. package/packages/sap.fe.core/src/sap/fe/core/actions/operations.ts +48 -18
  81. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky-dbg.js +17 -4
  82. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky.js +1 -1
  83. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky.ts +21 -4
  84. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata-dbg.js +69 -66
  85. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +2 -3
  86. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  87. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +1593 -1669
  88. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow.js +2 -3
  89. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  90. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation-dbg.js +79 -54
  91. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -3
  92. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  93. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +718 -779
  94. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow.js +2 -3
  95. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  96. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +796 -816
  97. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -3
  98. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  99. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +1004 -1005
  100. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -3
  101. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  102. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +487 -521
  103. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
  104. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
  105. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +141 -169
  106. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit.js +2 -3
  107. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  108. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +233 -244
  109. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -3
  110. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  111. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady-dbg.js +301 -336
  112. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
  113. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
  114. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator-dbg.js +188 -175
  115. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator.js +2 -3
  116. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  117. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +157 -149
  118. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder.js +2 -3
  119. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  120. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing-dbg.js +144 -125
  121. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing.js +2 -3
  122. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  123. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener-dbg.js +7 -6
  124. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener.js +2 -3
  125. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  126. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share-dbg.js +230 -268
  127. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share.js +2 -3
  128. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  129. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +592 -633
  130. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  131. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
  132. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState-dbg.js +788 -806
  133. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState.js +2 -3
  134. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  135. package/packages/sap.fe.core/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  136. package/packages/sap.fe.core/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  137. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution-dbg.js +67 -66
  138. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution.js +2 -3
  139. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  140. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +90 -75
  141. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper.js +2 -3
  142. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  143. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +130 -125
  144. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -3
  145. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  146. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +103 -112
  147. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +2 -3
  148. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  149. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper-dbg.js +122 -135
  150. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper.js +2 -3
  151. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  152. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar-dbg.js +162 -159
  153. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar.js +2 -3
  154. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar.ts +143 -0
  155. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper-dbg.js +45 -39
  156. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper.js +2 -3
  157. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  158. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate-dbg.js +37 -42
  159. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -2
  160. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  161. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +126 -116
  162. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -3
  163. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  164. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +241 -255
  165. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter.js +2 -3
  166. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  167. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +150 -141
  168. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +2 -3
  169. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  170. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +335 -322
  171. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -3
  172. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  173. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +74 -74
  174. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -3
  175. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  176. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext-dbg.js +348 -379
  177. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext.js +1 -1
  178. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  179. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings-dbg.js +12 -1
  180. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  181. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
  182. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper-dbg.js +354 -378
  183. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
  184. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  185. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter-dbg.js +6 -4
  186. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  187. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  188. package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter-dbg.js +1 -1
  189. package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  190. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField-dbg.js +26 -12
  191. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  192. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
  193. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form-dbg.js +2 -2
  194. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
  195. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
  196. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +1 -1
  197. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
  198. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table-dbg.js +130 -23
  199. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  200. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
  201. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +118 -53
  202. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  203. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
  204. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +161 -207
  205. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  206. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
  207. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +115 -133
  208. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  209. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +20 -6
  210. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
  211. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  212. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +12 -1
  213. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  214. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key-dbg.js +42 -57
  215. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key.js +1 -1
  216. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  217. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +25 -4
  218. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  219. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
  220. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +10 -4
  221. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  222. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
  223. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +7 -5
  224. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  225. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  226. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent-dbg.designtime.js +92 -98
  227. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent.designtime.js +2 -3
  228. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  229. package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js +2 -3
  230. package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js.map +3 -3
  231. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +104 -0
  232. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter.js +5 -0
  233. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  234. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter-dbg.js +53 -2
  235. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.js +1 -1
  236. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  237. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component-dbg.js +50 -54
  238. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component.js +2 -3
  239. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component.ts +48 -0
  240. package/packages/sap.fe.core/src/sap/fe/core/fpm/manifest.json +2 -2
  241. package/packages/sap.fe.core/src/sap/fe/core/fpm/resources.json +7 -3
  242. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +323 -309
  243. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper.js +1 -1
  244. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  245. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression-dbg.js +7 -7
  246. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression.js +1 -1
  247. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  248. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport-dbg.js +186 -62
  249. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport.js +1 -1
  250. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
  251. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper-dbg.js +5 -4
  252. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  253. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  254. package/packages/sap.fe.core/src/sap/fe/core/helpers/FPMHelper-dbg.js +1 -1
  255. package/packages/sap.fe.core/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  256. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper-dbg.js +601 -684
  257. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper.js +2 -3
  258. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  259. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper-dbg.js +25 -1
  260. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  261. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  262. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +5 -1
  263. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  264. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
  265. package/packages/sap.fe.core/src/sap/fe/core/library-dbg.js +426 -451
  266. package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js +36 -32
  267. package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js.map +3 -3
  268. package/packages/sap.fe.core/src/sap/fe/core/library-preload.js +644 -738
  269. package/packages/sap.fe.core/src/sap/fe/core/library-preload.js.map +4 -4
  270. package/packages/sap.fe.core/src/sap/fe/core/library-preload.support.js +24 -35
  271. package/packages/sap.fe.core/src/sap/fe/core/library-preload.support.js.map +2 -2
  272. package/packages/sap.fe.core/src/sap/fe/core/library.js +2 -3
  273. package/packages/sap.fe.core/src/sap/fe/core/library.support.js +22 -33
  274. package/packages/sap.fe.core/src/sap/fe/core/library.support.ts +23 -0
  275. package/packages/sap.fe.core/src/sap/fe/core/library.ts +420 -0
  276. package/packages/sap.fe.core/src/sap/fe/core/manifest.json +10 -10
  277. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +5 -3
  278. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  279. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
  280. package/packages/sap.fe.core/src/sap/fe/core/messagebundle.properties +22 -5
  281. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ar.properties +27 -7
  282. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_bg.properties +27 -7
  283. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ca.properties +27 -7
  284. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cs.properties +27 -7
  285. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cy.properties +27 -7
  286. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_da.properties +27 -7
  287. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_de.properties +27 -7
  288. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_el.properties +27 -7
  289. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en.properties +27 -7
  290. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
  291. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
  292. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
  293. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
  294. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es.properties +27 -7
  295. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
  296. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_et.properties +27 -7
  297. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fi.properties +28 -8
  298. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr.properties +28 -8
  299. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
  300. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hi.properties +27 -7
  301. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hr.properties +27 -7
  302. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hu.properties +27 -7
  303. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_id.properties +27 -7
  304. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_it.properties +27 -7
  305. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_iw.properties +27 -7
  306. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ja.properties +26 -6
  307. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_kk.properties +27 -7
  308. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ko.properties +27 -7
  309. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lt.properties +27 -7
  310. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lv.properties +28 -8
  311. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ms.properties +27 -7
  312. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_nl.properties +27 -7
  313. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_no.properties +27 -7
  314. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pl.properties +27 -7
  315. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt.properties +28 -8
  316. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
  317. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ro.properties +27 -7
  318. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ru.properties +27 -7
  319. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sh.properties +27 -7
  320. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sk.properties +27 -7
  321. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sl.properties +27 -7
  322. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sv.properties +27 -7
  323. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_th.properties +26 -6
  324. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_tr.properties +30 -10
  325. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_uk.properties +27 -7
  326. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_vi.properties +27 -7
  327. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
  328. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
  329. package/packages/sap.fe.core/src/sap/fe/core/resources.json +745 -384
  330. package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +45 -71
  331. package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  332. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +154 -192
  333. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
  334. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
  335. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +66 -92
  336. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  337. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  338. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +284 -339
  339. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  340. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
  341. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +67 -102
  342. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  343. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
  344. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +754 -814
  345. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  346. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
  347. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory-dbg.js +649 -736
  348. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  349. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
  350. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +567 -592
  351. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  352. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
  353. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +354 -386
  354. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  355. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
  356. package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage-dbg.controller.js +1 -1
  357. package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  358. package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper-dbg.js +1 -1
  359. package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper.ts +1 -1
  360. package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics-dbg.js +36 -48
  361. package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics.js +1 -1
  362. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +93 -85
  363. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
  364. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
  365. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper-dbg.js +25 -32
  366. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper.js +1 -1
  367. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  368. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper-dbg.js +2 -2
  369. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  370. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  371. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
  372. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters.js +1 -1
  373. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters.ts +37 -24
  374. package/packages/sap.fe.core/test/sap/fe/core/designtime/api.json +1664 -1
  375. package/packages/sap.fe.core/test/sap/fe/core/designtime/apiref/api.json +1 -1
  376. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.jsmeta.json +1 -1
  377. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.jstemplates.json +1 -1
  378. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.xmlmeta.json +1 -1
  379. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/model/MacroNavigationModel.js +59 -0
  380. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldDisplay/localService/RootEntity.json +1 -1
  381. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/Component.js +33 -0
  382. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/FieldMessages.controller.js +34 -0
  383. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/FieldMessages.view.xml +18 -0
  384. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/localService/Entities.json +6 -0
  385. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/localService/service.cds +6 -0
  386. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/manifest.json +68 -0
  387. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/fieldMessages.html +37 -0
  388. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarSVandAnnotationDefaults/FilterBarSVandAnnotationDefaults.controller.js +1 -0
  389. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Page.controller.js +7 -2
  390. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Page.view.xml +9 -3
  391. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/RootEntity.js +23 -0
  392. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/RootEntity.ts +11 -0
  393. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/service.cds +11 -23
  394. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/Component.js +40 -0
  395. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/TableMessages.controller.js +35 -0
  396. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/TableMessages.view.xml +21 -0
  397. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/localService/RootEntity.json +82 -0
  398. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/localService/service.cds +82 -0
  399. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/manifest.json +78 -0
  400. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/tableMessages.html +37 -0
  401. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/basicExtensibility/localService/ChildEntity.json +5 -4
  402. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/manifest.json +3 -0
  403. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/view/App.view.xml +1 -1
  404. package/packages/sap.fe.core/test/sap/fe/core/jest/AnnotationHelper.spec.js +1 -169
  405. package/packages/sap.fe.core/test/sap/fe/core/jest/AnnotationHelper.spec.ts +0 -212
  406. package/packages/sap.fe.core/test/sap/fe/core/jest/CommonUtils.spec.js +2305 -119
  407. package/packages/sap.fe.core/test/sap/fe/core/jest/CommonUtils.spec.ts +2206 -67
  408. package/packages/sap.fe.core/test/sap/fe/core/jest/FilterUtils.spec.js +40 -0
  409. package/packages/sap.fe.core/test/sap/fe/core/jest/FilterUtils.spec.ts +34 -0
  410. package/packages/sap.fe.core/test/sap/fe/core/jest/FlexibleColumnLayout.spec.js +114 -0
  411. package/packages/sap.fe.core/test/sap/fe/core/jest/FlexibleColumnLayout.spec.ts +114 -0
  412. package/packages/sap.fe.core/test/sap/fe/core/jest/Paginators.spec.js +113 -0
  413. package/packages/sap.fe.core/test/sap/fe/core/jest/Paginators.spec.ts +78 -0
  414. package/packages/sap.fe.core/test/sap/fe/core/jest/RouterProxy.spec.js +599 -1
  415. package/packages/sap.fe.core/test/sap/fe/core/jest/RouterProxy.spec.ts +614 -0
  416. package/packages/sap.fe.core/test/sap/fe/core/jest/TemplateConverter.spec.js +23 -5
  417. package/packages/sap.fe.core/test/sap/fe/core/jest/TemplateConverter.spec.ts +26 -14
  418. package/packages/sap.fe.core/test/sap/fe/core/jest/TransactionHelper.spec.js +87 -1
  419. package/packages/sap.fe.core/test/sap/fe/core/jest/TransactionHelper.spec.ts +82 -1
  420. package/packages/sap.fe.core/test/sap/fe/core/jest/VisualFilterUtils.spec.js +124 -0
  421. package/packages/sap.fe.core/test/sap/fe/core/jest/VisualFilterUtils.spec.ts +141 -0
  422. package/packages/sap.fe.core/test/sap/fe/core/jest/__snapshots__/TemplateConverter.spec.ts.snap +34768 -67
  423. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/ActivitySync.spec.js +170 -0
  424. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/ActivitySync.spec.ts +155 -0
  425. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/CollaborationCommon.spec.js +101 -0
  426. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/CollaborationCommon.spec.ts +94 -0
  427. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/Manage.spec.js +82 -0
  428. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/Manage.spec.ts +77 -0
  429. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/draft.spec.js +2 -2
  430. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/draft.spec.ts +1 -1
  431. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/messageHandling.spec.js +7 -2
  432. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/messageHandling.spec.ts +7 -0
  433. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/operations.spec.js +104 -2
  434. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/operations.spec.ts +96 -1
  435. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/sticky.spec.js +83 -0
  436. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/sticky.spec.ts +79 -0
  437. package/packages/sap.fe.core/test/sap/fe/core/jest/appcomponent.spec.js +72 -0
  438. package/packages/sap.fe.core/test/sap/fe/core/jest/appcomponent.spec.ts +64 -0
  439. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/EditFlow.spec.js +619 -3
  440. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/EditFlow.spec.ts +668 -5
  441. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalEditFlow.spec.js +297 -1
  442. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalEditFlow.spec.ts +276 -6
  443. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalIntentBasedNavigation.spec.js +149 -0
  444. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalIntentBasedNavigation.spec.ts +142 -0
  445. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalRouting.spec.js +776 -182
  446. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalRouting.spec.ts +181 -3
  447. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/KPIManagement.spec.js +19 -43
  448. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MassEdit.spec.js +2 -18
  449. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MassEdit.spec.ts +8 -6
  450. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MessageHandler.spec.js +5 -27
  451. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MessageHandler.spec.ts +1 -1
  452. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Routing.spec.js +1 -1
  453. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Routing.spec.ts +1 -1
  454. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Share.spec.js +86 -0
  455. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Share.spec.ts +80 -0
  456. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/SideEffects.spec.js +1 -1
  457. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/SideEffects.spec.ts +1 -1
  458. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/ViewState.spec.js +2 -18
  459. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/ViewState.spec.ts +1 -1
  460. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/DataLossOrDraftDiscardHandler.spec.js +45 -0
  461. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/DataLossOrDraftDiscardHandler.spec.ts +29 -0
  462. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/FilterBar.spec.js +51 -1
  463. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/FilterBar.spec.ts +47 -1
  464. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/__snapshots__/FilterBar.spec.ts.snap +3 -0
  465. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ConverterContext.spec.js +2 -2
  466. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ConverterContext.spec.ts +1 -1
  467. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Filter.spec.js +25 -36
  468. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Filter.spec.ts +26 -36
  469. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ListReportConverter.spec.js +3 -3
  470. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ListReportConverter.spec.ts +2 -2
  471. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/MetaModelConverter.spec.js +1 -1
  472. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/MetaModelConverter.spec.ts +6 -5
  473. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.js +133 -9
  474. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.ts +171 -8
  475. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/TableStandardActions.spec.js +174 -210
  476. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/TableStandardActions.spec.ts +294 -230
  477. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/__snapshots__/Filter.spec.ts.snap +3 -1
  478. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Chart.spec.js +237 -0
  479. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Chart.spec.ts +246 -0
  480. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/DataVisualization.spec.js +9993 -0
  481. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/DataVisualization.spec.ts +11352 -0
  482. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Table.spec.js +460 -0
  483. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Table.spec.ts +543 -0
  484. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/TableAnalytics.spec.js +616 -0
  485. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/TableAnalytics.spec.ts +711 -0
  486. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/manifest.json +887 -0
  487. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/objectPage/HeaderAndFooterAction.spec.js +393 -0
  488. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/objectPage/HeaderAndFooterAction.spec.ts +434 -0
  489. package/packages/sap.fe.core/test/sap/fe/core/jest/data/DataConverter.js +31 -0
  490. package/packages/sap.fe.core/test/sap/fe/core/jest/data/DataConverter.ts +12 -0
  491. package/packages/sap.fe.core/test/sap/fe/core/jest/data/Filter.cds +27 -0
  492. package/packages/sap.fe.core/test/sap/fe/core/jest/data/MassEditHelper.cds +12 -0
  493. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/manifest.json +150 -0
  494. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata.xml +365 -0
  495. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_groupable_options.xml +96 -0
  496. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_textArrangement.xml +102 -0
  497. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_withPV.xml +359 -0
  498. package/packages/sap.fe.core/test/sap/fe/core/jest/data/Table.cds +89 -27
  499. package/packages/sap.fe.core/test/sap/fe/core/jest/data/TemplatingTestData.js +421 -0
  500. package/packages/sap.fe.core/test/sap/fe/core/jest/data/TemplatingTestData.ts +413 -0
  501. package/packages/sap.fe.core/test/sap/fe/core/jest/data/aggregatedSD/metadata.xml +3767 -0
  502. package/packages/sap.fe.core/test/sap/fe/core/jest/data/dsr/manifest.json +185 -0
  503. package/packages/sap.fe.core/test/sap/fe/core/jest/data/dsr/metadata.xml +1534 -0
  504. package/packages/sap.fe.core/test/sap/fe/core/jest/data/manifest.json +887 -0
  505. package/packages/sap.fe.core/test/sap/fe/core/jest/data/salesOrderMetadata_qunit.xml +4995 -0
  506. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/CollaborationFormatters.spec.js +48 -0
  507. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/CollaborationFormatters.spec.ts +48 -0
  508. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/TableFormatters.spec.js +131 -51
  509. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/TableFormatters.spec.ts +81 -31
  510. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/AppStartupHelper.spec.js +13 -7
  511. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/AppStartupHelper.spec.ts +12 -6
  512. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/MassEditHelper.spec.js +17 -3
  513. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/MassEditHelper.spec.ts +24 -7
  514. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/ModelHelper.spec.js +61 -1
  515. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/ModelHelper.spec.ts +59 -0
  516. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/PasteHelper.spec.js +3 -3
  517. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/PasteHelper.spec.ts +1 -2
  518. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/SemanticDateOperators.spec.js +4 -4
  519. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/SemanticDateOperators.spec.ts +6 -3
  520. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/StableIdHelper.spec.js +1 -1
  521. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/StableIdHelper.spec.ts +1 -1
  522. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/__snapshots__/AppStartupHelper.spec.ts.snap +19 -0
  523. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/__snapshots__/MassEditHelper.spec.ts.snap +0 -73
  524. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/ChangePageConfiguration.spec.js +11 -1
  525. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/ChangePageConfiguration.spec.ts +15 -0
  526. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/__snapshots__/ChangePageConfiguration.spec.ts.snap +30 -0
  527. package/packages/sap.fe.core/test/sap/fe/core/jest/services/SideEffectsService.spec.js +49 -5
  528. package/packages/sap.fe.core/test/sap/fe/core/jest/services/SideEffectsService.spec.ts +60 -5
  529. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/DataModelPathHelper.spec.js +384 -0
  530. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/DataModelPathHelper.spec.ts +427 -0
  531. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/PropertyHelper.spec.js +132 -2
  532. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/PropertyHelper.spec.ts +156 -2
  533. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/UIFormatters.spec.js +273 -0
  534. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/UIFormatters.spec.ts +402 -0
  535. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/ValueHelpTemplating.spec.js +45 -0
  536. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/ValueHelpTemplating.spec.ts +40 -0
  537. package/packages/sap.fe.core/test/sap/fe/core/qunit/TemplatingExpressions.qunit.js +2 -1
  538. package/packages/sap.fe.core/test/sap/fe/core/qunit/apps/generalTests.json +0 -102
  539. package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.100.json +326 -0
  540. package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.99.json +0 -22
  541. package/packages/sap.fe.macros/src/sap/fe/macros/.library +1 -1
  542. package/packages/sap.fe.macros/src/sap/fe/macros/.theming +1 -1
  543. package/packages/sap.fe.macros/src/sap/fe/macros/Chart.metadata-dbg.js +2 -2
  544. package/packages/sap.fe.macros/src/sap/fe/macros/Chart.metadata.js +1 -1
  545. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI-dbg.js +22 -43
  546. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI.js +1 -1
  547. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI.ts +3 -3
  548. package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate-dbg.js +14 -24
  549. package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate.js +1 -1
  550. package/packages/sap.fe.macros/src/sap/fe/macros/CommonHelper-dbg.js +1 -1
  551. package/packages/sap.fe.macros/src/sap/fe/macros/DraftIndicator.fragment.xml +3 -2
  552. package/packages/sap.fe.macros/src/sap/fe/macros/Field.fragment.xml +16 -18
  553. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI-dbg.js +162 -100
  554. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.js +1 -1
  555. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.ts +93 -16
  556. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.fragment.xml +2 -1
  557. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.metadata-dbg.js +16 -8
  558. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.metadata.js +1 -1
  559. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI-dbg.js +58 -83
  560. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.js +1 -1
  561. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.ts +16 -2
  562. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate-dbg.js +112 -192
  563. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate.js +1 -1
  564. package/packages/sap.fe.macros/src/sap/fe/macros/Form.metadata-dbg.js +1 -1
  565. package/packages/sap.fe.macros/src/sap/fe/macros/Form.metadata.js +1 -1
  566. package/packages/sap.fe.macros/src/sap/fe/macros/FormAPI-dbg.js +4 -20
  567. package/packages/sap.fe.macros/src/sap/fe/macros/FormAPI.js +1 -1
  568. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainer.fragment.xml +1 -1
  569. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainerAPI-dbg.js +10 -31
  570. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainerAPI.js +1 -1
  571. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI-dbg.js +147 -162
  572. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI.js +1 -1
  573. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI.ts +32 -8
  574. package/packages/sap.fe.macros/src/sap/fe/macros/MacroMetadata-dbg.js +5 -0
  575. package/packages/sap.fe.macros/src/sap/fe/macros/MacroMetadata.js +1 -1
  576. package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil-dbg.js +56 -74
  577. package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil.js +1 -1
  578. package/packages/sap.fe.macros/src/sap/fe/macros/Table.fragment.xml +1 -1
  579. package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata-dbg.js +90 -39
  580. package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata.js +1 -1
  581. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI-dbg.js +284 -251
  582. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.js +1 -1
  583. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.ts +126 -14
  584. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper-dbg.js +38 -101
  585. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper.js +1 -1
  586. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime-dbg.js +68 -6
  587. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime.js +1 -1
  588. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating-dbg.js +72 -12
  589. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.js +1 -1
  590. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.ts +67 -10
  591. package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate-dbg.js +5 -12
  592. package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate.js +1 -1
  593. package/packages/sap.fe.macros/src/sap/fe/macros/filter/DraftEditState.fragment.xml +1 -1
  594. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldHelper-dbg.js +1 -3
  595. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldHelper.js +1 -1
  596. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterUtils-dbg.js +62 -39
  597. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterUtils.js +1 -1
  598. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue-dbg.js +104 -50
  599. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue.js +2 -3
  600. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue.ts +68 -0
  601. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range-dbg.js +83 -35
  602. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range.js +2 -3
  603. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range.ts +66 -0
  604. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value-dbg.js +327 -216
  605. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value.js +2 -3
  606. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value.ts +303 -0
  607. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollaborationAvatar.fragment.xml +15 -0
  608. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata-dbg.js +14 -2
  609. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata.js +1 -1
  610. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata.ts +18 -2
  611. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.fragment.xml +12 -29
  612. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.metadata-dbg.js +9 -0
  613. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.metadata.js +1 -1
  614. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.fragment.xml +1 -0
  615. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata-dbg.js +529 -533
  616. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata.js +2 -3
  617. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata.ts +568 -0
  618. package/packages/sap.fe.macros/src/sap/fe/macros/internal/FilterField.fragment.xml +0 -1
  619. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator-dbg.js +3 -3
  620. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator.js +1 -1
  621. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator.ts +3 -2
  622. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldContent.fragment.xml +3 -1
  623. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldStructure.fragment.xml +13 -3
  624. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/DataPoint.fragment.xml +4 -1
  625. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ExpandableText.fragment.xml +1 -0
  626. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LabelSemanticKey.fragment.xml +1 -0
  627. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Link.fragment.xml +38 -4
  628. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LinkWithQuickViewForm.fragment.xml +2 -2
  629. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LinkWrapper.fragment.xml +3 -3
  630. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/MdcFieldWithValueHelp.fragment.xml +1 -2
  631. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ObjectIdentifier.fragment.xml +55 -11
  632. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/SemanticKeyWithDraftIndicator.fragment.xml +1 -1
  633. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Text.fragment.xml +3 -3
  634. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/DatePicker.fragment.xml +9 -2
  635. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/DateTimePicker.fragment.xml +9 -2
  636. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/Input.fragment.xml +12 -3
  637. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/InputWithUnit.fragment.xml +26 -5
  638. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/InputWithValueHelp.fragment.xml +10 -2
  639. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/RatingIndicator.fragment.xml +9 -2
  640. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/TimePicker.fragment.xml +9 -2
  641. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/fragments/ObjectIdentifierContent.fragment.xml +4 -0
  642. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating-dbg.js +31 -2
  643. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +1 -1
  644. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +20 -0
  645. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime-dbg.js +2 -2
  646. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime.js +1 -1
  647. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime.ts +7 -9
  648. package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper-dbg.js +90 -118
  649. package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +1 -1
  650. package/packages/sap.fe.macros/src/sap/fe/macros/library-dbg.js +1 -1
  651. package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js +13 -12
  652. package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js.map +2 -2
  653. package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js +185 -214
  654. package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js.map +4 -4
  655. package/packages/sap.fe.macros/src/sap/fe/macros/library.js +1 -1
  656. package/packages/sap.fe.macros/src/sap/fe/macros/manifest.json +9 -9
  657. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle.properties +4 -1
  658. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ar.properties +3 -1
  659. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_bg.properties +3 -1
  660. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ca.properties +3 -1
  661. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cs.properties +3 -1
  662. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cy.properties +3 -1
  663. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_da.properties +3 -1
  664. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_de.properties +4 -2
  665. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_el.properties +3 -1
  666. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en.properties +3 -1
  667. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_GB.properties +3 -1
  668. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_sappsd.properties +3 -1
  669. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +3 -1
  670. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_saptrc.properties +3 -1
  671. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es.properties +3 -1
  672. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es_MX.properties +3 -1
  673. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_et.properties +3 -1
  674. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fi.properties +3 -1
  675. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr.properties +3 -1
  676. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr_CA.properties +3 -1
  677. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hi.properties +3 -1
  678. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hr.properties +3 -1
  679. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  680. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_id.properties +4 -2
  681. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_it.properties +3 -1
  682. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_iw.properties +3 -1
  683. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ja.properties +3 -1
  684. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_kk.properties +3 -1
  685. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ko.properties +3 -1
  686. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lt.properties +3 -1
  687. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lv.properties +3 -1
  688. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ms.properties +3 -1
  689. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_nl.properties +3 -1
  690. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_no.properties +3 -1
  691. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pl.properties +3 -1
  692. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt.properties +3 -1
  693. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt_PT.properties +3 -1
  694. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ro.properties +3 -1
  695. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ru.properties +3 -1
  696. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sh.properties +3 -1
  697. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sk.properties +3 -1
  698. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sl.properties +3 -1
  699. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sv.properties +3 -1
  700. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_th.properties +3 -1
  701. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_tr.properties +3 -1
  702. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_uk.properties +3 -1
  703. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_vi.properties +3 -1
  704. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_CN.properties +3 -1
  705. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_TW.properties +3 -1
  706. package/packages/sap.fe.macros/src/sap/fe/macros/resources.json +273 -199
  707. package/packages/sap.fe.macros/src/sap/fe/macros/table/Actions.fragment.xml +1 -1
  708. package/packages/sap.fe.macros/src/sap/fe/macros/table/Column.fragment.xml +1 -1
  709. package/packages/sap.fe.macros/src/sap/fe/macros/table/ColumnContent.fragment.xml +2 -0
  710. package/packages/sap.fe.macros/src/sap/fe/macros/table/CreationRow.fragment.xml +13 -20
  711. package/packages/sap.fe.macros/src/sap/fe/macros/table/CustomColumn.fragment.xml +1 -0
  712. package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper-dbg.js +5 -110
  713. package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper.js +1 -1
  714. package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate-dbg.js +98 -78
  715. package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate.js +1 -1
  716. package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.metadata-dbg.js +1 -1
  717. package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.metadata.js +1 -1
  718. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/api.json +211 -10
  719. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/apiref/api.json +1 -1
  720. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.jsmeta.json +1 -1
  721. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.xmlmeta.json +1 -1
  722. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartDelegate.spec.js +1 -45
  723. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartDelegate.spec.ts +0 -60
  724. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldAPI.spec.js +78 -0
  725. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldAPI.spec.ts +71 -0
  726. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.js +35 -1
  727. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.ts +44 -0
  728. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarDelegate.spec.js +0 -76
  729. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarMacro.spec.js +27 -1
  730. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarMacro.spec.ts +28 -0
  731. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterFieldHelper.spec.js +10 -12
  732. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterFieldHelper.spec.ts +10 -10
  733. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterUtils.spec.js +129 -15
  734. package/packages/sap.fe.macros/test/sap/fe/macros/jest/MacroAPI.spec.js +13 -39
  735. package/packages/sap.fe.macros/test/sap/fe/macros/jest/MacroAPI.spec.ts +2 -2
  736. package/packages/sap.fe.macros/test/sap/fe/macros/jest/RetrieveTextFromValueList.spec.js +119 -0
  737. package/packages/sap.fe.macros/test/sap/fe/macros/jest/RetrieveTextFromValueList.spec.ts +113 -0
  738. package/packages/sap.fe.macros/test/sap/fe/macros/jest/Table.spec.js +166 -2
  739. package/packages/sap.fe.macros/test/sap/fe/macros/jest/Table.spec.ts +190 -3
  740. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableAPI.spec.js +457 -389
  741. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableAPI.spec.ts +504 -425
  742. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableMacro.spec.js +104 -2
  743. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableMacro.spec.ts +158 -1
  744. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/ChartDelegate.spec.ts.snap +0 -6
  745. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/DatapointMacro.spec.ts.snap +5 -5
  746. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroDataFieldTypes.spec.ts.snap +114 -25
  747. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroWithSemanticKey.spec.ts.snap +40 -40
  748. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroWithValueHelp.spec.ts.snap +4 -8
  749. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FilterBarMacro.spec.ts.snap +19 -19
  750. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FilterField.spec.ts.snap +3 -5
  751. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/QuickViewForm.spec.ts.snap +12 -0
  752. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/SimpleFieldMacro.spec.ts.snap +89 -90
  753. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/Table.spec.ts.snap +1314 -58
  754. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/TableMacro.spec.ts.snap +459 -0
  755. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/FieldMacroDataFieldTypes.cds +18 -2
  756. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/QuickViewForm.cds +6 -1
  757. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/Table.cds +107 -106
  758. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/TableAPI.cds +197 -0
  759. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldRuntime.spec.js +33 -4
  760. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldRuntime.spec.ts +30 -4
  761. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.spec.js +72 -29
  762. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.spec.ts +86 -18
  763. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/__snapshots__/columnWidth.spec.ts.snap +51 -27
  764. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/columnWidth.spec.js +55 -9
  765. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/columnWidth.spec.ts +46 -6
  766. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/data/columnWidth.cds +28 -1
  767. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/TableDelegate.spec.js +170 -43
  768. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/TableDelegate.spec.ts +131 -15
  769. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/__snapshots__/TableDelegate.spec.ts.snap +90 -53
  770. package/packages/sap.fe.macros/test/sap/fe/macros/jest/tsx/TestTSX.spec.tsx +2 -1
  771. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/index.json +0 -5
  772. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FieldHelper.qunit.js +1 -99
  773. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormElementTemplating.qunit.js +1 -1
  774. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/MacroMetadata.qunit.js +4 -4
  775. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/TableHelper.qunit.js +4 -4
  776. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ValueHelpTemplating.qunit.js +15 -0
  777. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ValueListHelper.qunit.js +265 -106
  778. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/metadata/simpleMetadata.js +38 -0
  779. package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.100.json +372 -0
  780. package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.99.json +0 -11
  781. package/packages/sap.fe.navigation/src/sap/fe/navigation/.library +1 -1
  782. package/packages/sap.fe.navigation/src/sap/fe/navigation/.theming +1 -1
  783. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-dbg.js +1 -1
  784. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js +2 -2
  785. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js.map +2 -2
  786. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js +2 -2
  787. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js.map +2 -2
  788. package/packages/sap.fe.navigation/src/sap/fe/navigation/library.js +1 -1
  789. package/packages/sap.fe.navigation/src/sap/fe/navigation/manifest.json +3 -3
  790. package/packages/sap.fe.navigation/src/sap/fe/navigation/resources.json +8 -8
  791. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/api.json +1 -1
  792. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/apiref/api.json +1 -1
  793. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/codeassistance/Library.xmlmeta.json +1 -1
  794. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.library +1 -1
  795. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.theming +1 -1
  796. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-dbg.js +1 -1
  797. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js +2 -2
  798. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js.map +2 -2
  799. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js +2 -2
  800. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js.map +2 -2
  801. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library.js +1 -1
  802. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/manifest.json +3 -3
  803. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/resources.json +27 -27
  804. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/css_variables.source.less +316 -15
  805. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/resources.json +1 -1
  806. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.less +315 -14
  807. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.source.less +315 -14
  808. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/resources.json +2 -2
  809. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.less +316 -15
  810. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.source.less +316 -15
  811. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/resources.json +2 -2
  812. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.less +316 -15
  813. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.source.less +316 -15
  814. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/resources.json +2 -2
  815. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.less +315 -14
  816. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.source.less +315 -14
  817. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/resources.json +2 -2
  818. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.less +317 -16
  819. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.source.less +317 -16
  820. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/resources.json +2 -2
  821. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.less +317 -16
  822. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.source.less +317 -16
  823. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/resources.json +2 -2
  824. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.less +316 -15
  825. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.source.less +316 -15
  826. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/resources.json +2 -2
  827. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.less +316 -15
  828. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.source.less +316 -15
  829. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/resources.json +2 -2
  830. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/css_variables.less +400 -99
  831. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/css_variables.source.less +400 -99
  832. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/resources.json +2 -2
  833. package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/api.json +1 -1
  834. package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/apiref/api.json +1 -1
  835. package/packages/sap.fe.templates/src/sap/fe/templates/.library +1 -1
  836. package/packages/sap.fe.templates/src/sap/fe/templates/.theming +1 -1
  837. package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/manifest.json +2 -2
  838. package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/resources.json +1 -1
  839. package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent-dbg.js +1 -1
  840. package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent.js +1 -1
  841. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/Component-dbg.js +7 -1
  842. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/Component.js +1 -1
  843. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReport.view.xml +22 -21
  844. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController-dbg.controller.js +13 -18
  845. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController.controller.js +1 -1
  846. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/manifest.json +2 -2
  847. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/resources.json +7 -7
  848. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.xml +3 -3
  849. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper-dbg.js +50 -9
  850. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +1 -1
  851. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component-dbg.js +1 -12
  852. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component.js +1 -1
  853. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +5 -1
  854. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController-dbg.controller.js +50 -17
  855. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +1 -1
  856. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox-dbg.js +7 -1
  857. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +1 -1
  858. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/FlexBox-dbg.designtime.js +3 -0
  859. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
  860. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/manifest.json +2 -2
  861. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/resources.json +19 -15
  862. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/CollaborationDraft.fragment.xml +36 -0
  863. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +1 -1
  864. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +1 -0
  865. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +1 -0
  866. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl-dbg.controller.js +3 -1
  867. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +1 -1
  868. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer-dbg.controller.js +3 -1
  869. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +1 -1
  870. package/packages/sap.fe.templates/src/sap/fe/templates/designtime/library-preload.designtime.js +1 -1
  871. package/packages/sap.fe.templates/src/sap/fe/templates/designtime/library-preload.designtime.js.map +2 -2
  872. package/packages/sap.fe.templates/src/sap/fe/templates/library-dbg.js +1 -1
  873. package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js +4 -3
  874. package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js.map +2 -2
  875. package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js +22 -21
  876. package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js.map +4 -4
  877. package/packages/sap.fe.templates/src/sap/fe/templates/library.js +1 -1
  878. package/packages/sap.fe.templates/src/sap/fe/templates/manifest.json +14 -14
  879. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ar.properties +0 -15
  880. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_bg.properties +0 -15
  881. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ca.properties +0 -15
  882. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_cs.properties +0 -15
  883. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_cy.properties +0 -15
  884. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_da.properties +0 -15
  885. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_de.properties +0 -15
  886. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_el.properties +0 -15
  887. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en.properties +0 -15
  888. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_GB.properties +0 -15
  889. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +0 -15
  890. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +0 -15
  891. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +0 -15
  892. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_es.properties +0 -15
  893. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_es_MX.properties +0 -15
  894. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_et.properties +0 -15
  895. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fi.properties +0 -15
  896. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fr.properties +0 -15
  897. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fr_CA.properties +0 -15
  898. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hi.properties +0 -15
  899. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hr.properties +0 -15
  900. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hu.properties +0 -15
  901. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_id.properties +0 -15
  902. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_it.properties +0 -15
  903. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_iw.properties +0 -15
  904. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ja.properties +0 -15
  905. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_kk.properties +0 -15
  906. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ko.properties +0 -15
  907. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_lt.properties +0 -15
  908. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_lv.properties +0 -15
  909. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ms.properties +0 -15
  910. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_nl.properties +0 -15
  911. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_no.properties +0 -15
  912. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pl.properties +0 -15
  913. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pt.properties +0 -15
  914. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pt_PT.properties +0 -15
  915. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ro.properties +0 -15
  916. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ru.properties +0 -15
  917. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sh.properties +0 -15
  918. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sk.properties +0 -15
  919. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sl.properties +0 -15
  920. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sv.properties +0 -15
  921. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_th.properties +0 -15
  922. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_tr.properties +0 -15
  923. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_uk.properties +0 -15
  924. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_vi.properties +0 -15
  925. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_zh_CN.properties +0 -15
  926. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_zh_TW.properties +0 -15
  927. package/packages/sap.fe.templates/src/sap/fe/templates/resources.json +115 -89
  928. package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/manifest.json +1 -1
  929. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/api.json +353 -1
  930. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/apiref/api.json +1 -1
  931. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.jsmeta.json +1 -1
  932. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.xmlmeta.json +1 -1
  933. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/IntentBasedNavigation.spec.js +1 -1
  934. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/IntentBasedNavigation.spec.ts +3 -3
  935. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/Share.spec.js +1 -1
  936. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/Share.spec.ts +4 -4
  937. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/ViewState.spec.js +1 -1
  938. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/ViewState.spec.ts +2 -2
  939. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/ObjectPageHeaderForm.spec.js +2 -1
  940. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/ObjectPageHeaderForm.spec.ts +2 -1
  941. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/__snapshots__/HeaderFacet.spec.ts.snap +7 -7
  942. package/packages/sap.fe.templates/test/sap/fe/templates/jest/RootContainer/RootContainerBaseController.spec.js +30 -61
  943. package/packages/sap.fe.templates/test/sap/fe/templates/jest/RootContainer/RootContainerBaseController.spec.ts +1 -1
  944. package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.100.json +192 -0
  945. package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.99.json +0 -11
  946. package/packages/sap.fe.test/src/sap/fe/test/.library +1 -1
  947. package/packages/sap.fe.test/src/sap/fe/test/.theming +1 -1
  948. package/packages/sap.fe.test/src/sap/fe/test/FeMocks-dbg.js +1 -1
  949. package/packages/sap.fe.test/src/sap/fe/test/FeMocks.ts +8 -8
  950. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper-dbg.js +6 -4
  951. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.js +1 -1
  952. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.ts +10 -6
  953. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper-dbg.js +126 -203
  954. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper.js +1 -1
  955. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper.ts +17 -2
  956. package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAPI-dbg.js +9 -1
  957. package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAPI.js +1 -1
  958. package/packages/sap.fe.test/src/sap/fe/test/library-dbg.js +1 -1
  959. package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js +2 -2
  960. package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js.map +2 -2
  961. package/packages/sap.fe.test/src/sap/fe/test/library-preload.js +9 -18
  962. package/packages/sap.fe.test/src/sap/fe/test/library-preload.js.map +3 -3
  963. package/packages/sap.fe.test/src/sap/fe/test/library.js +1 -1
  964. package/packages/sap.fe.test/src/sap/fe/test/manifest.json +3 -3
  965. package/packages/sap.fe.test/src/sap/fe/test/resources.json +18 -18
  966. package/packages/sap.fe.test/test/sap/fe/test/designtime/api.json +1 -1
  967. package/packages/sap.fe.test/test/sap/fe/test/designtime/apiref/api.json +1 -1
  968. package/packages/sap.fe.test/test/sap/fe/test/designtime/codeassistance/Library.xmlmeta.json +1 -1
  969. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormTemplatingTs.qunit.js +0 -271
@@ -50,5 +50,603 @@ sap.ui.define(["sap/fe/core/RouterProxy"], function (RouterProxy) {
50
50
  }
51
51
  });
52
52
  });
53
+ describe("Tests for State creation", function () {
54
+ test("Create state from regular object keys", function () {
55
+ var oRouterProxy = new RouterProxy();
56
+
57
+ var oState = oRouterProxy._extractStateFromHash("obj1(key1)/obj2(key2)");
58
+
59
+ expect(oState.keys.length).toEqual(2); // , "2 keys are extracted";
60
+
61
+ expect(oState.keys[0]).toEqual("obj1"); // , "first keyID is obj1";
62
+
63
+ expect(oState.keys[1]).toEqual("obj2"); // , "second keyID is obj2";
64
+
65
+ expect(oState.sLayout === null).toEqual(true); // , "No layout parameter");
66
+
67
+ expect(oState.screenMode).toEqual(0); // , "screenMode = 0";
68
+ });
69
+ test("Create state from draft object keys", function () {
70
+ var oRouterProxy = new RouterProxy();
71
+
72
+ var oState = oRouterProxy._extractStateFromHash("obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=false)");
73
+
74
+ expect(oState.keys.length).toEqual(2); // , "2 keys are extracted";
75
+
76
+ expect(oState.keys[0]).toEqual("obj1"); // , "first keyID is obj1";
77
+
78
+ expect(oState.keys[1]).toEqual("obj2"); // , "second keyID is obj2";
79
+
80
+ expect(oState.sLayout === null).toEqual(true); // , "No layout parameter");
81
+
82
+ expect(oState.screenMode).toEqual(0); // , "screenMode = 0";
83
+ });
84
+ test("Create state with layout info", function () {
85
+ var oRouterProxy = new RouterProxy();
86
+
87
+ var oState = oRouterProxy._extractStateFromHash("obj1(ID=123,IsActiveEntity=true)?layout=MidColumnFullScreen");
88
+
89
+ expect(oState.keys.length).toEqual(1); // , "1 key is extracted";
90
+
91
+ expect(oState.keys[0]).toEqual("obj1"); // , "first keyID is obj1";
92
+
93
+ expect(oState.sLayout).toEqual("MidColumnFullScreen"); // , "layout is MidColumnFullScreen";
94
+
95
+ expect(oState.screenMode).toEqual(1); // , "screenMode is 1";
96
+ });
97
+ });
98
+ describe("Tests for State comparison", function () {
99
+ test("Different states", function () {
100
+ var oRouterProxy = new RouterProxy();
101
+
102
+ var oState1 = oRouterProxy._extractStateFromHash("obj1(ID=123,IsActiveEntity=false)/obj2(ID=456,IsActiveEntity=false)");
103
+
104
+ var oState2 = oRouterProxy._extractStateFromHash("obj1(ID=123,IsActiveEntity=true)");
105
+
106
+ var oState3 = oRouterProxy._extractStateFromHash("obj1(ID=456,IsActiveEntity=false)/obj2(ID=456,IsActiveEntity=false)");
107
+
108
+ var oState4 = oRouterProxy._extractStateFromHash("obj2(ID=123,IsActiveEntity=false)");
109
+
110
+ var oState5 = oRouterProxy._extractStateFromHash("obj2(ID=123,IsActiveEntity=true)?layout=EndColumnFullScreen");
111
+
112
+ var compare = oRouterProxy._compareCacheStates(oState1, oState2);
113
+
114
+ expect(compare).toEqual(3); // , "A child is different from its ancestor";
115
+
116
+ compare = oRouterProxy._compareCacheStates(oState1, oState3);
117
+ expect(compare).toEqual(0); // , "Changing objectID keeps 2 states equal";
118
+
119
+ compare = oRouterProxy._compareCacheStates(oState2, oState4);
120
+ expect(compare).toEqual(3); // , "Changing object type makes 2 states different";
121
+
122
+ compare = oRouterProxy._compareCacheStates(oState5, oState4);
123
+ expect(compare).toEqual(3); // , "Different screenmode (not ancestors");
124
+ });
125
+ test("Ancestor states", function () {
126
+ var oRouterProxy = new RouterProxy();
127
+
128
+ var oState1 = oRouterProxy._extractStateFromHash("obj1(ID=123,IsActiveEntity=true)");
129
+
130
+ var oState2 = oRouterProxy._extractStateFromHash("obj1(ID=123,IsActiveEntity=false)/obj2(ID=456,IsActiveEntity=false)");
131
+
132
+ var oState3 = oRouterProxy._extractStateFromHash("obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)?layout=MidColumnFullScreen");
133
+
134
+ var oState4 = oRouterProxy._extractStateFromHash("obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)?layout=EndColumnFullScreen");
135
+
136
+ var compare = oRouterProxy._compareCacheStates(oState1, oState2);
137
+
138
+ expect(compare).toEqual(2); // , "Removing an object makes an ancestor";
139
+
140
+ compare = oRouterProxy._compareCacheStates(oState1, oState3);
141
+ expect(compare).toEqual(2); // , "Removing an object and layout makes an ancestor";
142
+
143
+ compare = oRouterProxy._compareCacheStates(oState2, oState3);
144
+ expect(compare).toEqual(2); // , "Mid column fullscreen is an ancestor of no fullscreen";
145
+
146
+ compare = oRouterProxy._compareCacheStates(oState3, oState4);
147
+ expect(compare).toEqual(2); // , "End column fullscreen is an ancestor of mid column fullscreen";
148
+ });
149
+ test("Compatible states", function () {
150
+ var oRouterProxy = new RouterProxy();
151
+
152
+ var oState1 = oRouterProxy._extractStateFromHash("obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=false)");
153
+
154
+ var oState2 = oRouterProxy._extractStateFromHash("obj1(ID=123,IsActiveEntity=false)/obj2(ID=456,IsActiveEntity=false)");
155
+
156
+ var oState3 = oRouterProxy._extractStateFromHash("obj1(ID=123,IsActiveEntity=false)/obj2(ID=456,IsActiveEntity=false)?layout=TwoColumnsMidExpanded");
157
+
158
+ var oState4 = oRouterProxy._extractStateFromHash("obj1(ID=123,IsActiveEntity=false)/obj2(ID=456,IsActiveEntity=false)?layout=TwoColumnsBeginExpanded");
159
+
160
+ var compare = oRouterProxy._compareCacheStates(oState1, oState2);
161
+
162
+ expect(compare).toEqual(0); // , "Differences in edition status keep states equal";
163
+
164
+ compare = oRouterProxy._compareCacheStates(oState2, oState3);
165
+ expect(compare).toEqual(1); // , "Layout info (no full screen keeps states compatible");
166
+
167
+ compare = oRouterProxy._compareCacheStates(oState3, oState4);
168
+ expect(compare).toEqual(1); // , "Different layout (no full screen keep states compatible");
169
+
170
+ compare = oRouterProxy._compareCacheStates(oState1, oState3);
171
+ expect(compare).toEqual(1); // , "Differences in edition status and layout info keep states compatiblee";
172
+ });
173
+ });
174
+ describe("Tests for history management", function () {
175
+ var that = {};
176
+ beforeEach(function () {
177
+ that.sPresentHash = "";
178
+ that.oRouterProxy = new RouterProxy();
179
+ that.oRouter = {
180
+ getHashChanger: function () {
181
+ return {
182
+ getHash: function () {
183
+ return that.sPresentHash;
184
+ }
185
+ };
186
+ }
187
+ };
188
+ });
189
+ afterEach(function () {
190
+ that.oRouterProxy.destroy();
191
+ });
192
+ test("Regular back and forth navigation without layout", function () {
193
+ that.sPresentHash = "";
194
+ that.oRouterProxy.initRaw(that.oRouter);
195
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(1); // , "Start with 1 entry (no object");
196
+
197
+ var states = [{
198
+ hash: "obj1(ID=123,IsActiveEntity=true)",
199
+ expectedLength: 2,
200
+ msg: "Add first object: new entry",
201
+ actionType: "append"
202
+ }, {
203
+ hash: "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)",
204
+ expectedLength: 3,
205
+ msg: "Add second object: new entry",
206
+ actionType: "append"
207
+ }, {
208
+ hash: "obj1(ID=123,IsActiveEntity=true)/obj2(ID=789,IsActiveEntity=true)",
209
+ expectedLength: 3,
210
+ msg: "Change second object ID: replace last entry",
211
+ actionType: "replace"
212
+ }, {
213
+ hash: "obj1(ID=123,IsActiveEntity=true)",
214
+ expectedLength: 2,
215
+ msg: "Remove second object: remove last entry",
216
+ actionType: "back",
217
+ steps: 1
218
+ }, {
219
+ hash: "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)",
220
+ expectedLength: 3,
221
+ msg: "Add second object: new entry",
222
+ actionType: "append"
223
+ }, {
224
+ hash: "obj1(ID=456,IsActiveEntity=true)",
225
+ expectedLength: 2,
226
+ msg: "Change first object: remove last entry and change second entry",
227
+ actionType: "back-replace",
228
+ steps: 1
229
+ }, {
230
+ hash: "obj2(ID=456,IsActiveEntity=true)",
231
+ expectedLength: 2,
232
+ msg: "Change first object type: change last entry",
233
+ actionType: "replace"
234
+ }];
235
+ states.forEach(function (state) {
236
+ var oAction = that.oRouterProxy._pushNewState(that.oRouterProxy._extractStateFromHash(state.hash));
237
+
238
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(state.expectedLength); // , state.msg;
239
+
240
+ expect(oAction.type).toEqual(state.actionType); // );
241
+
242
+ expect(oAction.steps).toEqual(state.steps); // );
243
+
244
+ that.sPresentHash = state.hash; // To simulate actual navigation
245
+ });
246
+ });
247
+ test("Regular back and forth navigation with layout", function () {
248
+ that.sPresentHash = "";
249
+ that.oRouterProxy.initRaw(that.oRouter);
250
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(1); // , "Start with 1 entry (no object");
251
+
252
+ var states = [{
253
+ hash: "obj1(ID=123,IsActiveEntity=true)?layout=TwoColumnsMidExpanded",
254
+ expectedLength: 2,
255
+ msg: "Add first object: new entry",
256
+ actionType: "append"
257
+ }, {
258
+ hash: "obj1(ID=123,IsActiveEntity=true)?layout=TwoColumnsBeginExpanded",
259
+ expectedLength: 2,
260
+ msg: "Change layout: change last entry",
261
+ actionType: "replace"
262
+ }, {
263
+ hash: "obj1(ID=123,IsActiveEntity=true)?layout=MidColumnFullScreen",
264
+ expectedLength: 3,
265
+ msg: "Switch to fullscreen: new entry",
266
+ actionType: "append"
267
+ }, {
268
+ hash: "obj1(ID=456,IsActiveEntity=true)?layout=TwoColumnsMidExpanded",
269
+ expectedLength: 2,
270
+ msg: "Back to column layout + change object ID: remoce last entry and change",
271
+ actionType: "back-replace",
272
+ steps: 1
273
+ }, {
274
+ hash: "obj1(ID=456,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)?layout=ThreeColumnsMidExpanded",
275
+ expectedLength: 3,
276
+ msg: "Add second object: new entry",
277
+ actionType: "append"
278
+ }, {
279
+ hash: "obj1(ID=456,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)?layout=EndColumnFullScreen",
280
+ expectedLength: 4,
281
+ msg: "Switch to fullscreen: new entry",
282
+ actionType: "append"
283
+ }, {
284
+ hash: "obj1(ID=456,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)?layout=ThreeColumnsMidExpanded",
285
+ expectedLength: 3,
286
+ msg: "Back to column layout: remove last entry",
287
+ actionType: "back",
288
+ steps: 1
289
+ }, {
290
+ hash: "obj1(ID=456,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)?layout=MidColumnFullScreen",
291
+ expectedLength: 4,
292
+ msg: "Second page full screen: add entry",
293
+ actionType: "append"
294
+ }];
295
+ states.forEach(function (state) {
296
+ var oAction = that.oRouterProxy._pushNewState(that.oRouterProxy._extractStateFromHash(state.hash));
297
+
298
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(state.expectedLength); // , state.msg;
299
+
300
+ expect(oAction.type).toEqual(state.actionType); // );
301
+
302
+ expect(oAction.steps).toEqual(state.steps); // );
303
+
304
+ that.sPresentHash = state.hash; // To simulate actual navigation
305
+ });
306
+ });
307
+ test("Deeplink navigation 1", function () {
308
+ that.sPresentHash = "obj1(ID=123,IsActiveEntity=true)?layout=TwoColumnsMidExpanded";
309
+ that.oRouterProxy.initRaw(that.oRouter);
310
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(1); // , "Start with a deep link");
311
+
312
+ var states = [{
313
+ hash: "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)?layout=ThreeColumnsMidExpanded",
314
+ expectedLength: 2,
315
+ msg: "Add second object: new entry",
316
+ actionType: "append"
317
+ }, {
318
+ hash: "obj1(ID=123,IsActiveEntity=true)?layout=TwoColumnsMidExpanded",
319
+ expectedLength: 1,
320
+ msg: "Remove 1 object: remove entry",
321
+ actionType: "back",
322
+ steps: 1
323
+ }, {
324
+ hash: "",
325
+ expectedLength: 1,
326
+ msg: "Remove first object: replace entry",
327
+ actionType: "replace"
328
+ }];
329
+ states.forEach(function (state) {
330
+ var oAction = that.oRouterProxy._pushNewState(that.oRouterProxy._extractStateFromHash(state.hash));
331
+
332
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(state.expectedLength); // , state.msg);
333
+
334
+ expect(oAction.type).toEqual(state.actionType); // );
335
+
336
+ expect(oAction.steps).toEqual(state.steps); // );
337
+
338
+ that.sPresentHash = state.hash; // To simulate actual navigation
339
+ });
340
+ });
341
+ test("Deeplink navigation 2", function () {
342
+ that.sPresentHash = "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)?layout=ThreeColumnsMidExpanded";
343
+ that.oRouterProxy.initRaw(that.oRouter);
344
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(1); // , "Start with a deep link (2 objects)");
345
+
346
+ var states = [{
347
+ hash: "obj1(ID=456,IsActiveEntity=true)?layout=TwoColumnsMidExpanded",
348
+ expectedLength: 1,
349
+ msg: "Deeplink with 1 different object: replace entry",
350
+ actionType: "replace"
351
+ }, {
352
+ hash: "obj3(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)?layout=ThreeColumnsMidExpanded",
353
+ expectedLength: 1,
354
+ msg: "Deeplink with 2 different objects: replace entry",
355
+ actionType: "replace"
356
+ }];
357
+ states.forEach(function (state) {
358
+ var oAction = that.oRouterProxy._pushNewState(that.oRouterProxy._extractStateFromHash(state.hash));
359
+
360
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(state.expectedLength); // , state.msg);
361
+
362
+ expect(oAction.type).toEqual(state.actionType); // );
363
+
364
+ expect(oAction.steps).toEqual(state.steps); // );
365
+
366
+ that.sPresentHash = state.hash; // To simulate actual navigation
367
+ });
368
+ });
369
+ test("Simulate page reload", function () {
370
+ that.sPresentHash = "obj1(ID=123,IsActiveEntity=true)";
371
+ that.oRouterProxy.initRaw(that.oRouter);
372
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(1); // , "Reload object page");
373
+
374
+ that.sPresentHash = ""; // Simulate go back to ListReport
375
+
376
+ var oAction = that.oRouterProxy._pushNewState(that.oRouterProxy._extractStateFromHash("obj1(ID=123,IsActiveEntity=true)")); // Go to object page
377
+
378
+
379
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(2); // , "Recreate history with 2 entries");
380
+
381
+ expect(oAction.type).toEqual("append"); // );
382
+ });
383
+ test("History preservation", function () {
384
+ that.sPresentHash = "";
385
+ that.oRouterProxy.initRaw(that.oRouter);
386
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(1); // , "Start with 1 entry (no object)");
387
+
388
+ var states = [{
389
+ hash: "obj1(ID=123,IsActiveEntity=true)",
390
+ bPreserveHistory: false,
391
+ bDisableHistoryPreservation: false,
392
+ expectedLength: 2,
393
+ msg: "Add first object: new entry",
394
+ actionType: "append"
395
+ }, {
396
+ hash: "obj1(ID=456,IsActiveEntity=true)",
397
+ bPreserveHistory: true,
398
+ bDisableHistoryPreservation: false,
399
+ expectedLength: 3,
400
+ msg: "Add object with history preserved: new entry",
401
+ actionType: "append"
402
+ }, {
403
+ hash: "obj1(ID=456,IsActiveEntity=true)/obj2(ID=789,IsActiveEntity=true)",
404
+ bPreserveHistory: false,
405
+ bDisableHistoryPreservation: false,
406
+ expectedLength: 4,
407
+ msg: "Add sub-object : new entry",
408
+ actionType: "append"
409
+ }, {
410
+ hash: "obj1(ID=012,IsActiveEntity=true)",
411
+ bPreserveHistory: false,
412
+ bDisableHistoryPreservation: false,
413
+ expectedLength: 3,
414
+ msg: "Go to new object : entry shall be preserved",
415
+ actionType: "back-replace",
416
+ steps: 1
417
+ }, {
418
+ hash: "obj1(ID=123,IsActiveEntity=true)?sap-iapp-state=XYZ",
419
+ bPreserveHistory: false,
420
+ bDisableHistoryPreservation: false,
421
+ expectedLength: 2,
422
+ msg: "Go to preserved object with new appstate: preserved entry shall be replaced",
423
+ actionType: "back-replace",
424
+ steps: 1
425
+ }, {
426
+ hash: "obj1(ID=456,IsActiveEntity=true)",
427
+ bPreserveHistory: false,
428
+ bDisableHistoryPreservation: true,
429
+ expectedLength: 2,
430
+ msg: "Go to new object with history preservation disabled: preserved entry shall be replaced",
431
+ actionType: "replace"
432
+ }, {
433
+ hash: "obj1(ID=123,IsActiveEntity=true)",
434
+ bPreserveHistory: true,
435
+ bDisableHistoryPreservation: false,
436
+ expectedLength: 3,
437
+ msg: "Add object with history preserved: new entry",
438
+ actionType: "append"
439
+ }, {
440
+ hash: "",
441
+ bPreserveHistory: false,
442
+ bDisableHistoryPreservation: true,
443
+ expectedLength: 1,
444
+ msg: "Go back home with history preservation disabled: preserved entry shall be removed",
445
+ actionType: "back",
446
+ steps: 2
447
+ }];
448
+ states.forEach(function (state) {
449
+ var oAction = that.oRouterProxy._pushNewState(that.oRouterProxy._extractStateFromHash(state.hash), false, state.bPreserveHistory, state.bDisableHistoryPreservation);
450
+
451
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(state.expectedLength); // , state.msg;
452
+
453
+ expect(oAction.type).toEqual(state.actionType); // );
454
+
455
+ expect(oAction.steps).toEqual(state.steps); // );
456
+
457
+ that.sPresentHash = that.oRouterProxy._oManagedHistory[that.oRouterProxy._oManagedHistory.length - 1].hash; // To simulate actual navigation
458
+ });
459
+ });
460
+ });
461
+ describe("Tests for impact checks", function () {
462
+ var that = {};
463
+ beforeEach(function () {
464
+ that.sPresentHash = "";
465
+ that.oRouterProxy = new RouterProxy();
466
+ that.oRouter = {
467
+ getHashChanger: function () {
468
+ return {
469
+ getHash: function () {
470
+ return that.sPresentHash;
471
+ }
472
+ };
473
+ }
474
+ };
475
+ });
476
+ afterEach(function () {
477
+ that.oRouterProxy.destroy();
478
+ });
479
+ test("Tests with 1 level", function () {
480
+ that.sPresentHash = "obj1(ID=123,IsActiveEntity=true)";
481
+ that.oRouterProxy.initRaw(that.oRouter);
482
+ expect(that.oRouterProxy.isCurrentStateImpactedBy("/obj1(ID=123,IsActiveEntity=true)")).toBe(true); //, "Same hash has impact");
483
+
484
+ expect(!that.oRouterProxy.isCurrentStateImpactedBy("/obj1(ID=123,IsActiveEntity=false)")).toBe(true); //"Same object in edition has no impact"
485
+
486
+ expect(!that.oRouterProxy.isCurrentStateImpactedBy("/obj1(ID=456,IsActiveEntity=true)")).toBe(true); //, "Different object has no impact");
487
+
488
+ expect(!that.oRouterProxy.isCurrentStateImpactedBy("/obj2(ID=123,IsActiveEntity=true)")).toBe(true); // "Different object type has no impact");
489
+ });
490
+ test("Tests with 2 level", function () {
491
+ that.sPresentHash = "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)/obj3(ID=789,IsActiveEntity=true)";
492
+ that.oRouterProxy.initRaw(that.oRouter);
493
+ expect(that.oRouterProxy.isCurrentStateImpactedBy("/obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)")).toBe(true); //"Parent has impact"
494
+
495
+ expect(!that.oRouterProxy.isCurrentStateImpactedBy("/obj1(ID=123,IsActiveEntity=false)/obj2(ID=456,IsActiveEntity=false)")).toBe(true); //"Parent in edition has no impact"
496
+
497
+ expect(that.oRouterProxy.isCurrentStateImpactedBy("/obj1(ID=123,IsActiveEntity=true)")).toBe(true); //, "Grand-parent has impact");
498
+
499
+ expect(!that.oRouterProxy.isCurrentStateImpactedBy("/obj1(ID=123,IsActiveEntity=false)")).toBe(true); //"Grand-parent in edition has no impact"
500
+
501
+ expect(!that.oRouterProxy.isCurrentStateImpactedBy("/obj1(ID=123,IsActiveEntity=true)/obj2(ID=789,IsActiveEntity=true)/obj3(ID=789,IsActiveEntity=true)")); //"Changing object ID -> no impact"
502
+ });
503
+ });
504
+ describe("Tests for guard check", function () {
505
+ var that = {};
506
+ beforeEach(function () {
507
+ that.sPresentHash = "";
508
+ that.oRouterProxy = new RouterProxy();
509
+ that.oRouter = {
510
+ getHashChanger: function () {
511
+ return {
512
+ getHash: function () {
513
+ return that.sPresentHash;
514
+ }
515
+ };
516
+ }
517
+ };
518
+ });
519
+ afterEach(function () {
520
+ that.oRouterProxy.destroy();
521
+ });
522
+ test("No guard set", function () {
523
+ that.sPresentHash = "";
524
+ that.oRouterProxy.initRaw(that.oRouter);
525
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(1); // , "Start with no object");
526
+
527
+ that.oRouterProxy._pushNewState(that.oRouterProxy._extractStateFromHash("obj1(123)?layout=TwoColumnsMidExpanded"));
528
+
529
+ that.sPresentHash = "obj1(123)?layout=TwoColumnsMidExpanded";
530
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(2); // , "OP in FCL : 2 states");
531
+
532
+ expect(that.oRouterProxy.checkHashWithGuard("")).toBe(true); // "No guard");
533
+
534
+ expect(that.oRouterProxy.checkHashWithGuard("obj1(123)?layout=TwoColumnsMidExpanded")).toBe(true); // "No guard");
535
+
536
+ expect(that.oRouterProxy.checkHashWithGuard("obj1(234)?layout=TwoColumnsMidExpanded")).toBe(true); //, "No guard");
537
+
538
+ expect(that.oRouterProxy.checkHashWithGuard("obj1(123)?layout=MidColumnFullScreen")).toBe(true); //, "No guard");
539
+
540
+ expect(that.oRouterProxy.checkHashWithGuard("obj1(123)/obj2(456)?layout=ThreeColumnsMidExpanded")).toBe(true); //, "No guard");
541
+ });
542
+ test("Guard set on object page FCL", function () {
543
+ that.sPresentHash = "";
544
+ that.oRouterProxy.initRaw(that.oRouter, "SalesOrder");
545
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(1); // , "Start with no object");
546
+
547
+ that.oRouterProxy._pushNewState(that.oRouterProxy._extractStateFromHash("obj1(123)?layout=TwoColumnsMidExpanded"));
548
+
549
+ that.sPresentHash = "obj1(123)?layout=TwoColumnsMidExpanded";
550
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(2); // , "OP in FCL : 2 states");
551
+
552
+ that.oRouterProxy.setNavigationGuard();
553
+ expect(!that.oRouterProxy.checkHashWithGuard("")).toBe(true); //, "ListReport crosses guard");
554
+
555
+ expect(that.oRouterProxy.checkHashWithGuard("obj1(123)?layout=TwoColumnsMidExpanded")).toBe(true); //, "Same OP doesn't cross guard");
556
+
557
+ expect(!that.oRouterProxy.checkHashWithGuard("obj1(234)?layout=TwoColumnsMidExpanded")).toBe(true); //, "Different OP crosses guard");
558
+
559
+ expect(that.oRouterProxy.checkHashWithGuard("obj1(123)?layout=MidColumnFullScreen")).toBe(true); //, "OP in full screen doesn't cross guard");
560
+
561
+ expect(that.oRouterProxy.checkHashWithGuard("obj1(123)/obj2(456)?layout=ThreeColumnsMidExpanded")).toBe(true); //, "Sub OP doesn't cross guard");
562
+ });
563
+ test("Guard set on object page FCL fullscreen", function () {
564
+ that.sPresentHash = "";
565
+ that.oRouterProxy.initRaw(that.oRouter);
566
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(1); // , "Start with no object";
567
+
568
+ that.oRouterProxy._pushNewState(that.oRouterProxy._extractStateFromHash("obj1(123)?layout=TwoColumnsMidExpanded"));
569
+
570
+ that.sPresentHash = "obj1(123)?layout=TwoColumnsMidExpanded";
571
+
572
+ that.oRouterProxy._pushNewState(that.oRouterProxy._extractStateFromHash("obj1(123)?layout=MidColumnFullScreen"));
573
+
574
+ that.sPresentHash = "obj1(123)?layout=MidColumnFullScreen";
575
+ expect(that.oRouterProxy._oManagedHistory.length).toEqual(3); // , "OP in FCL fullscreen : 3 states";
576
+
577
+ that.oRouterProxy.setNavigationGuard();
578
+ expect(!that.oRouterProxy.checkHashWithGuard("")).toBe(true); //, "ListReport crosses guard");
579
+
580
+ expect(that.oRouterProxy.checkHashWithGuard("obj1(123)?layout=TwoColumnsMidExpanded")).toBe(true); //, "OP in FCL doesn't cross guard");
581
+
582
+ expect(!that.oRouterProxy.checkHashWithGuard("obj1(234)?layout=TwoColumnsMidExpanded")).toBe(true); //, "Different OP crosses guard");
583
+
584
+ expect(that.oRouterProxy.checkHashWithGuard("obj1(123)?layout=MidColumnFullScreen")).toBe(true); //, "OP in full screen doesn't cross guard");
585
+
586
+ expect(that.oRouterProxy.checkHashWithGuard("obj1(123)/obj2(456)?layout=ThreeColumnsMidExpanded")).toBe(true); //, "Sub OP doesn't cross guard");
587
+ });
588
+ });
589
+ describe("Tests for checkIfBackIsOutOfGuard", function () {
590
+ var that = {};
591
+ beforeEach(function () {
592
+ that.sPresentHash = "";
593
+ that.oRouterProxy = new RouterProxy();
594
+ that.oRouter = {
595
+ getHashChanger: function () {
596
+ return {
597
+ getHash: function () {
598
+ return that.sPresentHash;
599
+ }
600
+ };
601
+ }
602
+ };
603
+ });
604
+ afterEach(function () {
605
+ that.oRouterProxy.destroy();
606
+ });
607
+ test("Test when Back Nav exits Guard", function () {
608
+ that.oRouterProxy.initRaw(that.oRouter);
609
+ [{
610
+ bExpectedValue: false,
611
+ sPresentHash: "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)/obj3(ID=789,IsActiveEntity=true)",
612
+ aHashStates: ["obj1(ID=123,IsActiveEntity=true)", "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)", "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)/obj3(ID=789,IsActiveEntity=true)"],
613
+ sGuardHash: "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)",
614
+ sMessage: "Back hash ahead of Guard"
615
+ }, {
616
+ bExpectedValue: true,
617
+ sPresentHash: "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)",
618
+ aHashStates: ["obj1(ID=123,IsActiveEntity=true)", "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)", "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)/obj3(ID=789,IsActiveEntity=true)"],
619
+ sGuardHash: "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)",
620
+ sMessage: "Back hash exits of Guard"
621
+ }, {
622
+ bExpectedValue: true,
623
+ sPresentHash: "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)",
624
+ aHashStates: ["obj1(ID=123,IsActiveEntity=true)", "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)", "obj1(ID=123,IsActiveEntity=true)/obj2(ID=456,IsActiveEntity=true)/obj3(ID=789,IsActiveEntity=true)"],
625
+ sMessage: "Back hash without Guard"
626
+ }, {
627
+ bExpectedValue: true,
628
+ sPresentHash: "obj1(ID=123,IsActiveEntity=true)",
629
+ aHashStates: ["obj1(ID=123,IsActiveEntity=true)"],
630
+ sGuardHash: "obj1(ID=123,IsActiveEntity=true)",
631
+ sMessage: "No Back hash with Guard"
632
+ }].forEach(function (oTestData) {
633
+ oTestData.aHashStates.forEach(function (sHash) {
634
+ var oState = that.oRouterProxy._extractStateFromHash(sHash);
635
+
636
+ that.oRouterProxy._pushNewState(oState);
637
+
638
+ that.sPresentHash = sHash;
639
+
640
+ if (sHash === oTestData.sGuardHash) {
641
+ that.oRouterProxy.setNavigationGuard(oState.hash);
642
+ }
643
+ });
644
+ that.sPresentHash = oTestData.sPresentHash;
645
+ expect(that.oRouterProxy.checkIfBackIsOutOfGuard(that.sPresentHash)).toEqual(oTestData.bExpectedValue); // ,
646
+
647
+ "Test for " + oTestData.sMessage;
648
+ });
649
+ });
650
+ });
53
651
  }, false);
54
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJvdXRlclByb3h5LnNwZWMudHMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJ0aGF0IiwiX29TaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJqZXN0IiwiZm4iLCJtb2NrUmV0dXJuVmFsdWUiLCJfaW50ZXJuYWxOYXZUb0hhc2giLCJpdCIsIlJvdXRlclByb3h5IiwicHJvdG90eXBlIiwibmF2VG9IYXNoIiwiY2FsbCIsImV4cGVjdCIsInRvSGF2ZUJlZW5DYWxsZWRUaW1lcyIsInRvSGF2ZUJlZW5DYWxsZWQiLCJzVGFyZ2V0VVJMIiwiX29Sb3V0ZXIiLCJnZXRVUkwiLCJuYXZUbyIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBQUFBLEVBQUFBLFFBQVEsQ0FBQyx5QkFBRCxFQUE0QixZQUFNO0FBQ3pDLFFBQU1DLElBQUksR0FBRztBQUNaQyxNQUFBQSxlQUFlLEVBQUU7QUFDaEJDLFFBQUFBLGlCQUFpQixFQUFFQyxJQUFJLENBQUNDLEVBQUwsR0FBVUMsZUFBVixDQUEwQixFQUExQjtBQURILE9BREw7QUFJWkMsTUFBQUEsa0JBQWtCLEVBQUVILElBQUksQ0FBQ0MsRUFBTCxHQUFVQyxlQUFWLENBQTBCLEVBQTFCO0FBSlIsS0FBYjtBQU9BRSxJQUFBQSxFQUFFLENBQUMscUNBQUQ7QUFBQSxVQUFvRDtBQUNyREMsUUFBQUEsV0FBVyxDQUFDQyxTQUFaLENBQXNCQyxTQUF0QixDQUFnQ0MsSUFBaEMsQ0FBcUNYLElBQXJDLEVBQTJDLEVBQTNDLEVBQStDLEtBQS9DLEVBQXNELEtBQXRELEVBQTZELEtBQTdELEVBQW9FLEtBQXBFO0FBQ0FZLFFBQUFBLE1BQU0sQ0FBQ1osSUFBSSxDQUFDQyxlQUFMLENBQXFCQyxpQkFBdEIsQ0FBTixDQUErQ1cscUJBQS9DLENBQXFFLENBQXJFO0FBRnFEO0FBR3JELE9BSEM7QUFBQTtBQUFBO0FBQUEsTUFBRjtBQUlBTixJQUFBQSxFQUFFLENBQUMsOENBQUQ7QUFBQSxVQUE2RDtBQUM5REMsUUFBQUEsV0FBVyxDQUFDQyxTQUFaLENBQXNCQyxTQUF0QixDQUFnQ0MsSUFBaEMsQ0FBcUNYLElBQXJDLEVBQTJDLEVBQTNDLEVBQStDLEtBQS9DLEVBQXNELEtBQXRELEVBQTZELEtBQTdELEVBQW9FLElBQXBFO0FBQ0FZLFFBQUFBLE1BQU0sQ0FBQ1osSUFBSSxDQUFDQyxlQUFMLENBQXFCQyxpQkFBdEIsQ0FBTixDQUErQ1ksZ0JBQS9DO0FBRjhEO0FBRzlELE9BSEM7QUFBQTtBQUFBO0FBQUEsTUFBRjtBQUlBLEdBaEJPLENBQVI7QUFrQkFmLEVBQUFBLFFBQVEsQ0FBQyxxQkFBRCxFQUF3QixZQUFNO0FBQ3JDLFFBQU1nQixVQUFVLEdBQUcsWUFBbkI7QUFDQSxRQUFNZixJQUFJLEdBQUc7QUFDWmdCLE1BQUFBLFFBQVEsRUFBRTtBQUNUQyxRQUFBQSxNQUFNLEVBQUVkLElBQUksQ0FBQ0MsRUFBTCxHQUFVQyxlQUFWLENBQTBCVSxVQUExQjtBQURDLE9BREU7QUFJWkwsTUFBQUEsU0FBUyxFQUFFUCxJQUFJLENBQUNDLEVBQUwsR0FBVUMsZUFBVixDQUEwQixFQUExQjtBQUpDLEtBQWI7QUFPQUUsSUFBQUEsRUFBRSxDQUFDLG9EQUFEO0FBQUEsVUFBbUU7QUFDcEVDLFFBQUFBLFdBQVcsQ0FBQ0MsU0FBWixDQUFzQlMsS0FBdEIsQ0FBNEJQLElBQTVCLENBQWlDWCxJQUFqQyxFQUF1QyxFQUF2QyxFQUEyQyxFQUEzQztBQUNBWSxRQUFBQSxNQUFNLENBQUNaLElBQUksQ0FBQ2dCLFFBQUwsQ0FBY0MsTUFBZixDQUFOLENBQTZCRSxvQkFBN0IsQ0FBa0QsRUFBbEQsRUFBc0QsRUFBdEQ7QUFDQVAsUUFBQUEsTUFBTSxDQUFDWixJQUFJLENBQUNVLFNBQU4sQ0FBTixDQUF1QlMsb0JBQXZCLENBQTRDSixVQUE1QyxFQUF3RCxLQUF4RCxFQUErREssU0FBL0QsRUFBMEUsS0FBMUUsRUFBaUYsSUFBakY7QUFIb0U7QUFJcEUsT0FKQztBQUFBO0FBQUE7QUFBQSxNQUFGO0FBS0EsR0FkTyxDQUFSIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUm91dGVyUHJveHkgZnJvbSBcInNhcC9mZS9jb3JlL1JvdXRlclByb3h5XCI7XG5cbmRlc2NyaWJlKFwiUm91dGVyUHJveHkgLSBuYXZUb0hhc2hcIiwgKCkgPT4ge1xuXHRjb25zdCB0aGF0ID0ge1xuXHRcdF9vU2hlbGxTZXJ2aWNlczoge1xuXHRcdFx0c2V0QmFja05hdmlnYXRpb246IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoXCJcIilcblx0XHR9LFxuXHRcdF9pbnRlcm5hbE5hdlRvSGFzaDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShcIlwiKVxuXHR9O1xuXG5cdGl0KFwiQ2hlY2sgaWYgYmFjayBuYXZpZ2F0aW9uIGlzIG5vdCBzZXRcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdFJvdXRlclByb3h5LnByb3RvdHlwZS5uYXZUb0hhc2guY2FsbCh0aGF0LCBcIlwiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cdFx0ZXhwZWN0KHRoYXQuX29TaGVsbFNlcnZpY2VzLnNldEJhY2tOYXZpZ2F0aW9uKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cdH0pO1xuXHRpdChcIkNoZWNrIGlmIGJhY2sgbmF2aWdhdGlvbiBpcyBzZXQgdG8gdW5kZWZpbmVkXCIsIGFzeW5jICgpID0+IHtcblx0XHRSb3V0ZXJQcm94eS5wcm90b3R5cGUubmF2VG9IYXNoLmNhbGwodGhhdCwgXCJcIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XG5cdFx0ZXhwZWN0KHRoYXQuX29TaGVsbFNlcnZpY2VzLnNldEJhY2tOYXZpZ2F0aW9uKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cdH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiUm91dGVyUHJveHkgLSBuYXZUb1wiLCAoKSA9PiB7XG5cdGNvbnN0IHNUYXJnZXRVUkwgPSBcInNUYXJnZXRVUkxcIjtcblx0Y29uc3QgdGhhdCA9IHtcblx0XHRfb1JvdXRlcjoge1xuXHRcdFx0Z2V0VVJMOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHNUYXJnZXRVUkwpXG5cdFx0fSxcblx0XHRuYXZUb0hhc2g6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoXCJcIilcblx0fTtcblxuXHRpdChcIkNoZWNrIGlmIG5hdlRvSGFzaCBpcyBjYWxsZWQgd2l0aCByaWdodCBwYXJhbWV0ZXJzXCIsIGFzeW5jICgpID0+IHtcblx0XHRSb3V0ZXJQcm94eS5wcm90b3R5cGUubmF2VG8uY2FsbCh0aGF0LCBcIlwiLCB7fSk7XG5cdFx0ZXhwZWN0KHRoYXQuX29Sb3V0ZXIuZ2V0VVJMKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcIlwiLCB7fSk7XG5cdFx0ZXhwZWN0KHRoYXQubmF2VG9IYXNoKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChzVGFyZ2V0VVJMLCBmYWxzZSwgdW5kZWZpbmVkLCBmYWxzZSwgdHJ1ZSk7XG5cdH0pO1xufSk7XG4iXX0=
652
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJvdXRlclByb3h5LnNwZWMudHMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJ0aGF0IiwiX29TaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJqZXN0IiwiZm4iLCJtb2NrUmV0dXJuVmFsdWUiLCJfaW50ZXJuYWxOYXZUb0hhc2giLCJpdCIsIlJvdXRlclByb3h5IiwicHJvdG90eXBlIiwibmF2VG9IYXNoIiwiY2FsbCIsImV4cGVjdCIsInRvSGF2ZUJlZW5DYWxsZWRUaW1lcyIsInRvSGF2ZUJlZW5DYWxsZWQiLCJzVGFyZ2V0VVJMIiwiX29Sb3V0ZXIiLCJnZXRVUkwiLCJuYXZUbyIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwidW5kZWZpbmVkIiwidGVzdCIsIm9Sb3V0ZXJQcm94eSIsIm9TdGF0ZSIsIl9leHRyYWN0U3RhdGVGcm9tSGFzaCIsImtleXMiLCJsZW5ndGgiLCJ0b0VxdWFsIiwic0xheW91dCIsInNjcmVlbk1vZGUiLCJvU3RhdGUxIiwib1N0YXRlMiIsIm9TdGF0ZTMiLCJvU3RhdGU0Iiwib1N0YXRlNSIsImNvbXBhcmUiLCJfY29tcGFyZUNhY2hlU3RhdGVzIiwiYmVmb3JlRWFjaCIsInNQcmVzZW50SGFzaCIsIm9Sb3V0ZXIiLCJnZXRIYXNoQ2hhbmdlciIsImdldEhhc2giLCJhZnRlckVhY2giLCJkZXN0cm95IiwiaW5pdFJhdyIsIl9vTWFuYWdlZEhpc3RvcnkiLCJzdGF0ZXMiLCJoYXNoIiwiZXhwZWN0ZWRMZW5ndGgiLCJtc2ciLCJhY3Rpb25UeXBlIiwic3RlcHMiLCJmb3JFYWNoIiwic3RhdGUiLCJvQWN0aW9uIiwiX3B1c2hOZXdTdGF0ZSIsInR5cGUiLCJiUHJlc2VydmVIaXN0b3J5IiwiYkRpc2FibGVIaXN0b3J5UHJlc2VydmF0aW9uIiwiaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5IiwidG9CZSIsImNoZWNrSGFzaFdpdGhHdWFyZCIsInNldE5hdmlnYXRpb25HdWFyZCIsImJFeHBlY3RlZFZhbHVlIiwiYUhhc2hTdGF0ZXMiLCJzR3VhcmRIYXNoIiwic01lc3NhZ2UiLCJvVGVzdERhdGEiLCJzSGFzaCIsImNoZWNrSWZCYWNrSXNPdXRPZkd1YXJkIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBQUFBLEVBQUFBLFFBQVEsQ0FBQyx5QkFBRCxFQUE0QixZQUFNO0FBQ3pDLFFBQU1DLElBQUksR0FBRztBQUNaQyxNQUFBQSxlQUFlLEVBQUU7QUFDaEJDLFFBQUFBLGlCQUFpQixFQUFFQyxJQUFJLENBQUNDLEVBQUwsR0FBVUMsZUFBVixDQUEwQixFQUExQjtBQURILE9BREw7QUFJWkMsTUFBQUEsa0JBQWtCLEVBQUVILElBQUksQ0FBQ0MsRUFBTCxHQUFVQyxlQUFWLENBQTBCLEVBQTFCO0FBSlIsS0FBYjtBQU9BRSxJQUFBQSxFQUFFLENBQUMscUNBQUQ7QUFBQSxVQUFvRDtBQUNyREMsUUFBQUEsV0FBVyxDQUFDQyxTQUFaLENBQXNCQyxTQUF0QixDQUFnQ0MsSUFBaEMsQ0FBcUNYLElBQXJDLEVBQTJDLEVBQTNDLEVBQStDLEtBQS9DLEVBQXNELEtBQXRELEVBQTZELEtBQTdELEVBQW9FLEtBQXBFO0FBQ0FZLFFBQUFBLE1BQU0sQ0FBQ1osSUFBSSxDQUFDQyxlQUFMLENBQXFCQyxpQkFBdEIsQ0FBTixDQUErQ1cscUJBQS9DLENBQXFFLENBQXJFO0FBRnFEO0FBR3JELE9BSEM7QUFBQTtBQUFBO0FBQUEsTUFBRjtBQUlBTixJQUFBQSxFQUFFLENBQUMsOENBQUQ7QUFBQSxVQUE2RDtBQUM5REMsUUFBQUEsV0FBVyxDQUFDQyxTQUFaLENBQXNCQyxTQUF0QixDQUFnQ0MsSUFBaEMsQ0FBcUNYLElBQXJDLEVBQTJDLEVBQTNDLEVBQStDLEtBQS9DLEVBQXNELEtBQXRELEVBQTZELEtBQTdELEVBQW9FLElBQXBFO0FBQ0FZLFFBQUFBLE1BQU0sQ0FBQ1osSUFBSSxDQUFDQyxlQUFMLENBQXFCQyxpQkFBdEIsQ0FBTixDQUErQ1ksZ0JBQS9DO0FBRjhEO0FBRzlELE9BSEM7QUFBQTtBQUFBO0FB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Q0FBQ0gsV0FBVixDQUFzQlosT0FBdEIsQ0FBOEIsVUFBU2dCLEtBQVQsRUFBZ0I7QUFDN0MsY0FBTTdDLE1BQU0sR0FBR3ZCLElBQUksQ0FBQ3NCLFlBQUwsQ0FBa0JFLHFCQUFsQixDQUF3QzRDLEtBQXhDLENBQWY7O0FBQ0FwRSxVQUFBQSxJQUFJLENBQUNzQixZQUFMLENBQWtCaUMsYUFBbEIsQ0FBZ0NoQyxNQUFoQzs7QUFDQXZCLFVBQUFBLElBQUksQ0FBQ3NDLFlBQUwsR0FBb0I4QixLQUFwQjs7QUFDQSxjQUFJQSxLQUFLLEtBQUtELFNBQVMsQ0FBQ0YsVUFBeEIsRUFBb0M7QUFDbkNqRSxZQUFBQSxJQUFJLENBQUNzQixZQUFMLENBQWtCd0Msa0JBQWxCLENBQXFDdkMsTUFBTSxDQUFDd0IsSUFBNUM7QUFDQTtBQUNELFNBUEQ7QUFRQS9DLFFBQUFBLElBQUksQ0FBQ3NDLFlBQUwsR0FBb0I2QixTQUFTLENBQUM3QixZQUE5QjtBQUNBMUIsUUFBQUEsTUFBTSxDQUFDWixJQUFJLENBQUNzQixZQUFMLENBQWtCK0MsdUJBQWxCLENBQTBDckUsSUFBSSxDQUFDc0MsWUFBL0MsQ0FBRCxDQUFOLENBQXFFWCxPQUFyRSxDQUE2RXdDLFNBQVMsQ0FBQ0osY0FBdkYsRUFWNkIsQ0FVMkU7O0FBQ3hHLHNCQUFjSSxTQUFTLENBQUNELFFBQXhCO0FBQ0EsT0FwREQ7QUFxREEsS0F4REcsQ0FBSjtBQXlEQSxHQTNFTyxDQUFSIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUm91dGVyUHJveHkgZnJvbSBcInNhcC9mZS9jb3JlL1JvdXRlclByb3h5XCI7XG5cbmRlc2NyaWJlKFwiUm91dGVyUHJveHkgLSBuYXZUb0hhc2hcIiwgKCkgPT4ge1xuXHRjb25zdCB0aGF0ID0ge1xuXHRcdF9vU2hlbGxTZXJ2aWNlczoge1xuXHRcdFx0c2V0QmFja05hdmlnYXRpb246IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoXCJcIilcblx0XHR9LFxuXHRcdF9pbnRlcm5hbE5hdlRvSGFzaDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShcIlwiKVxuXHR9O1xuXG5cdGl0KFwiQ2hlY2sgaWYgYmFjayBuYXZpZ2F0aW9uIGlzIG5vdCBzZXRcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdFJvdXRlclByb3h5LnByb3RvdHlwZS5uYXZUb0hhc2guY2FsbCh0aGF0LCBcIlwiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cdFx0ZXhwZWN0KHRoYXQuX29TaGVsbFNlcnZpY2VzLnNldEJhY2tOYXZpZ2F0aW9uKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cdH0pO1xuXHRpdChcIkNoZWNrIGlmIGJhY2sgbmF2aWdhdGlvbiBpcyBzZXQgdG8gdW5kZWZpbmVkXCIsIGFzeW5jICgpID0+IHtcblx0XHRSb3V0ZXJQcm94eS5wcm90b3R5cGUubmF2VG9IYXNoLmNhbGwodGhhdCwgXCJcIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XG5cdFx0ZXhwZWN0KHRoYXQuX29TaGVsbFNlcnZpY2VzLnNldEJhY2tOYXZpZ2F0aW9uKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cdH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiUm91dGVyUHJveHkgLSBuYXZUb1wiLCAoKSA9PiB7XG5cdGNvbnN0IHNUYXJnZXRVUkwgPSBcInNUYXJnZXRVUkxcIjtcblx0Y29uc3QgdGhhdCA9IHtcblx0XHRfb1JvdXRlcjoge1xuXHRcdFx0Z2V0VVJMOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHNUYXJnZXRVUkwpXG5cdFx0fSxcblx0XHRuYXZUb0hhc2g6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoXCJcIilcblx0fTtcblxuXHRpdChcIkNoZWNrIGlmIG5hdlRvSGFzaCBpcyBjYWxsZWQgd2l0aCByaWdodCBwYXJhbWV0ZXJzXCIsIGFzeW5jICgpID0+IHtcblx0XHRSb3V0ZXJQcm94eS5wcm90b3R5cGUubmF2VG8uY2FsbCh0aGF0LCBcIlwiLCB7fSk7XG5cdFx0ZXhwZWN0KHRoYXQuX29Sb3V0ZXIuZ2V0VVJMKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcIlwiLCB7fSk7XG5cdFx0ZXhwZWN0KHRoYXQubmF2VG9IYXNoKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChzVGFyZ2V0VVJMLCBmYWxzZSwgdW5kZWZpbmVkLCBmYWxzZSwgdHJ1ZSk7XG5cdH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiVGVzdHMgZm9yIFN0YXRlIGNyZWF0aW9uXCIsIGZ1bmN0aW9uKCkge1xuXHR0ZXN0KFwiQ3JlYXRlIHN0YXRlIGZyb20gcmVndWxhciBvYmplY3Qga2V5c1wiLCBmdW5jdGlvbigpIHtcblx0XHRjb25zdCBvUm91dGVyUHJveHkgPSBuZXcgUm91dGVyUHJveHkoKTtcblx0XHRjb25zdCBvU3RhdGUgPSBvUm91dGVyUHJveHkuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKFwib2JqMShrZXkxKS9vYmoyKGtleTIpXCIpO1xuXG5cdFx0ZXhwZWN0KG9TdGF0ZS5rZXlzLmxlbmd0aCkudG9FcXVhbCgyKTsgLy8gLCBcIjIga2V5cyBhcmUgZXh0cmFjdGVkXCI7XG5cdFx0ZXhwZWN0KG9TdGF0ZS5rZXlzWzBdKS50b0VxdWFsKFwib2JqMVwiKTsgLy8gLCBcImZpcnN0IGtleUlEIGlzIG9iajFcIjtcblx0XHRleHBlY3Qob1N0YXRlLmtleXNbMV0pLnRvRXF1YWwoXCJvYmoyXCIpOyAvLyAsIFwic2Vjb25kIGtleUlEIGlzIG9iajJcIjtcblxuXHRcdGV4cGVjdChvU3RhdGUuc0xheW91dCA9PT0gbnVsbCkudG9FcXVhbCh0cnVlKTsgLy8gLCBcIk5vIGxheW91dCBwYXJhbWV0ZXJcIik7XG5cdFx0ZXhwZWN0KG9TdGF0ZS5zY3JlZW5Nb2RlKS50b0VxdWFsKDApOyAvLyAsIFwic2NyZWVuTW9kZSA9IDBcIjtcblx0fSk7XG5cblx0dGVzdChcIkNyZWF0ZSBzdGF0ZSBmcm9tIGRyYWZ0IG9iamVjdCBrZXlzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdGNvbnN0IG9Sb3V0ZXJQcm94eSA9IG5ldyBSb3V0ZXJQcm94eSgpO1xuXHRcdGNvbnN0IG9TdGF0ZSA9IG9Sb3V0ZXJQcm94eS5fZXh0cmFjdFN0YXRlRnJvbUhhc2goXCJvYmoxKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKS9vYmoyKElEPTQ1NixJc0FjdGl2ZUVudGl0eT1mYWxzZSlcIik7XG5cblx0XHRleHBlY3Qob1N0YXRlLmtleXMubGVuZ3RoKS50b0VxdWFsKDIpOyAvLyAsIFwiMiBrZXlzIGFyZSBleHRyYWN0ZWRcIjtcblx0XHRleHBlY3Qob1N0YXRlLmtleXNbMF0pLnRvRXF1YWwoXCJvYmoxXCIpOyAvLyAsIFwiZmlyc3Qga2V5SUQgaXMgb2JqMVwiO1xuXHRcdGV4cGVjdChvU3RhdGUua2V5c1sxXSkudG9FcXVhbChcIm9iajJcIik7IC8vICwgXCJzZWNvbmQga2V5SUQgaXMgb2JqMlwiO1xuXG5cdFx0ZXhwZWN0KG9TdGF0ZS5zTGF5b3V0ID09PSBudWxsKS50b0VxdWFsKHRydWUpOyAvLyAsIFwiTm8gbGF5b3V0IHBhcmFtZXRlclwiKTtcblx0XHRleHBlY3Qob1N0YXRlLnNjcmVlbk1vZGUpLnRvRXF1YWwoMCk7IC8vICwgXCJzY3JlZW5Nb2RlID0gMFwiO1xuXHR9KTtcblxuXHR0ZXN0KFwiQ3JlYXRlIHN0YXRlIHdpdGggbGF5b3V0IGluZm9cIiwgZnVuY3Rpb24oKSB7XG5cdFx0Y29uc3Qgb1JvdXRlclByb3h5ID0gbmV3IFJvdXRlclByb3h5KCk7XG5cdFx0Y29uc3Qgb1N0YXRlID0gb1JvdXRlclByb3h5Ll9leHRyYWN0U3RhdGVGcm9tSGFzaChcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpP2xheW91dD1NaWRDb2x1bW5GdWxsU2NyZWVuXCIpO1xuXG5cdFx0ZXhwZWN0KG9TdGF0ZS5rZXlzLmxlbmd0aCkudG9FcXVhbCgxKTsgLy8gLCBcIjEga2V5IGlzIGV4dHJhY3RlZFwiO1xuXHRcdGV4cGVjdChvU3RhdGUua2V5c1swXSkudG9FcXVhbChcIm9iajFcIik7IC8vICwgXCJmaXJzdCBrZXlJRCBpcyBvYmoxXCI7XG5cblx0XHRleHBlY3Qob1N0YXRlLnNMYXlvdXQpLnRvRXF1YWwoXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCIpOyAvLyAsIFwibGF5b3V0IGlzIE1pZENvbHVtbkZ1bGxTY3JlZW5cIjtcblx0XHRleHBlY3Qob1N0YXRlLnNjcmVlbk1vZGUpLnRvRXF1YWwoMSk7IC8vICwgXCJzY3JlZW5Nb2RlIGlzIDFcIjtcblx0fSk7XG59KTtcbmRlc2NyaWJlKFwiVGVzdHMgZm9yIFN0YXRlIGNvbXBhcmlzb25cIiwgZnVuY3Rpb24oKSB7XG5cdHRlc3QoXCJEaWZmZXJlbnQgc3RhdGVzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdGNvbnN0IG9Sb3V0ZXJQcm94eSA9IG5ldyBSb3V0ZXJQcm94eSgpO1xuXHRcdGNvbnN0IG9TdGF0ZTEgPSBvUm91dGVyUHJveHkuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9ZmFsc2UpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PWZhbHNlKVwiKTtcblx0XHRjb25zdCBvU3RhdGUyID0gb1JvdXRlclByb3h5Ll9leHRyYWN0U3RhdGVGcm9tSGFzaChcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpXCIpO1xuXHRcdGNvbnN0IG9TdGF0ZTMgPSBvUm91dGVyUHJveHkuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKFwib2JqMShJRD00NTYsSXNBY3RpdmVFbnRpdHk9ZmFsc2UpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PWZhbHNlKVwiKTtcblx0XHRjb25zdCBvU3RhdGU0ID0gb1JvdXRlclByb3h5Ll9leHRyYWN0U3RhdGVGcm9tSGFzaChcIm9iajIoSUQ9MTIzLElzQWN0aXZlRW50aXR5PWZhbHNlKVwiKTtcblx0XHRjb25zdCBvU3RhdGU1ID0gb1JvdXRlclByb3h5Ll9leHRyYWN0U3RhdGVGcm9tSGFzaChcIm9iajIoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpP2xheW91dD1FbmRDb2x1bW5GdWxsU2NyZWVuXCIpO1xuXG5cdFx0bGV0IGNvbXBhcmUgPSBvUm91dGVyUHJveHkuX2NvbXBhcmVDYWNoZVN0YXRlcyhvU3RhdGUxLCBvU3RhdGUyKTtcblx0XHRleHBlY3QoY29tcGFyZSkudG9FcXVhbCgzKTsgLy8gLCBcIkEgY2hpbGQgaXMgZGlmZmVyZW50IGZyb20gaXRzIGFuY2VzdG9yXCI7XG5cdFx0Y29tcGFyZSA9IG9Sb3V0ZXJQcm94eS5fY29tcGFyZUNhY2hlU3RhdGVzKG9TdGF0ZTEsIG9TdGF0ZTMpO1xuXHRcdGV4cGVjdChjb21wYXJlKS50b0VxdWFsKDApOyAvLyAsIFwiQ2hhbmdpbmcgb2JqZWN0SUQga2VlcHMgMiBzdGF0ZXMgZXF1YWxcIjtcblx0XHRjb21wYXJlID0gb1JvdXRlclByb3h5Ll9jb21wYXJlQ2FjaGVTdGF0ZXMob1N0YXRlMiwgb1N0YXRlNCk7XG5cdFx0ZXhwZWN0KGNvbXBhcmUpLnRvRXF1YWwoMyk7IC8vICwgXCJDaGFuZ2luZyBvYmplY3QgdHlwZSBtYWtlcyAyIHN0YXRlcyBkaWZmZXJlbnRcIjtcblx0XHRjb21wYXJlID0gb1JvdXRlclByb3h5Ll9jb21wYXJlQ2FjaGVTdGF0ZXMob1N0YXRlNSwgb1N0YXRlNCk7XG5cdFx0ZXhwZWN0KGNvbXBhcmUpLnRvRXF1YWwoMyk7IC8vICwgXCJEaWZmZXJlbnQgc2NyZWVubW9kZSAobm90IGFuY2VzdG9yc1wiKTtcblx0fSk7XG5cblx0dGVzdChcIkFuY2VzdG9yIHN0YXRlc1wiLCBmdW5jdGlvbigpIHtcblx0XHRjb25zdCBvUm91dGVyUHJveHkgPSBuZXcgUm91dGVyUHJveHkoKTtcblx0XHRjb25zdCBvU3RhdGUxID0gb1JvdXRlclByb3h5Ll9leHRyYWN0U3RhdGVGcm9tSGFzaChcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpXCIpO1xuXHRcdGNvbnN0IG9TdGF0ZTIgPSBvUm91dGVyUHJveHkuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9ZmFsc2UpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PWZhbHNlKVwiKTtcblx0XHRjb25zdCBvU3RhdGUzID0gb1JvdXRlclByb3h5Ll9leHRyYWN0U3RhdGVGcm9tSGFzaChcblx0XHRcdFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSkvb2JqMihJRD00NTYsSXNBY3RpdmVFbnRpdHk9dHJ1ZSk/bGF5b3V0PU1pZENvbHVtbkZ1bGxTY3JlZW5cIlxuXHRcdCk7XG5cdFx0Y29uc3Qgb1N0YXRlNCA9IG9Sb3V0ZXJQcm94eS5fZXh0cmFjdFN0YXRlRnJvbUhhc2goXG5cdFx0XHRcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpP2xheW91dD1FbmRDb2x1bW5GdWxsU2NyZWVuXCJcblx0XHQpO1xuXG5cdFx0bGV0IGNvbXBhcmUgPSBvUm91dGVyUHJveHkuX2NvbXBhcmVDYWNoZVN0YXRlcyhvU3RhdGUxLCBvU3RhdGUyKTtcblx0XHRleHBlY3QoY29tcGFyZSkudG9FcXVhbCgyKTsgLy8gLCBcIlJlbW92aW5nIGFuIG9iamVjdCBtYWtlcyBhbiBhbmNlc3RvclwiO1xuXG5cdFx0Y29tcGFyZSA9IG9Sb3V0ZXJQcm94eS5fY29tcGFyZUNhY2hlU3RhdGVzKG9TdGF0ZTEsIG9TdGF0ZTMpO1xuXHRcdGV4cGVjdChjb21wYXJlKS50b0VxdWFsKDIpOyAvLyAsIFwiUmVtb3ZpbmcgYW4gb2JqZWN0IGFuZCBsYXlvdXQgbWFrZXMgYW4gYW5jZXN0b3JcIjtcblxuXHRcdGNvbXBhcmUgPSBvUm91dGVyUHJveHkuX2NvbXBhcmVDYWNoZVN0YXRlcyhvU3RhdGUyLCBvU3RhdGUzKTtcblx0XHRleHBlY3QoY29tcGFyZSkudG9FcXVhbCgyKTsgLy8gLCBcIk1pZCBjb2x1bW4gZnVsbHNjcmVlbiBpcyBhbiBhbmNlc3RvciBvZiBubyBmdWxsc2NyZWVuXCI7XG5cblx0XHRjb21wYXJlID0gb1JvdXRlclByb3h5Ll9jb21wYXJlQ2FjaGVTdGF0ZXMob1N0YXRlMywgb1N0YXRlNCk7XG5cdFx0ZXhwZWN0KGNvbXBhcmUpLnRvRXF1YWwoMik7IC8vICwgXCJFbmQgY29sdW1uIGZ1bGxzY3JlZW4gaXMgYW4gYW5jZXN0b3Igb2YgbWlkIGNvbHVtbiBmdWxsc2NyZWVuXCI7XG5cdH0pO1xuXG5cdHRlc3QoXCJDb21wYXRpYmxlIHN0YXRlc1wiLCBmdW5jdGlvbigpIHtcblx0XHRjb25zdCBvUm91dGVyUHJveHkgPSBuZXcgUm91dGVyUHJveHkoKTtcblx0XHRjb25zdCBvU3RhdGUxID0gb1JvdXRlclByb3h5Ll9leHRyYWN0U3RhdGVGcm9tSGFzaChcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PWZhbHNlKVwiKTtcblx0XHRjb25zdCBvU3RhdGUyID0gb1JvdXRlclByb3h5Ll9leHRyYWN0U3RhdGVGcm9tSGFzaChcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PWZhbHNlKS9vYmoyKElEPTQ1NixJc0FjdGl2ZUVudGl0eT1mYWxzZSlcIik7XG5cdFx0Y29uc3Qgb1N0YXRlMyA9IG9Sb3V0ZXJQcm94eS5fZXh0cmFjdFN0YXRlRnJvbUhhc2goXG5cdFx0XHRcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PWZhbHNlKS9vYmoyKElEPTQ1NixJc0FjdGl2ZUVudGl0eT1mYWxzZSk/bGF5b3V0PVR3b0NvbHVtbnNNaWRFeHBhbmRlZFwiXG5cdFx0KTtcblx0XHRjb25zdCBvU3RhdGU0ID0gb1JvdXRlclByb3h5Ll9leHRyYWN0U3RhdGVGcm9tSGFzaChcblx0XHRcdFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9ZmFsc2UpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PWZhbHNlKT9sYXlvdXQ9VHdvQ29sdW1uc0JlZ2luRXhwYW5kZWRcIlxuXHRcdCk7XG5cblx0XHRsZXQgY29tcGFyZSA9IG9Sb3V0ZXJQcm94eS5fY29tcGFyZUNhY2hlU3RhdGVzKG9TdGF0ZTEsIG9TdGF0ZTIpO1xuXHRcdGV4cGVjdChjb21wYXJlKS50b0VxdWFsKDApOyAvLyAsIFwiRGlmZmVyZW5jZXMgaW4gZWRpdGlvbiBzdGF0dXMga2VlcCBzdGF0ZXMgZXF1YWxcIjtcblxuXHRcdGNvbXBhcmUgPSBvUm91dGVyUHJveHkuX2NvbXBhcmVDYWNoZVN0YXRlcyhvU3RhdGUyLCBvU3RhdGUzKTtcblx0XHRleHBlY3QoY29tcGFyZSkudG9FcXVhbCgxKTsgLy8gLCBcIkxheW91dCBpbmZvIChubyBmdWxsIHNjcmVlbiBrZWVwcyBzdGF0ZXMgY29tcGF0aWJsZVwiKTtcblxuXHRcdGNvbXBhcmUgPSBvUm91dGVyUHJveHkuX2NvbXBhcmVDYWNoZVN0YXRlcyhvU3RhdGUzLCBvU3RhdGU0KTtcblx0XHRleHBlY3QoY29tcGFyZSkudG9FcXVhbCgxKTsgLy8gLCBcIkRpZmZlcmVudCBsYXlvdXQgKG5vIGZ1bGwgc2NyZWVuIGtlZXAgc3RhdGVzIGNvbXBhdGlibGVcIik7XG5cblx0XHRjb21wYXJlID0gb1JvdXRlclByb3h5Ll9jb21wYXJlQ2FjaGVTdGF0ZXMob1N0YXRlMSwgb1N0YXRlMyk7XG5cdFx0ZXhwZWN0KGNvbXBhcmUpLnRvRXF1YWwoMSk7IC8vICwgXCJEaWZmZXJlbmNlcyBpbiBlZGl0aW9uIHN0YXR1cyBhbmQgbGF5b3V0IGluZm8ga2VlcCBzdGF0ZXMgY29tcGF0aWJsZWVcIjtcblx0fSk7XG59KTtcblxuZGVzY3JpYmUoXCJUZXN0cyBmb3IgaGlzdG9yeSBtYW5hZ2VtZW50XCIsIGZ1bmN0aW9uKCkge1xuXHRjb25zdCB0aGF0OiBhbnkgPSB7fTtcblx0YmVmb3JlRWFjaCgoKSA9PiB7XG5cdFx0dGhhdC5zUHJlc2VudEhhc2ggPSBcIlwiO1xuXHRcdHRoYXQub1JvdXRlclByb3h5ID0gbmV3IFJvdXRlclByb3h5KCk7XG5cdFx0dGhhdC5vUm91dGVyID0ge1xuXHRcdFx0Z2V0SGFzaENoYW5nZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGdldEhhc2g6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQuc1ByZXNlbnRIYXNoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9O1xuXHR9KTtcblx0YWZ0ZXJFYWNoKCgpID0+IHtcblx0XHR0aGF0Lm9Sb3V0ZXJQcm94eS5kZXN0cm95KCk7XG5cdH0pO1xuXG5cdHRlc3QoXCJSZWd1bGFyIGJhY2sgYW5kIGZvcnRoIG5hdmlnYXRpb24gd2l0aG91dCBsYXlvdXRcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dGhhdC5zUHJlc2VudEhhc2ggPSBcIlwiO1xuXHRcdHRoYXQub1JvdXRlclByb3h5LmluaXRSYXcodGhhdC5vUm91dGVyKTtcblx0XHRleHBlY3QodGhhdC5vUm91dGVyUHJveHkuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGgpLnRvRXF1YWwoMSk7IC8vICwgXCJTdGFydCB3aXRoIDEgZW50cnkgKG5vIG9iamVjdFwiKTtcblxuXHRcdGNvbnN0IHN0YXRlcyA9IFtcblx0XHRcdHtcblx0XHRcdFx0aGFzaDogXCJvYmoxKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKVwiLFxuXHRcdFx0XHRleHBlY3RlZExlbmd0aDogMixcblx0XHRcdFx0bXNnOiBcIkFkZCBmaXJzdCBvYmplY3Q6IG5ldyBlbnRyeVwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcImFwcGVuZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRoYXNoOiBcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpXCIsXG5cdFx0XHRcdGV4cGVjdGVkTGVuZ3RoOiAzLFxuXHRcdFx0XHRtc2c6IFwiQWRkIHNlY29uZCBvYmplY3Q6IG5ldyBlbnRyeVwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcImFwcGVuZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRoYXNoOiBcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9Nzg5LElzQWN0aXZlRW50aXR5PXRydWUpXCIsXG5cdFx0XHRcdGV4cGVjdGVkTGVuZ3RoOiAzLFxuXHRcdFx0XHRtc2c6IFwiQ2hhbmdlIHNlY29uZCBvYmplY3QgSUQ6IHJlcGxhY2UgbGFzdCBlbnRyeVwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcInJlcGxhY2VcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0aGFzaDogXCJvYmoxKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKVwiLFxuXHRcdFx0XHRleHBlY3RlZExlbmd0aDogMixcblx0XHRcdFx0bXNnOiBcIlJlbW92ZSBzZWNvbmQgb2JqZWN0OiByZW1vdmUgbGFzdCBlbnRyeVwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcImJhY2tcIixcblx0XHRcdFx0c3RlcHM6IDFcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGhhc2g6IFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSkvb2JqMihJRD00NTYsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIixcblx0XHRcdFx0ZXhwZWN0ZWRMZW5ndGg6IDMsXG5cdFx0XHRcdG1zZzogXCJBZGQgc2Vjb25kIG9iamVjdDogbmV3IGVudHJ5XCIsXG5cdFx0XHRcdGFjdGlvblR5cGU6IFwiYXBwZW5kXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGhhc2g6IFwib2JqMShJRD00NTYsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIixcblx0XHRcdFx0ZXhwZWN0ZWRMZW5ndGg6IDIsXG5cdFx0XHRcdG1zZzogXCJDaGFuZ2UgZmlyc3Qgb2JqZWN0OiByZW1vdmUgbGFzdCBlbnRyeSBhbmQgY2hhbmdlIHNlY29uZCBlbnRyeVwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcImJhY2stcmVwbGFjZVwiLFxuXHRcdFx0XHRzdGVwczogMVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0aGFzaDogXCJvYmoyKElEPTQ1NixJc0FjdGl2ZUVudGl0eT10cnVlKVwiLFxuXHRcdFx0XHRleHBlY3RlZExlbmd0aDogMixcblx0XHRcdFx0bXNnOiBcIkNoYW5nZSBmaXJzdCBvYmplY3QgdHlwZTogY2hhbmdlIGxhc3QgZW50cnlcIixcblx0XHRcdFx0YWN0aW9uVHlwZTogXCJyZXBsYWNlXCJcblx0XHRcdH1cblx0XHRdO1xuXG5cdFx0c3RhdGVzLmZvckVhY2goZnVuY3Rpb24oc3RhdGUpIHtcblx0XHRcdGNvbnN0IG9BY3Rpb24gPSB0aGF0Lm9Sb3V0ZXJQcm94eS5fcHVzaE5ld1N0YXRlKHRoYXQub1JvdXRlclByb3h5Ll9leHRyYWN0U3RhdGVGcm9tSGFzaChzdGF0ZS5oYXNoKSk7XG5cdFx0XHRleHBlY3QodGhhdC5vUm91dGVyUHJveHkuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGgpLnRvRXF1YWwoc3RhdGUuZXhwZWN0ZWRMZW5ndGgpOyAvLyAsIHN0YXRlLm1zZztcblx0XHRcdGV4cGVjdChvQWN0aW9uLnR5cGUpLnRvRXF1YWwoc3RhdGUuYWN0aW9uVHlwZSk7IC8vICk7XG5cdFx0XHRleHBlY3Qob0FjdGlvbi5zdGVwcykudG9FcXVhbChzdGF0ZS5zdGVwcyk7IC8vICk7XG5cdFx0XHR0aGF0LnNQcmVzZW50SGFzaCA9IHN0YXRlLmhhc2g7IC8vIFRvIHNpbXVsYXRlIGFjdHVhbCBuYXZpZ2F0aW9uXG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRlc3QoXCJSZWd1bGFyIGJhY2sgYW5kIGZvcnRoIG5hdmlnYXRpb24gd2l0aCBsYXlvdXRcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dGhhdC5zUHJlc2VudEhhc2ggPSBcIlwiO1xuXHRcdHRoYXQub1JvdXRlclByb3h5LmluaXRSYXcodGhhdC5vUm91dGVyKTtcblx0XHRleHBlY3QodGhhdC5vUm91dGVyUHJveHkuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGgpLnRvRXF1YWwoMSk7IC8vICwgXCJTdGFydCB3aXRoIDEgZW50cnkgKG5vIG9iamVjdFwiKTtcblxuXHRcdGNvbnN0IHN0YXRlcyA9IFtcblx0XHRcdHtcblx0XHRcdFx0aGFzaDogXCJvYmoxKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKT9sYXlvdXQ9VHdvQ29sdW1uc01pZEV4cGFuZGVkXCIsXG5cdFx0XHRcdGV4cGVjdGVkTGVuZ3RoOiAyLFxuXHRcdFx0XHRtc2c6IFwiQWRkIGZpcnN0IG9iamVjdDogbmV3IGVudHJ5XCIsXG5cdFx0XHRcdGFjdGlvblR5cGU6IFwiYXBwZW5kXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGhhc2g6IFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSk/bGF5b3V0PVR3b0NvbHVtbnNCZWdpbkV4cGFuZGVkXCIsXG5cdFx0XHRcdGV4cGVjdGVkTGVuZ3RoOiAyLFxuXHRcdFx0XHRtc2c6IFwiQ2hhbmdlIGxheW91dDogY2hhbmdlIGxhc3QgZW50cnlcIixcblx0XHRcdFx0YWN0aW9uVHlwZTogXCJyZXBsYWNlXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGhhc2g6IFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSk/bGF5b3V0PU1pZENvbHVtbkZ1bGxTY3JlZW5cIixcblx0XHRcdFx0ZXhwZWN0ZWRMZW5ndGg6IDMsXG5cdFx0XHRcdG1zZzogXCJTd2l0Y2ggdG8gZnVsbHNjcmVlbjogbmV3IGVudHJ5XCIsXG5cdFx0XHRcdGFjdGlvblR5cGU6IFwiYXBwZW5kXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGhhc2g6IFwib2JqMShJRD00NTYsSXNBY3RpdmVFbnRpdHk9dHJ1ZSk/bGF5b3V0PVR3b0NvbHVtbnNNaWRFeHBhbmRlZFwiLFxuXHRcdFx0XHRleHBlY3RlZExlbmd0aDogMixcblx0XHRcdFx0bXNnOiBcIkJhY2sgdG8gY29sdW1uIGxheW91dCArIGNoYW5nZSBvYmplY3QgSUQ6IHJlbW9jZSBsYXN0IGVudHJ5IGFuZCBjaGFuZ2VcIixcblx0XHRcdFx0YWN0aW9uVHlwZTogXCJiYWNrLXJlcGxhY2VcIixcblx0XHRcdFx0c3RlcHM6IDFcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGhhc2g6IFwib2JqMShJRD00NTYsSXNBY3RpdmVFbnRpdHk9dHJ1ZSkvb2JqMihJRD00NTYsSXNBY3RpdmVFbnRpdHk9dHJ1ZSk/bGF5b3V0PVRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCIsXG5cdFx0XHRcdGV4cGVjdGVkTGVuZ3RoOiAzLFxuXHRcdFx0XHRtc2c6IFwiQWRkIHNlY29uZCBvYmplY3Q6IG5ldyBlbnRyeVwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcImFwcGVuZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRoYXNoOiBcIm9iajEoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpP2xheW91dD1FbmRDb2x1bW5GdWxsU2NyZWVuXCIsXG5cdFx0XHRcdGV4cGVjdGVkTGVuZ3RoOiA0LFxuXHRcdFx0XHRtc2c6IFwiU3dpdGNoIHRvIGZ1bGxzY3JlZW46IG5ldyBlbnRyeVwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcImFwcGVuZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRoYXNoOiBcIm9iajEoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpP2xheW91dD1UaHJlZUNvbHVtbnNNaWRFeHBhbmRlZFwiLFxuXHRcdFx0XHRleHBlY3RlZExlbmd0aDogMyxcblx0XHRcdFx0bXNnOiBcIkJhY2sgdG8gY29sdW1uIGxheW91dDogcmVtb3ZlIGxhc3QgZW50cnlcIixcblx0XHRcdFx0YWN0aW9uVHlwZTogXCJiYWNrXCIsXG5cdFx0XHRcdHN0ZXBzOiAxXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRoYXNoOiBcIm9iajEoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpP2xheW91dD1NaWRDb2x1bW5GdWxsU2NyZWVuXCIsXG5cdFx0XHRcdGV4cGVjdGVkTGVuZ3RoOiA0LFxuXHRcdFx0XHRtc2c6IFwiU2Vjb25kIHBhZ2UgZnVsbCBzY3JlZW46IGFkZCBlbnRyeVwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcImFwcGVuZFwiXG5cdFx0XHR9XG5cdFx0XTtcblxuXHRcdHN0YXRlcy5mb3JFYWNoKGZ1bmN0aW9uKHN0YXRlKSB7XG5cdFx0XHRjb25zdCBvQWN0aW9uID0gdGhhdC5vUm91dGVyUHJveHkuX3B1c2hOZXdTdGF0ZSh0aGF0Lm9Sb3V0ZXJQcm94eS5fZXh0cmFjdFN0YXRlRnJvbUhhc2goc3RhdGUuaGFzaCkpO1xuXHRcdFx0ZXhwZWN0KHRoYXQub1JvdXRlclByb3h5Ll9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoKS50b0VxdWFsKHN0YXRlLmV4cGVjdGVkTGVuZ3RoKTsgLy8gLCBzdGF0ZS5tc2c7XG5cdFx0XHRleHBlY3Qob0FjdGlvbi50eXBlKS50b0VxdWFsKHN0YXRlLmFjdGlvblR5cGUpOyAvLyApO1xuXHRcdFx0ZXhwZWN0KG9BY3Rpb24uc3RlcHMpLnRvRXF1YWwoc3RhdGUuc3RlcHMpOyAvLyApO1xuXHRcdFx0dGhhdC5zUHJlc2VudEhhc2ggPSBzdGF0ZS5oYXNoOyAvLyBUbyBzaW11bGF0ZSBhY3R1YWwgbmF2aWdhdGlvblxuXHRcdH0pO1xuXHR9KTtcblxuXHR0ZXN0KFwiRGVlcGxpbmsgbmF2aWdhdGlvbiAxXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHRoYXQuc1ByZXNlbnRIYXNoID0gXCJvYmoxKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKT9sYXlvdXQ9VHdvQ29sdW1uc01pZEV4cGFuZGVkXCI7XG5cdFx0dGhhdC5vUm91dGVyUHJveHkuaW5pdFJhdyh0aGF0Lm9Sb3V0ZXIpO1xuXHRcdGV4cGVjdCh0aGF0Lm9Sb3V0ZXJQcm94eS5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCkudG9FcXVhbCgxKTsgLy8gLCBcIlN0YXJ0IHdpdGggYSBkZWVwIGxpbmtcIik7XG5cblx0XHRjb25zdCBzdGF0ZXMgPSBbXG5cdFx0XHR7XG5cdFx0XHRcdGhhc2g6IFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSkvb2JqMihJRD00NTYsSXNBY3RpdmVFbnRpdHk9dHJ1ZSk/bGF5b3V0PVRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCIsXG5cdFx0XHRcdGV4cGVjdGVkTGVuZ3RoOiAyLFxuXHRcdFx0XHRtc2c6IFwiQWRkIHNlY29uZCBvYmplY3Q6IG5ldyBlbnRyeVwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcImFwcGVuZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRoYXNoOiBcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpP2xheW91dD1Ud29Db2x1bW5zTWlkRXhwYW5kZWRcIixcblx0XHRcdFx0ZXhwZWN0ZWRMZW5ndGg6IDEsXG5cdFx0XHRcdG1zZzogXCJSZW1vdmUgMSBvYmplY3Q6IHJlbW92ZSBlbnRyeVwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcImJhY2tcIixcblx0XHRcdFx0c3RlcHM6IDFcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGhhc2g6IFwiXCIsXG5cdFx0XHRcdGV4cGVjdGVkTGVuZ3RoOiAxLFxuXHRcdFx0XHRtc2c6IFwiUmVtb3ZlIGZpcnN0IG9iamVjdDogcmVwbGFjZSBlbnRyeVwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcInJlcGxhY2VcIlxuXHRcdFx0fVxuXHRcdF07XG5cblx0XHRzdGF0ZXMuZm9yRWFjaChmdW5jdGlvbihzdGF0ZSkge1xuXHRcdFx0Y29uc3Qgb0FjdGlvbiA9IHRoYXQub1JvdXRlclByb3h5Ll9wdXNoTmV3U3RhdGUodGhhdC5vUm91dGVyUHJveHkuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHN0YXRlLmhhc2gpKTtcblx0XHRcdGV4cGVjdCh0aGF0Lm9Sb3V0ZXJQcm94eS5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCkudG9FcXVhbChzdGF0ZS5leHBlY3RlZExlbmd0aCk7IC8vICwgc3RhdGUubXNnKTtcblx0XHRcdGV4cGVjdChvQWN0aW9uLnR5cGUpLnRvRXF1YWwoc3RhdGUuYWN0aW9uVHlwZSk7IC8vICk7XG5cdFx0XHRleHBlY3Qob0FjdGlvbi5zdGVwcykudG9FcXVhbChzdGF0ZS5zdGVwcyk7IC8vICk7XG5cdFx0XHR0aGF0LnNQcmVzZW50SGFzaCA9IHN0YXRlLmhhc2g7IC8vIFRvIHNpbXVsYXRlIGFjdHVhbCBuYXZpZ2F0aW9uXG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRlc3QoXCJEZWVwbGluayBuYXZpZ2F0aW9uIDJcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dGhhdC5zUHJlc2VudEhhc2ggPSBcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpP2xheW91dD1UaHJlZUNvbHVtbnNNaWRFeHBhbmRlZFwiO1xuXHRcdHRoYXQub1JvdXRlclByb3h5LmluaXRSYXcodGhhdC5vUm91dGVyKTtcblx0XHRleHBlY3QodGhhdC5vUm91dGVyUHJveHkuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGgpLnRvRXF1YWwoMSk7IC8vICwgXCJTdGFydCB3aXRoIGEgZGVlcCBsaW5rICgyIG9iamVjdHMpXCIpO1xuXG5cdFx0Y29uc3Qgc3RhdGVzID0gW1xuXHRcdFx0e1xuXHRcdFx0XHRoYXNoOiBcIm9iajEoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpP2xheW91dD1Ud29Db2x1bW5zTWlkRXhwYW5kZWRcIixcblx0XHRcdFx0ZXhwZWN0ZWRMZW5ndGg6IDEsXG5cdFx0XHRcdG1zZzogXCJEZWVwbGluayB3aXRoIDEgZGlmZmVyZW50IG9iamVjdDogcmVwbGFjZSBlbnRyeVwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcInJlcGxhY2VcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0aGFzaDogXCJvYmozKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKS9vYmoyKElEPTQ1NixJc0FjdGl2ZUVudGl0eT10cnVlKT9sYXlvdXQ9VGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRcIixcblx0XHRcdFx0ZXhwZWN0ZWRMZW5ndGg6IDEsXG5cdFx0XHRcdG1zZzogXCJEZWVwbGluayB3aXRoIDIgZGlmZmVyZW50IG9iamVjdHM6IHJlcGxhY2UgZW50cnlcIixcblx0XHRcdFx0YWN0aW9uVHlwZTogXCJyZXBsYWNlXCJcblx0XHRcdH1cblx0XHRdO1xuXG5cdFx0c3RhdGVzLmZvckVhY2goZnVuY3Rpb24oc3RhdGU6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0FjdGlvbiA9IHRoYXQub1JvdXRlclByb3h5Ll9wdXNoTmV3U3RhdGUodGhhdC5vUm91dGVyUHJveHkuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHN0YXRlLmhhc2gpKTtcblx0XHRcdGV4cGVjdCh0aGF0Lm9Sb3V0ZXJQcm94eS5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCkudG9FcXVhbChzdGF0ZS5leHBlY3RlZExlbmd0aCk7IC8vICwgc3RhdGUubXNnKTtcblx0XHRcdGV4cGVjdChvQWN0aW9uLnR5cGUpLnRvRXF1YWwoc3RhdGUuYWN0aW9uVHlwZSk7IC8vICk7XG5cdFx0XHRleHBlY3Qob0FjdGlvbi5zdGVwcykudG9FcXVhbChzdGF0ZS5zdGVwcyk7IC8vICk7XG5cdFx0XHR0aGF0LnNQcmVzZW50SGFzaCA9IHN0YXRlLmhhc2g7IC8vIFRvIHNpbXVsYXRlIGFjdHVhbCBuYXZpZ2F0aW9uXG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRlc3QoXCJTaW11bGF0ZSBwYWdlIHJlbG9hZFwiLCBmdW5jdGlvbigpIHtcblx0XHR0aGF0LnNQcmVzZW50SGFzaCA9IFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIjtcblx0XHR0aGF0Lm9Sb3V0ZXJQcm94eS5pbml0UmF3KHRoYXQub1JvdXRlcik7XG5cdFx0ZXhwZWN0KHRoYXQub1JvdXRlclByb3h5Ll9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoKS50b0VxdWFsKDEpOyAvLyAsIFwiUmVsb2FkIG9iamVjdCBwYWdlXCIpO1xuXG5cdFx0dGhhdC5zUHJlc2VudEhhc2ggPSBcIlwiOyAvLyBTaW11bGF0ZSBnbyBiYWNrIHRvIExpc3RSZXBvcnRcblx0XHRjb25zdCBvQWN0aW9uID0gdGhhdC5vUm91dGVyUHJveHkuX3B1c2hOZXdTdGF0ZSh0aGF0Lm9Sb3V0ZXJQcm94eS5fZXh0cmFjdFN0YXRlRnJvbUhhc2goXCJvYmoxKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKVwiKSk7IC8vIEdvIHRvIG9iamVjdCBwYWdlXG5cdFx0ZXhwZWN0KHRoYXQub1JvdXRlclByb3h5Ll9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoKS50b0VxdWFsKDIpOyAvLyAsIFwiUmVjcmVhdGUgaGlzdG9yeSB3aXRoIDIgZW50cmllc1wiKTtcblx0XHRleHBlY3Qob0FjdGlvbi50eXBlKS50b0VxdWFsKFwiYXBwZW5kXCIpOyAvLyApO1xuXHR9KTtcblxuXHR0ZXN0KFwiSGlzdG9yeSBwcmVzZXJ2YXRpb25cIiwgZnVuY3Rpb24oKSB7XG5cdFx0dGhhdC5zUHJlc2VudEhhc2ggPSBcIlwiO1xuXHRcdHRoYXQub1JvdXRlclByb3h5LmluaXRSYXcodGhhdC5vUm91dGVyKTtcblx0XHRleHBlY3QodGhhdC5vUm91dGVyUHJveHkuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGgpLnRvRXF1YWwoMSk7IC8vICwgXCJTdGFydCB3aXRoIDEgZW50cnkgKG5vIG9iamVjdClcIik7XG5cblx0XHRjb25zdCBzdGF0ZXMgPSBbXG5cdFx0XHR7XG5cdFx0XHRcdGhhc2g6IFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIixcblx0XHRcdFx0YlByZXNlcnZlSGlzdG9yeTogZmFsc2UsXG5cdFx0XHRcdGJEaXNhYmxlSGlzdG9yeVByZXNlcnZhdGlvbjogZmFsc2UsXG5cdFx0XHRcdGV4cGVjdGVkTGVuZ3RoOiAyLFxuXHRcdFx0XHRtc2c6IFwiQWRkIGZpcnN0IG9iamVjdDogbmV3IGVudHJ5XCIsXG5cdFx0XHRcdGFjdGlvblR5cGU6IFwiYXBwZW5kXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGhhc2g6IFwib2JqMShJRD00NTYsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIixcblx0XHRcdFx0YlByZXNlcnZlSGlzdG9yeTogdHJ1ZSxcblx0XHRcdFx0YkRpc2FibGVIaXN0b3J5UHJlc2VydmF0aW9uOiBmYWxzZSxcblx0XHRcdFx0ZXhwZWN0ZWRMZW5ndGg6IDMsXG5cdFx0XHRcdG1zZzogXCJBZGQgb2JqZWN0IHdpdGggaGlzdG9yeSBwcmVzZXJ2ZWQ6IG5ldyBlbnRyeVwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcImFwcGVuZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRoYXNoOiBcIm9iajEoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9Nzg5LElzQWN0aXZlRW50aXR5PXRydWUpXCIsXG5cdFx0XHRcdGJQcmVzZXJ2ZUhpc3Rvcnk6IGZhbHNlLFxuXHRcdFx0XHRiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb246IGZhbHNlLFxuXHRcdFx0XHRleHBlY3RlZExlbmd0aDogNCxcblx0XHRcdFx0bXNnOiBcIkFkZCBzdWItb2JqZWN0IDogbmV3IGVudHJ5XCIsXG5cdFx0XHRcdGFjdGlvblR5cGU6IFwiYXBwZW5kXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGhhc2g6IFwib2JqMShJRD0wMTIsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIixcblx0XHRcdFx0YlByZXNlcnZlSGlzdG9yeTogZmFsc2UsXG5cdFx0XHRcdGJEaXNhYmxlSGlzdG9yeVByZXNlcnZhdGlvbjogZmFsc2UsXG5cdFx0XHRcdGV4cGVjdGVkTGVuZ3RoOiAzLFxuXHRcdFx0XHRtc2c6IFwiR28gdG8gbmV3IG9iamVjdCA6IGVudHJ5IHNoYWxsIGJlIHByZXNlcnZlZFwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcImJhY2stcmVwbGFjZVwiLFxuXHRcdFx0XHRzdGVwczogMVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0aGFzaDogXCJvYmoxKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKT9zYXAtaWFwcC1zdGF0ZT1YWVpcIixcblx0XHRcdFx0YlByZXNlcnZlSGlzdG9yeTogZmFsc2UsXG5cdFx0XHRcdGJEaXNhYmxlSGlzdG9yeVByZXNlcnZhdGlvbjogZmFsc2UsXG5cdFx0XHRcdGV4cGVjdGVkTGVuZ3RoOiAyLFxuXHRcdFx0XHRtc2c6IFwiR28gdG8gcHJlc2VydmVkIG9iamVjdCB3aXRoIG5ldyBhcHBzdGF0ZTogcHJlc2VydmVkIGVudHJ5IHNoYWxsIGJlIHJlcGxhY2VkXCIsXG5cdFx0XHRcdGFjdGlvblR5cGU6IFwiYmFjay1yZXBsYWNlXCIsXG5cdFx0XHRcdHN0ZXBzOiAxXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRoYXNoOiBcIm9iajEoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpXCIsXG5cdFx0XHRcdGJQcmVzZXJ2ZUhpc3Rvcnk6IGZhbHNlLFxuXHRcdFx0XHRiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb246IHRydWUsXG5cdFx0XHRcdGV4cGVjdGVkTGVuZ3RoOiAyLFxuXHRcdFx0XHRtc2c6IFwiR28gdG8gbmV3IG9iamVjdCB3aXRoIGhpc3RvcnkgcHJlc2VydmF0aW9uIGRpc2FibGVkOiBwcmVzZXJ2ZWQgZW50cnkgc2hhbGwgYmUgcmVwbGFjZWRcIixcblx0XHRcdFx0YWN0aW9uVHlwZTogXCJyZXBsYWNlXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGhhc2g6IFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIixcblx0XHRcdFx0YlByZXNlcnZlSGlzdG9yeTogdHJ1ZSxcblx0XHRcdFx0YkRpc2FibGVIaXN0b3J5UHJlc2VydmF0aW9uOiBmYWxzZSxcblx0XHRcdFx0ZXhwZWN0ZWRMZW5ndGg6IDMsXG5cdFx0XHRcdG1zZzogXCJBZGQgb2JqZWN0IHdpdGggaGlzdG9yeSBwcmVzZXJ2ZWQ6IG5ldyBlbnRyeVwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcImFwcGVuZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRoYXNoOiBcIlwiLFxuXHRcdFx0XHRiUHJlc2VydmVIaXN0b3J5OiBmYWxzZSxcblx0XHRcdFx0YkRpc2FibGVIaXN0b3J5UHJlc2VydmF0aW9uOiB0cnVlLFxuXHRcdFx0XHRleHBlY3RlZExlbmd0aDogMSxcblx0XHRcdFx0bXNnOiBcIkdvIGJhY2sgaG9tZSB3aXRoIGhpc3RvcnkgcHJlc2VydmF0aW9uIGRpc2FibGVkOiBwcmVzZXJ2ZWQgZW50cnkgc2hhbGwgYmUgcmVtb3ZlZFwiLFxuXHRcdFx0XHRhY3Rpb25UeXBlOiBcImJhY2tcIixcblx0XHRcdFx0c3RlcHM6IDJcblx0XHRcdH1cblx0XHRdO1xuXG5cdFx0c3RhdGVzLmZvckVhY2goZnVuY3Rpb24oc3RhdGUpIHtcblx0XHRcdGNvbnN0IG9BY3Rpb24gPSB0aGF0Lm9Sb3V0ZXJQcm94eS5fcHVzaE5ld1N0YXRlKFxuXHRcdFx0XHR0aGF0Lm9Sb3V0ZXJQcm94eS5fZXh0cmFjdFN0YXRlRnJvbUhhc2goc3RhdGUuaGFzaCksXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRzdGF0ZS5iUHJlc2VydmVIaXN0b3J5LFxuXHRcdFx0XHRzdGF0ZS5iRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb25cblx0XHRcdCk7XG5cdFx0XHRleHBlY3QodGhhdC5vUm91dGVyUHJveHkuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGgpLnRvRXF1YWwoc3RhdGUuZXhwZWN0ZWRMZW5ndGgpOyAvLyAsIHN0YXRlLm1zZztcblx0XHRcdGV4cGVjdChvQWN0aW9uLnR5cGUpLnRvRXF1YWwoc3RhdGUuYWN0aW9uVHlwZSk7IC8vICk7XG5cdFx0XHRleHBlY3Qob0FjdGlvbi5zdGVwcykudG9FcXVhbChzdGF0ZS5zdGVwcyk7IC8vICk7XG5cdFx0XHR0aGF0LnNQcmVzZW50SGFzaCA9IHRoYXQub1JvdXRlclByb3h5Ll9vTWFuYWdlZEhpc3RvcnlbdGhhdC5vUm91dGVyUHJveHkuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxXS5oYXNoOyAvLyBUbyBzaW11bGF0ZSBhY3R1YWwgbmF2aWdhdGlvblxuXHRcdH0pO1xuXHR9KTtcbn0pO1xuZGVzY3JpYmUoXCJUZXN0cyBmb3IgaW1wYWN0IGNoZWNrc1wiLCBmdW5jdGlvbigpIHtcblx0Y29uc3QgdGhhdDogYW55ID0ge307XG5cdGJlZm9yZUVhY2goKCkgPT4ge1xuXHRcdHRoYXQuc1ByZXNlbnRIYXNoID0gXCJcIjtcblx0XHR0aGF0Lm9Sb3V0ZXJQcm94eSA9IG5ldyBSb3V0ZXJQcm94eSgpO1xuXHRcdHRoYXQub1JvdXRlciA9IHtcblx0XHRcdGdldEhhc2hDaGFuZ2VyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRnZXRIYXNoOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnNQcmVzZW50SGFzaDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fTtcblx0fSk7XG5cdGFmdGVyRWFjaCgoKSA9PiB7XG5cdFx0dGhhdC5vUm91dGVyUHJveHkuZGVzdHJveSgpO1xuXHR9KTtcblxuXHR0ZXN0KFwiVGVzdHMgd2l0aCAxIGxldmVsXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHRoYXQuc1ByZXNlbnRIYXNoID0gXCJvYmoxKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKVwiO1xuXHRcdHRoYXQub1JvdXRlclByb3h5LmluaXRSYXcodGhhdC5vUm91dGVyKTtcblxuXHRcdGV4cGVjdCh0aGF0Lm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoXCIvb2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIikpLnRvQmUodHJ1ZSk7IC8vLCBcIlNhbWUgaGFzaCBoYXMgaW1wYWN0XCIpO1xuXHRcdGV4cGVjdCghdGhhdC5vUm91dGVyUHJveHkuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KFwiL29iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PWZhbHNlKVwiKSkudG9CZSh0cnVlKTsgLy9cIlNhbWUgb2JqZWN0IGluIGVkaXRpb24gaGFzIG5vIGltcGFjdFwiXG5cdFx0ZXhwZWN0KCF0aGF0Lm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoXCIvb2JqMShJRD00NTYsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIikpLnRvQmUodHJ1ZSk7IC8vLCBcIkRpZmZlcmVudCBvYmplY3QgaGFzIG5vIGltcGFjdFwiKTtcblx0XHRleHBlY3QoIXRoYXQub1JvdXRlclByb3h5LmlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShcIi9vYmoyKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKVwiKSkudG9CZSh0cnVlKTsgLy8gXCJEaWZmZXJlbnQgb2JqZWN0IHR5cGUgaGFzIG5vIGltcGFjdFwiKTtcblx0fSk7XG5cblx0dGVzdChcIlRlc3RzIHdpdGggMiBsZXZlbFwiLCBmdW5jdGlvbigpIHtcblx0XHR0aGF0LnNQcmVzZW50SGFzaCA9IFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSkvb2JqMihJRD00NTYsSXNBY3RpdmVFbnRpdHk9dHJ1ZSkvb2JqMyhJRD03ODksSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIjtcblx0XHR0aGF0Lm9Sb3V0ZXJQcm94eS5pbml0UmF3KHRoYXQub1JvdXRlcik7XG5cblx0XHRleHBlY3QodGhhdC5vUm91dGVyUHJveHkuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KFwiL29iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpXCIpKS50b0JlKHRydWUpOyAvL1wiUGFyZW50IGhhcyBpbXBhY3RcIlxuXHRcdGV4cGVjdCghdGhhdC5vUm91dGVyUHJveHkuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KFwiL29iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PWZhbHNlKS9vYmoyKElEPTQ1NixJc0FjdGl2ZUVudGl0eT1mYWxzZSlcIikpLnRvQmUoXG5cdFx0XHR0cnVlXG5cdFx0KTsgLy9cIlBhcmVudCBpbiBlZGl0aW9uIGhhcyBubyBpbXBhY3RcIlxuXHRcdGV4cGVjdCh0aGF0Lm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoXCIvb2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIikpLnRvQmUodHJ1ZSk7IC8vLCBcIkdyYW5kLXBhcmVudCBoYXMgaW1wYWN0XCIpO1xuXHRcdGV4cGVjdCghdGhhdC5vUm91dGVyUHJveHkuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KFwiL29iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PWZhbHNlKVwiKSkudG9CZSh0cnVlKTsgLy9cIkdyYW5kLXBhcmVudCBpbiBlZGl0aW9uIGhhcyBubyBpbXBhY3RcIlxuXHRcdGV4cGVjdChcblx0XHRcdCF0aGF0Lm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoXG5cdFx0XHRcdFwiL29iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9Nzg5LElzQWN0aXZlRW50aXR5PXRydWUpL29iajMoSUQ9Nzg5LElzQWN0aXZlRW50aXR5PXRydWUpXCJcblx0XHRcdClcblx0XHQpOyAvL1wiQ2hhbmdpbmcgb2JqZWN0IElEIC0+IG5vIGltcGFjdFwiXG5cdH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiVGVzdHMgZm9yIGd1YXJkIGNoZWNrXCIsIGZ1bmN0aW9uKCkge1xuXHRjb25zdCB0aGF0OiBhbnkgPSB7fTtcblx0YmVmb3JlRWFjaCgoKSA9PiB7XG5cdFx0dGhhdC5zUHJlc2VudEhhc2ggPSBcIlwiO1xuXHRcdHRoYXQub1JvdXRlclByb3h5ID0gbmV3IFJvdXRlclByb3h5KCk7XG5cdFx0dGhhdC5vUm91dGVyID0ge1xuXHRcdFx0Z2V0SGFzaENoYW5nZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGdldEhhc2g6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQuc1ByZXNlbnRIYXNoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9O1xuXHR9KTtcblx0YWZ0ZXJFYWNoKCgpID0+IHtcblx0XHR0aGF0Lm9Sb3V0ZXJQcm94eS5kZXN0cm95KCk7XG5cdH0pO1xuXG5cdHRlc3QoXCJObyBndWFyZCBzZXRcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dGhhdC5zUHJlc2VudEhhc2ggPSBcIlwiO1xuXHRcdHRoYXQub1JvdXRlclByb3h5LmluaXRSYXcodGhhdC5vUm91dGVyKTtcblx0XHRleHBlY3QodGhhdC5vUm91dGVyUHJveHkuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGgpLnRvRXF1YWwoMSk7IC8vICwgXCJTdGFydCB3aXRoIG5vIG9iamVjdFwiKTtcblxuXHRcdHRoYXQub1JvdXRlclByb3h5Ll9wdXNoTmV3U3RhdGUodGhhdC5vUm91dGVyUHJveHkuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKFwib2JqMSgxMjMpP2xheW91dD1Ud29Db2x1bW5zTWlkRXhwYW5kZWRcIikpO1xuXHRcdHRoYXQuc1ByZXNlbnRIYXNoID0gXCJvYmoxKDEyMyk/bGF5b3V0PVR3b0NvbHVtbnNNaWRFeHBhbmRlZFwiO1xuXHRcdGV4cGVjdCh0aGF0Lm9Sb3V0ZXJQcm94eS5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCkudG9FcXVhbCgyKTsgLy8gLCBcIk9QIGluIEZDTCA6IDIgc3RhdGVzXCIpO1xuXG5cdFx0ZXhwZWN0KHRoYXQub1JvdXRlclByb3h5LmNoZWNrSGFzaFdpdGhHdWFyZChcIlwiKSkudG9CZSh0cnVlKTsgLy8gXCJObyBndWFyZFwiKTtcblx0XHRleHBlY3QodGhhdC5vUm91dGVyUHJveHkuY2hlY2tIYXNoV2l0aEd1YXJkKFwib2JqMSgxMjMpP2xheW91dD1Ud29Db2x1bW5zTWlkRXhwYW5kZWRcIikpLnRvQmUodHJ1ZSk7IC8vIFwiTm8gZ3VhcmRcIik7XG5cdFx0ZXhwZWN0KHRoYXQub1JvdXRlclByb3h5LmNoZWNrSGFzaFdpdGhHdWFyZChcIm9iajEoMjM0KT9sYXlvdXQ9VHdvQ29sdW1uc01pZEV4cGFuZGVkXCIpKS50b0JlKHRydWUpOyAvLywgXCJObyBndWFyZFwiKTtcblx0XHRleHBlY3QodGhhdC5vUm91dGVyUHJveHkuY2hlY2tIYXNoV2l0aEd1YXJkKFwib2JqMSgxMjMpP2xheW91dD1NaWRDb2x1bW5GdWxsU2NyZWVuXCIpKS50b0JlKHRydWUpOyAvLywgXCJObyBndWFyZFwiKTtcblx0XHRleHBlY3QodGhhdC5vUm91dGVyUHJveHkuY2hlY2tIYXNoV2l0aEd1YXJkKFwib2JqMSgxMjMpL29iajIoNDU2KT9sYXlvdXQ9VGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRcIikpLnRvQmUodHJ1ZSk7IC8vLCBcIk5vIGd1YXJkXCIpO1xuXHR9KTtcblxuXHR0ZXN0KFwiR3VhcmQgc2V0IG9uIG9iamVjdCBwYWdlIEZDTFwiLCBmdW5jdGlvbigpIHtcblx0XHR0aGF0LnNQcmVzZW50SGFzaCA9IFwiXCI7XG5cdFx0dGhhdC5vUm91dGVyUHJveHkuaW5pdFJhdyh0aGF0Lm9Sb3V0ZXIsIFwiU2FsZXNPcmRlclwiKTtcblx0XHRleHBlY3QodGhhdC5vUm91dGVyUHJveHkuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGgpLnRvRXF1YWwoMSk7IC8vICwgXCJTdGFydCB3aXRoIG5vIG9iamVjdFwiKTtcblxuXHRcdHRoYXQub1JvdXRlclByb3h5Ll9wdXNoTmV3U3RhdGUodGhhdC5vUm91dGVyUHJveHkuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKFwib2JqMSgxMjMpP2xheW91dD1Ud29Db2x1bW5zTWlkRXhwYW5kZWRcIikpO1xuXHRcdHRoYXQuc1ByZXNlbnRIYXNoID0gXCJvYmoxKDEyMyk/bGF5b3V0PVR3b0NvbHVtbnNNaWRFeHBhbmRlZFwiO1xuXHRcdGV4cGVjdCh0aGF0Lm9Sb3V0ZXJQcm94eS5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCkudG9FcXVhbCgyKTsgLy8gLCBcIk9QIGluIEZDTCA6IDIgc3RhdGVzXCIpO1xuXG5cdFx0dGhhdC5vUm91dGVyUHJveHkuc2V0TmF2aWdhdGlvbkd1YXJkKCk7XG5cblx0XHRleHBlY3QoIXRoYXQub1JvdXRlclByb3h5LmNoZWNrSGFzaFdpdGhHdWFyZChcIlwiKSkudG9CZSh0cnVlKTsgLy8sIFwiTGlzdFJlcG9ydCBjcm9zc2VzIGd1YXJkXCIpO1xuXHRcdGV4cGVjdCh0aGF0Lm9Sb3V0ZXJQcm94eS5jaGVja0hhc2hXaXRoR3VhcmQoXCJvYmoxKDEyMyk/bGF5b3V0PVR3b0NvbHVtbnNNaWRFeHBhbmRlZFwiKSkudG9CZSh0cnVlKTsgLy8sIFwiU2FtZSBPUCBkb2Vzbid0IGNyb3NzIGd1YXJkXCIpO1xuXHRcdGV4cGVjdCghdGhhdC5vUm91dGVyUHJveHkuY2hlY2tIYXNoV2l0aEd1YXJkKFwib2JqMSgyMzQpP2xheW91dD1Ud29Db2x1bW5zTWlkRXhwYW5kZWRcIikpLnRvQmUodHJ1ZSk7IC8vLCBcIkRpZmZlcmVudCBPUCBjcm9zc2VzIGd1YXJkXCIpO1xuXHRcdGV4cGVjdCh0aGF0Lm9Sb3V0ZXJQcm94eS5jaGVja0hhc2hXaXRoR3VhcmQoXCJvYmoxKDEyMyk/bGF5b3V0PU1pZENvbHVtbkZ1bGxTY3JlZW5cIikpLnRvQmUodHJ1ZSk7IC8vLCBcIk9QIGluIGZ1bGwgc2NyZWVuIGRvZXNuJ3QgY3Jvc3MgZ3VhcmRcIik7XG5cdFx0ZXhwZWN0KHRoYXQub1JvdXRlclByb3h5LmNoZWNrSGFzaFdpdGhHdWFyZChcIm9iajEoMTIzKS9vYmoyKDQ1Nik/bGF5b3V0PVRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCIpKS50b0JlKHRydWUpOyAvLywgXCJTdWIgT1AgZG9lc24ndCBjcm9zcyBndWFyZFwiKTtcblx0fSk7XG5cblx0dGVzdChcIkd1YXJkIHNldCBvbiBvYmplY3QgcGFnZSBGQ0wgZnVsbHNjcmVlblwiLCBmdW5jdGlvbigpIHtcblx0XHR0aGF0LnNQcmVzZW50SGFzaCA9IFwiXCI7XG5cdFx0dGhhdC5vUm91dGVyUHJveHkuaW5pdFJhdyh0aGF0Lm9Sb3V0ZXIpO1xuXHRcdGV4cGVjdCh0aGF0Lm9Sb3V0ZXJQcm94eS5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCkudG9FcXVhbCgxKTsgLy8gLCBcIlN0YXJ0IHdpdGggbm8gb2JqZWN0XCI7XG5cblx0XHR0aGF0Lm9Sb3V0ZXJQcm94eS5fcHVzaE5ld1N0YXRlKHRoYXQub1JvdXRlclByb3h5Ll9leHRyYWN0U3RhdGVGcm9tSGFzaChcIm9iajEoMTIzKT9sYXlvdXQ9VHdvQ29sdW1uc01pZEV4cGFuZGVkXCIpKTtcblx0XHR0aGF0LnNQcmVzZW50SGFzaCA9IFwib2JqMSgxMjMpP2xheW91dD1Ud29Db2x1bW5zTWlkRXhwYW5kZWRcIjtcblx0XHR0aGF0Lm9Sb3V0ZXJQcm94eS5fcHVzaE5ld1N0YXRlKHRoYXQub1JvdXRlclByb3h5Ll9leHRyYWN0U3RhdGVGcm9tSGFzaChcIm9iajEoMTIzKT9sYXlvdXQ9TWlkQ29sdW1uRnVsbFNjcmVlblwiKSk7XG5cdFx0dGhhdC5zUHJlc2VudEhhc2ggPSBcIm9iajEoMTIzKT9sYXlvdXQ9TWlkQ29sdW1uRnVsbFNjcmVlblwiO1xuXHRcdGV4cGVjdCh0aGF0Lm9Sb3V0ZXJQcm94eS5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCkudG9FcXVhbCgzKTsgLy8gLCBcIk9QIGluIEZDTCBmdWxsc2NyZWVuIDogMyBzdGF0ZXNcIjtcblxuXHRcdHRoYXQub1JvdXRlclByb3h5LnNldE5hdmlnYXRpb25HdWFyZCgpO1xuXG5cdFx0ZXhwZWN0KCF0aGF0Lm9Sb3V0ZXJQcm94eS5jaGVja0hhc2hXaXRoR3VhcmQoXCJcIikpLnRvQmUodHJ1ZSk7IC8vLCBcIkxpc3RSZXBvcnQgY3Jvc3NlcyBndWFyZFwiKTtcblx0XHRleHBlY3QodGhhdC5vUm91dGVyUHJveHkuY2hlY2tIYXNoV2l0aEd1YXJkKFwib2JqMSgxMjMpP2xheW91dD1Ud29Db2x1bW5zTWlkRXhwYW5kZWRcIikpLnRvQmUodHJ1ZSk7IC8vLCBcIk9QIGluIEZDTCBkb2Vzbid0IGNyb3NzIGd1YXJkXCIpO1xuXHRcdGV4cGVjdCghdGhhdC5vUm91dGVyUHJveHkuY2hlY2tIYXNoV2l0aEd1YXJkKFwib2JqMSgyMzQpP2xheW91dD1Ud29Db2x1bW5zTWlkRXhwYW5kZWRcIikpLnRvQmUodHJ1ZSk7IC8vLCBcIkRpZmZlcmVudCBPUCBjcm9zc2VzIGd1YXJkXCIpO1xuXHRcdGV4cGVjdCh0aGF0Lm9Sb3V0ZXJQcm94eS5jaGVja0hhc2hXaXRoR3VhcmQoXCJvYmoxKDEyMyk/bGF5b3V0PU1pZENvbHVtbkZ1bGxTY3JlZW5cIikpLnRvQmUodHJ1ZSk7IC8vLCBcIk9QIGluIGZ1bGwgc2NyZWVuIGRvZXNuJ3QgY3Jvc3MgZ3VhcmRcIik7XG5cdFx0ZXhwZWN0KHRoYXQub1JvdXRlclByb3h5LmNoZWNrSGFzaFdpdGhHdWFyZChcIm9iajEoMTIzKS9vYmoyKDQ1Nik/bGF5b3V0PVRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCIpKS50b0JlKHRydWUpOyAvLywgXCJTdWIgT1AgZG9lc24ndCBjcm9zcyBndWFyZFwiKTtcblx0fSk7XG59KTtcblxuZGVzY3JpYmUoXCJUZXN0cyBmb3IgY2hlY2tJZkJhY2tJc091dE9mR3VhcmRcIiwgZnVuY3Rpb24oKSB7XG5cdGNvbnN0IHRoYXQ6IGFueSA9IHt9O1xuXHRiZWZvcmVFYWNoKCgpID0+IHtcblx0XHR0aGF0LnNQcmVzZW50SGFzaCA9IFwiXCI7XG5cdFx0dGhhdC5vUm91dGVyUHJveHkgPSBuZXcgUm91dGVyUHJveHkoKTtcblx0XHR0aGF0Lm9Sb3V0ZXIgPSB7XG5cdFx0XHRnZXRIYXNoQ2hhbmdlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Z2V0SGFzaDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhhdC5zUHJlc2VudEhhc2g7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH07XG5cdH0pO1xuXHRhZnRlckVhY2goKCkgPT4ge1xuXHRcdHRoYXQub1JvdXRlclByb3h5LmRlc3Ryb3koKTtcblx0fSk7XG5cdHRlc3QoXCJUZXN0IHdoZW4gQmFjayBOYXYgZXhpdHMgR3VhcmRcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dGhhdC5vUm91dGVyUHJveHkuaW5pdFJhdyh0aGF0Lm9Sb3V0ZXIpO1xuXG5cdFx0W1xuXHRcdFx0e1xuXHRcdFx0XHRiRXhwZWN0ZWRWYWx1ZTogZmFsc2UsXG5cdFx0XHRcdHNQcmVzZW50SGFzaDogXCJvYmoxKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKS9vYmoyKElEPTQ1NixJc0FjdGl2ZUVudGl0eT10cnVlKS9vYmozKElEPTc4OSxJc0FjdGl2ZUVudGl0eT10cnVlKVwiLFxuXHRcdFx0XHRhSGFzaFN0YXRlczogW1xuXHRcdFx0XHRcdFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIixcblx0XHRcdFx0XHRcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpXCIsXG5cdFx0XHRcdFx0XCJvYmoxKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKS9vYmoyKElEPTQ1NixJc0FjdGl2ZUVudGl0eT10cnVlKS9vYmozKElEPTc4OSxJc0FjdGl2ZUVudGl0eT10cnVlKVwiXG5cdFx0XHRcdF0sXG5cdFx0XHRcdHNHdWFyZEhhc2g6IFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSkvb2JqMihJRD00NTYsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIixcblx0XHRcdFx0c01lc3NhZ2U6IFwiQmFjayBoYXNoIGFoZWFkIG9mIEd1YXJkXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGJFeHBlY3RlZFZhbHVlOiB0cnVlLFxuXHRcdFx0XHRzUHJlc2VudEhhc2g6IFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSkvb2JqMihJRD00NTYsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIixcblx0XHRcdFx0YUhhc2hTdGF0ZXM6IFtcblx0XHRcdFx0XHRcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpXCIsXG5cdFx0XHRcdFx0XCJvYmoxKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKS9vYmoyKElEPTQ1NixJc0FjdGl2ZUVudGl0eT10cnVlKVwiLFxuXHRcdFx0XHRcdFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSkvb2JqMihJRD00NTYsSXNBY3RpdmVFbnRpdHk9dHJ1ZSkvb2JqMyhJRD03ODksSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIlxuXHRcdFx0XHRdLFxuXHRcdFx0XHRzR3VhcmRIYXNoOiBcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpXCIsXG5cdFx0XHRcdHNNZXNzYWdlOiBcIkJhY2sgaGFzaCBleGl0cyBvZiBHdWFyZFwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRiRXhwZWN0ZWRWYWx1ZTogdHJ1ZSxcblx0XHRcdFx0c1ByZXNlbnRIYXNoOiBcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpXCIsXG5cdFx0XHRcdGFIYXNoU3RhdGVzOiBbXG5cdFx0XHRcdFx0XCJvYmoxKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKVwiLFxuXHRcdFx0XHRcdFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSkvb2JqMihJRD00NTYsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIixcblx0XHRcdFx0XHRcIm9iajEoSUQ9MTIzLElzQWN0aXZlRW50aXR5PXRydWUpL29iajIoSUQ9NDU2LElzQWN0aXZlRW50aXR5PXRydWUpL29iajMoSUQ9Nzg5LElzQWN0aXZlRW50aXR5PXRydWUpXCJcblx0XHRcdFx0XSxcblx0XHRcdFx0c01lc3NhZ2U6IFwiQmFjayBoYXNoIHdpdGhvdXQgR3VhcmRcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0YkV4cGVjdGVkVmFsdWU6IHRydWUsXG5cdFx0XHRcdHNQcmVzZW50SGFzaDogXCJvYmoxKElEPTEyMyxJc0FjdGl2ZUVudGl0eT10cnVlKVwiLFxuXHRcdFx0XHRhSGFzaFN0YXRlczogW1wib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIl0sXG5cdFx0XHRcdHNHdWFyZEhhc2g6IFwib2JqMShJRD0xMjMsSXNBY3RpdmVFbnRpdHk9dHJ1ZSlcIixcblx0XHRcdFx0c01lc3NhZ2U6IFwiTm8gQmFjayBoYXNoIHdpdGggR3VhcmRcIlxuXHRcdFx0fVxuXHRcdF0uZm9yRWFjaChmdW5jdGlvbihvVGVzdERhdGEpIHtcblx0XHRcdG9UZXN0RGF0YS5hSGFzaFN0YXRlcy5mb3JFYWNoKGZ1bmN0aW9uKHNIYXNoKSB7XG5cdFx0XHRcdGNvbnN0IG9TdGF0ZSA9IHRoYXQub1JvdXRlclByb3h5Ll9leHRyYWN0U3RhdGVGcm9tSGFzaChzSGFzaCk7XG5cdFx0XHRcdHRoYXQub1JvdXRlclByb3h5Ll9wdXNoTmV3U3RhdGUob1N0YXRlKTtcblx0XHRcdFx0dGhhdC5zUHJlc2VudEhhc2ggPSBzSGFzaDtcblx0XHRcdFx0aWYgKHNIYXNoID09PSBvVGVzdERhdGEuc0d1YXJkSGFzaCkge1xuXHRcdFx0XHRcdHRoYXQub1JvdXRlclByb3h5LnNldE5hdmlnYXRpb25HdWFyZChvU3RhdGUuaGFzaCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0dGhhdC5zUHJlc2VudEhhc2ggPSBvVGVzdERhdGEuc1ByZXNlbnRIYXNoO1xuXHRcdFx0ZXhwZWN0KHRoYXQub1JvdXRlclByb3h5LmNoZWNrSWZCYWNrSXNPdXRPZkd1YXJkKHRoYXQuc1ByZXNlbnRIYXNoKSkudG9FcXVhbChvVGVzdERhdGEuYkV4cGVjdGVkVmFsdWUpOyAvLyAsXG5cdFx0XHRcIlRlc3QgZm9yIFwiICsgb1Rlc3REYXRhLnNNZXNzYWdlO1xuXHRcdH0pO1xuXHR9KTtcbn0pO1xuIl19