You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2021/10/07 22:21:21 UTC

[camel-karavan] branch main updated: Reuse KaravanDesigner component in VS Code extension and Web App (#9)

This is an automated email from the ASF dual-hosted git repository.

marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git


The following commit(s) were added to refs/heads/main by this push:
     new aa06aa7  Reuse KaravanDesigner component in VS Code extension and Web App (#9)
aa06aa7 is described below

commit aa06aa76722152b8346a557395635c57d79cfd95
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Thu Oct 7 18:21:15 2021 -0400

    Reuse KaravanDesigner component in VS Code extension and Web App (#9)
---
 .gitignore                                         |     1 +
 karavan-app/src/main/webapp/src/Main.tsx           |    12 +-
 karavan-app/src/main/webapp/src/MainToolbar.tsx    |     2 +-
 karavan-app/src/main/webapp/src/api/KaravanApi.tsx |    24 +
 .../main/webapp/src/config/ConfigurationPage.tsx   |     2 +-
 .../src/main/webapp/src/designer/DesignerPage.tsx  |   238 -
 .../src/main/webapp/src/designer/api/CamelApi.tsx  |   905 --
 .../main/webapp/src/designer/api/CamelApiExt.tsx   |   143 -
 .../main/webapp/src/designer/api/CamelMetadata.tsx |   576 -
 .../src/main/webapp/src/designer/api/CamelUi.tsx   |   241 -
 .../src/main/webapp/src/designer/api/CamelYaml.tsx |   103 -
 .../src/main/webapp/src/designer/api/EventBus.tsx  |    30 -
 .../main/webapp/src/designer/api/KameletApi.tsx    |   102 -
 .../src/main/webapp/src/designer/karavan.css       |   554 -
 .../main/webapp/src/designer/model/CamelModel.tsx  |  1462 ---
 .../webapp/src/designer/model/ConnectionModels.tsx |    41 -
 .../webapp/src/designer/model/DslMetaModel.tsx     |    62 -
 .../webapp/src/designer/model/KameletModels.tsx    |   191 -
 .../main/webapp/src/designer/ui/DslConnections.tsx |   109 -
 .../src/main/webapp/src/designer/ui/DslElement.tsx |   178 -
 .../src/main/webapp/src/designer/ui/DslInOut.tsx   |    51 -
 .../src/main/webapp/src/designer/ui/DslPath.tsx    |    61 -
 .../main/webapp/src/designer/ui/DslProperties.tsx  |   355 -
 .../main/webapp/src/designer/ui/DslSelector.tsx    |    88 -
 .../webapp/src/designer/ui/KaravanDesigner.tsx     |   164 -
 .../main/webapp/src/integrations/DesignerPage.tsx  |   137 +
 .../webapp/src/integrations/IntegrationCard.tsx    |     2 +-
 .../webapp/src/integrations/IntegrationPage.tsx    |    36 +-
 .../src/main/webapp/src/kamelets/KameletCard.tsx   |     2 +-
 .../src/main/webapp/src/kamelets/KameletModal.tsx  |     2 +-
 .../src/main/webapp/src/kamelets/KameletsPage.tsx  |     2 +-
 karavan-app/src/main/webapp/src/karavan.css        |   543 -
 karavan-app/src/main/webapp/yarn.lock              | 11678 +++++++++++++++++++
 karavan-designer/src/designer/karavan.css          |     3 +-
 34 files changed, 11887 insertions(+), 6213 deletions(-)

diff --git a/.gitignore b/.gitignore
index 0949d8d..7124ee5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -50,3 +50,4 @@ yarn-error.log*
 /.java-version
 /keys/*
 
+/karavan-app/src/main/webapp/src/designer/
diff --git a/karavan-app/src/main/webapp/src/Main.tsx b/karavan-app/src/main/webapp/src/Main.tsx
index 4b0e8f3..b6b435b 100644
--- a/karavan-app/src/main/webapp/src/Main.tsx
+++ b/karavan-app/src/main/webapp/src/Main.tsx
@@ -27,12 +27,12 @@ import {KaravanApi} from "./api/KaravanApi";
 import {IntegrationPage} from "./integrations/IntegrationPage";
 import {KameletApi} from "./designer/api/KameletApi";
 import logo from './logo.svg';
-import './karavan.css';
+import './designer/karavan.css';
 import {ConfigurationPage} from "./config/ConfigurationPage";
 import {KameletsPage} from "./kamelets/KameletsPage";
 import {Integration} from "./designer/model/CamelModel";
 import {v4 as uuidv4} from "uuid";
-import {DesignerPage} from "./designer/DesignerPage";
+import {DesignerPage} from "./integrations/DesignerPage";
 import {CamelYaml} from "./designer/api/CamelYaml";
 import avatarImg from './avatarImg.svg';
 
@@ -90,7 +90,9 @@ export class Main extends React.Component<Props, State> {
                 mode: config?.['karavan.mode'],
             })
         });
-        KameletApi.prepareKamelets();
+        KaravanApi.getKameletNames(names => names.forEach(name => {
+            KaravanApi.getKamelet(name, yaml => KameletApi.saveKamelet(yaml))
+        }));
         this.onGetIntegrations();
     }
 
@@ -215,9 +217,7 @@ export class Main extends React.Component<Props, State> {
         });
     };
 
-    onIntegrationCreate = () => {
-        this.setState({isNavOpen: false, pageId: 'designer'});
-        const i = Integration.createNew();
+    onIntegrationCreate = (i: Integration) => {
         this.setState({isNavOpen: false, pageId: 'designer', integration: i});
     };
 
diff --git a/karavan-app/src/main/webapp/src/MainToolbar.tsx b/karavan-app/src/main/webapp/src/MainToolbar.tsx
index 9946f85..b80d7b1 100644
--- a/karavan-app/src/main/webapp/src/MainToolbar.tsx
+++ b/karavan-app/src/main/webapp/src/MainToolbar.tsx
@@ -2,7 +2,7 @@ import React from 'react';
 import {
     PageSectionVariants, Flex, PageSection, FlexItem
 } from '@patternfly/react-core';
-import './karavan.css';
+import './designer/karavan.css';
 
 interface Props {
     title: any
diff --git a/karavan-app/src/main/webapp/src/api/KaravanApi.tsx b/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
index 8cec7db..437ba70 100644
--- a/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
+++ b/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
@@ -65,4 +65,28 @@ export const KaravanApi = {
             after(err);
         });
     },
+
+    getKameletNames: async (after: (names: []) => void) => {
+        axios.get('/kamelet',
+            {headers: {'Accept': 'application/json'}})
+            .then(res => {
+                if (res.status === 200) {
+                    after(res.data);
+                }
+            }).catch(err => {
+            console.log(err);
+        });
+    },
+
+    getKamelet: async (name: string, after: (yaml: string) => void) => {
+        axios.get('/kamelet/' + name,
+            {headers: {'Accept': 'text/plain'}})
+            .then(res => {
+                if (res.status === 200) {
+                    after(res.data);
+                }
+            }).catch(err => {
+            console.log(err);
+        });
+    },
 }
\ No newline at end of file
diff --git a/karavan-app/src/main/webapp/src/config/ConfigurationPage.tsx b/karavan-app/src/main/webapp/src/config/ConfigurationPage.tsx
index b7bcd5d..c97078a 100644
--- a/karavan-app/src/main/webapp/src/config/ConfigurationPage.tsx
+++ b/karavan-app/src/main/webapp/src/config/ConfigurationPage.tsx
@@ -3,7 +3,7 @@ import {
     Gallery,
     PageSection
 } from '@patternfly/react-core';
-import '../karavan.css';
+import '../designer/karavan.css';
 import {KaravanApi} from "../api/KaravanApi";
 
 interface Props {
diff --git a/karavan-app/src/main/webapp/src/designer/DesignerPage.tsx b/karavan-app/src/main/webapp/src/designer/DesignerPage.tsx
deleted file mode 100644
index 6efad1d..0000000
--- a/karavan-app/src/main/webapp/src/designer/DesignerPage.tsx
+++ /dev/null
@@ -1,238 +0,0 @@
-import React from 'react';
-import {
-    Button, CodeBlock, CodeBlockCode,
-    PageSection, Text, TextContent, ToggleGroup, ToggleGroupItem, Toolbar, ToolbarContent, ToolbarItem
-} from '@patternfly/react-core';
-import PublishIcon from '@patternfly/react-icons/dist/esm/icons/openshift-icon';
-import SaveIcon from '@patternfly/react-icons/dist/esm/icons/upload-icon';
-import PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';
-import CopyIcon from '@patternfly/react-icons/dist/esm/icons/copy-icon';
-import '../karavan.css';
-import {DslElement} from "./ui/DslElement";
-import {MainToolbar} from "../MainToolbar";
-import {DslSelector} from "./ui/DslSelector";
-import {DslMetaModel} from "./model/DslMetaModel";
-import {DslProperties} from "./ui/DslProperties";
-import {CamelElement, Integration} from "./model/CamelModel";
-import {KaravanApi} from "../api/KaravanApi";
-import {CamelYaml} from "./api/CamelYaml";
-import {CamelApiExt} from "./api/CamelApiExt";
-import {CamelApi} from "./api/CamelApi";
-import {DslConnections} from "./ui/DslConnections";
-
-interface Props {
-    integration: Integration,
-    mode: 'local' | 'cloud',
-}
-
-interface State {
-    integration: Integration
-    selectedStep?: CamelElement
-    view: "design" | "code"
-    showSelector: boolean
-    parentId: string
-    parentType: string
-    selectedUuid: string
-    key: string
-}
-
-export class DesignerPage extends React.Component<Props, State> {
-
-    public state: State = {
-        integration: this.props.integration, // CamelYaml.demo(),
-        view: "design",
-        showSelector: false,
-        parentId: '',
-        parentType: '',
-        selectedUuid: '',
-        key: "",
-    };
-
-    componentDidMount() {
-    }
-
-    save = () => {
-        KaravanApi.postIntegrations(this.state.integration.metadata.name + ".yaml", this.getCode(), res => {
-            if (res.status === 200) {
-                console.log(res) //TODO show notification
-            } else {
-                console.log(res) //TODO show notification
-            }
-        })
-    }
-
-    publish = () => {
-        KaravanApi.publishIntegration(this.state.integration.metadata.name + ".yaml", this.getCode(), res => {
-            if (res.status === 200) {
-                console.log(res) //TODO show notification
-            } else {
-                console.log(res) //TODO show notification
-            }
-        })
-    }
-
-    copy = () => {
-        this.copyToClipboard(this.getCode());
-    }
-
-    copyToClipboard = (data: string) => {
-        const listener = (e: ClipboardEvent) => {
-            e.clipboardData?.setData('text/plain', data);
-            e.preventDefault();
-            document.removeEventListener('copy', listener);
-        };
-        document.addEventListener('copy', listener);
-        document.execCommand('copy');
-    }
-
-    unselectElement = (evt: React.MouseEvent) => {
-        evt.stopPropagation();
-        this.setState({selectedStep: undefined, selectedUuid: '', showSelector: false})
-    };
-
-    getCode = (): string => {
-        const clone = CamelYaml.cloneIntegration(this.state.integration);
-        return CamelYaml.integrationToYaml(clone);
-    }
-
-    changeView = (view: "design" | "code") => {
-        this.setState({view: view, selectedStep: undefined, selectedUuid: '', showSelector: false});
-    }
-
-    onPropertyUpdate = (element: CamelElement, updatedUuid: string) => {
-        const clone = CamelYaml.cloneIntegration(this.state.integration);
-        const i = CamelApiExt.updateIntegration(clone, element, updatedUuid);
-        this.setState({integration: i, key: Math.random().toString()})
-    }
-
-    deleteElement = (id: string) => {
-        const i = CamelApiExt.deleteStepFromIntegration(this.state.integration, id);
-        this.setState({integration: i, showSelector: false})
-    }
-
-    selectElement = (element: CamelElement) => {
-        this.setState({selectedStep: element, selectedUuid: element.uuid, showSelector: false})
-    }
-
-    openSelector = (parentId: string | undefined, parentType: string | undefined) => {
-        this.setState({showSelector: true, parentId: parentId || '', parentType: parentType || ''})
-    }
-
-    closeDslSelector = () => {
-        this.setState({showSelector: false})
-    }
-
-    onDslSelect = (dsl: DslMetaModel, parentId: string) => {
-        switch (dsl.name){
-            case 'from' :
-                const from = CamelApi.createStep(dsl.name, {from:{uri:dsl.uri}});
-                this.addStep(from, parentId)
-                break;
-            case 'to' :
-                const to = CamelApi.createStep(dsl.name, {to:{uri:dsl.uri}});
-                this.addStep(to, parentId)
-                break;
-            default:
-                const step = CamelApi.createStep(dsl.name, {});
-                this.addStep(step, parentId)
-                break;
-        }
-    }
-
-    addStep = (step: CamelElement, parentId: string) =>{
-        const i = CamelApiExt.addStepToIntegration(this.state.integration, step, parentId);
-        const clone = CamelYaml.cloneIntegration(i);
-        this.setState({integration: clone, key: Math.random().toString(), showSelector: false})
-    }
-
-    onIntegrationUpdate = (i: Integration) => {
-        this.setState({integration: i, showSelector: false});
-    };
-
-    tools = (view: "design" | "code") => (
-        <Toolbar id="toolbar-group-types">
-            <ToolbarContent>
-                {this.props.mode === 'cloud' &&
-                <ToolbarItem>
-                    <Button variant="secondary" icon={<PublishIcon/>} onClick={e => this.publish()}>Publish</Button>
-                </ToolbarItem>
-                }
-                {this.props.mode === 'local' &&
-                <ToolbarItem>
-                    <Button variant="secondary" icon={<CopyIcon/>} onClick={e => this.copy()}>Copy</Button>
-                </ToolbarItem>
-                }
-                <ToolbarItem>
-                    <Button variant="secondary" icon={<SaveIcon/>} onClick={e => this.save()}>Save</Button>
-                </ToolbarItem>
-                {view === 'design' &&
-                <ToolbarItem>
-                    <Button icon={<PlusIcon/>} onClick={e => this.openSelector(undefined, undefined)}>Add
-                        flow</Button>
-                </ToolbarItem>
-                }
-            </ToolbarContent>
-        </Toolbar>);
-
-    title = (view: "design" | "code") => (
-        <div className="dsl-title">
-            <TextContent className="title">
-                <Text component="h1">Designer</Text>
-            </TextContent>
-            <ToggleGroup aria-label="Switch view" className="toggle">
-                <ToggleGroupItem text="Design" buttonId="design" isSelected={view === 'design'}
-                                 onChange={e => this.changeView('design')}/>
-                <ToggleGroupItem text="YAML" buttonId="yaml" isSelected={view === 'code'}
-                                 onChange={e => this.changeView('code')}/>
-            </ToggleGroup>
-        </div>
-    );
-
-    render() {
-        return (
-            <PageSection className="dsl-page" isFilled padding={{default: 'noPadding'}}>
-                <MainToolbar title={this.title(this.state.view)}
-                             tools={this.tools(this.state.view)}/>
-                <div className="dsl-page-columns">
-                    {this.state.view === 'design' &&
-                    <div className="flows" onClick={event => this.unselectElement(event)}>
-                        <DslConnections key={this.state.key + "-connections"}
-                            integration={this.state.integration}
-                        />
-                        {this.state.integration.spec.flows.map((flow, index) => (
-                                <DslElement key={flow.uuid + this.state.key}
-                                        openSelector={this.openSelector}
-                                        deleteElement={this.deleteElement}
-                                        selectElement={this.selectElement}
-                                        selectedUuid={this.state.selectedUuid}
-                                        step={flow}/>
-                        ))}
-                    </div>
-                    }
-                    {this.state.view === 'code' &&
-                    <div className="yaml-code">
-                        <CodeBlock className="route-code">
-                            <CodeBlockCode id="code-content">{this.getCode()}</CodeBlockCode>
-                        </CodeBlock>
-                    </div>
-                    }
-                    {this.state.view === 'design' &&
-                    <DslProperties
-                        integration={this.state.integration}
-                        step={this.state.selectedStep}
-                        onIntegrationUpdate={this.onIntegrationUpdate}
-                        onPropertyUpdate={this.onPropertyUpdate}
-                        onChangeView={this.changeView}
-                    />
-                    }
-                </div>
-                <DslSelector
-                    parentId={this.state.parentId}
-                    parentType={this.state.parentType}
-                    show={this.state.showSelector}
-                    onDslSelect={this.onDslSelect}
-                    onClose={this.closeDslSelector}/>
-            </PageSection>
-        );
-    }
-};
diff --git a/karavan-app/src/main/webapp/src/designer/api/CamelApi.tsx b/karavan-app/src/main/webapp/src/designer/api/CamelApi.tsx
deleted file mode 100644
index 90778e5..0000000
--- a/karavan-app/src/main/webapp/src/designer/api/CamelApi.tsx
+++ /dev/null
@@ -1,905 +0,0 @@
-/**
- * Generated by karavan build tools - do NOT edit this file!
- */
-import {    CamelElement, 
-    ProcessorStep, 
-    FromStep, 
-    Expression, 
-    PolicyStep, 
-    SetPropertyStep, 
-    SagaStep, 
-    TodStep, 
-    ThreadsStep, 
-    InterceptSendToEndpointStep, 
-    LogStep, 
-    LoopStep, 
-    DelayStep, 
-    SampleStep, 
-    DoFinallyStep, 
-    LoadBalanceStep, 
-    ValidateStep, 
-    TransformStep, 
-    RemoveHeadersStep, 
-    IdempotentConsumerStep, 
-    InterceptStep, 
-    WhenStep, 
-    ProcessStep, 
-    OnFallbackStep, 
-    MarshalStep, 
-    OnCompletionStep, 
-    ClaimCheckStep, 
-    DoCatchStep, 
-    InOnlyStep, 
-    ConvertBodyToStep, 
-    CircuitBreakerStep, 
-    PollEnrichStep, 
-    Otherwise, 
-    ResequenceStep, 
-    RoutingSlipStep, 
-    BeanStep, 
-    RecipientListStep, 
-    DynamicRouterStep, 
-    RollbackStep, 
-    EnrichStep, 
-    InOutStep, 
-    SplitStep, 
-    WireTapStep, 
-    MulticastStep, 
-    StopStep, 
-    SetBodyStep, 
-    SortStep, 
-    InterceptFromStep, 
-    ThrowExceptionStep, 
-    ToStep, 
-    FilterStep, 
-    ServiceCallStep, 
-    ThrottleStep, 
-    WhenSkipSendToEndpointStep, 
-    RemovePropertiesStep, 
-    SetHeaderStep, 
-    ChoiceStep, 
-    AggregateStep, 
-    RemovePropertyStep, 
-    RemoveHeaderStep, 
-    ScriptStep, 
-    DoTryStep, 
-    SetExchangePatternStep, 
-    TransactedStep, 
-    PipelineStep, 
-    UnmarshalStep, 
-} from '../model/CamelModel' 
-
-export class CamelApi { 
-
-    static createStep = (name: string, body: any): CamelElement => {
-       switch (name){
-            case 'from': return CamelApi.createFrom(body)
-            case 'expression': return CamelApi.createExpression(body)
-            case 'policy': return CamelApi.createPolicy(body)
-            case 'setProperty': return CamelApi.createSetProperty(body)
-            case 'saga': return CamelApi.createSaga(body)
-            case 'tod': return CamelApi.createTod(body)
-            case 'threads': return CamelApi.createThreads(body)
-            case 'interceptSendToEndpoint': return CamelApi.createInterceptSendToEndpoint(body)
-            case 'log': return CamelApi.createLog(body)
-            case 'loop': return CamelApi.createLoop(body)
-            case 'delay': return CamelApi.createDelay(body)
-            case 'sample': return CamelApi.createSample(body)
-            case 'doFinally': return CamelApi.createDoFinally(body)
-            case 'loadBalance': return CamelApi.createLoadBalance(body)
-            case 'validate': return CamelApi.createValidate(body)
-            case 'transform': return CamelApi.createTransform(body)
-            case 'removeHeaders': return CamelApi.createRemoveHeaders(body)
-            case 'idempotentConsumer': return CamelApi.createIdempotentConsumer(body)
-            case 'intercept': return CamelApi.createIntercept(body)
-            case 'when': return CamelApi.createWhen(body)
-            case 'process': return CamelApi.createProcess(body)
-            case 'onFallback': return CamelApi.createOnFallback(body)
-            case 'marshal': return CamelApi.createMarshal(body)
-            case 'onCompletion': return CamelApi.createOnCompletion(body)
-            case 'claimCheck': return CamelApi.createClaimCheck(body)
-            case 'doCatch': return CamelApi.createDoCatch(body)
-            case 'inOnly': return CamelApi.createInOnly(body)
-            case 'convertBodyTo': return CamelApi.createConvertBodyTo(body)
-            case 'circuitBreaker': return CamelApi.createCircuitBreaker(body)
-            case 'pollEnrich': return CamelApi.createPollEnrich(body)
-            case 'otherwise': return CamelApi.createOtherwise(body)
-            case 'resequence': return CamelApi.createResequence(body)
-            case 'routingSlip': return CamelApi.createRoutingSlip(body)
-            case 'bean': return CamelApi.createBean(body)
-            case 'recipientList': return CamelApi.createRecipientList(body)
-            case 'dynamicRouter': return CamelApi.createDynamicRouter(body)
-            case 'rollback': return CamelApi.createRollback(body)
-            case 'enrich': return CamelApi.createEnrich(body)
-            case 'inOut': return CamelApi.createInOut(body)
-            case 'split': return CamelApi.createSplit(body)
-            case 'wireTap': return CamelApi.createWireTap(body)
-            case 'multicast': return CamelApi.createMulticast(body)
-            case 'stop': return CamelApi.createStop(body)
-            case 'setBody': return CamelApi.createSetBody(body)
-            case 'sort': return CamelApi.createSort(body)
-            case 'interceptFrom': return CamelApi.createInterceptFrom(body)
-            case 'throwException': return CamelApi.createThrowException(body)
-            case 'to': return CamelApi.createTo(body)
-            case 'filter': return CamelApi.createFilter(body)
-            case 'serviceCall': return CamelApi.createServiceCall(body)
-            case 'throttle': return CamelApi.createThrottle(body)
-            case 'whenSkipSendToEndpoint': return CamelApi.createWhenSkipSendToEndpoint(body)
-            case 'removeProperties': return CamelApi.createRemoveProperties(body)
-            case 'setHeader': return CamelApi.createSetHeader(body)
-            case 'choice': return CamelApi.createChoice(body)
-            case 'aggregate': return CamelApi.createAggregate(body)
-            case 'removeProperty': return CamelApi.createRemoveProperty(body)
-            case 'removeHeader': return CamelApi.createRemoveHeader(body)
-            case 'script': return CamelApi.createScript(body)
-            case 'doTry': return CamelApi.createDoTry(body)
-            case 'setExchangePattern': return CamelApi.createSetExchangePattern(body)
-            case 'transacted': return CamelApi.createTransacted(body)
-            case 'pipeline': return CamelApi.createPipeline(body)
-            case 'unmarshal': return CamelApi.createUnmarshal(body)
-            default: return new ProcessorStep('') 
-        }
-    }
-    static createExpression = (element: any): Expression => {
-        return new Expression({...element})
-    }
-    static createFrom = (element: any): FromStep => {
-        const fromStep = element ? new FromStep({...element.from}) : new FromStep()
-        fromStep.from.steps = CamelApi.createSteps(element?.from?.steps)
-        fromStep.uuid = element?.uuid ? element.uuid : fromStep.uuid
-        return fromStep
-    }
-
-    static createPolicy = (element: any): PolicyStep => {
-        const policyStep = element ? new PolicyStep({...element.policy}) : new PolicyStep()
-        policyStep.policy.steps = CamelApi.createSteps(element?.policy?.steps)
-        policyStep.uuid = element?.uuid ? element.uuid : policyStep.uuid
-        return policyStep
-    }
-
-    static createSetProperty = (element: any): SetPropertyStep => {
-        const setPropertyStep = element ? new SetPropertyStep({...element.setProperty}) : new SetPropertyStep()
-        setPropertyStep.setProperty.expression = CamelApi.createExpression(element?.setProperty?.expression)
-        setPropertyStep.uuid = element?.uuid ? element.uuid : setPropertyStep.uuid
-        return setPropertyStep
-    }
-
-    static createSaga = (element: any): SagaStep => {
-        const sagaStep = element ? new SagaStep({...element.saga}) : new SagaStep()
-        sagaStep.saga.steps = CamelApi.createSteps(element?.saga?.steps)
-        sagaStep.uuid = element?.uuid ? element.uuid : sagaStep.uuid
-        return sagaStep
-    }
-
-    static createTod = (element: any): TodStep => {
-        const todStep = element ? new TodStep({...element.tod}) : new TodStep()
-        todStep.uuid = element?.uuid ? element.uuid : todStep.uuid
-        return todStep
-    }
-
-    static createThreads = (element: any): ThreadsStep => {
-        const threadsStep = element ? new ThreadsStep({...element.threads}) : new ThreadsStep()
-        threadsStep.uuid = element?.uuid ? element.uuid : threadsStep.uuid
-        return threadsStep
-    }
-
-    static createInterceptSendToEndpoint = (element: any): InterceptSendToEndpointStep => {
-        const interceptSendToEndpointStep = element ? new InterceptSendToEndpointStep({...element.interceptSendToEndpoint}) : new InterceptSendToEndpointStep()
-        interceptSendToEndpointStep.interceptSendToEndpoint.steps = CamelApi.createSteps(element?.interceptSendToEndpoint?.steps)
-        interceptSendToEndpointStep.uuid = element?.uuid ? element.uuid : interceptSendToEndpointStep.uuid
-        return interceptSendToEndpointStep
-    }
-
-    static createLog = (element: any): LogStep => {
-        const logStep = element ? new LogStep({...element.log}) : new LogStep()
-        logStep.uuid = element?.uuid ? element.uuid : logStep.uuid
-        return logStep
-    }
-
-    static createLoop = (element: any): LoopStep => {
-        const loopStep = element ? new LoopStep({...element.loop}) : new LoopStep()
-        loopStep.loop.expression = CamelApi.createExpression(element?.loop?.expression)
-        loopStep.loop.steps = CamelApi.createSteps(element?.loop?.steps)
-        loopStep.uuid = element?.uuid ? element.uuid : loopStep.uuid
-        return loopStep
-    }
-
-    static createDelay = (element: any): DelayStep => {
-        const delayStep = element ? new DelayStep({...element.delay}) : new DelayStep()
-        delayStep.delay.expression = CamelApi.createExpression(element?.delay?.expression)
-        delayStep.uuid = element?.uuid ? element.uuid : delayStep.uuid
-        return delayStep
-    }
-
-    static createSample = (element: any): SampleStep => {
-        const sampleStep = element ? new SampleStep({...element.sample}) : new SampleStep()
-        sampleStep.uuid = element?.uuid ? element.uuid : sampleStep.uuid
-        return sampleStep
-    }
-
-    static createDoFinally = (element: any): DoFinallyStep => {
-        const doFinallyStep = element ? new DoFinallyStep({...element.doFinally}) : new DoFinallyStep()
-        doFinallyStep.doFinally.steps = CamelApi.createSteps(element?.doFinally?.steps)
-        doFinallyStep.uuid = element?.uuid ? element.uuid : doFinallyStep.uuid
-        return doFinallyStep
-    }
-
-    static createLoadBalance = (element: any): LoadBalanceStep => {
-        const loadBalanceStep = element ? new LoadBalanceStep({...element.loadBalance}) : new LoadBalanceStep()
-        loadBalanceStep.loadBalance.steps = CamelApi.createSteps(element?.loadBalance?.steps)
-        loadBalanceStep.uuid = element?.uuid ? element.uuid : loadBalanceStep.uuid
-        return loadBalanceStep
-    }
-
-    static createValidate = (element: any): ValidateStep => {
-        const validateStep = element ? new ValidateStep({...element.validate}) : new ValidateStep()
-        validateStep.validate.expression = CamelApi.createExpression(element?.validate?.expression)
-        validateStep.uuid = element?.uuid ? element.uuid : validateStep.uuid
-        return validateStep
-    }
-
-    static createTransform = (element: any): TransformStep => {
-        const transformStep = element ? new TransformStep({...element.transform}) : new TransformStep()
-        transformStep.transform.expression = CamelApi.createExpression(element?.transform?.expression)
-        transformStep.uuid = element?.uuid ? element.uuid : transformStep.uuid
-        return transformStep
-    }
-
-    static createRemoveHeaders = (element: any): RemoveHeadersStep => {
-        const removeHeadersStep = element ? new RemoveHeadersStep({...element.removeHeaders}) : new RemoveHeadersStep()
-        removeHeadersStep.uuid = element?.uuid ? element.uuid : removeHeadersStep.uuid
-        return removeHeadersStep
-    }
-
-    static createIdempotentConsumer = (element: any): IdempotentConsumerStep => {
-        const idempotentConsumerStep = element ? new IdempotentConsumerStep({...element.idempotentConsumer}) : new IdempotentConsumerStep()
-        idempotentConsumerStep.idempotentConsumer.expression = CamelApi.createExpression(element?.idempotentConsumer?.expression)
-        idempotentConsumerStep.idempotentConsumer.steps = CamelApi.createSteps(element?.idempotentConsumer?.steps)
-        idempotentConsumerStep.uuid = element?.uuid ? element.uuid : idempotentConsumerStep.uuid
-        return idempotentConsumerStep
-    }
-
-    static createIntercept = (element: any): InterceptStep => {
-        const interceptStep = element ? new InterceptStep({...element.intercept}) : new InterceptStep()
-        interceptStep.intercept.steps = CamelApi.createSteps(element?.intercept?.steps)
-        interceptStep.uuid = element?.uuid ? element.uuid : interceptStep.uuid
-        return interceptStep
-    }
-
-    static createWhen = (element: any): WhenStep => {
-        const whenStep = element ? new WhenStep({...element.when}) : new WhenStep()
-        whenStep.when.expression = CamelApi.createExpression(element?.when?.expression)
-        whenStep.when.steps = CamelApi.createSteps(element?.when?.steps)
-        whenStep.uuid = element?.uuid ? element.uuid : whenStep.uuid
-        return whenStep
-    }
-
-    static createProcess = (element: any): ProcessStep => {
-        const processStep = element ? new ProcessStep({...element.process}) : new ProcessStep()
-        processStep.uuid = element?.uuid ? element.uuid : processStep.uuid
-        return processStep
-    }
-
-    static createOnFallback = (element: any): OnFallbackStep => {
-        const onFallbackStep = element ? new OnFallbackStep({...element.onFallback}) : new OnFallbackStep()
-        onFallbackStep.onFallback.steps = CamelApi.createSteps(element?.onFallback?.steps)
-        onFallbackStep.uuid = element?.uuid ? element.uuid : onFallbackStep.uuid
-        return onFallbackStep
-    }
-
-    static createMarshal = (element: any): MarshalStep => {
-        const marshalStep = element ? new MarshalStep({...element.marshal}) : new MarshalStep()
-        marshalStep.uuid = element?.uuid ? element.uuid : marshalStep.uuid
-        return marshalStep
-    }
-
-    static createOnCompletion = (element: any): OnCompletionStep => {
-        const onCompletionStep = element ? new OnCompletionStep({...element.onCompletion}) : new OnCompletionStep()
-        onCompletionStep.onCompletion.onWhen = CamelApi.createWhen(element?.onCompletion?.onWhen)
-        onCompletionStep.onCompletion.steps = CamelApi.createSteps(element?.onCompletion?.steps)
-        onCompletionStep.uuid = element?.uuid ? element.uuid : onCompletionStep.uuid
-        return onCompletionStep
-    }
-
-    static createClaimCheck = (element: any): ClaimCheckStep => {
-        const claimCheckStep = element ? new ClaimCheckStep({...element.claimCheck}) : new ClaimCheckStep()
-        claimCheckStep.uuid = element?.uuid ? element.uuid : claimCheckStep.uuid
-        return claimCheckStep
-    }
-
-    static createDoCatch = (element: any): DoCatchStep => {
-        const doCatchStep = element ? new DoCatchStep({...element.doCatch}) : new DoCatchStep()
-        doCatchStep.doCatch.onWhen = CamelApi.createWhen(element?.doCatch?.onWhen)
-        doCatchStep.doCatch.steps = CamelApi.createSteps(element?.doCatch?.steps)
-        doCatchStep.uuid = element?.uuid ? element.uuid : doCatchStep.uuid
-        return doCatchStep
-    }
-
-    static createInOnly = (element: any): InOnlyStep => {
-        const inOnlyStep = element ? new InOnlyStep({...element.inOnly}) : new InOnlyStep()
-        inOnlyStep.uuid = element?.uuid ? element.uuid : inOnlyStep.uuid
-        return inOnlyStep
-    }
-
-    static createConvertBodyTo = (element: any): ConvertBodyToStep => {
-        const convertBodyToStep = element ? new ConvertBodyToStep({...element.convertBodyTo}) : new ConvertBodyToStep()
-        convertBodyToStep.uuid = element?.uuid ? element.uuid : convertBodyToStep.uuid
-        return convertBodyToStep
-    }
-
-    static createCircuitBreaker = (element: any): CircuitBreakerStep => {
-        const circuitBreakerStep = element ? new CircuitBreakerStep({...element.circuitBreaker}) : new CircuitBreakerStep()
-        circuitBreakerStep.circuitBreaker.onFallback = CamelApi.createOnFallback(element?.circuitBreaker?.onFallback)
-        circuitBreakerStep.circuitBreaker.steps = CamelApi.createSteps(element?.circuitBreaker?.steps)
-        circuitBreakerStep.uuid = element?.uuid ? element.uuid : circuitBreakerStep.uuid
-        return circuitBreakerStep
-    }
-
-    static createPollEnrich = (element: any): PollEnrichStep => {
-        const pollEnrichStep = element ? new PollEnrichStep({...element.pollEnrich}) : new PollEnrichStep()
-        pollEnrichStep.pollEnrich.expression = CamelApi.createExpression(element?.pollEnrich?.expression)
-        pollEnrichStep.uuid = element?.uuid ? element.uuid : pollEnrichStep.uuid
-        return pollEnrichStep
-    }
-
-    static createOtherwise = (element: any): Otherwise => {
-        const otherwise = element ? new Otherwise({...element}) : new Otherwise();
-        otherwise.steps = CamelApi.createSteps(element?.steps);
-        if (element?.uuid) otherwise.uuid = element?.uuid;
-        return otherwise
-    }
-
-    static createResequence = (element: any): ResequenceStep => {
-        const resequenceStep = element ? new ResequenceStep({...element.resequence}) : new ResequenceStep()
-        resequenceStep.resequence.expression = CamelApi.createExpression(element?.resequence?.expression)
-        resequenceStep.resequence.steps = CamelApi.createSteps(element?.resequence?.steps)
-        resequenceStep.uuid = element?.uuid ? element.uuid : resequenceStep.uuid
-        return resequenceStep
-    }
-
-    static createRoutingSlip = (element: any): RoutingSlipStep => {
-        const routingSlipStep = element ? new RoutingSlipStep({...element.routingSlip}) : new RoutingSlipStep()
-        routingSlipStep.routingSlip.expression = CamelApi.createExpression(element?.routingSlip?.expression)
-        routingSlipStep.uuid = element?.uuid ? element.uuid : routingSlipStep.uuid
-        return routingSlipStep
-    }
-
-    static createBean = (element: any): BeanStep => {
-        const beanStep = element ? new BeanStep({...element.bean}) : new BeanStep()
-        beanStep.uuid = element?.uuid ? element.uuid : beanStep.uuid
-        return beanStep
-    }
-
-    static createRecipientList = (element: any): RecipientListStep => {
-        const recipientListStep = element ? new RecipientListStep({...element.recipientList}) : new RecipientListStep()
-        recipientListStep.recipientList.expression = CamelApi.createExpression(element?.recipientList?.expression)
-        recipientListStep.uuid = element?.uuid ? element.uuid : recipientListStep.uuid
-        return recipientListStep
-    }
-
-    static createDynamicRouter = (element: any): DynamicRouterStep => {
-        const dynamicRouterStep = element ? new DynamicRouterStep({...element.dynamicRouter}) : new DynamicRouterStep()
-        dynamicRouterStep.dynamicRouter.expression = CamelApi.createExpression(element?.dynamicRouter?.expression)
-        dynamicRouterStep.uuid = element?.uuid ? element.uuid : dynamicRouterStep.uuid
-        return dynamicRouterStep
-    }
-
-    static createRollback = (element: any): RollbackStep => {
-        const rollbackStep = element ? new RollbackStep({...element.rollback}) : new RollbackStep()
-        rollbackStep.uuid = element?.uuid ? element.uuid : rollbackStep.uuid
-        return rollbackStep
-    }
-
-    static createEnrich = (element: any): EnrichStep => {
-        const enrichStep = element ? new EnrichStep({...element.enrich}) : new EnrichStep()
-        enrichStep.enrich.expression = CamelApi.createExpression(element?.enrich?.expression)
-        enrichStep.uuid = element?.uuid ? element.uuid : enrichStep.uuid
-        return enrichStep
-    }
-
-    static createInOut = (element: any): InOutStep => {
-        const inOutStep = element ? new InOutStep({...element.inOut}) : new InOutStep()
-        inOutStep.uuid = element?.uuid ? element.uuid : inOutStep.uuid
-        return inOutStep
-    }
-
-    static createSplit = (element: any): SplitStep => {
-        const splitStep = element ? new SplitStep({...element.split}) : new SplitStep()
-        splitStep.split.expression = CamelApi.createExpression(element?.split?.expression)
-        splitStep.split.steps = CamelApi.createSteps(element?.split?.steps)
-        splitStep.uuid = element?.uuid ? element.uuid : splitStep.uuid
-        return splitStep
-    }
-
-    static createWireTap = (element: any): WireTapStep => {
-        const wireTapStep = element ? new WireTapStep({...element.wireTap}) : new WireTapStep()
-        wireTapStep.wireTap.body = CamelApi.createExpression(element?.wireTap?.body)
-        wireTapStep.wireTap.setHeader = element && element?.wireTap ? element?.wireTap?.setHeader.map((x:any) => CamelApi.createSetHeader(x)) :[]
-        wireTapStep.uuid = element?.uuid ? element.uuid : wireTapStep.uuid
-        return wireTapStep
-    }
-
-    static createMulticast = (element: any): MulticastStep => {
-        const multicastStep = element ? new MulticastStep({...element.multicast}) : new MulticastStep()
-        multicastStep.multicast.steps = CamelApi.createSteps(element?.multicast?.steps)
-        multicastStep.uuid = element?.uuid ? element.uuid : multicastStep.uuid
-        return multicastStep
-    }
-
-    static createStop = (element: any): StopStep => {
-        const stopStep = element ? new StopStep({...element.stop}) : new StopStep()
-        stopStep.uuid = element?.uuid ? element.uuid : stopStep.uuid
-        return stopStep
-    }
-
-    static createSetBody = (element: any): SetBodyStep => {
-        const setBodyStep = element ? new SetBodyStep({...element.setBody}) : new SetBodyStep()
-        setBodyStep.setBody.expression = CamelApi.createExpression(element?.setBody?.expression)
-        setBodyStep.uuid = element?.uuid ? element.uuid : setBodyStep.uuid
-        return setBodyStep
-    }
-
-    static createSort = (element: any): SortStep => {
-        const sortStep = element ? new SortStep({...element.sort}) : new SortStep()
-        sortStep.sort.expression = CamelApi.createExpression(element?.sort?.expression)
-        sortStep.uuid = element?.uuid ? element.uuid : sortStep.uuid
-        return sortStep
-    }
-
-    static createInterceptFrom = (element: any): InterceptFromStep => {
-        const interceptFromStep = element ? new InterceptFromStep({...element.interceptFrom}) : new InterceptFromStep()
-        interceptFromStep.interceptFrom.steps = CamelApi.createSteps(element?.interceptFrom?.steps)
-        interceptFromStep.uuid = element?.uuid ? element.uuid : interceptFromStep.uuid
-        return interceptFromStep
-    }
-
-    static createThrowException = (element: any): ThrowExceptionStep => {
-        const throwExceptionStep = element ? new ThrowExceptionStep({...element.throwException}) : new ThrowExceptionStep()
-        throwExceptionStep.uuid = element?.uuid ? element.uuid : throwExceptionStep.uuid
-        return throwExceptionStep
-    }
-
-    static createTo = (element: any): ToStep => {
-        const toStep = element ? new ToStep({...element.to}) : new ToStep()
-        toStep.uuid = element?.uuid ? element.uuid : toStep.uuid
-        return toStep
-    }
-
-    static createFilter = (element: any): FilterStep => {
-        const filterStep = element ? new FilterStep({...element.filter}) : new FilterStep()
-        filterStep.filter.expression = CamelApi.createExpression(element?.filter?.expression)
-        filterStep.filter.steps = CamelApi.createSteps(element?.filter?.steps)
-        filterStep.uuid = element?.uuid ? element.uuid : filterStep.uuid
-        return filterStep
-    }
-
-    static createServiceCall = (element: any): ServiceCallStep => {
-        const serviceCallStep = element ? new ServiceCallStep({...element.serviceCall}) : new ServiceCallStep()
-        serviceCallStep.uuid = element?.uuid ? element.uuid : serviceCallStep.uuid
-        return serviceCallStep
-    }
-
-    static createThrottle = (element: any): ThrottleStep => {
-        const throttleStep = element ? new ThrottleStep({...element.throttle}) : new ThrottleStep()
-        throttleStep.throttle.correlationExpression = CamelApi.createExpression(element?.throttle?.correlationExpression)
-        throttleStep.throttle.expression = CamelApi.createExpression(element?.throttle?.expression)
-        throttleStep.uuid = element?.uuid ? element.uuid : throttleStep.uuid
-        return throttleStep
-    }
-
-    static createWhenSkipSendToEndpoint = (element: any): WhenSkipSendToEndpointStep => {
-        const whenSkipSendToEndpointStep = element ? new WhenSkipSendToEndpointStep({...element.whenSkipSendToEndpoint}) : new WhenSkipSendToEndpointStep()
-        whenSkipSendToEndpointStep.whenSkipSendToEndpoint.expression = CamelApi.createExpression(element?.whenSkipSendToEndpoint?.expression)
-        whenSkipSendToEndpointStep.whenSkipSendToEndpoint.steps = CamelApi.createSteps(element?.whenSkipSendToEndpoint?.steps)
-        whenSkipSendToEndpointStep.uuid = element?.uuid ? element.uuid : whenSkipSendToEndpointStep.uuid
-        return whenSkipSendToEndpointStep
-    }
-
-    static createRemoveProperties = (element: any): RemovePropertiesStep => {
-        const removePropertiesStep = element ? new RemovePropertiesStep({...element.removeProperties}) : new RemovePropertiesStep()
-        removePropertiesStep.uuid = element?.uuid ? element.uuid : removePropertiesStep.uuid
-        return removePropertiesStep
-    }
-
-    static createSetHeader = (element: any): SetHeaderStep => {
-        const setHeaderStep = element ? new SetHeaderStep({...element.setHeader}) : new SetHeaderStep()
-        setHeaderStep.setHeader.expression = CamelApi.createExpression(element?.setHeader?.expression)
-        setHeaderStep.uuid = element?.uuid ? element.uuid : setHeaderStep.uuid
-        return setHeaderStep
-    }
-
-    static createChoice = (element: any): ChoiceStep => {
-        const choiceStep = element ? new ChoiceStep({...element.choice}) : new ChoiceStep()
-        choiceStep.choice.otherwise = CamelApi.createOtherwise(element?.choice?.otherwise)
-        choiceStep.choice.when = element && element?.choice ? element?.choice?.when.map((x:any) => CamelApi.createWhen(x)) :[]
-        choiceStep.uuid = element?.uuid ? element.uuid : choiceStep.uuid
-        return choiceStep
-    }
-
-    static createAggregate = (element: any): AggregateStep => {
-        const aggregateStep = element ? new AggregateStep({...element.aggregate}) : new AggregateStep()
-        aggregateStep.aggregate.completionPredicate = CamelApi.createExpression(element?.aggregate?.completionPredicate)
-        aggregateStep.aggregate.completionSizeExpression = CamelApi.createExpression(element?.aggregate?.completionSizeExpression)
-        aggregateStep.aggregate.completionTimeoutExpression = CamelApi.createExpression(element?.aggregate?.completionTimeoutExpression)
-        aggregateStep.aggregate.correlationExpression = CamelApi.createExpression(element?.aggregate?.correlationExpression)
-        aggregateStep.aggregate.steps = CamelApi.createSteps(element?.aggregate?.steps)
-        aggregateStep.uuid = element?.uuid ? element.uuid : aggregateStep.uuid
-        return aggregateStep
-    }
-
-    static createRemoveProperty = (element: any): RemovePropertyStep => {
-        const removePropertyStep = element ? new RemovePropertyStep({...element.removeProperty}) : new RemovePropertyStep()
-        removePropertyStep.uuid = element?.uuid ? element.uuid : removePropertyStep.uuid
-        return removePropertyStep
-    }
-
-    static createRemoveHeader = (element: any): RemoveHeaderStep => {
-        const removeHeaderStep = element ? new RemoveHeaderStep({...element.removeHeader}) : new RemoveHeaderStep()
-        removeHeaderStep.uuid = element?.uuid ? element.uuid : removeHeaderStep.uuid
-        return removeHeaderStep
-    }
-
-    static createScript = (element: any): ScriptStep => {
-        const scriptStep = element ? new ScriptStep({...element.script}) : new ScriptStep()
-        scriptStep.script.expression = CamelApi.createExpression(element?.script?.expression)
-        scriptStep.uuid = element?.uuid ? element.uuid : scriptStep.uuid
-        return scriptStep
-    }
-
-    static createDoTry = (element: any): DoTryStep => {
-        const doTryStep = element ? new DoTryStep({...element.doTry}) : new DoTryStep()
-        doTryStep.doTry.doCatch = element && element?.doTry ? element?.doTry?.doCatch.map((x:any) => CamelApi.createDoCatch(x)) :[]
-        doTryStep.doTry.doFinally = CamelApi.createDoFinally(element?.doTry?.doFinally)
-        doTryStep.doTry.steps = CamelApi.createSteps(element?.doTry?.steps)
-        doTryStep.uuid = element?.uuid ? element.uuid : doTryStep.uuid
-        return doTryStep
-    }
-
-    static createSetExchangePattern = (element: any): SetExchangePatternStep => {
-        const setExchangePatternStep = element ? new SetExchangePatternStep({...element.setExchangePattern}) : new SetExchangePatternStep()
-        setExchangePatternStep.uuid = element?.uuid ? element.uuid : setExchangePatternStep.uuid
-        return setExchangePatternStep
-    }
-
-    static createTransacted = (element: any): TransactedStep => {
-        const transactedStep = element ? new TransactedStep({...element.transacted}) : new TransactedStep()
-        transactedStep.transacted.steps = CamelApi.createSteps(element?.transacted?.steps)
-        transactedStep.uuid = element?.uuid ? element.uuid : transactedStep.uuid
-        return transactedStep
-    }
-
-    static createPipeline = (element: any): PipelineStep => {
-        const pipelineStep = element ? new PipelineStep({...element.pipeline}) : new PipelineStep()
-        pipelineStep.pipeline.steps = CamelApi.createSteps(element?.pipeline?.steps)
-        pipelineStep.uuid = element?.uuid ? element.uuid : pipelineStep.uuid
-        return pipelineStep
-    }
-
-    static createUnmarshal = (element: any): UnmarshalStep => {
-        const unmarshalStep = element ? new UnmarshalStep({...element.unmarshal}) : new UnmarshalStep()
-        unmarshalStep.uuid = element?.uuid ? element.uuid : unmarshalStep.uuid
-        return unmarshalStep
-    }
-
-    static createSteps = (elements: any[] | undefined): ProcessorStep[] => {
-        const result: ProcessorStep[] = []
-        if (elements !== undefined){
-            elements.forEach(e => {
-                const stepName = Object.keys(e).filter(key => !['uuid', 'dslName'].includes(key))[0];
-                result.push(CamelApi.createStep(stepName, e));
-            })
-        }
-        return result
-    }
-
-    static elementFromStep = (step: CamelElement): CamelElement => {
-        switch (step.dslName){
-            case 'fromStep' : return (step as FromStep).from
-            case 'policyStep': return (step as PolicyStep).policy
-            case 'setPropertyStep': return (step as SetPropertyStep).setProperty
-            case 'sagaStep': return (step as SagaStep).saga
-            case 'todStep': return (step as TodStep).tod
-            case 'threadsStep': return (step as ThreadsStep).threads
-            case 'interceptSendToEndpointStep': return (step as InterceptSendToEndpointStep).interceptSendToEndpoint
-            case 'logStep': return (step as LogStep).log
-            case 'loopStep': return (step as LoopStep).loop
-            case 'delayStep': return (step as DelayStep).delay
-            case 'sampleStep': return (step as SampleStep).sample
-            case 'doFinallyStep': return (step as DoFinallyStep).doFinally
-            case 'loadBalanceStep': return (step as LoadBalanceStep).loadBalance
-            case 'validateStep': return (step as ValidateStep).validate
-            case 'transformStep': return (step as TransformStep).transform
-            case 'removeHeadersStep': return (step as RemoveHeadersStep).removeHeaders
-            case 'idempotentConsumerStep': return (step as IdempotentConsumerStep).idempotentConsumer
-            case 'interceptStep': return (step as InterceptStep).intercept
-            case 'whenStep': return (step as WhenStep).when
-            case 'processStep': return (step as ProcessStep).process
-            case 'onFallbackStep': return (step as OnFallbackStep).onFallback
-            case 'marshalStep': return (step as MarshalStep).marshal
-            case 'onCompletionStep': return (step as OnCompletionStep).onCompletion
-            case 'claimCheckStep': return (step as ClaimCheckStep).claimCheck
-            case 'doCatchStep': return (step as DoCatchStep).doCatch
-            case 'inOnlyStep': return (step as InOnlyStep).inOnly
-            case 'convertBodyToStep': return (step as ConvertBodyToStep).convertBodyTo
-            case 'circuitBreakerStep': return (step as CircuitBreakerStep).circuitBreaker
-            case 'pollEnrichStep': return (step as PollEnrichStep).pollEnrich
-            case 'otherwise': return (step as Otherwise)
-            case 'resequenceStep': return (step as ResequenceStep).resequence
-            case 'routingSlipStep': return (step as RoutingSlipStep).routingSlip
-            case 'beanStep': return (step as BeanStep).bean
-            case 'recipientListStep': return (step as RecipientListStep).recipientList
-            case 'dynamicRouterStep': return (step as DynamicRouterStep).dynamicRouter
-            case 'rollbackStep': return (step as RollbackStep).rollback
-            case 'enrichStep': return (step as EnrichStep).enrich
-            case 'inOutStep': return (step as InOutStep).inOut
-            case 'splitStep': return (step as SplitStep).split
-            case 'wireTapStep': return (step as WireTapStep).wireTap
-            case 'multicastStep': return (step as MulticastStep).multicast
-            case 'stopStep': return (step as StopStep).stop
-            case 'setBodyStep': return (step as SetBodyStep).setBody
-            case 'sortStep': return (step as SortStep).sort
-            case 'interceptFromStep': return (step as InterceptFromStep).interceptFrom
-            case 'throwExceptionStep': return (step as ThrowExceptionStep).throwException
-            case 'toStep': return (step as ToStep).to
-            case 'filterStep': return (step as FilterStep).filter
-            case 'serviceCallStep': return (step as ServiceCallStep).serviceCall
-            case 'throttleStep': return (step as ThrottleStep).throttle
-            case 'whenSkipSendToEndpointStep': return (step as WhenSkipSendToEndpointStep).whenSkipSendToEndpoint
-            case 'removePropertiesStep': return (step as RemovePropertiesStep).removeProperties
-            case 'setHeaderStep': return (step as SetHeaderStep).setHeader
-            case 'choiceStep': return (step as ChoiceStep).choice
-            case 'aggregateStep': return (step as AggregateStep).aggregate
-            case 'removePropertyStep': return (step as RemovePropertyStep).removeProperty
-            case 'removeHeaderStep': return (step as RemoveHeaderStep).removeHeader
-            case 'scriptStep': return (step as ScriptStep).script
-            case 'doTryStep': return (step as DoTryStep).doTry
-            case 'setExchangePatternStep': return (step as SetExchangePatternStep).setExchangePattern
-            case 'transactedStep': return (step as TransactedStep).transacted
-            case 'pipelineStep': return (step as PipelineStep).pipeline
-            case 'unmarshalStep': return (step as UnmarshalStep).unmarshal
-            default : return new CamelElement('')
-        }
-    }
-    static addStep = (steps: ProcessorStep[], step: ProcessorStep, parentId: string): ProcessorStep[] => {
-        const result: ProcessorStep[] = [];
-        steps.forEach(el => {
-            switch (el.dslName) {
-                case 'policyStep':
-                    const policyChildren = (el as PolicyStep).policy?.steps || [];
-                    if (el.uuid === parentId) policyChildren.push(step)
-                    else (el as PolicyStep).policy.steps = CamelApi.addStep(policyChildren, step, parentId);
-                    break;
-                case 'choiceStep':
-                    const choiceChildren = (el as ChoiceStep).choice?.when || [];
-                    if (el.uuid === parentId && step.dslName === 'whenStep') {
-                        choiceChildren.push(step as WhenStep);
-                        (el as ChoiceStep).choice.when = choiceChildren;
-                    }  else if (el.uuid === parentId && step.dslName === 'otherwise' && !(el as ChoiceStep).choice.otherwise) {
-                        (el as ChoiceStep).choice.otherwise = step;
-                    } else {
-                        (el as ChoiceStep).choice.when = CamelApi.addStep(choiceChildren, step, parentId) as WhenStep[];
-                        const otherwise = (el as ChoiceStep).choice.otherwise;
-                        if (otherwise?.uuid === parentId){
-                            otherwise.steps = otherwise.steps ? [...otherwise.steps] : [];
-                            otherwise.steps.push(step);
-                            (el as ChoiceStep).choice.otherwise = otherwise
-                        } else if (otherwise && otherwise.steps && otherwise.steps.length > 0){
-                            otherwise.steps = CamelApi.addStep(otherwise.steps, step, parentId);
-                            (el as ChoiceStep).choice.otherwise = otherwise;
-                        }
-                    }
-                    break;
-                case 'otherwise':
-                    const otherwiseChildren = (el as Otherwise).steps || [];
-                    if (el.uuid === parentId) otherwiseChildren.push(step)
-                    else (el as Otherwise).steps = CamelApi.addStep(otherwiseChildren, step, parentId);
-                    break;
-                case 'fromStep':
-                    const fromChildren = (el as FromStep).from?.steps || [];
-                    if (el.uuid === parentId) fromChildren.push(step)
-                    else (el as FromStep).from.steps = CamelApi.addStep(fromChildren, step, parentId);
-                    break;
-                case 'onCompletionStep':
-                    const onCompletionChildren = (el as OnCompletionStep).onCompletion?.steps || [];
-                    if (el.uuid === parentId) onCompletionChildren.push(step)
-                    else (el as OnCompletionStep).onCompletion.steps = CamelApi.addStep(onCompletionChildren, step, parentId);
-                    break;
-                case 'splitStep':
-                    const splitChildren = (el as SplitStep).split?.steps || [];
-                    if (el.uuid === parentId) splitChildren.push(step)
-                    else (el as SplitStep).split.steps = CamelApi.addStep(splitChildren, step, parentId);
-                    break;
-                case 'transactedStep':
-                    const transactedChildren = (el as TransactedStep).transacted?.steps || [];
-                    if (el.uuid === parentId) transactedChildren.push(step)
-                    else (el as TransactedStep).transacted.steps = CamelApi.addStep(transactedChildren, step, parentId);
-                    break;
-                case 'interceptFromStep':
-                    const interceptFromChildren = (el as InterceptFromStep).interceptFrom?.steps || [];
-                    if (el.uuid === parentId) interceptFromChildren.push(step)
-                    else (el as InterceptFromStep).interceptFrom.steps = CamelApi.addStep(interceptFromChildren, step, parentId);
-                    break;
-                case 'doCatchStep':
-                    const doCatchChildren = (el as DoCatchStep).doCatch?.steps || [];
-                    if (el.uuid === parentId) doCatchChildren.push(step)
-                    else (el as DoCatchStep).doCatch.steps = CamelApi.addStep(doCatchChildren, step, parentId);
-                    break;
-                case 'circuitBreakerStep':
-                    const circuitBreakerChildren = (el as CircuitBreakerStep).circuitBreaker?.steps || [];
-                    if (el.uuid === parentId) circuitBreakerChildren.push(step)
-                    else (el as CircuitBreakerStep).circuitBreaker.steps = CamelApi.addStep(circuitBreakerChildren, step, parentId);
-                    break;
-                case 'interceptStep':
-                    const interceptChildren = (el as InterceptStep).intercept?.steps || [];
-                    if (el.uuid === parentId) interceptChildren.push(step)
-                    else (el as InterceptStep).intercept.steps = CamelApi.addStep(interceptChildren, step, parentId);
-                    break;
-                case 'onFallbackStep':
-                    const onFallbackChildren = (el as OnFallbackStep).onFallback?.steps || [];
-                    if (el.uuid === parentId) onFallbackChildren.push(step)
-                    else (el as OnFallbackStep).onFallback.steps = CamelApi.addStep(onFallbackChildren, step, parentId);
-                    break;
-                case 'multicastStep':
-                    const multicastChildren = (el as MulticastStep).multicast?.steps || [];
-                    if (el.uuid === parentId) multicastChildren.push(step)
-                    else (el as MulticastStep).multicast.steps = CamelApi.addStep(multicastChildren, step, parentId);
-                    break;
-                case 'loadBalanceStep':
-                    const loadBalanceChildren = (el as LoadBalanceStep).loadBalance?.steps || [];
-                    if (el.uuid === parentId) loadBalanceChildren.push(step)
-                    else (el as LoadBalanceStep).loadBalance.steps = CamelApi.addStep(loadBalanceChildren, step, parentId);
-                    break;
-                case 'whenSkipSendToEndpointStep':
-                    const whenSkipSendToEndpointChildren = (el as WhenSkipSendToEndpointStep).whenSkipSendToEndpoint?.steps || [];
-                    if (el.uuid === parentId) whenSkipSendToEndpointChildren.push(step)
-                    else (el as WhenSkipSendToEndpointStep).whenSkipSendToEndpoint.steps = CamelApi.addStep(whenSkipSendToEndpointChildren, step, parentId);
-                    break;
-                case 'loopStep':
-                    const loopChildren = (el as LoopStep).loop?.steps || [];
-                    if (el.uuid === parentId) loopChildren.push(step)
-                    else (el as LoopStep).loop.steps = CamelApi.addStep(loopChildren, step, parentId);
-                    break;
-                case 'interceptSendToEndpointStep':
-                    const interceptSendToEndpointChildren = (el as InterceptSendToEndpointStep).interceptSendToEndpoint?.steps || [];
-                    if (el.uuid === parentId) interceptSendToEndpointChildren.push(step)
-                    else (el as InterceptSendToEndpointStep).interceptSendToEndpoint.steps = CamelApi.addStep(interceptSendToEndpointChildren, step, parentId);
-                    break;
-                case 'doTryStep':
-                    const doTryChildren = (el as DoTryStep).doTry?.steps || [];
-                    if (el.uuid === parentId) doTryChildren.push(step)
-                    else (el as DoTryStep).doTry.steps = CamelApi.addStep(doTryChildren, step, parentId);
-                    break;
-                case 'resequenceStep':
-                    const resequenceChildren = (el as ResequenceStep).resequence?.steps || [];
-                    if (el.uuid === parentId) resequenceChildren.push(step)
-                    else (el as ResequenceStep).resequence.steps = CamelApi.addStep(resequenceChildren, step, parentId);
-                    break;
-                case 'pipelineStep':
-                    const pipelineChildren = (el as PipelineStep).pipeline?.steps || [];
-                    if (el.uuid === parentId) pipelineChildren.push(step)
-                    else (el as PipelineStep).pipeline.steps = CamelApi.addStep(pipelineChildren, step, parentId);
-                    break;
-                case 'sagaStep':
-                    const sagaChildren = (el as SagaStep).saga?.steps || [];
-                    if (el.uuid === parentId) sagaChildren.push(step)
-                    else (el as SagaStep).saga.steps = CamelApi.addStep(sagaChildren, step, parentId);
-                    break;
-                case 'whenStep':
-                    const whenChildren = (el as WhenStep).when?.steps || [];
-                    if (el.uuid === parentId) whenChildren.push(step)
-                    else (el as WhenStep).when.steps = CamelApi.addStep(whenChildren, step, parentId);
-                    break;
-                case 'doFinallyStep':
-                    const doFinallyChildren = (el as DoFinallyStep).doFinally?.steps || [];
-                    if (el.uuid === parentId) doFinallyChildren.push(step)
-                    else (el as DoFinallyStep).doFinally.steps = CamelApi.addStep(doFinallyChildren, step, parentId);
-                    break;
-                case 'filterStep':
-                    const filterChildren = (el as FilterStep).filter?.steps || [];
-                    if (el.uuid === parentId) filterChildren.push(step)
-                    else (el as FilterStep).filter.steps = CamelApi.addStep(filterChildren, step, parentId);
-                    break;
-                case 'aggregateStep':
-                    const aggregateChildren = (el as AggregateStep).aggregate?.steps || [];
-                    if (el.uuid === parentId) aggregateChildren.push(step)
-                    else (el as AggregateStep).aggregate.steps = CamelApi.addStep(aggregateChildren, step, parentId);
-                    break;
-                case 'idempotentConsumerStep':
-                    const idempotentConsumerChildren = (el as IdempotentConsumerStep).idempotentConsumer?.steps || [];
-                    if (el.uuid === parentId) idempotentConsumerChildren.push(step)
-                    else (el as IdempotentConsumerStep).idempotentConsumer.steps = CamelApi.addStep(idempotentConsumerChildren, step, parentId);
-                    break;
-            }
-            result.push(el);
-        })
-        return result;
-    }
-
-    static deleteStep = (steps: ProcessorStep[] | undefined, uuidToDelete: string): ProcessorStep[] => {
-        const result: ProcessorStep[] = []
-        if (steps !== undefined){
-            steps.forEach(step => {
-                if (step.uuid !== uuidToDelete){
-                    switch (step.dslName){
-                        case 'policyStep': (step as PolicyStep).policy.steps = CamelApi.deleteStep((step as PolicyStep).policy.steps, uuidToDelete); break;
-                        case 'choiceStep':
-                            console.log(step);
-                            console.log(uuidToDelete);
-                            const otherwise = (step as ChoiceStep).choice.otherwise;
-                            if (otherwise && otherwise.uuid === uuidToDelete) {
-                                (step as ChoiceStep).choice.otherwise = undefined;
-                            } else if (otherwise && otherwise.uuid !== uuidToDelete) {
-                                otherwise.steps = CamelApi.deleteStep(otherwise.steps, uuidToDelete);
-                                (step as ChoiceStep).choice.otherwise = otherwise;
-                            }
-                            (step as ChoiceStep).choice.when = CamelApi.deleteWhen((step as ChoiceStep).choice.when, uuidToDelete);
-                            break;
-                        case 'otherwise': (step as Otherwise).steps = CamelApi.deleteStep((step as Otherwise).steps, uuidToDelete); break;
-                        case 'fromStep': (step as FromStep).from.steps = CamelApi.deleteStep((step as FromStep).from.steps, uuidToDelete); break;
-                        case 'onCompletionStep': (step as OnCompletionStep).onCompletion.steps = CamelApi.deleteStep((step as OnCompletionStep).onCompletion.steps, uuidToDelete); break;
-                        case 'splitStep': (step as SplitStep).split.steps = CamelApi.deleteStep((step as SplitStep).split.steps, uuidToDelete); break;
-                        case 'transactedStep': (step as TransactedStep).transacted.steps = CamelApi.deleteStep((step as TransactedStep).transacted.steps, uuidToDelete); break;
-                        case 'interceptFromStep': (step as InterceptFromStep).interceptFrom.steps = CamelApi.deleteStep((step as InterceptFromStep).interceptFrom.steps, uuidToDelete); break;
-                        case 'doCatchStep': (step as DoCatchStep).doCatch.steps = CamelApi.deleteStep((step as DoCatchStep).doCatch.steps, uuidToDelete); break;
-                        case 'circuitBreakerStep': (step as CircuitBreakerStep).circuitBreaker.steps = CamelApi.deleteStep((step as CircuitBreakerStep).circuitBreaker.steps, uuidToDelete); break;
-                        case 'interceptStep': (step as InterceptStep).intercept.steps = CamelApi.deleteStep((step as InterceptStep).intercept.steps, uuidToDelete); break;
-                        case 'onFallbackStep': (step as OnFallbackStep).onFallback.steps = CamelApi.deleteStep((step as OnFallbackStep).onFallback.steps, uuidToDelete); break;
-                        case 'multicastStep': (step as MulticastStep).multicast.steps = CamelApi.deleteStep((step as MulticastStep).multicast.steps, uuidToDelete); break;
-                        case 'loadBalanceStep': (step as LoadBalanceStep).loadBalance.steps = CamelApi.deleteStep((step as LoadBalanceStep).loadBalance.steps, uuidToDelete); break;
-                        case 'whenSkipSendToEndpointStep': (step as WhenSkipSendToEndpointStep).whenSkipSendToEndpoint.steps = CamelApi.deleteStep((step as WhenSkipSendToEndpointStep).whenSkipSendToEndpoint.steps, uuidToDelete); break;
-                        case 'loopStep': (step as LoopStep).loop.steps = CamelApi.deleteStep((step as LoopStep).loop.steps, uuidToDelete); break;
-                        case 'interceptSendToEndpointStep': (step as InterceptSendToEndpointStep).interceptSendToEndpoint.steps = CamelApi.deleteStep((step as InterceptSendToEndpointStep).interceptSendToEndpoint.steps, uuidToDelete); break;
-                        case 'doTryStep': (step as DoTryStep).doTry.steps = CamelApi.deleteStep((step as DoTryStep).doTry.steps, uuidToDelete); break;
-                        case 'resequenceStep': (step as ResequenceStep).resequence.steps = CamelApi.deleteStep((step as ResequenceStep).resequence.steps, uuidToDelete); break;
-                        case 'pipelineStep': (step as PipelineStep).pipeline.steps = CamelApi.deleteStep((step as PipelineStep).pipeline.steps, uuidToDelete); break;
-                        case 'sagaStep': (step as SagaStep).saga.steps = CamelApi.deleteStep((step as SagaStep).saga.steps, uuidToDelete); break;
-                        case 'whenStep': (step as WhenStep).when.steps = CamelApi.deleteStep((step as WhenStep).when.steps, uuidToDelete); break;
-                        case 'doFinallyStep': (step as DoFinallyStep).doFinally.steps = CamelApi.deleteStep((step as DoFinallyStep).doFinally.steps, uuidToDelete); break;
-                        case 'filterStep': (step as FilterStep).filter.steps = CamelApi.deleteStep((step as FilterStep).filter.steps, uuidToDelete); break;
-                        case 'aggregateStep': (step as AggregateStep).aggregate.steps = CamelApi.deleteStep((step as AggregateStep).aggregate.steps, uuidToDelete); break;
-                        case 'idempotentConsumerStep': (step as IdempotentConsumerStep).idempotentConsumer.steps = CamelApi.deleteStep((step as IdempotentConsumerStep).idempotentConsumer.steps, uuidToDelete); break;
-                    }
-                    result.push(step);
-                }
-            })
-        }
-        return result
-    }
-
-    static deleteWhen = (whens: WhenStep[] | undefined, uuidToDelete: string): WhenStep[] => {
-        const result: WhenStep[] = []
-        if (whens !== undefined){
-            whens.forEach(when => {
-                if (when.uuid !== uuidToDelete) {
-                    when.when.steps = CamelApi.deleteStep(when.when.steps, uuidToDelete);
-                    result.push(when);
-                }
-            })
-        }
-        return result
-    }
-
-    static getExpressionLanguage = (init?: Partial<Expression>): string | undefined => {
-        if (init?.constant) return 'constant'
-        if (init?.csimple) return 'csimple'
-        if (init?.datasonnet) return 'datasonnet'
-        if (init?.exchangeProperty) return 'exchangeProperty'
-        if (init?.groovy) return 'groovy'
-        if (init?.header) return 'header'
-        if (init?.hl7terser) return 'hl7terser'
-        if (init?.joor) return 'joor'
-        if (init?.jsonpath) return 'jsonpath'
-        if (init?.method) return 'method'
-        if (init?.mvel) return 'mvel'
-        if (init?.ognl) return 'ognl'
-        if (init?.ref) return 'ref'
-        if (init?.simple) return 'simple'
-        if (init?.spel) return 'spel'
-        if (init?.tokenize) return 'tokenize'
-        if (init?.xpath) return 'xpath'
-        if (init?.xquery) return 'xquery'
-        if (init?.xtokenize) return 'xtokenize'
-        return undefined;
-    }
-}
-
diff --git a/karavan-app/src/main/webapp/src/designer/api/CamelApiExt.tsx b/karavan-app/src/main/webapp/src/designer/api/CamelApiExt.tsx
deleted file mode 100644
index 5aa51a4..0000000
--- a/karavan-app/src/main/webapp/src/designer/api/CamelApiExt.tsx
+++ /dev/null
@@ -1,143 +0,0 @@
-import {CamelElement, FromStep, Integration, ProcessorStep} from "../model/CamelModel";
-import {CamelMetadataApi, PropertyMeta} from "./CamelMetadata";
-import {CamelApi} from "./CamelApi";
-
-export class CamelApiExt {
-
-    static addStepToIntegration = (integration: Integration, step: CamelElement, parentId: string): Integration => {
-        if (step.dslName === 'fromStep') {
-            integration.spec.flows.push(step as FromStep);
-        } else {
-            const flows = CamelApi.addStep(integration.spec.flows, step, parentId);
-            integration.spec.flows = flows as FromStep[];
-        }
-        return integration;
-    }
-
-    static deleteStepFromIntegration = (integration: Integration, uuidToDelete: string): Integration => {
-        const flows = CamelApi.deleteStep(integration.spec.flows, uuidToDelete);
-        integration.spec.flows = flows as FromStep[];
-        return integration;
-    }
-
-    static getExpressionLanguage = (element: CamelElement | undefined): string | undefined => {
-        const el: any = Object.assign({}, element);
-        if (el.hasOwnProperty('expression') && el.expression) {
-            return el.expression.language
-        } else {
-            return undefined;
-        }
-    }
-
-    static getExpressionValue = (element: CamelElement | undefined): string | undefined => {
-        const language = CamelApiExt.getExpressionLanguage(element);
-        if (language) {
-            return (element as any).expression[language];
-        } else {
-            return undefined;
-        }
-    }
-
-    static updateIntegration = (integration: Integration, e: CamelElement, updatedUuid: string): Integration => {
-        const int: Integration = new Integration({...integration});
-        const flows = integration.spec.flows.map(f => CamelApiExt.updateElement(f, e) as FromStep)
-        const flows2 = flows.map(f => CamelApi.createFrom(f));
-        int.spec.flows = flows2
-        return int;
-    }
-
-    static updateElement = (element: CamelElement, e: CamelElement): CamelElement => {
-        if (element.uuid === e.uuid) {
-            return e;
-        }
-        const result: any = Object.assign({}, element)
-        Object.keys(result).forEach(key => {
-            if (result[key] instanceof CamelElement) {
-                result[key] = CamelApiExt.updateElement(result[key], e)
-            } else if (Array.isArray(result[key])) {
-                result[key] = CamelApiExt.updateElements(result[key], e)
-            }
-        })
-        return result as CamelElement
-    }
-
-    static updateElements = (elements: CamelElement[], e: CamelElement): CamelElement[] => {
-        const result: any[] = []
-        elements.forEach(element => {
-            const newElement = CamelApiExt.updateElement(element, e)
-            result.push(newElement)
-        })
-        return result
-    }
-
-
-    static getElementProperties = (name: string | undefined): PropertyMeta[] => {
-        const result: PropertyMeta[] = []
-        let uri: any = undefined;
-        let expression: any = undefined;
-        let parameters: any = undefined;
-        if (name)
-            CamelMetadataApi.getElementMeta(name)?.properties
-                .filter(p => p.name !== 'steps' && p.name !== 'inheritErrorHandler')
-                .filter(p => !p.isObject || (p.isObject && p.name === 'expression'))
-                .forEach(p => {
-                    switch (p.name) {
-                        case 'uri':
-                            uri = p;
-                            break
-                        case 'expression':
-                            expression = p;
-                            break
-                        case 'parameters':
-                            parameters = p;
-                            break
-                        default:
-                            result.push(p)
-                    }
-                })
-        if (uri) result.unshift(uri)
-        if (expression) result.unshift(expression)
-        if (parameters) result.push(parameters)
-        return result
-    }
-
-    static getParametersValue = (element: CamelElement | undefined, propertyName: string): any => {
-        if (element && (element as any).parameters) {
-            return (element as any).parameters[propertyName];
-        }
-    }
-
-    static getToStepsFromIntegration = (integration: Integration): CamelElement[] => {
-        const result: CamelElement[] = [];
-        integration.spec.flows.forEach((flow, index) => {
-            const steps: CamelElement[] = CamelApiExt.getToStepsFromStep(flow.from);
-            result.push(...steps);
-        })
-        return result;
-    }
-
-    static getToStepsFromStep = (step: ProcessorStep): CamelElement[] => {
-        const result: CamelElement[] = [];
-        if (step.dslName === 'toStep') result.push(step);
-        const element: any = Object.assign({}, step);
-        Object.keys(element).forEach(key => {
-            if (element[key] instanceof CamelElement) {
-                const steps = CamelApiExt.getToStepsFromStep(element[key]);
-                result.push(...steps);
-            } else if (Array.isArray(element[key])) {
-                const steps = CamelApiExt.getStepsFromSteps(element[key]);
-                result.push(...steps);
-            }
-        })
-        return result;
-    }
-
-    static getStepsFromSteps = (steps: CamelElement[]): CamelElement[] => {
-        const result: CamelElement[] = [];
-        steps.forEach(step => {
-            const steps = CamelApiExt.getToStepsFromStep(step);
-            result.push(...steps);
-        })
-        return result;
-    }
-}
diff --git a/karavan-app/src/main/webapp/src/designer/api/CamelMetadata.tsx b/karavan-app/src/main/webapp/src/designer/api/CamelMetadata.tsx
deleted file mode 100644
index a81553f..0000000
--- a/karavan-app/src/main/webapp/src/designer/api/CamelMetadata.tsx
+++ /dev/null
@@ -1,576 +0,0 @@
-/**
- * Generated by karavan build tools - do NOT edit this file!
- */
-export class ElementMeta {
-    name: string = ''
-    title: string = ''
-    description: string = ''
-    labels: string = ''
-    properties: PropertyMeta[] = []
-
-
-    constructor(name: string, title: string, description: string, labels: string, properties: PropertyMeta[]) {
-        this.name = name;
-        this.title = title;
-        this.description = description;
-        this.labels = labels;
-        this.properties = properties;
-    }
-}
-
-export class PropertyMeta {
-    name: string = ''
-    displayName: string = ''
-    description: string = ''
-    type: string = ''
-    enumVals: string = ''
-    required: boolean = false
-    secret: boolean = false
-    isArray: boolean = false
-    isObject: boolean = false
-
-
-    constructor(name: string, displayName: string, description: string, type: string, enumVals: string, required: boolean, secret: boolean, isArray: boolean, isObject: boolean) {
-        this.name = name;
-        this.displayName = displayName;
-        this.description = description;
-        this.type = type;
-        this.enumVals = enumVals;
-        this.required = required;
-        this.secret = secret;
-        this.isArray = isArray;
-        this.isObject = isObject;
-    }
-}
-
-export class CamelMetadataApi {
-
-    static getElementMeta = (name: string): ElementMeta | undefined => {
-       return Metadata.find(value => value.name === name);
-    }
-
-    static getLanguage = (name: string): [string, string, string] | undefined => {
-        return Languages.find(value => value[0] === name);
-    }
-}
-export const Languages: [string, string, string][] = [
-    ['constant','Constant',"A fixed value set only once during the route startup."],
-    ['csimple','CSimple',"Evaluate a compile simple expression language."],
-    ['datasonnet','DataSonnet',"To use DataSonnet scripts in Camel expressions or predicates."],
-    ['exchangeProperty','ExchangeProperty',"Get the value of named Camel Exchange property."],
-    ['groovy','Groovy',"Evaluate a Groovy script."],
-    ['header','Header',"Get the value of the named Camel Message header."],
-    ['hl7terser','HL7 Terser',"Get the value of an HL7 message field specified by terse location specification syntax."],
-    ['joor','jOOR',"Evaluate a jOOR (Java compiled once at runtime) expression language."],
-    ['jsonpath','JsonPath',"Evaluate a JsonPath expression against a JSON message body."],
-    ['language','Language',"Evaluate the given expression using the specified language."],
-    ['method','Bean method',"Call a method of the specified Java bean passing the Exchange, Body or specific headers to it."],
-    ['mvel','MVEL',"Evaluate an MVEL template against the Camel Exchange."],
-    ['ognl','OGNL',"Evaluate an Apache Commons Object Graph Navigation Library (OGNL) expression against the Camel Exchange."],
-    ['ref','Ref',"Look up an expression in the Camel Registry and evaluate it."],
-    ['simple','Simple',"Evaluate Camel's built-in Simple language expression against the Camel Exchange."],
-    ['spel','SpEL',"Evaluate a Spring Expression Language (SpEL) expression against the Camel Exchange."],
-    ['tokenize','Tokenize',"Tokenize text payloads using the specified delimiter patterns."],
-    ['xpath','XPath',"Evaluate an XPath expression against an XML payload."],
-    ['xquery','XQuery',"Evaluate an XQuery expressions against an XML payload."],
-    ['xtokenize','XML Tokenize',"Tokenize XML payloads using the specified path expression."],
-]
-export const Metadata: ElementMeta[] = [
-    new ElementMeta('policy', 'Policy', 'Defines a policy the route will use', 'configuration', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('ref', 'Ref', "Sets a reference to use for lookup the policy in the registry.", 'string', '', true, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('throwException', 'Throw Exception', 'Throws an exception', 'error', [
-        new PropertyMeta('exceptionType', 'Exception Type', "The class of the exception to create using the message.", 'string', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('message', 'Message', "To create a new exception instance and use the given message as caused message (supports simple language)", 'string', '', false, false, false, false),
-        new PropertyMeta('ref', 'Ref', "Reference to the exception instance to lookup from the registry to throw", 'string', '', false, false, false, false),
-    ]),
-    new ElementMeta('choice', 'Choice', 'Routes messages based on a series of predicates', 'eip,routing', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('otherwise', 'Otherwise', "Sets the otherwise node", 'Otherwise', '', false, false, false, true),
-        new PropertyMeta('when', 'when', "when", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('pollEnrich', 'Poll Enrich', 'Enriches messages with data polled from a secondary resource', 'eip,transformation', [
-        new PropertyMeta('aggregateOnException', 'Aggregate On Exception', "If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method. For example to suppress the exception or set a custom message body etc.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('cacheSize', 'Cache Size', "Sets the maximum size used by the org.apache.camel.spi.ConsumerCache which is used to cache and reuse consumers when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopp [...]
-        new PropertyMeta('expression', 'Expression', "Expression that computes the endpoint uri to use as the resource endpoint to enrich from", 'Expression', '', true, false, false, true),
-        new PropertyMeta('ignoreInvalidEndpoint', 'Ignore Invalid Endpoint', "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", 'number', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('strategyMethodAllowNull', 'Strategy Method Allow Null', "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('strategyMethodName', 'Strategy Method Name', "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", 'string', '', false, false, false, false),
-        new PropertyMeta('strategyRef', 'Strategy Ref', "Refers to an AggregationStrategy to be used to merge the reply from the external service, into a single outgoing message. By default Camel will use the reply from the external service as outgoing message.", 'string', '', false, false, false, false),
-        new PropertyMeta('timeout', 'Timeout', "Timeout in millis when polling from the external service. The timeout has influence about the poll enrich behavior. It basically operations in three different modes: negative value - Waits until a message is available and then returns it. Warning that this method could block indefinitely if no messages are available. 0 - Attempts to receive a message exchange immediately without waiting and returning null if a message exchange is not availa [...]
-    ]),
-    new ElementMeta('setBody', 'Set Body', 'Sets the contents of the message body', 'eip,transformation', [
-        new PropertyMeta('expression', 'Expression', "Expression that returns the new body to use", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-    ]),
-    new ElementMeta('stop', 'Stop', 'Stops the processing of the current message', 'eip,routing', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-    ]),
-    new ElementMeta('toD', 'To D', 'Sends the message to a dynamic endpoint You can specify multiple languages in the uri separated by the plus sign, such as mock:language:xpath:/order/uri where mock: would be a prefix to a xpath expression. For more dynamic behavior use Recipient List or Dynamic Router EIP instead.', 'eip,endpoint,routing', [
-        new PropertyMeta('allowOptimisedComponents', 'Allow Optimised Components', "Whether to allow components to optimise toD if they are org.apache.camel.spi.SendDynamicAware .", 'boolean', '', false, false, false, false),
-        new PropertyMeta('autoStartComponents', 'Auto Start Components', "Whether to auto startup components when toD is starting up.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('cacheSize', 'Cache Size', "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as pr [...]
-        new PropertyMeta('ignoreInvalidEndpoint', 'Ignore Invalid Endpoint', "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", 'boolean', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', false, false, false, false),
-        new PropertyMeta('pattern', 'Pattern', "Sets the optional ExchangePattern used to invoke this endpoint", 'string', 'InOnly, InOptionalOut, InOut', false, false, false, false),
-        new PropertyMeta('uri', 'Uri', "The uri of the endpoint to send to. The uri can be dynamic computed using the org.apache.camel.language.simple.SimpleLanguage expression.", 'string', '', true, false, false, false),
-    ]),
-    new ElementMeta('process', 'Process', 'Calls a Camel processor', 'eip,endpoint', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('ref', 'Ref', "Reference to the Processor to lookup in the registry to use.", 'string', '', true, false, false, false),
-    ]),
-    new ElementMeta('removeHeaders', 'Remove Headers', 'Removes message headers whose name matches a specified pattern', 'eip,transformation', [
-        new PropertyMeta('excludePattern', 'Exclude Pattern', "Name or patter of headers to not remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", 'string', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('pattern', 'Pattern', "Name or pattern of headers to remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", 'string', '', true, false, false, false),
-    ]),
-    new ElementMeta('delay', 'Delay', 'Delays processing for a specified length of time', 'eip,routing', [
-        new PropertyMeta('asyncDelayed', 'Async Delayed', "Enables asynchronous delay which means the thread will not block while delaying.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('callerRunsWhenRejected', 'Caller Runs When Rejected', "Whether or not the caller should run the task when it was rejected by the thread pool. Is by default true", 'boolean', '', false, false, false, false),
-        new PropertyMeta('executorServiceRef', 'Executor Service Ref', "Refers to a custom Thread Pool if asyncDelay has been enabled.", 'string', '', false, false, false, false),
-        new PropertyMeta('expression', 'Expression', "Expression to define how long time to wait (in millis)", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-    ]),
-    new ElementMeta('throttle', 'Throttle', 'Controls the rate at which messages are passed to the next node in the route', 'eip,routing', [
-        new PropertyMeta('asyncDelayed', 'Async Delayed', "Enables asynchronous delay which means the thread will not block while delaying.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('callerRunsWhenRejected', 'Caller Runs When Rejected', "Whether or not the caller should run the task when it was rejected by the thread pool. Is by default true", 'boolean', '', false, false, false, false),
-        new PropertyMeta('correlationExpression', 'Correlation Expression', "The expression used to calculate the correlation key to use for throttle grouping. The Exchange which has the same correlation key is throttled together.", 'Expression', '', false, false, false, true),
-        new PropertyMeta('executorServiceRef', 'Executor Service Ref', "To use a custom thread pool (ScheduledExecutorService) by the throttler.", 'string', '', false, false, false, false),
-        new PropertyMeta('expression', 'Expression', "Expression to configure the maximum number of messages to throttle per request", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('rejectExecution', 'Reject Execution', "Whether or not throttler throws the ThrottlerRejectedExecutionException when the exchange exceeds the request limit Is by default false", 'boolean', '', false, false, false, false),
-        new PropertyMeta('timePeriodMillis', 'Time Period Millis', "Sets the time period during which the maximum request count is valid for", 'string', '', false, false, false, false),
-    ]),
-    new ElementMeta('otherwise', 'Otherwise', 'Route to be executed when all other choices evaluate to false', 'eip,routing', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('removeProperty', 'Remove Property', 'Removes a named property from the message exchange', 'eip,transformation', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('propertyName', 'Property Name', "Name of property to remove", 'string', '', true, false, false, false),
-    ]),
-    new ElementMeta('validate', 'Validate', 'Validates a message based on an expression', 'eip,transformation', [
-        new PropertyMeta('expression', 'Expression', "Expression to use for validation as a predicate. The expression should return either true or false. If returning false the message is invalid and an exception is thrown.", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-    ]),
-    new ElementMeta('sort', 'Sort', 'Sorts the contents of the message', 'eip,routing', [
-        new PropertyMeta('comparatorRef', 'Comparator Ref', "Sets a reference to lookup for the comparator to use for sorting", 'string', '', false, false, false, false),
-        new PropertyMeta('expression', 'Expression', "Optional expression to sort by something else than the message body", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-    ]),
-    new ElementMeta('from', 'From', 'Act as a message source as input to a route', 'eip,endpoint,routing', [
-        new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-        new PropertyMeta('uri', 'Uri', "Sets the URI of the endpoint to use", 'string', '', true, false, false, false),
-    ]),
-    new ElementMeta('to', 'To', 'Sends the message to a static endpoint', 'eip,endpoint,routing', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', false, false, false, false),
-        new PropertyMeta('pattern', 'Pattern', "Sets the optional ExchangePattern used to invoke this endpoint", 'string', 'InOnly, InOptionalOut, InOut', false, false, false, false),
-        new PropertyMeta('uri', 'Uri', "Sets the uri of the endpoint to send to.", 'string', '', true, false, false, false),
-    ]),
-    new ElementMeta('setHeader', 'Set Header', 'Sets the value of a message header', 'eip,transformation', [
-        new PropertyMeta('expression', 'Expression', "Expression to return the value of the header", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('name', 'Name', "Name of message header to set a new value The simple language can be used to define a dynamic evaluated header name to be used. Otherwise a constant name will be used.", 'string', '', true, false, false, false),
-    ]),
-    new ElementMeta('onCompletion', 'On Completion', 'Route to be executed when normal route processing completes', 'configuration', [
-        new PropertyMeta('executorServiceRef', 'Executor Service Ref', "Refers to a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well.", 'string', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('mode', 'Mode', "Sets the on completion mode. The default value is AfterConsumer", 'string', 'AfterConsumer, BeforeConsumer', false, false, false, false),
-        new PropertyMeta('onCompleteOnly', 'On Complete Only', "Will only synchronize when the org.apache.camel.Exchange completed successfully (no errors).", 'boolean', '', false, false, false, false),
-        new PropertyMeta('onFailureOnly', 'On Failure Only', "Will only synchronize when the org.apache.camel.Exchange ended with failure (exception or FAULT message).", 'boolean', '', false, false, false, false),
-        new PropertyMeta('onWhen', 'On When', "Sets an additional predicate that should be true before the onCompletion is triggered. To be used for fine grained controlling whether a completion callback should be invoked or not", 'When', '', false, false, false, true),
-        new PropertyMeta('parallelProcessing', 'Parallel Processing', "If enabled then the on completion process will run asynchronously by a separate thread from a thread pool. By default this is false, meaning the on completion process will run synchronously using the same caller thread as from the route.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-        new PropertyMeta('useOriginalMessage', 'Use Original Message', "Will use the original input message body when an org.apache.camel.Exchange for this on completion. By default this feature is off.", 'boolean', '', false, false, false, false),
-    ]),
-    new ElementMeta('removeHeader', 'Remove Header', 'Removes a named header from the message', 'eip,transformation', [
-        new PropertyMeta('headerName', 'Header Name', "Name of header to remove (deprecated use name instead)", 'string', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('name', 'Name', "Name of header to remove", 'string', '', false, false, false, false),
-    ]),
-    new ElementMeta('script', 'Script', 'Executes a script from a language which does not change the message body.', 'eip,transformation', [
-        new PropertyMeta('expression', 'Expression', "Expression to return the transformed message body (the new message body to use)", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-    ]),
-    new ElementMeta('enrich', 'Enrich', 'Enriches a message with data from a secondary resource', 'eip,transformation', [
-        new PropertyMeta('aggregateOnException', 'Aggregate On Exception', "If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method. For example to suppress the exception or set a custom message body etc.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('allowOptimisedComponents', 'Allow Optimised Components', "Whether to allow components to optimise enricher if they are org.apache.camel.spi.SendDynamicAware .", 'boolean', '', false, false, false, false),
-        new PropertyMeta('cacheSize', 'Cache Size', "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producer when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stoppe [...]
-        new PropertyMeta('expression', 'Expression', "Expression that computes the endpoint uri to use as the resource endpoint to enrich from", 'Expression', '', true, false, false, true),
-        new PropertyMeta('ignoreInvalidEndpoint', 'Ignore Invalid Endpoint', "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", 'boolean', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('shareUnitOfWork', 'Share Unit Of Work', "Shares the org.apache.camel.spi.UnitOfWork with the parent and the resource exchange. Enrich will by default not share unit of work between the parent exchange and the resource exchange. This means the resource exchange has its own individual unit of work.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('strategyMethodAllowNull', 'Strategy Method Allow Null', "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy.", 'string', '', false, false, false, false),
-        new PropertyMeta('strategyMethodName', 'Strategy Method Name', "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", 'string', '', false, false, false, false),
-        new PropertyMeta('strategyRef', 'Strategy Ref', "Refers to an AggregationStrategy to be used to merge the reply from the external service, into a single outgoing message. By default Camel will use the reply from the external service as outgoing message.", 'string', '', false, false, false, false),
-    ]),
-    new ElementMeta('log', 'Log', 'Logs the defined message to the logger', 'eip,configuration', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('logName', 'Log Name', "Sets the name of the logger", 'string', '', false, false, false, false),
-        new PropertyMeta('loggerRef', 'Logger Ref', "To refer to a custom logger instance to lookup from the registry.", 'string', '', false, false, false, false),
-        new PropertyMeta('loggingLevel', 'Logging Level', "Sets the logging level. The default value is INFO", 'string', 'DEBUG, ERROR, INFO, OFF, TRACE, WARN', false, false, false, false),
-        new PropertyMeta('marker', 'Marker', "To use slf4j marker", 'string', '', false, false, false, false),
-        new PropertyMeta('message', 'Message', "Sets the log message (uses simple language)", 'string', '', true, false, false, false),
-    ]),
-    new ElementMeta('removeProperties', 'Remove Properties', 'Removes message exchange properties whose name matches a specified pattern', 'eip,transformation', [
-        new PropertyMeta('excludePattern', 'Exclude Pattern', "Name or pattern of properties to not remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", 'string', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('pattern', 'Pattern', "Name or pattern of properties to remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive).", 'string', '', true, false, false, false),
-    ]),
-    new ElementMeta('marshal', 'Marshal', 'Marshals data into a specified format for transmission over a transport or component', 'dataformat,transformation', [
-        new PropertyMeta('any23', 'any23', "any23", 'string', '', false, false, false, false),
-        new PropertyMeta('asn1', 'asn1', "asn1", 'string', '', false, false, false, false),
-        new PropertyMeta('avro', 'avro', "avro", 'string', '', false, false, false, false),
-        new PropertyMeta('csv', 'csv', "csv", 'string', '', false, false, false, false),
-        new PropertyMeta('custom', 'custom', "custom", 'string', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('protobuf', 'protobuf', "protobuf", 'string', '', false, false, false, false),
-        new PropertyMeta('soapjaxb', 'soapjaxb', "soapjaxb", 'string', '', false, false, false, false),
-        new PropertyMeta('thrift', 'thrift', "thrift", 'string', '', false, false, false, false),
-        new PropertyMeta('xstream', 'xstream', "xstream", 'string', '', false, false, false, false),
-    ]),
-    new ElementMeta('split', 'Split', 'Splits a single message into many sub-messages.', 'eip,routing', [
-        new PropertyMeta('delimiter', 'Delimiter', "Delimiter used in splitting messages. Can be turned off using the value false. The default value is ,", 'string', '', false, false, false, false),
-        new PropertyMeta('executorServiceRef', 'Executor Service Ref', "Refers to a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well.", 'string', '', false, false, false, false),
-        new PropertyMeta('expression', 'Expression', "Expression of how to split the message body, such as as-is, using a tokenizer, or using an xpath.", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('onPrepareRef', 'On Prepare Ref', "Uses the Processor when preparing the org.apache.camel.Exchange to be send. This can be used to deep-clone messages that should be send, or any custom logic needed before the exchange is send.", 'string', '', false, false, false, false),
-        new PropertyMeta('parallelAggregate', 'Parallel Aggregate', "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe.", 'bo [...]
-        new PropertyMeta('parallelProcessing', 'Parallel Processing', "If enabled then processing each splitted messages occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only processing the sub messages from the splitter which happens concurrently.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('shareUnitOfWork', 'Share Unit Of Work', "Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Splitter will by default not share unit of work between the parent exchange and each splitted exchange. This means each splitted exchange has its own individual unit of work.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-        new PropertyMeta('stopOnAggregateException', 'Stop On Aggregate Exception', "If enabled, unwind exceptions occurring at aggregation time to the error handler when parallelProcessing is used. Currently, aggregation time exceptions do not stop the route processing when parallelProcessing is used. Enabling this option allows to work around this behavior. The default value is false for the sake of backward compatibility.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('stopOnException', 'Stop On Exception', "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the splitter will stop further processing. This is the same behavior as in pipeline, whi [...]
-        new PropertyMeta('strategyMethodAllowNull', 'Strategy Method Allow Null', "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy", 'boolean', '', false, false, false, false),
-        new PropertyMeta('strategyMethodName', 'Strategy Method Name', "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", 'string', '', false, false, false, false),
-        new PropertyMeta('strategyRef', 'Strategy Ref', "Sets a reference to the AggregationStrategy to be used to assemble the replies from the splitted messages, into a single outgoing message from the Splitter. By default Camel will use the original incoming message to the splitter (leave it unchanged). You can also use a POJO as the AggregationStrategy", 'string', '', false, false, false, false),
-        new PropertyMeta('streaming', 'Streaming', "When in streaming mode, then the splitter splits the original message on-demand, and each splitted message is processed one by one. This reduces memory usage as the splitter do not split all the messages first, but then we do not know the total size, and therefore the org.apache.camel.Exchange#SPLIT_SIZE is empty. In non-streaming mode (default) the splitter will split each message first, to know the total size, and then process each me [...]
-        new PropertyMeta('timeout', 'Timeout', "Sets a total timeout specified in millis, when using parallel processing. If the Splitter hasn't been able to split and process all the sub messages within the given timeframe, then the timeout triggers and the Splitter breaks out and continues. Notice if you provide a TimeoutAwareAggregationStrategy then the timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which  [...]
-    ]),
-    new ElementMeta('transacted', 'Transacted', 'Enables transaction on the route', 'configuration', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('ref', 'Ref', "Sets a reference to use for lookup the policy in the registry.", 'string', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('interceptFrom', 'Intercept From', 'Intercepts incoming messages', 'configuration', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-        new PropertyMeta('uri', 'Uri', "Intercept incoming messages from the uri or uri pattern. If this option is not configured, then all incoming messages is intercepted.", 'string', '', false, false, false, false),
-    ]),
-    new ElementMeta('doCatch', 'Do Catch', 'Catches exceptions as part of a try, catch, finally block', 'error', [
-        new PropertyMeta('exception', 'Exception', "The exception(s) to catch.", 'array', '', false, false, true, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('onWhen', 'On When', "Sets an additional predicate that should be true before the onCatch is triggered. To be used for fine grained controlling whether a thrown exception should be intercepted by this exception type or not.", 'When', '', false, false, false, true),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('circuitBreaker', 'Circuit Breaker', 'null', 'eip,routing,circuitbreaker', [
-        new PropertyMeta('configurationRef', 'Configuration Ref', "Refers to a circuit breaker configuration (such as hystrix, resillience4j, or microprofile-fault-tolerance) to use for configuring the circuit breaker EIP.", 'string', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('onFallback', 'onFallback', "onFallback", 'OnFallback', '', false, false, false, true),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('convertBodyTo', 'Convert Body To', 'Converts the message body to another type', 'eip,transformation', [
-        new PropertyMeta('charset', 'Charset', "To use a specific charset when converting", 'string', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('mandatory', 'mandatory', "mandatory", 'boolean', '', false, false, false, false),
-        new PropertyMeta('type', 'Type', "The java type to convert to", 'string', '', true, false, false, false),
-    ]),
-    new ElementMeta('intercept', 'Intercept', 'Intercepts a message at each step in the route', 'configuration', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('unmarshal', 'Unmarshal', 'Converts the message data received from the wire into a format that Apache Camel processors can consume', 'dataformat,transformation', [
-        new PropertyMeta('any23', 'any23', "any23", 'string', '', false, false, false, false),
-        new PropertyMeta('asn1', 'asn1', "asn1", 'string', '', false, false, false, false),
-        new PropertyMeta('avro', 'avro', "avro", 'string', '', false, false, false, false),
-        new PropertyMeta('csv', 'csv', "csv", 'string', '', false, false, false, false),
-        new PropertyMeta('custom', 'custom', "custom", 'string', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('protobuf', 'protobuf', "protobuf", 'string', '', false, false, false, false),
-        new PropertyMeta('soapjaxb', 'soapjaxb', "soapjaxb", 'string', '', false, false, false, false),
-        new PropertyMeta('thrift', 'thrift', "thrift", 'string', '', false, false, false, false),
-        new PropertyMeta('xstream', 'xstream', "xstream", 'string', '', false, false, false, false),
-    ]),
-    new ElementMeta('onFallback', 'On Fallback', 'Route to be executed when Hystrix EIP executes fallback', 'eip,routing,circuitbreaker', [
-        new PropertyMeta('fallbackViaNetwork', 'Fallback Via Network', "Whether the fallback goes over the network. If the fallback will go over the network it is another possible point of failure and so it also needs to be wrapped by a HystrixCommand. It is important to execute the fallback command on a separate thread-pool, otherwise if the main command were to become latent and fill the thread-pool this would prevent the fallback from running if the two commands share the same pool.", [...]
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('setExchangePattern', 'Set Exchange Pattern', 'Sets the exchange pattern on the message exchange', 'configuration', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('pattern', 'Pattern', "Sets the new exchange pattern of the Exchange to be used from this point forward", 'string', 'InOnly, InOptionalOut, InOut', true, false, false, false),
-    ]),
-    new ElementMeta('recipientList', 'Recipient List', 'Routes messages to a number of dynamically specified recipients (dynamic to)', 'eip,endpoint,routing', [
-        new PropertyMeta('cacheSize', 'Cache Size', "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as pr [...]
-        new PropertyMeta('delimiter', 'Delimiter', "Delimiter used if the Expression returned multiple endpoints. Can be turned off using the value false. The default value is ,", 'string', '', false, false, false, false),
-        new PropertyMeta('executorServiceRef', 'Executor Service Ref', "Refers to a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well.", 'string', '', false, false, false, false),
-        new PropertyMeta('expression', 'Expression', "Expression that returns which endpoints (url) to send the message to (the recipients). If the expression return an empty value then the message is not sent to any recipients.", 'Expression', '', true, false, false, true),
-        new PropertyMeta('ignoreInvalidEndpoints', 'Ignore Invalid Endpoints', "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", 'boolean', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('onPrepareRef', 'On Prepare Ref', "Uses the Processor when preparing the org.apache.camel.Exchange to be send. This can be used to deep-clone messages that should be send, or any custom logic needed before the exchange is send.", 'string', '', false, false, false, false),
-        new PropertyMeta('parallelAggregate', 'Parallel Aggregate', "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe.", 'bo [...]
-        new PropertyMeta('parallelProcessing', 'Parallel Processing', "If enabled then sending messages to the recipients occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only the sending and processing the replies from the recipients which happens concurrently.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('shareUnitOfWork', 'Share Unit Of Work', "Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Recipient List will by default not share unit of work between the parent exchange and each recipient exchange. This means each sub exchange has its own individual unit of work.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('stopOnAggregateException', 'Stop On Aggregate Exception', "If enabled, unwind exceptions occurring at aggregation time to the error handler when parallelProcessing is used. Currently, aggregation time exceptions do not stop the route processing when parallelProcessing is used. Enabling this option allows to work around this behavior. The default value is false for the sake of backward compatibility.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('stopOnException', 'Stop On Exception', "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the recipient list will stop further processing. This is the same behavior as in pipelin [...]
-        new PropertyMeta('strategyMethodAllowNull', 'Strategy Method Allow Null', "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy", 'boolean', '', false, false, false, false),
-        new PropertyMeta('strategyMethodName', 'Strategy Method Name', "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", 'string', '', false, false, false, false),
-        new PropertyMeta('strategyRef', 'Strategy Ref', "Sets a reference to the AggregationStrategy to be used to assemble the replies from the recipients, into a single outgoing message from the RecipientList. By default Camel will use the last reply as the outgoing message. You can also use a POJO as the AggregationStrategy", 'string', '', false, false, false, false),
-        new PropertyMeta('streaming', 'Streaming', "If enabled then Camel will process replies out-of-order, eg in the order they come back. If disabled, Camel will process replies in the same order as defined by the recipient list.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('timeout', 'Timeout', "Sets a total timeout specified in millis, when using parallel processing. If the Recipient List hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Recipient List breaks out and continues. Notice if you provide a TimeoutAwareAggregationStrategy then the timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for whic [...]
-    ]),
-    new ElementMeta('bean', 'Bean', 'Calls a Java bean', 'eip,endpoint', [
-        new PropertyMeta('beanType', 'Bean Type', "Sets the class name (fully qualified) of the bean to use", 'string', '', false, false, false, false),
-        new PropertyMeta('cache', 'Cache', "Use singleton option instead", 'boolean', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('method', 'Method', "Sets the method name on the bean to use", 'string', '', false, false, false, false),
-        new PropertyMeta('ref', 'Ref', "Sets a reference to an exiting bean to use, which is looked up from the registry", 'string', '', false, false, false, false),
-        new PropertyMeta('scope', 'Scope', "Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint. The bean should be thread-safe in case concurrent threads is calling the bean at the same time. When using request scope the bean is created or looked up once per request (exchange). This can be used if you want to store state on a bean while processing a request and you want to call the same bean instance  [...]
-    ]),
-    new ElementMeta('multicast', 'Multicast', 'Routes the same message to multiple paths either sequentially or in parallel.', 'eip,routing', [
-        new PropertyMeta('executorServiceRef', 'Executor Service Ref', "Refers to a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well.", 'string', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('onPrepareRef', 'On Prepare Ref', "Uses the Processor when preparing the org.apache.camel.Exchange to be send. This can be used to deep-clone messages that should be send, or any custom logic needed before the exchange is send.", 'string', '', false, false, false, false),
-        new PropertyMeta('parallelAggregate', 'Parallel Aggregate', "If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe.", 'bo [...]
-        new PropertyMeta('parallelProcessing', 'Parallel Processing', "If enabled then sending messages to the multicasts occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only the sending and processing the replies from the multicasts which happens concurrently.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('shareUnitOfWork', 'Share Unit Of Work', "Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Multicast will by default not share unit of work between the parent exchange and each multicasted exchange. This means each sub exchange has its own individual unit of work.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-        new PropertyMeta('stopOnAggregateException', 'Stop On Aggregate Exception', "If enabled, unwind exceptions occurring at aggregation time to the error handler when parallelProcessing is used. Currently, aggregation time exceptions do not stop the route processing when parallelProcessing is used. Enabling this option allows to work around this behavior. The default value is false for the sake of backward compatibility.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('stopOnException', 'Stop On Exception', "Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the multicast will stop further processing. This is the same behavior as in pipeline, wh [...]
-        new PropertyMeta('strategyMethodAllowNull', 'Strategy Method Allow Null', "If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy", 'boolean', '', false, false, false, false),
-        new PropertyMeta('strategyMethodName', 'Strategy Method Name', "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", 'string', '', false, false, false, false),
-        new PropertyMeta('strategyRef', 'Strategy Ref', "Refers to an AggregationStrategy to be used to assemble the replies from the multicasts, into a single outgoing message from the Multicast. By default Camel will use the last reply as the outgoing message. You can also use a POJO as the AggregationStrategy", 'string', '', false, false, false, false),
-        new PropertyMeta('streaming', 'Streaming', "If enabled then Camel will process replies out-of-order, eg in the order they come back. If disabled, Camel will process replies in the same order as defined by the multicast.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('timeout', 'Timeout', "Sets a total timeout specified in millis, when using parallel processing. If the Multicast hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Multicast breaks out and continues. Notice if you provide a TimeoutAwareAggregationStrategy then the timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is di [...]
-    ]),
-    new ElementMeta('inOnly', 'In Only', 'Marks the exchange pattern for the route to one way', 'eip,endpoint,routing', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', false, false, false, false),
-        new PropertyMeta('uri', 'Uri', "Sets the uri of the endpoint to send to.", 'string', '', true, false, false, false),
-    ]),
-    new ElementMeta('loadBalance', 'Load Balance', 'Balances message processing among a number of nodes', 'eip,routing', [
-        new PropertyMeta('customLoadBalancer', 'customLoadBalancer', "customLoadBalancer", 'string', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'Inherit Error Handler', "Sets whether or not to inherit the configured error handler. The default value is true. You can use this to disable using the inherited error handler for a given DSL such as a load balancer where you want to use a custom error handler strategy.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('routingSlip', 'Routing Slip', 'Routes a message through a series of steps that are pre-determined (the slip)', 'eip,endpoint,routing', [
-        new PropertyMeta('cacheSize', 'Cache Size', "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this routing slip, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prot [...]
-        new PropertyMeta('expression', 'Expression', "Expression to define the routing slip, which defines which endpoints to route the message in a pipeline style. Notice the expression is evaluated once, if you want a more dynamic style, then the dynamic router eip is a better choice.", 'Expression', '', true, false, false, true),
-        new PropertyMeta('ignoreInvalidEndpoints', 'Ignore Invalid Endpoints', "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", 'boolean', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('uriDelimiter', 'Uri Delimiter', "Sets the uri delimiter to use", 'string', '', false, false, false, false),
-    ]),
-    new ElementMeta('rollback', 'Rollback', 'Forces a rollback by stopping routing the message', 'eip,routing', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('markRollbackOnly', 'Mark Rollback Only', "Mark the transaction for rollback only (cannot be overruled to commit)", 'boolean', '', false, false, false, false),
-        new PropertyMeta('markRollbackOnlyLast', 'Mark Rollback Only Last', "Mark only last sub transaction for rollback only. When using sub transactions (if the transaction manager support this)", 'boolean', '', false, false, false, false),
-        new PropertyMeta('message', 'Message', "Message to use in rollback exception", 'string', '', false, false, false, false),
-    ]),
-    new ElementMeta('whenSkipSendToEndpoint', 'When Skip Send To Endpoint', 'Predicate to determine if the message should be sent or not to the endpoint, when using interceptSentToEndpoint.', 'configuration', [
-        new PropertyMeta('expression', 'Expression', "Expression used as the predicate to evaluate whether the message should be sent or not to the endpoint", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('wireTap', 'Wire Tap', 'Routes a copy of a message (or creates a new message) to a secondary destination while continue routing the original message.', 'eip,endpoint,routing', [
-        new PropertyMeta('allowOptimisedComponents', 'Allow Optimised Components', "Whether to allow components to optimise toD if they are org.apache.camel.spi.SendDynamicAware .", 'boolean', '', false, false, false, false),
-        new PropertyMeta('autoStartComponents', 'Auto Start Components', "Whether to auto startup components when toD is starting up.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('body', 'Body', "Uses the expression for creating a new body as the message to use for wire tapping", 'Expression', '', false, false, false, true),
-        new PropertyMeta('cacheSize', 'Cache Size', "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as pr [...]
-        new PropertyMeta('copy', 'Copy', "Uses a copy of the original exchange", 'boolean', '', false, false, false, false),
-        new PropertyMeta('dynamicUri', 'Dynamic Uri', "Whether the uri is dynamic or static. If the uri is dynamic then the simple language is used to evaluate a dynamic uri to use as the wire-tap destination, for each incoming message. This works similar to how the toD EIP pattern works. If static then the uri is used as-is as the wire-tap destination.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('executorServiceRef', 'Executor Service Ref', "Uses a custom thread pool", 'string', '', false, false, false, false),
-        new PropertyMeta('ignoreInvalidEndpoint', 'Ignore Invalid Endpoint', "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", 'boolean', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('onPrepareRef', 'On Prepare Ref', "Uses the Processor when preparing the org.apache.camel.Exchange to be send. This can be used to deep-clone messages that should be send, or any custom logic needed before the exchange is send.", 'string', '', false, false, false, false),
-        new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', false, false, false, false),
-        new PropertyMeta('pattern', 'Pattern', "Sets the optional ExchangePattern used to invoke this endpoint", 'string', 'InOnly, InOptionalOut, InOut', false, false, false, false),
-        new PropertyMeta('processorRef', 'Processor Ref', "Reference to a Processor to use for creating a new body as the message to use for wire tapping", 'string', '', false, false, false, false),
-        new PropertyMeta('setHeader', 'setHeader', "setHeader", 'array', '', false, false, true, true),
-        new PropertyMeta('uri', 'Uri', "The uri of the endpoint to send to. The uri can be dynamic computed using the org.apache.camel.language.simple.SimpleLanguage expression.", 'string', '', true, false, false, false),
-    ]),
-    new ElementMeta('loop', 'Loop', 'Processes a message multiple times', 'eip,routing', [
-        new PropertyMeta('breakOnShutdown', 'Break On Shutdown', "If the breakOnShutdown attribute is true, then the loop will not iterate until it reaches the end when Camel is shut down.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('copy', 'Copy', "If the copy attribute is true, a copy of the input Exchange is used for each iteration. That means each iteration will start from a copy of the same message. By default loop will loop the same exchange all over, so each iteration may have different message content.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('doWhile', 'Do While', "Enables the while loop that loops until the predicate evaluates to false or null.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('expression', 'Expression', "Expression to define how many times we should loop. Notice the expression is only evaluated once, and should return a number as how many times to loop. A value of zero or negative means no looping. The loop is like a for-loop fashion, if you want a while loop, then the dynamic router may be a better choice.", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('interceptSendToEndpoint', 'Intercept Send To Endpoint', 'Intercepts messages being sent to an endpoint', 'configuration', [
-        new PropertyMeta('afterUri', 'After Uri', "After sending to the endpoint then send the message to this uri which allows to process its result.", 'string', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('skipSendToOriginalEndpoint', 'Skip Send To Original Endpoint', "If set to true then the message is not sent to the original endpoint. By default (false) the message is both intercepted and then sent to the original endpoint.", 'string', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-        new PropertyMeta('uri', 'Uri', "Intercept sending to the uri or uri pattern.", 'string', '', true, false, false, false),
-    ]),
-    new ElementMeta('doTry', 'Do Try', 'Marks the beginning of a try, catch, finally block', 'error', [
-        new PropertyMeta('doCatch', 'doCatch', "doCatch", 'array', '', false, false, true, true),
-        new PropertyMeta('doFinally', 'doFinally', "doFinally", 'DoFinally', '', false, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('resequence', 'Resequence', 'Resequences (re-order) messages based on an expression', 'eip,routing', [
-        new PropertyMeta('expression', 'Expression', "Expression to use for re-ordering the messages, such as a header with a sequence number", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('expression', 'Expression', 'A useful base class for an expression', 'language', [
-        new PropertyMeta('constant', 'constant', "constant", 'string', '', false, false, false, false),
-        new PropertyMeta('csimple', 'csimple', "csimple", 'string', '', false, false, false, false),
-        new PropertyMeta('datasonnet', 'datasonnet', "datasonnet", 'string', '', false, false, false, false),
-        new PropertyMeta('exchangeProperty', 'exchangeProperty', "exchangeProperty", 'string', '', false, false, false, false),
-        new PropertyMeta('groovy', 'groovy', "groovy", 'string', '', false, false, false, false),
-        new PropertyMeta('header', 'header', "header", 'string', '', false, false, false, false),
-        new PropertyMeta('hl7terser', 'hl7terser', "hl7terser", 'string', '', false, false, false, false),
-        new PropertyMeta('joor', 'joor', "joor", 'string', '', false, false, false, false),
-        new PropertyMeta('jsonpath', 'jsonpath', "jsonpath", 'string', '', false, false, false, false),
-        new PropertyMeta('language', 'language', "language", 'string', '', false, false, false, false),
-        new PropertyMeta('method', 'method', "method", 'string', '', false, false, false, false),
-        new PropertyMeta('mvel', 'mvel', "mvel", 'string', '', false, false, false, false),
-        new PropertyMeta('ognl', 'ognl', "ognl", 'string', '', false, false, false, false),
-        new PropertyMeta('ref', 'ref', "ref", 'string', '', false, false, false, false),
-        new PropertyMeta('simple', 'simple', "simple", 'string', '', false, false, false, false),
-        new PropertyMeta('spel', 'spel', "spel", 'string', '', false, false, false, false),
-        new PropertyMeta('tokenize', 'tokenize', "tokenize", 'string', '', false, false, false, false),
-        new PropertyMeta('xpath', 'xpath', "xpath", 'string', '', false, false, false, false),
-        new PropertyMeta('xquery', 'xquery', "xquery", 'string', '', false, false, false, false),
-        new PropertyMeta('xtokenize', 'xtokenize', "xtokenize", 'string', '', false, false, false, false),
-    ]),
-    new ElementMeta('serviceCall', 'Service Call', 'To call remote services', 'eip,routing', [
-        new PropertyMeta('component', 'Component', "The component to use.", 'string', '', false, false, false, false),
-        new PropertyMeta('configurationRef', 'Configuration Ref', "Refers to a ServiceCall configuration to use", 'string', '', false, false, false, false),
-        new PropertyMeta('expressionRef', 'Expression Ref', "Set a reference to a custom Expression to use.", 'string', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('loadBalancerRef', 'Load Balancer Ref', "Sets a reference to a custom ServiceLoadBalancer to use.", 'string', '', false, false, false, false),
-        new PropertyMeta('name', 'Name', "Sets the name of the service to use", 'string', '', true, false, false, false),
-        new PropertyMeta('pattern', 'Pattern', "Sets the optional ExchangePattern used to invoke this endpoint", 'string', 'InOnly, InOptionalOut, InOut', false, false, false, false),
-        new PropertyMeta('serviceChooserRef', 'Service Chooser Ref', "Sets a reference to a custom ServiceChooser to use.", 'string', '', false, false, false, false),
-        new PropertyMeta('serviceDiscoveryRef', 'Service Discovery Ref', "Sets a reference to a custom ServiceDiscovery to use.", 'string', '', false, false, false, false),
-        new PropertyMeta('serviceFilterRef', 'Service Filter Ref', "Sets a reference to a custom ServiceFilter to use.", 'string', '', false, false, false, false),
-        new PropertyMeta('uri', 'Uri', "The uri of the endpoint to send to. The uri can be dynamic computed using the org.apache.camel.language.simple.SimpleLanguage expression.", 'string', '', false, false, false, false),
-    ]),
-    new ElementMeta('sample', 'Sample', 'Extract a sample of the messages passing through a route', 'eip,routing', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('messageFrequency', 'Message Frequency', "Sets the sample message count which only a single Exchange will pass through after this many received.", 'number', '', false, false, false, false),
-        new PropertyMeta('samplePeriod', 'Sample Period', "Sets the sample period during which only a single Exchange will pass through.", 'string', '', false, false, false, false),
-        new PropertyMeta('units', 'Units', "Sets the time units for the sample period, defaulting to seconds.", 'string', 'DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS', false, false, false, false),
-    ]),
-    new ElementMeta('dynamicRouter', 'Dynamic Router', 'Routes messages based on dynamic rules', 'eip,endpoint,routing', [
-        new PropertyMeta('cacheSize', 'Cache Size', "Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this dynamic router, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as pr [...]
-        new PropertyMeta('expression', 'Expression', "Expression to call that returns the endpoint(s) to route to in the dynamic routing. Important: The expression will be called in a while loop fashion, until the expression returns null which means the dynamic router is finished.", 'Expression', '', true, false, false, true),
-        new PropertyMeta('ignoreInvalidEndpoints', 'Ignore Invalid Endpoints', "Ignore the invalidate endpoint exception when try to create a producer with that endpoint", 'boolean', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('uriDelimiter', 'Uri Delimiter', "Sets the uri delimiter to use", 'string', '', false, false, false, false),
-    ]),
-    new ElementMeta('pipeline', 'Pipeline', 'Routes the message to a sequence of processors.', 'eip,routing', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('saga', 'Saga', 'Enables sagas on the route', 'eip,routing', [
-        new PropertyMeta('compensation', 'Compensation', "The compensation endpoint URI that must be called to compensate all changes done in the route. The route corresponding to the compensation URI must perform compensation and complete without error. If errors occur during compensation, the saga service may call again the compensation URI to retry.", 'string', '', false, false, false, false),
-        new PropertyMeta('completion', 'Completion', "The completion endpoint URI that will be called when the Saga is completed successfully. The route corresponding to the completion URI must perform completion tasks and terminate without error. If errors occur during completion, the saga service may call again the completion URI to retry.", 'string', '', false, false, false, false),
-        new PropertyMeta('completionMode', 'Completion Mode', "Determine how the saga should be considered complete. When set to AUTO, the saga is completed when the exchange that initiates the saga is processed successfully, or compensated when it completes exceptionally. When set to MANUAL, the user must complete or compensate the saga using the saga:complete or saga:compensate endpoints.", 'string', 'AUTO, MANUAL', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('propagation', 'Propagation', "Set the Saga propagation mode (REQUIRED, REQUIRES_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NEVER).", 'string', 'MANDATORY, NEVER, NOT_SUPPORTED, REQUIRED, REQUIRES_NEW, SUPPORTS', false, false, false, false),
-        new PropertyMeta('sagaServiceRef', 'Saga Service Ref', "Refers to the id to lookup in the registry for the specific CamelSagaService to use.", 'string', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-        new PropertyMeta('timeout', 'Timeout', "Set the maximum amount of time for the Saga. After the timeout is expired, the saga will be compensated automatically (unless a different decision has been taken in the meantime).", 'string', '', false, false, false, false),
-        new PropertyMeta('timeoutInMilliseconds', 'Timeout In Milliseconds', "Set the maximum amount of time for the Saga. After the timeout is expired, the saga will be compensated automatically (unless a different decision has been taken in the meantime).", 'number', '', false, false, false, false),
-    ]),
-    new ElementMeta('threads', 'Threads', 'Specifies that all steps after this node are processed asynchronously', 'eip,routing', [
-        new PropertyMeta('allowCoreThreadTimeOut', 'Allow Core Thread Time Out', "Whether idle core threads are allowed to timeout and therefore can shrink the pool size below the core pool size Is by default false", 'boolean', '', false, false, false, false),
-        new PropertyMeta('callerRunsWhenRejected', 'Caller Runs When Rejected', "Whether or not to use as caller runs as fallback when a task is rejected being added to the thread pool (when its full). This is only used as fallback if no rejectedPolicy has been configured, or the thread pool has no configured rejection handler. Is by default true", 'string', '', false, false, false, false),
-        new PropertyMeta('executorServiceRef', 'Executor Service Ref', "To refer to a custom thread pool or use a thread pool profile (as overlay)", 'string', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('keepAliveTime', 'Keep Alive Time', "Sets the keep alive time for idle threads", 'number', '', false, false, false, false),
-        new PropertyMeta('maxPoolSize', 'Max Pool Size', "Sets the maximum pool size", 'number', '', false, false, false, false),
-        new PropertyMeta('maxQueueSize', 'Max Queue Size', "Sets the maximum number of tasks in the work queue. Use -1 or Integer.MAX_VALUE for an unbounded queue", 'number', '', false, false, false, false),
-        new PropertyMeta('poolSize', 'Pool Size', "Sets the core pool size", 'number', '', false, false, false, false),
-        new PropertyMeta('rejectedPolicy', 'Rejected Policy', "Sets the handler for tasks which cannot be executed by the thread pool.", 'string', 'Abort, CallerRuns, Discard, DiscardOldest', false, false, false, false),
-        new PropertyMeta('threadName', 'Thread Name', "Sets the thread name to use.", 'string', '', false, false, false, false),
-        new PropertyMeta('timeUnit', 'Time Unit', "Sets the keep alive time unit. By default SECONDS is used.", 'string', 'DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS', false, false, false, false),
-    ]),
-    new ElementMeta('when', 'When', 'Triggers a route when an expression evaluates to true', 'eip,routing', [
-        new PropertyMeta('expression', 'Expression', "Expression used as the predicate to evaluate whether this when should trigger and route the message or not.", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('claimCheck', 'Claim Check', 'The Claim Check EIP allows you to replace message content with a claim check (a unique key), which can be used to retrieve the message content at a later time.', 'eip,routing', [
-        new PropertyMeta('filter', 'Filter', "Specified a filter to control what data gets merging data back from the claim check repository. The following syntax is supported: body - to aggregate the message body attachments - to aggregate all the message attachments headers - to aggregate all the message headers header:pattern - to aggregate all the message headers that matches the pattern. The pattern uses the following rules are applied in this order: exact match, returns true wildca [...]
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('key', 'Key', "To use a specific key for claim check id (for dynamic keys use simple language syntax as the key).", 'string', '', false, false, false, false),
-        new PropertyMeta('operation', 'Operation', "The claim check operation to use. The following operations is supported: Get - Gets (does not remove) the claim check by the given key. GetAndRemove - Gets and remove the claim check by the given key. Set - Sets a new (will override if key already exists) claim check with the given key. Push - Sets a new claim check on the stack (does not use key). Pop - Gets the latest claim check from the stack (does not use key).", 'string', 'Get, Ge [...]
-        new PropertyMeta('strategyMethodName', 'Strategy Method Name', "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", 'string', '', false, false, false, false),
-        new PropertyMeta('strategyRef', 'Strategy Ref', "To use a custom AggregationStrategy instead of the default implementation. Notice you cannot use both custom aggregation strategy and configure data at the same time.", 'string', '', false, false, false, false),
-    ]),
-    new ElementMeta('doFinally', 'Do Finally', 'Path traversed when a try, catch, finally block exits', 'error', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('filter', 'Filter', 'Filter out messages based using a predicate', 'eip,routing', [
-        new PropertyMeta('expression', 'Expression', "Expression to determine if the message should be filtered or not. If the expression returns an empty value or false then the message is filtered (dropped), otherwise the message is continued being routed.", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('aggregate', 'Aggregate', 'Aggregates many messages into a single message', 'eip,routing', [
-        new PropertyMeta('aggregateControllerRef', 'Aggregate Controller Ref', "To use a org.apache.camel.processor.aggregate.AggregateController to allow external sources to control this aggregator.", 'string', '', false, false, false, false),
-        new PropertyMeta('aggregationRepositoryRef', 'Aggregation Repository Ref', "Sets the custom aggregate repository to use. Will by default use org.apache.camel.processor.aggregate.MemoryAggregationRepository", 'string', '', false, false, false, false),
-        new PropertyMeta('closeCorrelationKeyOnCompletion', 'Close Correlation Key On Completion', "Closes a correlation key when its complete. Any late received exchanges which has a correlation key that has been closed, it will be defined and a ClosedCorrelationKeyException is thrown.", 'number', '', false, false, false, false),
-        new PropertyMeta('completeAllOnStop', 'Complete All On Stop', "Indicates to wait to complete all current and partial (pending) aggregated exchanges when the context is stopped. This also means that we will wait for all pending exchanges which are stored in the aggregation repository to complete so the repository is empty before we can stop. You may want to enable this when using the memory based aggregation repository that is memory based only, and do not store data on disk. When [...]
-        new PropertyMeta('completionFromBatchConsumer', 'Completion From Batch Consumer', "Enables the batch completion mode where we aggregate from a org.apache.camel.BatchConsumer and aggregate the total number of exchanges the org.apache.camel.BatchConsumer has reported as total by checking the exchange property org.apache.camel.Exchange#BATCH_COMPLETE when its complete. This option cannot be used together with discardOnAggregationFailure.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('completionInterval', 'Completion Interval', "A repeating period in millis by which the aggregator will complete all current aggregated exchanges. Camel has a background task which is triggered every period. You cannot use this option together with completionTimeout, only one of them can be used.", 'string', '', false, false, false, false),
-        new PropertyMeta('completionOnNewCorrelationGroup', 'Completion On New Correlation Group', "Enables completion on all previous groups when a new incoming correlation group. This can for example be used to complete groups with same correlation keys when they are in consecutive order. Notice when this is enabled then only 1 correlation group can be in progress as when a new correlation group starts, then the previous groups is forced completed.", 'boolean', '', false, false, false, [...]
-        new PropertyMeta('completionPredicate', 'Completion Predicate', "A Predicate to indicate when an aggregated exchange is complete. If this is not specified and the AggregationStrategy object implements Predicate, the aggregationStrategy object will be used as the completionPredicate.", 'Expression', '', false, false, false, true),
-        new PropertyMeta('completionSize', 'Completion Size', "Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0.", 'number', '', false, false, false, false),
-        new PropertyMeta('completionSizeExpression', 'Completion Size Expression', "Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0.", 'Expression', '', false, false, false, true),
-        new PropertyMeta('completionTimeout', 'Completion Timeout', "Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot use this option together with completionInterval, only one of the two ca [...]
-        new PropertyMeta('completionTimeoutCheckerInterval', 'Completion Timeout Checker Interval', "Interval in millis that is used by the background task that checks for timeouts ( org.apache.camel.TimeoutMap ). By default the timeout checker runs every second. The timeout is an approximation and there is no guarantee that the a timeout is triggered exactly after the timeout value. It is not recommended to use very low timeout values or checker intervals.", 'string', '', false, false,  [...]
-        new PropertyMeta('completionTimeoutExpression', 'Completion Timeout Expression', "Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot use this option together with completionInterval, o [...]
-        new PropertyMeta('correlationExpression', 'Correlation Expression', "The expression used to calculate the correlation key to use for aggregation. The Exchange which has the same correlation key is aggregated together. If the correlation key could not be evaluated an Exception is thrown. You can disable this by using the ignoreBadCorrelationKeys option.", 'Expression', '', true, false, false, true),
-        new PropertyMeta('discardOnAggregationFailure', 'Discard On Aggregation Failure', "Discards the aggregated message when aggregation failed (an exception was thrown from AggregationStrategy . This means the partly aggregated message is dropped and not sent out of the aggregator. This option cannot be used together with completionFromBatchConsumer.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('discardOnCompletionTimeout', 'Discard On Completion Timeout', "Discards the aggregated message on completion timeout. This means on timeout the aggregated message is dropped and not sent out of the aggregator.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('eagerCheckCompletion', 'Eager Check Completion', "Use eager completion checking which means that the completionPredicate will use the incoming Exchange. As opposed to without eager completion checking the completionPredicate will use the aggregated Exchange.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('executorServiceRef', 'Executor Service Ref', "If using parallelProcessing you can specify a custom thread pool to be used. In fact also if you are not using parallelProcessing this custom thread pool is used to send out aggregated exchanges as well.", 'string', '', false, false, false, false),
-        new PropertyMeta('forceCompletionOnStop', 'Force Completion On Stop', "Indicates to complete all current aggregated exchanges when the context is stopped", 'boolean', '', false, false, false, false),
-        new PropertyMeta('ignoreInvalidCorrelationKeys', 'Ignore Invalid Correlation Keys', "If a correlation key cannot be successfully evaluated it will be ignored by logging a DEBUG and then just ignore the incoming Exchange.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('optimisticLocking', 'Optimistic Locking', "Turns on using optimistic locking, which requires the aggregationRepository being used, is supporting this by implementing org.apache.camel.spi.OptimisticLockingAggregationRepository .", 'boolean', '', false, false, false, false),
-        new PropertyMeta('parallelProcessing', 'Parallel Processing', "When aggregated are completed they are being send out of the aggregator. This option indicates whether or not Camel should use a thread pool with multiple threads for concurrency. If no custom thread pool has been specified then Camel creates a default pool with 10 concurrent threads.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-        new PropertyMeta('strategyMethodAllowNull', 'Strategy Method Allow Null', "If this option is false then the aggregate method is not used for the very first aggregation. If this option is true then null values is used as the oldExchange (at the very first aggregation), when using POJOs as the AggregationStrategy.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('strategyMethodName', 'Strategy Method Name', "This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy.", 'string', '', false, false, false, false),
-        new PropertyMeta('strategyRef', 'Strategy Ref', "A reference to lookup the AggregationStrategy in the Registry. Configuring an AggregationStrategy is required, and is used to merge the incoming Exchange with the existing already merged exchanges. At first call the oldExchange parameter is null. On subsequent invocations the oldExchange contains the merged exchanges and newExchange is of course the new incoming Exchange.", 'string', '', false, false, false, false),
-        new PropertyMeta('timeoutCheckerExecutorServiceRef', 'Timeout Checker Executor Service Ref', "If using either of the completionTimeout, completionTimeoutExpression, or completionInterval options a background thread is created to check for the completion for every aggregator. Set this option to provide a custom thread pool to be used rather than creating a new thread for every aggregator.", 'string', '', false, false, false, false),
-    ]),
-    new ElementMeta('transform', 'Transform', 'Transforms the message body based on an expression', 'eip,transformation', [
-        new PropertyMeta('expression', 'Expression', "Expression to return the transformed message body (the new message body to use)", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-    ]),
-    new ElementMeta('idempotentConsumer', 'Idempotent Consumer', 'Filters out duplicate messages', 'eip,routing', [
-        new PropertyMeta('completionEager', 'Completion Eager', "Sets whether to complete the idempotent consumer eager or when the exchange is done. If this option is true to complete eager, then the idempotent consumer will trigger its completion when the exchange reached the end of the block of the idempotent consumer pattern. So if the exchange is continued routed after the block ends, then whatever happens there does not affect the state. If this option is false (default) to not com [...]
-        new PropertyMeta('eager', 'Eager', "Sets whether to eagerly add the key to the idempotent repository or wait until the exchange is complete. Eager is default enabled.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('expression', 'Expression', "Expression used to calculate the correlation key to use for duplicate check. The Exchange which has the same correlation key is regarded as a duplicate and will be rejected.", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('messageIdRepositoryRef', 'Message Id Repository Ref', "Sets the reference name of the message id repository", 'string', '', true, false, false, false),
-        new PropertyMeta('removeOnFailure', 'Remove On Failure', "Sets whether to remove or keep the key on failure. The default behavior is to remove the key on failure.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('skipDuplicate', 'Skip Duplicate', "Sets whether to skip duplicates or not. The default behavior is to skip duplicates. A duplicate message would have the Exchange property org.apache.camel.Exchange#DUPLICATE_MESSAGE set to a Boolean#TRUE value. A none duplicate message will not have this property set.", 'boolean', '', false, false, false, false),
-        new PropertyMeta('steps', 'steps', "steps", 'array', '', false, false, true, true),
-    ]),
-    new ElementMeta('setProperty', 'Set Property', 'Sets a named property on the message exchange', 'eip,transformation', [
-        new PropertyMeta('expression', 'Expression', "Expression to return the value of the message exchange property", 'Expression', '', true, false, false, true),
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('name', 'Name', "Name of exchange property to set a new value. The simple language can be used to define a dynamic evaluated exchange property name to be used. Otherwise a constant name will be used.", 'string', '', true, false, false, false),
-    ]),
-    new ElementMeta('inOut', 'In Out', 'Marks the exchange pattern for the route to request/reply', 'eip,endpoint,routing', [
-        new PropertyMeta('inheritErrorHandler', 'inheritErrorHandler', "inheritErrorHandler", 'boolean', '', false, false, false, false),
-        new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', false, false, false, false),
-        new PropertyMeta('uri', 'Uri', "Sets the uri of the endpoint to send to.", 'string', '', true, false, false, false),
-    ]),
-]
diff --git a/karavan-app/src/main/webapp/src/designer/api/CamelUi.tsx b/karavan-app/src/main/webapp/src/designer/api/CamelUi.tsx
deleted file mode 100644
index 10749e9..0000000
--- a/karavan-app/src/main/webapp/src/designer/api/CamelUi.tsx
+++ /dev/null
@@ -1,241 +0,0 @@
-import {KameletApi} from "./KameletApi";
-import {CamelElement} from "../model/CamelModel";
-import {Kamelet, Property} from "../model/KameletModels";
-import {DslMetaModel} from "../model/DslMetaModel";
-import {Metadata} from "./CamelMetadata";
-
-const DslElements: string[] = [
-    "aggregate",
-    "choice",
-    // "circuitBreaker",
-    "convertBodyTo",
-    "doTry",
-    "dynamicRouter",
-    "enrich",
-    "filter",
-    "log",
-    "loop",
-    "marshal",
-    "multicast",
-    "pollEnrich",
-    "recipientList",
-    "removeHeader",
-    "removeHeaders",
-    "resequence",
-    "saga",
-    "setBody",
-    "setHeader",
-    "sort",
-    "split",
-    "threads",
-    "throttle",
-    "to",
-    "toD",
-    "transform",
-    "unmarshal",
-    "validate",
-    "wireTap",
-];
-const DslLabels = ["routing", "transformation", "error", "configuration"];
-const KameletLabels = ["source", "sink", "action"];
-const defaultIcon =
-    "data:image/svg+xml,%3Csvg viewBox='0 0 130.21 130.01' xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3ClinearGradient id='a' x1='333.48' x2='477' y1='702.6' y2='563.73' gradientTransform='translate(94.038 276.06) scale(.99206)' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23F69923' offset='0'/%3E%3Cstop stop-color='%23F79A23' offset='.11'/%3E%3Cstop stop-color='%23E97826' offset='.945'/%3E%3C/linearGradient%3E%3ClinearGradient id='b' x1='333.48' x2='477' y1='702.6' y2='563 [...]
-
-export class CamelUi {
-    static getSelectorLabels = (
-        parentType: string
-    ): [string, "element" | "kamel"][] => {
-        switch (parentType) {
-            case "":
-                return [
-                    ["routing", "element"],
-                    ["source", "kamel"],
-                ];
-            case "choice":
-                return [["routing", "element"]];
-            default:
-                const r: [string, "element" | "kamel"][] = DslLabels.map((value) => [
-                    value,
-                    "element",
-                ]);
-                r.push(["sink", "kamel"]);
-                r.push(["action", "kamel"]);
-                return r;
-        }
-    };
-
-    static sortSelectorModels = (models: DslMetaModel[]): DslMetaModel[] => {
-        return models.sort((a, b) => (a.title > b.title ? 1 : -1));
-    };
-    static getSelectorModels = (
-        label: string,
-        type: "element" | "kamel",
-        parentDslName: string
-    ): DslMetaModel[] => {
-        if (type === "element") {
-            if (parentDslName === undefined || parentDslName.length === 0) {
-                return Metadata.filter((m) => m.name === "from").map(
-                    (m) =>
-                        new DslMetaModel({
-                            name: m.name,
-                            title: m.title,
-                            description: m.description,
-                        })
-                );
-            } else if (parentDslName === "choice") {
-                return Metadata.filter((m) =>
-                    ["when", "otherwise"].includes(m.name)
-                ).map(
-                    (m) =>
-                        new DslMetaModel({
-                            name: m.name,
-                            title: m.title,
-                            description: m.description,
-                        })
-                );
-            } else {
-                return Metadata.filter((m) => DslElements.includes(m.name))
-                    .filter((m) => m.labels.includes(label))
-                    .map(
-                        (m) =>
-                            new DslMetaModel({
-                                name: m.name,
-                                title: m.title,
-                                description: m.description,
-                            })
-                    );
-            }
-        } else {
-            return KameletApi.getKamelets()
-                .filter(
-                    (k) => k.metadata.labels["camel.apache.org/kamelet.type"] === label
-                )
-                .map(
-                    (k) =>
-                        new DslMetaModel({
-                            name: parentDslName ? "to" : "from",
-                            uri: "kamelet:" + k.metadata.name,
-                            title: k.title(),
-                            description: k.title(),
-                        })
-                );
-        }
-    };
-
-    static nameFomTitle = (title: string): string => {
-        return title.replace(/[^a-z0-9+]+/gi, "-").toLowerCase();
-    };
-
-    static titleFromName = (name?: string) => {
-        return name
-            ? name
-                .replace(".yaml", "")
-                .split("-")
-                .map((value) => CamelUi.capitalizeName(value))
-                .reduce(
-                    (previousValue, currentValue) => previousValue + " " + currentValue
-                )
-            : name;
-    };
-
-    static isKameletComponent = (element: CamelElement | undefined): boolean => {
-        if (element && ["from", "to"].includes(element.dslName)) {
-            const uri: string = (element as any).uri;
-            return uri !== undefined && uri.startsWith("kamelet:");
-        } else {
-            return false;
-        }
-    };
-
-    static getKamelet = (element: CamelElement): Kamelet | undefined => {
-        if (["from", "to"].includes(element.dslName)) {
-            const uri: string = (element as any).uri;
-            const k =
-                uri !== undefined ? KameletApi.findKameletByUri(uri) : undefined;
-            return k;
-        } else {
-            return undefined;
-        }
-    };
-
-    static getKameletProperties = (element: any): Property[] => {
-        const uri: string = (element as any).uri;
-        const kamelet = KameletApi.findKameletByUri(uri);
-        return kamelet
-            ? KameletApi.getKameletProperties(kamelet?.metadata.name)
-            : [];
-    };
-
-    static getTitle = (element: CamelElement): string => {
-        const uri: string = (element as any).uri;
-        const k: Kamelet | undefined = CamelUi.getKamelet(element);
-        if (k) {
-            return CamelUi.capitalizeName(element.dslName) + ":" + k.title();
-        } else {
-            return uri
-                ? CamelUi.capitalizeName(element.dslName) + ":" + uri
-                : CamelUi.capitalizeName(element.dslName);
-        }
-    };
-
-    static getKameletIcon = (uri: string | undefined): string => {
-        return uri ? KameletApi.findKameletByUri(uri)?.icon() || "" : "";
-    };
-    static getIconForName = (dslName: string): string => {
-        switch (dslName) {
-            case "filter":
-                return "data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-prefix='fas' data-icon='filter' class='svg-inline--fa fa-filter fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z'%3E%3C/path%3E%3C/svg%3E";
-            case "otherwise":
-                return "data:image/svg+xml,%0A%3Csvg aria-hidden='true' focusable='false' data-prefix='fas' data-icon='exclamation' class='svg-inline--fa fa-exclamation fa-w-6' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 192 512'%3E%3Cpath fill='currentColor' d='M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 [...]
-            case "choice":
-                return "data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='24px' height='24px' viewBox='0 0 24 24' enable-background='new 0 0 24 24' xml:space='preserve'%3E%3Cimage id='image0' width='24' height='24' x='0' y='0' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAAAAADFHGIkAAAABGdBTUEAALGPC/xhBQAAACBjSFJN%0AAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAm [...]
-            case "when":
-                return "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' height='1em' width='1em' viewBox='0 0 384 512' aria-hidden='true' role='img' style='vertical-align: -0.125em;'%3E%3Cpath d='M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423  [...]
-            case "aggregate":
-                return "data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='512px' height='640px' viewBox='0 0 512 640' enable-background='new 0 0 512 640' xml:space='preserve'%3E%3Cimage id='image0' width='512' height='640' x='0' y='0' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAKACAAAAADPo5/+AAAABGdBTUEAALGPC/xhBQAAACBjSFJN%0AAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3Ccul [...]
-            case "split":
-                return "data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='512px' height='640px' viewBox='0 0 512 640' enable-background='new 0 0 512 640' xml:space='preserve'%3E%3Cimage id='image0' width='512' height='640' x='0' y='0' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAKACAAAAADPo5/+AAAABGdBTUEAALGPC/xhBQAAACBjSFJN%0AAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3Ccul [...]
-            case "sort":
-                return "data:image/svg+xml,%0A%3Csvg aria-hidden='true' focusable='false' data-prefix='fas' data-icon='sort-amount-up' class='svg-inline--fa fa-sort-amount-up fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0- [...]
-            case "loop":
-                return "data:image/svg+xml,%0A%3Csvg aria-hidden='true' focusable='false' data-prefix='fas' data-icon='undo' class='svg-inline--fa fa-undo fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-6 [...]
-            case "multicast":
-                return "data:image/svg+xml,%0A%3Csvg aria-hidden='true' focusable='false' data-prefix='fas' data-icon='arrows-alt' class='svg-inline--fa fa-arrows-alt fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373 [...]
-            case "from":
-                return defaultIcon;
-            case "to":
-                return defaultIcon;
-            default:
-                return defaultIcon;
-        }
-    };
-
-    static getIcon = (element: CamelElement): string => {
-        const k: Kamelet | undefined = CamelUi.getKamelet(element);
-        if (["from", "to"].includes(element.dslName)) {
-            return k ? k.icon() : defaultIcon;
-        } else {
-            return CamelUi.getIconForName(element.dslName);
-        }
-    };
-
-    static capitalizeName = (name: string) => {
-        try {
-            return name[0].toUpperCase() + name.substring(1);
-        } catch (e) {
-            return name;
-        }
-    };
-
-    static camelizeName = (
-        name: string,
-        separator: string,
-        firstSmall: boolean
-    ) => {
-        const res = name
-            .split(separator)
-            .map((value) => CamelUi.capitalizeName(value))
-            .join("");
-        return firstSmall ? res[0].toLowerCase() + res.substring(1) : res;
-    };
-}
diff --git a/karavan-app/src/main/webapp/src/designer/api/CamelYaml.tsx b/karavan-app/src/main/webapp/src/designer/api/CamelYaml.tsx
deleted file mode 100644
index 63e9abd..0000000
--- a/karavan-app/src/main/webapp/src/designer/api/CamelYaml.tsx
+++ /dev/null
@@ -1,103 +0,0 @@
-import * as yaml from 'js-yaml';
-import {
-    Integration,
-    CamelElement,
-    ToStep,
-    Otherwise,
-    Expression,
-    WhenStep,
-    ChoiceStep,
-    FilterStep, FromStep, MulticastStep,
-} from "../model/CamelModel";
-import {CamelApi} from "./CamelApi";
-
-// TODO need to split and regroup functions here
-export class CamelYaml {
-
-    static integrationToYaml = (integration: Integration): string => {
-        const clone: any = Object.assign({}, integration);
-        const flows = integration.spec.flows
-        clone.spec.flows = flows.map((f: any) => CamelYaml.cleanupElement(f));
-        const i = JSON.parse(JSON.stringify(clone, null, 3)); // fix undefined in string attributes
-        const text = yaml.dump(i);
-        return text;
-    }
-
-    static cleanupElement = (element: CamelElement): CamelElement => {
-        const result: any = Object.assign({}, element)
-        if (result.dslName === 'expression'){
-            delete result.language
-        }
-        delete result.uuid
-        delete result.dslName
-        Object.keys(result).forEach(key => {
-            if (result[key] instanceof CamelElement) {
-                result[key] = CamelYaml.cleanupElement(result[key])
-            } else if (Array.isArray(result[key])) {
-                result[key] = CamelYaml.cleanupElements(result[key])
-            }
-        })
-        return result as CamelElement
-    }
-
-    static cleanupElements = (elements: CamelElement[]): CamelElement[] => {
-        const result: any[] = []
-        elements.forEach(element => {
-            const newElement = CamelYaml.cleanupElement(element)
-            result.push(newElement)
-        })
-        return result
-    }
-
-    static yamlToIntegration = (text: string): Integration => {
-        const fromYaml: any = yaml.load(text);
-        const int: Integration = new Integration({...fromYaml});
-        const flows = int.spec.flows.map(f => CamelApi.createFrom(f))
-        int.spec.flows = flows;
-        return int;
-    }
-
-    static cloneIntegration = (integration: Integration): Integration => {
-        const clone = JSON.parse(JSON.stringify(integration));
-        const int: Integration = new Integration({...clone});
-        const flows = int.spec.flows.map(f => CamelApi.createFrom(f))
-        int.spec.flows = flows;
-        return int;
-    }
-
-    static cloneStep = (step: CamelElement): CamelElement => {
-        const dslName = step.dslName.replace("Step", "");
-        const clone = JSON.parse(JSON.stringify(step));
-        return CamelApi.createStep(dslName, clone);
-    }
-
-    static demo = (): Integration => {
-        const to0 = new ToStep({uri: 'log:demo0'});
-        const to1 = new ToStep({uri: 'log:demo1'});
-        const to2 = new ToStep({uri: 'log:demo2'});
-        const to3 = new ToStep({uri: 'log:demo3'});
-        const to4 = new ToStep({uri: 'log:demo4'});
-        const to5 = new ToStep({uri: 'kamelet:ftp-sink', parameters:{host:'localhost', port:'8021'}});
-        const direct1 = new ToStep({uri: 'direct1'});
-        const direct2 = new ToStep({uri: 'direct2'});
-        const direct3 = new ToStep({uri: 'direct3'});
-
-        const otherwise = new Otherwise({steps: [to0]})
-        const expression1 = new Expression({simple: '${body} == "hello"'});
-        const when1 = new WhenStep({steps: [to1, to5], expression: expression1})
-        const expression2 = new Expression({simple: '${body} == "hello"'});
-        const when2 = new WhenStep({steps: [to2], expression: expression2})
-
-        const choice = new ChoiceStep({otherwise: otherwise, when: [when1, when2]})
-
-        const expression = new Expression({simple: '${body} == "hello"'});
-        const filter = new FilterStep({expression: expression, steps:[to3, to4]})
-
-        const multicast = new MulticastStep({steps:[direct1, direct2, direct3]})
-        const from = new FromStep({uri: 'direct1', steps: [filter, multicast, choice]});
-        const flows: FromStep[] = [from as FromStep];
-        const int = new Integration({metadata: {name: "hello-world"}, spec: {flows: flows}});
-        return int;
-    }
-}
-
diff --git a/karavan-app/src/main/webapp/src/designer/api/EventBus.tsx b/karavan-app/src/main/webapp/src/designer/api/EventBus.tsx
deleted file mode 100644
index d5511da..0000000
--- a/karavan-app/src/main/webapp/src/designer/api/EventBus.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import {Subject} from 'rxjs';
-import {CamelElement} from "../model/CamelModel";
-import {InOut} from "../model/ConnectionModels";
-
-const positions = new Subject<DslPosition>();
-
-export class DslPosition {
-    step: CamelElement = new CamelElement("")
-    rect: DOMRect = new DOMRect()
-
-    constructor(step: CamelElement, rect: DOMRect) {
-        this.step = step;
-        this.rect = rect;
-    }
-}
-
-export class InOutPosition {
-    inout: InOut = new InOut('in', '', '', 0, 0)
-    rect: DOMRect = new DOMRect()
-
-    constructor(inout: InOut, rect: DOMRect) {
-        this.inout = inout;
-        this.rect = rect;
-    }
-}
-
-export const EventBus = {
-    sendPosition: (step: CamelElement, rect: DOMRect) => positions.next(new DslPosition(step, rect)),
-    onPosition: () => positions.asObservable(),
-};
diff --git a/karavan-app/src/main/webapp/src/designer/api/KameletApi.tsx b/karavan-app/src/main/webapp/src/designer/api/KameletApi.tsx
deleted file mode 100644
index ff1bb23..0000000
--- a/karavan-app/src/main/webapp/src/designer/api/KameletApi.tsx
+++ /dev/null
@@ -1,102 +0,0 @@
-import {Kamelet, Property} from "../model/KameletModels";
-import * as yaml from 'js-yaml';
-
-export const Kamelets: Kamelet[] = [];
-
-export const KameletApi = {
-
-    getKameletProperties: (kameletName: string): Property[] => {
-        const kamelet: Kamelet | undefined = KameletApi.findKameletByName(kameletName);
-        const properties: Property[] = [];
-        try {
-            if (kamelet !== undefined) {
-                const map: Map<string, any> = kamelet.spec.definition.properties ? new Map(Object.entries(kamelet.spec.definition.properties)) : new Map();
-                map.forEach((value, key, map) => {
-                    const prop = new Property();
-                    prop.id = key;
-                    prop.title = value.title;
-                    prop.default = value.default;
-                    prop.description = value.description;
-                    prop.format = value.format;
-                    prop.example = value.example;
-                    prop.type = value.type;
-                    if (value.default) prop.value = value.default
-                    prop["x-descriptors"] = value["x-descriptors"];
-                    properties.push(prop);
-                })
-            }
-        } finally {
-            return properties;
-        }
-    },
-
-    getKamelets: (): Kamelet[] => {
-        return Kamelets;
-    },
-
-    jsonToKamelet: (json: string) => {
-        const fromJson: Kamelet = JSON.parse(json) as Kamelet;
-        const k: Kamelet = new Kamelet(fromJson);
-        return k;
-    },
-
-
-    findKameletByName: (name: string): Kamelet | undefined => {
-        return Kamelets.find((k: Kamelet) => k.metadata.name === name);
-    },
-
-    findKameletByUri: (uri: string): Kamelet | undefined => {
-        return KameletApi.findKameletByName(uri.split(":")[1]);
-    },
-
-    requestKamelet: async (name: string): Promise<Kamelet> => {
-        // const res = await axios("/kamelet/" + name);
-        // const text: string = await res.data;
-        // const fromYaml = yaml.load(text);
-        const fromYaml = '';
-        return KameletApi.jsonToKamelet(JSON.stringify(fromYaml));
-    },
-
-    yamlToKamelet: (text: string):Kamelet => {
-        const fromYaml = yaml.load(text);
-        return KameletApi.jsonToKamelet(JSON.stringify(fromYaml));
-    },
-
-    prepareKamelets: () => {
-        Kamelets.splice(0, Kamelets.length);
-        // axios.get('/kamelet',
-        //     {headers: {'Accept': 'application/json'}})
-        //     .then(res => {
-        //         if (res.status === 200) {
-        //             KameletApi.loadKamelets(res.data);
-        //         }
-        //     }).catch(err => {
-        //     console.log(err);
-        // });
-    },
-
-    loadKamelets: (kameletNames: string[]) => {
-        const promises = kameletNames.map((name: string) => KameletApi.requestKamelet(name));
-        Promise.all(promises).then(function (list) {
-            const result: Kamelet[] = list as Kamelet[];
-            Kamelets.push(...result.sort((a, b) => {
-                    if (a.spec.definition.title < b.spec.definition.title) {
-                        return -1;
-                    }
-                    return a.spec.definition.title > b.spec.definition.title ? 1 : 0;
-                })
-            );
-        });
-    },
-
-    saveKamelets: (kameletYamls: string[]) => {
-        const kamelets:Kamelet[] = kameletYamls.map(text => KameletApi.yamlToKamelet(text));
-        Kamelets.push(...kamelets.sort((a, b) => {
-                if (a.spec.definition.title < b.spec.definition.title) {
-                    return -1;
-                }
-                return a.spec.definition.title > b.spec.definition.title ? 1 : 0;
-            })
-        );
-    }
-}
\ No newline at end of file
diff --git a/karavan-app/src/main/webapp/src/designer/karavan.css b/karavan-app/src/main/webapp/src/designer/karavan.css
deleted file mode 100644
index abfc40b..0000000
--- a/karavan-app/src/main/webapp/src/designer/karavan.css
+++ /dev/null
@@ -1,554 +0,0 @@
-.karavan {
-    color: var(--pf-global--Color--100);
-}
-
-.karavan .tools-section {
-    padding-top: 0px;
-    padding-bottom: 0px;
-    padding-right: 0;
-    border-bottom: 1px solid #eee;
-}
-
-.karavan .tools-section .dsl-title {
-    display: flex;
-    flex-direction: row;
-}
-
-.karavan .tools-section .dsl-title .title {
-    margin-right: 16px;
-}
-
-.karavan .brand {
-    height: 36px;
-}
-
-.karavan .header-button {
-    margin-left: var(--pf-c-page__header-tools--MarginRight);
-}
-
-.karavan .page-header {
-    display: flex;
-    justify-content: space-between;
-}
-
-.karavan .page-header .top-toolbar .pf-c-page__header-tools{
-    margin-right: 0;
-}
-.karavan .page-header .top-toolbar {
-    width: 100%;
-}
-
-.karavan .page-header .pf-c-page__header-brand {
-    padding-right: 16px;
-}
-
-.karavan .main-alert {
-    position: fixed;
-    width: 500px;
-    height: 90px;
-    left: 50%;
-    margin-top: 20px;
-    margin-left: -250px;
-}
-
-.filler {
-    width: 100%;
-}
-
-.modal-footer {
-    width: 100%;
-}
-
-.modal-footer .deploy-buttons .pf-c-form__actions {
-    justify-content: flex-end;
-    margin-top: 16px;
-}
-
-.modal-footer .deploy-buttons .pf-c-button {
-    margin-left: 16px;
-}
-
-.action-buttons .pf-c-form__actions {
-    justify-content: flex-end;
-    margin-top: 16px;
-}
-
-.action-buttons .pf-c-button {
-    margin-left: 16px;
-}
-
-.pf-c-modal-box__footer .hidden {
-    display: none;
-}
-
-.upload-buttons .pf-c-form__actions {
-    margin-top: 20px;
-    justify-content: flex-end;
-}
-
-/*integration page*/
-.integration-page .integration-card {
-    cursor: pointer;
-    height: 160px;
-}
-
-.integration-page .integration-card .pf-c-card__header {
-    padding-right: 6px;
-}
-
-.integration-page .integration-card .icon {
-    height: 24px;
-}
-
-.integration-page .integration-card .delete-button {
-    font-size: 17px;
-    line-height: 1;
-    border: 0;
-    padding: 0;
-    margin: 0;
-    background: transparent;
-    color: #b1b1b7;
-    visibility: hidden;
-}
-
-.integration-page .integration-card:hover .delete-button {
-    visibility: visible;
-}
-
-/*kamelets*/
-.kamelets-page .kamelet-card {
-    cursor: pointer;
-    height: 160px;
-}
-
-.kamelets-page .kamelet-card .pf-c-card__header {
-    padding-right: 6px;
-}
-
-.kamelets-page .kamelet-card .pf-c-card__body {
-    overflow: hidden;
-    position: relative;
-}
-
-.kamelets-page .kamelet-card .kamelet-icon {
-    height: 24px;
-    margin-top: auto;
-    margin-bottom: auto;
-    border: none;
-    -webkit-user-select: none;
-    -khtml-user-select: none;
-    -moz-user-select: none;
-    -o-user-select: none;
-    user-select: none;
-}
-
-/*kamelet modal*/
-.kamelet-modal-card .pf-c-card__header {
-    padding-right: 6px;
-    display: flex;
-    justify-content: space-between;
-}
-
-.kamelet-modal-card .pf-c-card__title {
-    font-weight: 600;
-}
-
-.kamelet-modal-card .description {
-    overflow: hidden;
-    position: relative;
-    max-width: 600px;
-}
-
-.kamelet-modal-card .kamelet-icon {
-    height: 36px;
-    margin-top: auto;
-    margin-bottom: auto;
-    border: none;
-    -webkit-user-select: none;
-    -khtml-user-select: none;
-    -moz-user-select: none;
-    -o-user-select: none;
-    user-select: none;
-}
-
-/*DSL*/
-.karavan .dsl-page {
-    height: 100%;
-    overflow: hidden;
-}
-
-.karavan .dsl-page .dsl-page-columns {
-    display: flex;
-    flex-direction: row;
-    height: 100%;
-}
-
-/*Properties*/
-.karavan .dsl-page .properties {
-    border: 1px solid #eee;
-    padding: 10px 10px 10px 10px;
-    font-size: 13px;
-    background: #fcfcfc;
-    width: 450px;
-    height: 100%;
-    overflow: auto;
-    display: flex;
-    flex-direction: column;
-    justify-content: space-between;
-}
-
-.karavan .dsl-page .properties .headers {
-    grid-row-gap: 10px;
-    row-gap: 10px;
-    display: contents;
-}
-
-.karavan .dsl-page .properties .footer {
-    height: 100%;
-    display: contents;
-}
-
-.karavan .dsl-page .properties .pf-c-form {
-    row-gap: 10px;
-}
-
-.karavan .dsl-page .properties .pf-c-form__group-label {
-    padding-bottom: 3px;
-    display: flex;
-    justify-content: space-between;
-}
-
-.karavan .dsl-page .properties .pf-c-form__label {
-    font-size: 13px;
-}
-
-.karavan .dsl-page .properties .text-field {
-    font-size: 13px;
-    height: auto;
-}
-
-.karavan .dsl-page .properties .expression-title {
-    font-size: 17px;
-    font-weught: bold;
-}
-
-.karavan .dsl-page .properties .text-area {
-    font-size: 13px;
-}
-
-.karavan .dsl-page .properties .pf-c-select__menu-search {
-    padding: 0px 6px 6px 6px;
-}
-
-.karavan .dsl-page .properties .pf-c-select__toggle-typeahead {
-    font-size: 13px;
-    height: auto;
-}
-
-.karavan .dsl-page .properties .pf-c-select__menu-item {
-    width: 280px;
-    font-size: 15px;
-    /*white-space: nowrap;*/
-    /*overflow: hidden;*/
-    /*text-overflow: ellipsis;*/
-    /*line-height: 12px;*/
-}
-
-.karavan .dsl-page .properties .number {
-    display: flex;
-    justify-content: space-between;
-}
-
-.karavan .dsl-page .properties .number .number-property {
-    width: 100%;
-}
-
-.karavan .dsl-page .properties .number .clear-button {
-    color: #b1b1b7;
-    --pf-c-button--BorderRadius: var(--pf-c-button--m-control--BorderRadius);
-    --pf-c-button--disabled--BackgroundColor: var(--pf-c-button--m-control--disabled--BackgroundColor);
-    --pf-c-button--after--BorderWidth: var(--pf-c-button--m-control--after--BorderWidth);
-    --pf-c-button--after--BorderColor: var(--pf-c-button--m-control--after--BorderTopColor) var(--pf-c-button--m-control--after--BorderRightColor) var(--pf-c-button--m-control--after--BorderBottomColor) var(--pf-c-button--m-control--after--BorderLeftColor);
-    color: var(--pf-c-button--m-control--Color);
-    background-color: var(--pf-c-button--m-control--BackgroundColor);
-    padding-left: 5px;
-    padding-right: 5px;
-}
-
-.karavan .dsl-page .properties .help-button {
-    font-size: 12px;
-}
-
-.karavan .dsl-page .properties .component-selector {
-    border-width: var(--pf-global--BorderWidth--sm);
-    border-top-color: var(--pf-global--BorderColor--300);
-    border-right-color: var(--pf-global--BorderColor--300);
-    border-bottom-color: var(--pf-global--BorderColor--200);
-    border-left-color: var(--pf-global--BorderColor--300);
-    border-style: solid;
-}
-
-.karavan .dsl-page .properties .expression,
-.karavan .dsl-page .properties .parameters {
-    padding-top: 6px;
-    padding-left: 16px;
-    grid-row-gap: 10px;
-    row-gap: 10px;
-    display: grid;
-}
-
-.karavan .dsl-page .properties .expression .pf-c-form__group-label,
-.karavan .dsl-page .properties .parameters .pf-c-form__group-label {
-    font-weight: 100;
-}
-
-.karavan .dsl-page .properties .expression .pf-c-form__group {
-    margin-bottom: 10px;
-}
-
-.karavan .dsl-page .properties .expression .pf-c-select__menu-wrapper {
-    width: 350px;
-}
-
-.karavan .dsl-page .flows {
-    display: block;
-    flex-direction: column;
-    font-size: 13px;
-    height: 100%;
-    width: 100%;
-    overflow-y: auto;
-    /*padding-bottom: 100px;*/
-    position: relative;
-}
-
-.karavan .dsl-page .flows .add-flow {
-    margin-top: 16px;
-    display: flex;
-    justify-content: center;
-}
-
-.karavan .dsl-page .flows .connections {
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 100%;
-    z-index: 13;
-}
-
-.karavan .dsl-page .flows .connections .incoming {
-    border-color: #e97826;
-    border-style: solid;
-    border-radius: 50px;
-    border-width: 1px;
-    background: #fff;
-    width: 50px;
-    height: 50px;
-    position: absolute;
-    left: 6px;
-    display: flex;
-}
-
-.karavan .dsl-page .flows .connections .outgoing {
-    border-color: #e97826;
-    border-style: solid;
-    border-radius: 50px;
-    border-width: 1px;
-    background: #fff;
-    width: 50px;
-    height: 50px;
-    position: absolute;
-    right: 1px;
-    display: flex;
-}
-
-.karavan .dsl-page .flows .connections .incoming .icon,
-.karavan .dsl-page .flows .connections .outgoing .icon {
-    height: 36px;
-    margin: auto;
-}
-
-.karavan .dsl-page .flows .connections .path {
-     stroke: #e97826;
-     stroke-width: 1;
-     fill: none;
-}
-
-.karavan .dsl-page .flows .connections path{
-    stroke-dasharray: 5;
-    -webkit-animation: dashdraw .5s linear infinite;
-    animation: dashdraw .5s linear infinite;
-}
-@keyframes dashdraw{0%{stroke-dashoffset:10}}
-
-
-.karavan .dsl-page .flows .step-element {
-    align-items: center;
-    text-align: center;
-    display: flex;
-    flex-direction: column;
-    width: fit-content;
-    margin-left: auto;
-    margin-right: auto;
-    border-color: #e97826;
-    border-style: solid;
-    border-radius: 3px;
-    border-width: 1px;
-    background: #fff;
-    min-width: 160px;
-    min-height: 73px;
-    padding: 4px 10px;
-    position: relative;
-}
-
-.karavan .dsl-page .flows .step-element .header {
-    display: block;
-    justify-content: center;
-    position: relative;
-    width: 100%;
-    z-index: 101;
-}
-
-.element-builder {
-    min-width: 160px;
-    min-height: 65px;
-    border-color: #e97826;
-    border-style: solid;
-    border-radius: 3px;
-    border-width: 1px;
-    padding: 4px 6px 0px 6px;
-    margin: 0px auto 0px auto;
-    display: flex;
-    flex-direction: column;
-    /*justify-content: space-between;*/
-    width: fit-content;
-}
-
-.element-builder .header {
-    display: block;
-    justify-content: center;
-    position: relative;
-    margin-bottom: 6px;
-}
-
-.step-element .header .delete-button,
-.element-builder .header .delete-button {
-    position: absolute;
-    top: 0;
-    right: -5px;
-    font-size: 13px;
-    line-height: 1;
-    border: 0;
-    padding: 0;
-    margin: 0;
-    background: transparent;
-    color: #b1b1b7;
-    visibility: hidden;
-}
-
-.step-element:hover .header .delete-button,
-.element-builder:hover .header .delete-button {
-    visibility: visible;;
-}
-
-.step-element .header .icon,
-.element-builder .header .icon {
-    height: 16px;
-    width: auto;
-    border: none;
-    -webkit-user-select: none;
-    -khtml-user-select: none;
-    -moz-user-select: none;
-    -o-user-select: none;
-    user-select: none;
-}
-
-.dsl-page .add-flow-button {
-    margin-top: 26px;
-    font-size: 15px;
-    line-height: 1;
-    border: 0;
-    padding: 0;
-    background: transparent;
-    color: #e97826;
-}
-
-.step-element .arrow-down {
-    font-size: 13px;
-    /*margin-top: -10px;*/
-    /*margin-bottom: -15px;*/
-    height: 16px;
-    color: #e97826;
-}
-
-.step-element .add-button {
-    top: 0;
-    right: 5px;
-    font-size: 15px;
-    line-height: 1;
-    border: 0;
-    padding: 0;
-    margin: 3px 0 0 0;
-    background: transparent;
-    color: #e97826;
-    visibility: hidden;
-}
-
-.element-builder .add-button {
-    top: 0;
-    right: 5px;
-    font-size: 15px;
-    line-height: 1;
-    border: 0;
-    padding: 0;
-    margin: 3px auto 0 auto;
-    background: transparent;
-    color: #e97826;
-    visibility: hidden;
-    height: 100%;
-    display: flex;
-    flex-direction: column;
-    justify-content: end;
-    width: 16px;
-}
-
-.element-builder .add-button svg {
-    margin: 0 auto 3px auto;
-}
-
-
-.element-builder:hover .add-button,
-.step-element:hover .add-button {
-    visibility: visible;
-}
-
-.dsl-gallery {
-    margin-top: 16px;
-}
-
-.dsl-modal {
-    height: 80%;
-    color: var(--pf-global--Color--100);
-}
-
-.dsl-modal .dsl-card {
-    cursor: pointer;
-}
-
-.dsl-modal .dsl-card .icon {
-    height: 16px;
-    width: auto;
-    border: none;
-    margin-right: 6px;
-    -webkit-user-select: none;
-    -khtml-user-select: none;
-    -moz-user-select: none;
-    -o-user-select: none;
-    user-select: none;
-}
-
-.yaml-code {
-    overflow: auto;
-    height: 100%;
-    width: 100%;
-    padding-bottom: 100px;
-}
\ No newline at end of file
diff --git a/karavan-app/src/main/webapp/src/designer/model/CamelModel.tsx b/karavan-app/src/main/webapp/src/designer/model/CamelModel.tsx
deleted file mode 100644
index 0e5f42f..0000000
--- a/karavan-app/src/main/webapp/src/designer/model/CamelModel.tsx
+++ /dev/null
@@ -1,1462 +0,0 @@
-/**
- * Generated by karavan build tools - do NOT edit this file!
- */
-import {v4 as uuidv4} from 'uuid'
-import {CamelApi} from "../api/CamelApi";
-
-export class Metadata {
-    name: string = '';
-
-    public constructor(init?: Partial<Metadata>) {
-        Object.assign(this, init);
-    }
-}
-
-export class Spec {
-    flows: FromStep[] = [];
-
-    public constructor(init?: Partial<Spec>) {
-        Object.assign(this, init);
-    }
-}
-
-export class Integration {
-    apiVersion: string = 'camel.apache.org/v1';
-    kind: string = 'Integration';
-    metadata: Metadata = new Metadata();
-    spec: Spec = new Spec();
-
-    public constructor(init?: Partial<Integration>) {
-        Object.assign(this, init);
-    }
-
-    static createNew(name?: string): Integration {
-        return new Integration({metadata: new Metadata({name: name}), spec: new Spec({flows: []})})
-    }
-}
-
-export class CamelElement {
-   uuid: string = ''
-   dslName: string = ''
-
-   constructor(dslName: string) {
-       this.uuid = uuidv4()
-       this.dslName = dslName
-   }
-
-   hasSteps(): boolean {
-      return this.hasOwnProperty('steps');
-   }
-}
-
-export class ProcessorStep extends CamelElement {
-}
-export class Policy extends CamelElement { 
-    inheritErrorHandler?: boolean
-    ref?: string
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<Policy>) { 
-        super('policy')
-        Object.assign(this, init)
-    }
-}
-export class PolicyStep extends ProcessorStep {
-    policy: Policy = new Policy()
-
-    public constructor(init?: Partial<Policy>) {
-        super('policyStep')
-        Object.assign(this, {policy: new Policy({...init})})
-    }
-}
-
-export class ThrowException extends CamelElement { 
-    exceptionType?: string
-    inheritErrorHandler?: boolean
-    message?: string
-    ref?: string
-
-    public constructor(init?: Partial<ThrowException>) { 
-        super('throwException')
-        Object.assign(this, init)
-    }
-}
-export class ThrowExceptionStep extends ProcessorStep {
-    throwException: ThrowException = new ThrowException()
-
-    public constructor(init?: Partial<ThrowException>) {
-        super('throwExceptionStep')
-        Object.assign(this, {throwException: new ThrowException({...init})})
-    }
-}
-
-export class Choice extends CamelElement { 
-    inheritErrorHandler?: boolean
-    otherwise?: Otherwise
-    when?: WhenStep [] = []
-
-    public constructor(init?: Partial<Choice>) { 
-        super('choice')
-        Object.assign(this, init)
-    }
-}
-export class ChoiceStep extends ProcessorStep {
-    choice: Choice = new Choice()
-
-    public constructor(init?: Partial<Choice>) {
-        super('choiceStep')
-        Object.assign(this, {choice: new Choice({...init})})
-    }
-}
-
-export class PollEnrich extends CamelElement { 
-    aggregateOnException?: boolean
-    cacheSize?: number
-    expression?: Expression
-    ignoreInvalidEndpoint?: number
-    inheritErrorHandler?: boolean
-    strategyMethodAllowNull?: boolean
-    strategyMethodName?: string
-    strategyRef?: string
-    timeout?: string
-
-    public constructor(init?: Partial<PollEnrich>) { 
-        super('pollEnrich')
-        Object.assign(this, init)
-    }
-}
-export class PollEnrichStep extends ProcessorStep {
-    pollEnrich: PollEnrich = new PollEnrich()
-
-    public constructor(init?: Partial<PollEnrich>) {
-        super('pollEnrichStep')
-        Object.assign(this, {pollEnrich: new PollEnrich({...init})})
-    }
-}
-
-export class SetBody extends CamelElement { 
-    expression?: Expression
-    inheritErrorHandler?: boolean
-
-    public constructor(init?: Partial<SetBody>) { 
-        super('setBody')
-        Object.assign(this, init)
-    }
-}
-export class SetBodyStep extends ProcessorStep {
-    setBody: SetBody = new SetBody()
-
-    public constructor(init?: Partial<SetBody>) {
-        super('setBodyStep')
-        Object.assign(this, {setBody: new SetBody({...init})})
-    }
-}
-
-export class Stop extends CamelElement { 
-    inheritErrorHandler?: boolean
-
-    public constructor(init?: Partial<Stop>) { 
-        super('stop')
-        Object.assign(this, init)
-    }
-}
-export class StopStep extends ProcessorStep {
-    stop: Stop = new Stop()
-
-    public constructor(init?: Partial<Stop>) {
-        super('stopStep')
-        Object.assign(this, {stop: new Stop({...init})})
-    }
-}
-
-export class ToD extends CamelElement { 
-    allowOptimisedComponents?: boolean
-    autoStartComponents?: boolean
-    cacheSize?: number
-    ignoreInvalidEndpoint?: boolean
-    inheritErrorHandler?: boolean
-    parameters?: any
-    pattern?: string
-    uri?: string
-
-    public constructor(init?: Partial<ToD>) { 
-        super('toD')
-        Object.assign(this, init)
-    }
-}
-export class ToDStep extends ProcessorStep {
-    toD: ToD = new ToD()
-
-    public constructor(init?: Partial<ToD>) {
-        super('toDStep')
-        Object.assign(this, {toD: new ToD({...init})})
-    }
-}
-
-export class Process extends CamelElement { 
-    inheritErrorHandler?: boolean
-    ref?: string
-
-    public constructor(init?: Partial<Process>) { 
-        super('process')
-        Object.assign(this, init)
-    }
-}
-export class ProcessStep extends ProcessorStep {
-    process: Process = new Process()
-
-    public constructor(init?: Partial<Process>) {
-        super('processStep')
-        Object.assign(this, {process: new Process({...init})})
-    }
-}
-
-export class RemoveHeaders extends CamelElement { 
-    excludePattern?: string
-    inheritErrorHandler?: boolean
-    pattern?: string
-
-    public constructor(init?: Partial<RemoveHeaders>) { 
-        super('removeHeaders')
-        Object.assign(this, init)
-    }
-}
-export class RemoveHeadersStep extends ProcessorStep {
-    removeHeaders: RemoveHeaders = new RemoveHeaders()
-
-    public constructor(init?: Partial<RemoveHeaders>) {
-        super('removeHeadersStep')
-        Object.assign(this, {removeHeaders: new RemoveHeaders({...init})})
-    }
-}
-
-export class Delay extends CamelElement { 
-    asyncDelayed?: boolean
-    callerRunsWhenRejected?: boolean
-    executorServiceRef?: string
-    expression?: Expression
-    inheritErrorHandler?: boolean
-
-    public constructor(init?: Partial<Delay>) { 
-        super('delay')
-        Object.assign(this, init)
-    }
-}
-export class DelayStep extends ProcessorStep {
-    delay: Delay = new Delay()
-
-    public constructor(init?: Partial<Delay>) {
-        super('delayStep')
-        Object.assign(this, {delay: new Delay({...init})})
-    }
-}
-
-export class Throttle extends CamelElement { 
-    asyncDelayed?: boolean
-    callerRunsWhenRejected?: boolean
-    correlationExpression?: Expression
-    executorServiceRef?: string
-    expression?: Expression
-    inheritErrorHandler?: boolean
-    rejectExecution?: boolean
-    timePeriodMillis?: string
-
-    public constructor(init?: Partial<Throttle>) { 
-        super('throttle')
-        Object.assign(this, init)
-    }
-}
-export class ThrottleStep extends ProcessorStep {
-    throttle: Throttle = new Throttle()
-
-    public constructor(init?: Partial<Throttle>) {
-        super('throttleStep')
-        Object.assign(this, {throttle: new Throttle({...init})})
-    }
-}
-
-export class Otherwise extends CamelElement { 
-    inheritErrorHandler?: boolean
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<Otherwise>) { 
-        super('otherwise')
-        Object.assign(this, init)
-    }
-}
-export class RemoveProperty extends CamelElement { 
-    inheritErrorHandler?: boolean
-    propertyName?: string
-
-    public constructor(init?: Partial<RemoveProperty>) { 
-        super('removeProperty')
-        Object.assign(this, init)
-    }
-}
-export class RemovePropertyStep extends ProcessorStep {
-    removeProperty: RemoveProperty = new RemoveProperty()
-
-    public constructor(init?: Partial<RemoveProperty>) {
-        super('removePropertyStep')
-        Object.assign(this, {removeProperty: new RemoveProperty({...init})})
-    }
-}
-
-export class Validate extends CamelElement { 
-    expression?: Expression
-    inheritErrorHandler?: boolean
-
-    public constructor(init?: Partial<Validate>) { 
-        super('validate')
-        Object.assign(this, init)
-    }
-}
-export class ValidateStep extends ProcessorStep {
-    validate: Validate = new Validate()
-
-    public constructor(init?: Partial<Validate>) {
-        super('validateStep')
-        Object.assign(this, {validate: new Validate({...init})})
-    }
-}
-
-export class Sort extends CamelElement { 
-    comparatorRef?: string
-    expression?: Expression
-    inheritErrorHandler?: boolean
-
-    public constructor(init?: Partial<Sort>) { 
-        super('sort')
-        Object.assign(this, init)
-    }
-}
-export class SortStep extends ProcessorStep {
-    sort: Sort = new Sort()
-
-    public constructor(init?: Partial<Sort>) {
-        super('sortStep')
-        Object.assign(this, {sort: new Sort({...init})})
-    }
-}
-
-export class From extends CamelElement { 
-    parameters?: any
-    steps?: ProcessorStep [] = []
-    uri?: string
-
-    public constructor(init?: Partial<From>) { 
-        super('from')
-        Object.assign(this, init)
-    }
-}
-export class FromStep extends ProcessorStep {
-    from: From = new From()
-
-    public constructor(init?: Partial<From>) {
-        super('fromStep')
-        Object.assign(this, {from: new From({...init})})
-    }
-}
-
-export class To extends CamelElement { 
-    inheritErrorHandler?: boolean
-    parameters?: any
-    pattern?: string
-    uri?: string
-
-    public constructor(init?: Partial<To>) { 
-        super('to')
-        Object.assign(this, init)
-    }
-}
-export class ToStep extends ProcessorStep {
-    to: To = new To()
-
-    public constructor(init?: Partial<To>) {
-        super('toStep')
-        Object.assign(this, {to: new To({...init})})
-    }
-}
-
-export class SetHeader extends CamelElement { 
-    expression?: Expression
-    inheritErrorHandler?: boolean
-    name?: string
-
-    public constructor(init?: Partial<SetHeader>) { 
-        super('setHeader')
-        Object.assign(this, init)
-    }
-}
-export class SetHeaderStep extends ProcessorStep {
-    setHeader: SetHeader = new SetHeader()
-
-    public constructor(init?: Partial<SetHeader>) {
-        super('setHeaderStep')
-        Object.assign(this, {setHeader: new SetHeader({...init})})
-    }
-}
-
-export class OnCompletion extends CamelElement { 
-    executorServiceRef?: string
-    inheritErrorHandler?: boolean
-    mode?: string
-    onCompleteOnly?: boolean
-    onFailureOnly?: boolean
-    onWhen?: When
-    parallelProcessing?: boolean
-    steps?: ProcessorStep [] = []
-    useOriginalMessage?: boolean
-
-    public constructor(init?: Partial<OnCompletion>) { 
-        super('onCompletion')
-        Object.assign(this, init)
-    }
-}
-export class OnCompletionStep extends ProcessorStep {
-    onCompletion: OnCompletion = new OnCompletion()
-
-    public constructor(init?: Partial<OnCompletion>) {
-        super('onCompletionStep')
-        Object.assign(this, {onCompletion: new OnCompletion({...init})})
-    }
-}
-
-export class RemoveHeader extends CamelElement { 
-    headerName?: string
-    inheritErrorHandler?: boolean
-    name?: string
-
-    public constructor(init?: Partial<RemoveHeader>) { 
-        super('removeHeader')
-        Object.assign(this, init)
-    }
-}
-export class RemoveHeaderStep extends ProcessorStep {
-    removeHeader: RemoveHeader = new RemoveHeader()
-
-    public constructor(init?: Partial<RemoveHeader>) {
-        super('removeHeaderStep')
-        Object.assign(this, {removeHeader: new RemoveHeader({...init})})
-    }
-}
-
-export class Script extends CamelElement { 
-    expression?: Expression
-    inheritErrorHandler?: boolean
-
-    public constructor(init?: Partial<Script>) { 
-        super('script')
-        Object.assign(this, init)
-    }
-}
-export class ScriptStep extends ProcessorStep {
-    script: Script = new Script()
-
-    public constructor(init?: Partial<Script>) {
-        super('scriptStep')
-        Object.assign(this, {script: new Script({...init})})
-    }
-}
-
-export class Enrich extends CamelElement { 
-    aggregateOnException?: boolean
-    allowOptimisedComponents?: boolean
-    cacheSize?: number
-    expression?: Expression
-    ignoreInvalidEndpoint?: boolean
-    inheritErrorHandler?: boolean
-    shareUnitOfWork?: boolean
-    strategyMethodAllowNull?: string
-    strategyMethodName?: string
-    strategyRef?: string
-
-    public constructor(init?: Partial<Enrich>) { 
-        super('enrich')
-        Object.assign(this, init)
-    }
-}
-export class EnrichStep extends ProcessorStep {
-    enrich: Enrich = new Enrich()
-
-    public constructor(init?: Partial<Enrich>) {
-        super('enrichStep')
-        Object.assign(this, {enrich: new Enrich({...init})})
-    }
-}
-
-export class Log extends CamelElement { 
-    inheritErrorHandler?: boolean
-    logName?: string
-    loggerRef?: string
-    loggingLevel?: string
-    marker?: string
-    message?: string
-
-    public constructor(init?: Partial<Log>) { 
-        super('log')
-        Object.assign(this, init)
-    }
-}
-export class LogStep extends ProcessorStep {
-    log: Log = new Log()
-
-    public constructor(init?: Partial<Log>) {
-        super('logStep')
-        Object.assign(this, {log: new Log({...init})})
-    }
-}
-
-export class Tod extends CamelElement { 
-    allowOptimisedComponents?: boolean
-    autoStartComponents?: boolean
-    cacheSize?: number
-    ignoreInvalidEndpoint?: boolean
-    inheritErrorHandler?: boolean
-    parameters?: any
-    pattern?: string
-    uri?: string
-
-    public constructor(init?: Partial<Tod>) { 
-        super('tod')
-        Object.assign(this, init)
-    }
-}
-export class TodStep extends ProcessorStep {
-    tod: Tod = new Tod()
-
-    public constructor(init?: Partial<Tod>) {
-        super('todStep')
-        Object.assign(this, {tod: new Tod({...init})})
-    }
-}
-
-export class RemoveProperties extends CamelElement { 
-    excludePattern?: string
-    inheritErrorHandler?: boolean
-    pattern?: string
-
-    public constructor(init?: Partial<RemoveProperties>) { 
-        super('removeProperties')
-        Object.assign(this, init)
-    }
-}
-export class RemovePropertiesStep extends ProcessorStep {
-    removeProperties: RemoveProperties = new RemoveProperties()
-
-    public constructor(init?: Partial<RemoveProperties>) {
-        super('removePropertiesStep')
-        Object.assign(this, {removeProperties: new RemoveProperties({...init})})
-    }
-}
-
-export class Marshal extends CamelElement { 
-    any23?: string
-    asn1?: string
-    avro?: string
-    csv?: string
-    custom?: string
-    inheritErrorHandler?: boolean
-    protobuf?: string
-    soapjaxb?: string
-    thrift?: string
-    xstream?: string
-
-    public constructor(init?: Partial<Marshal>) { 
-        super('marshal')
-        Object.assign(this, init)
-    }
-}
-export class MarshalStep extends ProcessorStep {
-    marshal: Marshal = new Marshal()
-
-    public constructor(init?: Partial<Marshal>) {
-        super('marshalStep')
-        Object.assign(this, {marshal: new Marshal({...init})})
-    }
-}
-
-export class Split extends CamelElement { 
-    delimiter?: string
-    executorServiceRef?: string
-    expression?: Expression
-    inheritErrorHandler?: boolean
-    onPrepareRef?: string
-    parallelAggregate?: boolean
-    parallelProcessing?: boolean
-    shareUnitOfWork?: boolean
-    steps?: ProcessorStep [] = []
-    stopOnAggregateException?: boolean
-    stopOnException?: boolean
-    strategyMethodAllowNull?: boolean
-    strategyMethodName?: string
-    strategyRef?: string
-    streaming?: boolean
-    timeout?: string
-
-    public constructor(init?: Partial<Split>) { 
-        super('split')
-        Object.assign(this, init)
-    }
-}
-export class SplitStep extends ProcessorStep {
-    split: Split = new Split()
-
-    public constructor(init?: Partial<Split>) {
-        super('splitStep')
-        Object.assign(this, {split: new Split({...init})})
-    }
-}
-
-export class Transacted extends CamelElement { 
-    inheritErrorHandler?: boolean
-    ref?: string
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<Transacted>) { 
-        super('transacted')
-        Object.assign(this, init)
-    }
-}
-export class TransactedStep extends ProcessorStep {
-    transacted: Transacted = new Transacted()
-
-    public constructor(init?: Partial<Transacted>) {
-        super('transactedStep')
-        Object.assign(this, {transacted: new Transacted({...init})})
-    }
-}
-
-export class InterceptFrom extends CamelElement { 
-    inheritErrorHandler?: boolean
-    steps?: ProcessorStep [] = []
-    uri?: string
-
-    public constructor(init?: Partial<InterceptFrom>) { 
-        super('interceptFrom')
-        Object.assign(this, init)
-    }
-}
-export class InterceptFromStep extends ProcessorStep {
-    interceptFrom: InterceptFrom = new InterceptFrom()
-
-    public constructor(init?: Partial<InterceptFrom>) {
-        super('interceptFromStep')
-        Object.assign(this, {interceptFrom: new InterceptFrom({...init})})
-    }
-}
-
-export class DoCatch extends CamelElement { 
-    exception?: string [] = []
-    inheritErrorHandler?: boolean
-    onWhen?: When
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<DoCatch>) { 
-        super('doCatch')
-        Object.assign(this, init)
-    }
-}
-export class DoCatchStep extends ProcessorStep {
-    doCatch: DoCatch = new DoCatch()
-
-    public constructor(init?: Partial<DoCatch>) {
-        super('doCatchStep')
-        Object.assign(this, {doCatch: new DoCatch({...init})})
-    }
-}
-
-export class CircuitBreaker extends CamelElement { 
-    configurationRef?: string
-    inheritErrorHandler?: boolean
-    onFallback?: OnFallback
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<CircuitBreaker>) { 
-        super('circuitBreaker')
-        Object.assign(this, init)
-    }
-}
-export class CircuitBreakerStep extends ProcessorStep {
-    circuitBreaker: CircuitBreaker = new CircuitBreaker()
-
-    public constructor(init?: Partial<CircuitBreaker>) {
-        super('circuitBreakerStep')
-        Object.assign(this, {circuitBreaker: new CircuitBreaker({...init})})
-    }
-}
-
-export class ConvertBodyTo extends CamelElement { 
-    charset?: string
-    inheritErrorHandler?: boolean
-    mandatory?: boolean
-    type?: string
-
-    public constructor(init?: Partial<ConvertBodyTo>) { 
-        super('convertBodyTo')
-        Object.assign(this, init)
-    }
-}
-export class ConvertBodyToStep extends ProcessorStep {
-    convertBodyTo: ConvertBodyTo = new ConvertBodyTo()
-
-    public constructor(init?: Partial<ConvertBodyTo>) {
-        super('convertBodyToStep')
-        Object.assign(this, {convertBodyTo: new ConvertBodyTo({...init})})
-    }
-}
-
-export class Intercept extends CamelElement { 
-    inheritErrorHandler?: boolean
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<Intercept>) { 
-        super('intercept')
-        Object.assign(this, init)
-    }
-}
-export class InterceptStep extends ProcessorStep {
-    intercept: Intercept = new Intercept()
-
-    public constructor(init?: Partial<Intercept>) {
-        super('interceptStep')
-        Object.assign(this, {intercept: new Intercept({...init})})
-    }
-}
-
-export class Unmarshal extends CamelElement { 
-    any23?: string
-    asn1?: string
-    avro?: string
-    csv?: string
-    custom?: string
-    inheritErrorHandler?: boolean
-    protobuf?: string
-    soapjaxb?: string
-    thrift?: string
-    xstream?: string
-
-    public constructor(init?: Partial<Unmarshal>) { 
-        super('unmarshal')
-        Object.assign(this, init)
-    }
-}
-export class UnmarshalStep extends ProcessorStep {
-    unmarshal: Unmarshal = new Unmarshal()
-
-    public constructor(init?: Partial<Unmarshal>) {
-        super('unmarshalStep')
-        Object.assign(this, {unmarshal: new Unmarshal({...init})})
-    }
-}
-
-export class OnFallback extends CamelElement { 
-    fallbackViaNetwork?: boolean
-    inheritErrorHandler?: boolean
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<OnFallback>) { 
-        super('onFallback')
-        Object.assign(this, init)
-    }
-}
-export class OnFallbackStep extends ProcessorStep {
-    onFallback: OnFallback = new OnFallback()
-
-    public constructor(init?: Partial<OnFallback>) {
-        super('onFallbackStep')
-        Object.assign(this, {onFallback: new OnFallback({...init})})
-    }
-}
-
-export class SetExchangePattern extends CamelElement { 
-    inheritErrorHandler?: boolean
-    pattern?: string
-
-    public constructor(init?: Partial<SetExchangePattern>) { 
-        super('setExchangePattern')
-        Object.assign(this, init)
-    }
-}
-export class SetExchangePatternStep extends ProcessorStep {
-    setExchangePattern: SetExchangePattern = new SetExchangePattern()
-
-    public constructor(init?: Partial<SetExchangePattern>) {
-        super('setExchangePatternStep')
-        Object.assign(this, {setExchangePattern: new SetExchangePattern({...init})})
-    }
-}
-
-export class RecipientList extends CamelElement { 
-    cacheSize?: number
-    delimiter?: string
-    executorServiceRef?: string
-    expression?: Expression
-    ignoreInvalidEndpoints?: boolean
-    inheritErrorHandler?: boolean
-    onPrepareRef?: string
-    parallelAggregate?: boolean
-    parallelProcessing?: boolean
-    shareUnitOfWork?: boolean
-    stopOnAggregateException?: boolean
-    stopOnException?: boolean
-    strategyMethodAllowNull?: boolean
-    strategyMethodName?: string
-    strategyRef?: string
-    streaming?: boolean
-    timeout?: string
-
-    public constructor(init?: Partial<RecipientList>) { 
-        super('recipientList')
-        Object.assign(this, init)
-    }
-}
-export class RecipientListStep extends ProcessorStep {
-    recipientList: RecipientList = new RecipientList()
-
-    public constructor(init?: Partial<RecipientList>) {
-        super('recipientListStep')
-        Object.assign(this, {recipientList: new RecipientList({...init})})
-    }
-}
-
-export class Bean extends CamelElement { 
-    beanType?: string
-    cache?: boolean
-    inheritErrorHandler?: boolean
-    method?: string
-    ref?: string
-    scope?: string
-
-    public constructor(init?: Partial<Bean>) { 
-        super('bean')
-        Object.assign(this, init)
-    }
-}
-export class BeanStep extends ProcessorStep {
-    bean: Bean = new Bean()
-
-    public constructor(init?: Partial<Bean>) {
-        super('beanStep')
-        Object.assign(this, {bean: new Bean({...init})})
-    }
-}
-
-export class Multicast extends CamelElement { 
-    executorServiceRef?: string
-    inheritErrorHandler?: boolean
-    onPrepareRef?: string
-    parallelAggregate?: boolean
-    parallelProcessing?: boolean
-    shareUnitOfWork?: boolean
-    steps?: ProcessorStep [] = []
-    stopOnAggregateException?: boolean
-    stopOnException?: boolean
-    strategyMethodAllowNull?: boolean
-    strategyMethodName?: string
-    strategyRef?: string
-    streaming?: boolean
-    timeout?: string
-
-    public constructor(init?: Partial<Multicast>) { 
-        super('multicast')
-        Object.assign(this, init)
-    }
-}
-export class MulticastStep extends ProcessorStep {
-    multicast: Multicast = new Multicast()
-
-    public constructor(init?: Partial<Multicast>) {
-        super('multicastStep')
-        Object.assign(this, {multicast: new Multicast({...init})})
-    }
-}
-
-export class InOnly extends CamelElement { 
-    inheritErrorHandler?: boolean
-    parameters?: any
-    uri?: string
-
-    public constructor(init?: Partial<InOnly>) { 
-        super('inOnly')
-        Object.assign(this, init)
-    }
-}
-export class InOnlyStep extends ProcessorStep {
-    inOnly: InOnly = new InOnly()
-
-    public constructor(init?: Partial<InOnly>) {
-        super('inOnlyStep')
-        Object.assign(this, {inOnly: new InOnly({...init})})
-    }
-}
-
-export class LoadBalance extends CamelElement { 
-    customLoadBalancer?: string
-    inheritErrorHandler?: boolean
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<LoadBalance>) { 
-        super('loadBalance')
-        Object.assign(this, init)
-    }
-}
-export class LoadBalanceStep extends ProcessorStep {
-    loadBalance: LoadBalance = new LoadBalance()
-
-    public constructor(init?: Partial<LoadBalance>) {
-        super('loadBalanceStep')
-        Object.assign(this, {loadBalance: new LoadBalance({...init})})
-    }
-}
-
-export class RoutingSlip extends CamelElement { 
-    cacheSize?: number
-    expression?: Expression
-    ignoreInvalidEndpoints?: boolean
-    inheritErrorHandler?: boolean
-    uriDelimiter?: string
-
-    public constructor(init?: Partial<RoutingSlip>) { 
-        super('routingSlip')
-        Object.assign(this, init)
-    }
-}
-export class RoutingSlipStep extends ProcessorStep {
-    routingSlip: RoutingSlip = new RoutingSlip()
-
-    public constructor(init?: Partial<RoutingSlip>) {
-        super('routingSlipStep')
-        Object.assign(this, {routingSlip: new RoutingSlip({...init})})
-    }
-}
-
-export class Rollback extends CamelElement { 
-    inheritErrorHandler?: boolean
-    markRollbackOnly?: boolean
-    markRollbackOnlyLast?: boolean
-    message?: string
-
-    public constructor(init?: Partial<Rollback>) { 
-        super('rollback')
-        Object.assign(this, init)
-    }
-}
-export class RollbackStep extends ProcessorStep {
-    rollback: Rollback = new Rollback()
-
-    public constructor(init?: Partial<Rollback>) {
-        super('rollbackStep')
-        Object.assign(this, {rollback: new Rollback({...init})})
-    }
-}
-
-export class WhenSkipSendToEndpoint extends CamelElement { 
-    expression?: Expression
-    inheritErrorHandler?: boolean
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<WhenSkipSendToEndpoint>) { 
-        super('whenSkipSendToEndpoint')
-        Object.assign(this, init)
-    }
-}
-export class WhenSkipSendToEndpointStep extends ProcessorStep {
-    whenSkipSendToEndpoint: WhenSkipSendToEndpoint = new WhenSkipSendToEndpoint()
-
-    public constructor(init?: Partial<WhenSkipSendToEndpoint>) {
-        super('whenSkipSendToEndpointStep')
-        Object.assign(this, {whenSkipSendToEndpoint: new WhenSkipSendToEndpoint({...init})})
-    }
-}
-
-export class WireTap extends CamelElement { 
-    allowOptimisedComponents?: boolean
-    autoStartComponents?: boolean
-    body?: Expression
-    cacheSize?: number
-    copy?: boolean
-    dynamicUri?: boolean
-    executorServiceRef?: string
-    ignoreInvalidEndpoint?: boolean
-    inheritErrorHandler?: boolean
-    onPrepareRef?: string
-    parameters?: any
-    pattern?: string
-    processorRef?: string
-    setHeader?: SetHeaderStep [] = []
-    uri?: string
-
-    public constructor(init?: Partial<WireTap>) { 
-        super('wireTap')
-        Object.assign(this, init)
-    }
-}
-export class WireTapStep extends ProcessorStep {
-    wireTap: WireTap = new WireTap()
-
-    public constructor(init?: Partial<WireTap>) {
-        super('wireTapStep')
-        Object.assign(this, {wireTap: new WireTap({...init})})
-    }
-}
-
-export class Loop extends CamelElement { 
-    breakOnShutdown?: boolean
-    copy?: boolean
-    doWhile?: boolean
-    expression?: Expression
-    inheritErrorHandler?: boolean
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<Loop>) { 
-        super('loop')
-        Object.assign(this, init)
-    }
-}
-export class LoopStep extends ProcessorStep {
-    loop: Loop = new Loop()
-
-    public constructor(init?: Partial<Loop>) {
-        super('loopStep')
-        Object.assign(this, {loop: new Loop({...init})})
-    }
-}
-
-export class InterceptSendToEndpoint extends CamelElement { 
-    afterUri?: string
-    inheritErrorHandler?: boolean
-    skipSendToOriginalEndpoint?: string
-    steps?: ProcessorStep [] = []
-    uri?: string
-
-    public constructor(init?: Partial<InterceptSendToEndpoint>) { 
-        super('interceptSendToEndpoint')
-        Object.assign(this, init)
-    }
-}
-export class InterceptSendToEndpointStep extends ProcessorStep {
-    interceptSendToEndpoint: InterceptSendToEndpoint = new InterceptSendToEndpoint()
-
-    public constructor(init?: Partial<InterceptSendToEndpoint>) {
-        super('interceptSendToEndpointStep')
-        Object.assign(this, {interceptSendToEndpoint: new InterceptSendToEndpoint({...init})})
-    }
-}
-
-export class DoTry extends CamelElement { 
-    doCatch?: DoCatchStep [] = []
-    doFinally?: DoFinally
-    inheritErrorHandler?: boolean
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<DoTry>) { 
-        super('doTry')
-        Object.assign(this, init)
-    }
-}
-export class DoTryStep extends ProcessorStep {
-    doTry: DoTry = new DoTry()
-
-    public constructor(init?: Partial<DoTry>) {
-        super('doTryStep')
-        Object.assign(this, {doTry: new DoTry({...init})})
-    }
-}
-
-export class Resequence extends CamelElement { 
-    expression?: Expression
-    inheritErrorHandler?: boolean
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<Resequence>) { 
-        super('resequence')
-        Object.assign(this, init)
-    }
-}
-export class ResequenceStep extends ProcessorStep {
-    resequence: Resequence = new Resequence()
-
-    public constructor(init?: Partial<Resequence>) {
-        super('resequenceStep')
-        Object.assign(this, {resequence: new Resequence({...init})})
-    }
-}
-
-export class Expression extends CamelElement { 
-    constant?: string
-    csimple?: string
-    datasonnet?: string
-    exchangeProperty?: string
-    groovy?: string
-    header?: string
-    hl7terser?: string
-    joor?: string
-    jsonpath?: string
-    language?: string
-    method?: string
-    mvel?: string
-    ognl?: string
-    ref?: string
-    simple?: string
-    spel?: string
-    tokenize?: string
-    xpath?: string
-    xquery?: string
-    xtokenize?: string
-
-    public constructor(init?: Partial<Expression>) { 
-        super('expression')
-        if (init && init.language === undefined) init.language = CamelApi.getExpressionLanguage(init);
-        Object.assign(this, init)
-    }
-}
-export class ExpressionStep extends ProcessorStep {
-    expression: Expression = new Expression()
-
-    public constructor(init?: Partial<Expression>) {
-        super('expressionStep')
-        Object.assign(this, {expression: new Expression({...init})})
-    }
-}
-
-export class ServiceCall extends CamelElement { 
-    component?: string
-    configurationRef?: string
-    expressionRef?: string
-    inheritErrorHandler?: boolean
-    loadBalancerRef?: string
-    name?: string
-    pattern?: string
-    serviceChooserRef?: string
-    serviceDiscoveryRef?: string
-    serviceFilterRef?: string
-    uri?: string
-
-    public constructor(init?: Partial<ServiceCall>) { 
-        super('serviceCall')
-        Object.assign(this, init)
-    }
-}
-export class ServiceCallStep extends ProcessorStep {
-    serviceCall: ServiceCall = new ServiceCall()
-
-    public constructor(init?: Partial<ServiceCall>) {
-        super('serviceCallStep')
-        Object.assign(this, {serviceCall: new ServiceCall({...init})})
-    }
-}
-
-export class Sample extends CamelElement { 
-    inheritErrorHandler?: boolean
-    messageFrequency?: number
-    samplePeriod?: string
-    units?: string
-
-    public constructor(init?: Partial<Sample>) { 
-        super('sample')
-        Object.assign(this, init)
-    }
-}
-export class SampleStep extends ProcessorStep {
-    sample: Sample = new Sample()
-
-    public constructor(init?: Partial<Sample>) {
-        super('sampleStep')
-        Object.assign(this, {sample: new Sample({...init})})
-    }
-}
-
-export class DynamicRouter extends CamelElement { 
-    cacheSize?: number
-    expression?: Expression
-    ignoreInvalidEndpoints?: boolean
-    inheritErrorHandler?: boolean
-    uriDelimiter?: string
-
-    public constructor(init?: Partial<DynamicRouter>) { 
-        super('dynamicRouter')
-        Object.assign(this, init)
-    }
-}
-export class DynamicRouterStep extends ProcessorStep {
-    dynamicRouter: DynamicRouter = new DynamicRouter()
-
-    public constructor(init?: Partial<DynamicRouter>) {
-        super('dynamicRouterStep')
-        Object.assign(this, {dynamicRouter: new DynamicRouter({...init})})
-    }
-}
-
-export class Pipeline extends CamelElement { 
-    inheritErrorHandler?: boolean
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<Pipeline>) { 
-        super('pipeline')
-        Object.assign(this, init)
-    }
-}
-export class PipelineStep extends ProcessorStep {
-    pipeline: Pipeline = new Pipeline()
-
-    public constructor(init?: Partial<Pipeline>) {
-        super('pipelineStep')
-        Object.assign(this, {pipeline: new Pipeline({...init})})
-    }
-}
-
-export class Saga extends CamelElement { 
-    compensation?: string
-    completion?: string
-    completionMode?: string
-    inheritErrorHandler?: boolean
-    propagation?: string
-    sagaServiceRef?: string
-    steps?: ProcessorStep [] = []
-    timeout?: string
-    timeoutInMilliseconds?: number
-
-    public constructor(init?: Partial<Saga>) { 
-        super('saga')
-        Object.assign(this, init)
-    }
-}
-export class SagaStep extends ProcessorStep {
-    saga: Saga = new Saga()
-
-    public constructor(init?: Partial<Saga>) {
-        super('sagaStep')
-        Object.assign(this, {saga: new Saga({...init})})
-    }
-}
-
-export class Threads extends CamelElement { 
-    allowCoreThreadTimeOut?: boolean
-    callerRunsWhenRejected?: string
-    executorServiceRef?: string
-    inheritErrorHandler?: boolean
-    keepAliveTime?: number
-    maxPoolSize?: number
-    maxQueueSize?: number
-    poolSize?: number
-    rejectedPolicy?: string
-    threadName?: string
-    timeUnit?: string
-
-    public constructor(init?: Partial<Threads>) { 
-        super('threads')
-        Object.assign(this, init)
-    }
-}
-export class ThreadsStep extends ProcessorStep {
-    threads: Threads = new Threads()
-
-    public constructor(init?: Partial<Threads>) {
-        super('threadsStep')
-        Object.assign(this, {threads: new Threads({...init})})
-    }
-}
-
-export class When extends CamelElement { 
-    expression?: Expression
-    inheritErrorHandler?: boolean
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<When>) { 
-        super('when')
-        Object.assign(this, init)
-    }
-}
-export class WhenStep extends ProcessorStep {
-    when: When = new When()
-
-    public constructor(init?: Partial<When>) {
-        super('whenStep')
-        Object.assign(this, {when: new When({...init})})
-    }
-}
-
-export class ClaimCheck extends CamelElement { 
-    filter?: string
-    inheritErrorHandler?: boolean
-    key?: string
-    operation?: string
-    strategyMethodName?: string
-    strategyRef?: string
-
-    public constructor(init?: Partial<ClaimCheck>) { 
-        super('claimCheck')
-        Object.assign(this, init)
-    }
-}
-export class ClaimCheckStep extends ProcessorStep {
-    claimCheck: ClaimCheck = new ClaimCheck()
-
-    public constructor(init?: Partial<ClaimCheck>) {
-        super('claimCheckStep')
-        Object.assign(this, {claimCheck: new ClaimCheck({...init})})
-    }
-}
-
-export class DoFinally extends CamelElement { 
-    inheritErrorHandler?: boolean
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<DoFinally>) { 
-        super('doFinally')
-        Object.assign(this, init)
-    }
-}
-export class DoFinallyStep extends ProcessorStep {
-    doFinally: DoFinally = new DoFinally()
-
-    public constructor(init?: Partial<DoFinally>) {
-        super('doFinallyStep')
-        Object.assign(this, {doFinally: new DoFinally({...init})})
-    }
-}
-
-export class Filter extends CamelElement { 
-    expression?: Expression
-    inheritErrorHandler?: boolean
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<Filter>) { 
-        super('filter')
-        Object.assign(this, init)
-    }
-}
-export class FilterStep extends ProcessorStep {
-    filter: Filter = new Filter()
-
-    public constructor(init?: Partial<Filter>) {
-        super('filterStep')
-        Object.assign(this, {filter: new Filter({...init})})
-    }
-}
-
-export class Aggregate extends CamelElement { 
-    aggregateControllerRef?: string
-    aggregationRepositoryRef?: string
-    closeCorrelationKeyOnCompletion?: number
-    completeAllOnStop?: boolean
-    completionFromBatchConsumer?: boolean
-    completionInterval?: string
-    completionOnNewCorrelationGroup?: boolean
-    completionPredicate?: Expression
-    completionSize?: number
-    completionSizeExpression?: Expression
-    completionTimeout?: string
-    completionTimeoutCheckerInterval?: string
-    completionTimeoutExpression?: Expression
-    correlationExpression?: Expression
-    discardOnAggregationFailure?: boolean
-    discardOnCompletionTimeout?: boolean
-    eagerCheckCompletion?: boolean
-    executorServiceRef?: string
-    forceCompletionOnStop?: boolean
-    ignoreInvalidCorrelationKeys?: boolean
-    inheritErrorHandler?: boolean
-    optimisticLocking?: boolean
-    parallelProcessing?: boolean
-    steps?: ProcessorStep [] = []
-    strategyMethodAllowNull?: boolean
-    strategyMethodName?: string
-    strategyRef?: string
-    timeoutCheckerExecutorServiceRef?: string
-
-    public constructor(init?: Partial<Aggregate>) { 
-        super('aggregate')
-        Object.assign(this, init)
-    }
-}
-export class AggregateStep extends ProcessorStep {
-    aggregate: Aggregate = new Aggregate()
-
-    public constructor(init?: Partial<Aggregate>) {
-        super('aggregateStep')
-        Object.assign(this, {aggregate: new Aggregate({...init})})
-    }
-}
-
-export class Transform extends CamelElement { 
-    expression?: Expression
-    inheritErrorHandler?: boolean
-
-    public constructor(init?: Partial<Transform>) { 
-        super('transform')
-        Object.assign(this, init)
-    }
-}
-export class TransformStep extends ProcessorStep {
-    transform: Transform = new Transform()
-
-    public constructor(init?: Partial<Transform>) {
-        super('transformStep')
-        Object.assign(this, {transform: new Transform({...init})})
-    }
-}
-
-export class IdempotentConsumer extends CamelElement { 
-    completionEager?: string
-    eager?: boolean
-    expression?: Expression
-    inheritErrorHandler?: boolean
-    messageIdRepositoryRef?: string
-    removeOnFailure?: boolean
-    skipDuplicate?: boolean
-    steps?: ProcessorStep [] = []
-
-    public constructor(init?: Partial<IdempotentConsumer>) { 
-        super('idempotentConsumer')
-        Object.assign(this, init)
-    }
-}
-export class IdempotentConsumerStep extends ProcessorStep {
-    idempotentConsumer: IdempotentConsumer = new IdempotentConsumer()
-
-    public constructor(init?: Partial<IdempotentConsumer>) {
-        super('idempotentConsumerStep')
-        Object.assign(this, {idempotentConsumer: new IdempotentConsumer({...init})})
-    }
-}
-
-export class SetProperty extends CamelElement { 
-    expression?: Expression
-    inheritErrorHandler?: boolean
-    name?: string
-
-    public constructor(init?: Partial<SetProperty>) { 
-        super('setProperty')
-        Object.assign(this, init)
-    }
-}
-export class SetPropertyStep extends ProcessorStep {
-    setProperty: SetProperty = new SetProperty()
-
-    public constructor(init?: Partial<SetProperty>) {
-        super('setPropertyStep')
-        Object.assign(this, {setProperty: new SetProperty({...init})})
-    }
-}
-
-export class InOut extends CamelElement { 
-    inheritErrorHandler?: boolean
-    parameters?: any
-    uri?: string
-
-    public constructor(init?: Partial<InOut>) { 
-        super('inOut')
-        Object.assign(this, init)
-    }
-}
-export class InOutStep extends ProcessorStep {
-    inOut: InOut = new InOut()
-
-    public constructor(init?: Partial<InOut>) {
-        super('inOutStep')
-        Object.assign(this, {inOut: new InOut({...init})})
-    }
-}
-
diff --git a/karavan-app/src/main/webapp/src/designer/model/ConnectionModels.tsx b/karavan-app/src/main/webapp/src/designer/model/ConnectionModels.tsx
deleted file mode 100644
index c4327c7..0000000
--- a/karavan-app/src/main/webapp/src/designer/model/ConnectionModels.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import {CamelUi} from "../api/CamelUi";
-
-export class InOut {
-  type: 'in' | 'out'  = 'in';
-  uuid: string = ''
-  icon: string = CamelUi.getIconForName("");
-  top: number = 0;
-  side: number = 0;
-
-  constructor(type: 'in' | 'out', uuid: string, icon: string, top: number, side: number) {
-    this.type = type;
-    this.uuid = uuid;
-    this.icon = icon;
-    this.top = top;
-    this.side = side;
-  }
-}
-
-export class Path {
-  uuid: string = ''
-  startX: number = 0
-  startY: number = 0
-  endX: number = 0
-  endY: number = 0
-
-  constructor(uuid: string, startX: number, startY: number, endX: number, endY: number) {
-    this.uuid = uuid;
-    this.startX = startX;
-    this.startY = startY;
-    this.endX = endX;
-    this.endY = endY;
-  }
-
-  getPath(): string {
-    const x = (this.endX + this.startX) / 2;
-    const y = (this.endY + this.startY) / 2;
-    return 'M ' + this.startX + ',' + this.startY
-        + ' C ' + x + ','+ this.startY + ' ' + y +', ' + this.endY
-        + ' ' + this.endX + ',' + this.endY ;
-  }
-}
\ No newline at end of file
diff --git a/karavan-app/src/main/webapp/src/designer/model/DslMetaModel.tsx b/karavan-app/src/main/webapp/src/designer/model/DslMetaModel.tsx
deleted file mode 100644
index c9acc18..0000000
--- a/karavan-app/src/main/webapp/src/designer/model/DslMetaModel.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-export class DslMetaModel {
-    name: string = ''
-    uri?: string
-    title: string = ''
-    description: string = ''
-    label: string = ''
-    javaType: string = ''
-    properties: any;
-
-    public constructor(init?: Partial<DslMetaModel>) {
-        Object.assign(this, init);
-    }
-}
-
-export class DslProperty {
-    name: string = ''
-    type: string = ''
-    title: string = ''
-    description: string = ''
-    required: boolean = false;
-    secret: boolean = false
-    enum: any[] = []
-
-    public constructor(init?: Partial<DslProperty>) {
-        Object.assign(this, init);
-    }
-}
-
-export class DslConstraints {
-    constraints: DslConstraint[] = []
-
-    public constructor(init?: Partial<DslConstraints>) {
-        Object.assign(this, init);
-    }
-}
-
-export class DslConstraint {
-    name: string = ''
-    steps: string[] = []
-
-    public constructor(init?: Partial<DslConstraint>) {
-        Object.assign(this, init);
-    }
-}
-
-export class DslLanguage {
-    name: string = ''
-    title: string = ''
-    description: string = ''
-
-    public constructor(init?: Partial<DslLanguage>) {
-        Object.assign(this, init);
-    }
-
-    public toString() {
-        return this.title;
-    }
-
-    static getName(lang: DslLanguage) {
-        return lang.name;
-    }
-}
\ No newline at end of file
diff --git a/karavan-app/src/main/webapp/src/designer/model/KameletModels.tsx b/karavan-app/src/main/webapp/src/designer/model/KameletModels.tsx
deleted file mode 100644
index 9810d7e..0000000
--- a/karavan-app/src/main/webapp/src/designer/model/KameletModels.tsx
+++ /dev/null
@@ -1,191 +0,0 @@
-// Kamelet data model
-export class Property {
-  id: string = '';
-  title: string = '';
-  description: string = '';
-  type: string = '';
-  default: string = '';
-  format: string = '';
-  example: string = '';
-  'x-descriptors': string = '';
-  value: string | number | boolean = '';
-}
-
-export class Definition {
-  title: string = '';
-  description: string = '';
-  required: string[] = [];
-  properties: any = {};
-
-  public constructor(init?: Partial<Definition>) {
-    Object.assign(this, init);
-  }
-}
-
-export class KameletSpec {
-  definition: Definition = new Definition();
-  types: any = {};
-  flow: any = {};
-
-  public constructor(init?: Partial<KameletSpec>) {
-    Object.assign(this, init);
-  }
-}
-
-export class Labels {
-  'camel.apache.org/kamelet.type': string | any = '';
-
-  public constructor(init?: Partial<Labels>) {
-    Object.assign(this, init);
-  }
-}
-
-export class Annotations {
-  'camel.apache.org/kamelet.icon': string | any = '';
-
-  public constructor(init?: Partial<Annotations>) {
-    Object.assign(this, init);
-  }
-}
-
-export class KameletMetadata {
-  name: string = '';
-  labels: Labels = new Labels();
-  annotations: Annotations = new Annotations();
-
-  public constructor(init?: Partial<KameletMetadata>) {
-    Object.assign(this, init);
-  }
-}
-
-export class Kamelet {
-  apiVersion: string = 'camel.apache.org/v1alpha1';
-  kind: string = 'Kamelet';
-  metadata: KameletMetadata = new KameletMetadata();
-  spec: KameletSpec = new KameletSpec();
-
-  public constructor(init?: Partial<Kamelet>) {
-    Object.assign(this, init);
-  }
-
-  type(): string {
-    return this.metadata.labels["camel.apache.org/kamelet.type"] || '';
-  }
-
-  icon(): string {
-    return this.metadata.annotations["camel.apache.org/kamelet.icon"] || '';
-  }
-
-  title(): string {
-    return this.spec.definition.title;
-  }
-
-  properties(): any {
-    return this.spec.definition.properties;
-  }
-
-  static default = (): Kamelet[] => defaultKamelets;
-}
-
-const defaultKamelets: Kamelet[] = [
-  new Kamelet({
-    kind: 'uri',
-    apiVersion: '',
-    metadata: new KameletMetadata({
-      name: 'uri-source',
-      labels: new Labels({ 'camel.apache.org/kamelet.type': 'source' }),
-      annotations: new Annotations({'camel.apache.org/kamelet.icon': "data:image/svg+xml,%3Csvg viewBox='0 0 130.21 130.01' xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3ClinearGradient id='a' x1='333.48' x2='477' y1='702.6' y2='563.73' gradientTransform='translate(94.038 276.06) scale(.99206)' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23F69923' offset='0'/%3E%3Cstop stop-color='%23F79A23' offset='.11'/%3E%3Cstop stop-color='%23E97826' offset='.945'/%3E%3C/linearGradient%3 [...]
-    }),
-    spec: new KameletSpec({ definition: new Definition({ title: 'URI source' }) })
-  }),
-  new Kamelet({
-    kind: 'uri',
-    apiVersion: '',
-    metadata: new KameletMetadata({ 
-      name: 'uri-sink', 
-      labels: new Labels({ "camel.apache.org/kamelet.type": 'sink' }),
-      annotations: new Annotations({'camel.apache.org/kamelet.icon': "data:image/svg+xml,%3Csvg viewBox='0 0 130.21 130.01' xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3ClinearGradient id='a' x1='333.48' x2='477' y1='702.6' y2='563.73' gradientTransform='translate(94.038 276.06) scale(.99206)' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23F69923' offset='0'/%3E%3Cstop stop-color='%23F79A23' offset='.11'/%3E%3Cstop stop-color='%23E97826' offset='.945'/%3E%3C/linearGradient%3 [...]
-    }),
-    spec: new KameletSpec({ definition: new Definition({ title: 'URI sink' }) })
-  })
-]
-
-// KameletBinding data model
-export class Ref {
-  apiVersion: string = 'camel.apache.org/v1alpha1';
-  kind: string = 'Kamelet';
-  name: string = '';
-}
-
-export class Source {
-  uri: string | any;
-  ref: Ref | any = new Ref();
-  properties: [] | any;
-
-  static createUri(uri: string) {
-    const source: Source = new Source();
-    source.uri = uri;
-    delete source.ref;
-    delete source.properties;
-    return source;
-  }
-
-  static createRef(refName: string) {
-    const source: Source = new Source();
-    source.ref.name = refName;
-    delete source.uri;
-    return source;
-  }
-}
-
-export class Sink {
-  uri: string | any;
-  ref: Ref | any = new Ref();
-  properties: [] | any;
-
-  static createUri(uri: string) {
-    const source: Sink = new Sink();
-    source.uri = uri;
-    delete source.ref;
-    delete source.properties;
-    return source;
-  }
-
-  static createRef(refName: string) {
-    const source: Sink = new Sink();
-    source.ref.name = refName;
-    delete source.uri;
-    return source;
-  }
-}
-
-export class Step {
-  ref: Ref = new Ref();
-  properties: any;
-}
-
-export class KameletBindingSpec {
-  source: Source = new Source();
-  steps: Step[] | any = [];
-  sink: Sink = new Sink();
-}
-
-export class KameletBindingAnnotations {
-  'camel.apache.org/karavan.title': string = '';
-}
-
-export class KameletBindingMetadata {
-  name: string = '';
-  annotations: KameletBindingAnnotations | any = new KameletBindingAnnotations();
-}
-
-export class KameletBinding {
-  apiVersion: string = 'camel.apache.org/v1alpha1';
-  kind: string = 'KameletBinding';
-  metadata: KameletBindingMetadata = new KameletBindingMetadata();
-  spec: KameletBindingSpec = new KameletBindingSpec();
-
-  public constructor(init?: Partial<KameletBinding>) {
-    Object.assign(this, init);
-  }
-}
diff --git a/karavan-app/src/main/webapp/src/designer/ui/DslConnections.tsx b/karavan-app/src/main/webapp/src/designer/ui/DslConnections.tsx
deleted file mode 100644
index 3657808..0000000
--- a/karavan-app/src/main/webapp/src/designer/ui/DslConnections.tsx
+++ /dev/null
@@ -1,109 +0,0 @@
-import React from 'react';
-import '../karavan.css';
-import {InOut, Path} from "../model/ConnectionModels";
-import {Integration} from "../model/CamelModel";
-import {Subscription} from "rxjs";
-import {CamelUi} from "../api/CamelUi";
-import {CamelApiExt} from "../api/CamelApiExt";
-import {KameletApi} from "../api/KameletApi";
-import {DslInOut} from "./DslInOut";
-import {DslPath} from "./DslPath";
-import {DslPosition, EventBus} from "../api/EventBus";
-
-interface Props {
-    integration: Integration
-}
-
-interface State {
-    integration: Integration
-    paths: Path[]
-    sub?: Subscription
-    outs: Map<string, DslPosition>
-}
-
-export class DslConnections extends React.Component<Props, State> {
-
-    public state: State = {
-        integration: this.props.integration,
-        paths: [],
-        outs: new Map<string, DslPosition>()
-    };
-
-    componentDidMount() {
-        const sub = EventBus.onPosition()?.subscribe(evt => {
-                // this.setPosition(evt);
-        });
-        this.setState({sub: sub});
-    }
-
-    componentWillUnmount() {
-        this.state.sub?.unsubscribe();
-    }
-
-    // setPosition(evt: DslPosition) {
-    //     if (this.getOutgoings().findIndex(i => i.uuid === evt.step.uuid) !== -1){
-    //         // console.log(evt);
-    //     }
-    // }
-
-    getIncomings(): InOut[] {
-        const result: InOut[] = [];
-        this.state.integration.spec.flows.forEach((flow, index) => {
-            const uri = flow.from.uri;
-            if (uri && uri.startsWith("kamelet")) {
-                const kamelet = KameletApi.findKameletByUri(uri);
-                if (kamelet && kamelet.metadata.labels["camel.apache.org/kamelet.type"] === 'source') {
-                    const i = new InOut('in', flow.uuid, CamelUi.getIcon(flow.from), index * 60, 0);
-                    result.push(i);
-                }
-            } else {
-                // TODO ?
-            }
-        })
-        return result;
-    }
-
-    getOutgoings(): InOut[] {
-        const result: InOut[] = [];
-        CamelApiExt.getToStepsFromIntegration(this.state.integration).forEach((element, index) => {
-            const uri: string = (element as any).to.uri;
-            if (uri && uri.startsWith("kamelet")) {
-                const kamelet = KameletApi.findKameletByUri(uri);
-                if (kamelet && kamelet.metadata.labels["camel.apache.org/kamelet.type"] === 'sink') {
-                    const i = new InOut('out', element.uuid, CamelUi.getIcon((element as any).to), index * 60, 500);
-                    result.push(i);
-                }
-            } else {
-                // TODO ?
-            }
-        })
-        return result;
-    }
-
-    getPath(): Path[] {
-        const result: Path[] = [];
-        this.getIncomings().forEach((i, index) => {
-            const path = new Path(i.uuid, 66, i.top + 25, 66, i.top + 25);
-            result.push(path);
-        })
-        this.getOutgoings().forEach((i, index) => {
-            const path = new Path(i.uuid, 666, i.top + 25, 666, i.top + 25);
-            result.push(path);
-        })
-        return result;
-    }
-
-    render() {
-        return (
-            <div className="connections">
-                {this.getPath().map(path => <DslPath key={path.uuid} uuid={path.uuid}/>)}
-                {this.getIncomings().map((i: InOut) =>
-                    <DslInOut key={i.uuid} inout={i}/>
-                )}
-                {this.getOutgoings().map((o: InOut) =>
-                    <DslInOut key={o.uuid} inout={o}/>
-                )}
-            </div>
-        );
-    }
-}
\ No newline at end of file
diff --git a/karavan-app/src/main/webapp/src/designer/ui/DslElement.tsx b/karavan-app/src/main/webapp/src/designer/ui/DslElement.tsx
deleted file mode 100644
index 7875bf7..0000000
--- a/karavan-app/src/main/webapp/src/designer/ui/DslElement.tsx
+++ /dev/null
@@ -1,178 +0,0 @@
-import React from 'react';
-import {
-    Text, Tooltip,
-} from '@patternfly/react-core';
-import '../karavan.css';
-import AddIcon from "@patternfly/react-icons/dist/js/icons/plus-circle-icon";
-import DeleteIcon from "@patternfly/react-icons/dist/js/icons/times-icon";
-import {CamelElement, Otherwise, ProcessorStep, WhenStep} from "../model/CamelModel";
-import {CamelApi} from "../api/CamelApi";
-import {CamelUi} from "../api/CamelUi";
-import { EventBus } from "../api/EventBus";
-import {DslPath} from "./DslPath";
-
-interface Props {
-    step: CamelElement,
-    deleteElement: any
-    selectElement: any
-    openSelector: any
-    selectedUuid: string
-}
-
-interface State {
-    step: CamelElement,
-    element: CamelElement,
-    showSelector: boolean
-    tabIndex: string | number
-    selectedUuid: string
-}
-
-export class DslElement extends React.Component<Props, State> {
-
-    public state: State = {
-        step: this.props.step,
-        element: this.props.step.dslName === 'otherwise' ? this.props.step : CamelApi.elementFromStep(this.props.step),
-        showSelector: false,
-        tabIndex: 0,
-        selectedUuid: this.props.selectedUuid
-    };
-
-    componentDidUpdate = (prevProps: Readonly<Props>, prevState: Readonly<State>, snapshot?: any) => {
-        if (prevState.selectedUuid !== this.props.selectedUuid) {
-            this.setState({selectedUuid: this.props.selectedUuid});
-        }
-    }
-
-    openSelector = (evt: React.MouseEvent) => {
-        evt.stopPropagation();
-        this.props.openSelector.call(this, this.state.step.uuid, this.state.element.dslName)
-    }
-
-    closeDslSelector = () => {
-        this.setState({showSelector: false})
-    }
-
-    delete = (evt: React.MouseEvent) => {
-        evt.stopPropagation();
-        this.props.deleteElement.call(this, this.state.step.uuid);
-    }
-
-    selectElement = (evt: React.MouseEvent) => {
-        evt.stopPropagation();
-        this.props.selectElement.call(this, this.state.step);
-    }
-
-    isSelected = (): boolean => {
-        return this.state.selectedUuid === this.state.step.uuid
-    }
-
-    getSteps = (): ProcessorStep[] => {
-        return (this.state.element as any).steps
-    }
-
-    getWhens = (): WhenStep[] => {
-        return (this.state.element as any).when
-    }
-
-    getOtherwise = (): Otherwise => {
-        return (this.state.element as any).otherwise
-    }
-
-    horizontal = (): boolean => {
-        return ['choice', 'multicast'].includes(this.state.element.dslName);
-    }
-
-    isRoot = (): boolean => {
-        return this.state.step.dslName.startsWith("from");
-    }
-
-    render() {
-        return (
-            <div className="step-element"
-                 style={{
-                     borderWidth: this.isSelected() ? "2px" : "1px",
-                     marginTop: this.isRoot() ? "16px" : "",
-                     zIndex: this.state.step.dslName === 'toStep' ? 20 : 10
-                 }}
-                 onClick={event => this.selectElement(event)}
-                 ref={el => {
-                     if (el && (this.state.step.dslName === 'fromStep' || this.state.step.dslName === 'toStep')) EventBus.sendPosition(this.state.step, el.getBoundingClientRect());
-                 }}
-            >
-                <div className="header">
-                    <img draggable={false}
-                         src={CamelUi.getIcon(this.state.element)}
-                         className="icon" alt="icon">
-                    </img>
-                    <Text>{CamelUi.getTitle(this.state.element)}</Text>
-                    <button type="button" aria-label="Delete" onClick={e => this.delete(e)}
-                            className="delete-button">
-                        <DeleteIcon noVerticalAlign/>
-                    </button>
-                </div>
-                <div className={this.state.element.dslName}>
-                    {this.state.element.hasSteps() &&
-                    <div className="steps" style={this.horizontal() ? {display: "flex", flexDirection: "row"} : {}}>
-                        {this.getSteps().map((step, index) => (
-                            <div key={step.uuid} style={this.horizontal() ? {marginRight: (index < this.getSteps().length - 1) ? "6px" : "0"} :{}}>
-                                <DslElement
-                                    openSelector={this.props.openSelector}
-                                    deleteElement={this.props.deleteElement}
-                                    selectElement={this.props.selectElement}
-                                    selectedUuid={this.state.selectedUuid}
-                                    step={step}/>
-                                {index < this.getSteps().length - 1 && !this.horizontal() &&
-                                <img className={"arrow-down"} alt="arrow"
-                                     src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:svgjs='http://svgjs.com/svgjs' x='0' y='0' viewBox='0 0 512 512' style='enable-background:new 0 0 512 512' xml:space='preserve' class=''%3E%3Cg transform='matrix(1,0,0,1,1.7053025658242404e-13,1.1368683772161603e-13)'%3E%3Cg xmlns='http://www.w3.org/2000/svg'%3E%3Cg%3E%3Cpath d='M374.108,373.328c-7.829-7.792-20.492-7.762-28. [...]
-                                />
-                                }
-                            </div>
-                        ))}
-                    </div>
-                    }
-                    {this.state.element.hasSteps() &&
-                    <Tooltip position={"bottom"}
-                             content={<div>{"Add element to " + CamelUi.getTitle(this.state.element)}</div>}>
-                        <button type="button" aria-label="Add" onClick={e => this.openSelector(e)}
-                                className="add-button">
-                            <AddIcon noVerticalAlign/>
-                        </button>
-                    </Tooltip>
-                    }
-                    {this.state.element.dslName === 'choice' &&
-                    <Tooltip position={"bottom"} content={<div>{"Add element to Choice"}</div>}>
-                        <button type="button" aria-label="Add" onClick={e => this.openSelector(e)}
-                                className="add-button">
-                            <AddIcon noVerticalAlign/>
-                        </button>
-                    </Tooltip>
-                    }
-                    {this.state.element.dslName === 'choice' &&
-                    <div className="whens" style={this.horizontal() ? {display: "flex", flexDirection: "row"} : {}}>
-                        {this.getWhens().map((when, index) => (
-                            <div key={when.uuid} style={{marginLeft: (index !== 0) ? "6px" : "0"}}>
-                                <DslElement
-                                    openSelector={this.props.openSelector}
-                                    deleteElement={this.props.deleteElement}
-                                    selectElement={this.props.selectElement}
-                                    selectedUuid={this.state.selectedUuid}
-                                    step={when}/>
-                            </div>
-                        ))}
-                        {this.getOtherwise() &&
-                            <div key={this.getOtherwise().uuid} style={{marginLeft: (this.getWhens().length > 0) ? "6px" : "0"}}>
-                                <DslElement
-                                    openSelector={this.props.openSelector}
-                                    deleteElement={this.props.deleteElement}
-                                    selectElement={this.props.selectElement}
-                                    selectedUuid={this.state.selectedUuid}
-                                    step={this.getOtherwise()}/>
-                            </div>
-                        }
-                    </div>
-                    }
-                </div>
-            </div>
-        );
-    }
-}
\ No newline at end of file
diff --git a/karavan-app/src/main/webapp/src/designer/ui/DslInOut.tsx b/karavan-app/src/main/webapp/src/designer/ui/DslInOut.tsx
deleted file mode 100644
index 934b526..0000000
--- a/karavan-app/src/main/webapp/src/designer/ui/DslInOut.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import React from 'react';
-import '../karavan.css';
-import {InOut} from "../model/ConnectionModels";
-import {Subscription} from "rxjs";
-import {DslPosition, EventBus} from "../api/EventBus";
-
-interface Props {
-    inout: InOut,
-}
-
-interface State {
-    inout: InOut
-    top: number
-    sub?: Subscription
-}
-
-export class DslInOut extends React.Component<Props, State> {
-
-    public state: State = {
-        inout: this.props.inout,
-        top: this.props.inout.top
-    };
-
-    componentDidMount() {
-        const sub = EventBus.onPosition()?.subscribe(evt => {
-            if (evt.step.uuid === this.state.inout.uuid) {
-                this.setPosition(evt);
-            }
-        });
-        this.setState({sub: sub});
-    }
-
-    componentWillUnmount() {
-        this.state.sub?.unsubscribe();
-    }
-
-    setPosition(evt: DslPosition) {
-        this.setState({top: evt.rect.top});
-    }
-
-    render() {
-        return (
-            <div className={this.state.inout.type === 'out' ? 'outgoing' : 'incoming'} style={{top: this.state.top + 'px'}}>
-                <img draggable={false}
-                     src={this.state.inout.icon}
-                     className="icon" alt="icon">
-                </img>
-            </div>
-        );
-    }
-}
\ No newline at end of file
diff --git a/karavan-app/src/main/webapp/src/designer/ui/DslPath.tsx b/karavan-app/src/main/webapp/src/designer/ui/DslPath.tsx
deleted file mode 100644
index 4be0d92..0000000
--- a/karavan-app/src/main/webapp/src/designer/ui/DslPath.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import React from 'react';
-import '../karavan.css';
-import {Subscription} from "rxjs";
-import {DslPosition, EventBus} from "../api/EventBus";
-
-interface Props {
-    uuid: string,
-}
-
-interface State {
-    uuid: string,
-    width: number,
-    left: number,
-    top: number,
-    sub?: Subscription
-}
-
-export class DslPath extends React.Component<Props, State> {
-
-    public state: State = {
-        uuid: this.props.uuid,
-        width: 0,
-        left: 0,
-        top: 0,
-    };
-
-    componentDidMount() {
-        const sub = EventBus.onPosition()?.subscribe(evt => {
-            if (evt.step.uuid === this.state.uuid) {
-                this.setPosition(evt);
-            }
-        });
-        this.setState({sub: sub});
-    }
-
-    componentWillUnmount() {
-        this.state.sub?.unsubscribe();
-    }
-
-    setPosition(evt: DslPosition) {
-        if (evt.step.dslName === 'fromStep'){
-            this.setState({left: 56, top: (evt.rect.top + 25), width: (evt.rect.x) - 56});
-        } else {
-            this.setState({left: evt.rect.x + evt.rect.width, top: (evt.rect.top + 25), width: (evt.rect.x + evt.rect.width + 200)});
-        }
-    }
-
-    render() {
-        return (
-            <svg style={{
-                width: this.state.width,
-                height: '2',
-                position: "absolute",
-                left: this.state.left,
-                top: this.state.top
-            }} viewBox={"0 0 " + this.state.width + " 2"}>
-                <path d={"M 0 0, " + this.state.width + " 0"} className="path"/>
-            </svg>
-        );
-    }
-}
\ No newline at end of file
diff --git a/karavan-app/src/main/webapp/src/designer/ui/DslProperties.tsx b/karavan-app/src/main/webapp/src/designer/ui/DslProperties.tsx
deleted file mode 100644
index 73291ec..0000000
--- a/karavan-app/src/main/webapp/src/designer/ui/DslProperties.tsx
+++ /dev/null
@@ -1,355 +0,0 @@
-import React from 'react';
-import {
-    Form,
-    FormGroup,
-    TextInput,
-    Text,
-    Title,
-    Popover,
-    Switch,
-    NumberInput,
-    Button,
-    TextVariants, Select, SelectVariant, SelectDirection, SelectOption, TextArea
-} from '@patternfly/react-core';
-import '../karavan.css';
-import "@patternfly/patternfly/patternfly.css";
-import UndoIcon from "@patternfly/react-icons/dist/js/icons/backspace-icon";
-import HelpIcon from "@patternfly/react-icons/dist/js/icons/help-icon";
-import {Property} from "../model/KameletModels";
-import {CamelElement, Expression, Integration} from "../model/CamelModel";
-import {CamelApi} from "../api/CamelApi";
-import {CamelApiExt} from "../api/CamelApiExt";
-import {CamelMetadataApi, Languages, PropertyMeta} from "../api/CamelMetadata";
-import {CamelYaml} from "../api/CamelYaml";
-import {CamelUi} from "../api/CamelUi";
-
-interface Props {
-    integration: Integration,
-    step?: CamelElement,
-    onIntegrationUpdate?: any,
-    onPropertyUpdate?: any,
-    onChangeView: any
-}
-
-interface State {
-    integration: Integration,
-    step?: CamelElement,
-    element?: CamelElement,
-    selectStatus: Map<string, boolean>
-}
-
-export class DslProperties extends React.Component<Props, State> {
-
-    public state: State = {
-        step: this.props.step,
-        element: this.props.step ? CamelApi.elementFromStep(this.props.step) : undefined,
-        integration: this.props.integration,
-        selectStatus: new Map<string, boolean>()
-    };
-
-    setView = (view: string) => {
-        this.props.onChangeView.call(this, view);
-    }
-
-    onIntegrationChange = (field: string, value: string) => {
-        let clone = new Integration({...this.state.integration});
-        if (field === 'title') {
-            clone.metadata.name = CamelUi.nameFomTitle(value);
-            this.props.onIntegrationUpdate?.call(this, clone);
-        }
-    };
-
-    propertyChanged = (fieldId: string, value: string | number | boolean | any) => {
-        if (this.state.step && this.state.element){
-            const clone = CamelYaml.cloneStep(this.state.step);
-            (clone as any)[this.state.element?.dslName][fieldId] = value;
-            this.setStep(clone)
-            this.props.onPropertyUpdate?.call(this, clone, this.state.step.uuid);
-        }
-    }
-
-    expressionChanged = (language: string, value: string | undefined) => {
-        if (this.state.step && this.state.element){
-            const clone = (CamelYaml.cloneStep(this.state.step));
-            const e: any = {};
-            e.language = language;
-            e[language] = value;
-            const exp: any = new Expression(e);
-            (clone as any)[this.state.element?.dslName].expression = exp;
-            this.setStep(clone);
-            this.props.onPropertyUpdate?.call(this, clone, this.state.step.uuid);
-        }
-    }
-
-    parametersChanged = (parameter: string, value: string | number | boolean | any) => {
-        if (this.state.step && this.state.element){
-            const clone = (CamelYaml.cloneStep(this.state.step));
-            const parameters: any = {...(clone as any)[this.state.element?.dslName].parameters};
-            parameters[parameter] = value;
-            (clone as any)[this.state.element?.dslName].parameters = parameters;
-            this.setStep(clone);
-            this.props.onPropertyUpdate?.call(this, clone, this.state.step.uuid);
-        }
-    };
-
-    componentDidUpdate = (prevProps: Readonly<Props>, prevState: Readonly<State>, snapshot?: any) => {
-        if (prevProps.step !== this.props.step) {
-            this.setStep(this.props.step);
-        }
-    }
-
-    setStep = (step?: CamelElement) => {
-        this.setState({ step: step, element: step ? CamelApi.elementFromStep(step) : undefined , selectStatus: new Map<string, boolean>()});
-    }
-
-    openSelect = (propertyName: string) => {
-        this.setState({selectStatus: new Map<string, boolean>([[propertyName, true]])});
-    }
-
-    isSelectOpen = (propertyName: string): boolean => {
-        return this.state.selectStatus.has(propertyName) && this.state.selectStatus.get(propertyName) === true;
-    }
-
-    getIntegrationHeader = (): JSX.Element => {
-        return (
-            <div className="headers">
-                <Title headingLevel="h1" size="md">Integration</Title>
-                <FormGroup label="Title" fieldId="title" isRequired>
-                    <TextInput className="text-field" type="text" id="title" name="title" isReadOnly
-                               value={
-                                   CamelUi.titleFromName(this.state.integration.metadata.name)
-                               }
-                               onChange={e => this.onIntegrationChange('title', e)}/>
-                </FormGroup>
-                <FormGroup label="Name" fieldId="name" isRequired>
-                    <TextInput className="text-field" type="text" id="name" name="name" isReadOnly
-                               value={this.state.integration.metadata.name}/>
-                </FormGroup>
-            </div>
-        )
-    }
-
-    getComponentHeader = (): JSX.Element => {
-        const title = this.state.element && CamelUi.getTitle(this.state.element)
-        const kamelet = this.state.element &&  CamelUi.getKamelet(this.state.element)
-        const description = this.state.element && kamelet
-            ? kamelet.spec.definition.description
-            : this.state.element?.dslName ? CamelMetadataApi.getElementMeta(this.state.element?.dslName)?.description : title;
-        return (
-            <div className="headers">
-                <Title headingLevel="h1" size="md">{title}</Title>
-                <Text component={TextVariants.p}>{description}</Text>
-            </div>
-        )
-    }
-
-    createKameletProperty = (property: Property): JSX.Element => {
-        const prefix = "parameters";
-        const id = prefix + "-" + property.id;
-        const value = CamelApiExt.getParametersValue(this.state.element, property.id);
-        return (
-            <FormGroup
-                key={id}
-                label={property.title}
-                fieldId={id}
-                labelIcon={
-                    <Popover
-                        headerContent={property.title}
-                        bodyContent={property.description}
-                        footerContent={property.example ? "Example: " + property.example : undefined}>
-                        <button type="button" aria-label="More info" onClick={e => e.preventDefault()}
-                                className="pf-c-form__group-label-help">
-                            <HelpIcon noVerticalAlign/>
-                        </button>
-                    </Popover>
-                }>
-                {property.type === 'string' && <TextInput
-                    className="text-field" isRequired
-                    type={property.format === 'password' ? "password" : "text"}
-                    id={id} name={id}
-                    value={value?.toString()}
-                    onChange={e => this.parametersChanged(property.id, e)}/>
-                }
-                {property.type === 'boolean' && <Switch
-                    id={id} name={id}
-                    value={value?.toString()}
-                    aria-label={id}
-                    isChecked={Boolean(value) === true}
-                    onChange={e => this.parametersChanged(property.id, !Boolean(value))}/>
-                }
-                {['integer', 'int', 'number'].includes(property.type) && <div className="number">
-                    <NumberInput
-                        className="number-property"
-                        id={id} name={id}
-                        value={typeof value === 'number' ? value : undefined}
-                        inputName={id}
-                        onMinus={() => this.parametersChanged(property.id, typeof value === 'number' ? value - 1 : -1)}
-                        onPlus={() => this.parametersChanged(property.id, typeof value === 'number' ? value + 1 : 1)}
-                        onChange={(e: any) => this.parametersChanged(property.id, Number(e.target.value))}/>
-                    <Button
-                        className="clear-button"
-                        variant="tertiary"
-                        isSmall icon={<UndoIcon/>}
-                        onClick={e => this.parametersChanged(property.id, undefined)}/>
-                </div>
-                }
-            </FormGroup>
-        )
-    }
-
-    createExpressionProperty = (property: PropertyMeta): JSX.Element => {
-        const prefix = "language";
-        const language = CamelApiExt.getExpressionLanguage(this.state.element) || 'Simple'
-        const dslLanguage = Languages.find((l:[string, string, string]) => l[0] === language);
-        const value = language ? CamelApiExt.getExpressionValue(this.state.element) : undefined;
-        const selectOptions: JSX.Element[] = []
-        // selectOptions.push(<SelectOption key={'placeholder'} value={"Select language"} isPlaceholder/>);
-        Languages.forEach((lang: [string, string, string]) => {
-            const s = <SelectOption key={lang[0]} value={lang[0]} description={lang[2]} />;
-            selectOptions.push(s);
-        })
-        return (
-            <div>
-                <FormGroup key={prefix + "-" + property.name} fieldId={property.name}>
-                    <Select
-                        variant={SelectVariant.typeahead}
-                        aria-label={property.name}
-                        onToggle={isExpanded => {
-                            this.openSelect(property.name)
-                        }}
-                        onSelect={(e, lang, isPlaceholder) => this.expressionChanged(lang.toString(), value)}
-                        selections={dslLanguage}
-                        isOpen={this.isSelectOpen(property.name)}
-                        aria-labelledby={property.name}
-                        direction={SelectDirection.down}
-                    >
-                        {selectOptions}
-                    </Select>
-                </FormGroup>
-                <FormGroup
-                    key={property.name}
-                    fieldId={property.name}
-                    labelIcon={property.description ?
-                        <Popover
-                            headerContent={property.displayName}
-                            bodyContent={property.description}>
-                            <button type="button" aria-label="More info" onClick={e => {
-                                e.preventDefault();
-                                e.stopPropagation();
-                            }}
-                                    className="pf-c-form__group-label-help">
-                                <HelpIcon noVerticalAlign/>
-                            </button>
-                        </Popover> : <div></div>
-                    }>
-                    <TextArea
-                        autoResize
-                        className="text-field" isRequired
-                        type={"text"}
-                        id={property.name} name={property.name}
-                        height={"100px"}
-                        value={value?.toString()}
-                        onChange={e => this.expressionChanged(language, e)}/>
-                </FormGroup>
-            </div>
-        )
-    }
-
-    createElementProperty = (property: PropertyMeta): JSX.Element => {
-        // console.log(property)
-        const value = this.state.element ? (this.state.element as any)[property.name] : undefined;
-        const selectOptions: JSX.Element[] = []
-        if (property.enumVals && property.enumVals.length > 0) {
-            selectOptions.push(<SelectOption key={0} value={"Select " + property.name} isPlaceholder/>);
-            selectOptions.push(...property.enumVals.split(',').map((value: string) => <SelectOption key={value} value={value.trim()}/>));
-        }
-        return (
-            <FormGroup
-                key={property.name}
-                label={property.displayName}
-                fieldId={property.name}
-                labelIcon={property.description ?
-                    <Popover
-                        headerContent={property.displayName}
-                        bodyContent={property.description}>
-                        <button type="button" aria-label="More info" onClick={e => {
-                            e.preventDefault();
-                            e.stopPropagation();
-                        }}
-                                className="pf-c-form__group-label-help">
-                            <HelpIcon noVerticalAlign/>
-                        </button>
-                    </Popover> : <div></div>
-                }>
-                {['string', 'duration'].includes(property.type) && !property.enumVals && <TextInput
-                    className="text-field" isRequired
-                    type={property.secret ? "password" : "text"}
-                    id={property.name} name={property.name}
-                    value={value?.toString()}
-                    onChange={e => this.propertyChanged(property.name, e)}/>
-                }
-                {property.type === 'boolean' && <Switch
-                    id={property.name} name={property.name}
-                    value={this.state.element?.toString()}
-                    aria-label={property.name}
-                    isChecked={Boolean(value) === true}
-                    onChange={e => this.propertyChanged(property.name, !Boolean(value))}/>
-                }
-
-                {property.enumVals &&
-                <Select
-                    variant={SelectVariant.single}
-                    aria-label={property.name}
-                    onToggle={isExpanded => {
-                        this.openSelect(property.name)
-                    }}
-                    onSelect={(e, value, isPlaceholder) => this.propertyChanged(property.name, (!isPlaceholder ? value : undefined))}
-                    selections={value}
-                    isOpen={this.isSelectOpen(property.name)}
-                    aria-labelledby={property.name}
-                    direction={SelectDirection.down}
-                >
-                    {selectOptions}
-                </Select>
-                }
-                {property.type === 'integer' && <div className="number">
-                    <NumberInput
-                        className="number-property"
-                        id={property.name} name={property.name}
-                        value={typeof value === 'number' ? value : undefined}
-                        inputName={property.name}
-                        onMinus={() => this.propertyChanged(property.name, typeof value === 'number' ? value - 1 : -1)}
-                        onPlus={() => this.propertyChanged(property.name, typeof value === 'number' ? value + 1 : 1)}
-                        onChange={(e: any) => this.propertyChanged(property.name, Number(e.target.value))}/>
-                    <Button
-                        className="clear-button"
-                        variant="tertiary"
-                        isSmall icon={<UndoIcon/>}
-                        onClick={e => this.propertyChanged(property.name, undefined)}/>
-                </div>
-                }
-                <div className="expression">
-                    {property.name === 'expression' && property.type === "Expression"
-                    && this.createExpressionProperty(property)}
-                </div>
-                <div className="parameters">
-                    {property.name === 'parameters' && CamelUi.isKameletComponent(this.state.element)
-                    && CamelUi.getKameletProperties(this.state.element).map(kp => this.createKameletProperty(kp))}
-                </div>
-            </FormGroup>
-        )
-    }
-
-    render() {
-        return (
-            <div key={this.state.step ? this.state.step.uuid : 'integration'} className='properties'>
-                <Form autoComplete="off">
-                    {this.state.element === undefined && this.getIntegrationHeader()}
-                    {this.state.element && this.getComponentHeader()}
-                    {/*{this.state.element && DslPropertiesUtil.getElementProperties(this.state.element).map((property: DslProperty) => this.createElementProperty(property))}*/}
-                    {this.state.element && CamelApiExt.getElementProperties(this.state.element.dslName).map((property: PropertyMeta) => this.createElementProperty(property))}
-                </Form>
-            </div>
-        );
-    }
-};
\ No newline at end of file
diff --git a/karavan-app/src/main/webapp/src/designer/ui/DslSelector.tsx b/karavan-app/src/main/webapp/src/designer/ui/DslSelector.tsx
deleted file mode 100644
index 4e555f1..0000000
--- a/karavan-app/src/main/webapp/src/designer/ui/DslSelector.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-import React from 'react';
-import {
-    Card, CardBody, CardHeader, Gallery, Modal,
-    Tab, Tabs, TabTitleText,
-    Text,
-} from '@patternfly/react-core';
-import '../karavan.css';
-import {CamelUi} from "../api/CamelUi";
-
-interface Props {
-    show: boolean,
-    onDslSelect: any
-    onClose: any
-    parentId: string
-    parentType: string
-}
-
-interface State {
-    show: boolean
-    tabIndex: string | number
-}
-
-export class DslSelector extends React.Component<Props, State> {
-
-    public state: State = {
-        show: this.props.show,
-        tabIndex: CamelUi.getSelectorLabels(this.props.parentType)[0][0],
-    };
-
-    componentDidMount() {
-    }
-
-    selectTab = (evt: React.MouseEvent<HTMLElement, MouseEvent>, eventKey: string | number) => {
-        this.setState({tabIndex: eventKey})
-    }
-
-    componentDidUpdate = (prevProps: Readonly<Props>, prevState: Readonly<State>, snapshot?: any) => {
-        if (prevState.show !== this.props.show) {
-            this.setState({show: this.props.show});
-        }
-        if (prevProps.parentType !== this.props.parentType) {
-            this.setState({tabIndex: CamelUi.getSelectorLabels(this.props.parentType)[0][0]});
-        }
-    }
-
-    selectDsl = (evt: React.MouseEvent, dsl: any) => {
-        evt.stopPropagation()
-        this.setState({show: false})
-        this.props.onDslSelect.call(this, dsl, this.props.parentId);
-    }
-
-    render() {
-        return (
-            <Modal
-                title={this.props.parentType === undefined ? "Select source/from" : "Select step"}
-                width={'90%'}
-                className='dsl-modal'
-                isOpen={this.state.show}
-                onClose={() => this.props.onClose.call(this)}
-                actions={{}}>
-                <Tabs style={{overflow: 'hidden'}} activeKey={this.state.tabIndex} onSelect={this.selectTab}>
-                    {CamelUi.getSelectorLabels(this.props.parentType).map((label, index) => (
-                        <Tab  eventKey={label[0]} key={"tab-" + label[0]}
-                        title={<TabTitleText>{CamelUi.capitalizeName(label[0])}</TabTitleText>} translate={undefined} onAuxClick={undefined} onAuxClickCapture={undefined}>
-                            <Gallery key={"gallery-" + label[0]} hasGutter className="dsl-gallery">
-                                {CamelUi.sortSelectorModels(CamelUi.getSelectorModels(label[0], label[1], this.props.parentType)).map((dsl, index) => (
-                                    <Card key={dsl.name + index} isHoverable isCompact className="dsl-card"
-                                          onClick={event => this.selectDsl(event, dsl)}>
-                                        <CardHeader>
-                                            <img draggable={false}
-                                                 src={dsl.uri ? CamelUi.getKameletIcon(dsl.uri) : CamelUi.getIconForName(dsl.name)}
-                                                 style={dsl.name === 'choice' ? {height: "18px"} : {}}  // find better icon
-                                                 className="icon" alt="icon"></img>
-                                            <Text>{dsl.title}</Text>
-                                        </CardHeader>
-                                        <CardBody>
-                                            <Text>{dsl.description}</Text>
-                                        </CardBody>
-                                    </Card>
-                                ))}
-                            </Gallery>
-                        </Tab>
-                    ))}
-                </Tabs>
-            </Modal>
-        );
-    }
-}
\ No newline at end of file
diff --git a/karavan-app/src/main/webapp/src/designer/ui/KaravanDesigner.tsx b/karavan-app/src/main/webapp/src/designer/ui/KaravanDesigner.tsx
deleted file mode 100644
index 6070cff..0000000
--- a/karavan-app/src/main/webapp/src/designer/ui/KaravanDesigner.tsx
+++ /dev/null
@@ -1,164 +0,0 @@
-import React from 'react';
-import {
-    Button,
-    PageSection,
-} from '@patternfly/react-core';
-import PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';
-import '../karavan.css';
-import {DslElement} from "./DslElement";
-import {DslSelector} from "./DslSelector";
-import {DslMetaModel} from "../model/DslMetaModel";
-import {DslProperties} from "./DslProperties";
-import {CamelElement, Integration} from "../model/CamelModel";
-import {CamelYaml} from "../api/CamelYaml";
-import {CamelApiExt} from "../api/CamelApiExt";
-import {CamelApi} from "../api/CamelApi";
-import {DslConnections} from "./DslConnections";
-import {CamelUi} from "../api/CamelUi";
-
-interface Props {
-    onSave?: (name: string, yaml: string) => void
-    name: string
-    yaml: string
-}
-
-interface State {
-    integration: Integration
-    selectedStep?: CamelElement
-    showSelector: boolean
-    parentId: string
-    parentType: string
-    selectedUuid: string
-    key: string
-}
-
-export class KaravanDesigner extends React.Component<Props, State> {
-
-    public state: State = {
-        integration: this.props.yaml
-            ? CamelYaml.yamlToIntegration(this.props.yaml)
-            : Integration.createNew(CamelUi.nameFomTitle(this.props.name)),
-        showSelector: false,
-        parentId: '',
-        parentType: '',
-        selectedUuid: '',
-        key: "",
-    };
-
-    componentDidMount() {
-        console.log("Designer");
-        console.log(this.props.name);
-        console.log(this.state.integration);
-    }
-
-    componentDidUpdate = (prevProps: Readonly<Props>, prevState: Readonly<State>, snapshot?: any) => {
-        if (!Object.is(prevState.integration, this.state.integration)) {
-            this.props.onSave?.call(this, this.state.integration.metadata.name, this.getCode(this.state.integration));
-        }
-    }
-
-    unselectElement = (evt: React.MouseEvent<HTMLDivElement, MouseEvent>) => {
-        if ((evt.target as any).dataset.click === 'FLOWS') {
-            evt.stopPropagation()
-            this.setState({selectedStep: undefined, selectedUuid: '', showSelector: false})
-        }
-    };
-
-    getCode = (integration: Integration): string => {
-        const clone = CamelYaml.cloneIntegration(integration);
-        return CamelYaml.integrationToYaml(clone);
-    }
-
-    onPropertyUpdate = (element: CamelElement, updatedUuid: string) => {
-        const clone = CamelYaml.cloneIntegration(this.state.integration);
-        const i = CamelApiExt.updateIntegration(clone, element, updatedUuid);
-        this.setState({integration: i, key: Math.random().toString()})
-    }
-
-    deleteElement = (id: string) => {
-        const i = CamelApiExt.deleteStepFromIntegration(this.state.integration, id);
-        this.setState({integration: i, showSelector: false})
-    }
-
-    selectElement = (element: CamelElement) => {
-        this.setState({selectedStep: element, selectedUuid: element.uuid, showSelector: false})
-    }
-
-    openSelector = (parentId: string | undefined, parentType: string | undefined) => {
-        this.setState({showSelector: true, parentId: parentId || '', parentType: parentType || ''})
-    }
-
-    closeDslSelector = () => {
-        this.setState({showSelector: false})
-    }
-
-    onDslSelect = (dsl: DslMetaModel, parentId: string) => {
-        switch (dsl.name) {
-            case 'from' :
-                const from = CamelApi.createStep(dsl.name, {from: {uri: dsl.uri}});
-                this.addStep(from, parentId)
-                break;
-            case 'to' :
-                const to = CamelApi.createStep(dsl.name, {to: {uri: dsl.uri}});
-                this.addStep(to, parentId)
-                break;
-            default:
-                const step = CamelApi.createStep(dsl.name, {});
-                this.addStep(step, parentId)
-                break;
-        }
-    }
-
-    addStep = (step: CamelElement, parentId: string) => {
-        const i = CamelApiExt.addStepToIntegration(this.state.integration, step, parentId);
-        const clone = CamelYaml.cloneIntegration(i);
-        this.setState({integration: clone, key: Math.random().toString(), showSelector: false})
-    }
-
-    onIntegrationUpdate = (i: Integration) => {
-        this.setState({integration: i, showSelector: false});
-    };
-
-    render() {
-        return (
-            <PageSection className="dsl-page" isFilled padding={{default: 'noPadding'}}>
-                <div className="dsl-page-columns">
-                    <div className="flows" data-click="FLOWS" onClick={event => this.unselectElement(event)}>
-                        <DslConnections key={this.state.key + "-connections"}
-                                        integration={this.state.integration}
-                        />
-                        {this.state.integration.spec.flows.map((flow, index) => (
-                            <DslElement key={flow.uuid + this.state.key}
-                                        openSelector={this.openSelector}
-                                        deleteElement={this.deleteElement}
-                                        selectElement={this.selectElement}
-                                        selectedUuid={this.state.selectedUuid}
-                                        step={flow}/>
-                        ))}
-                        <div className="add-flow">
-                            <Button
-                                variant={this.state.integration.spec.flows.length === 0 ? "primary" : "secondary"}
-                                data-click="ADD_FLOW"
-                                icon={<PlusIcon/>}
-                                onClick={e => this.openSelector(undefined, undefined)}>Add flow
-                            </Button>
-                        </div>
-                    </div>
-                    <DslProperties
-                        integration={this.state.integration}
-                        step={this.state.selectedStep}
-                        onIntegrationUpdate={this.onIntegrationUpdate}
-                        onPropertyUpdate={this.onPropertyUpdate}
-                        onChangeView={{}}
-                    />
-                </div>
-                <DslSelector
-                    parentId={this.state.parentId}
-                    parentType={this.state.parentType}
-                    show={this.state.showSelector}
-                    onDslSelect={this.onDslSelect}
-                    onClose={this.closeDslSelector}/>
-            </PageSection>
-        );
-    }
-};
diff --git a/karavan-app/src/main/webapp/src/integrations/DesignerPage.tsx b/karavan-app/src/main/webapp/src/integrations/DesignerPage.tsx
new file mode 100644
index 0000000..dc20b1a
--- /dev/null
+++ b/karavan-app/src/main/webapp/src/integrations/DesignerPage.tsx
@@ -0,0 +1,137 @@
+import React from 'react';
+import {
+    Button, CodeBlock, CodeBlockCode,
+    PageSection, Text, TextContent, ToggleGroup, ToggleGroupItem, Toolbar, ToolbarContent, ToolbarItem
+} from '@patternfly/react-core';
+import PublishIcon from '@patternfly/react-icons/dist/esm/icons/openshift-icon';
+import SaveIcon from '@patternfly/react-icons/dist/esm/icons/upload-icon';
+import CopyIcon from '@patternfly/react-icons/dist/esm/icons/copy-icon';
+import '../designer/karavan.css';
+import {MainToolbar} from "../MainToolbar";
+import {CamelElement, Integration} from "../designer/model/CamelModel";
+import {KaravanApi} from "../api/KaravanApi";
+import {CamelYaml} from "../designer/api/CamelYaml";
+import {KaravanDesigner} from "../designer/ui/KaravanDesigner";
+
+interface Props {
+    integration: Integration,
+    mode: 'local' | 'cloud',
+}
+
+interface State {
+    integration: Integration
+    view: "design" | "code"
+    name: string
+    yaml: string
+    key: string
+}
+
+export class DesignerPage extends React.Component<Props, State> {
+
+    public state: State = {
+        integration: this.props.integration, // CamelYaml.demo(),
+        view: "design",
+        key: "",
+        name: this.props.integration.metadata.name,
+        yaml: CamelYaml.integrationToYaml(this.props.integration)
+    };
+
+    componentDidMount() {
+    }
+
+    post = () => {
+        KaravanApi.postIntegrations(this.state.integration.metadata.name + ".yaml", this.state.yaml, res => {
+            if (res.status === 200) {
+                console.log(res) //TODO show notification
+            } else {
+                console.log(res) //TODO show notification
+            }
+        })
+    }
+
+    publish = () => {
+        KaravanApi.publishIntegration(this.state.integration.metadata.name + ".yaml", this.state.yaml, res => {
+            if (res.status === 200) {
+                console.log(res) //TODO show notification
+            } else {
+                console.log(res) //TODO show notification
+            }
+        })
+    }
+
+    copy = () => {
+        this.copyToClipboard(this.state.yaml);
+    }
+
+    copyToClipboard = (data: string) => {
+        const listener = (e: ClipboardEvent) => {
+            e.clipboardData?.setData('text/plain', data);
+            e.preventDefault();
+            document.removeEventListener('copy', listener);
+        };
+        document.addEventListener('copy', listener);
+        document.execCommand('copy');
+    }
+
+    changeView = (view: "design" | "code") => {
+        this.setState({view: view});
+    }
+
+    save = (name: string, yaml: string) => {
+        this.setState({name: name, yaml:yaml})
+    }
+
+    tools = (view: "design" | "code") => (
+        <Toolbar id="toolbar-group-types">
+            <ToolbarContent>
+                {this.props.mode === 'cloud' &&
+                <ToolbarItem>
+                    <Button variant="secondary" icon={<PublishIcon/>} onClick={e => this.publish()}>Publish</Button>
+                </ToolbarItem>
+                }
+                {this.props.mode === 'local' &&
+                <ToolbarItem>
+                    <Button variant="secondary" icon={<CopyIcon/>} onClick={e => this.copy()}>Copy</Button>
+                </ToolbarItem>
+                }
+                <ToolbarItem>
+                    <Button variant="secondary" icon={<SaveIcon/>} onClick={e => this.post()}>Save</Button>
+                </ToolbarItem>
+            </ToolbarContent>
+        </Toolbar>);
+
+    title = (view: "design" | "code") => (
+        <div className="dsl-title">
+            <TextContent className="title">
+                <Text component="h1">Designer</Text>
+            </TextContent>
+            <ToggleGroup aria-label="Switch view" className="toggle">
+                <ToggleGroupItem text="Design" buttonId="design" isSelected={view === 'design'}
+                                 onChange={e => this.changeView('design')}/>
+                <ToggleGroupItem text="YAML" buttonId="yaml" isSelected={view === 'code'}
+                                 onChange={e => this.changeView('code')}/>
+            </ToggleGroup>
+        </div>
+    );
+
+    render() {
+        return (
+            <PageSection className="dsl-page" isFilled padding={{default: 'noPadding'}}>
+                <MainToolbar title={this.title(this.state.view)}
+                             tools={this.tools(this.state.view)}/>
+                <div className="dsl-page-columns">
+                    {this.state.view === 'code' &&
+                    <div className="yaml-code">
+                        <CodeBlock className="route-code">
+                            <CodeBlockCode id="code-content">{this.state.yaml}</CodeBlockCode>
+                        </CodeBlock>
+                    </div>
+                    }
+                    {this.state.view === 'design' &&
+                    <KaravanDesigner key={this.state.key} name={this.state.name} yaml={this.state.yaml} onSave={(name, yaml) => this.save(name, yaml)}/>
+                    }
+                </div>
+            </PageSection>
+        );
+    }
+};
diff --git a/karavan-app/src/main/webapp/src/integrations/IntegrationCard.tsx b/karavan-app/src/main/webapp/src/integrations/IntegrationCard.tsx
index bca453a..27273e3 100644
--- a/karavan-app/src/main/webapp/src/integrations/IntegrationCard.tsx
+++ b/karavan-app/src/main/webapp/src/integrations/IntegrationCard.tsx
@@ -3,7 +3,7 @@ import {
     CardHeader, Card, CardTitle, CardBody, Button, CardActions,
 } from '@patternfly/react-core';
 import DeleteIcon from "@patternfly/react-icons/dist/js/icons/times-icon";
-import '../karavan.css';
+import '../designer/karavan.css';
 import {CamelUi} from "../designer/api/CamelUi";
 
 interface Props {
diff --git a/karavan-app/src/main/webapp/src/integrations/IntegrationPage.tsx b/karavan-app/src/main/webapp/src/integrations/IntegrationPage.tsx
index 9c408b8..091ebf4 100644
--- a/karavan-app/src/main/webapp/src/integrations/IntegrationPage.tsx
+++ b/karavan-app/src/main/webapp/src/integrations/IntegrationPage.tsx
@@ -8,13 +8,14 @@ import {
     PageSection,
     TextContent,
     Text,
-    Button
+    Button, Modal, FormGroup, ModalVariant
 } from '@patternfly/react-core';
-import '../karavan.css';
+import '../designer/karavan.css';
 import {IntegrationCard} from "./IntegrationCard";
 import {MainToolbar} from "../MainToolbar";
 import RefreshIcon from '@patternfly/react-icons/dist/esm/icons/sync-alt-icon';
 import PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';
+import {Integration} from "../designer/model/CamelModel";
 
 interface Props {
     integrations: []
@@ -28,6 +29,8 @@ interface State {
     repository: string,
     path: string,
     integrations: [],
+    isModalOpen: boolean,
+    newName: string
 }
 
 export class IntegrationPage extends React.Component<Props, State> {
@@ -36,6 +39,8 @@ export class IntegrationPage extends React.Component<Props, State> {
         repository: '',
         path: '',
         integrations: this.props.integrations,
+        isModalOpen: false,
+        newName: ''
     };
 
     tools = () => (<Toolbar id="toolbar-group-types">
@@ -48,7 +53,7 @@ export class IntegrationPage extends React.Component<Props, State> {
                 <Button variant="secondary" icon={<RefreshIcon />} onClick={e => this.props.onRefresh.call(this)}>Refresh</Button>
             </ToolbarItem>
             <ToolbarItem>
-                <Button icon={<PlusIcon />} onClick={e => this.props.onCreate.call(this)}>Create</Button>
+                <Button icon={<PlusIcon />} onClick={e => this.setState({isModalOpen:true})}>Create</Button>
             </ToolbarItem>
         </ToolbarContent>
     </Toolbar>);
@@ -57,6 +62,15 @@ export class IntegrationPage extends React.Component<Props, State> {
         <Text component="h1">Integrations</Text>
     </TextContent>);
 
+    closeModal = () => {
+        this.setState({isModalOpen:false, newName:""});
+    }
+    saveAndCloseModal = () => {
+        const i = Integration.createNew(this.state.newName);
+        this.props.onCreate.call(this, i);
+        this.setState({isModalOpen:false, newName:""});
+    }
+
     render() {
         return (
             <PageSection padding={{default: 'noPadding'}}>
@@ -69,6 +83,22 @@ export class IntegrationPage extends React.Component<Props, State> {
                         ))}
                     </Gallery>
                 </PageSection>
+                <Modal
+                    title="Create new Integration"
+                    variant={ModalVariant.small}
+                    isOpen={this.state.isModalOpen}
+                    onClose={this.closeModal}
+                    actions={[
+                        <Button key="confirm" variant="primary" onClick={this.saveAndCloseModal}>Save</Button>,
+                        <Button key="cancel" variant="secondary" onClick={this.closeModal}>Cancel</Button>
+                    ]}
+                >
+                    <FormGroup label="Title" fieldId="title" isRequired>
+                        <TextInput className="text-field" type="text" id="title" name="title"
+                                   value={this.state.newName}
+                                   onChange={e => this.setState({newName: e})}/>
+                    </FormGroup>
+                </Modal>
             </PageSection>
         );
     }
diff --git a/karavan-app/src/main/webapp/src/kamelets/KameletCard.tsx b/karavan-app/src/main/webapp/src/kamelets/KameletCard.tsx
index ce68bcf..b115bb3 100644
--- a/karavan-app/src/main/webapp/src/kamelets/KameletCard.tsx
+++ b/karavan-app/src/main/webapp/src/kamelets/KameletCard.tsx
@@ -2,7 +2,7 @@ import React from 'react';
 import {
     CardHeader, Card, CardTitle, CardBody, CardActions, CardFooter,Badge
 } from '@patternfly/react-core';
-import '../karavan.css';
+import '../designer/karavan.css';
 import {Kamelet} from "../designer/model/KameletModels";
 import {CamelUi} from "../designer/api/CamelUi";
 
diff --git a/karavan-app/src/main/webapp/src/kamelets/KameletModal.tsx b/karavan-app/src/main/webapp/src/kamelets/KameletModal.tsx
index 43b9275..ac4bc41 100644
--- a/karavan-app/src/main/webapp/src/kamelets/KameletModal.tsx
+++ b/karavan-app/src/main/webapp/src/kamelets/KameletModal.tsx
@@ -8,7 +8,7 @@ import {
     CardActions,
     Badge, Flex, CardTitle,
 } from '@patternfly/react-core';
-import '../karavan.css';
+import '../designer/karavan.css';
 import {Kamelet, Property} from "../designer/model/KameletModels";
 import {TableComposable, Tbody, Td, Th, Thead, Tr} from "@patternfly/react-table";
 
diff --git a/karavan-app/src/main/webapp/src/kamelets/KameletsPage.tsx b/karavan-app/src/main/webapp/src/kamelets/KameletsPage.tsx
index ce87101..567a9f2 100644
--- a/karavan-app/src/main/webapp/src/kamelets/KameletsPage.tsx
+++ b/karavan-app/src/main/webapp/src/kamelets/KameletsPage.tsx
@@ -7,7 +7,7 @@ import {
     TextInput,
     PageSection, TextContent, Text, PageSectionVariants, Flex, FlexItem
 } from '@patternfly/react-core';
-import '../karavan.css';
+import '../designer/karavan.css';
 import {KameletCard} from "./KameletCard";
 import {Kamelet} from "../designer/model/KameletModels";
 import {KameletApi} from "../designer/api/KameletApi";
diff --git a/karavan-app/src/main/webapp/src/karavan.css b/karavan-app/src/main/webapp/src/karavan.css
deleted file mode 100644
index 39779de..0000000
--- a/karavan-app/src/main/webapp/src/karavan.css
+++ /dev/null
@@ -1,543 +0,0 @@
-.karavan .tools-section {
-    padding-top: 0px;
-    padding-bottom: 0px;
-    padding-right: 0;
-    border-bottom: 1px solid #eee;
-}
-
-.karavan .tools-section .dsl-title {
-    display: flex;
-    flex-direction: row;
-}
-
-.karavan .tools-section .dsl-title .title {
-    margin-right: 16px;
-}
-
-.karavan .brand {
-    height: 36px;
-}
-
-.karavan .header-button {
-    margin-left: var(--pf-c-page__header-tools--MarginRight);
-}
-
-.karavan .page-header {
-    display: flex;
-    justify-content: space-between;
-}
-
-.karavan .page-header .top-toolbar .pf-c-page__header-tools{
-    margin-right: 0;
-}
-.karavan .page-header .top-toolbar {
-    width: 100%;
-}
-
-.karavan .page-header .pf-c-page__header-brand {
-    padding-right: 16px;
-}
-
-.karavan .main-alert {
-    position: fixed;
-    width: 500px;
-    height: 90px;
-    left: 50%;
-    margin-top: 20px;
-    margin-left: -250px;
-}
-
-.filler {
-    width: 100%;
-}
-
-.modal-footer {
-    width: 100%;
-}
-
-.modal-footer .deploy-buttons .pf-c-form__actions {
-    justify-content: flex-end;
-    margin-top: 16px;
-}
-
-.modal-footer .deploy-buttons .pf-c-button {
-    margin-left: 16px;
-}
-
-.action-buttons .pf-c-form__actions {
-    justify-content: flex-end;
-    margin-top: 16px;
-}
-
-.action-buttons .pf-c-button {
-    margin-left: 16px;
-}
-
-.pf-c-modal-box__footer .hidden {
-    display: none;
-}
-
-.upload-buttons .pf-c-form__actions {
-    margin-top: 20px;
-    justify-content: flex-end;
-}
-
-/*integration page*/
-.integration-page .integration-card {
-    cursor: pointer;
-    height: 160px;
-}
-
-.integration-page .integration-card .pf-c-card__header {
-    padding-right: 6px;
-}
-
-.integration-page .integration-card .icon {
-    height: 24px;
-}
-
-.integration-page .integration-card .delete-button {
-    font-size: 17px;
-    line-height: 1;
-    border: 0;
-    padding: 0;
-    margin: 0;
-    background: transparent;
-    color: #b1b1b7;
-    visibility: hidden;
-}
-
-.integration-page .integration-card:hover .delete-button {
-    visibility: visible;
-}
-
-/*kamelets*/
-.kamelets-page .kamelet-card {
-    cursor: pointer;
-    height: 160px;
-}
-
-.kamelets-page .kamelet-card .pf-c-card__header {
-    padding-right: 6px;
-}
-
-.kamelets-page .kamelet-card .pf-c-card__body {
-    overflow: hidden;
-    position: relative;
-}
-
-.kamelets-page .kamelet-card .kamelet-icon {
-    height: 24px;
-    margin-top: auto;
-    margin-bottom: auto;
-    border: none;
-    -webkit-user-select: none;
-    -khtml-user-select: none;
-    -moz-user-select: none;
-    -o-user-select: none;
-    user-select: none;
-}
-
-/*kamelet modal*/
-.kamelet-modal-card .pf-c-card__header {
-    padding-right: 6px;
-    display: flex;
-    justify-content: space-between;
-}
-
-.kamelet-modal-card .pf-c-card__title {
-    font-weight: 600;
-}
-
-.kamelet-modal-card .description {
-    overflow: hidden;
-    position: relative;
-    max-width: 600px;
-}
-
-.kamelet-modal-card .kamelet-icon {
-    height: 36px;
-    margin-top: auto;
-    margin-bottom: auto;
-    border: none;
-    -webkit-user-select: none;
-    -khtml-user-select: none;
-    -moz-user-select: none;
-    -o-user-select: none;
-    user-select: none;
-}
-
-/*DSL*/
-.karavan .dsl-page {
-    height: 100%;
-    overflow: hidden;
-}
-
-.karavan .dsl-page .dsl-page-columns {
-    display: flex;
-    flex-direction: row;
-    height: 100%;
-}
-
-/*Properties*/
-.karavan .dsl-page .properties {
-    border: 1px solid #eee;
-    padding: 10px 10px 10px 10px;
-    font-size: 13px;
-    background: #fcfcfc;
-    width: 450px;
-    height: 94%;
-    overflow: auto;
-    display: flex;
-    flex-direction: column;
-    justify-content: space-between;
-}
-
-.karavan .dsl-page .properties .headers {
-    grid-row-gap: 10px;
-    row-gap: 10px;
-    display: contents;
-}
-
-.karavan .dsl-page .properties .footer {
-    height: 100%;
-    display: contents;
-}
-
-.karavan .dsl-page .properties .pf-c-form {
-    row-gap: 10px;
-}
-
-.karavan .dsl-page .properties .pf-c-form__group-label {
-    padding-bottom: 3px;
-    display: flex;
-    justify-content: space-between;
-}
-
-.karavan .dsl-page .properties .pf-c-form__label {
-    font-size: 13px;
-}
-
-.karavan .dsl-page .properties .text-field {
-    font-size: 13px;
-    height: auto;
-}
-
-.karavan .dsl-page .properties .expression-title {
-    font-size: 17px;
-    font-weught: bold;
-}
-
-.karavan .dsl-page .properties .text-area {
-    font-size: 13px;
-}
-
-.karavan .dsl-page .properties .pf-c-select__menu-search {
-    padding: 0px 6px 6px 6px;
-}
-
-.karavan .dsl-page .properties .pf-c-select__toggle-typeahead {
-    font-size: 13px;
-    height: auto;
-}
-
-.karavan .dsl-page .properties .pf-c-select__menu-item {
-    width: 280px;
-    font-size: 15px;
-    /*white-space: nowrap;*/
-    /*overflow: hidden;*/
-    /*text-overflow: ellipsis;*/
-    /*line-height: 12px;*/
-}
-
-.karavan .dsl-page .properties .number {
-    display: flex;
-    justify-content: space-between;
-}
-
-.karavan .dsl-page .properties .number .number-property {
-    width: 100%;
-}
-
-.karavan .dsl-page .properties .number .clear-button {
-    color: #b1b1b7;
-    --pf-c-button--BorderRadius: var(--pf-c-button--m-control--BorderRadius);
-    --pf-c-button--disabled--BackgroundColor: var(--pf-c-button--m-control--disabled--BackgroundColor);
-    --pf-c-button--after--BorderWidth: var(--pf-c-button--m-control--after--BorderWidth);
-    --pf-c-button--after--BorderColor: var(--pf-c-button--m-control--after--BorderTopColor) var(--pf-c-button--m-control--after--BorderRightColor) var(--pf-c-button--m-control--after--BorderBottomColor) var(--pf-c-button--m-control--after--BorderLeftColor);
-    color: var(--pf-c-button--m-control--Color);
-    background-color: var(--pf-c-button--m-control--BackgroundColor);
-    padding-left: 5px;
-    padding-right: 5px;
-}
-
-.karavan .dsl-page .properties .help-button {
-    font-size: 12px;
-}
-
-.karavan .dsl-page .properties .component-selector {
-    border-width: var(--pf-global--BorderWidth--sm);
-    border-top-color: var(--pf-global--BorderColor--300);
-    border-right-color: var(--pf-global--BorderColor--300);
-    border-bottom-color: var(--pf-global--BorderColor--200);
-    border-left-color: var(--pf-global--BorderColor--300);
-    border-style: solid;
-}
-
-.karavan .dsl-page .properties .expression,
-.karavan .dsl-page .properties .parameters {
-    padding-top: 6px;
-    padding-left: 16px;
-    grid-row-gap: 10px;
-    row-gap: 10px;
-    display: grid;
-}
-
-.karavan .dsl-page .properties .expression .pf-c-form__group-label,
-.karavan .dsl-page .properties .parameters .pf-c-form__group-label {
-    font-weight: 100;
-}
-
-.karavan .dsl-page .properties .expression .pf-c-form__group {
-    margin-bottom: 10px;
-}
-
-.karavan .dsl-page .properties .expression .pf-c-select__menu-wrapper {
-    width: 350px;
-}
-
-.karavan .dsl-page .flows {
-    display: block;
-    flex-direction: column;
-    font-size: 13px;
-    height: 100%;
-    width: 100%;
-    overflow-y: auto;
-    padding-bottom: 100px;
-    position: relative;
-}
-
-.karavan .dsl-page .flows .connections {
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 100%;
-    z-index: 13;
-}
-
-.karavan .dsl-page .flows .connections .incoming {
-    border-color: #e97826;
-    border-style: solid;
-    border-radius: 50px;
-    border-width: 1px;
-    background: #fff;
-    width: 50px;
-    height: 50px;
-    position: absolute;
-    left: 6px;
-    display: flex;
-}
-
-.karavan .dsl-page .flows .connections .outgoing {
-    border-color: #e97826;
-    border-style: solid;
-    border-radius: 50px;
-    border-width: 1px;
-    background: #fff;
-    width: 50px;
-    height: 50px;
-    position: absolute;
-    right: 1px;
-    display: flex;
-}
-
-.karavan .dsl-page .flows .connections .incoming .icon,
-.karavan .dsl-page .flows .connections .outgoing .icon {
-    height: 36px;
-    margin: auto;
-}
-
-.karavan .dsl-page .flows .connections .path {
-     stroke: #e97826;
-     stroke-width: 1;
-     fill: none;
-}
-
-.karavan .dsl-page .flows .connections path{
-    stroke-dasharray: 5;
-    -webkit-animation: dashdraw .5s linear infinite;
-    animation: dashdraw .5s linear infinite;
-}
-@keyframes dashdraw{0%{stroke-dashoffset:10}}
-
-
-.karavan .dsl-page .flows .step-element {
-    align-items: center;
-    text-align: center;
-    display: flex;
-    flex-direction: column;
-    width: fit-content;
-    margin-left: auto;
-    margin-right: auto;
-    border-color: #e97826;
-    border-style: solid;
-    border-radius: 3px;
-    border-width: 1px;
-    background: #fff;
-    min-width: 160px;
-    min-height: 73px;
-    padding: 4px 10px;
-    position: relative;
-}
-
-.karavan .dsl-page .flows .step-element .header {
-    display: block;
-    justify-content: center;
-    position: relative;
-    width: 100%;
-    z-index: 101;
-}
-
-.element-builder {
-    min-width: 160px;
-    min-height: 65px;
-    border-color: #e97826;
-    border-style: solid;
-    border-radius: 3px;
-    border-width: 1px;
-    padding: 4px 6px 0px 6px;
-    margin: 0px auto 0px auto;
-    display: flex;
-    flex-direction: column;
-    /*justify-content: space-between;*/
-    width: fit-content;
-}
-
-.element-builder .header {
-    display: block;
-    justify-content: center;
-    position: relative;
-    margin-bottom: 6px;
-}
-
-.step-element .header .delete-button,
-.element-builder .header .delete-button {
-    position: absolute;
-    top: 0;
-    right: -5px;
-    font-size: 13px;
-    line-height: 1;
-    border: 0;
-    padding: 0;
-    margin: 0;
-    background: transparent;
-    color: #b1b1b7;
-    visibility: hidden;
-}
-
-.step-element:hover .header .delete-button,
-.element-builder:hover .header .delete-button {
-    visibility: visible;;
-}
-
-.step-element .header .icon,
-.element-builder .header .icon {
-    height: 16px;
-    width: auto;
-    border: none;
-    -webkit-user-select: none;
-    -khtml-user-select: none;
-    -moz-user-select: none;
-    -o-user-select: none;
-    user-select: none;
-}
-
-.dsl-page .add-flow-button {
-    margin-top: 26px;
-    font-size: 15px;
-    line-height: 1;
-    border: 0;
-    padding: 0;
-    background: transparent;
-    color: #e97826;
-}
-
-.step-element .arrow-down {
-    font-size: 13px;
-    /*margin-top: -10px;*/
-    /*margin-bottom: -15px;*/
-    height: 16px;
-    color: #e97826;
-}
-
-.step-element .add-button {
-    top: 0;
-    right: 5px;
-    font-size: 15px;
-    line-height: 1;
-    border: 0;
-    padding: 0;
-    margin: 3px 0 0 0;
-    background: transparent;
-    color: #e97826;
-    visibility: hidden;
-}
-
-.element-builder .add-button {
-    top: 0;
-    right: 5px;
-    font-size: 15px;
-    line-height: 1;
-    border: 0;
-    padding: 0;
-    margin: 3px auto 0 auto;
-    background: transparent;
-    color: #e97826;
-    visibility: hidden;
-    height: 100%;
-    display: flex;
-    flex-direction: column;
-    justify-content: end;
-    width: 16px;
-}
-
-.element-builder .add-button svg {
-    margin: 0 auto 3px auto;
-}
-
-
-.element-builder:hover .add-button,
-.step-element:hover .add-button {
-    visibility: visible;
-}
-
-.dsl-gallery {
-    margin-top: 16px;
-}
-
-.dsl-modal {
-    height: 80%;
-}
-
-.dsl-modal .dsl-card {
-    cursor: pointer;
-}
-
-.dsl-modal .dsl-card .icon {
-    height: 16px;
-    width: auto;
-    border: none;
-    margin-right: 6px;
-    -webkit-user-select: none;
-    -khtml-user-select: none;
-    -moz-user-select: none;
-    -o-user-select: none;
-    user-select: none;
-}
-
-.yaml-code {
-    overflow: auto;
-    height: 100%;
-    width: 100%;
-    padding-bottom: 100px;
-}
\ No newline at end of file
diff --git a/karavan-app/src/main/webapp/yarn.lock b/karavan-app/src/main/webapp/yarn.lock
new file mode 100644
index 0000000..2883e41
--- /dev/null
+++ b/karavan-app/src/main/webapp/yarn.lock
@@ -0,0 +1,11678 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@7.10.4":
+  version "7.10.4"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
+  integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
+  dependencies:
+    "@babel/highlight" "^7.10.4"
+
+"@babel/code-frame@7.12.11":
+  version "7.12.11"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
+  integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
+  dependencies:
+    "@babel/highlight" "^7.10.4"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.15.8", "@babel/code-frame@^7.5.5":
+  version "7.15.8"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz#45990c47adadb00c03677baa89221f7cc23d2503"
+  integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==
+  dependencies:
+    "@babel/highlight" "^7.14.5"
+
+"@babel/compat-data@^7.12.1", "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0":
+  version "7.15.0"
+  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176"
+  integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==
+
+"@babel/core@7.12.3":
+  version "7.12.3"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8"
+  integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==
+  dependencies:
+    "@babel/code-frame" "^7.10.4"
+    "@babel/generator" "^7.12.1"
+    "@babel/helper-module-transforms" "^7.12.1"
+    "@babel/helpers" "^7.12.1"
+    "@babel/parser" "^7.12.3"
+    "@babel/template" "^7.10.4"
+    "@babel/traverse" "^7.12.1"
+    "@babel/types" "^7.12.1"
+    convert-source-map "^1.7.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.1"
+    json5 "^2.1.2"
+    lodash "^4.17.19"
+    resolve "^1.3.2"
+    semver "^5.4.1"
+    source-map "^0.5.0"
+
+"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5", "@babel/core@^7.8.4":
+  version "7.15.8"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.8.tgz#195b9f2bffe995d2c6c159e72fe525b4114e8c10"
+  integrity sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==
+  dependencies:
+    "@babel/code-frame" "^7.15.8"
+    "@babel/generator" "^7.15.8"
+    "@babel/helper-compilation-targets" "^7.15.4"
+    "@babel/helper-module-transforms" "^7.15.8"
+    "@babel/helpers" "^7.15.4"
+    "@babel/parser" "^7.15.8"
+    "@babel/template" "^7.15.4"
+    "@babel/traverse" "^7.15.4"
+    "@babel/types" "^7.15.6"
+    convert-source-map "^1.7.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.2"
+    json5 "^2.1.2"
+    semver "^6.3.0"
+    source-map "^0.5.0"
+
+"@babel/generator@^7.12.1", "@babel/generator@^7.15.4", "@babel/generator@^7.15.8":
+  version "7.15.8"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.8.tgz#fa56be6b596952ceb231048cf84ee499a19c0cd1"
+  integrity sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==
+  dependencies:
+    "@babel/types" "^7.15.6"
+    jsesc "^2.5.1"
+    source-map "^0.5.0"
+
+"@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835"
+  integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==
+  dependencies:
+    "@babel/types" "^7.15.4"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz#21ad815f609b84ee0e3058676c33cf6d1670525f"
+  integrity sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==
+  dependencies:
+    "@babel/helper-explode-assignable-expression" "^7.15.4"
+    "@babel/types" "^7.15.4"
+
+"@babel/helper-compilation-targets@^7.12.1", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9"
+  integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==
+  dependencies:
+    "@babel/compat-data" "^7.15.0"
+    "@babel/helper-validator-option" "^7.14.5"
+    browserslist "^4.16.6"
+    semver "^6.3.0"
+
+"@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e"
+  integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.15.4"
+    "@babel/helper-function-name" "^7.15.4"
+    "@babel/helper-member-expression-to-functions" "^7.15.4"
+    "@babel/helper-optimise-call-expression" "^7.15.4"
+    "@babel/helper-replace-supers" "^7.15.4"
+    "@babel/helper-split-export-declaration" "^7.15.4"
+
+"@babel/helper-create-regexp-features-plugin@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4"
+  integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.14.5"
+    regexpu-core "^4.7.1"
+
+"@babel/helper-define-polyfill-provider@^0.2.2":
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6"
+  integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.13.0"
+    "@babel/helper-module-imports" "^7.12.13"
+    "@babel/helper-plugin-utils" "^7.13.0"
+    "@babel/traverse" "^7.13.0"
+    debug "^4.1.1"
+    lodash.debounce "^4.0.8"
+    resolve "^1.14.2"
+    semver "^6.1.2"
+
+"@babel/helper-explode-assignable-expression@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz#f9aec9d219f271eaf92b9f561598ca6b2682600c"
+  integrity sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==
+  dependencies:
+    "@babel/types" "^7.15.4"
+
+"@babel/helper-function-name@^7.14.5", "@babel/helper-function-name@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc"
+  integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==
+  dependencies:
+    "@babel/helper-get-function-arity" "^7.15.4"
+    "@babel/template" "^7.15.4"
+    "@babel/types" "^7.15.4"
+
+"@babel/helper-get-function-arity@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b"
+  integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==
+  dependencies:
+    "@babel/types" "^7.15.4"
+
+"@babel/helper-hoist-variables@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df"
+  integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==
+  dependencies:
+    "@babel/types" "^7.15.4"
+
+"@babel/helper-member-expression-to-functions@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef"
+  integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==
+  dependencies:
+    "@babel/types" "^7.15.4"
+
+"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f"
+  integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==
+  dependencies:
+    "@babel/types" "^7.15.4"
+
+"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4", "@babel/helper-module-transforms@^7.15.8":
+  version "7.15.8"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz#d8c0e75a87a52e374a8f25f855174786a09498b2"
+  integrity sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==
+  dependencies:
+    "@babel/helper-module-imports" "^7.15.4"
+    "@babel/helper-replace-supers" "^7.15.4"
+    "@babel/helper-simple-access" "^7.15.4"
+    "@babel/helper-split-export-declaration" "^7.15.4"
+    "@babel/helper-validator-identifier" "^7.15.7"
+    "@babel/template" "^7.15.4"
+    "@babel/traverse" "^7.15.4"
+    "@babel/types" "^7.15.6"
+
+"@babel/helper-optimise-call-expression@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171"
+  integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==
+  dependencies:
+    "@babel/types" "^7.15.4"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9"
+  integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==
+
+"@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz#2637c0731e4c90fbf58ac58b50b2b5a192fc970f"
+  integrity sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.15.4"
+    "@babel/helper-wrap-function" "^7.15.4"
+    "@babel/types" "^7.15.4"
+
+"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a"
+  integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==
+  dependencies:
+    "@babel/helper-member-expression-to-functions" "^7.15.4"
+    "@babel/helper-optimise-call-expression" "^7.15.4"
+    "@babel/traverse" "^7.15.4"
+    "@babel/types" "^7.15.4"
+
+"@babel/helper-simple-access@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b"
+  integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==
+  dependencies:
+    "@babel/types" "^7.15.4"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.12.1", "@babel/helper-skip-transparent-expression-wrappers@^7.14.5", "@babel/helper-skip-transparent-expression-wrappers@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz#707dbdba1f4ad0fa34f9114fc8197aec7d5da2eb"
+  integrity sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==
+  dependencies:
+    "@babel/types" "^7.15.4"
+
+"@babel/helper-split-export-declaration@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257"
+  integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==
+  dependencies:
+    "@babel/types" "^7.15.4"
+
+"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7":
+  version "7.15.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389"
+  integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==
+
+"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"
+  integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==
+
+"@babel/helper-wrap-function@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz#6f754b2446cfaf3d612523e6ab8d79c27c3a3de7"
+  integrity sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==
+  dependencies:
+    "@babel/helper-function-name" "^7.15.4"
+    "@babel/template" "^7.15.4"
+    "@babel/traverse" "^7.15.4"
+    "@babel/types" "^7.15.4"
+
+"@babel/helpers@^7.12.1", "@babel/helpers@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43"
+  integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==
+  dependencies:
+    "@babel/template" "^7.15.4"
+    "@babel/traverse" "^7.15.4"
+    "@babel/types" "^7.15.4"
+
+"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9"
+  integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.14.5"
+    chalk "^2.0.0"
+    js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.15.4", "@babel/parser@^7.15.8", "@babel/parser@^7.7.0":
+  version "7.15.8"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016"
+  integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e"
+  integrity sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4"
+    "@babel/plugin-proposal-optional-chaining" "^7.14.5"
+
+"@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.15.8":
+  version "7.15.8"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz#a3100f785fab4357987c4223ab1b02b599048403"
+  integrity sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-remap-async-to-generator" "^7.15.4"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+
+"@babel/plugin-proposal-class-properties@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de"
+  integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.12.1"
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e"
+  integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-proposal-class-static-block@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz#3e7ca6128453c089e8b477a99f970c63fc1cb8d7"
+  integrity sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.15.4"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-proposal-decorators@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f"
+  integrity sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.12.1"
+    "@babel/helper-plugin-utils" "^7.10.4"
+    "@babel/plugin-syntax-decorators" "^7.12.1"
+
+"@babel/plugin-proposal-dynamic-import@^7.12.1", "@babel/plugin-proposal-dynamic-import@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c"
+  integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+
+"@babel/plugin-proposal-export-namespace-from@^7.12.1", "@babel/plugin-proposal-export-namespace-from@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76"
+  integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-proposal-json-strings@^7.12.1", "@babel/plugin-proposal-json-strings@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb"
+  integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+
+"@babel/plugin-proposal-logical-assignment-operators@^7.12.1", "@babel/plugin-proposal-logical-assignment-operators@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738"
+  integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c"
+  integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6"
+  integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+
+"@babel/plugin-proposal-numeric-separator@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz#0e2c6774c4ce48be412119b4d693ac777f7685a6"
+  integrity sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-proposal-numeric-separator@^7.12.1", "@babel/plugin-proposal-numeric-separator@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18"
+  integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.15.6":
+  version "7.15.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz#ef68050c8703d07b25af402cb96cf7f34a68ed11"
+  integrity sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==
+  dependencies:
+    "@babel/compat-data" "^7.15.0"
+    "@babel/helper-compilation-targets" "^7.15.4"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-transform-parameters" "^7.15.4"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.12.1", "@babel/plugin-proposal-optional-catch-binding@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c"
+  integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+
+"@babel/plugin-proposal-optional-chaining@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz#cce122203fc8a32794296fc377c6dedaf4363797"
+  integrity sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+
+"@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603"
+  integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d"
+  integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-proposal-private-property-in-object@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz#55c5e3b4d0261fd44fe637e3f624cfb0f484e3e5"
+  integrity sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.15.4"
+    "@babel/helper-create-class-features-plugin" "^7.15.4"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8"
+  integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4":
+  version "7.8.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+  integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-bigint@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
+  integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3":
+  version "7.12.13"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
+  integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-syntax-class-static-block@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
+  integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-decorators@^7.12.1":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz#eafb9c0cbe09c8afeb964ba3a7bbd63945a72f20"
+  integrity sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+  integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
+  integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-flow@^7.12.1":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.14.5.tgz#2ff654999497d7d7d142493260005263731da180"
+  integrity sha512-9WK5ZwKCdWHxVuU13XNT6X73FGmutAXeor5lGFq6qhOFtMFUF4jkbijuyUdZZlpYq6E2hZeZf/u3959X9wsv0Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-import-meta@^7.8.3":
+  version "7.10.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
+  integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+  integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201"
+  integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
+  version "7.10.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+  integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+  integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":
+  version "7.10.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+  integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+  integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+  integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+  integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-private-property-in-object@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
+  integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
+  integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-typescript@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716"
+  integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a"
+  integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-async-to-generator@^7.12.1", "@babel/plugin-transform-async-to-generator@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67"
+  integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==
+  dependencies:
+    "@babel/helper-module-imports" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-remap-async-to-generator" "^7.14.5"
+
+"@babel/plugin-transform-block-scoped-functions@^7.12.1", "@babel/plugin-transform-block-scoped-functions@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4"
+  integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.15.3":
+  version "7.15.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf"
+  integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz#50aee17aaf7f332ae44e3bce4c2e10534d5d3bf1"
+  integrity sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.15.4"
+    "@babel/helper-function-name" "^7.15.4"
+    "@babel/helper-optimise-call-expression" "^7.15.4"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-replace-supers" "^7.15.4"
+    "@babel/helper-split-export-declaration" "^7.15.4"
+    globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.12.1", "@babel/plugin-transform-computed-properties@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f"
+  integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.14.7":
+  version "7.14.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576"
+  integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a"
+  integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-duplicate-keys@^7.12.1", "@babel/plugin-transform-duplicate-keys@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954"
+  integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-exponentiation-operator@^7.12.1", "@babel/plugin-transform-exponentiation-operator@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493"
+  integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==
+  dependencies:
+    "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-flow-strip-types@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4"
+  integrity sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+    "@babel/plugin-syntax-flow" "^7.12.1"
+
+"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz#25c62cce2718cfb29715f416e75d5263fb36a8c2"
+  integrity sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-function-name@^7.12.1", "@babel/plugin-transform-function-name@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2"
+  integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==
+  dependencies:
+    "@babel/helper-function-name" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-literals@^7.12.1", "@babel/plugin-transform-literals@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78"
+  integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-member-expression-literals@^7.12.1", "@babel/plugin-transform-member-expression-literals@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7"
+  integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-modules-amd@^7.12.1", "@babel/plugin-transform-modules-amd@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7"
+  integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-commonjs@^7.12.1", "@babel/plugin-transform-modules-commonjs@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz#8201101240eabb5a76c08ef61b2954f767b6b4c1"
+  integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.15.4"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-simple-access" "^7.15.4"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-systemjs@^7.12.1", "@babel/plugin-transform-modules-systemjs@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz#b42890c7349a78c827719f1d2d0cd38c7d268132"
+  integrity sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==
+  dependencies:
+    "@babel/helper-hoist-variables" "^7.15.4"
+    "@babel/helper-module-transforms" "^7.15.4"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-validator-identifier" "^7.14.9"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0"
+  integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1", "@babel/plugin-transform-named-capturing-groups-regex@^7.14.9":
+  version "7.14.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2"
+  integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+
+"@babel/plugin-transform-new-target@^7.12.1", "@babel/plugin-transform-new-target@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8"
+  integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-object-super@^7.12.1", "@babel/plugin-transform-object-super@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45"
+  integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-replace-supers" "^7.14.5"
+
+"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.15.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz#5f2285cc3160bf48c8502432716b48504d29ed62"
+  integrity sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-property-literals@^7.12.1", "@babel/plugin-transform-property-literals@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34"
+  integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-react-constant-elements@^7.12.1":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz#41790d856f7c5cec82d2bcf5d0e5064d682522ed"
+  integrity sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-react-display-name@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d"
+  integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-react-display-name@^7.12.1", "@babel/plugin-transform-react-display-name@^7.14.5":
+  version "7.15.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz#6aaac6099f1fcf6589d35ae6be1b6e10c8c602b9"
+  integrity sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-react-jsx-development@^7.12.1", "@babel/plugin-transform-react-jsx-development@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz#1a6c73e2f7ed2c42eebc3d2ad60b0c7494fcb9af"
+  integrity sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==
+  dependencies:
+    "@babel/plugin-transform-react-jsx" "^7.14.5"
+
+"@babel/plugin-transform-react-jsx-self@^7.12.1":
+  version "7.14.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.14.9.tgz#33041e665453391eb6ee54a2ecf3ba1d46bd30f4"
+  integrity sha512-Fqqu0f8zv9W+RyOnx29BX/RlEsBRANbOf5xs5oxb2aHP4FKbLXxIaVPUiCti56LAR1IixMH4EyaixhUsKqoBHw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-react-jsx-source@^7.12.1":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.5.tgz#79f728e60e6dbd31a2b860b0bf6c9765918acf1d"
+  integrity sha512-1TpSDnD9XR/rQ2tzunBVPThF5poaYT9GqP+of8fAtguYuI/dm2RkrMBDemsxtY0XBzvW7nXjYM0hRyKX9QYj7Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.14.5":
+  version "7.14.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz#3314b2163033abac5200a869c4de242cd50a914c"
+  integrity sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.14.5"
+    "@babel/helper-module-imports" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-jsx" "^7.14.5"
+    "@babel/types" "^7.14.9"
+
+"@babel/plugin-transform-react-pure-annotations@^7.12.1", "@babel/plugin-transform-react-pure-annotations@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz#18de612b84021e3a9802cbc212c9d9f46d0d11fc"
+  integrity sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f"
+  integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==
+  dependencies:
+    regenerator-transform "^0.14.2"
+
+"@babel/plugin-transform-reserved-words@^7.12.1", "@babel/plugin-transform-reserved-words@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304"
+  integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-runtime@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz#04b792057eb460389ff6a4198e377614ea1e7ba5"
+  integrity sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==
+  dependencies:
+    "@babel/helper-module-imports" "^7.12.1"
+    "@babel/helper-plugin-utils" "^7.10.4"
+    resolve "^1.8.1"
+    semver "^5.5.1"
+
+"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58"
+  integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.15.8":
+  version "7.15.8"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz#79d5aa27f68d700449b2da07691dfa32d2f6d468"
+  integrity sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4"
+
+"@babel/plugin-transform-sticky-regex@^7.12.1", "@babel/plugin-transform-sticky-regex@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9"
+  integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93"
+  integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4"
+  integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-typescript@^7.12.1":
+  version "7.15.8"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.8.tgz#ff0e6a47de9b2d58652123ab5a879b2ff20665d8"
+  integrity sha512-ZXIkJpbaf6/EsmjeTbiJN/yMxWPFWvlr7sEG1P95Xb4S4IBcrf2n7s/fItIhsAmOf8oSh3VJPDppO6ExfAfKRQ==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.15.4"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/plugin-syntax-typescript" "^7.14.5"
+
+"@babel/plugin-transform-unicode-escapes@^7.12.1", "@babel/plugin-transform-unicode-escapes@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b"
+  integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-unicode-regex@^7.12.1", "@babel/plugin-transform-unicode-regex@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e"
+  integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.14.5"
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/preset-env@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz#9c7e5ca82a19efc865384bb4989148d2ee5d7ac2"
+  integrity sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==
+  dependencies:
+    "@babel/compat-data" "^7.12.1"
+    "@babel/helper-compilation-targets" "^7.12.1"
+    "@babel/helper-module-imports" "^7.12.1"
+    "@babel/helper-plugin-utils" "^7.10.4"
+    "@babel/helper-validator-option" "^7.12.1"
+    "@babel/plugin-proposal-async-generator-functions" "^7.12.1"
+    "@babel/plugin-proposal-class-properties" "^7.12.1"
+    "@babel/plugin-proposal-dynamic-import" "^7.12.1"
+    "@babel/plugin-proposal-export-namespace-from" "^7.12.1"
+    "@babel/plugin-proposal-json-strings" "^7.12.1"
+    "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1"
+    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1"
+    "@babel/plugin-proposal-numeric-separator" "^7.12.1"
+    "@babel/plugin-proposal-object-rest-spread" "^7.12.1"
+    "@babel/plugin-proposal-optional-catch-binding" "^7.12.1"
+    "@babel/plugin-proposal-optional-chaining" "^7.12.1"
+    "@babel/plugin-proposal-private-methods" "^7.12.1"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.12.1"
+    "@babel/plugin-syntax-async-generators" "^7.8.0"
+    "@babel/plugin-syntax-class-properties" "^7.12.1"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+    "@babel/plugin-syntax-json-strings" "^7.8.0"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+    "@babel/plugin-syntax-top-level-await" "^7.12.1"
+    "@babel/plugin-transform-arrow-functions" "^7.12.1"
+    "@babel/plugin-transform-async-to-generator" "^7.12.1"
+    "@babel/plugin-transform-block-scoped-functions" "^7.12.1"
+    "@babel/plugin-transform-block-scoping" "^7.12.1"
+    "@babel/plugin-transform-classes" "^7.12.1"
+    "@babel/plugin-transform-computed-properties" "^7.12.1"
+    "@babel/plugin-transform-destructuring" "^7.12.1"
+    "@babel/plugin-transform-dotall-regex" "^7.12.1"
+    "@babel/plugin-transform-duplicate-keys" "^7.12.1"
+    "@babel/plugin-transform-exponentiation-operator" "^7.12.1"
+    "@babel/plugin-transform-for-of" "^7.12.1"
+    "@babel/plugin-transform-function-name" "^7.12.1"
+    "@babel/plugin-transform-literals" "^7.12.1"
+    "@babel/plugin-transform-member-expression-literals" "^7.12.1"
+    "@babel/plugin-transform-modules-amd" "^7.12.1"
+    "@babel/plugin-transform-modules-commonjs" "^7.12.1"
+    "@babel/plugin-transform-modules-systemjs" "^7.12.1"
+    "@babel/plugin-transform-modules-umd" "^7.12.1"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1"
+    "@babel/plugin-transform-new-target" "^7.12.1"
+    "@babel/plugin-transform-object-super" "^7.12.1"
+    "@babel/plugin-transform-parameters" "^7.12.1"
+    "@babel/plugin-transform-property-literals" "^7.12.1"
+    "@babel/plugin-transform-regenerator" "^7.12.1"
+    "@babel/plugin-transform-reserved-words" "^7.12.1"
+    "@babel/plugin-transform-shorthand-properties" "^7.12.1"
+    "@babel/plugin-transform-spread" "^7.12.1"
+    "@babel/plugin-transform-sticky-regex" "^7.12.1"
+    "@babel/plugin-transform-template-literals" "^7.12.1"
+    "@babel/plugin-transform-typeof-symbol" "^7.12.1"
+    "@babel/plugin-transform-unicode-escapes" "^7.12.1"
+    "@babel/plugin-transform-unicode-regex" "^7.12.1"
+    "@babel/preset-modules" "^0.1.3"
+    "@babel/types" "^7.12.1"
+    core-js-compat "^3.6.2"
+    semver "^5.5.0"
+
+"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.8.4":
+  version "7.15.8"
+  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.8.tgz#f527ce5bcb121cd199f6b502bf23e420b3ff8dba"
+  integrity sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==
+  dependencies:
+    "@babel/compat-data" "^7.15.0"
+    "@babel/helper-compilation-targets" "^7.15.4"
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-validator-option" "^7.14.5"
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.15.4"
+    "@babel/plugin-proposal-async-generator-functions" "^7.15.8"
+    "@babel/plugin-proposal-class-properties" "^7.14.5"
+    "@babel/plugin-proposal-class-static-block" "^7.15.4"
+    "@babel/plugin-proposal-dynamic-import" "^7.14.5"
+    "@babel/plugin-proposal-export-namespace-from" "^7.14.5"
+    "@babel/plugin-proposal-json-strings" "^7.14.5"
+    "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5"
+    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5"
+    "@babel/plugin-proposal-numeric-separator" "^7.14.5"
+    "@babel/plugin-proposal-object-rest-spread" "^7.15.6"
+    "@babel/plugin-proposal-optional-catch-binding" "^7.14.5"
+    "@babel/plugin-proposal-optional-chaining" "^7.14.5"
+    "@babel/plugin-proposal-private-methods" "^7.14.5"
+    "@babel/plugin-proposal-private-property-in-object" "^7.15.4"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.14.5"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+    "@babel/plugin-syntax-class-properties" "^7.12.13"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+    "@babel/plugin-syntax-top-level-await" "^7.14.5"
+    "@babel/plugin-transform-arrow-functions" "^7.14.5"
+    "@babel/plugin-transform-async-to-generator" "^7.14.5"
+    "@babel/plugin-transform-block-scoped-functions" "^7.14.5"
+    "@babel/plugin-transform-block-scoping" "^7.15.3"
+    "@babel/plugin-transform-classes" "^7.15.4"
+    "@babel/plugin-transform-computed-properties" "^7.14.5"
+    "@babel/plugin-transform-destructuring" "^7.14.7"
+    "@babel/plugin-transform-dotall-regex" "^7.14.5"
+    "@babel/plugin-transform-duplicate-keys" "^7.14.5"
+    "@babel/plugin-transform-exponentiation-operator" "^7.14.5"
+    "@babel/plugin-transform-for-of" "^7.15.4"
+    "@babel/plugin-transform-function-name" "^7.14.5"
+    "@babel/plugin-transform-literals" "^7.14.5"
+    "@babel/plugin-transform-member-expression-literals" "^7.14.5"
+    "@babel/plugin-transform-modules-amd" "^7.14.5"
+    "@babel/plugin-transform-modules-commonjs" "^7.15.4"
+    "@babel/plugin-transform-modules-systemjs" "^7.15.4"
+    "@babel/plugin-transform-modules-umd" "^7.14.5"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9"
+    "@babel/plugin-transform-new-target" "^7.14.5"
+    "@babel/plugin-transform-object-super" "^7.14.5"
+    "@babel/plugin-transform-parameters" "^7.15.4"
+    "@babel/plugin-transform-property-literals" "^7.14.5"
+    "@babel/plugin-transform-regenerator" "^7.14.5"
+    "@babel/plugin-transform-reserved-words" "^7.14.5"
+    "@babel/plugin-transform-shorthand-properties" "^7.14.5"
+    "@babel/plugin-transform-spread" "^7.15.8"
+    "@babel/plugin-transform-sticky-regex" "^7.14.5"
+    "@babel/plugin-transform-template-literals" "^7.14.5"
+    "@babel/plugin-transform-typeof-symbol" "^7.14.5"
+    "@babel/plugin-transform-unicode-escapes" "^7.14.5"
+    "@babel/plugin-transform-unicode-regex" "^7.14.5"
+    "@babel/preset-modules" "^0.1.4"
+    "@babel/types" "^7.15.6"
+    babel-plugin-polyfill-corejs2 "^0.2.2"
+    babel-plugin-polyfill-corejs3 "^0.2.5"
+    babel-plugin-polyfill-regenerator "^0.2.2"
+    core-js-compat "^3.16.0"
+    semver "^6.3.0"
+
+"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.4":
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e"
+  integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+    "@babel/plugin-transform-dotall-regex" "^7.4.4"
+    "@babel/types" "^7.4.4"
+    esutils "^2.0.2"
+
+"@babel/preset-react@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz#7f022b13f55b6dd82f00f16d1c599ae62985358c"
+  integrity sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+    "@babel/plugin-transform-react-display-name" "^7.12.1"
+    "@babel/plugin-transform-react-jsx" "^7.12.1"
+    "@babel/plugin-transform-react-jsx-development" "^7.12.1"
+    "@babel/plugin-transform-react-jsx-self" "^7.12.1"
+    "@babel/plugin-transform-react-jsx-source" "^7.12.1"
+    "@babel/plugin-transform-react-pure-annotations" "^7.12.1"
+
+"@babel/preset-react@^7.12.5":
+  version "7.14.5"
+  resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c"
+  integrity sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+    "@babel/helper-validator-option" "^7.14.5"
+    "@babel/plugin-transform-react-display-name" "^7.14.5"
+    "@babel/plugin-transform-react-jsx" "^7.14.5"
+    "@babel/plugin-transform-react-jsx-development" "^7.14.5"
+    "@babel/plugin-transform-react-pure-annotations" "^7.14.5"
+
+"@babel/preset-typescript@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz#86480b483bb97f75036e8864fe404cc782cc311b"
+  integrity sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+    "@babel/plugin-transform-typescript" "^7.12.1"
+
+"@babel/runtime-corejs3@^7.10.2":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz#403139af262b9a6e8f9ba04a6fdcebf8de692bf1"
+  integrity sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==
+  dependencies:
+    core-js-pure "^3.16.0"
+    regenerator-runtime "^0.13.4"
+
+"@babel/runtime@7.12.1":
+  version "7.12.1"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740"
+  integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==
+  dependencies:
+    regenerator-runtime "^0.13.4"
+
+"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a"
+  integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==
+  dependencies:
+    regenerator-runtime "^0.13.4"
+
+"@babel/template@^7.10.4", "@babel/template@^7.15.4", "@babel/template@^7.3.3":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194"
+  integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==
+  dependencies:
+    "@babel/code-frame" "^7.14.5"
+    "@babel/parser" "^7.15.4"
+    "@babel/types" "^7.15.4"
+
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.15.4", "@babel/traverse@^7.7.0":
+  version "7.15.4"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d"
+  integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==
+  dependencies:
+    "@babel/code-frame" "^7.14.5"
+    "@babel/generator" "^7.15.4"
+    "@babel/helper-function-name" "^7.15.4"
+    "@babel/helper-hoist-variables" "^7.15.4"
+    "@babel/helper-split-export-declaration" "^7.15.4"
+    "@babel/parser" "^7.15.4"
+    "@babel/types" "^7.15.4"
+    debug "^4.1.0"
+    globals "^11.1.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.6", "@babel/types@^7.14.9", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
+  version "7.15.6"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f"
+  integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.14.9"
+    to-fast-properties "^2.0.0"
+
+"@bcoe/v8-coverage@^0.2.3":
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
+  integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+
+"@cnakazawa/watch@^1.0.3":
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
+  integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==
+  dependencies:
+    exec-sh "^0.3.2"
+    minimist "^1.2.0"
+
+"@csstools/convert-colors@^1.4.0":
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
+  integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
+
+"@csstools/normalize.css@^10.1.0":
+  version "10.1.0"
+  resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18"
+  integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==
+
+"@eslint/eslintrc@^0.4.3":
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c"
+  integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==
+  dependencies:
+    ajv "^6.12.4"
+    debug "^4.1.1"
+    espree "^7.3.0"
+    globals "^13.9.0"
+    ignore "^4.0.6"
+    import-fresh "^3.2.1"
+    js-yaml "^3.13.1"
+    minimatch "^3.0.4"
+    strip-json-comments "^3.1.1"
+
+"@gar/promisify@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210"
+  integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==
+
+"@hapi/address@2.x.x":
+  version "2.1.4"
+  resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
+  integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==
+
+"@hapi/bourne@1.x.x":
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a"
+  integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==
+
+"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0":
+  version "8.5.1"
+  resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06"
+  integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==
+
+"@hapi/joi@^15.1.0":
+  version "15.1.1"
+  resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7"
+  integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==
+  dependencies:
+    "@hapi/address" "2.x.x"
+    "@hapi/bourne" "1.x.x"
+    "@hapi/hoek" "8.x.x"
+    "@hapi/topo" "3.x.x"
+
+"@hapi/topo@3.x.x":
+  version "3.1.6"
+  resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29"
+  integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==
+  dependencies:
+    "@hapi/hoek" "^8.3.0"
+
+"@humanwhocodes/config-array@^0.5.0":
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
+  integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==
+  dependencies:
+    "@humanwhocodes/object-schema" "^1.2.0"
+    debug "^4.1.1"
+    minimatch "^3.0.4"
+
+"@humanwhocodes/object-schema@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf"
+  integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==
+
+"@istanbuljs/load-nyc-config@^1.0.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
+  integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+  dependencies:
+    camelcase "^5.3.1"
+    find-up "^4.1.0"
+    get-package-type "^0.1.0"
+    js-yaml "^3.13.1"
+    resolve-from "^5.0.0"
+
+"@istanbuljs/schema@^0.1.2":
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
+  integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+
+"@jest/console@^26.6.2":
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2"
+  integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==
+  dependencies:
+    "@jest/types" "^26.6.2"
+    "@types/node" "*"
+    chalk "^4.0.0"
+    jest-message-util "^26.6.2"
+    jest-util "^26.6.2"
+    slash "^3.0.0"
+
+"@jest/core@^26.6.0", "@jest/core@^26.6.3":
+  version "26.6.3"
+  resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad"
+  integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==
+  dependencies:
+    "@jest/console" "^26.6.2"
+    "@jest/reporters" "^26.6.2"
+    "@jest/test-result" "^26.6.2"
+    "@jest/transform" "^26.6.2"
+    "@jest/types" "^26.6.2"
+    "@types/node" "*"
+    ansi-escapes "^4.2.1"
+    chalk "^4.0.0"
+    exit "^0.1.2"
+    graceful-fs "^4.2.4"
+    jest-changed-files "^26.6.2"
+    jest-config "^26.6.3"
+    jest-haste-map "^26.6.2"
+    jest-message-util "^26.6.2"
+    jest-regex-util "^26.0.0"
+    jest-resolve "^26.6.2"
+    jest-resolve-dependencies "^26.6.3"
+    jest-runner "^26.6.3"
+    jest-runtime "^26.6.3"
+    jest-snapshot "^26.6.2"
+    jest-util "^26.6.2"
+    jest-validate "^26.6.2"
+    jest-watcher "^26.6.2"
+    micromatch "^4.0.2"
+    p-each-series "^2.1.0"
+    rimraf "^3.0.0"
+    slash "^3.0.0"
+    strip-ansi "^6.0.0"
+
+"@jest/environment@^26.6.0", "@jest/environment@^26.6.2":
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c"
+  integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==
+  dependencies:
+    "@jest/fake-timers" "^26.6.2"
+    "@jest/types" "^26.6.2"
+    "@types/node" "*"
+    jest-mock "^26.6.2"
+
+"@jest/fake-timers@^26.6.2":
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad"
+  integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==
+  dependencies:
+    "@jest/types" "^26.6.2"
+    "@sinonjs/fake-timers" "^6.0.1"
+    "@types/node" "*"
+    jest-message-util "^26.6.2"
+    jest-mock "^26.6.2"
+    jest-util "^26.6.2"
+
+"@jest/globals@^26.6.2":
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a"
+  integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==
+  dependencies:
+    "@jest/environment" "^26.6.2"
+    "@jest/types" "^26.6.2"
+    expect "^26.6.2"
+
+"@jest/reporters@^26.6.2":
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6"
+  integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==
+  dependencies:
+    "@bcoe/v8-coverage" "^0.2.3"
+    "@jest/console" "^26.6.2"
+    "@jest/test-result" "^26.6.2"
+    "@jest/transform" "^26.6.2"
+    "@jest/types" "^26.6.2"
+    chalk "^4.0.0"
+    collect-v8-coverage "^1.0.0"
+    exit "^0.1.2"
+    glob "^7.1.2"
+    graceful-fs "^4.2.4"
+    istanbul-lib-coverage "^3.0.0"
+    istanbul-lib-instrument "^4.0.3"
+    istanbul-lib-report "^3.0.0"
+    istanbul-lib-source-maps "^4.0.0"
+    istanbul-reports "^3.0.2"
+    jest-haste-map "^26.6.2"
+    jest-resolve "^26.6.2"
+    jest-util "^26.6.2"
+    jest-worker "^26.6.2"
+    slash "^3.0.0"
+    source-map "^0.6.0"
+    string-length "^4.0.1"
+    terminal-link "^2.0.0"
+    v8-to-istanbul "^7.0.0"
+  optionalDependencies:
+    node-notifier "^8.0.0"
+
+"@jest/source-map@^26.6.2":
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535"
+  integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==
+  dependencies:
+    callsites "^3.0.0"
+    graceful-fs "^4.2.4"
+    source-map "^0.6.0"
+
+"@jest/test-result@^26.6.0", "@jest/test-result@^26.6.2":
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18"
+  integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==
+  dependencies:
+    "@jest/console" "^26.6.2"
+    "@jest/types" "^26.6.2"
+    "@types/istanbul-lib-coverage" "^2.0.0"
+    collect-v8-coverage "^1.0.0"
+
+"@jest/test-sequencer@^26.6.3":
+  version "26.6.3"
+  resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17"
+  integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==
+  dependencies:
+    "@jest/test-result" "^26.6.2"
+    graceful-fs "^4.2.4"
+    jest-haste-map "^26.6.2"
+    jest-runner "^26.6.3"
+    jest-runtime "^26.6.3"
+
+"@jest/transform@^26.6.2":
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b"
+  integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==
+  dependencies:
+    "@babel/core" "^7.1.0"
+    "@jest/types" "^26.6.2"
+    babel-plugin-istanbul "^6.0.0"
+    chalk "^4.0.0"
+    convert-source-map "^1.4.0"
+    fast-json-stable-stringify "^2.0.0"
+    graceful-fs "^4.2.4"
+    jest-haste-map "^26.6.2"
+    jest-regex-util "^26.0.0"
+    jest-util "^26.6.2"
+    micromatch "^4.0.2"
+    pirates "^4.0.1"
+    slash "^3.0.0"
+    source-map "^0.6.1"
+    write-file-atomic "^3.0.0"
+
+"@jest/types@^26.6.0", "@jest/types@^26.6.2":
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e"
+  integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==
+  dependencies:
+    "@types/istanbul-lib-coverage" "^2.0.0"
+    "@types/istanbul-reports" "^3.0.0"
+    "@types/node" "*"
+    "@types/yargs" "^15.0.0"
+    chalk "^4.0.0"
+
+"@nodelib/fs.scandir@2.1.5":
+  version "2.1.5"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+  integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+  dependencies:
+    "@nodelib/fs.stat" "2.0.5"
+    run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+  integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3":
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+  integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+  dependencies:
+    "@nodelib/fs.scandir" "2.1.5"
+    fastq "^1.6.0"
+
+"@npmcli/fs@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.0.0.tgz#589612cfad3a6ea0feafcb901d29c63fd52db09f"
+  integrity sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==
+  dependencies:
+    "@gar/promisify" "^1.0.1"
+    semver "^7.3.5"
+
+"@npmcli/move-file@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674"
+  integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==
+  dependencies:
+    mkdirp "^1.0.4"
+    rimraf "^3.0.2"
+
+"@patternfly/patternfly@^4.132.2":
+  version "4.135.2"
+  resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-4.135.2.tgz#beaf93c18372d90794e560b72fe2860038fcbb3d"
+  integrity sha512-oxLGfGdQNN5yGzvOSH51XR6AuoLjxajteLIOzXJKllqDSQgVP6nZQRCjjB0sUYuin5cUue7lRLqr7clzYd6Zbw==
+
+"@patternfly/react-code-editor@^4.3.42":
+  version "4.3.61"
+  resolved "https://registry.yarnpkg.com/@patternfly/react-code-editor/-/react-code-editor-4.3.61.tgz#77d76ae0e0704ba878ed75028a4420876818562d"
+  integrity sha512-eLv1Yfq6WVd8INkF4Z8XXCnlVJTFcphFYujvY93CPBUOGT2V8vCG6uplpZ9/LErIgk76zMBtGMK3PUFZJj0QTw==
+  dependencies:
+    "@patternfly/react-core" "^4.157.3"
+    "@patternfly/react-icons" "^4.11.17"
+    "@patternfly/react-styles" "^4.11.16"
+    react-dropzone "9.0.0"
+    tslib "^2.0.0"
+
+"@patternfly/react-core@^4.147.0", "@patternfly/react-core@^4.157.3":
+  version "4.157.3"
+  resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.157.3.tgz#038c98b21ef4d7459f2120c27be4518afbcf1395"
+  integrity sha512-vP4/lZLTy0U4jmVP7ZO8I7EX1qSyVyFFbay01Pj1pVGHo74gP7yaUFwMvAvURGYmNeWdAhxgIBfYV8VimkSwLg==
+  dependencies:
+    "@patternfly/react-icons" "^4.11.17"
+    "@patternfly/react-styles" "^4.11.16"
+    "@patternfly/react-tokens" "^4.12.18"
+    focus-trap "6.2.2"
+    react-dropzone "9.0.0"
+    tippy.js "5.1.2"
+    tslib "^2.0.0"
+
+"@patternfly/react-icons@^4.11.17":
+  version "4.11.17"
+  resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.11.17.tgz#61f27cb638f7417734dbc2c0e557760df6e28e5f"
+  integrity sha512-T6HriEy2SgVxlQxPL0FTHQqBYdPbaMeEiK4CzIAPQvCuCT3kRUEEGNyG+VVEvc+XU8ndSiTJdOkHaq08onFvsg==
+
+"@patternfly/react-styles@^4.11.16":
+  version "4.11.16"
+  resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.11.16.tgz#55327c57d086aadb9f0f4c0e67ab38856c3ca165"
+  integrity sha512-4ZFynQuJmRF7VbZeQSs44MX6MEvW7l7ZR8lMeChd8mxnQpG8pWtVUbcHdj9FFHPZVa+sPrgrZQl8QmhbqYyOsg==
+
+"@patternfly/react-table@^4.29.37":
+  version "4.30.3"
+  resolved "https://registry.yarnpkg.com/@patternfly/react-table/-/react-table-4.30.3.tgz#17a854d7d994a1ca8ede9f5f16870ee4f86e16b6"
+  integrity sha512-qjaXN3iJQdV6XPfv7TTK/zF6pt8IKreJOJy5k+FfFqYJfO32/04BTS1OnKGU8QM0AKl8bKyzQ6RGoXXxyMZBQQ==
+  dependencies:
+    "@patternfly/react-core" "^4.157.3"
+    "@patternfly/react-icons" "^4.11.17"
+    "@patternfly/react-styles" "^4.11.16"
+    "@patternfly/react-tokens" "^4.12.18"
+    lodash "^4.17.19"
+    tslib "^2.0.0"
+
+"@patternfly/react-tokens@^4.12.18":
+  version "4.12.18"
+  resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.12.18.tgz#e8c75f19ecc33de180cef6cb3e9a6679c5ffeb7c"
+  integrity sha512-3bNUOSOMLmhxPku4fvopxt3StotaHGqHvlIDMxp9pGIgb0o02RyZ8JIioCCO1GkvPPIn6pKs/cGJDlB7zHV48Q==
+
+"@pmmmwh/react-refresh-webpack-plugin@0.4.3":
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz#1eec460596d200c0236bf195b078a5d1df89b766"
+  integrity sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==
+  dependencies:
+    ansi-html "^0.0.7"
+    error-stack-parser "^2.0.6"
+    html-entities "^1.2.1"
+    native-url "^0.2.6"
+    schema-utils "^2.6.5"
+    source-map "^0.7.3"
+
+"@rollup/plugin-node-resolve@^7.1.1":
+  version "7.1.3"
+  resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca"
+  integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==
+  dependencies:
+    "@rollup/pluginutils" "^3.0.8"
+    "@types/resolve" "0.0.8"
+    builtin-modules "^3.1.0"
+    is-module "^1.0.0"
+    resolve "^1.14.2"
+
+"@rollup/plugin-replace@^2.3.1":
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a"
+  integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==
+  dependencies:
+    "@rollup/pluginutils" "^3.1.0"
+    magic-string "^0.25.7"
+
+"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b"
+  integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==
+  dependencies:
+    "@types/estree" "0.0.39"
+    estree-walker "^1.0.1"
+    picomatch "^2.2.2"
+
+"@sinonjs/commons@^1.7.0":
+  version "1.8.3"
+  resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d"
+  integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==
+  dependencies:
+    type-detect "4.0.8"
+
+"@sinonjs/fake-timers@^6.0.1":
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40"
+  integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==
+  dependencies:
+    "@sinonjs/commons" "^1.7.0"
+
+"@surma/rollup-plugin-off-main-thread@^1.1.1":
+  version "1.4.2"
+  resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz#e6786b6af5799f82f7ab3a82e53f6182d2b91a58"
+  integrity sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A==
+  dependencies:
+    ejs "^2.6.1"
+    magic-string "^0.25.0"
+
+"@svgr/babel-plugin-add-jsx-attribute@^5.4.0":
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906"
+  integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==
+
+"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0":
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef"
+  integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==
+
+"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1":
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd"
+  integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==
+
+"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1":
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897"
+  integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==
+
+"@svgr/babel-plugin-svg-dynamic-title@^5.4.0":
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7"
+  integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==
+
+"@svgr/babel-plugin-svg-em-dimensions@^5.4.0":
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0"
+  integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==
+
+"@svgr/babel-plugin-transform-react-native-svg@^5.4.0":
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80"
+  integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==
+
+"@svgr/babel-plugin-transform-svg-component@^5.5.0":
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a"
+  integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==
+
+"@svgr/babel-preset@^5.5.0":
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327"
+  integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==
+  dependencies:
+    "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0"
+    "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0"
+    "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1"
+    "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1"
+    "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0"
+    "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0"
+    "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0"
+    "@svgr/babel-plugin-transform-svg-component" "^5.5.0"
+
+"@svgr/core@^5.5.0":
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579"
+  integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==
+  dependencies:
+    "@svgr/plugin-jsx" "^5.5.0"
+    camelcase "^6.2.0"
+    cosmiconfig "^7.0.0"
+
+"@svgr/hast-util-to-babel-ast@^5.5.0":
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461"
+  integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==
+  dependencies:
+    "@babel/types" "^7.12.6"
+
+"@svgr/plugin-jsx@^5.5.0":
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000"
+  integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==
+  dependencies:
+    "@babel/core" "^7.12.3"
+    "@svgr/babel-preset" "^5.5.0"
+    "@svgr/hast-util-to-babel-ast" "^5.5.0"
+    svg-parser "^2.0.2"
+
+"@svgr/plugin-svgo@^5.5.0":
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246"
+  integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==
+  dependencies:
+    cosmiconfig "^7.0.0"
+    deepmerge "^4.2.2"
+    svgo "^1.2.2"
+
+"@svgr/webpack@5.5.0":
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640"
+  integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==
+  dependencies:
+    "@babel/core" "^7.12.3"
+    "@babel/plugin-transform-react-constant-elements" "^7.12.1"
+    "@babel/preset-env" "^7.12.1"
+    "@babel/preset-react" "^7.12.5"
+    "@svgr/core" "^5.5.0"
+    "@svgr/plugin-jsx" "^5.5.0"
+    "@svgr/plugin-svgo" "^5.5.0"
+    loader-utils "^2.0.0"
+
+"@tootallnate/once@1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
+  integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
+
+"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7":
+  version "7.1.16"
+  resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.16.tgz#bc12c74b7d65e82d29876b5d0baf5c625ac58702"
+  integrity sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==
+  dependencies:
+    "@babel/parser" "^7.1.0"
+    "@babel/types" "^7.0.0"
+    "@types/babel__generator" "*"
+    "@types/babel__template" "*"
+    "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+  version "7.6.3"
+  resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5"
+  integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==
+  dependencies:
+    "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+  version "7.4.1"
+  resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969"
+  integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==
+  dependencies:
+    "@babel/parser" "^7.1.0"
+    "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":
+  version "7.14.2"
+  resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43"
+  integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==
+  dependencies:
+    "@babel/types" "^7.3.0"
+
+"@types/dagre@^0.7.46":
+  version "0.7.46"
+  resolved "https://registry.yarnpkg.com/@types/dagre/-/dagre-0.7.46.tgz#c51ffcc62ca8a9affa07f5e06842acd840d3d442"
+  integrity sha512-ku3y+F8sPqmiB5Ugl22NpukI2dLAViJiWwdtueXLeuF4fxZozl+bytPSFVlLu/gDgaKiwobu3LBXXRWktIMiIA==
+
+"@types/eslint@^7.2.6":
+  version "7.28.0"
+  resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.0.tgz#7e41f2481d301c68e14f483fe10b017753ce8d5a"
+  integrity sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==
+  dependencies:
+    "@types/estree" "*"
+    "@types/json-schema" "*"
+
+"@types/estree@*":
+  version "0.0.50"
+  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83"
+  integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==
+
+"@types/estree@0.0.39":
+  version "0.0.39"
+  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
+  integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
+
+"@types/glob@^7.1.1":
+  version "7.1.4"
+  resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672"
+  integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==
+  dependencies:
+    "@types/minimatch" "*"
+    "@types/node" "*"
+
+"@types/graceful-fs@^4.1.2":
+  version "4.1.5"
+  resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
+  integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==
+  dependencies:
+    "@types/node" "*"
+
+"@types/history@*":
+  version "4.7.9"
+  resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.9.tgz#1cfb6d60ef3822c589f18e70f8b12f9a28ce8724"
+  integrity sha512-MUc6zSmU3tEVnkQ78q0peeEjKWPUADMlC/t++2bI8WnAG2tvYRPIgHG8lWkXwqc8MsUF6Z2MOf+Mh5sazOmhiQ==
+
+"@types/html-minifier-terser@^5.0.0":
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57"
+  integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"
+  integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==
+
+"@types/istanbul-lib-report@*":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
+  integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
+  dependencies:
+    "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^3.0.0":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff"
+  integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==
+  dependencies:
+    "@types/istanbul-lib-report" "*"
+
+"@types/js-yaml@^4.0.2":
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.3.tgz#9f33cd6fbf0d5ec575dc8c8fc69c7fec1b4eb200"
+  integrity sha512-5t9BhoORasuF5uCPr+d5/hdB++zRFUTMIZOzbNkr+jZh3yQht4HYbRDyj9fY8n2TZT30iW9huzav73x4NikqWg==
+
+"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8":
+  version "7.0.9"
+  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
+  integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
+
+"@types/json5@^0.0.29":
+  version "0.0.29"
+  resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
+  integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
+
+"@types/localforage@0.0.34":
+  version "0.0.34"
+  resolved "https://registry.yarnpkg.com/@types/localforage/-/localforage-0.0.34.tgz#5e31c32dd8791ec4b9ff3ef47c9cb55b2d0d9438"
+  integrity sha1-XjHDLdh5HsS5/z70fJy1Wy0NlDg=
+  dependencies:
+    localforage "*"
+
+"@types/minimatch@*":
+  version "3.0.5"
+  resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40"
+  integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==
+
+"@types/node@*":
+  version "16.10.3"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.3.tgz#7a8f2838603ea314d1d22bb3171d899e15c57bd5"
+  integrity sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==
+
+"@types/normalize-package-data@^2.4.0":
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
+  integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
+
+"@types/parse-json@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+  integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
+"@types/prettier@^2.0.0":
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.1.tgz#e1303048d5389563e130f5bdd89d37a99acb75eb"
+  integrity sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==
+
+"@types/prop-types@*":
+  version "15.7.4"
+  resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11"
+  integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==
+
+"@types/q@^1.5.1":
+  version "1.5.5"
+  resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df"
+  integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==
+
+"@types/react-dom@^17.0.9":
+  version "17.0.9"
+  resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.9.tgz#441a981da9d7be117042e1a6fd3dac4b30f55add"
+  integrity sha512-wIvGxLfgpVDSAMH5utdL9Ngm5Owu0VsGmldro3ORLXV8CShrL8awVj06NuEXFQ5xyaYfdca7Sgbk/50Ri1GdPg==
+  dependencies:
+    "@types/react" "*"
+
+"@types/react-router-dom@^5.1.8":
+  version "5.3.1"
+  resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.1.tgz#76700ccce6529413ec723024b71f01fc77a4a980"
+  integrity sha512-UvyRy73318QI83haXlaMwmklHHzV9hjl3u71MmM6wYNu0hOVk9NLTa0vGukf8zXUqnwz4O06ig876YSPpeK28A==
+  dependencies:
+    "@types/history" "*"
+    "@types/react" "*"
+    "@types/react-router" "*"
+
+"@types/react-router@*":
+  version "5.1.17"
+  resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.17.tgz#087091006213b11042f39570e5cd414863693968"
+  integrity sha512-RNSXOyb3VyRs/EOGmjBhhGKTbnN6fHWvy5FNLzWfOWOGjgVUKqJZXfpKzLmgoU8h6Hj8mpALj/mbXQASOb92wQ==
+  dependencies:
+    "@types/history" "*"
+    "@types/react" "*"
+
+"@types/react@*", "@types/react@^17.0.19":
+  version "17.0.27"
+  resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.27.tgz#6498ed9b3ad117e818deb5525fa1946c09f2e0e6"
+  integrity sha512-zgiJwtsggVGtr53MndV7jfiUESTqrbxOcBvwfe6KS/9bzaVPCTDieTWnFNecVNx6EAaapg5xsLLWFfHHR437AA==
+  dependencies:
+    "@types/prop-types" "*"
+    "@types/scheduler" "*"
+    csstype "^3.0.2"
+
+"@types/resolve@0.0.8":
+  version "0.0.8"
+  resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194"
+  integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==
+  dependencies:
+    "@types/node" "*"
+
+"@types/scheduler@*":
+  version "0.16.2"
+  resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
+  integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
+
+"@types/source-list-map@*":
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9"
+  integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==
+
+"@types/stack-utils@^2.0.0":
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
+  integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
+
+"@types/tapable@^1", "@types/tapable@^1.0.5":
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310"
+  integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==
+
+"@types/uglify-js@*":
+  version "3.13.1"
+  resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea"
+  integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==
+  dependencies:
+    source-map "^0.6.1"
+
+"@types/uuid@^8.3.1":
+  version "8.3.1"
+  resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.1.tgz#1a32969cf8f0364b3d8c8af9cc3555b7805df14f"
+  integrity sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==
+
+"@types/webpack-sources@*":
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz#16d759ba096c289034b26553d2df1bf45248d38b"
+  integrity sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==
+  dependencies:
+    "@types/node" "*"
+    "@types/source-list-map" "*"
+    source-map "^0.7.3"
+
+"@types/webpack@^4.41.8":
+  version "4.41.31"
+  resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.31.tgz#c35f252a3559ddf9c85c0d8b0b42019025e581aa"
+  integrity sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ==
+  dependencies:
+    "@types/node" "*"
+    "@types/tapable" "^1"
+    "@types/uglify-js" "*"
+    "@types/webpack-sources" "*"
+    anymatch "^3.0.0"
+    source-map "^0.6.0"
+
+"@types/yargs-parser@*":
+  version "20.2.1"
+  resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129"
+  integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==
+
+"@types/yargs@^15.0.0":
+  version "15.0.14"
+  resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06"
+  integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==
+  dependencies:
+    "@types/yargs-parser" "*"
+
+"@typescript-eslint/eslint-plugin@^4.5.0":
+  version "4.33.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276"
+  integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==
+  dependencies:
+    "@typescript-eslint/experimental-utils" "4.33.0"
+    "@typescript-eslint/scope-manager" "4.33.0"
+    debug "^4.3.1"
+    functional-red-black-tree "^1.0.1"
+    ignore "^5.1.8"
+    regexpp "^3.1.0"
+    semver "^7.3.5"
+    tsutils "^3.21.0"
+
+"@typescript-eslint/experimental-utils@4.33.0", "@typescript-eslint/experimental-utils@^4.0.1":
+  version "4.33.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd"
+  integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==
+  dependencies:
+    "@types/json-schema" "^7.0.7"
+    "@typescript-eslint/scope-manager" "4.33.0"
+    "@typescript-eslint/types" "4.33.0"
+    "@typescript-eslint/typescript-estree" "4.33.0"
+    eslint-scope "^5.1.1"
+    eslint-utils "^3.0.0"
+
+"@typescript-eslint/experimental-utils@^3.10.1":
+  version "3.10.1"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686"
+  integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==
+  dependencies:
+    "@types/json-schema" "^7.0.3"
+    "@typescript-eslint/types" "3.10.1"
+    "@typescript-eslint/typescript-estree" "3.10.1"
+    eslint-scope "^5.0.0"
+    eslint-utils "^2.0.0"
+
+"@typescript-eslint/parser@^4.5.0":
+  version "4.33.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899"
+  integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==
+  dependencies:
+    "@typescript-eslint/scope-manager" "4.33.0"
+    "@typescript-eslint/types" "4.33.0"
+    "@typescript-eslint/typescript-estree" "4.33.0"
+    debug "^4.3.1"
+
+"@typescript-eslint/scope-manager@4.33.0":
+  version "4.33.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3"
+  integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==
+  dependencies:
+    "@typescript-eslint/types" "4.33.0"
+    "@typescript-eslint/visitor-keys" "4.33.0"
+
+"@typescript-eslint/types@3.10.1":
+  version "3.10.1"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727"
+  integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==
+
+"@typescript-eslint/types@4.33.0":
+  version "4.33.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72"
+  integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==
+
+"@typescript-eslint/typescript-estree@3.10.1":
+  version "3.10.1"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853"
+  integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==
+  dependencies:
+    "@typescript-eslint/types" "3.10.1"
+    "@typescript-eslint/visitor-keys" "3.10.1"
+    debug "^4.1.1"
+    glob "^7.1.6"
+    is-glob "^4.0.1"
+    lodash "^4.17.15"
+    semver "^7.3.2"
+    tsutils "^3.17.1"
+
+"@typescript-eslint/typescript-estree@4.33.0":
+  version "4.33.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609"
+  integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==
+  dependencies:
+    "@typescript-eslint/types" "4.33.0"
+    "@typescript-eslint/visitor-keys" "4.33.0"
+    debug "^4.3.1"
+    globby "^11.0.3"
+    is-glob "^4.0.1"
+    semver "^7.3.5"
+    tsutils "^3.21.0"
+
+"@typescript-eslint/visitor-keys@3.10.1":
+  version "3.10.1"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931"
+  integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==
+  dependencies:
+    eslint-visitor-keys "^1.1.0"
+
+"@typescript-eslint/visitor-keys@4.33.0":
+  version "4.33.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd"
+  integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==
+  dependencies:
+    "@typescript-eslint/types" "4.33.0"
+    eslint-visitor-keys "^2.0.0"
+
+"@webassemblyjs/ast@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
+  integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
+  dependencies:
+    "@webassemblyjs/helper-module-context" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/wast-parser" "1.9.0"
+
+"@webassemblyjs/floating-point-hex-parser@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
+  integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
+
+"@webassemblyjs/helper-api-error@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
+  integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
+
+"@webassemblyjs/helper-buffer@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
+  integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
+
+"@webassemblyjs/helper-code-frame@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27"
+  integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
+  dependencies:
+    "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/helper-fsm@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8"
+  integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
+
+"@webassemblyjs/helper-module-context@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07"
+  integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+
+"@webassemblyjs/helper-wasm-bytecode@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
+  integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
+
+"@webassemblyjs/helper-wasm-section@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346"
+  integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-buffer" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/wasm-gen" "1.9.0"
+
+"@webassemblyjs/ieee754@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"
+  integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
+  dependencies:
+    "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
+  integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
+  dependencies:
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab"
+  integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
+
+"@webassemblyjs/wasm-edit@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf"
+  integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-buffer" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/helper-wasm-section" "1.9.0"
+    "@webassemblyjs/wasm-gen" "1.9.0"
+    "@webassemblyjs/wasm-opt" "1.9.0"
+    "@webassemblyjs/wasm-parser" "1.9.0"
+    "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/wasm-gen@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c"
+  integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/ieee754" "1.9.0"
+    "@webassemblyjs/leb128" "1.9.0"
+    "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wasm-opt@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61"
+  integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-buffer" "1.9.0"
+    "@webassemblyjs/wasm-gen" "1.9.0"
+    "@webassemblyjs/wasm-parser" "1.9.0"
+
+"@webassemblyjs/wasm-parser@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e"
+  integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-api-error" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/ieee754" "1.9.0"
+    "@webassemblyjs/leb128" "1.9.0"
+    "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wast-parser@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914"
+  integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/floating-point-hex-parser" "1.9.0"
+    "@webassemblyjs/helper-api-error" "1.9.0"
+    "@webassemblyjs/helper-code-frame" "1.9.0"
+    "@webassemblyjs/helper-fsm" "1.9.0"
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899"
+  integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/wast-parser" "1.9.0"
+    "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+  integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+  integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+abab@^2.0.3, abab@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
+  integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
+
+accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
+  version "1.3.7"
+  resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+  integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+  dependencies:
+    mime-types "~2.1.24"
+    negotiator "0.6.2"
+
+acorn-globals@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
+  integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
+  dependencies:
+    acorn "^7.1.1"
+    acorn-walk "^7.1.1"
+
+acorn-jsx@^5.3.1:
+  version "5.3.2"
+  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+  integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn-walk@^7.1.1:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
+  integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
+
+acorn@^6.4.1:
+  version "6.4.2"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
+  integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
+
+acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0:
+  version "7.4.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+  integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
+acorn@^8.2.4:
+  version "8.5.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2"
+  integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==
+
+address@1.1.2, address@^1.0.1:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
+  integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==
+
+adjust-sourcemap-loader@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz#5ae12fb5b7b1c585e80bbb5a63ec163a1a45e61e"
+  integrity sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==
+  dependencies:
+    loader-utils "^2.0.0"
+    regex-parser "^2.2.11"
+
+agent-base@6:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+  dependencies:
+    debug "4"
+
+aggregate-error@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+  integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+  dependencies:
+    clean-stack "^2.0.0"
+    indent-string "^4.0.0"
+
+ajv-errors@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+  integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
+  version "3.5.2"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5:
+  version "6.12.6"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
+ajv@^8.0.1:
+  version "8.6.3"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.3.tgz#11a66527761dc3e9a3845ea775d2d3c0414e8764"
+  integrity sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    json-schema-traverse "^1.0.0"
+    require-from-string "^2.0.2"
+    uri-js "^4.2.2"
+
+alphanum-sort@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+  integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
+
+ansi-colors@^3.0.0:
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
+  integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
+
+ansi-colors@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
+  integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
+
+ansi-escapes@^4.2.1, ansi-escapes@^4.3.1:
+  version "4.3.2"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
+  integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+  dependencies:
+    type-fest "^0.21.3"
+
+ansi-html@0.0.7, ansi-html@^0.0.7:
+  version "0.0.7"
+  resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
+  integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4=
+
+ansi-regex@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+  integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-regex@^5.0.0, ansi-regex@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+  dependencies:
+    color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+  dependencies:
+    color-convert "^2.0.1"
+
+anymatch@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+  integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+  dependencies:
+    micromatch "^3.1.4"
+    normalize-path "^2.1.1"
+
+anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
+  integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
+  dependencies:
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
+
+aproba@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+  integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+argparse@^1.0.7:
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+  dependencies:
+    sprintf-js "~1.0.2"
+
+aria-query@^4.2.2:
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b"
+  integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==
+  dependencies:
+    "@babel/runtime" "^7.10.2"
+    "@babel/runtime-corejs3" "^7.10.2"
+
+arity-n@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745"
+  integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U=
+
+arr-diff@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+  integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+  integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-flatten@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+  integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
+
+array-flatten@^2.1.0:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
+  integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
+
+array-includes@^3.1.1, array-includes@^3.1.3:
+  version "3.1.4"
+  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9"
+  integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+    get-intrinsic "^1.1.1"
+    is-string "^1.0.7"
+
+array-union@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+  integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+  dependencies:
+    array-uniq "^1.0.1"
+
+array-union@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+  integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array-uniq@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+  integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+array-unique@^0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+  integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+array.prototype.flat@^1.2.4:
+  version "1.2.5"
+  resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13"
+  integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.0"
+
+array.prototype.flatmap@^1.2.4:
+  version "1.2.5"
+  resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446"
+  integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==
+  dependencies:
+    call-bind "^1.0.0"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.0"
+
+arrify@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
+  integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
+
+asap@~2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+  integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
+
+asn1.js@^5.2.0:
+  version "5.4.1"
+  resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
+  integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
+  dependencies:
+    bn.js "^4.0.0"
+    inherits "^2.0.1"
+    minimalistic-assert "^1.0.0"
+    safer-buffer "^2.1.0"
+
+assert@^1.1.1:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+  integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+  dependencies:
+    object-assign "^4.1.1"
+    util "0.10.3"
+
+assign-symbols@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+  integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+ast-types-flow@^0.0.7:
+  version "0.0.7"
+  resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+  integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
+
+astral-regex@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+  integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+async-each@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+  integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async-limiter@~1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+  integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+async@^2.6.2:
+  version "2.6.3"
+  resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+  integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
+  dependencies:
+    lodash "^4.17.14"
+
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+at-least-node@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+  integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+atob@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+  integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+attr-accept@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-1.1.3.tgz#48230c79f93790ef2775fcec4f0db0f5db41ca52"
+  integrity sha512-iT40nudw8zmCweivz6j58g+RT33I4KbaIvRUhjNmDwO2WmsQUxFEZZYZ5w3vXe5x5MX9D7mfvA/XaLOZYFR9EQ==
+  dependencies:
+    core-js "^2.5.0"
+
+autoprefixer@^9.6.1:
+  version "9.8.8"
+  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a"
+  integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==
+  dependencies:
+    browserslist "^4.12.0"
+    caniuse-lite "^1.0.30001109"
+    normalize-range "^0.1.2"
+    num2fraction "^1.2.2"
+    picocolors "^0.2.1"
+    postcss "^7.0.32"
+    postcss-value-parser "^4.1.0"
+
+axe-core@^4.0.2:
+  version "4.3.3"
+  resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.3.tgz#b55cd8e8ddf659fe89b064680e1c6a4dceab0325"
+  integrity sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA==
+
+axios@^0.21.1:
+  version "0.21.4"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575"
+  integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==
+  dependencies:
+    follow-redirects "^1.14.0"
+
+axobject-query@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
+  integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==
+
+babel-eslint@^10.1.0:
+  version "10.1.0"
+  resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
+  integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    "@babel/parser" "^7.7.0"
+    "@babel/traverse" "^7.7.0"
+    "@babel/types" "^7.7.0"
+    eslint-visitor-keys "^1.0.0"
+    resolve "^1.12.0"
+
+babel-extract-comments@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21"
+  integrity sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==
+  dependencies:
+    babylon "^6.18.0"
+
+babel-jest@^26.6.0, babel-jest@^26.6.3:
+  version "26.6.3"
+  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056"
+  integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==
+  dependencies:
+    "@jest/transform" "^26.6.2"
+    "@jest/types" "^26.6.2"
+    "@types/babel__core" "^7.1.7"
+    babel-plugin-istanbul "^6.0.0"
+    babel-preset-jest "^26.6.2"
+    chalk "^4.0.0"
+    graceful-fs "^4.2.4"
+    slash "^3.0.0"
+
+babel-loader@8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3"
+  integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==
+  dependencies:
+    find-cache-dir "^2.1.0"
+    loader-utils "^1.4.0"
+    mkdirp "^0.5.3"
+    pify "^4.0.1"
+    schema-utils "^2.6.5"
+
+babel-plugin-dynamic-import-node@^2.3.3:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
+  integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
+  dependencies:
+    object.assign "^4.1.0"
+
+babel-plugin-istanbul@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765"
+  integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@istanbuljs/load-nyc-config" "^1.0.0"
+    "@istanbuljs/schema" "^0.1.2"
+    istanbul-lib-instrument "^4.0.0"
+    test-exclude "^6.0.0"
+
+babel-plugin-jest-hoist@^26.6.2:
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d"
+  integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==
+  dependencies:
+    "@babel/template" "^7.3.3"
+    "@babel/types" "^7.3.3"
+    "@types/babel__core" "^7.0.0"
+    "@types/babel__traverse" "^7.0.6"
+
+babel-plugin-macros@2.8.0:
+  version "2.8.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
+  integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
+  dependencies:
+    "@babel/runtime" "^7.7.2"
+    cosmiconfig "^6.0.0"
+    resolve "^1.12.0"
+
+babel-plugin-named-asset-import@^0.3.7:
+  version "0.3.7"
+  resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz#156cd55d3f1228a5765774340937afc8398067dd"
+  integrity sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw==
+
+babel-plugin-polyfill-corejs2@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327"
+  integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==
+  dependencies:
+    "@babel/compat-data" "^7.13.11"
+    "@babel/helper-define-polyfill-provider" "^0.2.2"
+    semver "^6.1.1"
+
+babel-plugin-polyfill-corejs3@^0.2.5:
+  version "0.2.5"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz#2779846a16a1652244ae268b1e906ada107faf92"
+  integrity sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.2.2"
+    core-js-compat "^3.16.2"
+
+babel-plugin-polyfill-regenerator@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077"
+  integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.2.2"
+
+babel-plugin-syntax-object-rest-spread@^6.8.0:
+  version "6.13.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
+  integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
+
+babel-plugin-transform-object-rest-spread@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
+  integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=
+  dependencies:
+    babel-plugin-syntax-object-rest-spread "^6.8.0"
+    babel-runtime "^6.26.0"
+
+babel-plugin-transform-react-remove-prop-types@0.4.24:
+  version "0.4.24"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a"
+  integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==
+
+babel-preset-current-node-syntax@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
+  integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==
+  dependencies:
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+    "@babel/plugin-syntax-bigint" "^7.8.3"
+    "@babel/plugin-syntax-class-properties" "^7.8.3"
+    "@babel/plugin-syntax-import-meta" "^7.8.3"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+    "@babel/plugin-syntax-numeric-separator" "^7.8.3"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+    "@babel/plugin-syntax-top-level-await" "^7.8.3"
+
+babel-preset-jest@^26.6.2:
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee"
+  integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==
+  dependencies:
+    babel-plugin-jest-hoist "^26.6.2"
+    babel-preset-current-node-syntax "^1.0.0"
+
+babel-preset-react-app@^10.0.0:
+  version "10.0.0"
+  resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.0.tgz#689b60edc705f8a70ce87f47ab0e560a317d7045"
+  integrity sha512-itL2z8v16khpuKutx5IH8UdCdSTuzrOhRFTEdIhveZ2i1iBKDrVE0ATa4sFVy+02GLucZNVBWtoarXBy0Msdpg==
+  dependencies:
+    "@babel/core" "7.12.3"
+    "@babel/plugin-proposal-class-properties" "7.12.1"
+    "@babel/plugin-proposal-decorators" "7.12.1"
+    "@babel/plugin-proposal-nullish-coalescing-operator" "7.12.1"
+    "@babel/plugin-proposal-numeric-separator" "7.12.1"
+    "@babel/plugin-proposal-optional-chaining" "7.12.1"
+    "@babel/plugin-transform-flow-strip-types" "7.12.1"
+    "@babel/plugin-transform-react-display-name" "7.12.1"
+    "@babel/plugin-transform-runtime" "7.12.1"
+    "@babel/preset-env" "7.12.1"
+    "@babel/preset-react" "7.12.1"
+    "@babel/preset-typescript" "7.12.1"
+    "@babel/runtime" "7.12.1"
+    babel-plugin-macros "2.8.0"
+    babel-plugin-transform-react-remove-prop-types "0.4.24"
+
+babel-runtime@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+  integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+  dependencies:
+    core-js "^2.4.0"
+    regenerator-runtime "^0.11.0"
+
+babylon@^6.18.0:
+  version "6.18.0"
+  resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+  integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+base64-js@^1.0.2:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+  integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+base@^0.11.1:
+  version "0.11.2"
+  resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+  integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+  dependencies:
+    cache-base "^1.0.1"
+    class-utils "^0.3.5"
+    component-emitter "^1.2.1"
+    define-property "^1.0.0"
+    isobject "^3.0.1"
+    mixin-deep "^1.2.0"
+    pascalcase "^0.1.1"
+
+batch@0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+  integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
+
+bfj@^7.0.2:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2"
+  integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==
+  dependencies:
+    bluebird "^3.5.5"
+    check-types "^11.1.1"
+    hoopy "^0.1.4"
+    tryer "^1.0.1"
+
+big.js@^5.2.2:
+  version "5.2.2"
+  resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+  integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^1.0.0:
+  version "1.13.1"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+  integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+binary-extensions@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+bindings@^1.5.0:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+  integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+  dependencies:
+    file-uri-to-path "1.0.0"
+
+bluebird@^3.5.5:
+  version "3.7.2"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+  integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
+  version "4.12.0"
+  resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
+  integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
+
+bn.js@^5.0.0, bn.js@^5.1.1:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
+  integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
+
+body-parser@1.19.0:
+  version "1.19.0"
+  resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
+  integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
+  dependencies:
+    bytes "3.1.0"
+    content-type "~1.0.4"
+    debug "2.6.9"
+    depd "~1.1.2"
+    http-errors "1.7.2"
+    iconv-lite "0.4.24"
+    on-finished "~2.3.0"
+    qs "6.7.0"
+    raw-body "2.4.0"
+    type-is "~1.6.17"
+
+bonjour@^3.5.0:
+  version "3.5.0"
+  resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
+  integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU=
+  dependencies:
+    array-flatten "^2.1.0"
+    deep-equal "^1.0.1"
+    dns-equal "^1.0.0"
+    dns-txt "^2.0.2"
+    multicast-dns "^6.0.1"
+    multicast-dns-service-types "^1.1.0"
+
+boolbase@^1.0.0, boolbase@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+braces@^2.3.1, braces@^2.3.2:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+  integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+  dependencies:
+    arr-flatten "^1.1.0"
+    array-unique "^0.3.2"
+    extend-shallow "^2.0.1"
+    fill-range "^4.0.0"
+    isobject "^3.0.1"
+    repeat-element "^1.1.2"
+    snapdragon "^0.8.1"
+    snapdragon-node "^2.0.1"
+    split-string "^3.0.2"
+    to-regex "^3.0.1"
+
+braces@^3.0.1, braces@~3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+  dependencies:
+    fill-range "^7.0.1"
+
+brorand@^1.0.1, brorand@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+  integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browser-process-hrtime@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
+  integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+  integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+  dependencies:
+    buffer-xor "^1.0.3"
+    cipher-base "^1.0.0"
+    create-hash "^1.1.0"
+    evp_bytestokey "^1.0.3"
+    inherits "^2.0.1"
+    safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+  integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+  dependencies:
+    browserify-aes "^1.0.4"
+    browserify-des "^1.0.0"
+    evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+  integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+  dependencies:
+    cipher-base "^1.0.1"
+    des.js "^1.0.0"
+    inherits "^2.0.1"
+    safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"
+  integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==
+  dependencies:
+    bn.js "^5.0.0"
+    randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3"
+  integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==
+  dependencies:
+    bn.js "^5.1.1"
+    browserify-rsa "^4.0.1"
+    create-hash "^1.2.0"
+    create-hmac "^1.1.7"
+    elliptic "^6.5.3"
+    inherits "^2.0.4"
+    parse-asn1 "^5.1.5"
+    readable-stream "^3.6.0"
+    safe-buffer "^5.2.0"
+
+browserify-zlib@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+  integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+  dependencies:
+    pako "~1.0.5"
+
+browserslist@4.14.2:
+  version "4.14.2"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce"
+  integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==
+  dependencies:
+    caniuse-lite "^1.0.30001125"
+    electron-to-chromium "^1.3.564"
+    escalade "^3.0.2"
+    node-releases "^1.1.61"
+
+browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.17.3, browserslist@^4.6.2, browserslist@^4.6.4:
+  version "4.17.3"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.3.tgz#2844cd6eebe14d12384b0122d217550160d2d624"
+  integrity sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ==
+  dependencies:
+    caniuse-lite "^1.0.30001264"
+    electron-to-chromium "^1.3.857"
+    escalade "^3.1.1"
+    node-releases "^1.1.77"
+    picocolors "^0.2.1"
+
+bser@2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+  integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+  dependencies:
+    node-int64 "^0.4.0"
+
+buffer-from@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+buffer-indexof@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
+  integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
+
+buffer-xor@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+  integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+  version "4.9.2"
+  resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
+  integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
+  dependencies:
+    base64-js "^1.0.2"
+    ieee754 "^1.1.4"
+    isarray "^1.0.0"
+
+builtin-modules@^3.1.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887"
+  integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==
+
+builtin-status-codes@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+  integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+bytes@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+  integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
+
+bytes@3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+  integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+
+cacache@^12.0.2:
+  version "12.0.4"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
+  integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
+  dependencies:
+    bluebird "^3.5.5"
+    chownr "^1.1.1"
+    figgy-pudding "^3.5.1"
+    glob "^7.1.4"
+    graceful-fs "^4.1.15"
+    infer-owner "^1.0.3"
+    lru-cache "^5.1.1"
+    mississippi "^3.0.0"
+    mkdirp "^0.5.1"
+    move-concurrently "^1.0.1"
+    promise-inflight "^1.0.1"
+    rimraf "^2.6.3"
+    ssri "^6.0.1"
+    unique-filename "^1.1.1"
+    y18n "^4.0.0"
+
+cacache@^15.0.5:
+  version "15.3.0"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb"
+  integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==
+  dependencies:
+    "@npmcli/fs" "^1.0.0"
+    "@npmcli/move-file" "^1.0.1"
+    chownr "^2.0.0"
+    fs-minipass "^2.0.0"
+    glob "^7.1.4"
+    infer-owner "^1.0.4"
+    lru-cache "^6.0.0"
+    minipass "^3.1.1"
+    minipass-collect "^1.0.2"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.2"
+    mkdirp "^1.0.3"
+    p-map "^4.0.0"
+    promise-inflight "^1.0.1"
+    rimraf "^3.0.2"
+    ssri "^8.0.1"
+    tar "^6.0.2"
+    unique-filename "^1.1.1"
+
+cache-base@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+  integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+  dependencies:
+    collection-visit "^1.0.0"
+    component-emitter "^1.2.1"
+    get-value "^2.0.6"
+    has-value "^1.0.0"
+    isobject "^3.0.1"
+    set-value "^2.0.0"
+    to-object-path "^0.3.0"
+    union-value "^1.0.0"
+    unset-value "^1.0.0"
+
+call-bind@^1.0.0, call-bind@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+  integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+  dependencies:
+    function-bind "^1.1.1"
+    get-intrinsic "^1.0.2"
+
+caller-callsite@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+  integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+  dependencies:
+    callsites "^2.0.0"
+
+caller-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+  integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+  dependencies:
+    caller-callsite "^2.0.0"
+
+callsites@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+  integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+callsites@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camel-case@^4.1.1:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
+  integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
+  dependencies:
+    pascal-case "^3.1.2"
+    tslib "^2.0.3"
+
+camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1:
+  version "5.3.1"
... 8477 lines suppressed ...