Squashed commit of the following:

commit 4549dc35f661be2da715b399161249f3feeb3b3b Merge: 4aee376 b2f4951 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 15 18:06:06 2024 +0100 Merge branch 'testing' of https://github.com/frdel/agent-zero into testing commit b2f49511adbeacda157cf28dc38f6671a9698a8d Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Sun Dec 15 17:05:55 2024 +0000 docs: update for v.0.8 (#262) * docs: update for v.0.8 - fix: imgs in setup guide - updated docs in knowledge dir - new video in main readme * Update installation.md with Ollama guide To be improved asap * ollama guide * improving readme and stt/tts commit 4aee3764caf52e4cf78931053a8746efa6d8990e Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 15 18:03:36 2024 +0100 Squashed commit of the following: commit 9d4e1b68b2ab41eefc534ef1f48953496d7d1cc6 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 15 18:01:51 2024 +0100 ctx window popup fix, default settings fix commit 9ef32085651bc02610e1317b29f8d0b4913ae49f Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 15 14:55:53 2024 +0100 models, settings, initializer refactor Rate limiter fix Models initialized JIT Model call wrappers for agent Message compression fix Log progress update Settings frontend numeric fields commit f7b3e2540c0ab798658cc6fed783942423d74df8 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 8 19:42:17 2024 +0100 knowledge import/reload commit 4e028a3ce428cec581273a2261b6bdd8c474853e Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 8 11:28:47 2024 +0100 Memory recall speedup commit 8ec3b24696e0346a3aea22d0f304ca297004bdcc Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 8 00:17:02 2024 +0100 keyboard input tool commit a76a302f3f4e9fce9183aa0585595d6f18ae215a Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sat Dec 7 23:28:03 2024 +0100 solutions cleanup commit 884007cdb0064ef9d550dc99e6c3066719242da1 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sat Dec 7 21:51:14 2024 +0100 console print edits for docker commit 927c234d69312d57a90b03896bf9e62bf2583bd6 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sat Dec 7 20:40:28 2024 +0100 openai azure model func name fix commit 53a46288f9a72928ec902b36625080ad07ebe2a1 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 15:17:58 2024 +0100 mistral fix, error text output commit 6aa37744fc9ca77271e33c195bf67a78dd7937a7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 14:58:10 2024 +0100 toast fix commit f0be03ea77c3d4ef72ec8180df87e0bfffb46198 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 14:33:28 2024 +0100 toast errors commit 84346828128d230a39a14d4ad32d14dec9bea8b7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 11:30:34 2024 +0100 warnings cleanup commit 2b94af895d517e32932f7f71ffea277a63dce940 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 10:54:06 2024 +0100 Preload fix commit 7f270d4a14032bbe05a8b22c873af0febfa78668 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 09:44:13 2024 +0100 Server startup log msg commit f9c9b5c93369269dd5eb71d222d8918f2bec6715 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 07:50:15 2024 +0100 Update run_ui.py commit f3ca7e0742b12a93a8d5cc6cce066d88ad56a63b Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 06:21:14 2024 +0100 Update run_ui.py commit 21975c5a7cc7b3ad8b9ab95f940b5e6f6a743231 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Dec 5 20:45:51 2024 +0100 local models docker url commit f0a8b07c4fd2b1a5daaaf52142f194a8fdb8fcef Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Dec 5 16:40:49 2024 +0100 Server addr notice commit 656612726a3bbf01e4cd6ede01a60ce05b855c97 Merge: 49594fe 7c2866c Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Dec 5 16:11:23 2024 +0100 Merge pull request #260 from 3clyp50/development fix: toast handling, mobile breakpoint commit 7c2866ca614fff704b820e8f1ff6c9f50006320b Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Dec 4 19:37:50 2024 +0100 fix: toast handling, mobile breakpoint `toast.css` and `index.js` - fixed toasts disappearing right after showing - simplified toast animation `index.css` - set 2ⁿᵈ mobile breakpoint at 640px commit 49594fe6ec2d32a1855a2ccbd9479d4fda347651 Merge: f697754 70b1fa3 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Wed Dec 4 10:39:58 2024 +0100 Merge pull request #259 from 3clyp50/development CSS refactor and toasts commit 70b1fa385af8d86d1d5280a5b34e1a8a9abeb3cf Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Dec 4 02:17:50 2024 +0100 refactor: css, style: toasts, fix: z-index - organized structure - consolidated selectors and states - shorthand everywhere - modern toasts - bigger action buttons for mobile commit f6977546c11b63e2e47dce8367cad8a6c62248fc Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 22:42:36 2024 +0100 call subordinate fix commit fbe47ac03e56cfb005a1cd2b044c6305e27ca436 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 21:19:03 2024 +0100 Minor fixes commit 961dbc405af8a784ecadcfcbcd7652d1f8d9be28 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 21:10:45 2024 +0100 restart commit 357909c16a66c0e7ec78a2a993a9a4e54dd67bf9 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 19:41:29 2024 +0100 whisper remote preload commit e0b0b6f6367841c85dfa9c2156f46db755c88497 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 17:39:56 2024 +0100 nudge commit 9fae02b2a55bb1760fae926c2b40cd07ee26a61c Merge: 0ebc142 fedf2d4 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:57:18 2024 +0100 Merge pull request #256 from 3clyp50/development feature: copy text button, nudge & fix: various styles commit 0ebc142124fa3dcb370d95fd2a84bdba8f3145e8 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:56:33 2024 +0100 ssh connection retry commit deae13d3834c7031a18cd30d5ee593f804b1b09a Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:38:57 2024 +0100 root pass fix commit 9109fcbf60a8c9cc975c9e21306c619d81a2b43c Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:28:53 2024 +0100 root password change fix commit 46689d6477d51966b9876b7d51b180e871569ebb Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:22:18 2024 +0100 RFC & SSH exchange for development commit fedf2d4bdc6357f9e50e76b9202e06081c66db5e Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Tue Dec 3 04:03:14 2024 +0100 feature: copy text button, nudge & fix: various styles - Copy button for all messages - Nudge button front-end - Fixed various non-styled light mode elements to do -> css cleanup and whisper loading commit 19f50d6d9509acdaea2a5ccd846b5de2722b4a07 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 1 20:50:17 2024 +0100 attachments, files, prompt extras, prompt caching, refactors, cleanups commit c99b1a47d4f25d8184661a77418ebfafa5c00ee9 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 29 08:55:27 2024 +0100 Alpine fix version, STT fixes commit 81e653ba2d710ad31e43d658738cf6a843461792 Merge: 857f8b6 89b8483 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Nov 28 23:08:09 2024 +0100 Merge pull request #255 from 3clyp50/development feature: speech to text settings commit 857f8b6d82ec6707f45c67fa7e2a360e535071b0 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 28 23:05:17 2024 +0100 download and remove folders in browser commit 89b848312b6f553fe22a6c0039bc7ab93b716384 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 28 16:07:50 2024 +0100 feature: speech to text settings - initial commit: voice settings - Settings section for STT commit b3a27bb442668e4a21e79be4ab96c73a09f2b864 Merge: 5e8d6b1 bb980ea Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Nov 28 08:39:01 2024 +0100 Merge pull request #254 from 3clyp50/development fix: file browser bugs + final ui polishing commit bb980ea6b93a074b24cf86c54b0be69596b34cb1 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 28 01:13:56 2024 +0100 fix: file browser deletion bug + parent directory Underscore matters! - fixed both bugs for the browser Extra: - style for toasts quickfix generic modals commit f0126a6ef87c43aa34e6fbc7595d89f10f6c3b27 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 23:44:20 2024 +0100 style: polishing and consistency commit 5e8d6b1c7d3ec965eac864b2bb72c85360bae8c2 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 22:16:13 2024 +0100 Minor fixes commit 184f8dcf53ec49733d20967246374f08469d7e84 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 22:05:23 2024 +0100 Pause button fix commit 969f142af12c01abd9009a8e35e0cbbd225bca8d Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 22:01:06 2024 +0100 RFC fix, history bugfixes commit 733b8de5163b3fc36c68df099a1860af210e6a1d Merge: f2057d3 6a83e79 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 20:57:15 2024 +0100 Merge branch 'pr/253' into development commit 6a83e79d5a42fb44bfcac88c5ade3fda85ba2b28 Author: Alessandro <real.eclypso@gmail.com> Date: Wed Nov 27 20:41:53 2024 +0100 fix: bigger modals commit f2057d390178a760b7a857f918a8bb4dee586194 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 17:30:19 2024 +0100 Squashed commit of the following: commit e626817332661f48ec97da1d4ab42479ca40b50f Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 12:51:22 2024 +0100 refactor: modals css Modals now get the base styles from modals.css, with any spec in the individual files (settings.css, file_manager.css, ecc). commit 306db0ca395a9f5691e558c7a18a02c9cecabaa3 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 03:17:20 2024 +0100 style: new action buttons + ghost buttons Updated styles for buttons, switches, and overall UI graphic improvement commit c95a379bb590e695f5350bc9a964e4d599756a3a Author: Alessandro <real.eclypso@gmail.com> Date: Tue Nov 26 20:17:18 2024 +0100 fix: status-icon commit eddafa8798507e7800606b6216554ad107b74655 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Fri Nov 22 01:28:04 2024 +0100 cleanup: webui folder cleanup (history) cleanup: webui sidebar, icons, modals commit e626817332661f48ec97da1d4ab42479ca40b50f Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 12:51:22 2024 +0100 refactor: modals css Modals now get the base styles from modals.css, with any spec in the individual files (settings.css, file_manager.css, ecc). commit 306db0ca395a9f5691e558c7a18a02c9cecabaa3 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 03:17:20 2024 +0100 style: new action buttons + ghost buttons Updated styles for buttons, switches, and overall UI graphic improvement commit c95a379bb590e695f5350bc9a964e4d599756a3a Author: Alessandro <real.eclypso@gmail.com> Date: Tue Nov 26 20:17:18 2024 +0100 fix: status-icon commit eddafa8798507e7800606b6216554ad107b74655 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Fri Nov 22 01:28:04 2024 +0100 cleanup: webui folder cleanup (history) cleanup: webui sidebar, icons, modals commit 22ecfd660c7c0887d7ace2a13fc32acb80f8d8c1 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 25 22:14:17 2024 +0100 intervention message fix commit ea9c8bf63bd6a460bf4b8001e39af48ce9f165ad Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 25 20:48:52 2024 +0100 minor context window fixes commit 489ca317c5c575929633f70aa62fe64820e55ad7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 25 19:01:01 2024 +0100 settings auth fix commit a0ff118ad1c9e0aa325e714e3ecdf716ff38ee46 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 25 17:39:42 2024 +0100 Context window management, work in progress commit c0947e30c757ecdfd08117b12ffc4d1d08543c9e Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 21 18:47:40 2024 +0100 API separation commit 8db8d3fa18bb6201ad95493abf5397c895de14d2 Merge: 5034892 0735bb9 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Nov 21 15:29:20 2024 +0100 Merge pull request #249 from 3clyp50/development feature: work_dir file manager commit 0735bb9ae8db04ccd8f43d5838b1483b9248c999 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 21 11:28:56 2024 +0100 fix: SVG optimization Thanks SVGO! removal: settings.svg (not used) commit 9c968ba1cff3bcbde20a1484e4e647b520f762a8 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 21 10:58:20 2024 +0100 feature: work_dir file manager Implemented the file browser for work_dir, we need to: - move endpoints away from run_ui.py - make the "Up" (parent dir) button work Extra: - Now when under 768px in width, you can touch outside of the sidebar to collapse it. commit 50348926dfd8635d8ab73b88e1d76b947380fceb Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 21:56:50 2024 +0100 version info fix commit 040de30ef2863c57a335c1c408baaf338c8bdf7b Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 21:21:47 2024 +0100 removed bundles, tests commit 020c16ef8636e995c9022216a8f961084de8b0f7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 20:46:08 2024 +0100 git+docker improvements version, build branch commit 06260ed4a6b8061ffe533d92ad1a6bcc3460eeb6 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 13:11:54 2024 +0100 searxng fix, ui animation commit 41dc7ae14651c9a2291b79cda7e92b0bbaac3ce7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 11:05:33 2024 +0100 Nodejs eval require path fix commit 970db9adc9677d8eb4fc047c47a215ffc65c826c Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 10:37:49 2024 +0100 Whisper fix commit f59ac2b485486c5c435e24581205b900f693e40d Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 09:34:00 2024 +0100 docker /a0 mount fix commit c7046fa97b29bba305b4617299f88a21f4247838 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 00:43:15 2024 +0100 docker volume map fix commit 0ce8344f0b7bc7956539960199d7371bd902e229 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 00:23:08 2024 +0100 dockerfile, compose, smart cache commit bad39516462c44afd0dc3d05d0dac16359d28c54 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 21:41:39 2024 +0100 RFC error messages commit 05cbaa0f4dd9ce967be37d337debfbb649cbef95 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 21:16:50 2024 +0100 RFC password RFC password protection work in progress commit 9d1d2be89717994bcd5323b0cd418728d31b98cb Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 16:18:31 2024 +0100 Dockerfile updates commit a7a40ac18fed6b5acba969d65f932cb5505b3f45 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 10:50:24 2024 +0100 dotenv fix, knowledge tool fic commit ba3422d45228c53704ef3b896f85909be625c7f2 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 09:01:23 2024 +0100 dotenv fix, gitignore update commit 9c7339042f1cfc1e67d3656b876a63f1a87065ff Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 17 23:12:19 2024 +0100 Squashed commit of the following: commit b05d44bb4bc9e07cfc0b584ab39e8624bae771fb Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 17 23:12:00 2024 +0100 searxng, RFC, docker runtime commit c90fd4026e644d22e6c7dc29639c85eee6026828 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sat Nov 16 21:21:49 2024 +0100 Remote function calling commit f71d45ec7dbff4e2d3209f0efe97804f6e602fe7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 13:13:09 2024 +0100 Fix for bool arg parsing commit 936768d1d8efc9060494334b87f400c933d78048 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 13:01:28 2024 +0100 Dynamic runtime args parsing commit 00c915fc6c1f8f00f8176fbf5b77af32fa312d18 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 12:13:58 2024 +0100 API key fix commit 504a7f91789caa16578af8bae9b7936a9d7fbbb7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 11:59:41 2024 +0100 API keys JIT loading commit 5678a2fce2d333454bb1a2e94ca2b5916d321b41 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 11:27:12 2024 +0100 Update dotenv.py commit e469f6d7ba82de7e9d3712ff3ae6c95e09095b8b Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 09:57:49 2024 +0100 Docker runtime preload commit 66f1ab7baff0bbeda6c34aeee45be9df8d7c7d90 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 09:49:23 2024 +0100 Docker runtime - SSH, runtime args commit 02cb41b2fd743b7a106de188420959360e0f12a5 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 14 21:49:45 2024 +0100 WIP: docker runtime commit b33b48057dbaf1ab5e301de00aec4670a95e81e9 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 14 21:28:14 2024 +0100 WIP: docker runtime commit 7fc17b39c52b1a1036c8242a2f3fdbdc6ff3f741 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 14 20:27:43 2024 +0100 Docker runtime in progress work in progress container manager script runtime image with autostart commit 2bf24b76d9d8bb37546c1b0fa5113379ff48c89f Merge: 92d94b4 a57f0c1 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Tue Nov 12 15:38:30 2024 +0100 Merge pull request #239 from 3clyp50/development feature: attachments preview and sending (file, code, imgs) commit a57f0c11988b06efdc6b8da8dad44969996d4b92 Author: Alessandro <real.eclypso@gmail.com> Date: Tue Nov 12 15:02:25 2024 +0100 feature: attachments preview and sending (file, code, imgs) commit 92d94b4d86ef477b0d19e7a7e7ef27f981826a31 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 23:44:15 2024 +0100 TTS prototype TTS with default browser API commit 1a91334a420f605101e6aecdbd34f1dca33c192b Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 20:57:49 2024 +0100 STT continued Dialogue mode and state managed for STT commit 22f1a2b744082ee954eb6d4476eaf3092be839ac Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 14:25:20 2024 +0100 speech recognition prototype using xenova web only tts commit a0b042cfb2dbaffa2ea46998f53ee4794b8bf836 Merge: 22db39f 82ca0d8 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 08:52:32 2024 +0100 Merge pull request #235 from 3clyp50/development feature: openai-whisper voice input commit 22db39f731dd286d0123a290a790b1c2cb6404b4 Merge: d39beba 2b1aa09 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 08:52:15 2024 +0100 Merge pull request #236 from linuztx/development Add Free Cloudflare Tunnel Support for Remote Access commit 2b1aa0984023fcc1617d4c3f664f27a9045958f7 Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:56:52 2024 +0800 Add auto-downloading cloudflared tunnel manager commit cca85d7f5da336d6fdc185cc247741a113e25f74 Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:54:52 2024 +0800 Integrate Cloudflare tunnel support in web UI commit 433f44522c549fa910d22939445073ae57785276 Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:54:19 2024 +0800 Add USE_CLOUDFLARE environment variable commit d94c3b046769a59fedca35a3b2e7e03222b7053c Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:53:45 2024 +0800 Cloudflared binaries commit 451fdb08c4afe905ae9334ed0d297d83459f8eed Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:52:24 2024 +0800 Add bin directory for cloudflared downloads commit 82ca0d800ab6e5abf99eda57f31f474a5de8d2d8 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Sun Nov 10 00:37:41 2024 +0100 feature: openai-whisper voice input This also reverts commit 92a904d4411a203c482bc1231dee1438d7279b62. commit 3c6a5bee64296559da274a9799afb139a7bdc98b Author: Alessandro <real.eclypso@gmail.com> Date: Fri Nov 8 01:46:29 2024 +0100 feature: attachment setup missing - double user message when sending imgs - base 64 images implementation fix: fonts consistency commit d39beba37416c79919e27e95fa2c786f53dcbb09 Merge: 2eb497c 9d6b769 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Nov 7 08:31:52 2024 +0100 Merge pull request #234 from 3clyp50/development UI Knowledge import, attachments, voice input and scroll fix commit 9d6b769dc29ea43805d2a551b8b48710f9313470 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 7 05:40:40 2024 +0100 UI Knowledge import missing - image attachment - work_dir browser (backend implemented, WIP) - WHISPER (hurry up) commit 3c40c86d07e3f1a4554575983bb8c38aba120c7f Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 7 03:40:06 2024 +0100 Revert index.js scrolling logic + css infinite scroll fix commit d84469dff6b4ffa0db7da509f9b38802d55e180c Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 6 11:17:56 2024 +0100 Mic js and embedding menu + styles commit 2eb497c8d2be144dc2b7558531be69a83d9cba6a Merge: ef1cdac 21933bc Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Tue Nov 5 21:33:32 2024 +0100 Merge pull request #233 from 3clyp50/development Animation, KaTeX fix and mobile improvements commit 21933bce2f5e82ff46d606895d9caa3204694a41 Author: Alessandro <real.eclypso@gmail.com> Date: Tue Nov 5 21:07:50 2024 +0100 KaTeX fix and mobile improvements commit ef1cdacea212b77272e01dba42a115ae35b3a426 Merge: 9626c04 553f7bf Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Tue Nov 5 17:54:14 2024 +0100 Merge pull request #232 from 3clyp50/development LaTeX, old browser support, new buttons and attachments commit 553f7bf03911dab178796b18e1c550da8ec3acf6 Merge: fc03a79 9626c04 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Tue Nov 5 14:48:53 2024 +0100 Merge remote-tracking branch 'upstream/development' into development commit fc03a7922edd6eeb758d208afc4f3bbb962926b0 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Tue Nov 5 00:59:25 2024 +0100 Browsers support, new text buttons + attachments - Firefox/old browsers support and new text buttons + attachments - LaTeX support! commit 9626c044d56e452a53df2c59c1d7be150c157596 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 4 22:55:56 2024 +0100 UI and settings merge commit 255baf0780eeb18ec273e8ba8359bf2f0150f656 Merge: 1c026ee 61b5b83 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Mon Nov 4 22:26:57 2024 +0100 Merge pull request #229 from 3clyp50/development UI update commit 61b5b8389a8af536c0444b4a659be9d04c1cff06 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Mon Nov 4 22:26:07 2024 +0100 other things + Embedding Model selection commit 6ff3df03de70db53dff11001cf8b78c7806ad698 Author: Alessandro <real.eclypso@gmail.com> Date: Mon Nov 4 21:06:48 2024 +0100 toast! commit e6ac772a2ed6ed76fa843a6edc31218c54e955eb Author: Alessandro <real.eclypso@gmail.com> Date: Mon Nov 4 20:58:55 2024 +0100 Mobile and UX update commit 1a0ceebcaf7a21085b6ca4ddba2873bbf0b205fe Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Mon Nov 4 15:18:06 2024 +0100 Modal styling WIP commit f28a05d7392e812bc0272f431a662d5eb68953b0 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Oct 23 00:18:59 2024 +0200 Improved UI/UX in WebUI - Collapsible pref section :+1: - Monospace font - UX focus on user feedback and accessibility - Mobile and input section QoL - Other minor refinements commit 1c026ee75f6f2b3993bf97f44775460e7464335f Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Oct 29 19:39:54 2024 +0100 Behaviour prompt Prototype of adjustable behaviour system prompt commit a5d671904d4deebf147adc2b728bdc5b36627144 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Oct 27 18:04:40 2024 +0100 Settings prototype Settings modal window managed from python - work in progress commit d0369db0ed8b9909576955d190331fa10fd900d4 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 8 21:34:56 2024 +0100 Squashed commit of the following: commit f7b3e2540c0ab798658cc6fed783942423d74df8 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 8 19:42:17 2024 +0100 knowledge import/reload commit 4e028a3ce428cec581273a2261b6bdd8c474853e Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 8 11:28:47 2024 +0100 Memory recall speedup commit 8ec3b24696e0346a3aea22d0f304ca297004bdcc Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 8 00:17:02 2024 +0100 keyboard input tool commit a76a302f3f4e9fce9183aa0585595d6f18ae215a Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sat Dec 7 23:28:03 2024 +0100 solutions cleanup commit 884007cdb0064ef9d550dc99e6c3066719242da1 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sat Dec 7 21:51:14 2024 +0100 console print edits for docker commit 927c234d69312d57a90b03896bf9e62bf2583bd6 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sat Dec 7 20:40:28 2024 +0100 openai azure model func name fix commit 53a46288f9a72928ec902b36625080ad07ebe2a1 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 15:17:58 2024 +0100 mistral fix, error text output commit 6aa37744fc9ca77271e33c195bf67a78dd7937a7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 14:58:10 2024 +0100 toast fix commit f0be03ea77c3d4ef72ec8180df87e0bfffb46198 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 14:33:28 2024 +0100 toast errors commit 84346828128d230a39a14d4ad32d14dec9bea8b7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 11:30:34 2024 +0100 warnings cleanup commit 2b94af895d517e32932f7f71ffea277a63dce940 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 10:54:06 2024 +0100 Preload fix commit 7f270d4a14032bbe05a8b22c873af0febfa78668 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 09:44:13 2024 +0100 Server startup log msg commit f9c9b5c93369269dd5eb71d222d8918f2bec6715 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 07:50:15 2024 +0100 Update run_ui.py commit f3ca7e0742b12a93a8d5cc6cce066d88ad56a63b Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 06:21:14 2024 +0100 Update run_ui.py commit 21975c5a7cc7b3ad8b9ab95f940b5e6f6a743231 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Dec 5 20:45:51 2024 +0100 local models docker url commit f0a8b07c4fd2b1a5daaaf52142f194a8fdb8fcef Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Dec 5 16:40:49 2024 +0100 Server addr notice commit 656612726a3bbf01e4cd6ede01a60ce05b855c97 Merge: 49594fe 7c2866c Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Dec 5 16:11:23 2024 +0100 Merge pull request #260 from 3clyp50/development fix: toast handling, mobile breakpoint commit 7c2866ca614fff704b820e8f1ff6c9f50006320b Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Dec 4 19:37:50 2024 +0100 fix: toast handling, mobile breakpoint `toast.css` and `index.js` - fixed toasts disappearing right after showing - simplified toast animation `index.css` - set 2ⁿᵈ mobile breakpoint at 640px commit 49594fe6ec2d32a1855a2ccbd9479d4fda347651 Merge: f697754 70b1fa3 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Wed Dec 4 10:39:58 2024 +0100 Merge pull request #259 from 3clyp50/development CSS refactor and toasts commit 70b1fa385af8d86d1d5280a5b34e1a8a9abeb3cf Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Dec 4 02:17:50 2024 +0100 refactor: css, style: toasts, fix: z-index - organized structure - consolidated selectors and states - shorthand everywhere - modern toasts - bigger action buttons for mobile commit f6977546c11b63e2e47dce8367cad8a6c62248fc Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 22:42:36 2024 +0100 call subordinate fix commit fbe47ac03e56cfb005a1cd2b044c6305e27ca436 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 21:19:03 2024 +0100 Minor fixes commit 961dbc405af8a784ecadcfcbcd7652d1f8d9be28 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 21:10:45 2024 +0100 restart commit 357909c16a66c0e7ec78a2a993a9a4e54dd67bf9 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 19:41:29 2024 +0100 whisper remote preload commit e0b0b6f6367841c85dfa9c2156f46db755c88497 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 17:39:56 2024 +0100 nudge commit 9fae02b2a55bb1760fae926c2b40cd07ee26a61c Merge: 0ebc142 fedf2d4 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:57:18 2024 +0100 Merge pull request #256 from 3clyp50/development feature: copy text button, nudge & fix: various styles commit 0ebc142124fa3dcb370d95fd2a84bdba8f3145e8 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:56:33 2024 +0100 ssh connection retry commit deae13d3834c7031a18cd30d5ee593f804b1b09a Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:38:57 2024 +0100 root pass fix commit 9109fcbf60a8c9cc975c9e21306c619d81a2b43c Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:28:53 2024 +0100 root password change fix commit 46689d6477d51966b9876b7d51b180e871569ebb Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:22:18 2024 +0100 RFC & SSH exchange for development commit fedf2d4bdc6357f9e50e76b9202e06081c66db5e Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Tue Dec 3 04:03:14 2024 +0100 feature: copy text button, nudge & fix: various styles - Copy button for all messages - Nudge button front-end - Fixed various non-styled light mode elements to do -> css cleanup and whisper loading commit 19f50d6d9509acdaea2a5ccd846b5de2722b4a07 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 1 20:50:17 2024 +0100 attachments, files, prompt extras, prompt caching, refactors, cleanups commit c99b1a47d4f25d8184661a77418ebfafa5c00ee9 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 29 08:55:27 2024 +0100 Alpine fix version, STT fixes commit 81e653ba2d710ad31e43d658738cf6a843461792 Merge: 857f8b6 89b8483 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Nov 28 23:08:09 2024 +0100 Merge pull request #255 from 3clyp50/development feature: speech to text settings commit 857f8b6d82ec6707f45c67fa7e2a360e535071b0 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 28 23:05:17 2024 +0100 download and remove folders in browser commit 89b848312b6f553fe22a6c0039bc7ab93b716384 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 28 16:07:50 2024 +0100 feature: speech to text settings - initial commit: voice settings - Settings section for STT commit b3a27bb442668e4a21e79be4ab96c73a09f2b864 Merge: 5e8d6b1 bb980ea Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Nov 28 08:39:01 2024 +0100 Merge pull request #254 from 3clyp50/development fix: file browser bugs + final ui polishing commit bb980ea6b93a074b24cf86c54b0be69596b34cb1 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 28 01:13:56 2024 +0100 fix: file browser deletion bug + parent directory Underscore matters! - fixed both bugs for the browser Extra: - style for toasts quickfix generic modals commit f0126a6ef87c43aa34e6fbc7595d89f10f6c3b27 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 23:44:20 2024 +0100 style: polishing and consistency commit 5e8d6b1c7d3ec965eac864b2bb72c85360bae8c2 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 22:16:13 2024 +0100 Minor fixes commit 184f8dcf53ec49733d20967246374f08469d7e84 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 22:05:23 2024 +0100 Pause button fix commit 969f142af12c01abd9009a8e35e0cbbd225bca8d Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 22:01:06 2024 +0100 RFC fix, history bugfixes commit 733b8de5163b3fc36c68df099a1860af210e6a1d Merge: f2057d3 6a83e79 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 20:57:15 2024 +0100 Merge branch 'pr/253' into development commit 6a83e79d5a42fb44bfcac88c5ade3fda85ba2b28 Author: Alessandro <real.eclypso@gmail.com> Date: Wed Nov 27 20:41:53 2024 +0100 fix: bigger modals commit f2057d390178a760b7a857f918a8bb4dee586194 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 17:30:19 2024 +0100 Squashed commit of the following: commit e626817332661f48ec97da1d4ab42479ca40b50f Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 12:51:22 2024 +0100 refactor: modals css Modals now get the base styles from modals.css, with any spec in the individual files (settings.css, file_manager.css, ecc). commit 306db0ca395a9f5691e558c7a18a02c9cecabaa3 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 03:17:20 2024 +0100 style: new action buttons + ghost buttons Updated styles for buttons, switches, and overall UI graphic improvement commit c95a379bb590e695f5350bc9a964e4d599756a3a Author: Alessandro <real.eclypso@gmail.com> Date: Tue Nov 26 20:17:18 2024 +0100 fix: status-icon commit eddafa8798507e7800606b6216554ad107b74655 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Fri Nov 22 01:28:04 2024 +0100 cleanup: webui folder cleanup (history) cleanup: webui sidebar, icons, modals commit e626817332661f48ec97da1d4ab42479ca40b50f Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 12:51:22 2024 +0100 refactor: modals css Modals now get the base styles from modals.css, with any spec in the individual files (settings.css, file_manager.css, ecc). commit 306db0ca395a9f5691e558c7a18a02c9cecabaa3 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 03:17:20 2024 +0100 style: new action buttons + ghost buttons Updated styles for buttons, switches, and overall UI graphic improvement commit c95a379bb590e695f5350bc9a964e4d599756a3a Author: Alessandro <real.eclypso@gmail.com> Date: Tue Nov 26 20:17:18 2024 +0100 fix: status-icon commit eddafa8798507e7800606b6216554ad107b74655 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Fri Nov 22 01:28:04 2024 +0100 cleanup: webui folder cleanup (history) cleanup: webui sidebar, icons, modals commit 22ecfd660c7c0887d7ace2a13fc32acb80f8d8c1 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 25 22:14:17 2024 +0100 intervention message fix commit ea9c8bf63bd6a460bf4b8001e39af48ce9f165ad Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 25 20:48:52 2024 +0100 minor context window fixes commit 489ca317c5c575929633f70aa62fe64820e55ad7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 25 19:01:01 2024 +0100 settings auth fix commit a0ff118ad1c9e0aa325e714e3ecdf716ff38ee46 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 25 17:39:42 2024 +0100 Context window management, work in progress commit c0947e30c757ecdfd08117b12ffc4d1d08543c9e Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 21 18:47:40 2024 +0100 API separation commit 8db8d3fa18bb6201ad95493abf5397c895de14d2 Merge: 5034892 0735bb9 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Nov 21 15:29:20 2024 +0100 Merge pull request #249 from 3clyp50/development feature: work_dir file manager commit 0735bb9ae8db04ccd8f43d5838b1483b9248c999 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 21 11:28:56 2024 +0100 fix: SVG optimization Thanks SVGO! removal: settings.svg (not used) commit 9c968ba1cff3bcbde20a1484e4e647b520f762a8 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 21 10:58:20 2024 +0100 feature: work_dir file manager Implemented the file browser for work_dir, we need to: - move endpoints away from run_ui.py - make the "Up" (parent dir) button work Extra: - Now when under 768px in width, you can touch outside of the sidebar to collapse it. commit 50348926dfd8635d8ab73b88e1d76b947380fceb Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 21:56:50 2024 +0100 version info fix commit 040de30ef2863c57a335c1c408baaf338c8bdf7b Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 21:21:47 2024 +0100 removed bundles, tests commit 020c16ef8636e995c9022216a8f961084de8b0f7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 20:46:08 2024 +0100 git+docker improvements version, build branch commit 06260ed4a6b8061ffe533d92ad1a6bcc3460eeb6 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 13:11:54 2024 +0100 searxng fix, ui animation commit 41dc7ae14651c9a2291b79cda7e92b0bbaac3ce7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 11:05:33 2024 +0100 Nodejs eval require path fix commit 970db9adc9677d8eb4fc047c47a215ffc65c826c Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 10:37:49 2024 +0100 Whisper fix commit f59ac2b485486c5c435e24581205b900f693e40d Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 09:34:00 2024 +0100 docker /a0 mount fix commit c7046fa97b29bba305b4617299f88a21f4247838 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 00:43:15 2024 +0100 docker volume map fix commit 0ce8344f0b7bc7956539960199d7371bd902e229 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 00:23:08 2024 +0100 dockerfile, compose, smart cache commit bad39516462c44afd0dc3d05d0dac16359d28c54 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 21:41:39 2024 +0100 RFC error messages commit 05cbaa0f4dd9ce967be37d337debfbb649cbef95 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 21:16:50 2024 +0100 RFC password RFC password protection work in progress commit 9d1d2be89717994bcd5323b0cd418728d31b98cb Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 16:18:31 2024 +0100 Dockerfile updates commit a7a40ac18fed6b5acba969d65f932cb5505b3f45 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 10:50:24 2024 +0100 dotenv fix, knowledge tool fic commit ba3422d45228c53704ef3b896f85909be625c7f2 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 09:01:23 2024 +0100 dotenv fix, gitignore update commit 9c7339042f1cfc1e67d3656b876a63f1a87065ff Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 17 23:12:19 2024 +0100 Squashed commit of the following: commit b05d44bb4bc9e07cfc0b584ab39e8624bae771fb Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 17 23:12:00 2024 +0100 searxng, RFC, docker runtime commit c90fd4026e644d22e6c7dc29639c85eee6026828 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sat Nov 16 21:21:49 2024 +0100 Remote function calling commit f71d45ec7dbff4e2d3209f0efe97804f6e602fe7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 13:13:09 2024 +0100 Fix for bool arg parsing commit 936768d1d8efc9060494334b87f400c933d78048 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 13:01:28 2024 +0100 Dynamic runtime args parsing commit 00c915fc6c1f8f00f8176fbf5b77af32fa312d18 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 12:13:58 2024 +0100 API key fix commit 504a7f91789caa16578af8bae9b7936a9d7fbbb7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 11:59:41 2024 +0100 API keys JIT loading commit 5678a2fce2d333454bb1a2e94ca2b5916d321b41 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 11:27:12 2024 +0100 Update dotenv.py commit e469f6d7ba82de7e9d3712ff3ae6c95e09095b8b Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 09:57:49 2024 +0100 Docker runtime preload commit 66f1ab7baff0bbeda6c34aeee45be9df8d7c7d90 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 09:49:23 2024 +0100 Docker runtime - SSH, runtime args commit 02cb41b2fd743b7a106de188420959360e0f12a5 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 14 21:49:45 2024 +0100 WIP: docker runtime commit b33b48057dbaf1ab5e301de00aec4670a95e81e9 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 14 21:28:14 2024 +0100 WIP: docker runtime commit 7fc17b39c52b1a1036c8242a2f3fdbdc6ff3f741 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 14 20:27:43 2024 +0100 Docker runtime in progress work in progress container manager script runtime image with autostart commit 2bf24b76d9d8bb37546c1b0fa5113379ff48c89f Merge: 92d94b4 a57f0c1 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Tue Nov 12 15:38:30 2024 +0100 Merge pull request #239 from 3clyp50/development feature: attachments preview and sending (file, code, imgs) commit a57f0c11988b06efdc6b8da8dad44969996d4b92 Author: Alessandro <real.eclypso@gmail.com> Date: Tue Nov 12 15:02:25 2024 +0100 feature: attachments preview and sending (file, code, imgs) commit 92d94b4d86ef477b0d19e7a7e7ef27f981826a31 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 23:44:15 2024 +0100 TTS prototype TTS with default browser API commit 1a91334a420f605101e6aecdbd34f1dca33c192b Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 20:57:49 2024 +0100 STT continued Dialogue mode and state managed for STT commit 22f1a2b744082ee954eb6d4476eaf3092be839ac Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 14:25:20 2024 +0100 speech recognition prototype using xenova web only tts commit a0b042cfb2dbaffa2ea46998f53ee4794b8bf836 Merge: 22db39f 82ca0d8 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 08:52:32 2024 +0100 Merge pull request #235 from 3clyp50/development feature: openai-whisper voice input commit 22db39f731dd286d0123a290a790b1c2cb6404b4 Merge: d39beba 2b1aa09 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 08:52:15 2024 +0100 Merge pull request #236 from linuztx/development Add Free Cloudflare Tunnel Support for Remote Access commit 2b1aa0984023fcc1617d4c3f664f27a9045958f7 Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:56:52 2024 +0800 Add auto-downloading cloudflared tunnel manager commit cca85d7f5da336d6fdc185cc247741a113e25f74 Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:54:52 2024 +0800 Integrate Cloudflare tunnel support in web UI commit 433f44522c549fa910d22939445073ae57785276 Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:54:19 2024 +0800 Add USE_CLOUDFLARE environment variable commit d94c3b046769a59fedca35a3b2e7e03222b7053c Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:53:45 2024 +0800 Cloudflared binaries commit 451fdb08c4afe905ae9334ed0d297d83459f8eed Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:52:24 2024 +0800 Add bin directory for cloudflared downloads commit 82ca0d800ab6e5abf99eda57f31f474a5de8d2d8 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Sun Nov 10 00:37:41 2024 +0100 feature: openai-whisper voice input This also reverts commit 92a904d4411a203c482bc1231dee1438d7279b62. commit 3c6a5bee64296559da274a9799afb139a7bdc98b Author: Alessandro <real.eclypso@gmail.com> Date: Fri Nov 8 01:46:29 2024 +0100 feature: attachment setup missing - double user message when sending imgs - base 64 images implementation fix: fonts consistency commit d39beba37416c79919e27e95fa2c786f53dcbb09 Merge: 2eb497c 9d6b769 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Nov 7 08:31:52 2024 +0100 Merge pull request #234 from 3clyp50/development UI Knowledge import, attachments, voice input and scroll fix commit 9d6b769dc29ea43805d2a551b8b48710f9313470 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 7 05:40:40 2024 +0100 UI Knowledge import missing - image attachment - work_dir browser (backend implemented, WIP) - WHISPER (hurry up) commit 3c40c86d07e3f1a4554575983bb8c38aba120c7f Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 7 03:40:06 2024 +0100 Revert index.js scrolling logic + css infinite scroll fix commit d84469dff6b4ffa0db7da509f9b38802d55e180c Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 6 11:17:56 2024 +0100 Mic js and embedding menu + styles commit 2eb497c8d2be144dc2b7558531be69a83d9cba6a Merge: ef1cdac 21933bc Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Tue Nov 5 21:33:32 2024 +0100 Merge pull request #233 from 3clyp50/development Animation, KaTeX fix and mobile improvements commit 21933bce2f5e82ff46d606895d9caa3204694a41 Author: Alessandro <real.eclypso@gmail.com> Date: Tue Nov 5 21:07:50 2024 +0100 KaTeX fix and mobile improvements commit ef1cdacea212b77272e01dba42a115ae35b3a426 Merge: 9626c04 553f7bf Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Tue Nov 5 17:54:14 2024 +0100 Merge pull request #232 from 3clyp50/development LaTeX, old browser support, new buttons and attachments commit 553f7bf03911dab178796b18e1c550da8ec3acf6 Merge: fc03a79 9626c04 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Tue Nov 5 14:48:53 2024 +0100 Merge remote-tracking branch 'upstream/development' into development commit fc03a7922edd6eeb758d208afc4f3bbb962926b0 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Tue Nov 5 00:59:25 2024 +0100 Browsers support, new text buttons + attachments - Firefox/old browsers support and new text buttons + attachments - LaTeX support! commit 9626c044d56e452a53df2c59c1d7be150c157596 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 4 22:55:56 2024 +0100 UI and settings merge commit 255baf0780eeb18ec273e8ba8359bf2f0150f656 Merge: 1c026ee 61b5b83 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Mon Nov 4 22:26:57 2024 +0100 Merge pull request #229 from 3clyp50/development UI update commit 61b5b8389a8af536c0444b4a659be9d04c1cff06 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Mon Nov 4 22:26:07 2024 +0100 other things + Embedding Model selection commit 6ff3df03de70db53dff11001cf8b78c7806ad698 Author: Alessandro <real.eclypso@gmail.com> Date: Mon Nov 4 21:06:48 2024 +0100 toast! commit e6ac772a2ed6ed76fa843a6edc31218c54e955eb Author: Alessandro <real.eclypso@gmail.com> Date: Mon Nov 4 20:58:55 2024 +0100 Mobile and UX update commit 1a0ceebcaf7a21085b6ca4ddba2873bbf0b205fe Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Mon Nov 4 15:18:06 2024 +0100 Modal styling WIP commit f28a05d7392e812bc0272f431a662d5eb68953b0 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Oct 23 00:18:59 2024 +0200 Improved UI/UX in WebUI - Collapsible pref section :+1: - Monospace font - UX focus on user feedback and accessibility - Mobile and input section QoL - Other minor refinements commit 1c026ee75f6f2b3993bf97f44775460e7464335f Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Oct 29 19:39:54 2024 +0100 Behaviour prompt Prototype of adjustable behaviour system prompt commit a5d671904d4deebf147adc2b728bdc5b36627144 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Oct 27 18:04:40 2024 +0100 Settings prototype Settings modal window managed from python - work in progress commit 50173ced3887c5aa17d3eda76d77811a45c05353 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 8 20:29:37 2024 +0100 dev merge commit 050c78a3d9ab0f52a30b6eca0d0229968f6ce845 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 8 00:27:02 2024 +0100 Squashed commit of the following: commit 8ec3b24696e0346a3aea22d0f304ca297004bdcc Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 8 00:17:02 2024 +0100 keyboard input tool commit a76a302f3f4e9fce9183aa0585595d6f18ae215a Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sat Dec 7 23:28:03 2024 +0100 solutions cleanup commit 884007cdb0064ef9d550dc99e6c3066719242da1 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sat Dec 7 21:51:14 2024 +0100 console print edits for docker commit 927c234d69312d57a90b03896bf9e62bf2583bd6 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sat Dec 7 20:40:28 2024 +0100 openai azure model func name fix commit 53a46288f9a72928ec902b36625080ad07ebe2a1 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 15:17:58 2024 +0100 mistral fix, error text output commit 6aa37744fc9ca77271e33c195bf67a78dd7937a7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 14:58:10 2024 +0100 toast fix commit f0be03ea77c3d4ef72ec8180df87e0bfffb46198 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 14:33:28 2024 +0100 toast errors commit 84346828128d230a39a14d4ad32d14dec9bea8b7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 11:30:34 2024 +0100 warnings cleanup commit 2b94af895d517e32932f7f71ffea277a63dce940 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 10:54:06 2024 +0100 Preload fix commit 7f270d4a14032bbe05a8b22c873af0febfa78668 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 09:44:13 2024 +0100 Server startup log msg commit f9c9b5c93369269dd5eb71d222d8918f2bec6715 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 07:50:15 2024 +0100 Update run_ui.py commit f3ca7e0742b12a93a8d5cc6cce066d88ad56a63b Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Dec 6 06:21:14 2024 +0100 Update run_ui.py commit 21975c5a7cc7b3ad8b9ab95f940b5e6f6a743231 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Dec 5 20:45:51 2024 +0100 local models docker url commit f0a8b07c4fd2b1a5daaaf52142f194a8fdb8fcef Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Dec 5 16:40:49 2024 +0100 Server addr notice commit 656612726a3bbf01e4cd6ede01a60ce05b855c97 Merge: 49594fe 7c2866c Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Dec 5 16:11:23 2024 +0100 Merge pull request #260 from 3clyp50/development fix: toast handling, mobile breakpoint commit 7c2866ca614fff704b820e8f1ff6c9f50006320b Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Dec 4 19:37:50 2024 +0100 fix: toast handling, mobile breakpoint `toast.css` and `index.js` - fixed toasts disappearing right after showing - simplified toast animation `index.css` - set 2ⁿᵈ mobile breakpoint at 640px commit 49594fe6ec2d32a1855a2ccbd9479d4fda347651 Merge: f697754 70b1fa3 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Wed Dec 4 10:39:58 2024 +0100 Merge pull request #259 from 3clyp50/development CSS refactor and toasts commit 70b1fa385af8d86d1d5280a5b34e1a8a9abeb3cf Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Dec 4 02:17:50 2024 +0100 refactor: css, style: toasts, fix: z-index - organized structure - consolidated selectors and states - shorthand everywhere - modern toasts - bigger action buttons for mobile commit f6977546c11b63e2e47dce8367cad8a6c62248fc Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 22:42:36 2024 +0100 call subordinate fix commit fbe47ac03e56cfb005a1cd2b044c6305e27ca436 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 21:19:03 2024 +0100 Minor fixes commit 961dbc405af8a784ecadcfcbcd7652d1f8d9be28 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 21:10:45 2024 +0100 restart commit 357909c16a66c0e7ec78a2a993a9a4e54dd67bf9 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 19:41:29 2024 +0100 whisper remote preload commit e0b0b6f6367841c85dfa9c2156f46db755c88497 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 17:39:56 2024 +0100 nudge commit 9fae02b2a55bb1760fae926c2b40cd07ee26a61c Merge: 0ebc142 fedf2d4 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:57:18 2024 +0100 Merge pull request #256 from 3clyp50/development feature: copy text button, nudge & fix: various styles commit 0ebc142124fa3dcb370d95fd2a84bdba8f3145e8 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:56:33 2024 +0100 ssh connection retry commit deae13d3834c7031a18cd30d5ee593f804b1b09a Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:38:57 2024 +0100 root pass fix commit 9109fcbf60a8c9cc975c9e21306c619d81a2b43c Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:28:53 2024 +0100 root password change fix commit 46689d6477d51966b9876b7d51b180e871569ebb Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Dec 3 14:22:18 2024 +0100 RFC & SSH exchange for development commit fedf2d4bdc6357f9e50e76b9202e06081c66db5e Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Tue Dec 3 04:03:14 2024 +0100 feature: copy text button, nudge & fix: various styles - Copy button for all messages - Nudge button front-end - Fixed various non-styled light mode elements to do -> css cleanup and whisper loading commit 19f50d6d9509acdaea2a5ccd846b5de2722b4a07 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Dec 1 20:50:17 2024 +0100 attachments, files, prompt extras, prompt caching, refactors, cleanups commit c99b1a47d4f25d8184661a77418ebfafa5c00ee9 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 29 08:55:27 2024 +0100 Alpine fix version, STT fixes commit 81e653ba2d710ad31e43d658738cf6a843461792 Merge: 857f8b6 89b8483 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Nov 28 23:08:09 2024 +0100 Merge pull request #255 from 3clyp50/development feature: speech to text settings commit 857f8b6d82ec6707f45c67fa7e2a360e535071b0 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 28 23:05:17 2024 +0100 download and remove folders in browser commit 89b848312b6f553fe22a6c0039bc7ab93b716384 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 28 16:07:50 2024 +0100 feature: speech to text settings - initial commit: voice settings - Settings section for STT commit b3a27bb442668e4a21e79be4ab96c73a09f2b864 Merge: 5e8d6b1 bb980ea Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Nov 28 08:39:01 2024 +0100 Merge pull request #254 from 3clyp50/development fix: file browser bugs + final ui polishing commit bb980ea6b93a074b24cf86c54b0be69596b34cb1 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 28 01:13:56 2024 +0100 fix: file browser deletion bug + parent directory Underscore matters! - fixed both bugs for the browser Extra: - style for toasts quickfix generic modals commit f0126a6ef87c43aa34e6fbc7595d89f10f6c3b27 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 23:44:20 2024 +0100 style: polishing and consistency commit 5e8d6b1c7d3ec965eac864b2bb72c85360bae8c2 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 22:16:13 2024 +0100 Minor fixes commit 184f8dcf53ec49733d20967246374f08469d7e84 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 22:05:23 2024 +0100 Pause button fix commit 969f142af12c01abd9009a8e35e0cbbd225bca8d Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 22:01:06 2024 +0100 RFC fix, history bugfixes commit 733b8de5163b3fc36c68df099a1860af210e6a1d Merge: f2057d3 6a83e79 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 20:57:15 2024 +0100 Merge branch 'pr/253' into development commit 6a83e79d5a42fb44bfcac88c5ade3fda85ba2b28 Author: Alessandro <real.eclypso@gmail.com> Date: Wed Nov 27 20:41:53 2024 +0100 fix: bigger modals commit f2057d390178a760b7a857f918a8bb4dee586194 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Wed Nov 27 17:30:19 2024 +0100 Squashed commit of the following: commit e626817332661f48ec97da1d4ab42479ca40b50f Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 12:51:22 2024 +0100 refactor: modals css Modals now get the base styles from modals.css, with any spec in the individual files (settings.css, file_manager.css, ecc). commit 306db0ca395a9f5691e558c7a18a02c9cecabaa3 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 03:17:20 2024 +0100 style: new action buttons + ghost buttons Updated styles for buttons, switches, and overall UI graphic improvement commit c95a379bb590e695f5350bc9a964e4d599756a3a Author: Alessandro <real.eclypso@gmail.com> Date: Tue Nov 26 20:17:18 2024 +0100 fix: status-icon commit eddafa8798507e7800606b6216554ad107b74655 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Fri Nov 22 01:28:04 2024 +0100 cleanup: webui folder cleanup (history) cleanup: webui sidebar, icons, modals commit e626817332661f48ec97da1d4ab42479ca40b50f Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 12:51:22 2024 +0100 refactor: modals css Modals now get the base styles from modals.css, with any spec in the individual files (settings.css, file_manager.css, ecc). commit 306db0ca395a9f5691e558c7a18a02c9cecabaa3 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 27 03:17:20 2024 +0100 style: new action buttons + ghost buttons Updated styles for buttons, switches, and overall UI graphic improvement commit c95a379bb590e695f5350bc9a964e4d599756a3a Author: Alessandro <real.eclypso@gmail.com> Date: Tue Nov 26 20:17:18 2024 +0100 fix: status-icon commit eddafa8798507e7800606b6216554ad107b74655 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Fri Nov 22 01:28:04 2024 +0100 cleanup: webui folder cleanup (history) cleanup: webui sidebar, icons, modals commit 22ecfd660c7c0887d7ace2a13fc32acb80f8d8c1 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 25 22:14:17 2024 +0100 intervention message fix commit ea9c8bf63bd6a460bf4b8001e39af48ce9f165ad Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 25 20:48:52 2024 +0100 minor context window fixes commit 489ca317c5c575929633f70aa62fe64820e55ad7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 25 19:01:01 2024 +0100 settings auth fix commit a0ff118ad1c9e0aa325e714e3ecdf716ff38ee46 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 25 17:39:42 2024 +0100 Context window management, work in progress commit c0947e30c757ecdfd08117b12ffc4d1d08543c9e Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 21 18:47:40 2024 +0100 API separation commit 8db8d3fa18bb6201ad95493abf5397c895de14d2 Merge: 5034892 0735bb9 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Nov 21 15:29:20 2024 +0100 Merge pull request #249 from 3clyp50/development feature: work_dir file manager commit 0735bb9ae8db04ccd8f43d5838b1483b9248c999 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 21 11:28:56 2024 +0100 fix: SVG optimization Thanks SVGO! removal: settings.svg (not used) commit 9c968ba1cff3bcbde20a1484e4e647b520f762a8 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 21 10:58:20 2024 +0100 feature: work_dir file manager Implemented the file browser for work_dir, we need to: - move endpoints away from run_ui.py - make the "Up" (parent dir) button work Extra: - Now when under 768px in width, you can touch outside of the sidebar to collapse it. commit 50348926dfd8635d8ab73b88e1d76b947380fceb Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 21:56:50 2024 +0100 version info fix commit 040de30ef2863c57a335c1c408baaf338c8bdf7b Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 21:21:47 2024 +0100 removed bundles, tests commit 020c16ef8636e995c9022216a8f961084de8b0f7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 20:46:08 2024 +0100 git+docker improvements version, build branch commit 06260ed4a6b8061ffe533d92ad1a6bcc3460eeb6 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 13:11:54 2024 +0100 searxng fix, ui animation commit 41dc7ae14651c9a2291b79cda7e92b0bbaac3ce7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 11:05:33 2024 +0100 Nodejs eval require path fix commit 970db9adc9677d8eb4fc047c47a215ffc65c826c Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 10:37:49 2024 +0100 Whisper fix commit f59ac2b485486c5c435e24581205b900f693e40d Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 09:34:00 2024 +0100 docker /a0 mount fix commit c7046fa97b29bba305b4617299f88a21f4247838 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 00:43:15 2024 +0100 docker volume map fix commit 0ce8344f0b7bc7956539960199d7371bd902e229 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Nov 19 00:23:08 2024 +0100 dockerfile, compose, smart cache commit bad39516462c44afd0dc3d05d0dac16359d28c54 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 21:41:39 2024 +0100 RFC error messages commit 05cbaa0f4dd9ce967be37d337debfbb649cbef95 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 21:16:50 2024 +0100 RFC password RFC password protection work in progress commit 9d1d2be89717994bcd5323b0cd418728d31b98cb Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 16:18:31 2024 +0100 Dockerfile updates commit a7a40ac18fed6b5acba969d65f932cb5505b3f45 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 10:50:24 2024 +0100 dotenv fix, knowledge tool fic commit ba3422d45228c53704ef3b896f85909be625c7f2 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 18 09:01:23 2024 +0100 dotenv fix, gitignore update commit 9c7339042f1cfc1e67d3656b876a63f1a87065ff Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 17 23:12:19 2024 +0100 Squashed commit of the following: commit b05d44bb4bc9e07cfc0b584ab39e8624bae771fb Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 17 23:12:00 2024 +0100 searxng, RFC, docker runtime commit c90fd4026e644d22e6c7dc29639c85eee6026828 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sat Nov 16 21:21:49 2024 +0100 Remote function calling commit f71d45ec7dbff4e2d3209f0efe97804f6e602fe7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 13:13:09 2024 +0100 Fix for bool arg parsing commit 936768d1d8efc9060494334b87f400c933d78048 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 13:01:28 2024 +0100 Dynamic runtime args parsing commit 00c915fc6c1f8f00f8176fbf5b77af32fa312d18 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 12:13:58 2024 +0100 API key fix commit 504a7f91789caa16578af8bae9b7936a9d7fbbb7 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 11:59:41 2024 +0100 API keys JIT loading commit 5678a2fce2d333454bb1a2e94ca2b5916d321b41 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 11:27:12 2024 +0100 Update dotenv.py commit e469f6d7ba82de7e9d3712ff3ae6c95e09095b8b Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 09:57:49 2024 +0100 Docker runtime preload commit 66f1ab7baff0bbeda6c34aeee45be9df8d7c7d90 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Fri Nov 15 09:49:23 2024 +0100 Docker runtime - SSH, runtime args commit 02cb41b2fd743b7a106de188420959360e0f12a5 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 14 21:49:45 2024 +0100 WIP: docker runtime commit b33b48057dbaf1ab5e301de00aec4670a95e81e9 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 14 21:28:14 2024 +0100 WIP: docker runtime commit 7fc17b39c52b1a1036c8242a2f3fdbdc6ff3f741 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Thu Nov 14 20:27:43 2024 +0100 Docker runtime in progress work in progress container manager script runtime image with autostart commit 2bf24b76d9d8bb37546c1b0fa5113379ff48c89f Merge: 92d94b4 a57f0c1 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Tue Nov 12 15:38:30 2024 +0100 Merge pull request #239 from 3clyp50/development feature: attachments preview and sending (file, code, imgs) commit a57f0c11988b06efdc6b8da8dad44969996d4b92 Author: Alessandro <real.eclypso@gmail.com> Date: Tue Nov 12 15:02:25 2024 +0100 feature: attachments preview and sending (file, code, imgs) commit 92d94b4d86ef477b0d19e7a7e7ef27f981826a31 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 23:44:15 2024 +0100 TTS prototype TTS with default browser API commit 1a91334a420f605101e6aecdbd34f1dca33c192b Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 20:57:49 2024 +0100 STT continued Dialogue mode and state managed for STT commit 22f1a2b744082ee954eb6d4476eaf3092be839ac Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 14:25:20 2024 +0100 speech recognition prototype using xenova web only tts commit a0b042cfb2dbaffa2ea46998f53ee4794b8bf836 Merge: 22db39f 82ca0d8 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 08:52:32 2024 +0100 Merge pull request #235 from 3clyp50/development feature: openai-whisper voice input commit 22db39f731dd286d0123a290a790b1c2cb6404b4 Merge: d39beba 2b1aa09 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Sun Nov 10 08:52:15 2024 +0100 Merge pull request #236 from linuztx/development Add Free Cloudflare Tunnel Support for Remote Access commit 2b1aa0984023fcc1617d4c3f664f27a9045958f7 Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:56:52 2024 +0800 Add auto-downloading cloudflared tunnel manager commit cca85d7f5da336d6fdc185cc247741a113e25f74 Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:54:52 2024 +0800 Integrate Cloudflare tunnel support in web UI commit 433f44522c549fa910d22939445073ae57785276 Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:54:19 2024 +0800 Add USE_CLOUDFLARE environment variable commit d94c3b046769a59fedca35a3b2e7e03222b7053c Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:53:45 2024 +0800 Cloudflared binaries commit 451fdb08c4afe905ae9334ed0d297d83459f8eed Author: linuztx <linuztx@gmail.com> Date: Sun Nov 10 14:52:24 2024 +0800 Add bin directory for cloudflared downloads commit 82ca0d800ab6e5abf99eda57f31f474a5de8d2d8 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Sun Nov 10 00:37:41 2024 +0100 feature: openai-whisper voice input This also reverts commit 92a904d4411a203c482bc1231dee1438d7279b62. commit 3c6a5bee64296559da274a9799afb139a7bdc98b Author: Alessandro <real.eclypso@gmail.com> Date: Fri Nov 8 01:46:29 2024 +0100 feature: attachment setup missing - double user message when sending imgs - base 64 images implementation fix: fonts consistency commit d39beba37416c79919e27e95fa2c786f53dcbb09 Merge: 2eb497c 9d6b769 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Thu Nov 7 08:31:52 2024 +0100 Merge pull request #234 from 3clyp50/development UI Knowledge import, attachments, voice input and scroll fix commit 9d6b769dc29ea43805d2a551b8b48710f9313470 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 7 05:40:40 2024 +0100 UI Knowledge import missing - image attachment - work_dir browser (backend implemented, WIP) - WHISPER (hurry up) commit 3c40c86d07e3f1a4554575983bb8c38aba120c7f Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Thu Nov 7 03:40:06 2024 +0100 Revert index.js scrolling logic + css infinite scroll fix commit d84469dff6b4ffa0db7da509f9b38802d55e180c Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Nov 6 11:17:56 2024 +0100 Mic js and embedding menu + styles commit 2eb497c8d2be144dc2b7558531be69a83d9cba6a Merge: ef1cdac 21933bc Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Tue Nov 5 21:33:32 2024 +0100 Merge pull request #233 from 3clyp50/development Animation, KaTeX fix and mobile improvements commit 21933bce2f5e82ff46d606895d9caa3204694a41 Author: Alessandro <real.eclypso@gmail.com> Date: Tue Nov 5 21:07:50 2024 +0100 KaTeX fix and mobile improvements commit ef1cdacea212b77272e01dba42a115ae35b3a426 Merge: 9626c04 553f7bf Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Tue Nov 5 17:54:14 2024 +0100 Merge pull request #232 from 3clyp50/development LaTeX, old browser support, new buttons and attachments commit 553f7bf03911dab178796b18e1c550da8ec3acf6 Merge: fc03a79 9626c04 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Tue Nov 5 14:48:53 2024 +0100 Merge remote-tracking branch 'upstream/development' into development commit fc03a7922edd6eeb758d208afc4f3bbb962926b0 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Tue Nov 5 00:59:25 2024 +0100 Browsers support, new text buttons + attachments - Firefox/old browsers support and new text buttons + attachments - LaTeX support! commit 9626c044d56e452a53df2c59c1d7be150c157596 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Mon Nov 4 22:55:56 2024 +0100 UI and settings merge commit 255baf0780eeb18ec273e8ba8359bf2f0150f656 Merge: 1c026ee 61b5b83 Author: Jan Tomášek <38891707+frdel@users.noreply.github.com> Date: Mon Nov 4 22:26:57 2024 +0100 Merge pull request #229 from 3clyp50/development UI update commit 61b5b8389a8af536c0444b4a659be9d04c1cff06 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Mon Nov 4 22:26:07 2024 +0100 other things + Embedding Model selection commit 6ff3df03de70db53dff11001cf8b78c7806ad698 Author: Alessandro <real.eclypso@gmail.com> Date: Mon Nov 4 21:06:48 2024 +0100 toast! commit e6ac772a2ed6ed76fa843a6edc31218c54e955eb Author: Alessandro <real.eclypso@gmail.com> Date: Mon Nov 4 20:58:55 2024 +0100 Mobile and UX update commit 1a0ceebcaf7a21085b6ca4ddba2873bbf0b205fe Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Mon Nov 4 15:18:06 2024 +0100 Modal styling WIP commit f28a05d7392e812bc0272f431a662d5eb68953b0 Author: Alessandro <155005371+3clyp50@users.noreply.github.com> Date: Wed Oct 23 00:18:59 2024 +0200 Improved UI/UX in WebUI - Collapsible pref section :+1: - Monospace font - UX focus on user feedback and accessibility - Mobile and input section QoL - Other minor refinements commit 1c026ee75f6f2b3993bf97f44775460e7464335f Author: frdel <38891707+frdel@users.noreply.github.com> Date: Tue Oct 29 19:39:54 2024 +0100 Behaviour prompt Prototype of adjustable behaviour system prompt commit a5d671904d4deebf147adc2b728bdc5b36627144 Author: frdel <38891707+frdel@users.noreply.github.com> Date: Sun Oct 27 18:04:40 2024 +0100 Settings prototype Settings modal window managed from python - work in progress

frdel committed Dec 15, 2024 at 18:07 UTC 2b63e7c90edd596481a8148c82fef7d1879da814
43 files changed +2996 -1167
README.md
+93 -81
@@ -2,116 +2,128 @@
2
3 [![Join our Skool Community](https://img.shields.io/badge/Skool-Join%20our%20Community-4A90E2?style=for-the-badge&logo=skool&logoColor=white)](https://www.skool.com/agent-zero) [![Join our Discord](https://img.shields.io/badge/Discord-Join%20our%20server-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/B8KZKNsPpj) [![Subscribe on YouTube](https://img.shields.io/badge/YouTube-Subscribe-red?style=for-the-badge&logo=youtube&logoColor=white)](https://www.youtube.com/@AgentZeroFW) [![Connect on LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-blue?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/jan-tomasek/) [![Follow on X.com](https://img.shields.io/badge/X.com-Follow-1DA1F2?style=for-the-badge&logo=x&logoColor=white)](https://x.com/JanTomasekDev)
4
5 -
5 [![Intro Video](/docs/res/new_vid.jpg)](https://www.youtube.com/watch?v=U_Gl0NPalKA)
6
7 **Personal and organic AI framework**
8 +
9 - Agent Zero is not a predefined agentic framework. It is designed to be dynamic, organically growing, and learning as you use it.
10 -- Agent Zero is fully transparent, readable, comprehensible, customizable and interactive.
10 +- Agent Zero is fully transparent, readable, comprehensible, customizable, and interactive.
11 - Agent Zero uses the computer as a tool to accomplish its (your) tasks.
12
13 -## Now with Responsive UI, Auto-memory and Reflection:
14 -![Web UI](/docs/res/win_webui2.gif)
15 -
16 -## Key concepts
17 -1. **General-purpose assistant**
18 -- Agent Zero is not pre-programmed for specific tasks (but can be). It is meant to be a general-purpose personal assistant. Give it a task, and it will gather information, execute commands and code, cooperate with other agent instances, and do its best to accomplish it.
19 -- It has a persistent memory, allowing it to memorize previous solutions, code, facts, instructions, etc., to solve tasks faster and more reliably in the future.
20 -
21 -2. **Computer as a tool**
22 -- Agent Zero uses the operating system as a tool to accomplish its tasks. It has no single-purpose tools pre-programmed. Instead, it can write its own code and use the terminal to create and use its own tools as needed.
23 -- The only default tools in its arsenal are online search, memory features, communication (with the user and other agents), and code/terminal execution. Everything else is created by the agent itself or can be extended by the user.
24 -- Tool usage functionality has been developed from scratch to be the most compatible and reliable, even with very small models.
25 -
26 -* **Default Tools:** Agent Zero includes tools like knowledge, webpage content, code execution, and communication.
27 -* **Creating Custom Tools:** Extend Agent Zero's functionality by creating your own custom tools.
28 -* **Instruments:** Instruments are a new type of tool that allow you to create custom functions and procedures that can be called by Agent Zero.
29 -
30 -3. **Multi-agent cooperation**
31 -- Every agent has a superior agent giving it tasks and instructions. Every agent then reports back to its superior.
32 -- In the case of the first agent in the chain (Agent 0), the superior is the human user; the agent sees no difference.
33 -- Every agent can create its subordinate agent to help break down and solve subtasks. This helps all agents keep their context clean and focused.
34 -
35 -4. **Completely customizable and extensible**
36 -- Almost nothing in this framework is hard-coded. Nothing is hidden. Everything can be extended or changed by the user.
37 -- The whole behavior is defined by a system prompt in the **prompts/default/agent.system.md** file. Change this prompt and change the framework dramatically.
38 -- The framework does not guide or limit the agent in any way. There are no hard-coded rails that agents have to follow.
39 -- Every prompt, every small message template sent to the agent in its communication loop, can be found in the **prompts/** folder and changed.
40 -- Every default tool can be found in the **python/tools/** folder and changed or copied to create new predefined tools.
41 -- Of course, it is open-source (except for some tools like Perplexity, but that will be replaced with an open-source alternative as well in the future).
42 -
43 -5. **Communication is key**
44 -- Give your agent a proper system prompt and instructions, and it can do miracles.
45 -- Agents can communicate with their superiors and subordinates, asking questions, giving instructions, and providing guidance. Instruct your agents in the system prompt on how to communicate effectively.
46 -- The terminal interface is real-time streamed and interactive. You can stop and intervene at any point. If you see your agent heading in the wrong direction, just stop and tell it right away.
47 -- There is a lot of freedom in this framework. You can instruct your agents to regularly report back to superiors asking for permission to continue. You can instruct them to use point-scoring systems when deciding when to delegate subtasks. Superiors can double-check subordinates' results and dispute. The possibilities are endless.
13 +## Now fully Dockerized, with TTS and STT:
14 +
15 +![Dockerized Agent Zero](https://github.com/user-attachments/assets/58e5462b-481d-4f43-8a4c-e989b9acfdf7)
16 +
17 +## Key Concepts
18 +
19 +1. **General-purpose Assistant**
20 + - Agent Zero is not pre-programmed for specific tasks (but can be). It is meant to be a general-purpose personal assistant. Give it a task, and it will gather information, execute commands and code, cooperate with other agent instances, and do its best to accomplish it.
21 + - It has a persistent memory, allowing it to memorize previous solutions, code, facts, instructions, etc., to solve tasks faster and more reliably in the future.
22 +
23 +2. **Computer as a Tool**
24 + - Agent Zero uses the operating system as a tool to accomplish its tasks. It has no single-purpose tools pre-programmed. Instead, it can write its own code and use the terminal to create and use its own tools as needed.
25 + - The only default tools in its arsenal are online search, memory features, communication (with the user and other agents), and code/terminal execution. Everything else is created by the agent itself or can be extended by the user.
26 + - Tool usage functionality has been developed from scratch to be the most compatible and reliable, even with very small models.
27 +
28 + * **Default Tools:** Agent Zero includes tools like knowledge, webpage content, code execution, and communication.
29 + * **Creating Custom Tools:** Extend Agent Zero's functionality by creating your own custom tools.
30 + * **Instruments:** Instruments are a new type of tool that allow you to create custom functions and procedures that can be called by Agent Zero.
31 +
32 +3. **Multi-agent Cooperation**
33 + - Every agent has a superior agent giving it tasks and instructions. Every agent then reports back to its superior.
34 + - In the case of the first agent in the chain (Agent 0), the superior is the human user; the agent sees no difference.
35 + - Every agent can create its subordinate agent to help break down and solve subtasks. This helps all agents keep their context clean and focused.
36 +
37 +4. **Completely Customizable and Extensible**
38 + - Almost nothing in this framework is hard-coded. Nothing is hidden. Everything can be extended or changed by the user.
39 + - The whole behavior is defined by a system prompt in the **prompts/default/agent.system.md** file. Change this prompt and change the framework dramatically.
40 + - The framework does not guide or limit the agent in any way. There are no hard-coded rails that agents have to follow.
41 + - Every prompt, every small message template sent to the agent in its communication loop can be found in the **prompts/** folder and changed.
42 + - Every default tool can be found in the **python/tools/** folder and changed or copied to create new predefined tools.
43 + - Of course, it is open-source (except for some tools like Perplexity, but that will be replaced with an open-source alternative as well in the future).
44 +
45 +5. **Communication is Key**
46 + - Give your agent a proper system prompt and instructions, and it can do miracles.
47 + - Agents can communicate with their superiors and subordinates, asking questions, giving instructions, and providing guidance. Instruct your agents in the system prompt on how to communicate effectively.
48 + - The terminal interface is real-time streamed and interactive. You can stop and intervene at any point. If you see your agent heading in the wrong direction, just stop and tell it right away.
49 + - There is a lot of freedom in this framework. You can instruct your agents to regularly report back to superiors asking for permission to continue. You can instruct them to use point-scoring systems when deciding when to delegate subtasks. Superiors can double-check subordinates' results and dispute. The possibilities are endless.
50
51 ![Agent Zero](/docs/res/splash_wide.png)
52
51 -## Nice features to have
52 -- Output is very clean, colorful, readable and interactive; nothing is hidden.
53 -- The same colorful output you see in the terminal is automatically saved to HTML file in **logs/** folder for every session.
54 -- Agent output is streamed in real-time, allowing the user to read along and intervene at any time.
55 -- No coding is required, only prompting and communication skills.
53 +## Nice Features to Have
54 +
55 +- The new GUI output is very clean, fluid, colorful, readable, and interactive; nothing is hidden.
56 +- The same colorful output you see in the terminal is automatically saved to an HTML file in **logs/** folder for every session.
57 +- Agent output is streamed in real-time, allowing users to read along and intervene at any time.
58 +- No coding is required; only prompting and communication skills are necessary.
59 - With a solid system prompt, the framework is reliable even with small models, including precise tool usage.
60
61 ![Agent 1 System Load](/docs/res/ui_screen.png)
62
60 -## Keep in mind
61 -1. **Agent Zero can be dangerous!**
62 -With proper instruction, Agent Zero is capable of many things, even potentially dangerous to your computer, data, or accounts. Always run Agent Zero in an isolated environment (like the built in docker container) and be careful what you wish for.
63 +## Keep in Mind
64 +
65 +1. **Agent Zero Can Be Dangerous!**
66 + - With proper instruction, Agent Zero is capable of many things, even potentially dangerous actions concerning your computer, data, or accounts. Always run Agent Zero in an isolated environment (like Docker) and be careful what you wish for.
67
64 -2. **Agent Zero is not pre-programmed; it is prompt-based.**
65 -The whole framework contains only a minimal amount of code and does not guide the agent in any way.
66 -Everything lies in the system prompt in the **prompts/** folder. Here you can rewrite the whole framework behavior to your needs.
67 -If your agent fails to communicate properly, use tools, reason, use memory, find answers - just instruct it better.
68 +2. **Agent Zero Is Not Pre-programmed; It Is Prompt-based.**
69 + - The whole framework contains only a minimal amount of code and does not guide the agent in any way. Everything lies in the system prompt located in the **prompts/** folder.
70
69 -3. **If you cannot provide the ideal environment, let your agent know.**
70 -Agent Zero is made to be used in an isolated virtual environment (for safety) with some tools preinstalled and configured.
71 -If you cannot provide all the necessary conditions or API keys, just change the system prompt and tell your agent what operating system and tools are at its disposal. Nothing is hard-coded; if you do not tell your agent about a certain tool, it will not know about it and will not try to use it.
71 +3. **If You Cannot Provide the Ideal Environment, Let Your Agent Know.**
72 + - Agent Zero is made to be used in an isolated virtual environment (for safety) with some tools preinstalled and configured.
73
74 [![David Ondrej video](/docs/res/david_vid.jpg)](https://www.youtube.com/watch?v=_Pionjv4hGc)
75
75 -## Known problems
76 -1. The system prompt sucks. You can do better. If you do, help me please :)
77 -2. The communication between agents and terminal in Docker Container via SSH can sometimes break and stop producing outputs. Sometimes it is because the agent runs something like "server.serve_forever()" which causes the terminal to hang, sometimes a random error can occur. Restarting the agent and/or the docker container helps.
78 -3. The agent can break his operating system. Sometimes the agent can deactivate virtual environment, uninstall packages, change config etc. Again, removing the docker container and cleaning up the **work_dir/** is enough to fix that.
76 +## Known Problems
77 +
78 +1. The system prompt may need improvements; contributions are welcome!
79 +2. Communication between agents via SSH within Docker containers may occasionally break; restarting might resolve issues.
80 +3. The agent may inadvertently alter its operating environment; cleaning up the **work_dir/** often fixes this.
81
80 -## Ideal environment
81 -- **Docker container**: The perfect environment to run Agent Zero is the built-in docker container. The agent can download the image **frdel/agent-zero-exe** on its own and start the container, you only need to have docker running (like the Docker Desktop application).
82 -- **Python**: Python has to be installed on the system to run the framework.
83 -- **Internet access**: The agent will need internet access to use its online knowledge tool and execute commands and scripts requiring a connection. If you do not need your agent to be online, you can alter its prompts in the **prompts/** folder and make it fully local.
82 +## Ideal Environment
83 +
84 +- **Docker Container**: The ideal environment for running Agent Zero is within a Docker container; ensure Docker is running (e.g., Docker Desktop).
85 +- **Internet Access**: Required for online knowledge tools; adjust prompts if offline operation is preferred.
86
87 ![Time example](/docs/res/time_example.jpg)
88
89 ## Setup
88 -A detailed setup guide for Windows, macOS and Linux with a video can be found in the new Agent Zero Documentation at [this page](docs/installation.md#in-depth-guide-for-windows-and-macos).
90 +
91 +A detailed setup guide for Windows, macOS, and Linux with a video can be found in the new Agent Zero Documentation at [this page](docs/installation.md#windows-macos-and-linux-setup-guide).
92 +
93 +You can download full binaries for your system from the [releases page](https://github.com/frdel/agent-zero/releases).
94
95 ## Consult the Documentation
91 -The documentation dives deep into the framework and its features. It is a good place to start if you are new to Agent Zero. Click [here](docs/README.md) to see the Documentation.
96
93 -## Coming up
94 -- **Preinstalled binaries and bundler scripts**
95 -- **Knowledge tool open-sourcing and web scraping tool**
96 -- **User interaction refinements**
97 -- **In-context switchable LLMs**
97 +The documentation dives deep into the framework's features; it's an excellent starting point for new users. Click [here](docs/README.md) for more information.
98 +
99 +## Coming Up
100 +
101 +- **User Interaction Refinements**
102 +- **Browser Use and RAG Tools**
103
104 ### Changelog [since version 0.7]
105
101 -#### v0.7.1
102 -- **Persistent Chats** - Serialized to /tmp/chats and automatically loaded in run_ui.py on startup
103 -- **Documentation stack merged into the repository**
104 -- **Bug Fixes**
106 +> [!IMPORTANT]
107 +>
108 +> **Changes to frdel/agent-zero Docker image since v0.8:**
109 +>
110 +> - In version 0.8, the Docker image has changed to frdel/agent-zero-run using a new Dockerfile and image.
111 +
112 +#### v0.8
113 +- **Docker Runtime**
114 +- **New Messages History and Summarization System**
115 +- **Agent Behavior Change and Management**
116 +- **Text-to-Speech (TTS) and Speech-to-Text (STT)**
117 +- **Settings Page in Web UI**
118 +- **SearXNG Integration Replacing Perplexity + DuckDuckGo Knowledge Tool**
119 +- **File Browser Functionality**
120 +- **KaTeX Math Visualization Support**
121 +- **In-chat File Attachments**
122
123 #### v0.7
107 -- **Automatic memory**
108 -- **UI improvements**
124 +- **Automatic Memory**
125 +- **UI Improvements**
126 - **Instruments**
110 -- **Extensions framework**
111 -- **Reflection prompts**
112 -- **Bugfixes**
113 -
114 -> [!NOTE]
115 -> **Changes to launch files since v0.6:**
116 -> - main.py file has been replaced with run_ui.py (webui) and run_cli.py (terminal) launch files.
117 -> - configuration has been moved to initialize.py for both webui and terminal launch files.
\ No newline at end of file
127 +- **Extensions Framework**
128 +- **Reflection Prompts**
129 +- **Bug Fixes**
docs/README.md
+34 -52
@@ -3,80 +3,62 @@
3 To begin with Agent Zero, follow the links below for detailed guides on various topics:
4
5 - **[Installation](installation.md):** Set up (or [update](installation.md#how-to-update-agent-zero)) Agent Zero on your system.
6 -- **[Quick Start](quickstart.md):** Begin using Agent Zero with practical examples.
7 -- **[Usage Guide](usage.md):** Explore advanced features and capabilities.
6 +- **[Usage Guide](usage.md):** Explore GUI features and usage scenarios.
7 - **[Architecture Overview](architecture.md):** Understand the internal workings of the framework.
8 - **[Contributing](contribution.md):** Learn how to contribute to the Agent Zero project.
9 - **[Troubleshooting and FAQ](troubleshooting.md):** Find answers to common issues and questions.
11 -##
10 +
11 ### Your experience with Agent Zero starts now!
12
14 -- **Download Agent Zero:** Download the latest release from the [GitHub releases page](https://github.com/frdel/agent-zero/releases).
13 +- **Download Agent Zero:** Follow the [installation guide](installation.md) to download and run Agent Zero.
14 - **Join the Community:** Join the Agent Zero [Skool](https://www.skool.com/agent-zero) or [Discord](https://discord.gg/Z2tun2N3) community to discuss ideas, ask questions, and collaborate with other contributors.
15 - **Share your Work:** Share your Agent Zero creations, workflows and discoverings on our [Show and Tell](https://github.com/frdel/agent-zero/discussions/categories/show-and-tell) area on GitHub.
16 - **Report Issues:** Use the [GitHub issue tracker](https://github.com/frdel/agent-zero/issues) to report framework-relative bugs or suggest new features.
18 -##
17 +
18 ## Table of Contents
19
20 - [Welcome to the Agent Zero Documentation](#agent-zero-documentation)
22 - - [Key Features](#key-features)
23 - - [Start your experience with Agent Zero](#your-experience-with-agent-zero-starts-now)
21 + - [Your Experience with Agent Zero](#your-experience-with-agent-zero-starts-now)
22 - [Table of Contents](#table-of-contents)
25 -- [Installation guide for Windows, MacOS and Linux](installation.md)
26 - - [Windows Quick Start](installation.md#windows-quick-start)
27 - - [macOS Quick Start](installation.md#macos-quick-start)
28 - - [Linux Quick Start](installation.md#linux-quick-start)
29 - - [In-Depth Guide for Windows and MacOS](installation.md#in-depth-guide-for-windows-and-macos)
30 - - [1. Install Conda (miniconda)](installation.md#1-install-conda-miniconda)
31 - - [2. Install Docker (Docker Desktop application)](installation.md#2-install-docker-docker-desktop-application)
32 - - [3. Download Agent Zero](installation.md#3-download-agent-zero)
33 - - [4. Set up Conda environment](installation.md#4-set-up-conda-environment)
34 - - [5. Configure Agent Zero](installation.md#5-configure-agent-zero)
35 - - [6. Run Agent Zero](installation.md#6-run-agent-zero)
36 - - [Choosing Your LLMs](installation.md#choosing-your-llms)
37 - - [Installing and Using Ollama](installation.md#installing-and-using-ollama-local-models)
38 - - [How to update Agent Zero](installation.md#how-to-update-agent-zero)
39 - - [How to create executable files for Agent Zero](installation.md#how-to-create-executable-files-for-agent-zero-in-windows-macos-and-linux)
40 - - [Conclusion](installation.md#conclusion)
41 -- [Quick Start](quickstart.md)
42 - - [Launching the Web UI](quickstart.md#launching-the-web-ui)
43 - - [Running a Simple Task](quickstart.md#running-a-simple-task)
44 - - [Example Interaction](quickstart.md#example-interaction)
45 - - [Next Steps](quickstart.md#next-steps)
23 +- [Installation Guide](installation.md)
24 + - [Windows, macOS and Linux Setup](installation.md#windows-macos-and-linux-setup-guide)
25 + - [Settings Configuration](installation.md#settings-configuration)
26 + - [Choosing Your LLMs](installation.md#choosing-your-llms)
27 + - [Installing and Using Ollama](installation.md#installing-and-using-ollama-local-models)
28 + - [Using Agent Zero on Mobile](installation.md#using-agent-zero-on-your-mobile-device)
29 + - [How to Update Agent Zero](installation.md#how-to-update-agent-zero)
30 + - [Full Binaries Installation](installation.md#in-depth-guide-for-full-binaries-installation)
31 - [Usage Guide](usage.md)
32 + - [Basic Operations](usage.md#basic-operations)
33 + - [Restart Framework](usage.md#restart-framework)
34 + - [Action Buttons](usage.md#action-buttons)
35 + - [File Attachments](usage.md#file-attachments)
36 - [Tool Usage](usage.md#tool-usage)
48 - - [Prompt Engineering](usage.md#prompt-engineering)
37 - [Example of Tools Usage](usage.md#example-of-tools-usage-web-search-and-code-execution)
50 - - [Memory Management](usage.md#memory-management)
38 - [Multi-Agent Cooperation](usage.md#multi-agent-cooperation)
52 - - [Agent Behavior](usage.md#agent-behavior)
53 - - [Using Agent Zero on your mobile device](usage.md#using-agent-zero-on-your-mobile-device)
54 - - [Using code_execution_tool outside of the Docker Container](usage.md#using-code_execution_tool-outside-of-the-docker-container)
39 + - [Prompt Engineering](usage.md#prompt-engineering)
40 + - [Voice Interface](usage.md#voice-interface)
41 + - [Mathematical Expressions](usage.md#mathematical-expressions)
42 + - [File Browser](usage.md#file-browser)
43 - [Architecture Overview](architecture.md)
44 + - [System Architecture](architecture.md#system-architecture)
45 + - [Runtime Architecture](architecture.md#runtime-architecture)
46 - [Core Components](architecture.md#core-components)
57 - - [Agent Hierarchy and Communication](architecture.md#agent-hierarchy-and-communication)
58 - - [Interaction Flow](architecture.md#interaction-flow)
59 - - [Memory System](architecture.md#memory-system)
60 - - [Tools](architecture.md#tools)
61 - - [Knowledge](architecture.md#knowledge)
62 - - [Prompts](architecture.md#prompts)
63 - - [Extensions](architecture.md#extensions)
64 - - [Structure of Extensions](architecture.md#structure-of-extensions)
65 - - [Types of Default Extensions](architecture.md#types-of-default-extensions)
66 - - [Key Files](architecture.md#key-files)
67 - - [Directory Structure](architecture.md#directory-structure)
47 + - [Agents](architecture.md#1-agents)
48 + - [Tools](architecture.md#2-tools)
49 + - [SearXNG Integration](architecture.md#searxng-integration)
50 + - [Memory System](architecture.md#3-memory-system)
51 + - [Prompts](architecture.md#4-prompts)
52 + - [Knowledge](architecture.md#5-knowledge)
53 + - [Instruments](architecture.md#6-instruments)
54 + - [Extensions](architecture.md#7-extensions)
55 + - [Implementation Details](architecture.md#implementation-details)
56 - [Customization](architecture.md#customization)
69 - - [Custom Prompts](architecture.md#custom-prompts)
70 - - [Changing the System Prompt Folder](architecture.md#changing-the-system-prompt-folder)
71 - - [AgentConfig](architecture.md#agentconfig)
72 - - [Adding Tools](architecture.md#adding-tools)
73 - - [Adding Instruments](architecture.md#adding-instruments)
74 - - [Adding Extensions](architecture.md#adding-extensions)
75 -- [Contributing to Agent Zero](contribution.md)
57 +- [Contributing](contribution.md)
58 - [Getting Started](contribution.md#getting-started)
59 - [Making Changes](contribution.md#making-changes)
60 - [Submitting a Pull Request](contribution.md#submitting-a-pull-request)
61 - [Documentation Stack](contribution.md#documentation-stack)
80 -- [FAQ and Troubleshooting](troubleshooting.md)
62 +- [Troubleshooting and FAQ](troubleshooting.md)
63 - [Frequently Asked Questions](troubleshooting.md#frequently-asked-questions)
64 - [Troubleshooting](troubleshooting.md#troubleshooting)
\ No newline at end of file
docs/architecture.md
+273 -151
@@ -1,199 +1,321 @@
1 # Architecture Overview
2 -Agent Zero is built on a flexible and modular architecture designed for extensibility and customization. This section outlines the key components and the interactions between them. This simplified diagram illustrates the hierarchical relationship between agents and their interaction with tools, extensions, instruments, prompts, memory and knowledge base.
2 +Agent Zero is built on a flexible and modular architecture designed for extensibility and customization. This section outlines the key components and the interactions between them.
3
4 -![Agent Zero Architecture](res/arch-01.svg)
5 -
6 -The user or Agent 0 is at the top of the hierarchy, delegating tasks to subordinate agents, which can further delegate to other agents. Each agent can utilize tools and access the shared assets (prompts, memory, knowledge, extensions and instruments) to perform its tasks.
4 +## System Architecture
5 +This simplified diagram illustrates the hierarchical relationship between agents and their interaction with tools, extensions, instruments, prompts, memory and knowledge base.
6
8 -## Core Components
9 -Agent Zero's architecture revolves around the following key components:
7 +![Agent Zero Architecture](res/arch-01.svg)
8
11 -1. **Agents:** The core actors within the framework. Agents receive instructions, reason, make decisions, and utilize tools to achieve their objectives. Agents operate within a hierarchical structure, with superior agents delegating tasks to subordinate agents.
9 +The user or Agent 0 is at the top of the hierarchy, delegating tasks to subordinate agents, which can further delegate to other agents. Each agent can utilize tools and access the shared assets (prompts, memory, knowledge, extensions and instruments) to perform its tasks.
10
13 -2. **Tools:** Tools are functionalities that agents can leverage. These can include anything from web search and code execution to interacting with APIs or controlling external software. Agent Zero provides a mechanism for defining and integrating both built-in and custom tools.
11 +## Runtime Architecture
12 +Agent Zero's runtime architecture is built around Docker containers:
13
15 -3. **Memory:** Agent Zero has persistent, long-term memory to store past experiences, knowledge, and information. This memory is used to inform decision-making and improve performance over time. Learn more in [Memory System](#memory-system)
14 +1. **Host System**:
15 + - Requires only Docker and a web browser
16 + - Runs Docker Desktop or Docker Engine
17 + - Handles container orchestration
18
17 -4. **Prompts:** Guide agent's behavior and communication. The system and tools prompts defines the agent's overall role and objectives, while message prompts structure the interaction and flow of information and memory.
19 +2. **Runtime Container**:
20 + - Houses the complete Agent Zero framework
21 + - Manages the Web UI and API endpoints
22 + - Handles all core functionalities including code execution
23 + - Provides a standardized environment across all platforms
24
19 -5. **Knowledge:** Refers to the user-provided information and data that agents can leverage. This can include documents, databases, or any other relevant resources. Agents can retrieve and utilize this knowledge to answer questions, make decisions, and perform RAG-augmented tasks.
25 +This architecture ensures:
26 +- Consistent environment across platforms
27 +- Simplified deployment and updates
28 +- Enhanced security through containerization
29 +- Reduced dependency requirements on host systems
30 +- Flexible deployment options for advanced users
31
21 -6. **Instruments:** Instruments provide a way to add custom functionalities to Agent Zero. They can modify agent behavior introducing new procedures, function calls, or scripts to integrate with other systems. Instruments scripts are run inside the Docker Container.
32 +> [!NOTE]
33 +> The legacy approach of running Agent Zero directly on the host system (using Python, Conda, etc.)
34 +> is still possible but requires Remote Function Calling (RFC) configuration through the Settings
35 +> page. See [Full Binaries Installation](installation.md#in-depth-guide-for-full-binaries-installation)
36 +> for detailed instructions.
37
23 -7. **Extensions:** Extensions are logical components that can be added to Agent Zero to enhance its capabilities. Extensions can include new message loops, custom memory management rules, or even more.
38 +## Core Components
39 +Agent Zero's architecture revolves around the following key components:
40
25 -8. **Docker Container:** Agent Zero execute code commands in a Docker container, which provides isolation and security. This ensures that agents can safely and securely interact with tools, especially when running code.
41 +### 1. Agents
42 +The core actors within the framework. Agents receive instructions, reason, make decisions, and utilize tools to achieve their objectives. Agents operate within a hierarchical structure, with superior agents delegating tasks to subordinate agents.
43
27 -## Agent Hierarchy and Communication
44 +#### Agent Hierarchy and Communication
45 Agent Zero employs a hierarchical agent structure, where a top-level agent (often the user) can delegate tasks to subordinate agents. This hierarchy allows for the efficient breakdown of complex tasks into smaller, more manageable sub-tasks.
46
30 -Communication flows between agents through messages, which are structured according to the prompt templates. These messages typically include:
47 +Communication flows between agents through messages, which are structured according to the prompt templates. These messages typically include:
48
49 | Argument | Description |
50 | --- | --- |
34 -| `Thoughts:` | The agent's Chain of Thought and planning process. |
35 -| `Tool name:` | The specific tool used by the agent. |
36 -| `Responses or queries:` | Results, feedback or queries from tools or other agents. |
51 +| `Thoughts:` | The agent's Chain of Thought and planning process |
52 +| `Tool name:` | The specific tool used by the agent |
53 +| `Responses or queries:` | Results, feedback or queries from tools or other agents |
54
38 -## Interaction Flow
55 +#### Interaction Flow
56 A typical interaction flow within Agent Zero might look like this:
57
58 ![Interaction Flow](res/flow-01.svg)
59
43 -1. The user provides an instruction to Agent 0.
44 -2. Agent 0 initializes VectorDB and access memory.
45 -3. Agent 0 analyzes the instruction and formulates a plan using `thoughts` argument, possibly involving the use of tools or the creation of sub-agents.
46 -4. If necessary, Agent 0 delegates sub-tasks to subordinate agents.
47 -5. Agents use tools to perform actions, both providing arguments and responses or queries.
48 -6. Agents communicate results and feedback back up the hierarchy.
49 -7. Agent 0 provides the final response to the user.
60 +1. The user provides an instruction to Agent 0
61 +2. Agent 0 initializes VectorDB and access memory
62 +3. Agent 0 analyzes the instruction and formulates a plan using `thoughts` argument, possibly involving the use of tools or the creation of sub-agents
63 +4. If necessary, Agent 0 delegates sub-tasks to subordinate agents
64 +5. Agents use tools to perform actions, both providing arguments and responses or queries
65 +6. Agents communicate results and feedback back up the hierarchy
66 +7. Agent 0 provides the final response to the user
67
51 -## Memory System
52 -The memory system is a critical component of Agent Zero, enabling the agent to learn and adapt from past interactions. It operates on a hybrid model where part of the memory is managed automatically by the framework while users can also manually input and extract information.
53 -- **Memory Loading**: At the start of each session, relevant memories are automatically loaded and injected into the system prompt, allowing the agent to utilize past interactions effectively.
54 -- **Memory Structure**: The memory is categorized into four distinct areas:
55 - - **Storage and retrieval** of user-provided information (e.g., names, API keys).
56 - - **Fragments**: Contains pieces of information from previous conversations, updated automatically.
57 - - **Solutions**: Stores successful solutions from past interactions for future reference.
58 - - **Metadata**: Each memory entry includes metadata (IDs, timestamps), enabling efficient filtering and searching based on specific criteria.
68 +### 2. Tools
69 +Tools are functionalities that agents can leverage. These can include anything from web search and code execution to interacting with APIs or controlling external software. Agent Zero provides a mechanism for defining and integrating both built-in and custom tools.
70
60 -## Tools
61 -**Built-in Tools:** Agent Zero comes with a set of built-in tools, including web search and code execution. These tools are general-purpose and designed to help agents perform tasks efficiently:
71 +#### Built-in Tools
72 +Agent Zero comes with a set of built-in tools designed to help agents perform tasks efficiently:
73
74 | Tool | Function |
75 | --- | --- |
65 -| call_subordinate | Allows agents to delegate tasks to subordinate agents. |
66 -| code_execution_tool | Allows agents to execute Python, Node.js, and Shell code in the terminal of the Docker container. |
67 -| knowledge_tool | Enables agents to retrieve information from memory, knowledge base or online external sources. |
68 -| response_tool | Allows agents to output a response. |
69 -| memory_tool | Enables agents to save, load, delete and forget information from memory. |
70 -| webpage_content_tool | Enables agents to fetch and analyze the text content of webpages. |
76 +| call_subordinate | Allows agents to delegate tasks to subordinate agents |
77 +| code_execution_tool | Allows agents to execute Python, Node.js, and Shell code in the terminal of the Docker container |
78 +| knowledge_tool | Enables agents to retrieve information from memory, knowledge base or online external sources |
79 +| response_tool | Allows agents to output a response |
80 +| memory_tool | Enables agents to save, load, delete and forget information from memory |
81 +| webpage_content_tool | Enables agents to fetch and analyze the text content of webpages |
82
72 -- **Knowledge Tool:** The `knowledge_tool` uses DuckDuckGo and Perplexity APIs to search the web and retrieve information. It can also search the local knowledge base and memory for relevant information. The tool returns a summary of the information, which can be used by the agent to make decisions or answer questions.
83 +#### Knowledge Tool
84 +The `knowledge_tool` uses SearXNG to search the web and retrieve information. It can also search the local knowledge base and memory for relevant information. The tool returns a summary of the information, which can be used by the agent to make decisions or answer questions.
85
74 -> [!TIP]
75 -> The Perplexity API key is the only service recommended for a full experience of
76 -> Agent Zero, but you can use DuckDuckGo by leaving the Perplexity API key value
77 -> empty. DuckDuckGo usage in Agent Zero is free of charge but has its rate limits.
78 -
79 -> [!NOTE]
80 -> It's important to note that the DuckDuckGo API is not as powerful as Perplexity
81 -> and may not return accurate or relevant results for some queries. The Perplexity
82 -> API is yet to be replaced with an open-source alternative.
86 +##### SearXNG Integration
87 +Agent Zero has integrated SearXNG as its primary search tool, replacing the previous knowledge tools (Perplexity and DuckDuckGo). This integration enhances the agent's ability to retrieve information while ensuring user privacy and customization.
88 +
89 +- Privacy-Focused Search
90 +SearXNG is an open-source metasearch engine that allows users to search multiple sources without tracking their queries. This integration ensures that user data remains private and secure while accessing a wide range of information.
91
84 -- **Custom Tools:** Users can create custom tools to extend Agent Zero's capabilities. Custom tools can be integrated into the framework by defining a tool specification, which includes the tool's prompt to be placed in `/prompts/$FOLDERNAME/agent.system.tool.$TOOLNAME.md`, as further detailed [here](#adding-tools).
92 +- Enhanced Search Capabilities
93 +The integration provides access to various types of content, including images, videos, and news articles, allowing users to gather comprehensive information on any topic.
94
86 -- **Tools vs. Instruments:** Tools are always present in system prompt, so you should keep them to minimum. To save yourself some tokens, use the [Instruments module](#adding-instruments) to call custom scripts or functions.
95 +- Fallback Mechanism
96 +In cases where SearXNG might not return satisfactory results, Agent Zero can be configured to fall back on other sources or methods, ensuring that users always have access to information.
97
88 -## Instruments
89 -- **Instruments:** Instruments allows you to add predefined actions or workflows to Agent Zero without adding to the token count of the system prompt. You can have unlimited amount of instruments, they are stored in long-term memory of Agent Zero, and recalled when needed. To create Instruments, see [Adding Instruments](#adding-instruments).
98 +> [!NOTE]
99 +> The Knowledge Tool is designed to work seamlessly with both online searches through
100 +> SearXNG and local knowledge base queries, providing a comprehensive information
101 +> retrieval system.
102
91 -## Knowledge
92 -- **Custom Knowledge:** Users can add custom knowledge files to the `/knowledge/custom/main` directory. Agent Zero will automatically import these files, expanding its knowledge base. Supported file formats include `.txt`, `.pdf`, `.csv`, `.html`, `.json`, and `.md`. The list of supported file formats is yet to be expanded.
93 -- **Knowledge Base:** PDFs, databases, books, code documentation, and other documents can be added to the knowledge base. Agent Zero uses this information to answer questions and make decisions. The `/docs` folder, containing Agent Zero's documentation stack, is automatically added to the knowledge base.
103 +#### Custom Tools
104 +Users can create custom tools to extend Agent Zero's capabilities. Custom tools can be integrated into the framework by defining a tool specification, which includes the tool's prompt to be placed in `/prompts/$FOLDERNAME/agent.system.tool.$TOOLNAME.md`, as detailed in [Adding Tools](#adding-tools).
105
95 -## Prompts
96 -The `prompts` directory contains various Markdown files that control agent behavior and communication. The most important file is `agent.system.main.md`, which acts as a central hub, referencing other prompt files.
106 +> [!NOTE]
107 +> Tools are always present in system prompt, so you should keep them to minimum.
108 +> To save yourself some tokens, use the [Instruments module](#adding-instruments)
109 +> to call custom scripts or functions.
110
98 -**Key Prompt Files:**
111 +### 3. Memory System
112 +The memory system is a critical component of Agent Zero, enabling the agent to learn and adapt from past interactions. It operates on a hybrid model where part of the memory is managed automatically by the framework while users can also manually input and extract information.
113 +
114 +#### Memory Structure
115 +The memory is categorized into four distinct areas:
116 +- **Storage and retrieval** of user-provided information (e.g., names, API keys)
117 +- **Fragments**: Contains pieces of information from previous conversations, updated automatically
118 +- **Solutions**: Stores successful solutions from past interactions for future reference
119 +- **Metadata**: Each memory entry includes metadata (IDs, timestamps), enabling efficient filtering and searching based on specific criteria
120 +
121 +#### Messages History and Summarization
122 +Agent Zero implements a sophisticated message history and summarization system that helps maintain context while optimizing memory usage:
123 +
124 +- **Message Summaries**: Individual messages are summarized using a structured JSON format that captures key information while reducing token usage
125 +- **Dynamic Compression**: The system employs an intelligent compression strategy:
126 + - Recent messages remain in their original form for immediate context
127 + - Older messages are gradually compressed into more concise summaries
128 + - Multiple compression levels allow for efficient context window usage
129 + - Original messages are preserved separately from summaries
130 +- **Dual-Access Memory**: The system maintains two parallel streams of information:
131 + - Compressed summaries in the context window for quick reference
132 + - Original messages stored separately for detailed recall when needed
133 +- **Context Window Optimization**:
134 + - Acts as a near-infinite short-term memory for single conversations
135 + - Automatically balances detail level based on message age and importance
136 + - Maintains searchable indexes for efficient information retrieval
137 + - Dynamically adjusts compression ratios based on available space
138 +- **Bulk and Topic Summarization**:
139 + - Groups related messages into thematic chunks for better organization
140 + - Generates concise summaries of multiple messages while preserving key context
141 + - Enables efficient navigation of long conversation histories
142 + - Maintains semantic connections between related topics
143 +
144 +### 4. Prompts
145 +The `prompts` directory contains various Markdown files that control agent behavior and communication. The most important file is `agent.system.main.md`, which acts as a central hub, referencing other prompt files.
146 +
147 +#### Core Prompt Files
148 | Prompt File | Description |
149 |---|---|
101 -| agent.system.main.role.md | Defines the agent's overall role. |
102 -| agent.system.main.communication.md | Specifies how the agent should communicate. |
103 -| agent.system.main.solving.md | Describes the agent's approach to tasks. |
104 -| agent.system.main.tips.md | Provides additional tips or guidance to the agent. |
105 -| agent.system.tools.md | Organizes and calls the individual tool prompt files. |
106 -| agent.system.tool.*.md | Individual tool prompt files (with * as the tool name). |
150 +| agent.system.main.role.md | Defines the agent's overall role and capabilities |
151 +| agent.system.main.communication.md | Specifies how the agent should communicate |
152 +| agent.system.main.solving.md | Describes the agent's approach to tasks |
153 +| agent.system.main.tips.md | Provides additional tips or guidance |
154 +| agent.system.main.behaviour.md | Controls dynamic behavior adjustments and rules |
155 +| agent.system.main.environment.md | Defines the runtime environment context |
156 +| agent.system.tools.md | Organizes and calls the individual tool prompt files |
157 +| agent.system.tool.*.md | Individual tool prompt files |
158 +
159 +#### Prompt Organization
160 +- **Default Prompts**: Located in `prompts/default/`, serve as the base configuration
161 +- **Custom Prompts**: Can be placed in custom subdirectories (e.g., `prompts/my-custom/`)
162 +- **Behavior Files**: Stored in memory as `behaviour.md`, containing dynamic rules
163 +- **Tool Prompts**: Organized in tool-specific files for modularity
164 +
165 +#### Dynamic Behavior System
166 +- **Behavior Adjustment**:
167 + - Agents can modify their behavior in real-time based on user instructions
168 + - Behavior changes are automatically integrated into the system prompt
169 + - Behavioral rules are merged intelligently, avoiding duplicates and conflicts
170 +
171 +- **Behavior Management Components**:
172 + - `behaviour_adjustment.py`: Core tool for updating agent behavior
173 + - `_20_behaviour_prompt.py`: Extension that injects behavior rules into system prompt
174 + - Custom rules stored in the agent's memory directory as `behaviour.md`
175 +
176 +- **Behavior Update Process**:
177 + 1. User requests behavior changes (e.g., "respond in UK English")
178 + 2. System identifies behavioral instructions in conversation
179 + 3. New rules are merged with existing ruleset
180 + 4. Updated behavior is immediately applied
181 +
182 +![Behavior Adjustment](res/ui-behavior-change-chat.png)
183 +
184 +- **Integration with System Prompt**:
185 + - Behavior rules are injected at the start of the system prompt
186 + - Rules are formatted in a structured markdown format
187 + - Changes are applied without disrupting other components
188 + - Maintains separation between core functionality and behavioral rules
189
190 > [!NOTE]
109 -> You can customize any of these files. Agent Zero will use the files in your custom `prompts_subdir`
191 +> You can customize any of these files. Agent Zero will use the files in your custom `prompts_subdir`
192 > if they exist, otherwise, it will fall back to the files in `prompts/default`.
193
112 -## Extensions
113 -- Extensions are a powerful feature of Agent Zero, designed to keep the main codebase clean and organized while allowing for greater flexibility and modularity. Here’s a detailed exploration of the extensions feature:
114 -### Structure of Extensions
115 -Extensions can be found in `python/extensions` directory.
116 -- **Folder Organization**: The extensions are stored in a designated subfolder within the Python directory. This includes various subfolders that correspond to different aspects of the agent's message loop.
117 -- **Execution Order**: Files within these subfolders are executed in alphabetical order, ensuring predictable behavior when multiple extensions are utilized.
118 -### Types of Default Extensions
119 -- **Message Loop Prompts**: These extensions handle the construction of system messages and maintain message history, ensuring that the agent has access to relevant context during interactions.
120 -- **Memory Management**: Extensions can also manage memory recall and solution memorization, allowing for dynamic updates based on user interactions.
121 -- **Custom Extensions**: Users can create custom extensions to add new functionalities or modify existing ones. See [Adding Extensions](#adding-extensions) for more details.
122 -
123 -## Key Files
124 -| File | Description |
125 -| --- | --- |
126 -| `agent.py` | Contains the core logic for the `Agent`, `AgentConfig`, and messages classes, which defines the `prompts_subdir`, rate limits for models, and more, though `AgentConfig` class must be edited through `initialize.py` file. |
127 -| `example.env` | Contains environment variables for configuring API keys and other settings of Agent Zero. See more in [Installation](installation.md#5-configure-agent-zero) |
128 -| `initialize.py` | Defines Agent Zero's core configuration, including model choices and other critical settings. This is the central point for customizing the framework's behavior. See [Choosing Your LLMs](installation.md#choosing-your-llms) for more details. |
129 -| `models.py` | Defines the `get_provider_chat` or `..._embedding` functions, which specifies the model provider, model name, and other parameters for adding support for new models or custom models. |
130 -| `requirements.txt` | Lists the dependencies used by pip to install the necessary packages when you setup Agent Zero. |
131 -| `run_cli.py` | Starts the Agent Zero CLI. |
132 -| `run_ui.py` | Starts the Agent Zero Web UI. |
133 -
134 -## Directory Structure
194 +> [!TIP]
195 +> The behavior system allows for dynamic adjustments without modifying the base prompt files.
196 +> Changes made through behavior rules persist across sessions while maintaining the core functionality.
197 +
198 +### 5. Knowledge
199 +Knowledge refers to the user-provided information and data that agents can leverage:
200 +
201 +- **Custom Knowledge**: Add files to `/knowledge/custom/main` directory manually or through the "Import Knowledge" button in the UI
202 + - Supported formats: `.txt`, `.pdf`, `.csv`, `.html`, `.json`, `.md`
203 + - Automatically imported and indexed
204 + - Expandable format support
205 +
206 +- **Knowledge Base**:
207 + - Can include PDFs, databases, books, documentation
208 + - `/docs` folder automatically added
209 + - Used for answering questions and decision-making
210 + - Supports RAG-augmented tasks
211 +
212 +### 6. Instruments
213 +Instruments provide a way to add custom functionalities to Agent Zero without adding to the token count of the system prompt:
214 +- Stored in long-term memory of Agent Zero
215 +- Unlimited number of instruments available
216 +- Recalled when needed by the agent
217 +- Can modify agent behavior by introducing new procedures
218 +- Function calls or scripts to integrate with other systems
219 +- Scripts are run inside the Docker Container
220 +- Implementation details in [Adding Instruments](#adding-instruments)
221 +
222 +### 7. Extensions
223 +Extensions are a powerful feature of Agent Zero, designed to keep the main codebase clean and organized while allowing for greater flexibility and modularity.
224 +
225 +#### Structure
226 +Extensions can be found in `python/extensions` directory:
227 +- **Folder Organization**: Extensions are stored in designated subfolders corresponding to different aspects of the agent's message loop
228 +- **Execution Order**: Files are executed in alphabetical order for predictable behavior
229 +- **Naming Convention**: Files start with numbers to control execution order
230 +- **Modularity**: Each extension focuses on a specific functionality
231 +
232 +#### Types
233 +- **Message Loop Prompts**: Handle system messages and history construction
234 +- **Memory Management**: Handle recall and solution memorization
235 +- **Custom Extensions**: Add new functionalities (see [Adding Extensions](#adding-extensions))
236 +- **Behavior Management**: Handle dynamic behavior adjustments
237 +- **System Integration**: Manage interaction with external systems
238 +
239 +## Implementation Details
240 +
241 +### Directory Structure
242 | Directory | Description |
243 | --- | --- |
137 -| `/bundle` | Contains the scripts for bundling the project into a single exe file for easy distribution. |
138 -| `/docker` | Dockerfiles and related files for building Docker image |
139 -| `/docs` | Quickstart and installation guide |
140 -| `/instruments` | Instruments for interacting with the environment |
141 -| `/knowledge` | Knowledge base for storing and retrieving information |
142 -| `/logs` | HTML chat log files |
143 -| `/memory` | Memory storage for storing and retrieving information |
144 -| `/prompts` | System and tools prompts folders |
145 -| `/python` | Python code for the main system and tools |
146 -| `/python/extensions` | Extensions for the main system |
147 -| `/tests` | Unit tests for the project |
148 -| `/tmp/chats` | Chats files storage directory |
149 -| `/webui` | Web UI |
150 -| `/work_dir` | Working directory for the Agent |
151 -
152 -# Customization
244 +| `/docker` | Docker-related files for runtime container |
245 +| `/docs` | Documentation files and guides |
246 +| `/instruments` | Custom scripts and tools for runtime environment |
247 +| `/knowledge` | Knowledge base storage |
248 +| `/logs` | HTML CLI-style chat logs |
249 +| `/memory` | Persistent agent memory storage |
250 +| `/prompts` | System and tool prompts |
251 +| `/python` | Core Python codebase: |
252 +| &nbsp;&nbsp;`/api` | API endpoints and interfaces |
253 +| &nbsp;&nbsp;`/extensions` | Modular extensions |
254 +| &nbsp;&nbsp;`/helpers` | Utility functions |
255 +| &nbsp;&nbsp;`/tools` | Tool implementations |
256 +| `/tmp` | Temporary runtime data |
257 +| `/webui` | Web interface components: |
258 +| &nbsp;&nbsp;`/css` | Stylesheets |
259 +| &nbsp;&nbsp;`/js` | JavaScript modules |
260 +| &nbsp;&nbsp;`/public` | Static assets |
261 +| `/work_dir` | Working directory |
262 +
263 +### Key Files
264 +| File | Description |
265 +| --- | --- |
266 +| `.env` | Environment configuration |
267 +| `agent.py` | Core agent implementation |
268 +| `example.env` | Configuration template |
269 +| `initialize.py` | Framework initialization |
270 +| `models.py` | Model providers and configs |
271 +| `preload.py` | Pre-initialization routines |
272 +| `prepare.py` | Environment preparation |
273 +| `requirements.txt` | Python dependencies |
274 +| `run_cli.py` | CLI launcher |
275 +| `run_ui.py` | Web UI launcher |
276 +
277 +> [!NOTE]
278 +> When using the Docker runtime container, these directories are mounted
279 +> within the `/a0` volume for data persistence until the container is restarted or deleted.
280 +
281 +## Customization
282 Agent Zero's strength lies in its flexibility. This section details how to customize various aspects of the framework, tailoring it to your specific needs and preferences.
283
155 -## Custom Prompts
156 -### Changing the System Prompt Folder
157 -1. Create a new directory inside the `prompts` directory (e.g., `prompts/my-custom-prompts`).
158 -2. When copying the contents of the `prompts/default` directory into your new directory, take into account that Agent Zero will merge the contents of the `default` directory with the contents of your custom directory. This means that you can copy only the files you want to modify, and the rest will be taken from the `default` directory.
159 -3. Modify the prompts in your custom directory as needed.
160 -4. In `initialize.py`, update the `prompts_subdir` parameter in `AgentConfig` to point to your custom directory:
161 - ```python
162 - config = AgentConfig(..., prompts_subdir="my-prompts-folder", ...)
163 - ```
164 -
165 -## AgentConfig
166 -The `AgentConfig` class is present in both `agent.py` and `initialize.py` and provides further customization options. You must edit `AgentConfig` class through `initialize.py` file. Here are some of the key parameters you can configure:
167 -
168 -- `prompts_subdir`: Specifies the directory containing your custom prompts. This allows you to create and manage different sets of prompts for different use cases. (See *Prompt Customization* below).
169 -
170 -- `knowledge_subdirs`: Defines the directories where Agent Zero searches for knowledge files.
171 -
172 -- **Rate Limiting:** Control API usage and prevent rate limit errors by setting `rate_limit_seconds` and `rate_limit_requests`.
173 -
174 -- **Docker and SSH:** Configure Docker and SSH settings for code execution, if needed. If you need to configure SSH to run on another machine, such as a remote VM, see more in
175 -
176 -## Adding Tools
177 -While good prompting can often achieve the desired behavior, sometimes custom tools are necessary.
178 -
179 -1. Create a new file named `agent.system.tool.$TOOL_NAME.md` inside your `prompts/$SUBDIR` directory. This file will contain the prompt for your custom tool.
180 -2. Open `agent.system.tools.md` and add a reference to your new tool prompt.
181 -3. If your tool requires specific code or external API calls, create a Python file for it in the `python/tools` directory, implementing the `Tool` base class.
182 -
183 -## Adding Instruments
184 -To create a new Instrument, follow these steps:
185 -1. Create a new folder with the name of your instrument (without spaces) inside `instruments/custom`.
186 -2. Inside this folder, create a `.md` file with the description of the instrument and a `.sh` script (or other executable) with the actual implementation. The `.md` file acts as the interface for the Agent to interact with the Instrument, and the agent will call the `.sh` with the given user arguments. The agent will parse the `.md` file, using the Instrument's name, description, and arguments described in it.
187 -3. The agent will automatically detect and use your custom instruments.
188 -
189 -## Adding Extensions
190 -To create a new extension, follow these steps:
191 -1. Create a new Python file in the appropriate subfolder within the `python/extensions` directory.
192 -2. Implement the desired functionality within the file, following the existing structure and naming conventions, that implies following the alphabetical order of execution of the extensions in the subfolder.
193 -3. Your desired extension's name has to start with a number to ensure it is executed before or after an already existing extension based on your needs.
194 -4. Ensure that the extension is compatible with the main system and does not introduce any conflicts or errors.
284 +### AgentConfig
285 +The `AgentConfig` class in `initialize.py` provides various customization options:
286 +
287 +- `prompts_subdir`: Specifies the directory containing your custom prompts
288 +- `knowledge_subdirs`: Defines the directories where Agent Zero searches for knowledge files
289 +- **Rate Limiting:** Control API usage with `rate_limit_seconds` and `rate_limit_requests`
290 +- **Docker and SSH:** Configure execution environment settings
291 +
292 +### Adding Custom Components
293 +
294 +#### Custom Prompts
295 +1. Create directory in `prompts/` (e.g., `my-custom-prompts`)
296 +2. Copy and modify needed files from `prompts/default/`
297 +3. Agent Zero will merge your custom files with the default ones
298 +4. Select your custom prompts in the Settings page
299 +
300 +#### Adding Instruments
301 +1. Create folder in `instruments/custom` (no spaces in name)
302 +2. Add `.md` description file for the interface
303 +3. Add `.sh` script (or other executable) for implementation
304 +4. The agent will automatically detect and use the instrument
305 +
306 +#### Adding Tools
307 +1. Create `agent.system.tool.$TOOL_NAME.md` in `prompts/$SUBDIR`
308 +2. Add reference in `agent.system.tools.md`
309 +3. If needed, implement tool class in `python/tools` using `Tool` base class
310 +4. Follow existing patterns for consistency
311 +
312 +#### Adding Extensions
313 +1. Create Python file in appropriate `python/extensions` subfolder
314 +2. Follow naming convention for execution order (start with number)
315 +3. Implement functionality following existing patterns
316 +4. Ensure compatibility with main system
317 +5. Test thoroughly before deployment
318
319 > [!NOTE]
197 -> If you believe your custom tool, instrument or extension could bring value to the community, consider contributing
198 -> it to the main repository by making a pull request. This will make it available for others to use and benefit from your work.
320 +> Consider contributing valuable custom components to the main repository.
321 > See [Contributing](contribution.md) for more information.
\ No newline at end of file
docs/contribution.md
+1 -3
@@ -11,7 +11,6 @@ Contributions to improve Agent Zero are very welcome! This guide outlines how t
11 ## Making Changes
12
13 * **Code Style:** Follow the existing code style. Agent Zero generally follows PEP 8 conventions.
14 -* **Testing:** Write unit tests for new features. Agent Zero uses the `pytest` framework. Ensure your changes pass all existing and new tests.
14 * **Documentation:** Update the documentation if your changes affect user-facing functionality. The documentation is written in Markdown.
15 * **Commit Messages:** Write clear and concise commit messages that explain the purpose of your changes.
16
@@ -19,8 +18,7 @@ Contributions to improve Agent Zero are very welcome! This guide outlines how t
18
19 1. **Push Your Branch:** Push your branch to your forked repository on GitHub.
20 2. **Create a Pull Request:** Create a pull request from your branch to the appropriate branch in the main Agent Zero repository.
22 - * **For new features, refactoring, or significant changes:** Target the `testing` branch.
23 - * **For bug fixes and patches:** Target the `development` branch.
21 + * Target the `development` branch.
22 3. **Provide Details:** In your pull request description, clearly explain the purpose and scope of your changes. Include relevant context, test results, and any other information that might be helpful for reviewers.
23 4. **Address Feedback:** Be responsive to feedback from the community. We love changes, but we also love to discuss them!
24
docs/installation.md
+435 -212
@@ -1,121 +1,40 @@
1 -# Installation guide for Windows, macOS and Linux
1 +# Users installation guide for Windows, macOS and Linux
2
3 -[![Video](res/setup/thumb_play.png)](https://youtu.be/8H7mFsvxKYQ)
4 -
5 -The following guide provides both quick start instructions for the full installation of Agent Zero on various operating systems and in-depth guides for Windows and macOS with screenshots.
6 -
7 -## You were looking for this? [How to update Agent Zero](#how-to-update-agent-zero)
8 -
9 -<details>
10 -<summary><h2>Windows Quick Start</h2></summary>
11 -
12 -1. **Install Anaconda or Miniconda:** Download and install the appropriate version for your system from [here](https://docs.anaconda.com/anaconda/install/). Miniconda is recommended for a minimal installation.
13 -2. **Create an Environment:** Open Anaconda Navigator (or use the `conda` command), create an environment named `agent-zero`, and select Python 3.12.
14 -3. **Install Docker Desktop:** Download and install Docker Desktop from [here](https://www.docker.com/products/docker-desktop/).
15 -4. **Download Agent Zero:** Download the latest release zip from the [GitHub releases page](https://github.com/frdel/agent-zero/releases) and extract it.
16 -5. **Configure API Keys:** Duplicate `example.env`, rename it to `.env`, and add your API keys.
17 -6. **Install Requirements:** Activate your `agent-zero` environment, open a terminal in the Agent Zero directory, and run: `pip install -r requirements.txt`
18 -7. **Run Agent Zero (Web UI):** Execute `python run_ui.py` in your terminal.
19 -8. **Access the Web UI:** Open the URL displayed in your browser.
20 -
21 -</details>
22 -
23 -<details>
24 -<summary><h2>macOS Quick Start</h2></summary>
25 -
26 -1. **Install Miniconda:** Download the pkg installer from [here](https://docs.anaconda.com/miniconda/#miniconda-latest-installer-links) and follow the instructions.
27 -2. **Install Docker Desktop:** Download the dmg image from [here](https://www.docker.com/products/docker-desktop/), drag the Docker application to your Applications folder, and create a Docker Hub account.
28 -3. **Download Agent Zero:** Download the latest release zip from the [GitHub releases page](https://github.com/frdel/agent-zero/releases) and extract it.
29 -4. **Open Terminal:** Navigate to the Agent Zero directory.
30 -5. **Create Conda Environment:** Run: `conda create -n a0 python=3.12 -y`
31 -6. **Activate Environment:** Run: `conda activate a0`
32 -7. **Install Requirements:** Run: `pip install -r requirements.txt`
33 -8. **Configure API Keys:** Create a `.env` file and add your keys.
34 -9. **Run Agent Zero (Web UI):** Run: `python run_ui.py`
35 -10. **Access the Web UI:** Open the displayed URL.
36 -
37 -> [!IMPORTANT]
38 -> **Important macOS Docker Configuration:** In Docker Desktop's preferences (Docker
39 -> menu) go to Settings, navigate to "Advanced" and check "Allow the default Docker
40 -> socket to be used (requires password)." This allows Agent Zero to communicate
41 -> with the Docker daemon.
42 -
43 -![docker socket macOS](res/setup/macsocket.png)
44 -
45 -</details>
46 -
47 -<details>
48 -<summary><h2>Linux Quick Start</h1></summary>
49 -
50 -1. **Install Python and Pip:** Use your distribution's package manager (e.g., `apt`, `yum`, `dnf`) to install Python 3.12 or higher and pip. On Debian/Ubuntu systems, you would typically use:
51 - ```bash
52 - sudo apt-get update
53 - sudo apt-get install python3.12 python3-pip
54 - ```
55 -2. **Install Miniconda:** Download the appropriate installer for your Linux distribution from [here](https://docs.anaconda.com/miniconda/#miniconda-latest-installer-links) and follow the instructions.
56 -3. **Install Docker:** Install Docker Desktop or Docker CE using your distribution's package manager. Make sure the Docker service is running: `sudo systemctl start docker`
57 -4. **Download Agent Zero:** Download the latest release zip from the [GitHub releases page](https://github.com/frdel/agent-zero/releases) and extract it.
58 -5. **Open Terminal and Navigate:** Open your terminal and navigate to the extracted Agent Zero folder using the `cd` command.
59 -6. **Create and Activate Conda Environment:**
60 - ```bash
61 - conda create -n a0 python=3.12 -y
62 - conda activate a0
63 - ```
64 -7. **Install Requirements:** `pip install -r requirements.txt`
65 -8. **Configure API Keys:** Create a `.env` file in the project root and add your API keys. You can copy the `example.env` file and rename it to `.env`.
66 -9. **Run Agent Zero (Web UI):** `python run_ui.py`
67 -10. **Access the Web UI:** Open the URL displayed in your terminal.
68 -
69 -</details>
70 -
71 -# In-Depth Guide for Windows and macOS
72 -- Agent Zero is not an app. It's a framework. It's made to be customized, edited, enhanced. Therefore you need to install the necessary components to run it.
73 -- The following step by step instructions can be followed along with a video for this tutorial on how to make Agent Zero work on Windows and macOS that you find in the [top section](#installation-guide-for-windows-macos-and-linux) of the page.
74 -
75 -## Reminders:
76 -1. There's no need to install Python, Conda will manage that for you.
77 -2. You don't necessarily need API keys: Agent Zero can run with local models. For this tutorial though, we will leave it to the default OpenAI API. A simple video explanation for running Free and Local models is available [in this video](https://www.youtube.com/watch?v=sLMhLRHDIPY&t=80s).
78 -3. Visual Studio Code or any other code editor is not mandatory, but it makes it easier to navigate and edit files.
79 -4. Docker is not mandatory, but running Agent Zero without Docker is actually more complicated and can be very dangerous, so we will be covering the easier and recommended way - using Docker Desktop application.
80 -5. Git/GitHub is not mandatory, you can download the framework files through your browser. We will not be showing how to use Git in this tutorial.
81 -
82 -## 1. Install Conda (miniconda)
83 -- Conda is a python environment manager, it will help you keep your projects and installations separated. Full Conda has many more features, but you only need "miniconda".
3 +[![Setup Guide](res/setup/thumb_setup.png)](https://www.youtube.com/watch?v=wWAqJpl3uQE)
4
85 -1. Go to the download page of miniconda [here](https://docs.anaconda.com/miniconda/#miniconda-latest-installer-links). If the link does not work, just search the web for "miniconda download".
86 -2. Based on your operating system, download the right installer of miniconda. For macOS select the version with "pkg" at the end.
5 +The following user guide provides instructions for installing and running Agent Zero using Docker, which is the primary runtime environment for the framework. For developers and contributors, we also provide instructions for setting up the [full development environment](#in-depth-guide-for-full-binaries-installation).
6
88 -<img src="res/setup/image-1.png" alt="miniconda download win" width="500"/>
89 -<img src="res/setup/image-5.png" alt="miniconda download macos" width="500"/>
90 -<br><br>
91 -
92 -3. Run the installer and go through the installation process, here you can leave everything to default and just click Next, Next... The same goes for macOS with the "pkg" graphical installer.
93 -
94 -<img src="res/setup/image.png" alt="miniconda install" width="200"/>
95 -<img src="res/setup/image-2.png" alt="miniconda install" width="200"/>
96 -<img src="res/setup/image-3.png" alt="miniconda install" width="200"/>
97 -<img src="res/setup/image-4.png" alt="miniconda install" width="200"/>
98 -<br><br>
7 +### Maybe you're looking for this? 👉[How to update Agent Zero](#how-to-update-agent-zero)
8
100 -4. After the installation is complete, you should have "Anaconda Powershell Prompt" installed on your Windows machine. On macOS, when you open the Terminal application in your Applications folder and type "conda --version", you should see the version installed.
9 +## Windows, macOS and Linux Setup Guide
10
102 -<img src="res/setup/image-6.png" alt="miniconda installed" height="100"/>
103 -<img src="res/setup/image-7.png" alt="miniconda installed" height="100"/>
104 -<br><br>
11 +1. **Install Docker Desktop:**
12 +- Docker Desktop provides the runtime environment for Agent Zero, ensuring consistent behavior and security across platforms
13 +- The entire framework runs within a Docker container, providing isolation and easy deployment
14 +- Available as a user-friendly GUI application for all major operating systems
15
106 -## 2. Install Docker (Docker Desktop application)
107 -- Simply put, Docker is a way of running virtual computers on your machine. These are lightweight, disposable and isolated from your operating system, so it is a way to sandbox Agent Zero.
108 -- Agent Zero only connects to the Docker container when it needs to execute code and commands. The frameworks itself runs on your machine.
109 -- Running Agent Zero without Docker is possible, but more complicated and dangerous, I will not be covering that in this tutorial.
110 -- Docker has a desktop application with GUI for all major operating system, so I will be using that.
16 +1.1. Go to the download page of Docker Desktop [here](https://www.docker.com/products/docker-desktop/). If the link does not work, just search the web for "docker desktop download".
17
112 -1. Go to the download page of Docker Desktop [here](https://www.docker.com/products/docker-desktop/). If the link does not work, just search the web for "docker desktop download".
113 -2. Download the version for your operating system. Don't be tricked by the seemingly missing windows intel/amd version, it's the button itself, not in the dropdown menu.
18 +1.2. Download the version for your operating system. For Windows users, the Intel/AMD version is the main download button.
19
20 <img src="res/setup/image-8.png" alt="docker download" width="200"/>
21 <br><br>
22
118 -3. Run the installer and go through the installation process. It should be even shorter than Conda installation, you can leave everything to default. On macOS, the installer is a "dmg" image, so just drag and drop the application to your Applications folder like always.
23 +> [!NOTE]
24 +> **Linux Users:** You can install either Docker Desktop or docker-ce (Community Edition).
25 +> For Docker Desktop, follow the instructions for your specific Linux distribution [here](https://docs.docker.com/desktop/install/linux-install/).
26 +> For docker-ce, follow the instructions [here](https://docs.docker.com/engine/install/).
27 +>
28 +> If you're using docker-ce, you'll need to add your user to the `docker` group:
29 +> ```bash
30 +> sudo usermod -aG docker $USER
31 +> ```
32 +> Log out and back in, then run:
33 +> ```bash
34 +> docker login
35 +> ```
36 +
37 +1.3. Run the installer with default settings. On macOS, drag and drop the application to your Applications folder.
38
39 <img src="res/setup/image-9.png" alt="docker install" width="300"/>
40 <img src="res/setup/image-10.png" alt="docker install" width="300"/>
@@ -123,112 +42,151 @@ The following guide provides both quick start instructions for the full installa
42 <img src="res/setup/image-12.png" alt="docker install" width="300"/>
43 <br><br>
44
126 -
127 -4. Once installed, you should see Docker Desktop application on your Windows/Mac machine.
45 +1.4. Once installed, launch Docker Desktop:
46
47 <img src="res/setup/image-11.png" alt="docker installed" height="100"/>
48 <img src="res/setup/image-13.png" alt="docker installed" height="100"/>
49 <br><br>
50
133 -5. Create account in the application.
134 -No need to create images or containers, the framework will do that for you. However, this requires you to be signed in to the Docker Hub, so create a free account in the Docker Desktop application, you will be prompted when the application first runs.
51 +1.5. Create a Docker Hub account when prompted and sign in. This is required to pull the Agent Zero container image.
52
53 > [!IMPORTANT]
137 -> **Important macOS-only Docker Configuration:** In Docker Desktop's preferences
138 -> (Docker menu) go to Settings, navigate to "Advanced" and check "Allow the default
139 -> Docker socket to be used (requires password)." This allows Agent Zero to
140 -> communicate with the Docker daemon.
54 +> **macOS Configuration:** In Docker Desktop's preferences (Docker menu) → Settings →
55 +> Advanced, enable "Allow the default Docker socket to be used (requires password)."
56
57 ![docker socket macOS](res/setup/macsocket.png)
58
144 -## 3. Download Agent Zero
145 -- You can clone the Agent Zero repository (https://github.com/frdel/agent-zero) from GitHub if you know how to use Git. In this tutorial I will just show how to download the files.
59 +2. **Run Agent Zero:**
60
147 -1. Go to the Agent Zero releases [here](https://github.com/frdel/agent-zero/releases).
148 -2. The latest release is on the top of the list, click the "Source Code (zip)" button under "Assets" to download it.
61 +2.1. Pull the Agent Zero Docker image:
62 +- Search for `frdel/agent-zero-run` in Docker Desktop
63 +- Click the `Pull` button
64 +- The image will be downloaded to your machine in a few minutes
65 +
66 +![docker pull](res/setup/1-docker-image-search.png)
67 +
68 +> [!TIP]
69 +> Alternatively, run the following command in your terminal:
70 +>
71 +> ```bash
72 +> docker pull frdel/agent-zero-run
73 +> ```
74 +
75 +2.2. Create a data directory for persistence:
76 +- Choose or create a directory on your machine where you want to store Agent Zero's data
77 +- This can be any location you prefer (e.g., `C:/agent-zero-data` or `/home/user/agent-zero-data`)
78 +- This directory will contain all your Agent Zero files, like the legacy root folder structure:
79 + - `/memory` - Agent's memory and learned information
80 + - `/knowledge` - Knowledge base
81 + - `/instruments` - Instruments and functions
82 + - `/prompts` - Prompt files
83 + - `/work_dir` - Working directory
84 + - `.env` - Your API keys
85 + - `settings.json` - Your Agent Zero settings
86 +
87 +> [!TIP]
88 +> Choose a location that's easy to access and backup. All your Agent Zero data
89 +> will be directly accessible in this directory.
90
150 -<img src="res/setup/image-14.png" alt="agent zero download" width="500"/>
151 -<br><br>
91 +2.3. Run the container:
92 +- In Docker Desktop, go back to the "Images" tab
93 +- Click the `Run` button next to the `frdel/agent-zero-run` image
94 +- Open the "Optional settings" menu
95 +- Set the port to `0` in the second "Host port" field (for automatic port assignment)
96 +- Under "Volumes", configure:
97 + - Host path: Your chosen directory (e.g., `C:\agent-zero-data`)
98 + - Container path: `/a0`
99
153 -3. Extract the downloaded archive where you want to have it. I will extract them to "agent-zero" folder on my Desktop - "C:\Users\frdel\Desktop\agent-zero" on Windows and "/Users/frdel/Desktop/agent-zero" on macOS.
100 +![docker port mapping](res/setup/3-docker-port-mapping.png)
101
102 +- Click the `Run` button in the "Images" tab.
103 +- The container will start and show in the "Containers" tab
104
156 -## 4. Set up Conda environment
157 -- Now that we have the project files and Conda, we can create **virtual Python environment** for this project, activate it and install requirements.
105 +![docker containers](res/setup/4-docker-container-started.png)
106
159 -1. Open your **"Anaconda Powershell Prompt"** application on windows or **"Terminal"** application on macOS.
160 -2. In the terminal, navigate to your Agent Zero folder using **"cd"** command. Replace the path with your actual Agent Zero folder path.
161 -~~~
162 -cd C:\Users\frdel\Desktop\agent-zero
163 -~~~
164 -You should see your folder has changed on the next terminal line.
107 +> [!TIP]
108 +> Alternatively, run the following command in your terminal:
109 +> ```bash
110 +> docker run -p $PORT:80 -v /path/to/your/data:/a0 frdel/agent-zero-run
111 +> ```
112 +> - Replace `$PORT` with the port you want to use (e.g., `50080`)
113 +> - Replace `/path/to/your/data` with your chosen directory path
114
166 -<img src="res/setup/image-15.png" alt="agent zero cd" height="100"/>
167 -<img src="res/setup/image-16.png" alt="agent zero cd" height="100"/>
168 -<br><br>
115 +2.4. Access the Web UI:
116 +- The framework will take a few seconds to initialize and the Docker logs will look like the image below.
117 +- Find the mapped port in Docker Desktop (shown as `<PORT>:80`) or click the port right under the container ID as shown in the image below
118
170 -3. Create Conda environment using command **"conda create"**. After **"-n"** is your environment name, you can choose your own, i will use **"a0"** - short for Agent Zero. After **"python"** is the Python version that Conda will install for you into this environment, right now, 3.12 works fine. **-y** skips confirmations.
171 -~~~
172 -conda create -n a0 python=3.12 -y
173 -~~~
119 +![docker logs](res/setup/5-docker-click-to-open.png)
120
175 -4. Once done, activate the new environment for this terminal window by another command:
176 -~~~
177 -conda activate a0
178 -~~~
179 -And you should see that the **(base)** on the left has changed to **(a0)**. This means that this terminal now uses the new **a0** virtual environment and all packages will be installed into this environment.
121 +- Open `http://localhost:<PORT>` in your browser
122 +- The Web UI will open. Agent Zero is ready for configuration!
123
181 -<img src="res/setup/image-17.png" alt="conda env" height="200"/>
182 -<img src="res/setup/image-18.png" alt="conda env" height="200"/>
183 -<br><br>
124 +![docker ui](res/setup/6-docker-a0-running.png)
125
185 -> [!IMPORTANT]
186 -> If you open a new terminal window, you will need to activate the environment with
187 -> "conda activate a0" again for that window.
126 +> [!TIP]
127 +> You can also access the Web UI by clicking the ports right under the container ID in Docker Desktop.
128
189 -5. Install requirements using **"pip"**. Pip is a Python package manager. We can install all required packages from requirements.txt file using command:
190 -~~~
191 -pip install -r requirements.txt
192 -~~~
193 -This might take some time. If you get any errors regarding version conflicts and compatibility, double check that your environment is activated and that you created that environment with the correct Python version.
129 +> [!NOTE]
130 +> After starting the container, you'll find all Agent Zero files in your chosen
131 +> directory. You can access and edit these files directly on your machine, and
132 +> the changes will be immediately reflected in the running container.
133
195 -<img src="res/setup/image-19.png" alt="conda reqs" height="200"/>
196 -<br><br>
134 +3. Configure Agent Zero
135 +- Refer to the following sections for a full guide on how to configure Agent Zero.
136
198 -## 5. Configure Agent Zero
199 -- Now we can configure Agent Zero - select models, settings, API Keys etc.
200 -- I will leave the default configuration using OpenAI API and I will just provide my OpenAI API key in the **.env** file.
137 +## Settings Configuration
138 +Agent Zero provides a comprehensive settings interface to customize various aspects of its functionality. Access the settings by clicking the "Settings"button with a gear icon in the sidebar.
139
202 -1. Find the **"example.env"** file in your Agent Zero folder and edit the contents. I will put my OpenAI API key after **"API_KEY_OPENAI="**. If you have API keys for other service providers, add them as needed.
203 -2. Rename the **"example.env"** file to **".env"**. This is important, only this exact "**.env**" file name is valid.
140 +### Agent Configuration
141 +- **Prompts Subdirectory:** Choose the subdirectory within `/prompts` for agent behavior customization. The 'default' directory contains the standard prompts.
142 +- **Memory Subdirectory:** Select the subdirectory for agent memory storage, allowing separation between different instances.
143 +- **Knowledge Subdirectory:** Specify the location of custom knowledge files to enhance the agent's understanding.
144
205 -<img src="res/setup/image-20.png" alt="conda reqs" height="200"/>
206 -<br><br>
145 +![settings](res/setup/settings/1-agentConfig.png)
146
208 -3. (Optional) Change models or setting in **"initialize.py"** file if needed as detailed [here](#choosing-your-llms).
147 +### Chat Model Settings
148 +- **Provider:** Select the chat model provider (e.g., Ollama)
149 +- **Model Name:** Choose the specific model (e.g., llama3.2)
150 +- **Temperature:** Adjust response randomness (0 for deterministic, higher values for more creative responses)
151 +- **Context Length:** Set the maximum token limit for context window
152 +- **Context Window Space:** Configure how much of the context window is dedicated to chat history
153
210 -## 6. Run Agent Zero
211 -- Setup done. It's time to test Agent Zero. Let's double check:
154 +![chat model settings](res/setup/settings/2-chat-model.png)
155
213 -1. Make sure you have the **"a0"** Conda environment still active in your current terminal window. You can see that on the left of each terminal line like **(a0)** or **(base)**. If not, activate again with **"conda activate a0"** command again.
214 -2. Make sure your terminal is looking into the Agent Zero folder. If not, navigate to it with **"cd"** command again with your path.
215 -3. Run the **Docker Desktop application** you installed and just leave it running in the background. No need to create images or containers, the framework will do that for you. However, this requires you to be signed in to the Docker Hub, so sign in in the Docker Desktop application, if you haven't already.
216 -4. Run the Agent Zero with Web UI:
217 -~~~
218 -python run_ui.py
219 -~~~
156 +### Utility Model Configuration
157 +- **Provider & Model:** Select a smaller, faster model for utility tasks like memory organization and summarization
158 +- **Temperature:** Adjust the determinism of utility responses
159 +
160 +### Embedding Model Settings
161 +- **Provider:** Choose the embedding model provider (e.g., OpenAI)
162 +- **Model Name:** Select the specific embedding model (e.g., text-embedding-3-small)
163 +
164 +### Speech to Text Options
165 +- **Model Size:** Choose the speech recognition model size
166 +- **Language Code:** Set the primary language for voice recognition
167 +- **Silence Settings:** Configure silence threshold, duration, and timeout parameters for voice input
168 +
169 +### API Keys
170 +- Configure API keys for various service providers directly within the Web UI
171 +- Click `Save` to confirm your settings
172 +
173 +### Authentication
174 +- **UI Login:** Set username for web interface access
175 +- **UI Password:** Configure password for web interface security
176 +- **Root Password:** Manage Docker container root password for SSH access
177
221 -<img src="res/setup/image-21.png" alt="run ui" height="110"/>
222 -<br><br>
178 +![settings](res/setup/settings/3-auth.png)
179
224 -5. Open the URL shown in terminal in your web browser. You should see the Agent Zero interface. The first time it needs to execute code, Docker image will be downloaded and deployed, this might take some time. Be patient when seeing "Initializing docker container agent-zero-exe for safe code execution...".
180 +### Development Settings
181 +- **RFC Parameters (local instances only):** configure URLs and ports for remote function calls between instances
182 +- **RFC Password:** Configure password for remote function calls
183 +Learn more about Remote Function Calls and their purpose [here](#7-configure-agent-zero-rfc).
184
226 -<img src="res/setup/image-22-1.png" alt="run ui" width="400"/>
227 -<img src="res/setup/image-23-1.png" alt="run ui" width="400"/>
228 -<br><br>
185 +> [!IMPORTANT]
186 +> Always keep your API keys and passwords secure.
187
188 # Choosing Your LLMs
231 -The `initialize.py` file is the control center for selecting the Large Language Models (LLMs) that power Agent Zero. You can choose different LLMs for different roles:
189 +The Settings page is the control center for selecting the Large Language Models (LLMs) that power Agent Zero. You can choose different LLMs for different roles:
190
191 | LLM Role | Description |
192 | --- | --- |
@@ -237,13 +195,9 @@ The `initialize.py` file is the control center for selecting the Large Language
195 | `embedding_llm` | This LLM is responsible for generating embeddings used for memory retrieval and knowledge base lookups. Changing the `embedding_llm` will re-index all of A0's memory. |
196
197 **How to Change:**
240 -1. Open `initialize.py`.
241 -2. Locate the lines where these LLMs are initialized (at the beginning of the file).
242 -3. Uncomment the line for the provider and model you want to use, and comment out the others. For example, to use `gpt-4o-mini` for chat:
243 - ```python
244 - chat_llm = models.get_openai_chat(model_name="gpt-4o-mini", temperature=0)
245 - ```
246 -4. Ensure only one model is uncommented for each LLM role.
198 +1. Open Settings page in the Web UI.
199 +2. Choose the provider for the LLM for each role (Chat model, Utility model, Embedding model) and write the model name.
200 +3. Click "Save" to apply the changes.
201
202 ## Important Considerations
203
@@ -252,8 +206,6 @@ The `initialize.py` file is the control center for selecting the Large Language
206 > requires clearing the `memory` folder to avoid errors, as the embeddings can't be
207 > mixed in the vector database. Note that this will DELETE ALL of Agent Zero's memory.
208
255 -- Experiment with different model combinations to find the balance of performance and cost that best suits your needs. E.g., faster and lower latency LLMs will help, and you can also use `faiss_gpu` instead of `faiss_cpu` for the memory.
256 -
209 ## Installing and Using Ollama (Local Models)
210 If you're interested in Ollama, which is a powerful tool that allows you to run various large language models locally, here's how to install and use it:
211
@@ -284,7 +236,20 @@ Visit the [Ollama model library](https://ollama.com/library) for a list of avail
236 ollama pull <model-name>
237 ```
238
287 -Replace `<model-name>` with the name of the model you want to use. For example, to pull the Mistral Large model, you would use the command `ollama pull mistral-large`.
239 +1. Replace `<model-name>` with the name of the model you want to use. For example, to pull the Mistral Large model, you would use the command `ollama pull mistral-large`.
240 +
241 +2. A CLI message should confirm the model download on your system
242 +
243 +#### Selecting your model within Agent Zero
244 +1. Once you've downloaded your model(s), you must select it in the Settings page of the GUI.
245 +
246 +2. Within the Chat model, Utility model, or Embedding model section, choose Ollama as provider.
247 +
248 +3. Write your model code as expected by Ollama, in the format `llama3.2` or `qwen2.5:7b`
249 +
250 +4. Click `Save` to confirm your settings.
251 +
252 +![ollama](res/setup/settings/4-local-models.png)
253
254 #### Managing your downloaded models
255 Once you've downloaded some models, you might want to check which ones you have available or remove any you no longer need.
@@ -300,35 +265,293 @@ Once you've downloaded some models, you might want to check which ones you have
265 ollama rm <model-name>
266 ```
267
303 -# How to update Agent Zero
304 -To update Agent Zero to the latest version, follow these steps:
305 -- **Using Git/GitHub:** Pull the latest version of the Agent Zero repository with Git/GitHub. The custom knowledge, solutions, memory, and other data will get ignored by Git, so you don't need to worry about losing any of your custom data. The same goes for your .env file with all of your API keys.
306 -- **Backup LLM choices**: Before updating, make sure to save your customizations you've made to the first part of `def_initialize` function in the `initialize.py` file to choose your LLMs (highlighted section in below figure). This is important because the update process will overwrite these files with the default versions from the repository and can save you time rewriting all your LLMs choices.
268
308 -![Update initialize.py](res/setup/update-initialize.png)
269 +- Experiment with different model combinations to find the balance of performance and cost that best suits your needs. E.g., faster and lower latency LLMs will help, and you can also use `faiss_gpu` instead of `faiss_cpu` for the memory.
270
310 -Beware of indentations when pasting the model selection code back into the `initialize.py` file after the update.
271 +## Using Agent Zero on your mobile device
272 +Agent Zero's Web UI is accessible from any device on your network through the Docker container:
273 +
274 +1. The Docker container automatically exposes the Web UI on all network interfaces
275 +2. Find the mapped port in Docker Desktop:
276 + - Look under the container name (usually in the format `<PORT>:80`)
277 + - For example, if you see `32771:80`, your port is `32771`
278 +3. Access the Web UI from any device using:
279 + - Local access: `http://localhost:<PORT>`
280 + - Network access: `http://<YOUR_COMPUTER_IP>:<PORT>`
281 +
282 +> [!TIP]
283 +> - Your computer's IP address is usually in the format `192.168.x.x` or `10.0.x.x`
284 +> - You can find your external IP address by running `ipconfig` (Windows) or `ifconfig` (Linux/Mac)
285 +> - The port is automatically assigned by Docker unless you specify one
286 +
287 +> [!NOTE]
288 +> If you're running Agent Zero directly on your system (legacy approach) instead of
289 +> using Docker, you'll need to configure the host manually in `run_ui.py` to run on all interfaces using `host="0.0.0.0"`.
290 +
291 +For developers or users who need to run Agent Zero directly on their system,see the [In-Depth Guide for Full Binaries Installation](#in-depth-guide-for-full-binaries-installation).
292 +
293 +### How to update Agent Zero
294 +
295 +1. **If you come from the previous version of Agent Zero (pre-0.7.1):**
296 +- Your data is safely stored across various directories and files inside the Agent Zero folder.
297 +- To update to the new Docker runtime version, you need to save the following files and directories:
298 + - `/memory` - Agent's memory
299 + - `/knowledge` - Custom knowledge base
300 + - `/instruments` - Custom instruments and functions
301 + - `/prompts` - Custom prompts files (if any has been created)
302 + - `/work_dir` - Working directory
303 + - `.env` - Your API keys
304 + - `/tmp/settings.json` - Your Agent Zero settings
305 +- Once you have saved these files and directories, you can proceed with the Docker runtime [installation instructions above](#windows-macos-and-linux-setup-guide) setup guide.
306 +- Reach for the folder where you saved your data and copy it to the new Agent Zero folder set during the installation process.
307 +- Agent Zero will automatically detect your saved data and use it across memory, knowledge, instruments, prompts and settings.
308 +
309 +> [!IMPORTANT]
310 +> Make sure to use the same embedding model you were using before, otherwise
311 +> you will have to re-index all of Agent Zero's memory, therefore deleting all
312 +> your custom knowledge and memory.
313 +
314 +> [!NOTE]
315 +> If you have issues loading your settings, you can try to delete the `/tmp/settings.json`
316 +> file and let Agent Zero generate a new one.
317 +
318 +2. **Update Process (Docker Desktop)**
319 +- Go to Docker Desktop and stop the container from the "Containers" tab
320 +- Right-click and select "Remove" to remove the container
321 +- Go to "Images" tab and remove the `frdel/agent-zero-run` image
322 +
323 +![docker delete image](res/setup/docker-delete-image-1.png)
324 +
325 +- Search and pull the new image
326 +- Run the new container with the same volume settings as the old one
327 +
328 +> [!IMPORTANT]
329 +> Make sure to use the same volume mount path when running the new
330 +> container to preserve your data. The exact path depends on where you stored
331 +> your Agent Zero data directory (the chosen directory on your machine).
332 +
333 +> [!TIP]
334 +> Alternatively, run the following commands in your terminal:
335 +>
336 +> ```bash
337 +> # Stop the current container
338 +> docker stop agent-zero
339 +>
340 +> # Remove the container (data is safe in the folder)
341 +> docker rm agent-zero
342 +>
343 +> # Remove the old image
344 +> docker rmi frdel/agent-zero-run
345 +>
346 +> # Pull the latest image
347 +> docker pull frdel/agent-zero-run
348 +>
349 +> # Run new container with the same volume mount
350 +> docker run -p $PORT:80 -v /path/to/your/data:/a0 frdel/agent-zero-run
351 +> ```
352 +
353 +3. **Full Binaries**
354 +- Using Git/GitHub: Pull the latest version of the Agent Zero repository.
355 +- The custom knowledge, solutions, memory, and other data will get ignored, so you don't need to worry about losing any of your custom data. The same goes for your .env file with all of your API keys and settings.json.
356
312 -- **Manual Update:** Alternatively, you can manually download the latest version of Agent Zero from the [releases page](https://github.com/frdel/agent-zero/releases). The only folders that you must save to retain custom data are the following: `/memory`, `/knowledge`. If you have created custom `instruments` or `prompts` you must save their dirs as well.
357 +> [!WARNING]
358 +> - If you update manually, beware: save your .env file with the API keys, and look for new dependencies in requirements.txt.
359 +> - If any changes are made to the requirements of the updated version, you have to execute this command inside the a0 conda env after activating it:
360 +> ```bash
361 +> pip install -r requirements.txt
362 +
363 +# In-Depth Guide for Full Binaries Installation
364 +- Agent Zero is a framework. It's made to be customized, edited, enhanced. Therefore you need to install the necessary components to run it when downloading its full binaries. This guide will help you to do so.
365 +- The following step by step instructions can be followed along with a video for this tutorial on how to make Agent Zero work with its full development environment.
366 +
367 +[![Video](res/setup/thumb_play.png)](https://youtu.be/8H7mFsvxKYQ)
368 +
369 +## Reminders:
370 +1. There's no need to install Python, Conda will manage that for you.
371 +2. You don't necessarily need API keys: Agent Zero can run with local models. For this tutorial though, we will leave it to the default OpenAI API. A guide for downloading Ollama along with local models is available [here](#installing-and-using-ollama-local-models).
372 +3. Visual Studio Code or any other code editor is not mandatory, but it makes it easier to navigate and edit files.
373 +4. Git/GitHub is not mandatory, you can download the framework files through your browser. We will not be showing how to use Git in this tutorial.
374 +5. Docker is not mandatory for the full binaries installation, since the framework will run on your machine connecting to the Docker container through the Web UI RFC functionality.
375 +6. Running Agent Zero without Docker makes the process more complicated and it's thought for developers and contributors.
376
377 > [!IMPORTANT]
315 -> If you update manually, beware: save your .env file with the API keys, and look
316 -> for new dependencies in requirements.txt. If any changes are made in the updated
317 -> version, you have to execute this command inside the a0 conda env after activating it:
318 -
319 - pip install -r requirements.txt
378 +> Linux instructions are provided as general instructions for any Linux distribution. If you're using a distribution other than Debian/Ubuntu, you may need to adjust the instructions accordingly.
379 +>
380 +> For Debian/Ubuntu, just follow the macOS instructions, as they are the same.
381 +
382 +## 1. Install Conda (miniconda)
383 +- Conda is a Python environment manager, it will help you keep your projects and installations separated.
384 +- It's a lightweight version of Anaconda that includes only conda, Python, the packages they depend on, and a small number of other useful packages, including pip, zlib and a few others.
385
321 -# How to create executable files for Agent Zero in Windows, macOS and Linux
322 -Two scripts allows you to easily create executable files for Windows, macOS and Linux, including all the necessary dependencies to run Agent Zero without the need for Python, Conda, or additional steps:
323 -1. **Navigate to Bundle folder:** Navigate to /agent-zero/bundle.
324 -2. **Run the script:** Run the bundling of Agent Zero by running `macos_bundle.sh` (macOS and Linux) or `windows_bundle.bat` (Windows) in your terminal window. The process usually takes about 2 to 5 minutes depending on the platform.
325 -3. **Edit your Files:** Now you can configure API keys and edit `initialize.py` for [Choosing Your LLMs](#choosing-your-llms).
326 -4. **Run Agent Zero:** Run Agent Zero by running the .exe file just created (Windows), or by running `./agent-zero` in your terminal window.
386 +1. Go to the download page of miniconda [here](https://docs.anaconda.com/miniconda/#miniconda-latest-installer-links). If the link does not work, just search the web for "miniconda download".
387 +2. Based on your operating system, download the right installer of miniconda. For macOS select the version with "pkg" at the end.
388 +
389 +<img src="res/setup/image-1.png" alt="miniconda download win" width="500"/>
390 +<img src="res/setup/image-5.png" alt="miniconda download macos" width="500"/>
391 +<br><br>
392 +
393 +3. Run the installer and go through the installation process, here you can leave everything to default and just click Next, Next... The same goes for macOS with the "pkg" graphical installer.
394 +
395 +<img src="res/setup/image.png" alt="miniconda install" width="200"/>
396 +<img src="res/setup/image-2.png" alt="miniconda install" width="200"/>
397 +<img src="res/setup/image-3.png" alt="miniconda install" width="200"/>
398 +<img src="res/setup/image-4.png" alt="miniconda install" width="200"/>
399 +<br><br>
400 +
401 +4. After the installation is complete, you should have "Anaconda Powershell Prompt" installed on your Windows machine. On macOS, when you open the Terminal application in your Applications folder and type "conda --version", you should see the version installed.
402 +
403 +<img src="res/setup/image-6.png" alt="miniconda installed" height="100"/>
404 +<img src="res/setup/image-7.png" alt="miniconda installed" height="100"/>
405 +<br><br>
406 +
407 +
408 +## 2. Download Agent Zero
409 +- You can clone the Agent Zero repository (https://github.com/frdel/agent-zero) from GitHub if you know how to use Git. In this tutorial I will just show how to download the files.
410 +
411 +1. Go to the Agent Zero releases [here](https://github.com/frdel/agent-zero/releases).
412 +2. The latest release is on the top of the list, click the "Source Code (zip)" button under "Assets" to download it.
413 +
414 +<img src="res/setup/image-14-u.png" alt="agent zero download" width="500"/>
415 +<br><br>
416 +
417 +3. Extract the downloaded archive where you want to have it. I will extract them to "agent-zero" folder on my Desktop - "C:\Users\frdel\Desktop\agent-zero" on Windows and "/Users/frdel/Desktop/agent-zero" on macOS.
418 +
419 +## 3. Set up Conda environment
420 +- Now that we have the project files and Conda, we can create **virtual Python environment** for this project, activate it and install requirements.
421 +
422 +1. Open your **"Anaconda Powershell Prompt"** application on windows or **"Terminal"** application on macOS.
423 +2. In the terminal, navigate to your Agent Zero folder using **"cd"** command. Replace the path with your actual Agent Zero folder path.
424 +~~~
425 +cd C:\Users\frdel\Desktop\agent-zero
426 +~~~
427 +You should see your folder has changed on the next terminal line.
428 +
429 +<img src="res/setup/image-15.png" alt="agent zero cd" height="100"/>
430 +<img src="res/setup/image-16.png" alt="agent zero cd" height="100"/>
431 +<br><br>
432 +
433 +3. Create Conda environment using command **"conda create"**. After **"-n"** is your environment name, you can choose your own, i will use **"a0"** - short for Agent Zero. After **"python"** is the Python version that Conda will install for you into this environment, right now, 3.12 works fine. **-y** skips confirmations.
434 +~~~
435 +conda create -n a0 python=3.12 -y
436 +~~~
437 +
438 +4. Once done, activate the new environment for this terminal window by another command:
439 +~~~
440 +conda activate a0
441 +~~~
442 +And you should see that the **(base)** on the left has changed to **(a0)**. This means that this terminal now uses the new **a0** virtual environment and all packages will be installed into this environment.
443 +
444 +<img src="res/setup/image-17.png" alt="conda env" height="200"/>
445 +<img src="res/setup/image-18.png" alt="conda env" height="200"/>
446 +<br><br>
447 +
448 +> [!IMPORTANT]
449 +> If you open a new terminal window, you will need to activate the environment with
450 +> "conda activate a0" again for that window.
451 +
452 +5. Install requirements using **"pip"**. Pip is a Python package manager. We can install all required packages from requirements.txt file using command:
453 +~~~
454 +pip install -r requirements.txt
455 +~~~
456 +This might take some time. If you get any errors regarding version conflicts and compatibility, double check that your environment is activated and that you created that environment with the correct Python version.
457 +
458 +<img src="res/setup/image-19.png" alt="conda reqs" height="200"/>
459 +<br><br>
460 +
461 +## 4. Install Docker (Docker Desktop application)
462 +Simply put, Docker is a way of running virtual computers on your machine. These are lightweight, disposable and isolated from your operating system, so it is a way to sandbox Agent Zero.
463 +- Agent Zero only connects to the Docker container when it needs to execute code and commands. The frameworks itself runs on your machine.
464 +- Docker has a desktop application with GUI for all major operating system, which is the recommended way to install it.
465 +
466 +1. Go to the download page of Docker Desktop [here](https://www.docker.com/products/docker-desktop/). If the link does not work, just search the web for "docker desktop download".
467 +2. Download the version for your operating system. Don't be tricked by the seemingly missing windows intel/amd version, it's the button itself, not in the dropdown menu.
468 +
469 +<img src="res/setup/image-8.png" alt="docker download" width="200"/>
470 +<br><br>
471 +
472 +3. Run the installer and go through the installation process. It should be even shorter than Conda installation, you can leave everything to default. On macOS, the installer is a "dmg" image, so just drag and drop the application to your Applications folder like always.
473 +
474 +<img src="res/setup/image-9.png" alt="docker install" width="300"/>
475 +<img src="res/setup/image-10.png" alt="docker install" width="300"/>
476 +
477 +<img src="res/setup/image-12.png" alt="docker install" width="300"/>
478 +<br><br>
479 +
480 +
481 +4. Once installed, you should see Docker Desktop application on your Windows/Mac machine.
482 +
483 +<img src="res/setup/image-11.png" alt="docker installed" height="100"/>
484 +<img src="res/setup/image-13.png" alt="docker installed" height="100"/>
485 +<br><br>
486 +
487 +5. Create account in the application.
488 +- It's required to be signed in to the Docker Hub, so create a free account in the Docker Desktop application, you will be prompted when the application first runs.
489 +
490 +> [!IMPORTANT]
491 +> **Important macOS-only Docker Configuration:** In Docker Desktop's preferences
492 +> (Docker menu) go to Settings, navigate to "Advanced" and check "Allow the default
493 +> Docker socket to be used (requires password)." This allows Agent Zero to
494 +> communicate with the Docker daemon.
495 +
496 +![docker socket macOS](res/setup/macsocket.png)
497 +
498 +> [!NOTE]
499 +> **Linux Users:** You can install both Docker Desktop or docker-ce (Community Edition).
500 +> For Docker Desktop, follow the instructions for your specific Linux distribution [here](https://docs.docker.com/desktop/install/linux-install/).
501 +> For docker-ce, follow the instructions [here](https://docs.docker.com/engine/install/).
502 +>
503 +> If you're using docker-ce, you will need to add your user to the `docker` group to be able to run docker commands without sudo. You can do this by running the following command in your terminal: `sudo usermod -aG docker $USER`. Then log out and log back in for the changes to take effect.
504 +>
505 +> Login in the Docker CLI with `docker login` and provide your Docker Hub credentials.
506 +
507 +6. Pull the Docker image
508 +- Agent Zero needs a Docker image to be pulled from the Docker Hub to be run, even when using the full binaries.
509 +You can refer to the [installation instructions above](#windows-macos-and-linux-setup-guide) to run the Docker container and then resume from the next step. There are two differences:
510 + - You need to map two ports instead of one:
511 + - 55022 in the first field to run the Remote Function Call SSH
512 + - 0 in the second field to run the Web UI in automatic port assignment
513 + - You need to map the `/a0` volume to the location of your local Agent Zero folder.
514 +- Run the Docker container following the instructions.
515 +
516 +## 5. Run the local Agent Zero instance
517 +Run the Agent Zero with Web UI:
518 +~~~
519 +python run_ui.py
520 +~~~
521 +
522 +<img src="res/setup/image-21.png" alt="run ui" height="110"/>
523 +<br><br>
524 +
525 +- Open the URL shown in terminal in your web browser. You should see the Agent Zero interface.
526 +
527 +## 6. Configure Agent Zero
528 +Now we can configure Agent Zero - select models, settings, API Keys etc. Refer to the [Usage](usage.md#agent-configuration) guide for a full guide on how to configure Agent Zero.
529 +
530 +## 7. Configure Agent Zero RFC
531 +Agent Zero needs to be configured further to redirect some functions to the Docker container. This is crucial for development as A0 needs to run in a standardized environment to support all features.
532 +1. Go in "Settings" page in the Web UI of your local instance and go in the "Development" section.
533 +2. Set "RFC Destination URL" to `http://localhost`
534 +3. Set the two ports (HTTP and SSH) to the ones used when creating the Docker container
535 +4. Click "Save"
536 +
537 +![rfc local settings](res/setup/9-rfc-devpage-on-local-sbs-1.png)
538 +
539 +5. Go in "Settings" page in the Web UI of your Docker instance and go in the "Development" section.
540 +
541 +![rfc docker settings](res/setup/9-rfc-devpage-on-docker-instance-1.png)
542 +
543 +6. This time the page has only the password field, set it to the same password you used when creating the Docker container.
544 +7. Click "Save"
545 +8. Use the Development environment
546 +9. Now you have the full development environment to work on Agent Zero.
547 +
548 +<img src="res/setup/image-22-1.png" alt="run ui" width="400"/>
549 +<img src="res/setup/image-23-1.png" alt="run ui" width="400"/>
550 +<br><br>
551
328 -> [!WARNING]
329 -> The 2 scripts will create executable files valid only for the machine where they
330 -> are run. If you want to run Agent Zero on another machine, you will need to run
331 -> the scripts on that machine as well to have executable files.
552
553 ### Conclusion
334 -After following the instructions for your specific operating system, you should have Agent Zero successfully installed and running. You can now start exploring the framework's capabilities and experimenting with creating your own intelligent agents. If you encounter any issues during the installation process, please consult the Troubleshooting section of this documentation or refer to the Agent Zero community for assistance.
\ No newline at end of file
554 +After following the instructions for your specific operating system, you should have Agent Zero successfully installed and running. You can now start exploring the framework's capabilities and experimenting with creating your own intelligent agents.
555 +
556 +If you encounter any issues during the installation process, please consult the [Troubleshooting section](troubleshooting.md) of this documentation or refer to the Agent Zero [Skool](https://www.skool.com/agent-zero) or [Discord](https://discord.gg/Z2tun2N3) community for assistance.
557 +
docs/res/arch-01.svg
+1406 -490
@@ -1,490 +1,1406 @@
1 -<?xml version="1.0" encoding="UTF-8"?>
2 -<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 2493.12 633.38">
3 - <defs>
4 - <clipPath id="clippath">
5 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
6 - </clipPath>
7 - <clipPath id="clippath-1">
8 - <rect x="1877.51" y="81.24" width="245.57" height="47.53" fill="none" stroke-width="0"/>
9 - </clipPath>
10 - <clipPath id="clippath-2">
11 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
12 - </clipPath>
13 - <clipPath id="clippath-3">
14 - <rect x="187.27" y="85.2" width="15.84" height="15.84" fill="none" stroke-width="0"/>
15 - </clipPath>
16 - <clipPath id="clippath-4">
17 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
18 - </clipPath>
19 - <clipPath id="clippath-5">
20 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
21 - </clipPath>
22 - <clipPath id="clippath-6">
23 - <rect x="317.89" y="91.39" width="15.84" height="15.84" transform="translate(179.6 406.95) rotate(-81.53)" fill="none" stroke-width="0"/>
24 - </clipPath>
25 - <clipPath id="clippath-7">
26 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
27 - </clipPath>
28 - <clipPath id="clippath-8">
29 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
30 - </clipPath>
31 - <clipPath id="clippath-9">
32 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
33 - </clipPath>
34 - <clipPath id="clippath-10">
35 - <rect x="500.7" y="155.24" width="15.84" height="15.84" transform="translate(120.47 530.12) rotate(-61.18)" fill="none" stroke-width="0"/>
36 - </clipPath>
37 - <clipPath id="clippath-11">
38 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
39 - </clipPath>
40 - <clipPath id="clippath-12">
41 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
42 - </clipPath>
43 - <clipPath id="clippath-13">
44 - <rect x="584.66" y="194.01" width="15.84" height="15.84" transform="translate(195.77 686.15) rotate(-69.48)" fill="none" stroke-width="0"/>
45 - </clipPath>
46 - <clipPath id="clippath-14">
47 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
48 - </clipPath>
49 - <clipPath id="clippath-15">
50 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
51 - </clipPath>
52 - <clipPath id="clippath-16">
53 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
54 - </clipPath>
55 - <clipPath id="clippath-17">
56 - <rect x="828.82" y="319.89" width="15.84" height="15.84" transform="translate(103.03 846.72) rotate(-56.66)" fill="none" stroke-width="0"/>
57 - </clipPath>
58 - <clipPath id="clippath-18">
59 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
60 - </clipPath>
61 - <clipPath id="clippath-19">
62 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
63 - </clipPath>
64 - <clipPath id="clippath-20">
65 - <rect x="913.66" y="371.81" width="15.84" height="15.84" transform="translate(136.95 994.43) rotate(-60.47)" fill="none" stroke-width="0"/>
66 - </clipPath>
67 - <clipPath id="clippath-21">
68 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
69 - </clipPath>
70 - <clipPath id="clippath-22">
71 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
72 - </clipPath>
73 - <clipPath id="clippath-23">
74 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
75 - </clipPath>
76 - <clipPath id="clippath-24">
77 - <rect x="433.82" y="166.57" width="15.84" height="15.84" transform="translate(-33.21 175.17) rotate(-21.64)" fill="none" stroke-width="0"/>
78 - </clipPath>
79 - <clipPath id="clippath-25">
80 - <rect x="912.63" y="440.73" width="15.84" height="15.84" fill="none" stroke-width="0"/>
81 - </clipPath>
82 - <clipPath id="clippath-26">
83 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
84 - </clipPath>
85 - <clipPath id="clippath-27">
86 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
87 - </clipPath>
88 - <clipPath id="clippath-28">
89 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
90 - </clipPath>
91 - <clipPath id="clippath-29">
92 - <rect x="501.68" y="91.28" width="15.84" height="15.84" transform="translate(-9.04 75.96) rotate(-8.45)" fill="none" stroke-width="0"/>
93 - </clipPath>
94 - <clipPath id="clippath-30">
95 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
96 - </clipPath>
97 - <clipPath id="clippath-31">
98 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
99 - </clipPath>
100 - <clipPath id="clippath-32">
101 - <rect x="1288.15" y="171.52" width="15.84" height="15.84" transform="translate(263.13 982.57) rotate(-45.75)" fill="none" stroke-width="0"/>
102 - </clipPath>
103 - <clipPath id="clippath-33">
104 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
105 - </clipPath>
106 - <clipPath id="clippath-34">
107 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
108 - </clipPath>
109 - <clipPath id="clippath-35">
110 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
111 - </clipPath>
112 - <clipPath id="clippath-36">
113 - <rect x="830.19" y="224.79" width="15.84" height="15.84" transform="translate(-21.84 102.09) rotate(-6.88)" fill="none" stroke-width="0"/>
114 - </clipPath>
115 - <clipPath id="clippath-37">
116 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
117 - </clipPath>
118 - <clipPath id="clippath-38">
119 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
120 - </clipPath>
121 - <clipPath id="clippath-39">
122 - <rect x="1242.1" y="220.7" width="15.84" height="15.84" transform="translate(996.6 1473.85) rotate(-88.86)" fill="none" stroke-width="0"/>
123 - </clipPath>
124 - <clipPath id="clippath-40">
125 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
126 - </clipPath>
127 - <clipPath id="clippath-41">
128 - <rect x="1158.72" y="440.73" width="15.84" height="15.84" fill="none" stroke-width="0"/>
129 - </clipPath>
130 - <clipPath id="clippath-42">
131 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
132 - </clipPath>
133 - <clipPath id="clippath-43">
134 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
135 - </clipPath>
136 - <clipPath id="clippath-44">
137 - <rect x="1300.37" y="282.14" width="15.84" height="15.84" transform="translate(361.46 1238.36) rotate(-57.55)" fill="none" stroke-width="0"/>
138 - </clipPath>
139 - <clipPath id="clippath-45">
140 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
141 - </clipPath>
142 - <clipPath id="clippath-46">
143 - <rect x="1567.22" y="219.86" width="15.84" height="15.84" fill="none" stroke-width="0"/>
144 - </clipPath>
145 - <clipPath id="clippath-47">
146 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
147 - </clipPath>
148 - <clipPath id="clippath-48">
149 - <rect x="1988.94" y="219.86" width="15.84" height="15.84" fill="none" stroke-width="0"/>
150 - </clipPath>
151 - <clipPath id="clippath-49">
152 - <rect x="2071.33" y="219.86" width="15.84" height="15.84" fill="none" stroke-width="0"/>
153 - </clipPath>
154 - <clipPath id="clippath-50">
155 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
156 - </clipPath>
157 - <clipPath id="clippath-51">
158 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
159 - </clipPath>
160 - <clipPath id="clippath-52">
161 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
162 - </clipPath>
163 - <clipPath id="clippath-53">
164 - <rect x="360.25" y="164.58" width="15.84" height="15.84" transform="translate(.8 346.72) rotate(-50.48)" fill="none" stroke-width="0"/>
165 - </clipPath>
166 - <clipPath id="clippath-54">
167 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
168 - </clipPath>
169 - <clipPath id="clippath-55">
170 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
171 - </clipPath>
172 - <clipPath id="clippath-56">
173 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
174 - </clipPath>
175 - <clipPath id="clippath-57">
176 - <rect x="585.46" y="319.45" width="15.84" height="15.84" transform="translate(-82.28 379.83) rotate(-33.32)" fill="none" stroke-width="0"/>
177 - </clipPath>
178 - <clipPath id="clippath-58">
179 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
180 - </clipPath>
181 - <clipPath id="clippath-59">
182 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
183 - </clipPath>
184 - <clipPath id="clippath-60">
185 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
186 - </clipPath>
187 - <clipPath id="clippath-61">
188 - <rect x="912.85" y="470.26" width="15.84" height="15.84" transform="translate(-86.43 229.14) rotate(-13.56)" fill="none" stroke-width="0"/>
189 - </clipPath>
190 - <clipPath id="clippath-62">
191 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
192 - </clipPath>
193 - <clipPath id="clippath-63">
194 - <rect x="98.75" y="69.35" width="63.37" height="47.53" fill="none" stroke-width="0"/>
195 - </clipPath>
196 - <clipPath id="clippath-64">
197 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
198 - </clipPath>
199 - <clipPath id="clippath-65">
200 - <rect x="363.35" y="89.16" width="107.73" height="47.53" fill="none" stroke-width="0"/>
201 - </clipPath>
202 - <clipPath id="clippath-66">
203 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
204 - </clipPath>
205 - <clipPath id="clippath-67">
206 - <rect x="40.7" y="329.83" width="179.03" height="237.65" fill="none" stroke-width="0"/>
207 - </clipPath>
208 - <clipPath id="clippath-68">
209 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
210 - </clipPath>
211 - <clipPath id="clippath-69">
212 - <rect x="629.71" y="200.06" width="169.52" height="95.06" fill="none" stroke-width="0"/>
213 - </clipPath>
214 - <clipPath id="clippath-70">
215 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
216 - </clipPath>
217 - <clipPath id="clippath-71">
218 - <rect x="958.18" y="401.12" width="169.52" height="95.06" fill="none" stroke-width="0"/>
219 - </clipPath>
220 - <clipPath id="clippath-72">
221 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
222 - </clipPath>
223 - <clipPath id="clippath-73">
224 - <rect x="1310.42" y="204.02" width="71.29" height="47.53" fill="none" stroke-width="0"/>
225 - </clipPath>
226 - <clipPath id="clippath-74">
227 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
228 - </clipPath>
229 - <clipPath id="clippath-75">
230 - <rect x="1642.48" y="204.02" width="286.76" height="47.53" fill="none" stroke-width="0"/>
231 - </clipPath>
232 - <clipPath id="clippath-76">
233 - <rect x="10" y="-315.31" width="2473" height="1264" fill="none" stroke-width="0"/>
234 - </clipPath>
235 - <clipPath id="clippath-77">
236 - <rect x="2146.58" y="180.26" width="212.3" height="95.06" fill="none" stroke-width="0"/>
237 - </clipPath>
238 - </defs>
239 - <g clip-path="url(#clippath)">
240 - <rect x="1533.56" y="81.24" width="933.6" height="293.1" fill="#474949" stroke-width="0"/>
241 - <rect x="1533.56" y="81.24" width="933.6" height="293.1" fill="none" opacity=".25" stroke="#fff" stroke-width="1.98"/>
242 - </g>
243 - <g clip-path="url(#clippath-1)">
244 - <text transform="translate(1877.51 116.09)" fill="#f9fffe" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">Docker Container</tspan></text>
245 - </g>
246 - <g clip-path="url(#clippath-2)">
247 - <path d="m194.4,93.12h14.96c14.96,0,44.87,0,63.95.61,19.08.61,27.33,1.84,34.28,2.87,6.95,1.03,12.59,1.87,15.41,2.29l2.82.42" fill="none" stroke="#d3d3d3" stroke-width="6.93"/>
248 - </g>
249 - <g clip-path="url(#clippath-3)">
250 - <polygon points="187.27 93.12 203.11 101.04 203.11 85.2 187.27 93.12" fill="#d3d3d3" stroke-width="0"/>
251 - <path d="m188.14,93.57l-.51.26-.35-.71.35-.71,1.42.71-.71,1.42-2.83-1.42,1.93-.96.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm.02-1v-.29h.79l.35.71-1.16.58-.71-1.42,2.31-1.15v1.57h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm.89.46l.26.13-.35.71h-.79v-1.3h1.58v2.58l-1.4-.7.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Z" fill="#d3d3d3" stroke-width="0"/>
252 - </g>
253 - <g clip-path="url(#clippath-4)">
254 - <g clip-path="url(#clippath-5)">
255 - <g clip-path="url(#clippath-6)">
256 - <polygon points="319.14 90.31 333.64 100.48 316.81 105.98 319.14 90.31" fill="#d3d3d3" stroke-width="0"/>
257 - <path d="m318.27,90.76l.27-1.83,2.35,1.65-.91,1.3-1.3-.91.45-.65.78.12-.08.57-1.57-.23Zm-.23,1.57l.23-1.57,1.57.23-.23,1.57-1.57-.23Zm-.23,1.57l.23-1.57,1.57.23-.23,1.57-1.57-.23Zm-.23,1.57l.23-1.57,1.57.23-.23,1.57-1.57-.23Zm-.23,1.57l.23-1.57,1.57.23-.23,1.57-1.57-.23Zm-.23,1.57l.23-1.57,1.57.23-.23,1.57-1.57-.23Zm-.23,1.57l.23-1.57,1.57.23-.23,1.57-1.57-.23Zm-.23,1.57l.23-1.57,1.57.23-.23,1.57-1.57-.23Zm-.23,1.57l.23-1.57,1.57.23-.23,1.57-1.57-.23Zm-.23,1.57l.23-1.57,1.57.23-.23,1.57-1.57-.23Zm1.42,1.69l-1.76.58.34-2.27,1.57.23-.15,1-.78-.12-.25-.75.54-.18.49,1.51Zm1.51-.49l-1.51.49-.49-1.51,1.51-.49.49,1.51Zm1.51-.49l-1.51.49-.49-1.51,1.51-.49.49,1.51Zm1.51-.49l-1.51.49-.49-1.51,1.51-.49.49,1.51Zm1.51-.49l-1.51.49-.49-1.51,1.51-.49.49,1.51Zm1.51-.49l-1.51.49-.49-1.51,1.51-.49.49,1.51Zm1.51-.49l-1.51.49-.49-1.51,1.51-.49.49,1.51Zm1.51-.49l-1.51.49-.49-1.51,1.51-.49.49,1.51Zm1.51-.49l-1.51.49-.49-1.51,1.51-.49.49,1.51Zm1.51-.49l-1.51.49-.49-1.51,1.51-.49.49,1.51Zm1.51-.49l-1.51.49-.49-1.51,1.51-.49.49,1.51Zm1.21-1.97l1.53,1.07-2.74.9-.49-1.51,1.23-.4.25.75-.45.65-.23-.16.91-1.3Zm-1.3-.91l1.3.91-.91,1.3-1.3-.91.91-1.3Zm-1.3-.91l1.3.91-.91,1.3-1.3-.91.91-1.3Zm-1.3-.91l1.3.91-.91,1.3-1.3-.91.91-1.3Zm-1.3-.91l1.3.91-.91,1.3-1.3-.91.91-1.3Zm-1.3-.91l1.3.91-.91,1.3-1.3-.91.91-1.3Zm-1.3-.91l1.3.91-.91,1.3-1.3-.91.91-1.3Zm-1.3-.91l1.3.91-.91,1.3-1.3-.91.91-1.3Zm-1.3-.91l1.3.91-.91,1.3-1.3-.91.91-1.3Zm-1.3-.91l1.3.91-.91,1.3-1.3-.91.91-1.3Zm-1.3-.91l1.3.91-.91,1.3-1.3-.91.91-1.3Z" fill="#d3d3d3" stroke-width="0"/>
258 - </g>
259 - </g>
260 - </g>
261 - <g clip-path="url(#clippath-7)">
262 - <path d="m507.93,162.78l7.09,3.9c7.1,3.9,21.29,11.71,32.51,17.16s19.47,8.53,26.49,11.15c7.01,2.62,12.79,4.78,15.68,5.86l2.89,1.08" fill="none" stroke="#d3d3d3" stroke-width="6.93"/>
263 - </g>
264 - <g clip-path="url(#clippath-8)">
265 - <g clip-path="url(#clippath-9)">
266 - <g clip-path="url(#clippath-10)">
267 - <polygon points="501.68 159.34 511.74 173.92 519.38 160.04 501.68 159.34" fill="#d3d3d3" stroke-width="0"/>
268 - <path d="m502.22,160.15l-.57-.02.03-.79.65-.45.9,1.3-1.3.9-1.8-2.61,2.15.08-.06,1.58Zm1.58.06l-1.58-.06.06-1.58,1.58.06-.06,1.58Zm1.58.06l-1.58-.06.06-1.58,1.58.06-.06,1.58Zm1.58.06l-1.58-.06.06-1.58,1.58.06-.06,1.58Zm1.58.06l-1.58-.06.06-1.58,1.58.06-.06,1.58Zm1.58.06l-1.58-.06.06-1.58,1.58.06-.06,1.58Zm1.58.06l-1.58-.06.06-1.58,1.58.06-.06,1.58Zm1.58.06l-1.58-.06.06-1.58,1.58.06-.06,1.58Zm1.58.06l-1.58-.06.06-1.58,1.58.06-.06,1.58Zm1.58.06l-1.58-.06.06-1.58,1.58.06-.06,1.58Zm1.58.06l-1.58-.06.06-1.58,1.58.06-.06,1.58Zm.5-.87l.14-.25.69.38-.03.79-1.3-.05.06-1.58,2.58.1-.76,1.37-1.39-.76Zm-.76,1.39l.76-1.39,1.39.76-.76,1.39-1.39-.76Zm-.76,1.39l.76-1.39,1.39.76-.76,1.39-1.39-.76Zm-.76,1.39l.76-1.39,1.39.76-.76,1.39-1.39-.76Zm-.76,1.39l.76-1.39,1.39.76-.76,1.39-1.39-.76Zm-.76,1.39l.76-1.39,1.39.76-.76,1.39-1.39-.76Zm-.76,1.39l.76-1.39,1.39.76-.76,1.39-1.39-.76Zm-.76,1.39l.76-1.39,1.39.76-.76,1.39-1.39-.76Zm-.76,1.39l.76-1.39,1.39.76-.76,1.39-1.39-.76Zm-.76,1.39l.76-1.39,1.39.76-.76,1.39-1.39-.76Zm.56.83l.16.24-.65.45-.69-.38.63-1.14,1.39.76-1.24,2.26-.89-1.29,1.3-.9Zm-.9-1.3l.9,1.3-1.3.9-.9-1.3,1.3-.9Zm-.9-1.3l.9,1.3-1.3.9-.9-1.3,1.3-.9Zm-.9-1.3l.9,1.3-1.3.9-.9-1.3,1.3-.9Zm-.9-1.3l.9,1.3-1.3.9-.9-1.3,1.3-.9Zm-.9-1.3l.9,1.3-1.3.9-.9-1.3,1.3-.9Zm-.9-1.3l.9,1.3-1.3.9-.9-1.3,1.3-.9Zm-.9-1.3l.9,1.3-1.3.9-.9-1.3,1.3-.9Zm-.9-1.3l.9,1.3-1.3.9-.9-1.3,1.3-.9Zm-.9-1.3l.9,1.3-1.3.9-.9-1.3,1.3-.9Zm-.9-1.3l.9,1.3-1.3.9-.9-1.3,1.3-.9Z" fill="#d3d3d3" stroke-width="0"/>
269 - </g>
270 - </g>
271 - </g>
272 - <g clip-path="url(#clippath-11)">
273 - <g clip-path="url(#clippath-12)">
274 - <g clip-path="url(#clippath-13)">
275 - <polygon points="587.94 191.74 600 204.71 582.39 206.57 587.94 191.74" fill="#d3d3d3" stroke-width="0"/>
276 - <path d="m587,191.99l.65-1.74,1.95,2.1-1.16,1.08-1.08-1.16.58-.54.74.28-.2.54-1.48-.56Zm-.56,1.48l.56-1.48,1.48.56-.56,1.48-1.48-.56Zm-.56,1.48l.56-1.48,1.48.56-.56,1.48-1.48-.56Zm-.56,1.48l.56-1.48,1.48.56-.56,1.48-1.48-.56Zm-.56,1.48l.56-1.48,1.48.56-.56,1.48-1.48-.56Zm-.56,1.48l.56-1.48,1.48.56-.56,1.48-1.48-.56Zm-.56,1.48l.56-1.48,1.48.56-.56,1.48-1.48-.56Zm-.56,1.48l.56-1.48,1.48.56-.56,1.48-1.48-.56Zm-.56,1.48l.56-1.48,1.48.56-.56,1.48-1.48-.56Zm-.56,1.48l.56-1.48,1.48.56-.56,1.48-1.48-.56Zm1.04,1.95l-1.84.2.8-2.15,1.48.56-.35.95-.74-.28-.08-.79.57-.06.17,1.58Zm1.58-.17l-1.58.17-.17-1.58,1.58-.17.17,1.58Zm1.58-.17l-1.58.17-.17-1.58,1.58-.17.17,1.58Zm1.58-.17l-1.58.17-.17-1.58,1.58-.17.17,1.58Zm1.58-.17l-1.58.17-.17-1.58,1.58-.17.17,1.58Zm1.58-.17l-1.58.17-.17-1.58,1.58-.17.17,1.58Zm1.58-.17l-1.58.17-.17-1.58,1.58-.17.17,1.58Zm1.58-.17l-1.58.17-.17-1.58,1.58-.17.17,1.58Zm1.58-.17l-1.58.17-.17-1.58,1.58-.17.17,1.58Zm1.58-.17l-1.58.17-.17-1.58,1.58-.17.17,1.58Zm1.58-.17l-1.58.17-.17-1.58,1.58-.17.17,1.58Zm1.59-1.67l1.27,1.37-2.87.3-.17-1.58,1.29-.14.08.79-.58.54-.19-.21,1.16-1.08Zm-1.08-1.16l1.08,1.16-1.16,1.08-1.08-1.16,1.16-1.08Zm-1.08-1.16l1.08,1.16-1.16,1.08-1.08-1.16,1.16-1.08Zm-1.08-1.16l1.08,1.16-1.16,1.08-1.08-1.16,1.16-1.08Zm-1.08-1.16l1.08,1.16-1.16,1.08-1.08-1.16,1.16-1.08Zm-1.08-1.16l1.08,1.16-1.16,1.08-1.08-1.16,1.16-1.08Zm-1.08-1.16l1.08,1.16-1.16,1.08-1.08-1.16,1.16-1.08Zm-1.08-1.16l1.08,1.16-1.16,1.08-1.08-1.16,1.16-1.08Zm-1.08-1.16l1.08,1.16-1.16,1.08-1.08-1.16,1.16-1.08Zm-1.08-1.16l1.08,1.16-1.16,1.08-1.08-1.16,1.16-1.08Zm-1.08-1.16l1.08,1.16-1.16,1.08-1.08-1.16,1.16-1.08Z" fill="#d3d3d3" stroke-width="0"/>
277 - </g>
278 - </g>
279 - </g>
280 - <g clip-path="url(#clippath-14)">
281 - <path d="m836.08,327.37l7.15,4.7c7.15,4.7,21.45,14.1,32.72,21.14,11.27,7.04,19.53,11.71,26.63,15.74,7.1,4.03,13.06,7.4,16.03,9.09l2.98,1.69" fill="none" stroke="#d3d3d3" stroke-width="6.93"/>
282 - </g>
283 - <g clip-path="url(#clippath-15)">
284 - <g clip-path="url(#clippath-16)">
285 - <g clip-path="url(#clippath-17)">
286 - <polygon points="830.12 323.46 839 338.78 847.71 325.54 830.12 323.46" fill="#d3d3d3" stroke-width="0"/>
287 - <path d="m830.59,324.31l-.57-.07.09-.79.69-.4.79,1.37-1.37.79-1.59-2.74,2.14.25-.19,1.57Zm1.57.19l-1.57-.19.19-1.57,1.57.19-.19,1.57Zm1.57.19l-1.57-.19.19-1.57,1.57.19-.19,1.57Zm1.57.19l-1.57-.19.19-1.57,1.57.19-.19,1.57Zm1.57.19l-1.57-.19.19-1.57,1.57.19-.19,1.57Zm1.57.19l-1.57-.19.19-1.57,1.57.19-.19,1.57Zm1.57.19l-1.57-.19.19-1.57,1.57.19-.19,1.57Zm1.57.19l-1.57-.19.19-1.57,1.57.19-.19,1.57Zm1.57.19l-1.57-.19.19-1.57,1.57.19-.19,1.57Zm1.57.19l-1.57-.19.19-1.57,1.57.19-.19,1.57Zm1.57.19l-1.57-.19.19-1.57,1.57.19-.19,1.57Zm.56-.83l.16-.24.66.44-.09.79-1.29-.15.19-1.57,2.56.3-.86,1.31-1.32-.87Zm-.87,1.32l.87-1.32,1.32.87-.87,1.32-1.32-.87Zm-.87,1.32l.87-1.32,1.32.87-.87,1.32-1.32-.87Zm-.87,1.32l.87-1.32,1.32.87-.87,1.32-1.32-.87Zm-.87,1.32l.87-1.32,1.32.87-.87,1.32-1.32-.87Zm-.87,1.32l.87-1.32,1.32.87-.87,1.32-1.32-.87Zm-.87,1.32l.87-1.32,1.32.87-.87,1.32-1.32-.87Zm-.87,1.32l.87-1.32,1.32.87-.87,1.32-1.32-.87Zm-.87,1.32l.87-1.32,1.32.87-.87,1.32-1.32-.87Zm-.87,1.32l.87-1.32,1.32.87-.87,1.32-1.32-.87Zm.49.88l.14.25-.69.4-.66-.44.71-1.08,1.32.87-1.42,2.16-.79-1.36,1.37-.79Zm-.79-1.37l.79,1.37-1.37.79-.79-1.37,1.37-.79Zm-.79-1.37l.79,1.37-1.37.79-.79-1.37,1.37-.79Zm-.79-1.37l.79,1.37-1.37.79-.79-1.37,1.37-.79Zm-.79-1.37l.79,1.37-1.37.79-.79-1.37,1.37-.79Zm-.79-1.37l.79,1.37-1.37.79-.79-1.37,1.37-.79Zm-.79-1.37l.79,1.37-1.37.79-.79-1.37,1.37-.79Zm-.79-1.37l.79,1.37-1.37.79-.79-1.37,1.37-.79Zm-.79-1.37l.79,1.37-1.37.79-.79-1.37,1.37-.79Zm-.79-1.37l.79,1.37-1.37.79-.79-1.37,1.37-.79Zm-.79-1.37l.79,1.37-1.37.79-.79-1.37,1.37-.79Z" fill="#d3d3d3" stroke-width="0"/>
288 - </g>
289 - </g>
290 - </g>
291 - <g clip-path="url(#clippath-18)">
292 - <g clip-path="url(#clippath-19)">
293 - <g clip-path="url(#clippath-20)">
294 - <polygon points="918.6 368.93 928.48 383.63 910.79 382.72 918.6 368.93" fill="#d3d3d3" stroke-width="0"/>
295 - <path d="m917.63,369.04l.91-1.61,1.6,2.38-1.31.88-.88-1.31.66-.44.69.39-.28.5-1.38-.78Zm-.78,1.38l.78-1.38,1.38.78-.78,1.38-1.38-.78Zm-.78,1.38l.78-1.38,1.38.78-.78,1.38-1.38-.78Zm-.78,1.38l.78-1.38,1.38.78-.78,1.38-1.38-.78Zm-.78,1.38l.78-1.38,1.38.78-.78,1.38-1.38-.78Zm-.78,1.38l.78-1.38,1.38.78-.78,1.38-1.38-.78Zm-.78,1.38l.78-1.38,1.38.78-.78,1.38-1.38-.78Zm-.78,1.38l.78-1.38,1.38.78-.78,1.38-1.38-.78Zm-.78,1.38l.78-1.38,1.38.78-.78,1.38-1.38-.78Zm-.78,1.38l.78-1.38,1.38.78-.78,1.38-1.38-.78Zm.72,2.09l-1.85-.1,1.13-2,1.38.78-.5.88-.69-.39.04-.79.57.03-.08,1.58Zm1.58.08l-1.58-.08.08-1.58,1.58.08-.08,1.58Zm1.58.08l-1.58-.08.08-1.58,1.58.08-.08,1.58Zm1.58.08l-1.58-.08.08-1.58,1.58.08-.08,1.58Zm1.58.08l-1.58-.08.08-1.58,1.58.08-.08,1.58Zm1.58.08l-1.58-.08.08-1.58,1.58.08-.08,1.58Zm1.58.08l-1.58-.08.08-1.58,1.58.08-.08,1.58Zm1.58.08l-1.58-.08.08-1.58,1.58.08-.08,1.58Zm1.58.08l-1.58-.08.08-1.58,1.58.08-.08,1.58Zm1.58.08l-1.58-.08.08-1.58,1.58.08-.08,1.58Zm1.58.08l-1.58-.08.08-1.58,1.58.08-.08,1.58Zm1.84-1.4l1.04,1.55-2.88-.15.08-1.58,1.3.07-.04.79-.66.44-.16-.24,1.31-.88Zm-.88-1.31l.88,1.31-1.31.88-.88-1.31,1.31-.88Zm-.88-1.31l.88,1.31-1.31.88-.88-1.31,1.32-.88Zm-.88-1.31l.88,1.31-1.32.88-.88-1.32,1.31-.88Zm-.88-1.32l.88,1.32-1.31.88-.88-1.31,1.31-.88Zm-.88-1.31l.88,1.31-1.31.88-.88-1.31,1.32-.88Zm-.88-1.31l.88,1.31-1.32.88-.88-1.31,1.31-.88Zm-.88-1.31l.88,1.31-1.31.88-.88-1.31,1.31-.88Zm-.88-1.31l.88,1.31-1.31.88-.88-1.31,1.31-.88Zm-.88-1.31l.88,1.31-1.31.88-.88-1.31,1.31-.88Zm-.88-1.31l.88,1.31-1.31.88-.88-1.31,1.31-.88Z" fill="#d3d3d3" stroke-width="0"/>
296 - </g>
297 - </g>
298 - </g>
299 - <g clip-path="url(#clippath-21)">
300 - <path d="m441.45,173.76l18.17,45.82c18.17,45.82,54.52,137.45,100.07,183.27,45.55,45.82,100.29,45.82,155.04,45.82h205.82" fill="none" stroke="#d3d3d3" stroke-width="6.93"/>
301 - </g>
302 - <g clip-path="url(#clippath-22)">
303 - <g clip-path="url(#clippath-23)">
304 - <g clip-path="url(#clippath-24)">
305 - <polygon points="438.82 167.13 437.3 184.78 452.02 178.93 438.82 167.13" fill="#d3d3d3" stroke-width="0"/>
306 - <path d="m438.72,168.1l-.43-.38.53-.59.79.07-.14,1.58-1.58-.14.27-3.16,1.61,1.44-1.06,1.18Zm1.18,1.06l-1.18-1.06,1.06-1.18,1.18,1.06-1.06,1.18Zm1.18,1.06l-1.18-1.06,1.06-1.18,1.18,1.06-1.06,1.18Zm1.18,1.06l-1.18-1.06,1.06-1.18,1.18,1.06-1.06,1.18Zm1.18,1.06l-1.18-1.06,1.06-1.18,1.18,1.06-1.06,1.18Zm1.18,1.06l-1.18-1.06,1.06-1.18,1.18,1.06-1.06,1.18Zm1.18,1.06l-1.18-1.06,1.06-1.18,1.18,1.06-1.06,1.18Zm1.18,1.06l-1.18-1.06,1.06-1.18,1.18,1.06-1.06,1.18Zm1.18,1.06l-1.18-1.06,1.06-1.18,1.18,1.06-1.06,1.18Zm1.18,1.06l-1.18-1.06,1.06-1.18,1.18,1.06-1.06,1.18Zm1.18,1.06l-1.18-1.06,1.06-1.18,1.18,1.06-1.06,1.18Zm.94-.36l.27-.11.29.74-.53.59-.97-.87,1.06-1.18,1.92,1.72-1.46.58-.58-1.47Zm-1.47.58l1.47-.58.58,1.47-1.47.58-.58-1.47Zm-1.47.58l1.47-.58.58,1.47-1.47.58-.58-1.47Zm-1.47.58l1.47-.58.58,1.47-1.47.58-.58-1.47Zm-1.47.58l1.47-.58.58,1.47-1.47.58-.58-1.47Zm-1.47.58l1.47-.58.58,1.47-1.47.58-.58-1.47Zm-1.47.58l1.47-.58.58,1.47-1.47.58-.58-1.47Zm-1.47.58l1.47-.58.58,1.47-1.47.58-.58-1.47Zm-1.47.58l1.47-.58.58,1.47-1.47.58-.58-1.47Zm-1.47.58l1.47-.58.58,1.47-1.47.58-.58-1.47Zm-.1,1l-.02.28-.79-.07-.29-.74,1.21-.48.58,1.47-2.4.95.13-1.56,1.58.14Zm.14-1.58l-.14,1.58-1.58-.14.14-1.58,1.58.14Zm.14-1.58l-.14,1.58-1.58-.14.14-1.58,1.58.14Zm.14-1.58l-.14,1.58-1.58-.14.14-1.58,1.58.14Zm.14-1.58l-.14,1.58-1.58-.14.14-1.58,1.58.14Zm.14-1.58l-.14,1.58-1.58-.14.14-1.58,1.58.14Zm.14-1.58l-.14,1.58-1.58-.14.14-1.58,1.58.14Zm.14-1.58l-.14,1.58-1.58-.14.14-1.58,1.58.14Zm.14-1.58l-.14,1.58-1.58-.14.14-1.58,1.58.14Zm.14-1.58l-.14,1.58-1.58-.14.14-1.58,1.58.14Zm.14-1.58l-.14,1.58-1.58-.14.14-1.58,1.58.14Z" fill="#d3d3d3" stroke-width="0"/>
307 - </g>
308 - </g>
309 - </g>
310 - <g clip-path="url(#clippath-25)">
311 - <polygon points="912.63 440.73 928.48 448.65 912.63 456.58 912.63 440.73" fill="#d3d3d3" stroke-width="0"/>
312 - <path d="m911.84,441.3v-1.85l2.56,1.28-.71,1.42-1.42-.71.35-.71h.79v.57h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm1.66,1.47l-1.66.83v-2.29h1.58v1.01h-.79l-.35-.71.51-.26.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm.91-2.13l1.67.84-2.58,1.29-.71-1.42,1.16-.58.35.71-.35.71-.26-.13.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Z" fill="#d3d3d3" stroke-width="0"/>
313 - </g>
314 - <g clip-path="url(#clippath-26)">
315 - <path d="m508.82,99.32l6.95-1.03c6.95-1.03,20.84-3.1,55.16-4.13,34.32-1.03,89.06-1.03,143.81-1.03h328.47c54.75,0,109.49,0,144.72,7.65,35.23,7.65,50.95,22.96,65.72,37.35s28.6,27.85,35.51,34.59l6.91,6.73" fill="none" stroke="#d3d3d3" stroke-width="1.98"/>
316 - </g>
317 - <g clip-path="url(#clippath-27)">
318 - <g clip-path="url(#clippath-28)">
319 - <g clip-path="url(#clippath-29)">
320 - <polygon points="501.77 100.36 518.61 105.87 516.28 90.2 501.77 100.36" fill="#d3d3d3" stroke-width="0"/>
321 - <path d="m502.69,100.68l-.47.33-.45-.65.25-.75,1.51.49-.49,1.51-3.01-.99,1.77-1.24.91,1.3Zm1.3-.91l-1.3.91-.91-1.3,1.3-.91.91,1.3Zm1.3-.91l-1.3.91-.91-1.3,1.3-.91.91,1.3Zm1.3-.91l-1.3.91-.91-1.3,1.3-.91.91,1.3Zm1.3-.91l-1.3.91-.91-1.3,1.3-.91.91,1.3Zm1.3-.91l-1.3.91-.91-1.3,1.3-.91.91,1.3Zm1.3-.91l-1.3.91-.91-1.3,1.3-.91.91,1.3Zm1.3-.91l-1.3.91-.91-1.3,1.3-.91.91,1.3Zm1.3-.91l-1.3.91-.91-1.3,1.3-.91.91,1.3Zm1.3-.91l-1.3.91-.91-1.3,1.3-.91.91,1.3Zm1.3-.91l-1.3.91-.91-1.3,1.3-.91.91,1.3Zm-.13-.99l-.04-.28.78-.12.45.65-1.06.75-.91-1.3,2.11-1.48.23,1.55-1.57.23Zm.23,1.57l-.23-1.57,1.57-.23.23,1.57-1.57.23Zm.23,1.57l-.23-1.57,1.57-.23.23,1.57-1.57.23Zm.23,1.57l-.23-1.57,1.57-.23.23,1.57-1.57.23Zm.23,1.57l-.23-1.57,1.57-.23.23,1.57-1.57.23Zm.23,1.57l-.23-1.57,1.57-.23.23,1.57-1.57.23Zm.23,1.57l-.23-1.57,1.57-.23.23,1.57-1.57.23Zm.23,1.57l-.23-1.57,1.57-.23.23,1.57-1.57.23Zm.23,1.57l-.23-1.57,1.57-.23.23,1.57-1.57.23Zm.23,1.57l-.23-1.57,1.57-.23.23,1.57-1.57.23Zm.95.33l.27.09-.25.75-.78.12-.19-1.28,1.57-.23.38,2.55-1.49-.49.49-1.51Zm-1.51-.49l1.51.49-.49,1.51-1.51-.49.49-1.51Zm-1.51-.49l1.51.49-.49,1.51-1.51-.49.49-1.51Zm-1.51-.49l1.51.49-.49,1.51-1.51-.49.49-1.51Zm-1.51-.49l1.51.49-.49,1.51-1.51-.49.49-1.51Zm-1.51-.49l1.51.49-.49,1.51-1.51-.49.49-1.51Zm-1.51-.49l1.51.49-.49,1.51-1.51-.49.49-1.51Zm-1.51-.49l1.51.49-.49,1.51-1.51-.49.49-1.51Zm-1.51-.49l1.51.49-.49,1.51-1.51-.49.49-1.51Zm-1.51-.49l1.51.49-.49,1.51-1.51-.49.49-1.51Zm-1.51-.49l1.51.49-.49,1.51-1.51-.49.49-1.51Z" fill="#d3d3d3" stroke-width="0"/>
322 - </g>
323 - </g>
324 - </g>
325 - <g clip-path="url(#clippath-30)">
326 - <g clip-path="url(#clippath-31)">
327 - <g clip-path="url(#clippath-32)">
328 - <polygon points="1295.92 168.24 1301.74 184.97 1284.87 179.59 1295.92 168.24" fill="#d3d3d3" stroke-width="0"/>
329 - <path d="m1294.95,168.1l1.29-1.33.94,2.71-1.5.52-.52-1.5.75-.26.57.55-.4.41-1.13-1.11Zm-1.11,1.13l1.11-1.13,1.13,1.11-1.11,1.13-1.13-1.11Zm-1.11,1.13l1.11-1.13,1.13,1.11-1.11,1.13-1.13-1.11Zm-1.11,1.13l1.11-1.13,1.13,1.11-1.11,1.13-1.13-1.11Zm-1.11,1.13l1.11-1.13,1.13,1.11-1.11,1.13-1.13-1.11Zm-1.11,1.13l1.11-1.13,1.13,1.11-1.11,1.13-1.13-1.11Zm-1.11,1.13l1.11-1.13,1.13,1.11-1.11,1.13-1.13-1.11Zm-1.11,1.13l1.11-1.13,1.13,1.11-1.11,1.13-1.13-1.11Zm-1.11,1.13l1.11-1.13,1.13,1.11-1.11,1.13-1.13-1.11Zm-1.11,1.13l1.11-1.13,1.13,1.11-1.11,1.13-1.13-1.11Zm.16,2.21l-1.77-.56,1.6-1.64,1.13,1.11-.71.73-.57-.55.24-.75.54.17-.48,1.51Zm1.51.48l-1.51-.48.48-1.51,1.51.48-.48,1.51Zm1.51.48l-1.51-.48.48-1.51,1.51.48-.48,1.51Zm1.51.48l-1.51-.48.48-1.51,1.51.48-.48,1.51Zm1.51.48l-1.51-.48.48-1.51,1.51.48-.48,1.51Zm1.51.48l-1.51-.48.48-1.51,1.51.48-.48,1.51Zm1.51.48l-1.51-.48.48-1.51,1.51.48-.48,1.51Zm1.51.48l-1.51-.48.48-1.51,1.51.48-.48,1.51Zm1.51.48l-1.51-.48.48-1.51,1.51.48-.48,1.51Zm1.51.48l-1.51-.48.48-1.51,1.51.48-.48,1.51Zm1.51.48l-1.51-.48.48-1.51,1.51.48-.48,1.51Zm2.13-.89l.61,1.77-2.75-.88.48-1.51,1.24.39-.24.75-.75.26-.09-.27,1.5-.52Zm-.52-1.5l.52,1.5-1.5.52-.52-1.5,1.5-.52Zm-.52-1.5l.52,1.5-1.5.52-.52-1.5,1.5-.52Zm-.52-1.5l.52,1.5-1.5.52-.52-1.5,1.5-.52Zm-.52-1.5l.52,1.5-1.5.52-.52-1.5,1.5-.52Zm-.52-1.5l.52,1.5-1.5.52-.52-1.5,1.5-.52Zm-.52-1.5l.52,1.5-1.5.52-.52-1.5,1.5-.52Zm-.52-1.5l.52,1.5-1.5.52-.52-1.5,1.5-.52Zm-.52-1.5l.52,1.5-1.5.52-.52-1.5,1.5-.52Zm-.52-1.5l.52,1.5-1.5.52-.52-1.5,1.5-.52Zm-.52-1.5l.52,1.5-1.5.52-.52-1.5,1.5-.52Z" fill="#d3d3d3" stroke-width="0"/>
330 - </g>
331 - </g>
332 - </g>
333 - <g clip-path="url(#clippath-33)">
334 - <path d="m837.32,232.81l6.94-.84c6.94-.84,20.82-2.51,55.14-3.35,34.31-.84,89.06-.84,143.8-.84s109.49,0,141.07.08c31.58.08,40,.25,47.09.39,7.1.14,12.87.25,15.76.31l2.89.06" fill="none" stroke="#d3d3d3" stroke-width="1.98"/>
335 - </g>
336 - <g clip-path="url(#clippath-34)">
337 - <g clip-path="url(#clippath-35)">
338 - <g clip-path="url(#clippath-36)">
339 - <polygon points="830.24 233.66 846.92 239.63 845.02 223.9 830.24 233.66" fill="#d3d3d3" stroke-width="0"/>
340 - <path d="m831.16,234.01l-.48.31-.44-.66.27-.75,1.49.53-.53,1.49-2.98-1.07,1.8-1.19.87,1.32Zm1.32-.87l-1.32.87-.87-1.32,1.32-.87.87,1.32Zm1.32-.87l-1.32.87-.87-1.32,1.32-.87.87,1.32Zm1.32-.87l-1.32.87-.87-1.32,1.32-.87.87,1.32Zm1.32-.87l-1.32.87-.87-1.32,1.32-.87.87,1.32Zm1.32-.87l-1.32.87-.87-1.32,1.32-.87.87,1.32Zm1.32-.87l-1.32.87-.87-1.32,1.32-.87.87,1.32Zm1.32-.87l-1.32.87-.87-1.32,1.32-.87.87,1.32Zm1.32-.87l-1.32.87-.87-1.32,1.32-.87.87,1.32Zm1.32-.87l-1.32.87-.87-1.32,1.32-.87.87,1.32Zm1.32-.87l-1.32.87-.87-1.32,1.32-.87.87,1.32Zm-.11-1l-.03-.28.79-.09.44.66-1.08.72-.87-1.32,2.15-1.42.19,1.56-1.57.19Zm.19,1.57l-.19-1.57,1.57-.19.19,1.57-1.57.19Zm.19,1.57l-.19-1.57,1.57-.19.19,1.57-1.57.19Zm.19,1.57l-.19-1.57,1.57-.19.19,1.57-1.57.19Zm.19,1.57l-.19-1.57,1.57-.19.19,1.57-1.57.19Zm.19,1.57l-.19-1.57,1.57-.19.19,1.57-1.57.19Zm.19,1.57l-.19-1.57,1.57-.19.19,1.57-1.57.19Zm.19,1.57l-.19-1.57,1.57-.19.19,1.57-1.57.19Zm.19,1.57l-.19-1.57,1.57-.19.19,1.57-1.57.19Zm.19,1.57l-.19-1.57,1.57-.19.19,1.57-1.57.19Zm.94.35l.27.1-.27.75-.79.09-.16-1.29,1.57-.19.31,2.56-1.48-.53.53-1.49Zm-1.49-.53l1.49.53-.53,1.49-1.49-.53.53-1.49Zm-1.49-.53l1.49.53-.53,1.49-1.49-.53.53-1.49Zm-1.49-.53l1.49.53-.53,1.49-1.49-.53.53-1.49Zm-1.49-.53l1.49.53-.53,1.49-1.49-.53.53-1.49Zm-1.49-.53l1.49.53-.53,1.49-1.49-.53.53-1.49Zm-1.49-.53l1.49.53-.53,1.49-1.49-.53.53-1.49Zm-1.49-.53l1.49.53-.53,1.49-1.49-.53.53-1.49Zm-1.49-.53l1.49.53-.53,1.49-1.49-.53.53-1.49Zm-1.49-.53l1.49.53-.53,1.49-1.49-.53.53-1.49Zm-1.49-.53l1.49.53-.53,1.49-1.49-.53.53-1.49Z" fill="#d3d3d3" stroke-width="0"/>
341 - </g>
342 - </g>
343 - </g>
344 - <g clip-path="url(#clippath-37)">
345 - <g clip-path="url(#clippath-38)">
346 - <g clip-path="url(#clippath-39)">
347 - <polygon points="1242.25 220.54 1257.94 228.78 1241.94 236.38 1242.25 220.54" fill="#d3d3d3" stroke-width="0"/>
348 - <path d="m1241.45,221.1l.04-1.85,2.54,1.33-.74,1.4-1.4-.74.37-.7.79.02v.57s-1.6-.03-1.6-.03Zm-.03,1.58l.03-1.58,1.58.03-.03,1.58-1.58-.03Zm-.03,1.58l.03-1.58,1.58.03-.03,1.58-1.58-.03Zm-.03,1.58l.03-1.58,1.58.03-.03,1.58-1.58-.03Zm-.03,1.58l.03-1.58,1.58.03-.03,1.58-1.58-.03Zm-.03,1.58l.03-1.58,1.58.03-.03,1.58-1.58-.03Zm-.03,1.58l.03-1.58,1.58.03-.03,1.58-1.58-.03Zm-.03,1.58l.03-1.58,1.58.03-.03,1.58-1.58-.03Zm-.03,1.58l.03-1.58,1.58.03-.03,1.58-1.58-.03Zm-.03,1.58l.03-1.58,1.58.03-.03,1.58-1.58-.03Zm1.63,1.5l-1.67.8.05-2.29,1.58.03-.02,1.01-.79-.02-.34-.72.52-.25.68,1.43Zm1.43-.68l-1.43.68-.68-1.43,1.43-.68.68,1.43Zm1.43-.68l-1.43.68-.68-1.43,1.43-.68.68,1.43Zm1.43-.68l-1.43.68-.68-1.43,1.43-.68.68,1.43Zm1.43-.68l-1.43.68-.68-1.43,1.43-.68.68,1.43Zm1.43-.68l-1.43.68-.68-1.43,1.43-.68.68,1.43Zm1.43-.68l-1.43.68-.68-1.43,1.43-.68.68,1.43Zm1.43-.68l-1.43.68-.68-1.43,1.43-.68.68,1.43Zm1.43-.68l-1.43.68-.68-1.43,1.43-.68.68,1.43Zm1.43-.68l-1.43.68-.68-1.43,1.43-.68.68,1.43Zm1.43-.68l-1.43.68-.68-1.43,1.43-.68.68,1.43Zm.95-2.11l1.66.87-2.6,1.24-.68-1.43,1.17-.56.34.72-.37.7-.25-.13.74-1.4Zm-1.4-.74l1.4.74-.74,1.4-1.4-.74.74-1.4Zm-1.4-.74l1.4.74-.74,1.4-1.4-.74.74-1.4Zm-1.4-.74l1.4.74-.74,1.4-1.4-.74.74-1.4Zm-1.4-.74l1.4.74-.74,1.4-1.4-.74.74-1.4Zm-1.4-.74l1.4.74-.74,1.4-1.4-.74.74-1.4Zm-1.4-.74l1.4.74-.74,1.4-1.4-.74.74-1.4Zm-1.4-.74l1.4.74-.74,1.4-1.4-.74.74-1.4Zm-1.4-.74l1.4.74-.74,1.4-1.4-.74.74-1.4Zm-1.4-.74l1.4.74-.74,1.4-1.4-.74.74-1.4Zm-1.4-.74l1.4.74-.74,1.4-1.4-.74.74-1.4Z" fill="#d3d3d3" stroke-width="0"/>
349 - </g>
350 - </g>
351 - </g>
352 - <g clip-path="url(#clippath-40)">
353 - <path d="m1165.85,448.65h6.93c6.93,0,20.79,0,36.48-13.77,15.69-13.77,33.21-41.32,50.01-67.75,16.81-26.43,32.91-51.75,40.96-64.41l8.05-12.66" fill="none" stroke="#d3d3d3" stroke-width="1.98"/>
354 - </g>
355 - <g clip-path="url(#clippath-41)">
356 - <polygon points="1158.72 448.65 1174.56 456.58 1174.56 440.73 1158.72 448.65" fill="#d3d3d3" stroke-width="0"/>
357 - <path d="m1159.59,449.11l-.51.26-.35-.71.35-.71,1.42.71-.71,1.42-2.83-1.42,1.93-.96.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm.02-1v-.29h.79l.35.71-1.16.58-.71-1.42,2.31-1.15v1.57h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm.89.46l.26.13-.35.71h-.79v-1.3h1.58v2.58l-1.4-.7.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Z" fill="#d3d3d3" stroke-width="0"/>
358 - </g>
359 - <g clip-path="url(#clippath-42)">
360 - <g clip-path="url(#clippath-43)">
361 - <g clip-path="url(#clippath-44)">
362 - <polygon points="1297.35 292.5 1312.54 283.38 1310.72 301 1297.35 292.5" fill="#d3d3d3" stroke-width="0"/>
363 - <path d="m1297.41,293.47l-1.56-.99,2.46-1.48.82,1.36-1.36.82-.41-.68.43-.67.48.31-.85,1.34Zm1.34.85l-1.34-.85.85-1.34,1.34.85-.85,1.34Zm1.34.85l-1.34-.85.85-1.34,1.34.85-.85,1.34Zm1.34.85l-1.34-.85.85-1.34,1.34.85-.85,1.34Zm1.34.85l-1.34-.85.85-1.34,1.34.85-.85,1.34Zm1.34.85l-1.34-.85.85-1.34,1.34.85-.85,1.34Zm1.34.85l-1.34-.85.85-1.34,1.34.85-.85,1.34Zm1.34.85l-1.34-.85.85-1.34,1.34.85-.85,1.34Zm1.34.85l-1.34-.85.85-1.34,1.34.85-.85,1.34Zm1.34.85l-1.34-.85.85-1.34,1.34.85-.85,1.34Zm2.13-.61l-.19,1.84-1.94-1.23.85-1.34.85.54-.43.67-.79-.08.06-.57,1.58.16Zm.16-1.58l-.16,1.58-1.58-.16.16-1.58,1.58.16Zm.16-1.58l-.16,1.58-1.58-.16.16-1.58,1.58.16Zm.16-1.58l-.16,1.58-1.58-.16.16-1.58,1.58.16Zm.16-1.58l-.16,1.58-1.58-.16.16-1.58,1.58.16Zm.16-1.58l-.16,1.58-1.58-.16.16-1.58,1.58.16Zm.16-1.58l-.16,1.58-1.58-.16.16-1.58,1.58.16Zm.16-1.58l-.16,1.58-1.58-.16.16-1.58,1.58.16Zm.16-1.58l-.16,1.58-1.58-.16.16-1.58,1.58.16Zm.16-1.58l-.16,1.58-1.58-.16.16-1.58,1.58.16Zm.16-1.58l-.16,1.58-1.58-.16.16-1.58,1.58.16Zm-1.31-1.91l1.6-.96-.3,2.87-1.58-.16.13-1.29.79.08.41.68-.25.15-.82-1.36Zm-1.36.82l1.36-.82.82,1.36-1.36.82-.82-1.36Zm-1.36.82l1.36-.82.82,1.36-1.36.82-.82-1.36Zm-1.36.82l1.36-.82.82,1.36-1.36.82-.82-1.36Zm-1.36.82l1.36-.82.82,1.36-1.36.82-.82-1.36Zm-1.36.82l1.36-.82.82,1.36-1.36.82-.82-1.36Zm-1.36.82l1.36-.82.82,1.36-1.36.82-.82-1.36Zm-1.36.82l1.36-.82.82,1.36-1.36.82-.82-1.36Zm-1.36.82l1.36-.82.82,1.36-1.36.82-.82-1.36Zm-1.36.82l1.36-.82.82,1.36-1.36.82-.82-1.36Zm-1.36.82l1.36-.82.82,1.36-1.36.82-.82-1.36Z" fill="#d3d3d3" stroke-width="0"/>
364 - </g>
365 - </g>
366 - </g>
367 - <g clip-path="url(#clippath-45)">
368 - <path d="m1570.61,226.79h3.54v1.98h-3.54v-1.98Zm-8.03,0h3.65v1.98h-3.65v-1.98Zm-7.99,0h3.86v1.98h-3.86v-1.98Zm-8.02,0h4.19v1.98h-4.19v-1.98Zm-7.45,0h3.7v1.98h-3.7v-1.98Zm-8.36,0h4.35v1.98h-4.35v-1.98Zm-7.58,0h3.73s0,1.98,0,1.98h-3.73s0-1.98,0-1.98Zm-7.98,0h4.07s0,1.98,0,1.98h-4.07s0-1.98,0-1.98Zm-8.33.02h4.12s0,1.97,0,1.97h-4.12s0-1.97,0-1.97Zm-7.8.03l3.93-.02v1.98s-3.92.02-3.92.02v-1.98Zm-7.99.05l4.01-.03v1.98s-3.99.03-3.99.03v-1.98Zm-8.09.07h1.22s1.88-.03,1.88-.03h.97s.02,1.97.02,1.97h-.97s-1.88.03-1.88.03h-1.22s-.02-1.97-.02-1.97Zm-8.22.1l4.09-.05.03,1.98-4.09.05-.03-1.98Zm-7.93.12l3.91-.06.03,1.98-3.91.06-.03-1.98Zm-7.68.13l3.9-.07.03,1.98-3.9.07-.03-1.98Zm-7.83.15l3.75-.07.04,1.98-3.75.07-.04-1.98Zm-7.89.16h.17s3.46-.07,3.46-.07l.04,1.98-3.46.07h-.17s-.04-1.98-.04-1.98Zm-7.92.16l3.96-.08.04,1.98-3.96.08-.04-1.98Z" fill="#d3d3d3" stroke-width="0"/>
369 - </g>
370 - <g clip-path="url(#clippath-46)">
371 - <polygon points="1567.22 219.86 1583.07 227.78 1567.22 235.71 1567.22 219.86" fill="#d3d3d3" stroke-width="0"/>
372 - <path d="m1566.43,220.43v-1.85l2.56,1.28-.71,1.42-1.42-.71.35-.71h.79v.57h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm1.66,1.47l-1.66.83v-2.29h1.58v1.01h-.79l-.35-.71.51-.26.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm.91-2.13l1.67.84-2.58,1.29-.71-1.42,1.16-.58.35.71-.35.71-.26-.13.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Z" fill="#d3d3d3" stroke-width="0"/>
373 - </g>
374 - <g clip-path="url(#clippath-47)">
375 - <path d="m1996.07,227.78h83.18" fill="none" stroke="#d3d3d3" stroke-width="1.98"/>
376 - </g>
377 - <g clip-path="url(#clippath-48)">
378 - <polygon points="1988.94 227.78 2004.79 235.71 2004.79 219.86 1988.94 227.78" fill="#d3d3d3" stroke-width="0"/>
379 - <path d="m1989.81,228.24l-.51.26-.35-.71.35-.71,1.42.71-.71,1.42-2.83-1.42,1.93-.96.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm.02-1v-.29h.79l.35.71-1.16.58-.71-1.42,2.31-1.15v1.57h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm.89.46l.26.13-.35.71h-.79v-1.3h1.58v2.58l-1.4-.7.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Z" fill="#d3d3d3" stroke-width="0"/>
380 - </g>
381 - <g clip-path="url(#clippath-49)">
382 - <polygon points="2071.33 219.86 2087.17 227.78 2071.33 235.71 2071.33 219.86" fill="#d3d3d3" stroke-width="0"/>
383 - <path d="m2070.54,220.43v-1.85l2.56,1.28-.71,1.42-1.42-.71.35-.71h.79v.57h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm0,1.58v-1.58h1.58v1.58h-1.58Zm1.66,1.47l-1.66.83v-2.29h1.58v1.01h-.79l-.35-.71.51-.26.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm1.42-.71l-1.42.71-.71-1.42,1.42-.71.71,1.42Zm.91-2.13l1.67.84-2.58,1.29-.71-1.42,1.16-.58.35.71-.35.71-.26-.13.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Zm-1.42-.71l1.42.71-.71,1.42-1.42-.71.71-1.42Z" fill="#d3d3d3" stroke-width="0"/>
384 - </g>
385 - <g clip-path="url(#clippath-50)">
386 - <path d="m234.62,324.07l8.25-8.28c8.25-8.28,24.75-24.85,40.43-42.13,15.67-17.28,30.52-35.28,44.52-52.26,14.01-16.98,27.17-32.94,33.75-40.92l6.58-7.98" fill="none" stroke="#d3d3d3" stroke-width="1.98"/>
387 - </g>
388 - <g clip-path="url(#clippath-51)">
389 - <g clip-path="url(#clippath-52)">
390 - <g clip-path="url(#clippath-53)">
391 - <polygon points="357.02 173.57 373.21 166.39 369.24 183.66 357.02 173.57" fill="#d3d3d3" stroke-width="0"/>
392 - <path d="m356.95,174.55l-1.43-1.18,2.62-1.16.64,1.45-1.45.64-.32-.72.5-.61.44.36-1.01,1.22Zm1.22,1.01l-1.22-1.01,1.01-1.22,1.22,1.01-1.01,1.22Zm1.22,1.01l-1.22-1.01,1.01-1.22,1.22,1.01-1.01,1.22Zm1.22,1.01l-1.22-1.01,1.01-1.22,1.22,1.01-1.01,1.22Zm1.22,1.01l-1.22-1.01,1.01-1.22,1.22,1.01-1.01,1.22Zm1.22,1.01l-1.22-1.01,1.01-1.22,1.22,1.01-1.01,1.22Zm1.22,1.01l-1.22-1.01,1.01-1.22,1.22,1.01-1.01,1.22Zm1.22,1.01l-1.22-1.01,1.01-1.22,1.22,1.01-1.01,1.22Zm1.22,1.01l-1.22-1.01,1.01-1.22,1.22,1.01-1.01,1.22Zm1.22,1.01l-1.22-1.01,1.01-1.22,1.22,1.01-1.01,1.22Zm2.19-.35l-.42,1.81-1.77-1.46,1.01-1.22.78.64-.5.61-.77-.18.13-.56,1.54.36Zm.36-1.54l-.36,1.54-1.54-.36.36-1.54,1.54.36Zm.36-1.54l-.36,1.54-1.54-.36.36-1.54,1.54.36Zm.36-1.54l-.36,1.54-1.54-.36.36-1.54,1.54.36Zm.36-1.54l-.36,1.54-1.54-.36.36-1.54,1.54.36Zm.36-1.54l-.36,1.54-1.54-.36.36-1.54,1.54.36Zm.36-1.54l-.36,1.54-1.54-.36.36-1.54,1.54.36Zm.36-1.54l-.36,1.54-1.54-.36.36-1.54,1.54.36Zm.36-1.54l-.36,1.54-1.54-.36.36-1.54,1.54.36Zm.36-1.54l-.36,1.54-1.54-.36.36-1.54,1.54.36Zm.36-1.54l-.36,1.54-1.54-.36.36-1.54,1.54.36Zm-1.06-2.05l1.71-.76-.65,2.81-1.54-.36.29-1.27.77.18.32.72-.26.12-.64-1.45Zm-1.45.64l1.45-.64.64,1.45-1.45.64-.64-1.45Zm-1.45.64l1.45-.64.64,1.45-1.45.64-.64-1.45Zm-1.45.64l1.45-.64.64,1.45-1.45.64-.64-1.45Zm-1.45.64l1.45-.64.64,1.45-1.45.64-.64-1.45Zm-1.45.64l1.45-.64.64,1.45-1.45.64-.64-1.45Zm-1.45.64l1.45-.64.64,1.45-1.45.64-.64-1.45Zm-1.45.64l1.45-.64.64,1.45-1.45.64-.64-1.45Zm-1.45.64l1.45-.64.64,1.45-1.45.64-.64-1.45Zm-1.45.64l1.45-.64.64,1.45-1.45.64-.64-1.45Zm-1.45.64l1.45-.64.64,1.45-1.45.64-.64-1.45Z" fill="#d3d3d3" stroke-width="0"/>
393 - </g>
394 - </g>
395 - </g>
396 - <g clip-path="url(#clippath-54)">
397 - <path d="m234.62,379.15l8.25-3.93c8.25-3.93,24.75-11.79,55.2-15.72,30.45-3.93,74.84-3.93,119.23-3.93s88.79,0,115.11-2.71c26.32-2.71,34.57-8.14,41.72-12.84,7.15-4.7,13.19-8.68,16.22-10.66l3.02-1.99" fill="none" stroke="#d3d3d3" stroke-width="1.98"/>
398 - </g>
399 - <g clip-path="url(#clippath-55)">
400 - <g clip-path="url(#clippath-56)">
401 - <g clip-path="url(#clippath-57)">
402 - <polygon points="582.42 325.11 600.01 323.02 591.12 338.34 582.42 325.11" fill="#d3d3d3" stroke-width="0"/>
403 - <path d="m582.07,326.02l-1.02-1.55,2.85-.34.19,1.57-1.57.19-.09-.79.66-.44.31.48-1.32.87Zm.87,1.32l-.87-1.32,1.32-.87.87,1.32-1.32.87Zm.87,1.32l-.87-1.32,1.32-.87.87,1.32-1.32.87Zm.87,1.32l-.87-1.32,1.32-.87.87,1.32-1.32.87Zm.87,1.32l-.87-1.32,1.32-.87.87,1.32-1.32.87Zm.87,1.32l-.87-1.32,1.32-.87.87,1.32-1.32.87Zm.87,1.32l-.87-1.32,1.32-.87.87,1.32-1.32.87Zm.87,1.32l-.87-1.32,1.32-.87.87,1.32-1.32.87Zm.87,1.32l-.87-1.32,1.32-.87.87,1.32-1.32.87Zm.87,1.32l-.87-1.32,1.32-.87.87,1.32-1.32.87Zm2.19.31l-.93,1.6-1.26-1.92,1.32-.87.56.85-.66.44-.69-.4.29-.49,1.37.79Zm.79-1.37l-.79,1.37-1.37-.79.79-1.37,1.37.79Zm.79-1.37l-.79,1.37-1.37-.79.79-1.37,1.37.79Zm.79-1.37l-.79,1.37-1.37-.79.79-1.37,1.37.79Zm.79-1.37l-.79,1.37-1.37-.79.79-1.37,1.37.79Zm.79-1.37l-.79,1.37-1.37-.79.79-1.37,1.37.79Zm.79-1.37l-.79,1.37-1.37-.79.79-1.37,1.37.79Zm.79-1.37l-.79,1.37-1.37-.79.79-1.37,1.37.79Zm.79-1.37l-.79,1.37-1.37-.79.79-1.37,1.37.79Zm.79-1.37l-.79,1.37-1.37-.79.79-1.37,1.37.79Zm.79-1.37l-.79,1.37-1.37-.79.79-1.37,1.37.79Zm-.41-2.27l1.86-.22-1.45,2.49-1.37-.79.65-1.12.69.4.09.79-.28.03-.19-1.57Zm-1.57.19l1.57-.19.19,1.57-1.57.19-.19-1.57Zm-1.57.19l1.57-.19.19,1.57-1.57.19-.19-1.57Zm-1.57.19l1.57-.19.19,1.57-1.57.19-.19-1.57Zm-1.57.19l1.57-.19.19,1.57-1.57.19-.19-1.57Zm-1.57.19l1.57-.19.19,1.57-1.57.19-.19-1.57Zm-1.57.19l1.57-.19.19,1.57-1.57.19-.19-1.57Zm-1.57.19l1.57-.19.19,1.57-1.57.19-.19-1.57Zm-1.57.19l1.57-.19.19,1.57-1.57.19-.19-1.57Zm-1.57.19l1.57-.19.19,1.57-1.57.19-.19-1.57Zm-1.57.19l1.57-.19.19,1.57-1.57.19-.19-1.57Z" fill="#d3d3d3" stroke-width="0"/>
404 - </g>
405 - </g>
406 - </g>
407 - <g clip-path="url(#clippath-58)">
408 - <path d="m234.62,469.15l8.25,3.18c8.25,3.19,24.75,9.56,55.2,12.74,30.45,3.19,74.84,3.19,119.23,3.19h297.42c54.75,0,109.49,0,140.99-1,31.5-.99,39.75-2.98,46.72-4.67,6.97-1.68,12.65-3.05,15.5-3.74l2.84-.69" fill="none" stroke="#d3d3d3" stroke-width="1.98"/>
409 - </g>
410 - <g clip-path="url(#clippath-59)">
411 - <g clip-path="url(#clippath-60)">
412 - <g clip-path="url(#clippath-61)">
413 - <polygon points="911.22 472.33 928.48 476.32 914.93 487.74 911.22 472.33" fill="#d3d3d3" stroke-width="0"/>
414 - <path d="m910.58,473.08l-.43-1.8,2.79.65-.36,1.54-1.54-.36.18-.77.77-.19.13.56-1.54.37Zm.37,1.54l-.37-1.54,1.54-.37.37,1.54-1.54.37Zm.37,1.54l-.37-1.54,1.54-.37.37,1.54-1.54.37Zm.37,1.54l-.37-1.54,1.54-.37.37,1.54-1.54.37Zm.37,1.54l-.37-1.54,1.54-.37.37,1.54-1.54.37Zm.37,1.54l-.37-1.54,1.54-.37.37,1.54-1.54.37Zm.37,1.54l-.37-1.54,1.54-.37.37,1.54-1.54.37Zm.37,1.54l-.37-1.54,1.54-.37.37,1.54-1.54.37Zm.37,1.54l-.37-1.54,1.54-.37.37,1.54-1.54.37Zm.37,1.54l-.37-1.54,1.54-.37.37,1.54-1.54.37Zm1.95,1.04l-1.42,1.19-.54-2.23,1.54-.37.24.98-.77.19-.51-.61.44-.37,1.02,1.21Zm1.21-1.02l-1.21,1.02-1.02-1.21,1.21-1.02,1.02,1.21Zm1.21-1.02l-1.21,1.02-1.02-1.21,1.21-1.02,1.02,1.21Zm1.21-1.02l-1.21,1.02-1.02-1.21,1.21-1.02,1.02,1.21Zm1.21-1.02l-1.21,1.02-1.02-1.21,1.21-1.02,1.02,1.21Zm1.21-1.02l-1.21,1.02-1.02-1.21,1.21-1.02,1.02,1.21Zm1.21-1.02l-1.21,1.02-1.02-1.21,1.21-1.02,1.02,1.21Zm1.21-1.02l-1.21,1.02-1.02-1.21,1.21-1.02,1.02,1.21Zm1.21-1.02l-1.21,1.02-1.02-1.21,1.21-1.02,1.02,1.21Zm1.21-1.02l-1.21,1.02-1.02-1.21,1.21-1.02,1.02,1.21Zm1.21-1.02l-1.21,1.02-1.02-1.21,1.21-1.02,1.02,1.21Zm.38-2.28l1.82.42-2.2,1.86-1.02-1.21.99-.84.51.61-.18.77-.28-.06.36-1.54Zm-1.54-.36l1.54.36-.36,1.54-1.54-.36.36-1.54Zm-1.54-.36l1.54.36-.36,1.54-1.54-.36.36-1.54Zm-1.54-.36l1.54.36-.36,1.54-1.54-.36.36-1.54Zm-1.54-.36l1.54.36-.36,1.54-1.54-.36.36-1.54Zm-1.54-.36l1.54.36-.36,1.54-1.54-.36.36-1.54Zm-1.54-.36l1.54.36-.36,1.54-1.54-.36.36-1.54Zm-1.54-.36l1.54.36-.36,1.54-1.54-.36.36-1.54Zm-1.54-.36l1.54.36-.36,1.54-1.54-.36.36-1.54Zm-1.54-.36l1.54.36-.36,1.54-1.54-.36.36-1.54Zm-1.54-.36l1.54.36-.36,1.54-1.54-.36.36-1.54Z" fill="#d3d3d3" stroke-width="0"/>
415 - </g>
416 - </g>
417 - </g>
418 - <g clip-path="url(#clippath-62)">
419 - <path d="m186.48,93.12c0,1.84-.09,3.68-.27,5.51s-.45,3.65-.81,5.46c-.36,1.81-.81,3.59-1.34,5.35-.53,1.76-1.15,3.49-1.86,5.2-.7,1.7-1.49,3.36-2.36,4.99s-1.81,3.2-2.84,4.73c-1.02,1.53-2.12,3.01-3.29,4.43-1.17,1.42-2.4,2.79-3.71,4.09-1.3,1.3-2.67,2.54-4.09,3.71s-2.9,2.26-4.43,3.29c-1.53,1.02-3.11,1.97-4.73,2.84-1.62.87-3.29,1.65-4.99,2.36-1.7.7-3.43,1.32-5.2,1.86-1.76.53-3.55.98-5.35,1.34s-3.63.63-5.46.81-3.67.27-5.51.27-3.68-.09-5.51-.27c-1.83-.18-3.65-.45-5.46-.81s-3.59-.81-5.35-1.34c-1.76-.53-3.49-1.15-5.2-1.86-1.7-.7-3.36-1.49-4.99-2.36-1.62-.87-3.2-1.81-4.73-2.84-1.53-1.02-3.01-2.12-4.43-3.29s-2.79-2.4-4.09-3.71c-1.3-1.3-2.54-2.67-3.71-4.09-1.17-1.42-2.26-2.9-3.29-4.43-1.02-1.53-1.97-3.11-2.84-4.73-.87-1.62-1.65-3.29-2.36-4.99-.7-1.7-1.32-3.43-1.86-5.2-.53-1.76-.98-3.55-1.34-5.35-.36-1.81-.63-3.63-.81-5.46-.18-1.83-.27-3.67-.27-5.51s.09-3.68.27-5.51c.18-1.83.45-3.65.81-5.46.36-1.81.81-3.59,1.34-5.35.53-1.76,1.15-3.49,1.86-5.2.7-1.7,1.49-3.36,2.36-4.99.87-1.62,1.81-3.2,2.84-4.73,1.02-1.53,2.12-3.01,3.29-4.43,1.17-1.42,2.4-2.79,3.71-4.09,1.3-1.3,2.67-2.54,4.09-3.71,1.42-1.17,2.9-2.26,4.43-3.29,1.53-1.02,3.11-1.97,4.73-2.84,1.62-.87,3.29-1.65,4.99-2.36,1.7-.7,3.43-1.32,5.2-1.86,1.76-.53,3.55-.98,5.35-1.34s3.63-.63,5.46-.81c1.83-.18,3.67-.27,5.51-.27s3.68.09,5.51.27c1.83.18,3.65.45,5.46.81s3.59.81,5.35,1.34c1.76.53,3.49,1.15,5.2,1.86,1.7.7,3.36,1.49,4.99,2.36,1.62.87,3.2,1.81,4.73,2.84,1.53,1.02,3.01,2.12,4.43,3.29,1.42,1.17,2.79,2.4,4.09,3.71,1.3,1.3,2.54,2.67,3.71,4.09,1.17,1.42,2.26,2.9,3.29,4.43,1.02,1.53,1.97,3.11,2.84,4.73.87,1.62,1.65,3.29,2.36,4.99.7,1.7,1.32,3.43,1.86,5.2s.98,3.55,1.34,5.35c.36,1.81.63,3.63.81,5.46.18,1.83.27,3.67.27,5.51Z" fill="#048" stroke-width="0"/>
420 - <path d="m186.48,93.12c0,1.84-.09,3.68-.27,5.51s-.45,3.65-.81,5.46c-.36,1.81-.81,3.59-1.34,5.35-.53,1.76-1.15,3.49-1.86,5.2-.7,1.7-1.49,3.36-2.36,4.99s-1.81,3.2-2.84,4.73c-1.02,1.53-2.12,3.01-3.29,4.43-1.17,1.42-2.4,2.79-3.71,4.09-1.3,1.3-2.67,2.54-4.09,3.71s-2.9,2.26-4.43,3.29c-1.53,1.02-3.11,1.97-4.73,2.84-1.62.87-3.29,1.65-4.99,2.36-1.7.7-3.43,1.32-5.2,1.86-1.76.53-3.55.98-5.35,1.34s-3.63.63-5.46.81-3.67.27-5.51.27-3.68-.09-5.51-.27c-1.83-.18-3.65-.45-5.46-.81s-3.59-.81-5.35-1.34c-1.76-.53-3.49-1.15-5.2-1.86-1.7-.7-3.36-1.49-4.99-2.36-1.62-.87-3.2-1.81-4.73-2.84-1.53-1.02-3.01-2.12-4.43-3.29s-2.79-2.4-4.09-3.71c-1.3-1.3-2.54-2.67-3.71-4.09-1.17-1.42-2.26-2.9-3.29-4.43-1.02-1.53-1.97-3.11-2.84-4.73-.87-1.62-1.65-3.29-2.36-4.99-.7-1.7-1.32-3.43-1.86-5.2-.53-1.76-.98-3.55-1.34-5.35-.36-1.81-.63-3.63-.81-5.46-.18-1.83-.27-3.67-.27-5.51s.09-3.68.27-5.51c.18-1.83.45-3.65.81-5.46.36-1.81.81-3.59,1.34-5.35.53-1.76,1.15-3.49,1.86-5.2.7-1.7,1.49-3.36,2.36-4.99.87-1.62,1.81-3.2,2.84-4.73,1.02-1.53,2.12-3.01,3.29-4.43,1.17-1.42,2.4-2.79,3.71-4.09,1.3-1.3,2.67-2.54,4.09-3.71,1.42-1.17,2.9-2.26,4.43-3.29,1.53-1.02,3.11-1.97,4.73-2.84,1.62-.87,3.29-1.65,4.99-2.36,1.7-.7,3.43-1.32,5.2-1.86,1.76-.53,3.55-.98,5.35-1.34s3.63-.63,5.46-.81c1.83-.18,3.67-.27,5.51-.27s3.68.09,5.51.27c1.83.18,3.65.45,5.46.81s3.59.81,5.35,1.34c1.76.53,3.49,1.15,5.2,1.86,1.7.7,3.36,1.49,4.99,2.36,1.62.87,3.2,1.81,4.73,2.84,1.53,1.02,3.01,2.12,4.43,3.29,1.42,1.17,2.79,2.4,4.09,3.71,1.3,1.3,2.54,2.67,3.71,4.09,1.17,1.42,2.26,2.9,3.29,4.43,1.02,1.53,1.97,3.11,2.84,4.73.87,1.62,1.65,3.29,2.36,4.99.7,1.7,1.32,3.43,1.86,5.2s.98,3.55,1.34,5.35c.36,1.81.63,3.63.81,5.46.18,1.83.27,3.67.27,5.51Z" fill="none" stroke="#000" stroke-width="3.96"/>
421 - <path d="m176.57,93.12c0,1.52-.07,3.03-.22,4.54s-.37,3.01-.67,4.5c-.3,1.49-.66,2.96-1.1,4.41-.44,1.45-.95,2.88-1.53,4.28-.58,1.4-1.23,2.77-1.94,4.11-.72,1.34-1.49,2.64-2.34,3.9-.84,1.26-1.75,2.48-2.71,3.65-.96,1.17-1.98,2.3-3.05,3.37-1.07,1.07-2.2,2.09-3.37,3.05-1.17.96-2.39,1.87-3.65,2.71-1.26.84-2.56,1.62-3.9,2.34-1.34.72-2.71,1.36-4.11,1.94s-2.83,1.09-4.28,1.53-2.92.81-4.41,1.1c-1.49.3-2.99.52-4.5.67-1.51.15-3.02.22-4.54.22s-3.03-.07-4.54-.22c-1.51-.15-3.01-.37-4.5-.67-1.49-.3-2.96-.66-4.41-1.1-1.45-.44-2.88-.95-4.28-1.53s-2.77-1.23-4.11-1.94c-1.34-.72-2.64-1.49-3.9-2.34-1.26-.84-2.48-1.75-3.65-2.71-1.17-.96-2.3-1.98-3.37-3.05-1.07-1.07-2.09-2.2-3.05-3.37-.96-1.17-1.87-2.39-2.71-3.65-.84-1.26-1.62-2.56-2.34-3.9-.72-1.34-1.36-2.71-1.94-4.11-.58-1.4-1.09-2.83-1.53-4.28-.44-1.45-.81-2.92-1.1-4.41-.3-1.49-.52-2.99-.67-4.5-.15-1.51-.22-3.02-.22-4.54s.07-3.03.22-4.54c.15-1.51.37-3.01.67-4.5.3-1.49.66-2.96,1.1-4.41s.95-2.88,1.53-4.28c.58-1.4,1.23-2.77,1.94-4.11.72-1.34,1.49-2.64,2.34-3.9s1.75-2.48,2.71-3.65c.96-1.17,1.98-2.3,3.05-3.37,1.07-1.07,2.2-2.09,3.37-3.05,1.17-.96,2.39-1.87,3.65-2.71,1.26-.84,2.56-1.62,3.9-2.34,1.34-.72,2.71-1.36,4.11-1.94s2.83-1.09,4.28-1.53c1.45-.44,2.92-.81,4.41-1.1,1.49-.3,2.99-.52,4.5-.67,1.51-.15,3.02-.22,4.54-.22s3.03.07,4.54.22c1.51.15,3.01.37,4.5.67,1.49.3,2.96.66,4.41,1.1s2.88.95,4.28,1.53,2.77,1.23,4.11,1.94c1.34.72,2.64,1.49,3.9,2.34,1.26.84,2.48,1.75,3.65,2.71,1.17.96,2.3,1.98,3.37,3.05,1.07,1.07,2.09,2.2,3.05,3.37s1.87,2.39,2.71,3.65,1.62,2.56,2.34,3.9c.72,1.34,1.36,2.71,1.94,4.11.58,1.4,1.09,2.83,1.53,4.28.44,1.45.81,2.92,1.1,4.41.3,1.49.52,2.99.67,4.5s.22,3.02.22,4.54Z" fill="#048" stroke-width="0"/>
422 - <path d="m176.57,93.12c0,1.52-.07,3.03-.22,4.54s-.37,3.01-.67,4.5c-.3,1.49-.66,2.96-1.1,4.41-.44,1.45-.95,2.88-1.53,4.28-.58,1.4-1.23,2.77-1.94,4.11-.72,1.34-1.49,2.64-2.34,3.9-.84,1.26-1.75,2.48-2.71,3.65-.96,1.17-1.98,2.3-3.05,3.37-1.07,1.07-2.2,2.09-3.37,3.05-1.17.96-2.39,1.87-3.65,2.71-1.26.84-2.56,1.62-3.9,2.34-1.34.72-2.71,1.36-4.11,1.94s-2.83,1.09-4.28,1.53-2.92.81-4.41,1.1c-1.49.3-2.99.52-4.5.67-1.51.15-3.02.22-4.54.22s-3.03-.07-4.54-.22c-1.51-.15-3.01-.37-4.5-.67-1.49-.3-2.96-.66-4.41-1.1-1.45-.44-2.88-.95-4.28-1.53s-2.77-1.23-4.11-1.94c-1.34-.72-2.64-1.49-3.9-2.34-1.26-.84-2.48-1.75-3.65-2.71-1.17-.96-2.3-1.98-3.37-3.05-1.07-1.07-2.09-2.2-3.05-3.37-.96-1.17-1.87-2.39-2.71-3.65-.84-1.26-1.62-2.56-2.34-3.9-.72-1.34-1.36-2.71-1.94-4.11-.58-1.4-1.09-2.83-1.53-4.28-.44-1.45-.81-2.92-1.1-4.41-.3-1.49-.52-2.99-.67-4.5-.15-1.51-.22-3.02-.22-4.54s.07-3.03.22-4.54c.15-1.51.37-3.01.67-4.5.3-1.49.66-2.96,1.1-4.41s.95-2.88,1.53-4.28c.58-1.4,1.23-2.77,1.94-4.11.72-1.34,1.49-2.64,2.34-3.9s1.75-2.48,2.71-3.65c.96-1.17,1.98-2.3,3.05-3.37,1.07-1.07,2.2-2.09,3.37-3.05,1.17-.96,2.39-1.87,3.65-2.71,1.26-.84,2.56-1.62,3.9-2.34,1.34-.72,2.71-1.36,4.11-1.94s2.83-1.09,4.28-1.53c1.45-.44,2.92-.81,4.41-1.1,1.49-.3,2.99-.52,4.5-.67,1.51-.15,3.02-.22,4.54-.22s3.03.07,4.54.22c1.51.15,3.01.37,4.5.67,1.49.3,2.96.66,4.41,1.1s2.88.95,4.28,1.53,2.77,1.23,4.11,1.94c1.34.72,2.64,1.49,3.9,2.34,1.26.84,2.48,1.75,3.65,2.71,1.17.96,2.3,1.98,3.37,3.05,1.07,1.07,2.09,2.2,3.05,3.37s1.87,2.39,2.71,3.65,1.62,2.56,2.34,3.9c.72,1.34,1.36,2.71,1.94,4.11.58,1.4,1.09,2.83,1.53,4.28.44,1.45.81,2.92,1.1,4.41.3,1.49.52,2.99.67,4.5s.22,3.02.22,4.54Z" fill="none" stroke="#000" stroke-width="3.96"/>
423 - </g>
424 - <g clip-path="url(#clippath-63)">
425 - <text transform="translate(98.75 104.21)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">User</tspan></text>
426 - </g>
427 - <g clip-path="url(#clippath-64)">
428 - <path d="m343.55,59.45h147.54c.65,0,1.29.06,1.93.19.64.13,1.26.31,1.86.56.6.25,1.17.55,1.71.92.54.36,1.04.77,1.5,1.23.46.46.87.96,1.23,1.5.36.54.67,1.11.92,1.71.25.6.44,1.22.56,1.86s.19,1.28.19,1.93v87.14c0,.65-.06,1.29-.19,1.93s-.31,1.26-.56,1.86c-.25.6-.55,1.17-.92,1.71-.36.54-.77,1.04-1.23,1.5-.46.46-.96.87-1.5,1.23-.54.36-1.11.67-1.71.92-.6.25-1.22.44-1.86.56-.64.13-1.28.19-1.93.19h-147.54c-.65,0-1.29-.06-1.93-.19-.64-.13-1.26-.31-1.86-.56-.6-.25-1.17-.55-1.71-.92-.54-.36-1.04-.77-1.5-1.23s-.87-.96-1.23-1.5c-.36-.54-.67-1.11-.92-1.71s-.44-1.22-.56-1.86c-.13-.64-.19-1.28-.19-1.93v-87.14c0-.65.06-1.29.19-1.93.13-.64.31-1.26.56-1.86.25-.6.55-1.17.92-1.71.36-.54.77-1.04,1.23-1.5s.96-.87,1.5-1.23c.54-.36,1.11-.67,1.71-.92.6-.25,1.22-.44,1.86-.56.64-.13,1.28-.19,1.93-.19Z" fill="#048" stroke-width="0"/>
429 - <path d="m343.55,59.45h147.54c.65,0,1.29.06,1.93.19.64.13,1.26.31,1.86.56.6.25,1.17.55,1.71.92.54.36,1.04.77,1.5,1.23.46.46.87.96,1.23,1.5.36.54.67,1.11.92,1.71.25.6.44,1.22.56,1.86s.19,1.28.19,1.93v87.14c0,.65-.06,1.29-.19,1.93s-.31,1.26-.56,1.86c-.25.6-.55,1.17-.92,1.71-.36.54-.77,1.04-1.23,1.5-.46.46-.96.87-1.5,1.23-.54.36-1.11.67-1.71.92-.6.25-1.22.44-1.86.56-.64.13-1.28.19-1.93.19h-147.54c-.65,0-1.29-.06-1.93-.19-.64-.13-1.26-.31-1.86-.56-.6-.25-1.17-.55-1.71-.92-.54-.36-1.04-.77-1.5-1.23s-.87-.96-1.23-1.5c-.36-.54-.67-1.11-.92-1.71s-.44-1.22-.56-1.86c-.13-.64-.19-1.28-.19-1.93v-87.14c0-.65.06-1.29.19-1.93.13-.64.31-1.26.56-1.86.25-.6.55-1.17.92-1.71.36-.54.77-1.04,1.23-1.5s.96-.87,1.5-1.23c.54-.36,1.11-.67,1.71-.92.6-.25,1.22-.44,1.86-.56.64-.13,1.28-.19,1.93-.19Z" fill="none" stroke="#000" stroke-width="3.96"/>
430 - </g>
431 - <g clip-path="url(#clippath-65)">
432 - <text transform="translate(363.35 124.01)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">Agent 0</tspan></text>
433 - </g>
434 - <g clip-path="url(#clippath-66)">
435 - <path d="m25.84,283.85c0,.37.04.74.13,1.11s.21.74.38,1.11c.17.37.38.74.63,1.1s.54.73.88,1.1c.33.36.71.73,1.12,1.08.42.36.87.72,1.37,1.07s1.03.71,1.61,1.06c.58.35,1.19.69,1.84,1.04s1.35.68,2.08,1.02c.73.34,1.5.67,2.3.99.81.33,1.65.65,2.53.97.88.32,1.79.63,2.74.94.95.31,1.93.61,2.95.91,1.02.3,2.07.59,3.15.88s2.2.57,3.35.84c1.15.27,2.32.54,3.53.81s2.44.52,3.71.77c1.27.25,2.56.49,3.88.73,1.32.24,2.67.46,4.04.68,1.37.22,2.77.43,4.19.64s2.86.4,4.33.59c1.47.19,2.95.37,4.46.55,1.51.17,3.03.34,4.58.5,1.54.16,3.11.31,4.68.45,1.58.14,3.17.28,4.78.4,1.61.12,3.23.24,4.87.35,1.63.11,3.28.21,4.94.3,1.66.09,3.32.17,5,.24,1.68.07,3.36.14,5.05.19,1.69.05,3.39.1,5.09.14,1.7.04,3.4.06,5.11.08,1.71.02,3.41.03,5.12.03s3.42,0,5.12-.03c1.71-.02,3.41-.05,5.11-.08,1.7-.04,3.4-.08,5.09-.14,1.69-.05,3.37-.12,5.05-.19,1.68-.07,3.34-.15,5-.24,1.66-.09,3.3-.19,4.94-.3,1.63-.11,3.26-.22,4.87-.35,1.61-.12,3.2-.26,4.78-.4s3.14-.29,4.68-.45c1.54-.16,3.07-.33,4.58-.5,1.51-.17,2.99-.36,4.46-.55,1.47-.19,2.91-.39,4.33-.59,1.42-.21,2.82-.42,4.19-.64,1.37-.22,2.72-.45,4.04-.68,1.32-.24,2.61-.48,3.88-.73,1.27-.25,2.5-.5,3.71-.77,1.21-.26,2.39-.53,3.53-.81,1.15-.27,2.26-.56,3.35-.84,1.08-.29,2.13-.58,3.15-.88,1.02-.3,2-.6,2.95-.91.95-.31,1.86-.62,2.74-.94.88-.32,1.72-.64,2.53-.97.81-.33,1.57-.66,2.3-.99.73-.34,1.42-.67,2.08-1.02.65-.34,1.27-.69,1.84-1.04s1.11-.7,1.61-1.06c.5-.35.95-.71,1.37-1.07.42-.36.79-.72,1.12-1.08.33-.36.63-.73.88-1.1.25-.37.46-.73.63-1.1.17-.37.29-.74.38-1.11.08-.37.13-.74.13-1.11s-.04-.74-.13-1.11c-.08-.37-.21-.74-.38-1.11-.17-.37-.38-.74-.63-1.1-.25-.37-.54-.73-.88-1.1s-.71-.73-1.12-1.08c-.42-.36-.87-.72-1.37-1.07-.5-.35-1.03-.71-1.61-1.06s-1.19-.69-1.84-1.04c-.65-.34-1.35-.68-2.08-1.02-.73-.34-1.5-.67-2.3-.99-.81-.33-1.65-.65-2.53-.97-.88-.32-1.79-.63-2.74-.94-.95-.31-1.93-.61-2.95-.91-1.02-.3-2.07-.59-3.15-.88-1.08-.29-2.2-.57-3.35-.84-1.15-.27-2.33-.54-3.53-.81-1.21-.26-2.44-.52-3.71-.77-1.27-.25-2.56-.49-3.88-.73-1.32-.24-2.67-.46-4.04-.68s-2.77-.43-4.19-.64c-1.42-.21-2.86-.4-4.33-.59-1.47-.19-2.95-.37-4.46-.55-1.51-.17-3.03-.34-4.58-.5-1.54-.16-3.11-.31-4.68-.45s-3.17-.28-4.78-.4-3.23-.24-4.87-.35c-1.63-.11-3.28-.21-4.94-.3-1.66-.09-3.32-.17-5-.24-1.68-.07-3.36-.14-5.05-.19-1.69-.05-3.39-.1-5.09-.14-1.7-.04-3.4-.06-5.11-.08-1.71-.02-3.41-.03-5.12-.03s-3.42,0-5.12.03c-1.71.02-3.41.05-5.11.08-1.7.04-3.4.08-5.09.14-1.69.05-3.37.12-5.05.19-1.68.07-3.34.15-5,.24-1.66.09-3.3.19-4.94.3-1.63.11-3.26.22-4.87.35-1.61.12-3.2.26-4.78.4-1.58.14-3.14.29-4.68.45-1.54.16-3.07.33-4.58.5-1.51.17-2.99.36-4.46.55-1.47.19-2.91.39-4.33.59s-2.82.42-4.19.64c-1.37.22-2.72.45-4.04.68-1.32.24-2.61.48-3.88.73-1.27.25-2.5.5-3.71.77-1.21.26-2.39.53-3.53.81-1.15.27-2.26.56-3.35.84s-2.13.58-3.15.88c-1.02.3-2,.6-2.95.91-.95.31-1.86.62-2.74.94-.88.32-1.72.64-2.53.97-.81.33-1.57.66-2.3.99-.73.34-1.42.67-2.08,1.02-.65.34-1.27.69-1.84,1.04-.58.35-1.11.7-1.61,1.06-.5.35-.95.71-1.37,1.07-.42.36-.79.72-1.12,1.08-.33.36-.63.73-.88,1.1s-.46.73-.63,1.1c-.17.37-.29.74-.38,1.11s-.13.74-.13,1.11v290c0,.37.04.74.13,1.11.08.37.21.74.38,1.11.17.37.38.74.63,1.1.25.37.54.73.88,1.1.33.36.71.73,1.12,1.08s.87.72,1.37,1.07,1.03.71,1.61,1.06c.58.35,1.19.69,1.84,1.04.65.34,1.35.68,2.08,1.02.73.34,1.5.67,2.3.99s1.65.65,2.53.97c.88.32,1.79.63,2.74.94.95.31,1.93.61,2.95.91,1.02.3,2.07.59,3.15.88s2.2.57,3.35.84c1.15.27,2.32.54,3.53.81s2.44.52,3.71.77c1.27.25,2.56.49,3.88.73,1.32.24,2.67.46,4.04.68,1.37.22,2.77.43,4.19.64,1.42.21,2.86.4,4.33.59,1.47.19,2.95.37,4.46.55,1.51.17,3.03.34,4.58.5,1.54.16,3.11.31,4.68.45,1.58.14,3.17.28,4.78.4,1.61.12,3.23.24,4.87.35,1.63.11,3.28.21,4.94.3,1.66.09,3.32.17,5,.24s3.36.14,5.05.19c1.69.05,3.39.1,5.09.14,1.7.04,3.4.06,5.11.08,1.71.02,3.41.03,5.12.03s3.42,0,5.12-.03c1.71-.02,3.41-.05,5.11-.08,1.7-.04,3.4-.08,5.09-.14,1.69-.05,3.37-.12,5.05-.19,1.68-.07,3.34-.15,5-.24,1.66-.09,3.3-.19,4.94-.3,1.63-.11,3.26-.22,4.87-.35,1.61-.12,3.2-.26,4.78-.4s3.14-.29,4.68-.45,3.07-.33,4.58-.5c1.51-.17,2.99-.36,4.46-.55,1.47-.19,2.91-.39,4.33-.59,1.42-.21,2.82-.42,4.19-.64s2.72-.45,4.04-.68c1.32-.24,2.61-.48,3.88-.73,1.27-.25,2.5-.5,3.71-.77,1.21-.26,2.39-.53,3.53-.81,1.15-.27,2.26-.56,3.35-.84,1.08-.29,2.13-.58,3.15-.88,1.02-.3,2-.6,2.95-.91.95-.31,1.86-.62,2.74-.94.88-.32,1.72-.64,2.53-.97.81-.33,1.57-.66,2.3-.99.73-.34,1.42-.67,2.08-1.02.65-.34,1.27-.69,1.84-1.04.58-.35,1.11-.7,1.61-1.06.5-.35.95-.71,1.37-1.07.42-.36.79-.72,1.12-1.08s.63-.73.88-1.1c.25-.37.46-.73.63-1.1.17-.37.29-.74.38-1.11.08-.37.13-.74.13-1.11v-290" fill="#333" stroke-width="0"/>
436 - <path d="m25.84,283.85c0,.37.04.74.13,1.11s.21.74.38,1.11c.17.37.38.74.63,1.1s.54.73.88,1.1c.33.36.71.73,1.12,1.08.42.36.87.72,1.37,1.07s1.03.71,1.61,1.06c.58.35,1.19.69,1.84,1.04s1.35.68,2.08,1.02c.73.34,1.5.67,2.3.99.81.33,1.65.65,2.53.97.88.32,1.79.63,2.74.94.95.31,1.93.61,2.95.91,1.02.3,2.07.59,3.15.88s2.2.57,3.35.84c1.15.27,2.32.54,3.53.81s2.44.52,3.71.77c1.27.25,2.56.49,3.88.73,1.32.24,2.67.46,4.04.68,1.37.22,2.77.43,4.19.64s2.86.4,4.33.59c1.47.19,2.95.37,4.46.55,1.51.17,3.03.34,4.58.5,1.54.16,3.11.31,4.68.45,1.58.14,3.17.28,4.78.4,1.61.12,3.23.24,4.87.35,1.63.11,3.28.21,4.94.3,1.66.09,3.32.17,5,.24,1.68.07,3.36.14,5.05.19,1.69.05,3.39.1,5.09.14,1.7.04,3.4.06,5.11.08,1.71.02,3.41.03,5.12.03s3.42,0,5.12-.03c1.71-.02,3.41-.05,5.11-.08,1.7-.04,3.4-.08,5.09-.14,1.69-.05,3.37-.12,5.05-.19,1.68-.07,3.34-.15,5-.24,1.66-.09,3.3-.19,4.94-.3,1.63-.11,3.26-.22,4.87-.35,1.61-.12,3.2-.26,4.78-.4s3.14-.29,4.68-.45c1.54-.16,3.07-.33,4.58-.5,1.51-.17,2.99-.36,4.46-.55,1.47-.19,2.91-.39,4.33-.59,1.42-.21,2.82-.42,4.19-.64,1.37-.22,2.72-.45,4.04-.68,1.32-.24,2.61-.48,3.88-.73,1.27-.25,2.5-.5,3.71-.77,1.21-.26,2.39-.53,3.53-.81,1.15-.27,2.26-.56,3.35-.84,1.08-.29,2.13-.58,3.15-.88,1.02-.3,2-.6,2.95-.91.95-.31,1.86-.62,2.74-.94.88-.32,1.72-.64,2.53-.97.81-.33,1.57-.66,2.3-.99.73-.34,1.42-.67,2.08-1.02.65-.34,1.27-.69,1.84-1.04s1.11-.7,1.61-1.06c.5-.35.95-.71,1.37-1.07.42-.36.79-.72,1.12-1.08.33-.36.63-.73.88-1.1.25-.37.46-.73.63-1.1.17-.37.29-.74.38-1.11.08-.37.13-.74.13-1.11s-.04-.74-.13-1.11c-.08-.37-.21-.74-.38-1.11-.17-.37-.38-.74-.63-1.1-.25-.37-.54-.73-.88-1.1s-.71-.73-1.12-1.08c-.42-.36-.87-.72-1.37-1.07-.5-.35-1.03-.71-1.61-1.06s-1.19-.69-1.84-1.04c-.65-.34-1.35-.68-2.08-1.02-.73-.34-1.5-.67-2.3-.99-.81-.33-1.65-.65-2.53-.97-.88-.32-1.79-.63-2.74-.94-.95-.31-1.93-.61-2.95-.91-1.02-.3-2.07-.59-3.15-.88-1.08-.29-2.2-.57-3.35-.84-1.15-.27-2.33-.54-3.53-.81-1.21-.26-2.44-.52-3.71-.77-1.27-.25-2.56-.49-3.88-.73-1.32-.24-2.67-.46-4.04-.68s-2.77-.43-4.19-.64c-1.42-.21-2.86-.4-4.33-.59-1.47-.19-2.95-.37-4.46-.55-1.51-.17-3.03-.34-4.58-.5-1.54-.16-3.11-.31-4.68-.45s-3.17-.28-4.78-.4-3.23-.24-4.87-.35c-1.63-.11-3.28-.21-4.94-.3-1.66-.09-3.32-.17-5-.24-1.68-.07-3.36-.14-5.05-.19-1.69-.05-3.39-.1-5.09-.14-1.7-.04-3.4-.06-5.11-.08-1.71-.02-3.41-.03-5.12-.03s-3.42,0-5.12.03c-1.71.02-3.41.05-5.11.08-1.7.04-3.4.08-5.09.14-1.69.05-3.37.12-5.05.19-1.68.07-3.34.15-5,.24-1.66.09-3.3.19-4.94.3-1.63.11-3.26.22-4.87.35-1.61.12-3.2.26-4.78.4-1.58.14-3.14.29-4.68.45-1.54.16-3.07.33-4.58.5-1.51.17-2.99.36-4.46.55-1.47.19-2.91.39-4.33.59s-2.82.42-4.19.64c-1.37.22-2.72.45-4.04.68-1.32.24-2.61.48-3.88.73-1.27.25-2.5.5-3.71.77-1.21.26-2.39.53-3.53.81-1.15.27-2.26.56-3.35.84s-2.13.58-3.15.88c-1.02.3-2,.6-2.95.91-.95.31-1.86.62-2.74.94-.88.32-1.72.64-2.53.97-.81.33-1.57.66-2.3.99-.73.34-1.42.67-2.08,1.02-.65.34-1.27.69-1.84,1.04-.58.35-1.11.7-1.61,1.06-.5.35-.95.71-1.37,1.07-.42.36-.79.72-1.12,1.08-.33.36-.63.73-.88,1.1s-.46.73-.63,1.1c-.17.37-.29.74-.38,1.11s-.13.74-.13,1.11v290c0,.37.04.74.13,1.11.08.37.21.74.38,1.11.17.37.38.74.63,1.1.25.37.54.73.88,1.1.33.36.71.73,1.12,1.08s.87.72,1.37,1.07,1.03.71,1.61,1.06c.58.35,1.19.69,1.84,1.04.65.34,1.35.68,2.08,1.02.73.34,1.5.67,2.3.99s1.65.65,2.53.97c.88.32,1.79.63,2.74.94.95.31,1.93.61,2.95.91,1.02.3,2.07.59,3.15.88s2.2.57,3.35.84c1.15.27,2.32.54,3.53.81s2.44.52,3.71.77c1.27.25,2.56.49,3.88.73,1.32.24,2.67.46,4.04.68,1.37.22,2.77.43,4.19.64,1.42.21,2.86.4,4.33.59,1.47.19,2.95.37,4.46.55,1.51.17,3.03.34,4.58.5,1.54.16,3.11.31,4.68.45,1.58.14,3.17.28,4.78.4,1.61.12,3.23.24,4.87.35,1.63.11,3.28.21,4.94.3,1.66.09,3.32.17,5,.24s3.36.14,5.05.19c1.69.05,3.39.1,5.09.14,1.7.04,3.4.06,5.11.08,1.71.02,3.41.03,5.12.03s3.42,0,5.12-.03c1.71-.02,3.41-.05,5.11-.08,1.7-.04,3.4-.08,5.09-.14,1.69-.05,3.37-.12,5.05-.19,1.68-.07,3.34-.15,5-.24,1.66-.09,3.3-.19,4.94-.3,1.63-.11,3.26-.22,4.87-.35,1.61-.12,3.2-.26,4.78-.4s3.14-.29,4.68-.45,3.07-.33,4.58-.5c1.51-.17,2.99-.36,4.46-.55,1.47-.19,2.91-.39,4.33-.59,1.42-.21,2.82-.42,4.19-.64s2.72-.45,4.04-.68c1.32-.24,2.61-.48,3.88-.73,1.27-.25,2.5-.5,3.71-.77,1.21-.26,2.39-.53,3.53-.81,1.15-.27,2.26-.56,3.35-.84,1.08-.29,2.13-.58,3.15-.88,1.02-.3,2-.6,2.95-.91.95-.31,1.86-.62,2.74-.94.88-.32,1.72-.64,2.53-.97.81-.33,1.57-.66,2.3-.99.73-.34,1.42-.67,2.08-1.02.65-.34,1.27-.69,1.84-1.04.58-.35,1.11-.7,1.61-1.06.5-.35.95-.71,1.37-1.07.42-.36.79-.72,1.12-1.08s.63-.73.88-1.1c.25-.37.46-.73.63-1.1.17-.37.29-.74.38-1.11.08-.37.13-.74.13-1.11v-290" fill="none" stroke="#555" stroke-width="3.96"/>
437 - </g>
438 - <g clip-path="url(#clippath-67)">
439 - <text transform="translate(70.82 364.69)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">Memory</tspan></text>
440 - <text transform="translate(177.96 364.69)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">,</tspan></text>
441 - <text transform="translate(48.1 412.22)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">K</tspan></text>
442 - <text transform="translate(65.35 412.22)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">nowledge,</tspan></text>
443 - <text transform="translate(40.7 459.74)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">Instruments,</tspan></text>
444 - <text transform="translate(66.99 507.27)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">P</tspan></text>
445 - <text transform="translate(83.17 507.27)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">rompts,</tspan></text>
446 - <text transform="translate(55.72 554.8)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">Extensions</tspan></text>
447 - </g>
448 - <g clip-path="url(#clippath-68)">
449 - <path d="m609.91,170.35h209.65c.65,0,1.29.06,1.93.19.64.13,1.26.31,1.86.56.6.25,1.17.55,1.71.92.54.36,1.04.77,1.5,1.23.46.46.87.96,1.23,1.5.36.54.67,1.11.92,1.71.25.6.44,1.22.56,1.86.13.64.19,1.28.19,1.93v134.67c0,.65-.06,1.29-.19,1.93-.13.64-.31,1.26-.56,1.86-.25.6-.55,1.17-.92,1.71-.36.54-.77,1.04-1.23,1.5-.46.46-.96.87-1.5,1.23-.54.36-1.11.67-1.71.92-.6.25-1.22.44-1.86.56-.64.13-1.28.19-1.93.19h-209.65c-.65,0-1.29-.06-1.93-.19-.64-.13-1.26-.31-1.86-.56-.6-.25-1.17-.55-1.71-.92-.54-.36-1.04-.77-1.5-1.23-.46-.46-.87-.96-1.23-1.5-.36-.54-.67-1.11-.92-1.71-.25-.6-.44-1.22-.56-1.86-.13-.64-.19-1.28-.19-1.93v-134.67c0-.65.06-1.29.19-1.93.13-.64.31-1.26.56-1.86.25-.6.55-1.17.91-1.71.36-.54.77-1.04,1.23-1.5.46-.46.96-.87,1.5-1.23s1.11-.67,1.71-.92c.6-.25,1.22-.44,1.86-.56.64-.13,1.28-.19,1.93-.19Z" fill="#048" stroke-width="0"/>
450 - <path d="m609.91,170.35h209.65c.65,0,1.29.06,1.93.19.64.13,1.26.31,1.86.56.6.25,1.17.55,1.71.92.54.36,1.04.77,1.5,1.23.46.46.87.96,1.23,1.5.36.54.67,1.11.92,1.71.25.6.44,1.22.56,1.86.13.64.19,1.28.19,1.93v134.67c0,.65-.06,1.29-.19,1.93-.13.64-.31,1.26-.56,1.86-.25.6-.55,1.17-.92,1.71-.36.54-.77,1.04-1.23,1.5-.46.46-.96.87-1.5,1.23-.54.36-1.11.67-1.71.92-.6.25-1.22.44-1.86.56-.64.13-1.28.19-1.93.19h-209.65c-.65,0-1.29-.06-1.93-.19-.64-.13-1.26-.31-1.86-.56-.6-.25-1.17-.55-1.71-.92-.54-.36-1.04-.77-1.5-1.23-.46-.46-.87-.96-1.23-1.5-.36-.54-.67-1.11-.92-1.71-.25-.6-.44-1.22-.56-1.86-.13-.64-.19-1.28-.19-1.93v-134.67c0-.65.06-1.29.19-1.93.13-.64.31-1.26.56-1.86.25-.6.55-1.17.91-1.71.36-.54.77-1.04,1.23-1.5.46-.46.96-.87,1.5-1.23s1.11-.67,1.71-.92c.6-.25,1.22-.44,1.86-.56.64-.13,1.28-.19,1.93-.19Z" fill="none" stroke="#000" stroke-width="3.96"/>
451 - </g>
452 - <g clip-path="url(#clippath-69)">
453 - <text transform="translate(629.71 234.91)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">Subordinate</tspan></text>
454 - <text transform="translate(660.75 282.44)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">Agent 1</tspan></text>
455 - </g>
456 - <g clip-path="url(#clippath-70)">
457 - <path d="m938.38,371.42h209.65c.65,0,1.29.06,1.93.19.64.13,1.26.31,1.86.56.6.25,1.17.55,1.71.92.54.36,1.04.77,1.5,1.23.46.46.87.96,1.23,1.5s.67,1.11.92,1.71c.25.6.44,1.22.56,1.86s.19,1.28.19,1.93v134.67c0,.65-.06,1.29-.19,1.93-.13.64-.31,1.26-.56,1.86s-.55,1.17-.92,1.71-.77,1.04-1.23,1.5c-.46.46-.96.87-1.5,1.23-.54.36-1.11.67-1.71.92s-1.22.44-1.86.56c-.64.13-1.28.19-1.93.19h-209.65c-.65,0-1.29-.06-1.93-.19-.64-.13-1.26-.31-1.86-.56s-1.17-.55-1.71-.92-1.04-.77-1.5-1.23c-.46-.46-.87-.96-1.23-1.5-.36-.54-.67-1.11-.92-1.71-.25-.6-.44-1.22-.56-1.86-.13-.64-.19-1.28-.19-1.93v-134.67c0-.65.06-1.29.19-1.93.13-.64.31-1.26.56-1.86.25-.6.55-1.17.91-1.71.36-.54.77-1.04,1.23-1.5.46-.46.96-.87,1.5-1.23.54-.36,1.11-.67,1.71-.92.6-.25,1.22-.44,1.86-.56.64-.13,1.28-.19,1.93-.19Z" fill="#048" stroke-width="0"/>
458 - <path d="m938.38,371.42h209.65c.65,0,1.29.06,1.93.19.64.13,1.26.31,1.86.56.6.25,1.17.55,1.71.92.54.36,1.04.77,1.5,1.23.46.46.87.96,1.23,1.5s.67,1.11.92,1.71c.25.6.44,1.22.56,1.86s.19,1.28.19,1.93v134.67c0,.65-.06,1.29-.19,1.93-.13.64-.31,1.26-.56,1.86s-.55,1.17-.92,1.71-.77,1.04-1.23,1.5c-.46.46-.96.87-1.5,1.23-.54.36-1.11.67-1.71.92s-1.22.44-1.86.56c-.64.13-1.28.19-1.93.19h-209.65c-.65,0-1.29-.06-1.93-.19-.64-.13-1.26-.31-1.86-.56s-1.17-.55-1.71-.92-1.04-.77-1.5-1.23c-.46-.46-.87-.96-1.23-1.5-.36-.54-.67-1.11-.92-1.71-.25-.6-.44-1.22-.56-1.86-.13-.64-.19-1.28-.19-1.93v-134.67c0-.65.06-1.29.19-1.93.13-.64.31-1.26.56-1.86.25-.6.55-1.17.91-1.71.36-.54.77-1.04,1.23-1.5.46-.46.96-.87,1.5-1.23.54-.36,1.11-.67,1.71-.92.6-.25,1.22-.44,1.86-.56.64-.13,1.28-.19,1.93-.19Z" fill="none" stroke="#000" stroke-width="3.96"/>
459 - </g>
460 - <g clip-path="url(#clippath-71)">
461 - <text transform="translate(958.18 435.98)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">Subordinate</tspan></text>
462 - <text transform="translate(989.22 483.51)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">Agent 2</tspan></text>
463 - </g>
464 - <g clip-path="url(#clippath-72)">
465 - <rect x="1282.95" y="165" width="125.58" height="125.58" transform="translate(233.09 1018.3) rotate(-45)" fill="#333" stroke-width="0"/>
466 - <rect x="1282.95" y="165" width="125.58" height="125.58" transform="translate(233.09 1018.3) rotate(-45)" fill="none" stroke="#555" stroke-width="3.96"/>
467 - </g>
468 - <g clip-path="url(#clippath-73)">
469 - <text transform="translate(1310.42 238.87)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">T</tspan></text>
470 - <text transform="translate(1324.87 238.87)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">ools</tspan></text>
471 - </g>
472 - <g clip-path="url(#clippath-74)">
473 - <rect x="1583.07" y="174.31" width="405.09" height="106.94" fill="#333" stroke-width="0"/>
474 - <rect x="1583.07" y="174.31" width="405.09" height="106.94" fill="none" stroke="#555" stroke-width="3.96"/>
475 - </g>
476 - <g clip-path="url(#clippath-75)">
477 - <text transform="translate(1642.48 238.87)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">Code Execution </tspan></text>
478 - <text transform="translate(1870.93 238.87)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">T</tspan></text>
479 - <text transform="translate(1885.38 238.87)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">ool</tspan></text>
480 - </g>
481 - <g clip-path="url(#clippath-76)">
482 - <rect x="2087.17" y="150.55" width="330.48" height="154.47" fill="#333" stroke-width="0"/>
483 - <rect x="2087.17" y="150.55" width="330.48" height="154.47" fill="none" stroke="#555" stroke-width="3.96"/>
484 - </g>
485 - <g clip-path="url(#clippath-77)">
486 - <text transform="translate(2146.58 215.11)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">W</tspan></text>
487 - <text transform="translate(2172.13 215.11)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">ork Directory</tspan></text>
488 - <text transform="translate(2190.15 262.64)" fill="#ccc" font-family="TrebuchetMS, &apos;Trebuchet MS&apos;" font-size="31.69"><tspan x="0" y="0">work_dir</tspan></text>
489 - </g>
490 -</svg>
\ No newline at end of file
1 +<?xml version="1.0" encoding="utf-8"?>
2 +<!-- Generator: Adobe Illustrator 27.9.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3 +<svg 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"
4 + viewBox="0 0 2493.1 633.4" style="enable-background:new 0 0 2493.1 633.4;" xml:space="preserve">
5 +<style type="text/css">
6 + .st0{clip-path:url(#SVGID_00000034794952764765167540000017453395941957106569_);}
7 + .st1{fill:none;stroke:#D3D3D3;stroke-width:6.93;}
8 + .st2{clip-path:url(#SVGID_00000053535984049889517880000007059510055645152906_);}
9 + .st3{fill:#D3D3D3;}
10 + .st4{clip-path:url(#SVGID_00000179642885161553590150000011886740614098073247_);}
11 + .st5{clip-path:url(#SVGID_00000036946105526205689300000005607100343215513016_);}
12 + .st6{clip-path:url(#SVGID_00000134958289911380505240000000661052948126753668_);}
13 + .st7{clip-path:url(#SVGID_00000062914314161677759140000000216015874320241080_);}
14 + .st8{clip-path:url(#SVGID_00000090258142172699109740000003094644549775752320_);}
15 + .st9{clip-path:url(#SVGID_00000139985350880984363370000016693915801870095790_);}
16 + .st10{clip-path:url(#SVGID_00000080927568956747538760000016564597446575268014_);}
17 + .st11{clip-path:url(#SVGID_00000114773121177082384380000006987802019000660641_);}
18 + .st12{clip-path:url(#SVGID_00000065065194367023870170000005385116056721570222_);}
19 + .st13{clip-path:url(#SVGID_00000076593837993558435330000015985317974184574117_);}
20 + .st14{clip-path:url(#SVGID_00000171682719945064759640000017232705029243799947_);}
21 + .st15{clip-path:url(#SVGID_00000119811199724697527700000016537644700294537881_);}
22 + .st16{clip-path:url(#SVGID_00000022554932680127080920000016386081719414704060_);}
23 + .st17{clip-path:url(#SVGID_00000162335221531095132520000007588219742315599756_);}
24 + .st18{clip-path:url(#SVGID_00000029755533516621035270000004212564493506491300_);}
25 + .st19{clip-path:url(#SVGID_00000022537942952607575120000000358127970904958628_);}
26 + .st20{clip-path:url(#SVGID_00000085243054380376171920000014129426332246507683_);}
27 + .st21{clip-path:url(#SVGID_00000168093319386610208390000017334500852477807288_);}
28 + .st22{clip-path:url(#SVGID_00000037660396531444051120000011254822278301144489_);}
29 + .st23{clip-path:url(#SVGID_00000059293400734983706550000000467256514231523716_);}
30 + .st24{clip-path:url(#SVGID_00000020376401862210930640000011744918560168611497_);}
31 + .st25{clip-path:url(#SVGID_00000125576015166639624960000006054719046018963600_);}
32 + .st26{clip-path:url(#SVGID_00000007388351403635333730000005786079104813236664_);}
33 + .st27{fill:none;stroke:#D3D3D3;stroke-width:1.98;}
34 + .st28{clip-path:url(#SVGID_00000075131101690320623840000012717898997225819037_);}
35 + .st29{clip-path:url(#SVGID_00000078040978912162548410000015122729567343600524_);}
36 + .st30{clip-path:url(#SVGID_00000140709273767330474510000001969146524822839482_);}
37 + .st31{clip-path:url(#SVGID_00000142898451440700522840000003886579701637536695_);}
38 + .st32{clip-path:url(#SVGID_00000163060132144427967970000001859679130760294019_);}
39 + .st33{clip-path:url(#SVGID_00000112624950726163281240000005582900153381669553_);}
40 + .st34{clip-path:url(#SVGID_00000040543625480926530060000001934506048120145596_);}
41 + .st35{clip-path:url(#SVGID_00000072258171003495978090000014599790566241796021_);}
42 + .st36{clip-path:url(#SVGID_00000177447879008588078010000012584708919575946166_);}
43 + .st37{clip-path:url(#SVGID_00000145053579310733024350000008118751303325226373_);}
44 + .st38{clip-path:url(#SVGID_00000009569840294732083430000012103543713112139650_);}
45 + .st39{clip-path:url(#SVGID_00000019656390759610240330000014236852445514954130_);}
46 + .st40{clip-path:url(#SVGID_00000150075729330479933410000008246244144320733861_);}
47 + .st41{clip-path:url(#SVGID_00000034066801346939966520000002459740041161992603_);}
48 + .st42{clip-path:url(#SVGID_00000038387558610613029720000001649334070747303057_);}
49 + .st43{clip-path:url(#SVGID_00000028299304737208287410000008091384729759149960_);}
50 + .st44{clip-path:url(#SVGID_00000154386378122082840670000011193901317889213335_);}
51 + .st45{clip-path:url(#SVGID_00000158750787163577526010000004269989998965558146_);}
52 + .st46{clip-path:url(#SVGID_00000040570725969151952400000001149167639168650670_);}
53 + .st47{clip-path:url(#SVGID_00000071530591416548135110000007154994753142013834_);}
54 + .st48{clip-path:url(#SVGID_00000045620052656141231530000010490338008905645995_);}
55 + .st49{clip-path:url(#SVGID_00000164502409285600606920000009463440726942061228_);}
56 + .st50{clip-path:url(#SVGID_00000139294915294798377430000004323687035197998756_);}
57 + .st51{clip-path:url(#SVGID_00000160176853433453049690000000623804333935792301_);}
58 + .st52{clip-path:url(#SVGID_00000008129363442407892600000005743236523376768388_);}
59 + .st53{clip-path:url(#SVGID_00000001657407307513980710000009952733119759238828_);}
60 + .st54{clip-path:url(#SVGID_00000155848760482230012960000017190433946091079583_);}
61 + .st55{clip-path:url(#SVGID_00000062910701951078671830000012771503644750027680_);}
62 + .st56{clip-path:url(#SVGID_00000095338738245058189100000004651375019311818887_);}
63 + .st57{clip-path:url(#SVGID_00000117667925917670668490000017117517095186750897_);}
64 + .st58{clip-path:url(#SVGID_00000144335053720426228400000012976542417071411086_);}
65 + .st59{clip-path:url(#SVGID_00000103264747217563404370000007145305442971024275_);}
66 + .st60{clip-path:url(#SVGID_00000120550786379034537350000014361786292651581568_);}
67 + .st61{clip-path:url(#SVGID_00000016042976806763532980000000122038520491041465_);}
68 + .st62{clip-path:url(#SVGID_00000019636689222305984910000007160081465036709818_);}
69 + .st63{clip-path:url(#SVGID_00000176736978719676321710000002959120663620848283_);}
70 + .st64{fill:#004488;}
71 + .st65{fill:none;stroke:#000000;stroke-width:3.96;}
72 + .st66{clip-path:url(#SVGID_00000057106282352734447800000001035521247852850817_);}
73 + .st67{fill:#CCCCCC;}
74 + .st68{font-family:'TrebuchetMS';}
75 + .st69{font-size:31.69px;}
76 + .st70{clip-path:url(#SVGID_00000054986550691091659410000017012437047206080908_);}
77 + .st71{clip-path:url(#SVGID_00000046298146094813883400000012487650457855404930_);}
78 + .st72{clip-path:url(#SVGID_00000149363274087029293490000007331231945051125688_);}
79 + .st73{fill:#333333;}
80 + .st74{fill:none;stroke:#555555;stroke-width:3.96;}
81 + .st75{clip-path:url(#SVGID_00000032618697040894825750000010230463812730257328_);}
82 + .st76{clip-path:url(#SVGID_00000052098106255301652160000007916102991940594866_);}
83 + .st77{clip-path:url(#SVGID_00000084491580938088296150000001522206945574606984_);}
84 + .st78{clip-path:url(#SVGID_00000039135598203949472300000014602150438437345929_);}
85 + .st79{clip-path:url(#SVGID_00000144329036219736207450000009581474905475309224_);}
86 + .st80{clip-path:url(#SVGID_00000012450774490363338590000005467888255691828383_);}
87 + .st81{clip-path:url(#SVGID_00000049900582787347099940000000222156239313180805_);}
88 + .st82{clip-path:url(#SVGID_00000134242015010932658030000012000804311614169010_);}
89 + .st83{clip-path:url(#SVGID_00000125580238055646825090000002312525002594201772_);}
90 + .st84{clip-path:url(#SVGID_00000152236498460011615740000005808167675324029828_);}
91 + .st85{clip-path:url(#SVGID_00000174592270447031484130000001183534740213604278_);}
92 +</style>
93 +<g>
94 + <defs>
95 + <rect id="SVGID_1_" x="10" y="-315.3" width="2473" height="1264"/>
96 + </defs>
97 + <clipPath id="SVGID_00000128479878146722190600000017293108473233837988_">
98 + <use xlink:href="#SVGID_1_" style="overflow:visible;"/>
99 + </clipPath>
100 +</g>
101 +<g>
102 + <defs>
103 + <rect id="SVGID_00000156582490830701867950000007420717187742836911_" x="10" y="-315.3" width="2473" height="1264"/>
104 + </defs>
105 + <clipPath id="SVGID_00000034778397228524758800000009878757437047714704_">
106 + <use xlink:href="#SVGID_00000156582490830701867950000007420717187742836911_" style="overflow:visible;"/>
107 + </clipPath>
108 + <g style="clip-path:url(#SVGID_00000034778397228524758800000009878757437047714704_);">
109 + <path class="st1" d="M194.4,93.1h15c15,0,44.9,0,63.9,0.6s27.3,1.8,34.3,2.9c7,1,12.6,1.9,15.4,2.3l2.8,0.4"/>
110 + </g>
111 +</g>
112 +<g>
113 + <defs>
114 + <rect id="SVGID_00000147221692991150647690000002984182599045136266_" x="187.3" y="85.2" width="15.8" height="15.8"/>
115 + </defs>
116 + <clipPath id="SVGID_00000011737623660742278070000015218363256941338036_">
117 + <use xlink:href="#SVGID_00000147221692991150647690000002984182599045136266_" style="overflow:visible;"/>
118 + </clipPath>
119 + <g style="clip-path:url(#SVGID_00000011737623660742278070000015218363256941338036_);">
120 + <polygon class="st3" points="187.3,93.1 203.1,101 203.1,85.2 "/>
121 + <path class="st3" d="M188.1,93.6l-0.5,0.3l-0.4-0.7l0.4-0.7l1.4,0.7l-0.7,1.4l-2.8-1.4l1.9-1L188.1,93.6L188.1,93.6z M189.6,92.9
122 + l-1.4,0.7l-0.7-1.4l1.4-0.7L189.6,92.9z M191,92.2l-1.4,0.7l-0.7-1.4l1.4-0.7L191,92.2z M192.4,91.4l-1.4,0.7l-0.7-1.4l1.4-0.7
123 + L192.4,91.4z M193.8,90.7l-1.4,0.7l-0.7-1.4l1.4-0.7L193.8,90.7z M195.2,90l-1.4,0.7l-0.7-1.4l1.4-0.7L195.2,90z M196.7,89.3
124 + l-1.4,0.7l-0.7-1.4l1.4-0.7L196.7,89.3z M198.1,88.6l-1.4,0.7l-0.7-1.4l1.4-0.7L198.1,88.6z M199.5,87.9l-1.4,0.7l-0.7-1.4
125 + l1.4-0.7L199.5,87.9z M200.9,87.2l-1.4,0.7l-0.7-1.4l1.4-0.7L200.9,87.2z M202.3,86.5l-1.4,0.7l-0.7-1.4l1.4-0.7L202.3,86.5z
126 + M202.4,85.5v-0.3h0.8l0.4,0.7l-1.2,0.6l-0.7-1.4l2.3-1.2v1.6H202.4L202.4,85.5z M202.4,87.1v-1.6h1.6v1.6H202.4z M202.4,88.6
127 + v-1.6h1.6v1.6H202.4z M202.4,90.2v-1.6h1.6v1.6H202.4z M202.4,91.8v-1.6h1.6v1.6H202.4z M202.4,93.4v-1.6h1.6v1.6H202.4z
128 + M202.4,95v-1.6h1.6V95H202.4z M202.4,96.5V95h1.6v1.6H202.4z M202.4,98.1v-1.6h1.6v1.6H202.4z M202.4,99.7v-1.6h1.6v1.6H202.4z
129 + M203.2,100.2l0.3,0.1l-0.4,0.7h-0.8v-1.3h1.6v2.6l-1.4-0.7L203.2,100.2L203.2,100.2z M201.8,99.4l1.4,0.7l-0.7,1.4l-1.4-0.7
130 + L201.8,99.4z M200.4,98.7l1.4,0.7l-0.7,1.4l-1.4-0.7L200.4,98.7z M199,98l1.4,0.7l-0.7,1.4l-1.4-0.7L199,98z M197.6,97.3L199,98
131 + l-0.7,1.4l-1.4-0.7L197.6,97.3z M196.1,96.6l1.4,0.7l-0.7,1.4l-1.4-0.7L196.1,96.6z M194.7,95.9l1.4,0.7l-0.7,1.4l-1.4-0.7
132 + L194.7,95.9z M193.3,95.2l1.4,0.7l-0.7,1.4l-1.4-0.7L193.3,95.2z M191.9,94.5l1.4,0.7l-0.7,1.4l-1.4-0.7L191.9,94.5z M190.5,93.8
133 + l1.4,0.7l-0.7,1.4l-1.4-0.7L190.5,93.8z M189.1,93.1l1.4,0.7l-0.7,1.4l-1.4-0.7L189.1,93.1z"/>
134 + </g>
135 +</g>
136 +<g>
137 + <defs>
138 + <rect id="SVGID_00000093858751899835667100000013449994690334507404_" x="10" y="-315.3" width="2473" height="1264"/>
139 + </defs>
140 + <clipPath id="SVGID_00000162318200989428133210000015775779535705021630_">
141 + <use xlink:href="#SVGID_00000093858751899835667100000013449994690334507404_" style="overflow:visible;"/>
142 + </clipPath>
143 + <g style="clip-path:url(#SVGID_00000162318200989428133210000015775779535705021630_);">
144 + <g>
145 + <defs>
146 + <rect id="SVGID_00000112616417274699953940000015266884599994592911_" x="10" y="-315.3" width="2473" height="1264"/>
147 + </defs>
148 + <clipPath id="SVGID_00000014617277928488838120000008265875186815129764_">
149 + <use xlink:href="#SVGID_00000112616417274699953940000015266884599994592911_" style="overflow:visible;"/>
150 + </clipPath>
151 + <g style="clip-path:url(#SVGID_00000014617277928488838120000008265875186815129764_);">
152 + <g>
153 + <defs>
154 +
155 + <rect id="SVGID_00000092420812503207798460000005381030821375817624_" x="317.9" y="91.4" transform="matrix(0.1473 -0.9891 0.9891 0.1473 179.5882 406.9542)" width="15.8" height="15.8"/>
156 + </defs>
157 + <clipPath id="SVGID_00000052806194870497224950000002037089886787165591_">
158 + <use xlink:href="#SVGID_00000092420812503207798460000005381030821375817624_" style="overflow:visible;"/>
159 + </clipPath>
160 + <g style="clip-path:url(#SVGID_00000052806194870497224950000002037089886787165591_);">
161 + <polygon class="st3" points="319.1,90.3 333.6,100.5 316.8,106 "/>
162 + <path class="st3" d="M318.3,90.8l0.3-1.8l2.4,1.7l-0.9,1.3l-1.3-0.9l0.5-0.7l0.8,0.1l-0.1,0.6L318.3,90.8L318.3,90.8z
163 + M318,92.3l0.2-1.6l1.6,0.2l-0.2,1.6L318,92.3z M317.8,93.9l0.2-1.6l1.6,0.2l-0.2,1.6L317.8,93.9z M317.6,95.5l0.2-1.6
164 + l1.6,0.2l-0.2,1.6L317.6,95.5z M317.3,97l0.2-1.6l1.6,0.2l-0.2,1.6L317.3,97z M317.1,98.6l0.2-1.6l1.6,0.2l-0.2,1.6
165 + L317.1,98.6z M316.9,100.2l0.2-1.6l1.6,0.2l-0.2,1.6L316.9,100.2z M316.7,101.8l0.2-1.6l1.6,0.2l-0.2,1.6L316.7,101.8z
166 + M316.4,103.3l0.2-1.6l1.6,0.2l-0.2,1.6L316.4,103.3z M316.2,104.9l0.2-1.6l1.6,0.2l-0.2,1.6L316.2,104.9z M317.6,106.6
167 + l-1.8,0.6l0.3-2.3l1.6,0.2l-0.1,1l-0.8-0.1l-0.2-0.8l0.5-0.2C317.1,105.1,317.6,106.6,317.6,106.6z M319.1,106.1l-1.5,0.5
168 + l-0.5-1.5l1.5-0.5L319.1,106.1z M320.6,105.6l-1.5,0.5l-0.5-1.5l1.5-0.5L320.6,105.6z M322.1,105.1l-1.5,0.5l-0.5-1.5l1.5-0.5
169 + L322.1,105.1z M323.7,104.6l-1.5,0.5l-0.5-1.5l1.5-0.5L323.7,104.6z M325.2,104.1l-1.5,0.5l-0.5-1.5l1.5-0.5L325.2,104.1z
170 + M326.7,103.6l-1.5,0.5l-0.5-1.5l1.5-0.5L326.7,103.6z M328.2,103.2l-1.5,0.5l-0.5-1.5l1.5-0.5L328.2,103.2z M329.7,102.7
171 + l-1.5,0.5l-0.5-1.5l1.5-0.5L329.7,102.7z M331.2,102.2l-1.5,0.5l-0.5-1.5l1.5-0.5L331.2,102.2z M332.7,101.7l-1.5,0.5
172 + l-0.5-1.5l1.5-0.5L332.7,101.7z M333.9,99.7l1.5,1.1l-2.7,0.9l-0.5-1.5l1.2-0.4l0.2,0.8l-0.5,0.7L333,101L333.9,99.7
173 + L333.9,99.7z M332.6,98.8l1.3,0.9L333,101l-1.3-0.9L332.6,98.8z M331.3,97.9l1.3,0.9l-0.9,1.3l-1.3-0.9L331.3,97.9z M330,97
174 + l1.3,0.9l-0.9,1.3l-1.3-0.9L330,97z M328.7,96.1L330,97l-0.9,1.3l-1.3-0.9L328.7,96.1z M327.4,95.2l1.3,0.9l-0.9,1.3l-1.3-0.9
175 + L327.4,95.2z M326.1,94.3l1.3,0.9l-0.9,1.3l-1.3-0.9L326.1,94.3z M324.8,93.3l1.3,0.9l-0.9,1.3l-1.3-0.9L324.8,93.3z
176 + M323.5,92.4l1.3,0.9l-0.9,1.3l-1.3-0.9L323.5,92.4z M322.2,91.5l1.3,0.9l-0.9,1.3l-1.3-0.9L322.2,91.5z M320.9,90.6l1.3,0.9
177 + l-0.9,1.3l-1.3-0.9L320.9,90.6z"/>
178 + </g>
179 + </g>
180 + </g>
181 + </g>
182 + </g>
183 +</g>
184 +<g>
185 + <defs>
186 + <rect id="SVGID_00000070823444115619774530000000212636115607913902_" x="10" y="-315.3" width="2473" height="1264"/>
187 + </defs>
188 + <clipPath id="SVGID_00000155842565674748166340000017269588663572040100_">
189 + <use xlink:href="#SVGID_00000070823444115619774530000000212636115607913902_" style="overflow:visible;"/>
190 + </clipPath>
191 + <g style="clip-path:url(#SVGID_00000155842565674748166340000017269588663572040100_);">
192 + <path class="st1" d="M507.9,162.8l7.1,3.9c7.1,3.9,21.3,11.7,32.5,17.2S567,192.4,574,195c7,2.6,12.8,4.8,15.7,5.9l2.9,1.1"/>
193 + </g>
194 +</g>
195 +<g>
196 + <defs>
197 + <rect id="SVGID_00000042010673593885909540000014996048614314277260_" x="10" y="-315.3" width="2473" height="1264"/>
198 + </defs>
199 + <clipPath id="SVGID_00000070088212485098816520000002564726131767061122_">
200 + <use xlink:href="#SVGID_00000042010673593885909540000014996048614314277260_" style="overflow:visible;"/>
201 + </clipPath>
202 + <g style="clip-path:url(#SVGID_00000070088212485098816520000002564726131767061122_);">
203 + <g>
204 + <defs>
205 + <rect id="SVGID_00000029012379620026162070000003324866748670628789_" x="10" y="-315.3" width="2473" height="1264"/>
206 + </defs>
207 + <clipPath id="SVGID_00000073695375304384808230000018159882394806530987_">
208 + <use xlink:href="#SVGID_00000029012379620026162070000003324866748670628789_" style="overflow:visible;"/>
209 + </clipPath>
210 + <g style="clip-path:url(#SVGID_00000073695375304384808230000018159882394806530987_);">
211 + <g>
212 + <defs>
213 +
214 + <rect id="SVGID_00000167388079833758191900000004549096807954218679_" x="500.7" y="155.2" transform="matrix(0.4821 -0.8761 0.8761 0.4821 120.4845 530.1118)" width="15.8" height="15.8"/>
215 + </defs>
216 + <clipPath id="SVGID_00000097471929231050799960000013280947045189128096_">
217 + <use xlink:href="#SVGID_00000167388079833758191900000004549096807954218679_" style="overflow:visible;"/>
218 + </clipPath>
219 + <g style="clip-path:url(#SVGID_00000097471929231050799960000013280947045189128096_);">
220 + <polygon class="st3" points="501.7,159.3 511.7,173.9 519.4,160 "/>
221 + <path class="st3" d="M502.2,160.2l-0.6,0l0-0.8l0.6-0.4l0.9,1.3l-1.3,0.9l-1.8-2.6l2.1,0.1L502.2,160.2L502.2,160.2z
222 + M503.8,160.2l-1.6-0.1l0.1-1.6l1.6,0.1L503.8,160.2z M505.4,160.3l-1.6-0.1l0.1-1.6l1.6,0.1L505.4,160.3z M507,160.3
223 + l-1.6-0.1l0.1-1.6l1.6,0.1L507,160.3z M508.5,160.4l-1.6-0.1l0.1-1.6l1.6,0.1L508.5,160.4z M510.1,160.4l-1.6-0.1l0.1-1.6
224 + l1.6,0.1L510.1,160.4z M511.7,160.5l-1.6-0.1l0.1-1.6l1.6,0.1L511.7,160.5z M513.3,160.6l-1.6-0.1l0.1-1.6l1.6,0.1
225 + L513.3,160.6z M514.9,160.6l-1.6-0.1l0.1-1.6l1.6,0.1L514.9,160.6z M516.4,160.7l-1.6-0.1l0.1-1.6l1.6,0.1L516.4,160.7z
226 + M518,160.7l-1.6-0.1l0.1-1.6l1.6,0.1L518,160.7z M518.5,159.9l0.1-0.2l0.7,0.4l0,0.8l-1.3-0.1l0.1-1.6l2.6,0.1l-0.8,1.4
227 + L518.5,159.9L518.5,159.9z M517.8,161.3l0.8-1.4l1.4,0.8l-0.8,1.4L517.8,161.3z M517,162.7l0.8-1.4l1.4,0.8l-0.8,1.4
228 + L517,162.7z M516.2,164l0.8-1.4l1.4,0.8l-0.8,1.4L516.2,164z M515.5,165.4l0.8-1.4l1.4,0.8l-0.8,1.4L515.5,165.4z
229 + M514.7,166.8l0.8-1.4l1.4,0.8l-0.8,1.4L514.7,166.8z M514,168.2l0.8-1.4l1.4,0.8l-0.8,1.4L514,168.2z M513.2,169.6l0.8-1.4
230 + l1.4,0.8l-0.8,1.4L513.2,169.6z M512.4,171l0.8-1.4l1.4,0.8l-0.8,1.4L512.4,171z M511.7,172.4l0.8-1.4l1.4,0.8l-0.8,1.4
231 + L511.7,172.4z M512.2,173.2l0.2,0.2l-0.6,0.4l-0.7-0.4l0.6-1.1l1.4,0.8l-1.2,2.3l-0.9-1.3L512.2,173.2L512.2,173.2z
232 + M511.3,171.9l0.9,1.3l-1.3,0.9l-0.9-1.3L511.3,171.9z M510.4,170.6l0.9,1.3l-1.3,0.9l-0.9-1.3L510.4,170.6z M509.5,169.3
233 + l0.9,1.3l-1.3,0.9l-0.9-1.3L509.5,169.3z M508.6,168l0.9,1.3l-1.3,0.9l-0.9-1.3L508.6,168z M507.7,166.7l0.9,1.3l-1.3,0.9
234 + l-0.9-1.3L507.7,166.7z M506.8,165.4l0.9,1.3l-1.3,0.9l-0.9-1.3L506.8,165.4z M505.9,164.1l0.9,1.3l-1.3,0.9l-0.9-1.3
235 + L505.9,164.1z M505,162.8l0.9,1.3l-1.3,0.9l-0.9-1.3L505,162.8z M504.1,161.5l0.9,1.3l-1.3,0.9l-0.9-1.3L504.1,161.5z
236 + M503.2,160.2l0.9,1.3l-1.3,0.9l-0.9-1.3L503.2,160.2z"/>
237 + </g>
238 + </g>
239 + </g>
240 + </g>
241 + </g>
242 +</g>
243 +<g>
244 + <defs>
245 + <rect id="SVGID_00000049943544227308376000000007072169369243641257_" x="10" y="-315.3" width="2473" height="1264"/>
246 + </defs>
247 + <clipPath id="SVGID_00000103234997372834954530000006174341272453330569_">
248 + <use xlink:href="#SVGID_00000049943544227308376000000007072169369243641257_" style="overflow:visible;"/>
249 + </clipPath>
250 + <g style="clip-path:url(#SVGID_00000103234997372834954530000006174341272453330569_);">
251 + <g>
252 + <defs>
253 + <rect id="SVGID_00000158018415820235133740000002066697186618387614_" x="10" y="-315.3" width="2473" height="1264"/>
254 + </defs>
255 + <clipPath id="SVGID_00000012453738737432636320000013378560366222779017_">
256 + <use xlink:href="#SVGID_00000158018415820235133740000002066697186618387614_" style="overflow:visible;"/>
257 + </clipPath>
258 + <g style="clip-path:url(#SVGID_00000012453738737432636320000013378560366222779017_);">
259 + <g>
260 + <defs>
261 +
262 + <rect id="SVGID_00000094603824151318940220000009156750148571216798_" x="584.7" y="194" transform="matrix(0.3505 -0.9365 0.9365 0.3505 195.7393 686.1675)" width="15.8" height="15.8"/>
263 + </defs>
264 + <clipPath id="SVGID_00000133526439638024974870000007130657155689240975_">
265 + <use xlink:href="#SVGID_00000094603824151318940220000009156750148571216798_" style="overflow:visible;"/>
266 + </clipPath>
267 + <g style="clip-path:url(#SVGID_00000133526439638024974870000007130657155689240975_);">
268 + <polygon class="st3" points="587.9,191.7 600,204.7 582.4,206.6 "/>
269 + <path class="st3" d="M587,192l0.7-1.7l2,2.1l-1.2,1.1l-1.1-1.2l0.6-0.5l0.7,0.3l-0.2,0.5L587,192L587,192z M586.4,193.5
270 + l0.6-1.5l1.5,0.6l-0.6,1.5L586.4,193.5z M585.9,195l0.6-1.5l1.5,0.6l-0.6,1.5L585.9,195z M585.3,196.4l0.6-1.5l1.5,0.6
271 + l-0.6,1.5L585.3,196.4z M584.8,197.9l0.6-1.5l1.5,0.6l-0.6,1.5L584.8,197.9z M584.2,199.4l0.6-1.5l1.5,0.6l-0.6,1.5
272 + L584.2,199.4z M583.6,200.9l0.6-1.5l1.5,0.6l-0.6,1.5L583.6,200.9z M583.1,202.4l0.6-1.5l1.5,0.6l-0.6,1.5L583.1,202.4z
273 + M582.5,203.8l0.6-1.5l1.5,0.6l-0.6,1.5L582.5,203.8z M582,205.3l0.6-1.5l1.5,0.6l-0.6,1.5L582,205.3z M583,207.3l-1.8,0.2
274 + l0.8-2.1l1.5,0.6l-0.3,0.9l-0.7-0.3l-0.1-0.8l0.6-0.1L583,207.3L583,207.3z M584.6,207.1l-1.6,0.2l-0.2-1.6l1.6-0.2
275 + L584.6,207.1z M586.2,206.9l-1.6,0.2l-0.2-1.6l1.6-0.2L586.2,206.9z M587.7,206.8l-1.6,0.2l-0.2-1.6l1.6-0.2L587.7,206.8z
276 + M589.3,206.6l-1.6,0.2l-0.2-1.6l1.6-0.2L589.3,206.6z M590.9,206.4l-1.6,0.2l-0.2-1.6l1.6-0.2L590.9,206.4z M592.5,206.2
277 + l-1.6,0.2l-0.2-1.6l1.6-0.2L592.5,206.2z M594.1,206.1l-1.6,0.2l-0.2-1.6l1.6-0.2L594.1,206.1z M595.6,205.9l-1.6,0.2
278 + l-0.2-1.6l1.6-0.2L595.6,205.9z M597.2,205.7l-1.6,0.2l-0.2-1.6l1.6-0.2L597.2,205.7z M598.8,205.6l-1.6,0.2l-0.2-1.6l1.6-0.2
279 + L598.8,205.6z M600.4,203.9l1.3,1.4l-2.9,0.3l-0.2-1.6l1.3-0.1l0.1,0.8l-0.6,0.5l-0.2-0.2L600.4,203.9L600.4,203.9z
280 + M599.3,202.7l1.1,1.2l-1.2,1.1l-1.1-1.2L599.3,202.7z M598.2,201.6l1.1,1.2l-1.2,1.1l-1.1-1.2L598.2,201.6z M597.2,200.4
281 + l1.1,1.2l-1.2,1.1l-1.1-1.2L597.2,200.4z M596.1,199.2l1.1,1.2l-1.2,1.1l-1.1-1.2L596.1,199.2z M595,198.1l1.1,1.2l-1.2,1.1
282 + l-1.1-1.2L595,198.1z M593.9,196.9l1.1,1.2l-1.2,1.1l-1.1-1.2L593.9,196.9z M592.8,195.8l1.1,1.2l-1.2,1.1l-1.1-1.2
283 + L592.8,195.8z M591.8,194.6l1.1,1.2l-1.2,1.1l-1.1-1.2L591.8,194.6z M590.7,193.4l1.1,1.2l-1.2,1.1l-1.1-1.2L590.7,193.4z
284 + M589.6,192.3l1.1,1.2l-1.2,1.1l-1.1-1.2L589.6,192.3z"/>
285 + </g>
286 + </g>
287 + </g>
288 + </g>
289 + </g>
290 +</g>
291 +<g>
292 + <defs>
293 + <rect id="SVGID_00000087412035869008330150000013175557509581735077_" x="10" y="-315.3" width="2473" height="1264"/>
294 + </defs>
295 + <clipPath id="SVGID_00000103971478953225767130000008268232541468684980_">
296 + <use xlink:href="#SVGID_00000087412035869008330150000013175557509581735077_" style="overflow:visible;"/>
297 + </clipPath>
298 + <g style="clip-path:url(#SVGID_00000103971478953225767130000008268232541468684980_);">
299 + <path class="st1" d="M836.1,327.4l7.2,4.7c7.2,4.7,21.5,14.1,32.7,21.1s19.5,11.7,26.6,15.7s13.1,7.4,16,9.1l3,1.7"/>
300 + </g>
301 +</g>
302 +<g>
303 + <defs>
304 + <rect id="SVGID_00000178178560818696902800000007109673308086915743_" x="10" y="-315.3" width="2473" height="1264"/>
305 + </defs>
306 + <clipPath id="SVGID_00000176729557009616319830000009392807693212917689_">
307 + <use xlink:href="#SVGID_00000178178560818696902800000007109673308086915743_" style="overflow:visible;"/>
308 + </clipPath>
309 + <g style="clip-path:url(#SVGID_00000176729557009616319830000009392807693212917689_);">
310 + <g>
311 + <defs>
312 + <rect id="SVGID_00000040567733951681668980000001473299224116959390_" x="10" y="-315.3" width="2473" height="1264"/>
313 + </defs>
314 + <clipPath id="SVGID_00000066515416994184725830000016719911793883313037_">
315 + <use xlink:href="#SVGID_00000040567733951681668980000001473299224116959390_" style="overflow:visible;"/>
316 + </clipPath>
317 + <g style="clip-path:url(#SVGID_00000066515416994184725830000016719911793883313037_);">
318 + <g>
319 + <defs>
320 +
321 + <rect id="SVGID_00000070101701678282706610000017219180502046599098_" x="828.8" y="319.9" transform="matrix(0.5496 -0.8354 0.8354 0.5496 102.9782 846.7191)" width="15.8" height="15.8"/>
322 + </defs>
323 + <clipPath id="SVGID_00000047057298416053620940000015093769478039192708_">
324 + <use xlink:href="#SVGID_00000070101701678282706610000017219180502046599098_" style="overflow:visible;"/>
325 + </clipPath>
326 + <g style="clip-path:url(#SVGID_00000047057298416053620940000015093769478039192708_);">
327 + <polygon class="st3" points="830.1,323.5 839,338.8 847.7,325.5 "/>
328 + <path class="st3" d="M830.6,324.3l-0.6-0.1l0.1-0.8l0.7-0.4l0.8,1.4l-1.4,0.8l-1.6-2.7l2.1,0.2L830.6,324.3L830.6,324.3z
329 + M832.2,324.5l-1.6-0.2l0.2-1.6l1.6,0.2L832.2,324.5z M833.7,324.7l-1.6-0.2l0.2-1.6l1.6,0.2L833.7,324.7z M835.3,324.9
330 + l-1.6-0.2l0.2-1.6l1.6,0.2L835.3,324.9z M836.9,325.1l-1.6-0.2l0.2-1.6l1.6,0.2L836.9,325.1z M838.4,325.3l-1.6-0.2l0.2-1.6
331 + l1.6,0.2L838.4,325.3z M840,325.4l-1.6-0.2l0.2-1.6l1.6,0.2L840,325.4z M841.6,325.6l-1.6-0.2l0.2-1.6l1.6,0.2L841.6,325.6z
332 + M843.2,325.8l-1.6-0.2l0.2-1.6l1.6,0.2L843.2,325.8z M844.7,326l-1.6-0.2l0.2-1.6l1.6,0.2L844.7,326z M846.3,326.2l-1.6-0.2
333 + l0.2-1.6l1.6,0.2L846.3,326.2z M846.9,325.4l0.2-0.2l0.7,0.4l-0.1,0.8l-1.3-0.1l0.2-1.6l2.6,0.3l-0.9,1.3L846.9,325.4
334 + L846.9,325.4z M846,326.7l0.9-1.3l1.3,0.9l-0.9,1.3L846,326.7z M845.1,328l0.9-1.3l1.3,0.9l-0.9,1.3L845.1,328z M844.2,329.3
335 + l0.9-1.3l1.3,0.9l-0.9,1.3L844.2,329.3z M843.4,330.7l0.9-1.3l1.3,0.9l-0.9,1.3L843.4,330.7z M842.5,332l0.9-1.3l1.3,0.9
336 + l-0.9,1.3L842.5,332z M841.6,333.3l0.9-1.3l1.3,0.9l-0.9,1.3L841.6,333.3z M840.8,334.6l0.9-1.3l1.3,0.9l-0.9,1.3L840.8,334.6
337 + z M839.9,335.9l0.9-1.3l1.3,0.9l-0.9,1.3L839.9,335.9z M839,337.3l0.9-1.3l1.3,0.9l-0.9,1.3L839,337.3z M839.5,338.1l0.1,0.2
338 + l-0.7,0.4l-0.7-0.4l0.7-1.1l1.3,0.9l-1.4,2.2l-0.8-1.4L839.5,338.1L839.5,338.1z M838.7,336.8l0.8,1.4l-1.4,0.8l-0.8-1.4
339 + L838.7,336.8z M837.9,335.4l0.8,1.4l-1.4,0.8l-0.8-1.4L837.9,335.4z M837.1,334l0.8,1.4l-1.4,0.8l-0.8-1.4L837.1,334z
340 + M836.4,332.7l0.8,1.4l-1.4,0.8l-0.8-1.4L836.4,332.7z M835.6,331.3l0.8,1.4l-1.4,0.8l-0.8-1.4L835.6,331.3z M834.8,329.9
341 + l0.8,1.4l-1.4,0.8l-0.8-1.4L834.8,329.9z M834,328.6l0.8,1.4l-1.4,0.8l-0.8-1.4L834,328.6z M833.2,327.2l0.8,1.4l-1.4,0.8
342 + l-0.8-1.4L833.2,327.2z M832.4,325.8l0.8,1.4l-1.4,0.8l-0.8-1.4L832.4,325.8z M831.6,324.4l0.8,1.4l-1.4,0.8l-0.8-1.4
343 + L831.6,324.4z"/>
344 + </g>
345 + </g>
346 + </g>
347 + </g>
348 + </g>
349 +</g>
350 +<g>
351 + <defs>
352 + <rect id="SVGID_00000158000885227859372440000001146024053703914682_" x="10" y="-315.3" width="2473" height="1264"/>
353 + </defs>
354 + <clipPath id="SVGID_00000116203439053237544780000013188577553858990754_">
355 + <use xlink:href="#SVGID_00000158000885227859372440000001146024053703914682_" style="overflow:visible;"/>
356 + </clipPath>
357 + <g style="clip-path:url(#SVGID_00000116203439053237544780000013188577553858990754_);">
358 + <g>
359 + <defs>
360 + <rect id="SVGID_00000013898940300100481280000011238900852782555827_" x="10" y="-315.3" width="2473" height="1264"/>
361 + </defs>
362 + <clipPath id="SVGID_00000071547518409646732730000013168748332668814986_">
363 + <use xlink:href="#SVGID_00000013898940300100481280000011238900852782555827_" style="overflow:visible;"/>
364 + </clipPath>
365 + <g style="clip-path:url(#SVGID_00000071547518409646732730000013168748332668814986_);">
366 + <g>
367 + <defs>
368 +
369 + <rect id="SVGID_00000071561407548061813090000007278253983764529821_" x="913.7" y="371.8" transform="matrix(0.4929 -0.8701 0.8701 0.4929 136.9533 994.4316)" width="15.8" height="15.8"/>
370 + </defs>
371 + <clipPath id="SVGID_00000155137199540206869160000018124153452474560681_">
372 + <use xlink:href="#SVGID_00000071561407548061813090000007278253983764529821_" style="overflow:visible;"/>
373 + </clipPath>
374 + <g style="clip-path:url(#SVGID_00000155137199540206869160000018124153452474560681_);">
375 + <polygon class="st3" points="918.6,368.9 928.5,383.6 910.8,382.7 "/>
376 + <path class="st3" d="M917.6,369l0.9-1.6l1.6,2.4l-1.3,0.9l-0.9-1.3l0.7-0.4l0.7,0.4l-0.3,0.5L917.6,369L917.6,369z
377 + M916.8,370.4l0.8-1.4l1.4,0.8l-0.8,1.4L916.8,370.4z M916.1,371.8l0.8-1.4l1.4,0.8l-0.8,1.4L916.1,371.8z M915.3,373.2
378 + l0.8-1.4l1.4,0.8l-0.8,1.4L915.3,373.2z M914.5,374.6l0.8-1.4l1.4,0.8l-0.8,1.4L914.5,374.6z M913.7,375.9l0.8-1.4l1.4,0.8
379 + l-0.8,1.4L913.7,375.9z M912.9,377.3l0.8-1.4l1.4,0.8l-0.8,1.4L912.9,377.3z M912.2,378.7l0.8-1.4l1.4,0.8l-0.8,1.4
380 + L912.2,378.7z M911.4,380.1l0.8-1.4l1.4,0.8l-0.8,1.4L911.4,380.1z M910.6,381.5l0.8-1.4l1.4,0.8l-0.8,1.4L910.6,381.5z
381 + M911.3,383.6l-1.8-0.1l1.1-2l1.4,0.8l-0.5,0.9l-0.7-0.4l0-0.8l0.6,0L911.3,383.6L911.3,383.6z M912.9,383.6l-1.6-0.1l0.1-1.6
382 + l1.6,0.1L912.9,383.6z M914.5,383.7l-1.6-0.1l0.1-1.6l1.6,0.1L914.5,383.7z M916.1,383.8l-1.6-0.1l0.1-1.6l1.6,0.1
383 + L916.1,383.8z M917.6,383.9l-1.6-0.1l0.1-1.6l1.6,0.1L917.6,383.9z M919.2,384l-1.6-0.1l0.1-1.6l1.6,0.1L919.2,384z
384 + M920.8,384l-1.6-0.1l0.1-1.6l1.6,0.1L920.8,384z M922.4,384.1l-1.6-0.1l0.1-1.6l1.6,0.1L922.4,384.1z M924,384.2l-1.6-0.1
385 + l0.1-1.6l1.6,0.1L924,384.2z M925.5,384.3l-1.6-0.1l0.1-1.6l1.6,0.1L925.5,384.3z M927.1,384.3l-1.6-0.1l0.1-1.6l1.6,0.1
386 + L927.1,384.3z M929,382.9l1,1.5l-2.9-0.1l0.1-1.6l1.3,0.1l0,0.8l-0.7,0.4l-0.2-0.2L929,382.9L929,382.9z M928.1,381.6l0.9,1.3
387 + l-1.3,0.9l-0.9-1.3L928.1,381.6z M927.2,380.3l0.9,1.3l-1.3,0.9l-0.9-1.3L927.2,380.3L927.2,380.3z M926.3,379l0.9,1.3
388 + l-1.3,0.9l-0.9-1.3L926.3,379L926.3,379z M925.4,377.7l0.9,1.3l-1.3,0.9l-0.9-1.3L925.4,377.7L925.4,377.7z M924.6,376.4
389 + l0.9,1.3l-1.3,0.9l-0.9-1.3L924.6,376.4L924.6,376.4z M923.7,375.1l0.9,1.3l-1.3,0.9l-0.9-1.3L923.7,375.1L923.7,375.1z
390 + M922.8,373.8l0.9,1.3l-1.3,0.9l-0.9-1.3L922.8,373.8z M921.9,372.5l0.9,1.3l-1.3,0.9l-0.9-1.3L921.9,372.5z M921,371.1
391 + l0.9,1.3l-1.3,0.9l-0.9-1.3L921,371.1z M920.2,369.8l0.9,1.3l-1.3,0.9l-0.9-1.3L920.2,369.8z"/>
392 + </g>
393 + </g>
394 + </g>
395 + </g>
396 + </g>
397 +</g>
398 +<g>
399 + <defs>
400 + <rect id="SVGID_00000035521634753341000680000012734858015218667198_" x="10" y="-315.3" width="2473" height="1264"/>
401 + </defs>
402 + <clipPath id="SVGID_00000047034576383070236590000014123551028385855908_">
403 + <use xlink:href="#SVGID_00000035521634753341000680000012734858015218667198_" style="overflow:visible;"/>
404 + </clipPath>
405 + <g style="clip-path:url(#SVGID_00000047034576383070236590000014123551028385855908_);">
406 + <path class="st1" d="M441.5,173.8l18.2,45.8c18.2,45.8,54.5,137.4,100.1,183.3s100.3,45.8,155,45.8h205.8"/>
407 + </g>
408 +</g>
409 +<g>
410 + <defs>
411 + <rect id="SVGID_00000147934761108230763280000017430113123821613467_" x="10" y="-315.3" width="2473" height="1264"/>
412 + </defs>
413 + <clipPath id="SVGID_00000135673142993145490390000007931396453129175187_">
414 + <use xlink:href="#SVGID_00000147934761108230763280000017430113123821613467_" style="overflow:visible;"/>
415 + </clipPath>
416 + <g style="clip-path:url(#SVGID_00000135673142993145490390000007931396453129175187_);">
417 + <g>
418 + <defs>
419 + <rect id="SVGID_00000060010358776609352780000005425483684834936767_" x="10" y="-315.3" width="2473" height="1264"/>
420 + </defs>
421 + <clipPath id="SVGID_00000105428860904614489120000013518382021500096414_">
422 + <use xlink:href="#SVGID_00000060010358776609352780000005425483684834936767_" style="overflow:visible;"/>
423 + </clipPath>
424 + <g style="clip-path:url(#SVGID_00000105428860904614489120000013518382021500096414_);">
425 + <g>
426 + <defs>
427 +
428 + <rect id="SVGID_00000165930385459534158280000003776360454516865698_" x="433.8" y="166.5" transform="matrix(0.9295 -0.3688 0.3688 0.9295 -33.2018 175.1992)" width="15.8" height="15.8"/>
429 + </defs>
430 + <clipPath id="SVGID_00000072271210497258468200000013838592128057478558_">
431 + <use xlink:href="#SVGID_00000165930385459534158280000003776360454516865698_" style="overflow:visible;"/>
432 + </clipPath>
433 + <g style="clip-path:url(#SVGID_00000072271210497258468200000013838592128057478558_);">
434 + <polygon class="st3" points="438.8,167.1 437.3,184.8 452,178.9 "/>
435 + <path class="st3" d="M438.7,168.1l-0.4-0.4l0.5-0.6l0.8,0.1l-0.1,1.6l-1.6-0.1l0.3-3.2l1.6,1.4L438.7,168.1L438.7,168.1z
436 + M439.9,169.2l-1.2-1.1l1.1-1.2l1.2,1.1L439.9,169.2z M441.1,170.2l-1.2-1.1l1.1-1.2l1.2,1.1L441.1,170.2z M442.3,171.3
437 + l-1.2-1.1l1.1-1.2l1.2,1.1L442.3,171.3z M443.4,172.3l-1.2-1.1l1.1-1.2l1.2,1.1L443.4,172.3z M444.6,173.4l-1.2-1.1l1.1-1.2
438 + l1.2,1.1L444.6,173.4z M445.8,174.5l-1.2-1.1l1.1-1.2l1.2,1.1L445.8,174.5z M447,175.5l-1.2-1.1l1.1-1.2l1.2,1.1L447,175.5z
439 + M448.2,176.6l-1.2-1.1l1.1-1.2l1.2,1.1L448.2,176.6z M449.3,177.6l-1.2-1.1l1.1-1.2l1.2,1.1L449.3,177.6z M450.5,178.7
440 + l-1.2-1.1l1.1-1.2l1.2,1.1L450.5,178.7z M451.5,178.3l0.3-0.1l0.3,0.7l-0.5,0.6l-1-0.9l1.1-1.2l1.9,1.7l-1.5,0.6L451.5,178.3
441 + L451.5,178.3z M450,178.9l1.5-0.6l0.6,1.5l-1.5,0.6L450,178.9z M448.5,179.5l1.5-0.6l0.6,1.5l-1.5,0.6L448.5,179.5z
442 + M447,180.1l1.5-0.6l0.6,1.5l-1.5,0.6L447,180.1z M445.6,180.7l1.5-0.6l0.6,1.5l-1.5,0.6L445.6,180.7z M444.1,181.2l1.5-0.6
443 + l0.6,1.5l-1.5,0.6L444.1,181.2z M442.6,181.8l1.5-0.6l0.6,1.5l-1.5,0.6L442.6,181.8z M441.2,182.4l1.5-0.6l0.6,1.5l-1.5,0.6
444 + L441.2,182.4z M439.7,183l1.5-0.6l0.6,1.5l-1.5,0.6L439.7,183z M438.2,183.6l1.5-0.6l0.6,1.5l-1.5,0.6L438.2,183.6z
445 + M438.1,184.6l0,0.3l-0.8-0.1L437,184l1.2-0.5l0.6,1.5l-2.4,0.9l0.1-1.6L438.1,184.6L438.1,184.6z M438.3,183l-0.1,1.6
446 + l-1.6-0.1l0.1-1.6L438.3,183z M438.4,181.4l-0.1,1.6l-1.6-0.1l0.1-1.6L438.4,181.4z M438.5,179.8l-0.1,1.6l-1.6-0.1l0.1-1.6
447 + L438.5,179.8z M438.7,178.2l-0.1,1.6l-1.6-0.1l0.1-1.6L438.7,178.2z M438.8,176.7l-0.1,1.6l-1.6-0.1l0.1-1.6L438.8,176.7z
448 + M439,175.1l-0.1,1.6l-1.6-0.1l0.1-1.6L439,175.1z M439.1,173.5l-0.1,1.6l-1.6-0.1l0.1-1.6L439.1,173.5z M439.3,171.9
449 + l-0.1,1.6l-1.6-0.1l0.1-1.6L439.3,171.9z M439.4,170.3l-0.1,1.6l-1.6-0.1l0.1-1.6L439.4,170.3z M439.5,168.8l-0.1,1.6
450 + l-1.6-0.1l0.1-1.6L439.5,168.8z"/>
451 + </g>
452 + </g>
453 + </g>
454 + </g>
455 + </g>
456 +</g>
457 +<g>
458 + <defs>
459 + <rect id="SVGID_00000010285255016804533890000011192156035770591156_" x="912.6" y="440.7" width="15.8" height="15.8"/>
460 + </defs>
461 + <clipPath id="SVGID_00000089563400589899843860000001786002479704280226_">
462 + <use xlink:href="#SVGID_00000010285255016804533890000011192156035770591156_" style="overflow:visible;"/>
463 + </clipPath>
464 + <g style="clip-path:url(#SVGID_00000089563400589899843860000001786002479704280226_);">
465 + <polygon class="st3" points="912.6,440.7 928.5,448.6 912.6,456.6 "/>
466 + <path class="st3" d="M911.8,441.3v-1.9l2.6,1.3l-0.7,1.4l-1.4-0.7l0.3-0.7h0.8v0.6L911.8,441.3L911.8,441.3z M911.8,442.9v-1.6
467 + h1.6v1.6H911.8z M911.8,444.5v-1.6h1.6v1.6H911.8z M911.8,446v-1.6h1.6v1.6H911.8z M911.8,447.6V446h1.6v1.6H911.8z M911.8,449.2
468 + v-1.6h1.6v1.6H911.8z M911.8,450.8v-1.6h1.6v1.6H911.8z M911.8,452.4v-1.6h1.6v1.6H911.8z M911.8,453.9v-1.6h1.6v1.6H911.8z
469 + M911.8,455.5v-1.6h1.6v1.6H911.8z M913.5,457l-1.7,0.8v-2.3h1.6v1h-0.8l-0.3-0.7l0.5-0.3L913.5,457L913.5,457z M914.9,456.3
470 + l-1.4,0.7l-0.7-1.4l1.4-0.7L914.9,456.3z M916.3,455.6l-1.4,0.7l-0.7-1.4l1.4-0.7L916.3,455.6z M917.8,454.9l-1.4,0.7l-0.7-1.4
471 + l1.4-0.7L917.8,454.9z M919.2,454.1l-1.4,0.7l-0.7-1.4l1.4-0.7L919.2,454.1z M920.6,453.4l-1.4,0.7l-0.7-1.4l1.4-0.7L920.6,453.4z
472 + M922,452.7l-1.4,0.7l-0.7-1.4l1.4-0.7L922,452.7z M923.4,452l-1.4,0.7l-0.7-1.4l1.4-0.7L923.4,452z M924.9,451.3l-1.4,0.7
473 + l-0.7-1.4l1.4-0.7L924.9,451.3z M926.3,450.6l-1.4,0.7l-0.7-1.4l1.4-0.7L926.3,450.6z M927.7,449.9l-1.4,0.7l-0.7-1.4l1.4-0.7
474 + L927.7,449.9z M928.6,447.8l1.7,0.8l-2.6,1.3l-0.7-1.4l1.2-0.6l0.3,0.7l-0.3,0.7l-0.3-0.1L928.6,447.8L928.6,447.8z M927.2,447
475 + l1.4,0.7l-0.7,1.4l-1.4-0.7L927.2,447z M925.8,446.3l1.4,0.7l-0.7,1.4l-1.4-0.7L925.8,446.3z M924.3,445.6l1.4,0.7l-0.7,1.4
476 + l-1.4-0.7L924.3,445.6z M922.9,444.9l1.4,0.7l-0.7,1.4l-1.4-0.7L922.9,444.9z M921.5,444.2l1.4,0.7l-0.7,1.4l-1.4-0.7L921.5,444.2
477 + z M920.1,443.5l1.4,0.7l-0.7,1.4l-1.4-0.7L920.1,443.5z M918.7,442.8l1.4,0.7l-0.7,1.4l-1.4-0.7L918.7,442.8z M917.2,442.1
478 + l1.4,0.7l-0.7,1.4l-1.4-0.7L917.2,442.1z M915.8,441.4l1.4,0.7l-0.7,1.4l-1.4-0.7L915.8,441.4z M914.4,440.7l1.4,0.7l-0.7,1.4
479 + l-1.4-0.7L914.4,440.7z"/>
480 + </g>
481 +</g>
482 +<g>
483 + <defs>
484 + <rect id="SVGID_00000130609121672668402170000002014277360141959834_" x="10" y="-315.3" width="2473" height="1264"/>
485 + </defs>
486 + <clipPath id="SVGID_00000080906495298068389170000002540862521679494542_">
487 + <use xlink:href="#SVGID_00000130609121672668402170000002014277360141959834_" style="overflow:visible;"/>
488 + </clipPath>
489 + <g style="clip-path:url(#SVGID_00000080906495298068389170000002540862521679494542_);">
490 + <path class="st27" d="M508.8,99.3l7-1c7-1,20.8-3.1,55.2-4.1c34.3-1,89.1-1,143.8-1h328.5c54.8,0,109.5,0,144.7,7.7
491 + s50.9,23,65.7,37.3s28.6,27.9,35.5,34.6l6.9,6.7"/>
492 + </g>
493 +</g>
494 +<g>
495 + <defs>
496 + <rect id="SVGID_00000100356232179321915120000003128855251990665859_" x="10" y="-315.3" width="2473" height="1264"/>
497 + </defs>
498 + <clipPath id="SVGID_00000000205189414332796240000014182575778121501578_">
499 + <use xlink:href="#SVGID_00000100356232179321915120000003128855251990665859_" style="overflow:visible;"/>
500 + </clipPath>
501 + <g style="clip-path:url(#SVGID_00000000205189414332796240000014182575778121501578_);">
502 + <g>
503 + <defs>
504 + <rect id="SVGID_00000048489664338921055300000006549472999412979621_" x="10" y="-315.3" width="2473" height="1264"/>
505 + </defs>
506 + <clipPath id="SVGID_00000129170638479421875740000013358823573597412518_">
507 + <use xlink:href="#SVGID_00000048489664338921055300000006549472999412979621_" style="overflow:visible;"/>
508 + </clipPath>
509 + <g style="clip-path:url(#SVGID_00000129170638479421875740000013358823573597412518_);">
510 + <g>
511 + <defs>
512 +
513 + <rect id="SVGID_00000005264181436057707030000005903138745407607694_" x="501.7" y="91.3" transform="matrix(0.9891 -0.1469 0.1469 0.9891 -9.0449 75.9614)" width="15.8" height="15.8"/>
514 + </defs>
515 + <clipPath id="SVGID_00000053535797378313066300000016925176808506225837_">
516 + <use xlink:href="#SVGID_00000005264181436057707030000005903138745407607694_" style="overflow:visible;"/>
517 + </clipPath>
518 + <g style="clip-path:url(#SVGID_00000053535797378313066300000016925176808506225837_);">
519 + <polygon class="st3" points="501.8,100.4 518.6,105.9 516.3,90.2 "/>
520 + <path class="st3" d="M502.7,100.7l-0.5,0.3l-0.5-0.7l0.2-0.8l1.5,0.5l-0.5,1.5l-3-1l1.8-1.2L502.7,100.7L502.7,100.7z
521 + M504,99.8l-1.3,0.9l-0.9-1.3l1.3-0.9L504,99.8z M505.3,98.9l-1.3,0.9l-0.9-1.3l1.3-0.9L505.3,98.9z M506.6,97.9l-1.3,0.9
522 + l-0.9-1.3l1.3-0.9L506.6,97.9z M507.9,97l-1.3,0.9l-0.9-1.3l1.3-0.9L507.9,97z M509.2,96.1l-1.3,0.9l-0.9-1.3l1.3-0.9
523 + L509.2,96.1z M510.5,95.2l-1.3,0.9l-0.9-1.3l1.3-0.9L510.5,95.2z M511.8,94.3l-1.3,0.9l-0.9-1.3l1.3-0.9L511.8,94.3z
524 + M513.1,93.4l-1.3,0.9l-0.9-1.3l1.3-0.9L513.1,93.4z M514.4,92.5l-1.3,0.9l-0.9-1.3l1.3-0.9L514.4,92.5z M515.7,91.6l-1.3,0.9
525 + l-0.9-1.3l1.3-0.9L515.7,91.6z M515.6,90.6l0-0.3l0.8-0.1l0.5,0.7l-1.1,0.8l-0.9-1.3l2.1-1.5l0.2,1.6L515.6,90.6L515.6,90.6z
526 + M515.8,92.2l-0.2-1.6l1.6-0.2l0.2,1.6L515.8,92.2z M516,93.7l-0.2-1.6l1.6-0.2l0.2,1.6L516,93.7z M516.2,95.3l-0.2-1.6
527 + l1.6-0.2l0.2,1.6L516.2,95.3z M516.5,96.9l-0.2-1.6l1.6-0.2l0.2,1.6L516.5,96.9z M516.7,98.4l-0.2-1.6l1.6-0.2l0.2,1.6
528 + L516.7,98.4z M516.9,100l-0.2-1.6l1.6-0.2l0.2,1.6L516.9,100z M517.2,101.6l-0.2-1.6l1.6-0.2l0.2,1.6L517.2,101.6z
529 + M517.4,103.1l-0.2-1.6l1.6-0.2l0.2,1.6L517.4,103.1z M517.6,104.7l-0.2-1.6l1.6-0.2l0.2,1.6L517.6,104.7z M518.6,105l0.3,0.1
530 + l-0.2,0.8l-0.8,0.1l-0.2-1.3l1.6-0.2l0.4,2.6l-1.5-0.5L518.6,105z M517.1,104.6l1.5,0.5l-0.5,1.5l-1.5-0.5L517.1,104.6z
531 + M515.6,104.1l1.5,0.5l-0.5,1.5l-1.5-0.5L515.6,104.1z M514,103.6l1.5,0.5l-0.5,1.5l-1.5-0.5L514,103.6z M512.5,103.1l1.5,0.5
532 + l-0.5,1.5l-1.5-0.5L512.5,103.1z M511,102.6l1.5,0.5l-0.5,1.5l-1.5-0.5L511,102.6z M509.5,102.1l1.5,0.5l-0.5,1.5l-1.5-0.5
533 + L509.5,102.1z M508,101.6l1.5,0.5l-0.5,1.5l-1.5-0.5L508,101.6z M506.5,101.1l1.5,0.5l-0.5,1.5l-1.5-0.5L506.5,101.1z
534 + M505,100.6l1.5,0.5l-0.5,1.5l-1.5-0.5L505,100.6z M503.5,100.1l1.5,0.5l-0.5,1.5l-1.5-0.5L503.5,100.1z"/>
535 + </g>
536 + </g>
537 + </g>
538 + </g>
539 + </g>
540 +</g>
541 +<g>
542 + <defs>
543 + <rect id="SVGID_00000141415231417349126110000004347022815460784293_" x="10" y="-315.3" width="2473" height="1264"/>
544 + </defs>
545 + <clipPath id="SVGID_00000044173101564142372400000016877909101729436294_">
546 + <use xlink:href="#SVGID_00000141415231417349126110000004347022815460784293_" style="overflow:visible;"/>
547 + </clipPath>
548 + <g style="clip-path:url(#SVGID_00000044173101564142372400000016877909101729436294_);">
549 + <g>
550 + <defs>
551 + <rect id="SVGID_00000048473219809936292350000006331557118626080405_" x="10" y="-315.3" width="2473" height="1264"/>
552 + </defs>
553 + <clipPath id="SVGID_00000153674296733773009410000018181175898109783426_">
554 + <use xlink:href="#SVGID_00000048473219809936292350000006331557118626080405_" style="overflow:visible;"/>
555 + </clipPath>
556 + <g style="clip-path:url(#SVGID_00000153674296733773009410000018181175898109783426_);">
557 + <g>
558 + <defs>
559 +
560 + <rect id="SVGID_00000042724335089268839680000001285881850630468263_" x="1288.1" y="171.5" transform="matrix(0.6978 -0.7163 0.7163 0.6978 263.1707 982.5797)" width="15.8" height="15.8"/>
561 + </defs>
562 + <clipPath id="SVGID_00000046332282406793269810000013005250130014296731_">
563 + <use xlink:href="#SVGID_00000042724335089268839680000001285881850630468263_" style="overflow:visible;"/>
564 + </clipPath>
565 + <g style="clip-path:url(#SVGID_00000046332282406793269810000013005250130014296731_);">
566 + <polygon class="st3" points="1295.9,168.2 1301.7,185 1284.9,179.6 "/>
567 + <path class="st3" d="M1294.9,168.1l1.3-1.3l0.9,2.7l-1.5,0.5l-0.5-1.5l0.8-0.3l0.6,0.6l-0.4,0.4L1294.9,168.1L1294.9,168.1z
568 + M1293.8,169.2l1.1-1.1l1.1,1.1l-1.1,1.1L1293.8,169.2z M1292.7,170.4l1.1-1.1l1.1,1.1l-1.1,1.1L1292.7,170.4z M1291.6,171.5
569 + l1.1-1.1l1.1,1.1l-1.1,1.1L1291.6,171.5z M1290.5,172.6l1.1-1.1l1.1,1.1l-1.1,1.1L1290.5,172.6z M1289.4,173.8l1.1-1.1
570 + l1.1,1.1l-1.1,1.1L1289.4,173.8z M1288.3,174.9l1.1-1.1l1.1,1.1l-1.1,1.1L1288.3,174.9z M1287.2,176l1.1-1.1l1.1,1.1l-1.1,1.1
571 + L1287.2,176z M1286.1,177.1l1.1-1.1l1.1,1.1l-1.1,1.1L1286.1,177.1z M1285,178.3l1.1-1.1l1.1,1.1l-1.1,1.1L1285,178.3z
572 + M1285.1,180.5l-1.8-0.6l1.6-1.6l1.1,1.1l-0.7,0.7l-0.6-0.6l0.2-0.8l0.5,0.2L1285.1,180.5L1285.1,180.5z M1286.6,181l-1.5-0.5
573 + l0.5-1.5l1.5,0.5L1286.6,181z M1288.1,181.4l-1.5-0.5l0.5-1.5l1.5,0.5L1288.1,181.4z M1289.7,181.9l-1.5-0.5l0.5-1.5l1.5,0.5
574 + L1289.7,181.9z M1291.2,182.4l-1.5-0.5l0.5-1.5l1.5,0.5L1291.2,182.4z M1292.7,182.9l-1.5-0.5l0.5-1.5l1.5,0.5L1292.7,182.9z
575 + M1294.2,183.4l-1.5-0.5l0.5-1.5l1.5,0.5L1294.2,183.4z M1295.7,183.8l-1.5-0.5l0.5-1.5l1.5,0.5L1295.7,183.8z M1297.2,184.3
576 + l-1.5-0.5l0.5-1.5l1.5,0.5L1297.2,184.3z M1298.7,184.8l-1.5-0.5l0.5-1.5l1.5,0.5L1298.7,184.8z M1300.2,185.3l-1.5-0.5
577 + l0.5-1.5l1.5,0.5L1300.2,185.3z M1302.4,184.4l0.6,1.8l-2.8-0.9l0.5-1.5l1.2,0.4l-0.2,0.8l-0.8,0.3l-0.1-0.3L1302.4,184.4
578 + L1302.4,184.4z M1301.8,182.9l0.5,1.5l-1.5,0.5l-0.5-1.5L1301.8,182.9z M1301.3,181.4l0.5,1.5l-1.5,0.5l-0.5-1.5L1301.3,181.4
579 + z M1300.8,179.9l0.5,1.5l-1.5,0.5l-0.5-1.5L1300.8,179.9z M1300.3,178.4l0.5,1.5l-1.5,0.5l-0.5-1.5L1300.3,178.4z
580 + M1299.8,176.9l0.5,1.5l-1.5,0.5l-0.5-1.5L1299.8,176.9z M1299.2,175.4l0.5,1.5l-1.5,0.5l-0.5-1.5L1299.2,175.4z
581 + M1298.7,173.9l0.5,1.5l-1.5,0.5l-0.5-1.5L1298.7,173.9z M1298.2,172.4l0.5,1.5l-1.5,0.5l-0.5-1.5L1298.2,172.4z
582 + M1297.7,170.9l0.5,1.5l-1.5,0.5l-0.5-1.5L1297.7,170.9z M1297.2,169.4l0.5,1.5l-1.5,0.5l-0.5-1.5L1297.2,169.4z"/>
583 + </g>
584 + </g>
585 + </g>
586 + </g>
587 + </g>
588 +</g>
589 +<g>
590 + <defs>
591 + <rect id="SVGID_00000132057561414629851790000009196947999050764970_" x="10" y="-315.3" width="2473" height="1264"/>
592 + </defs>
593 + <clipPath id="SVGID_00000106147175948805499000000001804287911640596097_">
594 + <use xlink:href="#SVGID_00000132057561414629851790000009196947999050764970_" style="overflow:visible;"/>
595 + </clipPath>
596 + <g style="clip-path:url(#SVGID_00000106147175948805499000000001804287911640596097_);">
597 + <path class="st27" d="M837.3,232.8l6.9-0.8c6.9-0.8,20.8-2.5,55.1-3.4c34.3-0.8,89.1-0.8,143.8-0.8c54.7,0,109.5,0,141.1,0.1
598 + s40,0.2,47.1,0.4c7.1,0.1,12.9,0.2,15.8,0.3l2.9,0.1"/>
599 + </g>
600 +</g>
601 +<g>
602 + <defs>
603 + <rect id="SVGID_00000099657363769161996980000005152130896269652926_" x="10" y="-315.3" width="2473" height="1264"/>
604 + </defs>
605 + <clipPath id="SVGID_00000069380115010529667450000004985023639827414155_">
606 + <use xlink:href="#SVGID_00000099657363769161996980000005152130896269652926_" style="overflow:visible;"/>
607 + </clipPath>
608 + <g style="clip-path:url(#SVGID_00000069380115010529667450000004985023639827414155_);">
609 + <g>
610 + <defs>
611 + <rect id="SVGID_00000036932012937151335440000005605535174306996120_" x="10" y="-315.3" width="2473" height="1264"/>
612 + </defs>
613 + <clipPath id="SVGID_00000114775462026487132210000004691926687091032992_">
614 + <use xlink:href="#SVGID_00000036932012937151335440000005605535174306996120_" style="overflow:visible;"/>
615 + </clipPath>
616 + <g style="clip-path:url(#SVGID_00000114775462026487132210000004691926687091032992_);">
617 + <g>
618 + <defs>
619 +
620 + <rect id="SVGID_00000096763837226321560440000004235390868712881812_" x="830.2" y="224.8" transform="matrix(0.9928 -0.1198 0.1198 0.9928 -21.8434 102.0734)" width="15.8" height="15.8"/>
621 + </defs>
622 + <clipPath id="SVGID_00000035505589384069763780000017226163769440666791_">
623 + <use xlink:href="#SVGID_00000096763837226321560440000004235390868712881812_" style="overflow:visible;"/>
624 + </clipPath>
625 + <g style="clip-path:url(#SVGID_00000035505589384069763780000017226163769440666791_);">
626 + <polygon class="st3" points="830.2,233.7 846.9,239.6 845,223.9 "/>
627 + <path class="st3" d="M831.2,234l-0.5,0.3l-0.4-0.7l0.3-0.8l1.5,0.5l-0.5,1.5l-3-1.1l1.8-1.2L831.2,234L831.2,234z
628 + M832.5,233.1l-1.3,0.9l-0.9-1.3l1.3-0.9L832.5,233.1z M833.8,232.3l-1.3,0.9l-0.9-1.3l1.3-0.9L833.8,232.3z M835.1,231.4
629 + l-1.3,0.9l-0.9-1.3l1.3-0.9L835.1,231.4z M836.4,230.5l-1.3,0.9l-0.9-1.3l1.3-0.9L836.4,230.5z M837.8,229.7l-1.3,0.9
630 + l-0.9-1.3l1.3-0.9L837.8,229.7z M839.1,228.8l-1.3,0.9l-0.9-1.3l1.3-0.9L839.1,228.8z M840.4,227.9l-1.3,0.9l-0.9-1.3l1.3-0.9
631 + L840.4,227.9z M841.7,227.1l-1.3,0.9l-0.9-1.3l1.3-0.9L841.7,227.1z M843,226.2l-1.3,0.9l-0.9-1.3l1.3-0.9L843,226.2z
632 + M844.4,225.3l-1.3,0.9l-0.9-1.3l1.3-0.9L844.4,225.3z M844.3,224.3l0-0.3l0.8-0.1l0.4,0.7l-1.1,0.7l-0.9-1.3l2.2-1.4l0.2,1.6
633 + L844.3,224.3L844.3,224.3z M844.4,225.9l-0.2-1.6l1.6-0.2l0.2,1.6L844.4,225.9z M844.6,227.5l-0.2-1.6l1.6-0.2l0.2,1.6
634 + L844.6,227.5z M844.8,229l-0.2-1.6l1.6-0.2l0.2,1.6L844.8,229z M845,230.6l-0.2-1.6l1.6-0.2l0.2,1.6L845,230.6z M845.2,232.2
635 + l-0.2-1.6l1.6-0.2l0.2,1.6L845.2,232.2z M845.4,233.7l-0.2-1.6l1.6-0.2l0.2,1.6L845.4,233.7z M845.6,235.3l-0.2-1.6l1.6-0.2
636 + l0.2,1.6L845.6,235.3z M845.8,236.9l-0.2-1.6l1.6-0.2l0.2,1.6L845.8,236.9z M846,238.4l-0.2-1.6l1.6-0.2l0.2,1.6L846,238.4z
637 + M846.9,238.8l0.3,0.1l-0.3,0.8l-0.8,0.1l-0.2-1.3l1.6-0.2l0.3,2.6l-1.5-0.5L846.9,238.8L846.9,238.8z M845.4,238.3l1.5,0.5
638 + l-0.5,1.5l-1.5-0.5L845.4,238.3z M843.9,237.7l1.5,0.5l-0.5,1.5l-1.5-0.5L843.9,237.7z M842.4,237.2l1.5,0.5l-0.5,1.5
639 + l-1.5-0.5L842.4,237.2z M840.9,236.7l1.5,0.5l-0.5,1.5l-1.5-0.5L840.9,236.7z M839.5,236.1l1.5,0.5l-0.5,1.5l-1.5-0.5
640 + L839.5,236.1z M838,235.6l1.5,0.5l-0.5,1.5l-1.5-0.5L838,235.6z M836.5,235.1l1.5,0.5l-0.5,1.5l-1.5-0.5L836.5,235.1z
641 + M835,234.6l1.5,0.5l-0.5,1.5l-1.5-0.5L835,234.6z M833.5,234l1.5,0.5l-0.5,1.5l-1.5-0.5L833.5,234z M832,233.5l1.5,0.5
642 + l-0.5,1.5l-1.5-0.5L832,233.5z"/>
643 + </g>
644 + </g>
645 + </g>
646 + </g>
647 + </g>
648 +</g>
649 +<g>
650 + <defs>
651 + <rect id="SVGID_00000021829021536836738180000016492556188216618940_" x="10" y="-315.3" width="2473" height="1264"/>
652 + </defs>
653 + <clipPath id="SVGID_00000029747494173536645850000016560023481934200726_">
654 + <use xlink:href="#SVGID_00000021829021536836738180000016492556188216618940_" style="overflow:visible;"/>
655 + </clipPath>
656 + <g style="clip-path:url(#SVGID_00000029747494173536645850000016560023481934200726_);">
657 + <g>
658 + <defs>
659 + <rect id="SVGID_00000062186868041705309380000015453062764582635435_" x="10" y="-315.3" width="2473" height="1264"/>
660 + </defs>
661 + <clipPath id="SVGID_00000049904433297589781460000003473368813938909852_">
662 + <use xlink:href="#SVGID_00000062186868041705309380000015453062764582635435_" style="overflow:visible;"/>
663 + </clipPath>
664 + <g style="clip-path:url(#SVGID_00000049904433297589781460000003473368813938909852_);">
665 + <g>
666 + <defs>
667 +
668 + <rect id="SVGID_00000031191136678144010940000012075629018954224812_" x="1242.1" y="220.7" transform="matrix(1.989543e-02 -0.9998 0.9998 1.989543e-02 996.5935 1473.8743)" width="15.8" height="15.8"/>
669 + </defs>
670 + <clipPath id="SVGID_00000110431934226839133410000010808372942951483553_">
671 + <use xlink:href="#SVGID_00000031191136678144010940000012075629018954224812_" style="overflow:visible;"/>
672 + </clipPath>
673 + <g style="clip-path:url(#SVGID_00000110431934226839133410000010808372942951483553_);">
674 + <polygon class="st3" points="1242.2,220.5 1257.9,228.8 1241.9,236.4 "/>
675 + <path class="st3" d="M1241.4,221.1l0-1.9l2.5,1.3l-0.7,1.4l-1.4-0.7l0.4-0.7l0.8,0v0.6L1241.4,221.1L1241.4,221.1z
676 + M1241.4,222.7l0-1.6l1.6,0l0,1.6L1241.4,222.7z M1241.4,224.3l0-1.6l1.6,0l0,1.6L1241.4,224.3z M1241.4,225.8l0-1.6l1.6,0
677 + l0,1.6L1241.4,225.8z M1241.3,227.4l0-1.6l1.6,0l0,1.6L1241.3,227.4z M1241.3,229l0-1.6l1.6,0l0,1.6L1241.3,229z
678 + M1241.3,230.6l0-1.6l1.6,0l0,1.6L1241.3,230.6z M1241.2,232.2l0-1.6l1.6,0l0,1.6L1241.2,232.2z M1241.2,233.7l0-1.6l1.6,0
679 + l0,1.6L1241.2,233.7z M1241.2,235.3l0-1.6l1.6,0l0,1.6L1241.2,235.3z M1242.8,236.8l-1.7,0.8l0.1-2.3l1.6,0l0,1l-0.8,0
680 + l-0.3-0.7l0.5-0.2L1242.8,236.8L1242.8,236.8z M1244.2,236.1l-1.4,0.7l-0.7-1.4l1.4-0.7L1244.2,236.1z M1245.7,235.5l-1.4,0.7
681 + l-0.7-1.4l1.4-0.7L1245.7,235.5z M1247.1,234.8l-1.4,0.7l-0.7-1.4l1.4-0.7L1247.1,234.8z M1248.5,234.1l-1.4,0.7l-0.7-1.4
682 + l1.4-0.7L1248.5,234.1z M1250,233.4l-1.4,0.7l-0.7-1.4l1.4-0.7L1250,233.4z M1251.4,232.7l-1.4,0.7l-0.7-1.4l1.4-0.7
683 + L1251.4,232.7z M1252.8,232.1l-1.4,0.7l-0.7-1.4l1.4-0.7L1252.8,232.1z M1254.3,231.4l-1.4,0.7l-0.7-1.4l1.4-0.7L1254.3,231.4
684 + z M1255.7,230.7l-1.4,0.7l-0.7-1.4l1.4-0.7L1255.7,230.7z M1257.1,230l-1.4,0.7l-0.7-1.4l1.4-0.7L1257.1,230z M1258.1,227.9
685 + l1.7,0.9l-2.6,1.2l-0.7-1.4l1.2-0.6l0.3,0.7l-0.4,0.7l-0.2-0.1L1258.1,227.9L1258.1,227.9z M1256.7,227.2l1.4,0.7l-0.7,1.4
686 + l-1.4-0.7L1256.7,227.2z M1255.3,226.4l1.4,0.7l-0.7,1.4l-1.4-0.7L1255.3,226.4z M1253.9,225.7l1.4,0.7l-0.7,1.4l-1.4-0.7
687 + L1253.9,225.7z M1252.5,225l1.4,0.7l-0.7,1.4l-1.4-0.7L1252.5,225z M1251.1,224.2l1.4,0.7l-0.7,1.4l-1.4-0.7L1251.1,224.2z
688 + M1249.7,223.5l1.4,0.7l-0.7,1.4l-1.4-0.7L1249.7,223.5z M1248.3,222.7l1.4,0.7l-0.7,1.4l-1.4-0.7L1248.3,222.7z M1246.9,222
689 + l1.4,0.7l-0.7,1.4l-1.4-0.7L1246.9,222z M1245.5,221.3l1.4,0.7l-0.7,1.4l-1.4-0.7L1245.5,221.3z M1244.1,220.5l1.4,0.7
690 + l-0.7,1.4l-1.4-0.7L1244.1,220.5z"/>
691 + </g>
692 + </g>
693 + </g>
694 + </g>
695 + </g>
696 +</g>
697 +<g>
698 + <defs>
699 + <rect id="SVGID_00000183955303964032033650000006533571448350718866_" x="10" y="-315.3" width="2473" height="1264"/>
700 + </defs>
701 + <clipPath id="SVGID_00000118384531667720095360000002748900312211283886_">
702 + <use xlink:href="#SVGID_00000183955303964032033650000006533571448350718866_" style="overflow:visible;"/>
703 + </clipPath>
704 + <g style="clip-path:url(#SVGID_00000118384531667720095360000002748900312211283886_);">
705 + <path class="st27" d="M1165.8,448.6h6.9c6.9,0,20.8,0,36.5-13.8s33.2-41.3,50-67.8c16.8-26.4,32.9-51.8,41-64.4l8.1-12.7"/>
706 + </g>
707 +</g>
708 +<g>
709 + <defs>
710 + <rect id="SVGID_00000091711202723249612370000013067476220107639459_" x="1158.7" y="440.7" width="15.8" height="15.8"/>
711 + </defs>
712 + <clipPath id="SVGID_00000167365524207122294160000010205490912526147200_">
713 + <use xlink:href="#SVGID_00000091711202723249612370000013067476220107639459_" style="overflow:visible;"/>
714 + </clipPath>
715 + <g style="clip-path:url(#SVGID_00000167365524207122294160000010205490912526147200_);">
716 + <polygon class="st3" points="1158.7,448.6 1174.6,456.6 1174.6,440.7 "/>
717 + <path class="st3" d="M1159.6,449.1l-0.5,0.3l-0.3-0.7l0.3-0.7l1.4,0.7l-0.7,1.4l-2.8-1.4l1.9-1L1159.6,449.1L1159.6,449.1z
718 + M1161,448.4l-1.4,0.7l-0.7-1.4l1.4-0.7L1161,448.4z M1162.4,447.7l-1.4,0.7l-0.7-1.4l1.4-0.7L1162.4,447.7z M1163.9,447l-1.4,0.7
719 + l-0.7-1.4l1.4-0.7L1163.9,447z M1165.3,446.3l-1.4,0.7l-0.7-1.4l1.4-0.7L1165.3,446.3z M1166.7,445.6l-1.4,0.7l-0.7-1.4l1.4-0.7
720 + L1166.7,445.6z M1168.1,444.9l-1.4,0.7l-0.7-1.4l1.4-0.7L1168.1,444.9z M1169.5,444.1l-1.4,0.7l-0.7-1.4l1.4-0.7L1169.5,444.1z
721 + M1171,443.4l-1.4,0.7l-0.7-1.4l1.4-0.7L1171,443.4z M1172.4,442.7l-1.4,0.7l-0.7-1.4l1.4-0.7L1172.4,442.7z M1173.8,442l-1.4,0.7
722 + l-0.7-1.4l1.4-0.7L1173.8,442z M1173.8,441v-0.3h0.8l0.3,0.7l-1.2,0.6l-0.7-1.4l2.3-1.1v1.6L1173.8,441L1173.8,441z M1173.8,442.6
723 + V441h1.6v1.6H1173.8z M1173.8,444.2v-1.6h1.6v1.6H1173.8z M1173.8,445.8v-1.6h1.6v1.6H1173.8z M1173.8,447.3v-1.6h1.6v1.6H1173.8z
724 + M1173.8,448.9v-1.6h1.6v1.6H1173.8z M1173.8,450.5v-1.6h1.6v1.6H1173.8z M1173.8,452.1v-1.6h1.6v1.6H1173.8z M1173.8,453.6v-1.6
725 + h1.6v1.6H1173.8z M1173.8,455.2v-1.6h1.6v1.6H1173.8z M1174.7,455.7l0.3,0.1l-0.3,0.7h-0.8v-1.3h1.6v2.6l-1.4-0.7L1174.7,455.7
726 + L1174.7,455.7z M1173.3,455l1.4,0.7l-0.7,1.4l-1.4-0.7L1173.3,455z M1171.9,454.3l1.4,0.7l-0.7,1.4l-1.4-0.7L1171.9,454.3z
727 + M1170.4,453.6l1.4,0.7l-0.7,1.4l-1.4-0.7L1170.4,453.6z M1169,452.8l1.4,0.7l-0.7,1.4l-1.4-0.7L1169,452.8z M1167.6,452.1
728 + l1.4,0.7l-0.7,1.4l-1.4-0.7L1167.6,452.1z M1166.2,451.4l1.4,0.7l-0.7,1.4l-1.4-0.7L1166.2,451.4z M1164.8,450.7l1.4,0.7l-0.7,1.4
729 + l-1.4-0.7L1164.8,450.7z M1163.3,450l1.4,0.7l-0.7,1.4l-1.4-0.7L1163.3,450z M1161.9,449.3l1.4,0.7l-0.7,1.4l-1.4-0.7
730 + L1161.9,449.3z M1160.5,448.6l1.4,0.7l-0.7,1.4l-1.4-0.7L1160.5,448.6z"/>
731 + </g>
732 +</g>
733 +<g>
734 + <defs>
735 + <rect id="SVGID_00000167384701048989971760000000073175456722057131_" x="10" y="-315.3" width="2473" height="1264"/>
736 + </defs>
737 + <clipPath id="SVGID_00000121981081522528985380000003895317323019368348_">
738 + <use xlink:href="#SVGID_00000167384701048989971760000000073175456722057131_" style="overflow:visible;"/>
739 + </clipPath>
740 + <g style="clip-path:url(#SVGID_00000121981081522528985380000003895317323019368348_);">
741 + <g>
742 + <defs>
743 + <rect id="SVGID_00000023999592618231684190000004269945565907780485_" x="10" y="-315.3" width="2473" height="1264"/>
744 + </defs>
745 + <clipPath id="SVGID_00000075148404719187371980000011770155237397649295_">
746 + <use xlink:href="#SVGID_00000023999592618231684190000004269945565907780485_" style="overflow:visible;"/>
747 + </clipPath>
748 + <g style="clip-path:url(#SVGID_00000075148404719187371980000011770155237397649295_);">
749 + <g>
750 + <defs>
751 +
752 + <rect id="SVGID_00000099640463598947540910000008440417572511635099_" x="1300.3" y="282.1" transform="matrix(0.5366 -0.8439 0.8439 0.5366 361.5684 1238.3348)" width="15.8" height="15.8"/>
753 + </defs>
754 + <clipPath id="SVGID_00000179604797795163600640000001617902263014635936_">
755 + <use xlink:href="#SVGID_00000099640463598947540910000008440417572511635099_" style="overflow:visible;"/>
756 + </clipPath>
757 + <g style="clip-path:url(#SVGID_00000179604797795163600640000001617902263014635936_);">
758 + <polygon class="st3" points="1297.3,292.5 1312.5,283.4 1310.7,301 "/>
759 + <path class="st3" d="M1297.4,293.5l-1.6-1l2.5-1.5l0.8,1.4l-1.4,0.8l-0.4-0.7l0.4-0.7l0.5,0.3L1297.4,293.5L1297.4,293.5z
760 + M1298.8,294.3l-1.3-0.9l0.8-1.3l1.3,0.9L1298.8,294.3z M1300.1,295.2l-1.3-0.9l0.8-1.3l1.3,0.9L1300.1,295.2z M1301.4,296
761 + l-1.3-0.9l0.8-1.3l1.3,0.9L1301.4,296z M1302.8,296.9l-1.3-0.9l0.8-1.3l1.3,0.9L1302.8,296.9z M1304.1,297.7l-1.3-0.9l0.8-1.3
762 + l1.3,0.9L1304.1,297.7z M1305.4,298.6l-1.3-0.9l0.8-1.3l1.3,0.9L1305.4,298.6z M1306.8,299.4l-1.3-0.9l0.8-1.3l1.3,0.9
763 + L1306.8,299.4z M1308.1,300.3l-1.3-0.9l0.8-1.3l1.3,0.9L1308.1,300.3z M1309.5,301.1l-1.3-0.9l0.8-1.3l1.3,0.9L1309.5,301.1z
764 + M1311.6,300.5l-0.2,1.8l-1.9-1.2l0.8-1.3l0.8,0.5l-0.4,0.7l-0.8-0.1l0.1-0.6L1311.6,300.5L1311.6,300.5z M1311.8,298.9
765 + l-0.2,1.6l-1.6-0.2l0.2-1.6L1311.8,298.9z M1311.9,297.3l-0.2,1.6l-1.6-0.2l0.2-1.6L1311.9,297.3z M1312.1,295.8l-0.2,1.6
766 + l-1.6-0.2l0.2-1.6L1312.1,295.8z M1312.2,294.2l-0.2,1.6l-1.6-0.2l0.2-1.6L1312.2,294.2z M1312.4,292.6l-0.2,1.6l-1.6-0.2
767 + l0.2-1.6L1312.4,292.6z M1312.6,291l-0.2,1.6l-1.6-0.2l0.2-1.6L1312.6,291z M1312.7,289.5l-0.2,1.6l-1.6-0.2l0.2-1.6
768 + L1312.7,289.5z M1312.9,287.9l-0.2,1.6l-1.6-0.2l0.2-1.6L1312.9,287.9z M1313,286.3l-0.2,1.6l-1.6-0.2l0.2-1.6L1313,286.3z
769 + M1313.2,284.7l-0.2,1.6l-1.6-0.2l0.2-1.6L1313.2,284.7z M1311.9,282.8l1.6-1l-0.3,2.9l-1.6-0.2l0.1-1.3l0.8,0.1l0.4,0.7
770 + l-0.2,0.1L1311.9,282.8L1311.9,282.8z M1310.5,283.6l1.4-0.8l0.8,1.4l-1.4,0.8L1310.5,283.6z M1309.2,284.4l1.4-0.8l0.8,1.4
771 + l-1.4,0.8L1309.2,284.4z M1307.8,285.3l1.4-0.8l0.8,1.4l-1.4,0.8L1307.8,285.3z M1306.5,286.1l1.4-0.8l0.8,1.4l-1.4,0.8
772 + L1306.5,286.1z M1305.1,286.9l1.4-0.8l0.8,1.4l-1.4,0.8L1305.1,286.9z M1303.7,287.7l1.4-0.8l0.8,1.4l-1.4,0.8L1303.7,287.7z
773 + M1302.4,288.5l1.4-0.8l0.8,1.4l-1.4,0.8L1302.4,288.5z M1301,289.4l1.4-0.8l0.8,1.4l-1.4,0.8L1301,289.4z M1299.7,290.2
774 + l1.4-0.8l0.8,1.4l-1.4,0.8L1299.7,290.2z M1298.3,291l1.4-0.8l0.8,1.4l-1.4,0.8L1298.3,291z"/>
775 + </g>
776 + </g>
777 + </g>
778 + </g>
779 + </g>
780 +</g>
781 +<g>
782 + <defs>
783 + <rect id="SVGID_00000080900766610112941480000017788023775162236586_" x="10" y="-315.3" width="2473" height="1264"/>
784 + </defs>
785 + <clipPath id="SVGID_00000089539490752864619270000007764174044062086284_">
786 + <use xlink:href="#SVGID_00000080900766610112941480000017788023775162236586_" style="overflow:visible;"/>
787 + </clipPath>
788 + <g style="clip-path:url(#SVGID_00000089539490752864619270000007764174044062086284_);">
789 + <path class="st3" d="M1570.6,226.8h3.5v2h-3.5V226.8z M1562.6,226.8h3.7v2h-3.7V226.8z M1554.6,226.8h3.9v2h-3.9V226.8z
790 + M1546.6,226.8h4.2v2h-4.2V226.8z M1539.1,226.8h3.7v2h-3.7V226.8z M1530.8,226.8h4.3v2h-4.3V226.8z M1523.2,226.8h3.7v2h-3.7
791 + V226.8z M1515.2,226.8h4.1v2h-4.1V226.8z M1506.9,226.8h4.1v2h-4.1V226.8z M1499.1,226.8l3.9,0v2l-3.9,0L1499.1,226.8
792 + L1499.1,226.8z M1491.1,226.9l4,0v2l-4,0L1491.1,226.9L1491.1,226.9z M1483,227h1.2l1.9,0h1l0,2h-1l-1.9,0h-1.2L1483,227z
793 + M1474.8,227.1l4.1-0.1l0,2l-4.1,0.1L1474.8,227.1z M1466.8,227.2l3.9-0.1l0,2l-3.9,0.1L1466.8,227.2z M1459.2,227.3l3.9-0.1l0,2
794 + l-3.9,0.1L1459.2,227.3z M1451.3,227.5l3.8-0.1l0,2l-3.8,0.1L1451.3,227.5z M1443.4,227.6h0.2l3.5-0.1l0,2l-3.5,0.1h-0.2
795 + L1443.4,227.6z M1435.5,227.8l4-0.1l0,2l-4,0.1L1435.5,227.8z"/>
796 + </g>
797 +</g>
798 +<g>
799 + <defs>
800 + <rect id="SVGID_00000055692140626774951560000018358176439156532106_" x="1567.2" y="219.9" width="15.8" height="15.8"/>
801 + </defs>
802 + <clipPath id="SVGID_00000031925080658095673190000002656465933969291428_">
803 + <use xlink:href="#SVGID_00000055692140626774951560000018358176439156532106_" style="overflow:visible;"/>
804 + </clipPath>
805 + <g style="clip-path:url(#SVGID_00000031925080658095673190000002656465933969291428_);">
806 + <polygon class="st3" points="1567.2,219.9 1583.1,227.8 1567.2,235.7 "/>
807 + <path class="st3" d="M1566.4,220.4v-1.9l2.6,1.3l-0.7,1.4l-1.4-0.7l0.3-0.7h0.8v0.6L1566.4,220.4L1566.4,220.4z M1566.4,222v-1.6
808 + h1.6v1.6H1566.4z M1566.4,223.6V222h1.6v1.6H1566.4z M1566.4,225.2v-1.6h1.6v1.6H1566.4z M1566.4,226.8v-1.6h1.6v1.6H1566.4z
809 + M1566.4,228.3v-1.6h1.6v1.6H1566.4z M1566.4,229.9v-1.6h1.6v1.6H1566.4z M1566.4,231.5v-1.6h1.6v1.6H1566.4z M1566.4,233.1v-1.6
810 + h1.6v1.6H1566.4z M1566.4,234.7v-1.6h1.6v1.6H1566.4z M1568.1,236.1l-1.7,0.8v-2.3h1.6v1h-0.8l-0.3-0.7l0.5-0.3L1568.1,236.1
811 + L1568.1,236.1z M1569.5,235.4l-1.4,0.7l-0.7-1.4l1.4-0.7L1569.5,235.4z M1570.9,234.7l-1.4,0.7l-0.7-1.4l1.4-0.7L1570.9,234.7z
812 + M1572.4,234l-1.4,0.7l-0.7-1.4l1.4-0.7L1572.4,234z M1573.8,233.3l-1.4,0.7l-0.7-1.4l1.4-0.7L1573.8,233.3z M1575.2,232.6
813 + l-1.4,0.7l-0.7-1.4l1.4-0.7L1575.2,232.6z M1576.6,231.9l-1.4,0.7l-0.7-1.4l1.4-0.7L1576.6,231.9z M1578,231.1l-1.4,0.7l-0.7-1.4
814 + l1.4-0.7L1578,231.1z M1579.5,230.4l-1.4,0.7l-0.7-1.4l1.4-0.7L1579.5,230.4z M1580.9,229.7l-1.4,0.7l-0.7-1.4l1.4-0.7
815 + L1580.9,229.7z M1582.3,229l-1.4,0.7l-0.7-1.4l1.4-0.7L1582.3,229z M1583.2,226.9l1.7,0.8l-2.6,1.3l-0.7-1.4l1.2-0.6l0.3,0.7
816 + l-0.3,0.7l-0.3-0.1L1583.2,226.9L1583.2,226.9z M1581.8,226.2l1.4,0.7l-0.7,1.4l-1.4-0.7L1581.8,226.2z M1580.4,225.5l1.4,0.7
817 + l-0.7,1.4l-1.4-0.7L1580.4,225.5z M1578.9,224.8l1.4,0.7l-0.7,1.4l-1.4-0.7L1578.9,224.8z M1577.5,224l1.4,0.7l-0.7,1.4l-1.4-0.7
818 + L1577.5,224z M1576.1,223.3l1.4,0.7l-0.7,1.4l-1.4-0.7L1576.1,223.3z M1574.7,222.6l1.4,0.7l-0.7,1.4l-1.4-0.7L1574.7,222.6z
819 + M1573.3,221.9l1.4,0.7l-0.7,1.4l-1.4-0.7L1573.3,221.9z M1571.8,221.2l1.4,0.7l-0.7,1.4l-1.4-0.7L1571.8,221.2z M1570.4,220.5
820 + l1.4,0.7l-0.7,1.4l-1.4-0.7L1570.4,220.5z M1569,219.8l1.4,0.7l-0.7,1.4l-1.4-0.7L1569,219.8z"/>
821 + </g>
822 +</g>
823 +<g>
824 + <defs>
825 + <rect id="SVGID_00000082328905178908513470000016828721385536177339_" x="10" y="-315.3" width="2473" height="1264"/>
826 + </defs>
827 + <clipPath id="SVGID_00000012459626582397514060000009524383776792149662_">
828 + <use xlink:href="#SVGID_00000082328905178908513470000016828721385536177339_" style="overflow:visible;"/>
829 + </clipPath>
830 + <g style="clip-path:url(#SVGID_00000012459626582397514060000009524383776792149662_);">
831 + <path class="st27" d="M1996.1,227.8h83.2"/>
832 + </g>
833 +</g>
834 +<g>
835 + <defs>
836 + <rect id="SVGID_00000000204867960409065840000003490529602289955221_" x="1988.9" y="219.9" width="15.8" height="15.8"/>
837 + </defs>
838 + <clipPath id="SVGID_00000052104183626941848480000007149735530026157697_">
839 + <use xlink:href="#SVGID_00000000204867960409065840000003490529602289955221_" style="overflow:visible;"/>
840 + </clipPath>
841 + <g style="clip-path:url(#SVGID_00000052104183626941848480000007149735530026157697_);">
842 + <polygon class="st3" points="1988.9,227.8 2004.8,235.7 2004.8,219.9 "/>
843 + <path class="st3" d="M1989.8,228.2l-0.5,0.3l-0.3-0.7l0.3-0.7l1.4,0.7l-0.7,1.4l-2.8-1.4l1.9-1L1989.8,228.2L1989.8,228.2z
844 + M1991.2,227.5l-1.4,0.7l-0.7-1.4l1.4-0.7L1991.2,227.5z M1992.7,226.8l-1.4,0.7l-0.7-1.4l1.4-0.7L1992.7,226.8z M1994.1,226.1
845 + l-1.4,0.7l-0.7-1.4l1.4-0.7L1994.1,226.1z M1995.5,225.4l-1.4,0.7l-0.7-1.4l1.4-0.7L1995.5,225.4z M1996.9,224.7l-1.4,0.7
846 + l-0.7-1.4l1.4-0.7L1996.9,224.7z M1998.3,224l-1.4,0.7l-0.7-1.4l1.4-0.7L1998.3,224z M1999.8,223.3l-1.4,0.7l-0.7-1.4l1.4-0.7
847 + L1999.8,223.3z M2001.2,222.6l-1.4,0.7l-0.7-1.4l1.4-0.7L2001.2,222.6z M2002.6,221.8l-1.4,0.7l-0.7-1.4l1.4-0.7L2002.6,221.8z
848 + M2004,221.1l-1.4,0.7l-0.7-1.4l1.4-0.7L2004,221.1z M2004,220.1v-0.3h0.8l0.3,0.7l-1.2,0.6l-0.7-1.4l2.3-1.1v1.6L2004,220.1
849 + L2004,220.1z M2004,221.7v-1.6h1.6v1.6H2004z M2004,223.3v-1.6h1.6v1.6H2004z M2004,224.9v-1.6h1.6v1.6H2004z M2004,226.5v-1.6
850 + h1.6v1.6H2004z M2004,228v-1.6h1.6v1.6H2004z M2004,229.6V228h1.6v1.6H2004z M2004,231.2v-1.6h1.6v1.6H2004z M2004,232.8v-1.6h1.6
851 + v1.6H2004z M2004,234.4v-1.6h1.6v1.6H2004z M2004.9,234.8l0.3,0.1l-0.3,0.7h-0.8v-1.3h1.6v2.6l-1.4-0.7L2004.9,234.8L2004.9,234.8
852 + z M2003.5,234.1l1.4,0.7l-0.7,1.4l-1.4-0.7L2003.5,234.1z M2002.1,233.4l1.4,0.7l-0.7,1.4l-1.4-0.7L2002.1,233.4z M2000.7,232.7
853 + l1.4,0.7l-0.7,1.4l-1.4-0.7L2000.7,232.7z M1999.2,232l1.4,0.7l-0.7,1.4l-1.4-0.7L1999.2,232z M1997.8,231.3l1.4,0.7l-0.7,1.4
854 + l-1.4-0.7L1997.8,231.3z M1996.4,230.6l1.4,0.7l-0.7,1.4l-1.4-0.7L1996.4,230.6z M1995,229.8l1.4,0.7l-0.7,1.4l-1.4-0.7
855 + L1995,229.8z M1993.6,229.1l1.4,0.7l-0.7,1.4l-1.4-0.7L1993.6,229.1z M1992.1,228.4l1.4,0.7l-0.7,1.4l-1.4-0.7L1992.1,228.4z
856 + M1990.7,227.7l1.4,0.7l-0.7,1.4l-1.4-0.7L1990.7,227.7z"/>
857 + </g>
858 +</g>
859 +<g>
860 + <defs>
861 + <rect id="SVGID_00000096037155027899726430000003377672684665991553_" x="2071.3" y="219.9" width="15.8" height="15.8"/>
862 + </defs>
863 + <clipPath id="SVGID_00000004509549875243981780000017806978581699248034_">
864 + <use xlink:href="#SVGID_00000096037155027899726430000003377672684665991553_" style="overflow:visible;"/>
865 + </clipPath>
866 + <g style="clip-path:url(#SVGID_00000004509549875243981780000017806978581699248034_);">
867 + <polygon class="st3" points="2071.3,219.9 2087.2,227.8 2071.3,235.7 "/>
868 + <path class="st3" d="M2070.5,220.4v-1.9l2.6,1.3l-0.7,1.4l-1.4-0.7l0.4-0.7h0.8v0.6L2070.5,220.4L2070.5,220.4z M2070.5,222v-1.6
869 + h1.6v1.6H2070.5z M2070.5,223.6V222h1.6v1.6H2070.5z M2070.5,225.2v-1.6h1.6v1.6H2070.5z M2070.5,226.8v-1.6h1.6v1.6H2070.5z
870 + M2070.5,228.3v-1.6h1.6v1.6H2070.5z M2070.5,229.9v-1.6h1.6v1.6H2070.5z M2070.5,231.5v-1.6h1.6v1.6H2070.5z M2070.5,233.1v-1.6
871 + h1.6v1.6H2070.5z M2070.5,234.7v-1.6h1.6v1.6H2070.5z M2072.2,236.1l-1.7,0.8v-2.3h1.6v1h-0.8l-0.4-0.7l0.5-0.3L2072.2,236.1z
872 + M2073.6,235.4l-1.4,0.7l-0.7-1.4l1.4-0.7L2073.6,235.4z M2075,234.7l-1.4,0.7l-0.7-1.4l1.4-0.7L2075,234.7z M2076.5,234l-1.4,0.7
873 + l-0.7-1.4l1.4-0.7L2076.5,234z M2077.9,233.3l-1.4,0.7l-0.7-1.4l1.4-0.7L2077.9,233.3z M2079.3,232.6l-1.4,0.7l-0.7-1.4l1.4-0.7
874 + L2079.3,232.6z M2080.7,231.9l-1.4,0.7l-0.7-1.4l1.4-0.7L2080.7,231.9z M2082.1,231.1l-1.4,0.7l-0.7-1.4l1.4-0.7L2082.1,231.1z
875 + M2083.6,230.4l-1.4,0.7l-0.7-1.4l1.4-0.7L2083.6,230.4z M2085,229.7l-1.4,0.7l-0.7-1.4l1.4-0.7L2085,229.7z M2086.4,229l-1.4,0.7
876 + l-0.7-1.4l1.4-0.7L2086.4,229z M2087.3,226.9l1.7,0.8l-2.6,1.3l-0.7-1.4l1.2-0.6l0.4,0.7l-0.4,0.7l-0.3-0.1L2087.3,226.9
877 + L2087.3,226.9z M2085.9,226.2l1.4,0.7l-0.7,1.4l-1.4-0.7L2085.9,226.2z M2084.5,225.5l1.4,0.7l-0.7,1.4l-1.4-0.7L2084.5,225.5z
878 + M2083,224.8l1.4,0.7l-0.7,1.4l-1.4-0.7L2083,224.8z M2081.6,224l1.4,0.7l-0.7,1.4l-1.4-0.7L2081.6,224z M2080.2,223.3l1.4,0.7
879 + l-0.7,1.4l-1.4-0.7L2080.2,223.3z M2078.8,222.6l1.4,0.7l-0.7,1.4l-1.4-0.7L2078.8,222.6z M2077.4,221.9l1.4,0.7l-0.7,1.4
880 + l-1.4-0.7L2077.4,221.9z M2075.9,221.2l1.4,0.7l-0.7,1.4l-1.4-0.7L2075.9,221.2z M2074.5,220.5l1.4,0.7l-0.7,1.4l-1.4-0.7
881 + L2074.5,220.5z M2073.1,219.8l1.4,0.7l-0.7,1.4l-1.4-0.7L2073.1,219.8z"/>
882 + </g>
883 +</g>
884 +<g>
885 + <defs>
886 + <rect id="SVGID_00000057145579575648425470000000066675098518228397_" x="10" y="-315.3" width="2473" height="1264"/>
887 + </defs>
888 + <clipPath id="SVGID_00000139275487196970754910000015847525056595399091_">
889 + <use xlink:href="#SVGID_00000057145579575648425470000000066675098518228397_" style="overflow:visible;"/>
890 + </clipPath>
891 + <g style="clip-path:url(#SVGID_00000139275487196970754910000015847525056595399091_);">
892 + <path class="st27" d="M234.6,324.1l8.2-8.3c8.2-8.3,24.8-24.9,40.4-42.1c15.7-17.3,30.5-35.3,44.5-52.3c14-17,27.2-32.9,33.8-40.9
893 + l6.6-8"/>
894 + </g>
895 +</g>
896 +<g>
897 + <defs>
898 + <rect id="SVGID_00000088821363939539616590000009520657360209187983_" x="10" y="-315.3" width="2473" height="1264"/>
899 + </defs>
900 + <clipPath id="SVGID_00000029724248896774258190000015923189364124112830_">
901 + <use xlink:href="#SVGID_00000088821363939539616590000009520657360209187983_" style="overflow:visible;"/>
902 + </clipPath>
903 + <g style="clip-path:url(#SVGID_00000029724248896774258190000015923189364124112830_);">
904 + <g>
905 + <defs>
906 + <rect id="SVGID_00000169558521205561609540000014685052073866371752_" x="10" y="-315.3" width="2473" height="1264"/>
907 + </defs>
908 + <clipPath id="SVGID_00000005263606219827907090000016570189072241964983_">
909 + <use xlink:href="#SVGID_00000169558521205561609540000014685052073866371752_" style="overflow:visible;"/>
910 + </clipPath>
911 + <g style="clip-path:url(#SVGID_00000005263606219827907090000016570189072241964983_);">
912 + <g>
913 + <defs>
914 +
915 + <rect id="SVGID_00000139983687857284644730000016823614009493927078_" x="360.2" y="164.6" transform="matrix(0.6363 -0.7714 0.7714 0.6363 0.8254 346.7164)" width="15.8" height="15.8"/>
916 + </defs>
917 + <clipPath id="SVGID_00000107545988855502021540000003146258000133319305_">
918 + <use xlink:href="#SVGID_00000139983687857284644730000016823614009493927078_" style="overflow:visible;"/>
919 + </clipPath>
920 + <g style="clip-path:url(#SVGID_00000107545988855502021540000003146258000133319305_);">
921 + <polygon class="st3" points="357,173.6 373.2,166.4 369.2,183.7 "/>
922 + <path class="st3" d="M357,174.6l-1.4-1.2l2.6-1.2l0.6,1.4l-1.5,0.6l-0.3-0.7l0.5-0.6l0.4,0.4L357,174.6L357,174.6z
923 + M358.2,175.6l-1.2-1l1-1.2l1.2,1L358.2,175.6z M359.4,176.6l-1.2-1l1-1.2l1.2,1L359.4,176.6z M360.6,177.6l-1.2-1l1-1.2
924 + l1.2,1L360.6,177.6z M361.8,178.6l-1.2-1l1-1.2l1.2,1L361.8,178.6z M363.1,179.6l-1.2-1l1-1.2l1.2,1L363.1,179.6z
925 + M364.3,180.6l-1.2-1l1-1.2l1.2,1L364.3,180.6z M365.5,181.6l-1.2-1l1-1.2l1.2,1L365.5,181.6z M366.7,182.6l-1.2-1l1-1.2
926 + l1.2,1L366.7,182.6z M367.9,183.6l-1.2-1l1-1.2l1.2,1L367.9,183.6z M370.1,183.3l-0.4,1.8l-1.8-1.5l1-1.2l0.8,0.6l-0.5,0.6
927 + l-0.8-0.2l0.1-0.6L370.1,183.3L370.1,183.3z M370.5,181.7l-0.4,1.5l-1.5-0.4l0.4-1.5L370.5,181.7z M370.8,180.2l-0.4,1.5
928 + l-1.5-0.4l0.4-1.5L370.8,180.2z M371.2,178.7l-0.4,1.5l-1.5-0.4l0.4-1.5L371.2,178.7z M371.6,177.1l-0.4,1.5l-1.5-0.4l0.4-1.5
929 + L371.6,177.1z M371.9,175.6l-0.4,1.5l-1.5-0.4l0.4-1.5L371.9,175.6z M372.3,174l-0.4,1.5l-1.5-0.4l0.4-1.5L372.3,174z
930 + M372.6,172.5l-0.4,1.5l-1.5-0.4l0.4-1.5L372.6,172.5z M373,171l-0.4,1.5l-1.5-0.4l0.4-1.5L373,171z M373.4,169.4L373,171
931 + l-1.5-0.4l0.4-1.5L373.4,169.4z M373.7,167.9l-0.4,1.5l-1.5-0.4l0.4-1.5L373.7,167.9z M372.7,165.8l1.7-0.8l-0.6,2.8l-1.5-0.4
932 + l0.3-1.3l0.8,0.2l0.3,0.7l-0.3,0.1L372.7,165.8L372.7,165.8z M371.2,166.5l1.5-0.6l0.6,1.4l-1.5,0.6L371.2,166.5z
933 + M369.8,167.1l1.5-0.6l0.6,1.4l-1.5,0.6L369.8,167.1z M368.3,167.8l1.5-0.6l0.6,1.4l-1.5,0.6L368.3,167.8z M366.9,168.4
934 + l1.5-0.6l0.6,1.4l-1.5,0.6L366.9,168.4z M365.4,169l1.5-0.6l0.6,1.4l-1.5,0.6L365.4,169z M364,169.7l1.5-0.6l0.6,1.4l-1.5,0.6
935 + L364,169.7z M362.5,170.3l1.5-0.6l0.6,1.4l-1.5,0.6L362.5,170.3z M361.1,171l1.5-0.6l0.6,1.4l-1.5,0.6L361.1,171z
936 + M359.6,171.6l1.5-0.6l0.6,1.4l-1.5,0.6L359.6,171.6z M358.2,172.2l1.5-0.6l0.6,1.4l-1.5,0.6L358.2,172.2z"/>
937 + </g>
938 + </g>
939 + </g>
940 + </g>
941 + </g>
942 +</g>
943 +<g>
944 + <defs>
945 + <rect id="SVGID_00000062870936050302073310000007632015587384220044_" x="10" y="-315.3" width="2473" height="1264"/>
946 + </defs>
947 + <clipPath id="SVGID_00000025445213215486799710000010785446443408148887_">
948 + <use xlink:href="#SVGID_00000062870936050302073310000007632015587384220044_" style="overflow:visible;"/>
949 + </clipPath>
950 + <g style="clip-path:url(#SVGID_00000025445213215486799710000010785446443408148887_);">
951 + <path class="st27" d="M234.6,379.1l8.2-3.9c8.2-3.9,24.8-11.8,55.2-15.7s74.8-3.9,119.2-3.9s88.8,0,115.1-2.7s34.6-8.1,41.7-12.8
952 + c7.2-4.7,13.2-8.7,16.2-10.7l3-2"/>
953 + </g>
954 +</g>
955 +<g>
956 + <defs>
957 + <rect id="SVGID_00000179624020040826215050000002940362068015962267_" x="10" y="-315.3" width="2473" height="1264"/>
958 + </defs>
959 + <clipPath id="SVGID_00000014621905477050371350000002374342878743212728_">
960 + <use xlink:href="#SVGID_00000179624020040826215050000002940362068015962267_" style="overflow:visible;"/>
961 + </clipPath>
962 + <g style="clip-path:url(#SVGID_00000014621905477050371350000002374342878743212728_);">
963 + <g>
964 + <defs>
965 + <rect id="SVGID_00000162352253597826149870000012629678123735477439_" x="10" y="-315.3" width="2473" height="1264"/>
966 + </defs>
967 + <clipPath id="SVGID_00000011005545613074983700000006044319708566668180_">
968 + <use xlink:href="#SVGID_00000162352253597826149870000012629678123735477439_" style="overflow:visible;"/>
969 + </clipPath>
970 + <g style="clip-path:url(#SVGID_00000011005545613074983700000006044319708566668180_);">
971 + <g>
972 + <defs>
973 +
974 + <rect id="SVGID_00000129187429057239791310000009192780404463342236_" x="585.5" y="319.5" transform="matrix(0.8356 -0.5493 0.5493 0.8356 -82.3203 379.7809)" width="15.8" height="15.8"/>
975 + </defs>
976 + <clipPath id="SVGID_00000052801507160435428630000012323712548071194047_">
977 + <use xlink:href="#SVGID_00000129187429057239791310000009192780404463342236_" style="overflow:visible;"/>
978 + </clipPath>
979 + <g style="clip-path:url(#SVGID_00000052801507160435428630000012323712548071194047_);">
980 + <polygon class="st3" points="582.4,325.1 600,323 591.1,338.3 "/>
981 + <path class="st3" d="M582.1,326l-1-1.5l2.8-0.3l0.2,1.6l-1.6,0.2l-0.1-0.8l0.7-0.4l0.3,0.5L582.1,326L582.1,326z M582.9,327.3
982 + l-0.9-1.3l1.3-0.9l0.9,1.3L582.9,327.3z M583.8,328.7l-0.9-1.3l1.3-0.9l0.9,1.3L583.8,328.7z M584.7,330l-0.9-1.3l1.3-0.9
983 + l0.9,1.3L584.7,330z M585.5,331.3l-0.9-1.3l1.3-0.9l0.9,1.3L585.5,331.3z M586.4,332.6l-0.9-1.3l1.3-0.9l0.9,1.3L586.4,332.6z
984 + M587.3,333.9l-0.9-1.3l1.3-0.9l0.9,1.3L587.3,333.9z M588.2,335.3l-0.9-1.3l1.3-0.9l0.9,1.3L588.2,335.3z M589,336.6
985 + l-0.9-1.3l1.3-0.9l0.9,1.3L589,336.6z M589.9,337.9l-0.9-1.3l1.3-0.9l0.9,1.3L589.9,337.9z M592.1,338.2l-0.9,1.6l-1.3-1.9
986 + l1.3-0.9l0.6,0.9l-0.7,0.4l-0.7-0.4l0.3-0.5L592.1,338.2L592.1,338.2z M592.9,336.8l-0.8,1.4l-1.4-0.8l0.8-1.4L592.9,336.8z
987 + M593.7,335.5l-0.8,1.4l-1.4-0.8l0.8-1.4L593.7,335.5z M594.5,334.1l-0.8,1.4l-1.4-0.8l0.8-1.4L594.5,334.1z M595.2,332.7
988 + l-0.8,1.4l-1.4-0.8l0.8-1.4L595.2,332.7z M596,331.4l-0.8,1.4l-1.4-0.8l0.8-1.4L596,331.4z M596.8,330l-0.8,1.4l-1.4-0.8
989 + l0.8-1.4L596.8,330z M597.6,328.6l-0.8,1.4l-1.4-0.8l0.8-1.4L597.6,328.6z M598.4,327.3l-0.8,1.4l-1.4-0.8l0.8-1.4
990 + L598.4,327.3z M599.2,325.9l-0.8,1.4l-1.4-0.8l0.8-1.4L599.2,325.9z M600,324.5l-0.8,1.4l-1.4-0.8l0.8-1.4L600,324.5z
991 + M599.6,322.2l1.9-0.2l-1.5,2.5l-1.4-0.8l0.7-1.1l0.7,0.4l0.1,0.8l-0.3,0L599.6,322.2L599.6,322.2z M598,322.4l1.6-0.2
992 + l0.2,1.6l-1.6,0.2L598,322.4z M596.4,322.6l1.6-0.2l0.2,1.6l-1.6,0.2L596.4,322.6z M594.9,322.8l1.6-0.2l0.2,1.6l-1.6,0.2
993 + L594.9,322.8z M593.3,323l1.6-0.2l0.2,1.6l-1.6,0.2L593.3,323z M591.7,323.2l1.6-0.2l0.2,1.6l-1.6,0.2L591.7,323.2z
994 + M590.2,323.4l1.6-0.2l0.2,1.6l-1.6,0.2L590.2,323.4z M588.6,323.6l1.6-0.2l0.2,1.6l-1.6,0.2L588.6,323.6z M587,323.8l1.6-0.2
995 + l0.2,1.6l-1.6,0.2L587,323.8z M585.4,324l1.6-0.2l0.2,1.6l-1.6,0.2L585.4,324z M583.9,324.1l1.6-0.2l0.2,1.6l-1.6,0.2
996 + L583.9,324.1z"/>
997 + </g>
998 + </g>
999 + </g>
1000 + </g>
1001 + </g>
1002 +</g>
1003 +<g>
1004 + <defs>
1005 + <rect id="SVGID_00000072961319204898884260000000401353156917212851_" x="10" y="-315.3" width="2473" height="1264"/>
1006 + </defs>
1007 + <clipPath id="SVGID_00000094620367142509143220000013227772413196973952_">
1008 + <use xlink:href="#SVGID_00000072961319204898884260000000401353156917212851_" style="overflow:visible;"/>
1009 + </clipPath>
1010 + <g style="clip-path:url(#SVGID_00000094620367142509143220000013227772413196973952_);">
1011 + <path class="st27" d="M234.6,469.1l8.2,3.2c8.2,3.2,24.8,9.6,55.2,12.7c30.5,3.2,74.8,3.2,119.2,3.2h297.4c54.8,0,109.5,0,141-1
1012 + c31.5-1,39.8-3,46.7-4.7c7-1.7,12.7-3,15.5-3.7l2.8-0.7"/>
1013 + </g>
1014 +</g>
1015 +<g>
1016 + <defs>
1017 + <rect id="SVGID_00000133525657920242402900000004344918923691143100_" x="10" y="-315.3" width="2473" height="1264"/>
1018 + </defs>
1019 + <clipPath id="SVGID_00000072270648146907782340000010240768619606211714_">
1020 + <use xlink:href="#SVGID_00000133525657920242402900000004344918923691143100_" style="overflow:visible;"/>
1021 + </clipPath>
1022 + <g style="clip-path:url(#SVGID_00000072270648146907782340000010240768619606211714_);">
1023 + <g>
1024 + <defs>
1025 + <rect id="SVGID_00000068652079744201447600000000556594999236621698_" x="10" y="-315.3" width="2473" height="1264"/>
1026 + </defs>
1027 + <clipPath id="SVGID_00000088116653233820960690000006780014223573998981_">
1028 + <use xlink:href="#SVGID_00000068652079744201447600000000556594999236621698_" style="overflow:visible;"/>
1029 + </clipPath>
1030 + <g style="clip-path:url(#SVGID_00000088116653233820960690000006780014223573998981_);">
1031 + <g>
1032 + <defs>
1033 +
1034 + <rect id="SVGID_00000129927088779258199390000001162465988450498461_" x="912.9" y="470.2" transform="matrix(0.9721 -0.2345 0.2345 0.9721 -86.4308 229.2187)" width="15.8" height="15.8"/>
1035 + </defs>
1036 + <clipPath id="SVGID_00000178172888619500727950000005124755856499642295_">
1037 + <use xlink:href="#SVGID_00000129927088779258199390000001162465988450498461_" style="overflow:visible;"/>
1038 + </clipPath>
1039 + <g style="clip-path:url(#SVGID_00000178172888619500727950000005124755856499642295_);">
1040 + <polygon class="st3" points="911.2,472.3 928.5,476.3 914.9,487.7 "/>
1041 + <path class="st3" d="M910.6,473.1l-0.4-1.8l2.8,0.6l-0.4,1.5l-1.5-0.4l0.2-0.8l0.8-0.2l0.1,0.6L910.6,473.1L910.6,473.1z
1042 + M911,474.6l-0.4-1.5l1.5-0.4l0.4,1.5L911,474.6z M911.3,476.2l-0.4-1.5l1.5-0.4l0.4,1.5L911.3,476.2z M911.7,477.7l-0.4-1.5
1043 + l1.5-0.4l0.4,1.5L911.7,477.7z M912.1,479.2l-0.4-1.5l1.5-0.4l0.4,1.5L912.1,479.2z M912.4,480.8l-0.4-1.5l1.5-0.4l0.4,1.5
1044 + L912.4,480.8z M912.8,482.3l-0.4-1.5l1.5-0.4l0.4,1.5L912.8,482.3z M913.2,483.9l-0.4-1.5l1.5-0.4l0.4,1.5L913.2,483.9z
1045 + M913.5,485.4l-0.4-1.5l1.5-0.4l0.4,1.5L913.5,485.4z M913.9,486.9l-0.4-1.5l1.5-0.4l0.4,1.5L913.9,486.9z M915.9,488
1046 + l-1.4,1.2l-0.5-2.2l1.5-0.4l0.2,1l-0.8,0.2l-0.5-0.6l0.4-0.4L915.9,488L915.9,488z M917.1,487l-1.2,1l-1-1.2l1.2-1L917.1,487z
1047 + M918.3,485.9l-1.2,1l-1-1.2l1.2-1L918.3,485.9z M919.5,484.9l-1.2,1l-1-1.2l1.2-1L919.5,484.9z M920.7,483.9l-1.2,1l-1-1.2
1048 + l1.2-1L920.7,483.9z M921.9,482.9l-1.2,1l-1-1.2l1.2-1L921.9,482.9z M923.1,481.9l-1.2,1l-1-1.2l1.2-1L923.1,481.9z
1049 + M924.3,480.8l-1.2,1l-1-1.2l1.2-1L924.3,480.8z M925.5,479.8l-1.2,1l-1-1.2l1.2-1L925.5,479.8z M926.8,478.8l-1.2,1l-1-1.2
1050 + l1.2-1L926.8,478.8z M928,477.8l-1.2,1l-1-1.2l1.2-1L928,477.8z M928.3,475.5l1.8,0.4l-2.2,1.9l-1-1.2l1-0.8l0.5,0.6l-0.2,0.8
1051 + l-0.3-0.1L928.3,475.5L928.3,475.5z M926.8,475.1l1.5,0.4L928,477l-1.5-0.4L926.8,475.1z M925.3,474.8l1.5,0.4l-0.4,1.5
1052 + l-1.5-0.4L925.3,474.8z M923.7,474.4l1.5,0.4l-0.4,1.5l-1.5-0.4L923.7,474.4z M922.2,474.1l1.5,0.4l-0.4,1.5l-1.5-0.4
1053 + L922.2,474.1z M920.6,473.7l1.5,0.4l-0.4,1.5l-1.5-0.4L920.6,473.7z M919.1,473.3l1.5,0.4l-0.4,1.5l-1.5-0.4L919.1,473.3z
1054 + M917.6,473l1.5,0.4l-0.4,1.5l-1.5-0.4L917.6,473z M916,472.6l1.5,0.4l-0.4,1.5l-1.5-0.4L916,472.6z M914.5,472.3l1.5,0.4
1055 + l-0.4,1.5l-1.5-0.4L914.5,472.3z M912.9,471.9l1.5,0.4l-0.4,1.5l-1.5-0.4L912.9,471.9z"/>
1056 + </g>
1057 + </g>
1058 + </g>
1059 + </g>
1060 + </g>
1061 +</g>
1062 +<g>
1063 + <defs>
1064 + <rect id="SVGID_00000178903695516661426280000015533126112284351886_" x="10" y="-315.3" width="2473" height="1264"/>
1065 + </defs>
1066 + <clipPath id="SVGID_00000062156261096439352990000015326338217782033055_">
1067 + <use xlink:href="#SVGID_00000178903695516661426280000015533126112284351886_" style="overflow:visible;"/>
1068 + </clipPath>
1069 + <g style="clip-path:url(#SVGID_00000062156261096439352990000015326338217782033055_);">
1070 + <path class="st64" d="M186.5,93.1c0,1.8-0.1,3.7-0.3,5.5s-0.4,3.7-0.8,5.5s-0.8,3.6-1.3,5.3s-1.1,3.5-1.9,5.2
1071 + c-0.7,1.7-1.5,3.4-2.4,5s-1.8,3.2-2.8,4.7c-1,1.5-2.1,3-3.3,4.4c-1.2,1.4-2.4,2.8-3.7,4.1c-1.3,1.3-2.7,2.5-4.1,3.7
1072 + s-2.9,2.3-4.4,3.3c-1.5,1-3.1,2-4.7,2.8s-3.3,1.6-5,2.4c-1.7,0.7-3.4,1.3-5.2,1.9c-1.8,0.5-3.6,1-5.4,1.3s-3.6,0.6-5.5,0.8
1073 + s-3.7,0.3-5.5,0.3s-3.7-0.1-5.5-0.3c-1.8-0.2-3.7-0.4-5.5-0.8s-3.6-0.8-5.3-1.3s-3.5-1.1-5.2-1.9c-1.7-0.7-3.4-1.5-5-2.4
1074 + c-1.6-0.9-3.2-1.8-4.7-2.8c-1.5-1-3-2.1-4.4-3.3s-2.8-2.4-4.1-3.7c-1.3-1.3-2.5-2.7-3.7-4.1s-2.3-2.9-3.3-4.4
1075 + c-1-1.5-2-3.1-2.8-4.7c-0.9-1.6-1.7-3.3-2.4-5c-0.7-1.7-1.3-3.4-1.9-5.2c-0.5-1.8-1-3.6-1.3-5.3c-0.4-1.8-0.6-3.6-0.8-5.5
1076 + S74,95,74,93.1s0.1-3.7,0.3-5.5s0.4-3.7,0.8-5.5s0.8-3.6,1.3-5.3s1.2-3.5,1.9-5.2c0.7-1.7,1.5-3.4,2.4-5c0.9-1.6,1.8-3.2,2.8-4.7
1077 + c1-1.5,2.1-3,3.3-4.4c1.2-1.4,2.4-2.8,3.7-4.1c1.3-1.3,2.7-2.5,4.1-3.7s2.9-2.3,4.4-3.3c1.5-1,3.1-2,4.7-2.8s3.3-1.7,5-2.4
1078 + c1.7-0.7,3.4-1.3,5.2-1.9c1.8-0.5,3.6-1,5.3-1.3s3.6-0.6,5.5-0.8s3.7-0.3,5.5-0.3s3.7,0.1,5.5,0.3s3.6,0.5,5.5,0.8
1079 + s3.6,0.8,5.4,1.3c1.8,0.5,3.5,1.2,5.2,1.9c1.7,0.7,3.4,1.5,5,2.4c1.6,0.9,3.2,1.8,4.7,2.8c1.5,1,3,2.1,4.4,3.3
1080 + c1.4,1.2,2.8,2.4,4.1,3.7c1.3,1.3,2.5,2.7,3.7,4.1c1.2,1.4,2.3,2.9,3.3,4.4c1,1.5,2,3.1,2.8,4.7s1.6,3.3,2.4,5
1081 + c0.7,1.7,1.3,3.4,1.9,5.2s1,3.6,1.3,5.3c0.4,1.8,0.6,3.6,0.8,5.5S186.5,91.3,186.5,93.1z"/>
1082 + <path class="st65" d="M186.5,93.1c0,1.8-0.1,3.7-0.3,5.5s-0.4,3.7-0.8,5.5s-0.8,3.6-1.3,5.3s-1.1,3.5-1.9,5.2
1083 + c-0.7,1.7-1.5,3.4-2.4,5s-1.8,3.2-2.8,4.7c-1,1.5-2.1,3-3.3,4.4c-1.2,1.4-2.4,2.8-3.7,4.1c-1.3,1.3-2.7,2.5-4.1,3.7
1084 + s-2.9,2.3-4.4,3.3c-1.5,1-3.1,2-4.7,2.8s-3.3,1.6-5,2.4c-1.7,0.7-3.4,1.3-5.2,1.9c-1.8,0.5-3.6,1-5.4,1.3s-3.6,0.6-5.5,0.8
1085 + s-3.7,0.3-5.5,0.3s-3.7-0.1-5.5-0.3c-1.8-0.2-3.7-0.4-5.5-0.8s-3.6-0.8-5.3-1.3s-3.5-1.1-5.2-1.9c-1.7-0.7-3.4-1.5-5-2.4
1086 + c-1.6-0.9-3.2-1.8-4.7-2.8c-1.5-1-3-2.1-4.4-3.3s-2.8-2.4-4.1-3.7c-1.3-1.3-2.5-2.7-3.7-4.1s-2.3-2.9-3.3-4.4
1087 + c-1-1.5-2-3.1-2.8-4.7c-0.9-1.6-1.7-3.3-2.4-5c-0.7-1.7-1.3-3.4-1.9-5.2c-0.5-1.8-1-3.6-1.3-5.3c-0.4-1.8-0.6-3.6-0.8-5.5
1088 + S74,95,74,93.1s0.1-3.7,0.3-5.5s0.4-3.7,0.8-5.5s0.8-3.6,1.3-5.3s1.2-3.5,1.9-5.2c0.7-1.7,1.5-3.4,2.4-5c0.9-1.6,1.8-3.2,2.8-4.7
1089 + c1-1.5,2.1-3,3.3-4.4c1.2-1.4,2.4-2.8,3.7-4.1c1.3-1.3,2.7-2.5,4.1-3.7s2.9-2.3,4.4-3.3c1.5-1,3.1-2,4.7-2.8s3.3-1.7,5-2.4
1090 + c1.7-0.7,3.4-1.3,5.2-1.9c1.8-0.5,3.6-1,5.3-1.3s3.6-0.6,5.5-0.8s3.7-0.3,5.5-0.3s3.7,0.1,5.5,0.3s3.6,0.5,5.5,0.8
1091 + s3.6,0.8,5.4,1.3c1.8,0.5,3.5,1.2,5.2,1.9c1.7,0.7,3.4,1.5,5,2.4c1.6,0.9,3.2,1.8,4.7,2.8c1.5,1,3,2.1,4.4,3.3
1092 + c1.4,1.2,2.8,2.4,4.1,3.7c1.3,1.3,2.5,2.7,3.7,4.1c1.2,1.4,2.3,2.9,3.3,4.4c1,1.5,2,3.1,2.8,4.7s1.6,3.3,2.4,5
1093 + c0.7,1.7,1.3,3.4,1.9,5.2s1,3.6,1.3,5.3c0.4,1.8,0.6,3.6,0.8,5.5S186.5,91.3,186.5,93.1z"/>
1094 + <path class="st64" d="M176.6,93.1c0,1.5-0.1,3-0.2,4.5s-0.4,3-0.7,4.5s-0.7,3-1.1,4.4c-0.4,1.4-0.9,2.9-1.5,4.3s-1.2,2.8-1.9,4.1
1095 + c-0.7,1.3-1.5,2.6-2.3,3.9c-0.8,1.3-1.8,2.5-2.7,3.7s-2,2.3-3.1,3.4s-2.2,2.1-3.4,3c-1.2,1-2.4,1.9-3.6,2.7
1096 + c-1.3,0.8-2.6,1.6-3.9,2.3s-2.7,1.4-4.1,1.9s-2.8,1.1-4.3,1.5s-2.9,0.8-4.4,1.1c-1.5,0.3-3,0.5-4.5,0.7s-3,0.2-4.5,0.2
1097 + s-3-0.1-4.5-0.2s-3-0.4-4.5-0.7s-3-0.7-4.4-1.1s-2.9-0.9-4.3-1.5s-2.8-1.2-4.1-1.9c-1.3-0.7-2.6-1.5-3.9-2.3
1098 + c-1.3-0.8-2.5-1.8-3.7-2.7c-1.2-1-2.3-2-3.4-3.1s-2.1-2.2-3.1-3.4c-1-1.2-1.9-2.4-2.7-3.7s-1.6-2.6-2.3-3.9
1099 + c-0.7-1.3-1.4-2.7-1.9-4.1s-1.1-2.8-1.5-4.3s-0.8-2.9-1.1-4.4c-0.3-1.5-0.5-3-0.7-4.5s-0.2-3-0.2-4.5s0.1-3,0.2-4.5s0.4-3,0.7-4.5
1100 + c0.3-1.5,0.7-3,1.1-4.4s0.9-2.9,1.5-4.3s1.2-2.8,1.9-4.1c0.7-1.3,1.5-2.6,2.3-3.9s1.8-2.5,2.7-3.7s2-2.3,3.1-3.4s2.2-2.1,3.4-3
1101 + c1.2-1,2.4-1.9,3.7-2.7s2.6-1.6,3.9-2.3c1.3-0.7,2.7-1.4,4.1-1.9s2.8-1.1,4.3-1.5s2.9-0.8,4.4-1.1c1.5-0.3,3-0.5,4.5-0.7
1102 + c1.5-0.2,3-0.2,4.5-0.2s3,0.1,4.5,0.2s3,0.4,4.5,0.7s3,0.7,4.4,1.1s2.9,1,4.3,1.5s2.8,1.2,4.1,1.9c1.3,0.7,2.6,1.5,3.9,2.3
1103 + c1.3,0.8,2.5,1.8,3.6,2.7s2.3,2,3.4,3c1.1,1.1,2.1,2.2,3.1,3.4s1.9,2.4,2.7,3.7s1.6,2.6,2.3,3.9c0.7,1.3,1.4,2.7,1.9,4.1
1104 + s1.1,2.8,1.5,4.3s0.8,2.9,1.1,4.4c0.3,1.5,0.5,3,0.7,4.5S176.6,91.6,176.6,93.1z"/>
1105 + <path class="st65" d="M176.6,93.1c0,1.5-0.1,3-0.2,4.5s-0.4,3-0.7,4.5s-0.7,3-1.1,4.4c-0.4,1.4-0.9,2.9-1.5,4.3s-1.2,2.8-1.9,4.1
1106 + c-0.7,1.3-1.5,2.6-2.3,3.9c-0.8,1.3-1.8,2.5-2.7,3.7s-2,2.3-3.1,3.4s-2.2,2.1-3.4,3c-1.2,1-2.4,1.9-3.6,2.7
1107 + c-1.3,0.8-2.6,1.6-3.9,2.3s-2.7,1.4-4.1,1.9s-2.8,1.1-4.3,1.5s-2.9,0.8-4.4,1.1c-1.5,0.3-3,0.5-4.5,0.7s-3,0.2-4.5,0.2
1108 + s-3-0.1-4.5-0.2s-3-0.4-4.5-0.7s-3-0.7-4.4-1.1s-2.9-0.9-4.3-1.5s-2.8-1.2-4.1-1.9c-1.3-0.7-2.6-1.5-3.9-2.3
1109 + c-1.3-0.8-2.5-1.8-3.7-2.7c-1.2-1-2.3-2-3.4-3.1s-2.1-2.2-3.1-3.4c-1-1.2-1.9-2.4-2.7-3.7s-1.6-2.6-2.3-3.9
1110 + c-0.7-1.3-1.4-2.7-1.9-4.1s-1.1-2.8-1.5-4.3s-0.8-2.9-1.1-4.4c-0.3-1.5-0.5-3-0.7-4.5s-0.2-3-0.2-4.5s0.1-3,0.2-4.5s0.4-3,0.7-4.5
1111 + c0.3-1.5,0.7-3,1.1-4.4s0.9-2.9,1.5-4.3s1.2-2.8,1.9-4.1c0.7-1.3,1.5-2.6,2.3-3.9s1.8-2.5,2.7-3.7s2-2.3,3.1-3.4s2.2-2.1,3.4-3
1112 + c1.2-1,2.4-1.9,3.7-2.7s2.6-1.6,3.9-2.3c1.3-0.7,2.7-1.4,4.1-1.9s2.8-1.1,4.3-1.5s2.9-0.8,4.4-1.1c1.5-0.3,3-0.5,4.5-0.7
1113 + c1.5-0.2,3-0.2,4.5-0.2s3,0.1,4.5,0.2s3,0.4,4.5,0.7s3,0.7,4.4,1.1s2.9,1,4.3,1.5s2.8,1.2,4.1,1.9c1.3,0.7,2.6,1.5,3.9,2.3
1114 + c1.3,0.8,2.5,1.8,3.6,2.7s2.3,2,3.4,3c1.1,1.1,2.1,2.2,3.1,3.4s1.9,2.4,2.7,3.7s1.6,2.6,2.3,3.9c0.7,1.3,1.4,2.7,1.9,4.1
1115 + s1.1,2.8,1.5,4.3s0.8,2.9,1.1,4.4c0.3,1.5,0.5,3,0.7,4.5S176.6,91.6,176.6,93.1z"/>
1116 + </g>
1117 +</g>
1118 +<g>
1119 + <defs>
1120 + <rect id="SVGID_00000132781893549022272550000018371600524958144942_" x="98.8" y="69.3" width="63.4" height="47.5"/>
1121 + </defs>
1122 + <clipPath id="SVGID_00000080887401929999841660000005122288330060375721_">
1123 + <use xlink:href="#SVGID_00000132781893549022272550000018371600524958144942_" style="overflow:visible;"/>
1124 + </clipPath>
1125 + <g style="clip-path:url(#SVGID_00000080887401929999841660000005122288330060375721_);">
1126 + <text transform="matrix(1 0 0 1 98.75 104.21)" class="st67 st68 st69">User</text>
1127 + </g>
1128 +</g>
1129 +<g>
1130 + <defs>
1131 + <rect id="SVGID_00000029036823736704780860000011132067504775001534_" x="10" y="-315.3" width="2473" height="1264"/>
1132 + </defs>
1133 + <clipPath id="SVGID_00000156566297058199129770000005179827735076411057_">
1134 + <use xlink:href="#SVGID_00000029036823736704780860000011132067504775001534_" style="overflow:visible;"/>
1135 + </clipPath>
1136 + <g style="clip-path:url(#SVGID_00000156566297058199129770000005179827735076411057_);">
1137 + <path class="st64" d="M343.5,59.5h147.5c0.6,0,1.3,0.1,1.9,0.2c0.6,0.1,1.3,0.3,1.9,0.6c0.6,0.2,1.2,0.5,1.7,0.9
1138 + c0.5,0.4,1,0.8,1.5,1.2s0.9,1,1.2,1.5c0.4,0.5,0.7,1.1,0.9,1.7s0.4,1.2,0.6,1.9s0.2,1.3,0.2,1.9v87.1c0,0.6-0.1,1.3-0.2,1.9
1139 + s-0.3,1.3-0.6,1.9s-0.5,1.2-0.9,1.7c-0.4,0.5-0.8,1-1.2,1.5c-0.5,0.5-1,0.9-1.5,1.2s-1.1,0.7-1.7,0.9s-1.2,0.4-1.9,0.6
1140 + c-0.6,0.1-1.3,0.2-1.9,0.2H343.5c-0.6,0-1.3-0.1-1.9-0.2c-0.6-0.1-1.3-0.3-1.9-0.6c-0.6-0.2-1.2-0.6-1.7-0.9
1141 + c-0.5-0.4-1-0.8-1.5-1.2s-0.9-1-1.2-1.5c-0.4-0.5-0.7-1.1-0.9-1.7s-0.4-1.2-0.6-1.9c-0.1-0.6-0.2-1.3-0.2-1.9V69.3
1142 + c0-0.7,0.1-1.3,0.2-1.9s0.3-1.3,0.6-1.9s0.5-1.2,0.9-1.7c0.4-0.5,0.8-1,1.2-1.5s1-0.9,1.5-1.2s1.1-0.7,1.7-0.9s1.2-0.4,1.9-0.6
1143 + C342.3,59.5,342.9,59.4,343.5,59.5z"/>
1144 + <path class="st65" d="M343.5,59.5h147.5c0.6,0,1.3,0.1,1.9,0.2c0.6,0.1,1.3,0.3,1.9,0.6c0.6,0.2,1.2,0.5,1.7,0.9
1145 + c0.5,0.4,1,0.8,1.5,1.2s0.9,1,1.2,1.5c0.4,0.5,0.7,1.1,0.9,1.7s0.4,1.2,0.6,1.9s0.2,1.3,0.2,1.9v87.1c0,0.6-0.1,1.3-0.2,1.9
1146 + s-0.3,1.3-0.6,1.9s-0.5,1.2-0.9,1.7c-0.4,0.5-0.8,1-1.2,1.5c-0.5,0.5-1,0.9-1.5,1.2s-1.1,0.7-1.7,0.9s-1.2,0.4-1.9,0.6
1147 + c-0.6,0.1-1.3,0.2-1.9,0.2H343.5c-0.6,0-1.3-0.1-1.9-0.2c-0.6-0.1-1.3-0.3-1.9-0.6c-0.6-0.2-1.2-0.6-1.7-0.9
1148 + c-0.5-0.4-1-0.8-1.5-1.2s-0.9-1-1.2-1.5c-0.4-0.5-0.7-1.1-0.9-1.7s-0.4-1.2-0.6-1.9c-0.1-0.6-0.2-1.3-0.2-1.9V69.3
1149 + c0-0.7,0.1-1.3,0.2-1.9s0.3-1.3,0.6-1.9s0.5-1.2,0.9-1.7c0.4-0.5,0.8-1,1.2-1.5s1-0.9,1.5-1.2s1.1-0.7,1.7-0.9s1.2-0.4,1.9-0.6
1150 + C342.3,59.5,342.9,59.4,343.5,59.5z"/>
1151 + </g>
1152 +</g>
1153 +<g>
1154 + <defs>
1155 + <rect id="SVGID_00000068660001462182668330000016856357800891916193_" x="363.4" y="89.2" width="107.7" height="47.5"/>
1156 + </defs>
1157 + <clipPath id="SVGID_00000010296826536423246420000008756538965811108754_">
1158 + <use xlink:href="#SVGID_00000068660001462182668330000016856357800891916193_" style="overflow:visible;"/>
1159 + </clipPath>
1160 + <g style="clip-path:url(#SVGID_00000010296826536423246420000008756538965811108754_);">
1161 + <text transform="matrix(1 0 0 1 363.35 124.01)" class="st67 st68 st69">Agent 0</text>
1162 + </g>
1163 +</g>
1164 +<g>
1165 + <defs>
1166 + <rect id="SVGID_00000160880956627470160540000017395372307319774628_" x="10" y="-315.3" width="2473" height="1264"/>
1167 + </defs>
1168 + <clipPath id="SVGID_00000022545493823256924280000017212537841966101133_">
1169 + <use xlink:href="#SVGID_00000160880956627470160540000017395372307319774628_" style="overflow:visible;"/>
1170 + </clipPath>
1171 + <g style="clip-path:url(#SVGID_00000022545493823256924280000017212537841966101133_);">
1172 + <path class="st73" d="M25.8,283.9c0,0.4,0,0.7,0.1,1.1s0.2,0.7,0.4,1.1s0.4,0.7,0.6,1.1s0.5,0.7,0.9,1.1c0.3,0.4,0.7,0.7,1.1,1.1
1173 + c0.4,0.4,0.9,0.7,1.4,1.1s1,0.7,1.6,1.1c0.6,0.4,1.2,0.7,1.8,1s1.3,0.7,2.1,1s1.5,0.7,2.3,1c0.8,0.3,1.7,0.6,2.5,1
1174 + c0.9,0.3,1.8,0.6,2.7,0.9s1.9,0.6,3,0.9c1,0.3,2.1,0.6,3.2,0.9s2.2,0.6,3.3,0.8c1.2,0.3,2.3,0.5,3.5,0.8s2.4,0.5,3.7,0.8
1175 + s2.6,0.5,3.9,0.7c1.3,0.2,2.7,0.5,4,0.7s2.8,0.4,4.2,0.6s2.9,0.4,4.3,0.6s2.9,0.4,4.5,0.5c1.5,0.2,3,0.3,4.6,0.5
1176 + c1.5,0.2,3.1,0.3,4.7,0.5c1.6,0.1,3.2,0.3,4.8,0.4s3.2,0.2,4.9,0.4c1.6,0.1,3.3,0.2,4.9,0.3s3.3,0.2,5,0.2
1177 + c1.7,0.1,3.4,0.1,5.1,0.2s3.4,0.1,5.1,0.1c1.7,0,3.4,0.1,5.1,0.1s3.4,0,5.1,0s3.4,0,5.1,0c1.7,0,3.4,0,5.1-0.1
1178 + c1.7,0,3.4-0.1,5.1-0.1c1.7,0,3.4-0.1,5.1-0.2c1.7-0.1,3.3-0.1,5-0.2s3.3-0.2,4.9-0.3c1.6-0.1,3.3-0.2,4.9-0.4
1179 + c1.6-0.1,3.2-0.3,4.8-0.4s3.1-0.3,4.7-0.5s3.1-0.3,4.6-0.5s3-0.4,4.5-0.5s2.9-0.4,4.3-0.6c1.4-0.2,2.8-0.4,4.2-0.6s2.7-0.5,4-0.7
1180 + c1.3-0.2,2.6-0.5,3.9-0.7s2.5-0.5,3.7-0.8c1.2-0.3,2.4-0.5,3.5-0.8c1.1-0.3,2.3-0.6,3.4-0.8c1.1-0.3,2.1-0.6,3.1-0.9
1181 + c1-0.3,2-0.6,2.9-0.9s1.9-0.6,2.7-0.9s1.7-0.6,2.5-1s1.6-0.7,2.3-1c0.7-0.3,1.4-0.7,2.1-1c0.6-0.3,1.3-0.7,1.8-1s1.1-0.7,1.6-1.1
1182 + c0.5-0.4,0.9-0.7,1.4-1.1c0.4-0.4,0.8-0.7,1.1-1.1s0.6-0.7,0.9-1.1s0.5-0.7,0.6-1.1s0.3-0.7,0.4-1.1c0.1-0.4,0.1-0.7,0.1-1.1
1183 + s0-0.7-0.1-1.1c-0.1-0.4-0.2-0.7-0.4-1.1s-0.4-0.7-0.6-1.1c-0.2-0.4-0.5-0.7-0.9-1.1s-0.7-0.7-1.1-1.1c-0.4-0.4-0.9-0.7-1.4-1.1
1184 + s-1-0.7-1.6-1.1s-1.2-0.7-1.8-1c-0.6-0.3-1.4-0.7-2.1-1s-1.5-0.7-2.3-1c-0.8-0.3-1.6-0.6-2.5-1s-1.8-0.6-2.7-0.9
1185 + c-0.9-0.3-1.9-0.6-2.9-0.9c-1-0.3-2.1-0.6-3.1-0.9c-1.1-0.3-2.2-0.6-3.4-0.8c-1.1-0.3-2.3-0.5-3.5-0.8c-1.2-0.3-2.4-0.5-3.7-0.8
1186 + s-2.6-0.5-3.9-0.7c-1.3-0.2-2.7-0.5-4-0.7s-2.8-0.4-4.2-0.6c-1.4-0.2-2.9-0.4-4.3-0.6s-2.9-0.4-4.5-0.5c-1.5-0.2-3-0.3-4.6-0.5
1187 + c-1.5-0.2-3.1-0.3-4.7-0.5s-3.2-0.3-4.8-0.4s-3.2-0.2-4.9-0.4c-1.6-0.1-3.3-0.2-4.9-0.3s-3.3-0.2-5-0.2c-1.7-0.1-3.4-0.1-5.1-0.2
1188 + s-3.4-0.1-5.1-0.1s-3.4-0.1-5.1-0.1s-3.4,0-5.1,0s-3.4,0-5.1,0c-1.7,0-3.4,0-5.1,0.1c-1.7,0-3.4,0.1-5.1,0.1
1189 + c-1.7,0-3.4,0.1-5.1,0.2s-3.3,0.1-5,0.2s-3.3,0.2-4.9,0.3c-1.6,0.1-3.3,0.2-4.9,0.4c-1.6,0.1-3.2,0.3-4.8,0.4
1190 + c-1.6,0.1-3.1,0.3-4.7,0.5s-3.1,0.3-4.6,0.5s-3,0.4-4.5,0.5s-2.9,0.4-4.3,0.6s-2.8,0.4-4.2,0.6s-2.7,0.5-4,0.7
1191 + c-1.3,0.2-2.6,0.5-3.9,0.7s-2.5,0.5-3.7,0.8c-1.2,0.3-2.4,0.5-3.5,0.8c-1.2,0.3-2.3,0.6-3.3,0.8s-2.1,0.6-3.2,0.9
1192 + c-1,0.3-2,0.6-3,0.9s-1.9,0.6-2.7,0.9s-1.7,0.6-2.5,1c-0.8,0.3-1.6,0.7-2.3,1c-0.7,0.3-1.4,0.7-2.1,1c-0.7,0.3-1.3,0.7-1.8,1
1193 + c-0.6,0.4-1.1,0.7-1.6,1.1c-0.5,0.4-1,0.7-1.4,1.1c-0.4,0.4-0.8,0.7-1.1,1.1s-0.6,0.7-0.9,1.1s-0.5,0.7-0.6,1.1s-0.3,0.7-0.4,1.1
1194 + S25.8,283.5,25.8,283.9l0,290c0,0.4,0,0.7,0.1,1.1c0.1,0.4,0.2,0.7,0.4,1.1s0.4,0.7,0.6,1.1c0.2,0.4,0.5,0.7,0.9,1.1
1195 + c0.3,0.4,0.7,0.7,1.1,1.1s0.9,0.7,1.4,1.1s1,0.7,1.6,1.1c0.6,0.3,1.2,0.7,1.8,1c0.7,0.3,1.3,0.7,2.1,1c0.7,0.3,1.5,0.7,2.3,1
1196 + s1.7,0.7,2.5,1c0.9,0.3,1.8,0.6,2.7,0.9s1.9,0.6,3,0.9s2.1,0.6,3.2,0.9s2.2,0.6,3.3,0.8c1.2,0.3,2.3,0.5,3.5,0.8s2.4,0.5,3.7,0.8
1197 + s2.6,0.5,3.9,0.7s2.7,0.5,4,0.7s2.8,0.4,4.2,0.6c1.4,0.2,2.9,0.4,4.3,0.6s2.9,0.4,4.5,0.5c1.5,0.2,3,0.3,4.6,0.5
1198 + c1.5,0.2,3.1,0.3,4.7,0.5c1.6,0.1,3.2,0.3,4.8,0.4s3.2,0.2,4.9,0.3c1.6,0.1,3.3,0.2,4.9,0.3c1.7,0.1,3.3,0.2,5,0.2
1199 + s3.4,0.1,5.1,0.2s3.4,0.1,5.1,0.1c1.7,0,3.4,0.1,5.1,0.1s3.4,0,5.1,0s3.4,0,5.1,0c1.7,0,3.4,0,5.1-0.1c1.7,0,3.4-0.1,5.1-0.1
1200 + c1.7,0,3.4-0.1,5.1-0.2c1.7-0.1,3.3-0.2,5-0.2c1.7-0.1,3.3-0.2,4.9-0.3c1.6-0.1,3.3-0.2,4.9-0.3c1.6-0.1,3.2-0.3,4.8-0.4
1201 + s3.1-0.3,4.7-0.5s3.1-0.3,4.6-0.5s3-0.4,4.5-0.5s2.9-0.4,4.3-0.6c1.4-0.2,2.8-0.4,4.2-0.6s2.7-0.5,4-0.7c1.3-0.2,2.6-0.5,3.9-0.7
1202 + s2.5-0.5,3.7-0.8c1.2-0.3,2.4-0.5,3.5-0.8c1.1-0.3,2.3-0.6,3.4-0.8c1.1-0.3,2.1-0.6,3.1-0.9c1-0.3,2-0.6,2.9-0.9s1.9-0.6,2.7-0.9
1203 + s1.7-0.6,2.5-1c0.8-0.3,1.6-0.7,2.3-1c0.7-0.3,1.4-0.7,2.1-1c0.6-0.3,1.3-0.7,1.8-1c0.6-0.3,1.1-0.7,1.6-1.1
1204 + c0.5-0.3,0.9-0.7,1.4-1.1s0.8-0.7,1.1-1.1s0.6-0.7,0.9-1.1s0.5-0.7,0.6-1.1s0.3-0.7,0.4-1.1c0.1-0.4,0.1-0.7,0.1-1.1v-290"/>
1205 + <path class="st74" d="M25.8,283.9c0,0.4,0,0.7,0.1,1.1s0.2,0.7,0.4,1.1s0.4,0.7,0.6,1.1s0.5,0.7,0.9,1.1c0.3,0.4,0.7,0.7,1.1,1.1
1206 + c0.4,0.4,0.9,0.7,1.4,1.1s1,0.7,1.6,1.1c0.6,0.4,1.2,0.7,1.8,1s1.3,0.7,2.1,1s1.5,0.7,2.3,1c0.8,0.3,1.7,0.6,2.5,1
1207 + c0.9,0.3,1.8,0.6,2.7,0.9s1.9,0.6,3,0.9c1,0.3,2.1,0.6,3.2,0.9s2.2,0.6,3.3,0.8c1.2,0.3,2.3,0.5,3.5,0.8s2.4,0.5,3.7,0.8
1208 + s2.6,0.5,3.9,0.7c1.3,0.2,2.7,0.5,4,0.7s2.8,0.4,4.2,0.6s2.9,0.4,4.3,0.6s2.9,0.4,4.5,0.5c1.5,0.2,3,0.3,4.6,0.5
1209 + c1.5,0.2,3.1,0.3,4.7,0.5c1.6,0.1,3.2,0.3,4.8,0.4s3.2,0.2,4.9,0.4c1.6,0.1,3.3,0.2,4.9,0.3s3.3,0.2,5,0.2
1210 + c1.7,0.1,3.4,0.1,5.1,0.2s3.4,0.1,5.1,0.1c1.7,0,3.4,0.1,5.1,0.1s3.4,0,5.1,0s3.4,0,5.1,0c1.7,0,3.4,0,5.1-0.1
1211 + c1.7,0,3.4-0.1,5.1-0.1c1.7,0,3.4-0.1,5.1-0.2c1.7-0.1,3.3-0.1,5-0.2s3.3-0.2,4.9-0.3c1.6-0.1,3.3-0.2,4.9-0.4
1212 + c1.6-0.1,3.2-0.3,4.8-0.4s3.1-0.3,4.7-0.5s3.1-0.3,4.6-0.5s3-0.4,4.5-0.5s2.9-0.4,4.3-0.6c1.4-0.2,2.8-0.4,4.2-0.6s2.7-0.5,4-0.7
1213 + c1.3-0.2,2.6-0.5,3.9-0.7s2.5-0.5,3.7-0.8c1.2-0.3,2.4-0.5,3.5-0.8c1.1-0.3,2.3-0.6,3.4-0.8c1.1-0.3,2.1-0.6,3.1-0.9
1214 + c1-0.3,2-0.6,2.9-0.9s1.9-0.6,2.7-0.9s1.7-0.6,2.5-1s1.6-0.7,2.3-1c0.7-0.3,1.4-0.7,2.1-1c0.6-0.3,1.3-0.7,1.8-1s1.1-0.7,1.6-1.1
1215 + c0.5-0.4,0.9-0.7,1.4-1.1c0.4-0.4,0.8-0.7,1.1-1.1s0.6-0.7,0.9-1.1s0.5-0.7,0.6-1.1s0.3-0.7,0.4-1.1c0.1-0.4,0.1-0.7,0.1-1.1
1216 + s0-0.7-0.1-1.1c-0.1-0.4-0.2-0.7-0.4-1.1s-0.4-0.7-0.6-1.1c-0.2-0.4-0.5-0.7-0.9-1.1s-0.7-0.7-1.1-1.1c-0.4-0.4-0.9-0.7-1.4-1.1
1217 + s-1-0.7-1.6-1.1s-1.2-0.7-1.8-1c-0.6-0.3-1.4-0.7-2.1-1s-1.5-0.7-2.3-1c-0.8-0.3-1.6-0.6-2.5-1s-1.8-0.6-2.7-0.9
1218 + c-0.9-0.3-1.9-0.6-2.9-0.9c-1-0.3-2.1-0.6-3.1-0.9c-1.1-0.3-2.2-0.6-3.4-0.8c-1.1-0.3-2.3-0.5-3.5-0.8c-1.2-0.3-2.4-0.5-3.7-0.8
1219 + s-2.6-0.5-3.9-0.7c-1.3-0.2-2.7-0.5-4-0.7s-2.8-0.4-4.2-0.6c-1.4-0.2-2.9-0.4-4.3-0.6s-2.9-0.4-4.5-0.5c-1.5-0.2-3-0.3-4.6-0.5
1220 + c-1.5-0.2-3.1-0.3-4.7-0.5s-3.2-0.3-4.8-0.4s-3.2-0.2-4.9-0.4c-1.6-0.1-3.3-0.2-4.9-0.3s-3.3-0.2-5-0.2c-1.7-0.1-3.4-0.1-5.1-0.2
1221 + s-3.4-0.1-5.1-0.1s-3.4-0.1-5.1-0.1s-3.4,0-5.1,0s-3.4,0-5.1,0c-1.7,0-3.4,0-5.1,0.1c-1.7,0-3.4,0.1-5.1,0.1
1222 + c-1.7,0-3.4,0.1-5.1,0.2s-3.3,0.1-5,0.2s-3.3,0.2-4.9,0.3c-1.6,0.1-3.3,0.2-4.9,0.4c-1.6,0.1-3.2,0.3-4.8,0.4
1223 + c-1.6,0.1-3.1,0.3-4.7,0.5s-3.1,0.3-4.6,0.5s-3,0.4-4.5,0.5s-2.9,0.4-4.3,0.6s-2.8,0.4-4.2,0.6s-2.7,0.5-4,0.7
1224 + c-1.3,0.2-2.6,0.5-3.9,0.7s-2.5,0.5-3.7,0.8c-1.2,0.3-2.4,0.5-3.5,0.8c-1.2,0.3-2.3,0.6-3.3,0.8s-2.1,0.6-3.2,0.9
1225 + c-1,0.3-2,0.6-3,0.9s-1.9,0.6-2.7,0.9s-1.7,0.6-2.5,1c-0.8,0.3-1.6,0.7-2.3,1c-0.7,0.3-1.4,0.7-2.1,1c-0.7,0.3-1.3,0.7-1.8,1
1226 + c-0.6,0.4-1.1,0.7-1.6,1.1c-0.5,0.4-1,0.7-1.4,1.1c-0.4,0.4-0.8,0.7-1.1,1.1s-0.6,0.7-0.9,1.1s-0.5,0.7-0.6,1.1s-0.3,0.7-0.4,1.1
1227 + S25.8,283.5,25.8,283.9l0,290c0,0.4,0,0.7,0.1,1.1c0.1,0.4,0.2,0.7,0.4,1.1s0.4,0.7,0.6,1.1c0.2,0.4,0.5,0.7,0.9,1.1
1228 + c0.3,0.4,0.7,0.7,1.1,1.1s0.9,0.7,1.4,1.1s1,0.7,1.6,1.1c0.6,0.3,1.2,0.7,1.8,1c0.7,0.3,1.3,0.7,2.1,1c0.7,0.3,1.5,0.7,2.3,1
1229 + s1.7,0.7,2.5,1c0.9,0.3,1.8,0.6,2.7,0.9s1.9,0.6,3,0.9s2.1,0.6,3.2,0.9s2.2,0.6,3.3,0.8c1.2,0.3,2.3,0.5,3.5,0.8s2.4,0.5,3.7,0.8
1230 + s2.6,0.5,3.9,0.7s2.7,0.5,4,0.7s2.8,0.4,4.2,0.6c1.4,0.2,2.9,0.4,4.3,0.6s2.9,0.4,4.5,0.5c1.5,0.2,3,0.3,4.6,0.5
1231 + c1.5,0.2,3.1,0.3,4.7,0.5c1.6,0.1,3.2,0.3,4.8,0.4s3.2,0.2,4.9,0.3c1.6,0.1,3.3,0.2,4.9,0.3c1.7,0.1,3.3,0.2,5,0.2
1232 + s3.4,0.1,5.1,0.2s3.4,0.1,5.1,0.1c1.7,0,3.4,0.1,5.1,0.1s3.4,0,5.1,0s3.4,0,5.1,0c1.7,0,3.4,0,5.1-0.1c1.7,0,3.4-0.1,5.1-0.1
1233 + c1.7,0,3.4-0.1,5.1-0.2c1.7-0.1,3.3-0.2,5-0.2c1.7-0.1,3.3-0.2,4.9-0.3c1.6-0.1,3.3-0.2,4.9-0.3c1.6-0.1,3.2-0.3,4.8-0.4
1234 + s3.1-0.3,4.7-0.5s3.1-0.3,4.6-0.5s3-0.4,4.5-0.5s2.9-0.4,4.3-0.6c1.4-0.2,2.8-0.4,4.2-0.6s2.7-0.5,4-0.7c1.3-0.2,2.6-0.5,3.9-0.7
1235 + s2.5-0.5,3.7-0.8c1.2-0.3,2.4-0.5,3.5-0.8c1.1-0.3,2.3-0.6,3.4-0.8c1.1-0.3,2.1-0.6,3.1-0.9c1-0.3,2-0.6,2.9-0.9s1.9-0.6,2.7-0.9
1236 + s1.7-0.6,2.5-1c0.8-0.3,1.6-0.7,2.3-1c0.7-0.3,1.4-0.7,2.1-1c0.6-0.3,1.3-0.7,1.8-1c0.6-0.3,1.1-0.7,1.6-1.1
1237 + c0.5-0.3,0.9-0.7,1.4-1.1s0.8-0.7,1.1-1.1s0.6-0.7,0.9-1.1s0.5-0.7,0.6-1.1s0.3-0.7,0.4-1.1c0.1-0.4,0.1-0.7,0.1-1.1v-290"/>
1238 + </g>
1239 +</g>
1240 +<g>
1241 + <defs>
1242 + <rect id="SVGID_00000183227778509929802560000018397401592712839820_" x="40.7" y="329.8" width="179" height="237.6"/>
1243 + </defs>
1244 + <clipPath id="SVGID_00000145738413524748955610000004738186524440133039_">
1245 + <use xlink:href="#SVGID_00000183227778509929802560000018397401592712839820_" style="overflow:visible;"/>
1246 + </clipPath>
1247 + <g style="clip-path:url(#SVGID_00000145738413524748955610000004738186524440133039_);">
1248 + <text transform="matrix(1 0 0 1 70.82 364.69)" class="st67 st68 st69">Memory</text>
1249 + <text transform="matrix(1 0 0 1 177.96 364.69)" class="st67 st68 st69">,</text>
1250 + <text transform="matrix(1 0 0 1 48.1 412.22)" class="st67 st68 st69">K</text>
1251 + <text transform="matrix(1 0 0 1 65.35 412.22)" class="st67 st68 st69">nowledge,</text>
1252 + <text transform="matrix(1 0 0 1 40.7 459.74)" class="st67 st68 st69">Instruments,</text>
1253 + <text transform="matrix(1 0 0 1 66.99 507.27)" class="st67 st68 st69">P</text>
1254 + <text transform="matrix(1 0 0 1 83.17 507.27)" class="st67 st68 st69">rompts,</text>
1255 + <text transform="matrix(1 0 0 1 55.72 554.8)" class="st67 st68 st69">Extensions</text>
1256 + </g>
1257 +</g>
1258 +<g>
1259 + <defs>
1260 + <rect id="SVGID_00000155836776301372318160000013925065778048359586_" x="10" y="-315.3" width="2473" height="1264"/>
1261 + </defs>
1262 + <clipPath id="SVGID_00000096023652276183689800000006616743646947762825_">
1263 + <use xlink:href="#SVGID_00000155836776301372318160000013925065778048359586_" style="overflow:visible;"/>
1264 + </clipPath>
1265 + <g style="clip-path:url(#SVGID_00000096023652276183689800000006616743646947762825_);">
1266 + <path class="st64" d="M609.9,170.4h209.6c0.7,0,1.3,0.1,1.9,0.2s1.3,0.3,1.9,0.6s1.2,0.6,1.7,0.9c0.5,0.4,1,0.8,1.5,1.2
1267 + c0.5,0.5,0.9,1,1.2,1.5s0.7,1.1,0.9,1.7s0.4,1.2,0.6,1.9c0.1,0.6,0.2,1.3,0.2,1.9v134.7c0,0.6-0.1,1.3-0.2,1.9
1268 + c-0.1,0.6-0.3,1.3-0.6,1.9c-0.2,0.6-0.5,1.2-0.9,1.7c-0.4,0.5-0.8,1-1.2,1.5c-0.5,0.5-1,0.9-1.5,1.2c-0.5,0.4-1.1,0.7-1.7,0.9
1269 + c-0.6,0.2-1.2,0.4-1.9,0.6c-0.6,0.1-1.3,0.2-1.9,0.2H609.9c-0.7,0-1.3-0.1-1.9-0.2s-1.3-0.3-1.9-0.6s-1.2-0.5-1.7-0.9
1270 + c-0.5-0.4-1-0.8-1.5-1.2c-0.5-0.5-0.9-1-1.2-1.5s-0.7-1.1-0.9-1.7s-0.4-1.2-0.6-1.9c-0.1-0.6-0.2-1.3-0.2-1.9V180.2
1271 + c0-0.6,0.1-1.3,0.2-1.9s0.3-1.3,0.6-1.9s0.5-1.2,0.9-1.7c0.4-0.5,0.8-1,1.2-1.5c0.5-0.5,1-0.9,1.5-1.2s1.1-0.7,1.7-0.9
1272 + c0.6-0.2,1.2-0.4,1.9-0.6C608.6,170.4,609.2,170.3,609.9,170.4L609.9,170.4z"/>
1273 + <path class="st65" d="M609.9,170.4h209.6c0.7,0,1.3,0.1,1.9,0.2s1.3,0.3,1.9,0.6s1.2,0.6,1.7,0.9c0.5,0.4,1,0.8,1.5,1.2
1274 + c0.5,0.5,0.9,1,1.2,1.5s0.7,1.1,0.9,1.7s0.4,1.2,0.6,1.9c0.1,0.6,0.2,1.3,0.2,1.9v134.7c0,0.6-0.1,1.3-0.2,1.9
1275 + c-0.1,0.6-0.3,1.3-0.6,1.9c-0.2,0.6-0.5,1.2-0.9,1.7c-0.4,0.5-0.8,1-1.2,1.5c-0.5,0.5-1,0.9-1.5,1.2c-0.5,0.4-1.1,0.7-1.7,0.9
1276 + c-0.6,0.2-1.2,0.4-1.9,0.6c-0.6,0.1-1.3,0.2-1.9,0.2H609.9c-0.7,0-1.3-0.1-1.9-0.2s-1.3-0.3-1.9-0.6s-1.2-0.5-1.7-0.9
1277 + c-0.5-0.4-1-0.8-1.5-1.2c-0.5-0.5-0.9-1-1.2-1.5s-0.7-1.1-0.9-1.7s-0.4-1.2-0.6-1.9c-0.1-0.6-0.2-1.3-0.2-1.9V180.2
1278 + c0-0.6,0.1-1.3,0.2-1.9s0.3-1.3,0.6-1.9s0.5-1.2,0.9-1.7c0.4-0.5,0.8-1,1.2-1.5c0.5-0.5,1-0.9,1.5-1.2s1.1-0.7,1.7-0.9
1279 + c0.6-0.2,1.2-0.4,1.9-0.6C608.6,170.4,609.2,170.3,609.9,170.4L609.9,170.4z"/>
1280 + </g>
1281 +</g>
1282 +<g>
1283 + <defs>
1284 + <rect id="SVGID_00000061437844464511305790000004334658053585738909_" x="629.7" y="200.1" width="169.5" height="95.1"/>
1285 + </defs>
1286 + <clipPath id="SVGID_00000004523263253993653810000003690484622985944761_">
1287 + <use xlink:href="#SVGID_00000061437844464511305790000004334658053585738909_" style="overflow:visible;"/>
1288 + </clipPath>
1289 + <g style="clip-path:url(#SVGID_00000004523263253993653810000003690484622985944761_);">
1290 + <text transform="matrix(1 0 0 1 629.71 234.91)" class="st67 st68 st69">Subordinate</text>
1291 + <text transform="matrix(1 0 0 1 660.75 282.44)" class="st67 st68 st69">Agent 1</text>
1292 + </g>
1293 +</g>
1294 +<g>
1295 + <defs>
1296 + <rect id="SVGID_00000117638275231095390600000014238681609826865556_" x="10" y="-315.3" width="2473" height="1264"/>
1297 + </defs>
1298 + <clipPath id="SVGID_00000134937209363775423320000000529378778296655548_">
1299 + <use xlink:href="#SVGID_00000117638275231095390600000014238681609826865556_" style="overflow:visible;"/>
1300 + </clipPath>
1301 + <g style="clip-path:url(#SVGID_00000134937209363775423320000000529378778296655548_);">
1302 + <path class="st64" d="M938.4,371.4H1148c0.7,0,1.3,0.1,1.9,0.2s1.3,0.3,1.9,0.6s1.2,0.5,1.7,0.9c0.5,0.4,1,0.8,1.5,1.2
1303 + c0.5,0.5,0.9,1,1.2,1.5s0.7,1.1,0.9,1.7s0.4,1.2,0.6,1.9s0.2,1.3,0.2,1.9V516c0,0.7-0.1,1.3-0.2,1.9c-0.1,0.6-0.3,1.3-0.6,1.9
1304 + s-0.6,1.2-0.9,1.7s-0.8,1-1.2,1.5s-1,0.9-1.5,1.2s-1.1,0.7-1.7,0.9s-1.2,0.4-1.9,0.6c-0.6,0.1-1.3,0.2-1.9,0.2H938.4
1305 + c-0.7,0-1.3-0.1-1.9-0.2s-1.3-0.3-1.9-0.6s-1.2-0.5-1.7-0.9s-1-0.8-1.5-1.2c-0.5-0.5-0.9-1-1.2-1.5s-0.7-1.1-0.9-1.7
1306 + c-0.2-0.6-0.4-1.2-0.6-1.9c-0.1-0.6-0.2-1.3-0.2-1.9V381.3c0-0.6,0.1-1.3,0.2-1.9c0.1-0.6,0.3-1.3,0.6-1.9
1307 + c0.2-0.6,0.5-1.2,0.9-1.7c0.4-0.5,0.8-1,1.2-1.5c0.5-0.5,1-0.9,1.5-1.2c0.5-0.4,1.1-0.7,1.7-0.9c0.6-0.2,1.2-0.4,1.9-0.6
1308 + C937.1,371.5,937.7,371.4,938.4,371.4L938.4,371.4z"/>
1309 + <path class="st65" d="M938.4,371.4H1148c0.7,0,1.3,0.1,1.9,0.2s1.3,0.3,1.9,0.6s1.2,0.5,1.7,0.9c0.5,0.4,1,0.8,1.5,1.2
1310 + c0.5,0.5,0.9,1,1.2,1.5s0.7,1.1,0.9,1.7s0.4,1.2,0.6,1.9s0.2,1.3,0.2,1.9V516c0,0.7-0.1,1.3-0.2,1.9c-0.1,0.6-0.3,1.3-0.6,1.9
1311 + s-0.6,1.2-0.9,1.7s-0.8,1-1.2,1.5s-1,0.9-1.5,1.2s-1.1,0.7-1.7,0.9s-1.2,0.4-1.9,0.6c-0.6,0.1-1.3,0.2-1.9,0.2H938.4
1312 + c-0.7,0-1.3-0.1-1.9-0.2s-1.3-0.3-1.9-0.6s-1.2-0.5-1.7-0.9s-1-0.8-1.5-1.2c-0.5-0.5-0.9-1-1.2-1.5s-0.7-1.1-0.9-1.7
1313 + c-0.2-0.6-0.4-1.2-0.6-1.9c-0.1-0.6-0.2-1.3-0.2-1.9V381.3c0-0.6,0.1-1.3,0.2-1.9c0.1-0.6,0.3-1.3,0.6-1.9
1314 + c0.2-0.6,0.5-1.2,0.9-1.7c0.4-0.5,0.8-1,1.2-1.5c0.5-0.5,1-0.9,1.5-1.2c0.5-0.4,1.1-0.7,1.7-0.9c0.6-0.2,1.2-0.4,1.9-0.6
1315 + C937.1,371.5,937.7,371.4,938.4,371.4L938.4,371.4z"/>
1316 + </g>
1317 +</g>
1318 +<g>
1319 + <defs>
1320 + <rect id="SVGID_00000058581477882271925460000015288132986745826203_" x="958.2" y="401.1" width="169.5" height="95.1"/>
1321 + </defs>
1322 + <clipPath id="SVGID_00000039815150709407115820000010818935686328693686_">
1323 + <use xlink:href="#SVGID_00000058581477882271925460000015288132986745826203_" style="overflow:visible;"/>
1324 + </clipPath>
1325 + <g style="clip-path:url(#SVGID_00000039815150709407115820000010818935686328693686_);">
1326 + <text transform="matrix(1 0 0 1 958.18 435.98)" class="st67 st68 st69">Subordinate</text>
1327 + <text transform="matrix(1 0 0 1 989.22 483.51)" class="st67 st68 st69">Agent 2</text>
1328 + </g>
1329 +</g>
1330 +<g>
1331 + <defs>
1332 + <rect id="SVGID_00000181793847036937054310000016937832035254460852_" x="10" y="-315.3" width="2473" height="1264"/>
1333 + </defs>
1334 + <clipPath id="SVGID_00000000200106441355962520000008552993502165275056_">
1335 + <use xlink:href="#SVGID_00000181793847036937054310000016937832035254460852_" style="overflow:visible;"/>
1336 + </clipPath>
1337 + <g style="clip-path:url(#SVGID_00000000200106441355962520000008552993502165275056_);">
1338 +
1339 + <rect x="1283" y="165" transform="matrix(0.7071 -0.7071 0.7071 0.7071 233.0873 1018.3026)" class="st73" width="125.6" height="125.6"/>
1340 +
1341 + <rect x="1283" y="165" transform="matrix(0.7071 -0.7071 0.7071 0.7071 233.0873 1018.3026)" class="st74" width="125.6" height="125.6"/>
1342 + </g>
1343 +</g>
1344 +<g>
1345 + <defs>
1346 + <rect id="SVGID_00000093160866362353890040000000580848089041828798_" x="1310.4" y="204" width="71.3" height="47.5"/>
1347 + </defs>
1348 + <clipPath id="SVGID_00000046301876782948682840000018261966658233217665_">
1349 + <use xlink:href="#SVGID_00000093160866362353890040000000580848089041828798_" style="overflow:visible;"/>
1350 + </clipPath>
1351 + <g style="clip-path:url(#SVGID_00000046301876782948682840000018261966658233217665_);">
1352 + <text transform="matrix(1 0 0 1 1310.42 238.87)" class="st67 st68 st69">T</text>
1353 + <text transform="matrix(1 0 0 1 1324.87 238.87)" class="st67 st68 st69">ools</text>
1354 + </g>
1355 +</g>
1356 +<g>
1357 + <defs>
1358 + <rect id="SVGID_00000162340011057825243000000010881783801392862603_" x="10" y="-315.3" width="2473" height="1264"/>
1359 + </defs>
1360 + <clipPath id="SVGID_00000126323625052143002250000000534315234651050423_">
1361 + <use xlink:href="#SVGID_00000162340011057825243000000010881783801392862603_" style="overflow:visible;"/>
1362 + </clipPath>
1363 + <g style="clip-path:url(#SVGID_00000126323625052143002250000000534315234651050423_);">
1364 + <rect x="1583.1" y="174.3" class="st73" width="405.1" height="106.9"/>
1365 + <rect x="1583.1" y="174.3" class="st74" width="405.1" height="106.9"/>
1366 + </g>
1367 +</g>
1368 +<g>
1369 + <defs>
1370 + <rect id="SVGID_00000122697829781211708650000012154488265258970809_" x="1642.5" y="204" width="286.8" height="47.5"/>
1371 + </defs>
1372 + <clipPath id="SVGID_00000044163849903802845590000005483808105038946735_">
1373 + <use xlink:href="#SVGID_00000122697829781211708650000012154488265258970809_" style="overflow:visible;"/>
1374 + </clipPath>
1375 + <g style="clip-path:url(#SVGID_00000044163849903802845590000005483808105038946735_);">
1376 + <text transform="matrix(1 0 0 1 1642.48 238.87)" class="st67 st68 st69">Code Execution</text>
1377 + <text transform="matrix(1 0 0 1 1870.9301 238.87)" class="st67 st68 st69">T</text>
1378 + <text transform="matrix(1 0 0 1 1885.38 238.87)" class="st67 st68 st69">ool</text>
1379 + </g>
1380 +</g>
1381 +<g>
1382 + <defs>
1383 + <rect id="SVGID_00000091015292727712088220000009902392776322848910_" x="10" y="-315.3" width="2473" height="1264"/>
1384 + </defs>
1385 + <clipPath id="SVGID_00000093872554659356400610000006154570753773668999_">
1386 + <use xlink:href="#SVGID_00000091015292727712088220000009902392776322848910_" style="overflow:visible;"/>
1387 + </clipPath>
1388 + <g style="clip-path:url(#SVGID_00000093872554659356400610000006154570753773668999_);">
1389 + <rect x="2087.2" y="150.6" class="st73" width="330.5" height="154.5"/>
1390 + <rect x="2087.2" y="150.6" class="st74" width="330.5" height="154.5"/>
1391 + </g>
1392 +</g>
1393 +<g>
1394 + <defs>
1395 + <rect id="SVGID_00000152266102049190071170000016197699550400276112_" x="2146.6" y="180.3" width="212.3" height="95.1"/>
1396 + </defs>
1397 + <clipPath id="SVGID_00000065765156003939193360000016040771760165585339_">
1398 + <use xlink:href="#SVGID_00000152266102049190071170000016197699550400276112_" style="overflow:visible;"/>
1399 + </clipPath>
1400 + <g style="clip-path:url(#SVGID_00000065765156003939193360000016040771760165585339_);">
1401 + <text transform="matrix(1 0 0 1 2146.5801 215.11)" class="st67 st68 st69">W</text>
1402 + <text transform="matrix(1 0 0 1 2172.1299 215.11)" class="st67 st68 st69">ork Directory</text>
1403 + <text transform="matrix(1 0 0 1 2190.1499 262.64)" class="st67 st68 st69">work_dir</text>
1404 + </g>
1405 +</g>
1406 +</svg>
docs/res/setup/1-docker-image-search.png
Binary files /dev/null and b/docs/res/setup/1-docker-image-search.png differ
docs/res/setup/2-docker-image-run.png
Binary files /dev/null and b/docs/res/setup/2-docker-image-run.png differ
docs/res/setup/3-docker-port-mapping.png
Binary files /dev/null and b/docs/res/setup/3-docker-port-mapping.png differ
docs/res/setup/4-docker-container-started.png
Binary files /dev/null and b/docs/res/setup/4-docker-container-started.png differ
docs/res/setup/5-docker-click-to-open.png
Binary files /dev/null and b/docs/res/setup/5-docker-click-to-open.png differ
docs/res/setup/6-docker-a0-running.png
Binary files /dev/null and b/docs/res/setup/6-docker-a0-running.png differ
docs/res/setup/9-rfc-devpage-on-docker-instance-1.png
Binary files /dev/null and b/docs/res/setup/9-rfc-devpage-on-docker-instance-1.png differ
docs/res/setup/9-rfc-devpage-on-local-sbs-1.png
Binary files /dev/null and b/docs/res/setup/9-rfc-devpage-on-local-sbs-1.png differ
docs/res/setup/docker-delete-image-1.png
Binary files /dev/null and b/docs/res/setup/docker-delete-image-1.png differ
docs/res/setup/image-14-u.png
Binary files /dev/null and b/docs/res/setup/image-14-u.png differ
docs/res/setup/image-22-1.png
Binary files a/docs/res/setup/image-22-1.png and b/docs/res/setup/image-22-1.png differ
docs/res/setup/image-23-1.png
Binary files a/docs/res/setup/image-23-1.png and b/docs/res/setup/image-23-1.png differ
docs/res/setup/settings/1-agentConfig.png
Binary files /dev/null and b/docs/res/setup/settings/1-agentConfig.png differ
docs/res/setup/settings/2-chat-model.png
Binary files /dev/null and b/docs/res/setup/settings/2-chat-model.png differ
docs/res/setup/settings/3-auth.png
Binary files /dev/null and b/docs/res/setup/settings/3-auth.png differ
docs/res/setup/settings/4-local-models.png
Binary files /dev/null and b/docs/res/setup/settings/4-local-models.png differ
docs/res/setup/thumb_setup.png
Binary files /dev/null and b/docs/res/setup/thumb_setup.png differ
docs/res/ui-actions.png
Binary files /dev/null and b/docs/res/ui-actions.png differ
docs/res/ui-attachments-2.png
Binary files /dev/null and b/docs/res/ui-attachments-2.png differ
docs/res/ui-attachments.png
Binary files /dev/null and b/docs/res/ui-attachments.png differ
docs/res/ui-behavior-change-chat.png
Binary files /dev/null and b/docs/res/ui-behavior-change-chat.png differ
docs/res/ui-context.png
Binary files /dev/null and b/docs/res/ui-context.png differ
docs/res/ui-file-browser.png
Binary files /dev/null and b/docs/res/ui-file-browser.png differ
docs/res/ui-history.png
Binary files /dev/null and b/docs/res/ui-history.png differ
docs/res/ui-katex-1.png
Binary files /dev/null and b/docs/res/ui-katex-1.png differ
docs/res/ui-katex-2.png
Binary files /dev/null and b/docs/res/ui-katex-2.png differ
docs/res/ui-nudge.png
Binary files /dev/null and b/docs/res/ui-nudge.png differ
docs/res/ui-restarting.png
Binary files /dev/null and b/docs/res/ui-restarting.png differ
docs/res/ui-screen.png
Binary files /dev/null and b/docs/res/ui-screen.png differ
docs/res/ui-settings-5-speech-to-text.png
Binary files /dev/null and b/docs/res/ui-settings-5-speech-to-text.png differ
docs/res/ui-tts-stop-speech.png
Binary files /dev/null and b/docs/res/ui-tts-stop-speech.png differ
docs/res/ui_newchat1.png
Binary files a/docs/res/ui_newchat1.png and b/docs/res/ui_newchat1.png differ
docs/res/web-ui.mp4
Binary files /dev/null and b/docs/res/web-ui.mp4 differ
docs/troubleshooting.md
+19 -31
@@ -2,54 +2,42 @@
2 This page addresses frequently asked questions (FAQ) and provides troubleshooting steps for common issues encountered while using Agent Zero.
3
4 ## Frequently Asked Questions
5 -**1. How do I set up and activate a Python virtual environment?**
6 -Use the `venv` module or `conda` (recommended).
7 -* **`venv`:**
8 - ```bash
9 - python -m venv .venv # Create the environment
10 - source .venv/bin/activate # Activate (Linux/macOS)
11 - .venv\Scripts\activate # Activate (Windows)
12 - ```
13 -* **`conda`:**
14 - ```bash
15 - conda create -n agent-zero python=3.12 # Create
16 - conda activate agent-zero # Activate
17 - ```
18 -**2. How do I resolve `ModuleNotFoundError` errors (e.g., for `ansio`, `pyflakes`, `Flask`)?**
19 -Ensure your virtual environment is activated *before* installing requirements:
20 -
21 -```bash
22 -pip install -r requirements.txt
23 -```
5 +**1. How do I ask Agent Zero to work directly on my files or dirs?**
6 +- Place the files/dirs in the `work_dir` directory. Agent Zero will be able to perform tasks on them. The `work_dir` directory is located in the root directory of the Docker Container.
7 +
8 +**2. When I input something in the chat, nothing happens. What's wrong?**
9 +- Check if you have set up API keys in the Settings page. If not, the application will not be able to communicate with the endpoints it needs to run LLMs and to perform tasks.
10
11 **3. How do I integrate open-source models with Agent Zero?**
26 -Refer to the [Choosing your LLMs](installation.md#installing-and-using-ollama-local-models) section of the documentation for detailed instructions and examples for configuring different LLMs in `initialize.py`. Local models can be run using Ollama or LM Studio.
12 +Refer to the [Choosing your LLMs](installation.md#installing-and-using-ollama-local-models) section of the documentation for detailed instructions and examples for configuring different LLMs. Local models can be run using Ollama or LM Studio.
13
28 -> [!TIP]
14 +> [!TIP]
15 > Some LLM providers offer free usage of their APIs, for example Groq, Mistral or SambaNova.
16
31 -**4. How can I make Agent Zero retain memory between sessions?**
32 -Auto memory automatically saves and loads solutions and informations from previous sessions.
17 +**6. How can I make Agent Zero retain memory between sessions?**
18 +Refer to the [How to update Agent Zero](installation.md#how-to-update-agent-zero) section of the documentation for instructions on how to update Agent Zero while retaining memory and data.
19
34 -**5. Where can I find more documentation or tutorials?**
35 -* Join the Agent Zero [Skool](https://www.skool.com/agent-zero) or [Discord](https://discord.gg/Z2tun2N3) community for support and discussions.
20 +**7. Where can I find more documentation or tutorials?**
21 +- Join the Agent Zero [Skool](https://www.skool.com/agent-zero) or [Discord](https://discord.gg/Z2tun2N3) community for support and discussions.
22
37 -**6. How do I adjust API rate limits?**
23 +**8. How do I adjust API rate limits?**
24 Modify the `rate_limit_seconds` and `rate_limit_requests` parameters in the `AgentConfig` class within `initialize.py`.
25
40 -**7. Can Agent Zero interact with external APIs or services (e.g., WhatsApp)?**
26 +**9. My code_execution_tool doesn't work, what's wrong?**
27 +- Ensure you have Docker installed and running. If using Docker Desktop on macOS, grant it access to your project files in Docker Desktop's settings. Check the [Installation guide](installation.md#4-install-docker-docker-desktop-application) for more details.
28 +- Verify that the Docker image is updated.
29 +
30 +**10. Can Agent Zero interact with external APIs or services (e.g., WhatsApp)?**
31 Extending Agent Zero to interact with external APIs is possible by creating custom tools or solutions. Refer to the documentation on creating them.
32
33 ## Troubleshooting
34
35 **Installation**
46 -* **Dependency Conflicts:** If encountering version conflicts during installation, try creating a fresh virtual environment and reinstalling the requirements.
47 -* **Docker Issues:** If Docker containers fail to start or Agent Zero can't connect to Docker, consult the Docker documentation and verify your Docker installation and configuration. On macOS, ensure you've granted Docker access to your project files in Docker Desktop's settings as described in the [Installation guide](installation.md#2-install-docker-docker-desktop-application).
36 +- **Docker Issues:** If Docker containers fail to start or Agent Zero can't connect to Docker, consult the Docker documentation and verify your Docker installation and configuration. On macOS, ensure you've granted Docker access to your project files in Docker Desktop's settings as described in the [Installation guide](installation.md#4-install-docker-docker-desktop-application). Verify that the Docker image is updated.
37
38 **Usage**
50 -* **"Nothing happens" when sending a message:** This often indicates a tool execution issue, an API connection problem, or rate limiting. Check your API keys, internet connection, and ensure any required services (like Docker) are running. Examine the logs for more details.
39
52 -* **Terminal commands not executing:** If using Docker for code execution, ensure the Docker container is running and properly configured. Check SSH settings if applicable.
40 +- **Terminal commands not executing:** If using Docker for code execution, ensure the Docker container is running and properly configured. Check SSH settings if applicable. Check if the Docker image is updated by removing it from Docker Desktop app, and subsequently prompting Agent Zero to `run an Hello World in Python`.
41
42 * **Error Messages:** Pay close attention to the error messages displayed in the Web UI or terminal. They often provide valuable clues for diagnosing the issue. Refer to the specific error message in online searches or community forums for potential solutions.
43
docs/usage.md
+218 -59
@@ -1,20 +1,106 @@
1 # Usage Guide
2 -This guide explores more advanced usage scenarios for Agent Zero, building upon the basics covered in the [Quick Start](quickstart.md).
2 +This guide explores usage and configuration scenarios for Agent Zero. You can consider this as a reference post-installation guide.
3
4 ![Utility Message with Solutions](res/memory-man.png)
5
6 -## Tool Usage
7 -Agent Zero's power comes from its ability to use [tools](architecture.md#tools). Here's how to leverage them effectively:
6 +## Basic Operations
7 +Agent Zero provides several basic operations through its interface:
8
9 -- **Understand Tools:** Agent Zero typically includes default tools like knowledge, webpage content, code execution, and communication. Understand the capabilities of these tools and how to invoke them.
9 +### Restart Framework
10 +The Restart button allows you to quickly restart the Agent Zero framework without using the terminal:
11
11 -## Prompt Engineering
12 -Effective prompt engineering is crucial for getting the most out of Agent Zero. Here are some tips and techniques:
12 +![Restart Framework](res/ui-restarting.png)
13
14 -* **Be Clear and Specific:** Clearly state your desired outcome. The more specific you are, the better Agent Zero can understand and fulfill your request. Avoid vague or ambiguous language.
15 -* **Provide Context:** If necessary, provide background information or context to help the agent understand the task better. This might include relevant details, constraints, or desired format for the response.
16 -* **Break Down Complex Tasks:** For complex tasks, break them down into smaller, more manageable sub-tasks. This makes it easier for the agent to reason through the problem and generate a solution.
17 -* **Iterative Refinement:** Don't expect perfect results on the first try. Experiment with different prompts, refine your instructions based on the agent's responses, and iterate until you achieve the desired outcome. To achieve a full-stack, web-app development task, for example, you might need to iterate for a few hours for 100% success.
14 +* Click the "Restart" button in the sidebar
15 +* A blue notification will appear indicating "Restarting..."
16 +* Once complete, a green success message "Restarted" will be shown
17 +* The framework will reinitialize while maintaining your current chat history and context
18 +
19 +> [!TIP]
20 +> Use the Restart function when you want to:
21 +> - Reset the framework if you encounter unexpected behavior
22 +> - Reinitialize the system when agents become unresponsive
23 +
24 +### Action Buttons
25 +Located beneath the chat input box, Agent Zero provides a set of action buttons for enhanced control and visibility:
26 +
27 +![Action Buttons](res/ui-actions.png)
28 +#### Chat Flow Control
29 +* **Pause/Resume Agent:** Toggle button to pause and resume chat flow
30 + - Click to pause ongoing agent operations
31 + - Changes to "Resume Agent" when paused
32 + - Click again to resume chat flow and command execution
33 +
34 +#### Knowledge and File Management
35 +* **Import Knowledge:** Import external files into the agent's knowledge base
36 + - Supports `.txt`, `.pdf`, `.csv`, `.html`, `.json`, and `.md` formats
37 + - Files are stored in `\knowledge\custom\main`
38 + - Success message confirms successful import
39 + - See [knowledge](architecture.md#knowledge) for more details
40 +
41 +### File Browser: Manage files in the Agent Zero environment
42 + - Upload new files and folders
43 + - Download files (click filename) or folders (as zip archives)
44 + - Delete files and folders
45 + - Navigate directories using the "Up" button
46 + - Support for file renaming and search coming soon
47 + - See [File Browser](#file-browser) section for detailed features
48 +
49 +#### Debugging and Monitoring
50 +* **Context:** View the complete context window sent to the LLM
51 + - Includes system prompts
52 + - Shows current conversation context
53 + - Displays active instructions and parameters
54 +
55 +![Context](res/ui-context.png)
56 +
57 +### History:
58 +Access the chat history in JSON format
59 + - View the conversation as processed by the LLM
60 + - Useful for debugging and understanding agent behavior
61 +
62 +![History](res/ui-history.png)
63 +
64 +* **Nudge:** Restart the agent's last process
65 + - Useful when agents become unresponsive
66 + - Retries the last operation
67 + - Helps recover from stuck states
68 +
69 +![Nudge](res/ui-nudge.png)
70 +
71 +> [!TIP]
72 +> Use the Context and History buttons to understand how the agent interprets your instructions and debug any unexpected behavior.
73 +
74 +### File Attachments
75 +Agent Zero supports direct file attachments in the chat interface for seamless file operations:
76 +
77 +#### Attaching Files
78 +* Click the attachment icon (📎) on the left side of the chat input box
79 +* Select one or multiple files to attach
80 +* Preview attached files before sending:
81 + - File names are displayed with their types (HTML, PDF, JPG, etc.)
82 + - Images show thumbnails when available
83 + - Files are listed in the chat input area waiting to be sent
84 +
85 +![File Attachments](res/ui-attachments.png)
86 +
87 +#### Working with Attached Files
88 +* Files can be referenced directly in your messages
89 +* Agent Zero can:
90 + - Process attached files
91 + - Move files to specific directories
92 + - Perform operations on multiple files simultaneously
93 + - Confirm successful file operations with detailed responses
94 +
95 +![Working with Attachments](res/ui-attachments-2.png)
96 +
97 +> [!TIP]
98 +> When working with multiple files, you can attach them all at once and then give instructions about what to do with them. The agent will handle them as a batch while keeping you informed of the progress.
99 +
100 +## Tool Usage
101 +Agent Zero's power comes from its ability to use [tools](architecture.md#tools). Here's how to leverage them effectively:
102 +
103 +- **Understand Tools:** Agent Zero includes default tools like knowledge (powered by SearXNG), webpage content, code execution, and communication. Understand the capabilities of these tools and how to invoke them.
104
105 ## Example of Tools Usage: Web Search and Code Execution
106 Let's say you want Agent Zero to perform some financial analysis tasks. Here's a possible prompt:
@@ -28,12 +114,10 @@ Agent Zero might then:
114 3. Use the `code_execution_tool` to execute a Python script that performs the graph creation and key points highlighting, using the extracted data and the news dates as inputs.
115 4. Return the final chart that you'll find in `/work_dir`, responding to the user with the `response_tool`.
116
31 -This example demonstrates how to combine multiple tools to achieve an analysis task. By mastering prompt engineering and tool usage, you can unlock the full potential of Agent Zero to solve complex problems.
117 +> [!NOTE]
118 +> The first run of `code_execution_tool` may take a while as it downloads and builds the Agent Zero Docker image. Subsequent runs will be faster.
119
33 -## Memory Management
34 -* **Persistence:** Agent Zero's memory persists across sessions, allowing agents to learn from past interactions.
35 -* **Memory Retrieval:** Agents can access their [memory](architecture.md#memory-system) to retrieve relevant information and experiences.
36 -* **Knowledge Base:** You can augment the agent's knowledge by providing [external knowledge files](architecture.md#knowledge).
120 +This example demonstrates how to combine multiple tools to achieve an analysis task. By mastering prompt engineering and tool usage, you can unlock the full potential of Agent Zero to solve complex problems.
121
122 ## Multi-Agent Cooperation
123 One of Agent Zero's unique features is multi-agent cooperation.
@@ -45,51 +129,126 @@ One of Agent Zero's unique features is multi-agent cooperation.
129 ![](res/physics.png)
130 ![](res/physics-2.png)
131
48 -## Agent Behavior
49 -* **System Prompt:** The core of Agent Zero's behavior is defined in the system prompt. Experiment with different system prompts to customize the agent's personality, biases, and reasoning approach.
50 -* **Prompts Directory:** The `prompts` directory contains various prompt templates used by the framework. You can modify these templates to customize the agent's communication style, instructions, and responses. See [Prompt Customization](architecture.md#custom-prompts) for more information.
51 -* **Creating New Tools and Instruments:** Extend Agent Zero's capabilities with custom tools and instruments. This allows you to add new features, modify existing behavior, and integrate with other systems. See [Adding Tools](architecture.md#adding-tools) and [Adding Instruments](architecture.md#adding-instruments) for more information.
132 +## Prompt Engineering
133 +Effective prompt engineering is crucial for getting the most out of Agent Zero. Here are some tips and techniques:
134 +
135 +* **Be Clear and Specific:** Clearly state your desired outcome. The more specific you are, the better Agent Zero can understand and fulfill your request. Avoid vague or ambiguous language.
136 +* **Provide Context:** If necessary, provide background information or context to help the agent understand the task better. This might include relevant details, constraints, or desired format for the response.
137 +* **Break Down Complex Tasks:** For complex tasks, break them down into smaller, more manageable sub-tasks. This makes it easier for the agent to reason through the problem and generate a solution.
138 +* **Iterative Refinement:** Don't expect perfect results on the first try. Experiment with different prompts, refine your instructions based on the agent's responses, and iterate until you achieve the desired outcome. To achieve a full-stack, web-app development task, for example, you might need to iterate for a few hours for 100% success.
139 +
140 +## Voice Interface
141 +Agent Zero provides both Text-to-Speech (TTS) and Speech-to-Text (STT) capabilities for natural voice interaction:
142 +
143 +### Text-to-Speech
144 +Enable voice responses from agents:
145 +* Toggle the "Speech" switch in the Preferences section of the sidebar
146 +* Agents will use your system's built-in voice synthesizer to speak their messages
147 +* Click the "Stop Speech" button above the input area to immediately stop any ongoing speech
148 +
149 +![TTS Stop Speech](res/ui-tts-stop-speech.png)
150
53 -## Using Agent Zero on your mobile device
54 -To access the Agent Zero Web UI from other devices on your network and run it on all hosts, such as your smartphones or tablets:
151 +- The interface allows users to stop speech at any time if a response is too lengthy or if they wish to intervene during the conversation.
152
56 -1. In `run_ui.py`, add `host="0.0.0.0"` (or your private IP) to the `app.run()` command before the `port` argument (end of `run_ui.py`). The edited line of code should look like this:
57 -```python
58 -app.run(request_handler=NoRequestLoggingWSGIRequestHandler, host="0.0.0.0", port=port)
59 -```
60 -2. Access the Web UI from other devices using `http://$YOUR_PRIVATE_IP:50001`.
153 +The TTS uses a standard voice interface provided by modern browsers, which may sound robotic but is effective and does not require complex AI models. This ensures low latency and quick responses across various platforms, including mobile devices.
154 +
155 +
156 +> [!TIP]
157 +> The Text-to-Speech feature is great for:
158 +> - Multitasking while receiving agent responses
159 +> - Accessibility purposes
160 +> - Creating a more interactive experience
161 +
162 +### Speech-to-Text
163 +Send voice messages to agents using OpenAI's Whisper model (does not require OpenAI API key!):
164 +
165 +1. Click the microphone button in the input area to start recording
166 +2. The button color indicates the current status:
167 + - Grey: Inactive
168 + - Red: Listening
169 + - Green: Recording
170 + - Teal: Waiting
171 + - Cyan (pulsing): Processing
172 +
173 +Users can adjust settings such as silence threshold and message duration before sending to optimize their interaction experience.
174 +
175 +Configure STT settings in the Settings page:
176 +* **Model Size:** Choose between Base (74M, English) or other models
177 + - Note: Only Large and Turbo models support multiple languages
178 +* **Language Code:** Set your preferred language (e.g., 'en', 'fr', 'it', 'cz')
179 +* **Silence Detection:**
180 + - Threshold: Adjust sensitivity (lower values are more sensitive)
181 + - Duration: Set how long silence should last before ending recording
182 + - Timeout: Set maximum waiting time before closing the microphone
183 +
184 +![Speech to Text Settings](res/ui-settings-5-speech-to-text.png)
185 +
186 +> [!IMPORTANT]
187 +> All STT and TTS functionalities operate locally within the Docker container,
188 +> ensuring that no data is transmitted to external servers or OpenAI APIs. This
189 +> enhances user privacy while maintaining functionality.
190 +
191 +### Mathematical Expressions
192 +Agent Zero supports KaTeX for beautiful mathematical typesetting:
193 +
194 +* **Inline Math:** Use single dollars `$...$` for inline expressions
195 + - Example: Type `The area of a circle is $A = πr^2$`
196 + - Renders as: The area of a circle is $A = πr^2$
197 +
198 +* **Display Math:** Use double dollars `$$...$$` for centered display equations
199 + - Example: Type `$$F = G\frac{m_1m_2}{r^2}$$`
200 + - Renders as a centered equation
201 +
202 +![KaTeX](res/ui-katex-1.png)
203 +
204 +* **Complex Mathematics:** Supports full KaTeX syntax for:
205 + - Fractions, exponents, and roots
206 + - Matrices and arrays
207 + - Greek letters and mathematical symbols
208 + - Integrals, summations, and limits
209 + - Mathematical alignments and equations
210 +
211 +![KaTeX display](res/ui-katex-2.png)
212 +
213 +> [!TIP]
214 +> When asking the agent to solve mathematical problems, it will automatically respond using KaTeX formatting for clear and professional-looking mathematical expressions.
215 +
216 +### File Browser
217 +Agent Zero provides a powerful file browser interface for managing your workspace:
218 +
219 +#### Interface Overview
220 +- **Navigation Bar**: Shows current directory path with "Up" button for parent directory
221 +- **File List**: Displays files and directories with key information:
222 + - Name (sortable)
223 + - Size in bytes
224 + - Last modified timestamp
225 +- **Action Icons**: Each file/directory has:
226 + - Download button
227 + - Delete button (with confirmation)
228 +
229 +![File Browser](res/ui-file-browser.png)
230 +
231 +#### Features
232 +- **Directory Navigation**:
233 + - Click directories to enter them
234 + - Use "Up" button to move to parent directory
235 + - Current path always visible for context
236 +
237 +> [!NOTE]
238 +> The files browser allows the user to go in the Agent Zero root folder if you click the `Up` button, but the working directory of Agents will always be `/work_dir`
239 +>
240 +- **File Operations**:
241 + - Create new files and directories
242 + - Delete existing files and directories
243 + - Download files to your local system
244 + - Upload files from your local system
245 +- **File Information**:
246 + - Visual indicators for file types (folders, code files, documents)
247 + - Size information in human-readable format
248 + - Last modification timestamps
249 +- **Bulk Operations**:
250 + - Upload multiple files simultaneously
251 + - Select and manage multiple files at once
252
253 > [!TIP]
63 -> On local networks, the private address is usually 192.168.x.x or 10.0.x.x.
64 -> If you're using a VPN, you may need to use your public IP address instead of your
65 -> private IP. You can find your public IP address by visiting a website like
66 -> [https://www.whatismyip.com/](https://www.whatismyip.com/).
67 ->
68 -> If you're using a cloud server, you can use the server's public IP address instead
69 -> of your private IP. You may need to configure your server's firewall to allow
70 -> incoming traffic on port 50001.
71 -> If you're using a remote server, you may need to use a service like [ngrok]
72 -> (https://ngrok.com/) to create a secure tunnel to your server. This allows you to
73 -> access the Web UI from other devices using a public URL.
74 -
75 -## Using code_execution_tool outside of the Docker Container
76 -> [!CAUTION]
77 -> We believe in safe and ethical AI development, and highly
78 -> suggest you to use the Docker container designed for running Agent Zero.
79 -> However, we understand that some users may want to use the code_execution_tool outside of the Docker container.
80 ->
81 -> This is a dangerous and untested feature, and we are not responsible for any damage
82 -> or illegal activities or legal liabilities caused by the use of this feature.
83 -> As you are responsible for your own actions, use this feature only if 100% sure of what you're doing.
84 -
85 -- If you accept the risks, follow these steps:
86 -
87 - ![Code Execution Jailbreak](res/code_exec_jailbreak.png)
88 -
89 -1. After the installation and configuration of your Agent Zero instance, go in `initialize.py` and set the `code_exec_docker_enabled` to `False` (line 47). This will disable the code_execution_tool for your Agent Zero instance to communicate with the Docker container. The tool will search for an SSH connection at this point.
90 -
91 -2. Comment out lines 56, 57, 58 and 59 in `initialize.py` that sets the `code_execution_tool` SSH connection parameters. Point them to your machine accordingly. This will enable the code_execution_tool for your Agent Zero instance.
92 -
93 -> [!IMPORTANT]
94 -> The `code_exec_ssh_pass` parameter (root user password) has to be provided to
95 -> `initialize.py` for the code_execution_tool to be able to connect to the machine.
\ No newline at end of file
254 +> The File Browser integrates seamlessly with Agent Zero's capabilities. You can reference files directly in your conversations, and the agent can help you manage, modify, and organize your files.
\ No newline at end of file
knowledge/default/main/about/github_readme.md
+58 -15
@@ -3,15 +3,15 @@
3 [![Join our Skool Community](https://img.shields.io/badge/Skool-Join%20our%20Community-4A90E2?style=for-the-badge&logo=skool&logoColor=white)](https://www.skool.com/agent-zero) [![Join our Discord](https://img.shields.io/badge/Discord-Join%20our%20server-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/B8KZKNsPpj) [![Subscribe on YouTube](https://img.shields.io/badge/YouTube-Subscribe-red?style=for-the-badge&logo=youtube&logoColor=white)](https://www.youtube.com/@AgentZeroFW) [![Connect on LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-blue?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/jan-tomasek/) [![Follow on X.com](https://img.shields.io/badge/X.com-Follow-1DA1F2?style=for-the-badge&logo=x&logoColor=white)](https://x.com/JanTomasekDev)
4
5
6 -[![Intro Video](/docs/res/intro_vid.jpg)](https://www.youtube.com/watch?v=C9n8zFpaV3I)
6 +[![Intro Video](/docs/res/new_vid.jpg)](https://www.youtube.com/watch?v=U_Gl0NPalKA)
7
8 **Personal and organic AI framework**
9 - Agent Zero is not a predefined agentic framework. It is designed to be dynamic, organically growing, and learning as you use it.
10 - Agent Zero is fully transparent, readable, comprehensible, customizable and interactive.
11 - Agent Zero uses the computer as a tool to accomplish its (your) tasks.
12
13 -## Now with UI:
14 -![UI prototype](/docs/res/ui_screen1.png)
13 +## Now fully Dockerized, fully UI, with TTS and STT:
14 +![Web UI](/docs/res/win_webui2.gif)
15
16 ## Key concepts
17 1. **General-purpose assistant**
@@ -23,6 +23,10 @@
23 - The only default tools in its arsenal are online search, memory features, communication (with the user and other agents), and code/terminal execution. Everything else is created by the agent itself or can be extended by the user.
24 - Tool usage functionality has been developed from scratch to be the most compatible and reliable, even with very small models.
25
26 +* **Default Tools:** Agent Zero includes tools like knowledge, webpage content, code execution, and communication.
27 +* **Creating Custom Tools:** Extend Agent Zero's functionality by creating your own custom tools.
28 +* **Instruments:** Instruments are a new type of tool that allow you to create custom functions and procedures that can be called by Agent Zero.
29 +
30 3. **Multi-agent cooperation**
31 - Every agent has a superior agent giving it tasks and instructions. Every agent then reports back to its superior.
32 - In the case of the first agent in the chain (Agent 0), the superior is the human user; the agent sees no difference.
@@ -51,9 +55,11 @@
55 - No coding is required, only prompting and communication skills.
56 - With a solid system prompt, the framework is reliable even with small models, including precise tool usage.
57
58 +![Agent 1 System Load](/docs/res/ui_screen.png)
59 +
60 ## Keep in mind
61 1. **Agent Zero can be dangerous!**
56 -With proper instruction, Agent Zero is capable of many things, even potentially dangerous to your computer, data, or accounts. Always run Agent Zero in an isolated environment (like the built in docker container) and be careful what you wish for.
62 +With proper instruction, Agent Zero is capable of many things, even potentially dangerous to your computer, data, or accounts. Always run Agent Zero in an isolated environment (like the one provided with Docker) and be careful what you wish for.
63
64 2. **Agent Zero is not pre-programmed; it is prompt-based.**
65 The whole framework contains only a minimal amount of code and does not guide the agent in any way.
@@ -64,26 +70,63 @@ If your agent fails to communicate properly, use tools, reason, use memory, find
70 Agent Zero is made to be used in an isolated virtual environment (for safety) with some tools preinstalled and configured.
71 If you cannot provide all the necessary conditions or API keys, just change the system prompt and tell your agent what operating system and tools are at its disposal. Nothing is hard-coded; if you do not tell your agent about a certain tool, it will not know about it and will not try to use it.
72
67 -
73 [![David Ondrej video](/docs/res/david_vid.jpg)](https://www.youtube.com/watch?v=_Pionjv4hGc)
74
75 ## Known problems
76 1. The system prompt sucks. You can do better. If you do, help me please :)
72 -2. The communication between agent and terminal in docker container via SSH can sometimes break and stop producing outputs. Sometimes it is because the agent runs something like "server.serve_forever()" which causes the terminal to hang, sometimes a random error can occur. Restarting the agent and/or the docker container helps.
73 -3. The agent can break his operating system. Sometimes the agent can deactivate virtual environment, uninstall packages, change config etc. Again, removing the docker container and cleaning up the **work_dir/** is enough to fix that.
77 +2. The communication between agents and terminal in Docker Container via SSH can sometimes break and stop producing outputs. Sometimes it is because the agent runs something like "server.serve_forever()" which causes the terminal to hang, sometimes a random error can occur. Restarting the agent and/or the Docker container helps.
78 +3. The agent can break his operating system. Sometimes the agent can deactivate virtual environment, uninstall packages, change config etc. Again, removing the Docker container and cleaning up the **work_dir/** is enough to fix that.
79
80 ## Ideal environment
76 -- **Docker container**: The perfect environment to run Agent Zero is the built-in docker container. The agent can download the image **frdel/agent-zero-exe** on its own and start the container, you only need to have docker running (like the Docker Desktop application).
81 +- **Docker container**: The perfect environment to run Agent Zero is the built-in Docker container. The agent can download the image **frdel/agent-zero-exe** on its own and start the container, you only need to have Docker running (like the Docker Desktop application).
82 - **Python**: Python has to be installed on the system to run the framework.
83 - **Internet access**: The agent will need internet access to use its online knowledge tool and execute commands and scripts requiring a connection. If you do not need your agent to be online, you can alter its prompts in the **prompts/** folder and make it fully local.
84
85 ![Time example](/docs/res/time_example.jpg)
86
87 ## Setup
83 -
84 -A detailed setup guide with a video can be found here: [/docs/installation](https://github.com/frdel/agent-zero/tree/main/docs/installation). Scroll down to see the readme file.
85 -
86 -> ⚠️ **Changes to launch files since v0.6:**
87 -> main.py file has been replaced with run_ui.py (webui) and run_cli.py (terminal) launch files.
88 -> configuration has been moved to initialize.py for both webui and terminal launch files.
89 -
88 +A detailed setup guide for Windows, macOS and Linux with a video can be found in the new Agent Zero Documentation at [this page](docs/installation.md#windows-macos-and-linux-setup-guide).
89 +
90 +You can download the executable for your system from the [releases page](https://github.com/frdel/agent-zero/releases).
91 +
92 +## Consult the Documentation
93 +The documentation dives deep into the framework and its features. It is a good place to start if you are new to Agent Zero. Click [here](docs/README.md) to see the Documentation.
94 +
95 +## Coming up
96 +- **User interaction refinements**
97 +- **Browser use and RAG tools**
98 +
99 +### Changelog [since version 0.7]
100 +
101 +#### v0.7.1
102 +- **Preinstalled binaries and bundler scripts**
103 +- **Persistent Chats** - Serialized to /tmp/chats and automatically loaded in run_ui.py on startup
104 +- **Documentation stack merged into the repository**
105 +- **Bug Fixes**
106 +
107 +> [!NOTE]
108 +> **Changes to frdel/agent-zero Docker image since v0.8:**
109 +> - In version 0.8, the Docker image has changed to frdel/agent-zero-run using the new Dockerfile.
110 +
111 +#### v0.8
112 +- **Docker runtime**
113 +- **New messages history and summarization system**
114 +- **Agent behavior change and management**
115 +- **Text-to-Speech (TTS) and Speech-to-Text (STT)**
116 +- **Settings page in Web UI**
117 +- **SearXNG integration replacing Perplexity + DuckDuckGo knowledge_tool**
118 +- **File browser functionality**
119 +- **KaTeX math visualization support**
120 +- **In-chat file attachments**
121 +
122 +#### v0.7
123 +- **Automatic memory**
124 +- **UI improvements**
125 +- **Instruments**
126 +- **Extensions framework**
127 +- **Reflection prompts**
128 +- **Bugfixes**
129 +
130 +> [!NOTE]
131 +> **Changes to launch files since v0.7:**
132 +> - the Docker image has been changed to frdel/agent-zero-run from the legacy installation process.
\ No newline at end of file
knowledge/default/main/about/installation.md
+459 -73
@@ -1,95 +1,371 @@
1 -# How to install Agent Zero on Windows and MacOS
2 -- Agent Zero is not an app. It's a framework. It's made to be customized, edited, enhanced. Therefore you need to install the necessary components to run it.
3 -- I will provide step by step instructions along with a video for this tutorial on how to make Agent Zero work on Windows and MacOS.
1 +# Users installation guide for Windows, macOS and Linux
2
5 -[![Video](thumb_play.png)](https://youtu.be/8H7mFsvxKYQ)
3 +[![Setup Guide](res/setup/thumb_setup.png)](https://www.youtube.com/watch?v=wWAqJpl3uQE)
4
7 -## Reminders:
8 -1. You don't need to install Python, Conda will take care of that for you.
9 -2. You don't need API keys, Agent Zero can run with local models, but for this tutorial I will leave it to the default OpenAI API. Local models will be covered in another tutorial.
10 -3. You don't need Visual Studio Code or any other code editor, but it's easier to navigate and edit files if you have one.
11 -4. Docker is not mandatory, but running Agent Zero without docker is actually more complicated and can be very dangerous, so I will be showing the easier and recommended way to do it - with Docker Desktop application.
12 -5. Git/Github is not mandatory, you can download the framework files in browser. I will not be showing how to use Git in this tutorial.
5 +The following user guide provides instructions for installing and running Agent Zero using Docker, which is the primary runtime environment for the framework. For developers and contributors, we also provide instructions for setting up the [full development environment](#in-depth-guide-for-full-binaries-installation).
6
7 +### Maybe you're looking for this? 👉[How to update Agent Zero](#how-to-update-agent-zero)
8
15 -## 1. Install Conda (miniconda)
16 -- Conda is a python environment manager, it will help you keep your projects and installations separated. Full Conda has many more features, but you only need "miniconda".
9 +## Windows, macOS and Linux Setup Guide
10
18 -1. Go to the download page of miniconda [here](https://docs.anaconda.com/miniconda/#miniconda-latest-installer-links). If the link does not work, just search the web for "miniconda download".
19 -2. Based on your operating system, download the right installer of miniconda. For MacOS select the version with "pkg" at the end.
11 +1. **Install Docker Desktop:**
12 +- Docker Desktop provides the runtime environment for Agent Zero, ensuring consistent behavior and security across platforms
13 +- The entire framework runs within a Docker container, providing isolation and easy deployment
14 +- Available as a user-friendly GUI application for all major operating systems
15
21 -<img src="image-1.png" alt="miniconda download win" width="500"/>
22 -<img src="image-5.png" alt="miniconda download macos" width="500"/>
23 -<br><br>
16 +1.1. Go to the download page of Docker Desktop [here](https://www.docker.com/products/docker-desktop/). If the link does not work, just search the web for "docker desktop download".
17
25 -3. Run the installer and go through the installation process, here you can leave everything to default and just click Next, Next... The same goes for MacOS with the "pkg" graphical installer.
18 +1.2. Download the version for your operating system. For Windows users, the Intel/AMD version is the main download button.
19
27 -<img src="image.png" alt="miniconda install" width="200"/>
28 -<img src="image-2.png" alt="miniconda install" width="200"/>
29 -<img src="image-3.png" alt="miniconda install" width="200"/>
30 -<img src="image-4.png" alt="miniconda install" width="200"/>
20 +<img src="res/setup/image-8.png" alt="docker download" width="200"/>
21 <br><br>
22
33 -4. After the installation is complete, you should have "Anaconda Powershell Prompt" installed on your Windows machine. On MacOS, when you open the Terminal application in your Applications folder and type "conda --version", you should see the version installed.
23 +> [!NOTE]
24 +> **Linux Users:** You can install either Docker Desktop or docker-ce (Community Edition).
25 +> For Docker Desktop, follow the instructions for your specific Linux distribution [here](https://docs.docker.com/desktop/install/linux-install/).
26 +> For docker-ce, follow the instructions [here](https://docs.docker.com/engine/install/).
27 +>
28 +> If you're using docker-ce, you'll need to add your user to the `docker` group:
29 +> ```bash
30 +> sudo usermod -aG docker $USER
31 +> ```
32 +> Log out and back in, then run:
33 +> ```bash
34 +> docker login
35 +> ```
36 +
37 +1.3. Run the installer with default settings. On macOS, drag and drop the application to your Applications folder.
38 +
39 +<img src="res/setup/image-9.png" alt="docker install" width="300"/>
40 +<img src="res/setup/image-10.png" alt="docker install" width="300"/>
41 +
42 +<img src="res/setup/image-12.png" alt="docker install" width="300"/>
43 +<br><br>
44
35 -<img src="image-6.png" alt="miniconda installed" height="100"/>
36 -<img src="image-7.png" alt="miniconda installed" height="100"/>
45 +1.4. Once installed, launch Docker Desktop:
46 +
47 +<img src="res/setup/image-11.png" alt="docker installed" height="100"/>
48 +<img src="res/setup/image-13.png" alt="docker installed" height="100"/>
49 <br><br>
50
39 -## 2. Install Docker (Docker Desktop application)
40 -- Simply put, Docker is a way of running virtual computers on your machine. These are lightweight, disposable and isolated from your operating system, so it is a way to sandbox Agent Zero.
41 -- Agent Zero only connects to the Docker container when it needs to execute code and commands. The frameworks itself runs on your machine.
42 -- Running Agent Zero without docker is possible, but more complicated and dangerous, I will not be covering that in this tutorial.
43 -- Docker has a desktop application with GUI for all major operating system, so I will be using that.
51 +1.5. Create a Docker Hub account when prompted and sign in. This is required to pull the Agent Zero container image.
52
45 -1. Go to the download page of Docker Desktop [here](https://www.docker.com/products/docker-desktop/). If the link does not work, just search the web for "docker desktop download".
46 -2. Download the version for your operating system. Don't be tricked by the seemingly missing windows intel/amd version, it's the button itself, not in the dropdown menu.
53 +> [!IMPORTANT]
54 +> **macOS Configuration:** In Docker Desktop's preferences (Docker menu) → Settings →
55 +> Advanced, enable "Allow the default Docker socket to be used (requires password)."
56
48 -<img src="image-8.png" alt="docker download" width="200"/>
49 -<br><br>
57 +![docker socket macOS](res/setup/macsocket.png)
58 +
59 +2. **Run Agent Zero:**
60 +
61 +2.1. Pull the Agent Zero Docker image:
62 +- Search for `frdel/agent-zero-run` in Docker Desktop
63 +- Click the `Pull` button
64 +- The image will be downloaded to your machine in a few minutes
65 +
66 +![docker pull](res/setup/1-docker-image-search.png)
67 +
68 +> [!TIP]
69 +> Alternatively, run the following command in your terminal:
70 +>
71 +> ```bash
72 +> docker pull frdel/agent-zero-run
73 +> ```
74 +
75 +2.2. Create a data directory for persistence:
76 +- Choose or create a directory on your machine where you want to store Agent Zero's data
77 +- This can be any location you prefer (e.g., `C:/agent-zero-data` or `/home/user/agent-zero-data`)
78 +- This directory will contain all your Agent Zero files, like the legacy root folder structure:
79 + - `/memory` - Agent's memory and learned information
80 + - `/knowledge` - Knowledge base
81 + - `/instruments` - Instruments and functions
82 + - `/prompts` - Prompt files
83 + - `/work_dir` - Working directory
84 + - `.env` - Your API keys
85 + - `settings.json` - Your Agent Zero settings
86 +
87 +> [!TIP]
88 +> Choose a location that's easy to access and backup. All your Agent Zero data
89 +> will be directly accessible in this directory.
90 +
91 +2.3. Run the container:
92 +- In Docker Desktop, go back to the "Images" tab
93 +- Click the `Run` button next to the `frdel/agent-zero-run` image
94 +- Open the "Optional settings" menu
95 +- Set the port to `0` in the second "Host port" field (for automatic port assignment)
96 +- Under "Volumes", configure:
97 + - Host path: Your chosen directory (e.g., `C:\agent-zero-data`)
98 + - Container path: `/a0`
99
51 -3. Run the installer and go through the installattion process. It should be even shorter than Conda installation, you can leave everything to default. On MacOS, the installer is a "dmg" image, so just drag and drop the application to your Applications folder like always.
100 +![docker port mapping](res/setup/3-docker-port-mapping.png)
101 +
102 +- Click the `Run` button in the "Images" tab.
103 +- The container will start and show in the "Containers" tab
104 +
105 +![docker containers](res/setup/4-docker-container-started.png)
106 +
107 +> [!TIP]
108 +> Alternatively, run the following command in your terminal:
109 +> ```bash
110 +> docker run -p $PORT:80 -v /path/to/your/data:/a0 frdel/agent-zero-run
111 +> ```
112 +> - Replace `$PORT` with the port you want to use (e.g., `50080`)
113 +> - Replace `/path/to/your/data` with your chosen directory path
114 +
115 +2.4. Access the Web UI:
116 +- The framework will take a few seconds to initialize and the Docker logs will look like the image below.
117 +- Find the mapped port in Docker Desktop (shown as `<PORT>:80`) or click the port right under the container ID as shown in the image below
118 +
119 +![docker logs](res/setup/5-docker-click-to-open.png)
120 +
121 +- Open `http://localhost:<PORT>` in your browser
122 +- The Web UI will open. Agent Zero is ready for configuration!
123 +
124 +![docker ui](res/setup/6-docker-a0-running.png)
125 +
126 +> [!TIP]
127 +> You can also access the Web UI by clicking the ports right under the container ID in Docker Desktop.
128 +
129 +> [!NOTE]
130 +> After starting the container, you'll find all Agent Zero files in your chosen
131 +> directory. You can access and edit these files directly on your machine, and
132 +> the changes will be immediately reflected in the running container.
133 +
134 +3. Configure Agent Zero
135 +- Refer to the following sections for a full guide on how to configure Agent Zero.
136 +
137 +## Settings Configuration
138 +Agent Zero provides a comprehensive settings interface to customize various aspects of its functionality. Access the settings by clicking the "Settings"button with a gear icon in the sidebar.
139 +
140 +### Agent Configuration
141 +- **Prompts Subdirectory:** Choose the subdirectory within `/prompts` for agent behavior customization. The 'default' directory contains the standard prompts.
142 +- **Memory Subdirectory:** Select the subdirectory for agent memory storage, allowing separation between different instances.
143 +- **Knowledge Subdirectory:** Specify the location of custom knowledge files to enhance the agent's understanding.
144 +
145 +![settings](res/setup/settings/1-agentConfig.png)
146 +
147 +### Chat Model Settings
148 +- **Provider:** Select the chat model provider (e.g., Ollama)
149 +- **Model Name:** Choose the specific model (e.g., llama3.2)
150 +- **Temperature:** Adjust response randomness (0 for deterministic, higher values for more creative responses)
151 +- **Context Length:** Set the maximum token limit for context window
152 +- **Context Window Space:** Configure how much of the context window is dedicated to chat history
153 +
154 +![chat model settings](res/setup/settings/2-chat-model.png)
155 +
156 +### Utility Model Configuration
157 +- **Provider & Model:** Select a smaller, faster model for utility tasks like memory organization and summarization
158 +- **Temperature:** Adjust the determinism of utility responses
159 +
160 +### Embedding Model Settings
161 +- **Provider:** Choose the embedding model provider (e.g., OpenAI)
162 +- **Model Name:** Select the specific embedding model (e.g., text-embedding-3-small)
163 +
164 +### Speech to Text Options
165 +- **Model Size:** Choose the speech recognition model size
166 +- **Language Code:** Set the primary language for voice recognition
167 +- **Silence Settings:** Configure silence threshold, duration, and timeout parameters for voice input
168 +
169 +### API Keys
170 +- Configure API keys for various service providers
171 +
172 +### Authentication
173 +- **UI Login:** Set username for web interface access
174 +- **UI Password:** Configure password for web interface security
175 +- **Root Password:** Manage Docker container root password for SSH access
176 +
177 +![settings](res/setup/settings/3-auth.png)
178 +
179 +### Development Settings
180 +- **RFC Parameters (local instances only):** configure URLs and ports for remote function calls between instances
181 +- **RFC Password:** Configure password for remote function calls
182 +Learn more about Remote Function Calls and their purpose [here](#7-configure-agent-zero-rfc).
183 +
184 +> [!IMPORTANT]
185 +> Always keep your API keys and passwords secure.
186 +
187 +# Choosing Your LLMs
188 +The Settings page is the control center for selecting the Large Language Models (LLMs) that power Agent Zero. You can choose different LLMs for different roles:
189 +
190 +| LLM Role | Description |
191 +| --- | --- |
192 +| `chat_llm` | This is the primary LLM used for conversations and generating responses. |
193 +| `utility_llm` | This LLM handles internal tasks like summarizing messages, managing memory, and processing internal prompts. Using a smaller, less expensive model here can improve efficiency. |
194 +| `embedding_llm` | This LLM is responsible for generating embeddings used for memory retrieval and knowledge base lookups. Changing the `embedding_llm` will re-index all of A0's memory. |
195 +
196 +**How to Change:**
197 +1. Open Settings page in the Web UI.
198 +2. Change the LLM for each role (Chat model, Utility model, Embedding model).
199 +3. Click "Save" to apply the changes.
200 +
201 +## Important Considerations
202 +
203 +> [!CAUTION]
204 +> Changing the `embedding_llm` will re-index all the memory and knowledge, and
205 +> requires clearing the `memory` folder to avoid errors, as the embeddings can't be
206 +> mixed in the vector database. Note that this will DELETE ALL of Agent Zero's memory.
207 +
208 +- Experiment with different model combinations to find the balance of performance and cost that best suits your needs. E.g., faster and lower latency LLMs will help, and you can also use `faiss_gpu` instead of `faiss_cpu` for the memory.
209 +
210 +## Using Agent Zero on your mobile device
211 +Agent Zero's Web UI is accessible from any device on your network through the Docker container:
212 +
213 +1. The Docker container automatically exposes the Web UI on all network interfaces
214 +2. Find the mapped port in Docker Desktop:
215 + - Look under the container name (usually in the format `<PORT>:80`)
216 + - For example, if you see `32771:80`, your port is `32771`
217 +3. Access the Web UI from any device using:
218 + - Local access: `http://localhost:<PORT>`
219 + - Network access: `http://<YOUR_COMPUTER_IP>:<PORT>`
220 +
221 +> [!TIP]
222 +> - Your computer's IP address is usually in the format `192.168.x.x` or `10.0.x.x`
223 +> - You can find your external IP address by running `ipconfig` (Windows) or `ifconfig` (Linux/Mac)
224 +> - The port is automatically assigned by Docker unless you specify one
225 +
226 +> [!NOTE]
227 +> If you're running Agent Zero directly on your system (legacy approach) instead of
228 +> using Docker, you'll need to configure the host manually in `run_ui.py` to run on all interfaces using `host="0.0.0.0"`.
229 +
230 +For developers or users who need to run Agent Zero directly on their system,see the [In-Depth Guide for Full Binaries Installation](#in-depth-guide-for-full-binaries-installation).
231 +
232 +### How to update Agent Zero
233 +
234 +1. **If you come from the previous version of Agent Zero (pre-0.7.1):**
235 +- Your data is safely stored across various directories and files inside the Agent Zero folder.
236 +- To update to the new Docker runtime version, you need to save the following files and directories:
237 + - `/memory` - Agent's memory
238 + - `/knowledge` - Custom knowledge base
239 + - `/instruments` - Custom instruments and functions
240 + - `/prompts` - Custom prompts files (if any has been created)
241 + - `/work_dir` - Working directory
242 + - `.env` - Your API keys
243 + - `/tmp/settings.json` - Your Agent Zero settings
244 +- Once you have saved these files and directories, you can proceed with the Docker runtime [installation instructions above](#windows-macos-and-linux-setup-guide) setup guide.
245 +- Reach for the folder where you saved your data and copy it to the new Agent Zero folder set during the installation process.
246 +- Agent Zero will automatically detect your saved data and use it across memory, knowledge, instruments, prompts and settings.
247 +
248 +> [!IMPORTANT]
249 +> Make sure to use the same embedding model you were using before, otherwise
250 +> you will have to re-index all of Agent Zero's memory, therefore deleting all
251 +> your custom knowledge and memory.
252 +
253 +> [!NOTE]
254 +> If you have issues loading your settings, you can try to delete the `/tmp/settings.json`
255 +> file and let Agent Zero generate a new one.
256 +
257 +2. **Update Process (Docker Desktop)**
258 +- Go to Docker Desktop and stop the container from the "Containers" tab
259 +- Right-click and select "Remove" to remove the container
260 +- Go to "Images" tab and remove the `frdel/agent-zero-run` image
261 +
262 +![docker delete image](res/setup/docker-delete-image-1.png)
263 +
264 +- Search and pull the new image
265 +- Run the new container with the same volume settings as the old one
266 +
267 +> [!IMPORTANT]
268 +> Make sure to use the same volume mount path when running the new
269 +> container to preserve your data. The exact path depends on where you stored
270 +> your Agent Zero data directory (the chosen directory on your machine).
271 +
272 +> [!TIP]
273 +> Alternatively, run the following commands in your terminal:
274 +>
275 +> ```bash
276 +> # Stop the current container
277 +> docker stop agent-zero
278 +>
279 +> # Remove the container (data is safe in the folder)
280 +> docker rm agent-zero
281 +>
282 +> # Remove the old image
283 +> docker rmi frdel/agent-zero-run
284 +>
285 +> # Pull the latest image
286 +> docker pull frdel/agent-zero-run
287 +>
288 +> # Run new container with the same volume mount
289 +> docker run -p $PORT:80 -v /path/to/your/data:/a0 frdel/agent-zero-run
290 +> ```
291 +
292 +3. **Full Binaries**
293 +- Using Git/GitHub: Pull the latest version of the Agent Zero repository with. The custom knowledge, solutions, memory, and other data will get ignored, so you don't need to worry about losing any of your custom data. The same goes for your .env file with all of your API keys and settings.json.
294 +
295 +> [!WARNING]
296 +> - If you update manually, beware: save your .env file with the API keys, and look for new dependencies in requirements.txt.
297 +> - If any changes are made to the requirements of the updated version, you have to execute this command inside the a0 conda env after activating it:
298 +> ```bash
299 +> pip install -r requirements.txt
300 +
301 +# In-Depth Guide for Full Binaries Installation
302 +- Agent Zero is a framework. It's made to be customized, edited, enhanced. Therefore you need to install the necessary components to run it when downloading its full binaries. This guide will help you to do so.
303 +- The following step by step instructions can be followed along with a video for this tutorial on how to make Agent Zero work with its full development environment.
304 +
305 +[![Video](res/setup/thumb_play.png)](https://youtu.be/8H7mFsvxKYQ)
306 +
307 +## Reminders:
308 +1. There's no need to install Python, Conda will manage that for you.
309 +2. You don't necessarily need API keys: Agent Zero can run with local models. For this tutorial though, we will leave it to the default OpenAI API. A guide for downloading Ollama along with local models is available [here](#installing-and-using-ollama-local-models).
310 +3. Visual Studio Code or any other code editor is not mandatory, but it makes it easier to navigate and edit files.
311 +4. Git/GitHub is not mandatory, you can download the framework files through your browser. We will not be showing how to use Git in this tutorial.
312 +5. Docker is not mandatory for the full binaries installation, since the framework will run on your machine connecting to the Docker container through the Web UI RFC functionality.
313 +6. Running Agent Zero without Docker makes the process more complicated and it's thought for developers and contributors.
314 +
315 +> [!IMPORTANT]
316 +> Linux instructions are provided as general instructions for any Linux distribution. If you're using a distribution other than Debian/Ubuntu, you may need to adjust the instructions accordingly.
317 +>
318 +> For Debian/Ubuntu, just follow the macOS instructions, as they are the same.
319 +
320 +## 1. Install Conda (miniconda)
321 +- Conda is a Python environment manager, it will help you keep your projects and installations separated.
322 +- It's a lightweight version of Anaconda that includes only conda, Python, the packages they depend on, and a small number of other useful packages, including pip, zlib and a few others.
323
53 -<img src="image-9.png" alt="docker install" width="300"/>
54 -<img src="image-10.png" alt="docker install" width="300"/>
324 +1. Go to the download page of miniconda [here](https://docs.anaconda.com/miniconda/#miniconda-latest-installer-links). If the link does not work, just search the web for "miniconda download".
325 +2. Based on your operating system, download the right installer of miniconda. For macOS select the version with "pkg" at the end.
326
56 -<img src="image-12.png" alt="docker install" width="300"/>
327 +<img src="res/setup/image-1.png" alt="miniconda download win" width="500"/>
328 +<img src="res/setup/image-5.png" alt="miniconda download macos" width="500"/>
329 <br><br>
330
331 +3. Run the installer and go through the installation process, here you can leave everything to default and just click Next, Next... The same goes for macOS with the "pkg" graphical installer.
332
60 -4. Once installed, you should see Docker Desktop application on your Windows/Mac machine.
333 +<img src="res/setup/image.png" alt="miniconda install" width="200"/>
334 +<img src="res/setup/image-2.png" alt="miniconda install" width="200"/>
335 +<img src="res/setup/image-3.png" alt="miniconda install" width="200"/>
336 +<img src="res/setup/image-4.png" alt="miniconda install" width="200"/>
337 +<br><br>
338
62 -<img src="image-11.png" alt="docker installed" height="100"/>
63 -<img src="image-13.png" alt="docker installed" height="100"/>
339 +4. After the installation is complete, you should have "Anaconda Powershell Prompt" installed on your Windows machine. On macOS, when you open the Terminal application in your Applications folder and type "conda --version", you should see the version installed.
340 +
341 +<img src="res/setup/image-6.png" alt="miniconda installed" height="100"/>
342 +<img src="res/setup/image-7.png" alt="miniconda installed" height="100"/>
343 <br><br>
344
66 -5. Create account in the application.
67 -No need to create images or containers, the framework will do that for you. However, this requires you to be signed in to the Docker Hub, so create a free account in the Docker Desktop application, you will be prompted when the application first runs.
345
69 -## 3. Download Agent Zero
70 -- You can clone the Agent Zero repository (https://github.com/frdel/agent-zero) from GitHub if you know how to use git. In this tutorial I will just show how to download the files.
346 +## 2. Download Agent Zero
347 +- You can clone the Agent Zero repository (https://github.com/frdel/agent-zero) from GitHub if you know how to use Git. In this tutorial I will just show how to download the files.
348
349 1. Go to the Agent Zero releases [here](https://github.com/frdel/agent-zero/releases).
350 2. The latest release is on the top of the list, click the "Source Code (zip)" button under "Assets" to download it.
351
75 -<img src="image-14.png" alt="agent zero download" width="500"/>
352 +<img src="res/setup/image-14-u.png" alt="agent zero download" width="500"/>
353 <br><br>
354
78 -3. Extract the downloaded archive where you want to have it. I will extract them to "agent-zero" folder on my Desktop - "C:\Users\frdel\Desktop\agent-zero" on Windows and "/Users/frdel/Desktop/agent-zero" on MacOS.
355 +3. Extract the downloaded archive where you want to have it. I will extract them to "agent-zero" folder on my Desktop - "C:\Users\frdel\Desktop\agent-zero" on Windows and "/Users/frdel/Desktop/agent-zero" on macOS.
356
80 -
81 -## 4. Set up Conda environment
357 +## 3. Set up Conda environment
358 - Now that we have the project files and Conda, we can create **virtual Python environment** for this project, activate it and install requirements.
359
84 -1. Open your **"Anaconda Powershell Prompt"** application on windows or **"Terminal"** application on MacOS.
360 +1. Open your **"Anaconda Powershell Prompt"** application on windows or **"Terminal"** application on macOS.
361 2. In the terminal, navigate to your Agent Zero folder using **"cd"** command. Replace the path with your actual Agent Zero folder path.
362 ~~~
363 cd C:\Users\frdel\Desktop\agent-zero
364 ~~~
365 You should see your folder has changed on the next terminal line.
366
91 -<img src="image-15.png" alt="agent zero cd" height="100"/>
92 -<img src="image-16.png" alt="agent zero cd" height="100"/>
367 +<img src="res/setup/image-15.png" alt="agent zero cd" height="100"/>
368 +<img src="res/setup/image-16.png" alt="agent zero cd" height="100"/>
369 <br><br>
370
371 3. Create Conda environment using command **"conda create"**. After **"-n"** is your environment name, you can choose your own, i will use **"a0"** - short for Agent Zero. After **"python"** is the Python version that Conda will install for you into this environment, right now, 3.12 works fine. **-y** skips confirmations.
@@ -103,11 +379,13 @@ conda activate a0
379 ~~~
380 And you should see that the **(base)** on the left has changed to **(a0)**. This means that this terminal now uses the new **a0** virtual environment and all packages will be installed into this environment.
381
106 -<img src="image-17.png" alt="conda env" height="200"/>
107 -<img src="image-18.png" alt="conda env" height="200"/>
382 +<img src="res/setup/image-17.png" alt="conda env" height="200"/>
383 +<img src="res/setup/image-18.png" alt="conda env" height="200"/>
384 <br><br>
385
110 -> ⚠️ If you open a new terminal window, you will need to activate the environment with "conda activate a0" again for that window.
386 +> [!IMPORTANT]
387 +> If you open a new terminal window, you will need to activate the environment with
388 +> "conda activate a0" again for that window.
389
390 5. Install requirements using **"pip"**. Pip is a Python package manager. We can install all required packages from requirements.txt file using command:
391 ~~~
@@ -115,40 +393,148 @@ pip install -r requirements.txt
393 ~~~
394 This might take some time. If you get any errors regarding version conflicts and compatibility, double check that your environment is activated and that you created that environment with the correct Python version.
395
118 -<img src="image-19.png" alt="conda reqs" height="200"/>
396 +<img src="res/setup/image-19.png" alt="conda reqs" height="200"/>
397 <br><br>
398
121 -## 5. Configure Agent Zero
122 -- Now we can configure Agent Zero - select models, settings, API Keys etc.
123 -- I will leave the default configuration using OpenAI API and I will just provide my OpenAI API key in the **.env** file.
399 +## 4. Install Docker (Docker Desktop application)
400 +Simply put, Docker is a way of running virtual computers on your machine. These are lightweight, disposable and isolated from your operating system, so it is a way to sandbox Agent Zero.
401 +- Agent Zero only connects to the Docker container when it needs to execute code and commands. The frameworks itself runs on your machine.
402 +- Docker has a desktop application with GUI for all major operating system, which is the recommended way to install it.
403
125 -1. Find the **"example.env"** file in your Agent Zero folder and edit the contents. I will put my OpenAI API key after **"API_KEY_OPENAI="**. If you have API keys for other service providers, add them as needed.
126 -2. Rename the **"example.env"** file to **".env"**. This is important, only this exact "**.env**" file name is valid.
404 +1. Go to the download page of Docker Desktop [here](https://www.docker.com/products/docker-desktop/). If the link does not work, just search the web for "docker desktop download".
405 +2. Download the version for your operating system. Don't be tricked by the seemingly missing windows intel/amd version, it's the button itself, not in the dropdown menu.
406
128 -<img src="image-20.png" alt="conda reqs" height="200"/>
407 +<img src="res/setup/image-8.png" alt="docker download" width="200"/>
408 <br><br>
409
131 -3. (Optional) Change models or setting in **"initialize.py"** file if needed.
410 +3. Run the installer and go through the installation process. It should be even shorter than Conda installation, you can leave everything to default. On macOS, the installer is a "dmg" image, so just drag and drop the application to your Applications folder like always.
411
133 -## 6. Run Agent Zero
134 -- Setup done. It's time to test Agent Zero. Let's double check:
412 +<img src="res/setup/image-9.png" alt="docker install" width="300"/>
413 +<img src="res/setup/image-10.png" alt="docker install" width="300"/>
414
136 -1. Make sure you have the **"a0"** Conda environment still active in your current terminal window. You can see that on the left of each terminal line like **(a0)** or **(base)**. If not, activate again with **"conda activate a0"** command again.
137 -2. Make sure your terminal is looking into the Agent Zero folder. If not, navigate to it with **"cd"** command again with your path.
138 -3. Run the **Docker Desktop application** you installed and just leave it running in the background. No need to create images or containers, the framework will do that for you. However, this requires you to be signed in to the Docker Hub, so sign in in the Docker Desktop application, if you haven't already.
139 -4. Run the Agent Zero with Web UI:
415 +<img src="res/setup/image-12.png" alt="docker install" width="300"/>
416 +<br><br>
417 +
418 +
419 +4. Once installed, you should see Docker Desktop application on your Windows/Mac machine.
420 +
421 +<img src="res/setup/image-11.png" alt="docker installed" height="100"/>
422 +<img src="res/setup/image-13.png" alt="docker installed" height="100"/>
423 +<br><br>
424 +
425 +5. Create account in the application.
426 +- It's required to be signed in to the Docker Hub, so create a free account in the Docker Desktop application, you will be prompted when the application first runs.
427 +
428 +> [!IMPORTANT]
429 +> **Important macOS-only Docker Configuration:** In Docker Desktop's preferences
430 +> (Docker menu) go to Settings, navigate to "Advanced" and check "Allow the default
431 +> Docker socket to be used (requires password)." This allows Agent Zero to
432 +> communicate with the Docker daemon.
433 +
434 +![docker socket macOS](res/setup/macsocket.png)
435 +
436 +> [!NOTE]
437 +> **Linux Users:** You can install both Docker Desktop or docker-ce (Community Edition).
438 +> For Docker Desktop, follow the instructions for your specific Linux distribution [here](https://docs.docker.com/desktop/install/linux-install/).
439 +> For docker-ce, follow the instructions [here](https://docs.docker.com/engine/install/).
440 +>
441 +> If you're using docker-ce, you will need to add your user to the `docker` group to be able to run docker commands without sudo. You can do this by running the following command in your terminal: `sudo usermod -aG docker $USER`. Then log out and log back in for the changes to take effect.
442 +>
443 +> Login in the Docker CLI with `docker login` and provide your Docker Hub credentials.
444 +
445 +6. Pull the Docker image
446 +- Agent Zero needs a Docker image to be pulled from the Docker Hub to be run, even when using the full binaries.
447 +You can refer to the [installation instructions above](#windows-macos-and-linux-setup-guide) to run the Docker container and then resume from the next step. There are two differences:
448 + - You need to map two ports instead of one:
449 + - 55022 in the first field to run the Remote Function Call SSH
450 + - 0 in the second field to run the Web UI in automatic port assignment
451 + - You need to map the `/a0` volume to the location of your local Agent Zero folder.
452 +- Run the Docker container following the instructions.
453 +
454 +## 5. Run the local Agent Zero instance
455 +Run the Agent Zero with Web UI:
456 ~~~
457 python run_ui.py
458 ~~~
459
144 -<img src="image-21.png" alt="run ui" height="200"/>
460 +<img src="res/setup/image-21.png" alt="run ui" height="110"/>
461 <br><br>
462
147 -5. Open the URL shown in terminal in your web browser. You should see the Agent Zero interface. The first time it needs to execute code, Docker image will be downloaded and deployed, this might take some time. Be patient when seeing "Initializing docker container agent-zero-exe for safe code execution...".
463 +- Open the URL shown in terminal in your web browser. You should see the Agent Zero interface.
464
149 -<img src="image-22.png" alt="run ui" width="400"/>
150 -<img src="image-23.png" alt="run ui" width="400"/>
465 +## 6. Configure Agent Zero
466 +Now we can configure Agent Zero - select models, settings, API Keys etc. Refer to the [Usage](usage.md#agent-configuration) guide for a full guide on how to configure Agent Zero.
467 +
468 +## 7. Configure Agent Zero RFC
469 +Agent Zero needs to be configured further to redirect some functions to the Docker container. This is crucial for development as A0 needs to run in a standardized environment to support all features.
470 +1. Go in "Settings" page in the Web UI of your local instance and go in the "Development" section.
471 +2. Set "RFC Destination URL" to `http://localhost`
472 +3. Set the two ports (HTTP and SSH) to the ones used when creating the Docker container
473 +4. Click "Save"
474 +
475 +![rfc local settings](res/setup/9-rfc-devpage-on-local-sbs-1.png)
476 +
477 +5. Go in "Settings" page in the Web UI of your Docker instance and go in the "Development" section.
478 +
479 +![rfc docker settings](res/setup/9-rfc-devpage-on-docker-instance-1.png)
480 +
481 +6. This time the page has only the password field, set it to the same password you used when creating the Docker container.
482 +7. Click "Save"
483 +8. Use the Development environment
484 +9. Now you have the full development environment to work on Agent Zero.
485 +
486 +<img src="res/setup/image-22-1.png" alt="run ui" width="400"/>
487 +<img src="res/setup/image-23-1.png" alt="run ui" width="400"/>
488 <br><br>
489
490 +
491 +### Conclusion
492 +After following the instructions for your specific operating system, you should have Agent Zero successfully installed and running. You can now start exploring the framework's capabilities and experimenting with creating your own intelligent agents.
493 +
494 +If you encounter any issues during the installation process, please consult the [Troubleshooting section](troubleshooting.md) of this documentation or refer to the Agent Zero [Skool](https://www.skool.com/agent-zero) or [Discord](https://discord.gg/Z2tun2N3) community for assistance.
495 +
496 +## Installing and Using Ollama (Local Models)
497 +If you're interested in Ollama, which is a powerful tool that allows you to run various large language models locally, here's how to install and use it:
498 +
499 +#### First step: installation
500 +**On Windows:**
501 +
502 +Download Ollama from the official website and install it on your machine.
503 +
504 +<button>[Download Ollama Setup](https://ollama.com/download/OllamaSetup.exe)</button>
505 +
506 +**On macOS:**
507 +```
508 +brew install ollama
509 +```
510 +Otherwise choose macOS installer from the [official website](https://ollama.com/).
511 +
512 +**On Linux:**
513 +```bash
514 +curl -fsSL https://ollama.com/install.sh | sh
515 +```
516 +
517 +**Finding Model Names:**
518 +Visit the [Ollama model library](https://ollama.com/library) for a list of available models and their corresponding names. The format is usually `provider/model-name` (or just `model-name` in some cases).
519 +
520 +#### Second step: pulling the model
521 +**On Windows, macOS, and Linux:**
522 +```
523 +ollama pull <model-name>
524 +```
525 +
526 +Replace `<model-name>` with the name of the model you want to use. For example, to pull the Mistral Large model, you would use the command `ollama pull mistral-large`.
527
528 +#### Managing your downloaded models
529 +Once you've downloaded some models, you might want to check which ones you have available or remove any you no longer need.
530
531 +- **Listing downloaded models:**
532 + To see a list of all the models you've downloaded, use the command:
533 + ```
534 + ollama list
535 + ```
536 +- **Removing a model:**
537 + If you need to remove a downloaded model, you can use the `ollama rm` command followed by the model name:
538 + ```
539 + ollama rm <model-name>
540 + ```
\ No newline at end of file