@grafana/scenes 6.7.0 → 6.8.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 (331) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/esm/components/layout/CSSGrid/SceneCSSGridItem.js +33 -0
  3. package/dist/esm/dist/esm/behaviors/CursorSync.js +76 -0
  4. package/dist/esm/dist/esm/behaviors/LiveNowTimer.js +44 -0
  5. package/dist/esm/dist/esm/behaviors/SceneQueryController.js +14 -0
  6. package/dist/esm/dist/esm/components/EmbeddedScene.js +59 -0
  7. package/dist/esm/dist/esm/components/NestedScene.js +95 -0
  8. package/dist/esm/dist/esm/components/SceneApp/SceneApp.js +27 -0
  9. package/dist/esm/dist/esm/components/SceneApp/SceneAppPage.js +176 -0
  10. package/dist/esm/dist/esm/components/SceneApp/SceneAppPageView.js +104 -0
  11. package/dist/esm/dist/esm/components/SceneApp/utils.js +42 -0
  12. package/dist/esm/dist/esm/components/SceneByFrameRepeater.js +41 -0
  13. package/dist/esm/dist/esm/components/SceneByVariableRepeater.js +55 -0
  14. package/dist/esm/dist/esm/components/SceneCanvasText.js +32 -0
  15. package/dist/esm/dist/esm/components/SceneControlsSpacer.js +17 -0
  16. package/dist/esm/dist/esm/components/SceneDebugger/DebugDetails.js +82 -0
  17. package/dist/esm/dist/esm/components/SceneDebugger/DebugTreeNode.js +72 -0
  18. package/dist/esm/dist/esm/components/SceneDebugger/SceneDebugger.js +77 -0
  19. package/dist/esm/dist/esm/components/SceneReactObject.js +34 -0
  20. package/dist/esm/dist/esm/components/SceneRefreshPicker.js +205 -0
  21. package/dist/esm/dist/esm/components/SceneTimePicker.js +139 -0
  22. package/dist/esm/dist/esm/components/SceneTimeRangeCompare.js +240 -0
  23. package/dist/esm/dist/esm/components/SceneToolbarButton.js +33 -0
  24. package/dist/esm/dist/esm/components/VizPanel/VizPanel.js +406 -0
  25. package/dist/esm/dist/esm/components/VizPanel/VizPanelExploreButton.js +44 -0
  26. package/dist/esm/dist/esm/components/VizPanel/VizPanelMenu.js +59 -0
  27. package/dist/esm/dist/esm/components/VizPanel/VizPanelRenderer.js +285 -0
  28. package/dist/esm/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +45 -0
  29. package/dist/esm/dist/esm/components/VizPanel/colorSeriesConfigFactory.js +72 -0
  30. package/dist/esm/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js +11 -0
  31. package/dist/esm/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
  32. package/dist/esm/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
  33. package/dist/esm/dist/esm/components/layout/LazyLoader.js +103 -0
  34. package/dist/esm/dist/esm/components/layout/SceneFlexLayout.js +135 -0
  35. package/dist/esm/dist/esm/components/layout/grid/SceneGridItem.js +30 -0
  36. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayout.js +283 -0
  37. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
  38. package/dist/esm/dist/esm/components/layout/grid/SceneGridRow.js +190 -0
  39. package/dist/esm/dist/esm/components/layout/grid/constants.js +7 -0
  40. package/dist/esm/dist/esm/components/layout/grid/utils.js +36 -0
  41. package/dist/esm/dist/esm/components/layout/split/SplitLayout.js +17 -0
  42. package/dist/esm/dist/esm/components/layout/split/SplitLayoutRenderer.js +29 -0
  43. package/dist/esm/dist/esm/components/layout/split/Splitter.js +386 -0
  44. package/dist/esm/dist/esm/core/SceneComponentWrapper.js +57 -0
  45. package/dist/esm/dist/esm/core/SceneDataNode.js +43 -0
  46. package/dist/esm/dist/esm/core/SceneObjectBase.js +286 -0
  47. package/dist/esm/dist/esm/core/SceneObjectRef.js +32 -0
  48. package/dist/esm/dist/esm/core/SceneTimeRange.js +231 -0
  49. package/dist/esm/dist/esm/core/events.js +11 -0
  50. package/dist/esm/dist/esm/core/sceneGraph/getTimeRange.js +10 -0
  51. package/dist/esm/dist/esm/core/sceneGraph/index.js +25 -0
  52. package/dist/esm/dist/esm/core/sceneGraph/sceneGraph.js +178 -0
  53. package/dist/esm/dist/esm/core/sceneGraph/utils.js +64 -0
  54. package/dist/esm/dist/esm/core/types.js +15 -0
  55. package/dist/esm/dist/esm/querying/DataLayersMerger.js +46 -0
  56. package/dist/esm/dist/esm/querying/ExtraQueryProvider.js +6 -0
  57. package/dist/esm/dist/esm/querying/RuntimeDataSource.js +6 -0
  58. package/dist/esm/dist/esm/querying/SceneDataLayerSet.js +100 -0
  59. package/dist/esm/dist/esm/querying/SceneQueryRunner.js +468 -0
  60. package/dist/esm/dist/esm/querying/extraQueryProcessingOperator.js +46 -0
  61. package/dist/esm/dist/esm/querying/getEnrichedDataRequest.js +12 -0
  62. package/dist/esm/dist/esm/querying/layers/SceneDataLayerBase.js +112 -0
  63. package/dist/esm/dist/esm/querying/layers/SceneDataLayerControls.js +51 -0
  64. package/dist/esm/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
  65. package/dist/esm/dist/esm/querying/layers/annotations/filterAnnotations.js +85 -0
  66. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +121 -0
  67. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
  68. package/dist/esm/dist/esm/querying/layers/annotations/utils.js +77 -0
  69. package/dist/esm/dist/esm/querying/registerQueryWithController.js +41 -0
  70. package/dist/esm/dist/esm/services/SceneObjectUrlSyncConfig.js +30 -0
  71. package/dist/esm/dist/esm/services/UniqueUrlKeyMapper.js +45 -0
  72. package/dist/esm/dist/esm/services/UrlSyncManager.js +167 -0
  73. package/dist/esm/dist/esm/services/useUrlSync.js +29 -0
  74. package/dist/esm/dist/esm/services/utils.js +71 -0
  75. package/dist/esm/dist/esm/utils/ControlsLabel.js +107 -0
  76. package/dist/esm/dist/esm/utils/LoadingIndicator.js +19 -0
  77. package/dist/esm/dist/esm/utils/SafeSerializableSceneObject.js +39 -0
  78. package/dist/esm/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
  79. package/dist/esm/dist/esm/utils/date.js +15 -0
  80. package/dist/esm/dist/esm/utils/evaluateTimeRange.js +16 -0
  81. package/dist/esm/dist/esm/utils/explore.js +47 -0
  82. package/dist/esm/dist/esm/utils/getCompareSeriesRefId.js +4 -0
  83. package/dist/esm/dist/esm/utils/getDataSource.js +18 -0
  84. package/dist/esm/dist/esm/utils/getMessageFromError.js +24 -0
  85. package/dist/esm/dist/esm/utils/metricTree.js +53 -0
  86. package/dist/esm/dist/esm/utils/parseUrlParam.js +41 -0
  87. package/dist/esm/dist/esm/utils/utils.js +11 -0
  88. package/dist/esm/dist/esm/utils/wrapInSafeSerializableSceneObject.js +30 -0
  89. package/dist/esm/dist/esm/utils/writeSceneLog.js +12 -0
  90. package/dist/esm/dist/esm/variables/VariableDependencyConfig.js +150 -0
  91. package/dist/esm/dist/esm/variables/VariableValueRecorder.js +71 -0
  92. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterBuilder.js +24 -0
  93. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterRenderer.js +303 -0
  94. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
  95. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
  96. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
  97. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
  98. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
  99. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
  100. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
  101. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
  102. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariable.js +289 -0
  103. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
  104. package/dist/esm/dist/esm/variables/adhoc/getAdhocOptionSearcher.js +13 -0
  105. package/dist/esm/dist/esm/variables/adhoc/patchGetAdhocFilters.js +47 -0
  106. package/dist/esm/dist/esm/variables/components/VariableValueControl.js +23 -0
  107. package/dist/esm/dist/esm/variables/components/VariableValueInput.js +33 -0
  108. package/dist/esm/dist/esm/variables/components/VariableValueSelect.js +228 -0
  109. package/dist/esm/dist/esm/variables/components/VariableValueSelectors.js +72 -0
  110. package/dist/esm/dist/esm/variables/components/getOptionSearcher.js +15 -0
  111. package/dist/esm/dist/esm/variables/constants.js +9 -0
  112. package/dist/esm/dist/esm/variables/getEnrichedFiltersRequest.js +12 -0
  113. package/dist/esm/dist/esm/variables/groupby/GroupByVariable.js +259 -0
  114. package/dist/esm/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
  115. package/dist/esm/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
  116. package/dist/esm/dist/esm/variables/interpolation/ScopedVarsVariable.js +40 -0
  117. package/dist/esm/dist/esm/variables/interpolation/defaults.js +21 -0
  118. package/dist/esm/dist/esm/variables/interpolation/fieldAccessorCache.js +13 -0
  119. package/dist/esm/dist/esm/variables/interpolation/formatRegistry.js +296 -0
  120. package/dist/esm/dist/esm/variables/interpolation/sceneInterpolator.js +87 -0
  121. package/dist/esm/dist/esm/variables/lookupVariable.js +20 -0
  122. package/dist/esm/dist/esm/variables/macros/AllVariablesMacro.js +57 -0
  123. package/dist/esm/dist/esm/variables/macros/contextMacros.js +43 -0
  124. package/dist/esm/dist/esm/variables/macros/dataMacros.js +134 -0
  125. package/dist/esm/dist/esm/variables/macros/index.js +26 -0
  126. package/dist/esm/dist/esm/variables/macros/templateProxies.js +51 -0
  127. package/dist/esm/dist/esm/variables/macros/timeMacros.js +86 -0
  128. package/dist/esm/dist/esm/variables/macros/types.js +11 -0
  129. package/dist/esm/dist/esm/variables/macros/urlMacros.js +56 -0
  130. package/dist/esm/dist/esm/variables/sets/SceneVariableSet.js +254 -0
  131. package/dist/esm/dist/esm/variables/types.js +11 -0
  132. package/dist/esm/dist/esm/variables/utils.js +172 -0
  133. package/dist/esm/dist/esm/variables/variants/ConstantVariable.js +38 -0
  134. package/dist/esm/dist/esm/variables/variants/CustomVariable.js +60 -0
  135. package/dist/esm/dist/esm/variables/variants/DataSourceVariable.js +88 -0
  136. package/dist/esm/dist/esm/variables/variants/IntervalVariable.js +117 -0
  137. package/dist/esm/dist/esm/variables/variants/MultiValueVariable.js +295 -0
  138. package/dist/esm/dist/esm/variables/variants/TestVariable.js +117 -0
  139. package/dist/esm/dist/esm/variables/variants/TextBoxVariable.js +61 -0
  140. package/dist/esm/dist/esm/variables/variants/query/QueryVariable.js +139 -0
  141. package/dist/esm/dist/esm/variables/variants/query/createQueryVariableRunner.js +129 -0
  142. package/dist/esm/dist/esm/variables/variants/query/guards.js +28 -0
  143. package/dist/esm/dist/esm/variables/variants/query/toMetricFindValues.js +96 -0
  144. package/dist/esm/dist/esm/variables/variants/query/utils.js +124 -0
  145. package/dist/esm/index.js +1 -1
  146. package/dist/esm/index.js.map +1 -1
  147. package/dist/esm/querying/DataProviderSharer.js +39 -0
  148. package/dist/esm/src/behaviors/ActWhenVariableChanged.js +27 -0
  149. package/dist/esm/src/behaviors/CursorSync.js +76 -0
  150. package/dist/esm/src/behaviors/LiveNowTimer.js +44 -0
  151. package/dist/esm/src/behaviors/SceneQueryController.js +60 -0
  152. package/dist/esm/src/behaviors/index.js +5 -0
  153. package/dist/esm/src/components/EmbeddedScene.js +59 -0
  154. package/dist/esm/src/components/NestedScene.js +95 -0
  155. package/dist/esm/src/components/SceneApp/SceneApp.js +37 -0
  156. package/dist/esm/src/components/SceneApp/SceneAppPage.js +176 -0
  157. package/dist/esm/src/components/SceneApp/SceneAppPageView.js +104 -0
  158. package/dist/esm/src/components/SceneApp/utils.js +42 -0
  159. package/dist/esm/src/components/SceneByFrameRepeater.js +41 -0
  160. package/dist/esm/src/components/SceneByVariableRepeater.js +55 -0
  161. package/dist/esm/src/components/SceneCanvasText.js +32 -0
  162. package/dist/esm/src/components/SceneControlsSpacer.js +17 -0
  163. package/dist/esm/src/components/SceneDebugger/DebugDetails.js +82 -0
  164. package/dist/esm/src/components/SceneDebugger/DebugTreeNode.js +72 -0
  165. package/dist/esm/src/components/SceneDebugger/SceneDebugger.js +77 -0
  166. package/dist/esm/src/components/SceneReactObject.js +34 -0
  167. package/dist/esm/src/components/SceneRefreshPicker.js +205 -0
  168. package/dist/esm/src/components/SceneTimePicker.js +139 -0
  169. package/dist/esm/src/components/SceneTimeRangeCompare.js +240 -0
  170. package/dist/esm/src/components/SceneToolbarButton.js +33 -0
  171. package/dist/esm/src/components/VizPanel/VizPanel.js +406 -0
  172. package/dist/esm/src/components/VizPanel/VizPanelExploreButton.js +44 -0
  173. package/dist/esm/src/components/VizPanel/VizPanelMenu.js +59 -0
  174. package/dist/esm/src/components/VizPanel/VizPanelRenderer.js +285 -0
  175. package/dist/esm/src/components/VizPanel/VizPanelSeriesLimit.js +45 -0
  176. package/dist/esm/src/components/VizPanel/colorSeriesConfigFactory.js +72 -0
  177. package/dist/esm/src/components/VizPanel/registerRuntimePanelPlugin.js +56 -0
  178. package/dist/esm/src/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
  179. package/dist/esm/src/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
  180. package/dist/esm/src/components/layout/LazyLoader.js +103 -0
  181. package/dist/esm/src/components/layout/SceneFlexLayout.js +135 -0
  182. package/dist/esm/src/components/layout/grid/SceneGridItem.js +30 -0
  183. package/dist/esm/src/components/layout/grid/SceneGridLayout.js +283 -0
  184. package/dist/esm/src/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
  185. package/dist/esm/src/components/layout/grid/SceneGridRow.js +190 -0
  186. package/dist/esm/src/components/layout/grid/constants.js +7 -0
  187. package/dist/esm/src/components/layout/grid/utils.js +36 -0
  188. package/dist/esm/src/components/layout/split/SplitLayout.js +17 -0
  189. package/dist/esm/src/components/layout/split/SplitLayoutRenderer.js +29 -0
  190. package/dist/esm/src/components/layout/split/Splitter.js +386 -0
  191. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilder.js +100 -0
  192. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilders.js +75 -0
  193. package/dist/esm/src/core/PanelBuilders/FieldConfigOverridesBuilder.js +75 -0
  194. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilder.js +22 -0
  195. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilders.js +85 -0
  196. package/dist/esm/src/core/PanelBuilders/StandardFieldConfigBuilders.js +52 -0
  197. package/dist/esm/src/core/PanelBuilders/VizConfigBuilder.js +78 -0
  198. package/dist/esm/src/core/PanelBuilders/VizConfigBuilders.js +114 -0
  199. package/dist/esm/src/core/PanelBuilders/VizPanelBuilder.js +162 -0
  200. package/dist/esm/src/core/PanelBuilders/index.js +116 -0
  201. package/dist/esm/src/core/SceneComponentWrapper.js +57 -0
  202. package/dist/esm/src/core/SceneDataNode.js +43 -0
  203. package/dist/esm/src/core/SceneObjectBase.js +286 -0
  204. package/dist/esm/src/core/SceneObjectRef.js +32 -0
  205. package/dist/esm/src/core/SceneTimeRange.js +231 -0
  206. package/dist/esm/src/core/SceneTimeRangeTransformerBase.js +35 -0
  207. package/dist/esm/src/core/SceneTimeZoneOverride.js +63 -0
  208. package/dist/esm/src/core/events.js +11 -0
  209. package/dist/esm/src/core/sceneGraph/getTimeRange.js +10 -0
  210. package/dist/esm/src/core/sceneGraph/index.js +25 -0
  211. package/dist/esm/src/core/sceneGraph/sceneGraph.js +178 -0
  212. package/dist/esm/src/core/sceneGraph/utils.js +64 -0
  213. package/dist/esm/src/core/types.js +15 -0
  214. package/dist/esm/src/index.js +108 -0
  215. package/dist/esm/src/querying/DataLayersMerger.js +46 -0
  216. package/dist/esm/src/querying/DataProviderProxy.js +37 -0
  217. package/dist/esm/src/querying/DataProviderSharer.js +108 -0
  218. package/dist/esm/src/querying/ExtraQueryProvider.js +6 -0
  219. package/dist/esm/src/querying/RuntimeDataSource.js +49 -0
  220. package/dist/esm/src/querying/SceneDataLayerSet.js +100 -0
  221. package/dist/esm/src/querying/SceneDataTransformer.js +178 -0
  222. package/dist/esm/src/querying/SceneQueryRunner.js +468 -0
  223. package/dist/esm/src/querying/extraQueryProcessingOperator.js +46 -0
  224. package/dist/esm/src/querying/getEnrichedDataRequest.js +12 -0
  225. package/dist/esm/src/querying/layers/SceneDataLayerBase.js +112 -0
  226. package/dist/esm/src/querying/layers/SceneDataLayerControls.js +51 -0
  227. package/dist/esm/src/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
  228. package/dist/esm/src/querying/layers/annotations/filterAnnotations.js +85 -0
  229. package/dist/esm/src/querying/layers/annotations/standardAnnotationQuery.js +121 -0
  230. package/dist/esm/src/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
  231. package/dist/esm/src/querying/layers/annotations/utils.js +77 -0
  232. package/dist/esm/src/querying/layers/index.js +2 -0
  233. package/dist/esm/src/querying/registerQueryWithController.js +41 -0
  234. package/dist/esm/src/services/SceneObjectUrlSyncConfig.js +30 -0
  235. package/dist/esm/src/services/UniqueUrlKeyMapper.js +45 -0
  236. package/dist/esm/src/services/UrlSyncContextProvider.js +17 -0
  237. package/dist/esm/src/services/UrlSyncManager.js +167 -0
  238. package/dist/esm/src/services/useUrlSync.js +29 -0
  239. package/dist/esm/src/services/utils.js +75 -0
  240. package/dist/esm/src/utils/ControlsLabel.js +107 -0
  241. package/dist/esm/src/utils/LoadingIndicator.js +19 -0
  242. package/dist/esm/src/utils/SafeSerializableSceneObject.js +39 -0
  243. package/dist/esm/src/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
  244. package/dist/esm/src/utils/date.js +15 -0
  245. package/dist/esm/src/utils/evaluateTimeRange.js +16 -0
  246. package/dist/esm/src/utils/explore.js +47 -0
  247. package/dist/esm/src/utils/getCompareSeriesRefId.js +4 -0
  248. package/dist/esm/src/utils/getDataSource.js +18 -0
  249. package/dist/esm/src/utils/getMessageFromError.js +24 -0
  250. package/dist/esm/src/utils/metricTree.js +53 -0
  251. package/dist/esm/src/utils/parseUrlParam.js +41 -0
  252. package/dist/esm/src/utils/utils.js +11 -0
  253. package/dist/esm/src/utils/wrapInSafeSerializableSceneObject.js +30 -0
  254. package/dist/esm/src/utils/writeSceneLog.js +12 -0
  255. package/dist/esm/src/variables/VariableDependencyConfig.js +150 -0
  256. package/dist/esm/src/variables/VariableValueRecorder.js +71 -0
  257. package/dist/esm/src/variables/adhoc/AdHocFilterBuilder.js +24 -0
  258. package/dist/esm/src/variables/adhoc/AdHocFilterRenderer.js +303 -0
  259. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
  260. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
  261. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
  262. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
  263. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
  264. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
  265. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
  266. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
  267. package/dist/esm/src/variables/adhoc/AdHocFiltersVariable.js +289 -0
  268. package/dist/esm/src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
  269. package/dist/esm/src/variables/adhoc/getAdhocOptionSearcher.js +13 -0
  270. package/dist/esm/src/variables/adhoc/patchGetAdhocFilters.js +47 -0
  271. package/dist/esm/src/variables/components/VariableValueControl.js +23 -0
  272. package/dist/esm/src/variables/components/VariableValueInput.js +33 -0
  273. package/dist/esm/src/variables/components/VariableValueSelect.js +228 -0
  274. package/dist/esm/src/variables/components/VariableValueSelectors.js +72 -0
  275. package/dist/esm/src/variables/components/getOptionSearcher.js +15 -0
  276. package/dist/esm/src/variables/constants.js +9 -0
  277. package/dist/esm/src/variables/getEnrichedFiltersRequest.js +12 -0
  278. package/dist/esm/src/variables/groupby/GroupByVariable.js +259 -0
  279. package/dist/esm/src/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
  280. package/dist/esm/src/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
  281. package/dist/esm/src/variables/interpolation/ScopedVarsVariable.js +40 -0
  282. package/dist/esm/src/variables/interpolation/defaults.js +21 -0
  283. package/dist/esm/src/variables/interpolation/fieldAccessorCache.js +13 -0
  284. package/dist/esm/src/variables/interpolation/formatRegistry.js +296 -0
  285. package/dist/esm/src/variables/interpolation/sceneInterpolator.js +87 -0
  286. package/dist/esm/src/variables/lookupVariable.js +20 -0
  287. package/dist/esm/src/variables/macros/AllVariablesMacro.js +57 -0
  288. package/dist/esm/src/variables/macros/contextMacros.js +43 -0
  289. package/dist/esm/src/variables/macros/dataMacros.js +134 -0
  290. package/dist/esm/src/variables/macros/index.js +35 -0
  291. package/dist/esm/src/variables/macros/templateProxies.js +51 -0
  292. package/dist/esm/src/variables/macros/timeMacros.js +86 -0
  293. package/dist/esm/src/variables/macros/types.js +11 -0
  294. package/dist/esm/src/variables/macros/urlMacros.js +56 -0
  295. package/dist/esm/src/variables/sets/SceneVariableSet.js +254 -0
  296. package/dist/esm/src/variables/types.js +11 -0
  297. package/dist/esm/src/variables/utils.js +172 -0
  298. package/dist/esm/src/variables/variants/ConstantVariable.js +38 -0
  299. package/dist/esm/src/variables/variants/CustomVariable.js +60 -0
  300. package/dist/esm/src/variables/variants/DataSourceVariable.js +88 -0
  301. package/dist/esm/src/variables/variants/IntervalVariable.js +117 -0
  302. package/dist/esm/src/variables/variants/JsonVariable.js +193 -0
  303. package/dist/esm/src/variables/variants/LocalValueVariable.js +56 -0
  304. package/dist/esm/src/variables/variants/MultiValueVariable.js +295 -0
  305. package/dist/esm/src/variables/variants/TestVariable.js +117 -0
  306. package/dist/esm/src/variables/variants/TextBoxVariable.js +61 -0
  307. package/dist/esm/src/variables/variants/guards.js +27 -0
  308. package/dist/esm/src/variables/variants/query/QueryVariable.js +139 -0
  309. package/dist/esm/src/variables/variants/query/createQueryVariableRunner.js +129 -0
  310. package/dist/esm/src/variables/variants/query/guards.js +28 -0
  311. package/dist/esm/src/variables/variants/query/toMetricFindValues.js +96 -0
  312. package/dist/esm/src/variables/variants/query/utils.js +124 -0
  313. package/dist/esm/variables/components/VariableValueSelect.js +13 -9
  314. package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
  315. package/dist/esm/variables/variants/ConstantVariable.js +22 -0
  316. package/dist/esm/variables/variants/ConstantVariable.js.map +1 -1
  317. package/dist/esm/variables/variants/CustomVariable.js +3 -2
  318. package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
  319. package/dist/esm/variables/variants/DataSourceVariable.js +3 -2
  320. package/dist/esm/variables/variants/DataSourceVariable.js.map +1 -1
  321. package/dist/esm/variables/variants/JsonVariable.js +96 -0
  322. package/dist/esm/variables/variants/TestVariable.js +3 -2
  323. package/dist/esm/variables/variants/TestVariable.js.map +1 -1
  324. package/dist/esm/variables/variants/json/JsonVariable.js +95 -0
  325. package/dist/esm/variables/variants/json/JsonVariableOptionProviders.js +70 -0
  326. package/dist/esm/variables/variants/query/QueryVariable.js +3 -2
  327. package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
  328. package/dist/index.d.ts +14 -6
  329. package/dist/index.js +35 -13
  330. package/dist/index.js.map +1 -1
  331. package/package.json +2 -2
