From 2505cada8c7a08a9b96239a9e360edcd01abd8c0 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Fri, 18 Nov 2022 15:36:27 -0700 Subject: [PATCH 1/8] Basic example plugin --- examples/controls_example/kibana.json | 11 +++ examples/controls_example/public/app.tsx | 70 ++++++++++++++++++ examples/controls_example/public/index.ts | 13 ++++ examples/controls_example/public/pikachu.jpeg | Bin 0 -> 71895 bytes examples/controls_example/public/plugin.tsx | 61 +++++++++++++++ examples/controls_example/tsconfig.json | 23 ++++++ examples/developer_examples/public/plugin.ts | 3 + tsconfig.base.json | 2 + 8 files changed, 183 insertions(+) create mode 100644 examples/controls_example/kibana.json create mode 100644 examples/controls_example/public/app.tsx create mode 100644 examples/controls_example/public/index.ts create mode 100644 examples/controls_example/public/pikachu.jpeg create mode 100644 examples/controls_example/public/plugin.tsx create mode 100644 examples/controls_example/tsconfig.json diff --git a/examples/controls_example/kibana.json b/examples/controls_example/kibana.json new file mode 100644 index 0000000000000..88dd37f41dcfa --- /dev/null +++ b/examples/controls_example/kibana.json @@ -0,0 +1,11 @@ +{ + "id": "controlsExample", + "owner": { + "name": "Kibana Presentation", + "githubTeam": "kibana-presentation" + }, + "version": "1.0.0", + "kibanaVersion": "kibana", + "ui": true, + "requiredPlugins": ["data", "developerExamples", "presentationUtil", "controls"] +} diff --git a/examples/controls_example/public/app.tsx b/examples/controls_example/public/app.tsx new file mode 100644 index 0000000000000..d1c8ae138cb8e --- /dev/null +++ b/examples/controls_example/public/app.tsx @@ -0,0 +1,70 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useState } from 'react'; +import ReactDOM from 'react-dom'; + +import { + EuiText, + EuiCard, + EuiFieldSearch, + EuiPage, + EuiPageHeader, + EuiPageHeaderSection, + EuiPageBody, +} from '@elastic/eui'; +import type { DataView } from '@kbn/data-views-plugin/public'; +import { AppMountParameters, IUiSettingsClient } from '@kbn/core/public'; +import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; +import { LazyControlGroupRenderer, ControlGroupContainer } from '@kbn/controls-plugin/public'; +import { withSuspense } from '@kbn/presentation-util-plugin/public'; +import { ControlsExampleStartDeps } from './plugin'; + +interface Props { + dataView: DataView; +} +const ControlGroupRenderer = withSuspense(LazyControlGroupRenderer); + +function ControlsExamples({ dataView }: Props) { + const [myControlGroup, setControlGroup] = useState(); + + return ( + + + + +

The following showcases how to use the control group as a building block.

+
+
+ + + This is a control group + { + setControlGroup(controlGroup); + controlGroup.addDataControlFromField({ + dataViewId: dataView.id ?? 'kibana_sample_data_ecommerce', + fieldName: 'customer_first_name.keyword', + }); + }} + />{' '} + + +
+ ); +} + +export const renderApp = async ( + { data }: ControlsExampleStartDeps, + { element }: AppMountParameters +) => { + const dataView = await data.dataViews.getDefault(); + if (dataView) ReactDOM.render(, element); + + return () => ReactDOM.unmountComponentAtNode(element); +}; diff --git a/examples/controls_example/public/index.ts b/examples/controls_example/public/index.ts new file mode 100644 index 0000000000000..adb10a93fcec1 --- /dev/null +++ b/examples/controls_example/public/index.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { ControlsExamplePlugin } from './plugin'; + +export function plugin() { + return new ControlsExamplePlugin(); +} diff --git a/examples/controls_example/public/pikachu.jpeg b/examples/controls_example/public/pikachu.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..de7a1e014d13172cf292ec4010a39a9c5a83037c GIT binary patch literal 71895 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

The following showcases how to use the control group as a building block.

