UNPKG

@eventcatalog/visualizer

Version:

ReactFlow nodes and visualizer components for EventCatalog Visualizer and Studio

1 lines 130 kB
{"version":3,"sources":["../src/nodes/event/EventNode.tsx","../src/nodes/event/config.ts","../src/nodes/command/CommandNode.tsx","../src/nodes/query/QueryNode.tsx","../src/nodes/service/ServiceNode.tsx","../src/nodes/channel/ChannelNode.tsx","../src/icons/protocols/index.ts","../src/icons/protocols/amqp.svg","../src/icons/protocols/azure-eventgrid.svg","../src/icons/protocols/azure-eventhubs.svg","../src/icons/protocols/azure-servicebus.svg","../src/icons/protocols/eventbridge.svg","../src/icons/protocols/googlepubsub.svg","../src/icons/protocols/grpc.svg","../src/icons/protocols/http.svg","../src/icons/protocols/jms.svg","../src/icons/protocols/kafka.svg","../src/icons/protocols/kinesis.svg","../src/icons/protocols/mercure.svg","../src/icons/protocols/mqtt.svg","../src/icons/protocols/nats.svg","../src/icons/protocols/pulsar.svg","../src/icons/protocols/redis.svg","../src/icons/protocols/sns.svg","../src/icons/protocols/solace.svg","../src/icons/protocols/sqs.svg","../src/icons/protocols/tibo-ftl.svg","../src/icons/protocols/tibo-rv.svg","../src/icons/protocols/ws.svg","../src/icons/protocols/webrtc.svg","../src/icons/protocols/zmq.svg","../src/utils/protocols.tsx","../src/nodes/note/NoteNode.tsx","../src/nodes/data/DataNode.tsx","../src/nodes/data/config.ts","../src/nodes/view/ViewNode.tsx","../src/nodes/actor/ActorNode.tsx","../src/nodes/actor/config.ts","../src/nodes/external-system/ExternalSystem.tsx","../src/nodes/external-system/config.ts","../src/index.ts"],"sourcesContent":["import { Zap } from 'lucide-react';\nimport { Node } from '@xyflow/react';\nimport { Message, EventCatalogResource } from '../../types';\n\nfunction classNames(...classes: any) {\n return classes.filter(Boolean).join(' ');\n}\n\ntype MessageNodeData = EventCatalogResource & {\n message: Message;\n};\n\nexport type EventNode = Node<MessageNodeData, 'event'>;\n\nexport default function Event(props: EventNode) {\n\n const {\n version,\n owners = [],\n producers = [],\n consumers = [],\n name,\n summary\n } = props?.data?.message;\n\n const mode = props?.data?.mode || 'simple';\n\n const nodeLabel = 'Event';\n\n return (\n <div className={classNames(\n \"w-full rounded-md border flex justify-start bg-white text-black\",\n props?.selected ? \"border-orange-600 ring-2 ring-orange-500 shadow-lg\" : \"border-orange-400\"\n )}>\n <div\n className={`bg-gradient-to-b from-orange-500 to-orange-700 relative flex items-center w-5 justify-center rounded-l-sm text-orange-100 border-r-[1px] border-orange-500`}\n >\n <Zap className=\"w-4 h-4 opacity-90 text-white absolute top-1\" />\n {mode === 'full' && (\n <span\n className={\"w-1/2 text-center absolute bottom-1 text-[8px] text-white font-bold uppercase tracking-[3px]\"}\n style={{ transform: 'rotate(-90deg)' }}\n >\n {nodeLabel}\n </span>\n )}\n </div>\n <div className=\"p-1 min-w-60 max-w-[min-content]\">\n <div className={classNames(mode === 'full' ? `border-b border-gray-200` : '')}>\n <span className=\"text-xs font-bold block pt-0.5 pb-0.5\">{name}</span>\n <div className=\"flex justify-between\">\n <span className=\"text-[10px] font-light block pt-0.5 pb-0.5\">v{version}</span>\n {mode === 'simple' && (\n <span className=\"text-[10px] text-gray-500 font-light block pt-0.5 pb-0.5\">{nodeLabel}</span>\n )}\n </div>\n </div>\n {mode === 'full' && (\n <div className=\"divide-y divide-gray-200\">\n <div className=\"leading-3 py-1\">\n <span className=\"text-[8px] font-light\">{summary}</span>\n </div>\n\n <div className=\"grid grid-cols-2 gap-x-4 py-1\">\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Producers: {producers.length}\n </span>\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Consumers: {consumers.length}\n </span>\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Owners: {owners.length}\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}","import { Connection, MarkerType } from \"@xyflow/react\";\nimport { Zap } from \"lucide-react\";\nimport { NodeConfiguration } from '../../types';\n\nexport default {\n type: 'event',\n icon: Zap,\n color: 'orange',\n targetCanConnectTo: ['service', 'channel'],\n sourceCanConnectTo: ['service', 'channel'],\n validateConnection: (connection: Connection) => {\n return connection.source !== connection.target;\n },\n getEdgeOptions: (connection: Connection) => {\n if (connection.source === 'event' && connection.target === 'service') {\n return {\n label: 'Publishes',\n markerEnd: { type: MarkerType.ArrowClosed, color: '#000000' },\n };\n }\n return {\n label: 'Subscribes',\n markerEnd: { type: MarkerType.ArrowClosed, color: '#000000' },\n };\n },\n defaultData: {\n name: 'New Event',\n version: '0.0.1',\n summary: 'New event. Click edit to change the details.',\n mode: 'full',\n },\n editor: {\n title: 'Event',\n subtitle: 'Edit the details of the event',\n schema: {\n type: 'object',\n required: ['name', 'version'],\n properties: {\n name: {\n type: 'string',\n title: 'Name',\n default: 'Random value',\n description: 'The name of the event'\n },\n version: {\n type: 'string',\n title: 'Version',\n default: '1.0.0',\n description: 'The version number (e.g., 1.0.0)',\n pattern: '^\\\\d+\\\\.\\\\d+\\\\.\\\\d+(?:-[\\\\w.-]+)?(?:\\\\+[\\\\w.-]+)?$'\n },\n summary: {\n type: 'string',\n title: 'Summary',\n default: '',\n description: 'A brief summary of the event'\n }\n },\n }\n },\n} as NodeConfiguration;","import { MessageSquare } from 'lucide-react';\nimport { Node } from '@xyflow/react';\nimport { Message, EventCatalogResource } from '../../types';\n\nfunction classNames(...classes: any) {\n return classes.filter(Boolean).join(' ');\n}\n\ntype CommandNodeData = EventCatalogResource & {\n message: Message;\n};\n\nexport type CommandNode = Node<CommandNodeData, 'command'>;\n\nexport default function Command(props: CommandNode) {\n const {\n version,\n owners = [],\n producers = [],\n consumers = [],\n name,\n summary\n } = props.data.message;\n\n const mode = props.data.mode || 'simple';\n\n const nodeLabel = 'Command';\n\n return (\n <div className={classNames(\n \"w-full rounded-md border flex justify-start bg-white text-black\",\n props.selected ? \"border-blue-600 ring-2 ring-blue-500 shadow-lg\" : \"border-blue-400\"\n )}>\n <div\n className={`bg-gradient-to-b from-blue-500 to-blue-700 relative flex items-center w-5 justify-center rounded-l-sm text-blue-100 border-r-[1px] border-blue-500`}\n >\n <MessageSquare className=\"w-4 h-4 opacity-90 text-white absolute top-1\" />\n {mode === 'full' && (\n <span\n className={\"w-1/2 text-center absolute bottom-1 text-[8px] text-white font-bold uppercase tracking-[3px]\"}\n style={{ transform: 'rotate(-90deg)' }}\n >\n {nodeLabel}\n </span>\n )}\n </div>\n <div className=\"p-1 min-w-60 max-w-[min-content]\">\n <div className={classNames(mode === 'full' ? `border-b border-gray-200` : '')}>\n <span className=\"text-xs font-bold block pt-0.5 pb-0.5\">{name}</span>\n <div className=\"flex justify-between\">\n <span className=\"text-[10px] font-light block pt-0.5 pb-0.5\">v{version}</span>\n {mode === 'simple' && (\n <span className=\"text-[10px] text-gray-500 font-light block pt-0.5 pb-0.5\">{nodeLabel}</span>\n )}\n </div>\n </div>\n {mode === 'full' && (\n <div className=\"divide-y divide-gray-200\">\n <div className=\"leading-3 py-1\">\n <span className=\"text-[8px] font-light\">{summary}</span>\n </div>\n\n <div className=\"grid grid-cols-2 gap-x-4 py-1\">\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Producers: {producers.length}\n </span>\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Consumers: {consumers.length}\n </span>\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Owners: {owners.length}\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}","import { Search } from 'lucide-react';\nimport { Node } from '@xyflow/react';\nimport { Message, EventCatalogResource } from '../../types';\n\nfunction classNames(...classes: any) {\n return classes.filter(Boolean).join(' ');\n}\n\ntype QueryNodeData = EventCatalogResource & {\n message: Message;\n};\n\nexport type QueryNode = Node<QueryNodeData, 'query'>;\n\nexport default function Query(props: QueryNode) {\n const { \n version, \n owners = [], \n producers = [], \n consumers = [], \n name, \n summary \n } = props.data.message;\n\n const mode = props.data.mode || 'simple';\n\n const nodeLabel = 'Query';\n\n return (\n <div className={classNames(\n \"w-full rounded-md border flex justify-start bg-white text-black\",\n props.selected ? \"border-green-600 ring-2 ring-green-500 shadow-lg\" : \"border-green-400\"\n )}>\n <div\n className={`bg-gradient-to-b from-green-500 to-green-700 relative flex items-center w-5 justify-center rounded-l-sm text-green-100 border-r-[1px] border-green-500`}\n >\n <Search className=\"w-4 h-4 opacity-90 text-white absolute top-1\" />\n {mode === 'full' && (\n <span\n className={\"w-1/2 text-center absolute bottom-1 text-[8px] text-white font-bold uppercase tracking-[3px]\"}\n style={{ transform: 'rotate(-90deg)' }}\n >\n {nodeLabel}\n </span>\n )}\n </div>\n <div className=\"p-1 min-w-60 max-w-[min-content]\">\n <div className={classNames(mode === 'full' ? `border-b border-gray-200` : '')}>\n <span className=\"text-xs font-bold block pt-0.5 pb-0.5\">{name}</span>\n <div className=\"flex justify-between\">\n <span className=\"text-[10px] font-light block pt-0.5 pb-0.5\">v{version}</span>\n {mode === 'simple' && (\n <span className=\"text-[10px] text-gray-500 font-light block pt-0.5 pb-0.5\">{nodeLabel}</span>\n )}\n </div>\n </div>\n {mode === 'full' && (\n <div className=\"divide-y divide-gray-200\">\n <div className=\"leading-3 py-1\">\n <span className=\"text-[8px] font-light\">{summary}</span>\n </div>\n\n <div className=\"grid grid-cols-2 gap-x-4 py-1\">\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Producers: {producers.length}\n </span>\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Consumers: {consumers.length}\n </span>\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Owners: {owners.length}\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}","import { ServerIcon } from 'lucide-react';\nimport { Node } from '@xyflow/react';\nimport { EventCatalogResource, Service as ServiceType } from '../../types';\n\nfunction classNames(...classes: any) {\n return classes.filter(Boolean).join(' ');\n}\n\ntype ServiceNodeData = EventCatalogResource & {\n service: ServiceType;\n};\n\nexport type ServiceNode = Node<ServiceNodeData, 'service'>;\n\nexport default function Service(props: ServiceNode) {\n const { data, selected } = props;\n const { \n version, \n owners = [], \n sends = [], \n receives = [], \n name, \n summary \n } = props.data.service;\n\n const mode = props.data.mode || 'simple';\n\n const nodeLabel = 'Service';\n\n return (\n <div className={classNames(\n \"w-full rounded-md border flex justify-start bg-white text-black\",\n selected ? \"border-pink-600 ring-2 ring-pink-500 shadow-lg\" : \"border-pink-400\"\n )}>\n <div\n className={`bg-gradient-to-b from-pink-500 to-pink-700 relative flex items-center w-5 justify-center rounded-l-sm text-pink-100 border-r-[1px] border-pink-500`}\n >\n <ServerIcon className=\"w-4 h-4 opacity-90 text-white absolute top-1\" />\n {mode === 'full' && (\n <span\n className={\"w-1/2 text-center absolute bottom-1 text-[8px] text-white font-bold uppercase tracking-[3px]\"}\n style={{ transform: 'rotate(-90deg)' }}\n >\n {nodeLabel}\n </span>\n )}\n </div>\n <div className=\"p-1 min-w-60 max-w-[min-content]\">\n <div className={classNames(mode === 'full' ? `border-b border-gray-200` : '')}>\n <span className=\"text-xs font-bold block pt-0.5 pb-0.5\">{name}</span>\n <div className=\"flex justify-between\">\n <span className=\"text-[10px] font-light block pt-0.5 pb-0.5\">v{version}</span>\n {mode === 'simple' && (\n <span className=\"text-[10px] text-gray-500 font-light block pt-0.5 pb-0.5\">{nodeLabel}</span>\n )}\n </div>\n </div>\n {mode === 'full' && (\n <div className=\"divide-y divide-gray-200\">\n <div className=\"leading-3 py-1\">\n <span className=\"text-[8px] font-light\">{summary}</span>\n </div>\n\n <div className=\"grid grid-cols-2 gap-x-4 py-1\">\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Receives messages: {receives.length}\n </span>\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Publishes messages: {sends.length}\n </span>\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Owners: {owners.length}\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}","import { ArrowRightLeft, Link } from 'lucide-react';\nimport { Node } from '@xyflow/react';\nimport { getIconForProtocol } from '../../utils/protocols';\nimport { EventCatalogResource, Channel as ChannelType } from '../../types';\n\ntype ChannelNodeData = EventCatalogResource & {\n channel: ChannelType;\n};\n\nfunction classNames(...classes: any) {\n return classes.filter(Boolean).join(' ');\n}\n\nexport type ChannelNode = Node<ChannelNodeData, 'channel'>;\n\nexport default function Channel(props: ChannelNode) {\n const { data } = props;\n\n const {\n version,\n name,\n summary,\n protocols = [],\n address\n } = data.channel;\n\n const mode = props.data.mode || 'simple';\n\n const nodeLabel = 'Channel';\n\n const Icon = getIconForProtocol(protocols?.[0]);\n\n return (\n <div className={classNames(\n \"w-full rounded-md border flex justify-start bg-white text-black\",\n props.selected ? \"border-gray-600 ring-2 ring-gray-500 shadow-lg\" : \"border-gray-400\"\n )} style={{ minHeight: '100px' }}>\n <div\n className={`bg-gradient-to-b from-gray-500 to-gray-700 relative flex items-center w-5 justify-center rounded-l-sm text-gray-100 border-r-[1px] border-gray-500`}\n >\n <ArrowRightLeft className=\"w-4 h-4 opacity-90 text-white absolute top-1\" />\n {mode === 'full' && (\n <span\n className={\"w-1/2 text-center absolute bottom-1 text-[8px] text-white font-bold uppercase tracking-[3px]\"}\n style={{ transform: 'rotate(-90deg)' }}\n >\n {nodeLabel}\n </span>\n )}\n </div>\n <div className=\"p-1 min-w-60 max-w-[min-content]\">\n <div className={classNames(mode === 'full' ? `border-b border-gray-200` : '')}>\n <div className=\"flex justify-between items-center\">\n <span className=\"text-xs font-bold block pb-0.5\">{name}</span>\n {Icon && <Icon className=\"w-5 h-5 opacity-60 p-0.5\" />}\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-[10px] font-light block pt-0.5 pb-0.5\">v{version}</span>\n {mode === 'simple' && (\n <span className=\"text-[10px] text-gray-500 font-light block pt-0.5 pb-0.5\">{nodeLabel}</span>\n )}\n </div>\n </div>\n {mode === 'full' && (\n <div className=\"divide-y divide-gray-200\">\n <div className=\"leading-3 py-1\">\n <span className=\"text-[8px] font-light\">{summary}</span>\n </div>\n\n {address && (\n <div className=\"leading-3 py-1 flex flex-col items-start space-y-0.5\" style={{ fontSize: '0.6em' }}>\n <div className=\"flex items-center space-x-0.5\" style={{ fontSize: '0.8em' }}>\n <Link className=\"w-2 h-2 opacity-60\" />\n <span className=\"block font-normal \" style={{ marginLeft: '0.5em' }}>{address}</span>\n </div>\n {protocols && protocols.length > 0 && (\n <div className=\"flex space-x-2 items-center \" style={{ fontSize: '0.8em' }}>\n {[...protocols].map((protocol, index) => {\n const ProtoColIcon = getIconForProtocol(protocol);\n return (\n <span key={index} className=\"font-normal flex items-center -ml-[1px] space-x-0.5\">\n {ProtoColIcon && <ProtoColIcon className=\"w-2 h-2 opacity-60 inline-block\" />}\n <span style={{ marginLeft: '0.5em' }}>{protocol}</span>\n </span>\n );\n })}\n </div>\n )}\n </div>\n )}\n\n </div>\n )}\n </div>\n </div>\n );\n}","export { default as AMQP } from './amqp.svg?raw';\nexport { default as AzureEventGrid } from './azure-eventgrid.svg?raw';\nexport { default as AzureEventHubs } from './azure-eventhubs.svg?raw';\nexport { default as AzureServiceBus } from './azure-servicebus.svg?raw';\nexport { default as EventBridge } from './eventbridge.svg?raw';\nexport { default as GooglePubSub } from './googlepubsub.svg?raw';\nexport { default as GRPC } from './grpc.svg?raw';\nexport { default as Http } from './http.svg?raw';\nexport { default as JMS } from './jms.svg?raw';\nexport { default as Kafka } from './kafka.svg?raw';\nexport { default as Kinesis } from './kinesis.svg?raw';\nexport { default as Mercure } from './mercure.svg?raw';\nexport { default as MQTT } from './mqtt.svg?raw';\nexport { default as Nats } from './nats.svg?raw';\nexport { default as Pulsar } from './pulsar.svg?raw';\nexport { default as Redis } from './redis.svg?raw';\nexport { default as SNS } from './sns.svg?raw';\nexport { default as Solace } from './solace.svg?raw';\nexport { default as SQS } from './sqs.svg?raw';\nexport { default as TibcoFtl } from './tibo-ftl.svg?raw';\nexport { default as TibcoRv } from './tibo-rv.svg?raw';\nexport { default as WebSocket } from './ws.svg?raw';\nexport { default as Webrtc } from './webrtc.svg?raw';\nexport { default as ZMQ } from './zmq.svg?raw';\n","<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg id=\"b\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 72 72\"><g id=\"c\"><circle cx=\"36\" cy=\"36\" r=\"36\" fill=\"#333\" stroke-width=\"0\"/><path d=\"m14.13,14.18h12.24v12.45h-12.24v-12.45Zm0,15.75h15.54v-15.75h12.35v28.2H14.13v-12.45Zm43.74-3.51v31.4H14.24v-12.35h31.29V14.18h12.35v12.24Z\" fill=\"#fff\" stroke-width=\"0\"/></g></svg>","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 18 18\"><defs><linearGradient id=\"a20547e5-d6af-456b-afbc-05d22ff8cb9d\" x1=\"4589.72\" y1=\"-5180.02\" x2=\"4589.72\" y2=\"-5184.21\" gradientTransform=\"matrix(0.5, 0, 0, -0.5, -2275.31, -2589.32)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#c69aeb\" /><stop offset=\"1\" stop-color=\"#6f4bb2\" /></linearGradient><linearGradient id=\"a4745f51-5e75-4126-812d-6bb8a5130e16\" x1=\"4587.99\" y1=\"-5188.47\" x2=\"4587.99\" y2=\"-5192.65\" href=\"#a20547e5-d6af-456b-afbc-05d22ff8cb9d\" /></defs><title>Icon-integration-215</title><g><g id=\"b30b0bd5-e4d2-456b-8d49-c2df20200912\"><path id=\"b51878b5-8d50-4b8b-bc48-74f5f7315a99\" d=\"M12.7,8.15v-.6H8.18L6.06,9.66H4.5L8.12,6h2.47V5.43H7.87L3.65,9.66h-.6v.6H4.86L7,12.37H12.1v-.6H7.22L5.71,10.26H9.38v-.6H6.92l1.5-1.51Z\" fill=\"#32bedd\" /><circle id=\"ad0ed4eb-cd5f-4cc0-bd19-2830d27ec806\" cx=\"9.98\" cy=\"9.96\" r=\"0.87\" fill=\"#fff\" /><circle id=\"a2746b4a-0ae4-4308-876e-5b82657e1872\" cx=\"10.89\" cy=\"5.74\" r=\"0.87\" fill=\"#fff\" /><circle id=\"fc3316e0-7094-4ce0-99ed-43f1e6e4350c\" cx=\"13\" cy=\"7.85\" r=\"0.87\" fill=\"#fff\" /><circle id=\"b5d18443-d50e-4590-8e8f-80b6a7f6d348\" cx=\"12.1\" cy=\"12.07\" r=\"0.87\" fill=\"#fff\" /><circle cx=\"10.86\" cy=\"5.74\" r=\"1.05\" fill=\"#50e6ff\" /><circle cx=\"12.97\" cy=\"7.85\" r=\"1.05\" fill=\"url(#a20547e5-d6af-456b-afbc-05d22ff8cb9d)\" /><circle cx=\"12.1\" cy=\"12.07\" r=\"1.05\" fill=\"url(#a4745f51-5e75-4126-812d-6bb8a5130e16)\" /><circle cx=\"9.98\" cy=\"9.96\" r=\"1.05\" fill=\"#50e6ff\" /><g><path d=\"M1.07,1.43H2.36a0,0,0,0,1,0,0V5a.29.29,0,0,1-.29.29H.79A.29.29,0,0,1,.5,5V2A.57.57,0,0,1,1.07,1.43Z\" fill=\"#999\" /><path d=\"M1.07,1.43H2.36a0,0,0,0,1,0,0V5a.29.29,0,0,1-.29.29H.79A.29.29,0,0,1,.5,5V2A.57.57,0,0,1,1.07,1.43Z\" fill=\"#999\" opacity=\"0.5\" /></g><g><path d=\"M15.64,1.43h1.29A.57.57,0,0,1,17.5,2V5a.29.29,0,0,1-.29.29H15.92A.29.29,0,0,1,15.64,5V1.43A0,0,0,0,1,15.64,1.43Z\" fill=\"#999\" /><path d=\"M15.64,1.43h1.29A.57.57,0,0,1,17.5,2V5a.29.29,0,0,1-.29.29H15.92A.29.29,0,0,1,15.64,5V1.43A0,0,0,0,1,15.64,1.43Z\" fill=\"#999\" opacity=\"0.5\" /></g><path d=\"M8.66-6.16H9.91a0,0,0,0,1,0,0v17a0,0,0,0,1,0,0H8.66a.57.57,0,0,1-.57-.57V-5.6A.57.57,0,0,1,8.66-6.16Z\" transform=\"translate(11.34 -6.66) rotate(90)\" fill=\"#949494\" /><g><path d=\"M.79,12.68H2.08a.29.29,0,0,1,.29.29v3.6a0,0,0,0,1,0,0H1.07A.57.57,0,0,1,.5,16V13A.29.29,0,0,1,.79,12.68Z\" fill=\"#999\" /><path d=\"M.79,12.68H2.08a.29.29,0,0,1,.29.29v3.6a0,0,0,0,1,0,0H1.07A.57.57,0,0,1,.5,16V13A.29.29,0,0,1,.79,12.68Z\" fill=\"#999\" opacity=\"0.5\" /></g><g><path d=\"M15.92,12.68h1.29a.29.29,0,0,1,.29.29v3a.57.57,0,0,1-.57.57H15.64a0,0,0,0,1,0,0V13A.29.29,0,0,1,15.92,12.68Z\" fill=\"#999\" /><path d=\"M15.92,12.68h1.29a.29.29,0,0,1,.29.29v3a.57.57,0,0,1-.57.57H15.64a0,0,0,0,1,0,0V13A.29.29,0,0,1,15.92,12.68Z\" fill=\"#999\" opacity=\"0.5\" /></g><path d=\"M8.66,7.16H9.91a0,0,0,0,1,0,0v17a0,0,0,0,1,0,0H8.66a.57.57,0,0,1-.57-.57V7.73A.57.57,0,0,1,8.66,7.16Z\" transform=\"translate(-6.66 24.66) rotate(-90)\" fill=\"#949494\" /></g></g></svg>","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 18 18\"><title>Icon-analytics-144</title><g><g id=\"a53a4de8-371c-49da-a662-c4631299fc03\"><path d=\"M10.83,8.42a.26.26,0,0,1-.24.27H8.5a.26.26,0,0,1-.27-.24V6.89a.26.26,0,0,1,.24-.27h2.09a.26.26,0,0,1,.27.24V8.42Z\" fill=\"#76bc2d\" /><path d=\"M14.54,10a.26.26,0,0,1-.24.27H12.21a.26.26,0,0,1-.27-.24V8.48a.26.26,0,0,1,.24-.27h2.09a.26.26,0,0,1,.27.24V10Z\" fill=\"#76bc2d\" /><path d=\"M10.83,11.6a.26.26,0,0,1-.24.27H8.5a.26.26,0,0,1-.27-.24V10.07a.26.26,0,0,1,.24-.27h2.09a.26.26,0,0,1,.27.24V11.6Z\" fill=\"#76bc2d\" /><path d=\"M7.12,6.84a.25.25,0,0,1-.23.26H4.74a.26.26,0,0,1-.27-.23V5.25A.26.26,0,0,1,4.71,5H6.8c.22,0,.32.11.32.27Z\" fill=\"#86d633\" /><path d=\"M7.12,10a.25.25,0,0,1-.23.27H4.74A.26.26,0,0,1,4.47,10V8.42a.26.26,0,0,1,.24-.26H6.8c.22,0,.32.11.32.26Z\" fill=\"#76bc2d\" /><path d=\"M7.12,13.19a.25.25,0,0,1-.23.27H4.74a.26.26,0,0,1-.27-.24V11.6a.25.25,0,0,1,.24-.26H6.8c.22,0,.32.1.32.26Z\" fill=\"#76bc2d\" /><g><path d=\"M1.07,1.51H2.36a0,0,0,0,1,0,0v3.6a.29.29,0,0,1-.29.29H.79A.29.29,0,0,1,.5,5.11v-3A.57.57,0,0,1,1.07,1.51Z\" fill=\"#999\" /><path d=\"M1.07,1.51H2.36a0,0,0,0,1,0,0v3.6a.29.29,0,0,1-.29.29H.79A.29.29,0,0,1,.5,5.11v-3A.57.57,0,0,1,1.07,1.51Z\" fill=\"#999\" opacity=\"0.5\" /></g><g><path d=\"M15.64,1.51h1.29a.57.57,0,0,1,.57.57v3a.29.29,0,0,1-.29.29H15.92a.29.29,0,0,1-.29-.29V1.51A0,0,0,0,1,15.64,1.51Z\" fill=\"#999\" /><path d=\"M15.64,1.51h1.29a.57.57,0,0,1,.57.57v3a.29.29,0,0,1-.29.29H15.92a.29.29,0,0,1-.29-.29V1.51A0,0,0,0,1,15.64,1.51Z\" fill=\"#999\" opacity=\"0.5\" /></g><path d=\"M8.66-6.08H9.91a0,0,0,0,1,0,0v17a0,0,0,0,1,0,0H8.66a.57.57,0,0,1-.57-.57V-5.52A.57.57,0,0,1,8.66-6.08Z\" transform=\"translate(11.42 -6.58) rotate(90)\" fill=\"#949494\" /><g><path d=\"M.79,12.76H2.08a.29.29,0,0,1,.29.29v3.6a0,0,0,0,1,0,0H1.07a.57.57,0,0,1-.57-.57V13A.29.29,0,0,1,.79,12.76Z\" fill=\"#999\" /><path d=\"M.79,12.76H2.08a.29.29,0,0,1,.29.29v3.6a0,0,0,0,1,0,0H1.07a.57.57,0,0,1-.57-.57V13A.29.29,0,0,1,.79,12.76Z\" fill=\"#999\" opacity=\"0.5\" /></g><g><path d=\"M15.92,12.76h1.29a.29.29,0,0,1,.29.29v3a.57.57,0,0,1-.57.57H15.64a0,0,0,0,1,0,0V13A.29.29,0,0,1,15.92,12.76Z\" fill=\"#999\" /><path d=\"M15.92,12.76h1.29a.29.29,0,0,1,.29.29v3a.57.57,0,0,1-.57.57H15.64a0,0,0,0,1,0,0V13A.29.29,0,0,1,15.92,12.76Z\" fill=\"#999\" opacity=\"0.5\" /></g><path d=\"M8.66,7.24H9.91a0,0,0,0,1,0,0v17a0,0,0,0,1,0,0H8.66a.57.57,0,0,1-.57-.57V7.81A.57.57,0,0,1,8.66,7.24Z\" transform=\"translate(-6.74 24.74) rotate(-90)\" fill=\"#949494\" /></g></g></svg>","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 18 18\"><defs><linearGradient id=\"bbd02878-309a-4490-8196-946338d0f593\" x1=\"8.995\" y1=\"10.299\" x2=\"8.995\" y2=\"13.199\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#005ba1\" /><stop offset=\"0.258\" stop-color=\"#00589d\" /><stop offset=\"0.525\" stop-color=\"#004f90\" /><stop offset=\"0.796\" stop-color=\"#003f7c\" /><stop offset=\"1\" stop-color=\"#003067\" /></linearGradient></defs><g><g id=\"b532e600-3623-4be6-9fa6-30d05fff56b1\"><polygon points=\"13.387 7.4 13.382 7.396 13.382 7.384 13.363 7.384 8.997 4.405 4.631 7.384 4.612 7.384 4.612 7.396 4.606 7.4 4.612 7.4 4.612 13.201 13.382 13.201 13.382 7.4 13.387 7.4\" fill=\"#50e6ff\" /><path d=\"M4.606,7.4c0-.1.008,5.681.008,5.8L8.995,10.3Z\" fill=\"#32bedd\" /><path d=\"M13.384,7.4,8.995,10.3,13.376,13.2C13.376,13.083,13.384,7.3,13.384,7.4Z\" fill=\"#198ab3\" /><polygon points=\"8.995 10.299 4.614 13.194 4.614 13.199 13.376 13.199 13.376 13.194 8.995 10.299\" fill=\"url(#bbd02878-309a-4490-8196-946338d0f593)\" /><g><path d=\"M1.072,1.43h1.29a0,0,0,0,1,0,0v3.6a.286.286,0,0,1-.286.286H.786A.286.286,0,0,1,.5,5.035V2A.572.572,0,0,1,1.072,1.43Z\" fill=\"#999\" /><path d=\"M1.072,1.43h1.29a0,0,0,0,1,0,0v3.6a.286.286,0,0,1-.286.286H.786A.286.286,0,0,1,.5,5.035V2A.572.572,0,0,1,1.072,1.43Z\" fill=\"#999\" opacity=\"0.5\" /></g><g><path d=\"M15.638,1.43h1.29A.572.572,0,0,1,17.5,2V5.035a.286.286,0,0,1-.286.286h-1.29a.286.286,0,0,1-.286-.286V1.43A0,0,0,0,1,15.638,1.43Z\" fill=\"#999\" /><path d=\"M15.638,1.43h1.29A.572.572,0,0,1,17.5,2V5.035a.286.286,0,0,1-.286.286h-1.29a.286.286,0,0,1-.286-.286V1.43A0,0,0,0,1,15.638,1.43Z\" fill=\"#999\" opacity=\"0.5\" /></g><path d=\"M8.66-6.163H9.907a0,0,0,0,1,0,0v17a0,0,0,0,1,0,0H8.66a.567.567,0,0,1-.567-.567V-5.6A.567.567,0,0,1,8.66-6.163Z\" transform=\"translate(11.337 -6.663) rotate(90)\" fill=\"#949494\" /><g><path d=\"M.786,12.679h1.29a.286.286,0,0,1,.286.286v3.6a0,0,0,0,1,0,0H1.072A.572.572,0,0,1,.5,16V12.965A.286.286,0,0,1,.786,12.679Z\" fill=\"#999\" /><path d=\"M.786,12.679h1.29a.286.286,0,0,1,.286.286v3.6a0,0,0,0,1,0,0H1.072A.572.572,0,0,1,.5,16V12.965A.286.286,0,0,1,.786,12.679Z\" fill=\"#999\" opacity=\"0.5\" /></g><g><path d=\"M15.924,12.679h1.29a.286.286,0,0,1,.286.286V16a.572.572,0,0,1-.572.572h-1.29a0,0,0,0,1,0,0v-3.6A.286.286,0,0,1,15.924,12.679Z\" fill=\"#999\" /><path d=\"M15.924,12.679h1.29a.286.286,0,0,1,.286.286V16a.572.572,0,0,1-.572.572h-1.29a0,0,0,0,1,0,0v-3.6A.286.286,0,0,1,15.924,12.679Z\" fill=\"#999\" opacity=\"0.5\" /></g><path d=\"M8.66,7.163H9.907a0,0,0,0,1,0,0v17a0,0,0,0,1,0,0H8.66a.567.567,0,0,1-.567-.567V7.73A.567.567,0,0,1,8.66,7.163Z\" transform=\"translate(-6.663 24.663) rotate(-90)\" fill=\"#949494\" /></g></g></svg>","<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg viewBox=\"15 7 55 80\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g id=\"Icon-Architecture/64/Arch_Amazon-EventBridge_64\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path d=\"M53.656744,66 C51.5137882,66 49.7695913,64.247 49.7695913,62.091 C49.7695913,59.935 51.5137882,58.182 53.656744,58.182 C55.7996998,58.182 57.5438968,59.935 57.5438968,62.091 C57.5438968,64.247 55.7996998,66 53.656744,66 L53.656744,66 Z M45.1326526,49 L34.7977386,49 L29.6297845,40 L34.7977386,31 L45.1326526,31 L50.2996124,40 L45.1326526,49 Z M27.6210741,21.818 C25.4781184,21.818 23.7339214,20.065 23.7339214,17.909 C23.7339214,15.753 25.4781184,14 27.6210741,14 C29.7650244,14 31.5092213,15.753 31.5092213,17.909 C31.5092213,20.065 29.7650244,21.818 27.6210741,21.818 L27.6210741,21.818 Z M53.656744,56.182 C52.918891,56.182 52.214848,56.325 51.5635088,56.576 L47.3402451,49.41 L47.117497,49.543 L52.3093171,40.5 C52.4863222,40.19 52.4863222,39.81 52.3093171,39.5 L46.5675877,29.5 C46.3895881,29.19 46.0614325,29 45.7064278,29 L35.2581509,29 L35.2989218,28.976 L31.4266852,22.404 C32.691576,21.32 33.4980434,19.708 33.4980434,17.909 C33.4980434,14.651 30.8618597,12 27.6210741,12 C24.381283,12 21.7450993,14.651 21.7450993,17.909 C21.7450993,21.167 24.381283,23.818 27.6210741,23.818 C28.3599216,23.818 29.0639646,23.675 29.7153038,23.424 L33.3299879,29.557 L27.6200797,39.5 C27.4430746,39.81 27.4430746,40.19 27.6200797,40.5 L33.3628035,50.5 C33.5408031,50.81 33.8689587,51 34.2239635,51 L45.7064278,51 C45.7889639,51 45.8695112,50.987 45.9470752,50.968 L49.8521274,57.596 C48.5862421,58.68 47.7807692,60.292 47.7807692,62.091 C47.7807692,65.349 50.4159585,68 53.656744,68 C56.8975296,68 59.5327189,65.349 59.5327189,62.091 C59.5327189,58.833 56.8975296,56.182 53.656744,56.182 L53.656744,56.182 Z M59.5844283,32.104 C57.4414725,32.104 55.6982699,30.351 55.6982699,28.195 C55.6982699,26.039 57.4414725,24.286 59.5844283,24.286 C61.7273841,24.286 63.471581,26.039 63.471581,28.195 C63.471581,30.351 61.7273841,32.104 59.5844283,32.104 L59.5844283,32.104 Z M66.8665003,39.5 L63.091716,32.925 C64.5266511,31.846 65.4604031,30.13 65.4604031,28.195 C65.4604031,24.937 62.8252138,22.286 59.5844283,22.286 C58.7600615,22.286 57.9744768,22.459 57.2614841,22.77 L54.1837819,17.409 C54.0067767,17.1 53.6776267,16.909 53.3226219,16.909 L40.9949082,16.909 L40.9949082,18.909 L52.7488468,18.909 L55.5958456,23.869 C54.4383511,24.949 53.7094478,26.486 53.7094478,28.195 C53.7094478,31.453 56.3446371,34.104 59.5844283,34.104 C60.1880358,34.104 60.771755,34.011 61.3206699,33.84 L64.85779,40 L59.8917013,48.648 L61.6140212,49.648 L66.8665003,40.5 C67.0444999,40.19 67.0444999,39.81 66.8665003,39.5 L66.8665003,39.5 Z M21.229,55.247 C19.0850498,55.247 17.3408528,53.493 17.3408528,51.338 C17.3408528,49.182 19.0850498,47.429 21.229,47.429 C23.3719558,47.429 25.1161527,49.182 25.1161527,51.338 C25.1161527,53.493 23.3719558,55.247 21.229,55.247 L21.229,55.247 Z M24.4767464,56.258 C26.0588544,55.198 27.1049748,53.389 27.1049748,51.338 C27.1049748,48.08 24.4687911,45.429 21.229,45.429 C20.2902759,45.429 19.4062445,45.657 18.618671,46.052 L15.1432044,40 L20.9018387,29.971 L19.1785244,28.971 L13.1334997,39.5 C12.9555001,39.81 12.9555001,40.19 13.1334997,40.5 L17.0047419,47.24 C15.9834817,48.304 15.3520307,49.747 15.3520307,51.338 C15.3520307,54.596 17.9882144,57.247 21.229,57.247 C21.7172558,57.247 22.189601,57.18 22.6440469,57.066 L25.8162181,62.591 C25.9942177,62.9 26.3223733,63.091 26.6773781,63.091 L39.0060862,63.091 L39.0060862,61.091 L27.2511532,61.091 L24.4767464,56.258 Z\" id=\"Amazon-EventBridge_Icon_64_Squid\" fill=\"currentColor\"></path>\n </g>\n</svg>","<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 24 24\"><defs><style>.cls-1{filter:url(#luminosity-noclip);}.cls-2{fill:currentColor;}.cls-3{mask:url(#mask);}.cls-4{fill:currentColor;}.cls-5{fill:currentColor;}</style><filter id=\"luminosity-noclip\" x=\"4.64\" y=\"4.19\" width=\"14.73\" height=\"12.76\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-color=\"#fff\" result=\"bg\"/><feBlend in=\"SourceGraphic\" in2=\"bg\"/></filter><mask id=\"mask\" x=\"4.64\" y=\"4.19\" width=\"14.73\" height=\"12.76\" maskUnits=\"userSpaceOnUse\"><circle class=\"cls-1\" cx=\"12\" cy=\"12.23\" r=\"3.58\"/></mask></defs><title>Icon_24px_Pub-Sub_Color</title><g data-name=\"Product Icons\"><circle class=\"cls-2\" cx=\"18.97\" cy=\"8.21\" r=\"1.72\"/><circle class=\"cls-2\" cx=\"5.03\" cy=\"8.21\" r=\"1.72\"/><circle class=\"cls-2\" cx=\"12\" cy=\"20.28\" r=\"1.72\"/><g class=\"cls-3\"><rect class=\"cls-4\" x=\"14.69\" y=\"10.22\" width=\"1.59\" height=\"8.04\" transform=\"matrix(0.5, -0.87, 0.87, 0.5, -4.59, 20.53)\"/><rect class=\"cls-4\" x=\"4.49\" y=\"13.45\" width=\"8.04\" height=\"1.59\" transform=\"translate(-5.98 6.17) rotate(-30)\"/><rect class=\"cls-4\" x=\"11.2\" y=\"4.19\" width=\"1.59\" height=\"8.04\"/></g><circle class=\"cls-5\" cx=\"12\" cy=\"12.23\" r=\"2.78\"/><circle class=\"cls-5\" cx=\"5.03\" cy=\"16.25\" r=\"2.19\"/><circle class=\"cls-5\" cx=\"18.97\" cy=\"16.25\" r=\"2.19\"/><circle class=\"cls-5\" cx=\"12\" cy=\"4.19\" r=\"2.19\"/></g></svg>","<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 96 96\" id=\"Grpc--Streamline-Svg-Logos\" ><desc>Grpc Streamline Icon: https://streamlinehq.com</desc><path fill=\"#244b5a\" d=\"M11.4052 61.9509c.6979.9285 1.6048 1.6794 2.6473 2.1918 1.1274.5584 2.3714.8408 3.6294.8238 1.0172.0266 2.0297-.1461 2.9805-.5084.7605-.2988 1.4394-.7734 1.9811-1.385.5084-.5959.8795-1.2963 1.0871-2.0515.2264-.8163.3384-1.66.333-2.507v-2.9454h-.0699c-.6593 1.045-1.6103 1.8739-2.7355 2.3844-1.0728.4671-2.2311.7059-3.4012.7013-1.1465.0086-2.2838-.2057-3.3485-.6311-1.0082-.4003-1.9306-.9894-2.7177-1.7358-.781-.7499-1.4014-1.6507-1.8235-2.6478-.44911-1.0526-.67592-2.1866-.6662-3.331-.00969-1.1411.20483-2.2729.63137-3.3313.40313-1.0013.99203-1.9174 1.73553-2.6999.7434-.7761 1.6387-1.3909 2.63-1.806 1.0608-.441 2.2001-.6617 3.3488-.6486.5231.003 1.045.0499 1.5602.14.5666.099 1.1197.2638 1.6481.4911 1.2545.5437 2.3389 1.4161 3.1386 2.525h.0699v-2.7354h2.3146v16.2705c-.0079.956-.1197 1.9083-.3333 2.8402-.2234 1.0076-.6664 1.9534-1.2973 2.7701-.7179.901-1.6366 1.6216-2.6826 2.1043-1.1457.5608-2.6419.8411-4.4886.8411-1.5001.0256-2.9902-.2485-4.383-.8063-1.3326-.5708-2.5279-1.4196-3.50622-2.4894l1.71802-1.8237Zm.4207-11.7116c-.0058.8357.1552 1.6641.4735 2.4368.3035.7415.7435 1.4195 1.2971 1.9986.5504.5741 1.2049 1.0382 1.9287 1.3678.754.3426 1.5738.5162 2.402.5083 1.6401.0059 3.2206-.6149 4.4182-1.7355.5881-.555 1.0488-1.2311 1.3502-1.9816.3247-.825.4741-1.7086.4384-2.5944.0059-.831-.1366-1.6564-.4209-2.4373-.2701-.7422-.6876-1.4221-1.2274-1.9987-.5548-.5845-1.223-1.0498-1.9636-1.3675-.82-.3485-1.7039-.5218-2.5949-.5086-.8282-.0076-1.648.166-2.402.5086-.7236.3299-1.378.7939-1.9287 1.3675-.5535.5794-.9935 1.2573-1.2974 1.9987-.3181.7729-.479 1.6014-.4732 2.4373Zm23.9844 8.4156h-2.5245V33.8282H40.93c2.5247 0 4.5175.5493 5.9786 1.6481 1.4608 1.099 2.1914 2.7588 2.1917 4.9793.0445 1.6118-.5403 3.1776-1.6305 4.3656-1.0872 1.1807-2.6593 1.8645-4.7163 2.0512l7.1534 11.7825h-3.086l-6.8024-11.5367h-4.208l-.0002 11.5367Zm0-13.851h4.4886c.9644.0203 1.9268-.0978 2.8577-.3508.6809-.182 1.3186-.4978 1.8761-.929.4497-.3619.7997-.8326 1.0167-1.3675.2134-.5415.3205-1.119.3157-1.701.0026-.5702-.1046-1.1356-.3157-1.6654-.2196-.5384-.5688-1.0143-1.0167-1.3852-.5521-.4398-1.1917-.7566-1.8761-.9293-.933-.2402-1.8945-.3522-2.8577-.333h-4.4886v8.6612Zm18.4441-10.9757h7.2238c2.5245 0 4.5173.5494 5.9783 1.6483 1.4608 1.0991 2.1914 2.7589 2.1918 4.9794 0 2.2212-.7306 3.8867-2.1918 4.9967-1.461 1.1106-3.4538 1.6658-5.9783 1.6656h-4.6988v11.5367h-2.525V33.8282Zm2.5252 10.9759h4.0677c.9644.0203 1.9268-.0978 2.8577-.3507.6808-.1821 1.3186-.498 1.8761-.9291.4497-.3619.7996-.8326 1.0167-1.3675.2135-.5414.3206-1.1189.3157-1.7009.0027-.5703-.1045-1.1357-.3157-1.6654-.2196-.5385-.5688-1.0143-1.0167-1.3853-.5521-.4396-1.1917-.7565-1.8761-.9293-.933-.2401-1.8945-.3522-2.8577-.3329h-4.0679l.0002 8.6611ZM95 54.7276c-.4443.6582-.9682 1.2589-1.56 1.7884-.6406.5755-1.3539 1.0647-2.1216 1.4549-.8196.4185-1.6842.7421-2.5771.9646-.9579.2378-1.9415.3555-2.9284.3505-1.7604.0165-3.5065-.3172-5.1368-.9816-3.1091-1.2564-5.5719-3.7256-6.8204-6.8379-.6681-1.66-1.0017-3.4357-.9816-5.225-.02-1.7892.3136-3.5649.9816-5.2249 1.2484-3.1122 3.7113-5.5813 6.8204-6.8374 1.6302-.6646 3.3764-.9984 5.1368-.9819 1.5867.0085 3.1574.3178 4.6288.9115 1.5694.628 2.9388 1.6704 3.9622 3.0158l-2.2088 1.6481c-.2968-.442-.6506-.843-1.0523-1.1923-.464-.4109-.976-.764-1.5249-1.0518-.5864-.3089-1.2035-.5557-1.8412-.7364-.6383-.1847-1.2994-.2791-1.9638-.2806-1.4729-.0242-2.9332.2751-4.2779.8766-1.2199.5535-2.3122 1.3533-3.2083 2.3492-.8868.9987-1.5716 2.1599-2.0166 3.4192-.9349 2.6431-.9349 5.5268 0 8.1699.4449 1.2593 1.1297 2.4204 2.0166 3.4189.8958.9962 1.9882 1.7962 3.2083 2.3494 1.3446.602 2.8049.9014 4.2779.8769.6527.0003 1.3041-.0584 1.9462-.1753.6533-.1202 1.2893-.3204 1.8937-.5961.637-.2922 1.2277-.6763 1.7533-1.14.5904-.5274 1.1038-1.1352 1.5251-1.8054L95 54.7276Z\"></path><path fill=\"url(#a)\" d=\"m7.53809 41.9566-6.53851-6.49 6.49007-6.5386 6.53855 6.4901-6.49011 6.5385Z\"></path><path fill=\"url(#b)\" d=\"m25.3301 39.1863-3.8352-3.8067 3.8068-3.8352 3.8351 3.8068-3.8067 3.8351Z\"></path><path fill=\"#244b5a\" d=\"M7.77596 31.5034 3.8457 35.4631l3.95949 3.9303 3.34981-.0125-3.51277-3.4845 17.34547-.0643-1.5202 1.5305 1.6749-.0061 1.9653-1.9799-1.9799-1.965-1.6749.0061 1.5317 1.5195-17.34553.0643 3.48643-3.5105-3.34954.0124Z\"></path><defs><linearGradient id=\"a\" x1=\"-646.313\" x2=\"656.545\" y1=\"-607.051\" y2=\"-611.894\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#72c9c9\"></stop><stop offset=\"1\" stop-color=\"#02b0ad\"></stop></linearGradient><linearGradient id=\"b\" x1=\"-358.188\" x2=\"406.007\" y1=\"-341.49\" y2=\"-344.331\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#03b6b4\"></stop><stop offset=\"1\" stop-color=\"#74cbca\"></stop></linearGradient></defs></svg>","<svg fill=\"currentColor\" version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 560 560\" xml:space=\"preserve\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g> <g> <path d=\"M202.042,199.238c-6.938-2.103-14.268,1.82-16.371,8.759l-55.138,182.045c-2.102,6.938,1.82,14.268,8.759,16.37 c1.27,0.385,2.549,0.568,3.811,0.568c5.633,0,10.841-3.656,12.56-9.326l55.138-182.045 C212.901,208.668,208.981,201.338,202.042,199.238z\"></path> </g> </g> <g> <g> <path d=\"M268.994,199.238c-6.93-2.103-14.268,1.82-16.37,8.759l-55.138,182.045c-2.102,6.938,1.82,14.268,8.759,16.37 c1.269,0.385,2.549,0.568,3.811,0.568c5.633,0,10.841-3.656,12.56-9.326l55.138-182.045 C279.857,208.668,275.935,201.338,268.994,199.238z\"></path> </g> </g> <g> <g> <path d=\"M498.872,0H13.128C5.878,0,0,5.879,0,13.128v485.744C0,506.121,5.878,512,13.128,512h485.744 c7.249,0,13.128-5.879,13.128-13.128V13.128C512,5.879,506.121,0,498.872,0z M105.026,26.256h301.949v52.513H105.026V26.256z M26.256,26.256h52.513v52.513H26.256V26.256z M485.744,485.744H26.256V105.026h459.487V485.744z M485.744,78.769h-52.513V26.256 h52.513V78.769z\"></path> </g> </g> <g> <g> <circle cx=\"93.867\" cy=\"245.064\" r=\"13.128\"></circle> </g> </g> <g> <g> <circle cx=\"93.867\" cy=\"360.592\" r=\"13.128\"></circle> </g> </g> <g> <g> <path d=\"M429.292,380.718H307.2c-7.249,0-13.128,5.879-13.128,13.128c0,7.249,5.879,13.128,13.128,13.128h122.092 c7.249,0,13.128-5.879,13.128-13.128C442.421,386.597,436.542,380.718,429.292,380.718z\"></path> </g> </g> </g></svg>","<svg fill=\"currentColor\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 512 512\" enable-background=\"new 0 0 512 512\" xml:space=\"preserve\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"5151e0c8492e5103c096af88a51e8d81\"> <path display=\"inline\" d=\"M193.918,208.369c-4.729-10.456-6.849-22.652-3.236-33.731c3.612-11.327,11.703-20.413,19.794-28.878 c22.525-22.531,50.285-39.085,72.316-61.986c12.197-12.573,22.278-27.634,25.762-44.937c2.864-12.695,1.496-25.764-1.117-38.337 c11.7,13.319,15.559,32.363,12.197,49.541c-3.608,19.292-14.316,36.344-26.886,51.031c-10.081,11.827-21.659,22.282-33.731,31.993 c-14.065,11.327-27.88,23.524-36.716,39.457c-7.472,12.943-9.215,28.876-4.11,42.942c8.341,24.146,27.756,42.071,38.338,64.848 c-11.703-10.332-23.152-21.036-33.86-32.361C211.471,236.001,200.889,223.307,193.918,208.369z M257.398,189.448 c-2.115,19.792,8.213,38.462,20.539,53.151c5.972,6.596,11.076,14.687,11.323,23.899c0.251,12.318-6.716,23.774-15.684,31.861 c2.119-0.246,3.612-2.115,5.355-3.11c13.443-8.589,26.385-19.418,32.982-34.227c4.357-10.083,3.362-22.034-2.362-31.371 c-6.724-10.953-15.559-20.662-20.786-32.61c-2.867-6.721-3.862-14.562-1.496-21.657c3.114-9.583,9.834-17.426,16.93-24.272 c19.54-18.544,43.189-31.743,65.844-46.179c-28.629,8.214-56.883,19.542-81.03,37.343 C273.702,153.727,259.515,169.658,257.398,189.448z M393.447,283.052c13.568,0.748,26.882,10.704,29.374,24.397 c2.366,11.825-3.358,23.524-10.705,32.485c-12.075,14.438-28.382,24.771-44.807,33.609c-1.622,0.991-2.99,2.237-4.235,3.608 c21.659-5.478,43.314-13.689,60.867-27.756c9.705-8.091,18.294-18.799,20.163-31.619c1.743-11.076-2.86-22.528-11.077-29.871 c-9.96-9.09-24.021-12.448-37.218-10.704c-7.593,0.995-15.931,2.613-21.158,8.961C380.877,284.921,386.971,282.429,393.447,283.052 z M123.22,318.647c16.303,4.357,33.108,5.603,49.787,6.724c14.936,0.995,29.875,1.246,44.937,1.12 c38.833-0.619,77.916-3.236,116.003-11.699c3.608-0.87,7.593-1.493,10.833-3.733c6.347-4.11,13.313-7.347,20.162-10.583 c-30.995,4.979-62.113,9.215-93.478,11.205c-31.74,1.991-63.731,3.236-95.593,1.121c-9.086-0.87-18.423-1.371-26.886-4.858 c-1.994-0.87-4.733-2.609-3.738-5.227c1.869-3.361,5.603-4.977,8.839-6.72c13.694-6.473,28.629-10.081,43.193-14.313 c-25.021-0.376-49.916,5.971-72.814,15.806c-5.105,2.491-10.83,4.481-14.936,8.714c-1.622,1.739-1.622,4.732,0.247,6.222 C113.511,315.787,118.487,317.28,123.22,318.647z M324.864,352.88c-21.784,3.859-43.694,7.472-65.726,8.589 c-24.147,1.618-48.294,0.247-72.191-2.241c-4.604-0.623-9.211-1.368-13.317-3.483c-2.116-1.246-4.231-3.236-4.106-5.854 c0.247-4.106,3.73-6.967,6.222-9.956c-7.715,2.739-15.434,5.599-21.906,10.708c-2.742,2.116-5.478,5.474-4.733,9.208 c1.125,4.356,5.356,6.97,9.09,8.96c9.208,4.733,19.54,6.846,29.625,8.714c25.511,4.11,51.527,4.235,77.167,2.488 c27.141-2.115,54.148-6.594,80.411-14.313C337.932,362.342,330.836,358.479,324.864,352.88z M188.068,395.951 c-6.97,1.99-14.066,4.357-19.79,8.957c-2.868,2.241-5.105,6.104-3.734,9.713c1.743,4.604,6.1,7.347,10.203,9.705 c10.708,5.854,22.78,8.589,34.604,10.708c26.765,4.229,54.27,3.608,80.908-1.12c15.806-2.989,31.615-7.221,46.301-13.815 c-9.584-3.984-18.917-8.467-27.878-13.693c-15.559,2.738-31.246,5.603-47.178,6.598c-21.032,1.618-42.319-0.125-63.355-2.738 c-4.98-1.121-11.202-1.618-14.563-5.976C181.847,400.677,185.828,398.063,188.068,395.951z M358.345,475.982 c17.424-3.604,34.977-7.719,50.908-15.806c4.976-2.867,11.076-5.979,12.698-11.95c0.87-5.725-5.105-8.714-9.337-11.08 c2.613,2.993,4.356,7.347,1.74,10.83c-4.357,5.853-11.821,8.091-18.42,10.332c-20.66,5.85-42.072,8.216-63.355,10.582 c-56.385,5.102-113.146,6.348-169.528,1.618c-18.92-1.994-38.217-4.109-56.264-10.829c-2.86-1.246-7.217-2.492-7.217-6.352 c1.117-3.354,4.357-5.227,7.217-6.845c12.945-6.595,27.384-10.207,41.822-11.077c-4.228-2.491-9.208-2.738-14.062-2.613 c-12.076,0.373-23.9,3.483-35.349,7.347c-9.834,3.604-19.916,7.59-27.76,14.811c-3.111,2.735-5.971,7.962-2.739,11.699 c4.98,5.353,12.699,6.72,19.54,8.338c38.338,6.599,77.171,10.328,116.011,11.699C255.781,488.184,307.684,485.942,358.345,475.982z M409.378,482.706c-23.402,7.468-47.672,11.574-71.822,14.936c-41.696,5.227-83.769,6.845-125.716,5.603 c-25.515-0.995-51.03-2.738-76.176-6.974c5.85,3.984,13.071,5.227,19.794,7.096c28.257,5.976,57.255,7.096,86.01,7.966 c42.19,0.748,84.387-0.87,125.962-7.468c19.669-3.48,39.459-7.715,57.13-16.927c9.215-4.854,18.552-12.326,20.163-23.152 C435.391,473.741,421.951,478.349,409.378,482.706z\"> </path> </g> </g></svg>","<svg viewBox=\"-78.5 0 413 413\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" preserveAspectRatio=\"xMidYMid\" fill=\"currentColor\" stroke=\"currentColor\" stroke-width=\"0.00413\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\" stroke-width=\"5.782000000000001\"></g><g id=\"SVGRepo_iconCarrier\"> <g> <path d=\"M87.9320692,36.714181 C83.382936,32.1427482 77.0364491,29.3196096 69.9808327,29.3196096 C62.9519759,29.3196096 56.6545483,32.1427482 52.1589343,36.714181 L52.0295962,36.714181 C47.4938428,41.2633143 44.6707042,47.614261 44.6707042,54.6431179 C44.6707042,61.6987343 47.4938428,67.9961618 52.0295962,72.5185355 L52.1589343,72.6211139 C56.6545483,77.1702472 62.9519759,79.9666261 69.9808327,79.9666261 C77.0364491,79.9666261 83.382936,77.1702472 87.9320692,72.6211139 L87.9989682,72.5185355 C92.5570213,67.9961618 95.3534002,61.6987343 95.3534002,54.6431179 C95.3534002,47.614261 92.5570213,41.2633143 87.9989682,36.714181 L87.9320692,36.714181 Z M69.9808327,383.353672 C77.0364491,383.353672 83.382936,380.481475 87.9320692,375.985861 L87.9989682,375.852063 C92.5570213,371.365368 95.3534002,365.014422 95.3534002,358.034624 C95.3534002,350.979008 92.5570213,344.654821 87.9989682,340.083388 L87.9320692,340.083388 C83.382936,335.458436 77.0364491,332.662057 69.9808327,332.662057 C62.9519759,332.662057 56.6545483,335.458436 52.1589343,340.083388 L52.0295962,340.083388 C47.4938428,344.654821 44.6707042,350.979008 44.6707042,358.034624 C44.6707042,365.014422 47.4938428,371.365368 52.0295962,375.852063 L52.1589343,375.985861 C56.6545483,380.481475 62.9519759,383.353672 69.9808327,383.353672 Z M207.953367,306.633879 C214.228495,304.988163 219.910452,300.960842 223.375821,294.873031 L223.844114,293.985504 C226.925929,288.209889 227.487881,281.546747 225.842165,275.641794 C224.183069,269.317607 220.106689,263.724849 214.032258,260.2238 L213.679923,259.987423 C207.76159,256.745051 201.018169,256.040381 194.82332,257.712857 C188.525893,259.282754 182.870696,263.488472 179.423166,269.527223 C175.931037,275.507996 175.199608,282.407514 176.872084,288.758461 C178.598078,295.002369 182.634319,300.648647 188.66861,304.176455 L188.70875,304.176455 C194.756421,307.650744 201.60688,308.279595 207.953367,306.633879 Z M95.9688712,180.386512 C89.3146489,173.750129 80.1450235,169.59347 69.9808327,169.59347 C59.8567813,169.59347 50.7094556,173.750129 44.0686131,180.386512 C37.4589901,187.000595 33.38261,196.147921 33.38261,206.285352 C33.38261,216.449543 37.4589901,225.623628 44.0686131,232.31353 C50.7094556,238.896393 59.8567813,243.026292 69.9808327,243.026292 C80.1450235,243.026292 89.3146489,238.896393 95.9688712,232.31353 C102.591874,225.623628 106.668254,216.449543 106.668254,206.285352 C106.668254,196.147921 102.591874,187.000595 95.9688712,180.386512 Z M81.3581257,137.223266 C96.0848295,139.64947 109.335295,146.705086 119.445967,156.896037 L119.526245,156.896037 C121.131822,158.514993 122.701719,160.267747 124.151198,162.042801 L149.434566,147.414216 C146.036096,137.142987 145.879999,126.403464 148.609478,116.341852 C152.217565,102.85501 160.959037,90.7819674 174.062325,83.2045386 L174.494938,82.9458624 C187.455508,75.6003502 202.191132,74.0839725 215.495117,77.6920595 C228.964119,81.2956866 241.11744,90.0772977 248.681489,103.171665 L248.681489,103.198425 C256.209859,116.212514 257.739616,131.157755 254.144909,144.591077 C250.563582,158.069 241.781971,170.222321 228.692063,177.746231 L225.240074,179.788881 L224.887739,179.788881 C212.779016,185.560036 199.461652,186.452023 187.232511,183.23641 C177.188739,180.569369 167.974514,174.976611 160.7628,167.006708 L135.519571,181.590694 C138.418528,189.270702 140.028564,197.55726 140.028564,206.285352 C140.028564,214.986684 138.418528,223.375821 135.519571,231.109347 L160.7628,245.639814 C167.974514,237.567333 177.188739,232.077153 187.232511,229.410112 C200.701514,225.726206 215.637835,227.296103 228.692063,234.900292 L229.526071