@@ -0,0 +1,117 @@
1
+ import { Subject, Observable } from 'rxjs';
2
+ import { sceneGraph } from '../../core/sceneGraph/index.js';
3
+ import { queryMetricTree } from '../../utils/metricTree.js';
4
+ import { VariableDependencyConfig } from '../VariableDependencyConfig.js';
5
+ import { renderSelectForVariable } from '../components/VariableValueSelect.js';
6
+ import { MultiValueVariable } from './MultiValueVariable.js';
7
+ import { VariableRefresh } from '@grafana/data';
8
+ import { getClosest } from '../../core/sceneGraph/utils.js';
9
+ import { SceneVariableSet } from '../sets/SceneVariableSet.js';
10
+
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
15
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
16
+ var __spreadValues = (a, b) => {
17
+ for (var prop in b || (b = {}))
18
+ if (__hasOwnProp.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ if (__getOwnPropSymbols)
21
+ for (var prop of __getOwnPropSymbols(b)) {
22
+ if (__propIsEnum.call(b, prop))
23
+ __defNormalProp(a, prop, b[prop]);
24
+ }
25
+ return a;
26
+ };
27
+ class TestVariable extends MultiValueVariable {
28
+ constructor(initialState, isLazy = false) {
29
+ super(__spreadValues({
30
+ type: "custom",
31
+ name: "Test",
32
+ value: "Value",
33
+ text: "Text",
34
+ query: "Query",
35
+ options: [],
36
+ refresh: VariableRefresh.onDashboardLoad,
37
+ updateOptions: true
38
+ }, initialState));
39
+ this.completeUpdate = new Subject();
40
+ this.isGettingValues = true;
41
+ this.getValueOptionsCount = 0;
42
+ this.isLazy = false;
43
+ this._variableDependency = new VariableDependencyConfig(this, {
44
+ statePaths: ["query"]
45
+ });
46
+ this.isLazy = isLazy;
47
+ }
48
+ getValueOptions(args) {
49
+ const { delayMs } = this.state;
50
+ this.getValueOptionsCount += 1;
51
+ const queryController = sceneGraph.getQueryController(this);
52
+ return new Observable((observer) => {
53
+ const queryEntry = {
54
+ type: "variable",
55
+ origin: this,
56
+ cancel: () => observer.complete()
57
+ };
58
+ if (queryController) {
59
+ queryController.queryStarted(queryEntry);
60
+ }
61
+ this.setState({ loading: true });
62
+ if (this.state.throwError) {
63
+ throw new Error(this.state.throwError);
64
+ }
65
+ const interpolatedQuery = sceneGraph.interpolate(this, this.state.query);
66
+ const options = this.getOptions(interpolatedQuery);
67
+ const sub = this.completeUpdate.subscribe({
68
+ next: () => {
69
+ const newState = { issuedQuery: interpolatedQuery, loading: false };
70
+ if (this.state.updateOptions) {
71
+ newState.options = options;
72
+ }
73
+ this.setState(newState);
74
+ observer.next(options);
75
+ observer.complete();
76
+ }
77
+ });
78
+ let timeout;
79
+ if (delayMs) {
80
+ timeout = window.setTimeout(() => this.signalUpdateCompleted(), delayMs);
81
+ } else if (delayMs === 0) {
82
+ this.signalUpdateCompleted();
83
+ }
84
+ this.isGettingValues = true;
85
+ return () => {
86
+ sub.unsubscribe();
87
+ window.clearTimeout(timeout);
88
+ this.isGettingValues = false;
89
+ if (this.state.loading) {
90
+ this.setState({ loading: false });
91
+ }
92
+ if (queryController) {
93
+ queryController.queryCompleted(queryEntry);
94
+ }
95
+ };
96
+ });
97
+ }
98
+ cancel() {
99
+ const sceneVarSet = getClosest(this, (s) => s instanceof SceneVariableSet ? s : void 0);
100
+ sceneVarSet == null ? void 0 : sceneVarSet.cancel(this);
101
+ }
102
+ getOptions(interpolatedQuery) {
103
+ if (this.state.optionsToReturn) {
104
+ return this.state.optionsToReturn;
105
+ }
106
+ return queryMetricTree(interpolatedQuery).map((x) => ({ label: x.name, value: x.name }));
107
+ }
108
+ signalUpdateCompleted() {
109
+ this.completeUpdate.next(1);
110
+ }
111
+ }
112
+ TestVariable.Component = ({ model }) => {
113
+ return renderSelectForVariable(model);
114
+ };
115
+
116
+ export { TestVariable };
117
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVzdFZhcmlhYmxlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi92YXJpYWJsZXMvdmFyaWFudHMvVGVzdFZhcmlhYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNjZW5lR3JhcGggfSBmcm9tICcuLi8uLi9jb3JlL3NjZW5lR3JhcGgvaW5kZXguanMnO1xuaW1wb3J0IHsgcXVlcnlNZXRyaWNUcmVlIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWV0cmljVHJlZS5qcyc7XG5pbXBvcnQgeyBWYXJpYWJsZURlcGVuZGVuY3lDb25maWcgfSBmcm9tICcuLi9WYXJpYWJsZURlcGVuZGVuY3lDb25maWcuanMnO1xuaW1wb3J0IHsgcmVuZGVyU2VsZWN0Rm9yVmFyaWFibGUgfSBmcm9tICcuLi9jb21wb25lbnRzL1ZhcmlhYmxlVmFsdWVTZWxlY3QuanMnO1xuaW1wb3J0IHsgTXVsdGlWYWx1ZVZhcmlhYmxlIH0gZnJvbSAnLi9NdWx0aVZhbHVlVmFyaWFibGUuanMnO1xuaW1wb3J0IHsgVmFyaWFibGVSZWZyZXNoIH0gZnJvbSAnQGdyYWZhbmEvZGF0YSc7XG5pbXBvcnQgeyBnZXRDbG9zZXN0IH0gZnJvbSAnLi4vLi4vY29yZS9zY2VuZUdyYXBoL3V0aWxzLmpzJztcbmltcG9ydCB7IFNjZW5lVmFyaWFibGVTZXQgfSBmcm9tICcuLi9zZXRzL1NjZW5lVmFyaWFibGVTZXQuanMnO1xuXG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5jbGFzcyBUZXN0VmFyaWFibGUgZXh0ZW5kcyBNdWx0aVZhbHVlVmFyaWFibGUge1xuICBjb25zdHJ1Y3Rvcihpbml0aWFsU3RhdGUsIGlzTGF6eSA9IGZhbHNlKSB7XG4gICAgc3VwZXIoX19zcHJlYWRWYWx1ZXMoe1xuICAgICAgdHlwZTogXCJjdXN0b21cIixcbiAgICAgIG5hbWU6IFwiVGVzdFwiLFxuICAgICAgdmFsdWU6IFwiVmFsdWVcIixcbiAgICAgIHRleHQ6IFwiVGV4dFwiLFxuICAgICAgcXVlcnk6IFwiUXVlcnlcIixcbiAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgcmVmcmVzaDogVmFyaWFibGVSZWZyZXNoLm9uRGFzaGJvYXJkTG9hZCxcbiAgICAgIHVwZGF0ZU9wdGlvbnM6IHRydWVcbiAgICB9LCBpbml0aWFsU3RhdGUpKTtcbiAgICB0aGlzLmNvbXBsZXRlVXBkYXRlID0gbmV3IFN1YmplY3QoKTtcbiAgICB0aGlzLmlzR2V0dGluZ1ZhbHVlcyA9IHRydWU7XG4gICAgdGhpcy5nZXRWYWx1ZU9wdGlvbnNDb3VudCA9IDA7XG4gICAgdGhpcy5pc0xhenkgPSBmYWxzZTtcbiAgICB0aGlzLl92YXJpYWJsZURlcGVuZGVuY3kgPSBuZXcgVmFyaWFibGVEZXBlbmRlbmN5Q29uZmlnKHRoaXMsIHtcbiAgICAgIHN0YXRlUGF0aHM6IFtcInF1ZXJ5XCJdXG4gICAgfSk7XG4gICAgdGhpcy5pc0xhenkgPSBpc0xhenk7XG4gIH1cbiAgZ2V0VmFsdWVPcHRpb25zKGFyZ3MpIHtcbiAgICBjb25zdCB7IGRlbGF5TXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgdGhpcy5nZXRWYWx1ZU9wdGlvbnNDb3VudCArPSAxO1xuICAgIGNvbnN0IHF1ZXJ5Q29udHJvbGxlciA9IHNjZW5lR3JhcGguZ2V0UXVlcnlDb250cm9sbGVyKHRoaXMpO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5RW50cnkgPSB7XG4gICAgICAgIHR5cGU6IFwidmFyaWFibGVcIixcbiAgICAgICAgb3JpZ2luOiB0aGlzLFxuICAgICAgICBjYW5jZWw6ICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKClcbiAgICAgIH07XG4gICAgICBpZiAocXVlcnlDb250cm9sbGVyKSB7XG4gICAgICAgIHF1ZXJ5Q29udHJvbGxlci5xdWVyeVN0YXJ0ZWQocXVlcnlFbnRyeSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogdHJ1ZSB9KTtcbiAgICAgIGlmICh0aGlzLnN0YXRlLnRocm93RXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuc3RhdGUudGhyb3dFcnJvcik7XG4gICAgICB9XG4gICAgICBjb25zdCBpbnRlcnBvbGF0ZWRRdWVyeSA9IHNjZW5lR3JhcGguaW50ZXJwb2xhdGUodGhpcywgdGhpcy5zdGF0ZS5xdWVyeSk7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKGludGVycG9sYXRlZFF1ZXJ5KTtcbiAgICAgIGNvbnN0IHN1YiA9IHRoaXMuY29tcGxldGVVcGRhdGUuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0geyBpc3N1ZWRRdWVyeTogaW50ZXJwb2xhdGVkUXVlcnksIGxvYWRpbmc6IGZhbHNlIH07XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUudXBkYXRlT3B0aW9ucykge1xuICAgICAgICAgICAgbmV3U3RhdGUub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuICAgICAgICAgIG9ic2VydmVyLm5leHQob3B0aW9ucyk7XG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsZXQgdGltZW91dDtcbiAgICAgIGlmIChkZWxheU1zKSB7XG4gICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnNpZ25hbFVwZGF0ZUNvbXBsZXRlZCgpLCBkZWxheU1zKTtcbiAgICAgIH0gZWxzZSBpZiAoZGVsYXlNcyA9PT0gMCkge1xuICAgICAgICB0aGlzLnNpZ25hbFVwZGF0ZUNvbXBsZXRlZCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5pc0dldHRpbmdWYWx1ZXMgPSB0cnVlO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRoaXMuaXNHZXR0aW5nVmFsdWVzID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmxvYWRpbmcpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXJ5Q29udHJvbGxlcikge1xuICAgICAgICAgIHF1ZXJ5Q29udHJvbGxlci5xdWVyeUNvbXBsZXRlZChxdWVyeUVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBjYW5jZWwoKSB7XG4gICAgY29uc3Qgc2NlbmVWYXJTZXQgPSBnZXRDbG9zZXN0KHRoaXMsIChzKSA9PiBzIGluc3RhbmNlb2YgU2NlbmVWYXJpYWJsZVNldCA/IHMgOiB2b2lkIDApO1xuICAgIHNjZW5lVmFyU2V0ID09IG51bGwgPyB2b2lkIDAgOiBzY2VuZVZhclNldC5jYW5jZWwodGhpcyk7XG4gIH1cbiAgZ2V0T3B0aW9ucyhpbnRlcnBvbGF0ZWRRdWVyeSkge1xuICAgIGlmICh0aGlzLnN0YXRlLm9wdGlvbnNUb1JldHVybikge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUub3B0aW9uc1RvUmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnlNZXRyaWNUcmVlKGludGVycG9sYXRlZFF1ZXJ5KS5tYXAoKHgpID0+ICh7IGxhYmVsOiB4Lm5hbWUsIHZhbHVlOiB4Lm5hbWUgfSkpO1xuICB9XG4gIHNpZ25hbFVwZGF0ZUNvbXBsZXRlZCgpIHtcbiAgICB0aGlzLmNvbXBsZXRlVXBkYXRlLm5leHQoMSk7XG4gIH1cbn1cblRlc3RWYXJpYWJsZS5Db21wb25lbnQgPSAoeyBtb2RlbCB9KSA9PiB7XG4gIHJldHVybiByZW5kZXJTZWxlY3RGb3JWYXJpYWJsZShtb2RlbCk7XG59O1xuXG5leHBvcnQgeyBUZXN0VmFyaWFibGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVkdWemRGWmhjbWxoWW14bExtcHpJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTh1TGk4dUxpOXpjbU12ZG1GeWFXRmliR1Z6TDNaaGNtbGhiblJ6TDFSbGMzUldZWEpwWVdKc1pTNTBjM2dpWFN3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhzZ1QySnpaWEoyWVdKc1pTd2dVM1ZpYW1WamRDQjlJR1p5YjIwZ0ozSjRhbk1uTzF4dVhHNXBiWEJ2Y25RZ2V5QnpZMlZ1WlVkeVlYQm9JSDBnWm5KdmJTQW5MaTR2TGk0dlkyOXlaUzl6WTJWdVpVZHlZWEJvSnp0Y2JtbHRjRzl5ZENCN0lGTmpaVzVsUTI5dGNHOXVaVzUwVUhKdmNITWdmU0JtY205dElDY3VMaTh1TGk5amIzSmxMM1I1Y0dWekp6dGNibWx0Y0c5eWRDQjdJSEYxWlhKNVRXVjBjbWxqVkhKbFpTQjlJR1p5YjIwZ0p5NHVMeTR1TDNWMGFXeHpMMjFsZEhKcFkxUnlaV1VuTzF4dWFXMXdiM0owSUhzZ1ZtRnlhV0ZpYkdWRVpYQmxibVJsYm1ONVEyOXVabWxuSUgwZ1puSnZiU0FuTGk0dlZtRnlhV0ZpYkdWRVpYQmxibVJsYm1ONVEyOXVabWxuSnp0Y2JtbHRjRzl5ZENCN0lISmxibVJsY2xObGJHVmpkRVp2Y2xaaGNtbGhZbXhsSUgwZ1puSnZiU0FuTGk0dlkyOXRjRzl1Wlc1MGN5OVdZWEpwWVdKc1pWWmhiSFZsVTJWc1pXTjBKenRjYm1sdGNHOXlkQ0I3SUZaaGNtbGhZbXhsVm1Gc2RXVlBjSFJwYjI0Z2ZTQm1jbTl0SUNjdUxpOTBlWEJsY3ljN1hHNWNibWx0Y0c5eWRDQjdJRTExYkhScFZtRnNkV1ZXWVhKcFlXSnNaU3dnVFhWc2RHbFdZV3gxWlZaaGNtbGhZbXhsVTNSaGRHVXNJRlpoY21saFlteGxSMlYwVDNCMGFXOXVjMEZ5WjNNZ2ZTQm1jbTl0SUNjdUwwMTFiSFJwVm1Gc2RXVldZWEpwWVdKc1pTYzdYRzVwYlhCdmNuUWdleUJXWVhKcFlXSnNaVkpsWm5KbGMyZ2dmU0JtY205dElDZEFaM0poWm1GdVlTOWtZWFJoSnp0Y2JtbHRjRzl5ZENCN0lHZGxkRU5zYjNObGMzUWdmU0JtY205dElDY3VMaTh1TGk5amIzSmxMM05qWlc1bFIzSmhjR2d2ZFhScGJITW5PMXh1YVcxd2IzSjBJSHNnVTJObGJtVldZWEpwWVdKc1pWTmxkQ0I5SUdaeWIyMGdKeTR1TDNObGRITXZVMk5sYm1WV1lYSnBZV0pzWlZObGRDYzdYRzVwYlhCdmNuUWdleUJUWTJWdVpWRjFaWEo1UTI5dWRISnZiR3hsY2tWdWRISjVJSDBnWm5KdmJTQW5MaTR2TGk0dlltVm9ZWFpwYjNKekwxTmpaVzVsVVhWbGNubERiMjUwY205c2JHVnlKenRjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCVVpYTjBWbUZ5YVdGaWJHVlRkR0YwWlNCbGVIUmxibVJ6SUUxMWJIUnBWbUZzZFdWV1lYSnBZV0pzWlZOMFlYUmxJSHRjYmlBZ2NYVmxjbms2SUhOMGNtbHVaenRjYmlBZ1pHVnNZWGxOY3o4NklHNTFiV0psY2p0Y2JpQWdhWE56ZFdWa1VYVmxjbmsvT2lCemRISnBibWM3WEc0Z0lISmxabkpsYzJnL09pQldZWEpwWVdKc1pWSmxabkpsYzJnN1hHNGdJSFJvY205M1JYSnliM0kvT2lCemRISnBibWM3WEc0Z0lHOXdkR2x2Ym5OVWIxSmxkSFZ5Ymo4NklGWmhjbWxoWW14bFZtRnNkV1ZQY0hScGIyNWJYVHRjYmlBZ2RYQmtZWFJsVDNCMGFXOXVjejg2SUdKdmIyeGxZVzQ3WEc1OVhHNWNiaThxS2x4dUlDb2dWR2hwY3lCMllYSnBZV0pzWlNCcGN5QnZibXg1SUdSbGMybG5ibVZrSUdadmNpQjFibWwwSUhSbGMzUnpJR0Z1WkNCd2IzUmxiblJwWVd4c2VTQmxNbVVnZEdWemRITXVYRzRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJVWlhOMFZtRnlhV0ZpYkdVZ1pYaDBaVzVrY3lCTmRXeDBhVlpoYkhWbFZtRnlhV0ZpYkdVOFZHVnpkRlpoY21saFlteGxVM1JoZEdVK0lIdGNiaUFnY0hKcGRtRjBaU0JqYjIxd2JHVjBaVlZ3WkdGMFpTQTlJRzVsZHlCVGRXSnFaV04wUEc1MWJXSmxjajRvS1R0Y2JpQWdjSFZpYkdsaklHbHpSMlYwZEdsdVoxWmhiSFZsY3lBOUlIUnlkV1U3WEc0Z0lIQjFZbXhwWXlCblpYUldZV3gxWlU5d2RHbHZibk5EYjNWdWRDQTlJREE3WEc0Z0lHbHpUR0Y2ZVNBOUlHWmhiSE5sTzF4dVhHNGdJSEJ5YjNSbFkzUmxaQ0JmZG1GeWFXRmliR1ZFWlhCbGJtUmxibU41SUQwZ2JtVjNJRlpoY21saFlteGxSR1Z3Wlc1a1pXNWplVU52Ym1acFp5aDBhR2x6TENCN1hHNGdJQ0FnYzNSaGRHVlFZWFJvY3pvZ1d5ZHhkV1Z5ZVNkZExGeHVJQ0I5S1R0Y2JseHVJQ0J3ZFdKc2FXTWdZMjl1YzNSeWRXTjBiM0lvYVc1cGRHbGhiRk4wWVhSbE9pQlFZWEowYVdGc1BGUmxjM1JXWVhKcFlXSnNaVk4wWVhSbFBpd2dhWE5NWVhwNUlEMGdabUZzYzJVcElIdGNiaUFnSUNCemRYQmxjaWg3WEc0Z0lDQWdJQ0IwZVhCbE9pQW5ZM1Z6ZEc5dEp5eGNiaUFnSUNBZ0lHNWhiV1U2SUNkVVpYTjBKeXhjYmlBZ0lDQWdJSFpoYkhWbE9pQW5WbUZzZFdVbkxGeHVJQ0FnSUNBZ2RHVjRkRG9nSjFSbGVIUW5MRnh1SUNBZ0lDQWdjWFZsY25rNklDZFJkV1Z5ZVNjc1hHNGdJQ0FnSUNCdmNIUnBiMjV6T2lCYlhTeGNiaUFnSUNBZ0lISmxabkpsYzJnNklGWmhjbWxoWW14bFVtVm1jbVZ6YUM1dmJrUmhjMmhpYjJGeVpFeHZZV1FzWEc0Z0lDQWdJQ0IxY0dSaGRHVlBjSFJwYjI1ek9pQjBjblZsTEZ4dUlDQWdJQ0FnTGk0dWFXNXBkR2xoYkZOMFlYUmxMRnh1SUNBZ0lIMHBPMXh1SUNBZ0lIUm9hWE11YVhOTVlYcDVJRDBnYVhOTVlYcDVPMXh1SUNCOVhHNWNiaUFnY0hWaWJHbGpJR2RsZEZaaGJIVmxUM0IwYVc5dWN5aGhjbWR6T2lCV1lYSnBZV0pzWlVkbGRFOXdkR2x2Ym5OQmNtZHpLVG9nVDJKelpYSjJZV0pzWlR4V1lYSnBZV0pzWlZaaGJIVmxUM0IwYVc5dVcxMCtJSHRjYmlBZ0lDQmpiMjV6ZENCN0lHUmxiR0Y1VFhNZ2ZTQTlJSFJvYVhNdWMzUmhkR1U3WEc1Y2JpQWdJQ0IwYUdsekxtZGxkRlpoYkhWbFQzQjBhVzl1YzBOdmRXNTBJQ3M5SURFN1hHNWNiaUFnSUNCamIyNXpkQ0J4ZFdWeWVVTnZiblJ5YjJ4c1pYSWdQU0J6WTJWdVpVZHlZWEJvTG1kbGRGRjFaWEo1UTI5dWRISnZiR3hsY2loMGFHbHpLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVDJKelpYSjJZV0pzWlR4V1lYSnBZV0pzWlZaaGJIVmxUM0IwYVc5dVcxMCtLQ2h2WW5ObGNuWmxjaWtnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnY1hWbGNubEZiblJ5ZVRvZ1UyTmxibVZSZFdWeWVVTnZiblJ5YjJ4c1pYSkZiblJ5ZVNBOUlIdGNiaUFnSUNBZ0lDQWdkSGx3WlRvZ0ozWmhjbWxoWW14bEp5eGNiaUFnSUNBZ0lDQWdiM0pwWjJsdU9pQjBhR2x6TEZ4dUlDQWdJQ0FnSUNCallXNWpaV3c2SUNncElEMCtJRzlpYzJWeWRtVnlMbU52YlhCc1pYUmxLQ2tzWEc0Z0lDQWdJQ0I5TzF4dVhHNGdJQ0FnSUNCcFppQW9jWFZsY25sRGIyNTBjbTlzYkdWeUtTQjdYRzRnSUNBZ0lDQWdJSEYxWlhKNVEyOXVkSEp2Ykd4bGNpNXhkV1Z5ZVZOMFlYSjBaV1FvY1hWbGNubEZiblJ5ZVNrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lIUm9hWE11YzJWMFUzUmhkR1VvZXlCc2IyRmthVzVuT2lCMGNuVmxJSDBwTzF4dVhHNGdJQ0FnSUNCcFppQW9kR2hwY3k1emRHRjBaUzUwYUhKdmQwVnljbTl5S1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loMGFHbHpMbk4wWVhSbExuUm9jbTkzUlhKeWIzSXBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JqYjI1emRDQnBiblJsY25CdmJHRjBaV1JSZFdWeWVTQTlJSE5qWlc1bFIzSmhjR2d1YVc1MFpYSndiMnhoZEdVb2RHaHBjeXdnZEdocGN5NXpkR0YwWlM1eGRXVnllU2s3WEc0Z0lDQWdJQ0JqYjI1emRDQnZjSFJwYjI1eklEMGdkR2hwY3k1blpYUlBjSFJwYjI1ektHbHVkR1Z5Y0c5c1lYUmxaRkYxWlhKNUtUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2MzVmlJRDBnZEdocGN5NWpiMjF3YkdWMFpWVndaR0YwWlM1emRXSnpZM0pwWW1Vb2UxeHVJQ0FnSUNBZ0lDQnVaWGgwT2lBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYm1WM1UzUmhkR1U2SUZCaGNuUnBZV3c4VkdWemRGWmhjbWxoWW14bFUzUmhkR1UrSUQwZ2V5QnBjM04xWldSUmRXVnllVG9nYVc1MFpYSndiMnhoZEdWa1VYVmxjbmtzSUd4dllXUnBibWM2SUdaaGJITmxJSDA3WEc1Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NXpkR0YwWlM1MWNHUmhkR1ZQY0hScGIyNXpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnVaWGRUZEdGMFpTNXZjSFJwYjI1eklEMGdiM0IwYVc5dWN6dGNiaUFnSUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG5ObGRGTjBZWFJsS0c1bGQxTjBZWFJsS1R0Y2JpQWdJQ0FnSUNBZ0lDQnZZbk5sY25abGNpNXVaWGgwS0c5d2RHbHZibk1wTzF4dUlDQWdJQ0FnSUNBZ0lHOWljMlZ5ZG1WeUxtTnZiWEJzWlhSbEtDazdYRzRnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUNBZ2JHVjBJSFJwYldWdmRYUTZJRzUxYldKbGNpQjhJSFZ1WkdWbWFXNWxaRHRjYmlBZ0lDQWdJR2xtSUNoa1pXeGhlVTF6S1NCN1hHNGdJQ0FnSUNBZ0lIUnBiV1Z2ZFhRZ1BTQjNhVzVrYjNjdWMyVjBWR2x0Wlc5MWRDZ29LU0E5UGlCMGFHbHpMbk5wWjI1aGJGVndaR0YwWlVOdmJYQnNaWFJsWkNncExDQmtaV3hoZVUxektUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9aR1ZzWVhsTmN5QTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5OcFoyNWhiRlZ3WkdGMFpVTnZiWEJzWlhSbFpDZ3BPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IwYUdsekxtbHpSMlYwZEdsdVoxWmhiSFZsY3lBOUlIUnlkV1U3WEc1Y2JpQWdJQ0FnSUhKbGRIVnliaUFvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSE4xWWk1MWJuTjFZbk5qY21saVpTZ3BPMXh1SUNBZ0lDQWdJQ0IzYVc1a2IzY3VZMnhsWVhKVWFXMWxiM1YwS0hScGJXVnZkWFFwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbWx6UjJWMGRHbHVaMVpoYkhWbGN5QTlJR1poYkhObE8xeHVYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbk4wWVhSbExteHZZV1JwYm1jcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxuTmxkRk4wWVhSbEtIc2diRzloWkdsdVp6b2dabUZzYzJVZ2ZTazdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCcFppQW9jWFZsY25sRGIyNTBjbTlzYkdWeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnY1hWbGNubERiMjUwY205c2JHVnlMbkYxWlhKNVEyOXRjR3hsZEdWa0tIRjFaWEo1Ulc1MGNua3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDBwTzF4dUlDQjlYRzVjYmlBZ2NIVmliR2xqSUdOaGJtTmxiQ2dwSUh0Y2JpQWdJQ0JqYjI1emRDQnpZMlZ1WlZaaGNsTmxkQ0E5SUdkbGRFTnNiM05sYzNRb2RHaHBjeXdnS0hNcElEMCtJQ2h6SUdsdWMzUmhibU5sYjJZZ1UyTmxibVZXWVhKcFlXSnNaVk5sZENBL0lITWdPaUIxYm1SbFptbHVaV1FwS1R0Y2JpQWdJQ0J6WTJWdVpWWmhjbE5sZEQ4dVkyRnVZMlZzS0hSb2FYTXBPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0JuWlhSUGNIUnBiMjV6S0dsdWRHVnljRzlzWVhSbFpGRjFaWEo1T2lCemRISnBibWNwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTV6ZEdGMFpTNXZjSFJwYjI1elZHOVNaWFIxY200cElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbk4wWVhSbExtOXdkR2x2Ym5OVWIxSmxkSFZ5Ymp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjWFZsY25sTlpYUnlhV05VY21WbEtHbHVkR1Z5Y0c5c1lYUmxaRkYxWlhKNUtTNXRZWEFvS0hncElEMCtJQ2g3SUd4aFltVnNPaUI0TG01aGJXVXNJSFpoYkhWbE9pQjRMbTVoYldVZ2ZTa3BPMXh1SUNCOVhHNWNiaUFnTHlvcUlGVnpaV1oxYkNCbWNtOXRJSFJsYzNSeklDb3ZYRzRnSUhCMVlteHBZeUJ6YVdkdVlXeFZjR1JoZEdWRGIyMXdiR1YwWldRb0tTQjdYRzRnSUNBZ2RHaHBjeTVqYjIxd2JHVjBaVlZ3WkdGMFpTNXVaWGgwS0RFcE8xeHVJQ0I5WEc1Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCRGIyMXdiMjVsYm5RZ1BTQW9leUJ0YjJSbGJDQjlPaUJUWTJWdVpVTnZiWEJ2Ym1WdWRGQnliM0J6UEUxMWJIUnBWbUZzZFdWV1lYSnBZV0pzWlQ0cElEMCtJSHRjYmlBZ0lDQnlaWFIxY200Z2NtVnVaR1Z5VTJWc1pXTjBSbTl5Vm1GeWFXRmliR1VvYlc5a1pXd3BPMXh1SUNCOU8xeHVmVnh1SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPMEZCTkVKUExFMUJRVTBzY1VKQlFYRkNMR3RDUVVGelF5eERRVUZCTzBGQlFVRXNSVUZWTDBRc1YwRkJRU3hEUVVGWkxGbEJRVEJETEVWQlFVRXNUVUZCUVN4SFFVRlRMRXRCUVU4c1JVRkJRVHRCUVVNelJTeEpRVUZOTEV0QlFVRXNRMEZCUVN4alFVRkJMRU5CUVVFN1FVRkJRU3hOUVVOS0xFbEJRVTBzUlVGQlFTeFJRVUZCTzBGQlFVRXNUVUZEVGl4SlFVRk5MRVZCUVVFc1RVRkJRVHRCUVVGQkxFMUJRMDRzUzBGQlR5eEZRVUZCTEU5QlFVRTdRVUZCUVN4TlFVTlFMRWxCUVUwc1JVRkJRU3hOUVVGQk8wRkJRVUVzVFVGRFRpeExRVUZQTEVWQlFVRXNUMEZCUVR0QlFVRkJMRTFCUTFBc1UwRkJVeXhGUVVGRE8wRkJRVUVzVFVGRFZpeFRRVUZUTEdWQlFXZENMRU5CUVVFc1pVRkJRVHRCUVVGQkxFMUJRM3BDTEdGQlFXVXNSVUZCUVN4SlFVRkJPMEZCUVVFc1MwRkJRU3hGUVVOYUxGbEJRMG9zUTBGQlFTeERRVUZCTEVOQlFVRTdRVUZ3UWtnc1NVRkJVU3hKUVVGQkxFTkJRVUVzWTBGQlFTeEhRVUZwUWl4SlFVRkpMRTlCUVdkQ0xFVkJRVUVzUTBGQlFUdEJRVU0zUXl4SlFVRkJMRWxCUVVFc1EwRkJUeXhsUVVGclFpeEhRVUZCTEVsQlFVRXNRMEZCUVR0QlFVTjZRaXhKUVVGQkxFbEJRVUVzUTBGQlR5eHZRa0ZCZFVJc1IwRkJRU3hEUVVGQkxFTkJRVUU3UVVGRE9VSXNTVUZCVXl4SlFVRkJMRU5CUVVFc1RVRkJRU3hIUVVGQkxFdEJRVUVzUTBGQlFUdEJRVVZVTEVsQlFWVXNTVUZCUVN4RFFVRkJMRzFDUVVGQkxFZEJRWE5DTEVsQlFVa3NkMEpCUVVFc1EwRkJlVUlzU1VGQlRTeEZRVUZCTzBGQlFVRXNUVUZEYWtVc1ZVRkJRU3hGUVVGWkxFTkJRVU1zVDBGQlR5eERRVUZCTzBGQlFVRXNTMEZEY2tJc1EwRkJRU3hEUVVGQk8wRkJZME1zU1VGQlFTeEpRVUZCTEVOQlFVc3NUVUZCVXl4SFFVRkJMRTFCUVVFc1EwRkJRVHRCUVVGQkxFZEJRMmhDTzBGQlFVRXNSVUZGVHl4blFrRkJaMElzU1VGQmFVVXNSVUZCUVR0QlFVTjBSaXhKUVVGTkxFMUJRVUVzUlVGQlJTeFBRVUZSTEVWQlFVRXNSMEZCU1N4SlFVRkxMRU5CUVVFc1MwRkJRU3hEUVVGQk8wRkJSWHBDTEVsQlFVRXNTVUZCUVN4RFFVRkxMRzlDUVVGM1FpeEpRVUZCTEVOQlFVRXNRMEZCUVR0QlFVVTNRaXhKUVVGTkxFMUJRVUVzWlVGQlFTeEhRVUZyUWl4VlFVRlhMRU5CUVVFc2EwSkJRVUVzUTBGQmJVSXNTVUZCU1N4RFFVRkJMRU5CUVVFN1FVRkZNVVFzU1VGQlR5eFBRVUZCTEVsQlFVa3NWVUZCYTBNc1EwRkJRU3hEUVVGRExGRkJRV0VzUzBGQlFUdEJRVU42UkN4TlFVRkJMRTFCUVUwc1ZVRkJkME1zUjBGQlFUdEJRVUZCTEZGQlF6VkRMRWxCUVUwc1JVRkJRU3hWUVVGQk8wRkJRVUVzVVVGRFRpeE5RVUZSTEVWQlFVRXNTVUZCUVR0QlFVRkJMRkZCUTFJc1RVRkJRU3hGUVVGUkxFMUJRVTBzVVVGQlFTeERRVUZUTEZGQlFWTXNSVUZCUVR0QlFVRkJMRTlCUTJ4RExFTkJRVUU3UVVGRlFTeE5RVUZCTEVsQlFVa3NaVUZCYVVJc1JVRkJRVHRCUVVOdVFpeFJRVUZCTEdWQlFVRXNRMEZCWjBJc1lVRkJZU3hWUVVGVkxFTkJRVUVzUTBGQlFUdEJRVUZCTEU5QlEzcERPMEZCUlVFc1RVRkJRU3hKUVVGQkxFTkJRVXNzVVVGQlV5eERRVUZCTEVWQlFVVXNUMEZCVXl4RlFVRkJMRWxCUVVFc1JVRkJUU3hEUVVGQkxFTkJRVUU3UVVGRkwwSXNUVUZCU1N4SlFVRkJMRWxCUVVFc1EwRkJTeXhOUVVGTkxGVkJRVmtzUlVGQlFUdEJRVU42UWl4UlFVRkJMRTFCUVUwc1NVRkJTU3hMUVVGQkxFTkJRVTBzU1VGQlN5eERRVUZCTEV0QlFVRXNRMEZCVFN4VlFVRlZMRU5CUVVFc1EwRkJRVHRCUVVGQkxFOUJRM1pETzBGQlJVRXNUVUZCUVN4TlFVRk5MRzlDUVVGdlFpeFZRVUZYTEVOQlFVRXNWMEZCUVN4RFFVRlpMRWxCUVUwc1JVRkJRU3hKUVVGQkxFTkJRVXNzVFVGQlRTeExRVUZMTEVOQlFVRXNRMEZCUVR0QlFVTjJSU3hOUVVGTkxFMUJRVUVzVDBGQlFTeEhRVUZWTEVsQlFVc3NRMEZCUVN4VlFVRkJMRU5CUVZjc2FVSkJRV2xDTEVOQlFVRXNRMEZCUVR0QlFVVnFSQ3hOUVVGTkxFMUJRVUVzUjBGQlFTeEhRVUZOTEVsQlFVc3NRMEZCUVN4alFVRkJMRU5CUVdVc1UwRkJWU3hEUVVGQk8wRkJRVUVzVVVGRGVFTXNUVUZCVFN4TlFVRk5PMEZCUTFZc1ZVRkJRU3hOUVVGTkxGRkJRWFZETEVkQlFVRXNSVUZCUlN4WFFVRmhMRVZCUVVFc2FVSkJRVUVzUlVGQmJVSXNVMEZCVXl4TFFVRk5MRVZCUVVFc1EwRkJRVHRCUVVVNVJpeFZRVUZKTEVsQlFVRXNTVUZCUVN4RFFVRkxMRTFCUVUwc1lVRkJaU3hGUVVGQk8wRkJRelZDTEZsQlFVRXNVVUZCUVN4RFFVRlRMRTlCUVZVc1IwRkJRU3hQUVVGQkxFTkJRVUU3UVVGQlFTeFhRVU55UWp0QlFVVkJMRlZCUVVFc1NVRkJRU3hEUVVGTExGTkJRVk1zVVVGQlVTeERRVUZCTEVOQlFVRTdRVUZEZEVJc1ZVRkJRU3hSUVVGQkxFTkJRVk1zUzBGQlN5eFBRVUZQTEVOQlFVRXNRMEZCUVR0QlFVTnlRaXhWUVVGQkxGRkJRVUVzUTBGQlV5eFJRVUZUTEVWQlFVRXNRMEZCUVR0QlFVRkJMRk5CUTNCQ08wRkJRVUVzVDBGRFJDeERRVUZCTEVOQlFVRTdRVUZGUkN4TlFVRkpMRWxCUVVFc1QwRkJRU3hEUVVGQk8wRkJRMG9zVFVGQlFTeEpRVUZKTEU5QlFWTXNSVUZCUVR0QlFVTllMRkZCUVVFc1QwRkJRU3hIUVVGVkxFOUJRVThzVlVGQlZ5eERRVUZCTEUxQlFVMHNTVUZCU3l4RFFVRkJMSEZDUVVGQkxFbEJRWGxDTEU5QlFVOHNRMEZCUVN4RFFVRkJPMEZCUVVFc1QwRkRla1VzVFVGQlFTeEpRVUZYTEZsQlFWa3NRMEZCUnl4RlFVRkJPMEZCUTNoQ0xGRkJRVUVzU1VGQlFTeERRVUZMTEhGQ1FVRnpRaXhGUVVGQkxFTkJRVUU3UVVGQlFTeFBRVU0zUWp0QlFVVkJMRTFCUVVFc1NVRkJRU3hEUVVGTExHVkJRV3RDTEVkQlFVRXNTVUZCUVN4RFFVRkJPMEZCUlhaQ0xFMUJRVUVzVDBGQlR5eE5RVUZOTzBGQlExZ3NVVUZCUVN4SFFVRkJMRU5CUVVrc1YwRkJXU3hGUVVGQkxFTkJRVUU3UVVGRGFFSXNVVUZCUVN4TlFVRkJMRU5CUVU4c1lVRkJZU3hQUVVGUExFTkJRVUVzUTBGQlFUdEJRVU16UWl4UlFVRkJMRWxCUVVFc1EwRkJTeXhsUVVGclFpeEhRVUZCTEV0QlFVRXNRMEZCUVR0QlFVVjJRaXhSUVVGSkxFbEJRVUVzU1VGQlFTeERRVUZMTEUxQlFVMHNUMEZCVXl4RlFVRkJPMEZCUTNSQ0xGVkJRVUVzU1VGQlFTeERRVUZMTEZGQlFWTXNRMEZCUVN4RlFVRkZMRTlCUVZNc1JVRkJRU3hMUVVGQkxFVkJRVThzUTBGQlFTeERRVUZCTzBGQlFVRXNVMEZEYkVNN1FVRkZRU3hSUVVGQkxFbEJRVWtzWlVGQmFVSXNSVUZCUVR0QlFVTnVRaXhWUVVGQkxHVkJRVUVzUTBGQlowSXNaVUZCWlN4VlFVRlZMRU5CUVVFc1EwRkJRVHRCUVVGQkxGTkJRek5ETzBGQlFVRXNUMEZEUml4RFFVRkJPMEZCUVVFc1MwRkRSQ3hEUVVGQkxFTkJRVUU3UVVGQlFTeEhRVU5JTzBGQlFVRXNSVUZGVHl4TlFVRlRMRWRCUVVFN1FVRkRaQ3hKUVVGTkxFMUJRVUVzVjBGQlFTeEhRVUZqTEZkQlFWY3NTVUZCVFN4RlFVRkJMRU5CUVVNc1RVRkJUeXhEUVVGaExGbEJRVUVzWjBKQlFVRXNSMEZCYlVJc1NVRkJTU3hMUVVGVkxFTkJRVUVzUTBGQlFTeERRVUZCTzBGQlF6TkdMRWxCUVVFc1YwRkJRU3hKUVVGQkxFbEJRVUVzUjBGQlFTeExRVUZCTEVOQlFVRXNSMEZCUVN4WFFVRkJMRU5CUVdFc1RVRkJUeXhEUVVGQkxFbEJRVUVzUTBGQlFTeERRVUZCTzBGQlFVRXNSMEZEZEVJN1FVRkJRU3hGUVVWUkxGZEJRVmNzYVVKQlFUSkNMRVZCUVVFN1FVRkROVU1zU1VGQlNTeEpRVUZCTEVsQlFVRXNRMEZCU3l4TlFVRk5MR1ZCUVdsQ0xFVkJRVUU3UVVGRE9VSXNUVUZCUVN4UFFVRlBMRXRCUVVzc1MwRkJUU3hEUVVGQkxHVkJRVUVzUTBGQlFUdEJRVUZCTEV0QlEzQkNPMEZCUlVFc1NVRkJRU3hQUVVGUExHVkJRV2RDTEVOQlFVRXNhVUpCUVdsQ0xFTkJRVVVzUTBGQlFTeEhRVUZCTEVOQlFVa3NRMEZCUXl4RFFVRkJMRTFCUVU4c1JVRkJSU3hMUVVGQkxFVkJRVThzUTBGQlJTeERRVUZCTEVsQlFVRXNSVUZCVFN4TFFVRlBMRVZCUVVFc1EwRkJRU3hEUVVGRkxFMUJRVThzUTBGQlFTeERRVUZCTEVOQlFVRTdRVUZCUVN4SFFVTjZSanRCUVVGQkxFVkJSMDhzY1VKQlFYZENMRWRCUVVFN1FVRkROMElzU1VGQlN5eEpRVUZCTEVOQlFVRXNZMEZCUVN4RFFVRmxMRXRCUVVzc1EwRkJReXhEUVVGQkxFTkJRVUU3UVVGQlFTeEhRVU0xUWp0QlFVdEdMRU5CUVVFN1FVRm9TR0VzV1VGQlFTeERRVFpIUnl4VFFVRlpMRWRCUVVFc1EwRkJReXhGUVVGRkxFdEJRVUVzUlVGQmNVUXNTMEZCUVR0QlFVTm9SaXhGUVVGQkxFOUJRVThzZDBKQlFYZENMRXRCUVVzc1EwRkJRU3hEUVVGQk8wRkJRM1JETEVOQlFVRTdPenM3SW4wPVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEJPLE1BQU0scUJBQXFCLGtCQUFzQyxDQUFBO0VBVS9ELFdBQVksQ0FBQSxZQUFBLEVBQTBDLFNBQVMsS0FBTyxFQUFBO0FBQ3JFLElBQUEsS0FBQSxDQUFBLGNBQUEsQ0FBQTtNQUNKLElBQU0sRUFBQSxRQUFBO01BQ04sSUFBTSxFQUFBLE1BQUE7TUFDTixLQUFPLEVBQUEsT0FBQTtNQUNQLElBQU0sRUFBQSxNQUFBO01BQ04sS0FBTyxFQUFBLE9BQUE7QUFDUCxNQUFBLE9BQUEsRUFBUyxFQUFBO0FBQ1QsTUFBQSxPQUFBLEVBQVMsZUFBZ0IsQ0FBQSxlQUFBO01BQ3pCLGFBQWUsRUFBQSxJQUFBO0FBQUEsS0FBQSxFQUNaLFlBQ0osQ0FBQSxDQUFBLENBQUE7QUFwQkssSUFBQSxJQUFBLENBQUEsY0FBQSxHQUFpQixJQUFJLE9BQWdCLEVBQUEsQ0FBQTtBQUM3QyxJQUFBLElBQUEsQ0FBTyxlQUFrQixHQUFBLElBQUEsQ0FBQTtBQUN6QixJQUFBLElBQUEsQ0FBTyxvQkFBdUIsR0FBQSxDQUFBLENBQUE7QUFDckIsSUFBQSxJQUFBLENBQUEsTUFBQSxHQUFBLEtBQUEsQ0FBQTtBQUVDLElBQUEsSUFBQSxDQUFBLG1CQUFBLEdBQXNCLElBQUksd0JBQUEsQ0FBeUIsSUFBTSxFQUFBO0FBQ2pFLE1BQUEsVUFBQSxFQUFZLENBQUMsT0FBTyxDQUFBO0tBQ3JCLENBQUEsQ0FBQTtBQWND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
@@ -0,0 +1,61 @@
1
+ import React from 'react';
2
+ import { SceneObjectBase } from '../../core/SceneObjectBase.js';
3
+ import { SceneObjectUrlSyncConfig } from '../../services/SceneObjectUrlSyncConfig.js';
4
+ import { VariableValueInput } from '../components/VariableValueInput.js';
5
+ import { SceneVariableValueChangedEvent } from '../types.js';
6
+
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __spreadValues = (a, b) => {
13
+ for (var prop in b || (b = {}))
14
+ if (__hasOwnProp.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ if (__getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(b)) {
18
+ if (__propIsEnum.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ }
21
+ return a;
22
+ };
23
+ class TextBoxVariable extends SceneObjectBase {
24
+ constructor(initialState) {
25
+ super(__spreadValues({
26
+ type: "textbox",
27
+ value: "",
28
+ name: ""
29
+ }, initialState));
30
+ this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: () => [this.getKey()] });
31
+ }
32
+ getValue() {
33
+ return this.state.value;
34
+ }
35
+ setValue(newValue) {
36
+ if (newValue !== this.state.value) {
37
+ this.setState({ value: newValue });
38
+ this.publishEvent(new SceneVariableValueChangedEvent(this), true);
39
+ }
40
+ }
41
+ getKey() {
42
+ return `var-${this.state.name}`;
43
+ }
44
+ getUrlState() {
45
+ return { [this.getKey()]: this.state.value };
46
+ }
47
+ updateFromUrl(values) {
48
+ const val = values[this.getKey()];
49
+ if (typeof val === "string") {
50
+ this.setValue(val);
51
+ }
52
+ }
53
+ }
54
+ TextBoxVariable.Component = ({ model }) => {
55
+ return /* @__PURE__ */ React.createElement(VariableValueInput, {
56
+ model
57
+ });
58
+ };
59
+
60
+ export { TextBoxVariable };
61
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dEJveFZhcmlhYmxlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi92YXJpYWJsZXMvdmFyaWFudHMvVGV4dEJveFZhcmlhYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTY2VuZU9iamVjdEJhc2UgfSBmcm9tICcuLi8uLi9jb3JlL1NjZW5lT2JqZWN0QmFzZS5qcyc7XG5pbXBvcnQgeyBTY2VuZU9iamVjdFVybFN5bmNDb25maWcgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9TY2VuZU9iamVjdFVybFN5bmNDb25maWcuanMnO1xuaW1wb3J0IHsgVmFyaWFibGVWYWx1ZUlucHV0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9WYXJpYWJsZVZhbHVlSW5wdXQuanMnO1xuaW1wb3J0IHsgU2NlbmVWYXJpYWJsZVZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5jbGFzcyBUZXh0Qm94VmFyaWFibGUgZXh0ZW5kcyBTY2VuZU9iamVjdEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihpbml0aWFsU3RhdGUpIHtcbiAgICBzdXBlcihfX3NwcmVhZFZhbHVlcyh7XG4gICAgICB0eXBlOiBcInRleHRib3hcIixcbiAgICAgIHZhbHVlOiBcIlwiLFxuICAgICAgbmFtZTogXCJcIlxuICAgIH0sIGluaXRpYWxTdGF0ZSkpO1xuICAgIHRoaXMuX3VybFN5bmMgPSBuZXcgU2NlbmVPYmplY3RVcmxTeW5jQ29uZmlnKHRoaXMsIHsga2V5czogKCkgPT4gW3RoaXMuZ2V0S2V5KCldIH0pO1xuICB9XG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnZhbHVlO1xuICB9XG4gIHNldFZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgaWYgKG5ld1ZhbHVlICE9PSB0aGlzLnN0YXRlLnZhbHVlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IG5ld1ZhbHVlIH0pO1xuICAgICAgdGhpcy5wdWJsaXNoRXZlbnQobmV3IFNjZW5lVmFyaWFibGVWYWx1ZUNoYW5nZWRFdmVudCh0aGlzKSwgdHJ1ZSk7XG4gICAgfVxuICB9XG4gIGdldEtleSgpIHtcbiAgICByZXR1cm4gYHZhci0ke3RoaXMuc3RhdGUubmFtZX1gO1xuICB9XG4gIGdldFVybFN0YXRlKCkge1xuICAgIHJldHVybiB7IFt0aGlzLmdldEtleSgpXTogdGhpcy5zdGF0ZS52YWx1ZSB9O1xuICB9XG4gIHVwZGF0ZUZyb21VcmwodmFsdWVzKSB7XG4gICAgY29uc3QgdmFsID0gdmFsdWVzW3RoaXMuZ2V0S2V5KCldO1xuICAgIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLnNldFZhbHVlKHZhbCk7XG4gICAgfVxuICB9XG59XG5UZXh0Qm94VmFyaWFibGUuQ29tcG9uZW50ID0gKHsgbW9kZWwgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmFyaWFibGVWYWx1ZUlucHV0LCB7XG4gICAgbW9kZWxcbiAgfSk7XG59O1xuXG5leHBvcnQgeyBUZXh0Qm94VmFyaWFibGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVkdWNGRFSnZlRlpoY21saFlteGxMbXB6SWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk4dUxpOHVMaTl6Y21NdmRtRnlhV0ZpYkdWekwzWmhjbWxoYm5SekwxUmxlSFJDYjNoV1lYSnBZV0pzWlM1MGMzZ2lYU3dpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJRkpsWVdOMElHWnliMjBnSjNKbFlXTjBKenRjYm1sdGNHOXlkQ0I3SUZOalpXNWxUMkpxWldOMFFtRnpaU0I5SUdaeWIyMGdKeTR1THk0dUwyTnZjbVV2VTJObGJtVlBZbXBsWTNSQ1lYTmxKenRjYm1sdGNHOXlkQ0I3SUZOalpXNWxRMjl0Y0c5dVpXNTBVSEp2Y0hNc0lGTmpaVzVsVDJKcVpXTjBWWEpzVm1Gc2RXVnpJSDBnWm5KdmJTQW5MaTR2TGk0dlkyOXlaUzkwZVhCbGN5YzdYRzVwYlhCdmNuUWdleUJUWTJWdVpVOWlhbVZqZEZWeWJGTjVibU5EYjI1bWFXY2dmU0JtY205dElDY3VMaTh1TGk5elpYSjJhV05sY3k5VFkyVnVaVTlpYW1WamRGVnliRk41Ym1ORGIyNW1hV2NuTzF4dWFXMXdiM0owSUhzZ1ZtRnlhV0ZpYkdWV1lXeDFaVWx1Y0hWMElIMGdabkp2YlNBbkxpNHZZMjl0Y0c5dVpXNTBjeTlXWVhKcFlXSnNaVlpoYkhWbFNXNXdkWFFuTzF4dWFXMXdiM0owSUhzZ1UyTmxibVZXWVhKcFlXSnNaU3dnVTJObGJtVldZWEpwWVdKc1pWTjBZWFJsTENCVFkyVnVaVlpoY21saFlteGxWbUZzZFdWRGFHRnVaMlZrUlhabGJuUXNJRlpoY21saFlteGxWbUZzZFdVZ2ZTQm1jbTl0SUNjdUxpOTBlWEJsY3ljN1hHNWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdWR1Y0ZEVKdmVGWmhjbWxoWW14bFUzUmhkR1VnWlhoMFpXNWtjeUJUWTJWdVpWWmhjbWxoWW14bFUzUmhkR1VnZTF4dUlDQjJZV3gxWlRvZ2MzUnlhVzVuTzF4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1ZHVjRkRUp2ZUZaaGNtbGhZbXhsWEc0Z0lHVjRkR1Z1WkhNZ1UyTmxibVZQWW1wbFkzUkNZWE5sUEZSbGVIUkNiM2hXWVhKcFlXSnNaVk4wWVhSbFBseHVJQ0JwYlhCc1pXMWxiblJ6SUZOalpXNWxWbUZ5YVdGaWJHVThWR1Y0ZEVKdmVGWmhjbWxoWW14bFUzUmhkR1UrWEc1N1hHNGdJSEIxWW14cFl5QmpiMjV6ZEhKMVkzUnZjaWhwYm1sMGFXRnNVM1JoZEdVNklGQmhjblJwWVd3OFZHVjRkRUp2ZUZaaGNtbGhZbXhsVTNSaGRHVStLU0I3WEc0Z0lDQWdjM1Z3WlhJb2UxeHVJQ0FnSUNBZ2RIbHdaVG9nSjNSbGVIUmliM2duTEZ4dUlDQWdJQ0FnZG1Gc2RXVTZJQ2NuTEZ4dUlDQWdJQ0FnYm1GdFpUb2dKeWNzWEc0Z0lDQWdJQ0F1TGk1cGJtbDBhV0ZzVTNSaGRHVXNYRzRnSUNBZ2ZTazdYRzVjYmlBZ0lDQjBhR2x6TGw5MWNteFRlVzVqSUQwZ2JtVjNJRk5qWlc1bFQySnFaV04wVlhKc1UzbHVZME52Ym1acFp5aDBhR2x6TENCN0lHdGxlWE02SUNncElEMCtJRnQwYUdsekxtZGxkRXRsZVNncFhTQjlLVHRjYmlBZ2ZWeHVYRzRnSUhCMVlteHBZeUJuWlhSV1lXeDFaU2dwT2lCV1lYSnBZV0pzWlZaaGJIVmxJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTV6ZEdGMFpTNTJZV3gxWlR0Y2JpQWdmVnh1WEc0Z0lIQjFZbXhwWXlCelpYUldZV3gxWlNodVpYZFdZV3gxWlRvZ2MzUnlhVzVuS1NCN1hHNGdJQ0FnYVdZZ0tHNWxkMVpoYkhWbElDRTlQU0IwYUdsekxuTjBZWFJsTG5aaGJIVmxLU0I3WEc0Z0lDQWdJQ0IwYUdsekxuTmxkRk4wWVhSbEtIc2dkbUZzZFdVNklHNWxkMVpoYkhWbElIMHBPMXh1SUNBZ0lDQWdkR2hwY3k1d2RXSnNhWE5vUlhabGJuUW9ibVYzSUZOalpXNWxWbUZ5YVdGaWJHVldZV3gxWlVOb1lXNW5aV1JGZG1WdWRDaDBhR2x6S1N3Z2RISjFaU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0JuWlhSTFpYa29LVG9nYzNSeWFXNW5JSHRjYmlBZ0lDQnlaWFIxY200Z1lIWmhjaTBrZTNSb2FYTXVjM1JoZEdVdWJtRnRaWDFnTzF4dUlDQjlYRzVjYmlBZ2NIVmliR2xqSUdkbGRGVnliRk4wWVhSbEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCN0lGdDBhR2x6TG1kbGRFdGxlU2dwWFRvZ2RHaHBjeTV6ZEdGMFpTNTJZV3gxWlNCOU8xeHVJQ0I5WEc1Y2JpQWdjSFZpYkdsaklIVndaR0YwWlVaeWIyMVZjbXdvZG1Gc2RXVnpPaUJUWTJWdVpVOWlhbVZqZEZWeWJGWmhiSFZsY3lrZ2UxeHVJQ0FnSUdOdmJuTjBJSFpoYkNBOUlIWmhiSFZsYzF0MGFHbHpMbWRsZEV0bGVTZ3BYVHRjYmx4dUlDQWdJR2xtSUNoMGVYQmxiMllnZG1Gc0lEMDlQU0FuYzNSeWFXNW5KeWtnZTF4dUlDQWdJQ0FnZEdocGN5NXpaWFJXWVd4MVpTaDJZV3dwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdRMjl0Y0c5dVpXNTBJRDBnS0hzZ2JXOWtaV3dnZlRvZ1UyTmxibVZEYjIxd2IyNWxiblJRY205d2N6eFVaWGgwUW05NFZtRnlhV0ZpYkdVK0tTQTlQaUI3WEc0Z0lDQWdjbVYwZFhKdUlEeFdZWEpwWVdKc1pWWmhiSFZsU1c1d2RYUWdiVzlrWld3OWUyMXZaR1ZzZlNBdlBqdGNiaUFnZlR0Y2JuMWNiaUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3T3pzN096czdPenM3T3pzN096czdPenM3TzBGQlYwOHNUVUZCVFN4M1FrRkRTQ3hsUVVWV0xFTkJRVUU3UVVGQlFTeEZRVU5UTEZsQlFWa3NXVUZCTmtNc1JVRkJRVHRCUVVNNVJDeEpRVUZOTEV0QlFVRXNRMEZCUVN4alFVRkJMRU5CUVVFN1FVRkJRU3hOUVVOS0xFbEJRVTBzUlVGQlFTeFRRVUZCTzBGQlFVRXNUVUZEVGl4TFFVRlBMRVZCUVVFc1JVRkJRVHRCUVVGQkxFMUJRMUFzU1VGQlRTeEZRVUZCTEVWQlFVRTdRVUZCUVN4TFFVRkJMRVZCUTBnc1dVRkRTaXhEUVVGQkxFTkJRVUVzUTBGQlFUdEJRVVZFTEVsQlFVRXNTVUZCUVN4RFFVRkxMRkZCUVZjc1IwRkJRU3hKUVVGSkxIZENRVUY1UWl4RFFVRkJMRWxCUVVFc1JVRkJUU3hGUVVGRkxFbEJRVUVzUlVGQlRTeE5RVUZOTEVOQlFVTXNTVUZCU3l4RFFVRkJMRTFCUVVFc1JVRkJVU3hEUVVGQkxFVkJRVWNzUTBGQlFTeERRVUZCTzBGQlFVRXNSMEZEY0VZN1FVRkJRU3hGUVVWUExGRkJRVEJDTEVkQlFVRTdRVUZETDBJc1NVRkJRU3hQUVVGUExFdEJRVXNzUzBGQlRTeERRVUZCTEV0QlFVRXNRMEZCUVR0QlFVRkJMRWRCUTNCQ08wRkJRVUVzUlVGRlR5eFRRVUZUTEZGQlFXdENMRVZCUVVFN1FVRkRhRU1zU1VGQlNTeEpRVUZCTEZGQlFVRXNTMEZCWVN4SlFVRkxMRU5CUVVFc1MwRkJRU3hEUVVGTkxFdEJRVThzUlVGQlFUdEJRVU5xUXl4TlFVRkJMRWxCUVVFc1EwRkJTeXhSUVVGVExFTkJRVUVzUlVGQlJTeExRVUZQTEVWQlFVRXNVVUZCUVN4RlFVRlZMRU5CUVVFc1EwRkJRVHRCUVVOcVF5eE5RVUZCTEVsQlFVRXNRMEZCU3l4WlFVRmhMRU5CUVVFc1NVRkJTU3c0UWtGQkswSXNRMEZCUVN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGQkxFTkJRVUU3UVVGQlFTeExRVU5zUlR0QlFVRkJMRWRCUTBZN1FVRkJRU3hGUVVWUkxFMUJRV2xDTEVkQlFVRTdRVUZEZGtJc1NVRkJUeXhQUVVGQkxFTkJRVUVzU1VGQlFTeEZRVUZQTEV0QlFVc3NTMEZCVFN4RFFVRkJMRWxCUVVFc1EwRkJRU3hEUVVGQkxFTkJRVUU3UVVGQlFTeEhRVU16UWp0QlFVRkJMRVZCUlU4c1YwRkJZeXhIUVVGQk8wRkJRMjVDTEVsQlFVRXNUMEZCVHl4RlFVRkZMRU5CUVVNc1NVRkJRU3hEUVVGTExGRkJRVmNzUjBGQlFTeEpRVUZCTEVOQlFVc3NUVUZCVFN4TFFVRk5MRVZCUVVFc1EwRkJRVHRCUVVGQkxFZEJRemRETzBGQlFVRXNSVUZGVHl4alFVRmpMRTFCUVRoQ0xFVkJRVUU3UVVGRGFrUXNTVUZCVFN4TlFVRkJMRWRCUVVFc1IwRkJUU3hOUVVGUExFTkJRVUVzU1VGQlFTeERRVUZMTEUxQlFVOHNSVUZCUVN4RFFVRkJMRU5CUVVFN1FVRkZMMElzU1VGQlNTeEpRVUZCTEU5QlFVOHNVVUZCVVN4UlFVRlZMRVZCUVVFN1FVRkRNMElzVFVGQlFTeEpRVUZCTEVOQlFVc3NVMEZCVXl4SFFVRkhMRU5CUVVFc1EwRkJRVHRCUVVGQkxFdEJRMjVDTzBGQlFVRXNSMEZEUmp0QlFVdEdMRU5CUVVFN1FVRTNRMkVzWlVGQlFTeERRVEJEUnl4VFFVRlpMRWRCUVVFc1EwRkJReXhGUVVGRkxFdEJRVUVzUlVGQmEwUXNTMEZCUVR0QlFVTTNSU3hGUVVGQkxIVkNRVUZSTEV0QlFVRXNRMEZCUVN4aFFVRkJMRU5CUVVFc2EwSkJRVUVzUlVGQlFUdEJRVUZCTEVsQlFXMUNMRXRCUVVFN1FVRkJRU3hIUVVGakxFTkJRVUVzUTBGQlFUdEJRVU16UXl4RFFVRkJPenM3T3lKOVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXTyxNQUFNLHdCQUNILGVBRVYsQ0FBQTtBQUNTLEVBQUEsV0FBQSxDQUFZLFlBQTZDLEVBQUE7QUFDeEQsSUFBQSxLQUFBLENBQUEsY0FBQSxDQUFBO01BQ0osSUFBTSxFQUFBLFNBQUE7TUFDTixLQUFPLEVBQUEsRUFBQTtNQUNQLElBQU0sRUFBQSxFQUFBO0FBQUEsS0FBQSxFQUNILFlBQ0osQ0FBQSxDQUFBLENBQUE7QUFFRCxJQUFBLElBQUEsQ0FBSyxRQUFXLEdBQUEsSUFBSSx3QkFBeUIsQ0FBQSxJQUFBLEVBQU0sRUFBRSxJQUFBLEVBQU0sTUFBTSxDQUFDLElBQUssQ0FBQSxNQUFBLEVBQVEsQ0FBQSxFQUFHLENBQUEsQ0FBQTtBQUFBLEdBQUE7RUFHN0UsUUFBMEIsR0FBQTtBQUMvQixJQUFBLE9BQU8sS0FBSyxLQUFNLENBQUEsS0FBQSxDQUFBO0FBQUEsR0FBQTtBQUdiLEVBQUEsUUFBQSxDQUFTLFFBQWtCLEVBQUE7QUFDNUIsSUFBQSxJQUFBLFFBQUEsS0FBYSxJQUFLLENBQUEsS0FBQSxDQUFNLEtBQU8sRUFBQTtBQUNqQyxNQUFBLElBQUEsQ0FBSyxRQUFTLENBQUEsRUFBRSxLQUFPLEVBQUEsUUFBQSxFQUFVLENBQUEsQ0FBQTtBQUNqQyxNQUFBLElBQUEsQ0FBSyxZQUFhLENBQUEsSUFBSSw4QkFBK0IsQ0FBQSxJQUFJLEdBQUcsSUFBSSxDQUFBLENBQUE7QUFBQSxLQUFBO0FBQ2xFLEdBQUE7RUFHTSxNQUFpQixHQUFBO0FBQ2hCLElBQUEsT0FBQSxDQUFBLElBQUEsRUFBTyxLQUFLLEtBQU0sQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBO0FBQUEsR0FBQTtFQUdwQixXQUFjLEdBQUE7QUFDbkIsSUFBQSxPQUFPLEVBQUUsQ0FBQyxJQUFBLENBQUssUUFBVyxHQUFBLElBQUEsQ0FBSyxNQUFNLEtBQU0sRUFBQSxDQUFBO0FBQUEsR0FBQTtBQUd0QyxFQUFBLGFBQUEsQ0FBYyxNQUE4QixFQUFBO0FBQzNDLElBQUEsTUFBQSxHQUFBLEdBQU0sTUFBTyxDQUFBLElBQUEsQ0FBSyxNQUFPLEVBQUEsQ0FBQSxDQUFBO0FBRTNCLElBQUEsSUFBQSxPQUFPLFFBQVEsUUFBVSxFQUFBO0FBQzNCLE1BQUEsSUFBQSxDQUFLLFNBQVMsR0FBRyxDQUFBLENBQUE7QUFBQSxLQUFBO0FBQ25CLEdBQUE7QUFNSixDQUFBO0FBN0NhLGVBQUEsQ0EwQ0csU0FBWSxHQUFBLENBQUMsRUFBRSxLQUFBLEVBQWtELEtBQUE7QUFDN0UsRUFBUSx1QkFBQSxLQUFBLENBQUEsY0FBQSxrQkFBQSxFQUFBO0FBQW1CLElBQUEsS0FBQTtHQUFjLENBQUEsQ0FBQTtBQUMzQyxDQUFBOzs7OyJ9
@@ -0,0 +1,139 @@
1
+ import { lastValueFrom, of, from, mergeMap, filter, take, throwError, catchError } from 'rxjs';
2
+ import { v4 } from 'uuid';
3
+ import { VariableRefresh, VariableSort, LoadingState, CoreApp } from '@grafana/data';
4
+ import { sceneGraph } from '../../../core/sceneGraph/index.js';
5
+ import { VariableDependencyConfig } from '../../VariableDependencyConfig.js';
6
+ import { renderSelectForVariable } from '../../components/VariableValueSelect.js';
7
+ import { MultiValueVariable } from '../MultiValueVariable.js';
8
+ import { createQueryVariableRunner } from './createQueryVariableRunner.js';
9
+ import { metricNamesToVariableValues } from './utils.js';
10
+ import { toMetricFindValues } from './toMetricFindValues.js';
11
+ import { getDataSource } from '../../../utils/getDataSource.js';
12
+ import { safeStringifyValue } from '../../utils.js';
13
+ import { SEARCH_FILTER_VARIABLE } from '../../constants.js';
14
+ import { debounce } from 'lodash';
15
+ import { registerQueryWithController } from '../../../querying/registerQueryWithController.js';
16
+ import { wrapInSafeSerializableSceneObject } from '../../../utils/wrapInSafeSerializableSceneObject.js';
17
+
18
+ var __defProp = Object.defineProperty;
19
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
20
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
21
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
22
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
23
+ var __spreadValues = (a, b) => {
24
+ for (var prop in b || (b = {}))
25
+ if (__hasOwnProp.call(b, prop))
26
+ __defNormalProp(a, prop, b[prop]);
27
+ if (__getOwnPropSymbols)
28
+ for (var prop of __getOwnPropSymbols(b)) {
29
+ if (__propIsEnum.call(b, prop))
30
+ __defNormalProp(a, prop, b[prop]);
31
+ }
32
+ return a;
33
+ };
34
+ class QueryVariable extends MultiValueVariable {
35
+ constructor(initialState) {
36
+ super(__spreadValues({
37
+ type: "query",
38
+ name: "",
39
+ value: "",
40
+ text: "",
41
+ options: [],
42
+ datasource: null,
43
+ regex: "",
44
+ query: "",
45
+ refresh: VariableRefresh.onDashboardLoad,
46
+ sort: VariableSort.disabled
47
+ }, initialState));
48
+ this._variableDependency = new VariableDependencyConfig(this, {
49
+ statePaths: ["regex", "query", "datasource"]
50
+ });
51
+ this.onSearchChange = (searchFilter) => {
52
+ if (!containsSearchFilter(this.state.query)) {
53
+ return;
54
+ }
55
+ this._updateOptionsBasedOnSearchFilter(searchFilter);
56
+ };
57
+ this._updateOptionsBasedOnSearchFilter = debounce(async (searchFilter) => {
58
+ const result = await lastValueFrom(this.getValueOptions({ searchFilter }));
59
+ this.setState({ options: result, loading: false });
60
+ }, 400);
61
+ }
62
+ getValueOptions(args) {
63
+ if (!this.state.query) {
64
+ return of([]);
65
+ }
66
+ this.setState({ loading: true, error: null });
67
+ return from(
68
+ getDataSource(this.state.datasource, {
69
+ __sceneObject: wrapInSafeSerializableSceneObject(this)
70
+ })
71
+ ).pipe(
72
+ mergeMap((ds) => {
73
+ const runner = createQueryVariableRunner(ds);
74
+ const target = runner.getTarget(this);
75
+ const request = this.getRequest(target, args.searchFilter);
76
+ return runner.runRequest({ variable: this, searchFilter: args.searchFilter }, request).pipe(
77
+ registerQueryWithController({
78
+ type: "variable",
79
+ request,
80
+ origin: this
81
+ }),
82
+ filter((data) => data.state === LoadingState.Done || data.state === LoadingState.Error),
83
+ take(1),
84
+ mergeMap((data) => {
85
+ if (data.state === LoadingState.Error) {
86
+ return throwError(() => data.error);
87
+ }
88
+ return of(data);
89
+ }),
90
+ toMetricFindValues(),
91
+ mergeMap((values) => {
92
+ let regex = "";
93
+ if (this.state.regex) {
94
+ regex = sceneGraph.interpolate(this, this.state.regex, void 0, "regex");
95
+ }
96
+ return of(metricNamesToVariableValues(regex, this.state.sort, values));
97
+ }),
98
+ catchError((error) => {
99
+ if (error.cancelled) {
100
+ return of([]);
101
+ }
102
+ return throwError(() => error);
103
+ })
104
+ );
105
+ })
106
+ );
107
+ }
108
+ getRequest(target, searchFilter) {
109
+ const scopedVars = {
110
+ __sceneObject: wrapInSafeSerializableSceneObject(this)
111
+ };
112
+ if (searchFilter) {
113
+ scopedVars.__searchFilter = { value: searchFilter, text: searchFilter };
114
+ }
115
+ const range = sceneGraph.getTimeRange(this).state.value;
116
+ const request = {
117
+ app: CoreApp.Dashboard,
118
+ requestId: v4(),
119
+ timezone: "",
120
+ range,
121
+ interval: "",
122
+ intervalMs: 0,
123
+ targets: [target],
124
+ scopedVars,
125
+ startTime: Date.now()
126
+ };
127
+ return request;
128
+ }
129
+ }
130
+ QueryVariable.Component = ({ model }) => {
131
+ return renderSelectForVariable(model);
132
+ };
133
+ function containsSearchFilter(query) {
134
+ const str = safeStringifyValue(query);
135
+ return str.indexOf(SEARCH_FILTER_VARIABLE) > -1;
136
+ }
137
+
138
+ export { QueryVariable };
139
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnlWYXJpYWJsZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdmFyaWFibGVzL3ZhcmlhbnRzL3F1ZXJ5L1F1ZXJ5VmFyaWFibGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbGFzdFZhbHVlRnJvbSwgb2YsIGZyb20sIG1lcmdlTWFwLCBmaWx0ZXIsIHRha2UsIHRocm93RXJyb3IsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBWYXJpYWJsZVJlZnJlc2gsIFZhcmlhYmxlU29ydCwgTG9hZGluZ1N0YXRlLCBDb3JlQXBwIH0gZnJvbSAnQGdyYWZhbmEvZGF0YSc7XG5pbXBvcnQgeyBzY2VuZUdyYXBoIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zY2VuZUdyYXBoL2luZGV4LmpzJztcbmltcG9ydCB7IFZhcmlhYmxlRGVwZW5kZW5jeUNvbmZpZyB9IGZyb20gJy4uLy4uL1ZhcmlhYmxlRGVwZW5kZW5jeUNvbmZpZy5qcyc7XG5pbXBvcnQgeyByZW5kZXJTZWxlY3RGb3JWYXJpYWJsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvVmFyaWFibGVWYWx1ZVNlbGVjdC5qcyc7XG5pbXBvcnQgeyBNdWx0aVZhbHVlVmFyaWFibGUgfSBmcm9tICcuLi9NdWx0aVZhbHVlVmFyaWFibGUuanMnO1xuaW1wb3J0IHsgY3JlYXRlUXVlcnlWYXJpYWJsZVJ1bm5lciB9IGZyb20gJy4vY3JlYXRlUXVlcnlWYXJpYWJsZVJ1bm5lci5qcyc7XG5pbXBvcnQgeyBtZXRyaWNOYW1lc1RvVmFyaWFibGVWYWx1ZXMgfSBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCB7IHRvTWV0cmljRmluZFZhbHVlcyB9IGZyb20gJy4vdG9NZXRyaWNGaW5kVmFsdWVzLmpzJztcbmltcG9ydCB7IGdldERhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi8uLi91dGlscy9nZXREYXRhU291cmNlLmpzJztcbmltcG9ydCB7IHNhZmVTdHJpbmdpZnlWYWx1ZSB9IGZyb20gJy4uLy4uL3V0aWxzLmpzJztcbmltcG9ydCB7IFNFQVJDSF9GSUxURVJfVkFSSUFCTEUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcmVnaXN0ZXJRdWVyeVdpdGhDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vLi4vcXVlcnlpbmcvcmVnaXN0ZXJRdWVyeVdpdGhDb250cm9sbGVyLmpzJztcbmltcG9ydCB7IHdyYXBJblNhZmVTZXJpYWxpemFibGVTY2VuZU9iamVjdCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3dyYXBJblNhZmVTZXJpYWxpemFibGVTY2VuZU9iamVjdC5qcyc7XG5cbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbmNsYXNzIFF1ZXJ5VmFyaWFibGUgZXh0ZW5kcyBNdWx0aVZhbHVlVmFyaWFibGUge1xuICBjb25zdHJ1Y3Rvcihpbml0aWFsU3RhdGUpIHtcbiAgICBzdXBlcihfX3NwcmVhZFZhbHVlcyh7XG4gICAgICB0eXBlOiBcInF1ZXJ5XCIsXG4gICAgICBuYW1lOiBcIlwiLFxuICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICB0ZXh0OiBcIlwiLFxuICAgICAgb3B0aW9uczogW10sXG4gICAgICBkYXRhc291cmNlOiBudWxsLFxuICAgICAgcmVnZXg6IFwiXCIsXG4gICAgICBxdWVyeTogXCJcIixcbiAgICAgIHJlZnJlc2g6IFZhcmlhYmxlUmVmcmVzaC5vbkRhc2hib2FyZExvYWQsXG4gICAgICBzb3J0OiBWYXJpYWJsZVNvcnQuZGlzYWJsZWRcbiAgICB9LCBpbml0aWFsU3RhdGUpKTtcbiAgICB0aGlzLl92YXJpYWJsZURlcGVuZGVuY3kgPSBuZXcgVmFyaWFibGVEZXBlbmRlbmN5Q29uZmlnKHRoaXMsIHtcbiAgICAgIHN0YXRlUGF0aHM6IFtcInJlZ2V4XCIsIFwicXVlcnlcIiwgXCJkYXRhc291cmNlXCJdXG4gICAgfSk7XG4gICAgdGhpcy5vblNlYXJjaENoYW5nZSA9IChzZWFyY2hGaWx0ZXIpID0+IHtcbiAgICAgIGlmICghY29udGFpbnNTZWFyY2hGaWx0ZXIodGhpcy5zdGF0ZS5xdWVyeSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fdXBkYXRlT3B0aW9uc0Jhc2VkT25TZWFyY2hGaWx0ZXIoc2VhcmNoRmlsdGVyKTtcbiAgICB9O1xuICAgIHRoaXMuX3VwZGF0ZU9wdGlvbnNCYXNlZE9uU2VhcmNoRmlsdGVyID0gZGVib3VuY2UoYXN5bmMgKHNlYXJjaEZpbHRlcikgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbGFzdFZhbHVlRnJvbSh0aGlzLmdldFZhbHVlT3B0aW9ucyh7IHNlYXJjaEZpbHRlciB9KSk7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgb3B0aW9uczogcmVzdWx0LCBsb2FkaW5nOiBmYWxzZSB9KTtcbiAgICB9LCA0MDApO1xuICB9XG4gIGdldFZhbHVlT3B0aW9ucyhhcmdzKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLnF1ZXJ5KSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogdHJ1ZSwgZXJyb3I6IG51bGwgfSk7XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICBnZXREYXRhU291cmNlKHRoaXMuc3RhdGUuZGF0YXNvdXJjZSwge1xuICAgICAgICBfX3NjZW5lT2JqZWN0OiB3cmFwSW5TYWZlU2VyaWFsaXphYmxlU2NlbmVPYmplY3QodGhpcylcbiAgICAgIH0pXG4gICAgKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKGRzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1bm5lciA9IGNyZWF0ZVF1ZXJ5VmFyaWFibGVSdW5uZXIoZHMpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBydW5uZXIuZ2V0VGFyZ2V0KHRoaXMpO1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5nZXRSZXF1ZXN0KHRhcmdldCwgYXJncy5zZWFyY2hGaWx0ZXIpO1xuICAgICAgICByZXR1cm4gcnVubmVyLnJ1blJlcXVlc3QoeyB2YXJpYWJsZTogdGhpcywgc2VhcmNoRmlsdGVyOiBhcmdzLnNlYXJjaEZpbHRlciB9LCByZXF1ZXN0KS5waXBlKFxuICAgICAgICAgIHJlZ2lzdGVyUXVlcnlXaXRoQ29udHJvbGxlcih7XG4gICAgICAgICAgICB0eXBlOiBcInZhcmlhYmxlXCIsXG4gICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgb3JpZ2luOiB0aGlzXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZmlsdGVyKChkYXRhKSA9PiBkYXRhLnN0YXRlID09PSBMb2FkaW5nU3RhdGUuRG9uZSB8fCBkYXRhLnN0YXRlID09PSBMb2FkaW5nU3RhdGUuRXJyb3IpLFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgbWVyZ2VNYXAoKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhLnN0YXRlID09PSBMb2FkaW5nU3RhdGUuRXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZGF0YS5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb2YoZGF0YSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdG9NZXRyaWNGaW5kVmFsdWVzKCksXG4gICAgICAgICAgbWVyZ2VNYXAoKHZhbHVlcykgPT4ge1xuICAgICAgICAgICAgbGV0IHJlZ2V4ID0gXCJcIjtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnJlZ2V4KSB7XG4gICAgICAgICAgICAgIHJlZ2V4ID0gc2NlbmVHcmFwaC5pbnRlcnBvbGF0ZSh0aGlzLCB0aGlzLnN0YXRlLnJlZ2V4LCB2b2lkIDAsIFwicmVnZXhcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb2YobWV0cmljTmFtZXNUb1ZhcmlhYmxlVmFsdWVzKHJlZ2V4LCB0aGlzLnN0YXRlLnNvcnQsIHZhbHVlcykpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBnZXRSZXF1ZXN0KHRhcmdldCwgc2VhcmNoRmlsdGVyKSB7XG4gICAgY29uc3Qgc2NvcGVkVmFycyA9IHtcbiAgICAgIF9fc2NlbmVPYmplY3Q6IHdyYXBJblNhZmVTZXJpYWxpemFibGVTY2VuZU9iamVjdCh0aGlzKVxuICAgIH07XG4gICAgaWYgKHNlYXJjaEZpbHRlcikge1xuICAgICAgc2NvcGVkVmFycy5fX3NlYXJjaEZpbHRlciA9IHsgdmFsdWU6IHNlYXJjaEZpbHRlciwgdGV4dDogc2VhcmNoRmlsdGVyIH07XG4gICAgfVxuICAgIGNvbnN0IHJhbmdlID0gc2NlbmVHcmFwaC5nZXRUaW1lUmFuZ2UodGhpcykuc3RhdGUudmFsdWU7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIGFwcDogQ29yZUFwcC5EYXNoYm9hcmQsXG4gICAgICByZXF1ZXN0SWQ6IHY0KCksXG4gICAgICB0aW1lem9uZTogXCJcIixcbiAgICAgIHJhbmdlLFxuICAgICAgaW50ZXJ2YWw6IFwiXCIsXG4gICAgICBpbnRlcnZhbE1zOiAwLFxuICAgICAgdGFyZ2V0czogW3RhcmdldF0sXG4gICAgICBzY29wZWRWYXJzLFxuICAgICAgc3RhcnRUaW1lOiBEYXRlLm5vdygpXG4gICAgfTtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxufVxuUXVlcnlWYXJpYWJsZS5Db21wb25lbnQgPSAoeyBtb2RlbCB9KSA9PiB7XG4gIHJldHVybiByZW5kZXJTZWxlY3RGb3JWYXJpYWJsZShtb2RlbCk7XG59O1xuZnVuY3Rpb24gY29udGFpbnNTZWFyY2hGaWx0ZXIocXVlcnkpIHtcbiAgY29uc3Qgc3RyID0gc2FmZVN0cmluZ2lmeVZhbHVlKHF1ZXJ5KTtcbiAgcmV0dXJuIHN0ci5pbmRleE9mKFNFQVJDSF9GSUxURVJfVkFSSUFCTEUpID4gLTE7XG59XG5cbmV4cG9ydCB7IFF1ZXJ5VmFyaWFibGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVVhWbGNubFdZWEpwWVdKc1pTNXFjeUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2TGk0dkxpNHZMaTR2YzNKakwzWmhjbWxoWW14bGN5OTJZWEpwWVc1MGN5OXhkV1Z5ZVM5UmRXVnllVlpoY21saFlteGxMblJ6ZUNKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2V5QlBZbk5sY25aaFlteGxMQ0J2Wml3Z1ptbHNkR1Z5TENCMFlXdGxMQ0J0WlhKblpVMWhjQ3dnWTJGMFkyaEZjbkp2Y2l3Z2RHaHliM2RGY25KdmNpd2dabkp2YlN3Z2JHRnpkRlpoYkhWbFJuSnZiU0I5SUdaeWIyMGdKM0o0YW5Nbk8xeHVhVzF3YjNKMElIc2dkalFnWVhNZ2RYVnBaSFkwSUgwZ1puSnZiU0FuZFhWcFpDYzdYRzVjYm1sdGNHOXlkQ0I3WEc0Z0lFTnZjbVZCY0hBc1hHNGdJRVJoZEdGUmRXVnllVkpsY1hWbGMzUXNYRzRnSUV4dllXUnBibWRUZEdGMFpTeGNiaUFnVUdGdVpXeEVZWFJoTEZ4dUlDQlRZMjl3WldSV1lYSnpMRnh1SUNCV1lYSnBZV0pzWlZKbFpuSmxjMmdzWEc0Z0lGWmhjbWxoWW14bFUyOXlkQ3hjYm4wZ1puSnZiU0FuUUdkeVlXWmhibUV2WkdGMFlTYzdYRzVjYm1sdGNHOXlkQ0I3SUhOalpXNWxSM0poY0dnZ2ZTQm1jbTl0SUNjdUxpOHVMaTh1TGk5amIzSmxMM05qWlc1bFIzSmhjR2duTzF4dWFXMXdiM0owSUhzZ1UyTmxibVZEYjIxd2IyNWxiblJRY205d2N5d2dVMk5sYm1WRVlYUmhVWFZsY25rZ2ZTQm1jbTl0SUNjdUxpOHVMaTh1TGk5amIzSmxMM1I1Y0dWekp6dGNibWx0Y0c5eWRDQjdJRlpoY21saFlteGxSR1Z3Wlc1a1pXNWplVU52Ym1acFp5QjlJR1p5YjIwZ0p5NHVMeTR1TDFaaGNtbGhZbXhsUkdWd1pXNWtaVzVqZVVOdmJtWnBaeWM3WEc1cGJYQnZjblFnZXlCeVpXNWtaWEpUWld4bFkzUkdiM0pXWVhKcFlXSnNaU0I5SUdaeWIyMGdKeTR1THk0dUwyTnZiWEJ2Ym1WdWRITXZWbUZ5YVdGaWJHVldZV3gxWlZObGJHVmpkQ2M3WEc1cGJYQnZjblFnZXlCV1lYSnBZV0pzWlZaaGJIVmxUM0IwYVc5dUlIMGdabkp2YlNBbkxpNHZMaTR2ZEhsd1pYTW5PMXh1YVcxd2IzSjBJSHNnVFhWc2RHbFdZV3gxWlZaaGNtbGhZbXhsTENCTmRXeDBhVlpoYkhWbFZtRnlhV0ZpYkdWVGRHRjBaU3dnVm1GeWFXRmliR1ZIWlhSUGNIUnBiMjV6UVhKbmN5QjlJR1p5YjIwZ0p5NHVMMDExYkhScFZtRnNkV1ZXWVhKcFlXSnNaU2M3WEc1Y2JtbHRjRzl5ZENCN0lHTnlaV0YwWlZGMVpYSjVWbUZ5YVdGaWJHVlNkVzV1WlhJZ2ZTQm1jbTl0SUNjdUwyTnlaV0YwWlZGMVpYSjVWbUZ5YVdGaWJHVlNkVzV1WlhJbk8xeHVhVzF3YjNKMElIc2diV1YwY21salRtRnRaWE5VYjFaaGNtbGhZbXhsVm1Gc2RXVnpJSDBnWm5KdmJTQW5MaTkxZEdsc2N5YzdYRzVwYlhCdmNuUWdleUIwYjAxbGRISnBZMFpwYm1SV1lXeDFaWE1nZlNCbWNtOXRJQ2N1TDNSdlRXVjBjbWxqUm1sdVpGWmhiSFZsY3ljN1hHNXBiWEJ2Y25RZ2V5Qm5aWFJFWVhSaFUyOTFjbU5sSUgwZ1puSnZiU0FuTGk0dkxpNHZMaTR2ZFhScGJITXZaMlYwUkdGMFlWTnZkWEpqWlNjN1hHNXBiWEJ2Y25RZ2V5QnpZV1psVTNSeWFXNW5hV1o1Vm1Gc2RXVWdmU0JtY205dElDY3VMaTh1TGk5MWRHbHNjeWM3WEc1cGJYQnZjblFnZXlCRVlYUmhVWFZsY25rc0lFUmhkR0ZUYjNWeVkyVlNaV1lnZlNCbWNtOXRJQ2RBWjNKaFptRnVZUzl6WTJobGJXRW5PMXh1YVcxd2IzSjBJSHNnVTBWQlVrTklYMFpKVEZSRlVsOVdRVkpKUVVKTVJTQjlJR1p5YjIwZ0p5NHVMeTR1TDJOdmJuTjBZVzUwY3ljN1hHNXBiWEJ2Y25RZ2V5QmtaV0p2ZFc1alpTQjlJR1p5YjIwZ0oyeHZaR0Z6YUNjN1hHNXBiWEJ2Y25RZ2V5QnlaV2RwYzNSbGNsRjFaWEo1VjJsMGFFTnZiblJ5YjJ4c1pYSWdmU0JtY205dElDY3VMaTh1TGk4dUxpOXhkV1Z5ZVdsdVp5OXlaV2RwYzNSbGNsRjFaWEo1VjJsMGFFTnZiblJ5YjJ4c1pYSW5PMXh1YVcxd2IzSjBJSHNnZDNKaGNFbHVVMkZtWlZObGNtbGhiR2w2WVdKc1pWTmpaVzVsVDJKcVpXTjBJSDBnWm5KdmJTQW5MaTR2TGk0dkxpNHZkWFJwYkhNdmQzSmhjRWx1VTJGbVpWTmxjbWxoYkdsNllXSnNaVk5qWlc1bFQySnFaV04wSnp0Y2JseHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQlJkV1Z5ZVZaaGNtbGhZbXhsVTNSaGRHVWdaWGgwWlc1a2N5Qk5kV3gwYVZaaGJIVmxWbUZ5YVdGaWJHVlRkR0YwWlNCN1hHNGdJSFI1Y0dVNklDZHhkV1Z5ZVNjN1hHNGdJR1JoZEdGemIzVnlZMlU2SUVSaGRHRlRiM1Z5WTJWU1pXWWdmQ0J1ZFd4c08xeHVJQ0J4ZFdWeWVUb2djM1J5YVc1bklId2dVMk5sYm1WRVlYUmhVWFZsY25rN1hHNGdJSEpsWjJWNE9pQnpkSEpwYm1jN1hHNGdJSEpsWm5KbGMyZzZJRlpoY21saFlteGxVbVZtY21WemFEdGNiaUFnYzI5eWREb2dWbUZ5YVdGaWJHVlRiM0owTzF4dUlDQXZLaW9nUUdsdWRHVnlibUZzSUU5dWJIa2dabTl5SUhWelpTQnBibk5wWkdVZ1kyOXlaU0JrWVhOb1ltOWhjbVJ6SUNvdlhHNGdJR1JsWm1sdWFYUnBiMjQvT2lCemRISnBibWM3WEc1OVhHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCUmRXVnllVlpoY21saFlteGxJR1Y0ZEdWdVpITWdUWFZzZEdsV1lXeDFaVlpoY21saFlteGxQRkYxWlhKNVZtRnlhV0ZpYkdWVGRHRjBaVDRnZTF4dUlDQndjbTkwWldOMFpXUWdYM1poY21saFlteGxSR1Z3Wlc1a1pXNWplU0E5SUc1bGR5QldZWEpwWVdKc1pVUmxjR1Z1WkdWdVkzbERiMjVtYVdjb2RHaHBjeXdnZTF4dUlDQWdJSE4wWVhSbFVHRjBhSE02SUZzbmNtVm5aWGduTENBbmNYVmxjbmtuTENBblpHRjBZWE52ZFhKalpTZGRMRnh1SUNCOUtUdGNibHh1SUNCd2RXSnNhV01nWTI5dWMzUnlkV04wYjNJb2FXNXBkR2xoYkZOMFlYUmxPaUJRWVhKMGFXRnNQRkYxWlhKNVZtRnlhV0ZpYkdWVGRHRjBaVDRwSUh0Y2JpQWdJQ0J6ZFhCbGNpaDdYRzRnSUNBZ0lDQjBlWEJsT2lBbmNYVmxjbmtuTEZ4dUlDQWdJQ0FnYm1GdFpUb2dKeWNzWEc0Z0lDQWdJQ0IyWVd4MVpUb2dKeWNzWEc0Z0lDQWdJQ0IwWlhoME9pQW5KeXhjYmlBZ0lDQWdJRzl3ZEdsdmJuTTZJRnRkTEZ4dUlDQWdJQ0FnWkdGMFlYTnZkWEpqWlRvZ2JuVnNiQ3hjYmlBZ0lDQWdJSEpsWjJWNE9pQW5KeXhjYmlBZ0lDQWdJSEYxWlhKNU9pQW5KeXhjYmlBZ0lDQWdJSEpsWm5KbGMyZzZJRlpoY21saFlteGxVbVZtY21WemFDNXZia1JoYzJoaWIyRnlaRXh2WVdRc1hHNGdJQ0FnSUNCemIzSjBPaUJXWVhKcFlXSnNaVk52Y25RdVpHbHpZV0pzWldRc1hHNGdJQ0FnSUNBdUxpNXBibWwwYVdGc1UzUmhkR1VzWEc0Z0lDQWdmU2s3WEc0Z0lIMWNibHh1SUNCd2RXSnNhV01nWjJWMFZtRnNkV1ZQY0hScGIyNXpLR0Z5WjNNNklGWmhjbWxoWW14bFIyVjBUM0IwYVc5dWMwRnlaM01wT2lCUFluTmxjblpoWW14bFBGWmhjbWxoWW14bFZtRnNkV1ZQY0hScGIyNWJYVDRnZTF4dUlDQWdJR2xtSUNnaGRHaHBjeTV6ZEdGMFpTNXhkV1Z5ZVNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc5bUtGdGRLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG5ObGRGTjBZWFJsS0hzZ2JHOWhaR2x1WnpvZ2RISjFaU3dnWlhKeWIzSTZJRzUxYkd3Z2ZTazdYRzVjYmlBZ0lDQnlaWFIxY200Z1puSnZiU2hjYmlBZ0lDQWdJR2RsZEVSaGRHRlRiM1Z5WTJVb2RHaHBjeTV6ZEdGMFpTNWtZWFJoYzI5MWNtTmxMQ0I3WEc0Z0lDQWdJQ0FnSUY5ZmMyTmxibVZQWW1wbFkzUTZJSGR5WVhCSmJsTmhabVZUWlhKcFlXeHBlbUZpYkdWVFkyVnVaVTlpYW1WamRDaDBhR2x6S1N4Y2JpQWdJQ0FnSUgwcFhHNGdJQ0FnS1M1d2FYQmxLRnh1SUNBZ0lDQWdiV1Z5WjJWTllYQW9LR1J6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElISjFibTVsY2lBOUlHTnlaV0YwWlZGMVpYSjVWbUZ5YVdGaWJHVlNkVzV1WlhJb1pITXBPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQjBZWEpuWlhRZ1BTQnlkVzV1WlhJdVoyVjBWR0Z5WjJWMEtIUm9hWE1wTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J5WlhGMVpYTjBJRDBnZEdocGN5NW5aWFJTWlhGMVpYTjBLSFJoY21kbGRDd2dZWEpuY3k1elpXRnlZMmhHYVd4MFpYSXBPMXh1WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ5ZFc1dVpYSXVjblZ1VW1WeGRXVnpkQ2g3SUhaaGNtbGhZbXhsT2lCMGFHbHpMQ0J6WldGeVkyaEdhV3gwWlhJNklHRnlaM011YzJWaGNtTm9SbWxzZEdWeUlIMHNJSEpsY1hWbGMzUXBMbkJwY0dVb1hHNGdJQ0FnSUNBZ0lDQWdjbVZuYVhOMFpYSlJkV1Z5ZVZkcGRHaERiMjUwY205c2JHVnlLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUjVjR1U2SUNkMllYSnBZV0pzWlNjc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhGMVpYTjBPaUJ5WlhGMVpYTjBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2IzSnBaMmx1T2lCMGFHbHpMRnh1SUNBZ0lDQWdJQ0FnSUgwcExGeHVJQ0FnSUNBZ0lDQWdJR1pwYkhSbGNpZ29aR0YwWVNrZ1BUNGdaR0YwWVM1emRHRjBaU0E5UFQwZ1RHOWhaR2x1WjFOMFlYUmxMa1J2Ym1VZ2ZId2daR0YwWVM1emRHRjBaU0E5UFQwZ1RHOWhaR2x1WjFOMFlYUmxMa1Z5Y205eUtTd2dMeThnZDJVZ2IyNXNlU0JqWVhKbElHRmliM1YwSUdSdmJtVWdiM0lnWlhKeWIzSWdabTl5SUc1dmQxeHVJQ0FnSUNBZ0lDQWdJSFJoYTJVb01Ta3NJQzh2SUhSaGEyVWdkR2hsSUdacGNuTjBJSEpsYzNWc2RDd2dkWE5wYm1jZ1ptbHljM1FnWTJGMWMyVmtJR0VnWW5WbklIZG9aWEpsSUdsMElHbHVJSE52YldVZ2MybDBkV0YwYVc5dWN5QjBhSEp2ZHlCaGJpQjFibU5oZFdkb2RDQmxjbkp2Y2lCaVpXTmhkWE5sSUc5bUlHNXZJSEpsYzNWc2RITWdhR0ZrSUdKbFpXNGdjbVZqWldsMlpXUWdlV1YwWEc0Z0lDQWdJQ0FnSUNBZ2JXVnlaMlZOWVhBb0tHUmhkR0U2SUZCaGJtVnNSR0YwWVNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR1JoZEdFdWMzUmhkR1VnUFQwOUlFeHZZV1JwYm1kVGRHRjBaUzVGY25KdmNpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHliM2RGY25KdmNpZ29LU0E5UGlCa1lYUmhMbVZ5Y205eUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnZaaWhrWVhSaEtUdGNiaUFnSUNBZ0lDQWdJQ0I5S1N4Y2JpQWdJQ0FnSUNBZ0lDQjBiMDFsZEhKcFkwWnBibVJXWVd4MVpYTW9LU3hjYmlBZ0lDQWdJQ0FnSUNCdFpYSm5aVTFoY0Nnb2RtRnNkV1Z6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZuWlhnZ1BTQW5KenRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuTjBZWFJsTG5KbFoyVjRLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEpsWjJWNElEMGdjMk5sYm1WSGNtRndhQzVwYm5SbGNuQnZiR0YwWlNoMGFHbHpMQ0IwYUdsekxuTjBZWFJsTG5KbFoyVjRMQ0IxYm1SbFptbHVaV1FzSUNkeVpXZGxlQ2NwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUc5bUtHMWxkSEpwWTA1aGJXVnpWRzlXWVhKcFlXSnNaVlpoYkhWbGN5aHlaV2RsZUN3Z2RHaHBjeTV6ZEdGMFpTNXpiM0owTENCMllXeDFaWE1wS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlLU3hjYmlBZ0lDQWdJQ0FnSUNCallYUmphRVZ5Y205eUtDaGxjbkp2Y2lrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR1Z5Y205eUxtTmhibU5sYkd4bFpDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2IyWW9XMTBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2NtOTNSWEp5YjNJb0tDa2dQVDRnWlhKeWIzSXBPMXh1SUNBZ0lDQWdJQ0FnSUgwcFhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQjlLVnh1SUNBZ0lDazdYRzRnSUgxY2JseHVJQ0J3Y21sMllYUmxJR2RsZEZKbGNYVmxjM1FvZEdGeVoyVjBPaUJFWVhSaFVYVmxjbmtnZkNCemRISnBibWNzSUhObFlYSmphRVpwYkhSbGNqODZJSE4wY21sdVp5a2dlMXh1SUNBZ0lHTnZibk4wSUhOamIzQmxaRlpoY25NNklGTmpiM0JsWkZaaGNuTWdQU0I3WEc0Z0lDQWdJQ0JmWDNOalpXNWxUMkpxWldOME9pQjNjbUZ3U1c1VFlXWmxVMlZ5YVdGc2FYcGhZbXhsVTJObGJtVlBZbXBsWTNRb2RHaHBjeWtzWEc0Z0lDQWdmVHRjYmx4dUlDQWdJR2xtSUNoelpXRnlZMmhHYVd4MFpYSXBJSHRjYmlBZ0lDQWdJSE5qYjNCbFpGWmhjbk11WDE5elpXRnlZMmhHYVd4MFpYSWdQU0I3SUhaaGJIVmxPaUJ6WldGeVkyaEdhV3gwWlhJc0lIUmxlSFE2SUhObFlYSmphRVpwYkhSbGNpQjlPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHTnZibk4wSUhKaGJtZGxJRDBnYzJObGJtVkhjbUZ3YUM1blpYUlVhVzFsVW1GdVoyVW9kR2hwY3lrdWMzUmhkR1V1ZG1Gc2RXVTdYRzVjYmlBZ0lDQmpiMjV6ZENCeVpYRjFaWE4wT2lCRVlYUmhVWFZsY25sU1pYRjFaWE4wSUQwZ2UxeHVJQ0FnSUNBZ1lYQndPaUJEYjNKbFFYQndMa1JoYzJoaWIyRnlaQ3hjYmlBZ0lDQWdJSEpsY1hWbGMzUkpaRG9nZFhWcFpIWTBLQ2tzWEc0Z0lDQWdJQ0IwYVcxbGVtOXVaVG9nSnljc1hHNGdJQ0FnSUNCeVlXNW5aU3hjYmlBZ0lDQWdJR2x1ZEdWeWRtRnNPaUFuSnl4Y2JpQWdJQ0FnSUdsdWRHVnlkbUZzVFhNNklEQXNYRzRnSUNBZ0lDQXZMeUJBZEhNdGFXZHViM0psWEc0Z0lDQWdJQ0IwWVhKblpYUnpPaUJiZEdGeVoyVjBYU3hjYmlBZ0lDQWdJSE5qYjNCbFpGWmhjbk1zWEc0Z0lDQWdJQ0J6ZEdGeWRGUnBiV1U2SUVSaGRHVXVibTkzS0Nrc1hHNGdJQ0FnZlR0Y2JseHVJQ0FnSUhKbGRIVnliaUJ5WlhGMVpYTjBPMXh1SUNCOVhHNWNiaUFnYjI1VFpXRnlZMmhEYUdGdVoyVWdQU0FvYzJWaGNtTm9SbWxzZEdWeU9pQnpkSEpwYm1jcElEMCtJSHRjYmlBZ0lDQnBaaUFvSVdOdmJuUmhhVzV6VTJWaGNtTm9SbWxzZEdWeUtIUm9hWE11YzNSaGRHVXVjWFZsY25rcEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZEdocGN5NWZkWEJrWVhSbFQzQjBhVzl1YzBKaGMyVmtUMjVUWldGeVkyaEdhV3gwWlhJb2MyVmhjbU5vUm1sc2RHVnlLVHRjYmlBZ2ZUdGNibHh1SUNCd2NtbDJZWFJsSUY5MWNHUmhkR1ZQY0hScGIyNXpRbUZ6WldSUGJsTmxZWEpqYUVacGJIUmxjaUE5SUdSbFltOTFibU5sS0dGemVXNWpJQ2h6WldGeVkyaEdhV3gwWlhJNklITjBjbWx1WnlrZ1BUNGdlMXh1SUNBZ0lHTnZibk4wSUhKbGMzVnNkQ0E5SUdGM1lXbDBJR3hoYzNSV1lXeDFaVVp5YjIwb2RHaHBjeTVuWlhSV1lXeDFaVTl3ZEdsdmJuTW9leUJ6WldGeVkyaEdhV3gwWlhJZ2ZTa3BPMXh1SUNBZ0lIUm9hWE11YzJWMFUzUmhkR1VvZXlCdmNIUnBiMjV6T2lCeVpYTjFiSFFzSUd4dllXUnBibWM2SUdaaGJITmxJSDBwTzF4dUlDQjlMQ0EwTURBcE8xeHVYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdRMjl0Y0c5dVpXNTBJRDBnS0hzZ2JXOWtaV3dnZlRvZ1UyTmxibVZEYjIxd2IyNWxiblJRY205d2N6eE5kV3gwYVZaaGJIVmxWbUZ5YVdGaWJHVStLU0E5UGlCN1hHNGdJQ0FnY21WMGRYSnVJSEpsYm1SbGNsTmxiR1ZqZEVadmNsWmhjbWxoWW14bEtHMXZaR1ZzS1R0Y2JpQWdmVHRjYm4xY2JseHVablZ1WTNScGIyNGdZMjl1ZEdGcGJuTlRaV0Z5WTJoR2FXeDBaWElvY1hWbGNuazZJSE4wY21sdVp5QjhJRVJoZEdGUmRXVnllU2tnZTF4dUlDQmpiMjV6ZENCemRISWdQU0J6WVdabFUzUnlhVzVuYVdaNVZtRnNkV1VvY1hWbGNua3BPMXh1SUNCeVpYUjFjbTRnYzNSeUxtbHVaR1Y0VDJZb1UwVkJVa05JWDBaSlRGUkZVbDlXUVZKSlFVSk1SU2tnUGlBdE1UdGNibjFjYmlKZExDSnVZVzFsY3lJNld5SjFkV2xrZGpRaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096dEJRVEJEVHl4TlFVRk5MSE5DUVVGelFpeHJRa0ZCZFVNc1EwRkJRVHRCUVVGQkxFVkJTMnBGTEZsQlFWa3NXVUZCTWtNc1JVRkJRVHRCUVVNMVJDeEpRVUZOTEV0QlFVRXNRMEZCUVN4alFVRkJMRU5CUVVFN1FVRkJRU3hOUVVOS0xFbEJRVTBzUlVGQlFTeFBRVUZCTzBGQlFVRXNUVUZEVGl4SlFVRk5MRVZCUVVFc1JVRkJRVHRCUVVGQkxFMUJRMDRzUzBGQlR5eEZRVUZCTEVWQlFVRTdRVUZCUVN4TlFVTlFMRWxCUVUwc1JVRkJRU3hGUVVGQk8wRkJRVUVzVFVGRFRpeFRRVUZUTEVWQlFVTTdRVUZCUVN4TlFVTldMRlZCUVZrc1JVRkJRU3hKUVVGQk8wRkJRVUVzVFVGRFdpeExRVUZQTEVWQlFVRXNSVUZCUVR0QlFVRkJMRTFCUTFBc1MwRkJUeXhGUVVGQkxFVkJRVUU3UVVGQlFTeE5RVU5RTEZOQlFWTXNaVUZCWjBJc1EwRkJRU3hsUVVGQk8wRkJRVUVzVFVGRGVrSXNUVUZCVFN4WlFVRmhMRU5CUVVFc1VVRkJRVHRCUVVGQkxFdEJRVUVzUlVGRGFFSXNXVUZEU2l4RFFVRkJMRU5CUVVFc1EwRkJRVHRCUVdwQ1NDeEpRVUZWTEVsQlFVRXNRMEZCUVN4dFFrRkJRU3hIUVVGelFpeEpRVUZKTEhkQ1FVRkJMRU5CUVhsQ0xFbEJRVTBzUlVGQlFUdEJRVUZCTEUxQlEycEZMRlZCUVZrc1JVRkJRU3hEUVVGRExFOUJRVk1zUlVGQlFTeFBRVUZCTEVWQlFWTXNXVUZCV1N4RFFVRkJPMEZCUVVFc1MwRkROVU1zUTBGQlFTeERRVUZCTzBGQkswWkVMRWxCUVVFc1NVRkJRU3hEUVVGQkxHTkJRVUVzUjBGQmFVSXNRMEZCUXl4WlFVRjVRaXhMUVVGQk8wRkJRM3BETEUxQlFVRXNTVUZCU1N4RFFVRkRMRzlDUVVGQkxFTkJRWEZDTEVsQlFVc3NRMEZCUVN4TFFVRkJMRU5CUVUwc1MwRkJTeXhEUVVGSExFVkJRVUU3UVVGRE0wTXNVVUZCUVN4UFFVRkJPMEZCUVVFc1QwRkRSanRCUVVWQkxFMUJRVUVzU1VGQlFTeERRVUZMTEd0RFFVRnJReXhaUVVGWkxFTkJRVUVzUTBGQlFUdEJRVUZCTEV0QlEzSkVMRU5CUVVFN1FVRkZRU3hKUVVGUkxFbEJRVUVzUTBGQlFTeHBRMEZCUVN4SFFVRnZReXhSUVVGVExFTkJRVUVzVDBGQlR5eFpRVUY1UWl4TFFVRkJPMEZCUTI1R0xFMUJRVTBzVFVGQlFTeE5RVUZCTEVkQlFWTXNUVUZCVFN4aFFVRmpMRU5CUVVFc1NVRkJRU3hEUVVGTExHZENRVUZuUWl4RlFVRkZMRmxCUVVFc1JVRkJZeXhEUVVGRExFTkJRVUVzUTBGQlFUdEJRVU42UlN4TlFVRkJMRWxCUVVFc1EwRkJTeXhUUVVGVExFVkJRVVVzVDBGQlFTeEZRVUZUTEUxQlFWRXNSVUZCUVN4UFFVRkJMRVZCUVZNc1QwRkJUeXhEUVVGQkxFTkJRVUU3UVVGQlFTeFBRVU5vUkN4SFFVRkhMRU5CUVVFc1EwRkJRVHRCUVVGQkxFZEJNVVpPTzBGQlFVRXNSVUZGVHl4blFrRkJaMElzU1VGQmFVVXNSVUZCUVR0QlFVTjBSaXhKUVVGSkxFbEJRVUVzUTBGQlF5eEpRVUZMTEVOQlFVRXNTMEZCUVN4RFFVRk5MRXRCUVU4c1JVRkJRVHRCUVVOeVFpeE5RVUZQTEU5QlFVRXNSVUZCUVN4RFFVRkhMRVZCUVVVc1EwRkJRU3hEUVVGQk8wRkJRVUVzUzBGRFpEdEJRVVZCTEVsQlFVRXNTVUZCUVN4RFFVRkxMRk5CUVZNc1JVRkJSU3hQUVVGQkxFVkJRVk1zU1VGQlRTeEZRVUZCTEV0QlFVRXNSVUZCVHl4TlFVRk5MRU5CUVVFc1EwRkJRVHRCUVVVMVF5eEpRVUZQTEU5QlFVRXNTVUZCUVR0QlFVRkJMRTFCUTB3c1lVRkJRU3hEUVVGakxFbEJRVXNzUTBGQlFTeExRVUZCTEVOQlFVMHNWVUZCV1N4RlFVRkJPMEZCUVVFc1VVRkRia01zWVVGQlFTeEZRVUZsTEd0RFFVRnJReXhKUVVGSkxFTkJRVUU3UVVGQlFTeFBRVU4wUkN4RFFVRkJPMEZCUVVFc1MwRkRSQ3hEUVVGQkxFbEJRVUU3UVVGQlFTeE5RVU5CTEZGQlFVRXNRMEZCVXl4RFFVRkRMRVZCUVU4c1MwRkJRVHRCUVVObUxGRkJRVTBzVFVGQlFTeE5RVUZCTEVkQlFWTXNNRUpCUVRCQ0xFVkJRVVVzUTBGQlFTeERRVUZCTzBGQlF6TkRMRkZCUVUwc1RVRkJRU3hOUVVGQkxFZEJRVk1zVFVGQlR5eERRVUZCTEZOQlFVRXNRMEZCVlN4SlFVRkpMRU5CUVVFc1EwRkJRVHRCUVVOd1F5eFJRVUZCTEUxQlFVMHNUMEZCVlN4SFFVRkJMRWxCUVVFc1EwRkJTeXhWUVVGWExFTkJRVUVzVFVGQlFTeEZRVUZSTEV0QlFVc3NXVUZCV1N4RFFVRkJMRU5CUVVFN1FVRkZla1FzVVVGQlR5eFBRVUZCTEUxQlFVRXNRMEZCVHl4VlFVRlhMRU5CUVVFc1JVRkJSU3hSUVVGVkxFVkJRVUVzU1VGQlFTeEZRVUZOTEdOQlFXTXNTVUZCU3l4RFFVRkJMRmxCUVVFc1JVRkJaMElzUlVGQlFTeFBRVUZQTEVOQlFVVXNRMEZCUVN4SlFVRkJPMEZCUVVFc1ZVRkRja1lzTWtKQlFUUkNMRU5CUVVFN1FVRkJRU3haUVVNeFFpeEpRVUZOTEVWQlFVRXNWVUZCUVR0QlFVRkJMRmxCUTA0c1QwRkJRVHRCUVVGQkxGbEJRMEVzVFVGQlVTeEZRVUZCTEVsQlFVRTdRVUZCUVN4WFFVTlVMRU5CUVVFN1FVRkJRU3hWUVVORUxFMUJRVUVzUTBGQlR5eERRVUZETEVsQlFVRXNTMEZCVXl4SlFVRkxMRU5CUVVFc1MwRkJRU3hMUVVGVkxHRkJRV0VzU1VGQlVTeEpRVUZCTEVsQlFVRXNRMEZCU3l4TFFVRlZMRXRCUVVFc1dVRkJRU3hEUVVGaExFdEJRVXNzUTBGQlFUdEJRVUZCTEZWQlEzUkdMRXRCUVVzc1EwRkJReXhEUVVGQk8wRkJRVUVzVlVGRFRpeFJRVUZCTEVOQlFWTXNRMEZCUXl4SlFVRnZRaXhMUVVGQk8wRkJRelZDTEZsQlFVa3NTVUZCUVN4SlFVRkJMRU5CUVVzc1MwRkJWU3hMUVVGQkxGbEJRVUVzUTBGQllTeExRVUZQTEVWQlFVRTdRVUZEY2tNc1kwRkJUeXhQUVVGQkxGVkJRVUVzUTBGQlZ5eE5RVUZOTEVsQlFVRXNRMEZCU3l4TFFVRkxMRU5CUVVFc1EwRkJRVHRCUVVGQkxHRkJRM0JETzBGQlEwRXNXVUZCUVN4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGQkxFTkJRVUU3UVVGQlFTeFhRVU5tTEVOQlFVRTdRVUZCUVN4VlFVTkVMR3RDUVVGdFFpeEZRVUZCTzBGQlFVRXNWVUZEYmtJc1VVRkJRU3hEUVVGVExFTkJRVU1zVFVGQlZ5eExRVUZCTzBGQlEyNUNMRmxCUVVFc1NVRkJTU3hMUVVGUkxFZEJRVUVzUlVGQlFTeERRVUZCTzBGQlExb3NXVUZCU1N4SlFVRkJMRWxCUVVFc1EwRkJTeXhOUVVGTkxFdEJRVThzUlVGQlFUdEJRVU53UWl4alFVRkJMRXRCUVVFc1IwRkJVU3hYUVVGWExGZEJRVmtzUTBGQlFTeEpRVUZCTEVWQlFVMHNTMEZCU3l4TFFVRk5MRU5CUVVFc1MwRkJRU3hGUVVGUExGRkJRVmNzVDBGQlR5eERRVUZCTEVOQlFVRTdRVUZCUVN4aFFVTXpSVHRCUVVOQkxGbEJRVUVzVDBGQlR5eEhRVUZITERKQ1FVRTBRaXhEUVVGQkxFdEJRVUVzUlVGQlR5eExRVUZMTEV0QlFVMHNRMEZCUVN4SlFVRkJMRVZCUVUwc1RVRkJUU3hEUVVGRExFTkJRVUVzUTBGQlFUdEJRVUZCTEZkQlEzUkZMRU5CUVVFN1FVRkJRU3hWUVVORUxGVkJRVUVzUTBGQlZ5eERRVUZETEV0QlFWVXNTMEZCUVR0QlFVTndRaXhaUVVGQkxFbEJRVWtzVFVGQlRTeFRRVUZYTEVWQlFVRTdRVUZEYmtJc1kwRkJUeXhQUVVGQkxFVkJRVUVzUTBGQlJ5eEZRVUZGTEVOQlFVRXNRMEZCUVR0QlFVRkJMR0ZCUTJRN1FVRkRRU3haUVVGUExFOUJRVUVzVlVGQlFTeERRVUZYTEUxQlFVMHNTMEZCU3l4RFFVRkJMRU5CUVVFN1FVRkJRU3hYUVVNNVFpeERRVUZCTzBGQlFVRXNVMEZEU0N4RFFVRkJPMEZCUVVFc1QwRkRSQ3hEUVVGQk8wRkJRVUVzUzBGRFNDeERRVUZCTzBGQlFVRXNSMEZEUmp0QlFVRkJMRVZCUlZFc1ZVRkJRU3hEUVVGWExGRkJRVFJDTEZsQlFYVkNMRVZCUVVFN1FVRkRjRVVzU1VGQlFTeE5RVUZOTEZWQlFYbENMRWRCUVVFN1FVRkJRU3hOUVVNM1FpeGhRVUZCTEVWQlFXVXNhME5CUVd0RExFbEJRVWtzUTBGQlFUdEJRVUZCTEV0QlEzWkVMRU5CUVVFN1FVRkZRU3hKUVVGQkxFbEJRVWtzV1VGQll5eEZRVUZCTzBGQlEyaENMRTFCUVVFc1ZVRkJRU3hEUVVGWExHTkJRV2xDTEVkQlFVRXNSVUZCUlN4TFFVRlBMRVZCUVVFc1dVRkJRU3hGUVVGakxFMUJRVTBzV1VGQllTeEZRVUZCTEVOQlFVRTdRVUZCUVN4TFFVTjRSVHRCUVVWQkxFbEJRVUVzVFVGQlRTeExRVUZSTEVkQlFVRXNWVUZCUVN4RFFVRlhMRmxCUVdFc1EwRkJRU3hKUVVGSkxFVkJRVVVzUzBGQlRTeERRVUZCTEV0QlFVRXNRMEZCUVR0QlFVVnNSQ3hKUVVGQkxFMUJRVTBzVDBGQk5FSXNSMEZCUVR0QlFVRkJMRTFCUTJoRExFdEJRVXNzVDBGQlVTeERRVUZCTEZOQlFVRTdRVUZCUVN4TlFVTmlMRmRCUVZkQkxFVkJRVThzUlVGQlFUdEJRVUZCTEUxQlEyeENMRkZCUVZVc1JVRkJRU3hGUVVGQk8wRkJRVUVzVFVGRFZpeExRVUZCTzBGQlFVRXNUVUZEUVN4UlFVRlZMRVZCUVVFc1JVRkJRVHRCUVVGQkxFMUJRMVlzVlVGQldTeEZRVUZCTEVOQlFVRTdRVUZCUVN4TlFVVmFMRTlCUVVFc1JVRkJVeXhEUVVGRExFMUJRVTBzUTBGQlFUdEJRVUZCTEUxQlEyaENMRlZCUVVFN1FVRkJRU3hOUVVOQkxGTkJRVUVzUlVGQlZ5eExRVUZMTEVkQlFVa3NSVUZCUVR0QlFVRkJMRXRCUTNSQ0xFTkJRVUU3UVVGRlFTeEpRVUZQTEU5QlFVRXNUMEZCUVN4RFFVRkJPMEZCUVVFc1IwRkRWRHRCUVd0Q1JpeERRVUZCTzBGQmJFaGhMR0ZCUVVFc1EwRXJSMGNzVTBGQldTeEhRVUZCTEVOQlFVTXNSVUZCUlN4TFFVRkJMRVZCUVhGRUxFdEJRVUU3UVVGRGFFWXNSVUZCUVN4UFFVRlBMSGRDUVVGM1FpeExRVUZMTEVOQlFVRXNRMEZCUVR0QlFVTjBReXhEUVVGQkxFTkJRVUU3UVVGSFJpeFRRVUZUTEhGQ1FVRnhRaXhMUVVFeVFpeEZRVUZCTzBGQlEzWkVMRVZCUVUwc1RVRkJRU3hIUVVGQkxFZEJRVTBzYlVKQlFXMUNMRXRCUVVzc1EwRkJRU3hEUVVGQk8wRkJRM0JETEVWQlFVOHNUMEZCUVN4SFFVRkJMRU5CUVVrc1QwRkJVU3hEUVVGQkxITkNRVUZ6UWl4RFFVRkpMRWRCUVVFc1EwRkJRU3hEUVVGQkxFTkJRVUU3UVVGREwwTTdPenM3SW4wPVxuIl0sIm5hbWVzIjpbInV1aWR2NCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMENPLE1BQU0sc0JBQXNCLGtCQUF1QyxDQUFBO0FBS2pFLEVBQUEsV0FBQSxD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
@@ -0,0 +1,129 @@
1
+ import { from, mergeMap, of } from 'rxjs';
2
+ import { LoadingState, getDefaultTimeRange } from '@grafana/data';
3
+ import { getRunRequest } from '@grafana/runtime';
4
+ import { hasStandardVariableSupport, hasLegacyVariableSupport, hasCustomVariableSupport } from './guards.js';
5
+
6
+ var __defProp = Object.defineProperty;
7
+ var __defProps = Object.defineProperties;
8
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
9
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
12
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
+ var __spreadValues = (a, b) => {
14
+ for (var prop in b || (b = {}))
15
+ if (__hasOwnProp.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ if (__getOwnPropSymbols)
18
+ for (var prop of __getOwnPropSymbols(b)) {
19
+ if (__propIsEnum.call(b, prop))
20
+ __defNormalProp(a, prop, b[prop]);
21
+ }
22
+ return a;
23
+ };
24
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
+ class StandardQueryRunner {
26
+ constructor(datasource, _runRequest = getRunRequest()) {
27
+ this.datasource = datasource;
28
+ this._runRequest = _runRequest;
29
+ }
30
+ getTarget(variable) {
31
+ if (hasStandardVariableSupport(this.datasource)) {
32
+ return this.datasource.variables.toDataQuery(ensureVariableQueryModelIsADataQuery(variable));
33
+ }
34
+ throw new Error("Couldn't create a target with supplied arguments.");
35
+ }
36
+ runRequest(_, request) {
37
+ if (!hasStandardVariableSupport(this.datasource)) {
38
+ return getEmptyMetricFindValueObservable();
39
+ }
40
+ if (!this.datasource.variables.query) {
41
+ return this._runRequest(this.datasource, request);
42
+ }
43
+ return this._runRequest(this.datasource, request, this.datasource.variables.query.bind(this.datasource.variables));
44
+ }
45
+ }
46
+ class LegacyQueryRunner {
47
+ constructor(datasource) {
48
+ this.datasource = datasource;
49
+ }
50
+ getTarget(variable) {
51
+ if (hasLegacyVariableSupport(this.datasource)) {
52
+ return variable.state.query;
53
+ }
54
+ throw new Error("Couldn't create a target with supplied arguments.");
55
+ }
56
+ runRequest({ variable, searchFilter }, request) {
57
+ if (!hasLegacyVariableSupport(this.datasource)) {
58
+ return getEmptyMetricFindValueObservable();
59
+ }
60
+ return from(
61
+ this.datasource.metricFindQuery(variable.state.query, __spreadProps(__spreadValues({}, request), {
62
+ variable: {
63
+ name: variable.state.name,
64
+ type: variable.state.type
65
+ },
66
+ searchFilter
67
+ }))
68
+ ).pipe(
69
+ mergeMap((values) => {
70
+ if (!values || !values.length) {
71
+ return getEmptyMetricFindValueObservable();
72
+ }
73
+ const series = values;
74
+ return of({ series, state: LoadingState.Done, timeRange: request.range });
75
+ })
76
+ );
77
+ }
78
+ }
79
+ class CustomQueryRunner {
80
+ constructor(datasource, _runRequest = getRunRequest()) {
81
+ this.datasource = datasource;
82
+ this._runRequest = _runRequest;
83
+ }
84
+ getTarget(variable) {
85
+ if (hasCustomVariableSupport(this.datasource)) {
86
+ return variable.state.query;
87
+ }
88
+ throw new Error("Couldn't create a target with supplied arguments.");
89
+ }
90
+ runRequest(_, request) {
91
+ if (!hasCustomVariableSupport(this.datasource)) {
92
+ return getEmptyMetricFindValueObservable();
93
+ }
94
+ if (!this.datasource.variables.query) {
95
+ return this._runRequest(this.datasource, request);
96
+ }
97
+ return this._runRequest(this.datasource, request, this.datasource.variables.query.bind(this.datasource.variables));
98
+ }
99
+ }
100
+ function getEmptyMetricFindValueObservable() {
101
+ return of({ state: LoadingState.Done, series: [], timeRange: getDefaultTimeRange() });
102
+ }
103
+ function createQueryVariableRunnerFactory(datasource) {
104
+ if (hasStandardVariableSupport(datasource)) {
105
+ return new StandardQueryRunner(datasource, getRunRequest());
106
+ }
107
+ if (hasLegacyVariableSupport(datasource)) {
108
+ return new LegacyQueryRunner(datasource);
109
+ }
110
+ if (hasCustomVariableSupport(datasource)) {
111
+ return new CustomQueryRunner(datasource);
112
+ }
113
+ throw new Error(`Couldn't create a query runner for datasource ${datasource.type}`);
114
+ }
115
+ let createQueryVariableRunner = createQueryVariableRunnerFactory;
116
+ function ensureVariableQueryModelIsADataQuery(variable) {
117
+ var _a;
118
+ const query = (_a = variable.state.query) != null ? _a : "";
119
+ if (typeof query === "string") {
120
+ return { query, refId: `variable-${variable.state.name}` };
121
+ }
122
+ if (query.refId == null) {
123
+ return __spreadProps(__spreadValues({}, query), { refId: `variable-${variable.state.name}` });
124
+ }
125
+ return variable.state.query;
126
+ }
127
+
128
+ export { createQueryVariableRunner };
129
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUXVlcnlWYXJpYWJsZVJ1bm5lci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdmFyaWFibGVzL3ZhcmlhbnRzL3F1ZXJ5L2NyZWF0ZVF1ZXJ5VmFyaWFibGVSdW5uZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnJvbSwgbWVyZ2VNYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2FkaW5nU3RhdGUsIGdldERlZmF1bHRUaW1lUmFuZ2UgfSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcbmltcG9ydCB7IGdldFJ1blJlcXVlc3QgfSBmcm9tICdAZ3JhZmFuYS9ydW50aW1lJztcbmltcG9ydCB7IGhhc1N0YW5kYXJkVmFyaWFibGVTdXBwb3J0LCBoYXNMZWdhY3lWYXJpYWJsZVN1cHBvcnQsIGhhc0N1c3RvbVZhcmlhYmxlU3VwcG9ydCB9IGZyb20gJy4vZ3VhcmRzLmpzJztcblxudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZlByb3BzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XG52YXIgX19nZXRPd25Qcm9wRGVzY3MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fc3ByZWFkUHJvcHMgPSAoYSwgYikgPT4gX19kZWZQcm9wcyhhLCBfX2dldE93blByb3BEZXNjcyhiKSk7XG5jbGFzcyBTdGFuZGFyZFF1ZXJ5UnVubmVyIHtcbiAgY29uc3RydWN0b3IoZGF0YXNvdXJjZSwgX3J1blJlcXVlc3QgPSBnZXRSdW5SZXF1ZXN0KCkpIHtcbiAgICB0aGlzLmRhdGFzb3VyY2UgPSBkYXRhc291cmNlO1xuICAgIHRoaXMuX3J1blJlcXVlc3QgPSBfcnVuUmVxdWVzdDtcbiAgfVxuICBnZXRUYXJnZXQodmFyaWFibGUpIHtcbiAgICBpZiAoaGFzU3RhbmRhcmRWYXJpYWJsZVN1cHBvcnQodGhpcy5kYXRhc291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS52YXJpYWJsZXMudG9EYXRhUXVlcnkoZW5zdXJlVmFyaWFibGVRdWVyeU1vZGVsSXNBRGF0YVF1ZXJ5KHZhcmlhYmxlKSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGNyZWF0ZSBhIHRhcmdldCB3aXRoIHN1cHBsaWVkIGFyZ3VtZW50cy5cIik7XG4gIH1cbiAgcnVuUmVxdWVzdChfLCByZXF1ZXN0KSB7XG4gICAgaWYgKCFoYXNTdGFuZGFyZFZhcmlhYmxlU3VwcG9ydCh0aGlzLmRhdGFzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gZ2V0RW1wdHlNZXRyaWNGaW5kVmFsdWVPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5kYXRhc291cmNlLnZhcmlhYmxlcy5xdWVyeSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3J1blJlcXVlc3QodGhpcy5kYXRhc291cmNlLCByZXF1ZXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3J1blJlcXVlc3QodGhpcy5kYXRhc291cmNlLCByZXF1ZXN0LCB0aGlzLmRhdGFzb3VyY2UudmFyaWFibGVzLnF1ZXJ5LmJpbmQodGhpcy5kYXRhc291cmNlLnZhcmlhYmxlcykpO1xuICB9XG59XG5jbGFzcyBMZWdhY3lRdWVyeVJ1bm5lciB7XG4gIGNvbnN0cnVjdG9yKGRhdGFzb3VyY2UpIHtcbiAgICB0aGlzLmRhdGFzb3VyY2UgPSBkYXRhc291cmNlO1xuICB9XG4gIGdldFRhcmdldCh2YXJpYWJsZSkge1xuICAgIGlmIChoYXNMZWdhY3lWYXJpYWJsZVN1cHBvcnQodGhpcy5kYXRhc291cmNlKSkge1xuICAgICAgcmV0dXJuIHZhcmlhYmxlLnN0YXRlLnF1ZXJ5O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBjcmVhdGUgYSB0YXJnZXQgd2l0aCBzdXBwbGllZCBhcmd1bWVudHMuXCIpO1xuICB9XG4gIHJ1blJlcXVlc3QoeyB2YXJpYWJsZSwgc2VhcmNoRmlsdGVyIH0sIHJlcXVlc3QpIHtcbiAgICBpZiAoIWhhc0xlZ2FjeVZhcmlhYmxlU3VwcG9ydCh0aGlzLmRhdGFzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gZ2V0RW1wdHlNZXRyaWNGaW5kVmFsdWVPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHJldHVybiBmcm9tKFxuICAgICAgdGhpcy5kYXRhc291cmNlLm1ldHJpY0ZpbmRRdWVyeSh2YXJpYWJsZS5zdGF0ZS5xdWVyeSwgX19zcHJlYWRQcm9wcyhfX3NwcmVhZFZhbHVlcyh7fSwgcmVxdWVzdCksIHtcbiAgICAgICAgdmFyaWFibGU6IHtcbiAgICAgICAgICBuYW1lOiB2YXJpYWJsZS5zdGF0ZS5uYW1lLFxuICAgICAgICAgIHR5cGU6IHZhcmlhYmxlLnN0YXRlLnR5cGVcbiAgICAgICAgfSxcbiAgICAgICAgc2VhcmNoRmlsdGVyXG4gICAgICB9KSlcbiAgICApLnBpcGUoXG4gICAgICBtZXJnZU1hcCgodmFsdWVzKSA9PiB7XG4gICAgICAgIGlmICghdmFsdWVzIHx8ICF2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldEVtcHR5TWV0cmljRmluZFZhbHVlT2JzZXJ2YWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcmllcyA9IHZhbHVlcztcbiAgICAgICAgcmV0dXJuIG9mKHsgc2VyaWVzLCBzdGF0ZTogTG9hZGluZ1N0YXRlLkRvbmUsIHRpbWVSYW5nZTogcmVxdWVzdC5yYW5nZSB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuY2xhc3MgQ3VzdG9tUXVlcnlSdW5uZXIge1xuICBjb25zdHJ1Y3RvcihkYXRhc291cmNlLCBfcnVuUmVxdWVzdCA9IGdldFJ1blJlcXVlc3QoKSkge1xuICAgIHRoaXMuZGF0YXNvdXJjZSA9IGRhdGFzb3VyY2U7XG4gICAgdGhpcy5fcnVuUmVxdWVzdCA9IF9ydW5SZXF1ZXN0O1xuICB9XG4gIGdldFRhcmdldCh2YXJpYWJsZSkge1xuICAgIGlmIChoYXNDdXN0b21WYXJpYWJsZVN1cHBvcnQodGhpcy5kYXRhc291cmNlKSkge1xuICAgICAgcmV0dXJuIHZhcmlhYmxlLnN0YXRlLnF1ZXJ5O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBjcmVhdGUgYSB0YXJnZXQgd2l0aCBzdXBwbGllZCBhcmd1bWVudHMuXCIpO1xuICB9XG4gIHJ1blJlcXVlc3QoXywgcmVxdWVzdCkge1xuICAgIGlmICghaGFzQ3VzdG9tVmFyaWFibGVTdXBwb3J0KHRoaXMuZGF0YXNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBnZXRFbXB0eU1ldHJpY0ZpbmRWYWx1ZU9ic2VydmFibGUoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRhdGFzb3VyY2UudmFyaWFibGVzLnF1ZXJ5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fcnVuUmVxdWVzdCh0aGlzLmRhdGFzb3VyY2UsIHJlcXVlc3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcnVuUmVxdWVzdCh0aGlzLmRhdGFzb3VyY2UsIHJlcXVlc3QsIHRoaXMuZGF0YXNvdXJjZS52YXJpYWJsZXMucXVlcnkuYmluZCh0aGlzLmRhdGFzb3VyY2UudmFyaWFibGVzKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEVtcHR5TWV0cmljRmluZFZhbHVlT2JzZXJ2YWJsZSgpIHtcbiAgcmV0dXJuIG9mKHsgc3RhdGU6IExvYWRpbmdTdGF0ZS5Eb25lLCBzZXJpZXM6IFtdLCB0aW1lUmFuZ2U6IGdldERlZmF1bHRUaW1lUmFuZ2UoKSB9KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVF1ZXJ5VmFyaWFibGVSdW5uZXJGYWN0b3J5KGRhdGFzb3VyY2UpIHtcbiAgaWYgKGhhc1N0YW5kYXJkVmFyaWFibGVTdXBwb3J0KGRhdGFzb3VyY2UpKSB7XG4gICAgcmV0dXJuIG5ldyBTdGFuZGFyZFF1ZXJ5UnVubmVyKGRhdGFzb3VyY2UsIGdldFJ1blJlcXVlc3QoKSk7XG4gIH1cbiAgaWYgKGhhc0xlZ2FjeVZhcmlhYmxlU3VwcG9ydChkYXRhc291cmNlKSkge1xuICAgIHJldHVybiBuZXcgTGVnYWN5UXVlcnlSdW5uZXIoZGF0YXNvdXJjZSk7XG4gIH1cbiAgaWYgKGhhc0N1c3RvbVZhcmlhYmxlU3VwcG9ydChkYXRhc291cmNlKSkge1xuICAgIHJldHVybiBuZXcgQ3VzdG9tUXVlcnlSdW5uZXIoZGF0YXNvdXJjZSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBjcmVhdGUgYSBxdWVyeSBydW5uZXIgZm9yIGRhdGFzb3VyY2UgJHtkYXRhc291cmNlLnR5cGV9YCk7XG59XG5sZXQgY3JlYXRlUXVlcnlWYXJpYWJsZVJ1bm5lciA9IGNyZWF0ZVF1ZXJ5VmFyaWFibGVSdW5uZXJGYWN0b3J5O1xuZnVuY3Rpb24gZW5zdXJlVmFyaWFibGVRdWVyeU1vZGVsSXNBRGF0YVF1ZXJ5KHZhcmlhYmxlKSB7XG4gIHZhciBfYTtcbiAgY29uc3QgcXVlcnkgPSAoX2EgPSB2YXJpYWJsZS5zdGF0ZS5xdWVyeSkgIT0gbnVsbCA/IF9hIDogXCJcIjtcbiAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7IHF1ZXJ5LCByZWZJZDogYHZhcmlhYmxlLSR7dmFyaWFibGUuc3RhdGUubmFtZX1gIH07XG4gIH1cbiAgaWYgKHF1ZXJ5LnJlZklkID09IG51bGwpIHtcbiAgICByZXR1cm4gX19zcHJlYWRQcm9wcyhfX3NwcmVhZFZhbHVlcyh7fSwgcXVlcnkpLCB7IHJlZklkOiBgdmFyaWFibGUtJHt2YXJpYWJsZS5zdGF0ZS5uYW1lfWAgfSk7XG4gIH1cbiAgcmV0dXJuIHZhcmlhYmxlLnN0YXRlLnF1ZXJ5O1xufVxuXG5leHBvcnQgeyBjcmVhdGVRdWVyeVZhcmlhYmxlUnVubmVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkzSmxZWFJsVVhWbGNubFdZWEpwWVdKc1pWSjFibTVsY2k1cWN5SXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZMaTR2TGk0dkxpNHZjM0pqTDNaaGNtbGhZbXhsY3k5MllYSnBZVzUwY3k5eGRXVnllUzlqY21WaGRHVlJkV1Z5ZVZaaGNtbGhZbXhsVW5WdWJtVnlMblJ6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN0lHWnliMjBzSUcxbGNtZGxUV0Z3TENCUFluTmxjblpoWW14bExDQnZaaUI5SUdaeWIyMGdKM0o0YW5Nbk8xeHVYRzVwYlhCdmNuUWdlMXh1SUNCRVlYUmhVWFZsY25sU1pYRjFaWE4wTEZ4dUlDQkVZWFJoVTI5MWNtTmxRWEJwTEZ4dUlDQm5aWFJFWldaaGRXeDBWR2x0WlZKaGJtZGxMRnh1SUNCTWIyRmthVzVuVTNSaGRHVXNYRzRnSUZCaGJtVnNSR0YwWVN4Y2JpQWdVM1JoYm1SaGNtUldZWEpwWVdKc1pWRjFaWEo1TEZ4dWZTQm1jbTl0SUNkQVozSmhabUZ1WVM5a1lYUmhKenRjYm1sdGNHOXlkQ0I3SUdkbGRGSjFibEpsY1hWbGMzUWdmU0JtY205dElDZEFaM0poWm1GdVlTOXlkVzUwYVcxbEp6dGNibHh1YVcxd2IzSjBJSHNnYUdGelEzVnpkRzl0Vm1GeWFXRmliR1ZUZFhCd2IzSjBMQ0JvWVhOTVpXZGhZM2xXWVhKcFlXSnNaVk4xY0hCdmNuUXNJR2hoYzFOMFlXNWtZWEprVm1GeWFXRmliR1ZUZFhCd2IzSjBJSDBnWm5KdmJTQW5MaTluZFdGeVpITW5PMXh1WEc1cGJYQnZjblFnZXlCUmRXVnllVlpoY21saFlteGxJSDBnWm5KdmJTQW5MaTlSZFdWeWVWWmhjbWxoWW14bEp6dGNibWx0Y0c5eWRDQjdJRVJoZEdGUmRXVnllU0I5SUdaeWIyMGdKMEJuY21GbVlXNWhMM05qYUdWdFlTYzdYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnVW5WdWJtVnlRWEpuY3lCN1hHNGdJSE5sWVhKamFFWnBiSFJsY2o4NklITjBjbWx1Wnp0Y2JpQWdkbUZ5YVdGaWJHVTZJRkYxWlhKNVZtRnlhV0ZpYkdVN1hHNTlYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnVVhWbGNubFNkVzV1WlhJZ2UxeHVJQ0JuWlhSVVlYSm5aWFE2SUNoMllYSnBZV0pzWlRvZ1VYVmxjbmxXWVhKcFlXSnNaU2tnUFQ0Z1JHRjBZVkYxWlhKNUlId2djM1J5YVc1bk8xeHVJQ0J5ZFc1U1pYRjFaWE4wT2lBb1lYSm5jem9nVW5WdWJtVnlRWEpuY3l3Z2NtVnhkV1Z6ZERvZ1JHRjBZVkYxWlhKNVVtVnhkV1Z6ZENrZ1BUNGdUMkp6WlhKMllXSnNaVHhRWVc1bGJFUmhkR0UrTzF4dWZWeHVYRzVqYkdGemN5QlRkR0Z1WkdGeVpGRjFaWEo1VW5WdWJtVnlJR2x0Y0d4bGJXVnVkSE1nVVhWbGNubFNkVzV1WlhJZ2UxeHVJQ0J3ZFdKc2FXTWdZMjl1YzNSeWRXTjBiM0lvY0hKcGRtRjBaU0JrWVhSaGMyOTFjbU5sT2lCRVlYUmhVMjkxY21ObFFYQnBMQ0J3Y21sMllYUmxJRjl5ZFc1U1pYRjFaWE4wSUQwZ1oyVjBVblZ1VW1WeGRXVnpkQ2dwS1NCN2ZWeHVYRzRnSUhCMVlteHBZeUJuWlhSVVlYSm5aWFFvZG1GeWFXRmliR1U2SUZGMVpYSjVWbUZ5YVdGaWJHVXBJSHRjYmlBZ0lDQnBaaUFvYUdGelUzUmhibVJoY21SV1lYSnBZV0pzWlZOMWNIQnZjblFvZEdocGN5NWtZWFJoYzI5MWNtTmxLU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdVpHRjBZWE52ZFhKalpTNTJZWEpwWVdKc1pYTXVkRzlFWVhSaFVYVmxjbmtvWlc1emRYSmxWbUZ5YVdGaWJHVlJkV1Z5ZVUxdlpHVnNTWE5CUkdGMFlWRjFaWEo1S0haaGNtbGhZbXhsS1NrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLRndpUTI5MWJHUnVKM1FnWTNKbFlYUmxJR0VnZEdGeVoyVjBJSGRwZEdnZ2MzVndjR3hwWldRZ1lYSm5kVzFsYm5Sekxsd2lLVHRjYmlBZ2ZWeHVYRzRnSUhCMVlteHBZeUJ5ZFc1U1pYRjFaWE4wS0Y4NklGSjFibTVsY2tGeVozTXNJSEpsY1hWbGMzUTZJRVJoZEdGUmRXVnllVkpsY1hWbGMzUXBJSHRjYmlBZ0lDQnBaaUFvSVdoaGMxTjBZVzVrWVhKa1ZtRnlhV0ZpYkdWVGRYQndiM0owS0hSb2FYTXVaR0YwWVhOdmRYSmpaU2twSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJuWlhSRmJYQjBlVTFsZEhKcFkwWnBibVJXWVd4MVpVOWljMlZ5ZG1GaWJHVW9LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvSVhSb2FYTXVaR0YwWVhOdmRYSmpaUzUyWVhKcFlXSnNaWE11Y1hWbGNua3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TGw5eWRXNVNaWEYxWlhOMEtIUm9hWE11WkdGMFlYTnZkWEpqWlN3Z2NtVnhkV1Z6ZENrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzSjFibEpsY1hWbGMzUW9kR2hwY3k1a1lYUmhjMjkxY21ObExDQnlaWEYxWlhOMExDQjBhR2x6TG1SaGRHRnpiM1Z5WTJVdWRtRnlhV0ZpYkdWekxuRjFaWEo1TG1KcGJtUW9kR2hwY3k1a1lYUmhjMjkxY21ObExuWmhjbWxoWW14bGN5a3BPMXh1SUNCOVhHNTlYRzVjYm1Oc1lYTnpJRXhsWjJGamVWRjFaWEo1VW5WdWJtVnlJR2x0Y0d4bGJXVnVkSE1nVVhWbGNubFNkVzV1WlhJZ2UxeHVJQ0J3ZFdKc2FXTWdZMjl1YzNSeWRXTjBiM0lvY0hKcGRtRjBaU0JrWVhSaGMyOTFjbU5sT2lCRVlYUmhVMjkxY21ObFFYQnBLU0I3ZlZ4dVhHNGdJSEIxWW14cFl5Qm5aWFJVWVhKblpYUW9kbUZ5YVdGaWJHVTZJRkYxWlhKNVZtRnlhV0ZpYkdVcElIdGNiaUFnSUNCcFppQW9hR0Z6VEdWbllXTjVWbUZ5YVdGaWJHVlRkWEJ3YjNKMEtIUm9hWE11WkdGMFlYTnZkWEpqWlNrcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMllYSnBZV0pzWlM1emRHRjBaUzV4ZFdWeWVUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWENKRGIzVnNaRzRuZENCamNtVmhkR1VnWVNCMFlYSm5aWFFnZDJsMGFDQnpkWEJ3YkdsbFpDQmhjbWQxYldWdWRITXVYQ0lwTzF4dUlDQjlYRzVjYmlBZ2NIVmliR2xqSUhKMWJsSmxjWFZsYzNRb2V5QjJZWEpwWVdKc1pTd2djMlZoY21Ob1JtbHNkR1Z5SUgwNklGSjFibTVsY2tGeVozTXNJSEpsY1hWbGMzUTZJRVJoZEdGUmRXVnllVkpsY1hWbGMzUXBJSHRjYmlBZ0lDQnBaaUFvSVdoaGMweGxaMkZqZVZaaGNtbGhZbXhsVTNWd2NHOXlkQ2gwYUdsekxtUmhkR0Z6YjNWeVkyVXBLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdaMlYwUlcxd2RIbE5aWFJ5YVdOR2FXNWtWbUZzZFdWUFluTmxjblpoWW14bEtDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUdaeWIyMG9YRzRnSUNBZ0lDQjBhR2x6TG1SaGRHRnpiM1Z5WTJVdWJXVjBjbWxqUm1sdVpGRjFaWEo1S0haaGNtbGhZbXhsTG5OMFlYUmxMbkYxWlhKNUxDQjdYRzRnSUNBZ0lDQWdJQzR1TG5KbGNYVmxjM1FzWEc0Z0lDQWdJQ0FnSUM4dklIWmhjbWxoWW14bElHbHpJSFZ6WldRZ1lua2dVMUZNSUdOdmJXMXZiaUJrWVhSaElITnZkWEpqWlZ4dUlDQWdJQ0FnSUNCMllYSnBZV0pzWlRvZ2UxeHVJQ0FnSUNBZ0lDQWdJRzVoYldVNklIWmhjbWxoWW14bExuTjBZWFJsTG01aGJXVXNYRzRnSUNBZ0lDQWdJQ0FnZEhsd1pUb2dkbUZ5YVdGaWJHVXVjM1JoZEdVdWRIbHdaU3hjYmlBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ2MyVmhjbU5vUm1sc2RHVnlMRnh1SUNBZ0lDQWdmU2xjYmlBZ0lDQXBMbkJwY0dVb1hHNGdJQ0FnSUNCdFpYSm5aVTFoY0Nnb2RtRnNkV1Z6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJR2xtSUNnaGRtRnNkV1Z6SUh4OElDRjJZV3gxWlhNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHZGxkRVZ0Y0hSNVRXVjBjbWxqUm1sdVpGWmhiSFZsVDJKelpYSjJZV0pzWlNncE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjMlZ5YVdWek9pQmhibmtnUFNCMllXeDFaWE03WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ2WmloN0lITmxjbWxsY3l3Z2MzUmhkR1U2SUV4dllXUnBibWRUZEdGMFpTNUViMjVsTENCMGFXMWxVbUZ1WjJVNklISmxjWFZsYzNRdWNtRnVaMlVnZlNrN1hHNGdJQ0FnSUNCOUtWeHVJQ0FnSUNrN1hHNGdJSDFjYm4xY2JseHVZMnhoYzNNZ1EzVnpkRzl0VVhWbGNubFNkVzV1WlhJZ2FXMXdiR1Z0Wlc1MGN5QlJkV1Z5ZVZKMWJtNWxjaUI3WEc0Z0lIQjFZbXhwWXlCamIyNXpkSEoxWTNSdmNpaHdjbWwyWVhSbElHUmhkR0Z6YjNWeVkyVTZJRVJoZEdGVGIzVnlZMlZCY0drc0lIQnlhWFpoZEdVZ1gzSjFibEpsY1hWbGMzUWdQU0JuWlhSU2RXNVNaWEYxWlhOMEtDa3BJSHQ5WEc1Y2JpQWdjSFZpYkdsaklHZGxkRlJoY21kbGRDaDJZWEpwWVdKc1pUb2dVWFZsY25sV1lYSnBZV0pzWlNrZ2UxeHVJQ0FnSUdsbUlDaG9ZWE5EZFhOMGIyMVdZWEpwWVdKc1pWTjFjSEJ2Y25Rb2RHaHBjeTVrWVhSaGMyOTFjbU5sS1NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhaaGNtbGhZbXhsTG5OMFlYUmxMbkYxWlhKNU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSWtOdmRXeGtiaWQwSUdOeVpXRjBaU0JoSUhSaGNtZGxkQ0IzYVhSb0lITjFjSEJzYVdWa0lHRnlaM1Z0Wlc1MGN5NWNJaWs3WEc0Z0lIMWNibHh1SUNCd2RXSnNhV01nY25WdVVtVnhkV1Z6ZENoZk9pQlNkVzV1WlhKQmNtZHpMQ0J5WlhGMVpYTjBPaUJFWVhSaFVYVmxjbmxTWlhGMVpYTjBLU0I3WEc0Z0lDQWdhV1lnS0NGb1lYTkRkWE4wYjIxV1lYSnBZV0pzWlZOMWNIQnZjblFvZEdocGN5NWtZWFJoYzI5MWNtTmxLU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJR2RsZEVWdGNIUjVUV1YwY21salJtbHVaRlpoYkhWbFQySnpaWEoyWVdKc1pTZ3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2doZEdocGN5NWtZWFJoYzI5MWNtTmxMblpoY21saFlteGxjeTV4ZFdWeWVTa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11WDNKMWJsSmxjWFZsYzNRb2RHaHBjeTVrWVhSaGMyOTFjbU5sTENCeVpYRjFaWE4wS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDNKMWJsSmxjWFZsYzNRb2RHaHBjeTVrWVhSaGMyOTFjbU5sTENCeVpYRjFaWE4wTENCMGFHbHpMbVJoZEdGemIzVnlZMlV1ZG1GeWFXRmliR1Z6TG5GMVpYSjVMbUpwYm1Rb2RHaHBjeTVrWVhSaGMyOTFjbU5sTG5aaGNtbGhZbXhsY3lrcE8xeHVJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJR2RsZEVWdGNIUjVUV1YwY21salJtbHVaRlpoYkhWbFQySnpaWEoyWVdKc1pTZ3BPaUJQWW5ObGNuWmhZbXhsUEZCaGJtVnNSR0YwWVQ0Z2UxeHVJQ0J5WlhSMWNtNGdiMllvZXlCemRHRjBaVG9nVEc5aFpHbHVaMU4wWVhSbExrUnZibVVzSUhObGNtbGxjem9nVzEwc0lIUnBiV1ZTWVc1blpUb2daMlYwUkdWbVlYVnNkRlJwYldWU1lXNW5aU2dwSUgwcE8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCamNtVmhkR1ZSZFdWeWVWWmhjbWxoWW14bFVuVnVibVZ5Um1GamRHOXllU2hrWVhSaGMyOTFjbU5sT2lCRVlYUmhVMjkxY21ObFFYQnBLVG9nVVhWbGNubFNkVzV1WlhJZ2UxeHVJQ0JwWmlBb2FHRnpVM1JoYm1SaGNtUldZWEpwWVdKc1pWTjFjSEJ2Y25Rb1pHRjBZWE52ZFhKalpTa3BJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRk4wWVc1a1lYSmtVWFZsY25sU2RXNXVaWElvWkdGMFlYTnZkWEpqWlN3Z1oyVjBVblZ1VW1WeGRXVnpkQ2dwS1R0Y2JpQWdmVnh1WEc0Z0lHbG1JQ2hvWVhOTVpXZGhZM2xXWVhKcFlXSnNaVk4xY0hCdmNuUW9aR0YwWVhOdmRYSmpaU2twSUh0Y2JpQWdJQ0J5WlhSMWNtNGdibVYzSUV4bFoyRmplVkYxWlhKNVVuVnVibVZ5S0dSaGRHRnpiM1Z5WTJVcE8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0doaGMwTjFjM1J2YlZaaGNtbGhZbXhsVTNWd2NHOXlkQ2hrWVhSaGMyOTFjbU5sS1NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1EzVnpkRzl0VVhWbGNubFNkVzV1WlhJb1pHRjBZWE52ZFhKalpTazdYRzRnSUgxY2JseHVJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRU52ZFd4a2JpZDBJR055WldGMFpTQmhJSEYxWlhKNUlISjFibTVsY2lCbWIzSWdaR0YwWVhOdmRYSmpaU0FrZTJSaGRHRnpiM1Z5WTJVdWRIbHdaWDFnS1R0Y2JuMWNibHh1Wlhod2IzSjBJR3hsZENCamNtVmhkR1ZSZFdWeWVWWmhjbWxoWW14bFVuVnVibVZ5SUQwZ1kzSmxZWFJsVVhWbGNubFdZWEpwWVdKc1pWSjFibTVsY2taaFkzUnZjbms3WEc1Y2JpOHFLbHh1SUNvZ1ZYTmxJRzl1YkhrZ2FXNGdkR1Z6ZEhOY2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSE5sZEVOeVpXRjBaVkYxWlhKNVZtRnlhV0ZpYkdWU2RXNXVaWEpHWVdOMGIzSjVLR1p1T2lBb1pHRjBZWE52ZFhKalpUb2dSR0YwWVZOdmRYSmpaVUZ3YVNrZ1BUNGdVWFZsY25sU2RXNXVaWElwSUh0Y2JpQWdZM0psWVhSbFVYVmxjbmxXWVhKcFlXSnNaVkoxYm01bGNpQTlJR1p1TzF4dWZWeHVYRzR2S2lwY2JpQXFJRVpwZUdWeklHOXNaQ0JzWldkaFkza2djWFZsY25rZ2MzUnlhVzVuSUcxdlpHVnNjeUJoYm1RZ1lXUmtjeUJ5WldaSlpDQnBaaUJ0YVhOemFXNW5YRzRnS2k5Y2JtWjFibU4wYVc5dUlHVnVjM1Z5WlZaaGNtbGhZbXhsVVhWbGNubE5iMlJsYkVselFVUmhkR0ZSZFdWeWVTaDJZWEpwWVdKc1pUb2dVWFZsY25sV1lYSnBZV0pzWlNrNklGTjBZVzVrWVhKa1ZtRnlhV0ZpYkdWUmRXVnllU0I3WEc0Z0lHTnZibk4wSUhGMVpYSjVJRDBnZG1GeWFXRmliR1V1YzNSaGRHVXVjWFZsY25rZ1B6OGdKeWM3WEc1Y2JpQWdMeThnVkhWeWJpQnBiblJ2SUhGMVpYSjVJRzlpYW1WamRDQnBaaUJwZENkeklHcDFjM1FnWVNCemRISnBibWRjYmlBZ2FXWWdLSFI1Y0dWdlppQnhkV1Z5ZVNBOVBUMGdKM04wY21sdVp5Y3BJSHRjYmlBZ0lDQnlaWFIxY200Z2V5QnhkV1Z5ZVN3Z2NtVm1TV1E2SUdCMllYSnBZV0pzWlMwa2UzWmhjbWxoWW14bExuTjBZWFJsTG01aGJXVjlZQ0I5TzF4dUlDQjlYRzVjYmlBZ0x5OGdRV1JrSUhCdmRHVnVkR2xoYkd4NUlHMXBjM05wYm1jZ2NtVm1TV1JjYmlBZ2FXWWdLSEYxWlhKNUxuSmxaa2xrSUQwOUlHNTFiR3dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdleUF1TGk1eGRXVnllU3dnY21WbVNXUTZJR0IyWVhKcFlXSnNaUzBrZTNaaGNtbGhZbXhsTG5OMFlYUmxMbTVoYldWOVlDQjlJR0Z6SUZOMFlXNWtZWEprVm1GeWFXRmliR1ZSZFdWeWVUdGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQjJZWEpwWVdKc1pTNXpkR0YwWlM1eGRXVnllU0JoY3lCVGRHRnVaR0Z5WkZaaGNtbGhZbXhsVVhWbGNuazdYRzU5WEc0aVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPMEZCTWtKQkxFMUJRVTBzYlVKQlFUSkRMRU5CUVVFN1FVRkJRU3hGUVVONFF5eFhRVUZ2UWl4RFFVRkJMRlZCUVVFc1JVRkJiVU1zVjBGQll5eEhRVUZCTEdGQlFVRXNSVUZCYVVJc1JVRkJRVHRCUVVGc1JTeEpRVUZCTEVsQlFVRXNRMEZCUVN4VlFVRkJMRWRCUVVFc1ZVRkJRU3hEUVVGQk8wRkJRVzFETEVsQlFVRXNTVUZCUVN4RFFVRkJMRmRCUVVFc1IwRkJRU3hYUVVGQkxFTkJRVUU3UVVGQlFTeEhRVUZuUXp0QlFVRkJMRVZCUlhaR0xGVkJRVlVzVVVGQmVVSXNSVUZCUVR0QlFVTjRReXhKUVVGSkxFbEJRVUVzTUVKQlFVRXNRMEZCTWtJc1NVRkJTeXhEUVVGQkxGVkJRVlVzUTBGQlJ5eEZRVUZCTzBGQlF5OURMRTFCUVVFc1QwRkJUeXhMUVVGTExGVkJRVmNzUTBGQlFTeFRRVUZCTEVOQlFWVXNWMEZCV1N4RFFVRkJMRzlEUVVGQkxFTkJRWEZETEZGQlFWRXNRMEZCUXl4RFFVRkJMRU5CUVVFN1FVRkJRU3hMUVVNM1JqdEJRVVZCTEVsQlFVMHNUVUZCUVN4SlFVRkpMRTFCUVUwc2JVUkJRVzFFTEVOQlFVRXNRMEZCUVR0QlFVRkJMRWRCUTNKRk8wRkJRVUVzUlVGRlR5eFZRVUZCTEVOQlFWY3NSMEZCWlN4UFFVRXlRaXhGUVVGQk8wRkJRekZFTEVsQlFVRXNTVUZCU1N4RFFVRkRMREJDUVVGQkxFTkJRVEpDTEVsQlFVc3NRMEZCUVN4VlFVRlZMRU5CUVVjc1JVRkJRVHRCUVVOb1JDeE5RVUZCTEU5QlFVOHNhVU5CUVd0RExFVkJRVUVzUTBGQlFUdEJRVUZCTEV0QlF6TkRPMEZCUlVFc1NVRkJRU3hKUVVGSkxFTkJRVU1zU1VGQlFTeERRVUZMTEZWQlFWY3NRMEZCUVN4VFFVRkJMRU5CUVZVc1MwRkJUeXhGUVVGQk8wRkJRM0JETEUxQlFVRXNUMEZCVHl4SlFVRkxMRU5CUVVFc1YwRkJRU3hEUVVGWkxFbEJRVXNzUTBGQlFTeFZRVUZCTEVWQlFWa3NUMEZCVHl4RFFVRkJMRU5CUVVFN1FVRkJRU3hMUVVOc1JEdEJRVVZCTEVsQlFVRXNUMEZCVHl4SlFVRkxMRU5CUVVFc1YwRkJRU3hEUVVGWkxFbEJRVXNzUTBGQlFTeFZRVUZCTEVWQlFWa3NUMEZCVXl4RlFVRkJMRWxCUVVFc1EwRkJTeXhWUVVGWExFTkJRVUVzVTBGQlFTeERRVUZWTEV0QlFVMHNRMEZCUVN4SlFVRkJMRU5CUVVzc1NVRkJTeXhEUVVGQkxGVkJRVUVzUTBGQlZ5eFRRVUZUTEVOQlFVTXNRMEZCUVN4RFFVRkJPMEZCUVVFc1IwRkRia2c3UVVGRFJpeERRVUZCTzBGQlJVRXNUVUZCVFN4cFFrRkJlVU1zUTBGQlFUdEJRVUZCTEVWQlEzUkRMRmxCUVc5Q0xGVkJRVEpDTEVWQlFVRTdRVUZCTTBJc1NVRkJRU3hKUVVGQkxFTkJRVUVzVlVGQlFTeEhRVUZCTEZWQlFVRXNRMEZCUVR0QlFVRkJMRWRCUVRSQ08wRkJRVUVzUlVGRmFFUXNWVUZCVlN4UlFVRjVRaXhGUVVGQk8wRkJRM2hETEVsQlFVa3NTVUZCUVN4M1FrRkJRU3hEUVVGNVFpeEpRVUZMTEVOQlFVRXNWVUZCVlN4RFFVRkhMRVZCUVVFN1FVRkROME1zVFVGQlFTeFBRVUZQTEZOQlFWTXNTMEZCVFN4RFFVRkJMRXRCUVVFc1EwRkJRVHRCUVVGQkxFdEJRM2hDTzBGQlJVRXNTVUZCVFN4TlFVRkJMRWxCUVVrc1RVRkJUU3h0UkVGQmJVUXNRMEZCUVN4RFFVRkJPMEZCUVVFc1IwRkRja1U3UVVGQlFTeEZRVVZQTEZWQlFWY3NRMEZCUVN4RlFVRkZMRkZCUVZVc1JVRkJRU3haUVVGQkxFbEJRVFJDTEU5QlFUSkNMRVZCUVVFN1FVRkRia1lzU1VGQlFTeEpRVUZKTEVOQlFVTXNkMEpCUVVFc1EwRkJlVUlzU1VGQlN5eERRVUZCTEZWQlFWVXNRMEZCUnl4RlFVRkJPMEZCUXpsRExFMUJRVUVzVDBGQlR5eHBRMEZCYTBNc1JVRkJRU3hEUVVGQk8wRkJRVUVzUzBGRE0wTTdRVUZGUVN4SlFVRlBMRTlCUVVFc1NVRkJRVHRCUVVGQkxFMUJRMHdzUzBGQlN5eFZRVUZYTEVOQlFVRXNaVUZCUVN4RFFVRm5RaXhUUVVGVExFdEJRVTBzUTBGQlFTeExRVUZCTEVWQlFVOHNhVU5CUTJwRUxFOUJSR2xFTEVOQlFVRXNSVUZCUVR0QlFVRkJMRkZCUjNCRUxGRkJRVlVzUlVGQlFUdEJRVUZCTEZWQlExSXNTVUZCUVN4RlFVRk5MRk5CUVZNc1MwRkJUU3hEUVVGQkxFbEJRVUU3UVVGQlFTeFZRVU55UWl4SlFVRkJMRVZCUVUwc1UwRkJVeXhMUVVGTkxFTkJRVUVzU1VGQlFUdEJRVUZCTEZOQlEzWkNPMEZCUVVFc1VVRkRRU3haUVVGQk8wRkJRVUVzVDBGRFJDeERRVUZCTEVOQlFVRTdRVUZCUVN4TFFVTkVMRU5CUVVFc1NVRkJRVHRCUVVGQkxFMUJRMEVzVVVGQlFTeERRVUZUTEVOQlFVTXNUVUZCVnl4TFFVRkJPMEZCUTI1Q0xGRkJRVUVzU1VGQlNTeERRVUZETEUxQlFVRXNTVUZCVlN4RFFVRkRMRTFCUVVFc1EwRkJUeXhOUVVGUkxFVkJRVUU3UVVGRE4wSXNWVUZCUVN4UFFVRlBMR2xEUVVGclF5eEZRVUZCTEVOQlFVRTdRVUZCUVN4VFFVTXpRenRCUVVWQkxGRkJRVUVzVFVGQlRTeE5RVUZqTEVkQlFVRXNUVUZCUVN4RFFVRkJPMEZCUTNCQ0xGRkJRVThzVDBGQlFTeEZRVUZCTEVOQlFVY3NSVUZCUlN4TlFVRlJMRVZCUVVFc1MwRkJRU3hGUVVGUExHRkJRV0VzU1VGQlRTeEZRVUZCTEZOQlFVRXNSVUZCVnl4UFFVRlJMRU5CUVVFc1MwRkJRU3hGUVVGUExFTkJRVUVzUTBGQlFUdEJRVUZCTEU5QlEzcEZMRU5CUVVFN1FVRkJRU3hMUVVOSUxFTkJRVUU3UVVGQlFTeEhRVU5HTzBGQlEwWXNRMEZCUVR0QlFVVkJMRTFCUVUwc2FVSkJRWGxETEVOQlFVRTdRVUZCUVN4RlFVTjBReXhYUVVGdlFpeERRVUZCTEZWQlFVRXNSVUZCYlVNc1YwRkJZeXhIUVVGQkxHRkJRVUVzUlVGQmFVSXNSVUZCUVR0QlFVRnNSU3hKUVVGQkxFbEJRVUVzUTBGQlFTeFZRVUZCTEVkQlFVRXNWVUZCUVN4RFFVRkJPMEZCUVcxRExFbEJRVUVzU1VGQlFTeERRVUZCTEZkQlFVRXNSMEZCUVN4WFFVRkJMRU5CUVVFN1FVRkJRU3hIUVVGblF6dEJRVUZCTEVWQlJYWkdMRlZCUVZVc1VVRkJlVUlzUlVGQlFUdEJRVU40UXl4SlFVRkpMRWxCUVVFc2QwSkJRVUVzUTBGQmVVSXNTVUZCU3l4RFFVRkJMRlZCUVZVc1EwRkJSeXhGUVVGQk8wRkJRemRETEUxQlFVRXNUMEZCVHl4VFFVRlRMRXRCUVUwc1EwRkJRU3hMUVVGQkxFTkJRVUU3UVVGQlFTeExRVU40UWp0QlFVVkJMRWxCUVUwc1RVRkJRU3hKUVVGSkxFMUJRVTBzYlVSQlFXMUVMRU5CUVVFc1EwRkJRVHRCUVVGQkxFZEJRM0pGTzBGQlFVRXNSVUZGVHl4VlFVRkJMRU5CUVZjc1IwRkJaU3hQUVVFeVFpeEZRVUZCTzBGQlF6RkVMRWxCUVVFc1NVRkJTU3hEUVVGRExIZENRVUZCTEVOQlFYbENMRWxCUVVzc1EwRkJRU3hWUVVGVkxFTkJRVWNzUlVGQlFUdEJRVU01UXl4TlFVRkJMRTlCUVU4c2FVTkJRV3RETEVWQlFVRXNRMEZCUVR0QlFVRkJMRXRCUXpORE8wRkJSVUVzU1VGQlFTeEpRVUZKTEVOQlFVTXNTVUZCUVN4RFFVRkxMRlZCUVZjc1EwRkJRU3hUUVVGQkxFTkJRVlVzUzBGQlR5eEZRVUZCTzBGQlEzQkRMRTFCUVVFc1QwRkJUeXhKUVVGTExFTkJRVUVzVjBGQlFTeERRVUZaTEVsQlFVc3NRMEZCUVN4VlFVRkJMRVZCUVZrc1QwRkJUeXhEUVVGQkxFTkJRVUU3UVVGQlFTeExRVU5zUkR0QlFVTkJMRWxCUVVFc1QwRkJUeXhKUVVGTExFTkJRVUVzVjBGQlFTeERRVUZaTEVsQlFVc3NRMEZCUVN4VlFVRkJMRVZCUVZrc1QwRkJVeXhGUVVGQkxFbEJRVUVzUTBGQlN5eFZRVUZYTEVOQlFVRXNVMEZCUVN4RFFVRlZMRXRCUVUwc1EwRkJRU3hKUVVGQkxFTkJRVXNzU1VGQlN5eERRVUZCTEZWQlFVRXNRMEZCVnl4VFFVRlRMRU5CUVVNc1EwRkJRU3hEUVVGQk8wRkJRVUVzUjBGRGJrZzdRVUZEUml4RFFVRkJPMEZCUlVFc1UwRkJVeXhwUTBGQk1rUXNSMEZCUVR0QlFVTnNSU3hGUVVGUExFOUJRVUVzUlVGQlFTeERRVUZITEVWQlFVVXNTMEZCUVN4RlFVRlBMRmxCUVdFc1EwRkJRU3hKUVVGQkxFVkJRVTBzVFVGQlVTeEZRVUZCTEVWQlFVa3NSVUZCUVN4VFFVRkJMRVZCUVZjc2JVSkJRVzlDTEVWQlFVRXNSVUZCUnl4RFFVRkJMRU5CUVVFN1FVRkRkRVlzUTBGQlFUdEJRVVZCTEZOQlFWTXNhVU5CUVdsRExGVkJRWGRETEVWQlFVRTdRVUZEYUVZc1JVRkJTU3hKUVVGQkxEQkNRVUZCTEVOQlFUSkNMRlZCUVZVc1EwRkJSeXhGUVVGQk8wRkJRekZETEVsQlFVRXNUMEZCVHl4SlFVRkpMRzFDUVVGQkxFTkJRVzlDTEZWQlFWa3NSVUZCUVN4aFFVRkJMRVZCUVdVc1EwRkJRU3hEUVVGQk8wRkJRVUVzUjBGRE5VUTdRVUZGUVN4RlFVRkpMRWxCUVVFc2QwSkJRVUVzUTBGQmVVSXNWVUZCVlN4RFFVRkhMRVZCUVVFN1FVRkRlRU1zU1VGQlR5eFBRVUZCTEVsQlFVa3NhMEpCUVd0Q0xGVkJRVlVzUTBGQlFTeERRVUZCTzBGQlFVRXNSMEZEZWtNN1FVRkZRU3hGUVVGSkxFbEJRVUVzZDBKQlFVRXNRMEZCZVVJc1ZVRkJWU3hEUVVGSExFVkJRVUU3UVVGRGVFTXNTVUZCVHl4UFFVRkJMRWxCUVVrc2EwSkJRV3RDTEZWQlFWVXNRMEZCUVN4RFFVRkJPMEZCUVVFc1IwRkRla003UVVGRlFTeEZRVUZCTEUxQlFVMHNTVUZCU1N4TFFVRkJMRU5CUVUwc1EwRkJhVVFzT0VOQlFVRXNSVUZCUVN4VlFVRkJMRU5CUVZjc1NVRkJUU3hEUVVGQkxFTkJRVUVzUTBGQlFTeERRVUZCTzBGQlEzQkdMRU5CUVVFN1FVRkZUeXhKUVVGSkxIbENRVUUwUWl4SFFVRkJMR2xEUVVGQk8wRkJXWFpETEZOQlFWTXNjVU5CUVhGRExGRkJRV2RFTEVWQlFVRTdRVUZxU2psR0xFVkJRVUVzU1VGQlFTeEZRVUZCTEVOQlFVRTdRVUZyU2tVc1JVRkJRU3hOUVVGTkxFdEJRVkVzUjBGQlFTeERRVUZCTEVWQlFVRXNSMEZCUVN4UlFVRkJMRU5CUVZNc1MwRkJUU3hEUVVGQkxFdEJRVUVzUzBGQlppeEpRVUYzUWl4SFFVRkJMRVZCUVVFc1IwRkJRU3hGUVVGQkxFTkJRVUU3UVVGSGRFTXNSVUZCU1N4SlFVRkJMRTlCUVU4c1ZVRkJWU3hSUVVGVkxFVkJRVUU3UVVGRE4wSXNTVUZCUVN4UFFVRlBMRVZCUVVVc1MwRkJUeXhGUVVGQkxFdEJRVUVzUlVGQlR5eERRVUZaTEZOQlFVRXNSVUZCUVN4UlFVRkJMRU5CUVZNc1RVRkJUU3hKUVVGUExFTkJRVUVzUTBGQlFTeEZRVUZCTEVOQlFVRTdRVUZCUVN4SFFVTXpSRHRCUVVkQkxFVkJRVWtzU1VGQlFTeExRVUZCTEVOQlFVMHNVMEZCVXl4SlFVRk5MRVZCUVVFN1FVRkRka0lzU1VGQlFTeFBRVUZQTEdsRFFVRkxMRXRCUVV3c1EwRkJRU3hGUVVGQkxFVkJRVmtzVDBGQlR5eERRVUZaTEZOQlFVRXNSVUZCUVN4UlFVRkJMRU5CUVZNc1RVRkJUU3hKUVVGUExFTkJRVUVzUTBGQlFTeEZRVUZCTEVOQlFVRXNRMEZCUVR0QlFVRkJMRWRCUXpsRU8wRkJSVUVzUlVGQlFTeFBRVUZQTEZOQlFWTXNTMEZCVFN4RFFVRkJMRXRCUVVFc1EwRkJRVHRCUVVONFFqczdPenNpZlE9PVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJCQSxNQUFNLG1CQUEyQyxDQUFBO0VBQ3hDLFdBQW9CLENBQUEsVUFBQSxFQUFtQyxXQUFjLEdBQUEsYUFBQSxFQUFpQixFQUFBO0FBQWxFLElBQUEsSUFBQSxDQUFBLFVBQUEsR0FBQSxVQUFBLENBQUE7QUFBbUMsSUFBQSxJQUFBLENBQUEsV0FBQSxHQUFBLFdBQUEsQ0FBQTtBQUFBLEdBQUE7QUFFdkQsRUFBQSxTQUFBLENBQVUsUUFBeUIsRUFBQTtBQUNwQyxJQUFBLElBQUEsMEJBQUEsQ0FBMkIsSUFBSyxDQUFBLFVBQVUsQ0FBRyxFQUFBO0FBQy9DLE1BQUEsT0FBTyxLQUFLLFVBQVcsQ0FBQSxTQUFBLENBQVUsV0FBWSxDQUFBLG9DQUFBLENBQXFDLFFBQVEsQ0FBQyxDQUFBLENBQUE7QUFBQSxLQUFBO0FBR3ZGLElBQUEsTUFBQSxJQUFJLE1BQU0sbURBQW1ELENBQUEsQ0FBQTtBQUFBLEdBQUE7QUFHOUQsRUFBQSxVQUFBLENBQVcsR0FBZSxPQUEyQixFQUFBO0FBQzFELElBQUEsSUFBSSxDQUFDLDBCQUFBLENBQTJCLElBQUssQ0FBQSxVQUFVLENBQUcsRUFBQTtBQUNoRCxNQUFBLE9BQU8saUNBQWtDLEVBQUEsQ0FBQTtBQUFBLEtBQUE7QUFHM0MsSUFBQSxJQUFJLENBQUMsSUFBQSxDQUFLLFVBQVcsQ0FBQSxTQUFBLENBQVUsS0FBTyxFQUFBO0FBQ3BDLE1BQUEsT0FBTyxJQUFLLENBQUEsV0FBQSxDQUFZLElBQUssQ0FBQSxVQUFBLEVBQVksT0FBTyxDQUFBLENB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