- - - - This is a control group - { - setControlGroup(controlGroup); - controlGroup.addDataControlFromField({ - dataViewId: dataView.id ?? 'kibana_sample_data_ecommerce', - fieldName: 'customer_first_name.keyword', - }); - }} - />{' '} - + + ); -} +}; export const renderApp = async ( { data }: ControlsExampleStartDeps, { element }: AppMountParameters ) => { - const dataView = await data.dataViews.getDefault(); - if (dataView) ReactDOM.render(, element); - + const dataViews = await data.dataViews.find('kibana_sample_data_ecommerce'); + if (dataViews.length > 0) { + ReactDOM.render(, element); + } return () => ReactDOM.unmountComponentAtNode(element); }; diff --git a/examples/controls_example/public/control_group_example.tsx b/examples/controls_example/public/control_group_example.tsx new file mode 100644 index 0000000000000..77471b9178090 --- /dev/null +++ b/examples/controls_example/public/control_group_example.tsx @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useState } from 'react'; + +import { + LazyControlGroupRenderer, + ControlGroupContainer, + ControlGroupInput, +} from '@kbn/controls-plugin/public'; +import { withSuspense } from '@kbn/presentation-util-plugin/public'; +import type { DataView } from '@kbn/data-views-plugin/public'; +import { EuiPanel } from '@elastic/eui'; + +interface Props { + dataView: DataView; +} +const ControlGroupRenderer = withSuspense(LazyControlGroupRenderer); + +export const ControlGroupExample = ({ dataView }: Props) => { + const [myControlGroup, setControlGroup] = useState(); + + return ( + + { + setControlGroup(controlGroup); + }} + getCreationOptions={(controlGroupInputBuilder) => { + const initialInput: Partial = { controlStyle: 'twoLine' }; + controlGroupInputBuilder.addDataControlFromField(initialInput, { + dataViewId: dataView.id ?? 'kibana_sample_data_ecommerce', + fieldName: 'customer_first_name.keyword', + }); + console.log(initialInput); + return initialInput; + }} + /> + + ); +}; diff --git a/examples/controls_example/public/plugin.tsx b/examples/controls_example/public/plugin.tsx index 18c532454986f..d40d0d5cb017c 100644 --- a/examples/controls_example/public/plugin.tsx +++ b/examples/controls_example/public/plugin.tsx @@ -14,18 +14,21 @@ import { Plugin, } from '@kbn/core/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; - import { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; +import { EmbeddableSetup, EmbeddableStart } from '@kbn/embeddable-plugin/public'; + import img from './pikachu.jpeg'; // import { ControlsPluginStart } from '@kbn/controls-plugin/public'; interface SetupDeps { developerExamples: DeveloperExamplesSetup; + embeddable: EmbeddableSetup; } export interface ControlsExampleStartDeps { data: DataPublicPluginStart; + embeddable: EmbeddableStart; } // interface StartDeps { diff --git a/examples/controls_example/tsconfig.json b/examples/controls_example/tsconfig.json index 78dfda0edc71d..01ff21ca80cf5 100644 --- a/examples/controls_example/tsconfig.json +++ b/examples/controls_example/tsconfig.json @@ -14,6 +14,7 @@ "exclude": [], "kbn_references": [ { "path": "../../src/plugins/data_views/tsconfig.json" }, + { "path": "../../src/plugins/embeddable/tsconfig.json" }, { "path": "../../src/plugins/data/tsconfig.json" }, { "path": "../developer_examples/tsconfig.json" }, { "path": "../presentation_util/tsconfig.json" }, diff --git a/src/plugins/controls/public/control_group/control_group_renderer.tsx b/src/plugins/controls/public/control_group/control_group_renderer.tsx index a1560a02568c0..388366f65ca47 100644 --- a/src/plugins/controls/public/control_group/control_group_renderer.tsx +++ b/src/plugins/controls/public/control_group/control_group_renderer.tsx @@ -13,36 +13,67 @@ import React, { useEffect, useMemo, useRef, useState } from 'react'; import { IEmbeddable } from '@kbn/embeddable-plugin/public'; import { pluginServices } from '../services'; -import { getDefaultControlGroupInput } from '../../common'; +import { ControlPanelState, getDefaultControlGroupInput } from '../../common'; import { ControlGroupInput, ControlGroupOutput, CONTROL_GROUP_TYPE } from './types'; import { ControlGroupContainer } from './embeddable/control_group_container'; +import { DataControlInput } from '../types'; + +const ControlGroupInputBuilder = { + addDataControlFromField: ( + initialInput: Partial, + newPanelInput: { + panelId?: string; + dataViewId: string; + fieldName: string; + title?: string; + } + ) => { + const { panelId, dataViewId, fieldName, title } = newPanelInput; + console.log('here'); + const newPanelId = panelId ?? uuid.v4(); + initialInput.panels = { + ...initialInput.panels, + [newPanelId]: { + explicitInput: { id: newPanelId, dataViewId, fieldName, title: title ?? fieldName }, + grow: true, + order: 0, + type: 'optionsListControl', + width: 'medium', + } as ControlPanelState, + }; + }, +}; export interface ControlGroupRendererProps { - input?: Partial>; + // input?: Partial>; onEmbeddableLoad: (controlGroupContainer: ControlGroupContainer) => void; + getCreationOptions: (builder: typeof ControlGroupInputBuilder) => Partial; } -export const ControlGroupRenderer = ({ input, onEmbeddableLoad }: ControlGroupRendererProps) => { +export const ControlGroupRenderer = ({ + onEmbeddableLoad, + getCreationOptions, +}: ControlGroupRendererProps) => { const controlsRoot = useRef(null); const [controlGroupContainer, setControlGroupContainer] = useState(); - const id = useMemo(() => uuid.v4(), []); - /** * Use Lifecycles to load initial control group container */ useLifecycles( () => { const { embeddable } = pluginServices.getServices(); - (async () => { - const container = (await embeddable - .getEmbeddableFactory< - ControlGroupInput, - ControlGroupOutput, - IEmbeddable - >(CONTROL_GROUP_TYPE) - ?.create({ id, ...getDefaultControlGroupInput(), ...input })) as ControlGroupContainer; + const factory = embeddable.getEmbeddableFactory< + ControlGroupInput, + ControlGroupOutput, + IEmbeddable + >(CONTROL_GROUP_TYPE); + const container = (await factory?.create({ + id, + ...getDefaultControlGroupInput(), + ...getCreationOptions(ControlGroupInputBuilder), + })) as ControlGroupContainer; if (controlsRoot.current) { container.render(controlsRoot.current); @@ -56,26 +87,6 @@ export const ControlGroupRenderer = ({ input, onEmbeddableLoad }: ControlGroupRe } ); - /** - * Update embeddable input when props input changes - */ - useEffect(() => { - let updateCanceled = false; - (async () => { - // check if applying input from props would result in any changes to the embeddable input - const isInputEqual = await controlGroupContainer?.getExplicitInputIsEqual({ - ...controlGroupContainer?.getInput(), - ...input, - }); - if (!controlGroupContainer || isInputEqual || updateCanceled) return; - controlGroupContainer.updateInput({ ...input }); - })(); - - return () => { - updateCanceled = true; - }; - }, [controlGroupContainer, input]); - return
; }; diff --git a/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx b/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx index dbcf5e7adc1fb..d3de50a194cc6 100644 --- a/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx +++ b/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx @@ -103,6 +103,7 @@ export class ControlGroupContainer extends Container< fieldName: string; title?: string; }) { + console.log('before', this.input); const dataView = await pluginServices.getServices().dataViews.get(dataViewId); const fieldRegistry = await getDataControlFieldRegistry(dataView); const field = fieldRegistry[fieldName]; diff --git a/src/plugins/embeddable/public/lib/containers/container.ts b/src/plugins/embeddable/public/lib/containers/container.ts index 843d3a7cd5c99..8de00b6e63325 100644 --- a/src/plugins/embeddable/public/lib/containers/container.ts +++ b/src/plugins/embeddable/public/lib/containers/container.ts @@ -408,7 +408,7 @@ export abstract class Container< [panelState.explicitInput.id]: panelState, }, } as Partial); - + console.log('after', this.input); return await this.untilEmbeddableLoaded(panelState.explicitInput.id); } From e8f220151bf4c9926ee2ed2348386a75c69a47d8 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Tue, 22 Nov 2022 10:21:21 -0700 Subject: [PATCH 3/8] Dynamically determine type --- .../public/control_group_example.tsx | 12 ++++--- .../control_group/control_group_renderer.tsx | 28 +++++++++------ .../embeddable/control_group_container.tsx | 17 ++------- .../embeddable/control_group_helpers.ts | 36 +++++++++++++++++++ 4 files changed, 64 insertions(+), 29 deletions(-) create mode 100644 src/plugins/controls/public/control_group/embeddable/control_group_helpers.ts diff --git a/examples/controls_example/public/control_group_example.tsx b/examples/controls_example/public/control_group_example.tsx index 77471b9178090..8394569dfae94 100644 --- a/examples/controls_example/public/control_group_example.tsx +++ b/examples/controls_example/public/control_group_example.tsx @@ -16,6 +16,7 @@ import { import { withSuspense } from '@kbn/presentation-util-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import { EuiPanel } from '@elastic/eui'; +import { getDefaultControlGroupInput } from '@kbn/controls-plugin/common'; interface Props { dataView: DataView; @@ -31,13 +32,16 @@ export const ControlGroupExample = ({ dataView }: Props) => { onEmbeddableLoad={async (controlGroup) => { setControlGroup(controlGroup); }} - getCreationOptions={(controlGroupInputBuilder) => { - const initialInput: Partial = { controlStyle: 'twoLine' }; - controlGroupInputBuilder.addDataControlFromField(initialInput, { + getCreationOptions={async (controlGroupInputBuilder) => { + const initialInput: Partial = getDefaultControlGroupInput(); + await controlGroupInputBuilder.addDataControlFromField(initialInput, { dataViewId: dataView.id ?? 'kibana_sample_data_ecommerce', fieldName: 'customer_first_name.keyword', }); - console.log(initialInput); + await controlGroupInputBuilder.addDataControlFromField(initialInput, { + dataViewId: dataView.id ?? 'kibana_sample_data_ecommerce', + fieldName: 'customer_last_name.keyword', + }); return initialInput; }} /> diff --git a/src/plugins/controls/public/control_group/control_group_renderer.tsx b/src/plugins/controls/public/control_group/control_group_renderer.tsx index 388366f65ca47..40585e0d123d4 100644 --- a/src/plugins/controls/public/control_group/control_group_renderer.tsx +++ b/src/plugins/controls/public/control_group/control_group_renderer.tsx @@ -8,7 +8,7 @@ import uuid from 'uuid'; import useLifecycles from 'react-use/lib/useLifecycles'; -import React, { useEffect, useMemo, useRef, useState } from 'react'; +import React, { useMemo, useRef, useState } from 'react'; import { IEmbeddable } from '@kbn/embeddable-plugin/public'; @@ -17,28 +17,32 @@ import { ControlPanelState, getDefaultControlGroupInput } from '../../common'; import { ControlGroupInput, ControlGroupOutput, CONTROL_GROUP_TYPE } from './types'; import { ControlGroupContainer } from './embeddable/control_group_container'; import { DataControlInput } from '../types'; +import { getCompatibleControlType, getNextPanelOrder } from './embeddable/control_group_helpers'; const ControlGroupInputBuilder = { - addDataControlFromField: ( + addDataControlFromField: async ( initialInput: Partial, newPanelInput: { - panelId?: string; dataViewId: string; fieldName: string; + panelId?: string; title?: string; } ) => { + const { defaultControlGrow, defaultControlWidth } = getDefaultControlGroupInput(); const { panelId, dataViewId, fieldName, title } = newPanelInput; - console.log('here'); - const newPanelId = panelId ?? uuid.v4(); + const newPanelId = panelId || uuid.v4(); + const nextOrder = getNextPanelOrder(initialInput); + const controlType = await getCompatibleControlType({ dataViewId, fieldName }); + initialInput.panels = { ...initialInput.panels, [newPanelId]: { explicitInput: { id: newPanelId, dataViewId, fieldName, title: title ?? fieldName }, - grow: true, - order: 0, - type: 'optionsListControl', - width: 'medium', + grow: initialInput.defaultControlGrow || defaultControlGrow, + order: nextOrder, + type: controlType, + width: initialInput.defaultControlWidth || defaultControlWidth, } as ControlPanelState, }; }, @@ -47,7 +51,9 @@ const ControlGroupInputBuilder = { export interface ControlGroupRendererProps { // input?: Partial>; onEmbeddableLoad: (controlGroupContainer: ControlGroupContainer) => void; - getCreationOptions: (builder: typeof ControlGroupInputBuilder) => Partial; + getCreationOptions: ( + builder: typeof ControlGroupInputBuilder + ) => Promise>; } export const ControlGroupRenderer = ({ @@ -72,7 +78,7 @@ export const ControlGroupRenderer = ({ const container = (await factory?.create({ id, ...getDefaultControlGroupInput(), - ...getCreationOptions(ControlGroupInputBuilder), + ...(await getCreationOptions(ControlGroupInputBuilder)), })) as ControlGroupContainer; if (controlsRoot.current) { diff --git a/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx b/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx index d3de50a194cc6..b26a70aa1d302 100644 --- a/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx +++ b/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx @@ -44,7 +44,7 @@ import { ControlEmbeddable, ControlInput, ControlOutput, DataControlInput } from import { CreateControlButton, CreateControlButtonTypes } from '../editor/create_control'; import { CreateTimeSliderControlButton } from '../editor/create_time_slider_control'; import { TIME_SLIDER_CONTROL } from '../../time_slider'; -import { getDataControlFieldRegistry } from '../editor/data_control_editor_tools'; +import { getCompatibleControlType, getNextPanelOrder } from './control_group_helpers'; let flyoutRef: OverlayRef | undefined; export const setFlyoutRef = (newRef: OverlayRef | undefined) => { @@ -103,11 +103,7 @@ export class ControlGroupContainer extends Container< fieldName: string; title?: string; }) { - console.log('before', this.input); - const dataView = await pluginServices.getServices().dataViews.get(dataViewId); - const fieldRegistry = await getDataControlFieldRegistry(dataView); - const field = fieldRegistry[fieldName]; - return this.addNewEmbeddable(field.compatibleControlTypes[0], { + return this.addNewEmbeddable(await getCompatibleControlType({ dataViewId, fieldName }), { id: uuid, dataViewId, fieldName, @@ -317,14 +313,7 @@ export class ControlGroupContainer extends Container< partial: Partial = {} ): ControlPanelState { const panelState = super.createNewPanelState(factory, partial); - let nextOrder = 0; - if (Object.keys(this.getInput().panels).length > 0) { - nextOrder = - Object.values(this.getInput().panels).reduce((highestSoFar, panel) => { - if (panel.order > highestSoFar) highestSoFar = panel.order; - return highestSoFar; - }, 0) + 1; - } + const nextOrder = getNextPanelOrder(this.getInput()); return { order: nextOrder, width: diff --git a/src/plugins/controls/public/control_group/embeddable/control_group_helpers.ts b/src/plugins/controls/public/control_group/embeddable/control_group_helpers.ts new file mode 100644 index 0000000000000..817cf9c280155 --- /dev/null +++ b/src/plugins/controls/public/control_group/embeddable/control_group_helpers.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { ControlGroupInput } from '../types'; +import { pluginServices } from '../../services'; +import { getDataControlFieldRegistry } from '../editor/data_control_editor_tools'; + +export const getNextPanelOrder = (initialInput: Partial) => { + let nextOrder = 0; + if (Object.keys(initialInput.panels ?? {}).length > 0) { + nextOrder = + Object.values(initialInput.panels ?? {}).reduce((highestSoFar, panel) => { + if (panel.order > highestSoFar) highestSoFar = panel.order; + return highestSoFar; + }, 0) + 1; + } + return nextOrder; +}; + +export const getCompatibleControlType = async ({ + dataViewId, + fieldName, +}: { + dataViewId: string; + fieldName: string; +}) => { + const dataView = await pluginServices.getServices().dataViews.get(dataViewId); + const fieldRegistry = await getDataControlFieldRegistry(dataView); + const field = fieldRegistry[fieldName]; + return field.compatibleControlTypes[0]; +}; From a7f8a474bcdddb688053443e607f0716f9fd9a72 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Tue, 22 Nov 2022 15:14:40 -0700 Subject: [PATCH 4/8] Fix logic of grow + width --- .../public/control_group_example.tsx | 8 +++++++- .../control_group/control_group_renderer.tsx | 20 +++++++++++-------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/examples/controls_example/public/control_group_example.tsx b/examples/controls_example/public/control_group_example.tsx index 8394569dfae94..f1c7309efd198 100644 --- a/examples/controls_example/public/control_group_example.tsx +++ b/examples/controls_example/public/control_group_example.tsx @@ -33,7 +33,10 @@ export const ControlGroupExample = ({ dataView }: Props) => { setControlGroup(controlGroup); }} getCreationOptions={async (controlGroupInputBuilder) => { - const initialInput: Partial = getDefaultControlGroupInput(); + const initialInput: Partial = { + ...getDefaultControlGroupInput(), + defaultControlWidth: 'small', + }; await controlGroupInputBuilder.addDataControlFromField(initialInput, { dataViewId: dataView.id ?? 'kibana_sample_data_ecommerce', fieldName: 'customer_first_name.keyword', @@ -41,6 +44,9 @@ export const ControlGroupExample = ({ dataView }: Props) => { await controlGroupInputBuilder.addDataControlFromField(initialInput, { dataViewId: dataView.id ?? 'kibana_sample_data_ecommerce', fieldName: 'customer_last_name.keyword', + width: 'medium', + grow: false, + title: 'Last Name', }); return initialInput; }} diff --git a/src/plugins/controls/public/control_group/control_group_renderer.tsx b/src/plugins/controls/public/control_group/control_group_renderer.tsx index 40585e0d123d4..f3fa29f887df3 100644 --- a/src/plugins/controls/public/control_group/control_group_renderer.tsx +++ b/src/plugins/controls/public/control_group/control_group_renderer.tsx @@ -23,14 +23,17 @@ const ControlGroupInputBuilder = { addDataControlFromField: async ( initialInput: Partial, newPanelInput: { - dataViewId: string; - fieldName: string; - panelId?: string; title?: string; - } + panelId?: string; + fieldName: string; + dataViewId: string; + } & Partial ) => { const { defaultControlGrow, defaultControlWidth } = getDefaultControlGroupInput(); - const { panelId, dataViewId, fieldName, title } = newPanelInput; + const controlGrow = initialInput.defaultControlGrow ?? defaultControlGrow; + const controlWidth = initialInput.defaultControlWidth ?? defaultControlWidth; + + const { panelId, dataViewId, fieldName, title, grow, width } = newPanelInput; const newPanelId = panelId || uuid.v4(); const nextOrder = getNextPanelOrder(initialInput); const controlType = await getCompatibleControlType({ dataViewId, fieldName }); @@ -38,13 +41,14 @@ const ControlGroupInputBuilder = { initialInput.panels = { ...initialInput.panels, [newPanelId]: { - explicitInput: { id: newPanelId, dataViewId, fieldName, title: title ?? fieldName }, - grow: initialInput.defaultControlGrow || defaultControlGrow, order: nextOrder, type: controlType, - width: initialInput.defaultControlWidth || defaultControlWidth, + grow: grow ?? controlGrow, + width: width ?? controlWidth, + explicitInput: { id: newPanelId, dataViewId, fieldName, title: title ?? fieldName }, } as ControlPanelState, }; + console.log(initialInput); }, }; From e298f4be55faf8e6e1a44dead4b62f24abd2e4b9 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Tue, 22 Nov 2022 16:40:32 -0700 Subject: [PATCH 5/8] Expose redux embeddable tools --- examples/controls_example/public/app.tsx | 4 +- .../public/control_group_example.tsx | 68 ++++++++++++++++++- .../control_group/control_group_renderer.tsx | 13 +++- .../embeddable/control_group_container.tsx | 4 ++ .../controls/public/control_group/index.ts | 5 +- src/plugins/controls/public/index.ts | 6 +- 6 files changed, 92 insertions(+), 8 deletions(-) diff --git a/examples/controls_example/public/app.tsx b/examples/controls_example/public/app.tsx index 31923264569a4..5844d9033e349 100644 --- a/examples/controls_example/public/app.tsx +++ b/examples/controls_example/public/app.tsx @@ -23,10 +23,10 @@ interface Props { const ControlsExamples = ({ dataView }: Props) => { return ( - + -

The following showcases how to use the control group as a building block.

+

The following examples showcase how to use the control group as a building block.

diff --git a/examples/controls_example/public/control_group_example.tsx b/examples/controls_example/public/control_group_example.tsx index f1c7309efd198..26c35986c018b 100644 --- a/examples/controls_example/public/control_group_example.tsx +++ b/examples/controls_example/public/control_group_example.tsx @@ -6,16 +6,25 @@ * Side Public License, v 1. */ -import React, { useState } from 'react'; +import React, { useMemo, useState } from 'react'; import { LazyControlGroupRenderer, ControlGroupContainer, ControlGroupInput, + useControlGroupContainerContext, + ControlStyle, } from '@kbn/controls-plugin/public'; import { withSuspense } from '@kbn/presentation-util-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; -import { EuiPanel } from '@elastic/eui'; +import { + EuiButtonGroup, + EuiFlexGroup, + EuiFlexItem, + EuiPanel, + EuiSpacer, + EuiText, +} from '@elastic/eui'; import { getDefaultControlGroupInput } from '@kbn/controls-plugin/common'; interface Props { @@ -25,9 +34,64 @@ const ControlGroupRenderer = withSuspense(LazyControlGroupRenderer); export const ControlGroupExample = ({ dataView }: Props) => { const [myControlGroup, setControlGroup] = useState(); + const [currentControlStyle, setCurrentControlStyle] = useState('oneLine'); + + const ControlGroupReduxWrapper = useMemo(() => { + if (myControlGroup) return myControlGroup.getReduxEmbeddableTools().Wrapper; + }, [myControlGroup]); + + const ButtonControls = () => { + const { + useEmbeddableDispatch, + actions: { setControlStyle }, + } = useControlGroupContainerContext(); + const dispatch = useEmbeddableDispatch(); + + return ( + <> + + + +

Choose a style for your control group:

+
+
+ + { + setCurrentControlStyle(value); + dispatch(setControlStyle(value)); + }} + type="single" + /> + +
+ + + ); + }; return ( + {ControlGroupReduxWrapper && ( + + + + )} + { setControlGroup(controlGroup); diff --git a/src/plugins/controls/public/control_group/control_group_renderer.tsx b/src/plugins/controls/public/control_group/control_group_renderer.tsx index f3fa29f887df3..b0a5b17bfcf7d 100644 --- a/src/plugins/controls/public/control_group/control_group_renderer.tsx +++ b/src/plugins/controls/public/control_group/control_group_renderer.tsx @@ -11,13 +11,20 @@ import useLifecycles from 'react-use/lib/useLifecycles'; import React, { useMemo, useRef, useState } from 'react'; import { IEmbeddable } from '@kbn/embeddable-plugin/public'; +import { useReduxContainerContext } from '@kbn/presentation-util-plugin/public'; import { pluginServices } from '../services'; import { ControlPanelState, getDefaultControlGroupInput } from '../../common'; -import { ControlGroupInput, ControlGroupOutput, CONTROL_GROUP_TYPE } from './types'; +import { + ControlGroupInput, + ControlGroupOutput, + ControlGroupReduxState, + CONTROL_GROUP_TYPE, +} from './types'; import { ControlGroupContainer } from './embeddable/control_group_container'; import { DataControlInput } from '../types'; import { getCompatibleControlType, getNextPanelOrder } from './embeddable/control_group_helpers'; +import { controlGroupReducers } from './state/control_group_reducers'; const ControlGroupInputBuilder = { addDataControlFromField: async ( @@ -48,7 +55,6 @@ const ControlGroupInputBuilder = { explicitInput: { id: newPanelId, dataViewId, fieldName, title: title ?? fieldName }, } as ControlPanelState, }; - console.log(initialInput); }, }; @@ -100,6 +106,9 @@ export const ControlGroupRenderer = ({ return
; }; +export const useControlGroupContainerContext = () => + useReduxContainerContext(); + // required for dynamic import using React.lazy() // eslint-disable-next-line import/no-default-export export default ControlGroupRenderer; diff --git a/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx b/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx index b26a70aa1d302..3e95100d95cfe 100644 --- a/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx +++ b/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx @@ -87,6 +87,10 @@ export class ControlGroupContainer extends Container< return this.lastUsedDataViewId ?? this.relevantDataViewId; }; + public getReduxEmbeddableTools = () => { + return this.reduxEmbeddableTools; + }; + public closeAllFlyouts() { flyoutRef?.close(); flyoutRef = undefined; diff --git a/src/plugins/controls/public/control_group/index.ts b/src/plugins/controls/public/control_group/index.ts index ded1c29934d6e..b55d63134439b 100644 --- a/src/plugins/controls/public/control_group/index.ts +++ b/src/plugins/controls/public/control_group/index.ts @@ -14,5 +14,8 @@ export type { ControlGroupInput, ControlGroupOutput } from './types'; export { CONTROL_GROUP_TYPE } from './types'; export { ControlGroupContainerFactory } from './embeddable/control_group_container_factory'; -export type { ControlGroupRendererProps } from './control_group_renderer'; +export { + type ControlGroupRendererProps, + useControlGroupContainerContext, +} from './control_group_renderer'; export const LazyControlGroupRenderer = React.lazy(() => import('./control_group_renderer')); diff --git a/src/plugins/controls/public/index.ts b/src/plugins/controls/public/index.ts index ac7a2ab23df84..e0680bae23225 100644 --- a/src/plugins/controls/public/index.ts +++ b/src/plugins/controls/public/index.ts @@ -51,7 +51,11 @@ export { } from './range_slider'; export { LazyControlsCallout, type CalloutProps } from './controls_callout'; -export { LazyControlGroupRenderer, type ControlGroupRendererProps } from './control_group'; +export { + LazyControlGroupRenderer, + useControlGroupContainerContext, + type ControlGroupRendererProps, +} from './control_group'; export function plugin() { return new ControlsPlugin(); From bbb2342f74decb688cb42a179e80b0603f76ed27 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Wed, 23 Nov 2022 09:48:12 -0700 Subject: [PATCH 6/8] Clean up code --- examples/controls_example/kibana.json | 2 +- examples/controls_example/public/app.tsx | 5 -- .../public/control_group_example.tsx | 73 +++++++++++------- .../public/control_group_image.png | Bin 0 -> 18996 bytes examples/controls_example/public/pikachu.jpeg | Bin 71895 -> 0 bytes examples/controls_example/public/plugin.tsx | 18 +---- examples/controls_example/tsconfig.json | 10 +-- examples/developer_examples/public/plugin.ts | 3 - .../public/lib/containers/container.ts | 2 +- 9 files changed, 53 insertions(+), 60 deletions(-) create mode 100644 examples/controls_example/public/control_group_image.png delete mode 100644 examples/controls_example/public/pikachu.jpeg diff --git a/examples/controls_example/kibana.json b/examples/controls_example/kibana.json index 34819320b60ab..88dd37f41dcfa 100644 --- a/examples/controls_example/kibana.json +++ b/examples/controls_example/kibana.json @@ -7,5 +7,5 @@ "version": "1.0.0", "kibanaVersion": "kibana", "ui": true, - "requiredPlugins": ["embeddable", "data", "developerExamples", "presentationUtil", "controls"] + "requiredPlugins": ["data", "developerExamples", "presentationUtil", "controls"] } diff --git a/examples/controls_example/public/app.tsx b/examples/controls_example/public/app.tsx index 5844d9033e349..1000fbd9bea81 100644 --- a/examples/controls_example/public/app.tsx +++ b/examples/controls_example/public/app.tsx @@ -9,7 +9,6 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import { EuiSpacer, EuiText } from '@elastic/eui'; import type { DataView } from '@kbn/data-views-plugin/public'; import { AppMountParameters } from '@kbn/core/public'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; @@ -25,10 +24,6 @@ const ControlsExamples = ({ dataView }: Props) => { - -

The following examples showcase how to use the control group as a building block.

-
-
diff --git a/examples/controls_example/public/control_group_example.tsx b/examples/controls_example/public/control_group_example.tsx index 26c35986c018b..bc95d1723712f 100644 --- a/examples/controls_example/public/control_group_example.tsx +++ b/examples/controls_example/public/control_group_example.tsx @@ -24,6 +24,7 @@ import { EuiPanel, EuiSpacer, EuiText, + EuiTitle, } from '@elastic/eui'; import { getDefaultControlGroupInput } from '@kbn/controls-plugin/common'; @@ -85,36 +86,48 @@ export const ControlGroupExample = ({ dataView }: Props) => { }; return ( - - {ControlGroupReduxWrapper && ( - - - - )} + <> + +

Basic Redux Example

+
+ +

+ This example uses the redux context from the control group container in order to + dynamically change the style of the control group. +

+
+ + + {ControlGroupReduxWrapper && ( + + + + )} - { - setControlGroup(controlGroup); - }} - getCreationOptions={async (controlGroupInputBuilder) => { - const initialInput: Partial = { - ...getDefaultControlGroupInput(), - defaultControlWidth: 'small', - }; - await controlGroupInputBuilder.addDataControlFromField(initialInput, { - dataViewId: dataView.id ?? 'kibana_sample_data_ecommerce', - fieldName: 'customer_first_name.keyword', - }); - await controlGroupInputBuilder.addDataControlFromField(initialInput, { - dataViewId: dataView.id ?? 'kibana_sample_data_ecommerce', - fieldName: 'customer_last_name.keyword', - width: 'medium', - grow: false, - title: 'Last Name', - }); - return initialInput; - }} - /> - + { + setControlGroup(controlGroup); + }} + getCreationOptions={async (controlGroupInputBuilder) => { + const initialInput: Partial = { + ...getDefaultControlGroupInput(), + defaultControlWidth: 'small', + }; + await controlGroupInputBuilder.addDataControlFromField(initialInput, { + dataViewId: dataView.id ?? 'kibana_sample_data_ecommerce', + fieldName: 'customer_first_name.keyword', + }); + await controlGroupInputBuilder.addDataControlFromField(initialInput, { + dataViewId: dataView.id ?? 'kibana_sample_data_ecommerce', + fieldName: 'customer_last_name.keyword', + width: 'medium', + grow: false, + title: 'Last Name', + }); + return initialInput; + }} + /> +
+ ); }; diff --git a/examples/controls_example/public/control_group_image.png b/examples/controls_example/public/control_group_image.png new file mode 100644 index 0000000000000000000000000000000000000000..82e02d0b4078bc0ada62ce46c2dab9b2284f8e03 GIT binary patch literal 18996 zcmdVCby!tjw>C^{N<=~>rAwqF1nKUQ?iLV`MjAEV6&?Ll#6<}cCz`*r3G9vIl z0(m1J3=FK8sgTe+2_YepceYl>rXP)9U|vQT>gi!g(7o)`*VohQ?4_l7Wb3Hl?;ot7 z2X1fdBI#&s)9ciWh}Y7Z$Hkb3S89gIkZ-Coe;iD5S<28^&|^$BYCMBC!_nkBwX7}K z^?D=&rYL%N@jb~6lK)U7YM>-8F0P{I$CblKI1C7UCpHZn=cCS4c!M0FaRUBr3gjzf zH5u`6mT-6Ao_L=)D6#1ru5(mE5KB(XKxhX6mIz0cnAjJ_@F{tVHC!JhVRWWSwC9Jl z>(5=^dX9s!5XAIeX1#J+rQF(hiHnDe$Mo8>`Ng+OJCe6_cx`Fuhra)^z>3a zF{BcIHI~%HcnK_G3rZWo!o!16;ae(?5CTL3tdU-O7}ChHuzfCZPR7Mm+q=2FRS)s< za%YBbnM1j~z12Csy`5|0KiYf!`b8%^%<3auc+ypgen7GYMrsnqGBPl)fNNwJI9Mzg zc;E^a_zUA_3IqD*8U}_6_z438ANd6a3HXTx{Ck%U_vbDgI351aHO%(ig93^|5)!~q zMMGO7BTKsvR`%$|>BE3Vc}$hm?A2tXISs8W81&y;85l7*SyXSVW8QEP&fB*bzoJLNj_dQwK{rk0m7i7G(Sd9QzU$9>lr=Q~p;qmSysrWSxyfuZp-v#@dh)6IXob3f33 z)l{}KvK6wj04mz^-mB%`l^@>xuND94QtiG=HWrSDT|T(;pyu5xaLU=50=?o8U(9=t=Z=XE_SvTsu?Zam=-}z)&?sYrP zL8PT)DU!5HC1Tz8jwpsKZ+fK<`#8>K4xw{_yjX@gKy6$+9I$-ZwOX4IX>T z7O#r-=P4MJWp%jv&|z+RdhH@nYH=;MZxqxy5-u)3$$#Pc-M1}Hf`j68!|yg$ zk&iBpb}Cf-r^`rT-F)F}q2_n}=QL+ZTqwC3lR8RaZ$%H*Fmt?O{@Ty}GdK(n$d!9c z);h~3s*RIriwFI)EsvSGB?OYTG@I3Jx{M6Ndj7obF6H^3Qr)@zmUUU1d5J``KxoDdxy_FSLkJkdn&3QZ0I^oUbCk z7km24#zR{C-=;7@2@|BNGRkZ2Oolc%>U2wE?#E-S8``Fu^Cac{!C>1@($y`ZA!cfo z|V?1>aW3sT%wP#A6Jd{qy1a|o%C?lC&o`;MVd2b*BB+O zC%#?2+x}5jy3|%oK|ho~T#(h990#egql1=e9(*z%>ug3iG8)PbQK-8l9ISOl-MATF zqRN+5P>7U1Uo}^6uq;gG0?TfW6jI+HK8`jU$v3HbnbYBiV0O41pmA)Zdj6F;h4WLm z%gJWqW=vut*-%dZ?tB87T4b)&-k=nUiS*}4vj>r|(2Vb5q3)aox* zH781qlCDpuK02SO_j?3($!8?^|6^v2-K6t@hMRI^?l3fH?o71mmE zj7)Be=_mE*3q?R>A%t8G5;vD8J*VS3y|P+UHSb^81e|OBa7%bh%&8VPUMnIsQDf(~ zJzg&(o5o8|E*3IsIb79IOCyEN7#&-vA=M%p@*aBaJa{#bTKfLt6^#a~kdesFpVK&U9g*)X2_sC_BsTe8J@M+y_Os zQ_^TAk;yQY^`n|@S2PX%(JFoP@81~C`%PC_B0<^gN*N~ome^O=^crT9qJ-PNCtK{l z@|4ZXR}MnC@+7)rd+qB&SW7AkwQ4ljtY-6OTefLs5?N#WQl@BeJ~3UKFZEZn{ZKEX zI_zPQlT=cQevHQ~sGz90GNOtkS*YQAC_%?0?0{e6&D^4exYp)=G>a9s1 z_ekG6qpw%*I=~xQO;`j3`9A8pDeUq5FT-$|q7-P&JUtoRC5(5l@l1(Pa2?{lx4=fG2~*Q#-V){|F$@58n1K3h{Ln(5Zlch<)733 zh%uCz1_3X|U=4OJ)^sCH(za;(^TX<1>o1-i7GCmuzkP+hvl6$ph%N}<%&1l)Y0{HS zPbnF#bW?-%ezr=7Qwa!&qa7j-=9By*k=4zdTD43ZQT#nbNY;0_@mo_#wY&Qmt>d>07h>5KhA(k_u zMs=67dDTp0UL8ItQOB!8a(tw|kDjwWnJLk#bxH`vKdCgm-54@?|0{CEc43inN2AW| zBG49(FJ}t_Q(iovf}*JnWIn+@=SFolJtV4$yI{LJUE|%8%%K`E%aN|^1& zQtagFYDyYluUTa|wrJHBI6{R8zP$+pO1p`{9|t7#4>T*x3VB0skk=u8$E(3l2s!CK z4CN^Y*+V%OPl~f;2(~J~P!3wVwZ6D!U-I`Sn-wm)QY@WA+lTnS1iy~Y^BYeqL(x#R|Sgc+$>a5`*f`Vv1v zd-N!h;p|ge-u6_LT&;U;McZC$z|!FgPTH>~c%%Hv-;sYZOsn5Rn?X+X!Z^m z)FqYzukm2Fa2T|Po6)cESxYQJefM2&ZycA`(x_2eao~i*>tGJxy}b9omwudlR8k*8 z5T~#2y8aa@21CQZ*4^Xq0LO*Dwch5yQ`DU|al1|v_Pq!zi*O&ZYqzLJ$oCHZ;}_J{9lK3~z2V#&w1b*Id)Tx6w|_Vzv@@{dO&U`uG7TJ4>RCgDjB zi=o#Pg~;_rY7{KKEikwKRB7&5#fylOQwWnk2N+WhdIow@oxo$0zGNm82oVp_u%!`Q zh$rTckv!!$Y%!e>-7ilFbHymmHb)dS`>ZkGB{B5Sgq`-Ait_qbz#GT1w7S-&bnk8t_7FNlD;Hn)L93=3aC`!LGmJ4=Zkl!0Gy>6U zGN>#5w1w?ry45{xwAI;&c6=fPMGoUW3@`k60zE$m4cVwkV#2|*#H#rrpegoCCmg1f zn~ewtsaNYaKwZAsDxXD^ncRx7*3Du39B0rdN5)qF68M}p9#l$Np9+SWrtF6CRpxml zfj3XuLkK2%X}P(3?71l@TFX+?PB%}x;N|sXg?XvLg{^iNm)USMi-~M^J|lXxItw^zu`Q?@9^E0ztN8I~ zhvRPTfXH|B>17;YM7YaR(&2sc-WtQJ%u`0S(ZU6mG7ugu2^Vmpu4D7AVw*zDSi@r}D< z=~Lj|*ioV3Pn-TgO?kAwj?P}RD_oa@8{7Wim zc3~oMKCd^iJFBdi?^_?-Dz=zMpi+GVUvn-pGQkik%S1_<`eO^YaCnO*DUqwC>*r8e!3j47QV0( z7ga6#X!3y^7DU2ZLujjg{S`Kh2kLWvaq(+!_r?mS@bOojssfA&}VIm%+L#co!0k*7bpmj!zoN zsKbP@3V$$(^>f(TeD)(Z_XzV-WM14ASDBmQoOX>faniyZq+*}Ua`Vbp&dcW6zVH;_a}MhBrQwk)$g3n6Tz|#con#eSqFmm6*3uTl>rsAM^MVKUUm)lm z=(OR~+e6h#R_~dmPRmZQBbU>1vQn;7Qt#$kb-(T&Z=Fm+VsVngq}mVa>u}JXOX zNrqb3Or7H%Z|=LVwb~1QU52wrA_cEMN56RV_;Kd`QMg@` z*&T4@_n>&Uo9hty6qRU@q%gshh8x>JniJ+RYHziv8MYBB&^F5!wtkY&9dh(z9D$%E0lyp~>m0rtV z*IY-J@ZTfBP98Y*fQA(sfqrl*5Pxc5Lk+|v(3TvBr6vRCKR$3Q;+_V9Ur332I)xYYlOM$28+ti94BMX6>L_?g+bpTL|3I+2j^}mY2ABe{;=<_`z6vSEP#Q;E7ZeJ#LIdLrFuyKtnXAqQ%#1ev`x1+R({o@A!js8D3v{HI#k+z-D ziQ0pA4fkY0Ip>U2*U6(Sp6eJ(5^D;sruY%dnc^yFS7;rt9(`=s5;&d}}}BEpo#xhE2$QP3|~;e$V1( z^e@OT7n-n~IYbo{cU(X01U9@}*_4rMplTBENS!hmeZU-v^W$y8W$}kM2)9v;XXz_m zH}w+aU!FIObUz^6DCRFf&4O?-SM0wmMJxjOG9{&@2i&i>R~xzYNC1XGZ=Kz> zDf^rS@e{6;Yr_72nVp>mI=o4X{X%*D|Ey(yCe7Ojz?PosGt=H1=Ds~(g{dB2)cEep ztjPdlrEY$&a^LCv24LpgH;;dKJSYsV~*DIM`-a4C%GrN0aEFL!;)W6D7s5m(_PIo8B<>lokWRqqVlUrTy8E{AQ~YJrJ>B;{;|r(kN?7jbA?W5040bC%;a zhD!6|6hrr>YlKqWYOA(qSKdx1W7k@?V5gJ|K~!97jFOBJP;rW*$3#P(BDb8igGpON zLt_wvRKK6?QJQ^yYjBLjY&0nywAgTQN{z>1TuVVc1r|#aA+!9;jyiF}`q!+bfhDM< zuX($Fl08}El!EyweO;(lDa~Hw;r&GehKSex_qQLYtNl?6LP*`WytvfnD#eiz#SK&# z!N?`kG8YF(c!!(ahixWloe3;CC(xyiunngqHp}6w2;-$MXqUKyWN6LH#0_yZWhNUZ z)8~>hQc;Cdj#9$H0vj$?uG&7Nh#`l4VmjeLIE>vnx^C1uo4&tFu=-M}lwymu7@L{| z7I&8D#SM|`;^WmOe%OWi_i*ldX*sb+M-Z|6x-hP`djG8}Nm2T%eZbW8Zyis7Yn0yKT-aoI3_$#svb)_qY zc9NNGJ8B8PbEoW=P1m3x|#bYB`5wd#mXD*^Avl8>|3emcZ&=S4Uij=!H@UT&ge z>CcF{+tO}B?HV$3a-@Q?LnufZbu(va-4` z?3N|WQ4WF}ANJQF9otTY^3k7ep?UmW$fub>sj8p*QejweJp8u`=CKZ{z;ikrU}){M ztFCIUO5M-sSK1n@H@vEYLxZ2VjC-$T7;zZ2Nmke^A z@JYvZ$1!$)LEDnCnXK9)8S+RaeM)Vlb~#$4O%H&xC>?jAAsd%7XRX~Wmj;^pGS$(- zxq>pfV$q9KE*u)=SIWPq2-qwjU%y|Tm~FUYWLD*$N8m7Q?ofs74tMiaZvXD?)pRto zQESk#sOx3?GoigS!#wF>;{m4!WY_<~*uf)~UOTT!HXrJt>wZyletG@@w#xO4Ay=`g z=mn39F#g<#u%MuzeeIVJ{9ivS%#SZ4TKtZ&Vg=lSt=H#aX>{vrXA3kLh28=*fV!1# zo$ZK!?3UEyZGJvppZ?(wx<@eVyEod*(~a#=7%Nx56&^SmLwA^=jQo(h;9?=4K_WH6V<*i4vKUrIJKCb?8d{vg$CZm6NV&bc>`uetq zE@}Lk0s@g)lJN2IeDbSrd1iMVKTWN*n=x?-7ks;UMRYCO=1c}Sx? zu0_PmN4^Ert#gb1ajmR_FkTB20U(O__xRd2)#}glse1RM){eGcEd9KUjHkqUdEhaI zl=lPQe3_lrtxa>LD;2?sWc|E1nb8c|0OfEs^Q^yQv-i^Ci;tgQH|d*q%Tp+~)O&S& zI)Tq<3<6Cover+Qg0TDIA}OULS6(R>h(L1Pfe|D9bco(Bd8epT-(`SwP^F`O+jX*O zJZWWxz_1{ZM@&K&0Fbv`SZV`0_C$Y4`f6Wf{_U06d6tgoEq7?FuH!{z-Ie8$ZI)DA zk;XI2nNoEf{Nq6G3nkrvpZJs!5fLsk{#toTG#4(-RRGzTf%KUlbn1MKVmi0bAd$^v z-K_ClzAV;$eOv;-%v5|b7Xup6Nt2E%lF>xt@AnO=r#D8J1O&8qbbO^N zj@`z^#l=RgOae!V0!6dS6rp(H(#v)BYR6krXV+s48g;Ukm6WBP`0zjbILRF5+dlxp zVQqY8>goq?wsh~93|HBY!@UNRl^YvFqeUO9OuZ&S7mo%inIv^&zV{}Nk$;Jfa+>Ms z={ZDIbMu1c293;@e@84SR5_qM;)_dz#s1^lUU>6|(u4cj?S#?J$4i~dD5xmJ+azN$ zmABX?Du+2BvPI?By(tY!Y|tMv==d8@eiNgG#|{p5@x*_e9e!St@R*f;!`3wFR8-YK zKDm#4TYsJX@H6E1l+c2(=uX$2_aT2bHDK#~K>|3cFchMse|<(TO<$O{xk6j2i6{5+ zxAp}50r+s-hd$ABU{kN^N_fxpUWxmpSlrK|;Kg zFf&VpBsCuX=THDAEAJ$!?mJr>v9O`Ibvgw__M}w5;oq$TxF8ZF;bfD41VR`u3<26w zTF?i!oE^#o6dDJX1%dkklfa%~`G-nGSNpt2K}Rdq#DpyNcXVh5Vn2x~FSic}m57Xv zX4NO=hj2Up)v_l@OA@AN7B$Xb#a5~ISrGDbU0ukb>~{TZ?{|*Yxsi2HK#*MY@-nN0 zoE-ZTn}@+pfU(U>BWnN9ID!g@H zShD~w6nh#Bw%niPgCDMl0#J(NBwf&b?P+Pi-|waNY>WEiqJ?|X-l2y`w(bWpICdaZ zXLp36cW^JWc}YM|MVY;&57g8P_-NB^aBAFttOo|AIug(@t!WwEy$t`K8(O%Zf&EMw6#qHwtlY2V4Hi9c!F#rJgdU0K%jF8>+}X6 zKg57yt5F9YfWcseRM!4qy-Xm zyx4IImCv=r>4DeJ9rFK;6Gml6ABMLZgZb4yq(4JGjQbuBDyw5JntTSfK5Eb7^{_r+ z{_8dZ7f!rhCE@%lP?=Iqc_6Bsi}h5|o|q59u}^ZZ{%}t*3{O;C0H~MHK!XJc+Xr>1 z?sv31KWsyYXX{nFEYQp0bbcF!^spE zu2%Y47kz%Qa?bWE?CsgA?QaS95anWpJ~DK`V@F=T zY?%BNMg4xi8(yZ|`?GhJ%oHSR>jqu&he4b4RbgRfPF6Sc=8EE*wLXn9gSvQwT@p&5(hYB{;W+51v+yTDiN^gyYlr)BT1vd zxx<6wNG=o0T=GC0U1!k<3p{aSG3h#AT_AsQaB_kf$mjhsZWRPjn*cxE3Ba37*%=pw zdPpL1ZyH~7l+k@5O3<=dxOreB+~pQ&CTawPq@kyZnF7bj^^nIbc6(i#4U=DXRh5? z&<)}fOk7w_xS=cU-0wC z^lgs5$}V`p>7cQmT^1CIR3?$G=vVp5HxA3w?vv!B#*c8vCF^ZL*pa7&1mbRjk-q0a zAyVPX%g;=Qu4SVLaM5F@9Eq{2jnEEoh|^w*pyHHIe)f2~-qFbc(+TAAI4W$pkX`IomK2WBS}5V+G>f~@P>Y~Kbvq64@%1%zJV5Q| z$)FFu*exh+;vn-R-ek_AgODjH@ugeW2Xj`~AA<2JblPkx???N&xYMO&JTQ7htC1H)+A8v;iOAQgg! zPYj#{<+PK9gzcHC>t0W&PPB&6vSV2%tXOSE|N4wBXzc}exSvsX!g+aHcXW!YUgc0x zZZ@MaTA+~|#%?+(T@$#~1-SoNBHb#7gXyXiY-}poGAU%}+~YDj#2k`$vGw{s!uPX# zcA2JS#kXuRYFb zcwSi_eY+)wn=W79ic61Ok;K74=Bf6%j#e_bZmF$$_@u^+q)ZK8N0S?j)flH66GFf) z9+n#RAz#C0YOODU{v20749gi=?!;YX7WX2Nd$0_G?R7Tmnl@aZKIGp{ zi84;<$;+H;EH~vJOsox3OT!ZdCX|DK_0m7R-80wjkWJyz z%+CjsN|g4%-^JvduLE+9ISath%~b)<6>Dg7TPb+XL%q^I;F@g-2L&BH4(AH}cgKYY z+$r*TZiJ2ezz=NsB2lA{Q+69_6!VBE@tBQi4o*(-6REc<;H0`niffIE4~KKGMKcN@ zOImEw{^JcYF}Z7ciLRfjxq_zZ5SuF7D-C@19s+HMs0cmuH5~3DWByz=t*RjiUg9;+ z$d9Po^@2WHcIE;vTx~7&m|u9PJt%fFMvGQseS`}9JP2u5XURQjaRa|w4DE6#{u^aJem=Z6ho79kueC6{ zog;6Yh@%IDhDJKJheo|p&iC)ZIZ&i>M8vZ8;r~JAyF5I%hHzt3TO1ZW1wPN*wdx|4 z6+>nY%>a>HW7BCB(R)1e2vz8IJ(!m`|J3&?SANGKSFwK6@qG4 z@<+SIZqEuGcItVI%ll9nmZ0#6fq?sk&vc#bcD#V(f`R;G)?JQk<6=L9ljxsW==kRQ z*BKU;wZaGp{xm5ylr#TohV^^YL3pIH3lTM}7;+D%VisngF% z&7E(fChlB%rhYR`627%q99X)$GhR1lIb)+JEM~&Jp|^>BwEtm`cW`Mz?0Ejkc0-{s z%Ej*0ug|91)^?4TCZHbj^QCB0EF7Ht%g2anFIX0>CEzNN^%h4e%_P6PNpkqL7sS5q z!KO?b6GMeIVKt1+vfIxK%RODsVyt%hl-alAX$f1E&X(~Bg?g{!RmbU#%c>{Lh)k}@ zSfvXIGQJNh&(BKC9;9kX6gJS~XU^&7s5iuZ7Em@XIBymdCrXMeqwz0=%P#*4yIt;| z}v_*e$}EwpwC`U`vg0nWY$m zC6Ic?j1xVyBZb4*YC2TsWg#)=l z5^jQlGty2Ez^8a)9q5}O)?K1$vyk_;N^8;ik$kZRt;Sm=0K8CgQb{N%3=Rk7?yPqF z2g%Ps0i(L-EA_*cJfZkMl68MIJZ0N(LX4oyo=*~PVl{lSe_=p+aCoVHEKL4lLD&NfLKuPnU()RaGjOs z5QkpM6N3li;)*%OlQJpXs7b-6&QzOMflhcP3hEW_NG(JRUj zfU!2Vp*^906wnxjoSCDmi1_n;&5P&MBB;KSKo0fH=0wGH)1u>oLhv~dbF~h?3Eqxv z{trv65p0~Ak`fexi$?e@)~D?sI~Dk>+#I&toFG`CNawr6qXsPw)t=}--2nC_O2S_Q zCT~U+SCalb!wm$o?6-oH-LL02js6(cof`Mu;1E9F02AYX8|*r&_n=@z+btP;ch7T@ zc)1CX1UX-P3~X?N^$WSrmiBTJ1p?t|Db{R%*%}fsz@v1}t)&(Io$j3`fZ7iyP)zLp za#n}zuz?NN?$8OBKeqP2Zi@Tzgb?6-U%8%c#{els5@{Wm>x$m)$nBN0)`Mg5eMXte zS+CVy=``BuIF~ZD2)n85AO#gOKaz0)P6!4R85OnC8DVI<*eX%8Q@N<{wRuM&Q(V89 z)QeldbIdCBt&DSJ-kJB?E&_RiQMV6x)ZXUr{;7EvDk){;X!h{49ORVHcI;+(3o_EBbJiWK36L zKpcU|q~qBMs>jtCF-CIOYA-!F?dj8}CntVK+BLS6?(QajF|N`H*Uf5cImRhVa{r@T!at9h~X_axAf*new1_7Y~Lm?eY)nI6Cw_3K_;w+vKe~wz$_pOs$3-$70gg8BSW%K*j0yJm#1;VdCEe(SKC5S;?4CqI!+QO4YV4WA^_Gd z>*uBH=esTMBWGii)p0h8$I=H&0*S~gY2dzBU#HbpxKsfDu}}qwryc?M&^If6Tw9&Z zzGd{FGaxEqv^|cVY0}TjY`1E!$ir;n!?$IUx{>23H2zh`s)0w6({WcX@bVY6ZrAZf zL*gbOklb5;zDS;{Q4vTJdJ#y@P2z)uhEL{tw#&}6HLxUr$9b&Ww3TR!Uuik>6?z4VU{c1-Q z`|8I+r+dkV0R=psOTwA@@o}}34#zq7LL#kKGvUOJPS~(v8%Ib3Nam`>L1_>h0hneo zBGgk{bb~7c3;q3 zg*ZQ%F`AFkMU3R*bT5USsWgA66&4fIY^|vDIxZ>TIqVcFH5(yQud)4VzcDB=>+V=f zbGh29S-yXD*d1on9-LdM*F;A@OC<;G|8_f~`ZSvBlua3mMLBHz%OA64IPEt&TsKnl z^+izmeiF+X4v@Tsci7DswF0DTerFy_>|)YwO4|WMnd#$TgvVl>36K$wpvl>CXIiSu8K_^vnL^<@9v?_E;8z!`*=b2D%h|3$v4sS}FW~=Gys^bGR z0+kOod=A^UATo4V6-qUtka=YE60b%C+Sl-0{wA4q2{7Fo-Hhl_KnniqTLM+xhVLKx zQ^S6p?m(8ISCHv2ks;}B(XXZ>X+l>}TDFd^Ex$=i4Xv*33H ze}=M)qqZ6m+H{2Ccyz=xp zy+&)ZEeIAt>Q|!|W8Tf|qyk*f)YV=CxrD^8)d@B22K$Z3@{beJ0S!cxksE7k)Mv9( z@@uBZnH+YjrnK|gj&BB?)BCm4c*9;Yv1snE1;Ln4*!A;d32XQ_YCG=L5gtP`#KJZx z3$)>pPKON8xaP6GY@Pr9`k0C{aso#y3q!8BfmaDqmFjVcknmbR5-TTvfBirE79{?l)@E#8Jyen!l^pX~0mcd!+^{F$Pwwhu~uq?uSuTH}U zVxJ43F}lRhu5jptqk>hI+7PJt4TB_SgHt*6Rf4Kx*x?gTMHC3c4TaTOs+09jK z)!Fv*SbU1HPI25Gm%Tw$+Y4L{-Wr>APfI{8V)seqf#mze+PjAZ<1%UNd52hsOJmBTy_m0SR}?Lb0z(yr5~w>m8TSD`Hc5ln8VIof=ya_nz6f{36|B zctW1bPwspfywylmA1AU4TSqt7{?U<@4wcqs6qSrTdUV(ZuYYxRM;KW3lRRE#28S*2 zyho$E{;Y0|XvpKQmYM8~QCq1Z^X$lw2^;T(oj?xXI6^qVoomM$1a4eI+tgX4GC!$tDVi^8>Q3yE}Nb$efP;SX?S!nh} zorJrXG|%`%eGK?6c^>v@A5@E465>Usa}f)rfvjA01H=!gL{Anvhz)*oHzI_1LNyYA z1l71`$h!N^Vj0^$Xz|f5Meyj(_z(BhWf#}EdT-#U!WXAz60b@NO`0*iFDFGVCwbYd zqF{lHu*eNh4KHQnlRj>1m@ATY%y)=BXMxZ2PuQU1A$DfSn#oU(1y}@CxF1s?l9Lm5 z_4X0dOdphBXkLAsELS%{g{}T%KDsNP@kDKQ`y`0_w+R;9+&nTVsA&rN6XChd3zT(8 z!0)QPAWojXj=cuP;Ty35D`rU3^D)LvR_8;do5mC1IFfqdH((FT$J3lJRl5OB;23iP z3FqdfzvpG^b~@cXUD=L!o|yBTlJa<)Jhi^^3_I%pr_+O-1wcg{_>@-k^#dC7p^Cu+ z4K++NAzYJ@x?REk{_l#$I$kr@F$UX5i?lLDOK{7Yu~VgKJ^fVYy< z)#U9r()hV+^5kUP@K(M3#Y%j9eC93d024umJ?3jkE8y_fB&Sc)^UyEAc@DEN7CNC- zc(T_Rpjg5qm^fOvOS1&O>gu;CNKn=5|v?kmQX)!Q!lNq8Q|jXmK3rmh({@>GWTG;YXjS8SA=QL_;&Y=e?&en?_$6h&kg1 z2Or88F@0|zH?f*1H#N-FnYnC%nGVO5{)~hu?HV;>T{gy85dXFV_v1jms+{^yd*5CB zdH;%u+9C-FytTDo)K@QI&#QTTJiN4j+KVHqE%`4aXH3N~Apil~8wNi|2-f~OaR z$dt~Ql=FoxZ4bwvPY(H+N2)cptqPJq=vqDmk3~f^#APNrfK>dkm;MXnM~|Kz+X#MF z`|;TUuW2zlJUo3SosjeWF&E1sSE)~ROIiu(b$B*#GL4hQCo5wSouLm$2lsmc!ign@ zMV4gDJ95;1O(kmP!_Tv9Y3AsQh~9D}>Ay({cY0s^X8br>P?Oic90ykwTL>d>_!u!) z8LBRfh>tK<>#Y4-<(QqdnYQ@x?@@I% z-0m3K46XSrqn*ijm@| zZ`DxwtXcVx5|$>X>Jzqb&{+T}kD}9;d}LHFoo*(yD%LtOZ0|fj-MNLF4&;=3+_?PY zOUYR5R~}=`R>OO9uC#*Ju$|5w8U5obumS{K!XoY3i|u+(S<+?` ztMwi=x_e(yLq5-PqZdKGcuvjKi?WcyF?FQm)G(8t*Xm3zV>Y9ILl6FNz*3Z0TjO>z z5;x3`!pD=|@AZ+;!=Lp3udPLZw}TpXQxHWGaLt%3u5D?)256E5tA zTpDj-nT^tUlY2-mn`J{?ty#y^Bz+-EHPn~Sz#dsl%$B@yQSqywvm&+o3)iDw#~56$ zY|#r1910fWo>6j7zKi#@2uS2|M@B&2TzSwlc)`~&2r4ChM4N@9ELxi9b~^(ZRrt!> zqB<@cz66`WwZYJ+tud?DMrg2KYLLxGy4Lp~W+V7FCOX;DG&_@R6vsf2Y-C7VsUTio z-n)8lvck_GdErY>AQIHN2{AYrhPNb?bf*_2bgn-cn}q2hN@%%y>3f0?50@=_qizBy zxn0OFqKdqG&q7rr6wQbdR|a z7l{SG0_JT;7QfeRfk*Y|PscqvK#~V+h!$Jo(@@<%2V&E|D%3QoX6fzrQa1mc z{`E629|l~z|NB-NU0$K-PkYdG{9F#ju;uNEvZPcH_9&OVCp+9F-nY3$^J277cb{Mn z!IwCrgu#zRG@B^7xs~L;2bT*7G^uc%s;b^x&Qsk22UC@9fAyCuqhus9ea2JaRl@^} zJ5yLgK1!tTd(aP`Hn>=FX-#k2ce{SX9!0*|LD;?a<-p0%oWhtAc$Gp%;JZOq?!F6P zu=z7W9J8n~I^kuY#Jg_|#9gdf-J$#ILu>Lg#h7cbD(c9($jM>6E_2^?LSq3Sll4~W z{3{&0-Hic1B5%p+VlDm+W7*K_WWE-cPyr!pF}Vb08NT1FRnpokw zyp0CO*q7F@ZZ1hWb7ZcR(F^#~YCX&XgZzkhizq+ji17P7^<@8Oyr$8igPCMP{Q31Y?70+~OjdMD2L{Sp6|7 zDx_&JV(7Y5(hnMCO)F?`Fw1xJ`olZ0^Y#z1UdIV7zbp)AU!UtWqV5-XmaMf16lKq; z?YNJ23Y_MzTPUr}_x+u9Qmc2n0Q8Ow|9GB_9UXV)F)c~fzYnB|x(UT;O zxnxUV&Cs)cj#!|Ult`Vk!aUQ9*|~XQ$$<@KSEV1z%07qK2xn}qmu1$9!^8#xdtT<; zw7zsqB+ir<=Tg}5^~I4(7fv-Qi>A<_8AQ!$3iO)(-BNpD`6pbJsoED#H>)dUYqLL1 zD52bgJ6k&M=~6%dUs&z)TEIpJ$K!2KiD>#Bp%9eRlL5gxO(oyhy(_6!`16>R4yUGb ze$g|q^OoC>N{a9;(Cd`IIvQo$IygE{kmY9>#0WhifxE+3Qy@Cm&r_itRfQGcCQMI;kEI))^q+h|U{u_LI$&&HsoLIQx3W ztq{CtR-MW|7iw+f=i^~-dRR`WCdu!lG3Qeqy?m7D%}k-Vz&y?APktabk|0Xm^7msMoQNJ zX&5lRL+|^3fByLWUch7Lv2$MMy3Uo)bDhKa*!fSueMNZ%dBCMh0Kg^U58!+P;0L&N zl{F?ap`chy2gy`40fu&C7k)09P(O23#h)bcO8Fc{6~H$m6w3 z7p(sGT)KSa>b2`PZW4P9?gK7gzI5p-k@W4mH?I)~0*Jk2SFe#X@m;5Qq5kg1W2cXi z5BOhdXr-18-eeYd?;L|@=>J8@!YU-A>Eik+3Km^9OGPdC#^iI_fSez)aa-2ZKfS5h z?1JWDPMp5&WT9)W2)dw z4dKD((Tb>FfMY~%9|Z^tP(6JOei zIcPYhzF^`^Z&1PMeG93<8F;8T;GW!`Xy(Gn+tUyP^nxc>?-bj6k?v}9XTaekwrfC? zaq*f=9z)2AOFm}v$1$}jfjEQi;=mS47S*i&c7ym!5y@Z^y3a2<_~w@jTn#bUCiyHSIrSrZxM6g zJBTNW$vhy95B?k_xx?^h;LOTBP`xZxI%E&6ZN2}=?TeC-Fkz^^AfmLX{}FWM2B=;J zD?KTQ)@HnD69-R%q~AxR#^W#bFP;NF;bP7KUy1UdL*3}#BCh$6 z^x4^$=)#8^{JokkXP!_B!aQ?oK=y)}+V_bo3o5^5Y$~uK)qorOv%v16l4rsB4rkRD zL$$-p@%bxn)xOt|EExS6>%79-cuZ>sbtDq$6D8{~Ra_rk?>tI5q$w*Wbl~YuQMXD6 z@>u8vlS+S-3cgTkf?GZ77&B#j$nN3tsoF`T7#BFNK5&UBG5;OmPQq*^zT_P6T$s9j z0(kNTzSfh}tV~9#at=6y5!laKj$WU|?16akSN@xu-{|rfl-U-&N#l?&1}7_G%dzJD z&Gh215RngNIB~WL#`crnv$YW|>fXPmr}luCba=)gagoTz=R7nPEE8|6cEET+I2^u) zG5H@y$W)m~1Wi8my3$&Q;x`B|^>5Ur5?{Fsk3egaUpKTrNTUBSB&(WceF!VH z1J&jjyhfCoiw$PFaruMxO)6+Yn{d5w{H?$U((`#cJu_Wh!HX<_}L&xG{O0msY zslt>@JhG%(c!pu*g-GWBO#(Y`92_J#c(bT|Zsxi0z4jWe3#)JTRXd>mr`?0nx9BEw zQ>&UE+cKK0FBnVJNyF2jcAzEo|42rGk-g@|KlWmwMiaFD5t3=M#lCNeXdvK+HIZ#_(*6NTI{RkC zP!lfZt0sKIy!ns6@f}NyNk7IFx8T9~VwlGq%rMsia3L_Ck!E%!+~`5>Nqxi5bk6~k)$VWKt%|`q4;da7L{zyJ zQJ(6rE7r2WJp{Zgj)liGJ-w*S?2FF<%d0*qE@GsTyv~jLN3?G8eBsnr(S`^?U!K8j zR*omdA%r{3jHOGr$=5w}900#k84PAvI`waPv8!I=eA| zsPM8x-Yhtnitt_BF5$E1rhQKBG|Kc`ce8;Ustd`JdTd=%v5t6St37Y7P z`&fXK#1~V1jq1RM0@#PeERKUaUKieG2q!RR;t|sOKL3$&7mH8Ux!bIhs61i-f%<}* zTU(#{Dy=w2{PD?)jG#NScjcY;Z;z8ISY!F}vy(? z9bkqo2jBj%pr@Q|r1OJX`D~GbS0X~t-uJy$ykv|)bnUl`}IyL|1pSPze zwv0p>|IW{MkGQV(8VT0#{T>SH_aW;AvY%X8FoIpc0h9DUS^CecCalS zbrEYF9XZ9rV3~vnSlz!_81d>@^dg3M{Z8IJ{`|Vge68N$Gu=2XMp>7cwe|EFCfsia zrzaFaq<1djDlsCa2XWsG^HA7^9|yUC`so^Xocf7r_24&x2q6^Wi39&c+`PbfTLUHZ zlBTH-8Ri_2A0BZUfRMfj__no)d(Z_*BG(H07P_s$h}PPfp%_ErFeS_=h(Ju~7hy~e z$SzJ4!|%0OyeEBxe71BB;9ui2el-sr?)fK7`sh(6tGfS*#jv%W;pX7+c37-9Iv+@R zPu7Wo=p{OYf6|Nv9{t;0FYuPwiH)hGUX*GJ7M+{-G$2hhkQmSY_%b-3q4xjCocncw znd6pMDPbN9JOgWSH+nor;q}hG`!B}T{BV%&Rf|Ib#R{1JCa||3- zf1wKKg(`xLi4p%F{MJ(>>ntyBK}-g;G^s1$s>W&;(C&AVBhEJQU)s{{r%LyfSLK_I zQprp-I{;dBA+Vs@l;Lo#rhcEhCTHM(ES7!P?=%@l2b?sDA?kmY7;V}0lQLaY>$nE< zDve5$aY1UbLo}(|a_s^^h(V`_`3Oh6Q2yuKJm|6)eh&u|mjXS*&VLF`H*YD|T%O9h#t3 zEazy&Y@m`>R9>U?`qQT08)b@7!6RpA2=@Uo-!7A_7{_i^?KzmNekU-bgVGa6)2ejZ zMijtNq%p$D`AVrN_KURA3bGUgf3F$Q)!`K!yur8rTKs{*kw)7maAM$80dms}m_SG~ zT{rsWCClSD$?!%fe?k(O2yzOAZMPmAJZ_GM8tZhrx;jH&0IHr1o za!=%&C)b!{4Wk*P!X37TNnb#x*VRy%p-;aMT_F$hjn~SO9_TKa5qx#Hwv2VHaDD_eA&f4gc3BMw0ts3sJ`%2Wth;TY)Ktej*_-JUl!~ zt^Ur5MB<*4%UA*v#FYkoa(iTtHl6Pr&>*bj(`jK!X8BhJ;15 zC6{}7Om<9G77Ff{fx;B4>MiLX?@Fd9A~1uGR2Gp5IiYV#!o9SRuGrq{m3=MnSq3?F z9C`?WA_7)`U?~=I3nykS&bp**!s8TND*n2Xh1EGAF#F_*@26>b%*Sgw$Q1(HMbFj4 zYmCiQCykZayGv{lw$u(B&#nf) z82JDoD@@8h2Y3*thK@6qqM&megbv2@YoXVlge$+IXuR@HX9j3hh$!nYqzy5`oLzZm ztf$1St|zeZdD?~^9d|RVFgGK(hfdq8%TtEF)VDOM_^PILeESF+NRTfm<$6qe_4U?3 zY&eGM2O^RZcB?DjEPx*q>c{_TNoef(l2BJKm&$E~$J@4dcQOP%bc>pz3Q`Ilaa~b* z;=qGDZLyP!>}++ki2i`#3pakMz!iueC|HumQG9-5Ey!$@iQLmjp|~6(N^jgc&KK&~ zgI3F`miGC!AM6-`La2|^h(7<`y^&kS#M&A3nLU<0ci7NulRw@{QT;IXR#_=;b8%+G znnmKFaV$?`SmUNA87sVK?E{=g%-7+cF+ za*?9#T$%@tI?UAMEVt?Mw&jX)!X1S^7|4DIi?YfwT0#0K(RB!^(FJYR z{BWiD5ht%I!n{7}RiJ`DA(A{DkeZ>9cnB#40Mez&m@w4mxVIIt(hwjBX z;$oHbQsDwgUY$LtjgeUiC^cOc!bzyqk7~)@4=bYy#F89R`2I}OOE9F$8#o#0mZ+L&Fcc9_}y*wOz}Koejnz6 zGt#3asby|@yYEkjd)u1&bjKlIVi!Eim!-SR?WJauWZtAQUPtrJS$#2HCH1@y`MmjF zv2wEKiZV9(>5aV1$u>8QP2a{ma^Dx#q@fC_WK3^r;>?pIYU1*OO=le14Ku#3S?$q^ zDN2pNHaJ%Wd#i?v9x5>8XIb%eg2dJBy&eeR#R<;?-=(9>yI+!wqp5y;3nB{;x7=HN>f zrH;6*l{}gAaxaO9G3%@*?8mcD%@p3${8LXGw?#MoR)sWU;x~+OW*;iaOWtamdhp_lVOzkeGjS$j1qhn~1UsS-P z-d=?3_T!APBCII>#z&SxjwnZ@+$o+DDhAmJc z^+C|P$0aN6wx&kSHHIPO0>ZK2oPNV!CKV!VwlD4<#gDKsmkjZO-kQPGRVtzk4ZO+s zkT1UsPlg7zFZ4hyT{}UK++3^I3JE|pYM|}-RK)QE_T2IDaDxP?;*}{cu&k)}lAU}W z3SQf9+LK_A26IPRa+#&%qe%cie0cKCn42cW51O2@x z;dzf5<%cQdx!lP@-&a4$h?3YW&f{=02FW2nOyq3E3MNOu(WX^ibtJse^B0Ii-KQ6M zs@Sno%pWFTRbX~VBj68HpADza49*MnSyNhNg^9h{I|cfJKk=)c)@G;|TYwT1;9VhF z!;}~niYUWzIWM6;LnJU^+2kCsx5w*<=8sG4e1SiB)z*V zKNxGtf^9Vv+h>s^)+H*A*s=b4Ka&|(7z9hQ(5)~k2>_{3Zu4M^N)P6TbdsXHCroH* zYh4P4d!P_yNG@*^;?cvgI04brAaY@$(!wy?^peEe*p$kH78*tN+#!{hRovUl9NrJ* zc!Spxa?I!@>)}?FLuU-^t zuV14Eyc&|?V<|!m(|CMk`GN|GUhNdLQsEK)nr~L3F}TuwTM%O+A>~rG0*8fV7p^U8 z-K~?Dp;w6tWkRJS)leN~90|4KN#1#ikKy&?J6vC{KaQF~XqH!oioUnYm!F3yNAaSjOPI38iBJ>gEM{fmLymDgm$5EY?v7js+_X5-Qu&tZYbOorXu~Ik-XQ$ z7@2A9+OJVxEhj~#6IY!#EUJ**x$-kOirgF9;5yS09%5lV9gY_gDAh5l8Ga&Sk4+k0 zR**O@E{W@qV-IQbCA zgW{msmlRjeYzw<_=b$%PJgP(1xnvpdFaU9PPngna#55K9>*l+43iL204zykQ;%ngU zat>H6hYsfxcH>O5rQV0p7{l_0WPG%$K_VUdl8T+TcjK1GcLtH?fT{h9VLPIpX4rGU zCLV1DKK!;QSG=#+7x7}Gn84w4Pt}FC)-!mg?VrKLgx!J_3q_9c2R(QuGbjHfP3dPKq_3{yg_&jGc=s$aBq(9*!bJiITWInziZ8XRv3q4!&Q zA%0JyvV-t(XK)Rj4?bJq-ziUp{;rsp2fPR_LoD?oF(tN-|w+Vk> zh%4i@WqcxLq@7hLWVFSf<3B@C`O)X1yxS;4tyoPvAU z<>^6DU)TeqoOt^Oqg*WMVM}RGj*G&fPL_AF=3}gO3xj#oK37uX&0ZgOk@m651X;~y9GJDsShZAQ$^0) zp#vvPAZ!#63c-g-jL&P+tlX1E`m?j}i&{oD?l~+Y2TN4A6gp&reSrGaUSbbN5x_YO#V9b{v#nPo-LJ=2kV7wwS;`u^X@Z)3LKNtLq%#Hu9T( z>#A$)SfxBqs+fIT-cXZ|P=|UCKRj-ol8NSNZIUY@ELSc*OwxVyHZDd*KP|I1{gDNk z!xxsifam=+jgE6lcN*+m^4bhXSZcBt1YB)`*sfZlrPv_M2WC2j+&nXQ0tOTM1$1Q>QO(`xxVpCY1rDN{+sA;i`0J-$(*nQ z9W;^}%33emH!!rS%#A9Sd&bj_jX}-aQSn}u%dc^+9!uq-W8&bP4Lh#NIy6b9?PU~A zqkK2th4InWdS*C+W&e@_V~x1fwe#xO6Klu5Y2?6IM|rao87f_T|la^zQW@KyA{ZhT#uFlOM(M~QjH{&>;q7SfV%CwTY92T8p)!U z**o}xyApoA8ok{kwdu$|=E(VETVlZ2_(0Q85H;y8*->>U?WX!#}}RQ$y`P2(Mh($DFxV&F7r*4VZ~^aFuWc%FFbk&lvV|v`;Z4m3svLP9yuROi2%V<{X8Ob7ylM_|Qi0ZVPWnJZ}vBrq#@!>TqEVLJC zAj9J|L-;C1gHrWRT?L6LPv+UAWnDcqGyHXO^0i`n6!|s4wg^pKo0MBL+E%lp*qk|B zqRE4q20!g*?`tS*fCDOqbQw{^Y@_Wdm07sGh>%1`-B;H$OG=V~bspxYglq~5p_1Cq zb{E9SiWqJ=@d*i6D^yNkCu{tt-uDle`z&z)sq}VUiZe=7G!^(PyzPA^&gfzt%uodX zP`?8Aq__%fhUbc_OSn;NvFNXhcf?WhZ=-CGW`>VX!)})!@DAhT^4$GS2xj;@ewh5o ziZHW~?%*UoUwJ};{tW+4MEyf(hjLA605PKfAx z;Zv&^tGu{|_ggr!9W)|qkVLIBI&=lrO-Y>tz87jLF+ z;Q^(T9VZ|IElS1pjP#q_6~~ohQ5$yAe%b8dN_KKd?*0C+-Hk*V$(A`Bjf)O{n(o=W zELZJz&!g=}^p2M#JJF;sZHXLWw&w!fg*z*COx@yF><1adj99AWoY(EzL?z7Fr`?6x zkfn}FQJV|yIjIdUlZM|Gwj1thkjXlKL{N5RUtxPwN}Z^9(CnNG_Y20{X?XYe8F@$Q zn(V8mufEn~*78pTIx+`|6=>-tLp=VPe*XO~Yq{>|C8`yMo7=Ys0)wb*3(RLbkjir> zRGL&V&FF{G-$N)dNtOHlcV zReULWGea&?lgXeV-^xWzKt7JBPEvn
xf>bz^wT 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 { @@ -44,7 +34,7 @@ export class ControlsExamplePlugin title: 'Controls examples', navLinkStatus: AppNavLinkStatus.hidden, async mount(params: AppMountParameters) { - const [coreStart, depsStart] = await core.getStartServices(); + const [, depsStart] = await core.getStartServices(); const { renderApp } = await import('./app'); return renderApp(depsStart, params); }, @@ -52,8 +42,8 @@ export class ControlsExamplePlugin developerExamples.register({ appId: 'controlsExamples', - title: 'Controls Building Block', - description: `Showcase different ways how to embed dashboard container into your app`, + title: 'Controls as a Building Block', + description: `Showcases different ways to embed a control group into your app`, image: img, }); } diff --git a/examples/controls_example/tsconfig.json b/examples/controls_example/tsconfig.json index 01ff21ca80cf5..1e8a32f62734e 100644 --- a/examples/controls_example/tsconfig.json +++ b/examples/controls_example/tsconfig.json @@ -13,12 +13,10 @@ ], "exclude": [], "kbn_references": [ - { "path": "../../src/plugins/data_views/tsconfig.json" }, - { "path": "../../src/plugins/embeddable/tsconfig.json" }, - { "path": "../../src/plugins/data/tsconfig.json" }, - { "path": "../developer_examples/tsconfig.json" }, - { "path": "../presentation_util/tsconfig.json" }, { "path": "../../src/core/tsconfig.json" }, - { "path": "../controls/tsconfig.json" } + { "path": "../developer_examples/tsconfig.json" }, + { "path": "../../src/plugins/data/tsconfig.json" }, + { "path": "../../src/plugins/controls/tsconfig.json" }, + { "path": "../../src/plugins/presentation_util/tsconfig.json" } ] } diff --git a/examples/developer_examples/public/plugin.ts b/examples/developer_examples/public/plugin.ts index ef0fc028cc814..c87bd2f5cc890 100644 --- a/examples/developer_examples/public/plugin.ts +++ b/examples/developer_examples/public/plugin.ts @@ -41,9 +41,6 @@ export class DeveloperExamplesPlugin implements Plugin { this.examplesRegistry.push(def); - this.examplesRegistry.sort(({ title: titleA }, { title: titleB }) => - titleA > titleB ? 1 : -1 - ); }, }; return api; diff --git a/src/plugins/embeddable/public/lib/containers/container.ts b/src/plugins/embeddable/public/lib/containers/container.ts index 8de00b6e63325..843d3a7cd5c99 100644 --- a/src/plugins/embeddable/public/lib/containers/container.ts +++ b/src/plugins/embeddable/public/lib/containers/container.ts @@ -408,7 +408,7 @@ export abstract class Container< [panelState.explicitInput.id]: panelState, }, } as Partial); - console.log('after', this.input); + return await this.untilEmbeddableLoaded(panelState.explicitInput.id); } From bf5bfe4bd91a82fd0220de3bc86eeee2ee7d686f Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Wed, 23 Nov 2022 10:56:11 -0700 Subject: [PATCH 7/8] Rename component --- examples/controls_example/public/app.tsx | 4 ++-- .../{control_group_example.tsx => basic_redux_example.tsx} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename examples/controls_example/public/{control_group_example.tsx => basic_redux_example.tsx} (97%) diff --git a/examples/controls_example/public/app.tsx b/examples/controls_example/public/app.tsx index 1000fbd9bea81..831635b8af4da 100644 --- a/examples/controls_example/public/app.tsx +++ b/examples/controls_example/public/app.tsx @@ -13,7 +13,7 @@ import type { DataView } from '@kbn/data-views-plugin/public'; import { AppMountParameters } from '@kbn/core/public'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import { ControlsExampleStartDeps } from './plugin'; -import { ControlGroupExample } from './control_group_example'; +import { BasicReduxExample } from './basic_redux_example'; interface Props { dataView: DataView; @@ -24,7 +24,7 @@ const ControlsExamples = ({ dataView }: Props) => { - + ); diff --git a/examples/controls_example/public/control_group_example.tsx b/examples/controls_example/public/basic_redux_example.tsx similarity index 97% rename from examples/controls_example/public/control_group_example.tsx rename to examples/controls_example/public/basic_redux_example.tsx index bc95d1723712f..bca34e61042f6 100644 --- a/examples/controls_example/public/control_group_example.tsx +++ b/examples/controls_example/public/basic_redux_example.tsx @@ -33,7 +33,7 @@ interface Props { } const ControlGroupRenderer = withSuspense(LazyControlGroupRenderer); -export const ControlGroupExample = ({ dataView }: Props) => { +export const BasicReduxExample = ({ dataView }: Props) => { const [myControlGroup, setControlGroup] = useState(); const [currentControlStyle, setCurrentControlStyle] = useState('oneLine'); @@ -67,7 +67,7 @@ export const ControlGroupExample = ({ dataView }: Props) => { }, { id: `twoLine`, - label: 'Two Lines', + label: 'Two lines', value: 'twoLine' as ControlStyle, }, ]} From 88d02ac8b51c7deffde19a88a643c90060956ffd Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Thu, 24 Nov 2022 08:45:09 -0700 Subject: [PATCH 8/8] Clean up commented out line --- .../controls/public/control_group/control_group_renderer.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/controls/public/control_group/control_group_renderer.tsx b/src/plugins/controls/public/control_group/control_group_renderer.tsx index b0a5b17bfcf7d..57245e23b2a1a 100644 --- a/src/plugins/controls/public/control_group/control_group_renderer.tsx +++ b/src/plugins/controls/public/control_group/control_group_renderer.tsx @@ -59,7 +59,6 @@ const ControlGroupInputBuilder = { }; export interface ControlGroupRendererProps { - // input?: Partial>; onEmbeddableLoad: (controlGroupContainer: ControlGroupContainer) => void; getCreationOptions: ( builder: typeof ControlGroupInputBuilder

^T9ckh{*%0WVtEm-9kjgt*LZzQNcMiL4=^QXXm_F2U_?_GETsgzuDZ?Kq9Rd!>@M zBsMqC(qDR*)=WC2TGDfy&x!90@ue{pD=m1|sT1g&%KkCdeNorX+f<jw3X$GFr`U5SICbc{uHOo6$q4yQ(u`qN;__3>U}G`{`4l}QYKjV4~r!SaL;nCjd;#&&oyE107{3N9O0;J=$iMaZ?S8w z8I6AkoQvwsm>6w?gFH$ndj@^6pKiF0NOk~YM=2~}*f!GCZ4uuz&nQyG87*B0E@;%KR> zR6k}0wJU)I%tRQzgO32t4@P^<3@0XfdHoId!*-a*sD5Zsa^CTVI76Ut}&=9*&jsVMG^nR8tME#SrePYdGV(s-XLfW$1{eBp!Xq`f` zP9jrQBAp{@mLo*k%nl3>M3C%I7q0|$VJdCu-3fi^XzzY=CWD2QSAP6tz0}B}OFg9~ zZ_aIxyi&<_RtB>rw-+>ZSX}z3Fi&g3TxCrfV68u6VzpqS`iL*;ivH%&DpC zxfYyZP{F73=eYGJ^P6$e`n)Ml);6G$!qfD8J$N|KYx_1o-GjW={ZBW83v7hN)-=O#2<$ zh|EMQgL@8Xyqk&gvN8;SjlGW7 zNjH5!jzf?oVkO5bjO?XNk2HZKLjsv~wN1Dtt|tDJGX*-IDLiQxo^zxZWT~ZFoPk-E zpeXQ(S0Rn(HnrJrk(7V14jU|TZ?6#TlHn$NXua>@WNITM@kgJZjCCk%+JHioeo|wd zA5udi7Z(-|L9d(^J&?`$K~_=W5Nge+RR%1 zmYICk#Jkc=5=4ikonY@Q3wOyxmAmG(5Uo1sL^uUL0zxG*8Ax8t#;Vg0gM#TbPNhJ_ zQQ@>OJRJiggh2`iQVJBav`T%nC>ez+r}cnvy%L<8)oR99%#91hC^!{HU@seV+3^5J z7z8p+N%4DL!^>hn?hGowEhyL!mc^gL#4<%7pz%%!LXjB0QXjd(L0{r@+f^Ntyv!#AFPP(Pc2R zhQ809_gnsa62KhIxPIaFAliT`g^f(9xW3knCR{UB+A4aFzCZ#AsZtVp9viz(thu|!z1CbAMt;1Z{I(b+oje~ zhz!@?yQW3)dWYMp+i+Vq%C4EO!6Y>2)&9n*cnkYf_Z-Bj{8&2lJQVF9opJ*Hm$QPTd#lz-Ha* zusito6)u!C<-kzB>Z%!ZCoV0#cC-7yPlI_0h90B?GAZ@q{D#CTv);`4z1$=6J|gny zF279RjP6cdJMK}X>DKCT=VI23sdL5`Y3>$N`N^^xI`&xUP z)l@pqgjG28m78o5o#PxzCM|>e)h^(Be?iYmZo^AiSZ8j^Zubdk(Ssu|j;Po;!IKA8 z`8_xxDDUtX@=*RG7WltW>A$N_|9N_a?EPVb)>KUkeSf`Hf zQw&z6m!$RD@oskzEqim&=-l{@Is3oj)$nRrwl&eA4q^5ox8r;^E#_1DpL z4E9-{L-jFIiD&{|JpSFEzeKFpnMcDVn?7Wr`PCT8q}XKdhtENjZs;Rj){;9(E+1&D z_YIHqglBNbGLAHf7Uz?R-JWR9J)qp;_U(Ide>J6r)Y^o+V#F0$3@?lT#x0s83-Kwl zqP*&5KFw}T%4(T8U_67yAWy_;@2jb6>fuTy5OcBkEGNfBLfT;7li8&vsk9^>Bti{> z)GdIU=ytbk+|C;U{|Hy>XX-pg;$rb6eMFi7pnOAl`U!Mo}e&6EWBc6}KpS0d?v1H9{Z3CsY<-0Yy zFR;|@NBKAt{odn@{~*wTqcnN>z;x3nj`LKP|D&rS%9oc5AtNxhcRXC;Kry4we6e3# zt#h59X-Rk}WzbQ9?RHr*vpgVx1bg>RWl%k`DkM0LGqc@ypZZUW=f!d66)X3^gF4$n~`{mTL32*vBT ze{XBbghD30+v!I0E!%`Sc=;M88ktgAa6eV6OJVDqPx5#4AuDgwD6hJ*wSyo{Wa~{R zJ8>sE880DHVe@^|SG9V(Cwrh_)ByLr>T89~_z%{9hgI4Ln{&Yi%qKm<7Y$JOLQ6W+ z5uIDc5eLPul<|TQ*J5%6k=fa|D*~JB2zRUs;7^bpy-pa%YRV2B95gCrif`4`TpW_% z&kl%l^F`(ld&J|B#&hHrtPqf zE9d@#L5z(mM$Y|Bk1*4XXpeFtUk4p5Roayiqd`U}1HIRuFeH^6p-0-U5@5jdo~D_i zz+{e;fmqI3c`MKq#wjBl?68>!#f4H*)`i&=0><+KpA zl5+qvMKu-n6iysEE#Z&wDgWi;fY4;&inTR1DgUM5E39f^dF+4{FMfiJu1Jud6BkCUnhxLY-%ZAW z`cNc@I(flZXu>!3FU)^XJBooGQzwJ6KAFQ(6GO&%(qVaF_$e*)M7Bw2b*u!gP|+)J zX;X#vhJyZGx^L-}{=9bcR#B?ThzC>1z+3K8pQyF2xonsxINVcql3KlX$pSIm%|1{X zQ4`TB*(d*q$Rw-c6Rs1e30QvTGj^4>x8^Qp~7URt+hmbbYuFkrt`e_Q_u^Zptu+E6R#X+!=G zN)FdW=38tn71;T^hb7yS$pNH`#kN?Mk+tg3yygkDKeK=4>%DI%|CZU2$IEZu{&W4$ z>A!B@qo81Y(xC;Se<~W+lpxl|sB91WDlhs{BlYMv*@21G-9u8u%@u@WOxkG;9qA&+ z0swypivk|1et+Y9g^EG&G6)6zUmPA557tK@N_<=xEFL0n-p~nLpVPNK*q@jZJxL98 z(zSnh-?DHln|!ncFPiD7x5%LO9TL-5tFsKKNRA>{64-NvwIC;B)D_D;L&q<}^A_$Z zmBcg`Om;qW`o(U;>W3_S)?jK!e|LH(r4!=9=ztZ04yN@a{0MXv;>o+B|P#Oh~ zdL3CRI}fhSUXW+77k_ z*2IVQMFr<;_6MaaNceV zM-CRU8Fnj88Tg%5$`r55(_{e)o%wT69IZ^?$G>P`;5S@fZ8Z8&fN5t+`gwmnH~tL0 z*h|xrn%5HGt9@TkW?p_PtHoAvybjT7#pc7Dd6CU~%dU9OR(5B4%>rmrUb(QD4P_3G zn#-}~Cy>J%0K4jDSP8<;&k?n-c&)D}X2Zb6`H&T&(kN$2JvuGOUQOC1RmIA>wXe@m zQV2Lv6jcH)>n4V{+6G}wRO@nAmgkf$V=I}(#ulgaPmcWc<#ogEvpb~A2+*3>PAsHe zvNg2W)lgxR5yh;oQo49u7ZeC_*6Z!LR@K5RP~^Xe{_L8{c_y;0rcTw4WSHW{A9vr% zm8>%E9QaSKx>-7?Fae1KWtrofyR1g&LQJHBnLnWJnKoCpN7oK9>e7{biro)B%RTyZ z{Iw&v7WA{5ke~bSbdV7>%`_m&--w)M8V@kw)1F6P06xa>wepcI&wQ|?agc7T_K=+{ zZ3WD^T#G&fKuLp0KVCew3LW-B8g=18LL`FfAC&G84rH$`BKqKfWOZcJroKb1%uIiD z1b^fQAP9kM#Qe-G&rJS9MsAj=pgha(-)c0j7u`lhg?~H8bR(EH=*kikx`5wI9ZDp@ z(44=ltJN=@gUht9>L!Zekq2$wKZzB;*<(rG52O4u23yjd47~4If+7m$5 z9OBpbTH8*|q5N%Qpq=?m4jw>ds$$K%ZjqV-drON)x>xTQr$D^hfIZPT#e_DMf2-g- zWo;tTa&}cjFqhaWuxl|XsNx@#blXw&vvycTitif^#V?F}K5_;215&a*y_Z1`(Mm|! z-ahkQ^6%=&-mxbv;g6BOciRw!w<|&jYu6RB2e}8{FILr4m9m%b@c{u!y4IJa>01}U z>iM_l*E}7TwnN0;fxFLvNjk4*EUbd6Y^zJYT0Pd_Z*g^r(?S!{E=YGqHrOf zHk=Jahm5f_cf0e0Tez3srV*FE4lmMuT0FUNJtMvuv-PZp8d*Oq@g~&5+kDo(j^Jn} zWcoQqyxqumn8|$r-jn!I>@>c2`wvQw3*Ww8_{_7D??JsggX59zsggijA$P3+aW$s8 zoA}gFA@y6N(VEdryZG{ts6G9L(kUlD?It}X_o0!nUVres6T@WLu+XClgfme+%4_8J zMQ>hHSz}QznFEqf=2cu%dm042Fq=L}>y~B_V{932a5yZQD@=&%nvy@gMOL%F2+0ul zP85_75QN9*LWPw$j+k53%9`+r2qPm$dqNwKQP~t?0$*_7k&ix+m zIsL!6*MByq|L;lh8!el?lAoS;q2IY`MO}*Ep}c8&+G?!%?Ww$Z`(|Uk7nj2I-+7Wc z;^|-|!KuodaFRE|e*4y|3%TPh`KMG$YSsD>>bZIMgQLhB>6yav9i_q%oGtU8J4_K9 zRY3!<>&?CTuJ|=_s#>Tk!TFKSe~1xy0{EtQ*$m!Ms3>?zoap3eWXPrU;iJ6xMyt{L z2kOM_zbysgGbk}j6L88k%9-qa51W)}NsU)fO@R7t4Wvmc%!yVIL>-P>Ke5$$eE5_) zYr)~2eq@f>$G`0(@q*F=Bw|E1OwOSQG|UxE7{H!!RqOY;{gX+;=$_WJHRMjMd?Z$y zrg$zO{YS?XPaK-ROD|Vb00r){L4^sJI`t$$zUz2VepF>Yd*kMWk25Rh>qc(dv@*Sp zFHWE1i&EcvI~KTG@#Fd<3qrY39F596Yx{~#Ro8WTVa6ic`62lxTSDM?wea=E&1))R zqpj64Bj9vncr%vkdk?1|jAjXD#c=#M28L4xshH0iRWdTGlG3YVp@m!-?*Mv@qBn7$u~{&^a*uZJYGft7d}LoQEh1AJXC6#JPORtOVx}br zz2amhvW}XZM@|~~hE}8~?4|o@6*BJIc4F7CHNC3}k|iFf9*&@Ai%I)S@w)qjtTx_L zr!NA1>076u4km~hW_H40UCiu^MSK*T{>0$%?(?D8oEn6TIoZI>0S=3G?T3Z*ggd;V z#5y-M>Cbav?+2)dgz|zgkE&Lv%;W$8ePe_vOnMJJEv<5lefe~X-o-qF6=(Dwp4F`d zplxldU5)TIk8m1nP&@B+0%54FF+9mFS0OF`EUPZLxZ2=w;Mc@>cGV9HeKqNOi-);v z$}8*J>iS@n*0DA!n)&g|3~`A#HN}m6&IrA`6f)!12gGsVYYvR+Lh3a#M#hH|f-=AL z_q?q+x1Xj5S~cymup+@?7#pbg^m%=rQok~VqG;W>$_S#uM~v-1E5^=cL8wlK0TshN zng|I|;vQiJEr~OY*?R5ypq%sq{UA}Vn~=?iE=jy3cw9VDwJ;oJo)a|e*p^rp ze*#DkVeIAw(aV~i(I*7!^jY+aMSt8B!KY0KP$v#Q;t)oYGo{zzvnm(pu7YEkXI3&W zy;4e$*zzD0Sc(!c08RXjRJXp()7{O?~ccmisT>IA8=XF7ZPtFd&YXvA%Tf4=Gw_$52@l}%>h^Ml?H^)`K)X!8jj0&{4^BX zvh%dGMOIMxgC4XUw*?M$x4KG^{z<3YEjWjaahrop4xL+GB|?{{Jvd&I*<|22us>8B zeQ{pz=NjV~YHzf_6ID+os2Q(lMw!HjL^)7w9ZU>`pOWy^M6vtYY4*Cdkh(RL858>k zyQ+T~nG@aEo}QmzIxV}%WfMM+CX66uYj`ILX|Z-R%CX zfr7>ZLxwNd(}x9;y$wYc=X?Ve78@WD(2zSM?@oRvO^BnqG{KzBG2=$exZew0x6XZ` z)_HK>#_#@V#*V>^MrepJtF|jzO2Fd!rYSe`Xz%zR6m20<5zcHS?yl^SqHybkEUb&D zFjt2qgQ^6!{oRO(jKw7S^9`Iia1HZy^fTHN)Rc&{TZUT)0>O(0R>Cof|vJHw=cIi#2Ej0UP&C4Yjn(zreQRm2WI>8EQr3 z3o<2sz%oR7-M!+o_lB2!sNE07SGR#uj*Vd|aF~&BTPAgUyMyxgy+i2HvrIqq-NgbziL~(>uuG)w;V5VbvC%!TfU)QJ7UwAoSk4Z?kqJgJH zorT5HKY%Sg7ah>@-nE%eFP=IT(He}izv5K#uJLk?EEcyI2SP=fXb!``k%M9e)@mm6 zd7IruPwjE{1!c&*8PH6}9`bQ|NYTqYOl%Hb1a16K7L-NB)|mFBTryCNfc>1`Uib_0 zG-&S}b9`47?3vW$WXZ%}<}X37)6;~}sz-%@5MlDajV}jbPzF2VZSvU5MG*81;jFdRS-Q6LO)dJIw9H`ADWE7-o>~bWHhBzxua8lx zuY*~zUd$4_h=b7+;mB#?g3R_DqtpLEG5jMCt}PpWg{Qz&;$oQzW)1*}XXhQ$b=iiI z?}Pjkd=n6A{baBA`Az}*l6gP-7NWNK6N&7<*Eyu;x*5LItuIw9{j6Cv-dvqu#qdV5 zDWQ-Nw2e6YZfI3M0VSt;t9N`&%+mIB0w){?=4IsP#a0$fw(j6Pmk98AXR-|iUqMFp zBFixmIX_#|mq3uI!?cTNp0}e_j@{eLJJ*^}9=m>>&;vf_1soNQk}%ln4}*aOzaZ%( zPcCB@T_0X^hU7^m%2Vr!nZUldEPwRYYq}C)n%3B^TCZGM9J@;EQ zpT4w)F2Xx(R=Xh$FI>Xzy=E_a^PxnGC}~Z!GwJRCYCBe`p_K#3bhD-#k6TTLy$N5@ zAMq|d?79z3MaY9lETjjM8Jh9+c4M$$!${Ww`Tk>ub~c}k$?H5`H~LS2Yp{aRR+_`N zIM>-kLyc`IsQ5Z=0YMqpr>L4KYdqD?)F;WF@R;}sgl9~65iJ1`+cB7d8AO+bV zqB)S4_C4I=8zAcRkYt-9jIzvkf)$jg^*5-4jQrJCHV(qBGc;C+O=rMMGNPj2&^~S@ zpdd>cW`FkHNxSMbwAp($RPQfuKH2*mBj;Ma{qECc7VBP(AF5kca(sSe^h9B^^~5}I zfotuXvY&tB=WDuVpll?T+PRNngUm-;NJlpHU9K#FRgXwOIFN#g%*H;7TeLB6#wM8S z8K>du5~V<&Gb5VEiwYfvG`eG7~O`H3dx?*qy%+2SSJ*i3JocVVW z^QDcHxxYqmH&!@JtJKc|HdE3j3Px5fcHEfANEihRUcaosLr+nhD4K$qgOo>>k#y+ zX&brLSTWPEL;HyN6yter1TG>1X7QGGfEA(B`vRWA50ex_LwJE4;3C!Ya)NI;04XZC zxvU|Uy7?mg7iDF&aZ<*{pSs@bCYpM@7MVX5R}7^6{e(nqXySWN0oxxYdB81MUL1`l z*H{-mD^-{8n*J!3^Ks{R9p6+7wrm`-$GZ28ZVDIO`uBz`Vw&WUVtv=8FC)XAEKu&^ zRR-p=lip`Yh+;jIih$`7ENyE4#0#o>eYZCk{cN`cQMm76C^RVWk?f9})5WtRCp?Ev z)Yw`MU^@%n7g$@nk@8KCTj(b#uUPDl%LH6mcWt=d&#c;LR<2RzU1SZq9n7qKUNgww zVNA*vBz{z&X3Y1Vz0$R2;CWIudR=8cS$l`j^MF+eXt~ohA+d73tX;McKp!Kor$*Pe zOC80s&~>Zgw?F^Qg+#d5^-Gl<3Kh3GwU`s2GQ5&U5|~T z3YHSS! zhvWmqM6H(&J}K{xC;8>|)i8Uj#fk%F-M((l<2Am%Ej0FR4W)3rHhTqIaA-A;y{TAe z+%0;Yk_*0vBmb<3tMt8$WZg>Nh@Ji63QCpPoUlQy)kODGr4mU|+s!bTu=4>hoXf;L zO6nG^U%qpkAr(RM$RS}HW=OH{JW=>}XKq($ekR4(i_GlqH7l;hXId1+u>ZG0{6Fyq zKx$_9A0O`1dzn9d?P}qde9!()zdg-lW3W&TgFq;snbAOq7vDdAWI|!ai22Xm%lFLa zWG|hV(R+q%Sk-(9)#LpT>>a=GM^H>JN7OMdra5NnXBowCH@LZa7AXFIFbhlts| z;>8Agx9&M=&rD+NSIITdtLE}7_bipK+R{nN+H=_R8EQcX&Le_9D#s zLwSw=?_!aWPAoT%rhP$LVh#e_-8X4Z&#ds$R+#*1eiau!GH<1Rtlm}KmexK|Io|#t zX!T)Q#(uEWbX~8p*phdA+WS7h1npA0ig)q5ULG*O>PqkktiKI=!>4pY`tdH47GyuCx%z~U4T zZIOZV?MWuM=iM6y&B@XV=P1Z#Io{yXy#6}~hF{N@beFrqmRk41U<{_H^`9bc`ebDV zY9{p7d)rOjm8!$#*JZdLfRXQ8zKqP*=l64u z$T5>SmZyHiu|$+f%#>#JP8#IFGiF7ghmp7%l|7N^>4lV?97@j*I@Lgv8{+I zF#8^myJeHdSYNdL{ZU{dyvO^%n9%?+rFT{ z9C#5C9s?uqsitb=_^wajiDp(9VnDYql@JoB=;odNDpVw9voA-U zpiuKza-JrZbhk5ViQgRV#X!I?PvI}jMAu4&J^FjZ>)RY|U)31lx+5MoJh9izj!kLQUyJo1vs^4kF(5{_%2 zAX6mGqYI_)_+5#N0DsqD;#yHXBYyi7bdJ7$a{g)}3pkjE_@+F7JVD?ZZanqR-B?Bm zcBiBdwEQ^ImaIn$J<65WCFVo(=ps;euG=0H+nF z+0)={jb~o#q1L+0yUSW)%E1=a6Hui|)kBN77Qa*z?LupQb;wl>a@czsmyR{EClqW+ zpihP}&}W_jEMR~tB!z%yPyrI_-q86jw=oURR3##H(iBacE3~*^-CGF_$2}Y0fGEiH zz;tlFni9(|`$g)lg?Pw#yJ8DwyR_o#D{RAqEC) zd=R{k9=Z!*;^C|cRj1r}yX&D9g(GB5#o4`AUMH_zOZ=p=ynhgNd=fa-o19N|#2b;5 zkCsmc*Z?95dzsHs0n-P%DnC@}NCa@^JEWM4P7Ja~7MOQfU9u$7&uqm!l(lLKS$sy< z?kO{jRGeN{4w1D?-J_;qt6=YR3tc(CcZogoQj&HcN=KN4Cgo1au*!%eT& zIdrGGr#Ed2BrjM_R!KdOzpDoaJ!MWsLwbBFRJ|$?(+`wP%p0?V4{jLjoCbkxZeN(j zT$d#HJ7v+8c^40A#d+ov{RWJ@4aRM3pKBehd`pi!jg>W^$vx%L9pKQd<$W3|qfoEQ z5~gLm`z`}p zj`&)nE91?!?z6zVtp$hH|Das?M6VB*(*J|Pgw~#%zrfS|)3)|RJgS@IFqvRWv&8Ua zsmTM$pmA0Wk;J&|uJX2@SHV1?PL08olHcJv(*1%b^~7+}_bb`oCN3#w-84S=4Fa3n1A|r zvqL5d(nHkJbrSAF@`dk5lfpwHMSW2-OW$TqGSO6;fiAHP*#FmRe(DOF5s zfvU_l^I}`z0<{NmKI1*wwxS#j<64)scgxQ_N5`IG<5;6Ji%TMI>Fd0YIs5huiAAH5 z0}PBIZu1CbrL6~rc=!z*O)gjDeK|0If9R&eYKCdK^8)uff?yI{5oJ~9G6;w}vodFH z(p$T~AuIPKt-}zinG_K(+`mk}0W-whVLfE%>KU`~ZnlnNf9CWRZ6ibFx#rK~2g(Q5%q6IQWQQ7A9`=`J#8n7+ z%uVYoIC|^+S%1Kr+N(io#1wtv>weqmHedrhuricvxX>?2G+C#0y^qyBY4icK0io*L zO#+HBIea4Y@&r{SWOQ+$2w6O}O5g;Y6)02?w8X0rH^=Zh0EvnVbK~*Ag*P%S;{Db* z_?-8#r&eVuScA=$vmiuJT9w^RvSf&8yzdN;kX{9f8u3=o`!>U#U)YmCRERi3LYvNh zVxwwiyz{f)RPLxOsGf4C*e436O1f@kW4o@Ipcs|TYscPC`@0zbvqtcrJR@gL&PzXrHXC&T(pH+WEahGprQ;d?O}u+Q{_8nI-!AF)!laQk>f84^A)NDBpR zFzG5|wXC{&hn+{*YnpYZ6*ulT4>^lq z6Sr|rI%^uO>jxFzJZ_g%xLxzisin;6*EYIvUo}tOIiDPIFPGoMDx5d$Z}CZcyWv07 zCJ~cCYT-)3oPI+({3R)c`l}JFb^@2nSKer&cf8QheP1OGzEgAS6#~PsM(SYcY$_!Ma>o2Z&g33f?6f8`H%i07_$FGG5%Lva#CY z5B%EKOGWjDMeXHZMA}yQz9Y;r*uV(qy1Mn9W<_5= ztCI~RPMHUqYWqVry0akFS6zwkA&WQv+_^3T_7v5ut0cU;!!#^rF5<_1c$u!8o7cZW zy_336t`zO+b_(?@#7&)Pj^5UZ?;v=1r)jpM*a^D{<1-798&nEfPu+#OsBovY^ zbl2&A)gN$Xo%Qt9y!_^~9$_d#8Js5y+`AGna1WO|suqA&2H3^9czlw?_ZiBIhxv*Q z&f2#%<`$(*s3pY?Efz-CZ=Eo!ZOoCnpCKy9Wi7dFv$V9o;M{RD@x|M(adNa{c+ag< z$o2bNe#SwUogQiB*Kclau?VurxAr655FP7cSKNi2 zc#m7J4L%egJyz+PF23Xo`@-kL=M)Bh>Kp4R9{oXYFg~7UZHuJ?@S?wkOv1;e2!98^ zmcd3XJp<}>5Ss7A&{yP<@+XyjZGKerQNgEl=mNBd`CqAK(GBxxK(k4j7TQML>`+{G%Kkt0o%(-ytK*Hyh-&bMAfuxT*`G>0pqknk}vo0tw z0V{1^{u)_YEvs9Xc~XCgvct><(O2;DWon>^Wfg1F8+*d4-Nu z>Y*Bll=-iX?2`KUaohcV;IQuMa637qqX61pwLCu65>Kuu>ev1%ZCs9~WH5+053-*$5~On~r4g4b!e3E*3E z4_qO%HIZ+(zt!_1x2%4{%4!-p*Nk2PeI+}zsC3Oi27e@a=BVj3wYW5NRY{y$MSS`^ z109N#%WBsJAbcD+=*yo- zmIJGb(a`P!3H;UYS9-wT4nb!vA!zbRP;|TR6e*qvq5{4+IZ#;kUSz1nYZe0SJ{~pG z0F$3BE_w4xV)km)Jk5=TlT2xVtrL^DBhwB3C~3hTS|BY3WVKrEDkj2i^6-EG8gHYa zQl8+Gu$rX4bwravGT{^%w(%YOf);aSLbzYD>2Vwu#$!9t|lnfTu)d>O%0%iKW9gh&Eu(<3k~Oodl3Pk0ih=SQ`KE$ zWP}J+>~P9YP|U91Yve4jAF<6`M&z%hxKV}jU9YP&gbOfF<-u2Bj*uPjI6{1W#(HYvK#b3_ zMx}MHj(jS(Yv(#DU+nDZtGx1&gMz?5`lPMcrv&Q+*%fQ$xlmEeYsKw>_}tg*KYQsa zq+pQj+;a(bBvzAHE=VDk-w*3{w$Y2@LS!J!z%xk9TdlYG{Z_GDXp+7K##dD&Ow zz(nqQ+b`S0QwW!RsP>wCQDsJ^AL%-t!5DZps-<5s8B!3Cwp61|IP>MuT&Qp@Axdvj zKs>5LF^Z?(y>qQLlSDA;?RejNH@!%S<3Ycp9+esXyC@^nElR3>j>W9bh&W>Q_xx|I zzQU$>NQ}rFSf&^43l!$_nu=w^4ckHd)m!W%W{P^L4br(&0ytw)g-Xf=l;!?OqWS&c zDP&pYF`X-}P3xq&R_U|?(w?|v(6j;`Z`W}skWV`CYu=He-T0w7JK!>H;f&c`MqfvCz_8Lp~^z18_|${TXylR z!=TxrUX@xp8qXz?x--jQ{V!zwSGiqvp;@wfBy83y6OGZ|6H6LGWd`1g)b{g=Q#tDZ z;FcBewl6wN&fc{j3XFeO`UZ97BEwCbINRq=*YxtZ(u6}c_g?xD^Gnjo4$C?N z)Rov5hvsdYk1C*LruHPa+I8R-^B9&PiL%OH(M0(7zE6-pGGa>hSlBHh z+(>ft4~A;FBK^P%W{|6NVtfMx zmxumti z^{fjKg`Jh3x9PY&z1Tgk3qhC7rI$Q6Rely39f69s8~0qyVY?X}iP$L}g;CXbL-&Gh znR642i7|dp(UZ>h#WK9nqzJ~WAL3eJ|DfPwWQG^m2+G=?Gb6CAGW%8oa|?+*XwToP z_R)8D{r-i_k^O(X{HQ^XhVtrgiw5#NC^B$=FxWUKK@?J!ItZ}pV6TBZjChN`5Yiku(t5c3Q9nKH3 zDH{@g391T_c|H2=Rtn8p5vgnab}3AERu1rRqQ_|&k+W}LUwZ%`MRMY zH_}T02#M=xZC}MY$C!uwds52UTdY{2NUOx`h_d2Nv%a4I5jiQo(%*wgwS!I53>=Cc zP(y-w%MAS#OKpHE{9Qs1xB5-c3{~z6oZl^hVvM{D`gHJkC0s>~q_ZfPw9` z(>-3ekq^i!R~FH4nd8!P`0wAUeJA{7nW4jg>P0UM%7ie)#yOKPi0bRc7k%$2ih{%zf7hwL z>O-^xbyEeq^39aEEsFZey87;N1au?R@f9QCI)kATq+k*FUX6wjEE4RlRgLV_7J@-Y7iTKl?)V+Pdzj5^%6Vlz#ZgRm!?IV|>wtyo5W;TES|0X6@(A1`{s?m87#dr9Miu zA3#v4uxQS)qzuaxG|~njyNx67bo&h`PkX6l%_rt$_{O&cX&Un4pnxr6IMZz7V=n{D zHrj(`RI9!3Qe6C@m5OtA;(0tlyR-c3M357LI{IY)WI1?SY_Au)a9B*-Y7BNb928|R zMgcM#!mYQo{Dc$EG1@PmWNlIqrqjshj#fNTd#UwEVUTLejr^~(x!vazM(bLgMM7^( z-)f6+RBSzAFh1L5B9z9`P0jQYEJ=qsU^eo6&o0APR>lQhoVkVzy!+xfc$iV#BcDS* zBb#RJaXdD;+XGXV5&o=mXee5w%n0%>LNYa&rE9o_lxBVhSVCKCV>h||$7M0VH@BA0 zrNUj^q&s0~hW}>FQ=(0bX<+*Iz8ie{k5H)&+!UHP)h)}_1AaH@ZDe_s#(uhD!D%~q zR&H)#02je_gAV$EgtI^ezJ$_@ukwO&wd7yy)5`#+x-kBg_T$nRSS0n&#Wx$;*wj8A zeBkrBO>lfwT8>yFbe;E7R^aa*HW-MzZ0~YS6U~Jfx}Eqv%58n}_8DqJ3u?}7fjYGq z*&=-_o5;HqMx@G>qqw)B)tD?1T8H$x)ZIh@a=-K^_VT%Wh#&DCcloSlwFlA#zhdOE z^v$OlL>P2>*A!Ofs{8Jst_3~AG{-6)oS$ee7+~1FEK}(FA~R!kkB;?1kDKnUHU>%3 z_v#=A(B_t@5&m*!`-J3EurD=KFxgk{D>s#fX^>D@H54-qK}EQuU-R%ZrFXVE@z^_B zz3o{E;>)m@8I>i|Y;mytgPX+TBfsXCooOexZgewS^jc1R81pmAe{-L?QL$by+pVTr z=S}EXpIcwZCb~wOild$e7+%LiSll=&8&y`^)coLHo|dKbNy~GIHbpfmutCPA>mG1~ zCCTiBz-}F9$|LDLryCe1mN`pQh(9#%<2wBitpT@lnbJLVEQci+_59T}e5p?`rOh|3 zZ927AhuOD9IFFkIVXzuaY35?k@&69|_5!Kd>!U?MK|?_{q~l}&0#YV3_*1H;EZ?dt z7VLwfm3khsNTLX5PRp`9aL$O8fJw%a%cW7eHJcBXKDh=Q8p-o~U+j&DwTJi_TW-{l zB6D>XJEauE)UeAdcFD#K@#^>u7O@Na>b=dY)L{FRbJ^JDUbFO{dGlUg16PN1fWp)# zAFQ)vdQ$la6F9nK+{f*EA4*x-5259S&kfDPv82?h+DA+u)=zRq_GdffM@PlN_33~}*-~Au^;2mj^S+OEv|!TcK)Vs)O~rQ=V$u-yF=gHQW*&N%PJLGx zDDH1!IHxd(1gEdpo)EaM2BU9V=8A=jTd2>Mixte zB!`>Q(6tl@M@oId9Q}zeN2fX|0q8=3;Bx6^49hqJ=pi%5e0((Ogc z!Kh=N%Lat%aiqOQ$QZ zB9pyxk%w2T&+1dF{qMlX9)u#iZ-6mWUk5&XjNEI9LomKHmBIj`XyYlP+9ZCgL31dR zhHA#(MN!)~cgO_3Fi^$mzY4Z5Us4bS`g+4R?djWa`}jvNd<+m^QN`PjbD6K2w5{5d z_XYWshHGod^CcI&i8&*1-`|+RqU&Uh%P`tE)n>c)Mk3f;MuF?FX{QS?Slj%qGHYB{DUdm`hJj#=H6D*s3*W&P%!yl`2YOUOimP8ywVSyc zk!Q2lO?A4fdC~jlqas`bVKU63ED`-u@*;J=3006qqk8sRX2!mtf&p! zTG8S|OAq>|rHJ9NI5!g3g1zS2cwF;gN3MNPO&eBOR#dy9g7RmH-;T#FB0z1mLrQb= zUX9|~7!u7nZDBK)tK27bHL?C41=cY$*DH(82eA*i{)B3x9o+U@)GGZoiqSvay-W(l z0?lKViJcC)qVE@Pk)#UW_8aqYJwCjY+y9a}b`WmRRO;`&H%}|HZ!;-w>f!$9B#sR7 zCY{AXUDnfmnnC)yRs^>+1`IehTvY+YoGAMbI&YU79xwiYtDdCmjYnB$GYBD(;lRO? zO}l$}Pysi(N9mADj9UKyc%B+4Y;#Lk=w<&^Y~K0wlb_OiOaBSW z%Y(`Bd_8JQ*M9wpz?vSR9^RO1XHLFhfmvGBgVsV1J9$;}oCf@UQm2xrkEb$_FgSX8 zE|&m>0Wz&1Jw>@a!(?f*jEsi|w+b-k0@!e$6+f|;J5grwkHNSlKt-FGZwArgSC^djz z<|=HOY6HJV61f{lg1Wsav_J4MET3RlAueP4Eb-(rZwNGi}_#ly2 zZZseS)%jjq4>=86pI zEuo_QE1I1m-1?o)nIZPmzy6qyns7^`33cT=;Iy$Lq|~HjwLD+O#>SXw)lhiNXl6+f z_ikDb)0e;uF;1~HhVE;HrR$W$Fa}tFlO4n$pN#IJ=ysiusq9%O>Zk7fn&W=YKqA^H z;{%%L=Jp<00Z%i+1c&s%9-i_Z7*>xTOtG<(Q3)b%E~`DpYvG{D{X&+p6nm(oEpMh- zEH6(wk(%uKA{-hFWAMQ0*x8MOd_*HImaU{jpWre}%=TppHR?j1 z9`?c80lcNN4FbL%R1)l!m0Rhp@1}qqY|I^UrM3+(slFt0@$a1mD67RLQI*e#tABz~ zG3J0^ZufFVDu5~)3mX>pGgUEhT>6;SHU_hMo`ihpL)z3y9F=q7)=zU^f{VT5?ooYb zcLSXcQjI-a-ruCZXs6VRwtKFtH!19|b0Q@AGQf4o?p@`(`Z~R}^%q?V|y{+&>M)4s!L4dse zkzquUc>p}!JC@Qw`POAs#I870u~Ken`{{+71YAv-zcYfe^Z{aTsnZ`=WVI~X#=v8< zTsiUvDza3meS2>rCF8O2I=x(%Q$hSB_b&~z3) zxm;Ms;o~eBP+iOO7IL$-a)8tROQ+s{=fNPYdP{r4KL*#|WuH3fI;Xx)Itd%AMHjyjJ+@m;(Nrw7W zN1r(F>mrWdzuqtO_02s|)V@lwQ@_2i`T(g6neshi7*H4pU&_l+Prtr=kHN}SCq`|= zBy5mc>V?}yCruf#jtqfgvLfk%@K8{Zvb`w#^xx%q4zHV(-BwoFolit0jzYLGk!=)od`5lMnvCVbR|Lb;MDmw@I}hSVPUovE2k_tnuV3ww=5J;5l(L1Jm|dG= zy&Gz7CMA=uoz88IC@kqK3#AN(eE_GObfRPrdh{U&rl53jNVycbrwhj->asrOXgIEt zY`D~s<-#>PMY!xxZLC^;ST_i*YwmsA8HW6vK!UkG-#AlZWOkd&$381tPJ%fgpd(R_ z6WoX?one{>W^zH8uWbAJn6}N)-*o##XQum;H)&2j=Q*@WlXOr{m7-rZjCHX1Dk#Tn z(dsQTiC&;0bpqB0i3qMD^03o%X$}H*M3!VYu;IIHxSx31KwXsuo6D!aw;zPlm%ZdE zx`I&L7`y(xUJ)qc>BdausV3K;Dj^$~Sy5|O`2hjDT06U=UFpH>JZp#7J>`|v97 z0E+XW>o#!ZXLhB81CAheiF<;g@hqWrtiTSS;+dfX4$JxE}C{W+CnEJ0H@Jh+^fX z*dx1hp(5=W4M>by@Q<9*aP|Qw(vxyDZj2IR`zRgv8kIb??Irv^rvo@etS1%MyrOCh zf{@WhHb!xtduOW~D{^(pDr}W?myeM$KS_Z|&I!N0*24C+M6iqAg0B0{-~zKOubL_m zxQjK+`5EGMG(!xNOwy1=B1uq_n005scy+!ggv=-Gegy8mnlijH`_KJ{&ZqYBq5Q+ ztN?s40Q&Eb#Iow*y{HDflR z7f+5qKSOR(`BLEay*}?jg@a4{ZG}@EXBs!>79{HPq`gCyqFhgAo}lV3i$y1j-p*FUpkrwwZ1)tv?1ZWn$_R zxZ37gk5V%)@J$}Vr}PHP0xfFJjv%8JZTEaaa&<=Yvyy*E3@W#hbh22EmF_0kS4r-y zvP?AH%BGR2Y+1>TO-J@(_m(u)+gGy10Zk2e!X>`kDY>qE3xM5^(=glQ zHlS8%;2qG=rt;Q#Oz1-z-VslnmdgAvzVo&Jp2YT^wMrH?ll7_x0W2@zsKT-TgJgHl zk2avK6RtK!3shd3du!b zcoX#Z1OH>1@3EyO;a?Hhg_EVCjRSd|xT3=hUf27I1UKd{oW^w|@>ETVXU@#aiw>K3 z&sxXkGjGk^57Vy46U?%+{Dnne74q>?{#t=3b{!jeK%=7FwHr{ z;%tc3)ae-=I{CBE#8+Px-|sFE4W;6JGDoqO2p*N~3Xa44u}+seG!VfL45q*rCTtE5 zq509v|1IP(T%CAj03gE0UmLX^0HuRcGs_8D)>?dHqNil$f^aPJLCa=*NaW)mh$^cC z=7^lCw^gQ%T&XP!0zMmix>6L->!c?s2V|LT*0w$T3MlLiKd{I?P4Nm(&{GUc;lEtz z5VwQeWUa(|mVyconT`5Tl&~F2{!Le+Umb2Zy*nb9mvu2nIJuT-@(?)8WHrSLdnbZm^tnK1vGR|Q%Cnm~nGm^;N z7+gldS8iN1@)>A-iBU;wd}vXj*bzV{2Gl%VfN%oBgT5l25zH}QzQtQ+Nx>-tk(IF- z^|ulg#K3Yjuhj`d5PjuPTsKnwR7(IKDwP~+9_MKg=(`*&$c8=aS2&Me)nD0DTk<5l z_(@gZ3r+hvO`ULB#`{`GL*r-O_$)Vh%sE6?(DsJRJJ9_4R;9)UBkWQ)GvIxB_l0mA)2Z!QchAE6W&0Fi1*7kC3 z4bUddogGe#{DtQQ?|2vQiah*Uw#SzR4)+75bO#+6zl#hWxkKOxNyB-nTLp1t>_*`o z+`N^_s#fM{CoiCQazYjbk*Meiy=xthmNqZzmFoL)aGIo`D0M+xn_{sz@3a<2KFuRj zD$-4m`B>b@l`0z3Z{6&$XDs5U_)cp+rTbTUx16%y+TOyS5K<>^aTb~r-(&-q1X>CT z7>F~|KkzfC$wa(|?N!Io4OI$*3PvM8C7u*_5X!3{3-qBN6lQe1mqR62@zCQhE{8}V zlMf97${bUFQ0IpO-+}@wvg2jSr+bD}%IS-Zz^+Lq%sEF_)HFHeuys*3apQhAwdt2LW??#9O{E<#L}@L3dt&()?1=8!}U1nvuhLF?cA4$n)SpR zfBRFEUm*$kUKDE?TjZtKDR_f^;eJ3g1~(g2)tHSLJnH*zNK<|Swuy~DnrrQe{5Hm# znqaBSS!#HNRV%EY;a8I(2P9){SQ-`<5M1flysmq@?ZLi<<%+KhW!7LvtS;-yWGqJ9n2lnxA|Lb@|H?_v2*x(UQb(e_{c5(j(GRN$EY3PK}o6) zpH}ntF)*~=cXTzL{^=+3!L{h~3^yh18pcOVI_(DS8BpL>_$1jg}nSE*{$HZz8#> zi`@rJ02RBSVk_m@Z;%{(b9!=d`fpBB!|x2n=NwwwXo|Ey$apk8j9+imfBLyhVL4`d zeW(9lC`HLOr-W=J{)|>BYi2>ul5+oc3d*x@ti(6?>w1~dtts8vO*&}c2rQ_ef8jpg z?jmS$%kPJJtsKqJ4#j4~+3T?H4{t!!2D}Q`-5_N0M5!dVb_jhT!Ky1uG>7_#OH^4y z_JGf~3#n>OGx@|D4Av-VqbWyZ%=diJFi{vM35d&JD6RL2*ie2qMm>sX)3lb1GkW}4 zvudkA-v}!S{ilGw*-t-BqX=dNn|EMv{NWYs1}-Fd^gBJtVf|yPq#NaK&by?7-zN3T zW#M8DL(O}mrH&$OdMY@Ec&o;0Ff!Rlg|sZ)nqtoCb=@iLT950*wJHA79{O_0rEQ(r z0~e20c_|OyR|fj2r`y-C>!GqcW_r;CzZVP^@)kz3QrN}(K5gIPabta?)h+F@aPSrh zu@e{a+QXzW<+Om%o-e6oBbM2C3Dp3*6RxxtBhXp`(W8zJG(oPUeRKVMc)-r+D>J(} zK$No#%&<9F1YnFbOEp!OujN<3uK}Zh&1Z%-Ir!<{e()9=*p5qxwkXN0QfV|$zYD-0 z-K;4I`9snWR@C{2BO$jZye7$<9Ms@+N$loxEucGYW#L?!k0@9S5#RkBlHjR z_=3=dfy2RpBgnwQdGhB*M^%lp#nFy*-8c{B&wzFGoo5qQ1+Z;&u zmb6i@QFDYN)}%Au=N`W6{@Lz?dr)P;dM&}@0jy(uWCz3%6Ie?7zJ1v8-l=vVo0zBv zFo=C7c;0Jwux0Un(uA?@0~vgNWuDLgv7Jm6$UN>L=n{>&{~`~^?xcU+qF)_W)0Xp!nN3_pcj9^5{_aqfLUA1N#em`N)AjC} zVc}Na#*KJxdHlkiHJ?VHw`?5oIS~ZnA$_y40_T}D z9{`zp`L8kkf4>k0p`g4$ehgjmmGNur2(HAnSfmCPH_wkb+9|2+wogdKqAksi+w5iA zK*~Ch3I89nKE320ZK9Pu#uTWEVn%a)LQ|`X|nVX zS-oi8!DW&yuQgZkfV#20==|u&u>ZYss&RO00WfGzhV=! zFbKfj%InETg9s4Bd!NS}C!-lE($JxlB8hr@X^xB3WKkBwDM}Co@h*tRhn7gACE033 zFxla)(mX0ZP>+JS((e^qcja8_$HLhO^*3irm%P+p`k)kA#dn0zOH1k#@qD%Al34@J zy8!|hWBBVOk8pw40Dw<)&|6eYQ)KrcW4fX2_Do^ME^PL8-tUWw8qKR(;!08gv1xvv zT9OLlxqb-A;0ubk&{HN3i8Bj5J8aK4QDro$KujayaGW7u={X~?wCHzO<6B1rx_)Y5 zBLo$Q`vTVXWu=ct|XPU!fMZL((-ApE>C={zhX$`*(o5j`)xT0A4nd(J6mIBB3$>0BSu z)4n*5M1t1>$*EuE$v8wZM-}n8kIro=>T)RHk25vtQROnt7|9p1#v&sSiOu9Y*d#+n zNaiGGHctPOL?=jd3>g;8#07|^@G9|XQk_*k>b1Pm>tJ^&YBC6;AX-#HFcNcoj3!4} zE(7At6M@!Z;pd~T1Jv11aG1QbL>(1BrT41VwZM0?--lgFmXOA~C5bSMx3=*&atRhz zxE^u`-VWU|KQg!Y#x#t-8y1PbPFEB$80*~j$nZl-*5_#&bc^$*>m@O^D0ttKKVcUG z3py#@%fec3cupzWMF!Pkn+Eg_j|Z)zYDa2}k1b<;7w2kXGmJ16TBA>s(_19@#YzsQ z)P0UKk=wEBV-H`lxfE?kc@0zeYqXTlpT5`KaGbi`K{oc!k@3fd4?By0<`1rf=f^>? z-${9N_C|#+{=(gt$OQp(R;D%L5CTxw``Akd#y+k_d4~2+lG@(~BnYKl_oc_DOhY8g zs)CssWZ1r+%4vE(xxUG2JSS~j{~e9#f1yBX+Pk;U>P5B09v1BDo}VtxaqB|P*FEcV zY)hR(whnm))B?^YSYb0^7UeTNz6OC@r6u3H>yl!AsM)g>wNdz}&cz=Y6oi9aI+6SA zOlzX~akupBP#cToN`qqO`wUC6z3;DCoZt;KbIfUQiWZ+s3(?+k<~qdHL|T1=n$dF2 zm&ZxLoLqjM*24zRd*@RgV@g`?x?wCVnyvTuoMunD%UsFDUwq+XL(IXHzu+?LzcgW z%tuEHLf-#RX7S&RYA*V$=<;K;`xWs&rtHe};d={$4$N!WA!#)cFyMN{rjNg`8nrkVtt?V-2}7snZnc ztl?ZK@pLtz4%|Bv|LXFL)eqD8{CUXf!Jv|o(AXvW_!Rkq3|ku4%yzQw zBj=l>fnjNN@Ob0qA?mP&y6HfwwOGoM96blQ7;D zZ6#W^&P|(h7n?uPuT$)Uv!<09D;9r6_A4sO0u;r5&t-exl9Zp3WUTMEk`^3#20}U= zwa69jhV`IUr4w*^8r(NrhLI03N%v17nOXMhIYQo6F$@NbF zyRnrr!lHT~$Cfk$UcAtfQd(5{oi=J5R?+0aU|+C35t>g@tz1}{;p^)HWq0`X&g8jS zy?zNBSyc|hK>{x0#T(l@h-O@MO>rot^aU+`q_0&)w0WW_UNc8?5t$HEmu=nJ`) zGO6)`mHTw_bnt~_N?=1#1TrtlAU(|K8whPiGY*`U@DhNwxXjHD-(SAyVOR#*CZ5;734K z`H#^*qP3KqziErRR0c_tuQ_Va&8Qyea#7G-P*5X3{>PvzNkW|$L}GwsJE1nRhAg|C ze+GYH2Z>TBJEnV`-d+=1^5(b|tk0W2OcK>6ce&tf6X=yY~;a({)dfeDaLU{%{y-(RFtIB*J!6S}*69V?RF;m&FB8J#vEEw44x z$C(~#bHm+~+%IkugzN5@#MH`z?GCZWuB(_G_8uoN1nZ*2a3w=lSzyxYKuqK@n}g{; zcBlXG75=HB{ksk|LP90HtVk zhC!Ro9vxnxA;Ufd`>j;4;Q2hg5FI7g=DCK=-whXmIa#T$?2n{~8tJZx-sdh1v_Y#x zLtQfw!;Gn)^>;hh-0}rW-8nkg&AAXo-Qka`Fa0{e9aeJxo@0UX0z6ix8 zhh|ycXm$JdXKh^vt?5WA(*Hs!jGJ}vame$XZ0j*7JHpBv3N-W!0<`oK(?CM`8kXT}fYCV&NG}_m+!0OElhV@x0IKL@1%jjQJ6-T?i`vn1V^*~m{2IcoBfJ4~ z)Ee{@K_PnPNIcCq44io?=oEv``BWH9O-sm3^Q1AkpGC+PJZFrwMD@gdUkp@)$;zxN zatOGm2mZ077RTY@ya-*s-j^dMcF)Gb|AuEIVYw8cGXBEKB?21^LPV8LZ~QS!D%rF@ zEXc8Tt|(;H75(GSJ7MiyTCZTCxz8=OzK!oaz& zqaFzZVZJU=v+UZe3b+TGSC6q|#QO@ZKp7gK170o&C5byXZC4I5E_z$K^412da?^ zIhE;qZ#eZThu|azQHQDH>wm_VAu?!c@g&f>7{u|6el} z@+HN8PiFt$cmDSlcB+WzGL8L&2X=Y0khxDw$p8i8;yf8i~EKnpuHW zrg&Q6$esn&vL)XoKb~;k5^kVhtW`&QfShXa2v?}LXlx9AiN8vO4--^pWrVOC@8*x0 zC>>O;{83+NUfBT3yJ$rLfNYAM_5kgA89H1Dj_esU#xY%(&%V$dGB96q*mT2yj2cW3 z`gDBOxG1zCX64V=iBS}IqtU5O(OMQ{yZ}_*s3e=W48(6Nr&tH-nP2de(e;%C2YicZc^+^yE^z9v6a(|j z9yf}nX!)?;L&m1#T6^r#9rWyVb0ay*M~Q#;4@Re~LgXS<+8I|9vj@Q}zT-?Tq=S3M<<26rNwhlN?%*>Bwf+$b8wQctOgpz)-gq5jFlsO_{YuJN52%$n+D`SfX1Z+#iqO|JyxPs^+|!chi)*D>C0>^k(L zi=QoCixlr!F0X;X85M62XWqw%L_&br@67r7{PRs#;K>&t@WEXFqaI!vUy{#QtJao7;1r< z$~a7VJ{(AOQ3Yds>DYNy%=BhR0iznd?BScwAVQ45>4j?}(c@b3+T!%xjM$X5#+JdZ zNi%BJne^W0lvyfB%{BssjC^x)C3mn%)8(II;H_Nch8 z+&|csuqz{s5J>_UH^LbU%rZDOLlL`M7Y zx=>JJku7gf{{PtDGt<9Jljm8k%12)t|4e^*8Dxluf=NZ3Nx@+ss8>A8JPjwAXS&E2 z*nOl3oN|ckQ0P%4SjjMUI4^8{q*Tp$NWY$MRtCVCXY9U43Ghob)I}jRTRYp#iPD6S`vjc;jkt2MB_)F0<>66aqN zpGaanN8=ZuTR>w&*T+-B?E*lf$QTkAc`x78q&h^|gxJA30M9sKw(! za|dS%P8!;IfG+{o+IcnmstX+cKx(ojyrxzB&paslh~w*BU9Yl-$qiNY+y z_dk$^XWvBd8%eO=I~;QmF)j?q53D0BMzC!d2;}fTV}MTmvhf|l@aC^E+?$r1x9A3E)UA*GKR>Q1lT~{9M{fhj3DLACnzbzyr7Ehc*rM3*5h?O!k$Xt) zv4u2j!Vt~D?n^o)2sWN0(*!;OJ4!%pL_iB?w0zy&en_!+#pYn2)&uk8OSly|-#eI# zIRe|J!Nc3qhhfZ~|B>bevuq!6Zg)?n52FMHRU*Fzc0NNFo$j3e>t~5zm8lI?&FaO@ zjC68??J5q;9h+rxV>i*{l`%E$o#H0 z=^S-TN561BI3z`j5^x!K)t7q|IE}_ukA3hqQy{JcKL>O5+t%O;Q>4+SIRndG$0;|{ zGTL96b3mi?WcXwbDR+lf3yscy^0QeGxd55vz?5jI`~n0Lu#$?90>eVAC3SUfn}d;S zio{?Y2|@{6c>TD?^fm*2S7Nbjv#GZ15Het~2xpqan4FVLuV@`?d$qa4vXZhV!WEte zE7F)hqDwP*@yaHJz5Xmj+258^>^@;>?tNg@%E(iK0uvYTxbf7b{6`JU{e9Mgag|PR z?-9iw@kaOW5gCgeW2i>%RsErF)+^-^l_k#~odW797Q&8#@|QUL|7^%v1j#h{e}3&;tVSDpsj&3hd#OUkSJD5S8EVUkY8;WEGz9xXKKNT?SFUcDA~gf*q=B@WG6dPomi2UvoFOtgxgVNNPAc>MjMpWZOpTFRI=Gl|$WEva%vXKV zrPp_yV9byOG8-a}v*q=MW(+og%!l6^Ok+?|cZE>R@w-r8y(h-TBqs*cviDJiQAHPg z#9Y{b(A$R;coJ7w+|gIWl3+)Zn{yyY7$fhL>ZDvuuj9rhfU1W3MGwPmj?tq~TVa_G zp()8Zgyjp%fJy=0yrdaI$HwKPf;Gc}pF+^ggIM#^cS8A{JM0_inPv!OSpsE{ohpmY zH@I3^^CH*70KP^x!5YNSn3T>pVunOKLhp_l<@w8hdK~?Mo+OHe?rUyVFcCkDILc7r z(i(ch!Hi!?z#N(P!7W%4LU1qB*hC{MUfGhQ{O1M8~eSs%DVxrW}_7Q5Aw0 zUVjBsnL}_jF>*^W(E&_g1FY+w=ks)AsnlfO0e@4u74X<;N#45aMx3KfTBeh$qx}Gv z#dy|2^aKvto)?z@wgg2+Pv9jpE|%_`+mMItDmnwa^}~}38rj0&IMm2nx`AZ>#D$qK z^MRrA2z~pruDB`RCL-`mDl7Gxbgu^+t!-=vpw%{Sm&g zYScGDn;0&g&-r!MdsQYsMt#%1eaoiti*s+UWgdIag!5g&cP#r31m!$dUg7>pXf=pY z?fYIlnjk`Ny!JL59~rQ+ug*6Ub*#g*4n0GR8>f68p8fQV!ARRlkA28WfmwRA^!3ow zI)dytA%ru^42UK{qG~`J2ISHr*x_aWH1|6kxg~AkKJ1q=>%k4IMy!Hh^8|M-l=Ulf*O_Kx~KSKQ&F^TRTIF_!`ifFCu5%>4ss4)^X~m$IV7>s4mcj@+tQ}{y4JAg7PeR z0SVZ9^RH&pe_j8%h;Tob>vyrpB||~O`1rT=4Ld*nRhA?kl2=9>hbHH8=^{^Avub-k;LMou}_S26Cw z43nZ%YRV69q^kV!`nbQH%j)#-#LKTlw8S~YtMj$JeJ|}_!H_hd0B)olU?p^Z3E}To zY8PR7p4f~DnKssg6K@w}V;aiJFX)pdTmo(yP8*F6SY%j1fD?q}A4sl3+)Xcwd}RV;1pIDI7*+!BUHZz(#QWwwKxx350o0?Ivy>;rrAIWLRw@edYs~}&-4vN$ud;9NT z9tr>jy<=nSp(4~9>^EJuy=aYZ`WvYlNsgNw(nxF%kv9sS)35#r!Jl4vlG-p#@4<;- z$O>gLXGphCUETbH?}2|Rr9s{<&UkN8a}Y0uw{25~x=`X3943r7bL6?}6T3jH1N1osq39x-gRIE6 zO7azXb4kfaM64otdgO&AN1p9reqW)xO1S(ahSe%TJ=k|Y*+Dibju%V?)LaZHl4GOb z@aA4qeqwHOZ@kUH{j%%!soLLB6mJ&6`O>4v=13r3HBDB1lXrr_J`hC8)*>#;m^ea9 zAcEfhv%t<$ojbKM%t9bCVlX%|n=?DF0!tHTTq4CL$~R0Sw?l!O*{9ALc&5hAaZub% zLN8wAR=g4@o%qrN9Ba78L?+{`sJy}0(&!MS>6XR1$;FvX!uQ zvMI3ibuNxwD@Mb!^NqK@zY`E-cYs~lr9LFCOfYq4k?)EYKJJBY+n2gP>bmq{-}0s+7KuQP1FEpwk$XBZ^i<^z=MiDZ2aMtGPzS1^N6 z)aVjXPyzp29ODh(W@(vDL@vZA;dP3*MImGas`gy&gVj{q*4B^wU$1WM9l!JdXM6W~ zHc}SGGc78SYQ$AQ`R!vQXrthXD-i)ZSJ0xiXt;)Z$|0G5=sVi%k`cqkk>3k5d(AAG z!eZFR9zE~+tCo3wM8i%pa+ve?fmdmIq)bT!Ts4Ht{)K0SY`(gE19S*d&iAh?1<#R# ze^()Ia?$)s2X|5YWgzt14~Ki5yQvfC?~xj!q$xJGWKXBj!7S@C+Jafh$kCH+DP;bM zdM*n4zZrv&Lt9~-S4G{9*U&ISfw83tGO6eNQG}aCq~y*D?gkf`vSnZ)*XynN{yKhh z&k)dZpB6wcedqyd(&KWx>0KrGRK(^1f|Kc%Ro!85CN66g38qGE+cJuGHkeF+YX0XYhFQ3I^=da$lq z*jF|Zbwc(rbl$o&6~Wi)FHD>C7z+fV+Sy5Z$q0B^LJ06lKs}C^(T-c))>lMoL#2E# zokkobga)#x3Tc%gw!iMwMcqMJ*j1~fMh(n0b5>bmexJ1*2b7<#Yz{{$5M1{JK`7Xa zLC?`poH5-ixOa8K0jryBavcWu1=&Y_aa&F8*8;N!R~#Z^55&KkR=T_Icqg>D zx8*CLGF#Fn4v8!6!!XH!F&ssENMKLz3{XtwXwmrnN0 z!KoOmp@xc4!7^Q@nz@Q*j3RHMsp#gU%=*A|B@lXRY`g_VaaQTC%nayc%_#T~@JG{p zusT0~Jva8x!b$H5%!1F*_-5au@Gs8%|)u`<}RF{=!PPt zI1Mb{YbpvcsA@)&$Xx_Xq^{tiR-5j$&iA@CYX(?vI-RlTzkfw$Eo}P@pg5*M*=*>(|>UlCW zg)x2SXU=nN&XKvFS}k^bsy!C9GA->zU9QoI{Xgj*wl-y>&ht2n z=8((j=j#K+;heHo?m^0}66Nj)JX*PCV9vOV-$r zM2nm#D5Y=yV_5&K%9RxH=|U!^ViBu}F3?%;r%t%F?w-3YdPrdZ1(!GQ8irbE47 zm>nY@qIeE#A9#{JhN2I9der*AdGaT1NN-h+OrfN?TZ3cG4Yw3%YsmLc9qb83${_AR z#xTd@r|1+)SDp?-=tV$LrPcrkz5@5Qm}bSqXB8hxGNh28f+yV&%BS}KcI_a)1d>`4 z8So$&62#ovu2`a2wy8O_xps@carL=VDx}^&Qvd;}QYvbulpU91zL;MF`f?tPj*^Kx z+1Y-3jbODeFBmXa3b3bZ6Kt`42oMqHRu8C(>cl(WN?DC@=4?_{i&jHss5i^9xfq86 zW$K#R4=lOKjH;$r6zcdhi<#~@u4?Cg%s9!N<)D2RnVq`6AD|KVsjBflMew$7cu6fJ z`%O(4^g3CtX^BBNJ*spJ!O5VhO@a~hEVcUYPw-D5z8Ozb1x2FA6eL{|6o&9gn2KOj zO=$Su^Sk#b0;H`}_9Jvf+6E{CB}1*YB>U@?V#iYh!!WzQ<~5ZrgC@9)k(&$6#+oOS zfFOMt<=y%F54puLNn_b0Oa$ag@fvh)6uZ_d4q8w) zWLC3$tuCK5qg0d?fJvRBD;=YxPVAmhN#T zoiCNE#hSv1)T7VU)`d4rxTYP-kbNx=;8Jd@PU_?|xPjF16nJhHv{~|`xqeBl*VePC z$o#!4!-j+O?DCn(7DQfcTixImdr@az;Fo2)hxMW?GB&pn(aG4nwa8SU`YKKTmC>q(h!`uFki`G3nWe6UQXG<{lZ=)` zuUsvpNQ!w_zzN>ZLK!rA70S z3z2;O(;k+&!(I&H_vxfbaDLWw`e8^Eq4Xt#O>5+8FJZuT4N~ta0kzLe0@AOa23NN^ z5PjFk@||p0`Bwn;4v>P}%r)>s>ZE3-3F;m(qwPs$r3hjZWE^3(=$_LP_#;Q?i0sF} zN)FReG!RvBaBWZ`wrf8`YMR@2PG2-2+}%9lQA|a>l+9m1g9^Q69Q0+&^?>?Y-(+Y1gK!8VF)-8DaOPo6vW81z^c zvRE?!K^=FR4sJBlQV>$WFJ0w4K?5y^`%aJ+)zlDMtNo$^#1?{8IVIu9$Eg= zf`dQ)bubKJvi|k{{2hG%Y0n7@DHVrKk(wobI;F}|@x-5ifJWyQ&aJ*5%M|yv`&qZv zc!u;XlKRnL3nR&kU5f z2L3{P53u-2{=dpP_jo4TKaNj_CzOh`99B-VBE%e*Qx3x%=0PK;XqFs87Am2KSmwML zvU$jyLXu%fNNEmjb6CTur-dAIiVz)s>v?{^=bzv8*ZsP$KkwJ;y07c=y}s|atz#pd z*HYim+JEb_*E9Fua__;wZDG&A%y76-a5FEGU9D#^UcKFmjuv;F|6WdQ&}mY@-#(gpwkCjVSa zs86wqrvi8bi^@QmEI%MhJ~P=nDPpQ9t6)I{d)(TvHhE#YUVmqAdXjTk{i&(s54*N2 z79Cge1`wr#cJwpTy2h`k{kl(v!8sMD=p3kLbT1RR2W!QswoqGf-;h)rV#OSx#1XH> zl$!u6rd`m!g%OAtpmtT>b!NzK5Iz1ek|M0S=F0k?VP-5QL`@4=N99MG4<><7^37bJucTnhu zy?i%{BB{Hwo>uKhMA+LC=x2pVK2i|8F2>37ONpg);nmy*_XLH<%4B|M&HYbVQ};rN zC>IFoP~NG&>B~XYs%IUlAEbP~r!6^g_SiMdQ)|`zQRi%mZ%g$brJY@$rBr{~)2(5Y z`p~z8BB4XQSaUFeFYM1qg6-dSPOxS z0JC4L8n950ow0d(pBZmjWIa?_SvI*0Gf1#isSp8Bcd~v?=f{CJ^F~Zx_E2!y7|S%` zR*NwX@6uT4ziE{3@u%U|qvBY{iN<-INDp3=k@RM;+E)Lx_PER%!-2F_w5zl_@46Dn zC)|+hIB9wx=YhY0A8Uti6;++ zmC&{pvcN^vfk*bqql%I=RLVWDPPE>eB%7Kl6_3|XsY&I1Bg%YK3u#f^qc4|CO&6{O zYi0Ubm3mzjz&l5$@Xy5?Op&X~3m@iz0U6Kt?`^f_B zgRf*4(AX*FT6+((dA>)5RRNL`LaXqJ_{2Pc@>kQHR?#A7Cm(?MkWl3=)v4fdWLK)F z^d7?q+QmdIk)Rmm?z&hdO*?x7yTPxF;X<2S;R&AFFS4NJz!r5NL^AML13CZNM9@w( zlO1y~3aVjf!pUquyX_G1fUNCqd)3>uY=)wO?7h(ukWBz(glyv-KC=$j$Vb_=?N}|h z3rxE9$-MO5^cSG%ozV%aT@1!7~5?n_zZgU$oPN+lL{3peM ziS%c=2Hy#_kGC&jz?8tS$D{ouQl4&CV?w6wM(p{Zb#ls)$1DeSYsrBncQIxQ0_%Li z$27c@pWc5cXF9TBBs94T@0*l}n14iqVu6|;XVthueHAYUyg7q+?QiD_6aN#6cWQ%}BcfQD;` zcd(tYgQQDQihx1Wf2SbCM5L(~^1d1$KVYzoddM|7gsP+kuPB`Ka;uKKuj^1X?pv2l zMT;s-m%Y6P*sZ!JI#pjmr6Yl2&<4+N#>R~I4y_YEp<2iFGtb}bU}A^0;WmRF@=xx8 zbH&NOuLue!U&w_rI>$SLE@o?}HMVWk&K+mzJSpm#@;=aDfuWgcEv8dIEypFzpwbc! z1Ughp$1(tZ5Y^P9?*XDB5!@3>3kep%4w?PFtkmZ6(b_-cK?H}&XE}n)Lm#9AU2S&x zs+wz_dx#ZR=si5>DlBt!|J{SdzG(!(7Txm7Z<{zuMxtDEJeXMiOsAa;iYd#ut#A>#9)l&UH zK+$e5E3oGt!&1Q|Fc}SknD_-Vh#hqQ{=77+DX+91;9Kq8961SauVSzB0SUhbtgL6J zzT3;wc|l8J&(9tpAHbc;1yA7u`h0?Gw|x-5QNQ`K*qTeei@#>&mx7bH%FxHKxevTU` zie^3u!L(XBB#-JSY12oUA_Q3g@V~oPU%>}~Zd=y{b6tyJ$d=A!6bAgJ*yIOj5I^W` zxyWI-Hl9{6R3#A^YgM7Lqs#nA`V}#an>W`d<9i|`42G6WpPG;740cP6&Ok;M{t7E@ zIz*u2o9q2G)dQ<~8c>D5l@}H$48oT>c2$LEnx7!}Z(-LJjX4%qcuOBZ(7*?v?d=ZS#7@k>VVS zNCTdT0QeH6eS9ZBw}#W+=4Iw!hCpxf|DcZaDDh!(21 z{O-rgTjykb`y +{ + public setup(core: CoreSetup, { developerExamples }: SetupDeps) { + core.application.register({ + id: 'controlsExamples', + title: 'Controls examples', + navLinkStatus: AppNavLinkStatus.hidden, + async mount(params: AppMountParameters) { + const [coreStart, depsStart] = await core.getStartServices(); + const { renderApp } = await import('./app'); + return renderApp(depsStart, params); + }, + }); + + developerExamples.register({ + appId: 'controlsExamples', + title: 'Controls Building Block', + description: `Showcase different ways how to embed dashboard container into your app`, + image: img, + }); + } + + public start(core: CoreStart) {} + + public stop() {} +} diff --git a/examples/controls_example/tsconfig.json b/examples/controls_example/tsconfig.json new file mode 100644 index 0000000000000..78dfda0edc71d --- /dev/null +++ b/examples/controls_example/tsconfig.json @@ -0,0 +1,23 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./target/types" + }, + "include": [ + "index.ts", + "common/**/*.ts", + "public/**/*.ts", + "public/**/*.tsx", + "server/**/*.ts", + "../../typings/**/*" + ], + "exclude": [], + "kbn_references": [ + { "path": "../../src/plugins/data_views/tsconfig.json" }, + { "path": "../../src/plugins/data/tsconfig.json" }, + { "path": "../developer_examples/tsconfig.json" }, + { "path": "../presentation_util/tsconfig.json" }, + { "path": "../../src/core/tsconfig.json" }, + { "path": "../controls/tsconfig.json" } + ] +} diff --git a/examples/developer_examples/public/plugin.ts b/examples/developer_examples/public/plugin.ts index c87bd2f5cc890..ef0fc028cc814 100644 --- a/examples/developer_examples/public/plugin.ts +++ b/examples/developer_examples/public/plugin.ts @@ -41,6 +41,9 @@ export class DeveloperExamplesPlugin implements Plugin { this.examplesRegistry.push(def); + this.examplesRegistry.sort(({ title: titleA }, { title: titleB }) => + titleA > titleB ? 1 : -1 + ); }, }; return api; diff --git a/tsconfig.base.json b/tsconfig.base.json index b0b8fc1d79090..d064b7e4c0696 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -718,6 +718,8 @@ "@kbn/ml-string-hash/*": ["x-pack/packages/ml/string_hash/*"], "@kbn/bfetch-explorer-plugin": ["examples/bfetch_explorer"], "@kbn/bfetch-explorer-plugin/*": ["examples/bfetch_explorer/*"], + "@kbn/controls-example-plugin": ["examples/controls_example"], + "@kbn/controls-example-plugin/*": ["examples/controls_example/*"], "@kbn/dashboard-embeddable-examples-plugin": ["examples/dashboard_embeddable_examples"], "@kbn/dashboard-embeddable-examples-plugin/*": ["examples/dashboard_embeddable_examples/*"], "@kbn/data-view-field-editor-example-plugin": ["examples/data_view_field_editor_example"], From 1eb88382288cf3e6c51686731dcf07d753d24b4d Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Fri, 18 Nov 2022 15:49:01 -0700 Subject: [PATCH 2/8] Add first control group renderer example --- examples/controls_example/kibana.json | 2 +- examples/controls_example/public/app.tsx | 47 +++-------- .../public/control_group_example.tsx | 46 +++++++++++ examples/controls_example/public/plugin.tsx | 5 +- examples/controls_example/tsconfig.json | 1 + .../control_group/control_group_renderer.tsx | 77 +++++++++++-------- .../embeddable/control_group_container.tsx | 1 + .../public/lib/containers/container.ts | 2 +- 8 files changed, 110 insertions(+), 71 deletions(-) create mode 100644 examples/controls_example/public/control_group_example.tsx diff --git a/examples/controls_example/kibana.json b/examples/controls_example/kibana.json index 88dd37f41dcfa..34819320b60ab 100644 --- a/examples/controls_example/kibana.json +++ b/examples/controls_example/kibana.json @@ -7,5 +7,5 @@ "version": "1.0.0", "kibanaVersion": "kibana", "ui": true, - "requiredPlugins": ["data", "developerExamples", "presentationUtil", "controls"] + "requiredPlugins": ["embeddable", "data", "developerExamples", "presentationUtil", "controls"] } diff --git a/examples/controls_example/public/app.tsx b/examples/controls_example/public/app.tsx index d1c8ae138cb8e..31923264569a4 100644 --- a/examples/controls_example/public/app.tsx +++ b/examples/controls_example/public/app.tsx @@ -6,33 +6,21 @@ * Side Public License, v 1. */ -import React, { useState } from 'react'; +import React from 'react'; import ReactDOM from 'react-dom'; -import { - EuiText, - EuiCard, - EuiFieldSearch, - EuiPage, - EuiPageHeader, - EuiPageHeaderSection, - EuiPageBody, -} from '@elastic/eui'; +import { EuiSpacer, EuiText } from '@elastic/eui'; import type { DataView } from '@kbn/data-views-plugin/public'; -import { AppMountParameters, IUiSettingsClient } from '@kbn/core/public'; +import { AppMountParameters } from '@kbn/core/public'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; -import { LazyControlGroupRenderer, ControlGroupContainer } from '@kbn/controls-plugin/public'; -import { withSuspense } from '@kbn/presentation-util-plugin/public'; import { ControlsExampleStartDeps } from './plugin'; +import { ControlGroupExample } from './control_group_example'; interface Props { dataView: DataView; } -const ControlGroupRenderer = withSuspense(LazyControlGroupRenderer); - -function ControlsExamples({ dataView }: Props) { - const [myControlGroup, setControlGroup] = useState(); +const ControlsExamples = ({ dataView }: Props) => { return ( @@ -40,31 +28,20 @@ function ControlsExamples({ dataView }: Props) {