From 7d4d683a8fac214a8270e8d6f1fbe043a23abffd Mon Sep 17 00:00:00 2001 From: RayPals Date: Tue, 25 Aug 2026 20:29:05 +0000 Subject: [PATCH] Initial BeeOS simulator and asset pipeline --- .gitignore | 24 + CHANGELOG.md | 46 + README.md | 124 + beeos/__init__.py | 0 beeos/assets/icons/lucide/about.svg | 15 + beeos/assets/icons/lucide/apps.svg | 15 + beeos/assets/icons/lucide/back.svg | 13 + beeos/assets/icons/lucide/battery.svg | 14 + beeos/assets/icons/lucide/bluetooth.svg | 13 + beeos/assets/icons/lucide/clock.svg | 14 + beeos/assets/icons/lucide/developer-tools.svg | 15 + beeos/assets/icons/lucide/display.svg | 21 + beeos/assets/icons/lucide/github.svg | 15 + beeos/assets/icons/lucide/gps.svg | 18 + beeos/assets/icons/lucide/health.svg | 14 + beeos/assets/icons/lucide/hivestore.svg | 15 + beeos/assets/icons/lucide/home.svg | 14 + beeos/assets/icons/lucide/install.svg | 15 + beeos/assets/icons/lucide/manifest.json | 195 + beeos/assets/icons/lucide/notifications.svg | 14 + beeos/assets/icons/lucide/package.svg | 16 + beeos/assets/icons/lucide/permissions.svg | 14 + beeos/assets/icons/lucide/plugin.svg | 13 + beeos/assets/icons/lucide/plugins.svg | 13 + beeos/assets/icons/lucide/quick-tools.svg | 13 + beeos/assets/icons/lucide/remove.svg | 17 + .../assets/icons/lucide/resource-monitor.svg | 13 + beeos/assets/icons/lucide/retro-clock.svg | 14 + beeos/assets/icons/lucide/runtime.svg | 13 + beeos/assets/icons/lucide/script-run.svg | 13 + beeos/assets/icons/lucide/scripts.svg | 14 + beeos/assets/icons/lucide/search.svg | 14 + beeos/assets/icons/lucide/settings.svg | 14 + beeos/assets/icons/lucide/store.svg | 15 + beeos/assets/icons/lucide/theme.svg | 15 + beeos/assets/icons/lucide/themes.svg | 17 + beeos/assets/icons/lucide/touch.svg | 17 + beeos/assets/icons/lucide/vibration.svg | 13 + beeos/assets/icons/lucide/watch-face.svg | 16 + beeos/assets/icons/lucide/weather.svg | 18 + beeos/assets/icons/lucide_png/18/about.png | Bin 0 -> 404 bytes beeos/assets/icons/lucide_png/18/apps.png | Bin 0 -> 278 bytes beeos/assets/icons/lucide_png/18/back.png | Bin 0 -> 165 bytes beeos/assets/icons/lucide_png/18/battery.png | Bin 0 -> 247 bytes .../assets/icons/lucide_png/18/bluetooth.png | Bin 0 -> 301 bytes beeos/assets/icons/lucide_png/18/clock.png | Bin 0 -> 437 bytes .../icons/lucide_png/18/developer-tools.png | Bin 0 -> 290 bytes beeos/assets/icons/lucide_png/18/display.png | Bin 0 -> 302 bytes beeos/assets/icons/lucide_png/18/github.png | Bin 0 -> 296 bytes beeos/assets/icons/lucide_png/18/gps.png | Bin 0 -> 319 bytes beeos/assets/icons/lucide_png/18/health.png | Bin 0 -> 468 bytes .../assets/icons/lucide_png/18/hivestore.png | Bin 0 -> 389 bytes beeos/assets/icons/lucide_png/18/home.png | Bin 0 -> 357 bytes beeos/assets/icons/lucide_png/18/install.png | Bin 0 -> 291 bytes .../icons/lucide_png/18/notifications.png | Bin 0 -> 358 bytes beeos/assets/icons/lucide_png/18/package.png | Bin 0 -> 436 bytes .../icons/lucide_png/18/permissions.png | Bin 0 -> 391 bytes beeos/assets/icons/lucide_png/18/plugin.png | Bin 0 -> 467 bytes beeos/assets/icons/lucide_png/18/plugins.png | Bin 0 -> 467 bytes .../icons/lucide_png/18/quick-tools.png | Bin 0 -> 379 bytes beeos/assets/icons/lucide_png/18/remove.png | Bin 0 -> 364 bytes .../icons/lucide_png/18/resource-monitor.png | Bin 0 -> 348 bytes .../icons/lucide_png/18/retro-clock.png | Bin 0 -> 419 bytes beeos/assets/icons/lucide_png/18/runtime.png | Bin 0 -> 397 bytes .../assets/icons/lucide_png/18/script-run.png | Bin 0 -> 292 bytes beeos/assets/icons/lucide_png/18/scripts.png | Bin 0 -> 199 bytes beeos/assets/icons/lucide_png/18/search.png | Bin 0 -> 359 bytes beeos/assets/icons/lucide_png/18/settings.png | Bin 0 -> 434 bytes beeos/assets/icons/lucide_png/18/store.png | Bin 0 -> 389 bytes beeos/assets/icons/lucide_png/18/theme.png | Bin 0 -> 407 bytes beeos/assets/icons/lucide_png/18/themes.png | Bin 0 -> 474 bytes beeos/assets/icons/lucide_png/18/touch.png | Bin 0 -> 395 bytes .../assets/icons/lucide_png/18/vibration.png | Bin 0 -> 363 bytes .../assets/icons/lucide_png/18/watch-face.png | Bin 0 -> 401 bytes beeos/assets/icons/lucide_png/18/weather.png | Bin 0 -> 421 bytes beeos/assets/icons/lucide_png/24/about.png | Bin 0 -> 498 bytes beeos/assets/icons/lucide_png/24/apps.png | Bin 0 -> 225 bytes beeos/assets/icons/lucide_png/24/back.png | Bin 0 -> 167 bytes beeos/assets/icons/lucide_png/24/battery.png | Bin 0 -> 216 bytes .../assets/icons/lucide_png/24/bluetooth.png | Bin 0 -> 256 bytes beeos/assets/icons/lucide_png/24/clock.png | Bin 0 -> 517 bytes .../icons/lucide_png/24/developer-tools.png | Bin 0 -> 374 bytes beeos/assets/icons/lucide_png/24/display.png | Bin 0 -> 383 bytes beeos/assets/icons/lucide_png/24/github.png | Bin 0 -> 313 bytes beeos/assets/icons/lucide_png/24/gps.png | Bin 0 -> 417 bytes beeos/assets/icons/lucide_png/24/health.png | Bin 0 -> 534 bytes .../assets/icons/lucide_png/24/hivestore.png | Bin 0 -> 366 bytes beeos/assets/icons/lucide_png/24/home.png | Bin 0 -> 339 bytes beeos/assets/icons/lucide_png/24/install.png | Bin 0 -> 256 bytes .../icons/lucide_png/24/notifications.png | Bin 0 -> 405 bytes beeos/assets/icons/lucide_png/24/package.png | Bin 0 -> 473 bytes .../icons/lucide_png/24/permissions.png | Bin 0 -> 463 bytes beeos/assets/icons/lucide_png/24/plugin.png | Bin 0 -> 547 bytes beeos/assets/icons/lucide_png/24/plugins.png | Bin 0 -> 547 bytes .../icons/lucide_png/24/quick-tools.png | Bin 0 -> 428 bytes beeos/assets/icons/lucide_png/24/remove.png | Bin 0 -> 240 bytes .../icons/lucide_png/24/resource-monitor.png | Bin 0 -> 420 bytes .../icons/lucide_png/24/retro-clock.png | Bin 0 -> 488 bytes beeos/assets/icons/lucide_png/24/runtime.png | Bin 0 -> 384 bytes .../assets/icons/lucide_png/24/script-run.png | Bin 0 -> 322 bytes beeos/assets/icons/lucide_png/24/scripts.png | Bin 0 -> 175 bytes beeos/assets/icons/lucide_png/24/search.png | Bin 0 -> 427 bytes beeos/assets/icons/lucide_png/24/settings.png | Bin 0 -> 576 bytes beeos/assets/icons/lucide_png/24/store.png | Bin 0 -> 366 bytes beeos/assets/icons/lucide_png/24/theme.png | Bin 0 -> 488 bytes beeos/assets/icons/lucide_png/24/themes.png | Bin 0 -> 534 bytes beeos/assets/icons/lucide_png/24/touch.png | Bin 0 -> 463 bytes .../assets/icons/lucide_png/24/vibration.png | Bin 0 -> 259 bytes .../assets/icons/lucide_png/24/watch-face.png | Bin 0 -> 502 bytes beeos/assets/icons/lucide_png/24/weather.png | Bin 0 -> 462 bytes beeos/assets/icons/lucide_png/34/about.png | Bin 0 -> 760 bytes beeos/assets/icons/lucide_png/34/apps.png | Bin 0 -> 476 bytes beeos/assets/icons/lucide_png/34/back.png | Bin 0 -> 191 bytes beeos/assets/icons/lucide_png/34/battery.png | Bin 0 -> 419 bytes .../assets/icons/lucide_png/34/bluetooth.png | Bin 0 -> 483 bytes beeos/assets/icons/lucide_png/34/clock.png | Bin 0 -> 808 bytes .../icons/lucide_png/34/developer-tools.png | Bin 0 -> 478 bytes beeos/assets/icons/lucide_png/34/display.png | Bin 0 -> 616 bytes beeos/assets/icons/lucide_png/34/github.png | Bin 0 -> 518 bytes beeos/assets/icons/lucide_png/34/gps.png | Bin 0 -> 751 bytes beeos/assets/icons/lucide_png/34/health.png | Bin 0 -> 807 bytes .../assets/icons/lucide_png/34/hivestore.png | Bin 0 -> 658 bytes beeos/assets/icons/lucide_png/34/home.png | Bin 0 -> 613 bytes beeos/assets/icons/lucide_png/34/install.png | Bin 0 -> 462 bytes .../icons/lucide_png/34/notifications.png | Bin 0 -> 693 bytes beeos/assets/icons/lucide_png/34/package.png | Bin 0 -> 748 bytes .../icons/lucide_png/34/permissions.png | Bin 0 -> 732 bytes beeos/assets/icons/lucide_png/34/plugin.png | Bin 0 -> 911 bytes beeos/assets/icons/lucide_png/34/plugins.png | Bin 0 -> 911 bytes .../icons/lucide_png/34/quick-tools.png | Bin 0 -> 634 bytes beeos/assets/icons/lucide_png/34/remove.png | Bin 0 -> 565 bytes .../icons/lucide_png/34/resource-monitor.png | Bin 0 -> 645 bytes .../icons/lucide_png/34/retro-clock.png | Bin 0 -> 782 bytes beeos/assets/icons/lucide_png/34/runtime.png | Bin 0 -> 701 bytes .../assets/icons/lucide_png/34/script-run.png | Bin 0 -> 633 bytes beeos/assets/icons/lucide_png/34/scripts.png | Bin 0 -> 317 bytes beeos/assets/icons/lucide_png/34/search.png | Bin 0 -> 683 bytes beeos/assets/icons/lucide_png/34/settings.png | Bin 0 -> 949 bytes beeos/assets/icons/lucide_png/34/store.png | Bin 0 -> 658 bytes beeos/assets/icons/lucide_png/34/theme.png | Bin 0 -> 747 bytes beeos/assets/icons/lucide_png/34/themes.png | Bin 0 -> 973 bytes beeos/assets/icons/lucide_png/34/touch.png | Bin 0 -> 689 bytes .../assets/icons/lucide_png/34/vibration.png | Bin 0 -> 635 bytes .../assets/icons/lucide_png/34/watch-face.png | Bin 0 -> 789 bytes beeos/assets/icons/lucide_png/34/weather.png | Bin 0 -> 782 bytes beeos/assets/icons/lucide_png/48/about.png | Bin 0 -> 1016 bytes beeos/assets/icons/lucide_png/48/apps.png | Bin 0 -> 386 bytes beeos/assets/icons/lucide_png/48/back.png | Bin 0 -> 235 bytes beeos/assets/icons/lucide_png/48/battery.png | Bin 0 -> 390 bytes .../assets/icons/lucide_png/48/bluetooth.png | Bin 0 -> 416 bytes beeos/assets/icons/lucide_png/48/clock.png | Bin 0 -> 1066 bytes .../icons/lucide_png/48/developer-tools.png | Bin 0 -> 562 bytes beeos/assets/icons/lucide_png/48/display.png | Bin 0 -> 696 bytes beeos/assets/icons/lucide_png/48/github.png | Bin 0 -> 620 bytes beeos/assets/icons/lucide_png/48/gps.png | Bin 0 -> 952 bytes beeos/assets/icons/lucide_png/48/health.png | Bin 0 -> 1086 bytes .../assets/icons/lucide_png/48/hivestore.png | Bin 0 -> 719 bytes beeos/assets/icons/lucide_png/48/home.png | Bin 0 -> 683 bytes beeos/assets/icons/lucide_png/48/install.png | Bin 0 -> 484 bytes .../icons/lucide_png/48/notifications.png | Bin 0 -> 861 bytes beeos/assets/icons/lucide_png/48/package.png | Bin 0 -> 874 bytes .../icons/lucide_png/48/permissions.png | Bin 0 -> 917 bytes beeos/assets/icons/lucide_png/48/plugin.png | Bin 0 -> 1117 bytes beeos/assets/icons/lucide_png/48/plugins.png | Bin 0 -> 1117 bytes .../icons/lucide_png/48/quick-tools.png | Bin 0 -> 803 bytes beeos/assets/icons/lucide_png/48/remove.png | Bin 0 -> 486 bytes .../icons/lucide_png/48/resource-monitor.png | Bin 0 -> 792 bytes .../icons/lucide_png/48/retro-clock.png | Bin 0 -> 1020 bytes beeos/assets/icons/lucide_png/48/runtime.png | Bin 0 -> 831 bytes .../assets/icons/lucide_png/48/script-run.png | Bin 0 -> 629 bytes beeos/assets/icons/lucide_png/48/scripts.png | Bin 0 -> 273 bytes beeos/assets/icons/lucide_png/48/search.png | Bin 0 -> 857 bytes beeos/assets/icons/lucide_png/48/settings.png | Bin 0 -> 1278 bytes beeos/assets/icons/lucide_png/48/store.png | Bin 0 -> 719 bytes beeos/assets/icons/lucide_png/48/theme.png | Bin 0 -> 1019 bytes beeos/assets/icons/lucide_png/48/themes.png | Bin 0 -> 1108 bytes beeos/assets/icons/lucide_png/48/touch.png | Bin 0 -> 948 bytes .../assets/icons/lucide_png/48/vibration.png | Bin 0 -> 546 bytes .../assets/icons/lucide_png/48/watch-face.png | Bin 0 -> 1023 bytes beeos/assets/icons/lucide_png/48/weather.png | Bin 0 -> 907 bytes beeos/assets/logo.jpg | Bin 0 -> 33581 bytes beeos/core/__init__.py | 0 beeos/core/app_registry.py | 71 + beeos/core/asset_build.py | 46 + beeos/core/hivestore.py | 84 + beeos/core/hivestore_sources.py | 144 + beeos/core/icon_manager.py | 86 + beeos/core/models.py | 43 + beeos/core/navigation.py | 18 + beeos/core/package_manager.py | 142 + beeos/core/package_manifest.py | 68 + beeos/core/permission_manager.py | 54 + beeos/core/permissions.py | 22 + beeos/core/plugin_manager.py | 32 + beeos/core/runtime_api.py | 404 + beeos/core/state.py | 69 + beeos/core/theme.py | 41 + beeos/core/theme_manager.py | 55 + beeos/core/update_manager.py | 43 + beeos/core/watchfaces.py | 15 + beeos/data/community_hivestore_index.json | 45 + beeos/data/hivestore_index.json | 120 + beeos/data/hivestore_sources.json | 23 + beeos/data/installed_packages.json | 3 + beeos/data/permission_approvals.json | 3 + beeos/data/settings.json | 5 + beeos/data/themes.json | 41 + .../icons/bitmap_json/beeos_icons_24.json | 3680 ++++++++ .../icons/bitmap_json/beeos_icons_34.json | 7460 +++++++++++++++++ beeos/generated/icons/icon_build_index.json | 25 + beeos/generated/icons/lvgl/beeos_icons_24.c | 1 + beeos/generated/icons/lvgl/beeos_icons_24.h | 1 + beeos/generated/icons/lvgl/beeos_icons_34.c | 1 + beeos/generated/icons/lvgl/beeos_icons_34.h | 1 + .../icons/lvgl_v8/beeos_icons_24_lvgl_v8.c | 1 + .../icons/lvgl_v8/beeos_icons_24_lvgl_v8.h | 1 + .../icons/lvgl_v8/beeos_icons_34_lvgl_v8.c | 1 + .../icons/lvgl_v8/beeos_icons_34_lvgl_v8.h | 1 + .../icons/lvgl_v9/beeos_icons_24_lvgl_v9.c | 1 + .../icons/lvgl_v9/beeos_icons_24_lvgl_v9.h | 1 + .../icons/lvgl_v9/beeos_icons_34_lvgl_v9.c | 1 + .../icons/lvgl_v9/beeos_icons_34_lvgl_v9.h | 1 + .../icons/previews/beeos_icons_24_preview.png | Bin 0 -> 38085 bytes .../icons/previews/beeos_icons_34_preview.png | Bin 0 -> 52774 bytes beeos/generated/themes/beeos_themes.c | 1 + beeos/generated/themes/beeos_themes.h | 1 + beeos/generated/themes/beeos_themes.json | 40 + beeos/generated/themes/theme_build_index.json | 8 + beeos/mock/__init__.py | 0 beeos/mock/hardware.py | 14 + beeos/scripts/battery_info.py | 4 + beeos/scripts/cpu_info.py | 3 + beeos/scripts/hello.py | 5 + beeos/scripts/memory_info.py | 4 + beeos/scripts/notification_test.py | 4 + beeos/scripts/sensor_dump.py | 7 + beeos/scripts/uptime_info.py | 3 + beeos/sideload/local.demo.app/app.py | 26 + beeos/sideload/local.demo.app/manifest.json | 18 + .../sideload/local.demo.plugin/manifest.json | 17 + beeos/sideload/local.demo.plugin/plugin.py | 9 + beeos/storage/.gitkeep | 0 beeos/ui/__init__.py | 0 beeos/ui/components.py | 213 + beeos/ui/simulator.py | 1170 +++ docs/DEVELOPMENT.md | 26 + docs/HIVESTORE_REPOS.md | 49 + docs/PROJECT_STRUCTURE.md | 39 + docs/history/PHASE3_NOTES.md | 54 + docs/history/PHASE4_NOTES.md | 55 + docs/history/PHASE5_NOTES.md | 67 + docs/history/PHASE6_NOTES.md | 68 + docs/history/PHASE7_NOTES.md | 43 + docs/history/PHASE8_NOTES.md | 62 + docs/history/PHASE9_NOTES.md | 58 + pyproject.toml | 8 + requirements-dev.txt | 4 + run_beeos.py | 7 + tools/clean_project.py | 30 + tools/convert_icons_for_lvgl.py | 364 + tools/create_hivestore_repo.py | 57 + tools/create_package_template.py | 92 + tools/export_themes_for_lvgl.py | 109 + tools/import_hivestore_repo.py | 73 + tools/validate_project.py | 104 + 265 files changed, 16676 insertions(+) create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 README.md create mode 100644 beeos/__init__.py create mode 100644 beeos/assets/icons/lucide/about.svg create mode 100644 beeos/assets/icons/lucide/apps.svg create mode 100644 beeos/assets/icons/lucide/back.svg create mode 100644 beeos/assets/icons/lucide/battery.svg create mode 100644 beeos/assets/icons/lucide/bluetooth.svg create mode 100644 beeos/assets/icons/lucide/clock.svg create mode 100644 beeos/assets/icons/lucide/developer-tools.svg create mode 100644 beeos/assets/icons/lucide/display.svg create mode 100644 beeos/assets/icons/lucide/github.svg create mode 100644 beeos/assets/icons/lucide/gps.svg create mode 100644 beeos/assets/icons/lucide/health.svg create mode 100644 beeos/assets/icons/lucide/hivestore.svg create mode 100644 beeos/assets/icons/lucide/home.svg create mode 100644 beeos/assets/icons/lucide/install.svg create mode 100644 beeos/assets/icons/lucide/manifest.json create mode 100644 beeos/assets/icons/lucide/notifications.svg create mode 100644 beeos/assets/icons/lucide/package.svg create mode 100644 beeos/assets/icons/lucide/permissions.svg create mode 100644 beeos/assets/icons/lucide/plugin.svg create mode 100644 beeos/assets/icons/lucide/plugins.svg create mode 100644 beeos/assets/icons/lucide/quick-tools.svg create mode 100644 beeos/assets/icons/lucide/remove.svg create mode 100644 beeos/assets/icons/lucide/resource-monitor.svg create mode 100644 beeos/assets/icons/lucide/retro-clock.svg create mode 100644 beeos/assets/icons/lucide/runtime.svg create mode 100644 beeos/assets/icons/lucide/script-run.svg create mode 100644 beeos/assets/icons/lucide/scripts.svg create mode 100644 beeos/assets/icons/lucide/search.svg create mode 100644 beeos/assets/icons/lucide/settings.svg create mode 100644 beeos/assets/icons/lucide/store.svg create mode 100644 beeos/assets/icons/lucide/theme.svg create mode 100644 beeos/assets/icons/lucide/themes.svg create mode 100644 beeos/assets/icons/lucide/touch.svg create mode 100644 beeos/assets/icons/lucide/vibration.svg create mode 100644 beeos/assets/icons/lucide/watch-face.svg create mode 100644 beeos/assets/icons/lucide/weather.svg create mode 100644 beeos/assets/icons/lucide_png/18/about.png create mode 100644 beeos/assets/icons/lucide_png/18/apps.png create mode 100644 beeos/assets/icons/lucide_png/18/back.png create mode 100644 beeos/assets/icons/lucide_png/18/battery.png create mode 100644 beeos/assets/icons/lucide_png/18/bluetooth.png create mode 100644 beeos/assets/icons/lucide_png/18/clock.png create mode 100644 beeos/assets/icons/lucide_png/18/developer-tools.png create mode 100644 beeos/assets/icons/lucide_png/18/display.png create mode 100644 beeos/assets/icons/lucide_png/18/github.png create mode 100644 beeos/assets/icons/lucide_png/18/gps.png create mode 100644 beeos/assets/icons/lucide_png/18/health.png create mode 100644 beeos/assets/icons/lucide_png/18/hivestore.png create mode 100644 beeos/assets/icons/lucide_png/18/home.png create mode 100644 beeos/assets/icons/lucide_png/18/install.png create mode 100644 beeos/assets/icons/lucide_png/18/notifications.png create mode 100644 beeos/assets/icons/lucide_png/18/package.png create mode 100644 beeos/assets/icons/lucide_png/18/permissions.png create mode 100644 beeos/assets/icons/lucide_png/18/plugin.png create mode 100644 beeos/assets/icons/lucide_png/18/plugins.png create mode 100644 beeos/assets/icons/lucide_png/18/quick-tools.png create mode 100644 beeos/assets/icons/lucide_png/18/remove.png create mode 100644 beeos/assets/icons/lucide_png/18/resource-monitor.png create mode 100644 beeos/assets/icons/lucide_png/18/retro-clock.png create mode 100644 beeos/assets/icons/lucide_png/18/runtime.png create mode 100644 beeos/assets/icons/lucide_png/18/script-run.png create mode 100644 beeos/assets/icons/lucide_png/18/scripts.png create mode 100644 beeos/assets/icons/lucide_png/18/search.png create mode 100644 beeos/assets/icons/lucide_png/18/settings.png create mode 100644 beeos/assets/icons/lucide_png/18/store.png create mode 100644 beeos/assets/icons/lucide_png/18/theme.png create mode 100644 beeos/assets/icons/lucide_png/18/themes.png create mode 100644 beeos/assets/icons/lucide_png/18/touch.png create mode 100644 beeos/assets/icons/lucide_png/18/vibration.png create mode 100644 beeos/assets/icons/lucide_png/18/watch-face.png create mode 100644 beeos/assets/icons/lucide_png/18/weather.png create mode 100644 beeos/assets/icons/lucide_png/24/about.png create mode 100644 beeos/assets/icons/lucide_png/24/apps.png create mode 100644 beeos/assets/icons/lucide_png/24/back.png create mode 100644 beeos/assets/icons/lucide_png/24/battery.png create mode 100644 beeos/assets/icons/lucide_png/24/bluetooth.png create mode 100644 beeos/assets/icons/lucide_png/24/clock.png create mode 100644 beeos/assets/icons/lucide_png/24/developer-tools.png create mode 100644 beeos/assets/icons/lucide_png/24/display.png create mode 100644 beeos/assets/icons/lucide_png/24/github.png create mode 100644 beeos/assets/icons/lucide_png/24/gps.png create mode 100644 beeos/assets/icons/lucide_png/24/health.png create mode 100644 beeos/assets/icons/lucide_png/24/hivestore.png create mode 100644 beeos/assets/icons/lucide_png/24/home.png create mode 100644 beeos/assets/icons/lucide_png/24/install.png create mode 100644 beeos/assets/icons/lucide_png/24/notifications.png create mode 100644 beeos/assets/icons/lucide_png/24/package.png create mode 100644 beeos/assets/icons/lucide_png/24/permissions.png create mode 100644 beeos/assets/icons/lucide_png/24/plugin.png create mode 100644 beeos/assets/icons/lucide_png/24/plugins.png create mode 100644 beeos/assets/icons/lucide_png/24/quick-tools.png create mode 100644 beeos/assets/icons/lucide_png/24/remove.png create mode 100644 beeos/assets/icons/lucide_png/24/resource-monitor.png create mode 100644 beeos/assets/icons/lucide_png/24/retro-clock.png create mode 100644 beeos/assets/icons/lucide_png/24/runtime.png create mode 100644 beeos/assets/icons/lucide_png/24/script-run.png create mode 100644 beeos/assets/icons/lucide_png/24/scripts.png create mode 100644 beeos/assets/icons/lucide_png/24/search.png create mode 100644 beeos/assets/icons/lucide_png/24/settings.png create mode 100644 beeos/assets/icons/lucide_png/24/store.png create mode 100644 beeos/assets/icons/lucide_png/24/theme.png create mode 100644 beeos/assets/icons/lucide_png/24/themes.png create mode 100644 beeos/assets/icons/lucide_png/24/touch.png create mode 100644 beeos/assets/icons/lucide_png/24/vibration.png create mode 100644 beeos/assets/icons/lucide_png/24/watch-face.png create mode 100644 beeos/assets/icons/lucide_png/24/weather.png create mode 100644 beeos/assets/icons/lucide_png/34/about.png create mode 100644 beeos/assets/icons/lucide_png/34/apps.png create mode 100644 beeos/assets/icons/lucide_png/34/back.png create mode 100644 beeos/assets/icons/lucide_png/34/battery.png create mode 100644 beeos/assets/icons/lucide_png/34/bluetooth.png create mode 100644 beeos/assets/icons/lucide_png/34/clock.png create mode 100644 beeos/assets/icons/lucide_png/34/developer-tools.png create mode 100644 beeos/assets/icons/lucide_png/34/display.png create mode 100644 beeos/assets/icons/lucide_png/34/github.png create mode 100644 beeos/assets/icons/lucide_png/34/gps.png create mode 100644 beeos/assets/icons/lucide_png/34/health.png create mode 100644 beeos/assets/icons/lucide_png/34/hivestore.png create mode 100644 beeos/assets/icons/lucide_png/34/home.png create mode 100644 beeos/assets/icons/lucide_png/34/install.png create mode 100644 beeos/assets/icons/lucide_png/34/notifications.png create mode 100644 beeos/assets/icons/lucide_png/34/package.png create mode 100644 beeos/assets/icons/lucide_png/34/permissions.png create mode 100644 beeos/assets/icons/lucide_png/34/plugin.png create mode 100644 beeos/assets/icons/lucide_png/34/plugins.png create mode 100644 beeos/assets/icons/lucide_png/34/quick-tools.png create mode 100644 beeos/assets/icons/lucide_png/34/remove.png create mode 100644 beeos/assets/icons/lucide_png/34/resource-monitor.png create mode 100644 beeos/assets/icons/lucide_png/34/retro-clock.png create mode 100644 beeos/assets/icons/lucide_png/34/runtime.png create mode 100644 beeos/assets/icons/lucide_png/34/script-run.png create mode 100644 beeos/assets/icons/lucide_png/34/scripts.png create mode 100644 beeos/assets/icons/lucide_png/34/search.png create mode 100644 beeos/assets/icons/lucide_png/34/settings.png create mode 100644 beeos/assets/icons/lucide_png/34/store.png create mode 100644 beeos/assets/icons/lucide_png/34/theme.png create mode 100644 beeos/assets/icons/lucide_png/34/themes.png create mode 100644 beeos/assets/icons/lucide_png/34/touch.png create mode 100644 beeos/assets/icons/lucide_png/34/vibration.png create mode 100644 beeos/assets/icons/lucide_png/34/watch-face.png create mode 100644 beeos/assets/icons/lucide_png/34/weather.png create mode 100644 beeos/assets/icons/lucide_png/48/about.png create mode 100644 beeos/assets/icons/lucide_png/48/apps.png create mode 100644 beeos/assets/icons/lucide_png/48/back.png create mode 100644 beeos/assets/icons/lucide_png/48/battery.png create mode 100644 beeos/assets/icons/lucide_png/48/bluetooth.png create mode 100644 beeos/assets/icons/lucide_png/48/clock.png create mode 100644 beeos/assets/icons/lucide_png/48/developer-tools.png create mode 100644 beeos/assets/icons/lucide_png/48/display.png create mode 100644 beeos/assets/icons/lucide_png/48/github.png create mode 100644 beeos/assets/icons/lucide_png/48/gps.png create mode 100644 beeos/assets/icons/lucide_png/48/health.png create mode 100644 beeos/assets/icons/lucide_png/48/hivestore.png create mode 100644 beeos/assets/icons/lucide_png/48/home.png create mode 100644 beeos/assets/icons/lucide_png/48/install.png create mode 100644 beeos/assets/icons/lucide_png/48/notifications.png create mode 100644 beeos/assets/icons/lucide_png/48/package.png create mode 100644 beeos/assets/icons/lucide_png/48/permissions.png create mode 100644 beeos/assets/icons/lucide_png/48/plugin.png create mode 100644 beeos/assets/icons/lucide_png/48/plugins.png create mode 100644 beeos/assets/icons/lucide_png/48/quick-tools.png create mode 100644 beeos/assets/icons/lucide_png/48/remove.png create mode 100644 beeos/assets/icons/lucide_png/48/resource-monitor.png create mode 100644 beeos/assets/icons/lucide_png/48/retro-clock.png create mode 100644 beeos/assets/icons/lucide_png/48/runtime.png create mode 100644 beeos/assets/icons/lucide_png/48/script-run.png create mode 100644 beeos/assets/icons/lucide_png/48/scripts.png create mode 100644 beeos/assets/icons/lucide_png/48/search.png create mode 100644 beeos/assets/icons/lucide_png/48/settings.png create mode 100644 beeos/assets/icons/lucide_png/48/store.png create mode 100644 beeos/assets/icons/lucide_png/48/theme.png create mode 100644 beeos/assets/icons/lucide_png/48/themes.png create mode 100644 beeos/assets/icons/lucide_png/48/touch.png create mode 100644 beeos/assets/icons/lucide_png/48/vibration.png create mode 100644 beeos/assets/icons/lucide_png/48/watch-face.png create mode 100644 beeos/assets/icons/lucide_png/48/weather.png create mode 100644 beeos/assets/logo.jpg create mode 100644 beeos/core/__init__.py create mode 100644 beeos/core/app_registry.py create mode 100644 beeos/core/asset_build.py create mode 100644 beeos/core/hivestore.py create mode 100644 beeos/core/hivestore_sources.py create mode 100644 beeos/core/icon_manager.py create mode 100644 beeos/core/models.py create mode 100644 beeos/core/navigation.py create mode 100644 beeos/core/package_manager.py create mode 100644 beeos/core/package_manifest.py create mode 100644 beeos/core/permission_manager.py create mode 100644 beeos/core/permissions.py create mode 100644 beeos/core/plugin_manager.py create mode 100644 beeos/core/runtime_api.py create mode 100644 beeos/core/state.py create mode 100644 beeos/core/theme.py create mode 100644 beeos/core/theme_manager.py create mode 100644 beeos/core/update_manager.py create mode 100644 beeos/core/watchfaces.py create mode 100644 beeos/data/community_hivestore_index.json create mode 100644 beeos/data/hivestore_index.json create mode 100644 beeos/data/hivestore_sources.json create mode 100644 beeos/data/installed_packages.json create mode 100644 beeos/data/permission_approvals.json create mode 100644 beeos/data/settings.json create mode 100644 beeos/data/themes.json create mode 100644 beeos/generated/icons/bitmap_json/beeos_icons_24.json create mode 100644 beeos/generated/icons/bitmap_json/beeos_icons_34.json create mode 100644 beeos/generated/icons/icon_build_index.json create mode 100644 beeos/generated/icons/lvgl/beeos_icons_24.c create mode 100644 beeos/generated/icons/lvgl/beeos_icons_24.h create mode 100644 beeos/generated/icons/lvgl/beeos_icons_34.c create mode 100644 beeos/generated/icons/lvgl/beeos_icons_34.h create mode 100644 beeos/generated/icons/lvgl_v8/beeos_icons_24_lvgl_v8.c create mode 100644 beeos/generated/icons/lvgl_v8/beeos_icons_24_lvgl_v8.h create mode 100644 beeos/generated/icons/lvgl_v8/beeos_icons_34_lvgl_v8.c create mode 100644 beeos/generated/icons/lvgl_v8/beeos_icons_34_lvgl_v8.h create mode 100644 beeos/generated/icons/lvgl_v9/beeos_icons_24_lvgl_v9.c create mode 100644 beeos/generated/icons/lvgl_v9/beeos_icons_24_lvgl_v9.h create mode 100644 beeos/generated/icons/lvgl_v9/beeos_icons_34_lvgl_v9.c create mode 100644 beeos/generated/icons/lvgl_v9/beeos_icons_34_lvgl_v9.h create mode 100644 beeos/generated/icons/previews/beeos_icons_24_preview.png create mode 100644 beeos/generated/icons/previews/beeos_icons_34_preview.png create mode 100644 beeos/generated/themes/beeos_themes.c create mode 100644 beeos/generated/themes/beeos_themes.h create mode 100644 beeos/generated/themes/beeos_themes.json create mode 100644 beeos/generated/themes/theme_build_index.json create mode 100644 beeos/mock/__init__.py create mode 100644 beeos/mock/hardware.py create mode 100644 beeos/scripts/battery_info.py create mode 100644 beeos/scripts/cpu_info.py create mode 100644 beeos/scripts/hello.py create mode 100644 beeos/scripts/memory_info.py create mode 100644 beeos/scripts/notification_test.py create mode 100644 beeos/scripts/sensor_dump.py create mode 100644 beeos/scripts/uptime_info.py create mode 100644 beeos/sideload/local.demo.app/app.py create mode 100644 beeos/sideload/local.demo.app/manifest.json create mode 100644 beeos/sideload/local.demo.plugin/manifest.json create mode 100644 beeos/sideload/local.demo.plugin/plugin.py create mode 100644 beeos/storage/.gitkeep create mode 100644 beeos/ui/__init__.py create mode 100644 beeos/ui/components.py create mode 100644 beeos/ui/simulator.py create mode 100644 docs/DEVELOPMENT.md create mode 100644 docs/HIVESTORE_REPOS.md create mode 100644 docs/PROJECT_STRUCTURE.md create mode 100644 docs/history/PHASE3_NOTES.md create mode 100644 docs/history/PHASE4_NOTES.md create mode 100644 docs/history/PHASE5_NOTES.md create mode 100644 docs/history/PHASE6_NOTES.md create mode 100644 docs/history/PHASE7_NOTES.md create mode 100644 docs/history/PHASE8_NOTES.md create mode 100644 docs/history/PHASE9_NOTES.md create mode 100644 pyproject.toml create mode 100644 requirements-dev.txt create mode 100644 run_beeos.py create mode 100644 tools/clean_project.py create mode 100644 tools/convert_icons_for_lvgl.py create mode 100644 tools/create_hivestore_repo.py create mode 100644 tools/create_package_template.py create mode 100644 tools/export_themes_for_lvgl.py create mode 100644 tools/import_hivestore_repo.py create mode 100644 tools/validate_project.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..490321b --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Python +__pycache__/ +*.py[cod] +.venv/ +venv/ +env/ + +# Local runtime state +beeos/storage/* +!beeos/storage/.gitkeep + +# Optional imported HiveStore cache +beeos/data/hivestore_cache/ + +# Build artifacts +dist/ +build/ +*.zip + +# OS/editor files +.DS_Store +Thumbs.db +.vscode/ +.idea/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..d330e4d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,46 @@ +# BeeOS Changelog + +## Scripts scroll crash fix + +- Fixed missing `scripts_scroll_index` initialization. +- Added defensive guards in `show_scripts()` and `scroll_scripts()`. + + +## Scripts scrolling update + +- Made the Scripts app scrollable. +- Added mouse wheel and Up/Down key support for Scripts. +- Added a scroll indicator and visible range text. +- Added extra demo scripts so scrolling is immediately testable. + + +## Dev Tools v2 dashboard fix + +- Replaced the actual packaged Developer Tools screen with a new Dev Hub dashboard. +- Removed the old long-row Developer Tools list from `simulator.py`. +- Added visible Prev/Next controls and page dots. +- Added a header summary card. + + +## Dev Tools cleanup build + +- Replaced crowded Developer Tools list with a 2x2 paged tool hub. +- Added Dev Tools page dots. +- Added mouse wheel navigation for Dev Tools pages. +- Added a Template Tool info page instead of a crowded row with a long path. + + +## Cleanup build after Phase 9 + +- Moved old phase notes into `docs/history/` +- Added `docs/PROJECT_STRUCTURE.md` +- Added `docs/DEVELOPMENT.md` +- Added `docs/HIVESTORE_REPOS.md` +- Added `.gitignore` +- Added `requirements-dev.txt` +- Added `pyproject.toml` +- Added `tools/validate_project.py` +- Added `tools/clean_project.py` +- Promoted HiveStore source metadata into `PackageManifest` +- Preserved Phase 9 multi-repo HiveStore behavior +- Preserved generated icon/theme asset outputs diff --git a/README.md b/README.md new file mode 100644 index 0000000..e33ec2e --- /dev/null +++ b/README.md @@ -0,0 +1,124 @@ +# BeeOS + +BeeOS is a MicroPython-first smartwatch OS concept and desktop simulator for the PineTime Pro direction. + +The current project is a Windows-friendly Tkinter simulator plus project framework. It does **not** require LVGL or MicroPython on Windows yet. + +## Current capabilities + +- BeeOS watch face and 2x2 app launcher +- Notifications shade +- Built-in apps: Clock, Health, HiveStore, Settings, Scripts, Resource Monitor, GPS, Battery, About, Developer Tools +- Runtime API for installed apps/scripts +- Live app sessions with touch events +- Permission approval prompts +- HiveStore package install/remove/update simulation +- Multi-repo HiveStore support +- GitHub-compatible HiveStore repo imports +- Curated Lucide icon asset subset +- PNG icon renders for the desktop simulator +- LVGL v8/v9 icon descriptor export +- Theme registry and C/JSON theme export + +## Run the simulator + +```powershell +py run_beeos.py +``` + +or: + +```powershell +python run_beeos.py +``` + +## Useful tools + +Validate the project: + +```powershell +py tools/validate_project.py --project-root . +``` + +Clean Python cache files: + +```powershell +py tools/clean_project.py --project-root . +``` + +Create a package template: + +```powershell +py tools/create_package_template.py app local.test.app "Test App" +``` + +Create a starter HiveStore repo: + +```powershell +py tools/create_hivestore_repo.py .\my-hivestore "My HiveStore Repo" +``` + +Import a HiveStore repo: + +```powershell +py tools/import_hivestore_repo.py .\my-hivestore\hivestore_index.json --project-root . +``` + +Rebuild icon assets: + +```powershell +py tools/convert_icons_for_lvgl.py --project-root . --sizes 24,34 +``` + +Rebuild theme assets: + +```powershell +py tools/export_themes_for_lvgl.py --project-root . +``` + +## Documentation + +```text +docs/PROJECT_STRUCTURE.md +docs/DEVELOPMENT.md +docs/HIVESTORE_REPOS.md +docs/history/ +``` + +## Important note + +This is not firmware yet. It is the simulator, package model, runtime API shape, HiveStore model, and asset pipeline that can later be ported toward MicroPython/LVGL on the actual watch. + + +## Dev Tools cleanup build + +Developer Tools now uses a 2x2 paged tool hub instead of a long crowded list. Use mouse wheel or swipe-style page controls to move between tool pages. + + +## Dev Tools v2 dashboard fix + +The previous Dev Tools cleanup package accidentally still shipped the old long-row list. This build replaces it with a visibly different **Dev Hub** dashboard: + +- Header summary card +- 2x2 dashboard tiles +- Prev/Next page controls +- Page dots +- Mouse wheel page switching + + +## Scripts scrolling update + +The Scripts app is now scrollable. It shows four scripts at a time and supports: + +- Mouse wheel scrolling +- Up/Down keyboard scrolling +- Scroll position indicator +- Runtime launch from the currently visible rows + +Additional sample scripts were added so scrolling is visible immediately. + + +## Scripts scroll crash fix + +Fixed missing `self.scripts_scroll_index` initialization in `BeeOSSimulator.__init__`. +The Scripts screen also now has a defensive fallback so it cannot crash if the field is missing. diff --git a/beeos/__init__.py b/beeos/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/beeos/assets/icons/lucide/about.svg b/beeos/assets/icons/lucide/about.svg new file mode 100644 index 0000000..2a46eac --- /dev/null +++ b/beeos/assets/icons/lucide/about.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/beeos/assets/icons/lucide/apps.svg b/beeos/assets/icons/lucide/apps.svg new file mode 100644 index 0000000..097eb5c --- /dev/null +++ b/beeos/assets/icons/lucide/apps.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/beeos/assets/icons/lucide/back.svg b/beeos/assets/icons/lucide/back.svg new file mode 100644 index 0000000..056d5ab --- /dev/null +++ b/beeos/assets/icons/lucide/back.svg @@ -0,0 +1,13 @@ + + + diff --git a/beeos/assets/icons/lucide/battery.svg b/beeos/assets/icons/lucide/battery.svg new file mode 100644 index 0000000..1e87f1b --- /dev/null +++ b/beeos/assets/icons/lucide/battery.svg @@ -0,0 +1,14 @@ + + + + diff --git a/beeos/assets/icons/lucide/bluetooth.svg b/beeos/assets/icons/lucide/bluetooth.svg new file mode 100644 index 0000000..e759115 --- /dev/null +++ b/beeos/assets/icons/lucide/bluetooth.svg @@ -0,0 +1,13 @@ + + + diff --git a/beeos/assets/icons/lucide/clock.svg b/beeos/assets/icons/lucide/clock.svg new file mode 100644 index 0000000..b6ae283 --- /dev/null +++ b/beeos/assets/icons/lucide/clock.svg @@ -0,0 +1,14 @@ + + + + diff --git a/beeos/assets/icons/lucide/developer-tools.svg b/beeos/assets/icons/lucide/developer-tools.svg new file mode 100644 index 0000000..74f2299 --- /dev/null +++ b/beeos/assets/icons/lucide/developer-tools.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/beeos/assets/icons/lucide/display.svg b/beeos/assets/icons/lucide/display.svg new file mode 100644 index 0000000..3ecadd6 --- /dev/null +++ b/beeos/assets/icons/lucide/display.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + diff --git a/beeos/assets/icons/lucide/github.svg b/beeos/assets/icons/lucide/github.svg new file mode 100644 index 0000000..06398f4 --- /dev/null +++ b/beeos/assets/icons/lucide/github.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/beeos/assets/icons/lucide/gps.svg b/beeos/assets/icons/lucide/gps.svg new file mode 100644 index 0000000..7db097b --- /dev/null +++ b/beeos/assets/icons/lucide/gps.svg @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/beeos/assets/icons/lucide/health.svg b/beeos/assets/icons/lucide/health.svg new file mode 100644 index 0000000..f1e4ec8 --- /dev/null +++ b/beeos/assets/icons/lucide/health.svg @@ -0,0 +1,14 @@ + + + + diff --git a/beeos/assets/icons/lucide/hivestore.svg b/beeos/assets/icons/lucide/hivestore.svg new file mode 100644 index 0000000..fb82cd3 --- /dev/null +++ b/beeos/assets/icons/lucide/hivestore.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/beeos/assets/icons/lucide/home.svg b/beeos/assets/icons/lucide/home.svg new file mode 100644 index 0000000..10e4097 --- /dev/null +++ b/beeos/assets/icons/lucide/home.svg @@ -0,0 +1,14 @@ + + + + diff --git a/beeos/assets/icons/lucide/install.svg b/beeos/assets/icons/lucide/install.svg new file mode 100644 index 0000000..5c75527 --- /dev/null +++ b/beeos/assets/icons/lucide/install.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/beeos/assets/icons/lucide/manifest.json b/beeos/assets/icons/lucide/manifest.json new file mode 100644 index 0000000..5355c2b --- /dev/null +++ b/beeos/assets/icons/lucide/manifest.json @@ -0,0 +1,195 @@ +{ + "name": "BeeOS Lucide Curated Icon Pack", + "source": "Lucide Icons", + "source_package": "lucide-icons-1.14.0.zip", + "style": "outline", + "grid": "24x24", + "license_note": "Use according to the license included with the Lucide icon package.", + "icons": [ + { + "id": "about", + "file": "about.svg", + "lucide_source": "info" + }, + { + "id": "apps", + "file": "apps.svg", + "lucide_source": "grid-2x2" + }, + { + "id": "back", + "file": "back.svg", + "lucide_source": "chevron-left" + }, + { + "id": "battery", + "file": "battery.svg", + "lucide_source": "battery" + }, + { + "id": "bluetooth", + "file": "bluetooth.svg", + "lucide_source": "bluetooth" + }, + { + "id": "clock", + "file": "clock.svg", + "lucide_source": "clock" + }, + { + "id": "developer-tools", + "file": "developer-tools.svg", + "lucide_source": "code-xml" + }, + { + "id": "display", + "file": "display.svg", + "lucide_source": "sun" + }, + { + "id": "github", + "file": "github.svg", + "lucide_source": "git-branch" + }, + { + "id": "gps", + "file": "gps.svg", + "lucide_source": "locate-fixed" + }, + { + "id": "health", + "file": "health.svg", + "lucide_source": "heart-pulse" + }, + { + "id": "hivestore", + "file": "hivestore.svg", + "lucide_source": "shopping-bag" + }, + { + "id": "home", + "file": "home.svg", + "lucide_source": "house" + }, + { + "id": "install", + "file": "install.svg", + "lucide_source": "download" + }, + { + "id": "notifications", + "file": "notifications.svg", + "lucide_source": "bell" + }, + { + "id": "package", + "file": "package.svg", + "lucide_source": "package" + }, + { + "id": "permissions", + "file": "permissions.svg", + "lucide_source": "shield-check" + }, + { + "id": "plugin", + "file": "plugin.svg", + "lucide_source": "puzzle" + }, + { + "id": "plugins", + "file": "plugins.svg", + "lucide_source": "puzzle" + }, + { + "id": "quick-tools", + "file": "quick-tools.svg", + "lucide_source": "wrench" + }, + { + "id": "remove", + "file": "remove.svg", + "lucide_source": "trash-2" + }, + { + "id": "resource-monitor", + "file": "resource-monitor.svg", + "lucide_source": "activity" + }, + { + "id": "retro-clock", + "file": "retro-clock.svg", + "lucide_source": "clock-3" + }, + { + "id": "runtime", + "file": "runtime.svg", + "lucide_source": "zap" + }, + { + "id": "script-run", + "file": "script-run.svg", + "lucide_source": "play" + }, + { + "id": "scripts", + "file": "scripts.svg", + "lucide_source": "terminal" + }, + { + "id": "search", + "file": "search.svg", + "lucide_source": "search" + }, + { + "id": "settings", + "file": "settings.svg", + "lucide_source": "settings" + }, + { + "id": "store", + "file": "store.svg", + "lucide_source": "shopping-bag" + }, + { + "id": "theme", + "file": "theme.svg", + "lucide_source": "paintbrush" + }, + { + "id": "themes", + "file": "themes.svg", + "lucide_source": "palette" + }, + { + "id": "touch", + "file": "touch.svg", + "lucide_source": "mouse-pointer-click" + }, + { + "id": "vibration", + "file": "vibration.svg", + "lucide_source": "audio-waveform" + }, + { + "id": "watch-face", + "file": "watch-face.svg", + "lucide_source": "watch" + }, + { + "id": "weather", + "file": "weather.svg", + "lucide_source": "cloud-sun" + } + ], + "missing": [], + "png_renders": { + "directory": "../lucide_png", + "sizes": [ + 18, + 24, + 34, + 48 + ] + } +} \ No newline at end of file diff --git a/beeos/assets/icons/lucide/notifications.svg b/beeos/assets/icons/lucide/notifications.svg new file mode 100644 index 0000000..0345ca3 --- /dev/null +++ b/beeos/assets/icons/lucide/notifications.svg @@ -0,0 +1,14 @@ + + + + diff --git a/beeos/assets/icons/lucide/package.svg b/beeos/assets/icons/lucide/package.svg new file mode 100644 index 0000000..308b1f4 --- /dev/null +++ b/beeos/assets/icons/lucide/package.svg @@ -0,0 +1,16 @@ + + + + + + diff --git a/beeos/assets/icons/lucide/permissions.svg b/beeos/assets/icons/lucide/permissions.svg new file mode 100644 index 0000000..da48f66 --- /dev/null +++ b/beeos/assets/icons/lucide/permissions.svg @@ -0,0 +1,14 @@ + + + + diff --git a/beeos/assets/icons/lucide/plugin.svg b/beeos/assets/icons/lucide/plugin.svg new file mode 100644 index 0000000..bc7ea8e --- /dev/null +++ b/beeos/assets/icons/lucide/plugin.svg @@ -0,0 +1,13 @@ + + + diff --git a/beeos/assets/icons/lucide/plugins.svg b/beeos/assets/icons/lucide/plugins.svg new file mode 100644 index 0000000..bc7ea8e --- /dev/null +++ b/beeos/assets/icons/lucide/plugins.svg @@ -0,0 +1,13 @@ + + + diff --git a/beeos/assets/icons/lucide/quick-tools.svg b/beeos/assets/icons/lucide/quick-tools.svg new file mode 100644 index 0000000..3624343 --- /dev/null +++ b/beeos/assets/icons/lucide/quick-tools.svg @@ -0,0 +1,13 @@ + + + diff --git a/beeos/assets/icons/lucide/remove.svg b/beeos/assets/icons/lucide/remove.svg new file mode 100644 index 0000000..e8cb0ed --- /dev/null +++ b/beeos/assets/icons/lucide/remove.svg @@ -0,0 +1,17 @@ + + + + + + + diff --git a/beeos/assets/icons/lucide/resource-monitor.svg b/beeos/assets/icons/lucide/resource-monitor.svg new file mode 100644 index 0000000..629b81c --- /dev/null +++ b/beeos/assets/icons/lucide/resource-monitor.svg @@ -0,0 +1,13 @@ + + + diff --git a/beeos/assets/icons/lucide/retro-clock.svg b/beeos/assets/icons/lucide/retro-clock.svg new file mode 100644 index 0000000..ae9b437 --- /dev/null +++ b/beeos/assets/icons/lucide/retro-clock.svg @@ -0,0 +1,14 @@ + + + + diff --git a/beeos/assets/icons/lucide/runtime.svg b/beeos/assets/icons/lucide/runtime.svg new file mode 100644 index 0000000..0cb53ec --- /dev/null +++ b/beeos/assets/icons/lucide/runtime.svg @@ -0,0 +1,13 @@ + + + diff --git a/beeos/assets/icons/lucide/script-run.svg b/beeos/assets/icons/lucide/script-run.svg new file mode 100644 index 0000000..199743e --- /dev/null +++ b/beeos/assets/icons/lucide/script-run.svg @@ -0,0 +1,13 @@ + + + diff --git a/beeos/assets/icons/lucide/scripts.svg b/beeos/assets/icons/lucide/scripts.svg new file mode 100644 index 0000000..c09409f --- /dev/null +++ b/beeos/assets/icons/lucide/scripts.svg @@ -0,0 +1,14 @@ + + + + diff --git a/beeos/assets/icons/lucide/search.svg b/beeos/assets/icons/lucide/search.svg new file mode 100644 index 0000000..03e442a --- /dev/null +++ b/beeos/assets/icons/lucide/search.svg @@ -0,0 +1,14 @@ + + + + diff --git a/beeos/assets/icons/lucide/settings.svg b/beeos/assets/icons/lucide/settings.svg new file mode 100644 index 0000000..4c6263a --- /dev/null +++ b/beeos/assets/icons/lucide/settings.svg @@ -0,0 +1,14 @@ + + + + diff --git a/beeos/assets/icons/lucide/store.svg b/beeos/assets/icons/lucide/store.svg new file mode 100644 index 0000000..fb82cd3 --- /dev/null +++ b/beeos/assets/icons/lucide/store.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/beeos/assets/icons/lucide/theme.svg b/beeos/assets/icons/lucide/theme.svg new file mode 100644 index 0000000..1fd513e --- /dev/null +++ b/beeos/assets/icons/lucide/theme.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/beeos/assets/icons/lucide/themes.svg b/beeos/assets/icons/lucide/themes.svg new file mode 100644 index 0000000..25fb773 --- /dev/null +++ b/beeos/assets/icons/lucide/themes.svg @@ -0,0 +1,17 @@ + + + + + + + diff --git a/beeos/assets/icons/lucide/touch.svg b/beeos/assets/icons/lucide/touch.svg new file mode 100644 index 0000000..ad9f0d2 --- /dev/null +++ b/beeos/assets/icons/lucide/touch.svg @@ -0,0 +1,17 @@ + + + + + + + diff --git a/beeos/assets/icons/lucide/vibration.svg b/beeos/assets/icons/lucide/vibration.svg new file mode 100644 index 0000000..6302ea8 --- /dev/null +++ b/beeos/assets/icons/lucide/vibration.svg @@ -0,0 +1,13 @@ + + + diff --git a/beeos/assets/icons/lucide/watch-face.svg b/beeos/assets/icons/lucide/watch-face.svg new file mode 100644 index 0000000..b0abd1e --- /dev/null +++ b/beeos/assets/icons/lucide/watch-face.svg @@ -0,0 +1,16 @@ + + + + + + diff --git a/beeos/assets/icons/lucide/weather.svg b/beeos/assets/icons/lucide/weather.svg new file mode 100644 index 0000000..8d7705d --- /dev/null +++ b/beeos/assets/icons/lucide/weather.svg @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/beeos/assets/icons/lucide_png/18/about.png b/beeos/assets/icons/lucide_png/18/about.png new file mode 100644 index 0000000000000000000000000000000000000000..6d9990ac651c802fa162973ce84b5cb7c337cd72 GIT binary patch literal 404 zcmV;F0c-w=P);Z0znXkU(G_ifU*%+ghaT4iIKn_ya$3@OmAS+3y35t z;?BXuxX=^$xuDvgp{FHQGRahRz1Q{Iri1`hNjt9QX7-ZuFM>CLF)(FSZh#R`DdMa^ z(voy0sV?cl{~!IhE~zK!K+;@N&&+OPk+gt!AO{W;5x0Sb`!-|g%$=mRM*1};oBc`? zIPn^+L;?(ekQ;B@C@9q>>bebv0nh41WDIP-hjPeFD`9U(y63|q$@3#Hng~*<6X3+_UWrT5%~lao=N*41x!@+yTMVAAelF{r5}E++-F8y| literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/back.png b/beeos/assets/icons/lucide_png/18/back.png new file mode 100644 index 0000000000000000000000000000000000000000..ea0e3c9f9868174dfbdfcffe6d733ba8af7a6cd4 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|wj^(N7l!{JxM1({$v}}PPZ!4! zi{7`F5Ar%V2(Vu0ogL6RD@J2lb6JVQrx+O*nHy6TK5|z~o#)$Fe6{ zti&`gB)ff<+2nM0s#WBdC7W-CX2-WKUH_k<+x`Uaw0}zX&oDJ_YE-|`_n;qW3xlVt KpUXO@geCysLOoOf literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/battery.png b/beeos/assets/icons/lucide_png/18/battery.png new file mode 100644 index 0000000000000000000000000000000000000000..e13f15614051cd057aebacbf4f7367eab133d655 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|wj^(N7l!{JxM1({$v}}co-U3d z7QJ^T8FC$R5OBTkp~bJ*k+iV()tm#T4hdIGpVIWe)uweXqhr&8^bLQ_b~{E+rx-n- zsp>Mi&3kHpL1>4E)@FwT7T00|rpH{+zNXZkl$P$PZJf>ZK=9r6Nj48kSDa_a-qp8c t*YkE8l`{Dang+!ZchA0gHbdI$-nW~J1Gw_%*aO|o;OXk;vd$@?2>?leVy^%I literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/bluetooth.png b/beeos/assets/icons/lucide_png/18/bluetooth.png new file mode 100644 index 0000000000000000000000000000000000000000..a8bebc67bcfd7126787ec4ed738de52430126a8e GIT binary patch literal 301 zcmV+|0n+}7P)h<{PqNC(tMiM9wVTW2YCRggVb}Ia}P2C zZq#K4X>HyTNOjxRwA}z}2W){+YLm+p{n)+$(5?%A0Vs(J00000NkvXXu0mjf*QtR2 literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/clock.png b/beeos/assets/icons/lucide_png/18/clock.png new file mode 100644 index 0000000000000000000000000000000000000000..135b9e74796320bc8c3c995f4305cffb4915cede GIT binary patch literal 437 zcmV;m0ZRUfP)qlO}7OYhg2W}90EUpdv#Bps^u!pJL-5eZF^8TF{M5AP5o8FcSGB$ zfJ^nH;c69cBHO7m^}J4~#=knutfpBnjlZql#gdhpnw!k1&+5&$cc=DZ?Vr@OA(cF< zf7SU4&mV0M_zlbfXMF5QHR3rw9_=!43v8y8uA9nk$FJg|@EbW-x73kbH)wY%(+-~t f`;bz49mM?)^on~(?T`Id00000NkvXXu0mjf2jao^ literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/developer-tools.png b/beeos/assets/icons/lucide_png/18/developer-tools.png new file mode 100644 index 0000000000000000000000000000000000000000..525ad123e3520d93fca26e5055b8261c6cea897e GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|wj^(N7l!{JxM1({$v~0oo-U3d z7QI&|8uBqZO0?czuxP3+)9j2RoGzLZJDha&76oS<5tK<#J``KBNKhq8>yu`g(&V#J zvvUs5_c455|M~2n{3ZK!6S#OjJFPmvJmU##Z|CZnUmZAH941`2et^-yA;ESbf6*rG zf-gn|%+Jc?E%q63u4Hz9z+)n`w^4TW+YHm!`}h34C;jN3&<-Zm`z)>cGeuQPRdag` z`R9NC9Gtv2`S`2!UM16<1jaj!U5`JzJv^kuzJ)!Ev;Y6^;03zY*EG8Ci@o(H-hG$h;VLP8T>H@vU;OXk;vd$@?2>_>-b8i3u literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/display.png b/beeos/assets/icons/lucide_png/18/display.png new file mode 100644 index 0000000000000000000000000000000000000000..760a44df54a1b49bea35b862a64c02dcad0045f2 GIT binary patch literal 302 zcmV+}0nz@6P)9mmtXWHhkw&tf|C#5V^=?X)zznk*R}CC+sBz7RUe{v`CmrW0Ua{*j_mSPN z+yy%=b`1d5L(W(S(>MG9uCPFZ4ela0p)Ihgtn}Qh!DBc-MG9@qT+fZR_`tHGEkoN5 z70t271KQAT@myeEa1+mM)a)^z^x?0Xlu|C}Io|!_(gqs+eb^V-{)_yOaYRmiAaU5dJEb?2ERRRVPxFqO2H)RZ)lGoodMNv zIs%xz(C=TZSM+MR(IHP#7NL&jW_J9@$YZvgo`bQA@K%u#qonk(MU1kdVJm~Yqn)qu uVT&aCx})1czm(|uCH9h*X2x5Iet`>evuG$BOtP#10000%W-rN`mil|fq~^V{E4J&ua!gHsa3I;Fk!u38`tJ)n)02Pg z7kt|getf62+kqP&FKkuaplf!$QF4Pp#iKv$ABq~K8Q=FUKc;sldOtVEZmWh%GvwW* z)qBGftn_z_MwG>+-87f~|3BtL)21MQmDUp0HAy?BT>oD=xoOeTx}5tqbMt5KXim@o P`k%qm)z4*}Q$iB}ZVrJ< literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/health.png b/beeos/assets/icons/lucide_png/18/health.png new file mode 100644 index 0000000000000000000000000000000000000000..5b3ded264f48f90d82f0fa0733343db86ae5121c GIT binary patch literal 468 zcmV;_0W1EAP) zxiM(4(J^e%a1dOy#-O3ih6>bzi%|aHf?6$~hI?*2Tzn;)I`G1CKIc5&^FHSs_}?t$ zj(QK60WJf3z%no&dG~=);5@Jiyhtgn(k4(*=WN<{^|iVY{#*53oIj~+>bLOc)JiV& zI08@9BI8r)p?aW>XS|49)kiJZsqU)_$Gu(cReMWfuhd<&KphI@v9d<0UFuWyTpJ&c zyMq;=BlwRpAz%`C2s~)xtvdy3RsE^XwpF{NE~*#Rg{b^RJ)7k`SC7=L7Fe>}o<$Eo zmc$n!_DJmm-U9{j64;5NBfxFo3@`!IfD1r3Fda`DOet;UPr0hr)opbk*v+W=ORWYQ zh@855<=Bp@*VL~u(&1ol)Rj2ju(^zN_4*0J`Lj2lqc3-2&pOpx>W;dp_Ma${iPfUH z4fSq(jbOFE63N7R)DPKo*43V}{8SbQu`12!2+XIH8mIc3f3e?w5y_t*Thm|w0000< KMNUMnLSTZqP1^MU literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/hivestore.png b/beeos/assets/icons/lucide_png/18/hivestore.png new file mode 100644 index 0000000000000000000000000000000000000000..3b72282cd53fcd76052addfc69752da27ffed657 GIT binary patch literal 389 zcmV;00eb$4P)FR71e4hPM=VxR z#N;1f@tRGptRR^6#Gn>2$;va_?6EF4?kYZ5hWX9BZ{N($tSHF#EHGcJ7j!478y&U1 zXFGMdQro+EuX2zka0Rr1gOWu1z$&mJ>ADZH-2jr%-v-`FK;ys}U|>PgYnJAu!g69d z2B?KMJcM?wBuP=1KsOKi1d!AY38zEn+$pf0d% zdm@*n0W^X8L53LU5Eup8wp+Ga^p3?y7^?=7bOUSwQ^0w6CV@>!w}U*fJwnoj?KxnP z-g!wRrLp-@P=KXC=chTDVte#!{TnD-+6#c~9pJH|cP6yY{fh0n?c@*lEU{gO@4t~6 jump@%O!N+PvM>1sb(s9tJlERB00000NkvXXu0mjfY1FBX literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/home.png b/beeos/assets/icons/lucide_png/18/home.png new file mode 100644 index 0000000000000000000000000000000000000000..6a710707d654ef6992a7fa3490a1cdbc2fa6d620 GIT binary patch literal 357 zcmV-r0h<1aP)Fm&B0ep*`Vs0+n|k36=RNOvF82@QNUf>0yxb%}LA~)u*J@!_NJ+g@ z2kL2BgXEQ_g>0x#>YI9)@%PoP+E%ynAbV;@eNneZ^lR#K0v?QmG}OL&ua+llR!*6| zdh)xus}9v$wU~2y)MCmG)tzkPJiW|f9walflxEHV7Lq>?5D_1l;4#nu=8`o8E+V3p zvOV>i@f8}SE1;UGtH9;B@FdVO(2R(BMAU&Mu<{qsO!~i|9)P+&?O-PRo;9oK+s~@5 zS^27>jhK8APOFEVwWANH@+sRvAO_Ho)7Io`EVXev^74SFU1|0I#m{@H!nEHM%-?mkc+FqA*Zs-U`yzz}b6w_y mv{iL&^1lF4JkaNz7c>zrbkKtgI6r~(4lA%yo-z8hd#ZK$9A ztEuj*Q^P=RBBZXa#j_K8R|COvo2+#4R@Iie*AG(8Hc4c5)ep6l?-x39^S}gfnV5G0 zOahe@D4X(@0KLXqOo3)&eNKR0Vx38W7J(*kp8(wfEnuOmtCrL!^(+C&vghifTI@6m z>Z$szE)4)$R@>@{TF4ul@%3)?gXHdP$2;o)V;z1?tqlsxD+3(?ZGPX;FuDbfM;Y8x zp_ieK0}sGK%xwU3A%w4?r>KXyZ=^BevVX9uTIrYj0lMnsef+B4=Kufz07*qoM6N<$ Ef)7KQ0{{R3 literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/package.png b/beeos/assets/icons/lucide_png/18/package.png new file mode 100644 index 0000000000000000000000000000000000000000..007f91c514956fe56afa290a70c8614a6d7b2bd6 GIT binary patch literal 436 zcmV;l0ZaagP)JjxrWW@m5l2Ux8j_-+mhxI4f}!?t@VxnOd%aibfd`)VoZtDr=RMCkZ^Vd&X-tjM z4FgPK-T7L_8q`Z;6SRZ*%Ks1_(zjm~ zA9@iHo%$0?DNiF}E+P&iVhtOZj)>0@@g-%Qh-Xg)ScXy8`>7&|NTZ< efU}q#r8@=1-uGR0+?ySO*R1V-by4Acj~3A#Jd*2_fEs zq!GLVa|hb_2P&iy32DSejwHDXjp_1OIFJ$cPtFG$_MWxooo~&|PI?M+nCtU(0j98x z)ABsS)Fgl#c#N@s^%6Vf{Rh@D(*<~h-_GhA?pOK)e6RFhSZxA*#t}BK(6Qj{;yJ>n zCc`dvC)k4j{1+yecoDO0`nfj!u${s_&H~do7S8xsv3#Das4{!KG@faf5LgCwSfjx>qjRW?RD#x7St4#=SZPCSmPlhv_qBZu?@H^3*eZa7GWG^n`{LKYWqhfA l(yv%PH=qG{6Sw+&e*rH$UM2!q5LN&H002ovPDHLkV1j!otPB7E literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/plugin.png b/beeos/assets/icons/lucide_png/18/plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..fbafa61939eb20eb003e3c1cf6cdf146b4fd2ef5 GIT binary patch literal 467 zcmV;^0WAKBP)dPQW{yc(!~uAAQ1~TwDJNgB*vE@ zF+K|g1*{!Dfue{!fQ5fztjw3Qh3;mdPgra7q+X8_e~mvaL@O!t1dBBo`8s3l zq?~iS!EYSSkl)Xo;~Kb^w;1HPhxb|Wa9*!qH*-7J3OuT+sv_cDM06tJdPHnQ#8=$R zKKhGOJZ^H<(uR4>{*1~){K9_9{*LFFbJS+`2)9~@#@Nq&w|JDP+4*xlD_z!o(jYp; z=eqH*iM?k3+%TD)v!Y{Hu~NkJQjWUM+VuA_;7Ojh^Jb&cv-AY^W)Ur?2L~pzbAgYh zL%W+Y>Y-g|B}%eE-hj#Mbn^j@3uBM|GjdPQW{yc(!~uAAQ1~TwDJNgB*vE@ zF+K|g1*{!Dfue{!fQ5fztjw3Qh3;mdPgra7q+X8_e~mvaL@O!t1dBBo`8s3l zq?~iS!EYSSkl)Xo;~Kb^w;1HPhxb|Wa9*!qH*-7J3OuT+sv_cDM06tJdPHnQ#8=$R zKKhGOJZ^H<(uR4>{*1~){K9_9{*LFFbJS+`2)9~@#@Nq&w|JDP+4*xlD_z!o(jYp; z=eqH*iM?k3+%TD)v!Y{Hu~NkJQjWUM+VuA_;7Ojh^Jb&cv-AY^W)Ur?2L~pzbAgYh zL%W+Y>Y-g|B}%eE-hj#Mbn^j@3uBM|Gj0fhdEP)$A%aB| zQfO;uVJ%uj(AwY&Xrql57Qr9*Y|i4cW|Q5$FbsF*-fzyFnV_5j3`?4pgrtWM!bjfT z7%&E$0iXQEJ5VbE83i5YBNMUZOk)&wG;UlI|p(OS+e|pQ`PusOHlS5^L+g6L4W= z$3Q3ZYAIvaGHRCWQ8N!DHg**_1Xes6hO~idUPx?gGCDvL7%2*A0pq~DN2Vu(zzy&N zY30Iqu|$^L99(5&yhQySvNxXij406YSVz*7(c@ZsE&q#a-mxCgGy z?5&=lNUYJeiqUGpMCZT>aOP8#(FU{LcY%FiYiy$6ZX~Iny0=Kzm!y#EG>E4p9eN+( zoW9%e;&tE%xb^26U;H+x6ZIG;#ec4U3u;>JE9xXur|>n~L5hB{Sy%Ysh* zuMf4l3}~cI0@hk2Q^|m=0^7h9Fag?SZ4Sa@M}1JAOBn%sz&G#++yYH?t*A{>-_?Gc zn_<^kB-~I3vEbJT9!9UCj@9eA%!xXT%s_3-k2VI5Q%W}gDWxfJ2ej2nK#qV5pk8#` zPFObM+*jY!R1{QKf7LT}Mg3B{g&;Gq7xiA<4ZHoap!0a?m+DXH&#bn>WTK9;?qog4 uta<`IfhsU8Wiw;di>0qG3#zG`dHp{=#tpR`wR8di0000h|glGX+1qHRMJV;sX8b3-a7XtDncCxCL(=EDLq&97s;dQu6kjAoU7Yv zt;kCSky)SxOaaI7e;4H`U>#Tjy1;r$>9TAkv+A4rpf2a|x?0cWE9ztPHp{lt4UtBn z)>hjEtPx^2Kenmv#2GA82=z!kD#2HSvy}%g%9^W$qIRNo0ES}3bHG7a^Dof?=GCzw zAUl(81z|xwjBhiCXPm|`U?hq1*aO}N)H2Qo>UbR5cJ(g$BaG{pJ;Jfa{}4J=&+!2s;j@O literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/runtime.png b/beeos/assets/icons/lucide_png/18/runtime.png new file mode 100644 index 0000000000000000000000000000000000000000..fcd284ec5a0fb7dce5658bfc52906c1307bcf43d GIT binary patch literal 397 zcmV;80doF{P)aF^&uB9~Ft!lcOKuW+F&XrJXR+_Xst1joxeu8af zTU!UFfdimhUCwYmBH|(kt^garHE@`HSV}Sf({9E)pW44s`+n~uV;BcU^KAh~z-2_N zsdK;y@B}PG#B&q>U#Sx*(WW}1zNyuYCtTf0!?>EJ`(7RC2$DeO2~bPxGFAjqN@=vQ rxaE!^2~CY+mk3@!v*8uA z5>eBryntjW_-Ssk6PDb2t*@Fn=gdEI=A1LhoK)%!7Lpt!*+?=jr9AYa;?z`cIL2}x z&@0ZdiZi_98HX5j0l}!+@8G7f-(s&9sIe6c@q`atVzV=-@-1P630|7@VrNhlvyH1J z_8u#}KvnF16MvK>?JMzJGczdrU{%0HtacYg&`2Pe3|+FwWH#8jPz q_Ukt?NHR>ap5(fe^4R(o^U^2&7FXZC%>*z20000f}`vyiU zg?-$j2e^3r6I3@aC{NhKwVE%xt$cyR4BctJlqUYY$96^DUFXV;*&%jcs~U;~IYYME unx1e~DZb*r>Q?;RD-ZfU&it2rlTqc?+H+qR`j-IR!QkoY=d#Wzp$PzoQA@f2 literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/search.png b/beeos/assets/icons/lucide_png/18/search.png new file mode 100644 index 0000000000000000000000000000000000000000..c4ca75cbea73c53275785dd907bdfc189c9e7cdd GIT binary patch literal 359 zcmV-t0hs=YP)>$yxlkl2HzcKx%P8{LeZpL(W`6(g{HK|T_$MpMf~ZBrVni%N#8^b!MntzL zio42Wtm4Xdd&427szA2#Q6DRq#3<&`!80x~GYGPlkb`WkOw+;x&QLEC)Uus^so<-& zodq|`l1rIf9@c*9&(ZxH8%f_xe_92Uy5{G=2WUL~Q$^5YL`;-{Zqmdy1ilFp2=mCBi_RfjK~y-6ozqQDR8bHG;ChBOumI)983R-jNEi`fbgBu24WQ_lNJAKy z5H~?@09XPEMs|Qd12)0W06~pofKXy?z#2qM)U!uFx4-wm%v?o z^cNq{_#dI=6nKZtj9=c?!8{f*iUWL0uEO_pHIg~=T@EpXul~g!ye)Fpb>kBTOQF|E zEaMrPn5}U=hgCeqo37&~2@gA5ws4-$7KRFbGHX^!p)p+I1ov{Sh2Pl0ZpK^54dWCS z80oYE_ZhYeeg~%+Z)EOto4-?NRqdLZpW4-~n)(Plzz-bP9BsGeX!o-Xml!RD znrU^SN3&ZU&3;@qdmz_;=6eof5it`HU#hBFi-@(N_(_h%QACXA@~_g-AU@X&T(ij8 zsNoNl1DS~pyl_4G!>%vvMRM&cvY*@no?{^T0k3k`O}x)|sc&J8P$M0*v3Dy6Jp>;q cuFg%k0>o`NVnoWWd;kCd07*qoM6N<$f@N5|@&Et; literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/store.png b/beeos/assets/icons/lucide_png/18/store.png new file mode 100644 index 0000000000000000000000000000000000000000..3b72282cd53fcd76052addfc69752da27ffed657 GIT binary patch literal 389 zcmV;00eb$4P)FR71e4hPM=VxR z#N;1f@tRGptRR^6#Gn>2$;va_?6EF4?kYZ5hWX9BZ{N($tSHF#EHGcJ7j!478y&U1 zXFGMdQro+EuX2zka0Rr1gOWu1z$&mJ>ADZH-2jr%-v-`FK;ys}U|>PgYnJAu!g69d z2B?KMJcM?wBuP=1KsOKi1d!AY38zEn+$pf0d% zdm@*n0W^X8L53LU5Eup8wp+Ga^p3?y7^?=7bOUSwQ^0w6CV@>!w}U*fJwnoj?KxnP z-g!wRrLp-@P=KXC=chTDVte#!{TnD-+6#c~9pJH|cP6yY{fh0n?c@*lEU{gO@4t~6 jump@%O!N+PvM>1sb(s9tJlERB00000NkvXXu0mjfY1FBX literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/theme.png b/beeos/assets/icons/lucide_png/18/theme.png new file mode 100644 index 0000000000000000000000000000000000000000..2479dc1c335712f7eabe8185b86334b09b360838 GIT binary patch literal 407 zcmV;I0cie-P)Am7p55=pR1+}BFP1GtRQUp@#) zuy=8SMO@=2h989lRKQkX7kKe#B*8i{h~9_P-vOcAHB!qnM!Wz3002ovPDHLkV1m<$ Bu5|za literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/themes.png b/beeos/assets/icons/lucide_png/18/themes.png new file mode 100644 index 0000000000000000000000000000000000000000..6ca6412176b749c54b120e7a51dfe120aabf4f0c GIT binary patch literal 474 zcmV<00VV#4P)*4lzUgp$Q*LnM%bMAB9Rk{d9l8h#) zlDw^|YN=a%Yw`w6V&4Dq4wta07i2dU@e9+Kz~OSv;x1P33CFrYK4SsnExrM4E%)ts zREnKyH_l>#Y{4kbpuhN^;3YN}eI4#&89VBr$x>l&(QlNhr;C0aPn+Ok8^lN4u7l<= zUDFTZCWhO5g8G_csNZH6l*G>Ed{TUNSOYW{ll4jL8G;p;CbS}x)BwvzzE4KB) zc%dG`7@pzzD!aQ}p2NmqxPZ^*N;9A}I8Z%vz#&8QW~HZ+;b*&d)s#l_QdQM#k^@Or zl03u%oX3$Q?~|-aGPtU)O7%Wmz$^dCJv2JyRXw0XNwy{Vp5#SURXWA~1_j#%kSK?> Q5dZ)H07*qoM6N<$f>eIp)Bpeg literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/touch.png b/beeos/assets/icons/lucide_png/18/touch.png new file mode 100644 index 0000000000000000000000000000000000000000..11c6ada2c937da03df6a1b771edd629de4313a3b GIT binary patch literal 395 zcmV;60d)R}P)Ysx2x(FT zQs@gv2q6z3iKNnEZ7l8b1Y4*Gx3Ns2!Tf9naJq002ovPDHLkV1f$#w5JVsRQbw+TV@86J%Qb zw4o2RS`>7qzNpLUt9sJTS86I4QLoe=^->*9Q-i=mM4SUPU?>v=>;ZGYAutc@=IK0X zT8{&F5wW380+l?VQp?_!SQwN`>XN#t_9f{-FE9!`<$$aL$3PvpD5(|T3zz_oax}C? z;}y#hQA>blU<HtYZd;|MA0Bu#|vZEyy0zCpV>H#nd-2Ww#jwS82 z4U7Tnz%{Uw=~hqEL0!oj)PJQ`(=S8yU7acfN?~PnK`nRV{{`vwp>fe!%!2>`002ov JPDHLkV1n|1lj;Bf literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/18/watch-face.png b/beeos/assets/icons/lucide_png/18/watch-face.png new file mode 100644 index 0000000000000000000000000000000000000000..fa69a8e49989fb85523eb05ec7fa34f2fe2c959b GIT binary patch literal 401 zcmV;C0dD?@P)5`4CaEo{6SUQl^qFeUA|eIg z6&MFjfTpK5fqmcySTM6z)@iD~^Nz=PNqPU?^;|VeBqymWsS;pyN%bJEI42j@_7A%V zOaP4ln*#EZdfbL{7KaJNtO=|EH^WH%LeIcAQ0f6@b_kS#TZc+O7kC-Ey$`$H8+Ko= zoEr9ju3x}>=JmVSg`}^@5BVopBoKS92}Z}bnGM!1>N1cSu(k0NbJx-)Wtub ztBda9BY!ie#Y-d4qUjL^YFg!z1#~Gr8d=O6<1km zPwiE4(-UaTOk!BeI8Ukn)V(q0G*&j{Ua(WSssX637dflz!HgR|1H0<$NVu(jinXcM zW7e%W=@Y?4b)^1M`;p?CTAx@XBi799J0Z4_$EFNe2RgtiFbiA&2Pvh?408?)Qc5j# z3upm%!24PNbHI1t5Lg6W03U$9+RhmN0Y+sQA-wUj_3yZ#JD$ z8mZgB8Sq2h2d;D26<`V2DKkTTrw%NylcJZM#>8s;e@F8vAo- P00000NkvXXu0mjff`PsT literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/about.png b/beeos/assets/icons/lucide_png/24/about.png new file mode 100644 index 0000000000000000000000000000000000000000..f5237b5867003d9bcfee11c3c34dae67b3cad9b3 GIT binary patch literal 498 zcmV#|JA4Z)RF$#LRt_gOInmPFR3bN#6k^8*OF?I zwn7Ncxm1BZU;}t1+g=RY7fU_@oI8RYU>O(%`t7L#E5NS9odcB^@`fec08Jtkg97x)iG$?7oD{qvtPMKLv2Ih>T`D+@uQE?9p$ILtZh%D_?TurpwVuW@|~ z%tVmSy2>AjxDzT?MPhq){KxDN6@hW{?K|8_Cb<(S0PC*tY1RbRI&DkVrC(BOD$Yw9 o)AvjNO08dUJA}}Ts{B9f1361hT}TX42><{907*qoM6N<$f^~A&^8f$< literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/apps.png b/beeos/assets/icons/lucide_png/24/apps.png new file mode 100644 index 0000000000000000000000000000000000000000..5cf78ec42f0c237fa80f71c5b7f18fb13fd08667 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE)4%caKYZ?lYt`BJY5_^ zJUZV__2p|;5NKsL{pzO{`#oq)_9NZgRo8#)TCv$sS=8jK`o60wJntVfGEThAq0z|p z!t*-!2ZubyS**vBE4deFuV>O^Jbd)o94d}COCbp36?+&6QCe>yiM zb>(;lpL-c7`+tJIgUAEjPqjtCXB&P8e7m+F{^Q}wsD_$`E!;iU3)u2j?%rTu%h0sF Wk>{QGzc!!?89ZJ6T-G@yGywp499o?K literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/back.png b/beeos/assets/icons/lucide_png/24/back.png new file mode 100644 index 0000000000000000000000000000000000000000..554d07db23d0d18529c2db860b0a960fdcc2bb45 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE)4%caKYZ?lYt^Jo-U3d z9-VKe81gkJ@VIuCPk8XR|B;%XLB*Ws4(f-S78A?EGKIyf6HG(sQ5cUqE{p NJYD@<);T3K0RVf;LNNdU literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/battery.png b/beeos/assets/icons/lucide_png/24/battery.png new file mode 100644 index 0000000000000000000000000000000000000000..30138fb5462ece8f2257fdbe87f06966a786b59f GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE)4%caKYZ?lYt_=o-U3d z9-VKecyl!v@VL0TzE|1tEhtvILU(V+qPWL9S1!;?k`DRsIgD4uSdxRcX?{M#5(i$N zAD5ZgI#imY6!#qWU_1S6rc&)jm5H+$K8Tjj26u@-NI$fxjG_`cGmg@O}2cvT0^z@#H&R@*^W|A2}S02K!-7S My85}Sb4q9e04Us2k^lez literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/bluetooth.png b/beeos/assets/icons/lucide_png/24/bluetooth.png new file mode 100644 index 0000000000000000000000000000000000000000..8c0df96cbfa7db446f6c85a8a9834a62c11cfcb4 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE)4%caKYZ?lYt^zJzX3_ zJUY)#-6-f}$m1+3rS?Gn%t4MbzOKign=eUVH(MZd_WWGVgY0UL0;ZliKkX6A5A}&Q z6J$L3v>XDbIs90`eX^Hpg6d?616@ykuJ(N9;J@u~P^}$*+N6)6b6XEbFx_Cfv6`uN z)4`1yvaJ!)n;5@v?`+!8^kw5Z#>(A0#6RV$Z1s>TdaY%3-DJzj#S3j3^P6Lb?)gWmz%Wn;Udgr>!w!d%j{{d8!6C2?OaLSHRDccO$irO$pn1;btBx%U}HGA)-B?nr>QTy~*-vK5vstfsoiox!D=bJeTAp*b> zkW0W64D^+qx;GBDR&h1F5N?KNL z;l204qTl@5S6wyLqcnjK1CEVr*>{%gZ~)BwfqdRLy7X@YzE;H}F!l>_e^qS70rJ45 z0h$99WRss-Zv3({V41IV-3Dd@$mhJup9r`U%2q{W4PXQtP5-P1D=pCkfIZ+1=+sV%8k z&>sh|2D}5`K&OcYN6c`YqMut4Pyn|;KjPW9^V0M5&GY}tEPP}W4g!1&crkvL;D4GjUU!{%j|H|otx$)VZhQSYd;Ziz?12=BbvDt=llmdk~SngOS;eS zCG2pfIW_()F{4u_DF5&e##Pzjo-p`KflaHu0H}C}919$rVk!{_D;2@Ayz_ya@kONdX zWmnF6t+h!YW+Gdi!bu;gz6IFF`t0n_z6(Lq=Ni}m57Ld(zQ-;E1@N3WrZ26IDgH$( zfgSKE-2tVOME*si&!>XEA3IJ+XfqoTKN9RG<)4)TFET!bVj~gSt($)i6*yy z*D9;?@3)pEP2A5Cz!=Jq&-bQr_BvYwenW->hi5XB@B7G*Rx2ShC5&n2x}fCtb8H7B zA{f;lys9aDS5VY@)yyobv`SsiHAPt|lEdERLK4TDIp4WAT>B+I+51U{eIt_rpZeaD zeLog8PA~HjZ8cx0ZI_kzNAj#h#kcZfGp_v>V13TNtd{%svPhZcSz;P;^>3JXAEkRQ za9o?TcJos0n&ldj>kdZFkB(Lnyjl0==;P_DG0c)I$z JtaD0e0sz%Mdw2i< literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/gps.png b/beeos/assets/icons/lucide_png/24/gps.png new file mode 100644 index 0000000000000000000000000000000000000000..1036aeed3d881e9bb80ce13b5b0e6df632d383e1 GIT binary patch literal 417 zcmV;S0bc%zP)O788oZ$#78OJ!!9Ng3rN#*c>y&1UuV4zb)lw zD?DdhVXGoCz!2Ld0|_$8a%Nvvp- zcZ`nQ0Q-r}I;IDBQ+iC3)J;VXW05Ji13U)XE+S82)9CukO4{l38dme&N#*dz9Pd#x zB*O{)AKTFAO{z!!NoX6V=vRpQI4SOV4KaMPKiZF)_}hh4@jvzfh#a;T0ajSY00000 LNkvXXu0mjfQ7OHm literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/health.png b/beeos/assets/icons/lucide_png/24/health.png new file mode 100644 index 0000000000000000000000000000000000000000..c72e63076fb8ba217f5a5fdb64a09cdceab209a6 GIT binary patch literal 534 zcmV+x0_pvUP)@1ThlSVH5^0Uvxc--mM@!$k&HgYXrzs03ccMSROd zzTg7(1ZOwS<8$QaJH>06_+*zI9>rTM_uw1}bExHs8v)MtxSoL`b`J|V*a)yPpvWmq zcga;ltDb|u0^Br!_$a>P2PO*gL!tFErIgx&jTox~Y@n7>Dy5V*rU_8r}@hKCS>!=-%8hD72g1boxW7$q#%DM!XGJ}~6p9n5I!>&T{tYAm1 zqJ1O>0^h6EnyVNMtb$j;eS)!`;+e^IJcz<&91MI~ykOXe*TH#=odbzyCR=eQ1m5Ft zmOJEcH{Hdyb%|#}<;>)R*2ioT^}rTU-jH}^GJ@OI#;va1vH_D4u4w(anz*d!r}9t6 YZvx6XA*s)u!2kdN07*qoM6N<$g0wF5g8%>k literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/hivestore.png b/beeos/assets/icons/lucide_png/24/hivestore.png new file mode 100644 index 0000000000000000000000000000000000000000..d2bbfcf9fc15ead0d96eb34c194c8e189439acb2 GIT binary patch literal 366 zcmV-!0g?WRP)8=`uJf2K$-3fpMp|r+ZqAtfYJD)l~J*V@CRG0BgWKP!Nv-xC44I0iy)td5qf3 z2PS+2_7iq}VDA777K!>m85G4Wt_1oO?`ndHq+Lm0lFHNo!@8tZNfYPX-h9BU{+x-K zb8cCZR%&ErzLRPGB5A3?R&9`J-tcKA{S=RZao2h<*|-m*H$3|7s%tv$K+>~~=bqYy zjZf{%_aqy4X7nd;32Xvez?E?TCv85#0&uhN!vNQ@KEW;mPJu_elXu_&IF3Du)_@eG zUUD}61Cjy?NdgYLngK^Po%)KmfqqZL&==6NkZFeTD=;MH=l@&y1`K&dEP+&i(*OVf M07*qoM6N<$f(bXD7ytkO literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/home.png b/beeos/assets/icons/lucide_png/24/home.png new file mode 100644 index 0000000000000000000000000000000000000000..012edcf2047e53575f25de56b1cff746a659a778 GIT binary patch literal 339 zcmV-Z0j&OsP)rqN)bU2JB!rf3ao<5a0xN$8e-)p zM8QP}cA|pBbYk(dxq%11Ofr)c5j@r7-E;rvea#fbDhMU6FvceaD3=9qUu!1ttwA z$#YHhisQz~$^2UeKGDm(oT`9@=4T$!qWTY5t$=Y+6b1I1!f+77?3a95@!spIp9^S3 l$Y@4$l}6~x{Z0R@egNKwLL@e{ski_D002ovPDHLkV1lu1lZF5Q literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/install.png b/beeos/assets/icons/lucide_png/24/install.png new file mode 100644 index 0000000000000000000000000000000000000000..c614c239a9455749c654478651c3e9318a80edbe GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE)4%caKYZ?lYt^zJzX3_ zJUZV_@#bna5OI~CyQ9f#_e7_1%@WVPDSfXN+~#=8(qZu`~oW`r7xIc5&X)hs#oer?4#Jv}t^GyM{uxiYQ|fD~eP*Wck+c&(*XjREOJkEM zN<0v_U2jVzSBRl`s7HXuBe4eA07ln$BKP$9e?3?q_~!JkwLlLrc)I$ztaD0e0sy(m BV~79% literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/notifications.png b/beeos/assets/icons/lucide_png/24/notifications.png new file mode 100644 index 0000000000000000000000000000000000000000..ebaf13109cb10151842b4db35550b8080729dc5c GIT binary patch literal 405 zcmV;G0c!qfxF)zSmNI*@(V-NOJ>|RJfU7|S; zc3$jdNI+YnArH1F_RZJ4UxH3RL-A#Zl6!qA{HW%ZZ-B#&_ykOAZUh9}CbYQ$70u@X z0Wn+2rF8yRI?p9vcVI=D3m~oOPjFY@4NwRO7z7&9Zf8Nuz`Jh5g0H!wUzE0!`uD(t zI@k#{cRb<~xQo{!XR~Q$iZ8)^i%+f;2`87{%U;yyihy{fQhpw2ZY-NdJa*-Pu)deJ4YfIIja`(Jp5)r4Ken{?&~_e}puw?Nvj z;4zLPwU7JZ`w=_FD_m^jX%$HE0d}0V9Sr`Ir#FI5XR#9NuURp2C)K7Y|NnjaUPB*&^EVc<~ZgwM0%`P2UbGlvc z;#MhO+O9t)Tz9)}5E_~eliJ2D>+=nqLgep_%tEMdI!JzmZ<)u?pNE|Q(r$gZUx$~X P00000NkvXXu0mjfMS0o9 literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/permissions.png b/beeos/assets/icons/lucide_png/24/permissions.png new file mode 100644 index 0000000000000000000000000000000000000000..91aef517cd6abb62e9dd2ec8c08d90a1b12ca24a GIT binary patch literal 463 zcmV;=0WkiFP)M-2BXdJU6!i(etQk2yTTLG%vsCfKW0glEtyBt5|jZsxc#tj1ct ze&Au5K}Y-uTUf$)34a$agFTAb?_~y{=T>XXU+7n?YMoC5G_irTx`RExL5Ob$x?XF( z8-TS)+boE0qd5qJ^_<|D;#CcfgBi;8@~O+jFU9(wGJ|gcjTQQxkGj!KJeXTCyOZw^ z6}ZnSrID1E1yoSMx znE8s!z2FD3Q?iYx6~q^VZDYD>qG$dc#Vfepg}H%G!JJeHQxuq!T{7?+?=gXUco#kR ziP>7>Ig?S@)!25r+W63Icl{XM#w*#4)xvAs`ETJt)L)Kois@_`yZHbB002ovPDHLk FV1jFH)U^Nr literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/plugin.png b/beeos/assets/icons/lucide_png/24/plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..ef56d54ad0b2df6bb3af411a943632f3e9e0b0d0 GIT binary patch literal 547 zcmV+;0^I$HP)l4njhZr_jU*PcSmzGjIt6-U7rm zNC@ymbI~|*bLmQ8M;JdAT@z}Wb9$PMv64>rsoQ@}Rh_@3|3QE%a131Aa|l$OeG%x8 zNe5^=CiyF%$wO(H?Nh`CuuvxXOP9O})PV7v?$o|lfDvHL*6lI?U;J(hPIU%U%=XN5 zHsrXfM4eK7pTXa zs#cagVA^yQV0~C!fv@J%O(oCQ^*mMA1VFT3e&>ENPV9RfcnWOTx>W#>&oSnWM;;w$ z5SNcBfJhY%yy4oEHK&^g+Q6*^6()Ca6PD{T1~6VS$s+L0Vg{%Im^A$#A8?p#P&|1| z=5r<5_d)pvRSN*Vo8KxKHS|aLC#fb|phw>>0O*;|h^;HYg*(YW6+BgZP(}%oG+I!l zANF1XDj|fPq*+OOlC~wiH7Xg{m8aY@V5;B*euOWu8(%1HB38M-y)$H#v6JtKfpjfq zw+uk6u6^QqP}f|)wjOhWJ~eFGx|^Gf*JKwdJuL}<1>#a?$S-qfatG1?T4dDF!ci_T l1{?raz$LI>YUlq#?f_jF(!V;yoMHd~002ovPDHLkV1h1l>n;EQ literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/plugins.png b/beeos/assets/icons/lucide_png/24/plugins.png new file mode 100644 index 0000000000000000000000000000000000000000..ef56d54ad0b2df6bb3af411a943632f3e9e0b0d0 GIT binary patch literal 547 zcmV+;0^I$HP)l4njhZr_jU*PcSmzGjIt6-U7rm zNC@ymbI~|*bLmQ8M;JdAT@z}Wb9$PMv64>rsoQ@}Rh_@3|3QE%a131Aa|l$OeG%x8 zNe5^=CiyF%$wO(H?Nh`CuuvxXOP9O})PV7v?$o|lfDvHL*6lI?U;J(hPIU%U%=XN5 zHsrXfM4eK7pTXa zs#cagVA^yQV0~C!fv@J%O(oCQ^*mMA1VFT3e&>ENPV9RfcnWOTx>W#>&oSnWM;;w$ z5SNcBfJhY%yy4oEHK&^g+Q6*^6()Ca6PD{T1~6VS$s+L0Vg{%Im^A$#A8?p#P&|1| z=5r<5_d)pvRSN*Vo8KxKHS|aLC#fb|phw>>0O*;|h^;HYg*(YW6+BgZP(}%oG+I!l zANF1XDj|fPq*+OOlC~wiH7Xg{m8aY@V5;B*euOWu8(%1HB38M-y)$H#v6JtKfpjfq zw+uk6u6^QqP}f|)wjOhWJ~eFGx|^Gf*JKwdJuL}<1>#a?$S-qfatG1?T4dDF!ci_T l1{?raz$LI>YUlq#?f_jF(!V;yoMHd~002ovPDHLkV1h1l>n;EQ literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/quick-tools.png b/beeos/assets/icons/lucide_png/24/quick-tools.png new file mode 100644 index 0000000000000000000000000000000000000000..b265bd23d93a47985e354d4867f9db733cc966d0 GIT binary patch literal 428 zcmV;d0aN~oP)Y~MNe1RU7xNtVt1EkmG^GQVlF z4PZ1cJie9+uw_;Z0A-*C9NTOw^+Y?slfEY-{r)q;?<{`4x;Av~-xl_w_C{L5GeBnF0X>kv3d$R>a`{-Ip{+<{0&!k?+Yvl=Z#&ric zSf;TgFx--APFE^C6OjC2<)3L6tgbGTVrJO(N=fOg&W)pck9TsFY&Wpr@xHD4yzKo0 z8MZ3Mn7nwGtZ6%=H<$T6(NX>-{pQqBiSJQ2Z~yFEu9V?A*Oas1`qJ$z_C@daH{MIS lu&Ptv<4xndS^NjW?zwMiecZo2<^j;b44$rjF6*2UngCMsVbA~o literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/resource-monitor.png b/beeos/assets/icons/lucide_png/24/resource-monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..91d842584854f9bdc67b3c9322624dfe42235313 GIT binary patch literal 420 zcmV;V0bBlwP)<6`E&x!LwC}ek!J}*(T?YXje(M=n z4c@7_e+O7DehWAUhCzI19AE%+fsI@e^W*@vz+VGiMoh4ySOEtf+zPywdq==xJ|_0d z9Cci?njD&0KQiA>&2oH8F#t1r0=kkmC2dPGNo7fGGkcsH;7T3Pa6sl2BcSd@y_u&8 zP68yreQ+FmOlafL{oTxll1>9Fb*~tJD{LXf?SCe|eg-aq3!qXsAV!}{BXFGk5s$k7 O0000P){0<J`4~(CXvFyQK;3e0flQphp;!3`xnTfEh|K}d204fex&uvY%QyjxuX+cc z_X9ibK$DU~1PpU-ux&}2F@MF@qjAZB<~Sm;j0F`_X!~wUtSk zfpz2Pj!Xjvqv8dapMcyS71cOE2DmdoeWZeP@+-@YA9e;TFc{ZuU^Rez&8z&CfH$FF zRX95b_JIZaiE_ZA`7S)%O)9x3k^v69gCA#IpqkW{v`0TLX+vLwYe7FB{YQOW#gizC exNWUUIy{y5(j{RVHtm4>-z(OEg?ct7Xf<8=y!{}ez8xCP#Uu{B-CiuVtFKY}h{QMU-!momHHAvn|O9vmB;A${S-K2>bt_E)oJ_U-_4aOSH e4Nx-0L*pAC8Gc~m>em?n0000uG=zU%-C&!)J7{lmZCvS8>$Fce>g}%}BK_|87Fa_|%kb5aZ zu56ipve9l+HkvAr3hdw}v}1s^9~BP8#$VXRrV5VhW0Oj~a2hzmusnU4SLUD7JI&N9 UfL}5p>i_@%07*qoM6N<$g2#7_-v9sr literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/scripts.png b/beeos/assets/icons/lucide_png/24/scripts.png new file mode 100644 index 0000000000000000000000000000000000000000..7fc2357c22fa8d3d80763dae91b1b8b946fc2539 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE)4%caKYZ?lYt^Bo-U3d z9-VKeY~*b);9*fNQ)v3@?kT>ssj0A!NnCS6htj-&A65S&x4jXV6VIr!fFV%zM9do@ zP6OuIo_qGvsXf2{S~7&G<-7-QaoAh?*yh^(ZiDmHw>EpJKQZk%W= zQ91!2Bkz}!ry}&uj~nCphyy%pT}=QeOl3p@I$Dns076e^rUIy_k9{EPn+z-g19=Z! z;AxOpg$qZ62U%1D5|Ji}__g9-OoU@LfvPmwR-3R-do7lQN?Gs#|m$C(U&C~CEs z!E*dRpEGzH#p99p;|R7kc}b6WO%zmV?JkaH;OM% zPVhd}`LB8=`uJf2K$-3fpMp|r+ZqAtfYJD)l~J*V@CRG0BgWKP!Nv-xC44I0iy)td5qf3 z2PS+2_7iq}VDA777K!>m85G4Wt_1oO?`ndHq+Lm0lFHNo!@8tZNfYPX-h9BU{+x-K zb8cCZR%&ErzLRPGB5A3?R&9`J-tcKA{S=RZao2h<*|-m*H$3|7s%tv$K+>~~=bqYy zjZf{%_aqy4X7nd;32Xvez?E?TCv85#0&uhN!vNQ@KEW;mPJu_elXu_&IF3Du)_@eG zUUD}61Cjy?NdgYLngK^Po%)KmfqqZL&==6NkZFeTD=;MH=l@&y1`K&dEP+&i(*OVf M07*qoM6N<$f(bXD7ytkO literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/theme.png b/beeos/assets/icons/lucide_png/24/theme.png new file mode 100644 index 0000000000000000000000000000000000000000..f8be6b1655fb22030986e55ed68eef2f5cf60606 GIT binary patch literal 488 zcmVP) zfdcpO4WDogqfNovSTYz_n})wZ7pLQTtuCa%JbKu`-N;qpMbwW+?(1GVOk+6%FX9^J z>j)kukn#8|CZZgC31f8xk77X&odmRidqd#uI`9!Zu8gI#OWi-gyLcLlzF;*c!Gl_G zbZ{1Tlm`aZa5B1F+)bi9VEufNgWvXN{D?VsE29{YRPu8T;5!kz3CR zZbrdJ9LdfxBf-Sq1fzHsMO&D|h1{l9B)#PO?6A(pl2P^JCtl(@PT@dOf1*;mj6=iz zeGA929t&2L&z>|kl(+9CJc-;}<()KeMskuf*op4XN9Q;2DspLTVxktfBDvh(G)yM> zHm+bhe!sP6cmkUZ$UDEEIaBz&Z+O5C;zhuo<6N>o3mDm#AS8$JzB2b2O}%eJGKtst efQyZRn~Gna7n|vjuxoDs0000|#Qt80w_zH~I!6Pyu&*llAuML#8H`~Bo6(0o7{v{&MDI78tU|sN zfR{L0!O(8p4a_P|Z#0&c^M@EL>6^k=Os&gb3hXZ&DFRMs&IilL@DWe(set2pa6G}L zyikt~ZRBGqBE$JOMdu0xYWNT$C-TB%BxlwEO3BIs7lP|%o_r9=v8qHFwrz|!99(bm zrq;} z**2nHHaBoP@H)6A^1@ssPj%}!@I&FeMgANEdBa2$W-E}@aZmG$EsAH@TLk){c@-b) zAaK8cbOn#X=s+3pN;JR1&;|l6=hd#~3|P~=hhPEQOZwhL&v;h?0X~?Ws6`wv=oydt z+pYzI-~e6($(rUhawhUyVuj_N1VW^S%lKY$Qs7R{0-4Y-&T9T`zQ=F;#BB`!wZOlK YKaKr66|3#|6aWAK07*qoM6N<$f?>7t&Hw-a literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/touch.png b/beeos/assets/icons/lucide_png/24/touch.png new file mode 100644 index 0000000000000000000000000000000000000000..3cf0154ded7a04e8c3e1c8a726e2b40f244eb92c GIT binary patch literal 463 zcmV;=0WkiFP)F@eP(QLJ46OThQ%l`|~KaXpi*mvXmH=rLFJYD@<);T3K F0RUooWorNc literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/24/watch-face.png b/beeos/assets/icons/lucide_png/24/watch-face.png new file mode 100644 index 0000000000000000000000000000000000000000..48fbfea21164279b6882722b1d4377bd865ffb1d GIT binary patch literal 502 zcmV@L z1)>X-$i_fJx=0%wTuKuYoVplWnvfLzv7Cm-P2YQct%+Z9bKd>Vx!-s4?s-r8-vE|? zI`D@(+yE!QvuVXkK!;>p0*|IKc!IH=4KvPoL_bo{mK@%fkNeRFtbtOd^P4vucE-9Jzir&Y>4*RwIA{rocp1*fCnJpDo!`^81(#5 z6!1eV#<-$$y-`|O-$96<9=`+Y{ydz-zj+MW9$y9gYf1Z(<|VBLHEoTH*d-q%p(d{ttd18gVhB>pPgvUMlS3&;Z(6?3gg81M0w!=3N6$fFOd+%izO$7Fy#AqvC5oD`wUJO`vGu7xcV0)lFM8LoI|0steV@^sN}z?~=c4~J4NQ*53OWSpB9{{|yH@)>;2zlYHTV)Sn}7*` zx5&P9fQ?BEmOKNk05{^?`VgK3-tjRIXH}eT5^iwvUFmw^+T?LwK4}7mC+Mp-GV!Z literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/about.png b/beeos/assets/icons/lucide_png/34/about.png new file mode 100644 index 0000000000000000000000000000000000000000..10690029c11abae80519c9a9a3fc7a8f025d0ac3 GIT binary patch literal 760 zcmVA|lj}Hf`FC3Ek9174#R>qW%Hb;#O+? z5q?)t5i0K8>Z(nDf)p1KtksnjQz$}pW3;qBE^?43oHaRMeKO-U;FLy~I#s5Pxokm z@0cIPy7Auy=JSZKSOSVU9;OH^$GC2WI$w-sViD-iD#Gyf`5KF`2V6;W8V0@_r-yk3 zwBcSbyxYLZPR7q-!_gNIU=SD#u2-?)!fKh zczIxBRQHAW9y97Q&jDk-Qs9@4Y5#Z4IrnK_h{tRH>m=O>Ubl+7 zz~xZqd0J5cGS4r*CRSoxb6H8|W0|P~_XCT#2s|)_8D%1|gHPLF&8o4%I%Y3RdaLFJ zE1H!Hk|xxctfph!+iGmE^0yekkRN0FbfJj0oWr>Vv=LPDg4O~Aya#TRG*7fa-p>+c qHM+V{wSJcPD(Rhb?qeR_1A)J#s;i`RsB7^60000v4 literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/apps.png b/beeos/assets/icons/lucide_png/34/apps.png new file mode 100644 index 0000000000000000000000000000000000000000..9d3913b7616c3bc0ca3d9f6eff676ad7ede3dca6 GIT binary patch literal 476 zcmV<20VDp2P)Th~R+tbkVH!*2IT>)07X_Cu% z-LL2bzC^@9Cui!Wx}zRBe@5zC^+wIagA|`N2kLq`cQlOb0Jk#T1wL06aJA5X1in`E zcYs00!-#m&wi;K|aXS8_E>)VMZWVXA)j_|k?xlXDE}x8DD0J6~d^aKvYmH|mU)1eP zmw@YSM$QY{e*7OsTIr26>5Vj57$cMZvB2!Y=_=D@zTqlGoE4*lB)5MD4KN1Hf-zMz`YK S-iyuv0000hQ+X!0f^*og)W?c-9<=I`U#R$EilPqBl}!^b;xzWO`->dCg=L zHDJ^Za90vrcg$YFY{5sjDFzvow+W6}C7#ylOaO8Z0 lc+YyZ`zG_={4%qfc@T+2{wd}Ml2(9yU;!8{ zS^FKh0#1P=GgDt#l6EBZ^fR1DvZD3PNz4G(z=#`v23`l<3P%kX^WrTtJ1)#{yODAz zsa8@Vt-I;fz33;Q=_RaIA>q}2ban5G=G8J!fR8FgNIqJCx<4psQqpWzW%Az&y}!?@J*?a=&sYksMJZODK`ty%S2L1w6U;OMsye7H0M!X%1+Z*_|)a^XAoa zndM09`DCxPHbG9W7S79J&4VZ9Yt7vZ8222CDz_=TK0lFnUvTeYgnKi%7 zlC&Aa4xCv$g{2DBCrcA^K};t${R_ubp{-mS=G0CBog@>d;+*5LZ}53AN&9S N002ovPDHLkV1ifQuq*%o literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/bluetooth.png b/beeos/assets/icons/lucide_png/34/bluetooth.png new file mode 100644 index 0000000000000000000000000000000000000000..518c617c555e431dfe3910eadb419d1931db6216 GIT binary patch literal 483 zcmV<90UZ8`P){+(m^#HI(qN0>; zx`$f;;uNR{pyjc^RR`CN6UPpHtMT~n%XsWK0X9TZr8CI}fVLUuMnvXOr~*JTE;Te@ zLE5UwvZw4OfI%osRS;WE07H`7{|y2F8GwhfFfl=104$O<18`qvnPP%W0Gt4rnR2OR z@`8|TkUS@O;A<-)V*qEU5ScuXOSMJ2R$W`wwUxg~a<1wweDf4pnyIooHq09BTVsC~ z=;Ig3YyMT=_*WuAvTL>NM1jbIu|bkUC>VR9w>5S;h#VM~(n2U0dztEoP%y5@1VhAr z*HpUSl$Iw?x|;y8P`_@7S7pD~5*Y_XhpPvg^8`)`Vf?NmJ`D`XLl=apYbpO#4!HLU zQDpn>D7z;jy#jqc0DPFNPa2b69aDa zAs{+Oo-K&SS|ALFj)+$2NTm3#83Q;Kk(sw;L=al#Q3yn3kvxi(6ES{EwD23*+u9?M ZLO&sd2H!WusqX*)002ovPDHLkV1m7>$yfjY literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/clock.png b/beeos/assets/icons/lucide_png/34/clock.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa4d7333ca788425c393f4400df4fd3616d93fb GIT binary patch literal 808 zcmV+@1K0eCP)sumBkdEh zGDbj`q;5&g;gY14aLt(6;@;q;2d@D4fkpCV0k{Wr?j^uc;4bi^06<(Rux$;) zxbEyXfuS-GUdDm85)ab`OeB2WDr$T#k%>{DE+caPPactci8E!Wr4@a&l1B?o8x@I=?~=S)&i4G|7n(Dh3IvIXkzBhiE2QCemmO} zcmuc2)HuC!6-CJO+wivwsQd;|w1LGk`L7@{Vx00IezpAgA3&DeeX|Ggo6@Sv$qk?nsL5B= zN)`yNqnaA!gS+pN^g`0R0zf_n9>iy%Sp~(+rX*dFH0zpAI-s5mQy*i+gZNan7X=A0 zFD0Fp)RzJ@1{_E+^D(w#11H=H`KB5WFF*}&6_^RW=F^4WTP(6|aoV zk~$>yNIH}7y{71ZRldXkj)XDxPghjpBWGi2fE1w405o3!U=FxL);f_QWj{+)6jgOC m+WA>xS<PQ28~}0ypynYWrAP-C$W0JjAb}zh z6_0QMas$$)AwtkW6A2`UK8kF_c;$Hg!Y;^PtvvsXKij+G5t(VG90lwE9pIoy2oHE- ztk<~ta~ZO1ipZ*2_lpGCSL^Ex>&6q%<5%l{af5{jo;3yWn54$kPXm;IricuIQ%4Qj2c8B_efGJH80` zh2x(+Hj>mxE&Q`bFRQvq8rsy^BUb?r>Wx&21bHzK1FYF2Z;(Ua9@s4mVy1toA1o>; Ublx@E{{R3007*qoM6N<$g0AAog8%>k literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/display.png b/beeos/assets/icons/lucide_png/34/display.png new file mode 100644 index 0000000000000000000000000000000000000000..a4d4578c0e4c0dc05fe7fb2f37727effbb705fe2 GIT binary patch literal 616 zcmV-u0+;=XP)O|-d17)(JQU5Q6eM+xHI7$h=kx9z)J{J z-@!{0FMI;w5xi?L!G!xl@bjWuT{qo5dwNc_lQh}x%+7r0%>J1@(t?Q984N5-I&^>E znb|{qq}f3B`6K&vd@a>vc@k;=bCAX)3Igl`+a=>4BJFAZwt?L$a02$c+@B=uy1<@ZAeE1p47z0XBfGS`ZPiW8j{++yO_82M!?K20=%_CGgd?eVGr8ONaj^ z&VY`m?*JFUn~5&zIv^i>h=g6=v+L*jH#c}m(rZZ_Pxr;lzIg$zC9O#sNm@6v+X%>G zN!OBEl7?pX)YH9?^vW~8mGsffeohR++{1XcES$dW^wxrwwZOB0_ZCR_R0fBP)ar2GN|!k280=G`Cw0000UxoU3M= z*4~!dYXk)WCV&m#2xzKC*N*rL6;t?JA5Kj5z2K~f?25>|i1d4_T(w&wQa0nFh&+0M z0AnIj6_IrjiDE+E9P2Y`e4n)Gmsj3 z5Dt*%xRY?y$kF>>fwu>&Z=xCrEfx;{j1njhc>_zNRLG^y^zxv{FJurBtCrtVlEljM2`7 zh!hqYK7w|%Xk#T2sj#z9u|fC&1kl1l8kdiKEOwTiz3eXRy%%Dfwa(ONJ4z#CD;y$nyxo8!b0;cVmGR(^s(4Qs=FQ0)9U{`+u z8Q===CE}BejFrP@;swPawwGTH7>Q&iUYUTb)p>_R#C`_21H1%YnSMHQX4LsF5vPGE zemi_QvW5p>2-sw|Y?>{&%*;FctvEzxU4RaU4_6@&m8b6fHHXhMN}`GKoLI#g6FBEG zQJ~l}7lBKrZ<}ocXf>YTyl0weoE32)8|461=DYod?Y;&Av|=k z=755v2j+WI(z6gk0r)7XThdWUkAP+K`6cP?PJCdXPMY7jOieoce3eXIaP~=uPuGb* zAnos66L)8!kr<^kk4aiqWoaIp{@a~ja(cIVWnn0Yd#s^hv9!}HETUGA6y-;I{ZnUdY5F-o$qw``-VtZfL<5iD>fA= z4zxk4uK^oo^8@Xhv-iXyk_8rAkdcVJ1?U4N?CAqqB4@^({~~dB6ri2Tm)_`pf>|a! ziA|s_76})$Ka&1=ietOh8qgUj2f)2VBqC&@i_seJn(|`whVr+=XCfUEj!Zk1Yr$T! zkhmOm$Yg;YV21LX@sc-N5Bpf4(jwJFpQX)TV h=nc#N@wY^p@)xDE;Oq2Sk<|bI002ovPDHLkV1g6FQOy7V literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/health.png b/beeos/assets/icons/lucide_png/34/health.png new file mode 100644 index 0000000000000000000000000000000000000000..a49893e517298d12f9b98ce22750cb50f3906df0 GIT binary patch literal 807 zcmV+?1K9kDP)k@HNnI};u5qF6Wodr(85kF1hr6$V6ZR< z8qfrTTa(~YL|g(9!372P#v)*$1PcpeAr>xR;f949DjGzi(U{L--Z*EjZ^aN-H z<^mPKbW;DkH>S}wpdP3K%7JQNBk<7kZHR)X0lpaHF zGtAg+Os8U}E|aqyxF7tM=9qKR^y&74lYs9*@C{IwOVL6Elm$HqdQOz2q9DH5jL$gd zJ`5K~Q2T6fS)|lb|Jl6Sc&``I0H_UK?jB%dg1y&_Yb?kZ6L?<;h@>r&rb${PsUgAp z&Wy)ekUkTbkS_sH8~~)%0>tgwm1f*$LGGD=Eg03f4p<4K^XEybFqT=87Q~dWJ?_}T za-Y^{rBb`L* z9LQJOfuUgh2-u%v-XLb?N2CYNx#z$kNiBx&wWNOq_Z zMyL=04(Re8LA!~U0vCYuK&iRE&C5BO^W#W>Ip`Jci1GUnhl$_r^9I`KHP{#8+2eWk z{x$%wQM=cuE0{3{9P(mq!vbMo{Hec5_7)GYbyy(`Of%UlBCR33)$=D{R+0K5OY1SP l;*UajKvRIKzXtHn>IW5sJ}*C=4nzO|002ovPDHLkV1ldCbO8VW literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/hivestore.png b/beeos/assets/icons/lucide_png/34/hivestore.png new file mode 100644 index 0000000000000000000000000000000000000000..0abe8ab5bd1cb1cc2115cbef0f9f169432c4685d GIT binary patch literal 658 zcmV;D0&V??P)u5;xQG@V zb+vYp4qY6aTnnOfRgn&&V%>BQ(NRzvHAqFY7pQDYqzb zY9x&TSKa*#Tmt4Y-OV5E049L}_ivclwG~H68j)1>J6Mu*GABU(nvzPAJ_e8S`rkqX zwa0?GpCpySxHToe1`fFU6ZjAd#Cr__1@~W>*})bNNn3$05gVt`7Bi~=gumdyz+M36 zyVQImu-@$wP-%!t8Vcrcs!I?^nhN?1)xYoQR>Q1H4I-&1>5!z3+k)qs=N6-aNLmNH z0G1^(k$=oT_W+w?f_w$OyFDzauU(>~eqh+$3h*r&h?xm^ z+rZ^4g){x3nOW7$&H<-^XFxdr0-ge=%Q1-+HYMa-a$PoL132JB7d0@Ml{c6dQG@;eg&9=Cb3X<-v0>oW4ooU*= s`;Gu7fNl9_AyH-EftfvyTsNM61B~4F^NqsdRR91007*qoM6N<$g8Pgzga7~l literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/home.png b/beeos/assets/icons/lucide_png/34/home.png new file mode 100644 index 0000000000000000000000000000000000000000..705bfcff09821f924979b93b3ab4683ab9578ca9 GIT binary patch literal 613 zcmV-r0-F7aP)i>lGGM9nusKwkf8ZOI}yP}M2jR4_OaMIa=708m~}=h_N@+c&Uw!>bLZ}zmHrdi zppC!*NmnJ+CAB0iNqTN(tzyvngBS%~@uyw_qyGwG64*{aWZDKM%Z8W-nr`Sf;1+N@ z#F?7Fd|43JfE_pNBQWjq=YUO@-ve$G31GlIpyh_F04EZ)Rba{0wSY&!z?&j7J`6mG z-hl<+NSB@p@HFaq)~%-(L={+!3?I|pw!L}{co03sWnern#M#7p-yGm(u1D|H2Vkn- z=G4xp=Y?>7b@J}00I?h0L2Xb7=UWS2nRb9n-5OS1@f%?5Zy}ubSn$mBwo~DRD_RFe zih^)6Mu06h=Tw&SJK&g$-2s7nE$M!UXUhcfhu4Cc zz4u9A)`8@D+Ig3zGz~#w4MAcJL1KB3pDwNe2a6sSJg42I-$#H&g`1MH51}>nVtie|&%m zNhcFE<7zKSr|*r5+Dr5`wv_b6%;JM`sHA=YuP7F75$Edg00000NkvXXu0mjf1(g`; literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/install.png b/beeos/assets/icons/lucide_png/34/install.png new file mode 100644 index 0000000000000000000000000000000000000000..6b57915f5c6b4e675fc10f077b018e31f5613584 GIT binary patch literal 462 zcmV;<0WtoGP)!yjAwPQeVSt{~@A(kc<7)^MQiIs=UEsKQn^>ia;g86Ff6PMV<+u0u;j_JR8>iB}^QMuJw9zVSu_5 z*bfVHU`EcGQJl{K^qn&Th#-hRpoq8-aj6!y6kKQ*g2k0CtW~N|EZUfeAFX*@^p+fIl1^qOq2PgV@7$dC zo#*D}o;!@RLc-#RfHjg1OX`=@8-}MOy^!?O%zmeX*BGE1xCqS9IA(wgKzF+!`hm$N z083*6*dNtD($WBjBn?YioMlzgeMt`_O@y(nl8%Q@CXAIO9W}G(QGuF4^a7vVOkV!FKA;q|e}L`H@-xl8lypk9 z|Iu|b`xF(#%%&vWaQ8VGRr^l>qweS38AHF@>7OJ4c^^!^11%RnAOrje9`BmvF1Ix6 zLR&F2S_Lt)sus4eB&|;ZvO2U$O7>i6yJCR=U6OL)ay9`-DYSWDRm&ifwy3saJ|+NJ z+-Vs}eQ`hvuKy+h$ZOZ%7YAg}^^=?xUR!KQ3FLvU8{<*{J-}S>`U2#ZSJlK< zT_L&?7sC17bAFejicW;HfiROjDS#A!`QSMZ3@#@)2vi*XrKAwf`-<}|0|Si`v%m+J z{1C{d2$BUJIsZvtSIi~uP;Hx*B%PI1Ned)IPSQ0=8^ZNAGkd!fBrj=N(%O`7-Y9-b z>M^s5D~7T9 z^`T853E0PJ-ltkvb5MY2|cv5$m-?fXPTYriIrNCTUdCaGZzi b6%~I0G{t{Fa|?M900000NkvXXu0mjfba*YD literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/package.png b/beeos/assets/icons/lucide_png/34/package.png new file mode 100644 index 0000000000000000000000000000000000000000..8bca31beaa15358d06f023106b226d2b19264804 GIT binary patch literal 748 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 literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/plugins.png b/beeos/assets/icons/lucide_png/34/plugins.png new file mode 100644 index 0000000000000000000000000000000000000000..62dc5964808e8f1760ba4fc41ca58e12e9820dab GIT binary patch literal 911 zcmV;A191F_P)^6%*>uNJGT$q1-zu*UI1MIb{O~- z!HxnQe92Xqo4}e~{E20?h24q}7tf zBuz{DENQQqT??QC?)&QoG)Tba;3=npg9Z5Z$XFk6)5Z7!ENn}ZNM=X>~;kaEx;GYnFMy0kz#pbFu=4r%-0G++JUJQ{~cJ?j0n>0 zXmdCN-lo29WkOQUjbKIU4toadqCQXDb-zc_l`vqx8^2#sNO-j;3CcmX@4j|CO^K^W zZbxSCBP+JGijW*J6Tln~*zTOqnVm5YkZ&idiU`E`a?tOc$D@uJ|2p6n@Rj7S-D_ke zBJuo#k4W*%TGykP*|?dlF|)a5)?sEV&Fpf{1P_3pso>kdhAMMp0S1D7tE(er2AnF` z!UGQ1Nz%7uw$%q|3-&Eq)CxrSr3QEd)ZFiBU?ug3^%?%Kroom{Q07a7JaoK4k}KXy za^*9-L;dw#ninukXg4Yf`RP`|+;}^)Q@a-tPiT(Z!%R~%h0CY~oD5$BS_0o-Afi@9 z#BSiDBYg@3=kV@2&ImyZ0Q3T9fFr#8VrIAe*MUs| zrj>&BpCkiM2ZDO@@OeS@Ir7g!8x?Zek=F#izQ~qUZJv)b zD&(*u4+Xw)=ku=!Wv>%8$_{2k$ns#aVUj|3!HvHImN7feOaMF5k5Aj>d7?nfXk-h# z?M!i%Upbo<(g9qI1pYyAjY+z>i3s)?d1<@E>dG<6yXXc<^Ci8Kbji%#L~wH?ZBg>K lgd{zZbk)p$HzVY~u|KN4B`!-|lq~=N002ovPDHLkV1ksSp40#U literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/quick-tools.png b/beeos/assets/icons/lucide_png/34/quick-tools.png new file mode 100644 index 0000000000000000000000000000000000000000..90d1d0fe12b9d9bb0806112c335a60d21f36dba5 GIT binary patch literal 634 zcmV-=0)_pFP)2tg{;p&)e-MYm!H zaTAIlF3v&)U0eh~Fm&k9IJmhvSP&spq=+uID2ieevHdu_`{3j@kMup?dv@@4M}5?h9&)!v?A%bb8aP1uOxs`pb7k@zczs@MMGQ%x(NVQ z?II!W1ZJOsd%!d>3A{JCmqkHb3?S|U2Yjvqv`nr8)Qf|A-vg5 zW3-qC0;mJ8fVaTqzXfS~qb*>}#2*ZRnDFsfo50bm5F@70a*+G(xtIg}NoYVLmoxx4=AB+Ua?`#`iL%_P*@xqxx=wmuDV zj%bd=+M;*ZE%}DNU}Cqkf>cfMPr%**Fg*}{jcw}btRNL&)f8&u2?U=8>N%o~Ur z@YV1A1q^3}STYbB!10td9-94+^MaU2vEKo=%>E8=BzFkl7|;lN#^=WAowxwAML^hL zwFWE@HRL1U4cnFOlac{qkk*0oWk9SFJ^N6vfg8Y384&TXssJa5zGY7VwN&QDU_Y>E z47$MCV9n_O;u(HUi54a{jw9bKHt#@q2w5;s4>{O3Vb8TNB#<0(e9M z*c--cfPnsB{SAD}sN3fNPC}jDP^U(+m?|(+-!>0241A2CzebIi*(bQ#w$H#CNk?u2 zJt2Pz`~uz$mclhMoh*zy~wiD;*@jylImA1uPe- z2mir0a_-{X|BWWZ4xGRSJwW1io!j|2-@AL`3(ac@}i;}iW+7I-Y*{7U@I+Q%w{*>#p zq`H|cHy4gmjMu=Xi~!f&n$a8*eZb3tv&W@!UGqXx&CGse_!>_B?L7fDhc&y`3SwbH zR%wtlFX^F~k+m70pnj8dKSHd00Q+3l_niHpvriPAA;ozj&n0~b@*$u*$i5Vlssg|*m;K3L zd**C?RS_9;K`#T_NUjV3@5`JK>+;)>^ixTxPe^*Am9pQB6r&tcrI>T_NYz9xWQ^}6 z_wp7Z=7lD!Gai`P*Q$xkDH+)wQxVTEkJLy97;G1j(~iVEU}g74`|m1AW_BCcC~23Z fYk6Poe;U64#0WAp3`*rF00000NkvXXu0mjfYn~`C literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/retro-clock.png b/beeos/assets/icons/lucide_png/34/retro-clock.png new file mode 100644 index 0000000000000000000000000000000000000000..c141fd7321251a3d26a49128634424bd0740ece0 GIT binary patch literal 782 zcmV+p1M&QcP)eo}K~z|U&6vGU6j2n#&lPBmi3VZ$vT#=#Ewr>3qDE_KLq%c`{|LV^ zL1W@yV5=1@1&y5{7MdWajToRYK^sv-e-`t`y*utOAK6Vf$;-~ZIq%*x_r1CAzL5?H ztjr)_RMKflmCz(hbt)16^yTBURSOx9?)piOv2HXaI<`9s?F7OoS&+@bH z)BqPHJ(G0UcS~B9RF||aX)E;iOB$9mF6mst_BTlrW;UNU0A9pRV9!0>_Ym%Z9AgK= zH14?Zd%#Q?5gzlvP>F{b0u~asZsZ+2mWaetpgV=z3%m@iH-*y`)>w?+z~w9veZW^Y z=s^a5(s3s{s;I6ytiWlNH zr7e}iL}(sgfQp$V1#TvV#8ZR2QKUxsP=M>zxuJXKgx1xF?K48U}u_9?i(gjIp6SlV%9k9xm7{Jjm$NuT^B0h5V zl@`!KP&Ej8mqWk`aEr7&(E?>ZOVkuqbpvYtEU_W!t(m@~ literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/runtime.png b/beeos/assets/icons/lucide_png/34/runtime.png new file mode 100644 index 0000000000000000000000000000000000000000..17473e137a6290857e18b2c83c27500c4465c065 GIT binary patch literal 701 zcmV;u0z&8Rf`}l9b_p#KfN`ztGVZ# zIp6QXy?5?NJ49BACP0&@`Swl1eGi=uJEFl_z=@^JL zpd~AaI^bmt1i-7TAZme0XS@n5xN&b55Y@mlXZj2106vA|bzooG5LLia2k{5!1dh4b zY}yb8jORgI2y=H`{6^Xk51iRLaM9)8yWGJvLB^cX2GHelZ7w&z9iN&6h!IKGqM@WK zW;WqUPP*qs;8YQwYm(lX*^iAnjMnc3hL(DjloNjfa4I$@3`>Aa-oaD2$jKEyTcAy|-+h7%f>Bw*C_{s!!d zD{2B(T;XViA%Mv8`{=C|Ogvm)jJHgf}M`vRC_2tzJ74puRg_%tO2P7SlRG&yLbxZ0DpZDZJ zTvqPxyJu#%i|ARpfO$9DHW%+AclV8@0uY+DI-^Aw?-k&&*tsZHv4|<^KtP!zJ9!4k6xeGr}yg( z|5c&X8nszn|1Tkqs1yFuGj(6t5Zx}UJ8DZA5cTS(r0_j;BnR_Ny{fJ)5@c6W@J40} z^`QDT2Q;Z3Rcnd>X-^8B%lTHTz3P`7(1^OdG>{~wSsk2ber~BvmDXHQEo?-*h=_Jz zC-5Y3?E%KJuGLk0KCrZo2N+1_p%4&t2hay>O3a^``7{?IVrnVpR1K2- zju(NpoNEX;5fQH{Ij>@nY}x4nx`9=RYm}Ke7_Rip#fqiN^I&ERwL^WAyWS_&P77L| z>(!~G*nM?02QaN(v&iQ}26NJdRo%w*7chtY{T(xw-y_O|S)p!F8~+^rU(2VTLWg^i T`p-#000000NkvXXu0mjfqx2gC literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/scripts.png b/beeos/assets/icons/lucide_png/34/scripts.png new file mode 100644 index 0000000000000000000000000000000000000000..aea02575da38703cb02a9fc0372abec67758fb67 GIT binary patch literal 317 zcmV-D0mA-?P)GBhXQ7Z$mxVDfgYdp)Vc_li!LYEB=bdXn6?g=0azh4en*w*K_Erkc zYP;vPq;X2jUceRb#b2|WmlD%NU^u<$7m_3Z)T$u5IZ~o>XM!%P0Z}0Y#1;}Pm-DuJ6Dp1 zX7(KeEe+^#TEoM46;LZdyew@1W=_P(l<-zL P00000NkvXXu0mjfe^r7c literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/search.png b/beeos/assets/icons/lucide_png/34/search.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc4eae1cf30f674409f0763af99a3f475eddea8 GIT binary patch literal 683 zcmV;c0#yBpP)Y!&jNzV7(-@WhL z`);KF(Ht(V5GYF8C+U-OZY@8g_<_5Dao`E?h341*D!?Q#uw4KpU>4YA-3ZCIy)_21`jH0$w+a*Zm~IZqpYVWbAyP08|ak zaJ#~BBbv(sVLZr$%%%Cy=6P{8gZ%9nrcMR0-Ll8DJin3HFB7beQ5UNqhXq z*UmZe0+IB}idS~(jaUeC5cjXMS*W{s-v>+cOZTh??XAtYR5?c*C zH%--_2LaFteDVfW}+26f27M+X1{V zt2~lKJa2>xSuDC?<8L(ElOIJv?i%2saMiT{n{OpgrtX( zPMhy$oO73=#*Bg)1Rk`QWvi%c^#pJ+@Z0rNAO>g{C<7}k2Co6PfDr<_BX<~Y+5z+c z$NiuufFraxF^z620CPDrOxg&*)Pc||!JmSe^bjwB-G2?l!yF{Tzk`1xegN^V#fN0r Rnl1nU002ovPDHLkV1nu{E8zeD literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/settings.png b/beeos/assets/icons/lucide_png/34/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..978eb3ed4e6acef1cc2168c01a8405b416ae56ac GIT binary patch literal 949 zcmV;m14{gfP)I?z%Q1Z`=(T92eP@)n77ZbF!e@CTSl zql^e)B8Y@3sYeJVo&!-NLZd15EE4L`dX#AC&)}?^yY8{iIaSqkB{$i3t@VBT+v}XO z*11)k5Yk{aTx|TyjsL_zZa4xc1x6cR5%69&>$aBw7zOlb>@84eVui{z z;%@|u1C9aTm9!VQ2J8i%np2(?vJx#bBPm59h{5t*YrO%in0=Lxv$BC<%oj(5(rhZ9B; zJP82rFn4_@&jIyho)Bw28uN}0U<~jiU<)x`8r-O98hH??+%-q!0yF0j~^brHO4d{#_pI zZWG^X{Hu)rB~Tg0ros;A+iMzd})>op!e>$AC*V;e9xRuwP<_++l<4a}nml#zMFdx3qxGX3l)GgG>O zQiDqobmX*k5Z4@mvnII-nCQvbPO{Z`aFYmHLfTG6iO4gjZO4rNP@V(oOs=(VjYT!I zLNc!rSq&|!#b0&KEsHE&kUv?17GI^V`yz6|IoFneOKkDsp;w{)9H0iM1!l!<65^Y! zm}+#m0W--Ay-v)~3xf}tGJgdw0k1>lzYSD*2?CCJz?~50m2!0%-+{POj0GNfu6@`# z(iIEgXOcZ4qU<41lvL8Oz!5Sf{0UqpXy5i{#90sayot9e<_eh^)J0JB=(jTuX)Z7o zC@{W4f+q@s;g@e>qf|7&8?s-z3zRFj&jR`&(EglQYWypV|M-Ay7$an}+3*Fh9@s$k zyY0ro5R#`iTa+~eBmcV)6*CpM>k)AWn9?84fB9P?M}p3}P=b+vQ$#L0=X(3gIV9{i X?Q2pFR&(af00000NkvXXu0mjfk$u5;xQG@V zb+vYp4qY6aTnnOfRgn&&V%>BQ(NRzvHAqFY7pQDYqzb zY9x&TSKa*#Tmt4Y-OV5E049L}_ivclwG~H68j)1>J6Mu*GABU(nvzPAJ_e8S`rkqX zwa0?GpCpySxHToe1`fFU6ZjAd#Cr__1@~W>*})bNNn3$05gVt`7Bi~=gumdyz+M36 zyVQImu-@$wP-%!t8Vcrcs!I?^nhN?1)xYoQR>Q1H4I-&1>5!z3+k)qs=N6-aNLmNH z0G1^(k$=oT_W+w?f_w$OyFDzauU(>~eqh+$3h*r&h?xm^ z+rZ^4g){x3nOW7$&H<-^XFxdr0-ge=%Q1-+HYMa-a$PoL132JB7d0@Ml{c6dQG@;eg&9=Cb3X<-v0>oW4ooU*= s`;Gu7fNl9_AyH-EftfvyTsNM61B~4F^NqsdRR91007*qoM6N<$g8Pgzga7~l literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/theme.png b/beeos/assets/icons/lucide_png/34/theme.png new file mode 100644 index 0000000000000000000000000000000000000000..86a148631aa2dfbeb85c0b8945d17109b7fd0e37 GIT binary patch literal 747 zcmV6r!NeDlUqfLKk%-m2R81v_%L?Kw1jM*7#!~L=%t}3ngj9e7bmV;LgjN znU|Sl$XT9q?>XOl-Z}T4nGm*!B<%`>{UL;b5JGnd;l~idxg<%J+7&;b3+Jts-_X}i zh^YdI7^bV;5KH&~Z{n9o|8^@u9>HFWU>_bW0Wlca4@I_<%|g76Uvnv5#8?@KY|V#} zeX<#dAuQMU-m91>0Wp~AEAq;EA@=7WuH!f^*8nR6@l7+?hyz}f)ddoK*#yLtW;#ao zU9g1S$d=&aO#dg|*c6D&*|4+@Dl&&1CH8G7L?7l0>R`4W3a!1w0g%w%L6splxc zxm*gLZ4qV;z0ybUW~6_OZW)=O~NcmpM#3rQc!C}j-J5-#WIgG7{ikd zU{(tDFXQDh2dX$4&$3ZZR;91+r#K)QjL@(8DX2gUm4=9%y^{+%t9E%QxCmjukaY|Z^1JGrbtm4#x42UP@@~rzQLrBA z`%;l>*jBJ^5B`nT&1@J%6l7QK#9!s?efT@FPur~DD$=4Kt!89dPzhzz6?S91_&@mQPIhe2OH9pa(_Y zg~Z1~Dzl)6AP6e49wK^ZC`&3L0wekuKOTb0e9+V)u$<7eanfQ&?bpNEm%BXOk8@}4 zg9{FvyVrlM_1|l+z1Kb$E)q$d8mPU%QeYUE56sP~6TlJR2jJV3(p0xdmI*9Tx2nf& zFQ?V_)Rk&aw+IYmr~g(U&`9>F54MZba%t4Hz!u=jFgyi(1&jg*fIsv29N=c)Zs304 zs*<}AU|mY-uPOALwz?)~qnw@onUL6Cg+K#8J?eV(Oz?F`oma(p zZHdIwYP%&IQa@04sVf`k?@)gYK6k3KS~(n0CxXGIpqr&Wq&}+7F4=vl{;YnJ?aTFn zx=1}1C)kR}`=#YbLHD+LUOlURQnLF^9nFvGO-=l-$Uap6R&QtoT4H^Ro{Tk-voWcD zozt&6H|W=^=koZrrZX+DZ-mLd&7rM~w%b z+H3v9oV39Xv8bOH)tA*<+64@DgX-m_vCqS#hofS7Q0%B0qymZU+2@4ebX7NocWY*6nH?+YT41x-Mxw^}r>=KH>}j05KZfj(d?=uU&>X;l^}r9;35pr4{AZ4ByIgZ18{z7p1KMHt_!?oq$by8EgUX(j6G zA>JyeXJkC!t_|;dfkBEc{SWYC7f1{MYx2)2UyPSNHEfhST*$7V=k z4zLZVZRfXAN+%*NWAHI-%%rzIrN<*<8UUSu{%3F-w=GX^XnLl-AAd zGNXPG@Go_RNOt^OiOfgp^)2vssZ$v{Ij!aBfXul1j7^GI9SPWbI*r#Z<*R|MT==nc zj^g90_JMVr;-q{PxG`fErIZeLN~Wb)Tmj#)e!XiaySqxD0ioM1y7X8J58^00000NkvXXu0mjfn48$` literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/touch.png b/beeos/assets/icons/lucide_png/34/touch.png new file mode 100644 index 0000000000000000000000000000000000000000..b39b36025e63d45d7639e41a7992a8929b160bbf GIT binary patch literal 689 zcmV;i0#5yjP)K~z|U?bf|(6hRor@x6-yEi}GyO%jEG2C+~J(LX>D8xay?r;$`4 zf~CE0SlEalBBZcMA&OX7h+2r6QpLt9DKthDMMW@*!H>nxapSu8=6MN%KUmm#=9ziE zJNwKtlO+F=(1RU|4Y39vr8>HpARAOPxo98(=0yOR$LcCRT{wdy?F1Q*R%IZkzl5ie z&*o-h6dUxr9lh_)K=dR@az9CuEy465Ns>3sf;6O%u;0ShUW@D{Oh+s67Ta14wiX*} z^zX+7^hLJA5yUHOY89e8+M+K*P7GB`%xGK*55m(|%ePUGo$~b!`&$msB+M8l!xoKo zG4d${zX^%*8^-urdUZ6v#h;U=IO*B?%_uc)I>dy z(~I5@pmFyvcfW4XiBKF}t9{asW!W_El zeL+9g*6}$PO?o1-ci>h|;8?FPR1>06Nw1LQe?Kd1(XbL(P2&ni(EnEeGB9_dV1vPS zKC+#XUYy!1>6uj4-C%nX+1d{gf-aG6Z{as>S4qsNX69=2&YG)2p)j8$$#}UL-aA73 zK`V1NE$LB^SJp=s6ePgh$N{N(|7|D8o(#l{dS^+SKng0Cra2s3aEJ_0w|Zs!zZ%p} Xztw698XV-)00000NkvXXu0mjfbU-sf literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/vibration.png b/beeos/assets/icons/lucide_png/34/vibration.png new file mode 100644 index 0000000000000000000000000000000000000000..d95774ff7cf10d75f325473621b7d242ea30757c GIT binary patch literal 635 zcmV->0)+jEP)n*r(|Qj4 z0n%9$1`?(nwF3zw1_aSTsYgPE#DFxBVA6P|{S10;x^wO+_qxZ`;5RvIuYI%Ech=c= z@3ml-D9TtwoeOjW+kkQ4YDC;AW9@n%R;i;_>$2L~EQl8MK>~jI?o&^w zlbLT!ZS3=_p>9DS%iCT+cxOYy@toi)&f9UR8kr$AD#-{Tw(4yvWAOv-#3hl(rp-eIO#9sQti5 z!F*{d%E+9=ew#hV65qULf&3Bu2g$4HAnF43ta@9$rLKkIe@%KwO_mI?1h@&TOWa3* zo|fDXw*y3B1VC(k^|SJfA<`j zNq;@am&C5rHY*a}r)GiNP3%Fn7Z^xs{VfOcOx+A@Vk#Rifsu%?#+cR0dYrMWPnl3ps@>}A zq<`uB(~7j>P}!UFdrBK1|s5Xqad?J-vPCQ VYt7uU3QPb1002ovPDHLkV1hY)9c%yq literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/34/watch-face.png b/beeos/assets/icons/lucide_png/34/watch-face.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7a0604aa0b6b6f941b03bf897e83ccc095783a GIT binary patch literal 789 zcmV+w1M2*VP)lg@~XbNI*r28WqICB!wbG1rY;kf{8g6Gi$EH?9Q9r2)QuKojK>; zcjmpf_r8TCVwN{Rk^y^xUSMSco&tux4a zJkV-pKSBj%2|1tm(zlWhOKNkRHc5Sw#uD7qizT8*(ws|tS5lz{zaVMQ@nP&fm-NlV4Y7KP@=}jz0a{@0*`W0X01XhqV?&5dU8Y`=g?00^@naw5e zGEj)Ge}tIXEYM#iS8gHQ&cBm_TNOVorksKY3+agO(`NQ5gWHu{Iy0LDD!rz?5h1GN ztb$KDzYiFZwC-9I?8B}eRyMJs4=!tIL6 zbj1cUW~M0Vw&Tx9+R~5+m;6*>Lyk*2BB|YRI^uT|3GT&^F+z_4C8Bd`Qwls2->aS4 z*P7Y8tTBR)ie@$gyr}}0QbhcY?_YuUA!Fn@DvknOv45PX>Xuokn3KR$;1w`Xi7~UF zLY7y^q1Z2)*|9W|qyz5pd1&%Hr+9yIuhqaj_98TSoeo}K~z|U&6iDxPEi=gf5#X!l8JmRh_Jwd*!WnC49Q0*jk1&F%tFfe zC`DP>S+G%)B*|t9WkV@t;UhM0!b+5cl){uT^RsyG^q#rB_rCYOFPeYdy7xKH^PJzk z=bY!93ll`4m0-0E=t~|ig%CzsM`{kF$C`Rt$u+4(mbn@C{~hG7DHBB9scvr&Kaz1@ zFW+``XBjxuUD4Q|$?;pReoC(8IeurNe7nkk>~Or!=J>X&?K$mdQ@M5&2FXa!T`EB} zM|aT|YLqDcq+J<4ooZ)BTUU`GE()_%-JG(mQm?9?qmI6)SJYK0-_7dQmLM{~=Bq!< z*09?D*E_BQvRM6{box_$lw3n8pkx07W}Dil&WvoG>ct4;m%8Gg!{k6-ieLtc#^vt5 z>KtG_uz+gid<#4dA$-q?nFV|RrUD;B2n(XNWx$rm{VOmSLKw|TwpP6p&4pM)$?8~? z1M@WUpOM(wQ>$!DN1)DLqn-dB1G|B?I{i!o4gnQ)e+EnaH_Xwvp;1o*=OWW*U=XMP zQ-F2AUSN9CJ^~yFAq=MS+yo8)uR;hbB75VZv04R3qEB`~?MRcWbJbgs-#2w(%BMr! zlgzPlQlCW0&o}UGQ*Sr3IvPQ&j*`AHXE%*v=2@$-L+U;CntD*3+$_kE2;@|WxEpm= zf$9r&aT$iORkI|ry(kfX85pW#Ujy7Xs=P%(;${51XmAMO0WcewMfLE!4|ta}F9l8( z%>{tkpDr-XN?mEK5WX)PyfFfKrndUy6<5~6!-G0WeH{h&wg^&*a!qd>F+Mo{Ya3R3 zoB1+Uj|gLWSu`$P;s=1kk?A>b4R}T4NgRL;z;S9@z|j!Gg`zMq$YgaOqc)V)Lkkqf zMnFBOIa5ZX>UERtzo;_jfYtf29@qpdq`Lj*Y3$&1H-u0r12LiW2N~PaLS`!yng9R* M07*qoM6N<$f(_hhZvX%Q literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/about.png b/beeos/assets/icons/lucide_png/48/about.png new file mode 100644 index 0000000000000000000000000000000000000000..b19c91105e924e355b4523d7b90343987bceba43 GIT binary patch literal 1016 zcmV*&$*hP>i^#Z$ycUtCA~Ir(najh! z7XSks0qy|vWXC*k8|Vabxsh4K_W-XvM5o~;(7hDGHv*4y6t3|QXf8^8AMm}3^KsxR z&8i2ZZYlzSF0@r|vDm>qS-aLgH;8KdS1>h#I+kVFhFSEh#g%|aqs|W z333qmXeCM=7p?^b0bF*F&H<-Gg*$xp10{#Qi@t*+^iVlhrad_}lbk0yZJTAP%_((!+ZZ$E<2(-- zW8R9$U3L1T(-^2HSyg75VHIC+3dKBom8KG~(q*XAXS`~@EfL~=IjOWADqpu#=zwZF zY>Z)PWTqq5pa+tJwy&wF7vqjP?~KCp$XSvDPX=v_fWMBBYd1 zT;4N!TuMx(l@hk0tC-vK7X;9usOGSWxk?HdV`fFs_hzIELB^+>& z%>!q0)?Ute*QcrrA*6P2GO$ocAybh9&e5DxxUzDstV6nd~?2rAew;TD$YYOMAp&9 zGmtK#h1R_A95`0Ea213hs-14({xq~0N<{tVFac$IUcVZwl<1}7fJBQP6o5eh0000XSZ7}=DkmQ1C(4RbO&mM8PLWIXk!MnF$3C|0c{Gug{p>q z3ssHU8)y~wc=OG{B75W*=||yeSLL^F?-~(f|fzto-U3d z8I5mm9OOD=AmVbd{r>Z1D@qp5kKeC!=DtiHq25VS!Z0y-QD1=`j0W@YVK~C^^YnfPx~+5WS73|slKT$>lg)3 gt`|ECwCyZc<(kFVdQ&MBb@0Oi4BivR!s literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/battery.png b/beeos/assets/icons/lucide_png/48/battery.png new file mode 100644 index 0000000000000000000000000000000000000000..7803b35ac44b2e0fb7b025012812f86cd169d85c GIT binary patch literal 390 zcmV;10eSw3P)?pDAUehqa4Hqw16~xx@0m#r+-fWL7)uN+gCvi@nP@bQt2+QzLG6Vk(KbkO-htj& z?W>^nrfJ{bRS$3wD2jG}gd>sG?{y<59oZNFM!@>#8P$DofP%n3>jR}1F8A%(tbtfO zn<*5-3}|Bpv@rwPC+K(Ozg68NPD(3Q?*Mi7YA2}K}ICo%#tB$VM3 zXE+H0Cqcq*CwTgFERKXEkdBv?fN_S^1k$-yxh9sMv0BJ(HpF0!R1>~PfK7{<;IuixIhz*tZ+XTBYjh`Od}ZZp4UJrI3c#fl~XuPZZ- zBoHP%k+``VCp=M|+v_nZ|0Z;JqBgp7XxX`#ifdvomv6=2F}U=BD7M7fY5;>Unra)@q(pMlZ65Pl5!E~0RaCE#dT z;>UrljN)s+r$7Zb2^<2Rb;lw1T?Lo|Zf5X20xB_u8{ne`#dd*d;LRMIgTRdA@L`go zeZv*{tU-ZqfSy7HY>i%Q)A3=dkO|;p59u~=v8ZrQtqGv!sdqIm;kbwFF3{g%{s{1= zJ4RZ}835KjbuWa9KSsL4-UE6AII4-Sd4intJqyatJ{92lvaA+-0wI&U8sh~e% zDgZhQq-!mQ>mQN^o>xIz1q%951+D=v@LUuZka=z?G0Y0z9WU z{`LiJsvzB@LJf=n8x2eZ837Kf+`oK5zp0>;MGQF3PA5`doFq1AvR(lCRZe<<0lrp2 z(H7P%7|C2O0Pm~#uj;=gJMnduHyq1=G3JpmW>Q365|Ix?(ex+G|glM>t?h| zz(PJYfa9bWG-t9B4Dh2$$hD-50pNS3WtC?A5*Q_oi9OPs)N$FP<6NuBdaJJn43w-n zS^ss?1Ij`O!BOlkaT4o$(I0?UNN;RC0A3Cys(5bUI`CRa+68#SBOYKZFX5zzYzMd$ zS$nun4KaZgKnYEzlQ1_;J#sO&y;U<*%FY-3hQ`^bB_EqvdIb;~c_1r2cKd zo&U-=D0+c($4=rF@Huu{z8~lU+T79Qz8iNjw=;MilDEybV4@pX%qU(I3xtj~IgOmh zZnVb2D)3(E!j%bwojc9q|7)ljYS{jBh62;}Sg#tii(Pb_61(ZtBO*s6{i?z5B636Q ks|G8^m|Beb2iQ+M0cbs$nE$o`KmY&$07*qoM6N<$f?smx^8f$< literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/developer-tools.png b/beeos/assets/icons/lucide_png/48/developer-tools.png new file mode 100644 index 0000000000000000000000000000000000000000..b3a911b6a4b94c2ddd50bf9c891dcbcb1fddf9e7 GIT binary patch literal 562 zcmV-20?qx2P)|I0gX{oXd#|JJb|7-Jb`$E zkV>pXuoo{N77+qs8Jh%t76#lrc9Qw?cA~f+q*$2u&G*6EH{VW-sZgOpg?|H}4!n(i z^;zrj0#E~b{GhABJEuY7h)rY6O76L)L7LJ)LpmUZ3S zngP%%OT4dv2T^9dR8YTWS=+Si6=niBC?FgHhaMa!qW)>h`hClu zN6E#HcshdP+@U7UgrfKbpf7mV9c#l(Xo(+j?FpV&AoHmAGlB9;1l$O&%K#4dA%fx< z1LlEu!M7dAHF1oW6(zQeG5OQ>!x-~e(q7-tY$4!E@LUIK@;ir6n!_k$e?kXJtO*pd zf3SEB6TpS2YbO;SYXW!{HOI-t=Lo%CA{?{7rB*l0O)*gzr*X{wmRkKdJ;8*{fK&E& zFrX(sx530uN<6Z^g}=N{N=E@+*oyEy(8Qb71O{g_yF<>AjFt} z`U2(8BLSjb33zY4fROreF|%PhduaD;cRH;0OEzh{bI$pl+1b;xvq>`M9|c$j&h4=r zTaOyxj9bn^#i@mI4A2v(RtpkqB81aX@_!@%G=S;QVw`x>K%*>Yn?M)n0ILeSLN_tc zva!0rW--;b&KlNH$~CZ-(^g$Zfi)W=r90G>u$Qt!FS(OY#`48uV-L4>_Xz}qBAE`%``_MG&)%d8^qBk%h!VT@Lf4oq+3va7KD?Ah)OEl3NdF>|>DnmO#A za!<-=9n+Zg++6*V0OrV6mQ!GAl-gZED?)|1!qoZam})Zvya2ukGyfNO8AZI4#I}$` zUN)kNw+T!DTLr|w=RUO4DZpz?V>XCW;8iSK7c|Qc(5#C|+=kU-HFfoIoGW@AzB| eij>hYRpbUH-r4mTc7%Tb0000m?;=Yi#73jk%4+mF9$DdrMR?j7^zn7hUNl3UEo$(irVoVhdkj43H8Nd(XUp6qHU z_MHXxfP0{8*PT5#t92h^g@5s+(60&{0w4J4*_x_`fnO+yzl;$sxy)@s*}!26@n0PD zg#n_O?}>ITqIYb}t_IK+H9er-4+i!e;wKz+HHV32p$33KU>?{4POVt^(t39^U`f>8 z6=DFG26p(pbNLvH=`${BUu4ZtW=HNDP8nmijWKK5y?qR5H3C+QF)d@vx=AN~A?Dhm zIDSa0>l@z)0mHy?%!oV#C%_so2ONp(ZJ_43Uk&Jp+Fexxz$kF;5#9n;ff3QiwT*U& zUf6NFmL1}Cw^5?6sZ0DDunBm_2srSVj$=Qwc#i?s*mQuI1ijM!N?f4*E8*Z8m`u^H zO7tY;IQ^st?B^Drz(6~Vc+s~G>;kvIt6jJDT=tnyVW3Nbu?bF$fz8m`65$cwB4)Sg zD?A2PL+eV6L;N%1BNc)?|3YV#O66TmNk;M*xKdM*gFFUq)Kui)PXpN8#&Kx_&D=&C ziq35`Aw+JY2_bSDEeMs{C>jWp+h{?Q691%_+(rxFMTp9k+x$0bu}Uah1|G$6F}aNv zKvRrGF}aNvgvxC+Aw+JY2_bSDZ74do`7bCcw<#$p$;2mB`%aMt7vg^a0000=Oe3 literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/gps.png b/beeos/assets/icons/lucide_png/48/gps.png new file mode 100644 index 0000000000000000000000000000000000000000..cc8817b82a0c11db6d19a212adb4648fc6fbe1aa GIT binary patch literal 952 zcmV;p14sOcP)EOw2^}fdNtOh5dQ^@zW^~o6R##7P;dST zMB*7pZQ!9ji~IzqEZZS$WSa6iLH1PN*jrm1IuCeD136&d@kUG7voh^!Yyva?y~u?{z5{=d zdgLHKSBAL8oWqGxC9|bvYIR^hDP9LoD4ARp!DO!ZdLV< zl(BJ7$*!pWQ~>+#Gd4%32O4_!*-`z8G7cn_?2hX13drH#8M~Gs6xlgiYT)A?@Ki)L z1B}rDCa>Dp%Z$CD+Uu%)K7jpAF~o(*$E}17x7#renCFj zchw$J?N=hQ?`fw*WC^oillHnVB1n_De*XcL6It0bFaazByY^bP&(aS0I54Yp?-KSI8B;yb$WZ@*#ap zY0Oe4`j*j`1l~LJeZdsT!UyJ1@2V>N2A&c8Q2!ABoCmYEf&{a=oao10nE(HRl65(u0{ATU8L> z!c4Vu_1X_DHO2&|t76LQX)&dCFXrW-yuJ`tdA;=;S+mh{pxKDhfx;2@#{(SqzZ$d< a5Pty(>kQ+#JoP*P0000P)-*G;r)j2%ggpxA-pgI0)-h^UB;rsHKj@&w9taDm=?vTiHY}fu+ObK`>uV? z-uIrE$^GHN*=MiyuYaApA8Vf@QbP?j)KCq84}b}k`WGSswTQ@ z_eA89h@34H3b!(NmWxQch^!Kk`64nU>FO7eKP;Zh;c27?Tn}6!99Muf3eRW2tq7i9 zfwpRdHvlIh0=hVwa5Ms^s^IAYrerG~DSj$&ql%yScI83HvZRDXW4$?_;wcxh3oG}rXR`1*zMfjT)MCm zSmhXXj+Uqj(B-sOlvx11&fhdEPX$05a6kD)?XbW{j;x`4M%x3)MMMPHq)k$wNkkTT+;#=h?{M0#RuNzx<;7T8UGEY9 zA@Hx|*GIDR0^9IoIBT`ToJVXFfjK_ob1A`Mu`}W9%#jn|=d^5F2`h<1a1XQm^*Q&C zRl!*V7H18InB!v>estP>m}=GCG(+)A#%LA+rUU&I1{ieOZV}d*#3=2`F?fzy5V8R* zz?8u@hJmj#{5~Ol2yP3A{WaxP!Bb#fka&w|J>^ey7)V`SfeRk-Z?c{suw4;90IZD? zZxOZwLyC}&6rW9=1oVT*JHHOfhuje0mif_1Y*CUZ0_r9N6o9)*0((Bd$ zdq_&eA5{FF;+Z3(2A~CVG<0zqo`J06b7cb=gTI;!i4ekAa0_ zBHj`=-;=}{U>eX2{G{~XC$>BoEdXQe zrHJnVW{kDYQ~(o!?=W9y1~4VaRZP88@z=;2YN$cSTOWw896;!{4gdfE07*qoM6N<$ Ef(-%f9{>OV literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/hivestore.png b/beeos/assets/icons/lucide_png/48/hivestore.png new file mode 100644 index 0000000000000000000000000000000000000000..1f836ca43b2c34255122a00d2a638c267ef43f62 GIT binary patch literal 719 zcmV;=0xZ>sRiIh4_)9>i1krzD6Sx?n%>u-?B)yZ=&if)#vL)%NnH?qtO$8Ks zqUyy<(u}0FTor&N&-A_l&J?3@Xsl`At!KRDtOeV^fm5s#EvZrfT8w^c2SB=fz(vn6SdkKG0iow2_Hr_vNzFKj9^04#gPU-!k1>_WgjNiUr4zNEz6pafcyPB?u_ zX7)1P;WMx+>3oU8@~~%S7vdd01AR%yE0dItzL_=R9XBl#=1uK_fS1~zJWcbo#w=N*=g@)6_Lll2dBN5BKMBd-pHY2m=xc@ zT_>~)%mmb*1&*BDg}i#Q7-#}Noba6_6Os6Do*eJ`FV#R4d)tkVX5t}m1!zRi9Pr5V z<^gUNr6*GY@YEwJl*dKu$zos%Sj!?F7`us-ZXlL-3-}%&d zp95zLQx!-w<};^zD;6ynoR$RTl!(3B?OZM3NZN+?%G-qZ*OMGMrnc0z~YYLgJ z>e!TY-4&k*gG>8;U<3bMwrskcZixQ`3)&F;i>pi3p@Y-002ovPDHLkV1m>a BN5B98 literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/home.png b/beeos/assets/icons/lucide_png/48/home.png new file mode 100644 index 0000000000000000000000000000000000000000..cd1d4a07d39bff848cb1f2a4ee74b88e3f6d8df4 GIT binary patch literal 683 zcmV;c0#yBpP)_Kh=rE~A=n%7t1xb^@O~EV!S3AKy~%zJhW)|8?K1DZ-`m?8 zW=5oDj{!7++rWFE7k*ZOMPS^wUn)QwSRaF8Dm z0Q0`RMMMNx0{V*NBcKILhTm=az>-h#G2m{(6TSoNi;OkEazdjIfc;g=PXMnJnI3RG zCGINvtM(c=RF!-i*iadu8VY&L+Su1T7}x{_oQm?=v>Qhz3_Wz)rFH4EHQf>(f6+42#G zR#?;KhD-3O74!sXRN!rUG=Qg;OUET}#|oOPz&FWd+Hwi(F-8d@Ho%ynF;z0kC-*$= zn?f1@P6IE|ml`(Pz;obK5w$g$7>@Ek9mH*Z;IIJPtxuK)USyCT@GP%S?mscGEg}a- zi6rpL7&9>(S9N?4k;}GxD!@2!6X-B}R#XK6@Q!~+`;{N8)zthi`~}>YA5xID Ry?p=x002ovPDHLkV1nGSGu8kA literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/install.png b/beeos/assets/icons/lucide_png/48/install.png new file mode 100644 index 0000000000000000000000000000000000000000..1f0f8ee92fa9c7c9681fa1512c47bde2cbd85783 GIT binary patch literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7l!{JxM1({$qWpPGd*1# zLoyoQ&hYhPGL&fBzblac!Fk!3YL3O+91>zx>`6Aw_Z<6Gtn2d{xcwT~CLM28J!C$2 zrr3*;D|RP!(k^|go*$GUInhT=nDqfu#rEs2uWSx7B-cqCUzME1%d;Wq#0-tCWl21@ zR3a5jkS5t1@HetAs`{l|iznR7f0hjVxCz&x@yL}0MU378dsb^DG2p6>E`z&~_ z5i?iY8D#o%zn0l?KVi-(o7U~Ay8_pkXYIT4^k@Bl_FHaZ9%tu^{D|4d$R~9w zh`}PPf7z~H?+3nj?U~x6y`ORxs3`Hj`ncNvc=U0-TVici>$8<_i%*=`F=vfs<;DuZ ziNVQdP6_GjC?=l?aXEM7`QxmOS3j3^P6>ANqZ!1jXZuz8k6)&(vYMV&bg&f-bDeZ0nP)T@y8f& z4yZ17_;z48L2!$=!2WWDKMu?k5&j>hf!=b2PsN0p18zspw*Xbqqa|9q1I)+pQYCAG z%w;nh6Jh{p_TX;=?yj&CZEGFAn%rxC5je97t^SCcjW=XYv$X-4)5aok_yT&TLuSr4 zt0MQP90;I$&uESU8$x8ZMn{a%93I!ahwgUZkJ0Y&J+FZ!lV^i-jzT=&_du0B;B-j%Xk zF$vAG5cvhk?tHE=-5Vr%Zl3q$`EJdOO_${f+Ik#-+ z%h>_v+cI*X@74f+Fx2<}}nYV(;;r00000NkvXXu0mjf@1vD? literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/package.png b/beeos/assets/icons/lucide_png/48/package.png new file mode 100644 index 0000000000000000000000000000000000000000..dad0b564cfc0bf066aef23e2e046be62837c165a GIT binary patch literal 874 zcmV-w1C{)VP)a9mm_2U#~Gul4@I6oN?h5i*dK`d zxHKKZ+SUgS;>U!5$C%CF`2>pzo*OtaOyOI2hQieG5+*rPeG@5{*Rl50M}a~o5+;0|b44$m|sEj{ea;NYl$3QM}^ZHZ#oZz{s*sW$^5Ccv3>)gEl0{`X; z#RHstV*};6f%Ce?y&d05FN({Gg>y$tPiq5}-&*B$fO`giB;xz_QA0IQ8Pk;4Kj1)R z{9as1jDL)|LG=t2pvdc4MXrYM9Oug;mNE}Yj@0_HHU=u=dwIPQ5gEct8MA%ZdfErP zira^U4Dk!t*MfI61}gDKh4(YR$yfl}>gn4h)(3UF-PTV?_@LA2EZ0tN>~^~=18^nv zY-mfEgOJcc#OGj542%-%2F8tb1LH=>z_aQX>>QDnKIq@3_dU>r4BV-Gzld!^QZmTR}Qw~oD zQ_}nWdF&aM0nLrAMeNQJUmlgqp0bLyFbB3sAA^-pY07*qoM6N<$f>PCmK~!jg?V3+)3{f1%e^39YCQ>97G$9&MN{9nJxYVI14XS@O(Nv;I z1#xzAaFP&hkhpLWA|VLDfw(xM5)y|-1xYnjOQ}}>Z2NJT*>?JNW_EV=?M}#klR3=h z_rBlHZ)P*|_PrI!>pv7w13Ur7?Bg-8BWkWd0*(L^Bx?fbh?>t+z%t;b3%IUpz>=tW zX9X+(+JP?t;1lWx+JFU7f-kfo-g-d(0`>v>ff0|IH$W>;oD1M$pb}^St^h+mSGXIf za*VA8Ui;J!0+)eiJEO=HbT#l081)HvY798(27q z27Js!zKI6o=9?)y}u13RX(p5s?-V>9>!V zQtCz!=oDEx%dGqwc%_}!21!;*-BU_c*vH) z8wzApO!DGYTNar0+(TOCH^MG-0T(p0UZBJWn;Nw7z33g}DL6=($a0@68;a3jacJZ4A4j6@Zgm&P*syqlBBf#ShD6(ta7Iou5 zdsg5b0DG}^U)=N_Ym=|kWn2kx*sgKYPqMj6p}|xEFFim2zGJ;ZwgH=fa~@Ybp%=jV zoWMJpCj_^#e2R5jOV(cO^1ALKF7ddM zUDptA1o7;(xQfpJ?g%dGi%=pK$bUFUS4b4Ef`avtVPRoDODQ(awEW6Xc~#{}34 z%mUAWZ|+$HW`Hd@w*A1(gl!Xe;okNA3Gjo!dvtjZ>{o0jfu#)FC1AXh;78n!;n3;jJmqIo*83?jWP8kMq|uFW6V{>?6~;+Is&I(fSveL z-x6>%z^mcEU+wmRCb6TE1}S$#H9mt1NS_@0X_m-t0K@1+##LjphUg~ zo+=yjoq%&D7pnn#fiYmGqSMaTa>uS00I!ASM_@E|u_1m>l`Y^2(5>j77EYt{wcDtq z)UkzN+^%Tch+~L&uk|XNnMTShOP1+fTGRDcOu9%icb0Y7CXq`C1|I4%qBd zp4Gr7bjAp8JmLuRp~-~Huhw-^E?fb;{mftM~Unr;(rkTG=tHii&b6iOE>20sCO&Ir9vCWG~(BIegt$ zJop?EdkPTvCf4w#XKV`@4cXkx6Rmpa5%P+rSO(xvc0^*Lo8FXWIu{`>2q}l4`*x zNQ@KKczg$jg>B)#Svx@@Z|dL$0PH8-6eXojUOitCi9T#ov4D;HuLMpVfX%=)V4hzS ji#cE#t&{pMf3f@k%xZvc!5;;J00000NkvXXu0mjfJpcaW literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/plugins.png b/beeos/assets/icons/lucide_png/48/plugins.png new file mode 100644 index 0000000000000000000000000000000000000000..81f0670d32b2850d3802947b32c5459306e7e8bc GIT binary patch literal 1117 zcmV-j1fu(iP)j_^#e2R5jOV(cO^1ALKF7ddM zUDptA1o7;(xQfpJ?g%dGi%=pK$bUFUS4b4Ef`avtVPRoDODQ(awEW6Xc~#{}34 z%mUAWZ|+$HW`Hd@w*A1(gl!Xe;okNA3Gjo!dvtjZ>{o0jfu#)FC1AXh;78n!;n3;jJmqIo*83?jWP8kMq|uFW6V{>?6~;+Is&I(fSveL z-x6>%z^mcEU+wmRCb6TE1}S$#H9mt1NS_@0X_m-t0K@1+##LjphUg~ zo+=yjoq%&D7pnn#fiYmGqSMaTa>uS00I!ASM_@E|u_1m>l`Y^2(5>j77EYt{wcDtq z)UkzN+^%Tch+~L&uk|XNnMTShOP1+fTGRDcOu9%icb0Y7CXq`C1|I4%qBd zp4Gr7bjAp8JmLuRp~-~Huhw-^E?fb;{mftM~Unr;(rkTG=tHii&b6iOE>20sCO&Ir9vCWG~(BIegt$ zJop?EdkPTvCf4w#XKV`@4cXkx6Rmpa5%P+rSO(xvc0^*Lo8FXWIu{`>2q}l4`*x zNQ@KKczg$jg>B)#Svx@@Z|dL$0PH8-6eXojUOitCi9T#ov4D;HuLMpVfX%=)V4hzS ji#cE#t&{pMf3f@k%xZvc!5;;J00000NkvXXu0mjfJpcaW literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/quick-tools.png b/beeos/assets/icons/lucide_png/48/quick-tools.png new file mode 100644 index 0000000000000000000000000000000000000000..69fa3eccac3d2de8d70044dd5565d952c16dc8f6 GIT binary patch literal 803 zcmV+;1Kj+HP)67&0$L>oRNwbokN}33Q;PrZO#R_N#E&!ico0fsYS#wL0 zfW5%0HG-GxdDiR#`hmq7-~pDhhCdFhIKUQx37`+yX1v3|s^xo@CHx-G%1;7YEpNe* zXc6en3cj7nnlA!p99|dv3NV}ndkN~iW97#jzFfk$0v|1?8xCJp@IVjn68HtY01nkF zfo=kK_>#u!k-)SSN!^yzR`z%`CRQ?;@+ki^S_N7hp7&9|f@kGdfD!9iaorOzz8()?Ap*Vt zwAD2M1NX%WvfbnJfjZ&MJ3Fkg&-F-P$_mmS;f>p*c4-Y*<8|4@)7JMBK4TCB_au!< za+N|+(x~zH=CWfY7jW5Hr6piP%sV~6yRvuQ07ooO2k_IH`#{?8LynU82DHV${jbJ5 zJ!5yQd1rAP5NX2~fuR)UKI_;Y6_>*#0etX@Zz1D z$I35|)+Me6_(8%wu>{;CJQh1mQmy9m0C0=S4GZua=*5b#0lMC>@CM56nw|6b@&|9g?7R0yhbN!#25#O0>$1l43ol8) zBMWW{*ad6?F6J6ulBjIoMJZqKk_5B>4;m7_Bw#aeKLUQ9h>lw>MA)c34Lk(C6P`|Q hfvb4>olX7E`U}MU7Je~%!T$gN002ovPDHLkV1hHTb3gz9 literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/remove.png b/beeos/assets/icons/lucide_png/48/remove.png new file mode 100644 index 0000000000000000000000000000000000000000..48513a4a97a50d35d93ee4ea07ffb8a48d86a08b GIT binary patch literal 486 zcmV@P)ugK~!jg?UqYU!!Q6u$84Z`3P^ko0Bkt~f`cHjK!7+5oB@e@P$48f zH)uElrK`sRMKW%|cH-2u_^lG#Uv>1jhIo0}sFju#(&S4)7Xa`X`=& z?Of)2EzR2@8jr+Miwvidc3bFc_9dMp=qC=o=Df`rQ1;Mmno3>z?%wAtdPbV+55 z*|G~3Zwl#aPkx)VkpSK_<-G8&{8YO|D6!vL$SE{elmNLY0cxxheCmnmtM3fo6~JmY zw3-cL>tnxHlk6PuwM*5HOIZWCDFJd*0_3Iy$V~~5n-ajH`r$dWz8fNLqe-sQ*>0n$ zD7Vph<6i_A+b=-BBQF9roT8CW6B6LndA|YHf?WjytV_CfieFN6eCcj&Gvv(YFJv3- zNg7DnYyCIkc$Rcvj2Zvd$UB9MF(XNbN-><_JV`q8nU4Zk0nUK|@X^6^83Fge8L*tp cc%frH0kN=iHY5fk!2kdN07*qoM6N<$g2Xe`;s5{u literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/resource-monitor.png b/beeos/assets/icons/lucide_png/48/resource-monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..d393f1a3260d016ecca87bf0b7b2c794e5a656dc GIT binary patch literal 792 zcmV+z1LypSP)kXgqRo`qYai=2@w%0DYU0C7B&_J z{~iAZ8xNx~8Uw~qsEyblg@k~=A|_l!<*~RuUFPQYZg-vCHQ`Av*`4p(nfKd$Z*F!@ z+T%Y5xC49vJ_EC5>q!N0iB`so)UYq-^;bP@*K+n*9Ked_39OW@t1E!B9`Q}i6s04N zg(eeXmvi)+iaZ4*i7c#uOaOhrR)U4^l`%3vew` zlQieFO=RplJiwA;nJd7w)ApuponC;Gj?iu3C~yS$?!-=o)|16TQ_lG_Gut$?Z<6Mn zSa2I5XGA80E1;{j*A)sYL2(v zDKnnG;N;GP()PzfG=53f@gV8FTD^QXq2Ek40uBPVfJGWVkUrLdY2U?O@ojhk^d<-y zaq>R`Jsrdk0WZ58e?3nDi@@;?VtOLcaYj1a`EJGUDj+@!-H^1=W{kR|=aOzpI&WsJ zcOZtD{gU+1X-=}ybxFes@i-f5XblT6KPn`23OWMlo?H?MB26@XloTIB z2w#Bm0ci0BsxA-0vs;LeA`un(p0juF2Q00SHZ zZUQreV+Obm8~~!+$Pn@Uz_S9Po8c*NtQEr70e2$`*SHO=txEhL@I52=1aJu$05${5 zfQ9y0X0HtZ!@!#io^QZFOyLGN-z3;9a1GdAfO7{hVmW*`N7=q%16^(s;193|mnGI~7$8SmHC(&1ZrVvtYyo4DeRb?W_O4z_HzbXE_bM`>$xYWE4eR(|VSBQF=a)pvYmXt97+*4W}GgrR^j*-Sti!{4BPJ475$?L4Q z`f5OL#hTstTS*TnV<7}oQ$l!-sXL;s?L-lH6&ZyKHLE|L=fIhdbFwIVp;xr622z^$rwFCvh|U>?691D zB$L#iCfvpEe3PKZNq1})Z-FZ$+wwg?2he7Z4ts6T+Pur)`AX3?pCgGiz<5URvKS+D zv?-X#QId_;Sa=K^u3WfE!jRNXqxfG9&4n6C|JhH8vOU(P21_JabnKC2)2UNLR!aI) qgV!SRLXuAn9vWk6G2;KneBv*QE2Q5pvQPa00000a7b_x|Gzdiysn8&yhvw2;T9Ec) z2omfes93>5^;Ga8h>9Kr!JJACQDa*4BqCl!#Q(s9h_o1u`PGnQ^YJj7W%iwScW0Aj z-zxdS9`=2o=bi66!@lpcGgGM?@jnL-;3KTnJ|EzCYOhjY5KD@@m)fl@7{EeA9+p%4 zwFLdR*+d@xO6}Mb^kJ@rJj|!|jDlnMxQ#r#klM9CP5#4(>~`>d3qz@W3*eoI{BQUy zXj@9{S^zg9@^>(TUxN1O)V>Yi?TGwcjN-ANeHRa01BmLEpEjo$FvW zBEN!Xaxp&y{j({Z>tGstf!sRI^DK&wG_^Ip^MlFq_%LbN&IFIJKSsMyv(HHj=GKWEpoyM9F$EgV&tIm6SXs) zX9pMBDyxg9jBiqsQ?i{)ouGmD;%hyc7ujj3@AWME>2>z6EeQ zko*L{M&$3mM@$$}+?2u{mh2Y%vDCf=WW`uJK1E+@*C?28BR_ZF%2z6tiq;kEP4uUB zY)Oj=EMOqDUt7eVk1b&^wOc80T=p8lKeemzzW>TA1xFl$e*t7HQf?0&AUgm6002ov JPDHLkV1iTAlYsyL literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/script-run.png b/beeos/assets/icons/lucide_png/48/script-run.png new file mode 100644 index 0000000000000000000000000000000000000000..13670236345402d57c632024e195c644ca33acb3 GIT binary patch literal 629 zcmV-*0*d{KP)#TKNh50I3Aa7_|`; z`~((uscl6Iu@EGsLcFZ#VrgTeh=oXq81!ecGcpc4v%8a>o9qMA%;kNb|DJQ+J(mz> znrWu7gbuEuho8~)I=Z(|x4&HBDEhMX0T=7`IaFA{`yBI0J;lkoJ^v$IAJcrSZQRAa zy1j=GLWuf#Quon~t~&-}VVJ()GIrMu@FQicn|gi%PjXtMhjVrL4{0|!?_H2TRvzJ4 zh1UNX8w((McMn$ZEdyc`w^dnoCjm%&a{z1jl>zb*%Vm3y%}flC`1TB*<#elcoG#0I zY@#qg^!+X@<5LF2cGOzk(a{QMrvQmKdky-3x~j$cYA}ALTXv@fkcf92k8`?J59g=h zJx(}PfJEGC%5GTzQS5o#!1oM@P25ChCrL^JNaQ$(d-$CJ(#Mga!Al27t*r|hZC+9u zEb5=8i0m^}O+$yRTA)9vaNkm$YPi{c6sy zJ4}r`;OOApnC6>z#1ujZI6MNPxrcnQqLx_22DYMW16MTtn02O^{$u?CjZ&g0^-J&R P00000NkvXXu0mjfB_<)V literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/scripts.png b/beeos/assets/icons/lucide_png/48/scripts.png new file mode 100644 index 0000000000000000000000000000000000000000..2c4ac8ff4b032f1bba285ee609a75809bd703f4d GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7l!{JxM1({$v}}~o-U3d z8I5mmc=I(Gh_pV8-oDT~Dd~d21=bw}3Boh}_<5K_DYYEWJ^53}O=bIY6N8MiE-o%g z4NMuomVY^CEE(|m8spURWuE)Eo`f@L{Js!5eTR#eP2=wJZ5Kn7M71VzP4ze$=M^$h zNVeeHIkQ_1omH#9@<;1VS+d4n@qyI`;rn|w|6TeaPUK$qq3V;iHTT-9$_my_`g=6& zUU+wLZO(xh-T=HY5W-QG=OoxuV+XmlK#>lU_>nh4EKbx8JdpIF+^7 zikgq-!rFCeK2w_dPDoYEwVWOd=vV6v5#R7n`4r3%-^dq$d_dm^T6y5J(pm+oc}JBk zJVu-)!fq*#;@;d}4khp?A%yppup{p>KNG_Hfk+GHqm!lpT=1wnM0_6%X6Bg=7Ql*i zU_Lsz#O8s46t(&>vrW<$I)Gh#9^f(|783-Ez$@TBFp60cx7ni`xCA@^mWglNOKX&} z2iyuBq6L^OGjds(0j^_4zP2H3kYVC4x-6_xGTQ*x>K4KZPEh`~a8a~(egN<7Z?~ypZPSntp|Mv;hu8%s8||%X5<+}!w69b+LL9CDA|k*f j@Xa3e+*~zjawzx%oG%GvE_BOe00000NkvXXu0mjf*j9k@ literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/settings.png b/beeos/assets/icons/lucide_png/48/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0616cbec1b9897720c894d2392e2fc913ca423 GIT binary patch literal 1278 zcmVsR{`}6pBA4(#126~Z0S16^;Dr1AEO14o{iOm}4jd&JKLf3m z_UQ$1D{v~sdOp$tv}F9P#`M&KoPFN%9B?RyHq z>&o2Q9?n+9*;J0UXOu%kM4DCk0}p3=M$CnQ8{dn8)j&INwW@Ceit6cJ@6owYaSFgP z#c2RmxVDy@*E|7c0#9R?K0Us70?z?&0cTYGK#JyG#XSSO39JYDiO-XtfG(gqulZTP zr{u>ZaA%6{Jsy)G*aghW(}DM4 zpfv!z@7mO8(^|$O{*H*OjojKRBJIYQDHt1)I>mhd6f>t(3{7ZBJLE{b8z@$CaTWBfX2qfOY2 z?ErAnT|@3(Qywi5IikvSAqMuTUa!pzvT-%Q7UFwC6a~kr3DjJt;`f9EZBjwwWTe2( ze1D2@jsC1oU{muGD(=;g4lDr9s=&X1l_@b>a+oinFGa5-!NYZ#9dH7^wfa|}!NYCB z4vi>=fli>#U7f&);uL^I9=&<^m(Ztz%twUQ6CckTJUpF=4g+&Myn0V3dOf_?6sHLE zr!HeJ)8rI)0v{TN^yrgoNpB8iD{X4VzugDD54T8U_v#RxYPl&6?a0_&*a=( zsQ_G-<}vF$5ZkFmgp8PS!{=cNSsi#xagG>cii$I;%8A*ih}@;hKST@0n7>8j+sLgd z5qUJjqaVNv#8cl_JiK1T83F1&yn5nkO6*t(Y*d^g@O)nLJ;X7NI*mE5Zy7y=ov^dr zwc2AoX&G(AF4-E-gqmN7e-l}e64U2tFbkVg^j5kywTIYI)fcSS^<%*888LZNiJfGp z60O*OJ&KJX9r#KGJ)9ZzZzuYQ52q*!z~(IT5zR+bd{8p?iwbHCX)F@I2%8WN0)Mz` z(A|rT`3$Z3%F9?t&|wu+$pei(-X7E(-|LD25xF5!?giS7F~^)}v)Hx1K}1f8JyP}? zW6tI@SL1YAM5IlPgC}9+MFo*dyF2;v_z(>SW z6oBQS4Qxvg&q8;Awr`IK!MmXkNPx@9w=9-03EZ8c+s^b}Y<&XM26we;Bn6L9qA0_?CxkI5wLzi8t-6u>RmPpDZq2`s6!UoU{A*sm%{7z1vrw9iyvPhj1^ o7r=3MeUANHmHl$|68>ZO2YtAr-$!PTmjD0&07*qoM6N<$f+U$;>i_@% literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/store.png b/beeos/assets/icons/lucide_png/48/store.png new file mode 100644 index 0000000000000000000000000000000000000000..1f836ca43b2c34255122a00d2a638c267ef43f62 GIT binary patch literal 719 zcmV;=0xZ>sRiIh4_)9>i1krzD6Sx?n%>u-?B)yZ=&if)#vL)%NnH?qtO$8Ks zqUyy<(u}0FTor&N&-A_l&J?3@Xsl`At!KRDtOeV^fm5s#EvZrfT8w^c2SB=fz(vn6SdkKG0iow2_Hr_vNzFKj9^04#gPU-!k1>_WgjNiUr4zNEz6pafcyPB?u_ zX7)1P;WMx+>3oU8@~~%S7vdd01AR%yE0dItzL_=R9XBl#=1uK_fS1~zJWcbo#w=N*=g@)6_Lll2dBN5BKMBd-pHY2m=xc@ zT_>~)%mmb*1&*BDg}i#Q7-#}Noba6_6Os6Do*eJ`FV#R4d)tkVX5t}m1!zRi9Pr5V z<^gUNr6*GY@YEwJl*dKu$zos%Sj!?F7`us-ZXlL-3-}%&d zp95zLQx!-w<};^zD;6ynoR$RTl!(3B?OZM3NZN+?%G-qZ*OMGMrnc0z~YYLgJ z>e!TY-4&k*gG>8;U<3bMwrskcZixQ`3)&F;i>pi3p@Y-002ovPDHLkV1m>a BN5B98 literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/theme.png b/beeos/assets/icons/lucide_png/48/theme.png new file mode 100644 index 0000000000000000000000000000000000000000..42abe46c267da7ab84ca7224669e9d0a59f1dda2 GIT binary patch literal 1019 zcmV7uYGiYydz5lN9wjnw>cJ}u6fICFf@oqO)R zbMGwt!QGtqx$pD+z2`aa`=0kioYOhY5w686IEoqkjs184=k=SfsW6Jusx)U|vXSJ!{%>SzbehQCb39iSXQu`kZKPX$IQlr?^1YYa}{`?leFOP_g5%G9LT$c#>DkAP}G#V!{ z847_O{i;O!Q`C-9mU_99&}vAvFg@h0Gh@eHnLxx@BMY%azA zP$${%iP3%tBXyuVF@a%oOL$5}nWhrGkQn(lJAtoj0vDDHOx7_lfR7U_Fb%wyfZ19R zKZt#a_+7nbFG3CB>k`n6(y5&6*yTV1e!pJTeU)Uh&u=BL)3_yXA4!-bJIz=eAL(!h z{w)C>mp$yiCg2a_(tdN#5gtr{rgU)8!Ou#z6>g>vFxYR-O34zi&$ pxIp&O|E+9=-iy2X&2>(_(0?eQlYz69fXM&=002ovPDHLkV1jJ#_4EJ$ literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/themes.png b/beeos/assets/icons/lucide_png/48/themes.png new file mode 100644 index 0000000000000000000000000000000000000000..29bece56804d59caac341fc2b451c030d079850f GIT binary patch literal 1108 zcmV-a1grarP)C7H88?=7)~*B%%1tq?F1m<_4BEsmjMlv|y--idw(hTscMeU@J~QW? zIWx0f_`lgRJJ0j{|Nr-$dB4sPd5ED!kVg?t@Ds2Jc%n?<0k8!4Eu&})e*qr?V~ZBw4t$%V zaE&{_7GQW0;@<>n3FMc6gSgtOk*`zSC8SP1L{z61IbYJCrk&r5g(*dIgG2Ydod z%TTu!*bH2YseJ>OnTPm8F$7-#ZA}q4jz@sEfjr6nhPO2hX*+{o*y}(wjrg$E9z)Qc200sy zoGxF&0Qkn}#ts$d)v}>+fb+mF^~UhfvCA;A%*ViDBXPMA=hd=6PsG5_DGUrV8uE9m zk)lZzpj#z<858T(vcPV`=cjn_qw~LClqd~WmB3sqjasef?iWW7mE;M z@HQOHa7*qeKC=q#RY4z=WT4?_2Fz0T&s&8~tDwat8E80~;g%Uu+^pZLMB*l@+TBG8 zkATSMftZ+E>UvE5L)3s?Yy5A&>hr8-#L@8Y6cKqo{M@NxhN){r0~k=<6sY^D*EBxB zV>APvRlGe}3}jl<n&E(y3*@mfRtZD3qn(yJ=?QpuuQ za7Qoea07+L0PuQJ0c$ZgBS(R4z+s@*5Z4F;z&k!9$5rB|If-9L@}XD~ZUakwiL4FH zq$b5zGm7sAI)SItkX3+RRiTqj8i+d>)9AzP@=gI;iF;W+2p1W}S2kflKl2*_y|&2@ zxMP)binIny%~nlrtRKy#`qY%Xv+!uArfGNP^Vcu}u%5`XZK$)llXA?~LqMUai#zcUd?DUN7i#vcm z0T~h_72svy818#sU-2*HsUxqS8jKQ=c_K1f+|kGc5qV1f+gJC9NSBE03WDHj9-I&H apx|FrZqujdS6Q?G0000SCgLL( z$UPC6X-BYpzjWwEqa=@Ih2Lw0)TzMkUsV~ z+TUBkhk-q5iyB#BTY$<4_EkWYPn#J)4%nHz;(UkA6!HQ%u5-S8jQuqNAM_D8OC^GS z@<9x^Qf1r#tnwLjCPTpdthM?A)BuNp$2xCA13=A4XZ0KE2QC5iem+VDFbmiUTmZU( zK3589@h+YLyMT%;^hW~l^ivO_4>$wVX06vrgaAw)0^5PItablI=e)^p+~dcj7dQq~ zXRTj=dP`gmSOFXW-h~7*1at!1fGKGU-NNX?)M&LmwS*nf*C(S2x=!-<5H3CfM}dWD zh;Jf)jd*Xh@3zEz0;XCvi?qPcA%Wy{z)gUcg!l~9GD2_SSQg<7QY90Jor?kPhRk_Um? z6pp3X0W1Yx=?)|9VYQfE%V~>`?Gn@{7T2EHkG9AG#09m&nmq9lZ;!7a`hb(bv{D36 zjap$%>MWa^A%c5>YrtM$Iccxbjv($>g3cRlWfZ1O4{#Y(e%Fx10#*#bW=mi{FhjRB zSZ!~M@fG*WTo|`Rq{ld~5Ro1F_ZrLgVKI(U3BdEbArZM~U2fH>vD&&`Q~;>~R8shn zU@iF{c_HIJNCE+_SYn@B=btklutA_I*&wbK>m#i}Ji-GJc^%OHs8|Q72H<%fB62Rk zWPA=_6JQST(~&+uNMMCcJB7saye}fs;b`jcJTI5F|3pBQ52sKC+&4;9m`yOjf50Cf WPGeYazMxfbl3UxP>t;2tf}cXE1T;9VAf< zatMrTfz{`NqQkVERyyTX(=Ta4`yS2zx5Jx1h}8UZfF^JYya3DScm@VQQ(K=G;1rmW z&IIUa>r5ni@;>pliH5e`7{E;q@oW0pdSgUu-sT=?MaP3v8)@r}!Rp6q)3R!9r#3HB z$W~LtT_eA(hZ4W_6j3)o!6~vU1ACs@wTPVMxW~DOTx~0$G$=Sls<4C#O_5z0FdhRN zH#NqXUDosB`wjdFY6IHT2DGWX0peL~26Xd$vCte3u@8`*#b)cC#5VvOJD19fyD6|r zx{s0(XJQ6`wusz0m*2uk%S~Dqdl!+**j1n#t*<0{3H@a+vBWHvYS$zF6*y2ZkebD8 zvZl~PL@tam%Z$D<*tbuNF(2M;ewNT2cmjG!Pu}V;`we*O-^RSIJh(U2N~@LM$g-#n zXj2=|M$^E?-U1w2pL1t1O#@TsdkB3+mtAc?htG^|)7~@F< zY6ha7PKJpwa1va6C<9Sn1Ly-IU=baeSuBKsg`;s}ia52;vUC)gLb_9=C}>ZSqM$uR kLV)HJ2?bhHq^2T#0XoYK{?P~Wp#T5?07*qoM6N<$f{PRGwg3PC literal 0 HcmV?d00001 diff --git a/beeos/assets/icons/lucide_png/48/watch-face.png b/beeos/assets/icons/lucide_png/48/watch-face.png new file mode 100644 index 0000000000000000000000000000000000000000..c46e944b5205e30b8e322795e858d8073cc35485 GIT binary patch literal 1023 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 F`7a|6Ep7k+ literal 0 HcmV?d00001 diff --git a/beeos/core/__init__.py b/beeos/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/beeos/core/app_registry.py b/beeos/core/app_registry.py new file mode 100644 index 0000000..371c239 --- /dev/null +++ b/beeos/core/app_registry.py @@ -0,0 +1,71 @@ +from __future__ import annotations + +from typing import Callable + +from beeos.core.models import BeeApp, PackageManifest +from beeos.core.theme import BeeTheme + + +def icon_asset_for_manifest(manifest: PackageManifest) -> str: + name = manifest.name.lower() + package_type = manifest.package_type + + if "weather" in name: + return "weather" + if "clock" in name or package_type == "watchface": + return "retro-clock" + if "heart" in name or "health" in name: + return "health" + if "quick" in name or "tool" in name: + return "quick-tools" + if package_type == "theme": + return "theme" + if package_type == "plugin": + return "plugin" + if package_type == "app": + return "apps" + return "package" + + +class AppRegistry: + def __init__(self) -> None: + self.builtins: list[BeeApp] = [] + self.package_apps: list[BeeApp] = [] + + def register_builtin_apps(self, callbacks: dict[str, Callable[[], None]]) -> None: + self.builtins = [ + BeeApp(app_id="beeos.clock", name="Clock", icon="◷", color=BeeTheme.BLUE, launch=callbacks["clock"], description="Time and date", icon_asset="clock"), + BeeApp(app_id="beeos.health", name="Health", icon="♥", color=BeeTheme.RED, launch=callbacks["health"], description="Heart and SpO₂", icon_asset="health"), + BeeApp(app_id="beeos.hivestore", name="HiveStore", icon="▣", color=BeeTheme.YELLOW, launch=callbacks["hivestore"], description="Curated apps", icon_asset="hivestore"), + BeeApp(app_id="beeos.settings", name="Settings", icon="⚙", color=BeeTheme.GRAY, launch=callbacks["settings"], description="System settings", icon_asset="settings"), + BeeApp(app_id="beeos.scripts", name="Scripts", icon="▶", color=BeeTheme.GREEN, launch=callbacks["scripts"], description="Run scripts", icon_asset="scripts"), + BeeApp(app_id="beeos.resource_monitor", name="Resource", icon="▰", color=BeeTheme.PURPLE, launch=callbacks["resource"], description="System stats", icon_asset="resource-monitor"), + BeeApp(app_id="beeos.developer_tools", name="Dev Tools", icon="", color=BeeTheme.CYAN, launch=callbacks["developer"], description="Package tools", icon_asset="developer-tools"), + BeeApp(app_id="beeos.gps", name="GPS", icon="⌖", color=BeeTheme.CYAN, launch=callbacks["gps"], description="Location", icon_asset="gps"), + BeeApp(app_id="beeos.battery", name="Battery", icon="▰", color=BeeTheme.GREEN, launch=callbacks["battery"], description="Power", icon_asset="battery"), + BeeApp(app_id="beeos.notifications", name="Notify", icon="☰", color=BeeTheme.BLUE, launch=callbacks["notifications"], description="Notifications", icon_asset="notifications"), + BeeApp(app_id="beeos.about", name="About", icon="i", color=BeeTheme.YELLOW, launch=callbacks["about"], description="About BeeOS", icon_asset="about"), + ] + + def sync_package_apps(self, manifests: list[PackageManifest], open_package_callback: Callable[[PackageManifest], None]) -> None: + package_apps: list[BeeApp] = [] + for manifest in manifests: + if manifest.package_type != "app": + continue + package_apps.append( + BeeApp( + app_id=manifest.package_id, + name=manifest.name, + icon=manifest.icon, + color=manifest.color, + launch=lambda m=manifest: open_package_callback(m), + description=manifest.description, + category="installed", + package_id=manifest.package_id, + icon_asset=icon_asset_for_manifest(manifest), + ) + ) + self.package_apps = package_apps + + def all_apps(self) -> list[BeeApp]: + return list(self.builtins) + list(self.package_apps) diff --git a/beeos/core/asset_build.py b/beeos/core/asset_build.py new file mode 100644 index 0000000..8258c88 --- /dev/null +++ b/beeos/core/asset_build.py @@ -0,0 +1,46 @@ +"""BeeOS generated asset build metadata.""" + +from __future__ import annotations + +import json +from pathlib import Path + + +class AssetBuildIndex: + def __init__(self, project_root: Path) -> None: + self.project_root = project_root + self.icon_index_path = project_root / "beeos" / "generated" / "icons" / "icon_build_index.json" + self.theme_index_path = project_root / "beeos" / "generated" / "themes" / "theme_build_index.json" + self.icon_data: dict = {} + self.theme_data: dict = {} + self.load() + + def load(self) -> None: + if self.icon_index_path.exists(): + self.icon_data = json.loads(self.icon_index_path.read_text(encoding="utf-8")) + else: + self.icon_data = {"icon_count": 0, "sizes": {}} + + if self.theme_index_path.exists(): + self.theme_data = json.loads(self.theme_index_path.read_text(encoding="utf-8")) + else: + self.theme_data = {"theme_count": 0, "outputs": {}} + + @property + def icon_count(self) -> int: + return int(self.icon_data.get("icon_count", 0)) + + @property + def theme_count(self) -> int: + return int(self.theme_data.get("theme_count", 0)) + + @property + def sizes(self) -> list[str]: + return list(self.icon_data.get("sizes", {}).keys()) + + def outputs_for_size(self, size: str) -> dict: + return dict(self.icon_data.get("sizes", {}).get(str(size), {})) + + @property + def theme_outputs(self) -> dict: + return dict(self.theme_data.get("outputs", {})) diff --git a/beeos/core/hivestore.py b/beeos/core/hivestore.py new file mode 100644 index 0000000..ba934e5 --- /dev/null +++ b/beeos/core/hivestore.py @@ -0,0 +1,84 @@ +from __future__ import annotations + +import json +from pathlib import Path + +from beeos.core.models import PackageManifest +from beeos.core.hivestore_sources import HiveStoreSource, HiveStoreSourceManager + + +class HiveStoreIndex: + def __init__(self, index_path: Path, sources_path: Path | None = None) -> None: + self.index_path = index_path + self.data_dir = index_path.parent + self.source_manager = HiveStoreSourceManager(self.data_dir) + self.source_name = "HiveStore Repos" + self.source_url = "multiple" + self.listings: list[PackageManifest] = [] + self.source_errors: list[str] = [] + + def load(self) -> None: + self.source_manager.load() + listings: list[PackageManifest] = [] + errors: list[str] = [] + seen: set[str] = set() + + sources = self.source_manager.enabled_sources() + if not sources and self.index_path.exists(): + sources = [HiveStoreSource("legacy", "Legacy HiveStore", "", self.index_path.name, True, True)] + + for source in sources: + path = self.source_manager.resolve_index_path(source) + if not path.exists(): + errors.append(f"{source.name}: missing {path.name}") + continue + + try: + listings.extend(self._load_from_path(path, source, seen)) + except Exception as exc: + errors.append(f"{source.name}: {exc}") + + self.listings = listings + self.source_errors = errors + + if len(sources) == 1: + self.source_name = sources[0].name + self.source_url = sources[0].url + else: + self.source_name = f"{len(sources)} HiveStore repos" + self.source_url = "multiple" + + def _load_from_path(self, path: Path, source: HiveStoreSource, seen: set[str]) -> list[PackageManifest]: + data = json.loads(path.read_text(encoding="utf-8")) + out: list[PackageManifest] = [] + + for item in data.get("packages", []): + if not item.get("curated", False): + continue + + package_id = item["id"] + if package_id in seen: + continue + seen.add(package_id) + + manifest = PackageManifest( + package_id=package_id, + name=item["name"], + package_type=item["type"], + version=item.get("version", "0.0.0"), + author=item.get("author", "Unknown"), + description=item.get("description", ""), + entry=item.get("entry", ""), + permissions=list(item.get("permissions", [])), + repository=item.get("repository", ""), + category=item.get("category", item.get("type", "")), + color=item.get("color", "#ffcc00"), + icon=item.get("icon", "⬢"), + curated=True, + source_id=source.source_id, + source_name=source.name, + source_url=source.url, + ) + out.append(manifest) + + return out diff --git a/beeos/core/hivestore_sources.py b/beeos/core/hivestore_sources.py new file mode 100644 index 0000000..0149d43 --- /dev/null +++ b/beeos/core/hivestore_sources.py @@ -0,0 +1,144 @@ +"""HiveStore multi-source repo support. + +Phase 9 allows BeeOS to load multiple curated HiveStore indexes. A source can +point to a bundled JSON file, a local file path, a GitHub page URL, or a raw +GitHub JSON URL. + +The desktop simulator avoids mandatory network access. Imported remote repos are +stored as source records and can be cached/updated by the import tool. +""" + +from __future__ import annotations + +import hashlib +import json +from dataclasses import dataclass +from pathlib import Path + + +@dataclass +class HiveStoreSource: + source_id: str + name: str + url: str + index: str + enabled: bool = True + official: bool = False + status: str = "ok" + + @property + def is_remote(self) -> bool: + return self.index.startswith("http://") or self.index.startswith("https://") + + +def normalize_github_url(url: str) -> str: + """Convert common GitHub URLs into a raw-ish index URL when possible.""" + url = url.strip() + if not url: + return url + + if "raw.githubusercontent.com" in url: + return url + + if "github.com" in url and "/blob/" in url: + return url.replace("https://github.com/", "https://raw.githubusercontent.com/").replace("/blob/", "/") + + if "github.com" in url and not url.endswith(".json"): + return url.rstrip("/") + "/raw/main/hivestore_index.json" + + return url + + +def source_id_from_url(url: str) -> str: + digest = hashlib.sha1(url.encode("utf-8")).hexdigest()[:10] + clean = "".join(ch if ch.isalnum() else "_" for ch in url.split("//")[-1].split("/")[0]) + return f"{clean or 'local'}_{digest}".lower() + + +class HiveStoreSourceManager: + def __init__(self, data_dir: Path) -> None: + self.data_dir = data_dir + self.sources_path = data_dir / "hivestore_sources.json" + self.sources_path.parent.mkdir(parents=True, exist_ok=True) + self.sources: list[HiveStoreSource] = [] + self.load() + + def load(self) -> None: + if not self.sources_path.exists(): + self.sources = [] + return + + data = json.loads(self.sources_path.read_text(encoding="utf-8")) + rows: list[HiveStoreSource] = [] + for item in data.get("sources", []): + rows.append( + HiveStoreSource( + source_id=item.get("id") or source_id_from_url(item.get("url", "")), + name=item.get("name", "HiveStore Repo"), + url=item.get("url", ""), + index=item.get("index", ""), + enabled=bool(item.get("enabled", True)), + official=bool(item.get("official", False)), + status=item.get("status", "ok"), + ) + ) + self.sources = rows + + def save(self) -> None: + data = { + "schema": 1, + "sources": [ + { + "id": source.source_id, + "name": source.name, + "url": source.url, + "index": source.index, + "enabled": source.enabled, + "official": source.official, + "status": source.status, + } + for source in self.sources + ], + } + self.sources_path.write_text(json.dumps(data, indent=2), encoding="utf-8") + + def enabled_sources(self) -> list[HiveStoreSource]: + return [source for source in self.sources if source.enabled] + + def add_source(self, name: str, url: str, index: str | None = None, enabled: bool = True) -> HiveStoreSource: + normalized = normalize_github_url(url) + source = HiveStoreSource( + source_id=source_id_from_url(normalized), + name=name.strip() or "HiveStore Repo", + url=url.strip(), + index=index or normalized, + enabled=enabled, + official=False, + status="imported", + ) + self.sources = [existing for existing in self.sources if existing.source_id != source.source_id] + self.sources.append(source) + self.save() + return source + + def toggle(self, source_id: str) -> None: + for source in self.sources: + if source.source_id == source_id: + source.enabled = not source.enabled + self.save() + return + + def remove(self, source_id: str) -> None: + # Official source cannot be removed from the UI/tool, only disabled. + self.sources = [source for source in self.sources if source.official or source.source_id != source_id] + self.save() + + def resolve_index_path(self, source: HiveStoreSource) -> Path: + index = source.index + if index.startswith("http://") or index.startswith("https://"): + return self.data_dir / "hivestore_cache" / f"{source.source_id}.json" + + path = Path(index) + if path.is_absolute(): + return path + return self.data_dir / index diff --git a/beeos/core/icon_manager.py b/beeos/core/icon_manager.py new file mode 100644 index 0000000..ba98989 --- /dev/null +++ b/beeos/core/icon_manager.py @@ -0,0 +1,86 @@ +"""BeeOS icon asset registry with PNG support for the desktop simulator.""" + +from __future__ import annotations + +import json +from pathlib import Path + + +class IconManager: + def __init__(self, assets_dir: Path) -> None: + self.assets_dir = assets_dir + self.manifest_path = assets_dir / "manifest.json" + self.icons: dict[str, dict] = {} + self.load() + + def load(self) -> None: + if not self.manifest_path.exists(): + self.icons = {} + return + data = json.loads(self.manifest_path.read_text(encoding="utf-8")) + self.icons = {item["id"]: item for item in data.get("icons", [])} + + def has(self, icon_id: str) -> bool: + return icon_id in self.icons and self.path(icon_id).exists() + + def path(self, icon_id: str) -> Path: + item = self.icons.get(icon_id) + if item is None: + return self.assets_dir / f"{icon_id}.svg" + return self.assets_dir / item["file"] + + def svg_text(self, icon_id: str) -> str: + path = self.path(icon_id) + if not path.exists(): + return "" + return path.read_text(encoding="utf-8") + + def png_path(self, icon_id: str, size: int = 34) -> Path: + available_sizes = [18, 24, 34, 48] + nearest = min(available_sizes, key=lambda s: abs(s - int(size))) + return self.assets_dir.parent / "lucide_png" / str(nearest) / f"{icon_id}.png" + + def has_png(self, icon_id: str, size: int = 34) -> bool: + return self.png_path(icon_id, size).exists() + + def fallback(self, icon_id: str) -> str: + return ICON_FALLBACKS.get(icon_id, "⬢") + + +ICON_FALLBACKS = { + "clock": "◷", + "health": "♥", + "hivestore": "▣", + "settings": "⚙", + "scripts": "▶", + "resource-monitor": "▰", + "developer-tools": "", + "gps": "⌖", + "battery": "▱", + "notifications": "☰", + "about": "i", + "bluetooth": "ᛒ", + "display": "☀", + "vibration": "≋", + "watch-face": "◷", + "themes": "◆", + "plugins": "⚙", + "permissions": "✓", + "runtime": "⚡", + "install": "⇣", + "remove": "×", + "back": "‹", + "search": "⌕", + "home": "⌂", + "apps": "▦", + "script-run": "▶", + "package": "▣", + "github": "⌘", + "store": "▣", + "touch": "⟐", + "weather": "☁", + "retro-clock": "◷", + "quick-tools": "🔧", + "theme": "◆", + "plugin": "⚙", +} diff --git a/beeos/core/models.py b/beeos/core/models.py new file mode 100644 index 0000000..3d1dbfa --- /dev/null +++ b/beeos/core/models.py @@ -0,0 +1,43 @@ +from __future__ import annotations +from dataclasses import dataclass +from typing import Callable, Optional + +@dataclass +class Notification: + app: str + title: str + body: str + timestamp: str + color: str + icon: str = "•" + +@dataclass +class PackageManifest: + package_id: str + name: str + package_type: str + version: str + author: str + description: str + entry: str + permissions: list[str] + repository: str = "" + category: str = "" + color: str = "#ffcc00" + icon: str = "⬢" + curated: bool = False + source_id: str = "" + source_name: str = "" + source_url: str = "" + +@dataclass +class BeeApp: + app_id: str + name: str + icon: str + color: str + launch: Callable[[], None] + description: str = "" + category: str = "system" + package_id: Optional[str] = None + icon_asset: str = "" diff --git a/beeos/core/navigation.py b/beeos/core/navigation.py new file mode 100644 index 0000000..6f5954c --- /dev/null +++ b/beeos/core/navigation.py @@ -0,0 +1,18 @@ +from beeos.core.theme import APPS_PER_PAGE + +class NavigationController: + def __init__(self, state) -> None: + self.state = state + + def page_count(self, app_count: int) -> int: + return max(1, (app_count + APPS_PER_PAGE - 1) // APPS_PER_PAGE) + + def clamp_launcher_page(self, app_count: int) -> None: + count = self.page_count(app_count) + self.state.launcher_page = max(0, min(self.state.launcher_page, count - 1)) + + def scroll_launcher(self, direction: int, app_count: int) -> bool: + old = self.state.launcher_page + self.state.launcher_page += direction + self.clamp_launcher_page(app_count) + return old != self.state.launcher_page diff --git a/beeos/core/package_manager.py b/beeos/core/package_manager.py new file mode 100644 index 0000000..e4e1ece --- /dev/null +++ b/beeos/core/package_manager.py @@ -0,0 +1,142 @@ +from __future__ import annotations +import json +import shutil +from pathlib import Path +from beeos.core.models import PackageManifest +from beeos.core.package_manifest import load_manifest, manifest_to_json, ManifestError + +class PackageManager: + def __init__(self, data_dir: Path, packages_dir: Path, sideload_dir: Path) -> None: + self.data_dir = data_dir + self.packages_dir = packages_dir + self.sideload_dir = sideload_dir + self.installed_db = data_dir / "installed_packages.json" + self.packages_dir.mkdir(parents=True, exist_ok=True) + self.sideload_dir.mkdir(parents=True, exist_ok=True) + self.data_dir.mkdir(parents=True, exist_ok=True) + + def _load_db(self) -> dict: + if not self.installed_db.exists(): + return {"installed": []} + try: + return json.loads(self.installed_db.read_text(encoding="utf-8")) + except json.JSONDecodeError: + return {"installed": []} + + def _save_db(self, db: dict) -> None: + self.installed_db.write_text(json.dumps(db, indent=2), encoding="utf-8") + + def installed_ids(self) -> set[str]: + return {item["id"] for item in self._load_db().get("installed", [])} + + def is_installed(self, package_id: str) -> bool: + return package_id in self.installed_ids() + + def installed_records(self) -> list[dict]: + return list(self._load_db().get("installed", [])) + + def installed_manifests(self) -> list[PackageManifest]: + manifests: list[PackageManifest] = [] + for record in self.installed_records(): + manifest_path = self.packages_dir / record["id"] / "manifest.json" + if manifest_path.exists(): + try: + manifests.append(load_manifest(manifest_path)) + except Exception: + pass + return manifests + + def install_from_manifest(self, manifest: PackageManifest) -> None: + package_dir = self.packages_dir / manifest.package_id + package_dir.mkdir(parents=True, exist_ok=True) + (package_dir / "manifest.json").write_text(json.dumps(manifest_to_json(manifest), indent=2), encoding="utf-8") + + entry_path = package_dir / manifest.entry + if not entry_path.exists(): + if manifest.package_type == "theme": + entry_path.write_text(json.dumps({"accent": manifest.color, "background": "#000000"}, indent=2), encoding="utf-8") + elif manifest.package_type == "app": + entry_path.write_text( + "class BeeApp:\n" + " def __init__(self, ctx):\n" + " self.ctx = ctx\n\n" + " def on_open(self):\n" + " launches = self.ctx.storage.get('launches', 0) + 1\n" + " self.ctx.storage.set('launches', launches)\n" + f" self.ctx.notify({manifest.name!r}, 'Opened through BeeOS Runtime')\n\n" + " def on_draw(self, display):\n" + f" display.title({manifest.name!r})\n" + f" display.card('HiveStore App', {manifest.description!r})\n" + " display.list_item('Launches', str(self.ctx.storage.get('launches', 0)))\n" + " display.list_item('Touches', str(self.ctx.storage.get('touches', 0)))\n" + " display.progress('Battery', self.ctx.battery_percent())\n\n" + " def on_touch(self, event):\n" + " touches = self.ctx.storage.get('touches', 0) + 1\n" + " self.ctx.storage.set('touches', touches)\n" + " self.ctx.notify('Touch event', f'Touch #{touches} at {event.get(\'x\')},{event.get(\'y\')}')\n\n" + " def on_close(self):\n" + " self.ctx.notify('App closed', 'Session closed cleanly')\n", + encoding="utf-8", + ) + else: + entry_path.write_text( + "def main(ctx):\n" + f" ctx.display.title({manifest.name!r})\n" + f" ctx.display.text({manifest.description!r})\n", + encoding="utf-8", + ) + + db = self._load_db() + installed = [item for item in db.get("installed", []) if item["id"] != manifest.package_id] + installed.append({ + "id": manifest.package_id, + "name": manifest.name, + "type": manifest.package_type, + "version": manifest.version, + "enabled": True, + }) + db["installed"] = installed + self._save_db(db) + + def remove(self, package_id: str) -> None: + db = self._load_db() + db["installed"] = [item for item in db.get("installed", []) if item["id"] != package_id] + self._save_db(db) + + package_dir = self.packages_dir / package_id + if package_dir.exists(): + shutil.rmtree(package_dir) + + def sideload_candidates(self) -> list[tuple[Path, PackageManifest | Exception]]: + results: list[tuple[Path, PackageManifest | Exception]] = [] + for child in sorted(self.sideload_dir.iterdir()): + if not child.is_dir(): + continue + manifest_path = child / "manifest.json" + if not manifest_path.exists(): + continue + try: + results.append((child, load_manifest(manifest_path))) + except Exception as exc: + results.append((child, exc)) + return results + + def install_sideload(self, package_dir: Path) -> PackageManifest: + manifest = load_manifest(package_dir / "manifest.json") + dest = self.packages_dir / manifest.package_id + if dest.exists(): + shutil.rmtree(dest) + shutil.copytree(package_dir, dest) + + db = self._load_db() + installed = [item for item in db.get("installed", []) if item["id"] != manifest.package_id] + installed.append({ + "id": manifest.package_id, + "name": manifest.name, + "type": manifest.package_type, + "version": manifest.version, + "enabled": True, + }) + db["installed"] = installed + self._save_db(db) + return manifest diff --git a/beeos/core/package_manifest.py b/beeos/core/package_manifest.py new file mode 100644 index 0000000..e8187b9 --- /dev/null +++ b/beeos/core/package_manifest.py @@ -0,0 +1,68 @@ +from __future__ import annotations +import json +import re +from pathlib import Path +from beeos.core.models import PackageManifest + +VALID_TYPES = {"app", "script", "script_pack", "watchface", "theme", "plugin"} + +class ManifestError(ValueError): + pass + +def validate_package_id(value: str) -> None: + if not re.match(r"^[a-z0-9][a-z0-9_.-]+$", value): + raise ManifestError("Package id must use lowercase letters, numbers, dots, hyphens, or underscores.") + +def load_manifest(path: Path) -> PackageManifest: + data = json.loads(path.read_text(encoding="utf-8")) + required = ["id", "name", "type", "version", "author", "description", "entry"] + for field in required: + if not data.get(field): + raise ManifestError(f"Missing required manifest field: {field}") + + validate_package_id(data["id"]) + if data["type"] not in VALID_TYPES: + raise ManifestError(f"Invalid package type: {data['type']}") + + permissions = data.get("permissions", []) + if not isinstance(permissions, list): + raise ManifestError("permissions must be a list") + + return PackageManifest( + package_id=data["id"], + name=data["name"], + package_type=data["type"], + version=data["version"], + author=data["author"], + description=data["description"], + entry=data["entry"], + permissions=[str(p) for p in permissions], + repository=data.get("repository", ""), + category=data.get("category", data["type"]), + color=data.get("color", "#ffcc00"), + icon=data.get("icon", "⬢"), + curated=bool(data.get("curated", False)), + source_id=data.get("source_id", ""), + source_name=data.get("source_name", ""), + source_url=data.get("source_url", ""), + ) + +def manifest_to_json(manifest: PackageManifest) -> dict: + return { + "id": manifest.package_id, + "name": manifest.name, + "type": manifest.package_type, + "version": manifest.version, + "author": manifest.author, + "description": manifest.description, + "entry": manifest.entry, + "permissions": manifest.permissions, + "repository": manifest.repository, + "category": manifest.category, + "color": manifest.color, + "icon": manifest.icon, + "curated": manifest.curated, + "source_id": manifest.source_id, + "source_name": manifest.source_name, + "source_url": manifest.source_url, + } diff --git a/beeos/core/permission_manager.py b/beeos/core/permission_manager.py new file mode 100644 index 0000000..6e58fe8 --- /dev/null +++ b/beeos/core/permission_manager.py @@ -0,0 +1,54 @@ +"""BeeOS permission approval manager. + +This is a user-facing permission approval database for the simulator. +It is not a real security sandbox yet. +""" + +from __future__ import annotations + +import json +from pathlib import Path + +from beeos.core.models import PackageManifest + + +class PermissionManager: + def __init__(self, data_dir: Path) -> None: + self.approvals_path = data_dir / "permission_approvals.json" + self.approvals_path.parent.mkdir(parents=True, exist_ok=True) + if not self.approvals_path.exists(): + self.approvals_path.write_text(json.dumps({"approved": {}}, indent=2), encoding="utf-8") + + def _load(self) -> dict: + try: + data = json.loads(self.approvals_path.read_text(encoding="utf-8")) + if isinstance(data, dict): + return data + except Exception: + pass + return {"approved": {}} + + def _save(self, data: dict) -> None: + self.approvals_path.write_text(json.dumps(data, indent=2), encoding="utf-8") + + def approved_permissions(self, package_id: str) -> list[str]: + data = self._load() + return list(data.get("approved", {}).get(package_id, [])) + + def is_approved(self, manifest: PackageManifest) -> bool: + required = set(manifest.permissions) + approved = set(self.approved_permissions(manifest.package_id)) + return required.issubset(approved) + + def approve(self, manifest: PackageManifest) -> None: + data = self._load() + approved = data.setdefault("approved", {}) + approved[manifest.package_id] = list(manifest.permissions) + self._save(data) + + def revoke(self, package_id: str) -> None: + data = self._load() + approved = data.setdefault("approved", {}) + if package_id in approved: + del approved[package_id] + self._save(data) diff --git a/beeos/core/permissions.py b/beeos/core/permissions.py new file mode 100644 index 0000000..d1cbe39 --- /dev/null +++ b/beeos/core/permissions.py @@ -0,0 +1,22 @@ +PERMISSION_DESCRIPTIONS = { + "time": "Read the current time/date.", + "battery": "Read battery status.", + "network": "Use network/Bluetooth bridge access.", + "location": "Access GPS/location data.", + "heart_rate": "Read heart-rate sensor data.", + "spo2": "Read blood oxygen sensor data.", + "vibration": "Use vibration/haptics.", + "notifications": "Create or read notifications.", + "storage": "Read/write package storage.", + "theme": "Change theme/UI appearance.", + "watchface": "Register or change watch faces.", + "system_info": "Read system resource information.", +} + +def describe_permission(permission: str) -> str: + return PERMISSION_DESCRIPTIONS.get(permission, "Unknown or future BeeOS permission.") + +def format_permissions(permissions: list[str]) -> str: + if not permissions: + return "No special permissions" + return ", ".join(permissions) diff --git a/beeos/core/plugin_manager.py b/beeos/core/plugin_manager.py new file mode 100644 index 0000000..c8a096f --- /dev/null +++ b/beeos/core/plugin_manager.py @@ -0,0 +1,32 @@ +"""BeeOS plugin hook registry placeholder. + +Plugins are tabled as runtime hooks for now. Phase 5 only discovers installed +plugin packages and shows what hooks they declare. +""" + +from __future__ import annotations + +from beeos.core.models import PackageManifest + + +class PluginManager: + DEFAULT_HOOKS = [ + "launcher.context_menu", + "notification.received", + "settings.panel", + "watchface.provider", + "hivestore.source", + ] + + def __init__(self, package_manager) -> None: + self.package_manager = package_manager + + def installed_plugins(self) -> list[PackageManifest]: + return [m for m in self.package_manager.installed_manifests() if m.package_type == "plugin"] + + def hook_summary(self) -> list[tuple[str, str]]: + plugins = self.installed_plugins() + rows: list[tuple[str, str]] = [] + for hook in self.DEFAULT_HOOKS: + rows.append((hook, f"{len(plugins)} plugin(s) available")) + return rows diff --git a/beeos/core/runtime_api.py b/beeos/core/runtime_api.py new file mode 100644 index 0000000..d9b78ea --- /dev/null +++ b/beeos/core/runtime_api.py @@ -0,0 +1,404 @@ +"BeeOS simulated Runtime API." + +from __future__ import annotations + +import contextlib +import importlib.util +import inspect +import io +import json +import sys +import traceback +from dataclasses import dataclass, field +from pathlib import Path +from types import ModuleType +from typing import Any + +from beeos.core.models import Notification, PackageManifest +from beeos.core.theme import BeeTheme + + +@dataclass +class RuntimeResult: + title: str + subtitle: str = "" + lines: list[str] = field(default_factory=list) + success: bool = True + error: str = "" + + +class BeeDisplayAPI: + """A small display facade exposed to package code. + + For now, this records commands as text lines. Later this can map to real LVGL + widgets or a framebuffer-like drawing API. + """ + + def __init__(self) -> None: + self.commands: list[str] = [] + + def reset(self) -> None: + self.commands.clear() + + def clear(self) -> None: + self.commands.append("display.clear()") + + def text(self, value: str, x: int | None = None, y: int | None = None) -> None: + if x is None or y is None: + self.commands.append(str(value)) + else: + self.commands.append(f"text({x}, {y}): {value}") + + def title(self, value: str) -> None: + self.commands.append(f"# {value}") + + def card(self, title: str, body: str = "") -> None: + if body: + self.commands.append(f"[{title}] {body}") + else: + self.commands.append(f"[{title}]") + + def progress(self, label: str, percent: int | float) -> None: + percent_int = int(max(0, min(100, percent))) + filled = int(percent_int / 10) + bar = "█" * filled + "░" * (10 - filled) + self.commands.append(f"{label}: {bar} {percent_int}%") + + def list_item(self, title: str, subtitle: str = "") -> None: + if subtitle: + self.commands.append(f"• {title} — {subtitle}") + else: + self.commands.append(f"• {title}") + + +class BeeStorageAPI: + """Package-local JSON storage.""" + + def __init__(self, storage_file: Path) -> None: + self.storage_file = storage_file + self.storage_file.parent.mkdir(parents=True, exist_ok=True) + + def _load(self) -> dict[str, Any]: + if not self.storage_file.exists(): + return {} + try: + data = json.loads(self.storage_file.read_text(encoding="utf-8")) + return data if isinstance(data, dict) else {} + except Exception: + return {} + + def _save(self, data: dict[str, Any]) -> None: + self.storage_file.write_text(json.dumps(data, indent=2), encoding="utf-8") + + def get(self, key: str, default: Any = None) -> Any: + return self._load().get(key, default) + + def set(self, key: str, value: Any) -> None: + data = self._load() + data[key] = value + self._save(data) + + def delete(self, key: str) -> None: + data = self._load() + if key in data: + del data[key] + self._save(data) + + def all(self) -> dict[str, Any]: + return self._load() + + +class BeeRuntimeContext: + """Object passed into BeeOS apps/scripts.""" + + def __init__( + self, + *, + package_id: str, + package_name: str, + permissions: list[str], + state, + hardware, + storage_dir: Path, + notifications: list[Notification], + ) -> None: + self.package_id = package_id + self.package_name = package_name + self.permissions = permissions + self.display = BeeDisplayAPI() + self.storage = BeeStorageAPI(storage_dir / package_id / "storage.json") + self._state = state + self._hardware = hardware + self._notifications = notifications + + def has_permission(self, permission: str) -> bool: + return permission in self.permissions + + def notify(self, title: str, body: str) -> None: + self._notifications.insert( + 0, + Notification( + self.package_name, + str(title), + str(body), + "Now", + BeeTheme.YELLOW, + "⬢", + ), + ) + + def battery_percent(self) -> int: + return int(self._hardware.battery_percent(self._state.battery_percent)) + + def uptime_seconds(self) -> int: + return int(self._state.uptime_seconds) + + def ram_usage_kb(self) -> tuple[int, int]: + return self._hardware.ram_usage_kb() + + def psram_usage_kb(self) -> tuple[int, int]: + return self._hardware.psram_usage_kb() + + def storage_usage_kb(self) -> tuple[int, int]: + return self._hardware.storage_usage_kb() + + def cpu_usage_percent(self) -> int: + return int(self._hardware.cpu_usage_percent()) + + +class BeeRuntimeSession: + """A live app session. + + This is the first simulator version of a real app lifecycle: + on_open -> on_draw -> on_touch -> on_close + """ + + def __init__(self, title: str, subtitle: str, ctx: BeeRuntimeContext, module: ModuleType, app: object | None) -> None: + self.title = title + self.subtitle = subtitle + self.ctx = ctx + self.module = module + self.app = app + self.opened = False + self.closed = False + self.last_error = "" + + def open(self) -> RuntimeResult: + if self.opened: + return self.draw() + self.opened = True + try: + if self.app is not None and hasattr(self.app, "on_open"): + self.app.on_open() + elif hasattr(self.module, "on_open"): + self.module.on_open(self.ctx) + elif hasattr(self.module, "main"): + self.module.main(self.ctx) + return self.draw() + except Exception as exc: + return self._error_result(exc) + + def draw(self) -> RuntimeResult: + try: + self.ctx.display.reset() + if self.app is not None and hasattr(self.app, "on_draw"): + self.app.on_draw(self.ctx.display) + elif hasattr(self.module, "on_draw"): + self.module.on_draw(self.ctx, self.ctx.display) + elif not self.ctx.display.commands: + self.ctx.display.title(self.title) + self.ctx.display.text("Runtime session is active.") + lines = list(self.ctx.display.commands) + if not lines: + lines = ["Runtime session is active."] + return RuntimeResult(self.title, self.subtitle, lines[:12], True) + except Exception as exc: + return self._error_result(exc) + + def touch(self, x: int, y: int) -> RuntimeResult: + event = {"type": "tap", "x": int(x), "y": int(y)} + try: + if self.app is not None and hasattr(self.app, "on_touch"): + callback = self.app.on_touch + try: + callback(event) + except TypeError: + callback(int(x), int(y)) + elif hasattr(self.module, "on_touch"): + callback = self.module.on_touch + try: + callback(self.ctx, event) + except TypeError: + callback(self.ctx, int(x), int(y)) + else: + touches = self.ctx.storage.get("touches", 0) + 1 + self.ctx.storage.set("touches", touches) + self.ctx.display.text(f"Touch {touches}: {x},{y}") + return self.draw() + except Exception as exc: + return self._error_result(exc) + + def close(self) -> RuntimeResult: + if self.closed: + return RuntimeResult(self.title, "closed", ["Session already closed."]) + self.closed = True + try: + if self.app is not None and hasattr(self.app, "on_close"): + self.app.on_close() + elif hasattr(self.module, "on_close"): + self.module.on_close(self.ctx) + return RuntimeResult(self.title, "closed", ["Session closed."]) + except Exception as exc: + return self._error_result(exc) + + def _error_result(self, exc: Exception) -> RuntimeResult: + self.last_error = str(exc) + details = traceback.format_exc(limit=4) + return RuntimeResult( + title=self.title, + subtitle="Runtime error", + lines=details.splitlines()[-8:], + success=False, + error=str(exc), + ) + + +class BeeRuntime: + """Loads and runs installed BeeOS packages and scripts.""" + + def __init__(self, packages_dir: Path, scripts_dir: Path, storage_dir: Path, state, hardware) -> None: + self.packages_dir = packages_dir + self.scripts_dir = scripts_dir + self.storage_dir = storage_dir + self.state = state + self.hardware = hardware + self.storage_dir.mkdir(parents=True, exist_ok=True) + + def start_package_app(self, manifest: PackageManifest) -> BeeRuntimeSession | RuntimeResult: + package_dir = self.packages_dir / manifest.package_id + entry_path = package_dir / manifest.entry + + if not entry_path.exists(): + return RuntimeResult( + title=manifest.name, + subtitle="Runtime error", + success=False, + error=f"Entry file not found: {manifest.entry}", + lines=["Package is installed, but its entry file is missing."], + ) + + try: + module = self._load_module(entry_path) + ctx = BeeRuntimeContext( + package_id=manifest.package_id, + package_name=manifest.name, + permissions=manifest.permissions, + state=self.state, + hardware=self.hardware, + storage_dir=self.storage_dir, + notifications=self.state.notifications, + ) + + app = None + if hasattr(module, "BeeApp"): + app = module.BeeApp(ctx) + elif hasattr(module, "App"): + app = module.App(ctx) + + return BeeRuntimeSession(manifest.name, f"{manifest.package_type} • v{manifest.version}", ctx, module, app) + except Exception as exc: + details = traceback.format_exc(limit=4) + return RuntimeResult( + title=manifest.name, + subtitle="Runtime error", + lines=details.splitlines()[-8:], + success=False, + error=str(exc), + ) + + def run_package_app(self, manifest: PackageManifest) -> RuntimeResult: + session = self.start_package_app(manifest) + if isinstance(session, RuntimeResult): + return session + return session.open() + + def run_script(self, script_path: Path) -> RuntimeResult: + if not script_path.exists(): + return RuntimeResult( + title=script_path.name, + subtitle="Runtime error", + success=False, + error="Script file not found", + lines=[], + ) + + ctx = BeeRuntimeContext( + package_id=f"script.{script_path.stem}", + package_name=script_path.stem, + permissions=["display", "storage", "battery", "notifications"], + state=self.state, + hardware=self.hardware, + storage_dir=self.storage_dir, + notifications=self.state.notifications, + ) + + return self._run_python_entry(script_path, ctx, script_path.name, "local script") + + def _run_python_entry(self, path: Path, ctx: BeeRuntimeContext, title: str, subtitle: str) -> RuntimeResult: + stdout = io.StringIO() + try: + module = self._load_module(path) + + with contextlib.redirect_stdout(stdout): + if hasattr(module, "BeeApp"): + app = module.BeeApp(ctx) + if hasattr(app, "on_open"): + app.on_open() + if hasattr(app, "on_draw"): + app.on_draw(ctx.display) + elif hasattr(module, "App"): + app = module.App(ctx) + if hasattr(app, "on_open"): + app.on_open() + if hasattr(app, "on_draw"): + app.on_draw(ctx.display) + elif hasattr(module, "main"): + module.main(ctx) + elif hasattr(module, "run"): + module.run(ctx) + else: + ctx.display.title(title) + ctx.display.text("No BeeOS runtime entry found.") + ctx.display.text("Expected BeeApp, App, main(ctx), or run(ctx).") + + lines: list[str] = [] + printed = stdout.getvalue().strip() + if printed: + lines.extend(printed.splitlines()) + lines.extend(ctx.display.commands) + + if not lines: + lines = ["Runtime finished without output."] + + return RuntimeResult(title=title, subtitle=subtitle, lines=lines[:12], success=True) + + except Exception as exc: + details = traceback.format_exc(limit=4) + return RuntimeResult( + title=title, + subtitle="Runtime error", + lines=details.splitlines()[-8:], + success=False, + error=str(exc), + ) + + def _load_module(self, path: Path) -> ModuleType: + module_name = "beeos_pkg_" + path.stem + "_" + str(abs(hash(str(path)))) + spec = importlib.util.spec_from_file_location(module_name, path) + if spec is None or spec.loader is None: + raise RuntimeError(f"Could not load Python module: {path}") + + module = importlib.util.module_from_spec(spec) + sys.modules[module_name] = module + spec.loader.exec_module(module) + return module diff --git a/beeos/core/state.py b/beeos/core/state.py new file mode 100644 index 0000000..afd1662 --- /dev/null +++ b/beeos/core/state.py @@ -0,0 +1,69 @@ +from __future__ import annotations +import json +import time +from pathlib import Path +from typing import Optional +from beeos.core.models import Notification +from beeos.core.theme import BeeTheme + +class BeeOSState: + def __init__(self, settings_path: Path) -> None: + self.settings_path = settings_path + self.boot_time = time.time() + self.battery_percent = 86 + self.bluetooth_connected = True + self.launcher_page = 0 + self.current_screen = "watchface" + self.active_app_name: Optional[str] = None + self.selected_listing_id: Optional[str] = None + self.selected_sideload_path: Optional[str] = None + self.settings = self._load_settings() + self.notifications = [ + Notification("Messages", "Alex", "See you at 6pm!", "2m ago", BeeTheme.BLUE, "💬"), + Notification("GitHub", "HiveStore", "Curated package index loaded", "Now", BeeTheme.PURPLE, "⌘"), + Notification("BeeOS", "Developer Tools", "Package runtime ready", "Now", BeeTheme.YELLOW, "▣"), + ] + + def _load_settings(self) -> dict: + if not self.settings_path.exists(): + return {"watch_face": "Bee Simple", "theme": "Midnight Honey", "developer_mode": True} + try: + return json.loads(self.settings_path.read_text(encoding="utf-8")) + except json.JSONDecodeError: + return {"watch_face": "Bee Simple", "theme": "Midnight Honey", "developer_mode": True} + + def save_settings(self) -> None: + self.settings_path.parent.mkdir(parents=True, exist_ok=True) + self.settings_path.write_text(json.dumps(self.settings, indent=2), encoding="utf-8") + + @property + def watch_face_name(self) -> str: + return self.settings.get("watch_face", "Bee Simple") + + @watch_face_name.setter + def watch_face_name(self, value: str) -> None: + self.settings["watch_face"] = value + self.save_settings() + + @property + def theme_name(self) -> str: + return self.settings.get("theme", "Midnight Honey") + + @theme_name.setter + def theme_name(self, value: str) -> None: + self.settings["theme"] = value + self.save_settings() + + @property + def uptime_seconds(self) -> int: + return int(time.time() - self.boot_time) + + @property + def uptime_text(self) -> str: + seconds = self.uptime_seconds + hours = seconds // 3600 + minutes = (seconds % 3600) // 60 + seconds = seconds % 60 + if hours: + return f"{hours}h {minutes}m" + return f"{minutes}m {seconds}s" diff --git a/beeos/core/theme.py b/beeos/core/theme.py new file mode 100644 index 0000000..db7203a --- /dev/null +++ b/beeos/core/theme.py @@ -0,0 +1,41 @@ +class BeeTheme: + WINDOW_BG = "#02050a" + SCREEN_BG = "#000000" + SCREEN_BG_SOFT = "#05070d" + CARD = "#15171d" + CARD_2 = "#10141c" + CARD_3 = "#1b202b" + BORDER = "#282f3c" + BORDER_SOFT = "#1d2430" + TEXT = "#ffffff" + TEXT_SOFT = "#d6deef" + TEXT_MUTED = "#9ba7bd" + TEXT_DIM = "#626d82" + YELLOW = "#ffcc00" + YELLOW_DARK = "#b88900" + BLUE = "#2e88ff" + BLUE_DARK = "#0f376d" + GREEN = "#50d86a" + GREEN_DARK = "#12391d" + RED = "#ff4d67" + RED_DARK = "#4b1520" + ORANGE = "#ff9f1a" + ORANGE_DARK = "#4a2b05" + PURPLE = "#9b5cff" + PURPLE_DARK = "#2b174d" + PINK = "#ff5bbd" + PINK_DARK = "#47142f" + CYAN = "#36d6d0" + CYAN_DARK = "#123f3e" + GRAY = "#8f98a8" + GRAY_DARK = "#282d35" + +WATCH_WIDTH = 410 +WATCH_HEIGHT = 502 +WINDOW_PAD = 28 +WINDOW_WIDTH = WATCH_WIDTH + WINDOW_PAD * 2 +WINDOW_HEIGHT = WATCH_HEIGHT + WINDOW_PAD * 2 +APP_GRID_COLUMNS = 2 +APP_GRID_ROWS = 2 +APPS_PER_PAGE = APP_GRID_COLUMNS * APP_GRID_ROWS +SCREEN_RADIUS = 44 diff --git a/beeos/core/theme_manager.py b/beeos/core/theme_manager.py new file mode 100644 index 0000000..ac3838d --- /dev/null +++ b/beeos/core/theme_manager.py @@ -0,0 +1,55 @@ +"""BeeOS theme registry.""" + +from __future__ import annotations + +import json +from dataclasses import dataclass +from pathlib import Path + + +@dataclass +class ThemeRecord: + theme_id: str + name: str + accent: str + background: str + card: str + text: str + muted: str + + +class ThemeManager: + def __init__(self, themes_path: Path) -> None: + self.themes_path = themes_path + self.themes: list[ThemeRecord] = [] + self.load() + + def load(self) -> None: + if not self.themes_path.exists(): + self.themes = [] + return + + data = json.loads(self.themes_path.read_text(encoding="utf-8")) + rows: list[ThemeRecord] = [] + for item in data.get("themes", []): + rows.append( + ThemeRecord( + theme_id=item["id"], + name=item["name"], + accent=item["accent"], + background=item["background"], + card=item["card"], + text=item["text"], + muted=item["muted"], + ) + ) + self.themes = rows + + def names(self) -> list[str]: + return [theme.name for theme in self.themes] + + def by_name(self, name: str) -> ThemeRecord | None: + for theme in self.themes: + if theme.name == name: + return theme + return None diff --git a/beeos/core/update_manager.py b/beeos/core/update_manager.py new file mode 100644 index 0000000..b13f219 --- /dev/null +++ b/beeos/core/update_manager.py @@ -0,0 +1,43 @@ +"""BeeOS package update detection.""" + +from __future__ import annotations + +from beeos.core.models import PackageManifest + + +def version_tuple(version: str) -> tuple[int, ...]: + parts = [] + for part in version.replace("-", ".").split("."): + try: + parts.append(int(part)) + except ValueError: + break + return tuple(parts or [0]) + + +class UpdateManager: + def __init__(self, package_manager, hivestore) -> None: + self.package_manager = package_manager + self.hivestore = hivestore + + def installed_manifest(self, package_id: str) -> PackageManifest | None: + for manifest in self.package_manager.installed_manifests(): + if manifest.package_id == package_id: + return manifest + return None + + def has_update(self, listing: PackageManifest) -> bool: + installed = self.installed_manifest(listing.package_id) + if installed is None: + return False + return version_tuple(listing.version) > version_tuple(installed.version) + + def update_label(self, listing: PackageManifest) -> str: + if not self.package_manager.is_installed(listing.package_id): + return "Install" + if self.has_update(listing): + return "Update" + return "Open" + + def update_count(self) -> int: + return sum(1 for listing in self.hivestore.listings if self.has_update(listing)) diff --git a/beeos/core/watchfaces.py b/beeos/core/watchfaces.py new file mode 100644 index 0000000..e39fd95 --- /dev/null +++ b/beeos/core/watchfaces.py @@ -0,0 +1,15 @@ +"""BeeOS watch face registry helpers.""" + +from __future__ import annotations + + +def built_in_watch_faces() -> list[str]: + return [ + "Bee Simple", + "Bee Minimal", + "Bee Analog", + ] + + +def is_builtin_watch_face(name: str) -> bool: + return name in built_in_watch_faces() diff --git a/beeos/data/community_hivestore_index.json b/beeos/data/community_hivestore_index.json new file mode 100644 index 0000000..5764f29 --- /dev/null +++ b/beeos/data/community_hivestore_index.json @@ -0,0 +1,45 @@ +{ + "schema": 1, + "source_name": "Community Demo Hive", + "source_url": "https://github.com/beeos-community/demo-hive", + "packages": [ + { + "id": "community.watchface.simple_orbit", + "name": "Simple Orbit", + "type": "watchface", + "category": "Watch Faces", + "version": "0.1.0", + "author": "BeeOS Community", + "description": "A clean orbit-style watch face from a sample community Hive repo.", + "repository": "https://github.com/beeos-community/simple-orbit", + "entry": "face.py", + "permissions": [ + "time", + "battery" + ], + "rating": "4.3", + "color": "#36d6d0", + "icon": "\u25f7", + "curated": true + }, + { + "id": "community.app.notes", + "name": "Tiny Notes", + "type": "app", + "category": "Apps", + "version": "0.1.0", + "author": "BeeOS Community", + "description": "A tiny notes app listing from a community-hosted HiveStore repo.", + "repository": "https://github.com/beeos-community/tiny-notes", + "entry": "app.py", + "permissions": [ + "display", + "storage" + ], + "rating": "4.1", + "color": "#9b5cff", + "icon": "\u25a3", + "curated": true + } + ] +} \ No newline at end of file diff --git a/beeos/data/hivestore_index.json b/beeos/data/hivestore_index.json new file mode 100644 index 0000000..99ecbbb --- /dev/null +++ b/beeos/data/hivestore_index.json @@ -0,0 +1,120 @@ +{ + "schema": 1, + "source_name": "Curated GitHub Listings", + "source_url": "https://github.com/beeos/hivestore", + "packages": [ + { + "id": "beeos.watchface.retro_clock_pack", + "name": "Retro Clock Pack", + "type": "watchface", + "category": "Watch Faces", + "version": "0.1.0", + "author": "BeeOS Community", + "description": "Classic LCD and analog-inspired watch faces.", + "repository": "https://github.com/beeos-hive/retro-clock-pack", + "entry": "face.py", + "permissions": [ + "time", + "battery" + ], + "rating": "4.8", + "color": "#ffcc00", + "icon": "\u25f7", + "curated": true + }, + { + "id": "beeos.app.heartrate_pro", + "name": "HeartRate Pro", + "type": "app", + "category": "Apps", + "version": "0.2.0", + "author": "BeeOS Community", + "description": "Health dashboard for heart-rate and SpO\u2082 sensors.", + "repository": "https://github.com/beeos-hive/heartrate-pro", + "entry": "app.py", + "permissions": [ + "heart_rate", + "spo2" + ], + "rating": "4.7", + "color": "#ff4d67", + "icon": "\u2665", + "curated": true + }, + { + "id": "beeos.app.weather_plus", + "name": "Weather Plus", + "type": "app", + "category": "Apps", + "version": "0.1.1", + "author": "BeeOS Community", + "description": "Forecast glance and weather alerts.", + "repository": "https://github.com/beeos-hive/weather-plus", + "entry": "app.py", + "permissions": [ + "network", + "location" + ], + "rating": "4.5", + "color": "#2e88ff", + "icon": "\u2601", + "curated": true + }, + { + "id": "beeos.scripts.quick_tools", + "name": "Quick Tools", + "type": "script_pack", + "category": "Scripts", + "version": "0.1.0", + "author": "BeeOS Community", + "description": "Timers, diagnostics, and quick utility scripts.", + "repository": "https://github.com/beeos-hive/quick-tools", + "entry": "scripts/", + "permissions": [ + "vibration", + "battery" + ], + "rating": "4.4", + "color": "#50d86a", + "icon": "\u25b6", + "curated": true + }, + { + "id": "beeos.theme.midnight_honey", + "name": "Midnight Honey", + "type": "theme", + "category": "Themes", + "version": "0.1.0", + "author": "BeeOS Community", + "description": "AMOLED black theme with BeeOS yellow accents.", + "repository": "https://github.com/beeos-hive/midnight-honey", + "entry": "theme.json", + "permissions": [ + "theme" + ], + "rating": "4.6", + "color": "#ffcc00", + "icon": "\u25c6", + "curated": true + }, + { + "id": "beeos.plugin.quick_toggles", + "name": "Quick Toggles", + "type": "plugin", + "category": "Plugins", + "version": "0.1.0", + "author": "BeeOS Community", + "description": "Adds more quick toggles to the notifications shade.", + "repository": "https://github.com/beeos-hive/quick-toggles", + "entry": "plugin.py", + "permissions": [ + "notifications", + "system_info" + ], + "rating": "4.3", + "color": "#36d6d0", + "icon": "\u224b", + "curated": true + } + ] +} \ No newline at end of file diff --git a/beeos/data/hivestore_sources.json b/beeos/data/hivestore_sources.json new file mode 100644 index 0000000..1c56e2c --- /dev/null +++ b/beeos/data/hivestore_sources.json @@ -0,0 +1,23 @@ +{ + "schema": 1, + "sources": [ + { + "id": "official", + "name": "Official BeeOS HiveStore", + "url": "https://github.com/beeos/hivestore", + "index": "hivestore_index.json", + "enabled": true, + "official": true, + "status": "ok" + }, + { + "id": "community_demo", + "name": "Community Demo Repo", + "url": "https://github.com/beeos-community/demo-hive", + "index": "community_hivestore_index.json", + "enabled": true, + "official": false, + "status": "ok" + } + ] +} \ No newline at end of file diff --git a/beeos/data/installed_packages.json b/beeos/data/installed_packages.json new file mode 100644 index 0000000..6d920e2 --- /dev/null +++ b/beeos/data/installed_packages.json @@ -0,0 +1,3 @@ +{ + "installed": [] +} \ No newline at end of file diff --git a/beeos/data/permission_approvals.json b/beeos/data/permission_approvals.json new file mode 100644 index 0000000..1673f13 --- /dev/null +++ b/beeos/data/permission_approvals.json @@ -0,0 +1,3 @@ +{ + "approved": {} +} \ No newline at end of file diff --git a/beeos/data/settings.json b/beeos/data/settings.json new file mode 100644 index 0000000..9385f0b --- /dev/null +++ b/beeos/data/settings.json @@ -0,0 +1,5 @@ +{ + "watch_face": "Bee Simple", + "theme": "Midnight Honey", + "developer_mode": true +} \ No newline at end of file diff --git a/beeos/data/themes.json b/beeos/data/themes.json new file mode 100644 index 0000000..7d26e64 --- /dev/null +++ b/beeos/data/themes.json @@ -0,0 +1,41 @@ +{ + "schema": 1, + "themes": [ + { + "id": "midnight_honey", + "name": "Midnight Honey", + "accent": "#ffcc00", + "background": "#000000", + "card": "#15171d", + "text": "#ffffff", + "muted": "#9ba7bd" + }, + { + "id": "blue_steel", + "name": "Blue Steel", + "accent": "#2e88ff", + "background": "#000510", + "card": "#111827", + "text": "#ffffff", + "muted": "#8fa3cc" + }, + { + "id": "oled_minimal", + "name": "OLED Minimal", + "accent": "#ffffff", + "background": "#000000", + "card": "#080808", + "text": "#ffffff", + "muted": "#777777" + }, + { + "id": "high_contrast", + "name": "High Contrast", + "accent": "#ffff00", + "background": "#000000", + "card": "#202020", + "text": "#ffffff", + "muted": "#cccccc" + } + ] +} \ No newline at end of file diff --git a/beeos/generated/icons/bitmap_json/beeos_icons_24.json b/beeos/generated/icons/bitmap_json/beeos_icons_24.json new file mode 100644 index 0000000..eda623a --- /dev/null +++ b/beeos/generated/icons/bitmap_json/beeos_icons_24.json @@ -0,0 +1,3680 @@ +{ + "size": 24, + "icons": { + "about": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000001111111100000000", + "000000111111111111000000", + "000011111110011111110000", + "000111110000000011111000", + "000111000000000000111000", + "001110000000000000011100", + "001110000001100000011100", + "011100000001100000001110", + "011100000000000000001110", + "011100000000000000001110", + "011000000001100000000110", + "011000000001100000000110", + "011100000001100000001110", + "011100000001100000001110", + "011100000001100000001110", + "001110000001100000011100", + "001110000000000000011100", + "000111000000000000111000", + "000111110000000011111000", + "000011111110011111110000", + "000000111111111111000000", + "000000001111111100000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 255, + 0, + 3, + 255, + 192, + 15, + 231, + 240, + 31, + 0, + 248, + 28, + 0, + 56, + 56, + 0, + 28, + 56, + 24, + 28, + 112, + 24, + 14, + 112, + 0, + 14, + 112, + 0, + 14, + 96, + 24, + 6, + 96, + 24, + 6, + 112, + 24, + 14, + 112, + 24, + 14, + 112, + 24, + 14, + 56, + 24, + 28, + 56, + 0, + 28, + 28, + 0, + 56, + 31, + 0, + 248, + 15, + 231, + 240, + 3, + 255, + 192, + 0, + 255, + 0, + 0, + 0, + 0 + ] + }, + "apps": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000000000000000000", + "000111111111111111111000", + "001111111111111111111100", + "001110000001100000011100", + "001100000001100000001100", + "001100000001100000001100", + "001100000001100000001100", + "001100000001100000001100", + "001100000001100000001100", + "001100000001100000001100", + "001111111111111111111100", + "001111111111111111111100", + "001100000001100000001100", + "001100000001100000001100", + "001100000001100000001100", + "001100000001100000001100", + "001100000001100000001100", + "001100000001100000001100", + "001110000001100000011100", + "001111111111111111111100", + "000111111111111111111000", + "000000000000000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 31, + 255, + 248, + 63, + 255, + 252, + 56, + 24, + 28, + 48, + 24, + 12, + 48, + 24, + 12, + 48, + 24, + 12, + 48, + 24, + 12, + 48, + 24, + 12, + 48, + 24, + 12, + 63, + 255, + 252, + 63, + 255, + 252, + 48, + 24, + 12, + 48, + 24, + 12, + 48, + 24, + 12, + 48, + 24, + 12, + 48, + 24, + 12, + 48, + 24, + 12, + 56, + 24, + 28, + 63, + 255, + 252, + 31, + 255, + 248, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "back": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000001100000000", + "000000000000011100000000", + "000000000000111000000000", + "000000000001110000000000", + "000000000011100000000000", + "000000000111000000000000", + "000000001110000000000000", + "000000001110000000000000", + "000000000111100000000000", + "000000000011110000000000", + "000000000001111000000000", + "000000000000111100000000", + "000000000000011100000000", + "000000000000001100000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 7, + 0, + 0, + 14, + 0, + 0, + 28, + 0, + 0, + 56, + 0, + 0, + 112, + 0, + 0, + 224, + 0, + 0, + 224, + 0, + 0, + 120, + 0, + 0, + 60, + 0, + 0, + 30, + 0, + 0, + 15, + 0, + 0, + 7, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "battery": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "001111111111111111000000", + "011111111111111111100000", + "011100000000000011100000", + "011000000000000001100000", + "011000000000000001100110", + "011000000000000001100110", + "011000000000000001100110", + "011000000000000001100110", + "011000000000000001100110", + "011000000000000001100110", + "011000000000000001100000", + "011100000000000011100000", + "011111111111111111100000", + "001111111111111111000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 63, + 255, + 192, + 127, + 255, + 224, + 112, + 0, + 224, + 96, + 0, + 96, + 96, + 0, + 102, + 96, + 0, + 102, + 96, + 0, + 102, + 96, + 0, + 102, + 96, + 0, + 102, + 96, + 0, + 102, + 96, + 0, + 96, + 112, + 0, + 224, + 127, + 255, + 224, + 63, + 255, + 192, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "bluetooth": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000001100000000000", + "000000000001110000000000", + "000000000001111100000000", + "000000000001111100000000", + "000000000001101111000000", + "000000110001100111000000", + "000000111001100111000000", + "000000011111101110000000", + "000000001111111100000000", + "000000000111111000000000", + "000000000011110000000000", + "000000000011110000000000", + "000000000111111000000000", + "000000001111111100000000", + "000000011101101111000000", + "000000111001100111000000", + "000000110001100111000000", + "000000000001101110000000", + "000000000001111100000000", + "000000000001111000000000", + "000000000001110000000000", + "000000000001100000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 24, + 0, + 0, + 28, + 0, + 0, + 31, + 0, + 0, + 31, + 0, + 0, + 27, + 192, + 3, + 25, + 192, + 3, + 153, + 192, + 1, + 251, + 128, + 0, + 255, + 0, + 0, + 126, + 0, + 0, + 60, + 0, + 0, + 60, + 0, + 0, + 126, + 0, + 0, + 255, + 0, + 1, + 219, + 192, + 3, + 153, + 192, + 3, + 25, + 192, + 0, + 27, + 128, + 0, + 31, + 0, + 0, + 30, + 0, + 0, + 28, + 0, + 0, + 24, + 0, + 0, + 0, + 0 + ] + }, + "clock": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000001111111100000000", + "000000111111111111000000", + "000011111110011111110000", + "000111110000000011111000", + "000111000001100000111000", + "001110000001100000011100", + "001110000001100000011100", + "011100000001100000001110", + "011100000001100000001110", + "011100000001100000001110", + "011000000001110000000110", + "011000000001111100000110", + "011100000000111110001110", + "011100000000001110001110", + "011100000000000000001110", + "001110000000000000011100", + "001110000000000000011100", + "000111000000000000111000", + "000111110000000011111000", + "000011111110011111110000", + "000000111111111111000000", + "000000001111111100000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 255, + 0, + 3, + 255, + 192, + 15, + 231, + 240, + 31, + 0, + 248, + 28, + 24, + 56, + 56, + 24, + 28, + 56, + 24, + 28, + 112, + 24, + 14, + 112, + 24, + 14, + 112, + 24, + 14, + 96, + 28, + 6, + 96, + 31, + 6, + 112, + 15, + 142, + 112, + 3, + 142, + 112, + 0, + 14, + 56, + 0, + 28, + 56, + 0, + 28, + 28, + 0, + 56, + 31, + 0, + 248, + 15, + 231, + 240, + 3, + 255, + 192, + 0, + 255, + 0, + 0, + 0, + 0 + ] + }, + "developer-tools": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000011100000000", + "000000000000011100000000", + "000000000000011000000000", + "000000000000111000000000", + "000001100000111001100000", + "000011100000111001110000", + "000111000001110000111100", + "001110000001110000011110", + "011100000001110000001110", + "011100000011100000001110", + "001111000011100000011100", + "000111100011100000111000", + "000011100111000001110000", + "000001100111000001100000", + "000000000111000000000000", + "000000000110000000000000", + "000000001110000000000000", + "000000001110000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 0, + 0, + 7, + 0, + 0, + 6, + 0, + 0, + 14, + 0, + 6, + 14, + 96, + 14, + 14, + 112, + 28, + 28, + 60, + 56, + 28, + 30, + 112, + 28, + 14, + 112, + 56, + 14, + 60, + 56, + 28, + 30, + 56, + 56, + 14, + 112, + 112, + 6, + 112, + 96, + 0, + 112, + 0, + 0, + 96, + 0, + 0, + 224, + 0, + 0, + 224, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "display": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000001100000000000", + "000000000001100000000000", + "000000000001100000000000", + "000011000001100000110000", + "000011100000000001110000", + "000001110000000011100000", + "000000100111111001000000", + "000000001111111100000000", + "000000011110011110000000", + "000000011100001110000000", + "011110011000000110011110", + "011110011000000110011110", + "000000011100001110000000", + "000000011110011110000000", + "000000001111111100000000", + "000000100111111001000000", + "000001110000000011100000", + "000011100000000001110000", + "000011000001100000110000", + "000000000001100000000000", + "000000000001100000000000", + "000000000001100000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 12, + 24, + 48, + 14, + 0, + 112, + 7, + 0, + 224, + 2, + 126, + 64, + 0, + 255, + 0, + 1, + 231, + 128, + 1, + 195, + 128, + 121, + 129, + 158, + 121, + 129, + 158, + 1, + 195, + 128, + 1, + 231, + 128, + 0, + 255, + 0, + 2, + 126, + 64, + 7, + 0, + 224, + 14, + 0, + 112, + 12, + 24, + 48, + 0, + 24, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 0, + 0, + 0 + ] + }, + "github": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000000000000000000", + "000001100000000111111000", + "000001100000001111111100", + "000001100000001110011100", + "000001100001111110011100", + "000001100111111110011100", + "000001101111111110011100", + "000001111110001111111100", + "000001111100000111111000", + "000001111000000000000000", + "000001110000000000000000", + "000001110000000000000000", + "000001110000000000000000", + "000111111000000000000000", + "001111111100000000000000", + "001110011100000000000000", + "001110011100000000000000", + "001110011100000000000000", + "001110011100000000000000", + "001111111100000000000000", + "000111111000000000000000", + "000000000000000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 6, + 1, + 248, + 6, + 3, + 252, + 6, + 3, + 156, + 6, + 31, + 156, + 6, + 127, + 156, + 6, + 255, + 156, + 7, + 227, + 252, + 7, + 193, + 248, + 7, + 128, + 0, + 7, + 0, + 0, + 7, + 0, + 0, + 7, + 0, + 0, + 31, + 128, + 0, + 63, + 192, + 0, + 57, + 192, + 0, + 57, + 192, + 0, + 57, + 192, + 0, + 57, + 192, + 0, + 63, + 192, + 0, + 31, + 128, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "gps": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000001100000000000", + "000000000001100000000000", + "000000000001100000000000", + "000000001111111100000000", + "000000011111111110000000", + "000000111110011111000000", + "000001111000000111100000", + "000011110111111011110000", + "000011101111111101110000", + "000011101110011101110000", + "011111001110011100111110", + "011111001110011100111110", + "000011101110011101110000", + "000011101111111101110000", + "000011110111111011110000", + "000001111000000111100000", + "000000111110011111000000", + "000000011111111110000000", + "000000001111111100000000", + "000000000001100000000000", + "000000000001100000000000", + "000000000001100000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 0, + 255, + 0, + 1, + 255, + 128, + 3, + 231, + 192, + 7, + 129, + 224, + 15, + 126, + 240, + 14, + 255, + 112, + 14, + 231, + 112, + 124, + 231, + 62, + 124, + 231, + 62, + 14, + 231, + 112, + 14, + 255, + 112, + 15, + 126, + 240, + 7, + 129, + 224, + 3, + 231, + 192, + 1, + 255, + 128, + 0, + 255, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 0, + 0, + 0 + ] + }, + "health": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000011111110011111110000", + "000111111111111111111000", + "001111101111111101111100", + "011110000011110000011110", + "011100000000000000001110", + "011100000000011000001110", + "011000000000011100000110", + "011100000000111100001110", + "011100000110111100001110", + "011111111111111111111110", + "001111111111111111111100", + "000111000011110000111000", + "000011110011110011110000", + "000001111011100111100000", + "000000111101101111000000", + "000000011110011110000000", + "000000001111111100000000", + "000000000111111000000000", + "000000000011110000000000", + "000000000000000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15, + 231, + 240, + 31, + 255, + 248, + 62, + 255, + 124, + 120, + 60, + 30, + 112, + 0, + 14, + 112, + 6, + 14, + 96, + 7, + 6, + 112, + 15, + 14, + 112, + 111, + 14, + 127, + 255, + 254, + 63, + 255, + 252, + 28, + 60, + 56, + 15, + 60, + 240, + 7, + 185, + 224, + 3, + 219, + 192, + 1, + 231, + 128, + 0, + 255, + 0, + 0, + 126, + 0, + 0, + 60, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "hivestore": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000001111111111111100000", + "000011111111111111110000", + "000111100000000001111000", + "001111000000000000111100", + "001111111111111111111100", + "001111111111111111111100", + "001100000000000000001100", + "001100000000000000001100", + "001100011000000110001100", + "001100011000000110001100", + "001100011100001110001100", + "001100011110011110001100", + "001100001111111100001100", + "001100000111111000001100", + "001100000000000000001100", + "001100000000000000001100", + "001100000000000000001100", + "001100000000000000001100", + "001100000000000000001100", + "001110000000000000011100", + "001111111111111111111100", + "000111111111111111111000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 7, + 255, + 224, + 15, + 255, + 240, + 30, + 0, + 120, + 60, + 0, + 60, + 63, + 255, + 252, + 63, + 255, + 252, + 48, + 0, + 12, + 48, + 0, + 12, + 49, + 129, + 140, + 49, + 129, + 140, + 49, + 195, + 140, + 49, + 231, + 140, + 48, + 255, + 12, + 48, + 126, + 12, + 48, + 0, + 12, + 48, + 0, + 12, + 48, + 0, + 12, + 48, + 0, + 12, + 48, + 0, + 12, + 56, + 0, + 28, + 63, + 255, + 252, + 31, + 255, + 248, + 0, + 0, + 0 + ] + }, + "home": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000011110000000000", + "000000000111111000000000", + "000000011111111110000000", + "000000111100001111000000", + "000001111000000111100000", + "000011110000000011110000", + "000111100000000001111000", + "001111000000000000111100", + "001110000000000000011100", + "001100000000000000001100", + "001100001111111100001100", + "001100001111111100001100", + "001100001100001100001100", + "001100001100001100001100", + "001100001100001100001100", + "001100001100001100001100", + "001100001100001100001100", + "001100001100001100001100", + "001110001100001100011100", + "001111111111111111111100", + "000111111111111111111000", + "000000000000000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 60, + 0, + 0, + 126, + 0, + 1, + 255, + 128, + 3, + 195, + 192, + 7, + 129, + 224, + 15, + 0, + 240, + 30, + 0, + 120, + 60, + 0, + 60, + 56, + 0, + 28, + 48, + 0, + 12, + 48, + 255, + 12, + 48, + 255, + 12, + 48, + 195, + 12, + 48, + 195, + 12, + 48, + 195, + 12, + 48, + 195, + 12, + 48, + 195, + 12, + 48, + 195, + 12, + 56, + 195, + 28, + 63, + 255, + 252, + 31, + 255, + 248, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "install": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000000000000000000", + "000000000001100000000000", + "000000000001100000000000", + "000000000001100000000000", + "000000000001100000000000", + "000000000001100000000000", + "000000000001100000000000", + "000000000001100000000000", + "000000110001100011000000", + "000000111001100111000000", + "000000011111101110000000", + "000000001111111100000000", + "000000000111111000000000", + "001100000011110000001100", + "001100000001100000001100", + "001100000000000000001100", + "001100000000000000001100", + "001100000000000000001100", + "001110000000000000011100", + "001111111111111111111100", + "000111111111111111111000", + "000000000000000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 3, + 24, + 192, + 3, + 153, + 192, + 1, + 251, + 128, + 0, + 255, + 0, + 0, + 126, + 0, + 48, + 60, + 12, + 48, + 24, + 12, + 48, + 0, + 12, + 48, + 0, + 12, + 48, + 0, + 12, + 56, + 0, + 28, + 63, + 255, + 252, + 31, + 255, + 248, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "notifications": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000001111111100000000", + "000000011111111110000000", + "000000111110011111000000", + "000001111000000111100000", + "000001110000000011100000", + "000001110000000011100000", + "000001100000000001100000", + "000001100000000001100000", + "000001100000000001100000", + "000011100000000001110000", + "000011100000000001110000", + "000011100000000001110000", + "000111000000000000111000", + "001111000000000000111100", + "001110000000000000011100", + "001111111111111111111100", + "001111111111111111111100", + "000000000000000000000000", + "000000000000000000000000", + "000000000111111000000000", + "000000000111111000000000", + "000000000011110000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 255, + 0, + 1, + 255, + 128, + 3, + 231, + 192, + 7, + 129, + 224, + 7, + 0, + 224, + 7, + 0, + 224, + 6, + 0, + 96, + 6, + 0, + 96, + 6, + 0, + 96, + 14, + 0, + 112, + 14, + 0, + 112, + 14, + 0, + 112, + 28, + 0, + 56, + 60, + 0, + 60, + 56, + 0, + 28, + 63, + 255, + 252, + 63, + 255, + 252, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 126, + 0, + 0, + 126, + 0, + 0, + 60, + 0, + 0, + 0, + 0 + ] + }, + "package": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000011110000000000", + "000000001111111100000000", + "000000111111111111000000", + "000011111110001111110000", + "000111111111000011111000", + "001111000111110000111100", + "001111100011111101111100", + "001111111000111111111100", + "001101111100001111101100", + "001100011111111111001100", + "001100001111111100001100", + "001100000011110000001100", + "001100000001100000001100", + "001100000001100000001100", + "001100000001100000001100", + "001110000001100000011100", + "001111000001100000111100", + "000111110001100011111000", + "000011111101101111110000", + "000000111111111111000000", + "000000001111111100000000", + "000000000011110000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 60, + 0, + 0, + 255, + 0, + 3, + 255, + 192, + 15, + 227, + 240, + 31, + 240, + 248, + 60, + 124, + 60, + 62, + 63, + 124, + 63, + 143, + 252, + 55, + 195, + 236, + 49, + 255, + 204, + 48, + 255, + 12, + 48, + 60, + 12, + 48, + 24, + 12, + 48, + 24, + 12, + 48, + 24, + 12, + 56, + 24, + 28, + 60, + 24, + 60, + 31, + 24, + 248, + 15, + 219, + 240, + 3, + 255, + 192, + 0, + 255, + 0, + 0, + 60, + 0, + 0, + 0, + 0 + ] + }, + "permissions": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000011110000000000", + "000000001111111000000000", + "000000111111111111000000", + "000111111110011111111000", + "000111111000000111111000", + "000110000000000000011000", + "000110000000000000011000", + "000110000000000000011000", + "000110000000001100011000", + "000110000000011100011000", + "000110001100111000011000", + "000110001111110000011000", + "000110000111100000011000", + "000111000011000000111000", + "000111000000000000111000", + "000111000000000000111000", + "000011100000000001110000", + "000011110000000011110000", + "000001111100001111100000", + "000000111111111111000000", + "000000011111111110000000", + "000000000111111000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 60, + 0, + 0, + 254, + 0, + 3, + 255, + 192, + 31, + 231, + 248, + 31, + 129, + 248, + 24, + 0, + 24, + 24, + 0, + 24, + 24, + 0, + 24, + 24, + 3, + 24, + 24, + 7, + 24, + 24, + 206, + 24, + 24, + 252, + 24, + 24, + 120, + 24, + 28, + 48, + 56, + 28, + 0, + 56, + 28, + 0, + 56, + 14, + 0, + 112, + 15, + 0, + 240, + 7, + 195, + 224, + 3, + 255, + 192, + 1, + 255, + 128, + 0, + 126, + 0, + 0, + 0, + 0 + ] + }, + "plugin": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000011110001111100", + "000000000111111011111110", + "000000001111111111101110", + "000000011100001111000110", + "000000011110000111001110", + "000000011111000000111110", + "000011100111000000111100", + "000111100011000000111000", + "001111110111000000011100", + "011101111111000000001110", + "011100111110000000001110", + "011100000000011111001110", + "011100000000111111101110", + "001110000000111011111100", + "000111000000110001111000", + "001111000000111001110000", + "011111000000111110000000", + "011100111000011110000000", + "011000111100001110000000", + "011101111111111100000000", + "011111110111111000000000", + "001111100011110000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 60, + 124, + 0, + 126, + 254, + 0, + 255, + 238, + 1, + 195, + 198, + 1, + 225, + 206, + 1, + 240, + 62, + 14, + 112, + 60, + 30, + 48, + 56, + 63, + 112, + 28, + 119, + 240, + 14, + 115, + 224, + 14, + 112, + 7, + 206, + 112, + 15, + 238, + 56, + 14, + 252, + 28, + 12, + 120, + 60, + 14, + 112, + 124, + 15, + 128, + 115, + 135, + 128, + 99, + 195, + 128, + 119, + 255, + 0, + 127, + 126, + 0, + 62, + 60, + 0, + 0, + 0, + 0 + ] + }, + "plugins": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000011110001111100", + "000000000111111011111110", + "000000001111111111101110", + "000000011100001111000110", + "000000011110000111001110", + "000000011111000000111110", + "000011100111000000111100", + "000111100011000000111000", + "001111110111000000011100", + "011101111111000000001110", + "011100111110000000001110", + "011100000000011111001110", + "011100000000111111101110", + "001110000000111011111100", + "000111000000110001111000", + "001111000000111001110000", + "011111000000111110000000", + "011100111000011110000000", + "011000111100001110000000", + "011101111111111100000000", + "011111110111111000000000", + "001111100011110000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 60, + 124, + 0, + 126, + 254, + 0, + 255, + 238, + 1, + 195, + 198, + 1, + 225, + 206, + 1, + 240, + 62, + 14, + 112, + 60, + 30, + 48, + 56, + 63, + 112, + 28, + 119, + 240, + 14, + 115, + 224, + 14, + 112, + 7, + 206, + 112, + 15, + 238, + 56, + 14, + 252, + 28, + 12, + 120, + 60, + 14, + 112, + 124, + 15, + 128, + 115, + 135, + 128, + 99, + 195, + 128, + 119, + 255, + 0, + 127, + 126, + 0, + 62, + 60, + 0, + 0, + 0, + 0 + ] + }, + "quick-tools": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000000111111100000", + "000000000001111111100000", + "000000000011111111100000", + "000000000111100111000000", + "000000000111001110001110", + "000000000111011100011110", + "000000000110011100111110", + "000000000110001111111110", + "000000000111000111101110", + "000000000111000011001110", + "000000001110000000011110", + "000000011100011001111100", + "000000111000111111111000", + "000001110001111111110000", + "000011100011100000000000", + "000111000111000000000000", + "001110001110000000000000", + "011100011100000000000000", + "011100111000000000000000", + "011111110000000000000000", + "011111100000000000000000", + "001111000000000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 15, + 224, + 0, + 31, + 224, + 0, + 63, + 224, + 0, + 121, + 192, + 0, + 115, + 142, + 0, + 119, + 30, + 0, + 103, + 62, + 0, + 99, + 254, + 0, + 113, + 238, + 0, + 112, + 206, + 0, + 224, + 30, + 1, + 198, + 124, + 3, + 143, + 248, + 7, + 31, + 240, + 14, + 56, + 0, + 28, + 112, + 0, + 56, + 224, + 0, + 113, + 192, + 0, + 115, + 128, + 0, + 127, + 0, + 0, + 126, + 0, + 0, + 60, + 0, + 0, + 0, + 0, + 0 + ] + }, + "remove": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000001111111100000000", + "000000011111111110000000", + "000000011100001110000000", + "000000011000000110000000", + "001111111111111111111100", + "001111111111111111111100", + "000011000000000000110000", + "000011000000000000110000", + "000011000000000000110000", + "000011000110011000110000", + "000011000110011000110000", + "000011000110011000110000", + "000011000110011000110000", + "000011000110011000110000", + "000011000110011000110000", + "000011000110011000110000", + "000011000110011000110000", + "000011000000000000110000", + "000011000000000000110000", + "000011100000000001110000", + "000011111111111111110000", + "000001111111111111100000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 255, + 0, + 1, + 255, + 128, + 1, + 195, + 128, + 1, + 129, + 128, + 63, + 255, + 252, + 63, + 255, + 252, + 12, + 0, + 48, + 12, + 0, + 48, + 12, + 0, + 48, + 12, + 102, + 48, + 12, + 102, + 48, + 12, + 102, + 48, + 12, + 102, + 48, + 12, + 102, + 48, + 12, + 102, + 48, + 12, + 102, + 48, + 12, + 102, + 48, + 12, + 0, + 48, + 12, + 0, + 48, + 14, + 0, + 112, + 15, + 255, + 240, + 7, + 255, + 224, + 0, + 0, + 0 + ] + }, + "resource-monitor": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000001100000000000000", + "000000011110000000000000", + "000000011110000000000000", + "000000011110000000000000", + "000000111111000000000000", + "000000111111000000000000", + "000000111111000000000000", + "000000110011000000000000", + "000001110011100000000000", + "000001110011100000000000", + "011111110011100001111110", + "011111100001110011111110", + "000000000001110011100000", + "000000000001110011100000", + "000000000000110011000000", + "000000000000111111000000", + "000000000000111111000000", + "000000000000111111000000", + "000000000000011110000000", + "000000000000011110000000", + "000000000000011110000000", + "000000000000001100000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 192, + 0, + 1, + 224, + 0, + 1, + 224, + 0, + 1, + 224, + 0, + 3, + 240, + 0, + 3, + 240, + 0, + 3, + 240, + 0, + 3, + 48, + 0, + 7, + 56, + 0, + 7, + 56, + 0, + 127, + 56, + 126, + 126, + 28, + 254, + 0, + 28, + 224, + 0, + 28, + 224, + 0, + 12, + 192, + 0, + 15, + 192, + 0, + 15, + 192, + 0, + 15, + 192, + 0, + 7, + 128, + 0, + 7, + 128, + 0, + 7, + 128, + 0, + 3, + 0, + 0, + 0, + 0 + ] + }, + "retro-clock": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000001111111100000000", + "000000111111111111000000", + "000011111110011111110000", + "000111110000000011111000", + "000111000001100000111000", + "001110000001100000011100", + "001110000001100000011100", + "011100000001100000001110", + "011100000001100000001110", + "011100000001100000001110", + "011000000001111110000110", + "011000000001111110000110", + "011100000000000000001110", + "011100000000000000001110", + "011100000000000000001110", + "001110000000000000011100", + "001110000000000000011100", + "000111000000000000111000", + "000111110000000011111000", + "000011111110011111110000", + "000000111111111111000000", + "000000001111111100000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 255, + 0, + 3, + 255, + 192, + 15, + 231, + 240, + 31, + 0, + 248, + 28, + 24, + 56, + 56, + 24, + 28, + 56, + 24, + 28, + 112, + 24, + 14, + 112, + 24, + 14, + 112, + 24, + 14, + 96, + 31, + 134, + 96, + 31, + 134, + 112, + 0, + 14, + 112, + 0, + 14, + 112, + 0, + 14, + 56, + 0, + 28, + 56, + 0, + 28, + 28, + 0, + 56, + 31, + 0, + 248, + 15, + 231, + 240, + 3, + 255, + 192, + 0, + 255, + 0, + 0, + 0, + 0 + ] + }, + "runtime": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000000111000000000", + "000000000001111000000000", + "000000000011111000000000", + "000000000111111000000000", + "000000001111111000000000", + "000000011111110000000000", + "000000111101110000000000", + "000001111001110000000000", + "000011110001111111111100", + "000111100001111111111100", + "001111000000000000011100", + "001110000000000000111100", + "001111111111100001111000", + "001111111111100011110000", + "000000000011100111100000", + "000000000011101111000000", + "000000000011111110000000", + "000000000111111100000000", + "000000000111111000000000", + "000000000111110000000000", + "000000000111100000000000", + "000000000111000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 14, + 0, + 0, + 30, + 0, + 0, + 62, + 0, + 0, + 126, + 0, + 0, + 254, + 0, + 1, + 252, + 0, + 3, + 220, + 0, + 7, + 156, + 0, + 15, + 31, + 252, + 30, + 31, + 252, + 60, + 0, + 28, + 56, + 0, + 60, + 63, + 248, + 120, + 63, + 248, + 240, + 0, + 57, + 224, + 0, + 59, + 192, + 0, + 63, + 128, + 0, + 127, + 0, + 0, + 126, + 0, + 0, + 124, + 0, + 0, + 120, + 0, + 0, + 112, + 0, + 0, + 0, + 0 + ] + }, + "script-run": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000000000000000000", + "000001111000000000000000", + "000011111110000000000000", + "000011111111100000000000", + "000011000111111000000000", + "000011000001111100000000", + "000011000000111111000000", + "000011000000001111110000", + "000011000000000011111000", + "000011000000000000111100", + "000011000000000000011100", + "000011000000000000011100", + "000011000000000000111100", + "000011000000000011111000", + "000011000000001111110000", + "000011000000111111000000", + "000011000001111100000000", + "000011000111111000000000", + "000011111111100000000000", + "000011111110000000000000", + "000001111000000000000000", + "000000000000000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 128, + 0, + 15, + 224, + 0, + 15, + 248, + 0, + 12, + 126, + 0, + 12, + 31, + 0, + 12, + 15, + 192, + 12, + 3, + 240, + 12, + 0, + 248, + 12, + 0, + 60, + 12, + 0, + 28, + 12, + 0, + 28, + 12, + 0, + 60, + 12, + 0, + 248, + 12, + 3, + 240, + 12, + 15, + 192, + 12, + 31, + 0, + 12, + 126, + 0, + 15, + 248, + 0, + 15, + 224, + 0, + 7, + 128, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "scripts": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000110000000000000000000", + "000111000000000000000000", + "000011110000000000000000", + "000001111000000000000000", + "000000111100000000000000", + "000000011110000000000000", + "000000001110000000000000", + "000000001110000000000000", + "000000011100000000000000", + "000000111000000000000000", + "000001110000000000000000", + "000011100000000000000000", + "000111000000000000000000", + "000110000000000000000000", + "000000000001111111111000", + "000000000001111111111000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24, + 0, + 0, + 28, + 0, + 0, + 15, + 0, + 0, + 7, + 128, + 0, + 3, + 192, + 0, + 1, + 224, + 0, + 0, + 224, + 0, + 0, + 224, + 0, + 1, + 192, + 0, + 3, + 128, + 0, + 7, + 0, + 0, + 14, + 0, + 0, + 28, + 0, + 0, + 24, + 0, + 0, + 0, + 31, + 248, + 0, + 31, + 248, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "search": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000000000000000000", + "000000011111111000000000", + "000001111111111110000000", + "000011111100111111000000", + "000111100000000111100000", + "000111000000000011100000", + "001110000000000001110000", + "001110000000000001110000", + "001110000000000001110000", + "001100000000000000110000", + "001100000000000000110000", + "001110000000000001110000", + "001110000000000001110000", + "001110000000000001110000", + "000111000000000011100000", + "000111100000000111100000", + "000011111100111111100000", + "000001111111111111111000", + "000000011111111000111100", + "000000000000000000011100", + "000000000000000000001100", + "000000000000000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 254, + 0, + 7, + 255, + 128, + 15, + 207, + 192, + 30, + 1, + 224, + 28, + 0, + 224, + 56, + 0, + 112, + 56, + 0, + 112, + 56, + 0, + 112, + 48, + 0, + 48, + 48, + 0, + 48, + 56, + 0, + 112, + 56, + 0, + 112, + 56, + 0, + 112, + 28, + 0, + 224, + 30, + 1, + 224, + 15, + 207, + 224, + 7, + 255, + 248, + 1, + 254, + 60, + 0, + 0, + 28, + 0, + 0, + 12, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "settings": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000011110000000000", + "000000000111111000000000", + "000000001111111100000000", + "000001001110011100100000", + "000111111110011111111000", + "001111111100001111111100", + "001110110000000011011100", + "001110000111111000011100", + "001110001111111100011100", + "001111001110011100111100", + "000111001110011100111000", + "000111001110011100111000", + "001111001110011100111100", + "001110001111111100011100", + "001110000111111000011100", + "001110110000000011011100", + "001111111100001111111100", + "000111111110011111111000", + "000001001110011100100000", + "000000001111111100000000", + "000000000111111000000000", + "000000000011110000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 60, + 0, + 0, + 126, + 0, + 0, + 255, + 0, + 4, + 231, + 32, + 31, + 231, + 248, + 63, + 195, + 252, + 59, + 0, + 220, + 56, + 126, + 28, + 56, + 255, + 28, + 60, + 231, + 60, + 28, + 231, + 56, + 28, + 231, + 56, + 60, + 231, + 60, + 56, + 255, + 28, + 56, + 126, + 28, + 59, + 0, + 220, + 63, + 195, + 252, + 31, + 231, + 248, + 4, + 231, + 32, + 0, + 255, + 0, + 0, + 126, + 0, + 0, + 60, + 0, + 0, + 0, + 0 + ] + }, + "store": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000001111111111111100000", + "000011111111111111110000", + "000111100000000001111000", + "001111000000000000111100", + "001111111111111111111100", + "001111111111111111111100", + "001100000000000000001100", + "001100000000000000001100", + "001100011000000110001100", + "001100011000000110001100", + "001100011100001110001100", + "001100011110011110001100", + "001100001111111100001100", + "001100000111111000001100", + "001100000000000000001100", + "001100000000000000001100", + "001100000000000000001100", + "001100000000000000001100", + "001100000000000000001100", + "001110000000000000011100", + "001111111111111111111100", + "000111111111111111111000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 7, + 255, + 224, + 15, + 255, + 240, + 30, + 0, + 120, + 60, + 0, + 60, + 63, + 255, + 252, + 63, + 255, + 252, + 48, + 0, + 12, + 48, + 0, + 12, + 49, + 129, + 140, + 49, + 129, + 140, + 49, + 195, + 140, + 49, + 231, + 140, + 48, + 255, + 12, + 48, + 126, + 12, + 48, + 0, + 12, + 48, + 0, + 12, + 48, + 0, + 12, + 48, + 0, + 12, + 48, + 0, + 12, + 56, + 0, + 28, + 63, + 255, + 252, + 31, + 255, + 248, + 0, + 0, + 0 + ] + }, + "theme": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000000000000111100", + "000000000000000001111110", + "000000000000000011111110", + "000000000111100111001110", + "000000001111111110001110", + "000000011111111100011100", + "000000011100011000111000", + "000000011110000001110000", + "000001111111000011100000", + "000111111011100011100000", + "011111110001110001110000", + "011111000000111001110000", + "011110000000011101110000", + "001111100000001111110000", + "000111111110001111100000", + "000111111111111111000000", + "000011111111111110000000", + "000001111000111100000000", + "000000111001111000000000", + "000000011111110000000000", + "000000011111100000000000", + "000000001111000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 60, + 0, + 0, + 126, + 0, + 0, + 254, + 0, + 121, + 206, + 0, + 255, + 142, + 1, + 255, + 28, + 1, + 198, + 56, + 1, + 224, + 112, + 7, + 240, + 224, + 31, + 184, + 224, + 127, + 28, + 112, + 124, + 14, + 112, + 120, + 7, + 112, + 62, + 3, + 240, + 31, + 227, + 224, + 31, + 255, + 192, + 15, + 255, + 128, + 7, + 143, + 0, + 3, + 158, + 0, + 1, + 252, + 0, + 1, + 248, + 0, + 0, + 240, + 0, + 0, + 0, + 0 + ] + }, + "themes": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000001111111110000000", + "000000111111111111100000", + "000011111110011111110000", + "000111110000000011111000", + "000111000000111000111100", + "001110011100111000011100", + "001110011100111000001110", + "011100011100000000001110", + "011100000000000011101110", + "011100000000000011100110", + "011001110000000011100110", + "011001110000000000001110", + "011101110000000000001110", + "011100000000000000111100", + "011100000000011111111100", + "001110000000111111110000", + "001110000000111000000000", + "000111000000111000000000", + "000111110000111000000000", + "000011111110111000000000", + "000000111111111000000000", + "000000001111110000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 255, + 128, + 3, + 255, + 224, + 15, + 231, + 240, + 31, + 0, + 248, + 28, + 14, + 60, + 57, + 206, + 28, + 57, + 206, + 14, + 113, + 192, + 14, + 112, + 0, + 238, + 112, + 0, + 230, + 103, + 0, + 230, + 103, + 0, + 14, + 119, + 0, + 14, + 112, + 0, + 60, + 112, + 7, + 252, + 56, + 15, + 240, + 56, + 14, + 0, + 28, + 14, + 0, + 31, + 14, + 0, + 15, + 238, + 0, + 3, + 254, + 0, + 0, + 252, + 0, + 0, + 0, + 0 + ] + }, + "touch": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000110000000000000000", + "000000111000000000000000", + "000000111000011000000000", + "000000111000111000000000", + "000000011001111000000000", + "011110000001110000000000", + "011111000000000000000000", + "001111001111000000000000", + "000000001111111000000000", + "000000001111111110000000", + "000001101110111111100000", + "000011100111001111111100", + "000111100111000001111100", + "000111000111100111111100", + "000000000011101111111100", + "000000000011101111000000", + "000000000001111110000000", + "000000000001111100000000", + "000000000000111100000000", + "000000000000111100000000", + "000000000000111100000000", + "000000000000000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 3, + 0, + 0, + 3, + 128, + 0, + 3, + 134, + 0, + 3, + 142, + 0, + 1, + 158, + 0, + 120, + 28, + 0, + 124, + 0, + 0, + 60, + 240, + 0, + 0, + 254, + 0, + 0, + 255, + 128, + 6, + 239, + 224, + 14, + 115, + 252, + 30, + 112, + 124, + 28, + 121, + 252, + 0, + 59, + 252, + 0, + 59, + 192, + 0, + 31, + 128, + 0, + 31, + 0, + 0, + 15, + 0, + 0, + 15, + 0, + 0, + 15, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "vibration": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000000111100000000", + "000000000001111110000000", + "000000000001111110000000", + "000011110001100110000000", + "000111111001100110000000", + "000111111001100110000000", + "000110011001100110000000", + "000110011001100110000000", + "000110011001100110000000", + "000110011001100110001110", + "001110011001100110011110", + "011110011001100110011100", + "011100011001100110011000", + "000000011001100110011000", + "000000011001100110011000", + "000000011001100110011000", + "000000011001100111111000", + "000000011001100111111000", + "000000011001100011110000", + "000000011111100000000000", + "000000011111100000000000", + "000000001111000000000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 15, + 0, + 0, + 31, + 128, + 0, + 31, + 128, + 15, + 25, + 128, + 31, + 153, + 128, + 31, + 153, + 128, + 25, + 153, + 128, + 25, + 153, + 128, + 25, + 153, + 128, + 25, + 153, + 142, + 57, + 153, + 158, + 121, + 153, + 156, + 113, + 153, + 152, + 1, + 153, + 152, + 1, + 153, + 152, + 1, + 153, + 152, + 1, + 153, + 248, + 1, + 153, + 248, + 1, + 152, + 240, + 1, + 248, + 0, + 1, + 248, + 0, + 0, + 240, + 0, + 0, + 0, + 0 + ] + }, + "watch-face": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000001111111100000000", + "000000001111111100000000", + "000000011100001110000000", + "000000011100001110000000", + "000000011111111110000000", + "000000011111111110000000", + "000000111110011111000000", + "000000111000000111000000", + "000001110001100011100000", + "000001110001100011100000", + "000001100001110001100000", + "000001100001111001100000", + "000001110001111011100000", + "000001110000010011100000", + "000000111000000111000000", + "000000111110011111000000", + "000000011111111110000000", + "000000011111111110000000", + "000000011100001110000000", + "000000011100001110000000", + "000000001111111100000000", + "000000001111111100000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 255, + 0, + 0, + 255, + 0, + 1, + 195, + 128, + 1, + 195, + 128, + 1, + 255, + 128, + 1, + 255, + 128, + 3, + 231, + 192, + 3, + 129, + 192, + 7, + 24, + 224, + 7, + 24, + 224, + 6, + 28, + 96, + 6, + 30, + 96, + 7, + 30, + 224, + 7, + 4, + 224, + 3, + 129, + 192, + 3, + 231, + 192, + 1, + 255, + 128, + 1, + 255, + 128, + 1, + 195, + 128, + 1, + 195, + 128, + 0, + 255, + 0, + 0, + 255, + 0, + 0, + 0, + 0 + ] + }, + "weather": { + "width": 24, + "height": 24, + "stride": 3, + "rows": [ + "000000000000000000000000", + "000000000001100000000000", + "000000000001100000000000", + "000000000001100000000000", + "000011000001100000110000", + "000011100000000001110000", + "000001110000000011100000", + "000000100111111001000000", + "000000000111111100000000", + "000000000110011110000000", + "000000000000001110000000", + "000011111100000110011110", + "001111111111000110011110", + "001111001111000110000000", + "011100000011100000000000", + "011100000011111100000000", + "011000000001111110000000", + "011000000000001110000000", + "011100000000000110000000", + "011100000000000110000000", + "001111000000001110000000", + "001111111111111110000000", + "000011111111111100000000", + "000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 0, + 24, + 0, + 12, + 24, + 48, + 14, + 0, + 112, + 7, + 0, + 224, + 2, + 126, + 64, + 0, + 127, + 0, + 0, + 103, + 128, + 0, + 3, + 128, + 15, + 193, + 158, + 63, + 241, + 158, + 60, + 241, + 128, + 112, + 56, + 0, + 112, + 63, + 0, + 96, + 31, + 128, + 96, + 3, + 128, + 112, + 1, + 128, + 112, + 1, + 128, + 60, + 3, + 128, + 63, + 255, + 128, + 15, + 255, + 0, + 0, + 0, + 0 + ] + } + } +} \ No newline at end of file diff --git a/beeos/generated/icons/bitmap_json/beeos_icons_34.json b/beeos/generated/icons/bitmap_json/beeos_icons_34.json new file mode 100644 index 0000000..0d53dee --- /dev/null +++ b/beeos/generated/icons/bitmap_json/beeos_icons_34.json @@ -0,0 +1,7460 @@ +{ + "size": 34, + "icons": { + "about": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000111111110000000000000", + "0000000000111111111111110000000000", + "0000000001111111111111111100000000", + "0000000111111111111111111110000000", + "0000001111111000000001111111000000", + "0000011111100000000000011111100000", + "0000111110000000000000000111110000", + "0000111100000000000000000011110000", + "0001111000000000000000000001111000", + "0011111000000001111000000001111100", + "0011110000000001111000000000111100", + "0011110000000000110000000000111100", + "0111100000000000000000000000011110", + "0111100000000000000000000000011110", + "0111100000000000110000000000011110", + "0111100000000001111000000000011110", + "0111100000000001111000000000011110", + "0111100000000001111000000000011110", + "0111100000000001111000000000011110", + "0111100000000001111000000000011110", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011111000000001111000000001111100", + "0001111000000000000000000001111000", + "0000111100000000000000000011110000", + "0000111110000000000000000111110000", + "0000011111100000000000011111100000", + "0000001111111000000001111111000000", + "0000000111111111111111111110000000", + "0000000001111111111111111000000000", + "0000000000111111111111110000000000", + "0000000000000111111110000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 127, + 255, + 192, + 0, + 1, + 255, + 255, + 224, + 0, + 3, + 248, + 7, + 240, + 0, + 7, + 224, + 1, + 248, + 0, + 15, + 128, + 0, + 124, + 0, + 15, + 0, + 0, + 60, + 0, + 30, + 0, + 0, + 30, + 0, + 62, + 1, + 224, + 31, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 0, + 192, + 15, + 0, + 120, + 0, + 0, + 7, + 128, + 120, + 0, + 0, + 7, + 128, + 120, + 0, + 192, + 7, + 128, + 120, + 1, + 224, + 7, + 128, + 120, + 1, + 224, + 7, + 128, + 120, + 1, + 224, + 7, + 128, + 120, + 1, + 224, + 7, + 128, + 120, + 1, + 224, + 7, + 128, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 62, + 1, + 224, + 31, + 0, + 30, + 0, + 0, + 30, + 0, + 15, + 0, + 0, + 60, + 0, + 15, + 128, + 0, + 124, + 0, + 7, + 224, + 1, + 248, + 0, + 3, + 248, + 7, + 240, + 0, + 1, + 255, + 255, + 224, + 0, + 0, + 127, + 255, + 128, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "apps": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000111111111111111111110000000", + "0000111111111111111111111111110000", + "0001111111111111111111111111111000", + "0001111111111111111111111111111000", + "0001110000000001111000000000111000", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011111111111111111111111111111100", + "0011111111111111111111111111111100", + "0011111111111111111111111111111100", + "0011111111111111111111111111111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0001110000000001111000000000111000", + "0001111111111111111111111111111000", + "0001111111111111111111111111111000", + "0000111111111111111111111111110000", + "0000000111111111111111111110000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 255, + 255, + 224, + 0, + 15, + 255, + 255, + 252, + 0, + 31, + 255, + 255, + 254, + 0, + 31, + 255, + 255, + 254, + 0, + 28, + 1, + 224, + 14, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 63, + 255, + 255, + 255, + 0, + 63, + 255, + 255, + 255, + 0, + 63, + 255, + 255, + 255, + 0, + 63, + 255, + 255, + 255, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 28, + 1, + 224, + 14, + 0, + 31, + 255, + 255, + 254, + 0, + 31, + 255, + 255, + 254, + 0, + 15, + 255, + 255, + 252, + 0, + 1, + 255, + 255, + 224, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "back": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000011100000000000", + "0000000000000000000111100000000000", + "0000000000000000001111100000000000", + "0000000000000000011111000000000000", + "0000000000000000111110000000000000", + "0000000000000001111100000000000000", + "0000000000000011111000000000000000", + "0000000000000111110000000000000000", + "0000000000001111100000000000000000", + "0000000000011111000000000000000000", + "0000000000011111000000000000000000", + "0000000000001111100000000000000000", + "0000000000000111110000000000000000", + "0000000000000011111000000000000000", + "0000000000000001111100000000000000", + "0000000000000000111110000000000000", + "0000000000000000011111000000000000", + "0000000000000000001111100000000000", + "0000000000000000000111100000000000", + "0000000000000000000011100000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14, + 0, + 0, + 0, + 0, + 30, + 0, + 0, + 0, + 0, + 62, + 0, + 0, + 0, + 0, + 124, + 0, + 0, + 0, + 0, + 248, + 0, + 0, + 0, + 1, + 240, + 0, + 0, + 0, + 3, + 224, + 0, + 0, + 0, + 7, + 192, + 0, + 0, + 0, + 15, + 128, + 0, + 0, + 0, + 31, + 0, + 0, + 0, + 0, + 31, + 0, + 0, + 0, + 0, + 15, + 128, + 0, + 0, + 0, + 7, + 192, + 0, + 0, + 0, + 3, + 224, + 0, + 0, + 0, + 1, + 240, + 0, + 0, + 0, + 0, + 248, + 0, + 0, + 0, + 0, + 124, + 0, + 0, + 0, + 0, + 62, + 0, + 0, + 0, + 0, + 30, + 0, + 0, + 0, + 0, + 14, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "battery": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0001111111111111111111111000000000", + "0011111111111111111111111100000000", + "0111111111111111111111111110000000", + "0111100000000000000000011110000000", + "0111100000000000000000001110000000", + "0111100000000000000000001110000100", + "0111100000000000000000001110001110", + "0111100000000000000000001110011110", + "0111100000000000000000001110011110", + "0111100000000000000000001110011110", + "0111100000000000000000001110011110", + "0111100000000000000000001110011110", + "0111100000000000000000001110011110", + "0111100000000000000000001110001110", + "0111100000000000000000001110000100", + "0111100000000000000000001110000000", + "0111100000000000000000011110000000", + "0111111111111111111111111110000000", + "0011111111111111111111111100000000", + "0001111111111111111111111000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31, + 255, + 255, + 128, + 0, + 63, + 255, + 255, + 192, + 0, + 127, + 255, + 255, + 224, + 0, + 120, + 0, + 1, + 224, + 0, + 120, + 0, + 0, + 224, + 0, + 120, + 0, + 0, + 225, + 0, + 120, + 0, + 0, + 227, + 128, + 120, + 0, + 0, + 231, + 128, + 120, + 0, + 0, + 231, + 128, + 120, + 0, + 0, + 231, + 128, + 120, + 0, + 0, + 231, + 128, + 120, + 0, + 0, + 231, + 128, + 120, + 0, + 0, + 231, + 128, + 120, + 0, + 0, + 227, + 128, + 120, + 0, + 0, + 225, + 0, + 120, + 0, + 0, + 224, + 0, + 120, + 0, + 1, + 224, + 0, + 127, + 255, + 255, + 224, + 0, + 63, + 255, + 255, + 192, + 0, + 31, + 255, + 255, + 128, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "bluetooth": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000110000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111100000000000000", + "0000000000000001111110000000000000", + "0000000000000001111111000000000000", + "0000000000000001111111100000000000", + "0000000000000001111111110000000000", + "0000000001100001111011111000000000", + "0000000011110001111001111100000000", + "0000000011111001111001111100000000", + "0000000001111101111011111000000000", + "0000000000111111111111110000000000", + "0000000000011111111111100000000000", + "0000000000001111111111000000000000", + "0000000000000111111110000000000000", + "0000000000000011111100000000000000", + "0000000000000011111100000000000000", + "0000000000000111111110000000000000", + "0000000000001111111111000000000000", + "0000000000011111111111100000000000", + "0000000000111111111111110000000000", + "0000000001111101111011111000000000", + "0000000011111001111001111100000000", + "0000000011110001111001111100000000", + "0000000001100001111011111000000000", + "0000000000000001111111110000000000", + "0000000000000001111111100000000000", + "0000000000000001111111000000000000", + "0000000000000001111110000000000000", + "0000000000000001111100000000000000", + "0000000000000001111000000000000000", + "0000000000000000110000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 192, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 240, + 0, + 0, + 0, + 1, + 248, + 0, + 0, + 0, + 1, + 252, + 0, + 0, + 0, + 1, + 254, + 0, + 0, + 0, + 1, + 255, + 0, + 0, + 0, + 97, + 239, + 128, + 0, + 0, + 241, + 231, + 192, + 0, + 0, + 249, + 231, + 192, + 0, + 0, + 125, + 239, + 128, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 31, + 254, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 3, + 240, + 0, + 0, + 0, + 3, + 240, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 31, + 254, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 125, + 239, + 128, + 0, + 0, + 249, + 231, + 192, + 0, + 0, + 241, + 231, + 192, + 0, + 0, + 97, + 239, + 128, + 0, + 0, + 1, + 255, + 0, + 0, + 0, + 1, + 254, + 0, + 0, + 0, + 1, + 252, + 0, + 0, + 0, + 1, + 248, + 0, + 0, + 0, + 1, + 240, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 0, + 192, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "clock": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000111111110000000000000", + "0000000000111111111111110000000000", + "0000000001111111111111111100000000", + "0000000111111111111111111110000000", + "0000001111111000000001111111000000", + "0000011111100000000000011111100000", + "0000111110000000110000000111110000", + "0000111100000001111000000011110000", + "0001111000000001111000000001111000", + "0011111000000001111000000001111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0111100000000001111000000000011110", + "0111100000000001111000000000011110", + "0111100000000001111000000000011110", + "0111100000000001111100000000011110", + "0111100000000001111111000000011110", + "0111100000000000111111110000011110", + "0111100000000000001111110000011110", + "0111100000000000000011110000011110", + "0011110000000000000000100000111100", + "0011110000000000000000000000111100", + "0011111000000000000000000001111100", + "0001111000000000000000000001111000", + "0000111100000000000000000011110000", + "0000111110000000000000000111110000", + "0000011111100000000000011111100000", + "0000001111111000000001111111000000", + "0000000111111111111111111110000000", + "0000000001111111111111111000000000", + "0000000000111111111111110000000000", + "0000000000000111111110000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 127, + 255, + 192, + 0, + 1, + 255, + 255, + 224, + 0, + 3, + 248, + 7, + 240, + 0, + 7, + 224, + 1, + 248, + 0, + 15, + 128, + 192, + 124, + 0, + 15, + 1, + 224, + 60, + 0, + 30, + 1, + 224, + 30, + 0, + 62, + 1, + 224, + 31, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 120, + 1, + 224, + 7, + 128, + 120, + 1, + 224, + 7, + 128, + 120, + 1, + 224, + 7, + 128, + 120, + 1, + 240, + 7, + 128, + 120, + 1, + 252, + 7, + 128, + 120, + 0, + 255, + 7, + 128, + 120, + 0, + 63, + 7, + 128, + 120, + 0, + 15, + 7, + 128, + 60, + 0, + 2, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 62, + 0, + 0, + 31, + 0, + 30, + 0, + 0, + 30, + 0, + 15, + 0, + 0, + 60, + 0, + 15, + 128, + 0, + 124, + 0, + 7, + 224, + 1, + 248, + 0, + 3, + 248, + 7, + 240, + 0, + 1, + 255, + 255, + 224, + 0, + 0, + 127, + 255, + 128, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "developer-tools": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000111000000000000", + "0000000000000000000111000000000000", + "0000000000000000001111000000000000", + "0000000000000000001111000000000000", + "0000000000000000001111000000000000", + "0000000000000000011110000000000000", + "0000000111000000011110001110000000", + "0000001111000000011110001111000000", + "0000011111000000011100001111100000", + "0000111110000000111100000111110000", + "0001111100000000111100000011111000", + "0011111000000000111000000001111100", + "0111110000000001111000000000111110", + "0111110000000001111000000000111110", + "0011111000000001110000000001111100", + "0001111100000011110000000011111000", + "0000111110000011110000000111110000", + "0000011111000011100000001111100000", + "0000001111000111100000001111000000", + "0000000111000111100000001110000000", + "0000000000000111100000000000000000", + "0000000000001111000000000000000000", + "0000000000001111000000000000000000", + "0000000000001111000000000000000000", + "0000000000001110000000000000000000", + "0000000000001110000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28, + 0, + 0, + 0, + 0, + 28, + 0, + 0, + 0, + 0, + 60, + 0, + 0, + 0, + 0, + 60, + 0, + 0, + 0, + 0, + 60, + 0, + 0, + 0, + 0, + 120, + 0, + 0, + 1, + 192, + 120, + 224, + 0, + 3, + 192, + 120, + 240, + 0, + 7, + 192, + 112, + 248, + 0, + 15, + 128, + 240, + 124, + 0, + 31, + 0, + 240, + 62, + 0, + 62, + 0, + 224, + 31, + 0, + 124, + 1, + 224, + 15, + 128, + 124, + 1, + 224, + 15, + 128, + 62, + 1, + 192, + 31, + 0, + 31, + 3, + 192, + 62, + 0, + 15, + 131, + 192, + 124, + 0, + 7, + 195, + 128, + 248, + 0, + 3, + 199, + 128, + 240, + 0, + 1, + 199, + 128, + 224, + 0, + 0, + 7, + 128, + 0, + 0, + 0, + 15, + 0, + 0, + 0, + 0, + 15, + 0, + 0, + 0, + 0, + 15, + 0, + 0, + 0, + 0, + 14, + 0, + 0, + 0, + 0, + 14, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "display": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000110000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000001100000001111000000011000000", + "0000011110000001111000000111100000", + "0000011111000000000000001111100000", + "0000001111100000000000011111000000", + "0000000111100000000000011110000000", + "0000000011000111111110001100000000", + "0000000000001111111111000000000000", + "0000000000011111111111100000000000", + "0000000000111110000111110000000000", + "0000000000111100000011110000000000", + "0011111000111000000001110001111100", + "0111111000111000000001110001111110", + "0111111000111000000001110001111110", + "0011111000111000000001110001111100", + "0000000000111100000011110000000000", + "0000000000111110000111110000000000", + "0000000000011111111111100000000000", + "0000000000001111111111000000000000", + "0000000011000111111110001100000000", + "0000000111100000000000011110000000", + "0000001111100000000000011111000000", + "0000011111000000000000001111100000", + "0000011110000001111000000111100000", + "0000001100000001111000000011000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000000110000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 192, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 3, + 1, + 224, + 48, + 0, + 7, + 129, + 224, + 120, + 0, + 7, + 192, + 0, + 248, + 0, + 3, + 224, + 1, + 240, + 0, + 1, + 224, + 1, + 224, + 0, + 0, + 199, + 248, + 192, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 31, + 254, + 0, + 0, + 0, + 62, + 31, + 0, + 0, + 0, + 60, + 15, + 0, + 0, + 62, + 56, + 7, + 31, + 0, + 126, + 56, + 7, + 31, + 128, + 126, + 56, + 7, + 31, + 128, + 62, + 56, + 7, + 31, + 0, + 0, + 60, + 15, + 0, + 0, + 0, + 62, + 31, + 0, + 0, + 0, + 31, + 254, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 199, + 248, + 192, + 0, + 1, + 224, + 1, + 224, + 0, + 3, + 224, + 1, + 240, + 0, + 7, + 192, + 0, + 248, + 0, + 7, + 129, + 224, + 120, + 0, + 3, + 1, + 224, + 48, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 0, + 192, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "github": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000010000000000000000100000000", + "0000000111000000000000111111100000", + "0000000111000000000001111111110000", + "0000000111000000000011111111111000", + "0000000111000000000011110001111000", + "0000000111000000111111100000111000", + "0000000111000011111111100000111100", + "0000000111000111111111100000111000", + "0000000111011111111011110001111000", + "0000000111111111000011111111111000", + "0000000111111110000001111111110000", + "0000000111111100000000111111100000", + "0000000111111000000000000100000000", + "0000000111110000000000000000000000", + "0000000111100000000000000000000000", + "0000000111100000000000000000000000", + "0000000111100000000000000000000000", + "0000000111000000000000000000000000", + "0000011111110000000000000000000000", + "0000111111111000000000000000000000", + "0001111111111100000000000000000000", + "0001111000111100000000000000000000", + "0001110000011100000000000000000000", + "0011110000011110000000000000000000", + "0001110000011100000000000000000000", + "0001111000111100000000000000000000", + "0001111111111100000000000000000000", + "0000111111111000000000000000000000", + "0000011111110000000000000000000000", + "0000000010000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 128, + 0, + 64, + 0, + 1, + 192, + 3, + 248, + 0, + 1, + 192, + 7, + 252, + 0, + 1, + 192, + 15, + 254, + 0, + 1, + 192, + 15, + 30, + 0, + 1, + 192, + 254, + 14, + 0, + 1, + 195, + 254, + 15, + 0, + 1, + 199, + 254, + 14, + 0, + 1, + 223, + 239, + 30, + 0, + 1, + 255, + 15, + 254, + 0, + 1, + 254, + 7, + 252, + 0, + 1, + 252, + 3, + 248, + 0, + 1, + 248, + 0, + 64, + 0, + 1, + 240, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 192, + 0, + 0, + 0, + 7, + 240, + 0, + 0, + 0, + 15, + 248, + 0, + 0, + 0, + 31, + 252, + 0, + 0, + 0, + 30, + 60, + 0, + 0, + 0, + 28, + 28, + 0, + 0, + 0, + 60, + 30, + 0, + 0, + 0, + 28, + 28, + 0, + 0, + 0, + 30, + 60, + 0, + 0, + 0, + 31, + 252, + 0, + 0, + 0, + 15, + 248, + 0, + 0, + 0, + 7, + 240, + 0, + 0, + 0, + 0, + 128, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "gps": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000110000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000001111111111000000000000", + "0000000000111111111111110000000000", + "0000000001111111111111111000000000", + "0000000011111100000011111100000000", + "0000000111110000000000111110000000", + "0000000111100011111100011110000000", + "0000001111000111111110001111000000", + "0000001111001111111111001111000000", + "0000001110011111111111100111000000", + "0011111110011110000111100111111100", + "0111111110011110000111100111111110", + "0111111110011110000111100111111110", + "0011111110011110000111100111111100", + "0000001110011111111111100111000000", + "0000001111001111111111001111000000", + "0000001111000111111110001111000000", + "0000000111100011111100011110000000", + "0000000111110000000000111110000000", + "0000000011111100000011111100000000", + "0000000001111111111111111000000000", + "0000000000111111111111110000000000", + "0000000000001111111111000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000000110000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 192, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 127, + 255, + 128, + 0, + 0, + 252, + 15, + 192, + 0, + 1, + 240, + 3, + 224, + 0, + 1, + 227, + 241, + 224, + 0, + 3, + 199, + 248, + 240, + 0, + 3, + 207, + 252, + 240, + 0, + 3, + 159, + 254, + 112, + 0, + 63, + 158, + 30, + 127, + 0, + 127, + 158, + 30, + 127, + 128, + 127, + 158, + 30, + 127, + 128, + 63, + 158, + 30, + 127, + 0, + 3, + 159, + 254, + 112, + 0, + 3, + 207, + 252, + 240, + 0, + 3, + 199, + 248, + 240, + 0, + 1, + 227, + 241, + 224, + 0, + 1, + 240, + 3, + 224, + 0, + 0, + 252, + 15, + 192, + 0, + 0, + 127, + 255, + 128, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 0, + 192, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "health": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000111111100000011111110000000", + "0000011111111111001111111111100000", + "0000111111111111111111111111110000", + "0001111111011111111111101111111000", + "0011111000000011111100000001111100", + "0011110000000001111000000000111100", + "0111100000000000000000000000011110", + "0111100000000000000000000000011110", + "0111100000000000001110000000011110", + "0111100000000000001111000000011110", + "0111100000000000001111000000011110", + "0111100000000110011111100000011110", + "0011110000001111011111100000111100", + "0011111111111111011111111111111100", + "0011111111111111111111111111111100", + "0001111111111111111101111111111000", + "0000111110000011111100000111110000", + "0000011111000011111000001111100000", + "0000001111100001111000011111000000", + "0000000111110001111000111110000000", + "0000000011111000110001111100000000", + "0000000001111100000011111000000000", + "0000000000111110000111110000000000", + "0000000000011111001111100000000000", + "0000000000001111111111000000000000", + "0000000000000111111110000000000000", + "0000000000000011111100000000000000", + "0000000000000000110000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 252, + 15, + 224, + 0, + 7, + 255, + 63, + 248, + 0, + 15, + 255, + 255, + 252, + 0, + 31, + 223, + 254, + 254, + 0, + 62, + 3, + 240, + 31, + 0, + 60, + 1, + 224, + 15, + 0, + 120, + 0, + 0, + 7, + 128, + 120, + 0, + 0, + 7, + 128, + 120, + 0, + 56, + 7, + 128, + 120, + 0, + 60, + 7, + 128, + 120, + 0, + 60, + 7, + 128, + 120, + 6, + 126, + 7, + 128, + 60, + 15, + 126, + 15, + 0, + 63, + 255, + 127, + 255, + 0, + 63, + 255, + 255, + 255, + 0, + 31, + 255, + 247, + 254, + 0, + 15, + 131, + 240, + 124, + 0, + 7, + 195, + 224, + 248, + 0, + 3, + 225, + 225, + 240, + 0, + 1, + 241, + 227, + 224, + 0, + 0, + 248, + 199, + 192, + 0, + 0, + 124, + 15, + 128, + 0, + 0, + 62, + 31, + 0, + 0, + 0, + 31, + 62, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 3, + 240, + 0, + 0, + 0, + 0, + 192, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "hivestore": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000011111111111111111100000000", + "0000000111111111111111111110000000", + "0000001111111111111111111111000000", + "0000011111111111111111111111100000", + "0000111110000000000000000111110000", + "0001111100000000000000000011111000", + "0001111111111111111111111111111000", + "0001111111111111111111111111111000", + "0011111111111111111111111111111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000010000000000100000111100", + "0011110000111000000001110000111100", + "0011110000111000000001110000111100", + "0011110000111000000001110000111100", + "0011110000111100000011110000111100", + "0011110000111110000111110000111100", + "0011110000011111111111100000111100", + "0011110000001111111111000000111100", + "0011110000000111111110000000111100", + "0011110000000000110000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0001111111111111111111111111111000", + "0001111111111111111111111111111000", + "0000111111111111111111111111110000", + "0000011111111111111111111111100000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 255, + 255, + 192, + 0, + 1, + 255, + 255, + 224, + 0, + 3, + 255, + 255, + 240, + 0, + 7, + 255, + 255, + 248, + 0, + 15, + 128, + 0, + 124, + 0, + 31, + 0, + 0, + 62, + 0, + 31, + 255, + 255, + 254, + 0, + 31, + 255, + 255, + 254, + 0, + 63, + 255, + 255, + 255, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 16, + 2, + 15, + 0, + 60, + 56, + 7, + 15, + 0, + 60, + 56, + 7, + 15, + 0, + 60, + 56, + 7, + 15, + 0, + 60, + 60, + 15, + 15, + 0, + 60, + 62, + 31, + 15, + 0, + 60, + 31, + 254, + 15, + 0, + 60, + 15, + 252, + 15, + 0, + 60, + 7, + 248, + 15, + 0, + 60, + 0, + 192, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 31, + 255, + 255, + 254, + 0, + 31, + 255, + 255, + 254, + 0, + 15, + 255, + 255, + 252, + 0, + 7, + 255, + 255, + 248, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "home": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000001111000000000000000", + "0000000000000011111100000000000000", + "0000000000001111111111000000000000", + "0000000000011111111111100000000000", + "0000000000111111001111110000000000", + "0000000001111100000011111000000000", + "0000000011111000000001111100000000", + "0000000111110000000000111110000000", + "0000011111100000000000011111100000", + "0000111111000000000000001111110000", + "0001111110000000000000000111111000", + "0001111000000000000000000001111000", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000000111111110000000111100", + "0011110000001111111111000000111100", + "0011110000011111111111100000111100", + "0011110000011111111111100000111100", + "0011110000011110000111100000111100", + "0011110000011110000111100000111100", + "0011110000011110000111100000111100", + "0011110000011110000111100000111100", + "0011110000011110000111100000111100", + "0011110000011110000111100000111100", + "0011110000011110000111100000111100", + "0011110000011110000111100000111100", + "0011110000011110000111100000111100", + "0001111111111111111111111111111000", + "0001111111111111111111111111111000", + "0000111111111111111111111111110000", + "0000001111111111111111111111000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 3, + 240, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 31, + 254, + 0, + 0, + 0, + 63, + 63, + 0, + 0, + 0, + 124, + 15, + 128, + 0, + 0, + 248, + 7, + 192, + 0, + 1, + 240, + 3, + 224, + 0, + 7, + 224, + 1, + 248, + 0, + 15, + 192, + 0, + 252, + 0, + 31, + 128, + 0, + 126, + 0, + 30, + 0, + 0, + 30, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 7, + 248, + 15, + 0, + 60, + 15, + 252, + 15, + 0, + 60, + 31, + 254, + 15, + 0, + 60, + 31, + 254, + 15, + 0, + 60, + 30, + 30, + 15, + 0, + 60, + 30, + 30, + 15, + 0, + 60, + 30, + 30, + 15, + 0, + 60, + 30, + 30, + 15, + 0, + 60, + 30, + 30, + 15, + 0, + 60, + 30, + 30, + 15, + 0, + 60, + 30, + 30, + 15, + 0, + 60, + 30, + 30, + 15, + 0, + 60, + 30, + 30, + 15, + 0, + 31, + 255, + 255, + 254, + 0, + 31, + 255, + 255, + 254, + 0, + 15, + 255, + 255, + 252, + 0, + 3, + 255, + 255, + 240, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "install": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000001100001111000011000000000", + "0000000011110001111000111100000000", + "0000000011111001111001111100000000", + "0000000001111101111011111000000000", + "0000000000111111111111110000000000", + "0000000000011111111111100000000000", + "0000000000001111111111000000000000", + "0000100000000111111110000000010000", + "0001110000000011111100000000111000", + "0011110000000001111000000000111100", + "0011110000000000110000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0001111111111111111111111111111000", + "0001111111111111111111111111111000", + "0000111111111111111111111111110000", + "0000001111111111111111111111000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 97, + 225, + 128, + 0, + 0, + 241, + 227, + 192, + 0, + 0, + 249, + 231, + 192, + 0, + 0, + 125, + 239, + 128, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 31, + 254, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 8, + 7, + 248, + 4, + 0, + 28, + 3, + 240, + 14, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 0, + 192, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 31, + 255, + 255, + 254, + 0, + 31, + 255, + 255, + 254, + 0, + 15, + 255, + 255, + 252, + 0, + 3, + 255, + 255, + 240, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "notifications": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000011111100000000000000", + "0000000000001111111111000000000000", + "0000000000111111111111110000000000", + "0000000001111111111111111000000000", + "0000000011111100000011111100000000", + "0000000011110000000000111100000000", + "0000000111110000000000111110000000", + "0000000111100000000000011110000000", + "0000000111100000000000011110000000", + "0000000111000000000000001110000000", + "0000000111000000000000001110000000", + "0000000111000000000000001110000000", + "0000000111000000000000001110000000", + "0000001111000000000000001111000000", + "0000001111000000000000001111000000", + "0000001111000000000000001111000000", + "0000001110000000000000000111000000", + "0000011110000000000000000111100000", + "0000111110000000000000000111110000", + "0001111100000000000000000011111000", + "0001111000000000000000000001111000", + "0011111111111111111111111111111100", + "0001111111111111111111111111111000", + "0001111111111111111111111111111000", + "0000111111111111111111111111110000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000111001110000000000000", + "0000000000000111111110000000000000", + "0000000000000111111110000000000000", + "0000000000000011111100000000000000", + "0000000000000001111000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 240, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 127, + 255, + 128, + 0, + 0, + 252, + 15, + 192, + 0, + 0, + 240, + 3, + 192, + 0, + 1, + 240, + 3, + 224, + 0, + 1, + 224, + 1, + 224, + 0, + 1, + 224, + 1, + 224, + 0, + 1, + 192, + 0, + 224, + 0, + 1, + 192, + 0, + 224, + 0, + 1, + 192, + 0, + 224, + 0, + 1, + 192, + 0, + 224, + 0, + 3, + 192, + 0, + 240, + 0, + 3, + 192, + 0, + 240, + 0, + 3, + 192, + 0, + 240, + 0, + 3, + 128, + 0, + 112, + 0, + 7, + 128, + 0, + 120, + 0, + 15, + 128, + 0, + 124, + 0, + 31, + 0, + 0, + 62, + 0, + 30, + 0, + 0, + 30, + 0, + 63, + 255, + 255, + 255, + 0, + 31, + 255, + 255, + 254, + 0, + 31, + 255, + 255, + 254, + 0, + 15, + 255, + 255, + 252, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 56, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 3, + 240, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "package": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000001111000000000000000", + "0000000000000111111110000000000000", + "0000000000011111111111100000000000", + "0000000000111111111111110000000000", + "0000000011111110000111111100000000", + "0000001111111110000001111111000000", + "0000111111111111100000111111110000", + "0001111111011111111000001111111000", + "0001111100000111111100000011111000", + "0001111110000001111111000111111000", + "0011111111100000011111111111111100", + "0011111111111000001111111111111100", + "0011110111111110000111111110111100", + "0011110001111111001111111000111100", + "0011110000011111111111100000111100", + "0011110000001111111111000000111100", + "0011110000000011111100000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0001111000000001111000000001111000", + "0001111100000001111000000011111000", + "0001111111000001111000001111111000", + "0000111111110001111000111111110000", + "0000001111111001111001111111000000", + "0000000011111111111111111100000000", + "0000000000111111111111110000000000", + "0000000000011111111111100000000000", + "0000000000000111111110000000000000", + "0000000000000001111000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 31, + 254, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 254, + 31, + 192, + 0, + 3, + 254, + 7, + 240, + 0, + 15, + 255, + 131, + 252, + 0, + 31, + 223, + 224, + 254, + 0, + 31, + 7, + 240, + 62, + 0, + 31, + 129, + 252, + 126, + 0, + 63, + 224, + 127, + 255, + 0, + 63, + 248, + 63, + 255, + 0, + 61, + 254, + 31, + 239, + 0, + 60, + 127, + 63, + 143, + 0, + 60, + 31, + 254, + 15, + 0, + 60, + 15, + 252, + 15, + 0, + 60, + 3, + 240, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 30, + 1, + 224, + 30, + 0, + 31, + 1, + 224, + 62, + 0, + 31, + 193, + 224, + 254, + 0, + 15, + 241, + 227, + 252, + 0, + 3, + 249, + 231, + 240, + 0, + 0, + 255, + 255, + 192, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 31, + 254, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "permissions": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000001111000000000000000", + "0000000000000011111100000000000000", + "0000000000001111111111000000000000", + "0000000000111111111111110000000000", + "0000001111111111001111111111000000", + "0000011111111100000011111111100000", + "0000111111111000000001111111110000", + "0000111111000000000000001111110000", + "0000111000000000000000000001110000", + "0000111000000000000000000001110000", + "0000111000000000000000000001110000", + "0000111000000000000001000001110000", + "0000111000000000000111100001110000", + "0000111000000000001111100001110000", + "0000111000001100011111000001110000", + "0000111000011110111110000001110000", + "0000111000011111111100000001110000", + "0000111000001111111000000001110000", + "0000111100000111110000000011110000", + "0000111100000011100000000011110000", + "0000111100000001000000000011110000", + "0000111100000000000000000011110000", + "0000011110000000000000000111100000", + "0000011110000000000000000111100000", + "0000001111000000000000001111000000", + "0000001111100000000000011111000000", + "0000000111111000000001111110000000", + "0000000011111110000111111100000000", + "0000000001111111111111111000000000", + "0000000000011111111111100000000000", + "0000000000000111111110000000000000", + "0000000000000001111000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 3, + 240, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 3, + 255, + 63, + 240, + 0, + 7, + 252, + 15, + 248, + 0, + 15, + 248, + 7, + 252, + 0, + 15, + 192, + 0, + 252, + 0, + 14, + 0, + 0, + 28, + 0, + 14, + 0, + 0, + 28, + 0, + 14, + 0, + 0, + 28, + 0, + 14, + 0, + 4, + 28, + 0, + 14, + 0, + 30, + 28, + 0, + 14, + 0, + 62, + 28, + 0, + 14, + 12, + 124, + 28, + 0, + 14, + 30, + 248, + 28, + 0, + 14, + 31, + 240, + 28, + 0, + 14, + 15, + 224, + 28, + 0, + 15, + 7, + 192, + 60, + 0, + 15, + 3, + 128, + 60, + 0, + 15, + 1, + 0, + 60, + 0, + 15, + 0, + 0, + 60, + 0, + 7, + 128, + 0, + 120, + 0, + 7, + 128, + 0, + 120, + 0, + 3, + 192, + 0, + 240, + 0, + 3, + 224, + 1, + 240, + 0, + 1, + 248, + 7, + 224, + 0, + 0, + 254, + 31, + 192, + 0, + 0, + 127, + 255, + 128, + 0, + 0, + 31, + 254, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "plugin": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000001111000000111110000", + "0000000000000111111110001111111000", + "0000000000001111111111011111111100", + "0000000000011111111111111111111110", + "0000000000111110000111111100011110", + "0000000000111100000011111100011110", + "0000000000111110000001111000011110", + "0000000000111111000000000001111110", + "0000000000011111100000000011111100", + "0000011110000111100000000011111000", + "0000111111000011100000000011110000", + "0001111111000011100000000011111000", + "0011111111100111100000000001111100", + "0011110111111111100000000000111100", + "0111100011111111000000000000011110", + "0111100001111110000000000000011110", + "0111100000000000000111111000011110", + "0111100000000000001111111100011110", + "0011110000000000011111111110111100", + "0011111000000000011110011111111100", + "0001111100000000011100001111111000", + "0000111100000000011100001111110000", + "0001111100000000011110000111100000", + "0011111100000000011111100000000000", + "0111111000000000001111110000000000", + "0111100001111000000111110000000000", + "0111100011111100000011110000000000", + "0111100011111110000111110000000000", + "0111111111111111111111100000000000", + "0011111111101111111111000000000000", + "0001111111000111111110000000000000", + "0000111110000001111000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 224, + 124, + 0, + 0, + 7, + 248, + 254, + 0, + 0, + 15, + 253, + 255, + 0, + 0, + 31, + 255, + 255, + 128, + 0, + 62, + 31, + 199, + 128, + 0, + 60, + 15, + 199, + 128, + 0, + 62, + 7, + 135, + 128, + 0, + 63, + 0, + 31, + 128, + 0, + 31, + 128, + 63, + 0, + 7, + 135, + 128, + 62, + 0, + 15, + 195, + 128, + 60, + 0, + 31, + 195, + 128, + 62, + 0, + 63, + 231, + 128, + 31, + 0, + 61, + 255, + 128, + 15, + 0, + 120, + 255, + 0, + 7, + 128, + 120, + 126, + 0, + 7, + 128, + 120, + 0, + 31, + 135, + 128, + 120, + 0, + 63, + 199, + 128, + 60, + 0, + 127, + 239, + 0, + 62, + 0, + 121, + 255, + 0, + 31, + 0, + 112, + 254, + 0, + 15, + 0, + 112, + 252, + 0, + 31, + 0, + 120, + 120, + 0, + 63, + 0, + 126, + 0, + 0, + 126, + 0, + 63, + 0, + 0, + 120, + 120, + 31, + 0, + 0, + 120, + 252, + 15, + 0, + 0, + 120, + 254, + 31, + 0, + 0, + 127, + 255, + 254, + 0, + 0, + 63, + 239, + 252, + 0, + 0, + 31, + 199, + 248, + 0, + 0, + 15, + 129, + 224, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "plugins": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000001111000000111110000", + "0000000000000111111110001111111000", + "0000000000001111111111011111111100", + "0000000000011111111111111111111110", + "0000000000111110000111111100011110", + "0000000000111100000011111100011110", + "0000000000111110000001111000011110", + "0000000000111111000000000001111110", + "0000000000011111100000000011111100", + "0000011110000111100000000011111000", + "0000111111000011100000000011110000", + "0001111111000011100000000011111000", + "0011111111100111100000000001111100", + "0011110111111111100000000000111100", + "0111100011111111000000000000011110", + "0111100001111110000000000000011110", + "0111100000000000000111111000011110", + "0111100000000000001111111100011110", + "0011110000000000011111111110111100", + "0011111000000000011110011111111100", + "0001111100000000011100001111111000", + "0000111100000000011100001111110000", + "0001111100000000011110000111100000", + "0011111100000000011111100000000000", + "0111111000000000001111110000000000", + "0111100001111000000111110000000000", + "0111100011111100000011110000000000", + "0111100011111110000111110000000000", + "0111111111111111111111100000000000", + "0011111111101111111111000000000000", + "0001111111000111111110000000000000", + "0000111110000001111000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 224, + 124, + 0, + 0, + 7, + 248, + 254, + 0, + 0, + 15, + 253, + 255, + 0, + 0, + 31, + 255, + 255, + 128, + 0, + 62, + 31, + 199, + 128, + 0, + 60, + 15, + 199, + 128, + 0, + 62, + 7, + 135, + 128, + 0, + 63, + 0, + 31, + 128, + 0, + 31, + 128, + 63, + 0, + 7, + 135, + 128, + 62, + 0, + 15, + 195, + 128, + 60, + 0, + 31, + 195, + 128, + 62, + 0, + 63, + 231, + 128, + 31, + 0, + 61, + 255, + 128, + 15, + 0, + 120, + 255, + 0, + 7, + 128, + 120, + 126, + 0, + 7, + 128, + 120, + 0, + 31, + 135, + 128, + 120, + 0, + 63, + 199, + 128, + 60, + 0, + 127, + 239, + 0, + 62, + 0, + 121, + 255, + 0, + 31, + 0, + 112, + 254, + 0, + 15, + 0, + 112, + 252, + 0, + 31, + 0, + 120, + 120, + 0, + 63, + 0, + 126, + 0, + 0, + 126, + 0, + 63, + 0, + 0, + 120, + 120, + 31, + 0, + 0, + 120, + 252, + 15, + 0, + 0, + 120, + 254, + 31, + 0, + 0, + 127, + 255, + 254, + 0, + 0, + 63, + 239, + 252, + 0, + 0, + 31, + 199, + 248, + 0, + 0, + 15, + 129, + 224, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "quick-tools": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000000011111100000000", + "0000000000000000011111111110000000", + "0000000000000000111111111110000000", + "0000000000000001111111111110000000", + "0000000000000011111000111110000000", + "0000000000000011110001111100000000", + "0000000000000111100011111000111100", + "0000000000000111100111110001111110", + "0000000000000111000111100011111110", + "0000000000001111000111100111111110", + "0000000000001111000111111111111110", + "0000000000001111000011111111011110", + "0000000000000111000001111110011110", + "0000000000000111100000111100011100", + "0000000000001111100000000000111100", + "0000000000011111000000000001111100", + "0000000000111110001100000111111000", + "0000000001111100011111111111110000", + "0000000011111000111111111111100000", + "0000000111110001111111111110000000", + "0000001111100011111001110000000000", + "0000011111000111110000000000000000", + "0000111110001111100000000000000000", + "0001111100011111000000000000000000", + "0011111000111110000000000000000000", + "0111110001111100000000000000000000", + "0111100011111000000000000000000000", + "0111100111110000000000000000000000", + "0111111111100000000000000000000000", + "0011111111000000000000000000000000", + "0011111110000000000000000000000000", + "0000111100000000000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15, + 192, + 0, + 0, + 0, + 127, + 224, + 0, + 0, + 0, + 255, + 224, + 0, + 0, + 1, + 255, + 224, + 0, + 0, + 3, + 227, + 224, + 0, + 0, + 3, + 199, + 192, + 0, + 0, + 7, + 143, + 143, + 0, + 0, + 7, + 159, + 31, + 128, + 0, + 7, + 30, + 63, + 128, + 0, + 15, + 30, + 127, + 128, + 0, + 15, + 31, + 255, + 128, + 0, + 15, + 15, + 247, + 128, + 0, + 7, + 7, + 231, + 128, + 0, + 7, + 131, + 199, + 0, + 0, + 15, + 128, + 15, + 0, + 0, + 31, + 0, + 31, + 0, + 0, + 62, + 48, + 126, + 0, + 0, + 124, + 127, + 252, + 0, + 0, + 248, + 255, + 248, + 0, + 1, + 241, + 255, + 224, + 0, + 3, + 227, + 231, + 0, + 0, + 7, + 199, + 192, + 0, + 0, + 15, + 143, + 128, + 0, + 0, + 31, + 31, + 0, + 0, + 0, + 62, + 62, + 0, + 0, + 0, + 124, + 124, + 0, + 0, + 0, + 120, + 248, + 0, + 0, + 0, + 121, + 240, + 0, + 0, + 0, + 127, + 224, + 0, + 0, + 0, + 63, + 192, + 0, + 0, + 0, + 63, + 128, + 0, + 0, + 0, + 15, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "remove": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000001111111111000000000000", + "0000000000011111111111100000000000", + "0000000000111111111111110000000000", + "0000000000111111111111110000000000", + "0000000000111000000001110000000000", + "0000000000111000000001110000000000", + "0001111111111111111111111111111000", + "0011111111111111111111111111111100", + "0001111111111111111111111111111000", + "0000011110000000000000000111100000", + "0000011110000000000000000111100000", + "0000011110000000000000000111100000", + "0000011110000000000000000111100000", + "0000011110000111001110000111100000", + "0000011110001111001111000111100000", + "0000011110001111001111000111100000", + "0000011110001111001111000111100000", + "0000011110001111001111000111100000", + "0000011110001111001111000111100000", + "0000011110001111001111000111100000", + "0000011110001111001111000111100000", + "0000011110001111001111000111100000", + "0000011110001111001111000111100000", + "0000011110001111001111000111100000", + "0000011110000110000110000111100000", + "0000011110000000000000000111100000", + "0000011110000000000000000111100000", + "0000011110000000000000000111100000", + "0000011111111111111111111111100000", + "0000001111111111111111111111000000", + "0000000111111111111111111110000000", + "0000000011111111111111111100000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 31, + 254, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 56, + 7, + 0, + 0, + 0, + 56, + 7, + 0, + 0, + 31, + 255, + 255, + 254, + 0, + 63, + 255, + 255, + 255, + 0, + 31, + 255, + 255, + 254, + 0, + 7, + 128, + 0, + 120, + 0, + 7, + 128, + 0, + 120, + 0, + 7, + 128, + 0, + 120, + 0, + 7, + 128, + 0, + 120, + 0, + 7, + 135, + 56, + 120, + 0, + 7, + 143, + 60, + 120, + 0, + 7, + 143, + 60, + 120, + 0, + 7, + 143, + 60, + 120, + 0, + 7, + 143, + 60, + 120, + 0, + 7, + 143, + 60, + 120, + 0, + 7, + 143, + 60, + 120, + 0, + 7, + 143, + 60, + 120, + 0, + 7, + 143, + 60, + 120, + 0, + 7, + 143, + 60, + 120, + 0, + 7, + 143, + 60, + 120, + 0, + 7, + 134, + 24, + 120, + 0, + 7, + 128, + 0, + 120, + 0, + 7, + 128, + 0, + 120, + 0, + 7, + 128, + 0, + 120, + 0, + 7, + 255, + 255, + 248, + 0, + 3, + 255, + 255, + 240, + 0, + 1, + 255, + 255, + 224, + 0, + 0, + 255, + 255, + 192, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "resource-monitor": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000011100000000000000000000", + "0000000000011110000000000000000000", + "0000000000111110000000000000000000", + "0000000000111110000000000000000000", + "0000000000111111000000000000000000", + "0000000000111111000000000000000000", + "0000000001111111000000000000000000", + "0000000001111111000000000000000000", + "0000000001110111100000000000000000", + "0000000011110111100000000000000000", + "0000000011110011100000000000000000", + "0000000011110011110000000000000000", + "0000000011100011110000000000000000", + "0000000111100011110000000000000000", + "0011111111100001110000000011111100", + "0111111111000001111000001111111110", + "0111111111000001111000001111111110", + "0011111100000000111000011111111100", + "0000000000000000111100011110000000", + "0000000000000000111100011100000000", + "0000000000000000111100111100000000", + "0000000000000000011100111100000000", + "0000000000000000011110111100000000", + "0000000000000000011110111000000000", + "0000000000000000001111111000000000", + "0000000000000000001111111000000000", + "0000000000000000001111110000000000", + "0000000000000000001111110000000000", + "0000000000000000000111110000000000", + "0000000000000000000111110000000000", + "0000000000000000000111100000000000", + "0000000000000000000011100000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 28, + 0, + 0, + 0, + 0, + 30, + 0, + 0, + 0, + 0, + 62, + 0, + 0, + 0, + 0, + 62, + 0, + 0, + 0, + 0, + 63, + 0, + 0, + 0, + 0, + 63, + 0, + 0, + 0, + 0, + 127, + 0, + 0, + 0, + 0, + 127, + 0, + 0, + 0, + 0, + 119, + 128, + 0, + 0, + 0, + 247, + 128, + 0, + 0, + 0, + 243, + 128, + 0, + 0, + 0, + 243, + 192, + 0, + 0, + 0, + 227, + 192, + 0, + 0, + 1, + 227, + 192, + 0, + 0, + 63, + 225, + 192, + 63, + 0, + 127, + 193, + 224, + 255, + 128, + 127, + 193, + 224, + 255, + 128, + 63, + 0, + 225, + 255, + 0, + 0, + 0, + 241, + 224, + 0, + 0, + 0, + 241, + 192, + 0, + 0, + 0, + 243, + 192, + 0, + 0, + 0, + 115, + 192, + 0, + 0, + 0, + 123, + 192, + 0, + 0, + 0, + 123, + 128, + 0, + 0, + 0, + 63, + 128, + 0, + 0, + 0, + 63, + 128, + 0, + 0, + 0, + 63, + 0, + 0, + 0, + 0, + 63, + 0, + 0, + 0, + 0, + 31, + 0, + 0, + 0, + 0, + 31, + 0, + 0, + 0, + 0, + 30, + 0, + 0, + 0, + 0, + 14, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "retro-clock": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000111111110000000000000", + "0000000000111111111111110000000000", + "0000000001111111111111111100000000", + "0000000111111111111111111110000000", + "0000001111111000000001111111000000", + "0000011111100000000000011111100000", + "0000111110000000110000000111110000", + "0000111100000001111000000011110000", + "0001111000000001111000000001111000", + "0011111000000001111000000001111100", + "0011110000000001111000000000111100", + "0011110000000001111000000000111100", + "0111100000000001111000000000011110", + "0111100000000001111000000000011110", + "0111100000000001111111110000011110", + "0111100000000001111111110000011110", + "0111100000000001111111110000011110", + "0111100000000000111111110000011110", + "0111100000000000000000000000011110", + "0111100000000000000000000000011110", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011111000000000000000000001111100", + "0001111000000000000000000001111000", + "0000111100000000000000000011110000", + "0000111110000000000000000111110000", + "0000011111100000000000011111100000", + "0000001111111000000001111111000000", + "0000000111111111111111111110000000", + "0000000001111111111111111000000000", + "0000000000111111111111110000000000", + "0000000000000111111110000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 127, + 255, + 192, + 0, + 1, + 255, + 255, + 224, + 0, + 3, + 248, + 7, + 240, + 0, + 7, + 224, + 1, + 248, + 0, + 15, + 128, + 192, + 124, + 0, + 15, + 1, + 224, + 60, + 0, + 30, + 1, + 224, + 30, + 0, + 62, + 1, + 224, + 31, + 0, + 60, + 1, + 224, + 15, + 0, + 60, + 1, + 224, + 15, + 0, + 120, + 1, + 224, + 7, + 128, + 120, + 1, + 224, + 7, + 128, + 120, + 1, + 255, + 7, + 128, + 120, + 1, + 255, + 7, + 128, + 120, + 1, + 255, + 7, + 128, + 120, + 0, + 255, + 7, + 128, + 120, + 0, + 0, + 7, + 128, + 120, + 0, + 0, + 7, + 128, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 62, + 0, + 0, + 31, + 0, + 30, + 0, + 0, + 30, + 0, + 15, + 0, + 0, + 60, + 0, + 15, + 128, + 0, + 124, + 0, + 7, + 224, + 1, + 248, + 0, + 3, + 248, + 7, + 240, + 0, + 1, + 255, + 255, + 224, + 0, + 0, + 127, + 255, + 128, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "runtime": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000001110000000000000", + "0000000000000000011110000000000000", + "0000000000000000111111000000000000", + "0000000000000001111110000000000000", + "0000000000000011111110000000000000", + "0000000000000111111110000000000000", + "0000000000001111111110000000000000", + "0000000000011111111100000000000000", + "0000000000111110111100000000000000", + "0000000001111100111100000000000000", + "0000000011111001111000000000000000", + "0000000111110001111111111111100000", + "0000001111100001111111111111111000", + "0000011111000000111111111111111000", + "0000111110000000011111111111111100", + "0001111100000000000000000001111000", + "0001111000000000000000000011111000", + "0011111111111111100000000111110000", + "0001111111111111110000001111100000", + "0001111111111111111000011111000000", + "0000011111111111111000111110000000", + "0000000000000001111001111100000000", + "0000000000000011110011111000000000", + "0000000000000011110111110000000000", + "0000000000000011111111100000000000", + "0000000000000011111111000000000000", + "0000000000000111111110000000000000", + "0000000000000111111100000000000000", + "0000000000000111111000000000000000", + "0000000000001111110000000000000000", + "0000000000000111100000000000000000", + "0000000000000111000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 56, + 0, + 0, + 0, + 0, + 120, + 0, + 0, + 0, + 0, + 252, + 0, + 0, + 0, + 1, + 248, + 0, + 0, + 0, + 3, + 248, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 15, + 248, + 0, + 0, + 0, + 31, + 240, + 0, + 0, + 0, + 62, + 240, + 0, + 0, + 0, + 124, + 240, + 0, + 0, + 0, + 249, + 224, + 0, + 0, + 1, + 241, + 255, + 248, + 0, + 3, + 225, + 255, + 254, + 0, + 7, + 192, + 255, + 254, + 0, + 15, + 128, + 127, + 255, + 0, + 31, + 0, + 0, + 30, + 0, + 30, + 0, + 0, + 62, + 0, + 63, + 255, + 128, + 124, + 0, + 31, + 255, + 192, + 248, + 0, + 31, + 255, + 225, + 240, + 0, + 7, + 255, + 227, + 224, + 0, + 0, + 1, + 231, + 192, + 0, + 0, + 3, + 207, + 128, + 0, + 0, + 3, + 223, + 0, + 0, + 0, + 3, + 254, + 0, + 0, + 0, + 3, + 252, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 7, + 240, + 0, + 0, + 0, + 7, + 224, + 0, + 0, + 0, + 15, + 192, + 0, + 0, + 0, + 7, + 128, + 0, + 0, + 0, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "script-run": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000001100000000000000000000000", + "0000000111111000000000000000000000", + "0000001111111110000000000000000000", + "0000001111111111000000000000000000", + "0000011110011111110000000000000000", + "0000011110000111111100000000000000", + "0000011110000011111111000000000000", + "0000011110000000111111100000000000", + "0000011110000000001111111000000000", + "0000011110000000000011111110000000", + "0000011110000000000001111111000000", + "0000011110000000000000011111110000", + "0000011110000000000000000111111000", + "0000011110000000000000000011111000", + "0000011110000000000000000000111100", + "0000011110000000000000000000111100", + "0000011110000000000000000011111000", + "0000011110000000000000000111111000", + "0000011110000000000000011111110000", + "0000011110000000000001111111000000", + "0000011110000000000011111110000000", + "0000011110000000001111111000000000", + "0000011110000000111111100000000000", + "0000011110000011111111000000000000", + "0000011110000111111100000000000000", + "0000011110011111110000000000000000", + "0000001111111111000000000000000000", + "0000001111111110000000000000000000", + "0000000111111000000000000000000000", + "0000000001100000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 96, + 0, + 0, + 0, + 1, + 248, + 0, + 0, + 0, + 3, + 254, + 0, + 0, + 0, + 3, + 255, + 0, + 0, + 0, + 7, + 159, + 192, + 0, + 0, + 7, + 135, + 240, + 0, + 0, + 7, + 131, + 252, + 0, + 0, + 7, + 128, + 254, + 0, + 0, + 7, + 128, + 63, + 128, + 0, + 7, + 128, + 15, + 224, + 0, + 7, + 128, + 7, + 240, + 0, + 7, + 128, + 1, + 252, + 0, + 7, + 128, + 0, + 126, + 0, + 7, + 128, + 0, + 62, + 0, + 7, + 128, + 0, + 15, + 0, + 7, + 128, + 0, + 15, + 0, + 7, + 128, + 0, + 62, + 0, + 7, + 128, + 0, + 126, + 0, + 7, + 128, + 1, + 252, + 0, + 7, + 128, + 7, + 240, + 0, + 7, + 128, + 15, + 224, + 0, + 7, + 128, + 63, + 128, + 0, + 7, + 128, + 254, + 0, + 0, + 7, + 131, + 252, + 0, + 0, + 7, + 135, + 240, + 0, + 0, + 7, + 159, + 192, + 0, + 0, + 3, + 255, + 0, + 0, + 0, + 3, + 254, + 0, + 0, + 0, + 1, + 248, + 0, + 0, + 0, + 0, + 96, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "scripts": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000010000000000000000000000000000", + "0000111100000000000000000000000000", + "0000111110000000000000000000000000", + "0000011111000000000000000000000000", + "0000001111100000000000000000000000", + "0000000111110000000000000000000000", + "0000000011111000000000000000000000", + "0000000001111100000000000000000000", + "0000000000111110000000000000000000", + "0000000000011111000000000000000000", + "0000000000011111000000000000000000", + "0000000000011111000000000000000000", + "0000000000111110000000000000000000", + "0000000001111100000000000000000000", + "0000000011111000000000000000000000", + "0000000111110000000000000000000000", + "0000001111100000000000000000000000", + "0000011111000000000000000000000000", + "0000111110000000000000000000000000", + "0000111100000000000000000000000000", + "0000011000000000111111111111100000", + "0000000000000001111111111111110000", + "0000000000000001111111111111110000", + "0000000000000000111111111111100000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 15, + 0, + 0, + 0, + 0, + 15, + 128, + 0, + 0, + 0, + 7, + 192, + 0, + 0, + 0, + 3, + 224, + 0, + 0, + 0, + 1, + 240, + 0, + 0, + 0, + 0, + 248, + 0, + 0, + 0, + 0, + 124, + 0, + 0, + 0, + 0, + 62, + 0, + 0, + 0, + 0, + 31, + 0, + 0, + 0, + 0, + 31, + 0, + 0, + 0, + 0, + 31, + 0, + 0, + 0, + 0, + 62, + 0, + 0, + 0, + 0, + 124, + 0, + 0, + 0, + 0, + 248, + 0, + 0, + 0, + 1, + 240, + 0, + 0, + 0, + 3, + 224, + 0, + 0, + 0, + 7, + 192, + 0, + 0, + 0, + 15, + 128, + 0, + 0, + 0, + 15, + 0, + 0, + 0, + 0, + 6, + 0, + 255, + 248, + 0, + 0, + 1, + 255, + 252, + 0, + 0, + 1, + 255, + 252, + 0, + 0, + 0, + 255, + 248, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "search": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000001000000000000000000", + "0000000000111111111110000000000000", + "0000000001111111111111100000000000", + "0000000111111111111111110000000000", + "0000001111111000001111111000000000", + "0000011111100000000001111100000000", + "0000011110000000000000111110000000", + "0000111100000000000000011110000000", + "0001111100000000000000001111000000", + "0001111000000000000000001111000000", + "0001111000000000000000000111000000", + "0001110000000000000000000111100000", + "0001110000000000000000000111100000", + "0011110000000000000000000111100000", + "0001110000000000000000000111100000", + "0001110000000000000000000111100000", + "0001111000000000000000000111000000", + "0001111000000000000000001111000000", + "0001111000000000000000001111000000", + "0000111100000000000000011110000000", + "0000111110000000000000111110000000", + "0000011111000000000001111100000000", + "0000001111110000000111111110000000", + "0000000111111111111111111111000000", + "0000000011111111111111101111100000", + "0000000000111111111110000111110000", + "0000000000000111110000000011111000", + "0000000000000000000000000001111100", + "0000000000000000000000000000111000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 63, + 248, + 0, + 0, + 0, + 127, + 254, + 0, + 0, + 1, + 255, + 255, + 0, + 0, + 3, + 248, + 63, + 128, + 0, + 7, + 224, + 7, + 192, + 0, + 7, + 128, + 3, + 224, + 0, + 15, + 0, + 1, + 224, + 0, + 31, + 0, + 0, + 240, + 0, + 30, + 0, + 0, + 240, + 0, + 30, + 0, + 0, + 112, + 0, + 28, + 0, + 0, + 120, + 0, + 28, + 0, + 0, + 120, + 0, + 60, + 0, + 0, + 120, + 0, + 28, + 0, + 0, + 120, + 0, + 28, + 0, + 0, + 120, + 0, + 30, + 0, + 0, + 112, + 0, + 30, + 0, + 0, + 240, + 0, + 30, + 0, + 0, + 240, + 0, + 15, + 0, + 1, + 224, + 0, + 15, + 128, + 3, + 224, + 0, + 7, + 192, + 7, + 192, + 0, + 3, + 240, + 31, + 224, + 0, + 1, + 255, + 255, + 240, + 0, + 0, + 255, + 254, + 248, + 0, + 0, + 63, + 248, + 124, + 0, + 0, + 7, + 192, + 62, + 0, + 0, + 0, + 0, + 31, + 0, + 0, + 0, + 0, + 14, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "settings": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000001111000000000000000", + "0000000000000111111110000000000000", + "0000000000000111111110000000000000", + "0000000000001111111111000000000000", + "0000000000001111001111000000000000", + "0000000100001110000111000010000000", + "0000011111111110000111111111100000", + "0000111111111110000111111111110000", + "0001111111111100000011111111111000", + "0001111001110000000000111001111000", + "0011110000000011111100000000111000", + "0001110000000111111110000000111000", + "0001111100001111111111000011111000", + "0001111100011111111111100011111000", + "0000111110011110000111100111110000", + "0000011110011110000111100111100000", + "0000011110011110000111100111100000", + "0000111110011110000111100111110000", + "0001111100011111111111100011111000", + "0001111100001111111111000011111000", + "0001110000000111111110000000111000", + "0011110000000011111100000000111000", + "0001111001110000000000111001111000", + "0001111111111100000011111111111000", + "0000111111111110000111111111110000", + "0000011111111110000111111111100000", + "0000000100001110000111000010000000", + "0000000000001111001111000000000000", + "0000000000001111111111000000000000", + "0000000000000111111110000000000000", + "0000000000000111111110000000000000", + "0000000000000001111000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 15, + 60, + 0, + 0, + 1, + 14, + 28, + 32, + 0, + 7, + 254, + 31, + 248, + 0, + 15, + 254, + 31, + 252, + 0, + 31, + 252, + 15, + 254, + 0, + 30, + 112, + 3, + 158, + 0, + 60, + 3, + 240, + 14, + 0, + 28, + 7, + 248, + 14, + 0, + 31, + 15, + 252, + 62, + 0, + 31, + 31, + 254, + 62, + 0, + 15, + 158, + 30, + 124, + 0, + 7, + 158, + 30, + 120, + 0, + 7, + 158, + 30, + 120, + 0, + 15, + 158, + 30, + 124, + 0, + 31, + 31, + 254, + 62, + 0, + 31, + 15, + 252, + 62, + 0, + 28, + 7, + 248, + 14, + 0, + 60, + 3, + 240, + 14, + 0, + 30, + 112, + 3, + 158, + 0, + 31, + 252, + 15, + 254, + 0, + 15, + 254, + 31, + 252, + 0, + 7, + 254, + 31, + 248, + 0, + 1, + 14, + 28, + 32, + 0, + 0, + 15, + 60, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "store": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000011111111111111111100000000", + "0000000111111111111111111110000000", + "0000001111111111111111111111000000", + "0000011111111111111111111111100000", + "0000111110000000000000000111110000", + "0001111100000000000000000011111000", + "0001111111111111111111111111111000", + "0001111111111111111111111111111000", + "0011111111111111111111111111111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000010000000000100000111100", + "0011110000111000000001110000111100", + "0011110000111000000001110000111100", + "0011110000111000000001110000111100", + "0011110000111100000011110000111100", + "0011110000111110000111110000111100", + "0011110000011111111111100000111100", + "0011110000001111111111000000111100", + "0011110000000111111110000000111100", + "0011110000000000110000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0011110000000000000000000000111100", + "0001111111111111111111111111111000", + "0001111111111111111111111111111000", + "0000111111111111111111111111110000", + "0000011111111111111111111111100000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 255, + 255, + 192, + 0, + 1, + 255, + 255, + 224, + 0, + 3, + 255, + 255, + 240, + 0, + 7, + 255, + 255, + 248, + 0, + 15, + 128, + 0, + 124, + 0, + 31, + 0, + 0, + 62, + 0, + 31, + 255, + 255, + 254, + 0, + 31, + 255, + 255, + 254, + 0, + 63, + 255, + 255, + 255, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 16, + 2, + 15, + 0, + 60, + 56, + 7, + 15, + 0, + 60, + 56, + 7, + 15, + 0, + 60, + 56, + 7, + 15, + 0, + 60, + 60, + 15, + 15, + 0, + 60, + 62, + 31, + 15, + 0, + 60, + 31, + 254, + 15, + 0, + 60, + 15, + 252, + 15, + 0, + 60, + 7, + 248, + 15, + 0, + 60, + 0, + 192, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 60, + 0, + 0, + 15, + 0, + 31, + 255, + 255, + 254, + 0, + 31, + 255, + 255, + 254, + 0, + 15, + 255, + 255, + 252, + 0, + 7, + 255, + 255, + 248, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "theme": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000000000000011110000", + "0000000000000000000000000111111100", + "0000000000000000000000001111111100", + "0000000000000000000000011111111110", + "0000000000000011100000111110011110", + "0000000000001111111001111100011110", + "0000000000011111111111111000111110", + "0000000000111111111111110001111100", + "0000000000111100011111100011111000", + "0000000000111110001111000111110000", + "0000000000111110000000001111100000", + "0000000001111111000000011111000000", + "0000000011111111100000011110000000", + "0000001111111111110000011110000000", + "0011111111100011111000011111000000", + "0111111111000001111100001111000000", + "0111111100000000111110000111100000", + "0111110000000000011111000111100000", + "0011111000000000001111110111100000", + "0001111111000000000111111111000000", + "0001111111111000000011111111000000", + "0000111111111111100011111110000000", + "0000011111111111111111111100000000", + "0000001111111111111111100000000000", + "0000000111100011111111100000000000", + "0000000011110000011111000000000000", + "0000000011111000111110000000000000", + "0000000001111101111100000000000000", + "0000000000111111111000000000000000", + "0000000000011111110000000000000000", + "0000000000001111100000000000000000", + "0000000000000111000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 60, + 0, + 0, + 0, + 0, + 127, + 0, + 0, + 0, + 0, + 255, + 0, + 0, + 0, + 1, + 255, + 128, + 0, + 3, + 131, + 231, + 128, + 0, + 15, + 231, + 199, + 128, + 0, + 31, + 255, + 143, + 128, + 0, + 63, + 255, + 31, + 0, + 0, + 60, + 126, + 62, + 0, + 0, + 62, + 60, + 124, + 0, + 0, + 62, + 0, + 248, + 0, + 0, + 127, + 1, + 240, + 0, + 0, + 255, + 129, + 224, + 0, + 3, + 255, + 193, + 224, + 0, + 63, + 227, + 225, + 240, + 0, + 127, + 193, + 240, + 240, + 0, + 127, + 0, + 248, + 120, + 0, + 124, + 0, + 124, + 120, + 0, + 62, + 0, + 63, + 120, + 0, + 31, + 192, + 31, + 240, + 0, + 31, + 248, + 15, + 240, + 0, + 15, + 255, + 143, + 224, + 0, + 7, + 255, + 255, + 192, + 0, + 3, + 255, + 254, + 0, + 0, + 1, + 227, + 254, + 0, + 0, + 0, + 240, + 124, + 0, + 0, + 0, + 248, + 248, + 0, + 0, + 0, + 125, + 240, + 0, + 0, + 0, + 63, + 224, + 0, + 0, + 0, + 31, + 192, + 0, + 0, + 0, + 15, + 128, + 0, + 0, + 0, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "themes": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000111111110000000000000", + "0000000000111111111111110000000000", + "0000000011111111111111111100000000", + "0000000111111111111111111110000000", + "0000001111110000000000111111100000", + "0000011111000000000000001111100000", + "0000111110000000011110000111110000", + "0001111100011000011110000011111000", + "0001111000111100011111000001111100", + "0011110000111100011110000000111100", + "0011110000111100001100000000111100", + "0011100000111100000000001000011110", + "0111100000000000000000011110011110", + "0111100000000000000000111110011110", + "0111100011000000000000111110011110", + "0111100111100000000000011110011110", + "0111100111110000000000000000011110", + "0111100111100000000000000000111100", + "0111100011100000000000000000111100", + "0111100000000000000000000011111000", + "0011100000000000000111111111111000", + "0011110000000000001111111111110000", + "0011110000000000011111111111000000", + "0001111000000000011110000000000000", + "0001111100000000011100000000000000", + "0000111110000000011110000000000000", + "0000011111000000011110000000000000", + "0000001111110000001111000000000000", + "0000000111111111111111000000000000", + "0000000011111111111110000000000000", + "0000000000111111111110000000000000", + "0000000000000111111000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 255, + 255, + 192, + 0, + 1, + 255, + 255, + 224, + 0, + 3, + 240, + 3, + 248, + 0, + 7, + 192, + 0, + 248, + 0, + 15, + 128, + 120, + 124, + 0, + 31, + 24, + 120, + 62, + 0, + 30, + 60, + 124, + 31, + 0, + 60, + 60, + 120, + 15, + 0, + 60, + 60, + 48, + 15, + 0, + 56, + 60, + 0, + 135, + 128, + 120, + 0, + 1, + 231, + 128, + 120, + 0, + 3, + 231, + 128, + 120, + 192, + 3, + 231, + 128, + 121, + 224, + 1, + 231, + 128, + 121, + 240, + 0, + 7, + 128, + 121, + 224, + 0, + 15, + 0, + 120, + 224, + 0, + 15, + 0, + 120, + 0, + 0, + 62, + 0, + 56, + 0, + 31, + 254, + 0, + 60, + 0, + 63, + 252, + 0, + 60, + 0, + 127, + 240, + 0, + 30, + 0, + 120, + 0, + 0, + 31, + 0, + 112, + 0, + 0, + 15, + 128, + 120, + 0, + 0, + 7, + 192, + 120, + 0, + 0, + 3, + 240, + 60, + 0, + 0, + 1, + 255, + 252, + 0, + 0, + 0, + 255, + 248, + 0, + 0, + 0, + 63, + 248, + 0, + 0, + 0, + 7, + 224, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "touch": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000001100000000000000000000000", + "0000000001110000000000000000000000", + "0000000011110000000000000000000000", + "0000000001110000000110000000000000", + "0000000001111000001111000000000000", + "0000000001111000111110000000000000", + "0000000000111000111110000000000000", + "0001000000111001111100000000000000", + "0111111000000000111000000000000000", + "0111111110000000000000000000000000", + "0011111110001110000000000000000000", + "0000011110011111110000000000000000", + "0000000000011111111100000000000000", + "0000000000011111111111100000000000", + "0000000010001111111111111000000000", + "0000001111001111001111111111000000", + "0000001111001111000011111111110000", + "0000011111000111100000011111111000", + "0000111110000111100000000111111100", + "0000111100000011110000111111111000", + "0000010000000011110001111111111000", + "0000000000000011110011111111100000", + "0000000000000001111011111000000000", + "0000000000000001111011110000000000", + "0000000000000000111111100000000000", + "0000000000000000111111100000000000", + "0000000000000000111111100000000000", + "0000000000000000011111100000000000", + "0000000000000000011111000000000000", + "0000000000000000001111000000000000", + "0000000000000000000100000000000000", + "0000000000000000000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 96, + 0, + 0, + 0, + 0, + 112, + 0, + 0, + 0, + 0, + 240, + 0, + 0, + 0, + 0, + 112, + 24, + 0, + 0, + 0, + 120, + 60, + 0, + 0, + 0, + 120, + 248, + 0, + 0, + 0, + 56, + 248, + 0, + 0, + 16, + 57, + 240, + 0, + 0, + 126, + 0, + 224, + 0, + 0, + 127, + 128, + 0, + 0, + 0, + 63, + 142, + 0, + 0, + 0, + 7, + 159, + 192, + 0, + 0, + 0, + 31, + 240, + 0, + 0, + 0, + 31, + 254, + 0, + 0, + 0, + 143, + 255, + 128, + 0, + 3, + 207, + 63, + 240, + 0, + 3, + 207, + 15, + 252, + 0, + 7, + 199, + 129, + 254, + 0, + 15, + 135, + 128, + 127, + 0, + 15, + 3, + 195, + 254, + 0, + 4, + 3, + 199, + 254, + 0, + 0, + 3, + 207, + 248, + 0, + 0, + 1, + 239, + 128, + 0, + 0, + 1, + 239, + 0, + 0, + 0, + 0, + 254, + 0, + 0, + 0, + 0, + 254, + 0, + 0, + 0, + 0, + 254, + 0, + 0, + 0, + 0, + 126, + 0, + 0, + 0, + 0, + 124, + 0, + 0, + 0, + 0, + 60, + 0, + 0, + 0, + 0, + 16, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "vibration": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000001111000000000000", + "0000000000000000111111100000000000", + "0000000000000000111111110000000000", + "0000000000000001111111110000000000", + "0000000111000001111001110000000000", + "0000011111110001111001110000000000", + "0000011111110001111001110000000000", + "0000111111111001111001110000000000", + "0000111101111001111001110000000000", + "0000111000111001111001110000000000", + "0000111000111001111001110000000000", + "0000111000111001111001110000000000", + "0000111000111001111001110000000000", + "0000111000111001111001110000011110", + "0000111000111001111001110000111110", + "0001111000111001111001110001111110", + "0111111000111001111001110001111000", + "0111110000111001111001110001110000", + "0111100000111001111001110001110000", + "0000000000111001111001110001110000", + "0000000000111001111001110001110000", + "0000000000111001111001110001110000", + "0000000000111001111001110001110000", + "0000000000111001111001111011110000", + "0000000000111001111001111111110000", + "0000000000111001111000111111100000", + "0000000000111001111000111111100000", + "0000000000111001111000001110000000", + "0000000000111111111000000000000000", + "0000000000111111110000000000000000", + "0000000000011111110000000000000000", + "0000000000001111000000000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 60, + 0, + 0, + 0, + 0, + 254, + 0, + 0, + 0, + 0, + 255, + 0, + 0, + 0, + 1, + 255, + 0, + 0, + 1, + 193, + 231, + 0, + 0, + 7, + 241, + 231, + 0, + 0, + 7, + 241, + 231, + 0, + 0, + 15, + 249, + 231, + 0, + 0, + 15, + 121, + 231, + 0, + 0, + 14, + 57, + 231, + 0, + 0, + 14, + 57, + 231, + 0, + 0, + 14, + 57, + 231, + 0, + 0, + 14, + 57, + 231, + 0, + 0, + 14, + 57, + 231, + 7, + 128, + 14, + 57, + 231, + 15, + 128, + 30, + 57, + 231, + 31, + 128, + 126, + 57, + 231, + 30, + 0, + 124, + 57, + 231, + 28, + 0, + 120, + 57, + 231, + 28, + 0, + 0, + 57, + 231, + 28, + 0, + 0, + 57, + 231, + 28, + 0, + 0, + 57, + 231, + 28, + 0, + 0, + 57, + 231, + 28, + 0, + 0, + 57, + 231, + 188, + 0, + 0, + 57, + 231, + 252, + 0, + 0, + 57, + 227, + 248, + 0, + 0, + 57, + 227, + 248, + 0, + 0, + 57, + 224, + 224, + 0, + 0, + 63, + 224, + 0, + 0, + 0, + 63, + 192, + 0, + 0, + 0, + 31, + 192, + 0, + 0, + 0, + 15, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "watch-face": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000111111110000000000000", + "0000000000001111111111000000000000", + "0000000000011111111111100000000000", + "0000000000011111111111100000000000", + "0000000000111100000011110000000000", + "0000000000111100000011110000000000", + "0000000000111111111111110000000000", + "0000000000111111111111110000000000", + "0000000000111111111111110000000000", + "0000000001111111001111111000000000", + "0000000011111000000001111100000000", + "0000000011110000110000111100000000", + "0000000111100001111000011110000000", + "0000000111100001111000011110000000", + "0000000111000001111000011110000000", + "0000000111000001111000001110000000", + "0000000111000001111110001110000000", + "0000000111100000111110011110000000", + "0000000111100000011110011110000000", + "0000000111100000000000011110000000", + "0000000011110000000000111100000000", + "0000000011111000000001111100000000", + "0000000001111111001111111000000000", + "0000000000111111111111111000000000", + "0000000000111111111111110000000000", + "0000000000111111111111110000000000", + "0000000000111100000011110000000000", + "0000000000111100000011110000000000", + "0000000000011111111111110000000000", + "0000000000011111111111100000000000", + "0000000000001111111111000000000000", + "0000000000000111111110000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 31, + 254, + 0, + 0, + 0, + 31, + 254, + 0, + 0, + 0, + 60, + 15, + 0, + 0, + 0, + 60, + 15, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 127, + 63, + 128, + 0, + 0, + 248, + 7, + 192, + 0, + 0, + 240, + 195, + 192, + 0, + 1, + 225, + 225, + 224, + 0, + 1, + 225, + 225, + 224, + 0, + 1, + 193, + 225, + 224, + 0, + 1, + 193, + 224, + 224, + 0, + 1, + 193, + 248, + 224, + 0, + 1, + 224, + 249, + 224, + 0, + 1, + 224, + 121, + 224, + 0, + 1, + 224, + 1, + 224, + 0, + 0, + 240, + 3, + 192, + 0, + 0, + 248, + 7, + 192, + 0, + 0, + 127, + 63, + 128, + 0, + 0, + 63, + 255, + 128, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 63, + 255, + 0, + 0, + 0, + 60, + 15, + 0, + 0, + 0, + 60, + 15, + 0, + 0, + 0, + 31, + 255, + 0, + 0, + 0, + 31, + 254, + 0, + 0, + 0, + 15, + 252, + 0, + 0, + 0, + 7, + 248, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "weather": { + "width": 34, + "height": 34, + "stride": 5, + "rows": [ + "0000000000000000000000000000000000", + "0000000000000000110000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000000000000001111000000000000000", + "0000001100000001111000000011000000", + "0000011110000001111000000111100000", + "0000011111000000000000001111100000", + "0000001111100000000000011111000000", + "0000000111100000000000011110000000", + "0000000011000111111110001100000000", + "0000000000000111111111000000000000", + "0000000000001111111111100000000000", + "0000000000000110000111110000000000", + "0000000000000000000011110000000000", + "0000000011110000000001110001111100", + "0000011111111110000001110001111110", + "0000111111111111000001110001111110", + "0001111111111111100001110001111100", + "0011111000000111110000100000000000", + "0011110000000011110000000000000000", + "0111100000000001111110000000000000", + "0111100000000001111111100000000000", + "0111100000000001111111100000000000", + "0111100000000000000111110000000000", + "0111100000000000000011110000000000", + "0111100000000000000001110000000000", + "0011110000000000000001110000000000", + "0011111000000000000011110000000000", + "0001111111111111111111110000000000", + "0000111111111111111111100000000000", + "0000011111111111111111000000000000", + "0000000111111111111110000000000000", + "0000000000000000000000000000000000" + ], + "packed_bytes": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 192, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 0, + 1, + 224, + 0, + 0, + 3, + 1, + 224, + 48, + 0, + 7, + 129, + 224, + 120, + 0, + 7, + 192, + 0, + 248, + 0, + 3, + 224, + 1, + 240, + 0, + 1, + 224, + 1, + 224, + 0, + 0, + 199, + 248, + 192, + 0, + 0, + 7, + 252, + 0, + 0, + 0, + 15, + 254, + 0, + 0, + 0, + 6, + 31, + 0, + 0, + 0, + 0, + 15, + 0, + 0, + 0, + 240, + 7, + 31, + 0, + 7, + 254, + 7, + 31, + 128, + 15, + 255, + 7, + 31, + 128, + 31, + 255, + 135, + 31, + 0, + 62, + 7, + 194, + 0, + 0, + 60, + 3, + 192, + 0, + 0, + 120, + 1, + 248, + 0, + 0, + 120, + 1, + 254, + 0, + 0, + 120, + 1, + 254, + 0, + 0, + 120, + 0, + 31, + 0, + 0, + 120, + 0, + 15, + 0, + 0, + 120, + 0, + 7, + 0, + 0, + 60, + 0, + 7, + 0, + 0, + 62, + 0, + 15, + 0, + 0, + 31, + 255, + 255, + 0, + 0, + 15, + 255, + 254, + 0, + 0, + 7, + 255, + 252, + 0, + 0, + 1, + 255, + 248, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + } +} \ No newline at end of file diff --git a/beeos/generated/icons/icon_build_index.json b/beeos/generated/icons/icon_build_index.json new file mode 100644 index 0000000..b1d29b9 --- /dev/null +++ b/beeos/generated/icons/icon_build_index.json @@ -0,0 +1,25 @@ +{ + "icon_count": 35, + "sizes": { + "24": { + "json": "beeos/generated/icons/bitmap_json/beeos_icons_24.json", + "generic_header": "beeos/generated/icons/lvgl/beeos_icons_24.h", + "generic_source": "beeos/generated/icons/lvgl/beeos_icons_24.c", + "lvgl_v8_header": "beeos/generated/icons/lvgl_v8/beeos_icons_24_lvgl_v8.h", + "lvgl_v8_source": "beeos/generated/icons/lvgl_v8/beeos_icons_24_lvgl_v8.c", + "lvgl_v9_header": "beeos/generated/icons/lvgl_v9/beeos_icons_24_lvgl_v9.h", + "lvgl_v9_source": "beeos/generated/icons/lvgl_v9/beeos_icons_24_lvgl_v9.c", + "preview": "beeos/generated/icons/previews/beeos_icons_24_preview.png" + }, + "34": { + "json": "beeos/generated/icons/bitmap_json/beeos_icons_34.json", + "generic_header": "beeos/generated/icons/lvgl/beeos_icons_34.h", + "generic_source": "beeos/generated/icons/lvgl/beeos_icons_34.c", + "lvgl_v8_header": "beeos/generated/icons/lvgl_v8/beeos_icons_34_lvgl_v8.h", + "lvgl_v8_source": "beeos/generated/icons/lvgl_v8/beeos_icons_34_lvgl_v8.c", + "lvgl_v9_header": "beeos/generated/icons/lvgl_v9/beeos_icons_34_lvgl_v9.h", + "lvgl_v9_source": "beeos/generated/icons/lvgl_v9/beeos_icons_34_lvgl_v9.c", + "preview": "beeos/generated/icons/previews/beeos_icons_34_preview.png" + } + } +} \ No newline at end of file diff --git a/beeos/generated/icons/lvgl/beeos_icons_24.c b/beeos/generated/icons/lvgl/beeos_icons_24.c new file mode 100644 index 0000000..dde369b --- /dev/null +++ b/beeos/generated/icons/lvgl/beeos_icons_24.c @@ -0,0 +1 @@ +/* Auto-generated BeeOS 1-bit icon data. */\n\n#include "beeos_icons_24.h"\n\nconst uint8_t beeos_icon_about_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x03, 0xff, 0xc0, 0x0f, 0xe7, 0xf0,\n 0x1f, 0x00, 0xf8, 0x1c, 0x00, 0x38, 0x38, 0x00, 0x1c, 0x38, 0x18, 0x1c,\n 0x70, 0x18, 0x0e, 0x70, 0x00, 0x0e, 0x70, 0x00, 0x0e, 0x60, 0x18, 0x06,\n 0x60, 0x18, 0x06, 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e,\n 0x38, 0x18, 0x1c, 0x38, 0x00, 0x1c, 0x1c, 0x00, 0x38, 0x1f, 0x00, 0xf8,\n 0x0f, 0xe7, 0xf0, 0x03, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_apps_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x3f, 0xff, 0xfc,\n 0x38, 0x18, 0x1c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c,\n 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x3f, 0xff, 0xfc,\n 0x3f, 0xff, 0xfc, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c,\n 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x38, 0x18, 0x1c,\n 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_back_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0e, 0x00,\n 0x00, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0xe0, 0x00,\n 0x00, 0xe0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x1e, 0x00,\n 0x00, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_battery_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, 0x7f, 0xff, 0xe0, 0x70, 0x00, 0xe0,\n 0x60, 0x00, 0x60, 0x60, 0x00, 0x66, 0x60, 0x00, 0x66, 0x60, 0x00, 0x66,\n 0x60, 0x00, 0x66, 0x60, 0x00, 0x66, 0x60, 0x00, 0x66, 0x60, 0x00, 0x60,\n 0x70, 0x00, 0xe0, 0x7f, 0xff, 0xe0, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_bluetooth_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1f, 0x00,\n 0x00, 0x1f, 0x00, 0x00, 0x1b, 0xc0, 0x03, 0x19, 0xc0, 0x03, 0x99, 0xc0,\n 0x01, 0xfb, 0x80, 0x00, 0xff, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00,\n 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xff, 0x00, 0x01, 0xdb, 0xc0,\n 0x03, 0x99, 0xc0, 0x03, 0x19, 0xc0, 0x00, 0x1b, 0x80, 0x00, 0x1f, 0x00,\n 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_clock_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x03, 0xff, 0xc0, 0x0f, 0xe7, 0xf0,\n 0x1f, 0x00, 0xf8, 0x1c, 0x18, 0x38, 0x38, 0x18, 0x1c, 0x38, 0x18, 0x1c,\n 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x60, 0x1c, 0x06,\n 0x60, 0x1f, 0x06, 0x70, 0x0f, 0x8e, 0x70, 0x03, 0x8e, 0x70, 0x00, 0x0e,\n 0x38, 0x00, 0x1c, 0x38, 0x00, 0x1c, 0x1c, 0x00, 0x38, 0x1f, 0x00, 0xf8,\n 0x0f, 0xe7, 0xf0, 0x03, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_developer_tools_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,\n 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0e, 0x00, 0x06, 0x0e, 0x60,\n 0x0e, 0x0e, 0x70, 0x1c, 0x1c, 0x3c, 0x38, 0x1c, 0x1e, 0x70, 0x1c, 0x0e,\n 0x70, 0x38, 0x0e, 0x3c, 0x38, 0x1c, 0x1e, 0x38, 0x38, 0x0e, 0x70, 0x70,\n 0x06, 0x70, 0x60, 0x00, 0x70, 0x00, 0x00, 0x60, 0x00, 0x00, 0xe0, 0x00,\n 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_display_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x0c, 0x18, 0x30, 0x0e, 0x00, 0x70, 0x07, 0x00, 0xe0, 0x02, 0x7e, 0x40,\n 0x00, 0xff, 0x00, 0x01, 0xe7, 0x80, 0x01, 0xc3, 0x80, 0x79, 0x81, 0x9e,\n 0x79, 0x81, 0x9e, 0x01, 0xc3, 0x80, 0x01, 0xe7, 0x80, 0x00, 0xff, 0x00,\n 0x02, 0x7e, 0x40, 0x07, 0x00, 0xe0, 0x0e, 0x00, 0x70, 0x0c, 0x18, 0x30,\n 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_github_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0xf8, 0x06, 0x03, 0xfc,\n 0x06, 0x03, 0x9c, 0x06, 0x1f, 0x9c, 0x06, 0x7f, 0x9c, 0x06, 0xff, 0x9c,\n 0x07, 0xe3, 0xfc, 0x07, 0xc1, 0xf8, 0x07, 0x80, 0x00, 0x07, 0x00, 0x00,\n 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x3f, 0xc0, 0x00,\n 0x39, 0xc0, 0x00, 0x39, 0xc0, 0x00, 0x39, 0xc0, 0x00, 0x39, 0xc0, 0x00,\n 0x3f, 0xc0, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_gps_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x00, 0xff, 0x00, 0x01, 0xff, 0x80, 0x03, 0xe7, 0xc0, 0x07, 0x81, 0xe0,\n 0x0f, 0x7e, 0xf0, 0x0e, 0xff, 0x70, 0x0e, 0xe7, 0x70, 0x7c, 0xe7, 0x3e,\n 0x7c, 0xe7, 0x3e, 0x0e, 0xe7, 0x70, 0x0e, 0xff, 0x70, 0x0f, 0x7e, 0xf0,\n 0x07, 0x81, 0xe0, 0x03, 0xe7, 0xc0, 0x01, 0xff, 0x80, 0x00, 0xff, 0x00,\n 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_health_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe7, 0xf0,\n 0x1f, 0xff, 0xf8, 0x3e, 0xff, 0x7c, 0x78, 0x3c, 0x1e, 0x70, 0x00, 0x0e,\n 0x70, 0x06, 0x0e, 0x60, 0x07, 0x06, 0x70, 0x0f, 0x0e, 0x70, 0x6f, 0x0e,\n 0x7f, 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0x1c, 0x3c, 0x38, 0x0f, 0x3c, 0xf0,\n 0x07, 0xb9, 0xe0, 0x03, 0xdb, 0xc0, 0x01, 0xe7, 0x80, 0x00, 0xff, 0x00,\n 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_hivestore_24_data[72] = {\n 0x00, 0x00, 0x00, 0x07, 0xff, 0xe0, 0x0f, 0xff, 0xf0, 0x1e, 0x00, 0x78,\n 0x3c, 0x00, 0x3c, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x30, 0x00, 0x0c,\n 0x30, 0x00, 0x0c, 0x31, 0x81, 0x8c, 0x31, 0x81, 0x8c, 0x31, 0xc3, 0x8c,\n 0x31, 0xe7, 0x8c, 0x30, 0xff, 0x0c, 0x30, 0x7e, 0x0c, 0x30, 0x00, 0x0c,\n 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c,\n 0x38, 0x00, 0x1c, 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_home_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x01, 0xff, 0x80,\n 0x03, 0xc3, 0xc0, 0x07, 0x81, 0xe0, 0x0f, 0x00, 0xf0, 0x1e, 0x00, 0x78,\n 0x3c, 0x00, 0x3c, 0x38, 0x00, 0x1c, 0x30, 0x00, 0x0c, 0x30, 0xff, 0x0c,\n 0x30, 0xff, 0x0c, 0x30, 0xc3, 0x0c, 0x30, 0xc3, 0x0c, 0x30, 0xc3, 0x0c,\n 0x30, 0xc3, 0x0c, 0x30, 0xc3, 0x0c, 0x30, 0xc3, 0x0c, 0x38, 0xc3, 0x1c,\n 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_install_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x00, 0x18, 0x00, 0x03, 0x18, 0xc0, 0x03, 0x99, 0xc0, 0x01, 0xfb, 0x80,\n 0x00, 0xff, 0x00, 0x00, 0x7e, 0x00, 0x30, 0x3c, 0x0c, 0x30, 0x18, 0x0c,\n 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x38, 0x00, 0x1c,\n 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_notifications_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x01, 0xff, 0x80, 0x03, 0xe7, 0xc0,\n 0x07, 0x81, 0xe0, 0x07, 0x00, 0xe0, 0x07, 0x00, 0xe0, 0x06, 0x00, 0x60,\n 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x0e, 0x00, 0x70, 0x0e, 0x00, 0x70,\n 0x0e, 0x00, 0x70, 0x1c, 0x00, 0x38, 0x3c, 0x00, 0x3c, 0x38, 0x00, 0x1c,\n 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_package_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xff, 0x00, 0x03, 0xff, 0xc0,\n 0x0f, 0xe3, 0xf0, 0x1f, 0xf0, 0xf8, 0x3c, 0x7c, 0x3c, 0x3e, 0x3f, 0x7c,\n 0x3f, 0x8f, 0xfc, 0x37, 0xc3, 0xec, 0x31, 0xff, 0xcc, 0x30, 0xff, 0x0c,\n 0x30, 0x3c, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c,\n 0x38, 0x18, 0x1c, 0x3c, 0x18, 0x3c, 0x1f, 0x18, 0xf8, 0x0f, 0xdb, 0xf0,\n 0x03, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_permissions_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xfe, 0x00, 0x03, 0xff, 0xc0,\n 0x1f, 0xe7, 0xf8, 0x1f, 0x81, 0xf8, 0x18, 0x00, 0x18, 0x18, 0x00, 0x18,\n 0x18, 0x00, 0x18, 0x18, 0x03, 0x18, 0x18, 0x07, 0x18, 0x18, 0xce, 0x18,\n 0x18, 0xfc, 0x18, 0x18, 0x78, 0x18, 0x1c, 0x30, 0x38, 0x1c, 0x00, 0x38,\n 0x1c, 0x00, 0x38, 0x0e, 0x00, 0x70, 0x0f, 0x00, 0xf0, 0x07, 0xc3, 0xe0,\n 0x03, 0xff, 0xc0, 0x01, 0xff, 0x80, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_plugin_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x7e, 0xfe, 0x00, 0xff, 0xee,\n 0x01, 0xc3, 0xc6, 0x01, 0xe1, 0xce, 0x01, 0xf0, 0x3e, 0x0e, 0x70, 0x3c,\n 0x1e, 0x30, 0x38, 0x3f, 0x70, 0x1c, 0x77, 0xf0, 0x0e, 0x73, 0xe0, 0x0e,\n 0x70, 0x07, 0xce, 0x70, 0x0f, 0xee, 0x38, 0x0e, 0xfc, 0x1c, 0x0c, 0x78,\n 0x3c, 0x0e, 0x70, 0x7c, 0x0f, 0x80, 0x73, 0x87, 0x80, 0x63, 0xc3, 0x80,\n 0x77, 0xff, 0x00, 0x7f, 0x7e, 0x00, 0x3e, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_plugins_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x7e, 0xfe, 0x00, 0xff, 0xee,\n 0x01, 0xc3, 0xc6, 0x01, 0xe1, 0xce, 0x01, 0xf0, 0x3e, 0x0e, 0x70, 0x3c,\n 0x1e, 0x30, 0x38, 0x3f, 0x70, 0x1c, 0x77, 0xf0, 0x0e, 0x73, 0xe0, 0x0e,\n 0x70, 0x07, 0xce, 0x70, 0x0f, 0xee, 0x38, 0x0e, 0xfc, 0x1c, 0x0c, 0x78,\n 0x3c, 0x0e, 0x70, 0x7c, 0x0f, 0x80, 0x73, 0x87, 0x80, 0x63, 0xc3, 0x80,\n 0x77, 0xff, 0x00, 0x7f, 0x7e, 0x00, 0x3e, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_quick_tools_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x1f, 0xe0, 0x00, 0x3f, 0xe0,\n 0x00, 0x79, 0xc0, 0x00, 0x73, 0x8e, 0x00, 0x77, 0x1e, 0x00, 0x67, 0x3e,\n 0x00, 0x63, 0xfe, 0x00, 0x71, 0xee, 0x00, 0x70, 0xce, 0x00, 0xe0, 0x1e,\n 0x01, 0xc6, 0x7c, 0x03, 0x8f, 0xf8, 0x07, 0x1f, 0xf0, 0x0e, 0x38, 0x00,\n 0x1c, 0x70, 0x00, 0x38, 0xe0, 0x00, 0x71, 0xc0, 0x00, 0x73, 0x80, 0x00,\n 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_remove_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x01, 0xff, 0x80, 0x01, 0xc3, 0x80,\n 0x01, 0x81, 0x80, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x0c, 0x00, 0x30,\n 0x0c, 0x00, 0x30, 0x0c, 0x00, 0x30, 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30,\n 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30,\n 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30, 0x0c, 0x00, 0x30, 0x0c, 0x00, 0x30,\n 0x0e, 0x00, 0x70, 0x0f, 0xff, 0xf0, 0x07, 0xff, 0xe0, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_resource_monitor_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x01, 0xe0, 0x00, 0x01, 0xe0, 0x00,\n 0x01, 0xe0, 0x00, 0x03, 0xf0, 0x00, 0x03, 0xf0, 0x00, 0x03, 0xf0, 0x00,\n 0x03, 0x30, 0x00, 0x07, 0x38, 0x00, 0x07, 0x38, 0x00, 0x7f, 0x38, 0x7e,\n 0x7e, 0x1c, 0xfe, 0x00, 0x1c, 0xe0, 0x00, 0x1c, 0xe0, 0x00, 0x0c, 0xc0,\n 0x00, 0x0f, 0xc0, 0x00, 0x0f, 0xc0, 0x00, 0x0f, 0xc0, 0x00, 0x07, 0x80,\n 0x00, 0x07, 0x80, 0x00, 0x07, 0x80, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_retro_clock_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x03, 0xff, 0xc0, 0x0f, 0xe7, 0xf0,\n 0x1f, 0x00, 0xf8, 0x1c, 0x18, 0x38, 0x38, 0x18, 0x1c, 0x38, 0x18, 0x1c,\n 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x60, 0x1f, 0x86,\n 0x60, 0x1f, 0x86, 0x70, 0x00, 0x0e, 0x70, 0x00, 0x0e, 0x70, 0x00, 0x0e,\n 0x38, 0x00, 0x1c, 0x38, 0x00, 0x1c, 0x1c, 0x00, 0x38, 0x1f, 0x00, 0xf8,\n 0x0f, 0xe7, 0xf0, 0x03, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_runtime_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x3e, 0x00,\n 0x00, 0x7e, 0x00, 0x00, 0xfe, 0x00, 0x01, 0xfc, 0x00, 0x03, 0xdc, 0x00,\n 0x07, 0x9c, 0x00, 0x0f, 0x1f, 0xfc, 0x1e, 0x1f, 0xfc, 0x3c, 0x00, 0x1c,\n 0x38, 0x00, 0x3c, 0x3f, 0xf8, 0x78, 0x3f, 0xf8, 0xf0, 0x00, 0x39, 0xe0,\n 0x00, 0x3b, 0xc0, 0x00, 0x3f, 0x80, 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00,\n 0x00, 0x7c, 0x00, 0x00, 0x78, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_script_run_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x0f, 0xe0, 0x00,\n 0x0f, 0xf8, 0x00, 0x0c, 0x7e, 0x00, 0x0c, 0x1f, 0x00, 0x0c, 0x0f, 0xc0,\n 0x0c, 0x03, 0xf0, 0x0c, 0x00, 0xf8, 0x0c, 0x00, 0x3c, 0x0c, 0x00, 0x1c,\n 0x0c, 0x00, 0x1c, 0x0c, 0x00, 0x3c, 0x0c, 0x00, 0xf8, 0x0c, 0x03, 0xf0,\n 0x0c, 0x0f, 0xc0, 0x0c, 0x1f, 0x00, 0x0c, 0x7e, 0x00, 0x0f, 0xf8, 0x00,\n 0x0f, 0xe0, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_scripts_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x18, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x07, 0x80, 0x00,\n 0x03, 0xc0, 0x00, 0x01, 0xe0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xe0, 0x00,\n 0x01, 0xc0, 0x00, 0x03, 0x80, 0x00, 0x07, 0x00, 0x00, 0x0e, 0x00, 0x00,\n 0x1c, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x1f, 0xf8,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_search_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x07, 0xff, 0x80,\n 0x0f, 0xcf, 0xc0, 0x1e, 0x01, 0xe0, 0x1c, 0x00, 0xe0, 0x38, 0x00, 0x70,\n 0x38, 0x00, 0x70, 0x38, 0x00, 0x70, 0x30, 0x00, 0x30, 0x30, 0x00, 0x30,\n 0x38, 0x00, 0x70, 0x38, 0x00, 0x70, 0x38, 0x00, 0x70, 0x1c, 0x00, 0xe0,\n 0x1e, 0x01, 0xe0, 0x0f, 0xcf, 0xe0, 0x07, 0xff, 0xf8, 0x01, 0xfe, 0x3c,\n 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_settings_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xff, 0x00,\n 0x04, 0xe7, 0x20, 0x1f, 0xe7, 0xf8, 0x3f, 0xc3, 0xfc, 0x3b, 0x00, 0xdc,\n 0x38, 0x7e, 0x1c, 0x38, 0xff, 0x1c, 0x3c, 0xe7, 0x3c, 0x1c, 0xe7, 0x38,\n 0x1c, 0xe7, 0x38, 0x3c, 0xe7, 0x3c, 0x38, 0xff, 0x1c, 0x38, 0x7e, 0x1c,\n 0x3b, 0x00, 0xdc, 0x3f, 0xc3, 0xfc, 0x1f, 0xe7, 0xf8, 0x04, 0xe7, 0x20,\n 0x00, 0xff, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_store_24_data[72] = {\n 0x00, 0x00, 0x00, 0x07, 0xff, 0xe0, 0x0f, 0xff, 0xf0, 0x1e, 0x00, 0x78,\n 0x3c, 0x00, 0x3c, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x30, 0x00, 0x0c,\n 0x30, 0x00, 0x0c, 0x31, 0x81, 0x8c, 0x31, 0x81, 0x8c, 0x31, 0xc3, 0x8c,\n 0x31, 0xe7, 0x8c, 0x30, 0xff, 0x0c, 0x30, 0x7e, 0x0c, 0x30, 0x00, 0x0c,\n 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c,\n 0x38, 0x00, 0x1c, 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_theme_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xfe,\n 0x00, 0x79, 0xce, 0x00, 0xff, 0x8e, 0x01, 0xff, 0x1c, 0x01, 0xc6, 0x38,\n 0x01, 0xe0, 0x70, 0x07, 0xf0, 0xe0, 0x1f, 0xb8, 0xe0, 0x7f, 0x1c, 0x70,\n 0x7c, 0x0e, 0x70, 0x78, 0x07, 0x70, 0x3e, 0x03, 0xf0, 0x1f, 0xe3, 0xe0,\n 0x1f, 0xff, 0xc0, 0x0f, 0xff, 0x80, 0x07, 0x8f, 0x00, 0x03, 0x9e, 0x00,\n 0x01, 0xfc, 0x00, 0x01, 0xf8, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_themes_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0x03, 0xff, 0xe0, 0x0f, 0xe7, 0xf0,\n 0x1f, 0x00, 0xf8, 0x1c, 0x0e, 0x3c, 0x39, 0xce, 0x1c, 0x39, 0xce, 0x0e,\n 0x71, 0xc0, 0x0e, 0x70, 0x00, 0xee, 0x70, 0x00, 0xe6, 0x67, 0x00, 0xe6,\n 0x67, 0x00, 0x0e, 0x77, 0x00, 0x0e, 0x70, 0x00, 0x3c, 0x70, 0x07, 0xfc,\n 0x38, 0x0f, 0xf0, 0x38, 0x0e, 0x00, 0x1c, 0x0e, 0x00, 0x1f, 0x0e, 0x00,\n 0x0f, 0xee, 0x00, 0x03, 0xfe, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_touch_24_data[72] = {\n 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, 0x00, 0x03, 0x86, 0x00,\n 0x03, 0x8e, 0x00, 0x01, 0x9e, 0x00, 0x78, 0x1c, 0x00, 0x7c, 0x00, 0x00,\n 0x3c, 0xf0, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xff, 0x80, 0x06, 0xef, 0xe0,\n 0x0e, 0x73, 0xfc, 0x1e, 0x70, 0x7c, 0x1c, 0x79, 0xfc, 0x00, 0x3b, 0xfc,\n 0x00, 0x3b, 0xc0, 0x00, 0x1f, 0x80, 0x00, 0x1f, 0x00, 0x00, 0x0f, 0x00,\n 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_vibration_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x1f, 0x80,\n 0x0f, 0x19, 0x80, 0x1f, 0x99, 0x80, 0x1f, 0x99, 0x80, 0x19, 0x99, 0x80,\n 0x19, 0x99, 0x80, 0x19, 0x99, 0x80, 0x19, 0x99, 0x8e, 0x39, 0x99, 0x9e,\n 0x79, 0x99, 0x9c, 0x71, 0x99, 0x98, 0x01, 0x99, 0x98, 0x01, 0x99, 0x98,\n 0x01, 0x99, 0x98, 0x01, 0x99, 0xf8, 0x01, 0x99, 0xf8, 0x01, 0x98, 0xf0,\n 0x01, 0xf8, 0x00, 0x01, 0xf8, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_watch_face_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x01, 0xc3, 0x80,\n 0x01, 0xc3, 0x80, 0x01, 0xff, 0x80, 0x01, 0xff, 0x80, 0x03, 0xe7, 0xc0,\n 0x03, 0x81, 0xc0, 0x07, 0x18, 0xe0, 0x07, 0x18, 0xe0, 0x06, 0x1c, 0x60,\n 0x06, 0x1e, 0x60, 0x07, 0x1e, 0xe0, 0x07, 0x04, 0xe0, 0x03, 0x81, 0xc0,\n 0x03, 0xe7, 0xc0, 0x01, 0xff, 0x80, 0x01, 0xff, 0x80, 0x01, 0xc3, 0x80,\n 0x01, 0xc3, 0x80, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_weather_24_data[72] = {\n 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x0c, 0x18, 0x30, 0x0e, 0x00, 0x70, 0x07, 0x00, 0xe0, 0x02, 0x7e, 0x40,\n 0x00, 0x7f, 0x00, 0x00, 0x67, 0x80, 0x00, 0x03, 0x80, 0x0f, 0xc1, 0x9e,\n 0x3f, 0xf1, 0x9e, 0x3c, 0xf1, 0x80, 0x70, 0x38, 0x00, 0x70, 0x3f, 0x00,\n 0x60, 0x1f, 0x80, 0x60, 0x03, 0x80, 0x70, 0x01, 0x80, 0x70, 0x01, 0x80,\n 0x3c, 0x03, 0x80, 0x3f, 0xff, 0x80, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst BeeOSIconAsset beeos_icons_24[] = {\n {"about", 24, 24, 3, beeos_icon_about_24_data, 72},\n {"apps", 24, 24, 3, beeos_icon_apps_24_data, 72},\n {"back", 24, 24, 3, beeos_icon_back_24_data, 72},\n {"battery", 24, 24, 3, beeos_icon_battery_24_data, 72},\n {"bluetooth", 24, 24, 3, beeos_icon_bluetooth_24_data, 72},\n {"clock", 24, 24, 3, beeos_icon_clock_24_data, 72},\n {"developer-tools", 24, 24, 3, beeos_icon_developer_tools_24_data, 72},\n {"display", 24, 24, 3, beeos_icon_display_24_data, 72},\n {"github", 24, 24, 3, beeos_icon_github_24_data, 72},\n {"gps", 24, 24, 3, beeos_icon_gps_24_data, 72},\n {"health", 24, 24, 3, beeos_icon_health_24_data, 72},\n {"hivestore", 24, 24, 3, beeos_icon_hivestore_24_data, 72},\n {"home", 24, 24, 3, beeos_icon_home_24_data, 72},\n {"install", 24, 24, 3, beeos_icon_install_24_data, 72},\n {"notifications", 24, 24, 3, beeos_icon_notifications_24_data, 72},\n {"package", 24, 24, 3, beeos_icon_package_24_data, 72},\n {"permissions", 24, 24, 3, beeos_icon_permissions_24_data, 72},\n {"plugin", 24, 24, 3, beeos_icon_plugin_24_data, 72},\n {"plugins", 24, 24, 3, beeos_icon_plugins_24_data, 72},\n {"quick-tools", 24, 24, 3, beeos_icon_quick_tools_24_data, 72},\n {"remove", 24, 24, 3, beeos_icon_remove_24_data, 72},\n {"resource-monitor", 24, 24, 3, beeos_icon_resource_monitor_24_data, 72},\n {"retro-clock", 24, 24, 3, beeos_icon_retro_clock_24_data, 72},\n {"runtime", 24, 24, 3, beeos_icon_runtime_24_data, 72},\n {"script-run", 24, 24, 3, beeos_icon_script_run_24_data, 72},\n {"scripts", 24, 24, 3, beeos_icon_scripts_24_data, 72},\n {"search", 24, 24, 3, beeos_icon_search_24_data, 72},\n {"settings", 24, 24, 3, beeos_icon_settings_24_data, 72},\n {"store", 24, 24, 3, beeos_icon_store_24_data, 72},\n {"theme", 24, 24, 3, beeos_icon_theme_24_data, 72},\n {"themes", 24, 24, 3, beeos_icon_themes_24_data, 72},\n {"touch", 24, 24, 3, beeos_icon_touch_24_data, 72},\n {"vibration", 24, 24, 3, beeos_icon_vibration_24_data, 72},\n {"watch-face", 24, 24, 3, beeos_icon_watch_face_24_data, 72},\n {"weather", 24, 24, 3, beeos_icon_weather_24_data, 72},\n};\n\nconst uint32_t beeos_icons_24_count = 35;\n \ No newline at end of file diff --git a/beeos/generated/icons/lvgl/beeos_icons_24.h b/beeos/generated/icons/lvgl/beeos_icons_24.h new file mode 100644 index 0000000..c7e831c --- /dev/null +++ b/beeos/generated/icons/lvgl/beeos_icons_24.h @@ -0,0 +1 @@ +/* Auto-generated BeeOS icon declarations. */\n#pragma once\n\n#include \n\ntypedef struct BeeOSIconAsset {\n const char *name;\n uint16_t width;\n uint16_t height;\n uint16_t stride;\n const uint8_t *data;\n uint32_t data_len;\n} BeeOSIconAsset;\n\nextern const uint8_t beeos_icon_about_24_data[72];\nextern const uint8_t beeos_icon_apps_24_data[72];\nextern const uint8_t beeos_icon_back_24_data[72];\nextern const uint8_t beeos_icon_battery_24_data[72];\nextern const uint8_t beeos_icon_bluetooth_24_data[72];\nextern const uint8_t beeos_icon_clock_24_data[72];\nextern const uint8_t beeos_icon_developer_tools_24_data[72];\nextern const uint8_t beeos_icon_display_24_data[72];\nextern const uint8_t beeos_icon_github_24_data[72];\nextern const uint8_t beeos_icon_gps_24_data[72];\nextern const uint8_t beeos_icon_health_24_data[72];\nextern const uint8_t beeos_icon_hivestore_24_data[72];\nextern const uint8_t beeos_icon_home_24_data[72];\nextern const uint8_t beeos_icon_install_24_data[72];\nextern const uint8_t beeos_icon_notifications_24_data[72];\nextern const uint8_t beeos_icon_package_24_data[72];\nextern const uint8_t beeos_icon_permissions_24_data[72];\nextern const uint8_t beeos_icon_plugin_24_data[72];\nextern const uint8_t beeos_icon_plugins_24_data[72];\nextern const uint8_t beeos_icon_quick_tools_24_data[72];\nextern const uint8_t beeos_icon_remove_24_data[72];\nextern const uint8_t beeos_icon_resource_monitor_24_data[72];\nextern const uint8_t beeos_icon_retro_clock_24_data[72];\nextern const uint8_t beeos_icon_runtime_24_data[72];\nextern const uint8_t beeos_icon_script_run_24_data[72];\nextern const uint8_t beeos_icon_scripts_24_data[72];\nextern const uint8_t beeos_icon_search_24_data[72];\nextern const uint8_t beeos_icon_settings_24_data[72];\nextern const uint8_t beeos_icon_store_24_data[72];\nextern const uint8_t beeos_icon_theme_24_data[72];\nextern const uint8_t beeos_icon_themes_24_data[72];\nextern const uint8_t beeos_icon_touch_24_data[72];\nextern const uint8_t beeos_icon_vibration_24_data[72];\nextern const uint8_t beeos_icon_watch_face_24_data[72];\nextern const uint8_t beeos_icon_weather_24_data[72];\n\nextern const BeeOSIconAsset beeos_icons_24[];\nextern const uint32_t beeos_icons_24_count;\n \ No newline at end of file diff --git a/beeos/generated/icons/lvgl/beeos_icons_34.c b/beeos/generated/icons/lvgl/beeos_icons_34.c new file mode 100644 index 0000000..49a0c76 --- /dev/null +++ b/beeos/generated/icons/lvgl/beeos_icons_34.c @@ -0,0 +1 @@ +/* Auto-generated BeeOS 1-bit icon data. */\n\n#include "beeos_icons_34.h"\n\nconst uint8_t beeos_icon_about_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xe0,\n 0x00, 0x03, 0xf8, 0x07, 0xf0, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x0f,\n 0x80, 0x00, 0x7c, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x1e, 0x00, 0x00,\n 0x1e, 0x00, 0x3e, 0x01, 0xe0, 0x1f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x00, 0xc0, 0x0f, 0x00, 0x78, 0x00, 0x00, 0x07, 0x80, 0x78, 0x00,\n 0x00, 0x07, 0x80, 0x78, 0x00, 0xc0, 0x07, 0x80, 0x78, 0x01, 0xe0, 0x07,\n 0x80, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78,\n 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3e, 0x01, 0xe0, 0x1f, 0x00,\n 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x0f, 0x80,\n 0x00, 0x7c, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x03, 0xf8, 0x07, 0xf0,\n 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_apps_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,\n 0xff, 0xe0, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xfe,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x1c, 0x01, 0xe0, 0x0e, 0x00, 0x3c,\n 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01,\n 0xe0, 0x0f, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff,\n 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x3c,\n 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01,\n 0xe0, 0x0f, 0x00, 0x1c, 0x01, 0xe0, 0x0e, 0x00, 0x1f, 0xff, 0xff, 0xfe,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x01,\n 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_back_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x3e,\n 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,\n 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x07,\n 0xc0, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,\n 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00,\n 0x07, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xf0,\n 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00,\n 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,\n 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_battery_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,\n 0xff, 0xff, 0x80, 0x00, 0x3f, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xff, 0xff,\n 0xe0, 0x00, 0x78, 0x00, 0x01, 0xe0, 0x00, 0x78, 0x00, 0x00, 0xe0, 0x00,\n 0x78, 0x00, 0x00, 0xe1, 0x00, 0x78, 0x00, 0x00, 0xe3, 0x80, 0x78, 0x00,\n 0x00, 0xe7, 0x80, 0x78, 0x00, 0x00, 0xe7, 0x80, 0x78, 0x00, 0x00, 0xe7,\n 0x80, 0x78, 0x00, 0x00, 0xe7, 0x80, 0x78, 0x00, 0x00, 0xe7, 0x80, 0x78,\n 0x00, 0x00, 0xe7, 0x80, 0x78, 0x00, 0x00, 0xe3, 0x80, 0x78, 0x00, 0x00,\n 0xe1, 0x00, 0x78, 0x00, 0x00, 0xe0, 0x00, 0x78, 0x00, 0x01, 0xe0, 0x00,\n 0x7f, 0xff, 0xff, 0xe0, 0x00, 0x3f, 0xff, 0xff, 0xc0, 0x00, 0x1f, 0xff,\n 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_bluetooth_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01,\n 0xe0, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00,\n 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00,\n 0x01, 0xff, 0x00, 0x00, 0x00, 0x61, 0xef, 0x80, 0x00, 0x00, 0xf1, 0xe7,\n 0xc0, 0x00, 0x00, 0xf9, 0xe7, 0xc0, 0x00, 0x00, 0x7d, 0xef, 0x80, 0x00,\n 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x0f,\n 0xfc, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00,\n 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00,\n 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x3f, 0xff,\n 0x00, 0x00, 0x00, 0x7d, 0xef, 0x80, 0x00, 0x00, 0xf9, 0xe7, 0xc0, 0x00,\n 0x00, 0xf1, 0xe7, 0xc0, 0x00, 0x00, 0x61, 0xef, 0x80, 0x00, 0x00, 0x01,\n 0xff, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00,\n 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00,\n 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_clock_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xe0,\n 0x00, 0x03, 0xf8, 0x07, 0xf0, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x0f,\n 0x80, 0xc0, 0x7c, 0x00, 0x0f, 0x01, 0xe0, 0x3c, 0x00, 0x1e, 0x01, 0xe0,\n 0x1e, 0x00, 0x3e, 0x01, 0xe0, 0x1f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01,\n 0xe0, 0x07, 0x80, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01, 0xf0, 0x07,\n 0x80, 0x78, 0x01, 0xfc, 0x07, 0x80, 0x78, 0x00, 0xff, 0x07, 0x80, 0x78,\n 0x00, 0x3f, 0x07, 0x80, 0x78, 0x00, 0x0f, 0x07, 0x80, 0x3c, 0x00, 0x02,\n 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3e, 0x00, 0x00, 0x1f, 0x00,\n 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x0f, 0x80,\n 0x00, 0x7c, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x03, 0xf8, 0x07, 0xf0,\n 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_developer_tools_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00,\n 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,\n 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x78,\n 0x00, 0x00, 0x01, 0xc0, 0x78, 0xe0, 0x00, 0x03, 0xc0, 0x78, 0xf0, 0x00,\n 0x07, 0xc0, 0x70, 0xf8, 0x00, 0x0f, 0x80, 0xf0, 0x7c, 0x00, 0x1f, 0x00,\n 0xf0, 0x3e, 0x00, 0x3e, 0x00, 0xe0, 0x1f, 0x00, 0x7c, 0x01, 0xe0, 0x0f,\n 0x80, 0x7c, 0x01, 0xe0, 0x0f, 0x80, 0x3e, 0x01, 0xc0, 0x1f, 0x00, 0x1f,\n 0x03, 0xc0, 0x3e, 0x00, 0x0f, 0x83, 0xc0, 0x7c, 0x00, 0x07, 0xc3, 0x80,\n 0xf8, 0x00, 0x03, 0xc7, 0x80, 0xf0, 0x00, 0x01, 0xc7, 0x80, 0xe0, 0x00,\n 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x0f,\n 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,\n 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_display_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01,\n 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x03, 0x01, 0xe0, 0x30, 0x00, 0x07, 0x81, 0xe0, 0x78, 0x00, 0x07,\n 0xc0, 0x00, 0xf8, 0x00, 0x03, 0xe0, 0x01, 0xf0, 0x00, 0x01, 0xe0, 0x01,\n 0xe0, 0x00, 0x00, 0xc7, 0xf8, 0xc0, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00,\n 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, 0x3c,\n 0x0f, 0x00, 0x00, 0x3e, 0x38, 0x07, 0x1f, 0x00, 0x7e, 0x38, 0x07, 0x1f,\n 0x80, 0x7e, 0x38, 0x07, 0x1f, 0x80, 0x3e, 0x38, 0x07, 0x1f, 0x00, 0x00,\n 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0xfe,\n 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0xc7, 0xf8, 0xc0, 0x00,\n 0x01, 0xe0, 0x01, 0xe0, 0x00, 0x03, 0xe0, 0x01, 0xf0, 0x00, 0x07, 0xc0,\n 0x00, 0xf8, 0x00, 0x07, 0x81, 0xe0, 0x78, 0x00, 0x03, 0x01, 0xe0, 0x30,\n 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00,\n 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_github_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,\n 0x00, 0x40, 0x00, 0x01, 0xc0, 0x03, 0xf8, 0x00, 0x01, 0xc0, 0x07, 0xfc,\n 0x00, 0x01, 0xc0, 0x0f, 0xfe, 0x00, 0x01, 0xc0, 0x0f, 0x1e, 0x00, 0x01,\n 0xc0, 0xfe, 0x0e, 0x00, 0x01, 0xc3, 0xfe, 0x0f, 0x00, 0x01, 0xc7, 0xfe,\n 0x0e, 0x00, 0x01, 0xdf, 0xef, 0x1e, 0x00, 0x01, 0xff, 0x0f, 0xfe, 0x00,\n 0x01, 0xfe, 0x07, 0xfc, 0x00, 0x01, 0xfc, 0x03, 0xf8, 0x00, 0x01, 0xf8,\n 0x00, 0x40, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00,\n 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01,\n 0xc0, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00,\n 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00, 0x1e, 0x3c, 0x00, 0x00, 0x00,\n 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x00, 0x1c, 0x1c,\n 0x00, 0x00, 0x00, 0x1e, 0x3c, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00,\n 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00,\n 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_gps_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01,\n 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, 0xfc, 0x0f,\n 0xc0, 0x00, 0x01, 0xf0, 0x03, 0xe0, 0x00, 0x01, 0xe3, 0xf1, 0xe0, 0x00,\n 0x03, 0xc7, 0xf8, 0xf0, 0x00, 0x03, 0xcf, 0xfc, 0xf0, 0x00, 0x03, 0x9f,\n 0xfe, 0x70, 0x00, 0x3f, 0x9e, 0x1e, 0x7f, 0x00, 0x7f, 0x9e, 0x1e, 0x7f,\n 0x80, 0x7f, 0x9e, 0x1e, 0x7f, 0x80, 0x3f, 0x9e, 0x1e, 0x7f, 0x00, 0x03,\n 0x9f, 0xfe, 0x70, 0x00, 0x03, 0xcf, 0xfc, 0xf0, 0x00, 0x03, 0xc7, 0xf8,\n 0xf0, 0x00, 0x01, 0xe3, 0xf1, 0xe0, 0x00, 0x01, 0xf0, 0x03, 0xe0, 0x00,\n 0x00, 0xfc, 0x0f, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00,\n 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_health_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x0f, 0xe0,\n 0x00, 0x07, 0xff, 0x3f, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x1f,\n 0xdf, 0xfe, 0xfe, 0x00, 0x3e, 0x03, 0xf0, 0x1f, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x78, 0x00, 0x00, 0x07, 0x80, 0x78, 0x00, 0x00, 0x07, 0x80,\n 0x78, 0x00, 0x38, 0x07, 0x80, 0x78, 0x00, 0x3c, 0x07, 0x80, 0x78, 0x00,\n 0x3c, 0x07, 0x80, 0x78, 0x06, 0x7e, 0x07, 0x80, 0x3c, 0x0f, 0x7e, 0x0f,\n 0x00, 0x3f, 0xff, 0x7f, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x1f,\n 0xff, 0xf7, 0xfe, 0x00, 0x0f, 0x83, 0xf0, 0x7c, 0x00, 0x07, 0xc3, 0xe0,\n 0xf8, 0x00, 0x03, 0xe1, 0xe1, 0xf0, 0x00, 0x01, 0xf1, 0xe3, 0xe0, 0x00,\n 0x00, 0xf8, 0xc7, 0xc0, 0x00, 0x00, 0x7c, 0x0f, 0x80, 0x00, 0x00, 0x3e,\n 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x3e, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00,\n 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00,\n 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_hivestore_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff,\n 0xff, 0xe0, 0x00, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xf8,\n 0x00, 0x0f, 0x80, 0x00, 0x7c, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x1f,\n 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff,\n 0xff, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x10, 0x02, 0x0f, 0x00, 0x3c, 0x38, 0x07, 0x0f, 0x00, 0x3c, 0x38,\n 0x07, 0x0f, 0x00, 0x3c, 0x38, 0x07, 0x0f, 0x00, 0x3c, 0x3c, 0x0f, 0x0f,\n 0x00, 0x3c, 0x3e, 0x1f, 0x0f, 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c,\n 0x0f, 0xfc, 0x0f, 0x00, 0x3c, 0x07, 0xf8, 0x0f, 0x00, 0x3c, 0x00, 0xc0,\n 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00,\n 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f,\n 0xff, 0xff, 0xfc, 0x00, 0x07, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_home_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x03,\n 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00,\n 0x00, 0x00, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x7c, 0x0f, 0x80, 0x00, 0x00,\n 0xf8, 0x07, 0xc0, 0x00, 0x01, 0xf0, 0x03, 0xe0, 0x00, 0x07, 0xe0, 0x01,\n 0xf8, 0x00, 0x0f, 0xc0, 0x00, 0xfc, 0x00, 0x1f, 0x80, 0x00, 0x7e, 0x00,\n 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00,\n 0x00, 0x0f, 0x00, 0x3c, 0x07, 0xf8, 0x0f, 0x00, 0x3c, 0x0f, 0xfc, 0x0f,\n 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c,\n 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e,\n 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00,\n 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e,\n 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x1f, 0xff, 0xff, 0xfe,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x03,\n 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_install_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00,\n 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0,\n 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00,\n 0x00, 0x61, 0xe1, 0x80, 0x00, 0x00, 0xf1, 0xe3, 0xc0, 0x00, 0x00, 0xf9,\n 0xe7, 0xc0, 0x00, 0x00, 0x7d, 0xef, 0x80, 0x00, 0x00, 0x3f, 0xff, 0x00,\n 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x08,\n 0x07, 0xf8, 0x04, 0x00, 0x1c, 0x03, 0xf0, 0x0e, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x00, 0xc0, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00,\n 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x1f, 0xff, 0xff, 0xfe,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x03,\n 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_notifications_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x0f,\n 0xfc, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x80,\n 0x00, 0x00, 0xfc, 0x0f, 0xc0, 0x00, 0x00, 0xf0, 0x03, 0xc0, 0x00, 0x01,\n 0xf0, 0x03, 0xe0, 0x00, 0x01, 0xe0, 0x01, 0xe0, 0x00, 0x01, 0xe0, 0x01,\n 0xe0, 0x00, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0x01, 0xc0, 0x00, 0xe0, 0x00,\n 0x01, 0xc0, 0x00, 0xe0, 0x00, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0x03, 0xc0,\n 0x00, 0xf0, 0x00, 0x03, 0xc0, 0x00, 0xf0, 0x00, 0x03, 0xc0, 0x00, 0xf0,\n 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x0f,\n 0x80, 0x00, 0x7c, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x1e, 0x00, 0x00,\n 0x1e, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00,\n 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x38, 0x00,\n 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00,\n 0x03, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_package_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x07,\n 0xf8, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00,\n 0x00, 0x00, 0xfe, 0x1f, 0xc0, 0x00, 0x03, 0xfe, 0x07, 0xf0, 0x00, 0x0f,\n 0xff, 0x83, 0xfc, 0x00, 0x1f, 0xdf, 0xe0, 0xfe, 0x00, 0x1f, 0x07, 0xf0,\n 0x3e, 0x00, 0x1f, 0x81, 0xfc, 0x7e, 0x00, 0x3f, 0xe0, 0x7f, 0xff, 0x00,\n 0x3f, 0xf8, 0x3f, 0xff, 0x00, 0x3d, 0xfe, 0x1f, 0xef, 0x00, 0x3c, 0x7f,\n 0x3f, 0x8f, 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c, 0x0f, 0xfc, 0x0f,\n 0x00, 0x3c, 0x03, 0xf0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c,\n 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x1e, 0x01, 0xe0, 0x1e, 0x00,\n 0x1f, 0x01, 0xe0, 0x3e, 0x00, 0x1f, 0xc1, 0xe0, 0xfe, 0x00, 0x0f, 0xf1,\n 0xe3, 0xfc, 0x00, 0x03, 0xf9, 0xe7, 0xf0, 0x00, 0x00, 0xff, 0xff, 0xc0,\n 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00,\n 0x07, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_permissions_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x03,\n 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00,\n 0x00, 0x03, 0xff, 0x3f, 0xf0, 0x00, 0x07, 0xfc, 0x0f, 0xf8, 0x00, 0x0f,\n 0xf8, 0x07, 0xfc, 0x00, 0x0f, 0xc0, 0x00, 0xfc, 0x00, 0x0e, 0x00, 0x00,\n 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00,\n 0x0e, 0x00, 0x04, 0x1c, 0x00, 0x0e, 0x00, 0x1e, 0x1c, 0x00, 0x0e, 0x00,\n 0x3e, 0x1c, 0x00, 0x0e, 0x0c, 0x7c, 0x1c, 0x00, 0x0e, 0x1e, 0xf8, 0x1c,\n 0x00, 0x0e, 0x1f, 0xf0, 0x1c, 0x00, 0x0e, 0x0f, 0xe0, 0x1c, 0x00, 0x0f,\n 0x07, 0xc0, 0x3c, 0x00, 0x0f, 0x03, 0x80, 0x3c, 0x00, 0x0f, 0x01, 0x00,\n 0x3c, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00,\n 0x07, 0x80, 0x00, 0x78, 0x00, 0x03, 0xc0, 0x00, 0xf0, 0x00, 0x03, 0xe0,\n 0x01, 0xf0, 0x00, 0x01, 0xf8, 0x07, 0xe0, 0x00, 0x00, 0xfe, 0x1f, 0xc0,\n 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00,\n 0x07, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_plugin_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x7c, 0x00, 0x00, 0x07,\n 0xf8, 0xfe, 0x00, 0x00, 0x0f, 0xfd, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xff,\n 0x80, 0x00, 0x3e, 0x1f, 0xc7, 0x80, 0x00, 0x3c, 0x0f, 0xc7, 0x80, 0x00,\n 0x3e, 0x07, 0x87, 0x80, 0x00, 0x3f, 0x00, 0x1f, 0x80, 0x00, 0x1f, 0x80,\n 0x3f, 0x00, 0x07, 0x87, 0x80, 0x3e, 0x00, 0x0f, 0xc3, 0x80, 0x3c, 0x00,\n 0x1f, 0xc3, 0x80, 0x3e, 0x00, 0x3f, 0xe7, 0x80, 0x1f, 0x00, 0x3d, 0xff,\n 0x80, 0x0f, 0x00, 0x78, 0xff, 0x00, 0x07, 0x80, 0x78, 0x7e, 0x00, 0x07,\n 0x80, 0x78, 0x00, 0x1f, 0x87, 0x80, 0x78, 0x00, 0x3f, 0xc7, 0x80, 0x3c,\n 0x00, 0x7f, 0xef, 0x00, 0x3e, 0x00, 0x79, 0xff, 0x00, 0x1f, 0x00, 0x70,\n 0xfe, 0x00, 0x0f, 0x00, 0x70, 0xfc, 0x00, 0x1f, 0x00, 0x78, 0x78, 0x00,\n 0x3f, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x3f, 0x00, 0x00, 0x78, 0x78,\n 0x1f, 0x00, 0x00, 0x78, 0xfc, 0x0f, 0x00, 0x00, 0x78, 0xfe, 0x1f, 0x00,\n 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xef, 0xfc, 0x00, 0x00, 0x1f,\n 0xc7, 0xf8, 0x00, 0x00, 0x0f, 0x81, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_plugins_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x7c, 0x00, 0x00, 0x07,\n 0xf8, 0xfe, 0x00, 0x00, 0x0f, 0xfd, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xff,\n 0x80, 0x00, 0x3e, 0x1f, 0xc7, 0x80, 0x00, 0x3c, 0x0f, 0xc7, 0x80, 0x00,\n 0x3e, 0x07, 0x87, 0x80, 0x00, 0x3f, 0x00, 0x1f, 0x80, 0x00, 0x1f, 0x80,\n 0x3f, 0x00, 0x07, 0x87, 0x80, 0x3e, 0x00, 0x0f, 0xc3, 0x80, 0x3c, 0x00,\n 0x1f, 0xc3, 0x80, 0x3e, 0x00, 0x3f, 0xe7, 0x80, 0x1f, 0x00, 0x3d, 0xff,\n 0x80, 0x0f, 0x00, 0x78, 0xff, 0x00, 0x07, 0x80, 0x78, 0x7e, 0x00, 0x07,\n 0x80, 0x78, 0x00, 0x1f, 0x87, 0x80, 0x78, 0x00, 0x3f, 0xc7, 0x80, 0x3c,\n 0x00, 0x7f, 0xef, 0x00, 0x3e, 0x00, 0x79, 0xff, 0x00, 0x1f, 0x00, 0x70,\n 0xfe, 0x00, 0x0f, 0x00, 0x70, 0xfc, 0x00, 0x1f, 0x00, 0x78, 0x78, 0x00,\n 0x3f, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x3f, 0x00, 0x00, 0x78, 0x78,\n 0x1f, 0x00, 0x00, 0x78, 0xfc, 0x0f, 0x00, 0x00, 0x78, 0xfe, 0x1f, 0x00,\n 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xef, 0xfc, 0x00, 0x00, 0x1f,\n 0xc7, 0xf8, 0x00, 0x00, 0x0f, 0x81, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_quick_tools_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00,\n 0x7f, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xe0,\n 0x00, 0x00, 0x03, 0xe3, 0xe0, 0x00, 0x00, 0x03, 0xc7, 0xc0, 0x00, 0x00,\n 0x07, 0x8f, 0x8f, 0x00, 0x00, 0x07, 0x9f, 0x1f, 0x80, 0x00, 0x07, 0x1e,\n 0x3f, 0x80, 0x00, 0x0f, 0x1e, 0x7f, 0x80, 0x00, 0x0f, 0x1f, 0xff, 0x80,\n 0x00, 0x0f, 0x0f, 0xf7, 0x80, 0x00, 0x07, 0x07, 0xe7, 0x80, 0x00, 0x07,\n 0x83, 0xc7, 0x00, 0x00, 0x0f, 0x80, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x1f,\n 0x00, 0x00, 0x3e, 0x30, 0x7e, 0x00, 0x00, 0x7c, 0x7f, 0xfc, 0x00, 0x00,\n 0xf8, 0xff, 0xf8, 0x00, 0x01, 0xf1, 0xff, 0xe0, 0x00, 0x03, 0xe3, 0xe7,\n 0x00, 0x00, 0x07, 0xc7, 0xc0, 0x00, 0x00, 0x0f, 0x8f, 0x80, 0x00, 0x00,\n 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, 0x00, 0x7c, 0x7c,\n 0x00, 0x00, 0x00, 0x78, 0xf8, 0x00, 0x00, 0x00, 0x79, 0xf0, 0x00, 0x00,\n 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x3f,\n 0x80, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_remove_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x1f,\n 0xfe, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00,\n 0x00, 0x00, 0x38, 0x07, 0x00, 0x00, 0x00, 0x38, 0x07, 0x00, 0x00, 0x1f,\n 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff,\n 0xfe, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00,\n 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x87,\n 0x38, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78,\n 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07,\n 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c,\n 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00,\n 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x86, 0x18, 0x78, 0x00, 0x07, 0x80,\n 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78,\n 0x00, 0x07, 0xff, 0xff, 0xf8, 0x00, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x01,\n 0xff, 0xff, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_resource_monitor_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1e,\n 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00,\n 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00,\n 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x77, 0x80,\n 0x00, 0x00, 0x00, 0xf7, 0x80, 0x00, 0x00, 0x00, 0xf3, 0x80, 0x00, 0x00,\n 0x00, 0xf3, 0xc0, 0x00, 0x00, 0x00, 0xe3, 0xc0, 0x00, 0x00, 0x01, 0xe3,\n 0xc0, 0x00, 0x00, 0x3f, 0xe1, 0xc0, 0x3f, 0x00, 0x7f, 0xc1, 0xe0, 0xff,\n 0x80, 0x7f, 0xc1, 0xe0, 0xff, 0x80, 0x3f, 0x00, 0xe1, 0xff, 0x00, 0x00,\n 0x00, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0xf1, 0xc0, 0x00, 0x00, 0x00, 0xf3,\n 0xc0, 0x00, 0x00, 0x00, 0x73, 0xc0, 0x00, 0x00, 0x00, 0x7b, 0xc0, 0x00,\n 0x00, 0x00, 0x7b, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00,\n 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00,\n 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,\n 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_retro_clock_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xe0,\n 0x00, 0x03, 0xf8, 0x07, 0xf0, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x0f,\n 0x80, 0xc0, 0x7c, 0x00, 0x0f, 0x01, 0xe0, 0x3c, 0x00, 0x1e, 0x01, 0xe0,\n 0x1e, 0x00, 0x3e, 0x01, 0xe0, 0x1f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01,\n 0xe0, 0x07, 0x80, 0x78, 0x01, 0xff, 0x07, 0x80, 0x78, 0x01, 0xff, 0x07,\n 0x80, 0x78, 0x01, 0xff, 0x07, 0x80, 0x78, 0x00, 0xff, 0x07, 0x80, 0x78,\n 0x00, 0x00, 0x07, 0x80, 0x78, 0x00, 0x00, 0x07, 0x80, 0x3c, 0x00, 0x00,\n 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3e, 0x00, 0x00, 0x1f, 0x00,\n 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x0f, 0x80,\n 0x00, 0x7c, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x03, 0xf8, 0x07, 0xf0,\n 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_runtime_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,\n 0x78, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00,\n 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00,\n 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x3e, 0xf0,\n 0x00, 0x00, 0x00, 0x7c, 0xf0, 0x00, 0x00, 0x00, 0xf9, 0xe0, 0x00, 0x00,\n 0x01, 0xf1, 0xff, 0xf8, 0x00, 0x03, 0xe1, 0xff, 0xfe, 0x00, 0x07, 0xc0,\n 0xff, 0xfe, 0x00, 0x0f, 0x80, 0x7f, 0xff, 0x00, 0x1f, 0x00, 0x00, 0x1e,\n 0x00, 0x1e, 0x00, 0x00, 0x3e, 0x00, 0x3f, 0xff, 0x80, 0x7c, 0x00, 0x1f,\n 0xff, 0xc0, 0xf8, 0x00, 0x1f, 0xff, 0xe1, 0xf0, 0x00, 0x07, 0xff, 0xe3,\n 0xe0, 0x00, 0x00, 0x01, 0xe7, 0xc0, 0x00, 0x00, 0x03, 0xcf, 0x80, 0x00,\n 0x00, 0x03, 0xdf, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x03,\n 0xfc, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00,\n 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00,\n 0x07, 0x80, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_script_run_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,\n 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00,\n 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x07, 0x9f, 0xc0, 0x00, 0x00, 0x07,\n 0x87, 0xf0, 0x00, 0x00, 0x07, 0x83, 0xfc, 0x00, 0x00, 0x07, 0x80, 0xfe,\n 0x00, 0x00, 0x07, 0x80, 0x3f, 0x80, 0x00, 0x07, 0x80, 0x0f, 0xe0, 0x00,\n 0x07, 0x80, 0x07, 0xf0, 0x00, 0x07, 0x80, 0x01, 0xfc, 0x00, 0x07, 0x80,\n 0x00, 0x7e, 0x00, 0x07, 0x80, 0x00, 0x3e, 0x00, 0x07, 0x80, 0x00, 0x0f,\n 0x00, 0x07, 0x80, 0x00, 0x0f, 0x00, 0x07, 0x80, 0x00, 0x3e, 0x00, 0x07,\n 0x80, 0x00, 0x7e, 0x00, 0x07, 0x80, 0x01, 0xfc, 0x00, 0x07, 0x80, 0x07,\n 0xf0, 0x00, 0x07, 0x80, 0x0f, 0xe0, 0x00, 0x07, 0x80, 0x3f, 0x80, 0x00,\n 0x07, 0x80, 0xfe, 0x00, 0x00, 0x07, 0x83, 0xfc, 0x00, 0x00, 0x07, 0x87,\n 0xf0, 0x00, 0x00, 0x07, 0x9f, 0xc0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00,\n 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00,\n 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_scripts_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x0f,\n 0x80, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00,\n 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,\n 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f,\n 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,\n 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00,\n 0xf8, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00,\n 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00,\n 0x0f, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x01,\n 0xff, 0xfc, 0x00, 0x00, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x00, 0xff, 0xf8,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_search_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,\n 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00,\n 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0x03, 0xf8, 0x3f, 0x80, 0x00, 0x07,\n 0xe0, 0x07, 0xc0, 0x00, 0x07, 0x80, 0x03, 0xe0, 0x00, 0x0f, 0x00, 0x01,\n 0xe0, 0x00, 0x1f, 0x00, 0x00, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0xf0, 0x00,\n 0x1e, 0x00, 0x00, 0x70, 0x00, 0x1c, 0x00, 0x00, 0x78, 0x00, 0x1c, 0x00,\n 0x00, 0x78, 0x00, 0x3c, 0x00, 0x00, 0x78, 0x00, 0x1c, 0x00, 0x00, 0x78,\n 0x00, 0x1c, 0x00, 0x00, 0x78, 0x00, 0x1e, 0x00, 0x00, 0x70, 0x00, 0x1e,\n 0x00, 0x00, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0xf0, 0x00, 0x0f, 0x00, 0x01,\n 0xe0, 0x00, 0x0f, 0x80, 0x03, 0xe0, 0x00, 0x07, 0xc0, 0x07, 0xc0, 0x00,\n 0x03, 0xf0, 0x1f, 0xe0, 0x00, 0x01, 0xff, 0xff, 0xf0, 0x00, 0x00, 0xff,\n 0xfe, 0xf8, 0x00, 0x00, 0x3f, 0xf8, 0x7c, 0x00, 0x00, 0x07, 0xc0, 0x3e,\n 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_settings_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x07,\n 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00,\n 0x00, 0x00, 0x0f, 0x3c, 0x00, 0x00, 0x01, 0x0e, 0x1c, 0x20, 0x00, 0x07,\n 0xfe, 0x1f, 0xf8, 0x00, 0x0f, 0xfe, 0x1f, 0xfc, 0x00, 0x1f, 0xfc, 0x0f,\n 0xfe, 0x00, 0x1e, 0x70, 0x03, 0x9e, 0x00, 0x3c, 0x03, 0xf0, 0x0e, 0x00,\n 0x1c, 0x07, 0xf8, 0x0e, 0x00, 0x1f, 0x0f, 0xfc, 0x3e, 0x00, 0x1f, 0x1f,\n 0xfe, 0x3e, 0x00, 0x0f, 0x9e, 0x1e, 0x7c, 0x00, 0x07, 0x9e, 0x1e, 0x78,\n 0x00, 0x07, 0x9e, 0x1e, 0x78, 0x00, 0x0f, 0x9e, 0x1e, 0x7c, 0x00, 0x1f,\n 0x1f, 0xfe, 0x3e, 0x00, 0x1f, 0x0f, 0xfc, 0x3e, 0x00, 0x1c, 0x07, 0xf8,\n 0x0e, 0x00, 0x3c, 0x03, 0xf0, 0x0e, 0x00, 0x1e, 0x70, 0x03, 0x9e, 0x00,\n 0x1f, 0xfc, 0x0f, 0xfe, 0x00, 0x0f, 0xfe, 0x1f, 0xfc, 0x00, 0x07, 0xfe,\n 0x1f, 0xf8, 0x00, 0x01, 0x0e, 0x1c, 0x20, 0x00, 0x00, 0x0f, 0x3c, 0x00,\n 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00,\n 0x07, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_store_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff,\n 0xff, 0xe0, 0x00, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xf8,\n 0x00, 0x0f, 0x80, 0x00, 0x7c, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x1f,\n 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff,\n 0xff, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x10, 0x02, 0x0f, 0x00, 0x3c, 0x38, 0x07, 0x0f, 0x00, 0x3c, 0x38,\n 0x07, 0x0f, 0x00, 0x3c, 0x38, 0x07, 0x0f, 0x00, 0x3c, 0x3c, 0x0f, 0x0f,\n 0x00, 0x3c, 0x3e, 0x1f, 0x0f, 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c,\n 0x0f, 0xfc, 0x0f, 0x00, 0x3c, 0x07, 0xf8, 0x0f, 0x00, 0x3c, 0x00, 0xc0,\n 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00,\n 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f,\n 0xff, 0xff, 0xfc, 0x00, 0x07, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_theme_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,\n 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0xff,\n 0x80, 0x00, 0x03, 0x83, 0xe7, 0x80, 0x00, 0x0f, 0xe7, 0xc7, 0x80, 0x00,\n 0x1f, 0xff, 0x8f, 0x80, 0x00, 0x3f, 0xff, 0x1f, 0x00, 0x00, 0x3c, 0x7e,\n 0x3e, 0x00, 0x00, 0x3e, 0x3c, 0x7c, 0x00, 0x00, 0x3e, 0x00, 0xf8, 0x00,\n 0x00, 0x7f, 0x01, 0xf0, 0x00, 0x00, 0xff, 0x81, 0xe0, 0x00, 0x03, 0xff,\n 0xc1, 0xe0, 0x00, 0x3f, 0xe3, 0xe1, 0xf0, 0x00, 0x7f, 0xc1, 0xf0, 0xf0,\n 0x00, 0x7f, 0x00, 0xf8, 0x78, 0x00, 0x7c, 0x00, 0x7c, 0x78, 0x00, 0x3e,\n 0x00, 0x3f, 0x78, 0x00, 0x1f, 0xc0, 0x1f, 0xf0, 0x00, 0x1f, 0xf8, 0x0f,\n 0xf0, 0x00, 0x0f, 0xff, 0x8f, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xc0, 0x00,\n 0x03, 0xff, 0xfe, 0x00, 0x00, 0x01, 0xe3, 0xfe, 0x00, 0x00, 0x00, 0xf0,\n 0x7c, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x7d, 0xf0, 0x00,\n 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x00,\n 0x0f, 0x80, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_themes_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xe0,\n 0x00, 0x03, 0xf0, 0x03, 0xf8, 0x00, 0x07, 0xc0, 0x00, 0xf8, 0x00, 0x0f,\n 0x80, 0x78, 0x7c, 0x00, 0x1f, 0x18, 0x78, 0x3e, 0x00, 0x1e, 0x3c, 0x7c,\n 0x1f, 0x00, 0x3c, 0x3c, 0x78, 0x0f, 0x00, 0x3c, 0x3c, 0x30, 0x0f, 0x00,\n 0x38, 0x3c, 0x00, 0x87, 0x80, 0x78, 0x00, 0x01, 0xe7, 0x80, 0x78, 0x00,\n 0x03, 0xe7, 0x80, 0x78, 0xc0, 0x03, 0xe7, 0x80, 0x79, 0xe0, 0x01, 0xe7,\n 0x80, 0x79, 0xf0, 0x00, 0x07, 0x80, 0x79, 0xe0, 0x00, 0x0f, 0x00, 0x78,\n 0xe0, 0x00, 0x0f, 0x00, 0x78, 0x00, 0x00, 0x3e, 0x00, 0x38, 0x00, 0x1f,\n 0xfe, 0x00, 0x3c, 0x00, 0x3f, 0xfc, 0x00, 0x3c, 0x00, 0x7f, 0xf0, 0x00,\n 0x1e, 0x00, 0x78, 0x00, 0x00, 0x1f, 0x00, 0x70, 0x00, 0x00, 0x0f, 0x80,\n 0x78, 0x00, 0x00, 0x07, 0xc0, 0x78, 0x00, 0x00, 0x03, 0xf0, 0x3c, 0x00,\n 0x00, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x00,\n 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_touch_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x70,\n 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0x00,\n 0x00, 0x00, 0x78, 0x3c, 0x00, 0x00, 0x00, 0x78, 0xf8, 0x00, 0x00, 0x00,\n 0x38, 0xf8, 0x00, 0x00, 0x10, 0x39, 0xf0, 0x00, 0x00, 0x7e, 0x00, 0xe0,\n 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x8e, 0x00, 0x00, 0x00,\n 0x07, 0x9f, 0xc0, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x1f,\n 0xfe, 0x00, 0x00, 0x00, 0x8f, 0xff, 0x80, 0x00, 0x03, 0xcf, 0x3f, 0xf0,\n 0x00, 0x03, 0xcf, 0x0f, 0xfc, 0x00, 0x07, 0xc7, 0x81, 0xfe, 0x00, 0x0f,\n 0x87, 0x80, 0x7f, 0x00, 0x0f, 0x03, 0xc3, 0xfe, 0x00, 0x04, 0x03, 0xc7,\n 0xfe, 0x00, 0x00, 0x03, 0xcf, 0xf8, 0x00, 0x00, 0x01, 0xef, 0x80, 0x00,\n 0x00, 0x01, 0xef, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,\n 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00,\n 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,\n 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_vibration_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,\n 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00,\n 0x00, 0x01, 0xc1, 0xe7, 0x00, 0x00, 0x07, 0xf1, 0xe7, 0x00, 0x00, 0x07,\n 0xf1, 0xe7, 0x00, 0x00, 0x0f, 0xf9, 0xe7, 0x00, 0x00, 0x0f, 0x79, 0xe7,\n 0x00, 0x00, 0x0e, 0x39, 0xe7, 0x00, 0x00, 0x0e, 0x39, 0xe7, 0x00, 0x00,\n 0x0e, 0x39, 0xe7, 0x00, 0x00, 0x0e, 0x39, 0xe7, 0x00, 0x00, 0x0e, 0x39,\n 0xe7, 0x07, 0x80, 0x0e, 0x39, 0xe7, 0x0f, 0x80, 0x1e, 0x39, 0xe7, 0x1f,\n 0x80, 0x7e, 0x39, 0xe7, 0x1e, 0x00, 0x7c, 0x39, 0xe7, 0x1c, 0x00, 0x78,\n 0x39, 0xe7, 0x1c, 0x00, 0x00, 0x39, 0xe7, 0x1c, 0x00, 0x00, 0x39, 0xe7,\n 0x1c, 0x00, 0x00, 0x39, 0xe7, 0x1c, 0x00, 0x00, 0x39, 0xe7, 0x1c, 0x00,\n 0x00, 0x39, 0xe7, 0xbc, 0x00, 0x00, 0x39, 0xe7, 0xfc, 0x00, 0x00, 0x39,\n 0xe3, 0xf8, 0x00, 0x00, 0x39, 0xe3, 0xf8, 0x00, 0x00, 0x39, 0xe0, 0xe0,\n 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00,\n 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_watch_face_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x0f,\n 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00,\n 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff,\n 0x00, 0x00, 0x00, 0x7f, 0x3f, 0x80, 0x00, 0x00, 0xf8, 0x07, 0xc0, 0x00,\n 0x00, 0xf0, 0xc3, 0xc0, 0x00, 0x01, 0xe1, 0xe1, 0xe0, 0x00, 0x01, 0xe1,\n 0xe1, 0xe0, 0x00, 0x01, 0xc1, 0xe1, 0xe0, 0x00, 0x01, 0xc1, 0xe0, 0xe0,\n 0x00, 0x01, 0xc1, 0xf8, 0xe0, 0x00, 0x01, 0xe0, 0xf9, 0xe0, 0x00, 0x01,\n 0xe0, 0x79, 0xe0, 0x00, 0x01, 0xe0, 0x01, 0xe0, 0x00, 0x00, 0xf0, 0x03,\n 0xc0, 0x00, 0x00, 0xf8, 0x07, 0xc0, 0x00, 0x00, 0x7f, 0x3f, 0x80, 0x00,\n 0x00, 0x3f, 0xff, 0x80, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x00,\n 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00,\n 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst uint8_t beeos_icon_weather_34_data[170] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01,\n 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x03, 0x01, 0xe0, 0x30, 0x00, 0x07, 0x81, 0xe0, 0x78, 0x00, 0x07,\n 0xc0, 0x00, 0xf8, 0x00, 0x03, 0xe0, 0x01, 0xf0, 0x00, 0x01, 0xe0, 0x01,\n 0xe0, 0x00, 0x00, 0xc7, 0xf8, 0xc0, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00,\n 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x00, 0x00,\n 0x0f, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x1f, 0x00, 0x07, 0xfe, 0x07, 0x1f,\n 0x80, 0x0f, 0xff, 0x07, 0x1f, 0x80, 0x1f, 0xff, 0x87, 0x1f, 0x00, 0x3e,\n 0x07, 0xc2, 0x00, 0x00, 0x3c, 0x03, 0xc0, 0x00, 0x00, 0x78, 0x01, 0xf8,\n 0x00, 0x00, 0x78, 0x01, 0xfe, 0x00, 0x00, 0x78, 0x01, 0xfe, 0x00, 0x00,\n 0x78, 0x00, 0x1f, 0x00, 0x00, 0x78, 0x00, 0x0f, 0x00, 0x00, 0x78, 0x00,\n 0x07, 0x00, 0x00, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x3e, 0x00, 0x0f, 0x00,\n 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xfe, 0x00, 0x00, 0x07,\n 0xff, 0xfc, 0x00, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst BeeOSIconAsset beeos_icons_34[] = {\n {"about", 34, 34, 5, beeos_icon_about_34_data, 170},\n {"apps", 34, 34, 5, beeos_icon_apps_34_data, 170},\n {"back", 34, 34, 5, beeos_icon_back_34_data, 170},\n {"battery", 34, 34, 5, beeos_icon_battery_34_data, 170},\n {"bluetooth", 34, 34, 5, beeos_icon_bluetooth_34_data, 170},\n {"clock", 34, 34, 5, beeos_icon_clock_34_data, 170},\n {"developer-tools", 34, 34, 5, beeos_icon_developer_tools_34_data, 170},\n {"display", 34, 34, 5, beeos_icon_display_34_data, 170},\n {"github", 34, 34, 5, beeos_icon_github_34_data, 170},\n {"gps", 34, 34, 5, beeos_icon_gps_34_data, 170},\n {"health", 34, 34, 5, beeos_icon_health_34_data, 170},\n {"hivestore", 34, 34, 5, beeos_icon_hivestore_34_data, 170},\n {"home", 34, 34, 5, beeos_icon_home_34_data, 170},\n {"install", 34, 34, 5, beeos_icon_install_34_data, 170},\n {"notifications", 34, 34, 5, beeos_icon_notifications_34_data, 170},\n {"package", 34, 34, 5, beeos_icon_package_34_data, 170},\n {"permissions", 34, 34, 5, beeos_icon_permissions_34_data, 170},\n {"plugin", 34, 34, 5, beeos_icon_plugin_34_data, 170},\n {"plugins", 34, 34, 5, beeos_icon_plugins_34_data, 170},\n {"quick-tools", 34, 34, 5, beeos_icon_quick_tools_34_data, 170},\n {"remove", 34, 34, 5, beeos_icon_remove_34_data, 170},\n {"resource-monitor", 34, 34, 5, beeos_icon_resource_monitor_34_data, 170},\n {"retro-clock", 34, 34, 5, beeos_icon_retro_clock_34_data, 170},\n {"runtime", 34, 34, 5, beeos_icon_runtime_34_data, 170},\n {"script-run", 34, 34, 5, beeos_icon_script_run_34_data, 170},\n {"scripts", 34, 34, 5, beeos_icon_scripts_34_data, 170},\n {"search", 34, 34, 5, beeos_icon_search_34_data, 170},\n {"settings", 34, 34, 5, beeos_icon_settings_34_data, 170},\n {"store", 34, 34, 5, beeos_icon_store_34_data, 170},\n {"theme", 34, 34, 5, beeos_icon_theme_34_data, 170},\n {"themes", 34, 34, 5, beeos_icon_themes_34_data, 170},\n {"touch", 34, 34, 5, beeos_icon_touch_34_data, 170},\n {"vibration", 34, 34, 5, beeos_icon_vibration_34_data, 170},\n {"watch-face", 34, 34, 5, beeos_icon_watch_face_34_data, 170},\n {"weather", 34, 34, 5, beeos_icon_weather_34_data, 170},\n};\n\nconst uint32_t beeos_icons_34_count = 35;\n \ No newline at end of file diff --git a/beeos/generated/icons/lvgl/beeos_icons_34.h b/beeos/generated/icons/lvgl/beeos_icons_34.h new file mode 100644 index 0000000..c4cf7ce --- /dev/null +++ b/beeos/generated/icons/lvgl/beeos_icons_34.h @@ -0,0 +1 @@ +/* Auto-generated BeeOS icon declarations. */\n#pragma once\n\n#include \n\ntypedef struct BeeOSIconAsset {\n const char *name;\n uint16_t width;\n uint16_t height;\n uint16_t stride;\n const uint8_t *data;\n uint32_t data_len;\n} BeeOSIconAsset;\n\nextern const uint8_t beeos_icon_about_34_data[170];\nextern const uint8_t beeos_icon_apps_34_data[170];\nextern const uint8_t beeos_icon_back_34_data[170];\nextern const uint8_t beeos_icon_battery_34_data[170];\nextern const uint8_t beeos_icon_bluetooth_34_data[170];\nextern const uint8_t beeos_icon_clock_34_data[170];\nextern const uint8_t beeos_icon_developer_tools_34_data[170];\nextern const uint8_t beeos_icon_display_34_data[170];\nextern const uint8_t beeos_icon_github_34_data[170];\nextern const uint8_t beeos_icon_gps_34_data[170];\nextern const uint8_t beeos_icon_health_34_data[170];\nextern const uint8_t beeos_icon_hivestore_34_data[170];\nextern const uint8_t beeos_icon_home_34_data[170];\nextern const uint8_t beeos_icon_install_34_data[170];\nextern const uint8_t beeos_icon_notifications_34_data[170];\nextern const uint8_t beeos_icon_package_34_data[170];\nextern const uint8_t beeos_icon_permissions_34_data[170];\nextern const uint8_t beeos_icon_plugin_34_data[170];\nextern const uint8_t beeos_icon_plugins_34_data[170];\nextern const uint8_t beeos_icon_quick_tools_34_data[170];\nextern const uint8_t beeos_icon_remove_34_data[170];\nextern const uint8_t beeos_icon_resource_monitor_34_data[170];\nextern const uint8_t beeos_icon_retro_clock_34_data[170];\nextern const uint8_t beeos_icon_runtime_34_data[170];\nextern const uint8_t beeos_icon_script_run_34_data[170];\nextern const uint8_t beeos_icon_scripts_34_data[170];\nextern const uint8_t beeos_icon_search_34_data[170];\nextern const uint8_t beeos_icon_settings_34_data[170];\nextern const uint8_t beeos_icon_store_34_data[170];\nextern const uint8_t beeos_icon_theme_34_data[170];\nextern const uint8_t beeos_icon_themes_34_data[170];\nextern const uint8_t beeos_icon_touch_34_data[170];\nextern const uint8_t beeos_icon_vibration_34_data[170];\nextern const uint8_t beeos_icon_watch_face_34_data[170];\nextern const uint8_t beeos_icon_weather_34_data[170];\n\nextern const BeeOSIconAsset beeos_icons_34[];\nextern const uint32_t beeos_icons_34_count;\n \ No newline at end of file diff --git a/beeos/generated/icons/lvgl_v8/beeos_icons_24_lvgl_v8.c b/beeos/generated/icons/lvgl_v8/beeos_icons_24_lvgl_v8.c new file mode 100644 index 0000000..2df9ae9 --- /dev/null +++ b/beeos/generated/icons/lvgl_v8/beeos_icons_24_lvgl_v8.c @@ -0,0 +1 @@ +/* Auto-generated BeeOS LVGL v8 icon descriptors.\n Uses LV_IMG_CF_ALPHA_1BIT for monochrome/alpha icon masks.\n Style code should recolor these with image recolor/opacity if needed. */\n\n#include "beeos_icons_24_lvgl_v8.h"\n\nstatic const uint8_t beeos_icon_about_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x03, 0xff, 0xc0, 0x0f, 0xe7, 0xf0,\n 0x1f, 0x00, 0xf8, 0x1c, 0x00, 0x38, 0x38, 0x00, 0x1c, 0x38, 0x18, 0x1c,\n 0x70, 0x18, 0x0e, 0x70, 0x00, 0x0e, 0x70, 0x00, 0x0e, 0x60, 0x18, 0x06,\n 0x60, 0x18, 0x06, 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e,\n 0x38, 0x18, 0x1c, 0x38, 0x00, 0x1c, 0x1c, 0x00, 0x38, 0x1f, 0x00, 0xf8,\n 0x0f, 0xe7, 0xf0, 0x03, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_about_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_about_24_data,\n};\n\nstatic const uint8_t beeos_icon_apps_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x3f, 0xff, 0xfc,\n 0x38, 0x18, 0x1c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c,\n 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x3f, 0xff, 0xfc,\n 0x3f, 0xff, 0xfc, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c,\n 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x38, 0x18, 0x1c,\n 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_apps_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_apps_24_data,\n};\n\nstatic const uint8_t beeos_icon_back_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0e, 0x00,\n 0x00, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0xe0, 0x00,\n 0x00, 0xe0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x1e, 0x00,\n 0x00, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_back_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_back_24_data,\n};\n\nstatic const uint8_t beeos_icon_battery_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, 0x7f, 0xff, 0xe0, 0x70, 0x00, 0xe0,\n 0x60, 0x00, 0x60, 0x60, 0x00, 0x66, 0x60, 0x00, 0x66, 0x60, 0x00, 0x66,\n 0x60, 0x00, 0x66, 0x60, 0x00, 0x66, 0x60, 0x00, 0x66, 0x60, 0x00, 0x60,\n 0x70, 0x00, 0xe0, 0x7f, 0xff, 0xe0, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_battery_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_battery_24_data,\n};\n\nstatic const uint8_t beeos_icon_bluetooth_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1f, 0x00,\n 0x00, 0x1f, 0x00, 0x00, 0x1b, 0xc0, 0x03, 0x19, 0xc0, 0x03, 0x99, 0xc0,\n 0x01, 0xfb, 0x80, 0x00, 0xff, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00,\n 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xff, 0x00, 0x01, 0xdb, 0xc0,\n 0x03, 0x99, 0xc0, 0x03, 0x19, 0xc0, 0x00, 0x1b, 0x80, 0x00, 0x1f, 0x00,\n 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_bluetooth_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_bluetooth_24_data,\n};\n\nstatic const uint8_t beeos_icon_clock_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x03, 0xff, 0xc0, 0x0f, 0xe7, 0xf0,\n 0x1f, 0x00, 0xf8, 0x1c, 0x18, 0x38, 0x38, 0x18, 0x1c, 0x38, 0x18, 0x1c,\n 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x60, 0x1c, 0x06,\n 0x60, 0x1f, 0x06, 0x70, 0x0f, 0x8e, 0x70, 0x03, 0x8e, 0x70, 0x00, 0x0e,\n 0x38, 0x00, 0x1c, 0x38, 0x00, 0x1c, 0x1c, 0x00, 0x38, 0x1f, 0x00, 0xf8,\n 0x0f, 0xe7, 0xf0, 0x03, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_clock_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_clock_24_data,\n};\n\nstatic const uint8_t beeos_icon_developer_tools_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,\n 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0e, 0x00, 0x06, 0x0e, 0x60,\n 0x0e, 0x0e, 0x70, 0x1c, 0x1c, 0x3c, 0x38, 0x1c, 0x1e, 0x70, 0x1c, 0x0e,\n 0x70, 0x38, 0x0e, 0x3c, 0x38, 0x1c, 0x1e, 0x38, 0x38, 0x0e, 0x70, 0x70,\n 0x06, 0x70, 0x60, 0x00, 0x70, 0x00, 0x00, 0x60, 0x00, 0x00, 0xe0, 0x00,\n 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_developer_tools_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_developer_tools_24_data,\n};\n\nstatic const uint8_t beeos_icon_display_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x0c, 0x18, 0x30, 0x0e, 0x00, 0x70, 0x07, 0x00, 0xe0, 0x02, 0x7e, 0x40,\n 0x00, 0xff, 0x00, 0x01, 0xe7, 0x80, 0x01, 0xc3, 0x80, 0x79, 0x81, 0x9e,\n 0x79, 0x81, 0x9e, 0x01, 0xc3, 0x80, 0x01, 0xe7, 0x80, 0x00, 0xff, 0x00,\n 0x02, 0x7e, 0x40, 0x07, 0x00, 0xe0, 0x0e, 0x00, 0x70, 0x0c, 0x18, 0x30,\n 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_display_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_display_24_data,\n};\n\nstatic const uint8_t beeos_icon_github_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0xf8, 0x06, 0x03, 0xfc,\n 0x06, 0x03, 0x9c, 0x06, 0x1f, 0x9c, 0x06, 0x7f, 0x9c, 0x06, 0xff, 0x9c,\n 0x07, 0xe3, 0xfc, 0x07, 0xc1, 0xf8, 0x07, 0x80, 0x00, 0x07, 0x00, 0x00,\n 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x3f, 0xc0, 0x00,\n 0x39, 0xc0, 0x00, 0x39, 0xc0, 0x00, 0x39, 0xc0, 0x00, 0x39, 0xc0, 0x00,\n 0x3f, 0xc0, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_github_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_github_24_data,\n};\n\nstatic const uint8_t beeos_icon_gps_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x00, 0xff, 0x00, 0x01, 0xff, 0x80, 0x03, 0xe7, 0xc0, 0x07, 0x81, 0xe0,\n 0x0f, 0x7e, 0xf0, 0x0e, 0xff, 0x70, 0x0e, 0xe7, 0x70, 0x7c, 0xe7, 0x3e,\n 0x7c, 0xe7, 0x3e, 0x0e, 0xe7, 0x70, 0x0e, 0xff, 0x70, 0x0f, 0x7e, 0xf0,\n 0x07, 0x81, 0xe0, 0x03, 0xe7, 0xc0, 0x01, 0xff, 0x80, 0x00, 0xff, 0x00,\n 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_gps_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_gps_24_data,\n};\n\nstatic const uint8_t beeos_icon_health_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe7, 0xf0,\n 0x1f, 0xff, 0xf8, 0x3e, 0xff, 0x7c, 0x78, 0x3c, 0x1e, 0x70, 0x00, 0x0e,\n 0x70, 0x06, 0x0e, 0x60, 0x07, 0x06, 0x70, 0x0f, 0x0e, 0x70, 0x6f, 0x0e,\n 0x7f, 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0x1c, 0x3c, 0x38, 0x0f, 0x3c, 0xf0,\n 0x07, 0xb9, 0xe0, 0x03, 0xdb, 0xc0, 0x01, 0xe7, 0x80, 0x00, 0xff, 0x00,\n 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_health_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_health_24_data,\n};\n\nstatic const uint8_t beeos_icon_hivestore_24_data[] = {\n 0x00, 0x00, 0x00, 0x07, 0xff, 0xe0, 0x0f, 0xff, 0xf0, 0x1e, 0x00, 0x78,\n 0x3c, 0x00, 0x3c, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x30, 0x00, 0x0c,\n 0x30, 0x00, 0x0c, 0x31, 0x81, 0x8c, 0x31, 0x81, 0x8c, 0x31, 0xc3, 0x8c,\n 0x31, 0xe7, 0x8c, 0x30, 0xff, 0x0c, 0x30, 0x7e, 0x0c, 0x30, 0x00, 0x0c,\n 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c,\n 0x38, 0x00, 0x1c, 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_hivestore_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_hivestore_24_data,\n};\n\nstatic const uint8_t beeos_icon_home_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x01, 0xff, 0x80,\n 0x03, 0xc3, 0xc0, 0x07, 0x81, 0xe0, 0x0f, 0x00, 0xf0, 0x1e, 0x00, 0x78,\n 0x3c, 0x00, 0x3c, 0x38, 0x00, 0x1c, 0x30, 0x00, 0x0c, 0x30, 0xff, 0x0c,\n 0x30, 0xff, 0x0c, 0x30, 0xc3, 0x0c, 0x30, 0xc3, 0x0c, 0x30, 0xc3, 0x0c,\n 0x30, 0xc3, 0x0c, 0x30, 0xc3, 0x0c, 0x30, 0xc3, 0x0c, 0x38, 0xc3, 0x1c,\n 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_home_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_home_24_data,\n};\n\nstatic const uint8_t beeos_icon_install_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x00, 0x18, 0x00, 0x03, 0x18, 0xc0, 0x03, 0x99, 0xc0, 0x01, 0xfb, 0x80,\n 0x00, 0xff, 0x00, 0x00, 0x7e, 0x00, 0x30, 0x3c, 0x0c, 0x30, 0x18, 0x0c,\n 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x38, 0x00, 0x1c,\n 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_install_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_install_24_data,\n};\n\nstatic const uint8_t beeos_icon_notifications_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x01, 0xff, 0x80, 0x03, 0xe7, 0xc0,\n 0x07, 0x81, 0xe0, 0x07, 0x00, 0xe0, 0x07, 0x00, 0xe0, 0x06, 0x00, 0x60,\n 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x0e, 0x00, 0x70, 0x0e, 0x00, 0x70,\n 0x0e, 0x00, 0x70, 0x1c, 0x00, 0x38, 0x3c, 0x00, 0x3c, 0x38, 0x00, 0x1c,\n 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_notifications_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_notifications_24_data,\n};\n\nstatic const uint8_t beeos_icon_package_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xff, 0x00, 0x03, 0xff, 0xc0,\n 0x0f, 0xe3, 0xf0, 0x1f, 0xf0, 0xf8, 0x3c, 0x7c, 0x3c, 0x3e, 0x3f, 0x7c,\n 0x3f, 0x8f, 0xfc, 0x37, 0xc3, 0xec, 0x31, 0xff, 0xcc, 0x30, 0xff, 0x0c,\n 0x30, 0x3c, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c,\n 0x38, 0x18, 0x1c, 0x3c, 0x18, 0x3c, 0x1f, 0x18, 0xf8, 0x0f, 0xdb, 0xf0,\n 0x03, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_package_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_package_24_data,\n};\n\nstatic const uint8_t beeos_icon_permissions_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xfe, 0x00, 0x03, 0xff, 0xc0,\n 0x1f, 0xe7, 0xf8, 0x1f, 0x81, 0xf8, 0x18, 0x00, 0x18, 0x18, 0x00, 0x18,\n 0x18, 0x00, 0x18, 0x18, 0x03, 0x18, 0x18, 0x07, 0x18, 0x18, 0xce, 0x18,\n 0x18, 0xfc, 0x18, 0x18, 0x78, 0x18, 0x1c, 0x30, 0x38, 0x1c, 0x00, 0x38,\n 0x1c, 0x00, 0x38, 0x0e, 0x00, 0x70, 0x0f, 0x00, 0xf0, 0x07, 0xc3, 0xe0,\n 0x03, 0xff, 0xc0, 0x01, 0xff, 0x80, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_permissions_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_permissions_24_data,\n};\n\nstatic const uint8_t beeos_icon_plugin_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x7e, 0xfe, 0x00, 0xff, 0xee,\n 0x01, 0xc3, 0xc6, 0x01, 0xe1, 0xce, 0x01, 0xf0, 0x3e, 0x0e, 0x70, 0x3c,\n 0x1e, 0x30, 0x38, 0x3f, 0x70, 0x1c, 0x77, 0xf0, 0x0e, 0x73, 0xe0, 0x0e,\n 0x70, 0x07, 0xce, 0x70, 0x0f, 0xee, 0x38, 0x0e, 0xfc, 0x1c, 0x0c, 0x78,\n 0x3c, 0x0e, 0x70, 0x7c, 0x0f, 0x80, 0x73, 0x87, 0x80, 0x63, 0xc3, 0x80,\n 0x77, 0xff, 0x00, 0x7f, 0x7e, 0x00, 0x3e, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_plugin_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_plugin_24_data,\n};\n\nstatic const uint8_t beeos_icon_plugins_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x7e, 0xfe, 0x00, 0xff, 0xee,\n 0x01, 0xc3, 0xc6, 0x01, 0xe1, 0xce, 0x01, 0xf0, 0x3e, 0x0e, 0x70, 0x3c,\n 0x1e, 0x30, 0x38, 0x3f, 0x70, 0x1c, 0x77, 0xf0, 0x0e, 0x73, 0xe0, 0x0e,\n 0x70, 0x07, 0xce, 0x70, 0x0f, 0xee, 0x38, 0x0e, 0xfc, 0x1c, 0x0c, 0x78,\n 0x3c, 0x0e, 0x70, 0x7c, 0x0f, 0x80, 0x73, 0x87, 0x80, 0x63, 0xc3, 0x80,\n 0x77, 0xff, 0x00, 0x7f, 0x7e, 0x00, 0x3e, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_plugins_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_plugins_24_data,\n};\n\nstatic const uint8_t beeos_icon_quick_tools_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x1f, 0xe0, 0x00, 0x3f, 0xe0,\n 0x00, 0x79, 0xc0, 0x00, 0x73, 0x8e, 0x00, 0x77, 0x1e, 0x00, 0x67, 0x3e,\n 0x00, 0x63, 0xfe, 0x00, 0x71, 0xee, 0x00, 0x70, 0xce, 0x00, 0xe0, 0x1e,\n 0x01, 0xc6, 0x7c, 0x03, 0x8f, 0xf8, 0x07, 0x1f, 0xf0, 0x0e, 0x38, 0x00,\n 0x1c, 0x70, 0x00, 0x38, 0xe0, 0x00, 0x71, 0xc0, 0x00, 0x73, 0x80, 0x00,\n 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_quick_tools_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_quick_tools_24_data,\n};\n\nstatic const uint8_t beeos_icon_remove_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x01, 0xff, 0x80, 0x01, 0xc3, 0x80,\n 0x01, 0x81, 0x80, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x0c, 0x00, 0x30,\n 0x0c, 0x00, 0x30, 0x0c, 0x00, 0x30, 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30,\n 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30,\n 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30, 0x0c, 0x00, 0x30, 0x0c, 0x00, 0x30,\n 0x0e, 0x00, 0x70, 0x0f, 0xff, 0xf0, 0x07, 0xff, 0xe0, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_remove_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_remove_24_data,\n};\n\nstatic const uint8_t beeos_icon_resource_monitor_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x01, 0xe0, 0x00, 0x01, 0xe0, 0x00,\n 0x01, 0xe0, 0x00, 0x03, 0xf0, 0x00, 0x03, 0xf0, 0x00, 0x03, 0xf0, 0x00,\n 0x03, 0x30, 0x00, 0x07, 0x38, 0x00, 0x07, 0x38, 0x00, 0x7f, 0x38, 0x7e,\n 0x7e, 0x1c, 0xfe, 0x00, 0x1c, 0xe0, 0x00, 0x1c, 0xe0, 0x00, 0x0c, 0xc0,\n 0x00, 0x0f, 0xc0, 0x00, 0x0f, 0xc0, 0x00, 0x0f, 0xc0, 0x00, 0x07, 0x80,\n 0x00, 0x07, 0x80, 0x00, 0x07, 0x80, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_resource_monitor_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_resource_monitor_24_data,\n};\n\nstatic const uint8_t beeos_icon_retro_clock_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x03, 0xff, 0xc0, 0x0f, 0xe7, 0xf0,\n 0x1f, 0x00, 0xf8, 0x1c, 0x18, 0x38, 0x38, 0x18, 0x1c, 0x38, 0x18, 0x1c,\n 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x60, 0x1f, 0x86,\n 0x60, 0x1f, 0x86, 0x70, 0x00, 0x0e, 0x70, 0x00, 0x0e, 0x70, 0x00, 0x0e,\n 0x38, 0x00, 0x1c, 0x38, 0x00, 0x1c, 0x1c, 0x00, 0x38, 0x1f, 0x00, 0xf8,\n 0x0f, 0xe7, 0xf0, 0x03, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_retro_clock_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_retro_clock_24_data,\n};\n\nstatic const uint8_t beeos_icon_runtime_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x3e, 0x00,\n 0x00, 0x7e, 0x00, 0x00, 0xfe, 0x00, 0x01, 0xfc, 0x00, 0x03, 0xdc, 0x00,\n 0x07, 0x9c, 0x00, 0x0f, 0x1f, 0xfc, 0x1e, 0x1f, 0xfc, 0x3c, 0x00, 0x1c,\n 0x38, 0x00, 0x3c, 0x3f, 0xf8, 0x78, 0x3f, 0xf8, 0xf0, 0x00, 0x39, 0xe0,\n 0x00, 0x3b, 0xc0, 0x00, 0x3f, 0x80, 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00,\n 0x00, 0x7c, 0x00, 0x00, 0x78, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_runtime_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_runtime_24_data,\n};\n\nstatic const uint8_t beeos_icon_script_run_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x0f, 0xe0, 0x00,\n 0x0f, 0xf8, 0x00, 0x0c, 0x7e, 0x00, 0x0c, 0x1f, 0x00, 0x0c, 0x0f, 0xc0,\n 0x0c, 0x03, 0xf0, 0x0c, 0x00, 0xf8, 0x0c, 0x00, 0x3c, 0x0c, 0x00, 0x1c,\n 0x0c, 0x00, 0x1c, 0x0c, 0x00, 0x3c, 0x0c, 0x00, 0xf8, 0x0c, 0x03, 0xf0,\n 0x0c, 0x0f, 0xc0, 0x0c, 0x1f, 0x00, 0x0c, 0x7e, 0x00, 0x0f, 0xf8, 0x00,\n 0x0f, 0xe0, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_script_run_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_script_run_24_data,\n};\n\nstatic const uint8_t beeos_icon_scripts_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x18, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x07, 0x80, 0x00,\n 0x03, 0xc0, 0x00, 0x01, 0xe0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xe0, 0x00,\n 0x01, 0xc0, 0x00, 0x03, 0x80, 0x00, 0x07, 0x00, 0x00, 0x0e, 0x00, 0x00,\n 0x1c, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x1f, 0xf8,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_scripts_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_scripts_24_data,\n};\n\nstatic const uint8_t beeos_icon_search_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x07, 0xff, 0x80,\n 0x0f, 0xcf, 0xc0, 0x1e, 0x01, 0xe0, 0x1c, 0x00, 0xe0, 0x38, 0x00, 0x70,\n 0x38, 0x00, 0x70, 0x38, 0x00, 0x70, 0x30, 0x00, 0x30, 0x30, 0x00, 0x30,\n 0x38, 0x00, 0x70, 0x38, 0x00, 0x70, 0x38, 0x00, 0x70, 0x1c, 0x00, 0xe0,\n 0x1e, 0x01, 0xe0, 0x0f, 0xcf, 0xe0, 0x07, 0xff, 0xf8, 0x01, 0xfe, 0x3c,\n 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_search_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_search_24_data,\n};\n\nstatic const uint8_t beeos_icon_settings_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xff, 0x00,\n 0x04, 0xe7, 0x20, 0x1f, 0xe7, 0xf8, 0x3f, 0xc3, 0xfc, 0x3b, 0x00, 0xdc,\n 0x38, 0x7e, 0x1c, 0x38, 0xff, 0x1c, 0x3c, 0xe7, 0x3c, 0x1c, 0xe7, 0x38,\n 0x1c, 0xe7, 0x38, 0x3c, 0xe7, 0x3c, 0x38, 0xff, 0x1c, 0x38, 0x7e, 0x1c,\n 0x3b, 0x00, 0xdc, 0x3f, 0xc3, 0xfc, 0x1f, 0xe7, 0xf8, 0x04, 0xe7, 0x20,\n 0x00, 0xff, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_settings_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_settings_24_data,\n};\n\nstatic const uint8_t beeos_icon_store_24_data[] = {\n 0x00, 0x00, 0x00, 0x07, 0xff, 0xe0, 0x0f, 0xff, 0xf0, 0x1e, 0x00, 0x78,\n 0x3c, 0x00, 0x3c, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x30, 0x00, 0x0c,\n 0x30, 0x00, 0x0c, 0x31, 0x81, 0x8c, 0x31, 0x81, 0x8c, 0x31, 0xc3, 0x8c,\n 0x31, 0xe7, 0x8c, 0x30, 0xff, 0x0c, 0x30, 0x7e, 0x0c, 0x30, 0x00, 0x0c,\n 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c,\n 0x38, 0x00, 0x1c, 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_store_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_store_24_data,\n};\n\nstatic const uint8_t beeos_icon_theme_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xfe,\n 0x00, 0x79, 0xce, 0x00, 0xff, 0x8e, 0x01, 0xff, 0x1c, 0x01, 0xc6, 0x38,\n 0x01, 0xe0, 0x70, 0x07, 0xf0, 0xe0, 0x1f, 0xb8, 0xe0, 0x7f, 0x1c, 0x70,\n 0x7c, 0x0e, 0x70, 0x78, 0x07, 0x70, 0x3e, 0x03, 0xf0, 0x1f, 0xe3, 0xe0,\n 0x1f, 0xff, 0xc0, 0x0f, 0xff, 0x80, 0x07, 0x8f, 0x00, 0x03, 0x9e, 0x00,\n 0x01, 0xfc, 0x00, 0x01, 0xf8, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_theme_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_theme_24_data,\n};\n\nstatic const uint8_t beeos_icon_themes_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0x03, 0xff, 0xe0, 0x0f, 0xe7, 0xf0,\n 0x1f, 0x00, 0xf8, 0x1c, 0x0e, 0x3c, 0x39, 0xce, 0x1c, 0x39, 0xce, 0x0e,\n 0x71, 0xc0, 0x0e, 0x70, 0x00, 0xee, 0x70, 0x00, 0xe6, 0x67, 0x00, 0xe6,\n 0x67, 0x00, 0x0e, 0x77, 0x00, 0x0e, 0x70, 0x00, 0x3c, 0x70, 0x07, 0xfc,\n 0x38, 0x0f, 0xf0, 0x38, 0x0e, 0x00, 0x1c, 0x0e, 0x00, 0x1f, 0x0e, 0x00,\n 0x0f, 0xee, 0x00, 0x03, 0xfe, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_themes_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_themes_24_data,\n};\n\nstatic const uint8_t beeos_icon_touch_24_data[] = {\n 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, 0x00, 0x03, 0x86, 0x00,\n 0x03, 0x8e, 0x00, 0x01, 0x9e, 0x00, 0x78, 0x1c, 0x00, 0x7c, 0x00, 0x00,\n 0x3c, 0xf0, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xff, 0x80, 0x06, 0xef, 0xe0,\n 0x0e, 0x73, 0xfc, 0x1e, 0x70, 0x7c, 0x1c, 0x79, 0xfc, 0x00, 0x3b, 0xfc,\n 0x00, 0x3b, 0xc0, 0x00, 0x1f, 0x80, 0x00, 0x1f, 0x00, 0x00, 0x0f, 0x00,\n 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_touch_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_touch_24_data,\n};\n\nstatic const uint8_t beeos_icon_vibration_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x1f, 0x80,\n 0x0f, 0x19, 0x80, 0x1f, 0x99, 0x80, 0x1f, 0x99, 0x80, 0x19, 0x99, 0x80,\n 0x19, 0x99, 0x80, 0x19, 0x99, 0x80, 0x19, 0x99, 0x8e, 0x39, 0x99, 0x9e,\n 0x79, 0x99, 0x9c, 0x71, 0x99, 0x98, 0x01, 0x99, 0x98, 0x01, 0x99, 0x98,\n 0x01, 0x99, 0x98, 0x01, 0x99, 0xf8, 0x01, 0x99, 0xf8, 0x01, 0x98, 0xf0,\n 0x01, 0xf8, 0x00, 0x01, 0xf8, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_vibration_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_vibration_24_data,\n};\n\nstatic const uint8_t beeos_icon_watch_face_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x01, 0xc3, 0x80,\n 0x01, 0xc3, 0x80, 0x01, 0xff, 0x80, 0x01, 0xff, 0x80, 0x03, 0xe7, 0xc0,\n 0x03, 0x81, 0xc0, 0x07, 0x18, 0xe0, 0x07, 0x18, 0xe0, 0x06, 0x1c, 0x60,\n 0x06, 0x1e, 0x60, 0x07, 0x1e, 0xe0, 0x07, 0x04, 0xe0, 0x03, 0x81, 0xc0,\n 0x03, 0xe7, 0xc0, 0x01, 0xff, 0x80, 0x01, 0xff, 0x80, 0x01, 0xc3, 0x80,\n 0x01, 0xc3, 0x80, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_watch_face_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_watch_face_24_data,\n};\n\nstatic const uint8_t beeos_icon_weather_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x0c, 0x18, 0x30, 0x0e, 0x00, 0x70, 0x07, 0x00, 0xe0, 0x02, 0x7e, 0x40,\n 0x00, 0x7f, 0x00, 0x00, 0x67, 0x80, 0x00, 0x03, 0x80, 0x0f, 0xc1, 0x9e,\n 0x3f, 0xf1, 0x9e, 0x3c, 0xf1, 0x80, 0x70, 0x38, 0x00, 0x70, 0x3f, 0x00,\n 0x60, 0x1f, 0x80, 0x60, 0x03, 0x80, 0x70, 0x01, 0x80, 0x70, 0x01, 0x80,\n 0x3c, 0x03, 0x80, 0x3f, 0xff, 0x80, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_weather_24_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 24,\n .header.h = 24,\n .data_size = 72,\n .data = beeos_icon_weather_24_data,\n};\n \ No newline at end of file diff --git a/beeos/generated/icons/lvgl_v8/beeos_icons_24_lvgl_v8.h b/beeos/generated/icons/lvgl_v8/beeos_icons_24_lvgl_v8.h new file mode 100644 index 0000000..f48ecd3 --- /dev/null +++ b/beeos/generated/icons/lvgl_v8/beeos_icons_24_lvgl_v8.h @@ -0,0 +1 @@ +/* Auto-generated BeeOS LVGL v8 icon descriptors. */\n#pragma once\n\n#include \n\nLV_IMG_DECLARE(beeos_icon_about_24_dsc);\nLV_IMG_DECLARE(beeos_icon_apps_24_dsc);\nLV_IMG_DECLARE(beeos_icon_back_24_dsc);\nLV_IMG_DECLARE(beeos_icon_battery_24_dsc);\nLV_IMG_DECLARE(beeos_icon_bluetooth_24_dsc);\nLV_IMG_DECLARE(beeos_icon_clock_24_dsc);\nLV_IMG_DECLARE(beeos_icon_developer_tools_24_dsc);\nLV_IMG_DECLARE(beeos_icon_display_24_dsc);\nLV_IMG_DECLARE(beeos_icon_github_24_dsc);\nLV_IMG_DECLARE(beeos_icon_gps_24_dsc);\nLV_IMG_DECLARE(beeos_icon_health_24_dsc);\nLV_IMG_DECLARE(beeos_icon_hivestore_24_dsc);\nLV_IMG_DECLARE(beeos_icon_home_24_dsc);\nLV_IMG_DECLARE(beeos_icon_install_24_dsc);\nLV_IMG_DECLARE(beeos_icon_notifications_24_dsc);\nLV_IMG_DECLARE(beeos_icon_package_24_dsc);\nLV_IMG_DECLARE(beeos_icon_permissions_24_dsc);\nLV_IMG_DECLARE(beeos_icon_plugin_24_dsc);\nLV_IMG_DECLARE(beeos_icon_plugins_24_dsc);\nLV_IMG_DECLARE(beeos_icon_quick_tools_24_dsc);\nLV_IMG_DECLARE(beeos_icon_remove_24_dsc);\nLV_IMG_DECLARE(beeos_icon_resource_monitor_24_dsc);\nLV_IMG_DECLARE(beeos_icon_retro_clock_24_dsc);\nLV_IMG_DECLARE(beeos_icon_runtime_24_dsc);\nLV_IMG_DECLARE(beeos_icon_script_run_24_dsc);\nLV_IMG_DECLARE(beeos_icon_scripts_24_dsc);\nLV_IMG_DECLARE(beeos_icon_search_24_dsc);\nLV_IMG_DECLARE(beeos_icon_settings_24_dsc);\nLV_IMG_DECLARE(beeos_icon_store_24_dsc);\nLV_IMG_DECLARE(beeos_icon_theme_24_dsc);\nLV_IMG_DECLARE(beeos_icon_themes_24_dsc);\nLV_IMG_DECLARE(beeos_icon_touch_24_dsc);\nLV_IMG_DECLARE(beeos_icon_vibration_24_dsc);\nLV_IMG_DECLARE(beeos_icon_watch_face_24_dsc);\nLV_IMG_DECLARE(beeos_icon_weather_24_dsc); \ No newline at end of file diff --git a/beeos/generated/icons/lvgl_v8/beeos_icons_34_lvgl_v8.c b/beeos/generated/icons/lvgl_v8/beeos_icons_34_lvgl_v8.c new file mode 100644 index 0000000..78d2f69 --- /dev/null +++ b/beeos/generated/icons/lvgl_v8/beeos_icons_34_lvgl_v8.c @@ -0,0 +1 @@ +/* Auto-generated BeeOS LVGL v8 icon descriptors.\n Uses LV_IMG_CF_ALPHA_1BIT for monochrome/alpha icon masks.\n Style code should recolor these with image recolor/opacity if needed. */\n\n#include "beeos_icons_34_lvgl_v8.h"\n\nstatic const uint8_t beeos_icon_about_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xe0,\n 0x00, 0x03, 0xf8, 0x07, 0xf0, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x0f,\n 0x80, 0x00, 0x7c, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x1e, 0x00, 0x00,\n 0x1e, 0x00, 0x3e, 0x01, 0xe0, 0x1f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x00, 0xc0, 0x0f, 0x00, 0x78, 0x00, 0x00, 0x07, 0x80, 0x78, 0x00,\n 0x00, 0x07, 0x80, 0x78, 0x00, 0xc0, 0x07, 0x80, 0x78, 0x01, 0xe0, 0x07,\n 0x80, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78,\n 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3e, 0x01, 0xe0, 0x1f, 0x00,\n 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x0f, 0x80,\n 0x00, 0x7c, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x03, 0xf8, 0x07, 0xf0,\n 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_about_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_about_34_data,\n};\n\nstatic const uint8_t beeos_icon_apps_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,\n 0xff, 0xe0, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xfe,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x1c, 0x01, 0xe0, 0x0e, 0x00, 0x3c,\n 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01,\n 0xe0, 0x0f, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff,\n 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x3c,\n 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01,\n 0xe0, 0x0f, 0x00, 0x1c, 0x01, 0xe0, 0x0e, 0x00, 0x1f, 0xff, 0xff, 0xfe,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x01,\n 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_apps_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_apps_34_data,\n};\n\nstatic const uint8_t beeos_icon_back_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x3e,\n 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,\n 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x07,\n 0xc0, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,\n 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00,\n 0x07, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xf0,\n 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00,\n 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,\n 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_back_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_back_34_data,\n};\n\nstatic const uint8_t beeos_icon_battery_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,\n 0xff, 0xff, 0x80, 0x00, 0x3f, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xff, 0xff,\n 0xe0, 0x00, 0x78, 0x00, 0x01, 0xe0, 0x00, 0x78, 0x00, 0x00, 0xe0, 0x00,\n 0x78, 0x00, 0x00, 0xe1, 0x00, 0x78, 0x00, 0x00, 0xe3, 0x80, 0x78, 0x00,\n 0x00, 0xe7, 0x80, 0x78, 0x00, 0x00, 0xe7, 0x80, 0x78, 0x00, 0x00, 0xe7,\n 0x80, 0x78, 0x00, 0x00, 0xe7, 0x80, 0x78, 0x00, 0x00, 0xe7, 0x80, 0x78,\n 0x00, 0x00, 0xe7, 0x80, 0x78, 0x00, 0x00, 0xe3, 0x80, 0x78, 0x00, 0x00,\n 0xe1, 0x00, 0x78, 0x00, 0x00, 0xe0, 0x00, 0x78, 0x00, 0x01, 0xe0, 0x00,\n 0x7f, 0xff, 0xff, 0xe0, 0x00, 0x3f, 0xff, 0xff, 0xc0, 0x00, 0x1f, 0xff,\n 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_battery_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_battery_34_data,\n};\n\nstatic const uint8_t beeos_icon_bluetooth_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01,\n 0xe0, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00,\n 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00,\n 0x01, 0xff, 0x00, 0x00, 0x00, 0x61, 0xef, 0x80, 0x00, 0x00, 0xf1, 0xe7,\n 0xc0, 0x00, 0x00, 0xf9, 0xe7, 0xc0, 0x00, 0x00, 0x7d, 0xef, 0x80, 0x00,\n 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x0f,\n 0xfc, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00,\n 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00,\n 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x3f, 0xff,\n 0x00, 0x00, 0x00, 0x7d, 0xef, 0x80, 0x00, 0x00, 0xf9, 0xe7, 0xc0, 0x00,\n 0x00, 0xf1, 0xe7, 0xc0, 0x00, 0x00, 0x61, 0xef, 0x80, 0x00, 0x00, 0x01,\n 0xff, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00,\n 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00,\n 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_bluetooth_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_bluetooth_34_data,\n};\n\nstatic const uint8_t beeos_icon_clock_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xe0,\n 0x00, 0x03, 0xf8, 0x07, 0xf0, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x0f,\n 0x80, 0xc0, 0x7c, 0x00, 0x0f, 0x01, 0xe0, 0x3c, 0x00, 0x1e, 0x01, 0xe0,\n 0x1e, 0x00, 0x3e, 0x01, 0xe0, 0x1f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01,\n 0xe0, 0x07, 0x80, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01, 0xf0, 0x07,\n 0x80, 0x78, 0x01, 0xfc, 0x07, 0x80, 0x78, 0x00, 0xff, 0x07, 0x80, 0x78,\n 0x00, 0x3f, 0x07, 0x80, 0x78, 0x00, 0x0f, 0x07, 0x80, 0x3c, 0x00, 0x02,\n 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3e, 0x00, 0x00, 0x1f, 0x00,\n 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x0f, 0x80,\n 0x00, 0x7c, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x03, 0xf8, 0x07, 0xf0,\n 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_clock_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_clock_34_data,\n};\n\nstatic const uint8_t beeos_icon_developer_tools_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00,\n 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,\n 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x78,\n 0x00, 0x00, 0x01, 0xc0, 0x78, 0xe0, 0x00, 0x03, 0xc0, 0x78, 0xf0, 0x00,\n 0x07, 0xc0, 0x70, 0xf8, 0x00, 0x0f, 0x80, 0xf0, 0x7c, 0x00, 0x1f, 0x00,\n 0xf0, 0x3e, 0x00, 0x3e, 0x00, 0xe0, 0x1f, 0x00, 0x7c, 0x01, 0xe0, 0x0f,\n 0x80, 0x7c, 0x01, 0xe0, 0x0f, 0x80, 0x3e, 0x01, 0xc0, 0x1f, 0x00, 0x1f,\n 0x03, 0xc0, 0x3e, 0x00, 0x0f, 0x83, 0xc0, 0x7c, 0x00, 0x07, 0xc3, 0x80,\n 0xf8, 0x00, 0x03, 0xc7, 0x80, 0xf0, 0x00, 0x01, 0xc7, 0x80, 0xe0, 0x00,\n 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x0f,\n 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,\n 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_developer_tools_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_developer_tools_34_data,\n};\n\nstatic const uint8_t beeos_icon_display_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01,\n 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x03, 0x01, 0xe0, 0x30, 0x00, 0x07, 0x81, 0xe0, 0x78, 0x00, 0x07,\n 0xc0, 0x00, 0xf8, 0x00, 0x03, 0xe0, 0x01, 0xf0, 0x00, 0x01, 0xe0, 0x01,\n 0xe0, 0x00, 0x00, 0xc7, 0xf8, 0xc0, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00,\n 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, 0x3c,\n 0x0f, 0x00, 0x00, 0x3e, 0x38, 0x07, 0x1f, 0x00, 0x7e, 0x38, 0x07, 0x1f,\n 0x80, 0x7e, 0x38, 0x07, 0x1f, 0x80, 0x3e, 0x38, 0x07, 0x1f, 0x00, 0x00,\n 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0xfe,\n 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0xc7, 0xf8, 0xc0, 0x00,\n 0x01, 0xe0, 0x01, 0xe0, 0x00, 0x03, 0xe0, 0x01, 0xf0, 0x00, 0x07, 0xc0,\n 0x00, 0xf8, 0x00, 0x07, 0x81, 0xe0, 0x78, 0x00, 0x03, 0x01, 0xe0, 0x30,\n 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00,\n 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_display_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_display_34_data,\n};\n\nstatic const uint8_t beeos_icon_github_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,\n 0x00, 0x40, 0x00, 0x01, 0xc0, 0x03, 0xf8, 0x00, 0x01, 0xc0, 0x07, 0xfc,\n 0x00, 0x01, 0xc0, 0x0f, 0xfe, 0x00, 0x01, 0xc0, 0x0f, 0x1e, 0x00, 0x01,\n 0xc0, 0xfe, 0x0e, 0x00, 0x01, 0xc3, 0xfe, 0x0f, 0x00, 0x01, 0xc7, 0xfe,\n 0x0e, 0x00, 0x01, 0xdf, 0xef, 0x1e, 0x00, 0x01, 0xff, 0x0f, 0xfe, 0x00,\n 0x01, 0xfe, 0x07, 0xfc, 0x00, 0x01, 0xfc, 0x03, 0xf8, 0x00, 0x01, 0xf8,\n 0x00, 0x40, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00,\n 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01,\n 0xc0, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00,\n 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00, 0x1e, 0x3c, 0x00, 0x00, 0x00,\n 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x00, 0x1c, 0x1c,\n 0x00, 0x00, 0x00, 0x1e, 0x3c, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00,\n 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00,\n 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_github_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_github_34_data,\n};\n\nstatic const uint8_t beeos_icon_gps_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01,\n 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, 0xfc, 0x0f,\n 0xc0, 0x00, 0x01, 0xf0, 0x03, 0xe0, 0x00, 0x01, 0xe3, 0xf1, 0xe0, 0x00,\n 0x03, 0xc7, 0xf8, 0xf0, 0x00, 0x03, 0xcf, 0xfc, 0xf0, 0x00, 0x03, 0x9f,\n 0xfe, 0x70, 0x00, 0x3f, 0x9e, 0x1e, 0x7f, 0x00, 0x7f, 0x9e, 0x1e, 0x7f,\n 0x80, 0x7f, 0x9e, 0x1e, 0x7f, 0x80, 0x3f, 0x9e, 0x1e, 0x7f, 0x00, 0x03,\n 0x9f, 0xfe, 0x70, 0x00, 0x03, 0xcf, 0xfc, 0xf0, 0x00, 0x03, 0xc7, 0xf8,\n 0xf0, 0x00, 0x01, 0xe3, 0xf1, 0xe0, 0x00, 0x01, 0xf0, 0x03, 0xe0, 0x00,\n 0x00, 0xfc, 0x0f, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00,\n 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_gps_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_gps_34_data,\n};\n\nstatic const uint8_t beeos_icon_health_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x0f, 0xe0,\n 0x00, 0x07, 0xff, 0x3f, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x1f,\n 0xdf, 0xfe, 0xfe, 0x00, 0x3e, 0x03, 0xf0, 0x1f, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x78, 0x00, 0x00, 0x07, 0x80, 0x78, 0x00, 0x00, 0x07, 0x80,\n 0x78, 0x00, 0x38, 0x07, 0x80, 0x78, 0x00, 0x3c, 0x07, 0x80, 0x78, 0x00,\n 0x3c, 0x07, 0x80, 0x78, 0x06, 0x7e, 0x07, 0x80, 0x3c, 0x0f, 0x7e, 0x0f,\n 0x00, 0x3f, 0xff, 0x7f, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x1f,\n 0xff, 0xf7, 0xfe, 0x00, 0x0f, 0x83, 0xf0, 0x7c, 0x00, 0x07, 0xc3, 0xe0,\n 0xf8, 0x00, 0x03, 0xe1, 0xe1, 0xf0, 0x00, 0x01, 0xf1, 0xe3, 0xe0, 0x00,\n 0x00, 0xf8, 0xc7, 0xc0, 0x00, 0x00, 0x7c, 0x0f, 0x80, 0x00, 0x00, 0x3e,\n 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x3e, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00,\n 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00,\n 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_health_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_health_34_data,\n};\n\nstatic const uint8_t beeos_icon_hivestore_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff,\n 0xff, 0xe0, 0x00, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xf8,\n 0x00, 0x0f, 0x80, 0x00, 0x7c, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x1f,\n 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff,\n 0xff, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x10, 0x02, 0x0f, 0x00, 0x3c, 0x38, 0x07, 0x0f, 0x00, 0x3c, 0x38,\n 0x07, 0x0f, 0x00, 0x3c, 0x38, 0x07, 0x0f, 0x00, 0x3c, 0x3c, 0x0f, 0x0f,\n 0x00, 0x3c, 0x3e, 0x1f, 0x0f, 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c,\n 0x0f, 0xfc, 0x0f, 0x00, 0x3c, 0x07, 0xf8, 0x0f, 0x00, 0x3c, 0x00, 0xc0,\n 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00,\n 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f,\n 0xff, 0xff, 0xfc, 0x00, 0x07, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_hivestore_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_hivestore_34_data,\n};\n\nstatic const uint8_t beeos_icon_home_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x03,\n 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00,\n 0x00, 0x00, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x7c, 0x0f, 0x80, 0x00, 0x00,\n 0xf8, 0x07, 0xc0, 0x00, 0x01, 0xf0, 0x03, 0xe0, 0x00, 0x07, 0xe0, 0x01,\n 0xf8, 0x00, 0x0f, 0xc0, 0x00, 0xfc, 0x00, 0x1f, 0x80, 0x00, 0x7e, 0x00,\n 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00,\n 0x00, 0x0f, 0x00, 0x3c, 0x07, 0xf8, 0x0f, 0x00, 0x3c, 0x0f, 0xfc, 0x0f,\n 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c,\n 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e,\n 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00,\n 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e,\n 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x1f, 0xff, 0xff, 0xfe,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x03,\n 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_home_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_home_34_data,\n};\n\nstatic const uint8_t beeos_icon_install_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00,\n 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0,\n 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00,\n 0x00, 0x61, 0xe1, 0x80, 0x00, 0x00, 0xf1, 0xe3, 0xc0, 0x00, 0x00, 0xf9,\n 0xe7, 0xc0, 0x00, 0x00, 0x7d, 0xef, 0x80, 0x00, 0x00, 0x3f, 0xff, 0x00,\n 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x08,\n 0x07, 0xf8, 0x04, 0x00, 0x1c, 0x03, 0xf0, 0x0e, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x00, 0xc0, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00,\n 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x1f, 0xff, 0xff, 0xfe,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x03,\n 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_install_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_install_34_data,\n};\n\nstatic const uint8_t beeos_icon_notifications_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x0f,\n 0xfc, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x80,\n 0x00, 0x00, 0xfc, 0x0f, 0xc0, 0x00, 0x00, 0xf0, 0x03, 0xc0, 0x00, 0x01,\n 0xf0, 0x03, 0xe0, 0x00, 0x01, 0xe0, 0x01, 0xe0, 0x00, 0x01, 0xe0, 0x01,\n 0xe0, 0x00, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0x01, 0xc0, 0x00, 0xe0, 0x00,\n 0x01, 0xc0, 0x00, 0xe0, 0x00, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0x03, 0xc0,\n 0x00, 0xf0, 0x00, 0x03, 0xc0, 0x00, 0xf0, 0x00, 0x03, 0xc0, 0x00, 0xf0,\n 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x0f,\n 0x80, 0x00, 0x7c, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x1e, 0x00, 0x00,\n 0x1e, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00,\n 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x38, 0x00,\n 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00,\n 0x03, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_notifications_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_notifications_34_data,\n};\n\nstatic const uint8_t beeos_icon_package_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x07,\n 0xf8, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00,\n 0x00, 0x00, 0xfe, 0x1f, 0xc0, 0x00, 0x03, 0xfe, 0x07, 0xf0, 0x00, 0x0f,\n 0xff, 0x83, 0xfc, 0x00, 0x1f, 0xdf, 0xe0, 0xfe, 0x00, 0x1f, 0x07, 0xf0,\n 0x3e, 0x00, 0x1f, 0x81, 0xfc, 0x7e, 0x00, 0x3f, 0xe0, 0x7f, 0xff, 0x00,\n 0x3f, 0xf8, 0x3f, 0xff, 0x00, 0x3d, 0xfe, 0x1f, 0xef, 0x00, 0x3c, 0x7f,\n 0x3f, 0x8f, 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c, 0x0f, 0xfc, 0x0f,\n 0x00, 0x3c, 0x03, 0xf0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c,\n 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x1e, 0x01, 0xe0, 0x1e, 0x00,\n 0x1f, 0x01, 0xe0, 0x3e, 0x00, 0x1f, 0xc1, 0xe0, 0xfe, 0x00, 0x0f, 0xf1,\n 0xe3, 0xfc, 0x00, 0x03, 0xf9, 0xe7, 0xf0, 0x00, 0x00, 0xff, 0xff, 0xc0,\n 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00,\n 0x07, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_package_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_package_34_data,\n};\n\nstatic const uint8_t beeos_icon_permissions_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x03,\n 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00,\n 0x00, 0x03, 0xff, 0x3f, 0xf0, 0x00, 0x07, 0xfc, 0x0f, 0xf8, 0x00, 0x0f,\n 0xf8, 0x07, 0xfc, 0x00, 0x0f, 0xc0, 0x00, 0xfc, 0x00, 0x0e, 0x00, 0x00,\n 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00,\n 0x0e, 0x00, 0x04, 0x1c, 0x00, 0x0e, 0x00, 0x1e, 0x1c, 0x00, 0x0e, 0x00,\n 0x3e, 0x1c, 0x00, 0x0e, 0x0c, 0x7c, 0x1c, 0x00, 0x0e, 0x1e, 0xf8, 0x1c,\n 0x00, 0x0e, 0x1f, 0xf0, 0x1c, 0x00, 0x0e, 0x0f, 0xe0, 0x1c, 0x00, 0x0f,\n 0x07, 0xc0, 0x3c, 0x00, 0x0f, 0x03, 0x80, 0x3c, 0x00, 0x0f, 0x01, 0x00,\n 0x3c, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00,\n 0x07, 0x80, 0x00, 0x78, 0x00, 0x03, 0xc0, 0x00, 0xf0, 0x00, 0x03, 0xe0,\n 0x01, 0xf0, 0x00, 0x01, 0xf8, 0x07, 0xe0, 0x00, 0x00, 0xfe, 0x1f, 0xc0,\n 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00,\n 0x07, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_permissions_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_permissions_34_data,\n};\n\nstatic const uint8_t beeos_icon_plugin_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x7c, 0x00, 0x00, 0x07,\n 0xf8, 0xfe, 0x00, 0x00, 0x0f, 0xfd, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xff,\n 0x80, 0x00, 0x3e, 0x1f, 0xc7, 0x80, 0x00, 0x3c, 0x0f, 0xc7, 0x80, 0x00,\n 0x3e, 0x07, 0x87, 0x80, 0x00, 0x3f, 0x00, 0x1f, 0x80, 0x00, 0x1f, 0x80,\n 0x3f, 0x00, 0x07, 0x87, 0x80, 0x3e, 0x00, 0x0f, 0xc3, 0x80, 0x3c, 0x00,\n 0x1f, 0xc3, 0x80, 0x3e, 0x00, 0x3f, 0xe7, 0x80, 0x1f, 0x00, 0x3d, 0xff,\n 0x80, 0x0f, 0x00, 0x78, 0xff, 0x00, 0x07, 0x80, 0x78, 0x7e, 0x00, 0x07,\n 0x80, 0x78, 0x00, 0x1f, 0x87, 0x80, 0x78, 0x00, 0x3f, 0xc7, 0x80, 0x3c,\n 0x00, 0x7f, 0xef, 0x00, 0x3e, 0x00, 0x79, 0xff, 0x00, 0x1f, 0x00, 0x70,\n 0xfe, 0x00, 0x0f, 0x00, 0x70, 0xfc, 0x00, 0x1f, 0x00, 0x78, 0x78, 0x00,\n 0x3f, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x3f, 0x00, 0x00, 0x78, 0x78,\n 0x1f, 0x00, 0x00, 0x78, 0xfc, 0x0f, 0x00, 0x00, 0x78, 0xfe, 0x1f, 0x00,\n 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xef, 0xfc, 0x00, 0x00, 0x1f,\n 0xc7, 0xf8, 0x00, 0x00, 0x0f, 0x81, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_plugin_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_plugin_34_data,\n};\n\nstatic const uint8_t beeos_icon_plugins_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x7c, 0x00, 0x00, 0x07,\n 0xf8, 0xfe, 0x00, 0x00, 0x0f, 0xfd, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xff,\n 0x80, 0x00, 0x3e, 0x1f, 0xc7, 0x80, 0x00, 0x3c, 0x0f, 0xc7, 0x80, 0x00,\n 0x3e, 0x07, 0x87, 0x80, 0x00, 0x3f, 0x00, 0x1f, 0x80, 0x00, 0x1f, 0x80,\n 0x3f, 0x00, 0x07, 0x87, 0x80, 0x3e, 0x00, 0x0f, 0xc3, 0x80, 0x3c, 0x00,\n 0x1f, 0xc3, 0x80, 0x3e, 0x00, 0x3f, 0xe7, 0x80, 0x1f, 0x00, 0x3d, 0xff,\n 0x80, 0x0f, 0x00, 0x78, 0xff, 0x00, 0x07, 0x80, 0x78, 0x7e, 0x00, 0x07,\n 0x80, 0x78, 0x00, 0x1f, 0x87, 0x80, 0x78, 0x00, 0x3f, 0xc7, 0x80, 0x3c,\n 0x00, 0x7f, 0xef, 0x00, 0x3e, 0x00, 0x79, 0xff, 0x00, 0x1f, 0x00, 0x70,\n 0xfe, 0x00, 0x0f, 0x00, 0x70, 0xfc, 0x00, 0x1f, 0x00, 0x78, 0x78, 0x00,\n 0x3f, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x3f, 0x00, 0x00, 0x78, 0x78,\n 0x1f, 0x00, 0x00, 0x78, 0xfc, 0x0f, 0x00, 0x00, 0x78, 0xfe, 0x1f, 0x00,\n 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xef, 0xfc, 0x00, 0x00, 0x1f,\n 0xc7, 0xf8, 0x00, 0x00, 0x0f, 0x81, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_plugins_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_plugins_34_data,\n};\n\nstatic const uint8_t beeos_icon_quick_tools_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00,\n 0x7f, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xe0,\n 0x00, 0x00, 0x03, 0xe3, 0xe0, 0x00, 0x00, 0x03, 0xc7, 0xc0, 0x00, 0x00,\n 0x07, 0x8f, 0x8f, 0x00, 0x00, 0x07, 0x9f, 0x1f, 0x80, 0x00, 0x07, 0x1e,\n 0x3f, 0x80, 0x00, 0x0f, 0x1e, 0x7f, 0x80, 0x00, 0x0f, 0x1f, 0xff, 0x80,\n 0x00, 0x0f, 0x0f, 0xf7, 0x80, 0x00, 0x07, 0x07, 0xe7, 0x80, 0x00, 0x07,\n 0x83, 0xc7, 0x00, 0x00, 0x0f, 0x80, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x1f,\n 0x00, 0x00, 0x3e, 0x30, 0x7e, 0x00, 0x00, 0x7c, 0x7f, 0xfc, 0x00, 0x00,\n 0xf8, 0xff, 0xf8, 0x00, 0x01, 0xf1, 0xff, 0xe0, 0x00, 0x03, 0xe3, 0xe7,\n 0x00, 0x00, 0x07, 0xc7, 0xc0, 0x00, 0x00, 0x0f, 0x8f, 0x80, 0x00, 0x00,\n 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, 0x00, 0x7c, 0x7c,\n 0x00, 0x00, 0x00, 0x78, 0xf8, 0x00, 0x00, 0x00, 0x79, 0xf0, 0x00, 0x00,\n 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x3f,\n 0x80, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_quick_tools_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_quick_tools_34_data,\n};\n\nstatic const uint8_t beeos_icon_remove_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x1f,\n 0xfe, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00,\n 0x00, 0x00, 0x38, 0x07, 0x00, 0x00, 0x00, 0x38, 0x07, 0x00, 0x00, 0x1f,\n 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff,\n 0xfe, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00,\n 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x87,\n 0x38, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78,\n 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07,\n 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c,\n 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00,\n 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x86, 0x18, 0x78, 0x00, 0x07, 0x80,\n 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78,\n 0x00, 0x07, 0xff, 0xff, 0xf8, 0x00, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x01,\n 0xff, 0xff, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_remove_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_remove_34_data,\n};\n\nstatic const uint8_t beeos_icon_resource_monitor_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1e,\n 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00,\n 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00,\n 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x77, 0x80,\n 0x00, 0x00, 0x00, 0xf7, 0x80, 0x00, 0x00, 0x00, 0xf3, 0x80, 0x00, 0x00,\n 0x00, 0xf3, 0xc0, 0x00, 0x00, 0x00, 0xe3, 0xc0, 0x00, 0x00, 0x01, 0xe3,\n 0xc0, 0x00, 0x00, 0x3f, 0xe1, 0xc0, 0x3f, 0x00, 0x7f, 0xc1, 0xe0, 0xff,\n 0x80, 0x7f, 0xc1, 0xe0, 0xff, 0x80, 0x3f, 0x00, 0xe1, 0xff, 0x00, 0x00,\n 0x00, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0xf1, 0xc0, 0x00, 0x00, 0x00, 0xf3,\n 0xc0, 0x00, 0x00, 0x00, 0x73, 0xc0, 0x00, 0x00, 0x00, 0x7b, 0xc0, 0x00,\n 0x00, 0x00, 0x7b, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00,\n 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00,\n 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,\n 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_resource_monitor_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_resource_monitor_34_data,\n};\n\nstatic const uint8_t beeos_icon_retro_clock_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xe0,\n 0x00, 0x03, 0xf8, 0x07, 0xf0, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x0f,\n 0x80, 0xc0, 0x7c, 0x00, 0x0f, 0x01, 0xe0, 0x3c, 0x00, 0x1e, 0x01, 0xe0,\n 0x1e, 0x00, 0x3e, 0x01, 0xe0, 0x1f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01,\n 0xe0, 0x07, 0x80, 0x78, 0x01, 0xff, 0x07, 0x80, 0x78, 0x01, 0xff, 0x07,\n 0x80, 0x78, 0x01, 0xff, 0x07, 0x80, 0x78, 0x00, 0xff, 0x07, 0x80, 0x78,\n 0x00, 0x00, 0x07, 0x80, 0x78, 0x00, 0x00, 0x07, 0x80, 0x3c, 0x00, 0x00,\n 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3e, 0x00, 0x00, 0x1f, 0x00,\n 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x0f, 0x80,\n 0x00, 0x7c, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x03, 0xf8, 0x07, 0xf0,\n 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_retro_clock_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_retro_clock_34_data,\n};\n\nstatic const uint8_t beeos_icon_runtime_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,\n 0x78, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00,\n 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00,\n 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x3e, 0xf0,\n 0x00, 0x00, 0x00, 0x7c, 0xf0, 0x00, 0x00, 0x00, 0xf9, 0xe0, 0x00, 0x00,\n 0x01, 0xf1, 0xff, 0xf8, 0x00, 0x03, 0xe1, 0xff, 0xfe, 0x00, 0x07, 0xc0,\n 0xff, 0xfe, 0x00, 0x0f, 0x80, 0x7f, 0xff, 0x00, 0x1f, 0x00, 0x00, 0x1e,\n 0x00, 0x1e, 0x00, 0x00, 0x3e, 0x00, 0x3f, 0xff, 0x80, 0x7c, 0x00, 0x1f,\n 0xff, 0xc0, 0xf8, 0x00, 0x1f, 0xff, 0xe1, 0xf0, 0x00, 0x07, 0xff, 0xe3,\n 0xe0, 0x00, 0x00, 0x01, 0xe7, 0xc0, 0x00, 0x00, 0x03, 0xcf, 0x80, 0x00,\n 0x00, 0x03, 0xdf, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x03,\n 0xfc, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00,\n 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00,\n 0x07, 0x80, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_runtime_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_runtime_34_data,\n};\n\nstatic const uint8_t beeos_icon_script_run_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,\n 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00,\n 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x07, 0x9f, 0xc0, 0x00, 0x00, 0x07,\n 0x87, 0xf0, 0x00, 0x00, 0x07, 0x83, 0xfc, 0x00, 0x00, 0x07, 0x80, 0xfe,\n 0x00, 0x00, 0x07, 0x80, 0x3f, 0x80, 0x00, 0x07, 0x80, 0x0f, 0xe0, 0x00,\n 0x07, 0x80, 0x07, 0xf0, 0x00, 0x07, 0x80, 0x01, 0xfc, 0x00, 0x07, 0x80,\n 0x00, 0x7e, 0x00, 0x07, 0x80, 0x00, 0x3e, 0x00, 0x07, 0x80, 0x00, 0x0f,\n 0x00, 0x07, 0x80, 0x00, 0x0f, 0x00, 0x07, 0x80, 0x00, 0x3e, 0x00, 0x07,\n 0x80, 0x00, 0x7e, 0x00, 0x07, 0x80, 0x01, 0xfc, 0x00, 0x07, 0x80, 0x07,\n 0xf0, 0x00, 0x07, 0x80, 0x0f, 0xe0, 0x00, 0x07, 0x80, 0x3f, 0x80, 0x00,\n 0x07, 0x80, 0xfe, 0x00, 0x00, 0x07, 0x83, 0xfc, 0x00, 0x00, 0x07, 0x87,\n 0xf0, 0x00, 0x00, 0x07, 0x9f, 0xc0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00,\n 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00,\n 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_script_run_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_script_run_34_data,\n};\n\nstatic const uint8_t beeos_icon_scripts_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x0f,\n 0x80, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00,\n 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,\n 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f,\n 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,\n 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00,\n 0xf8, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00,\n 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00,\n 0x0f, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x01,\n 0xff, 0xfc, 0x00, 0x00, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x00, 0xff, 0xf8,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_scripts_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_scripts_34_data,\n};\n\nstatic const uint8_t beeos_icon_search_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,\n 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00,\n 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0x03, 0xf8, 0x3f, 0x80, 0x00, 0x07,\n 0xe0, 0x07, 0xc0, 0x00, 0x07, 0x80, 0x03, 0xe0, 0x00, 0x0f, 0x00, 0x01,\n 0xe0, 0x00, 0x1f, 0x00, 0x00, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0xf0, 0x00,\n 0x1e, 0x00, 0x00, 0x70, 0x00, 0x1c, 0x00, 0x00, 0x78, 0x00, 0x1c, 0x00,\n 0x00, 0x78, 0x00, 0x3c, 0x00, 0x00, 0x78, 0x00, 0x1c, 0x00, 0x00, 0x78,\n 0x00, 0x1c, 0x00, 0x00, 0x78, 0x00, 0x1e, 0x00, 0x00, 0x70, 0x00, 0x1e,\n 0x00, 0x00, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0xf0, 0x00, 0x0f, 0x00, 0x01,\n 0xe0, 0x00, 0x0f, 0x80, 0x03, 0xe0, 0x00, 0x07, 0xc0, 0x07, 0xc0, 0x00,\n 0x03, 0xf0, 0x1f, 0xe0, 0x00, 0x01, 0xff, 0xff, 0xf0, 0x00, 0x00, 0xff,\n 0xfe, 0xf8, 0x00, 0x00, 0x3f, 0xf8, 0x7c, 0x00, 0x00, 0x07, 0xc0, 0x3e,\n 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_search_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_search_34_data,\n};\n\nstatic const uint8_t beeos_icon_settings_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x07,\n 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00,\n 0x00, 0x00, 0x0f, 0x3c, 0x00, 0x00, 0x01, 0x0e, 0x1c, 0x20, 0x00, 0x07,\n 0xfe, 0x1f, 0xf8, 0x00, 0x0f, 0xfe, 0x1f, 0xfc, 0x00, 0x1f, 0xfc, 0x0f,\n 0xfe, 0x00, 0x1e, 0x70, 0x03, 0x9e, 0x00, 0x3c, 0x03, 0xf0, 0x0e, 0x00,\n 0x1c, 0x07, 0xf8, 0x0e, 0x00, 0x1f, 0x0f, 0xfc, 0x3e, 0x00, 0x1f, 0x1f,\n 0xfe, 0x3e, 0x00, 0x0f, 0x9e, 0x1e, 0x7c, 0x00, 0x07, 0x9e, 0x1e, 0x78,\n 0x00, 0x07, 0x9e, 0x1e, 0x78, 0x00, 0x0f, 0x9e, 0x1e, 0x7c, 0x00, 0x1f,\n 0x1f, 0xfe, 0x3e, 0x00, 0x1f, 0x0f, 0xfc, 0x3e, 0x00, 0x1c, 0x07, 0xf8,\n 0x0e, 0x00, 0x3c, 0x03, 0xf0, 0x0e, 0x00, 0x1e, 0x70, 0x03, 0x9e, 0x00,\n 0x1f, 0xfc, 0x0f, 0xfe, 0x00, 0x0f, 0xfe, 0x1f, 0xfc, 0x00, 0x07, 0xfe,\n 0x1f, 0xf8, 0x00, 0x01, 0x0e, 0x1c, 0x20, 0x00, 0x00, 0x0f, 0x3c, 0x00,\n 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00,\n 0x07, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_settings_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_settings_34_data,\n};\n\nstatic const uint8_t beeos_icon_store_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff,\n 0xff, 0xe0, 0x00, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xf8,\n 0x00, 0x0f, 0x80, 0x00, 0x7c, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x1f,\n 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff,\n 0xff, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x10, 0x02, 0x0f, 0x00, 0x3c, 0x38, 0x07, 0x0f, 0x00, 0x3c, 0x38,\n 0x07, 0x0f, 0x00, 0x3c, 0x38, 0x07, 0x0f, 0x00, 0x3c, 0x3c, 0x0f, 0x0f,\n 0x00, 0x3c, 0x3e, 0x1f, 0x0f, 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c,\n 0x0f, 0xfc, 0x0f, 0x00, 0x3c, 0x07, 0xf8, 0x0f, 0x00, 0x3c, 0x00, 0xc0,\n 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00,\n 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f,\n 0xff, 0xff, 0xfc, 0x00, 0x07, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_store_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_store_34_data,\n};\n\nstatic const uint8_t beeos_icon_theme_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,\n 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0xff,\n 0x80, 0x00, 0x03, 0x83, 0xe7, 0x80, 0x00, 0x0f, 0xe7, 0xc7, 0x80, 0x00,\n 0x1f, 0xff, 0x8f, 0x80, 0x00, 0x3f, 0xff, 0x1f, 0x00, 0x00, 0x3c, 0x7e,\n 0x3e, 0x00, 0x00, 0x3e, 0x3c, 0x7c, 0x00, 0x00, 0x3e, 0x00, 0xf8, 0x00,\n 0x00, 0x7f, 0x01, 0xf0, 0x00, 0x00, 0xff, 0x81, 0xe0, 0x00, 0x03, 0xff,\n 0xc1, 0xe0, 0x00, 0x3f, 0xe3, 0xe1, 0xf0, 0x00, 0x7f, 0xc1, 0xf0, 0xf0,\n 0x00, 0x7f, 0x00, 0xf8, 0x78, 0x00, 0x7c, 0x00, 0x7c, 0x78, 0x00, 0x3e,\n 0x00, 0x3f, 0x78, 0x00, 0x1f, 0xc0, 0x1f, 0xf0, 0x00, 0x1f, 0xf8, 0x0f,\n 0xf0, 0x00, 0x0f, 0xff, 0x8f, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xc0, 0x00,\n 0x03, 0xff, 0xfe, 0x00, 0x00, 0x01, 0xe3, 0xfe, 0x00, 0x00, 0x00, 0xf0,\n 0x7c, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x7d, 0xf0, 0x00,\n 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x00,\n 0x0f, 0x80, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_theme_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_theme_34_data,\n};\n\nstatic const uint8_t beeos_icon_themes_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xe0,\n 0x00, 0x03, 0xf0, 0x03, 0xf8, 0x00, 0x07, 0xc0, 0x00, 0xf8, 0x00, 0x0f,\n 0x80, 0x78, 0x7c, 0x00, 0x1f, 0x18, 0x78, 0x3e, 0x00, 0x1e, 0x3c, 0x7c,\n 0x1f, 0x00, 0x3c, 0x3c, 0x78, 0x0f, 0x00, 0x3c, 0x3c, 0x30, 0x0f, 0x00,\n 0x38, 0x3c, 0x00, 0x87, 0x80, 0x78, 0x00, 0x01, 0xe7, 0x80, 0x78, 0x00,\n 0x03, 0xe7, 0x80, 0x78, 0xc0, 0x03, 0xe7, 0x80, 0x79, 0xe0, 0x01, 0xe7,\n 0x80, 0x79, 0xf0, 0x00, 0x07, 0x80, 0x79, 0xe0, 0x00, 0x0f, 0x00, 0x78,\n 0xe0, 0x00, 0x0f, 0x00, 0x78, 0x00, 0x00, 0x3e, 0x00, 0x38, 0x00, 0x1f,\n 0xfe, 0x00, 0x3c, 0x00, 0x3f, 0xfc, 0x00, 0x3c, 0x00, 0x7f, 0xf0, 0x00,\n 0x1e, 0x00, 0x78, 0x00, 0x00, 0x1f, 0x00, 0x70, 0x00, 0x00, 0x0f, 0x80,\n 0x78, 0x00, 0x00, 0x07, 0xc0, 0x78, 0x00, 0x00, 0x03, 0xf0, 0x3c, 0x00,\n 0x00, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x00,\n 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_themes_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_themes_34_data,\n};\n\nstatic const uint8_t beeos_icon_touch_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x70,\n 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0x00,\n 0x00, 0x00, 0x78, 0x3c, 0x00, 0x00, 0x00, 0x78, 0xf8, 0x00, 0x00, 0x00,\n 0x38, 0xf8, 0x00, 0x00, 0x10, 0x39, 0xf0, 0x00, 0x00, 0x7e, 0x00, 0xe0,\n 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x8e, 0x00, 0x00, 0x00,\n 0x07, 0x9f, 0xc0, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x1f,\n 0xfe, 0x00, 0x00, 0x00, 0x8f, 0xff, 0x80, 0x00, 0x03, 0xcf, 0x3f, 0xf0,\n 0x00, 0x03, 0xcf, 0x0f, 0xfc, 0x00, 0x07, 0xc7, 0x81, 0xfe, 0x00, 0x0f,\n 0x87, 0x80, 0x7f, 0x00, 0x0f, 0x03, 0xc3, 0xfe, 0x00, 0x04, 0x03, 0xc7,\n 0xfe, 0x00, 0x00, 0x03, 0xcf, 0xf8, 0x00, 0x00, 0x01, 0xef, 0x80, 0x00,\n 0x00, 0x01, 0xef, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,\n 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00,\n 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,\n 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_touch_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_touch_34_data,\n};\n\nstatic const uint8_t beeos_icon_vibration_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,\n 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00,\n 0x00, 0x01, 0xc1, 0xe7, 0x00, 0x00, 0x07, 0xf1, 0xe7, 0x00, 0x00, 0x07,\n 0xf1, 0xe7, 0x00, 0x00, 0x0f, 0xf9, 0xe7, 0x00, 0x00, 0x0f, 0x79, 0xe7,\n 0x00, 0x00, 0x0e, 0x39, 0xe7, 0x00, 0x00, 0x0e, 0x39, 0xe7, 0x00, 0x00,\n 0x0e, 0x39, 0xe7, 0x00, 0x00, 0x0e, 0x39, 0xe7, 0x00, 0x00, 0x0e, 0x39,\n 0xe7, 0x07, 0x80, 0x0e, 0x39, 0xe7, 0x0f, 0x80, 0x1e, 0x39, 0xe7, 0x1f,\n 0x80, 0x7e, 0x39, 0xe7, 0x1e, 0x00, 0x7c, 0x39, 0xe7, 0x1c, 0x00, 0x78,\n 0x39, 0xe7, 0x1c, 0x00, 0x00, 0x39, 0xe7, 0x1c, 0x00, 0x00, 0x39, 0xe7,\n 0x1c, 0x00, 0x00, 0x39, 0xe7, 0x1c, 0x00, 0x00, 0x39, 0xe7, 0x1c, 0x00,\n 0x00, 0x39, 0xe7, 0xbc, 0x00, 0x00, 0x39, 0xe7, 0xfc, 0x00, 0x00, 0x39,\n 0xe3, 0xf8, 0x00, 0x00, 0x39, 0xe3, 0xf8, 0x00, 0x00, 0x39, 0xe0, 0xe0,\n 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00,\n 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_vibration_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_vibration_34_data,\n};\n\nstatic const uint8_t beeos_icon_watch_face_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x0f,\n 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00,\n 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff,\n 0x00, 0x00, 0x00, 0x7f, 0x3f, 0x80, 0x00, 0x00, 0xf8, 0x07, 0xc0, 0x00,\n 0x00, 0xf0, 0xc3, 0xc0, 0x00, 0x01, 0xe1, 0xe1, 0xe0, 0x00, 0x01, 0xe1,\n 0xe1, 0xe0, 0x00, 0x01, 0xc1, 0xe1, 0xe0, 0x00, 0x01, 0xc1, 0xe0, 0xe0,\n 0x00, 0x01, 0xc1, 0xf8, 0xe0, 0x00, 0x01, 0xe0, 0xf9, 0xe0, 0x00, 0x01,\n 0xe0, 0x79, 0xe0, 0x00, 0x01, 0xe0, 0x01, 0xe0, 0x00, 0x00, 0xf0, 0x03,\n 0xc0, 0x00, 0x00, 0xf8, 0x07, 0xc0, 0x00, 0x00, 0x7f, 0x3f, 0x80, 0x00,\n 0x00, 0x3f, 0xff, 0x80, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x00,\n 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00,\n 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_watch_face_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_watch_face_34_data,\n};\n\nstatic const uint8_t beeos_icon_weather_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01,\n 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x03, 0x01, 0xe0, 0x30, 0x00, 0x07, 0x81, 0xe0, 0x78, 0x00, 0x07,\n 0xc0, 0x00, 0xf8, 0x00, 0x03, 0xe0, 0x01, 0xf0, 0x00, 0x01, 0xe0, 0x01,\n 0xe0, 0x00, 0x00, 0xc7, 0xf8, 0xc0, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00,\n 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x00, 0x00,\n 0x0f, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x1f, 0x00, 0x07, 0xfe, 0x07, 0x1f,\n 0x80, 0x0f, 0xff, 0x07, 0x1f, 0x80, 0x1f, 0xff, 0x87, 0x1f, 0x00, 0x3e,\n 0x07, 0xc2, 0x00, 0x00, 0x3c, 0x03, 0xc0, 0x00, 0x00, 0x78, 0x01, 0xf8,\n 0x00, 0x00, 0x78, 0x01, 0xfe, 0x00, 0x00, 0x78, 0x01, 0xfe, 0x00, 0x00,\n 0x78, 0x00, 0x1f, 0x00, 0x00, 0x78, 0x00, 0x0f, 0x00, 0x00, 0x78, 0x00,\n 0x07, 0x00, 0x00, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x3e, 0x00, 0x0f, 0x00,\n 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xfe, 0x00, 0x00, 0x07,\n 0xff, 0xfc, 0x00, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_img_dsc_t beeos_icon_weather_34_dsc = {\n .header.always_zero = 0,\n .header.reserved = 0,\n .header.cf = LV_IMG_CF_ALPHA_1BIT,\n .header.w = 34,\n .header.h = 34,\n .data_size = 170,\n .data = beeos_icon_weather_34_data,\n};\n \ No newline at end of file diff --git a/beeos/generated/icons/lvgl_v8/beeos_icons_34_lvgl_v8.h b/beeos/generated/icons/lvgl_v8/beeos_icons_34_lvgl_v8.h new file mode 100644 index 0000000..980f917 --- /dev/null +++ b/beeos/generated/icons/lvgl_v8/beeos_icons_34_lvgl_v8.h @@ -0,0 +1 @@ +/* Auto-generated BeeOS LVGL v8 icon descriptors. */\n#pragma once\n\n#include \n\nLV_IMG_DECLARE(beeos_icon_about_34_dsc);\nLV_IMG_DECLARE(beeos_icon_apps_34_dsc);\nLV_IMG_DECLARE(beeos_icon_back_34_dsc);\nLV_IMG_DECLARE(beeos_icon_battery_34_dsc);\nLV_IMG_DECLARE(beeos_icon_bluetooth_34_dsc);\nLV_IMG_DECLARE(beeos_icon_clock_34_dsc);\nLV_IMG_DECLARE(beeos_icon_developer_tools_34_dsc);\nLV_IMG_DECLARE(beeos_icon_display_34_dsc);\nLV_IMG_DECLARE(beeos_icon_github_34_dsc);\nLV_IMG_DECLARE(beeos_icon_gps_34_dsc);\nLV_IMG_DECLARE(beeos_icon_health_34_dsc);\nLV_IMG_DECLARE(beeos_icon_hivestore_34_dsc);\nLV_IMG_DECLARE(beeos_icon_home_34_dsc);\nLV_IMG_DECLARE(beeos_icon_install_34_dsc);\nLV_IMG_DECLARE(beeos_icon_notifications_34_dsc);\nLV_IMG_DECLARE(beeos_icon_package_34_dsc);\nLV_IMG_DECLARE(beeos_icon_permissions_34_dsc);\nLV_IMG_DECLARE(beeos_icon_plugin_34_dsc);\nLV_IMG_DECLARE(beeos_icon_plugins_34_dsc);\nLV_IMG_DECLARE(beeos_icon_quick_tools_34_dsc);\nLV_IMG_DECLARE(beeos_icon_remove_34_dsc);\nLV_IMG_DECLARE(beeos_icon_resource_monitor_34_dsc);\nLV_IMG_DECLARE(beeos_icon_retro_clock_34_dsc);\nLV_IMG_DECLARE(beeos_icon_runtime_34_dsc);\nLV_IMG_DECLARE(beeos_icon_script_run_34_dsc);\nLV_IMG_DECLARE(beeos_icon_scripts_34_dsc);\nLV_IMG_DECLARE(beeos_icon_search_34_dsc);\nLV_IMG_DECLARE(beeos_icon_settings_34_dsc);\nLV_IMG_DECLARE(beeos_icon_store_34_dsc);\nLV_IMG_DECLARE(beeos_icon_theme_34_dsc);\nLV_IMG_DECLARE(beeos_icon_themes_34_dsc);\nLV_IMG_DECLARE(beeos_icon_touch_34_dsc);\nLV_IMG_DECLARE(beeos_icon_vibration_34_dsc);\nLV_IMG_DECLARE(beeos_icon_watch_face_34_dsc);\nLV_IMG_DECLARE(beeos_icon_weather_34_dsc); \ No newline at end of file diff --git a/beeos/generated/icons/lvgl_v9/beeos_icons_24_lvgl_v9.c b/beeos/generated/icons/lvgl_v9/beeos_icons_24_lvgl_v9.c new file mode 100644 index 0000000..5d6d31f --- /dev/null +++ b/beeos/generated/icons/lvgl_v9/beeos_icons_24_lvgl_v9.c @@ -0,0 +1 @@ +/* Auto-generated BeeOS LVGL v9 icon descriptors.\n Uses LV_COLOR_FORMAT_I1 for monochrome/alpha icon masks.\n Some LVGL v9 ports may need color-format adjustments depending on display setup. */\n\n#include "beeos_icons_24_lvgl_v9.h"\n\nstatic const uint8_t beeos_icon_about_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x03, 0xff, 0xc0, 0x0f, 0xe7, 0xf0,\n 0x1f, 0x00, 0xf8, 0x1c, 0x00, 0x38, 0x38, 0x00, 0x1c, 0x38, 0x18, 0x1c,\n 0x70, 0x18, 0x0e, 0x70, 0x00, 0x0e, 0x70, 0x00, 0x0e, 0x60, 0x18, 0x06,\n 0x60, 0x18, 0x06, 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e,\n 0x38, 0x18, 0x1c, 0x38, 0x00, 0x1c, 0x1c, 0x00, 0x38, 0x1f, 0x00, 0xf8,\n 0x0f, 0xe7, 0xf0, 0x03, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_about_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_about_24_data,\n};\n\nstatic const uint8_t beeos_icon_apps_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x3f, 0xff, 0xfc,\n 0x38, 0x18, 0x1c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c,\n 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x3f, 0xff, 0xfc,\n 0x3f, 0xff, 0xfc, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c,\n 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x38, 0x18, 0x1c,\n 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_apps_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_apps_24_data,\n};\n\nstatic const uint8_t beeos_icon_back_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0e, 0x00,\n 0x00, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0xe0, 0x00,\n 0x00, 0xe0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x1e, 0x00,\n 0x00, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_back_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_back_24_data,\n};\n\nstatic const uint8_t beeos_icon_battery_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, 0x7f, 0xff, 0xe0, 0x70, 0x00, 0xe0,\n 0x60, 0x00, 0x60, 0x60, 0x00, 0x66, 0x60, 0x00, 0x66, 0x60, 0x00, 0x66,\n 0x60, 0x00, 0x66, 0x60, 0x00, 0x66, 0x60, 0x00, 0x66, 0x60, 0x00, 0x60,\n 0x70, 0x00, 0xe0, 0x7f, 0xff, 0xe0, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_battery_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_battery_24_data,\n};\n\nstatic const uint8_t beeos_icon_bluetooth_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1f, 0x00,\n 0x00, 0x1f, 0x00, 0x00, 0x1b, 0xc0, 0x03, 0x19, 0xc0, 0x03, 0x99, 0xc0,\n 0x01, 0xfb, 0x80, 0x00, 0xff, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00,\n 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xff, 0x00, 0x01, 0xdb, 0xc0,\n 0x03, 0x99, 0xc0, 0x03, 0x19, 0xc0, 0x00, 0x1b, 0x80, 0x00, 0x1f, 0x00,\n 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_bluetooth_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_bluetooth_24_data,\n};\n\nstatic const uint8_t beeos_icon_clock_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x03, 0xff, 0xc0, 0x0f, 0xe7, 0xf0,\n 0x1f, 0x00, 0xf8, 0x1c, 0x18, 0x38, 0x38, 0x18, 0x1c, 0x38, 0x18, 0x1c,\n 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x60, 0x1c, 0x06,\n 0x60, 0x1f, 0x06, 0x70, 0x0f, 0x8e, 0x70, 0x03, 0x8e, 0x70, 0x00, 0x0e,\n 0x38, 0x00, 0x1c, 0x38, 0x00, 0x1c, 0x1c, 0x00, 0x38, 0x1f, 0x00, 0xf8,\n 0x0f, 0xe7, 0xf0, 0x03, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_clock_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_clock_24_data,\n};\n\nstatic const uint8_t beeos_icon_developer_tools_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,\n 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0e, 0x00, 0x06, 0x0e, 0x60,\n 0x0e, 0x0e, 0x70, 0x1c, 0x1c, 0x3c, 0x38, 0x1c, 0x1e, 0x70, 0x1c, 0x0e,\n 0x70, 0x38, 0x0e, 0x3c, 0x38, 0x1c, 0x1e, 0x38, 0x38, 0x0e, 0x70, 0x70,\n 0x06, 0x70, 0x60, 0x00, 0x70, 0x00, 0x00, 0x60, 0x00, 0x00, 0xe0, 0x00,\n 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_developer_tools_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_developer_tools_24_data,\n};\n\nstatic const uint8_t beeos_icon_display_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x0c, 0x18, 0x30, 0x0e, 0x00, 0x70, 0x07, 0x00, 0xe0, 0x02, 0x7e, 0x40,\n 0x00, 0xff, 0x00, 0x01, 0xe7, 0x80, 0x01, 0xc3, 0x80, 0x79, 0x81, 0x9e,\n 0x79, 0x81, 0x9e, 0x01, 0xc3, 0x80, 0x01, 0xe7, 0x80, 0x00, 0xff, 0x00,\n 0x02, 0x7e, 0x40, 0x07, 0x00, 0xe0, 0x0e, 0x00, 0x70, 0x0c, 0x18, 0x30,\n 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_display_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_display_24_data,\n};\n\nstatic const uint8_t beeos_icon_github_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0xf8, 0x06, 0x03, 0xfc,\n 0x06, 0x03, 0x9c, 0x06, 0x1f, 0x9c, 0x06, 0x7f, 0x9c, 0x06, 0xff, 0x9c,\n 0x07, 0xe3, 0xfc, 0x07, 0xc1, 0xf8, 0x07, 0x80, 0x00, 0x07, 0x00, 0x00,\n 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x3f, 0xc0, 0x00,\n 0x39, 0xc0, 0x00, 0x39, 0xc0, 0x00, 0x39, 0xc0, 0x00, 0x39, 0xc0, 0x00,\n 0x3f, 0xc0, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_github_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_github_24_data,\n};\n\nstatic const uint8_t beeos_icon_gps_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x00, 0xff, 0x00, 0x01, 0xff, 0x80, 0x03, 0xe7, 0xc0, 0x07, 0x81, 0xe0,\n 0x0f, 0x7e, 0xf0, 0x0e, 0xff, 0x70, 0x0e, 0xe7, 0x70, 0x7c, 0xe7, 0x3e,\n 0x7c, 0xe7, 0x3e, 0x0e, 0xe7, 0x70, 0x0e, 0xff, 0x70, 0x0f, 0x7e, 0xf0,\n 0x07, 0x81, 0xe0, 0x03, 0xe7, 0xc0, 0x01, 0xff, 0x80, 0x00, 0xff, 0x00,\n 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_gps_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_gps_24_data,\n};\n\nstatic const uint8_t beeos_icon_health_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe7, 0xf0,\n 0x1f, 0xff, 0xf8, 0x3e, 0xff, 0x7c, 0x78, 0x3c, 0x1e, 0x70, 0x00, 0x0e,\n 0x70, 0x06, 0x0e, 0x60, 0x07, 0x06, 0x70, 0x0f, 0x0e, 0x70, 0x6f, 0x0e,\n 0x7f, 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0x1c, 0x3c, 0x38, 0x0f, 0x3c, 0xf0,\n 0x07, 0xb9, 0xe0, 0x03, 0xdb, 0xc0, 0x01, 0xe7, 0x80, 0x00, 0xff, 0x00,\n 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_health_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_health_24_data,\n};\n\nstatic const uint8_t beeos_icon_hivestore_24_data[] = {\n 0x00, 0x00, 0x00, 0x07, 0xff, 0xe0, 0x0f, 0xff, 0xf0, 0x1e, 0x00, 0x78,\n 0x3c, 0x00, 0x3c, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x30, 0x00, 0x0c,\n 0x30, 0x00, 0x0c, 0x31, 0x81, 0x8c, 0x31, 0x81, 0x8c, 0x31, 0xc3, 0x8c,\n 0x31, 0xe7, 0x8c, 0x30, 0xff, 0x0c, 0x30, 0x7e, 0x0c, 0x30, 0x00, 0x0c,\n 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c,\n 0x38, 0x00, 0x1c, 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_hivestore_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_hivestore_24_data,\n};\n\nstatic const uint8_t beeos_icon_home_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x01, 0xff, 0x80,\n 0x03, 0xc3, 0xc0, 0x07, 0x81, 0xe0, 0x0f, 0x00, 0xf0, 0x1e, 0x00, 0x78,\n 0x3c, 0x00, 0x3c, 0x38, 0x00, 0x1c, 0x30, 0x00, 0x0c, 0x30, 0xff, 0x0c,\n 0x30, 0xff, 0x0c, 0x30, 0xc3, 0x0c, 0x30, 0xc3, 0x0c, 0x30, 0xc3, 0x0c,\n 0x30, 0xc3, 0x0c, 0x30, 0xc3, 0x0c, 0x30, 0xc3, 0x0c, 0x38, 0xc3, 0x1c,\n 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_home_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_home_24_data,\n};\n\nstatic const uint8_t beeos_icon_install_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x00, 0x18, 0x00, 0x03, 0x18, 0xc0, 0x03, 0x99, 0xc0, 0x01, 0xfb, 0x80,\n 0x00, 0xff, 0x00, 0x00, 0x7e, 0x00, 0x30, 0x3c, 0x0c, 0x30, 0x18, 0x0c,\n 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x38, 0x00, 0x1c,\n 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_install_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_install_24_data,\n};\n\nstatic const uint8_t beeos_icon_notifications_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x01, 0xff, 0x80, 0x03, 0xe7, 0xc0,\n 0x07, 0x81, 0xe0, 0x07, 0x00, 0xe0, 0x07, 0x00, 0xe0, 0x06, 0x00, 0x60,\n 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x0e, 0x00, 0x70, 0x0e, 0x00, 0x70,\n 0x0e, 0x00, 0x70, 0x1c, 0x00, 0x38, 0x3c, 0x00, 0x3c, 0x38, 0x00, 0x1c,\n 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_notifications_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_notifications_24_data,\n};\n\nstatic const uint8_t beeos_icon_package_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xff, 0x00, 0x03, 0xff, 0xc0,\n 0x0f, 0xe3, 0xf0, 0x1f, 0xf0, 0xf8, 0x3c, 0x7c, 0x3c, 0x3e, 0x3f, 0x7c,\n 0x3f, 0x8f, 0xfc, 0x37, 0xc3, 0xec, 0x31, 0xff, 0xcc, 0x30, 0xff, 0x0c,\n 0x30, 0x3c, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c, 0x30, 0x18, 0x0c,\n 0x38, 0x18, 0x1c, 0x3c, 0x18, 0x3c, 0x1f, 0x18, 0xf8, 0x0f, 0xdb, 0xf0,\n 0x03, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_package_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_package_24_data,\n};\n\nstatic const uint8_t beeos_icon_permissions_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xfe, 0x00, 0x03, 0xff, 0xc0,\n 0x1f, 0xe7, 0xf8, 0x1f, 0x81, 0xf8, 0x18, 0x00, 0x18, 0x18, 0x00, 0x18,\n 0x18, 0x00, 0x18, 0x18, 0x03, 0x18, 0x18, 0x07, 0x18, 0x18, 0xce, 0x18,\n 0x18, 0xfc, 0x18, 0x18, 0x78, 0x18, 0x1c, 0x30, 0x38, 0x1c, 0x00, 0x38,\n 0x1c, 0x00, 0x38, 0x0e, 0x00, 0x70, 0x0f, 0x00, 0xf0, 0x07, 0xc3, 0xe0,\n 0x03, 0xff, 0xc0, 0x01, 0xff, 0x80, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_permissions_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_permissions_24_data,\n};\n\nstatic const uint8_t beeos_icon_plugin_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x7e, 0xfe, 0x00, 0xff, 0xee,\n 0x01, 0xc3, 0xc6, 0x01, 0xe1, 0xce, 0x01, 0xf0, 0x3e, 0x0e, 0x70, 0x3c,\n 0x1e, 0x30, 0x38, 0x3f, 0x70, 0x1c, 0x77, 0xf0, 0x0e, 0x73, 0xe0, 0x0e,\n 0x70, 0x07, 0xce, 0x70, 0x0f, 0xee, 0x38, 0x0e, 0xfc, 0x1c, 0x0c, 0x78,\n 0x3c, 0x0e, 0x70, 0x7c, 0x0f, 0x80, 0x73, 0x87, 0x80, 0x63, 0xc3, 0x80,\n 0x77, 0xff, 0x00, 0x7f, 0x7e, 0x00, 0x3e, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_plugin_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_plugin_24_data,\n};\n\nstatic const uint8_t beeos_icon_plugins_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x7e, 0xfe, 0x00, 0xff, 0xee,\n 0x01, 0xc3, 0xc6, 0x01, 0xe1, 0xce, 0x01, 0xf0, 0x3e, 0x0e, 0x70, 0x3c,\n 0x1e, 0x30, 0x38, 0x3f, 0x70, 0x1c, 0x77, 0xf0, 0x0e, 0x73, 0xe0, 0x0e,\n 0x70, 0x07, 0xce, 0x70, 0x0f, 0xee, 0x38, 0x0e, 0xfc, 0x1c, 0x0c, 0x78,\n 0x3c, 0x0e, 0x70, 0x7c, 0x0f, 0x80, 0x73, 0x87, 0x80, 0x63, 0xc3, 0x80,\n 0x77, 0xff, 0x00, 0x7f, 0x7e, 0x00, 0x3e, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_plugins_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_plugins_24_data,\n};\n\nstatic const uint8_t beeos_icon_quick_tools_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x1f, 0xe0, 0x00, 0x3f, 0xe0,\n 0x00, 0x79, 0xc0, 0x00, 0x73, 0x8e, 0x00, 0x77, 0x1e, 0x00, 0x67, 0x3e,\n 0x00, 0x63, 0xfe, 0x00, 0x71, 0xee, 0x00, 0x70, 0xce, 0x00, 0xe0, 0x1e,\n 0x01, 0xc6, 0x7c, 0x03, 0x8f, 0xf8, 0x07, 0x1f, 0xf0, 0x0e, 0x38, 0x00,\n 0x1c, 0x70, 0x00, 0x38, 0xe0, 0x00, 0x71, 0xc0, 0x00, 0x73, 0x80, 0x00,\n 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_quick_tools_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_quick_tools_24_data,\n};\n\nstatic const uint8_t beeos_icon_remove_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x01, 0xff, 0x80, 0x01, 0xc3, 0x80,\n 0x01, 0x81, 0x80, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x0c, 0x00, 0x30,\n 0x0c, 0x00, 0x30, 0x0c, 0x00, 0x30, 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30,\n 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30,\n 0x0c, 0x66, 0x30, 0x0c, 0x66, 0x30, 0x0c, 0x00, 0x30, 0x0c, 0x00, 0x30,\n 0x0e, 0x00, 0x70, 0x0f, 0xff, 0xf0, 0x07, 0xff, 0xe0, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_remove_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_remove_24_data,\n};\n\nstatic const uint8_t beeos_icon_resource_monitor_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x01, 0xe0, 0x00, 0x01, 0xe0, 0x00,\n 0x01, 0xe0, 0x00, 0x03, 0xf0, 0x00, 0x03, 0xf0, 0x00, 0x03, 0xf0, 0x00,\n 0x03, 0x30, 0x00, 0x07, 0x38, 0x00, 0x07, 0x38, 0x00, 0x7f, 0x38, 0x7e,\n 0x7e, 0x1c, 0xfe, 0x00, 0x1c, 0xe0, 0x00, 0x1c, 0xe0, 0x00, 0x0c, 0xc0,\n 0x00, 0x0f, 0xc0, 0x00, 0x0f, 0xc0, 0x00, 0x0f, 0xc0, 0x00, 0x07, 0x80,\n 0x00, 0x07, 0x80, 0x00, 0x07, 0x80, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_resource_monitor_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_resource_monitor_24_data,\n};\n\nstatic const uint8_t beeos_icon_retro_clock_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x03, 0xff, 0xc0, 0x0f, 0xe7, 0xf0,\n 0x1f, 0x00, 0xf8, 0x1c, 0x18, 0x38, 0x38, 0x18, 0x1c, 0x38, 0x18, 0x1c,\n 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x70, 0x18, 0x0e, 0x60, 0x1f, 0x86,\n 0x60, 0x1f, 0x86, 0x70, 0x00, 0x0e, 0x70, 0x00, 0x0e, 0x70, 0x00, 0x0e,\n 0x38, 0x00, 0x1c, 0x38, 0x00, 0x1c, 0x1c, 0x00, 0x38, 0x1f, 0x00, 0xf8,\n 0x0f, 0xe7, 0xf0, 0x03, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_retro_clock_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_retro_clock_24_data,\n};\n\nstatic const uint8_t beeos_icon_runtime_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x3e, 0x00,\n 0x00, 0x7e, 0x00, 0x00, 0xfe, 0x00, 0x01, 0xfc, 0x00, 0x03, 0xdc, 0x00,\n 0x07, 0x9c, 0x00, 0x0f, 0x1f, 0xfc, 0x1e, 0x1f, 0xfc, 0x3c, 0x00, 0x1c,\n 0x38, 0x00, 0x3c, 0x3f, 0xf8, 0x78, 0x3f, 0xf8, 0xf0, 0x00, 0x39, 0xe0,\n 0x00, 0x3b, 0xc0, 0x00, 0x3f, 0x80, 0x00, 0x7f, 0x00, 0x00, 0x7e, 0x00,\n 0x00, 0x7c, 0x00, 0x00, 0x78, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_runtime_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_runtime_24_data,\n};\n\nstatic const uint8_t beeos_icon_script_run_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x0f, 0xe0, 0x00,\n 0x0f, 0xf8, 0x00, 0x0c, 0x7e, 0x00, 0x0c, 0x1f, 0x00, 0x0c, 0x0f, 0xc0,\n 0x0c, 0x03, 0xf0, 0x0c, 0x00, 0xf8, 0x0c, 0x00, 0x3c, 0x0c, 0x00, 0x1c,\n 0x0c, 0x00, 0x1c, 0x0c, 0x00, 0x3c, 0x0c, 0x00, 0xf8, 0x0c, 0x03, 0xf0,\n 0x0c, 0x0f, 0xc0, 0x0c, 0x1f, 0x00, 0x0c, 0x7e, 0x00, 0x0f, 0xf8, 0x00,\n 0x0f, 0xe0, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_script_run_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_script_run_24_data,\n};\n\nstatic const uint8_t beeos_icon_scripts_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x18, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x07, 0x80, 0x00,\n 0x03, 0xc0, 0x00, 0x01, 0xe0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xe0, 0x00,\n 0x01, 0xc0, 0x00, 0x03, 0x80, 0x00, 0x07, 0x00, 0x00, 0x0e, 0x00, 0x00,\n 0x1c, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x1f, 0xf8,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_scripts_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_scripts_24_data,\n};\n\nstatic const uint8_t beeos_icon_search_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x07, 0xff, 0x80,\n 0x0f, 0xcf, 0xc0, 0x1e, 0x01, 0xe0, 0x1c, 0x00, 0xe0, 0x38, 0x00, 0x70,\n 0x38, 0x00, 0x70, 0x38, 0x00, 0x70, 0x30, 0x00, 0x30, 0x30, 0x00, 0x30,\n 0x38, 0x00, 0x70, 0x38, 0x00, 0x70, 0x38, 0x00, 0x70, 0x1c, 0x00, 0xe0,\n 0x1e, 0x01, 0xe0, 0x0f, 0xcf, 0xe0, 0x07, 0xff, 0xf8, 0x01, 0xfe, 0x3c,\n 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_search_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_search_24_data,\n};\n\nstatic const uint8_t beeos_icon_settings_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xff, 0x00,\n 0x04, 0xe7, 0x20, 0x1f, 0xe7, 0xf8, 0x3f, 0xc3, 0xfc, 0x3b, 0x00, 0xdc,\n 0x38, 0x7e, 0x1c, 0x38, 0xff, 0x1c, 0x3c, 0xe7, 0x3c, 0x1c, 0xe7, 0x38,\n 0x1c, 0xe7, 0x38, 0x3c, 0xe7, 0x3c, 0x38, 0xff, 0x1c, 0x38, 0x7e, 0x1c,\n 0x3b, 0x00, 0xdc, 0x3f, 0xc3, 0xfc, 0x1f, 0xe7, 0xf8, 0x04, 0xe7, 0x20,\n 0x00, 0xff, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_settings_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_settings_24_data,\n};\n\nstatic const uint8_t beeos_icon_store_24_data[] = {\n 0x00, 0x00, 0x00, 0x07, 0xff, 0xe0, 0x0f, 0xff, 0xf0, 0x1e, 0x00, 0x78,\n 0x3c, 0x00, 0x3c, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x30, 0x00, 0x0c,\n 0x30, 0x00, 0x0c, 0x31, 0x81, 0x8c, 0x31, 0x81, 0x8c, 0x31, 0xc3, 0x8c,\n 0x31, 0xe7, 0x8c, 0x30, 0xff, 0x0c, 0x30, 0x7e, 0x0c, 0x30, 0x00, 0x0c,\n 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c, 0x30, 0x00, 0x0c,\n 0x38, 0x00, 0x1c, 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_store_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_store_24_data,\n};\n\nstatic const uint8_t beeos_icon_theme_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xfe,\n 0x00, 0x79, 0xce, 0x00, 0xff, 0x8e, 0x01, 0xff, 0x1c, 0x01, 0xc6, 0x38,\n 0x01, 0xe0, 0x70, 0x07, 0xf0, 0xe0, 0x1f, 0xb8, 0xe0, 0x7f, 0x1c, 0x70,\n 0x7c, 0x0e, 0x70, 0x78, 0x07, 0x70, 0x3e, 0x03, 0xf0, 0x1f, 0xe3, 0xe0,\n 0x1f, 0xff, 0xc0, 0x0f, 0xff, 0x80, 0x07, 0x8f, 0x00, 0x03, 0x9e, 0x00,\n 0x01, 0xfc, 0x00, 0x01, 0xf8, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_theme_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_theme_24_data,\n};\n\nstatic const uint8_t beeos_icon_themes_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0x03, 0xff, 0xe0, 0x0f, 0xe7, 0xf0,\n 0x1f, 0x00, 0xf8, 0x1c, 0x0e, 0x3c, 0x39, 0xce, 0x1c, 0x39, 0xce, 0x0e,\n 0x71, 0xc0, 0x0e, 0x70, 0x00, 0xee, 0x70, 0x00, 0xe6, 0x67, 0x00, 0xe6,\n 0x67, 0x00, 0x0e, 0x77, 0x00, 0x0e, 0x70, 0x00, 0x3c, 0x70, 0x07, 0xfc,\n 0x38, 0x0f, 0xf0, 0x38, 0x0e, 0x00, 0x1c, 0x0e, 0x00, 0x1f, 0x0e, 0x00,\n 0x0f, 0xee, 0x00, 0x03, 0xfe, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_themes_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_themes_24_data,\n};\n\nstatic const uint8_t beeos_icon_touch_24_data[] = {\n 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, 0x00, 0x03, 0x86, 0x00,\n 0x03, 0x8e, 0x00, 0x01, 0x9e, 0x00, 0x78, 0x1c, 0x00, 0x7c, 0x00, 0x00,\n 0x3c, 0xf0, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xff, 0x80, 0x06, 0xef, 0xe0,\n 0x0e, 0x73, 0xfc, 0x1e, 0x70, 0x7c, 0x1c, 0x79, 0xfc, 0x00, 0x3b, 0xfc,\n 0x00, 0x3b, 0xc0, 0x00, 0x1f, 0x80, 0x00, 0x1f, 0x00, 0x00, 0x0f, 0x00,\n 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_touch_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_touch_24_data,\n};\n\nstatic const uint8_t beeos_icon_vibration_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x1f, 0x80,\n 0x0f, 0x19, 0x80, 0x1f, 0x99, 0x80, 0x1f, 0x99, 0x80, 0x19, 0x99, 0x80,\n 0x19, 0x99, 0x80, 0x19, 0x99, 0x80, 0x19, 0x99, 0x8e, 0x39, 0x99, 0x9e,\n 0x79, 0x99, 0x9c, 0x71, 0x99, 0x98, 0x01, 0x99, 0x98, 0x01, 0x99, 0x98,\n 0x01, 0x99, 0x98, 0x01, 0x99, 0xf8, 0x01, 0x99, 0xf8, 0x01, 0x98, 0xf0,\n 0x01, 0xf8, 0x00, 0x01, 0xf8, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_vibration_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_vibration_24_data,\n};\n\nstatic const uint8_t beeos_icon_watch_face_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x01, 0xc3, 0x80,\n 0x01, 0xc3, 0x80, 0x01, 0xff, 0x80, 0x01, 0xff, 0x80, 0x03, 0xe7, 0xc0,\n 0x03, 0x81, 0xc0, 0x07, 0x18, 0xe0, 0x07, 0x18, 0xe0, 0x06, 0x1c, 0x60,\n 0x06, 0x1e, 0x60, 0x07, 0x1e, 0xe0, 0x07, 0x04, 0xe0, 0x03, 0x81, 0xc0,\n 0x03, 0xe7, 0xc0, 0x01, 0xff, 0x80, 0x01, 0xff, 0x80, 0x01, 0xc3, 0x80,\n 0x01, 0xc3, 0x80, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_watch_face_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_watch_face_24_data,\n};\n\nstatic const uint8_t beeos_icon_weather_24_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00,\n 0x0c, 0x18, 0x30, 0x0e, 0x00, 0x70, 0x07, 0x00, 0xe0, 0x02, 0x7e, 0x40,\n 0x00, 0x7f, 0x00, 0x00, 0x67, 0x80, 0x00, 0x03, 0x80, 0x0f, 0xc1, 0x9e,\n 0x3f, 0xf1, 0x9e, 0x3c, 0xf1, 0x80, 0x70, 0x38, 0x00, 0x70, 0x3f, 0x00,\n 0x60, 0x1f, 0x80, 0x60, 0x03, 0x80, 0x70, 0x01, 0x80, 0x70, 0x01, 0x80,\n 0x3c, 0x03, 0x80, 0x3f, 0xff, 0x80, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_weather_24_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 24,\n .header.h = 24,\n .header.stride = 3,\n .data_size = 72,\n .data = beeos_icon_weather_24_data,\n};\n \ No newline at end of file diff --git a/beeos/generated/icons/lvgl_v9/beeos_icons_24_lvgl_v9.h b/beeos/generated/icons/lvgl_v9/beeos_icons_24_lvgl_v9.h new file mode 100644 index 0000000..0d3a0cf --- /dev/null +++ b/beeos/generated/icons/lvgl_v9/beeos_icons_24_lvgl_v9.h @@ -0,0 +1 @@ +/* Auto-generated BeeOS LVGL v9 icon descriptors. */\n#pragma once\n\n#include \n\nextern const lv_image_dsc_t beeos_icon_about_24_dsc;\nextern const lv_image_dsc_t beeos_icon_apps_24_dsc;\nextern const lv_image_dsc_t beeos_icon_back_24_dsc;\nextern const lv_image_dsc_t beeos_icon_battery_24_dsc;\nextern const lv_image_dsc_t beeos_icon_bluetooth_24_dsc;\nextern const lv_image_dsc_t beeos_icon_clock_24_dsc;\nextern const lv_image_dsc_t beeos_icon_developer_tools_24_dsc;\nextern const lv_image_dsc_t beeos_icon_display_24_dsc;\nextern const lv_image_dsc_t beeos_icon_github_24_dsc;\nextern const lv_image_dsc_t beeos_icon_gps_24_dsc;\nextern const lv_image_dsc_t beeos_icon_health_24_dsc;\nextern const lv_image_dsc_t beeos_icon_hivestore_24_dsc;\nextern const lv_image_dsc_t beeos_icon_home_24_dsc;\nextern const lv_image_dsc_t beeos_icon_install_24_dsc;\nextern const lv_image_dsc_t beeos_icon_notifications_24_dsc;\nextern const lv_image_dsc_t beeos_icon_package_24_dsc;\nextern const lv_image_dsc_t beeos_icon_permissions_24_dsc;\nextern const lv_image_dsc_t beeos_icon_plugin_24_dsc;\nextern const lv_image_dsc_t beeos_icon_plugins_24_dsc;\nextern const lv_image_dsc_t beeos_icon_quick_tools_24_dsc;\nextern const lv_image_dsc_t beeos_icon_remove_24_dsc;\nextern const lv_image_dsc_t beeos_icon_resource_monitor_24_dsc;\nextern const lv_image_dsc_t beeos_icon_retro_clock_24_dsc;\nextern const lv_image_dsc_t beeos_icon_runtime_24_dsc;\nextern const lv_image_dsc_t beeos_icon_script_run_24_dsc;\nextern const lv_image_dsc_t beeos_icon_scripts_24_dsc;\nextern const lv_image_dsc_t beeos_icon_search_24_dsc;\nextern const lv_image_dsc_t beeos_icon_settings_24_dsc;\nextern const lv_image_dsc_t beeos_icon_store_24_dsc;\nextern const lv_image_dsc_t beeos_icon_theme_24_dsc;\nextern const lv_image_dsc_t beeos_icon_themes_24_dsc;\nextern const lv_image_dsc_t beeos_icon_touch_24_dsc;\nextern const lv_image_dsc_t beeos_icon_vibration_24_dsc;\nextern const lv_image_dsc_t beeos_icon_watch_face_24_dsc;\nextern const lv_image_dsc_t beeos_icon_weather_24_dsc; \ No newline at end of file diff --git a/beeos/generated/icons/lvgl_v9/beeos_icons_34_lvgl_v9.c b/beeos/generated/icons/lvgl_v9/beeos_icons_34_lvgl_v9.c new file mode 100644 index 0000000..6af49d1 --- /dev/null +++ b/beeos/generated/icons/lvgl_v9/beeos_icons_34_lvgl_v9.c @@ -0,0 +1 @@ +/* Auto-generated BeeOS LVGL v9 icon descriptors.\n Uses LV_COLOR_FORMAT_I1 for monochrome/alpha icon masks.\n Some LVGL v9 ports may need color-format adjustments depending on display setup. */\n\n#include "beeos_icons_34_lvgl_v9.h"\n\nstatic const uint8_t beeos_icon_about_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xe0,\n 0x00, 0x03, 0xf8, 0x07, 0xf0, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x0f,\n 0x80, 0x00, 0x7c, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x1e, 0x00, 0x00,\n 0x1e, 0x00, 0x3e, 0x01, 0xe0, 0x1f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x00, 0xc0, 0x0f, 0x00, 0x78, 0x00, 0x00, 0x07, 0x80, 0x78, 0x00,\n 0x00, 0x07, 0x80, 0x78, 0x00, 0xc0, 0x07, 0x80, 0x78, 0x01, 0xe0, 0x07,\n 0x80, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78,\n 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3e, 0x01, 0xe0, 0x1f, 0x00,\n 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x0f, 0x80,\n 0x00, 0x7c, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x03, 0xf8, 0x07, 0xf0,\n 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_about_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_about_34_data,\n};\n\nstatic const uint8_t beeos_icon_apps_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,\n 0xff, 0xe0, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xfe,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x1c, 0x01, 0xe0, 0x0e, 0x00, 0x3c,\n 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01,\n 0xe0, 0x0f, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff,\n 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x3c,\n 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01,\n 0xe0, 0x0f, 0x00, 0x1c, 0x01, 0xe0, 0x0e, 0x00, 0x1f, 0xff, 0xff, 0xfe,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x01,\n 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_apps_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_apps_34_data,\n};\n\nstatic const uint8_t beeos_icon_back_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x3e,\n 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,\n 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x07,\n 0xc0, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,\n 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00,\n 0x07, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xf0,\n 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00,\n 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,\n 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_back_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_back_34_data,\n};\n\nstatic const uint8_t beeos_icon_battery_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,\n 0xff, 0xff, 0x80, 0x00, 0x3f, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xff, 0xff,\n 0xe0, 0x00, 0x78, 0x00, 0x01, 0xe0, 0x00, 0x78, 0x00, 0x00, 0xe0, 0x00,\n 0x78, 0x00, 0x00, 0xe1, 0x00, 0x78, 0x00, 0x00, 0xe3, 0x80, 0x78, 0x00,\n 0x00, 0xe7, 0x80, 0x78, 0x00, 0x00, 0xe7, 0x80, 0x78, 0x00, 0x00, 0xe7,\n 0x80, 0x78, 0x00, 0x00, 0xe7, 0x80, 0x78, 0x00, 0x00, 0xe7, 0x80, 0x78,\n 0x00, 0x00, 0xe7, 0x80, 0x78, 0x00, 0x00, 0xe3, 0x80, 0x78, 0x00, 0x00,\n 0xe1, 0x00, 0x78, 0x00, 0x00, 0xe0, 0x00, 0x78, 0x00, 0x01, 0xe0, 0x00,\n 0x7f, 0xff, 0xff, 0xe0, 0x00, 0x3f, 0xff, 0xff, 0xc0, 0x00, 0x1f, 0xff,\n 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_battery_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_battery_34_data,\n};\n\nstatic const uint8_t beeos_icon_bluetooth_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01,\n 0xe0, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00,\n 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00,\n 0x01, 0xff, 0x00, 0x00, 0x00, 0x61, 0xef, 0x80, 0x00, 0x00, 0xf1, 0xe7,\n 0xc0, 0x00, 0x00, 0xf9, 0xe7, 0xc0, 0x00, 0x00, 0x7d, 0xef, 0x80, 0x00,\n 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x0f,\n 0xfc, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00,\n 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00,\n 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x3f, 0xff,\n 0x00, 0x00, 0x00, 0x7d, 0xef, 0x80, 0x00, 0x00, 0xf9, 0xe7, 0xc0, 0x00,\n 0x00, 0xf1, 0xe7, 0xc0, 0x00, 0x00, 0x61, 0xef, 0x80, 0x00, 0x00, 0x01,\n 0xff, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00,\n 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00,\n 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_bluetooth_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_bluetooth_34_data,\n};\n\nstatic const uint8_t beeos_icon_clock_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xe0,\n 0x00, 0x03, 0xf8, 0x07, 0xf0, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x0f,\n 0x80, 0xc0, 0x7c, 0x00, 0x0f, 0x01, 0xe0, 0x3c, 0x00, 0x1e, 0x01, 0xe0,\n 0x1e, 0x00, 0x3e, 0x01, 0xe0, 0x1f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01,\n 0xe0, 0x07, 0x80, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01, 0xf0, 0x07,\n 0x80, 0x78, 0x01, 0xfc, 0x07, 0x80, 0x78, 0x00, 0xff, 0x07, 0x80, 0x78,\n 0x00, 0x3f, 0x07, 0x80, 0x78, 0x00, 0x0f, 0x07, 0x80, 0x3c, 0x00, 0x02,\n 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3e, 0x00, 0x00, 0x1f, 0x00,\n 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x0f, 0x80,\n 0x00, 0x7c, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x03, 0xf8, 0x07, 0xf0,\n 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_clock_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_clock_34_data,\n};\n\nstatic const uint8_t beeos_icon_developer_tools_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00,\n 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,\n 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x78,\n 0x00, 0x00, 0x01, 0xc0, 0x78, 0xe0, 0x00, 0x03, 0xc0, 0x78, 0xf0, 0x00,\n 0x07, 0xc0, 0x70, 0xf8, 0x00, 0x0f, 0x80, 0xf0, 0x7c, 0x00, 0x1f, 0x00,\n 0xf0, 0x3e, 0x00, 0x3e, 0x00, 0xe0, 0x1f, 0x00, 0x7c, 0x01, 0xe0, 0x0f,\n 0x80, 0x7c, 0x01, 0xe0, 0x0f, 0x80, 0x3e, 0x01, 0xc0, 0x1f, 0x00, 0x1f,\n 0x03, 0xc0, 0x3e, 0x00, 0x0f, 0x83, 0xc0, 0x7c, 0x00, 0x07, 0xc3, 0x80,\n 0xf8, 0x00, 0x03, 0xc7, 0x80, 0xf0, 0x00, 0x01, 0xc7, 0x80, 0xe0, 0x00,\n 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x0f,\n 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,\n 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_developer_tools_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_developer_tools_34_data,\n};\n\nstatic const uint8_t beeos_icon_display_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01,\n 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x03, 0x01, 0xe0, 0x30, 0x00, 0x07, 0x81, 0xe0, 0x78, 0x00, 0x07,\n 0xc0, 0x00, 0xf8, 0x00, 0x03, 0xe0, 0x01, 0xf0, 0x00, 0x01, 0xe0, 0x01,\n 0xe0, 0x00, 0x00, 0xc7, 0xf8, 0xc0, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00,\n 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, 0x3c,\n 0x0f, 0x00, 0x00, 0x3e, 0x38, 0x07, 0x1f, 0x00, 0x7e, 0x38, 0x07, 0x1f,\n 0x80, 0x7e, 0x38, 0x07, 0x1f, 0x80, 0x3e, 0x38, 0x07, 0x1f, 0x00, 0x00,\n 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0xfe,\n 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0xc7, 0xf8, 0xc0, 0x00,\n 0x01, 0xe0, 0x01, 0xe0, 0x00, 0x03, 0xe0, 0x01, 0xf0, 0x00, 0x07, 0xc0,\n 0x00, 0xf8, 0x00, 0x07, 0x81, 0xe0, 0x78, 0x00, 0x03, 0x01, 0xe0, 0x30,\n 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00,\n 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_display_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_display_34_data,\n};\n\nstatic const uint8_t beeos_icon_github_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,\n 0x00, 0x40, 0x00, 0x01, 0xc0, 0x03, 0xf8, 0x00, 0x01, 0xc0, 0x07, 0xfc,\n 0x00, 0x01, 0xc0, 0x0f, 0xfe, 0x00, 0x01, 0xc0, 0x0f, 0x1e, 0x00, 0x01,\n 0xc0, 0xfe, 0x0e, 0x00, 0x01, 0xc3, 0xfe, 0x0f, 0x00, 0x01, 0xc7, 0xfe,\n 0x0e, 0x00, 0x01, 0xdf, 0xef, 0x1e, 0x00, 0x01, 0xff, 0x0f, 0xfe, 0x00,\n 0x01, 0xfe, 0x07, 0xfc, 0x00, 0x01, 0xfc, 0x03, 0xf8, 0x00, 0x01, 0xf8,\n 0x00, 0x40, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00,\n 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01,\n 0xc0, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00,\n 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00, 0x1e, 0x3c, 0x00, 0x00, 0x00,\n 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x00, 0x1c, 0x1c,\n 0x00, 0x00, 0x00, 0x1e, 0x3c, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00,\n 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00,\n 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_github_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_github_34_data,\n};\n\nstatic const uint8_t beeos_icon_gps_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01,\n 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, 0xfc, 0x0f,\n 0xc0, 0x00, 0x01, 0xf0, 0x03, 0xe0, 0x00, 0x01, 0xe3, 0xf1, 0xe0, 0x00,\n 0x03, 0xc7, 0xf8, 0xf0, 0x00, 0x03, 0xcf, 0xfc, 0xf0, 0x00, 0x03, 0x9f,\n 0xfe, 0x70, 0x00, 0x3f, 0x9e, 0x1e, 0x7f, 0x00, 0x7f, 0x9e, 0x1e, 0x7f,\n 0x80, 0x7f, 0x9e, 0x1e, 0x7f, 0x80, 0x3f, 0x9e, 0x1e, 0x7f, 0x00, 0x03,\n 0x9f, 0xfe, 0x70, 0x00, 0x03, 0xcf, 0xfc, 0xf0, 0x00, 0x03, 0xc7, 0xf8,\n 0xf0, 0x00, 0x01, 0xe3, 0xf1, 0xe0, 0x00, 0x01, 0xf0, 0x03, 0xe0, 0x00,\n 0x00, 0xfc, 0x0f, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00,\n 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_gps_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_gps_34_data,\n};\n\nstatic const uint8_t beeos_icon_health_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x0f, 0xe0,\n 0x00, 0x07, 0xff, 0x3f, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x1f,\n 0xdf, 0xfe, 0xfe, 0x00, 0x3e, 0x03, 0xf0, 0x1f, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x78, 0x00, 0x00, 0x07, 0x80, 0x78, 0x00, 0x00, 0x07, 0x80,\n 0x78, 0x00, 0x38, 0x07, 0x80, 0x78, 0x00, 0x3c, 0x07, 0x80, 0x78, 0x00,\n 0x3c, 0x07, 0x80, 0x78, 0x06, 0x7e, 0x07, 0x80, 0x3c, 0x0f, 0x7e, 0x0f,\n 0x00, 0x3f, 0xff, 0x7f, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x1f,\n 0xff, 0xf7, 0xfe, 0x00, 0x0f, 0x83, 0xf0, 0x7c, 0x00, 0x07, 0xc3, 0xe0,\n 0xf8, 0x00, 0x03, 0xe1, 0xe1, 0xf0, 0x00, 0x01, 0xf1, 0xe3, 0xe0, 0x00,\n 0x00, 0xf8, 0xc7, 0xc0, 0x00, 0x00, 0x7c, 0x0f, 0x80, 0x00, 0x00, 0x3e,\n 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x3e, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00,\n 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00,\n 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_health_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_health_34_data,\n};\n\nstatic const uint8_t beeos_icon_hivestore_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff,\n 0xff, 0xe0, 0x00, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xf8,\n 0x00, 0x0f, 0x80, 0x00, 0x7c, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x1f,\n 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff,\n 0xff, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x10, 0x02, 0x0f, 0x00, 0x3c, 0x38, 0x07, 0x0f, 0x00, 0x3c, 0x38,\n 0x07, 0x0f, 0x00, 0x3c, 0x38, 0x07, 0x0f, 0x00, 0x3c, 0x3c, 0x0f, 0x0f,\n 0x00, 0x3c, 0x3e, 0x1f, 0x0f, 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c,\n 0x0f, 0xfc, 0x0f, 0x00, 0x3c, 0x07, 0xf8, 0x0f, 0x00, 0x3c, 0x00, 0xc0,\n 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00,\n 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f,\n 0xff, 0xff, 0xfc, 0x00, 0x07, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_hivestore_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_hivestore_34_data,\n};\n\nstatic const uint8_t beeos_icon_home_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x03,\n 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00,\n 0x00, 0x00, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x7c, 0x0f, 0x80, 0x00, 0x00,\n 0xf8, 0x07, 0xc0, 0x00, 0x01, 0xf0, 0x03, 0xe0, 0x00, 0x07, 0xe0, 0x01,\n 0xf8, 0x00, 0x0f, 0xc0, 0x00, 0xfc, 0x00, 0x1f, 0x80, 0x00, 0x7e, 0x00,\n 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00,\n 0x00, 0x0f, 0x00, 0x3c, 0x07, 0xf8, 0x0f, 0x00, 0x3c, 0x0f, 0xfc, 0x0f,\n 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c,\n 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e,\n 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00,\n 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x3c, 0x1e,\n 0x1e, 0x0f, 0x00, 0x3c, 0x1e, 0x1e, 0x0f, 0x00, 0x1f, 0xff, 0xff, 0xfe,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x03,\n 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_home_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_home_34_data,\n};\n\nstatic const uint8_t beeos_icon_install_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00,\n 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0,\n 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00,\n 0x00, 0x61, 0xe1, 0x80, 0x00, 0x00, 0xf1, 0xe3, 0xc0, 0x00, 0x00, 0xf9,\n 0xe7, 0xc0, 0x00, 0x00, 0x7d, 0xef, 0x80, 0x00, 0x00, 0x3f, 0xff, 0x00,\n 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x08,\n 0x07, 0xf8, 0x04, 0x00, 0x1c, 0x03, 0xf0, 0x0e, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x00, 0xc0, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00,\n 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x1f, 0xff, 0xff, 0xfe,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x03,\n 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_install_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_install_34_data,\n};\n\nstatic const uint8_t beeos_icon_notifications_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x0f,\n 0xfc, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x80,\n 0x00, 0x00, 0xfc, 0x0f, 0xc0, 0x00, 0x00, 0xf0, 0x03, 0xc0, 0x00, 0x01,\n 0xf0, 0x03, 0xe0, 0x00, 0x01, 0xe0, 0x01, 0xe0, 0x00, 0x01, 0xe0, 0x01,\n 0xe0, 0x00, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0x01, 0xc0, 0x00, 0xe0, 0x00,\n 0x01, 0xc0, 0x00, 0xe0, 0x00, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0x03, 0xc0,\n 0x00, 0xf0, 0x00, 0x03, 0xc0, 0x00, 0xf0, 0x00, 0x03, 0xc0, 0x00, 0xf0,\n 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x0f,\n 0x80, 0x00, 0x7c, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x1e, 0x00, 0x00,\n 0x1e, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00,\n 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x38, 0x00,\n 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00,\n 0x03, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_notifications_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_notifications_34_data,\n};\n\nstatic const uint8_t beeos_icon_package_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x07,\n 0xf8, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00,\n 0x00, 0x00, 0xfe, 0x1f, 0xc0, 0x00, 0x03, 0xfe, 0x07, 0xf0, 0x00, 0x0f,\n 0xff, 0x83, 0xfc, 0x00, 0x1f, 0xdf, 0xe0, 0xfe, 0x00, 0x1f, 0x07, 0xf0,\n 0x3e, 0x00, 0x1f, 0x81, 0xfc, 0x7e, 0x00, 0x3f, 0xe0, 0x7f, 0xff, 0x00,\n 0x3f, 0xf8, 0x3f, 0xff, 0x00, 0x3d, 0xfe, 0x1f, 0xef, 0x00, 0x3c, 0x7f,\n 0x3f, 0x8f, 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c, 0x0f, 0xfc, 0x0f,\n 0x00, 0x3c, 0x03, 0xf0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c,\n 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x3c, 0x01, 0xe0,\n 0x0f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x1e, 0x01, 0xe0, 0x1e, 0x00,\n 0x1f, 0x01, 0xe0, 0x3e, 0x00, 0x1f, 0xc1, 0xe0, 0xfe, 0x00, 0x0f, 0xf1,\n 0xe3, 0xfc, 0x00, 0x03, 0xf9, 0xe7, 0xf0, 0x00, 0x00, 0xff, 0xff, 0xc0,\n 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00,\n 0x07, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_package_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_package_34_data,\n};\n\nstatic const uint8_t beeos_icon_permissions_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x03,\n 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00,\n 0x00, 0x03, 0xff, 0x3f, 0xf0, 0x00, 0x07, 0xfc, 0x0f, 0xf8, 0x00, 0x0f,\n 0xf8, 0x07, 0xfc, 0x00, 0x0f, 0xc0, 0x00, 0xfc, 0x00, 0x0e, 0x00, 0x00,\n 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00,\n 0x0e, 0x00, 0x04, 0x1c, 0x00, 0x0e, 0x00, 0x1e, 0x1c, 0x00, 0x0e, 0x00,\n 0x3e, 0x1c, 0x00, 0x0e, 0x0c, 0x7c, 0x1c, 0x00, 0x0e, 0x1e, 0xf8, 0x1c,\n 0x00, 0x0e, 0x1f, 0xf0, 0x1c, 0x00, 0x0e, 0x0f, 0xe0, 0x1c, 0x00, 0x0f,\n 0x07, 0xc0, 0x3c, 0x00, 0x0f, 0x03, 0x80, 0x3c, 0x00, 0x0f, 0x01, 0x00,\n 0x3c, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00,\n 0x07, 0x80, 0x00, 0x78, 0x00, 0x03, 0xc0, 0x00, 0xf0, 0x00, 0x03, 0xe0,\n 0x01, 0xf0, 0x00, 0x01, 0xf8, 0x07, 0xe0, 0x00, 0x00, 0xfe, 0x1f, 0xc0,\n 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00,\n 0x07, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_permissions_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_permissions_34_data,\n};\n\nstatic const uint8_t beeos_icon_plugin_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x7c, 0x00, 0x00, 0x07,\n 0xf8, 0xfe, 0x00, 0x00, 0x0f, 0xfd, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xff,\n 0x80, 0x00, 0x3e, 0x1f, 0xc7, 0x80, 0x00, 0x3c, 0x0f, 0xc7, 0x80, 0x00,\n 0x3e, 0x07, 0x87, 0x80, 0x00, 0x3f, 0x00, 0x1f, 0x80, 0x00, 0x1f, 0x80,\n 0x3f, 0x00, 0x07, 0x87, 0x80, 0x3e, 0x00, 0x0f, 0xc3, 0x80, 0x3c, 0x00,\n 0x1f, 0xc3, 0x80, 0x3e, 0x00, 0x3f, 0xe7, 0x80, 0x1f, 0x00, 0x3d, 0xff,\n 0x80, 0x0f, 0x00, 0x78, 0xff, 0x00, 0x07, 0x80, 0x78, 0x7e, 0x00, 0x07,\n 0x80, 0x78, 0x00, 0x1f, 0x87, 0x80, 0x78, 0x00, 0x3f, 0xc7, 0x80, 0x3c,\n 0x00, 0x7f, 0xef, 0x00, 0x3e, 0x00, 0x79, 0xff, 0x00, 0x1f, 0x00, 0x70,\n 0xfe, 0x00, 0x0f, 0x00, 0x70, 0xfc, 0x00, 0x1f, 0x00, 0x78, 0x78, 0x00,\n 0x3f, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x3f, 0x00, 0x00, 0x78, 0x78,\n 0x1f, 0x00, 0x00, 0x78, 0xfc, 0x0f, 0x00, 0x00, 0x78, 0xfe, 0x1f, 0x00,\n 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xef, 0xfc, 0x00, 0x00, 0x1f,\n 0xc7, 0xf8, 0x00, 0x00, 0x0f, 0x81, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_plugin_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_plugin_34_data,\n};\n\nstatic const uint8_t beeos_icon_plugins_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x7c, 0x00, 0x00, 0x07,\n 0xf8, 0xfe, 0x00, 0x00, 0x0f, 0xfd, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xff,\n 0x80, 0x00, 0x3e, 0x1f, 0xc7, 0x80, 0x00, 0x3c, 0x0f, 0xc7, 0x80, 0x00,\n 0x3e, 0x07, 0x87, 0x80, 0x00, 0x3f, 0x00, 0x1f, 0x80, 0x00, 0x1f, 0x80,\n 0x3f, 0x00, 0x07, 0x87, 0x80, 0x3e, 0x00, 0x0f, 0xc3, 0x80, 0x3c, 0x00,\n 0x1f, 0xc3, 0x80, 0x3e, 0x00, 0x3f, 0xe7, 0x80, 0x1f, 0x00, 0x3d, 0xff,\n 0x80, 0x0f, 0x00, 0x78, 0xff, 0x00, 0x07, 0x80, 0x78, 0x7e, 0x00, 0x07,\n 0x80, 0x78, 0x00, 0x1f, 0x87, 0x80, 0x78, 0x00, 0x3f, 0xc7, 0x80, 0x3c,\n 0x00, 0x7f, 0xef, 0x00, 0x3e, 0x00, 0x79, 0xff, 0x00, 0x1f, 0x00, 0x70,\n 0xfe, 0x00, 0x0f, 0x00, 0x70, 0xfc, 0x00, 0x1f, 0x00, 0x78, 0x78, 0x00,\n 0x3f, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x3f, 0x00, 0x00, 0x78, 0x78,\n 0x1f, 0x00, 0x00, 0x78, 0xfc, 0x0f, 0x00, 0x00, 0x78, 0xfe, 0x1f, 0x00,\n 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xef, 0xfc, 0x00, 0x00, 0x1f,\n 0xc7, 0xf8, 0x00, 0x00, 0x0f, 0x81, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_plugins_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_plugins_34_data,\n};\n\nstatic const uint8_t beeos_icon_quick_tools_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00,\n 0x7f, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xe0,\n 0x00, 0x00, 0x03, 0xe3, 0xe0, 0x00, 0x00, 0x03, 0xc7, 0xc0, 0x00, 0x00,\n 0x07, 0x8f, 0x8f, 0x00, 0x00, 0x07, 0x9f, 0x1f, 0x80, 0x00, 0x07, 0x1e,\n 0x3f, 0x80, 0x00, 0x0f, 0x1e, 0x7f, 0x80, 0x00, 0x0f, 0x1f, 0xff, 0x80,\n 0x00, 0x0f, 0x0f, 0xf7, 0x80, 0x00, 0x07, 0x07, 0xe7, 0x80, 0x00, 0x07,\n 0x83, 0xc7, 0x00, 0x00, 0x0f, 0x80, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x1f,\n 0x00, 0x00, 0x3e, 0x30, 0x7e, 0x00, 0x00, 0x7c, 0x7f, 0xfc, 0x00, 0x00,\n 0xf8, 0xff, 0xf8, 0x00, 0x01, 0xf1, 0xff, 0xe0, 0x00, 0x03, 0xe3, 0xe7,\n 0x00, 0x00, 0x07, 0xc7, 0xc0, 0x00, 0x00, 0x0f, 0x8f, 0x80, 0x00, 0x00,\n 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, 0x00, 0x7c, 0x7c,\n 0x00, 0x00, 0x00, 0x78, 0xf8, 0x00, 0x00, 0x00, 0x79, 0xf0, 0x00, 0x00,\n 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x3f,\n 0x80, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_quick_tools_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_quick_tools_34_data,\n};\n\nstatic const uint8_t beeos_icon_remove_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x1f,\n 0xfe, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00,\n 0x00, 0x00, 0x38, 0x07, 0x00, 0x00, 0x00, 0x38, 0x07, 0x00, 0x00, 0x1f,\n 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff,\n 0xfe, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00,\n 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x87,\n 0x38, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78,\n 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07,\n 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c,\n 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x8f, 0x3c, 0x78, 0x00,\n 0x07, 0x8f, 0x3c, 0x78, 0x00, 0x07, 0x86, 0x18, 0x78, 0x00, 0x07, 0x80,\n 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78,\n 0x00, 0x07, 0xff, 0xff, 0xf8, 0x00, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x01,\n 0xff, 0xff, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_remove_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_remove_34_data,\n};\n\nstatic const uint8_t beeos_icon_resource_monitor_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1e,\n 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00,\n 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00,\n 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x77, 0x80,\n 0x00, 0x00, 0x00, 0xf7, 0x80, 0x00, 0x00, 0x00, 0xf3, 0x80, 0x00, 0x00,\n 0x00, 0xf3, 0xc0, 0x00, 0x00, 0x00, 0xe3, 0xc0, 0x00, 0x00, 0x01, 0xe3,\n 0xc0, 0x00, 0x00, 0x3f, 0xe1, 0xc0, 0x3f, 0x00, 0x7f, 0xc1, 0xe0, 0xff,\n 0x80, 0x7f, 0xc1, 0xe0, 0xff, 0x80, 0x3f, 0x00, 0xe1, 0xff, 0x00, 0x00,\n 0x00, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0xf1, 0xc0, 0x00, 0x00, 0x00, 0xf3,\n 0xc0, 0x00, 0x00, 0x00, 0x73, 0xc0, 0x00, 0x00, 0x00, 0x7b, 0xc0, 0x00,\n 0x00, 0x00, 0x7b, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00,\n 0x3f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00,\n 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,\n 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_resource_monitor_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_resource_monitor_34_data,\n};\n\nstatic const uint8_t beeos_icon_retro_clock_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xe0,\n 0x00, 0x03, 0xf8, 0x07, 0xf0, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x0f,\n 0x80, 0xc0, 0x7c, 0x00, 0x0f, 0x01, 0xe0, 0x3c, 0x00, 0x1e, 0x01, 0xe0,\n 0x1e, 0x00, 0x3e, 0x01, 0xe0, 0x1f, 0x00, 0x3c, 0x01, 0xe0, 0x0f, 0x00,\n 0x3c, 0x01, 0xe0, 0x0f, 0x00, 0x78, 0x01, 0xe0, 0x07, 0x80, 0x78, 0x01,\n 0xe0, 0x07, 0x80, 0x78, 0x01, 0xff, 0x07, 0x80, 0x78, 0x01, 0xff, 0x07,\n 0x80, 0x78, 0x01, 0xff, 0x07, 0x80, 0x78, 0x00, 0xff, 0x07, 0x80, 0x78,\n 0x00, 0x00, 0x07, 0x80, 0x78, 0x00, 0x00, 0x07, 0x80, 0x3c, 0x00, 0x00,\n 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3e, 0x00, 0x00, 0x1f, 0x00,\n 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x0f, 0x80,\n 0x00, 0x7c, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x03, 0xf8, 0x07, 0xf0,\n 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_retro_clock_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_retro_clock_34_data,\n};\n\nstatic const uint8_t beeos_icon_runtime_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,\n 0x78, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00,\n 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00,\n 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x3e, 0xf0,\n 0x00, 0x00, 0x00, 0x7c, 0xf0, 0x00, 0x00, 0x00, 0xf9, 0xe0, 0x00, 0x00,\n 0x01, 0xf1, 0xff, 0xf8, 0x00, 0x03, 0xe1, 0xff, 0xfe, 0x00, 0x07, 0xc0,\n 0xff, 0xfe, 0x00, 0x0f, 0x80, 0x7f, 0xff, 0x00, 0x1f, 0x00, 0x00, 0x1e,\n 0x00, 0x1e, 0x00, 0x00, 0x3e, 0x00, 0x3f, 0xff, 0x80, 0x7c, 0x00, 0x1f,\n 0xff, 0xc0, 0xf8, 0x00, 0x1f, 0xff, 0xe1, 0xf0, 0x00, 0x07, 0xff, 0xe3,\n 0xe0, 0x00, 0x00, 0x01, 0xe7, 0xc0, 0x00, 0x00, 0x03, 0xcf, 0x80, 0x00,\n 0x00, 0x03, 0xdf, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x03,\n 0xfc, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00,\n 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00,\n 0x07, 0x80, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_runtime_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_runtime_34_data,\n};\n\nstatic const uint8_t beeos_icon_script_run_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,\n 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00,\n 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x07, 0x9f, 0xc0, 0x00, 0x00, 0x07,\n 0x87, 0xf0, 0x00, 0x00, 0x07, 0x83, 0xfc, 0x00, 0x00, 0x07, 0x80, 0xfe,\n 0x00, 0x00, 0x07, 0x80, 0x3f, 0x80, 0x00, 0x07, 0x80, 0x0f, 0xe0, 0x00,\n 0x07, 0x80, 0x07, 0xf0, 0x00, 0x07, 0x80, 0x01, 0xfc, 0x00, 0x07, 0x80,\n 0x00, 0x7e, 0x00, 0x07, 0x80, 0x00, 0x3e, 0x00, 0x07, 0x80, 0x00, 0x0f,\n 0x00, 0x07, 0x80, 0x00, 0x0f, 0x00, 0x07, 0x80, 0x00, 0x3e, 0x00, 0x07,\n 0x80, 0x00, 0x7e, 0x00, 0x07, 0x80, 0x01, 0xfc, 0x00, 0x07, 0x80, 0x07,\n 0xf0, 0x00, 0x07, 0x80, 0x0f, 0xe0, 0x00, 0x07, 0x80, 0x3f, 0x80, 0x00,\n 0x07, 0x80, 0xfe, 0x00, 0x00, 0x07, 0x83, 0xfc, 0x00, 0x00, 0x07, 0x87,\n 0xf0, 0x00, 0x00, 0x07, 0x9f, 0xc0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00,\n 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00,\n 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_script_run_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_script_run_34_data,\n};\n\nstatic const uint8_t beeos_icon_scripts_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x0f,\n 0x80, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00,\n 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,\n 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f,\n 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,\n 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00,\n 0xf8, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00,\n 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00,\n 0x0f, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x01,\n 0xff, 0xfc, 0x00, 0x00, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x00, 0xff, 0xf8,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_scripts_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_scripts_34_data,\n};\n\nstatic const uint8_t beeos_icon_search_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,\n 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00,\n 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0x03, 0xf8, 0x3f, 0x80, 0x00, 0x07,\n 0xe0, 0x07, 0xc0, 0x00, 0x07, 0x80, 0x03, 0xe0, 0x00, 0x0f, 0x00, 0x01,\n 0xe0, 0x00, 0x1f, 0x00, 0x00, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0xf0, 0x00,\n 0x1e, 0x00, 0x00, 0x70, 0x00, 0x1c, 0x00, 0x00, 0x78, 0x00, 0x1c, 0x00,\n 0x00, 0x78, 0x00, 0x3c, 0x00, 0x00, 0x78, 0x00, 0x1c, 0x00, 0x00, 0x78,\n 0x00, 0x1c, 0x00, 0x00, 0x78, 0x00, 0x1e, 0x00, 0x00, 0x70, 0x00, 0x1e,\n 0x00, 0x00, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0xf0, 0x00, 0x0f, 0x00, 0x01,\n 0xe0, 0x00, 0x0f, 0x80, 0x03, 0xe0, 0x00, 0x07, 0xc0, 0x07, 0xc0, 0x00,\n 0x03, 0xf0, 0x1f, 0xe0, 0x00, 0x01, 0xff, 0xff, 0xf0, 0x00, 0x00, 0xff,\n 0xfe, 0xf8, 0x00, 0x00, 0x3f, 0xf8, 0x7c, 0x00, 0x00, 0x07, 0xc0, 0x3e,\n 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_search_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_search_34_data,\n};\n\nstatic const uint8_t beeos_icon_settings_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x07,\n 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00,\n 0x00, 0x00, 0x0f, 0x3c, 0x00, 0x00, 0x01, 0x0e, 0x1c, 0x20, 0x00, 0x07,\n 0xfe, 0x1f, 0xf8, 0x00, 0x0f, 0xfe, 0x1f, 0xfc, 0x00, 0x1f, 0xfc, 0x0f,\n 0xfe, 0x00, 0x1e, 0x70, 0x03, 0x9e, 0x00, 0x3c, 0x03, 0xf0, 0x0e, 0x00,\n 0x1c, 0x07, 0xf8, 0x0e, 0x00, 0x1f, 0x0f, 0xfc, 0x3e, 0x00, 0x1f, 0x1f,\n 0xfe, 0x3e, 0x00, 0x0f, 0x9e, 0x1e, 0x7c, 0x00, 0x07, 0x9e, 0x1e, 0x78,\n 0x00, 0x07, 0x9e, 0x1e, 0x78, 0x00, 0x0f, 0x9e, 0x1e, 0x7c, 0x00, 0x1f,\n 0x1f, 0xfe, 0x3e, 0x00, 0x1f, 0x0f, 0xfc, 0x3e, 0x00, 0x1c, 0x07, 0xf8,\n 0x0e, 0x00, 0x3c, 0x03, 0xf0, 0x0e, 0x00, 0x1e, 0x70, 0x03, 0x9e, 0x00,\n 0x1f, 0xfc, 0x0f, 0xfe, 0x00, 0x0f, 0xfe, 0x1f, 0xfc, 0x00, 0x07, 0xfe,\n 0x1f, 0xf8, 0x00, 0x01, 0x0e, 0x1c, 0x20, 0x00, 0x00, 0x0f, 0x3c, 0x00,\n 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00,\n 0x07, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_settings_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_settings_34_data,\n};\n\nstatic const uint8_t beeos_icon_store_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff,\n 0xff, 0xe0, 0x00, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xf8,\n 0x00, 0x0f, 0x80, 0x00, 0x7c, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x1f,\n 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff,\n 0xff, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x10, 0x02, 0x0f, 0x00, 0x3c, 0x38, 0x07, 0x0f, 0x00, 0x3c, 0x38,\n 0x07, 0x0f, 0x00, 0x3c, 0x38, 0x07, 0x0f, 0x00, 0x3c, 0x3c, 0x0f, 0x0f,\n 0x00, 0x3c, 0x3e, 0x1f, 0x0f, 0x00, 0x3c, 0x1f, 0xfe, 0x0f, 0x00, 0x3c,\n 0x0f, 0xfc, 0x0f, 0x00, 0x3c, 0x07, 0xf8, 0x0f, 0x00, 0x3c, 0x00, 0xc0,\n 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00,\n 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00,\n 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x00, 0x0f,\n 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xfe, 0x00, 0x0f,\n 0xff, 0xff, 0xfc, 0x00, 0x07, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_store_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_store_34_data,\n};\n\nstatic const uint8_t beeos_icon_theme_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,\n 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0xff,\n 0x80, 0x00, 0x03, 0x83, 0xe7, 0x80, 0x00, 0x0f, 0xe7, 0xc7, 0x80, 0x00,\n 0x1f, 0xff, 0x8f, 0x80, 0x00, 0x3f, 0xff, 0x1f, 0x00, 0x00, 0x3c, 0x7e,\n 0x3e, 0x00, 0x00, 0x3e, 0x3c, 0x7c, 0x00, 0x00, 0x3e, 0x00, 0xf8, 0x00,\n 0x00, 0x7f, 0x01, 0xf0, 0x00, 0x00, 0xff, 0x81, 0xe0, 0x00, 0x03, 0xff,\n 0xc1, 0xe0, 0x00, 0x3f, 0xe3, 0xe1, 0xf0, 0x00, 0x7f, 0xc1, 0xf0, 0xf0,\n 0x00, 0x7f, 0x00, 0xf8, 0x78, 0x00, 0x7c, 0x00, 0x7c, 0x78, 0x00, 0x3e,\n 0x00, 0x3f, 0x78, 0x00, 0x1f, 0xc0, 0x1f, 0xf0, 0x00, 0x1f, 0xf8, 0x0f,\n 0xf0, 0x00, 0x0f, 0xff, 0x8f, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xc0, 0x00,\n 0x03, 0xff, 0xfe, 0x00, 0x00, 0x01, 0xe3, 0xfe, 0x00, 0x00, 0x00, 0xf0,\n 0x7c, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x7d, 0xf0, 0x00,\n 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x00,\n 0x0f, 0x80, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_theme_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_theme_34_data,\n};\n\nstatic const uint8_t beeos_icon_themes_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xff, 0xff, 0xe0,\n 0x00, 0x03, 0xf0, 0x03, 0xf8, 0x00, 0x07, 0xc0, 0x00, 0xf8, 0x00, 0x0f,\n 0x80, 0x78, 0x7c, 0x00, 0x1f, 0x18, 0x78, 0x3e, 0x00, 0x1e, 0x3c, 0x7c,\n 0x1f, 0x00, 0x3c, 0x3c, 0x78, 0x0f, 0x00, 0x3c, 0x3c, 0x30, 0x0f, 0x00,\n 0x38, 0x3c, 0x00, 0x87, 0x80, 0x78, 0x00, 0x01, 0xe7, 0x80, 0x78, 0x00,\n 0x03, 0xe7, 0x80, 0x78, 0xc0, 0x03, 0xe7, 0x80, 0x79, 0xe0, 0x01, 0xe7,\n 0x80, 0x79, 0xf0, 0x00, 0x07, 0x80, 0x79, 0xe0, 0x00, 0x0f, 0x00, 0x78,\n 0xe0, 0x00, 0x0f, 0x00, 0x78, 0x00, 0x00, 0x3e, 0x00, 0x38, 0x00, 0x1f,\n 0xfe, 0x00, 0x3c, 0x00, 0x3f, 0xfc, 0x00, 0x3c, 0x00, 0x7f, 0xf0, 0x00,\n 0x1e, 0x00, 0x78, 0x00, 0x00, 0x1f, 0x00, 0x70, 0x00, 0x00, 0x0f, 0x80,\n 0x78, 0x00, 0x00, 0x07, 0xc0, 0x78, 0x00, 0x00, 0x03, 0xf0, 0x3c, 0x00,\n 0x00, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x00,\n 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_themes_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_themes_34_data,\n};\n\nstatic const uint8_t beeos_icon_touch_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x70,\n 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0x00,\n 0x00, 0x00, 0x78, 0x3c, 0x00, 0x00, 0x00, 0x78, 0xf8, 0x00, 0x00, 0x00,\n 0x38, 0xf8, 0x00, 0x00, 0x10, 0x39, 0xf0, 0x00, 0x00, 0x7e, 0x00, 0xe0,\n 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x3f, 0x8e, 0x00, 0x00, 0x00,\n 0x07, 0x9f, 0xc0, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x1f,\n 0xfe, 0x00, 0x00, 0x00, 0x8f, 0xff, 0x80, 0x00, 0x03, 0xcf, 0x3f, 0xf0,\n 0x00, 0x03, 0xcf, 0x0f, 0xfc, 0x00, 0x07, 0xc7, 0x81, 0xfe, 0x00, 0x0f,\n 0x87, 0x80, 0x7f, 0x00, 0x0f, 0x03, 0xc3, 0xfe, 0x00, 0x04, 0x03, 0xc7,\n 0xfe, 0x00, 0x00, 0x03, 0xcf, 0xf8, 0x00, 0x00, 0x01, 0xef, 0x80, 0x00,\n 0x00, 0x01, 0xef, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,\n 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00,\n 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,\n 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_touch_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_touch_34_data,\n};\n\nstatic const uint8_t beeos_icon_vibration_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,\n 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00,\n 0x00, 0x01, 0xc1, 0xe7, 0x00, 0x00, 0x07, 0xf1, 0xe7, 0x00, 0x00, 0x07,\n 0xf1, 0xe7, 0x00, 0x00, 0x0f, 0xf9, 0xe7, 0x00, 0x00, 0x0f, 0x79, 0xe7,\n 0x00, 0x00, 0x0e, 0x39, 0xe7, 0x00, 0x00, 0x0e, 0x39, 0xe7, 0x00, 0x00,\n 0x0e, 0x39, 0xe7, 0x00, 0x00, 0x0e, 0x39, 0xe7, 0x00, 0x00, 0x0e, 0x39,\n 0xe7, 0x07, 0x80, 0x0e, 0x39, 0xe7, 0x0f, 0x80, 0x1e, 0x39, 0xe7, 0x1f,\n 0x80, 0x7e, 0x39, 0xe7, 0x1e, 0x00, 0x7c, 0x39, 0xe7, 0x1c, 0x00, 0x78,\n 0x39, 0xe7, 0x1c, 0x00, 0x00, 0x39, 0xe7, 0x1c, 0x00, 0x00, 0x39, 0xe7,\n 0x1c, 0x00, 0x00, 0x39, 0xe7, 0x1c, 0x00, 0x00, 0x39, 0xe7, 0x1c, 0x00,\n 0x00, 0x39, 0xe7, 0xbc, 0x00, 0x00, 0x39, 0xe7, 0xfc, 0x00, 0x00, 0x39,\n 0xe3, 0xf8, 0x00, 0x00, 0x39, 0xe3, 0xf8, 0x00, 0x00, 0x39, 0xe0, 0xe0,\n 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00,\n 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_vibration_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_vibration_34_data,\n};\n\nstatic const uint8_t beeos_icon_watch_face_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x0f,\n 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00,\n 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00,\n 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff,\n 0x00, 0x00, 0x00, 0x7f, 0x3f, 0x80, 0x00, 0x00, 0xf8, 0x07, 0xc0, 0x00,\n 0x00, 0xf0, 0xc3, 0xc0, 0x00, 0x01, 0xe1, 0xe1, 0xe0, 0x00, 0x01, 0xe1,\n 0xe1, 0xe0, 0x00, 0x01, 0xc1, 0xe1, 0xe0, 0x00, 0x01, 0xc1, 0xe0, 0xe0,\n 0x00, 0x01, 0xc1, 0xf8, 0xe0, 0x00, 0x01, 0xe0, 0xf9, 0xe0, 0x00, 0x01,\n 0xe0, 0x79, 0xe0, 0x00, 0x01, 0xe0, 0x01, 0xe0, 0x00, 0x00, 0xf0, 0x03,\n 0xc0, 0x00, 0x00, 0xf8, 0x07, 0xc0, 0x00, 0x00, 0x7f, 0x3f, 0x80, 0x00,\n 0x00, 0x3f, 0xff, 0x80, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f,\n 0xff, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x00,\n 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00,\n 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_watch_face_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_watch_face_34_data,\n};\n\nstatic const uint8_t beeos_icon_weather_34_data[] = {\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01,\n 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00,\n 0x00, 0x03, 0x01, 0xe0, 0x30, 0x00, 0x07, 0x81, 0xe0, 0x78, 0x00, 0x07,\n 0xc0, 0x00, 0xf8, 0x00, 0x03, 0xe0, 0x01, 0xf0, 0x00, 0x01, 0xe0, 0x01,\n 0xe0, 0x00, 0x00, 0xc7, 0xf8, 0xc0, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00,\n 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x00, 0x00,\n 0x0f, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x1f, 0x00, 0x07, 0xfe, 0x07, 0x1f,\n 0x80, 0x0f, 0xff, 0x07, 0x1f, 0x80, 0x1f, 0xff, 0x87, 0x1f, 0x00, 0x3e,\n 0x07, 0xc2, 0x00, 0x00, 0x3c, 0x03, 0xc0, 0x00, 0x00, 0x78, 0x01, 0xf8,\n 0x00, 0x00, 0x78, 0x01, 0xfe, 0x00, 0x00, 0x78, 0x01, 0xfe, 0x00, 0x00,\n 0x78, 0x00, 0x1f, 0x00, 0x00, 0x78, 0x00, 0x0f, 0x00, 0x00, 0x78, 0x00,\n 0x07, 0x00, 0x00, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x3e, 0x00, 0x0f, 0x00,\n 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xfe, 0x00, 0x00, 0x07,\n 0xff, 0xfc, 0x00, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00,\n};\n\nconst lv_image_dsc_t beeos_icon_weather_34_dsc = {\n .header.magic = LV_IMAGE_HEADER_MAGIC,\n .header.cf = LV_COLOR_FORMAT_I1,\n .header.flags = 0,\n .header.w = 34,\n .header.h = 34,\n .header.stride = 5,\n .data_size = 170,\n .data = beeos_icon_weather_34_data,\n};\n \ No newline at end of file diff --git a/beeos/generated/icons/lvgl_v9/beeos_icons_34_lvgl_v9.h b/beeos/generated/icons/lvgl_v9/beeos_icons_34_lvgl_v9.h new file mode 100644 index 0000000..8696804 --- /dev/null +++ b/beeos/generated/icons/lvgl_v9/beeos_icons_34_lvgl_v9.h @@ -0,0 +1 @@ +/* Auto-generated BeeOS LVGL v9 icon descriptors. */\n#pragma once\n\n#include \n\nextern const lv_image_dsc_t beeos_icon_about_34_dsc;\nextern const lv_image_dsc_t beeos_icon_apps_34_dsc;\nextern const lv_image_dsc_t beeos_icon_back_34_dsc;\nextern const lv_image_dsc_t beeos_icon_battery_34_dsc;\nextern const lv_image_dsc_t beeos_icon_bluetooth_34_dsc;\nextern const lv_image_dsc_t beeos_icon_clock_34_dsc;\nextern const lv_image_dsc_t beeos_icon_developer_tools_34_dsc;\nextern const lv_image_dsc_t beeos_icon_display_34_dsc;\nextern const lv_image_dsc_t beeos_icon_github_34_dsc;\nextern const lv_image_dsc_t beeos_icon_gps_34_dsc;\nextern const lv_image_dsc_t beeos_icon_health_34_dsc;\nextern const lv_image_dsc_t beeos_icon_hivestore_34_dsc;\nextern const lv_image_dsc_t beeos_icon_home_34_dsc;\nextern const lv_image_dsc_t beeos_icon_install_34_dsc;\nextern const lv_image_dsc_t beeos_icon_notifications_34_dsc;\nextern const lv_image_dsc_t beeos_icon_package_34_dsc;\nextern const lv_image_dsc_t beeos_icon_permissions_34_dsc;\nextern const lv_image_dsc_t beeos_icon_plugin_34_dsc;\nextern const lv_image_dsc_t beeos_icon_plugins_34_dsc;\nextern const lv_image_dsc_t beeos_icon_quick_tools_34_dsc;\nextern const lv_image_dsc_t beeos_icon_remove_34_dsc;\nextern const lv_image_dsc_t beeos_icon_resource_monitor_34_dsc;\nextern const lv_image_dsc_t beeos_icon_retro_clock_34_dsc;\nextern const lv_image_dsc_t beeos_icon_runtime_34_dsc;\nextern const lv_image_dsc_t beeos_icon_script_run_34_dsc;\nextern const lv_image_dsc_t beeos_icon_scripts_34_dsc;\nextern const lv_image_dsc_t beeos_icon_search_34_dsc;\nextern const lv_image_dsc_t beeos_icon_settings_34_dsc;\nextern const lv_image_dsc_t beeos_icon_store_34_dsc;\nextern const lv_image_dsc_t beeos_icon_theme_34_dsc;\nextern const lv_image_dsc_t beeos_icon_themes_34_dsc;\nextern const lv_image_dsc_t beeos_icon_touch_34_dsc;\nextern const lv_image_dsc_t beeos_icon_vibration_34_dsc;\nextern const lv_image_dsc_t beeos_icon_watch_face_34_dsc;\nextern const lv_image_dsc_t beeos_icon_weather_34_dsc; \ No newline at end of file diff --git a/beeos/generated/icons/previews/beeos_icons_24_preview.png b/beeos/generated/icons/previews/beeos_icons_24_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..3b7f07ce6867b7590df5b1a2592b2e97d7899e2a GIT binary patch literal 38085 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 z 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 literal 0 HcmV?d00001 diff --git a/beeos/generated/icons/previews/beeos_icons_34_preview.png b/beeos/generated/icons/previews/beeos_icons_34_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..ef7d8a7cc9372bf7be6044e7b6c5e04d27e87828 GIT binary patch literal 52774 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 literal 0 HcmV?d00001 diff --git a/beeos/generated/themes/beeos_themes.c b/beeos/generated/themes/beeos_themes.c new file mode 100644 index 0000000..86d31bc --- /dev/null +++ b/beeos/generated/themes/beeos_themes.c @@ -0,0 +1 @@ +/* Auto-generated BeeOS theme table. */\n\n#include "beeos_themes.h"\n\nconst BeeOSTheme beeos_themes[] = {\n {"midnight_honey", "Midnight Honey", 0xffcc00, 0x000000, 0x15171d, 0xffffff, 0x9ba7bd},\n {"blue_steel", "Blue Steel", 0x2e88ff, 0x000510, 0x111827, 0xffffff, 0x8fa3cc},\n {"oled_minimal", "OLED Minimal", 0xffffff, 0x000000, 0x080808, 0xffffff, 0x777777},\n {"high_contrast", "High Contrast", 0xffff00, 0x000000, 0x202020, 0xffffff, 0xcccccc},\n};\n\nconst uint32_t beeos_themes_count = 4;\n \ No newline at end of file diff --git a/beeos/generated/themes/beeos_themes.h b/beeos/generated/themes/beeos_themes.h new file mode 100644 index 0000000..3460ae0 --- /dev/null +++ b/beeos/generated/themes/beeos_themes.h @@ -0,0 +1 @@ +/* Auto-generated BeeOS theme declarations. */\n#pragma once\n\n#include \n\ntypedef struct BeeOSTheme {\n const char *id;\n const char *name;\n uint32_t accent;\n uint32_t background;\n uint32_t card;\n uint32_t text;\n uint32_t muted;\n} BeeOSTheme;\n\nextern const BeeOSTheme beeos_themes[];\nextern const uint32_t beeos_themes_count;\n \ No newline at end of file diff --git a/beeos/generated/themes/beeos_themes.json b/beeos/generated/themes/beeos_themes.json new file mode 100644 index 0000000..fc2f7f4 --- /dev/null +++ b/beeos/generated/themes/beeos_themes.json @@ -0,0 +1,40 @@ +{ + "themes": [ + { + "id": "midnight_honey", + "name": "Midnight Honey", + "accent": "#ffcc00", + "background": "#000000", + "card": "#15171d", + "text": "#ffffff", + "muted": "#9ba7bd" + }, + { + "id": "blue_steel", + "name": "Blue Steel", + "accent": "#2e88ff", + "background": "#000510", + "card": "#111827", + "text": "#ffffff", + "muted": "#8fa3cc" + }, + { + "id": "oled_minimal", + "name": "OLED Minimal", + "accent": "#ffffff", + "background": "#000000", + "card": "#080808", + "text": "#ffffff", + "muted": "#777777" + }, + { + "id": "high_contrast", + "name": "High Contrast", + "accent": "#ffff00", + "background": "#000000", + "card": "#202020", + "text": "#ffffff", + "muted": "#cccccc" + } + ] +} \ No newline at end of file diff --git a/beeos/generated/themes/theme_build_index.json b/beeos/generated/themes/theme_build_index.json new file mode 100644 index 0000000..5a39640 --- /dev/null +++ b/beeos/generated/themes/theme_build_index.json @@ -0,0 +1,8 @@ +{ + "theme_count": 4, + "outputs": { + "json": "beeos/generated/themes/beeos_themes.json", + "header": "beeos/generated/themes/beeos_themes.h", + "source": "beeos/generated/themes/beeos_themes.c" + } +} \ No newline at end of file diff --git a/beeos/mock/__init__.py b/beeos/mock/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/beeos/mock/hardware.py b/beeos/mock/hardware.py new file mode 100644 index 0000000..91e30a7 --- /dev/null +++ b/beeos/mock/hardware.py @@ -0,0 +1,14 @@ +from __future__ import annotations +import random + +class MockHardware: + def ram_usage_kb(self) -> tuple[int, int]: + return max(0, 430 + random.randint(-16, 18)), 800 + def psram_usage_kb(self) -> tuple[int, int]: + return max(0, 2380 + random.randint(-120, 100)), 8192 + def storage_usage_kb(self) -> tuple[int, int]: + return 2560, 8192 + def cpu_usage_percent(self) -> int: + return random.randint(8, 34) + def battery_percent(self, fallback: int = 86) -> int: + return fallback diff --git a/beeos/scripts/battery_info.py b/beeos/scripts/battery_info.py new file mode 100644 index 0000000..23bf44e --- /dev/null +++ b/beeos/scripts/battery_info.py @@ -0,0 +1,4 @@ +def main(ctx): + ctx.display.title("Battery Info") + ctx.display.progress("Battery", ctx.battery_percent()) + ctx.display.text("Runtime can access mock hardware APIs.") diff --git a/beeos/scripts/cpu_info.py b/beeos/scripts/cpu_info.py new file mode 100644 index 0000000..15d1e0e --- /dev/null +++ b/beeos/scripts/cpu_info.py @@ -0,0 +1,3 @@ +def main(ctx): + ctx.display.title("CPU Info") + ctx.display.progress("CPU", ctx.cpu_usage_percent()) diff --git a/beeos/scripts/hello.py b/beeos/scripts/hello.py new file mode 100644 index 0000000..fd79ec4 --- /dev/null +++ b/beeos/scripts/hello.py @@ -0,0 +1,5 @@ +def main(ctx): + ctx.display.title("Hello Script") + ctx.display.text("Hello from BeeOS Runtime!") + ctx.display.text("This script was launched from the Scripts app.") + ctx.notify("Script finished", "hello.py ran successfully") diff --git a/beeos/scripts/memory_info.py b/beeos/scripts/memory_info.py new file mode 100644 index 0000000..20a72b6 --- /dev/null +++ b/beeos/scripts/memory_info.py @@ -0,0 +1,4 @@ +def main(ctx): + ram_used, ram_total = ctx.ram_usage_kb() + ctx.display.title("Memory Info") + ctx.display.list_item("RAM", f"{ram_used}/{ram_total} KB") diff --git a/beeos/scripts/notification_test.py b/beeos/scripts/notification_test.py new file mode 100644 index 0000000..aee3ec9 --- /dev/null +++ b/beeos/scripts/notification_test.py @@ -0,0 +1,4 @@ +def main(ctx): + ctx.display.title("Notification Test") + ctx.notify("BeeOS Script", "Notification test ran") + ctx.display.text("Notification sent.") diff --git a/beeos/scripts/sensor_dump.py b/beeos/scripts/sensor_dump.py new file mode 100644 index 0000000..711f3bb --- /dev/null +++ b/beeos/scripts/sensor_dump.py @@ -0,0 +1,7 @@ +def main(ctx): + ram_used, ram_total = ctx.ram_usage_kb() + psram_used, psram_total = ctx.psram_usage_kb() + ctx.display.title("Sensor Dump") + ctx.display.list_item("RAM", f"{ram_used}/{ram_total} KB") + ctx.display.list_item("PSRAM", f"{psram_used}/{psram_total} KB") + ctx.display.list_item("CPU", f"{ctx.cpu_usage_percent()}%") diff --git a/beeos/scripts/uptime_info.py b/beeos/scripts/uptime_info.py new file mode 100644 index 0000000..521f9ed --- /dev/null +++ b/beeos/scripts/uptime_info.py @@ -0,0 +1,3 @@ +def main(ctx): + ctx.display.title("Uptime Info") + ctx.display.text(f"Uptime: {ctx.uptime_seconds()} seconds") diff --git a/beeos/sideload/local.demo.app/app.py b/beeos/sideload/local.demo.app/app.py new file mode 100644 index 0000000..424bd97 --- /dev/null +++ b/beeos/sideload/local.demo.app/app.py @@ -0,0 +1,26 @@ +class BeeApp: + def __init__(self, ctx): + self.ctx = ctx + + def on_open(self): + launches = self.ctx.storage.get("launches", 0) + 1 + self.ctx.storage.set("launches", launches) + self.ctx.notify("Local Demo", f"Launch count: {launches}") + + def on_draw(self, display): + launches = self.ctx.storage.get("launches", 0) + touches = self.ctx.storage.get("touches", 0) + display.title("Local Demo") + display.card("Runtime App", "This app is running as a live BeeOS session.") + display.list_item("Launches", str(launches)) + display.list_item("Touches", str(touches)) + display.progress("Battery", self.ctx.battery_percent()) + display.text("Tap inside the session to send on_touch().") + + def on_touch(self, event): + touches = self.ctx.storage.get("touches", 0) + 1 + self.ctx.storage.set("touches", touches) + self.ctx.notify("Local Demo", f"Touch #{touches} at {event['x']},{event['y']}") + + def on_close(self): + self.ctx.notify("Local Demo", "Session closed cleanly") diff --git a/beeos/sideload/local.demo.app/manifest.json b/beeos/sideload/local.demo.app/manifest.json new file mode 100644 index 0000000..c194eb7 --- /dev/null +++ b/beeos/sideload/local.demo.app/manifest.json @@ -0,0 +1,18 @@ +{ + "id": "local.demo.app", + "name": "Local Demo", + "type": "app", + "version": "0.1.0", + "author": "Local Developer", + "description": "Example sideloaded BeeOS app package.", + "entry": "app.py", + "permissions": [ + "time", + "battery" + ], + "repository": "", + "category": "Apps", + "color": "#9b5cff", + "icon": "\u2605", + "curated": false +} \ No newline at end of file diff --git a/beeos/sideload/local.demo.plugin/manifest.json b/beeos/sideload/local.demo.plugin/manifest.json new file mode 100644 index 0000000..7da502f --- /dev/null +++ b/beeos/sideload/local.demo.plugin/manifest.json @@ -0,0 +1,17 @@ +{ + "id": "local.demo.plugin", + "name": "Local Demo Plugin", + "type": "plugin", + "version": "0.1.0", + "author": "Local Developer", + "description": "A placeholder BeeOS plugin hook demo.", + "entry": "plugin.py", + "permissions": [ + "plugin_hooks" + ], + "repository": "", + "category": "plugin", + "color": "#9b5cff", + "icon": "\u2699", + "curated": false +} \ No newline at end of file diff --git a/beeos/sideload/local.demo.plugin/plugin.py b/beeos/sideload/local.demo.plugin/plugin.py new file mode 100644 index 0000000..ebe537d --- /dev/null +++ b/beeos/sideload/local.demo.plugin/plugin.py @@ -0,0 +1,9 @@ +HOOKS = [ + "launcher.context_menu", + "settings.panel", +] + + +def main(ctx): + ctx.display.title("Local Demo Plugin") + ctx.display.text("Plugin hooks are discovered in Phase 5.") diff --git a/beeos/storage/.gitkeep b/beeos/storage/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/beeos/ui/__init__.py b/beeos/ui/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/beeos/ui/components.py b/beeos/ui/components.py new file mode 100644 index 0000000..e5da0a1 --- /dev/null +++ b/beeos/ui/components.py @@ -0,0 +1,213 @@ +from __future__ import annotations +import math +import xml.etree.ElementTree as ET +import tkinter as tk +from typing import Optional +from beeos.core.theme import SCREEN_RADIUS, WATCH_HEIGHT, WATCH_WIDTH, WINDOW_HEIGHT, WINDOW_PAD, WINDOW_WIDTH, BeeTheme + +def dark_variant(color: str) -> str: + mapping = { + BeeTheme.YELLOW: BeeTheme.ORANGE_DARK, BeeTheme.BLUE: BeeTheme.BLUE_DARK, + BeeTheme.GREEN: BeeTheme.GREEN_DARK, BeeTheme.RED: BeeTheme.RED_DARK, + BeeTheme.ORANGE: BeeTheme.ORANGE_DARK, BeeTheme.PURPLE: BeeTheme.PURPLE_DARK, + BeeTheme.PINK: BeeTheme.PINK_DARK, BeeTheme.CYAN: BeeTheme.CYAN_DARK, + } + return mapping.get(color, BeeTheme.GRAY_DARK) + +class BeeCanvas: + def __init__(self, canvas: tk.Canvas) -> None: + self.canvas = canvas + self.ox = WINDOW_PAD + self.oy = WINDOW_PAD + self._image_refs = [] + self._image_refs = [] + + def sx(self, x: int | float) -> int: return int(self.ox + x) + def sy(self, y: int | float) -> int: return int(self.oy + y) + + def clear_window(self) -> None: + self.canvas.delete("all") + self.canvas.create_rectangle(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, fill=BeeTheme.WINDOW_BG, outline=BeeTheme.WINDOW_BG) + self.draw_watch_shell() + + def draw_watch_shell(self) -> None: + self.rounded_rect_raw(WINDOW_PAD - 10, WINDOW_PAD - 8, WINDOW_PAD + WATCH_WIDTH + 12, WINDOW_PAD + WATCH_HEIGHT + 14, 54, "#000000", "#000000") + self.rounded_rect_raw(WINDOW_PAD - 8, WINDOW_PAD - 8, WINDOW_PAD + WATCH_WIDTH + 8, WINDOW_PAD + WATCH_HEIGHT + 8, 52, "#13161b", "#343946", 2) + cx1 = WINDOW_PAD + WATCH_WIDTH + 6 + cy1 = WINDOW_PAD + 190 + self.rounded_rect_raw(cx1, cy1, cx1 + 16, cy1 + 76, 8, "#20242b", "#596070", 1) + for y in range(cy1 + 8, cy1 + 70, 8): + self.canvas.create_line(cx1 + 3, y, cx1 + 13, y, fill="#3e4654") + self.rounded_rect_raw(WINDOW_PAD, WINDOW_PAD, WINDOW_PAD + WATCH_WIDTH, WINDOW_PAD + WATCH_HEIGHT, SCREEN_RADIUS, BeeTheme.SCREEN_BG, "#111720", 2) + + def clear_screen(self, color: str = BeeTheme.SCREEN_BG) -> None: + self.rounded_rect(0, 0, WATCH_WIDTH, WATCH_HEIGHT, SCREEN_RADIUS, color, "#111720", 2) + + def rounded_rect_raw(self, x1: int, y1: int, x2: int, y2: int, radius: int, fill: str, outline: str, width: int = 1, tag: Optional[str] = None) -> None: + tags = (tag,) if tag else None + if radius <= 0: + self.canvas.create_rectangle(x1, y1, x2, y2, fill=fill, outline=outline, width=width, tags=tags) + return + r = max(1, min(radius, int((x2 - x1) / 2), int((y2 - y1) / 2))) + self.canvas.create_arc(x1, y1, x1+2*r, y1+2*r, start=90, extent=90, fill=fill, outline=fill, width=0, tags=tags) + self.canvas.create_arc(x2-2*r, y1, x2, y1+2*r, start=0, extent=90, fill=fill, outline=fill, width=0, tags=tags) + self.canvas.create_arc(x2-2*r, y2-2*r, x2, y2, start=270, extent=90, fill=fill, outline=fill, width=0, tags=tags) + self.canvas.create_arc(x1, y2-2*r, x1+2*r, y2, start=180, extent=90, fill=fill, outline=fill, width=0, tags=tags) + self.canvas.create_rectangle(x1+r, y1, x2-r, y2, fill=fill, outline=fill, width=0, tags=tags) + self.canvas.create_rectangle(x1, y1+r, x2, y2-r, fill=fill, outline=fill, width=0, tags=tags) + if width <= 0 or not outline: return + self.canvas.create_arc(x1, y1, x1+2*r, y1+2*r, start=90, extent=90, style=tk.ARC, outline=outline, width=width, tags=tags) + self.canvas.create_arc(x2-2*r, y1, x2, y1+2*r, start=0, extent=90, style=tk.ARC, outline=outline, width=width, tags=tags) + self.canvas.create_arc(x2-2*r, y2-2*r, x2, y2, start=270, extent=90, style=tk.ARC, outline=outline, width=width, tags=tags) + self.canvas.create_arc(x1, y2-2*r, x1+2*r, y2, start=180, extent=90, style=tk.ARC, outline=outline, width=width, tags=tags) + self.canvas.create_line(x1+r, y1, x2-r, y1, fill=outline, width=width, tags=tags) + self.canvas.create_line(x2, y1+r, x2, y2-r, fill=outline, width=width, tags=tags) + self.canvas.create_line(x1+r, y2, x2-r, y2, fill=outline, width=width, tags=tags) + self.canvas.create_line(x1, y1+r, x1, y2-r, fill=outline, width=width, tags=tags) + + def rounded_rect(self, x1: int, y1: int, x2: int, y2: int, radius: int, fill: str, outline: str = BeeTheme.BORDER, width: int = 1, tag: Optional[str] = None) -> None: + self.rounded_rect_raw(self.sx(x1), self.sy(y1), self.sx(x2), self.sy(y2), radius, fill, outline, width, tag) + + def text(self, x: int, y: int, value: str, size: int = 16, color: str = BeeTheme.TEXT, anchor: str = "center", weight: str = "normal", tag: Optional[str] = None) -> int: + return self.canvas.create_text(self.sx(x), self.sy(y), text=value, fill=color, font=("Segoe UI", size, weight), anchor=anchor, tags=(tag,) if tag else None) + + def line(self, x1: int, y1: int, x2: int, y2: int, color: str, width: int = 2) -> None: + self.canvas.create_line(self.sx(x1), self.sy(y1), self.sx(x2), self.sy(y2), fill=color, width=width, capstyle=tk.ROUND) + + def circle(self, x: int, y: int, r: int, fill: str, outline: Optional[str] = None, width: int = 1) -> None: + self.canvas.create_oval(self.sx(x-r), self.sy(y-r), self.sx(x+r), self.sy(y+r), fill=fill, outline=outline or fill, width=width) + + def pill(self, x1: int, y1: int, x2: int, y2: int, fill: str, outline: str = BeeTheme.BORDER, width: int = 1) -> None: + self.rounded_rect(x1, y1, x2, y2, int((y2-y1)/2), fill, outline, width) + + def battery_icon(self, x: int, y: int, percent: int) -> None: + x1, y1, x2, y2 = x-16, y-7, x+7, y+7 + self.rounded_rect(x1, y1, x2, y2, 3, "#0f1117", BeeTheme.TEXT_SOFT, 1) + self.canvas.create_rectangle(self.sx(x2+1), self.sy(y-4), self.sx(x2+4), self.sy(y+4), fill=BeeTheme.TEXT_SOFT, outline=BeeTheme.TEXT_SOFT) + fill_w = int((x2-x1-5) * max(0, min(100, percent)) / 100) + self.canvas.create_rectangle(self.sx(x1+3), self.sy(y1+3), self.sx(x1+3+fill_w), self.sy(y2-3), fill=BeeTheme.GREEN, outline=BeeTheme.GREEN) + + def status_bar(self, state, current_time: str, show_time: bool = True) -> None: + if show_time: + self.text(30, 24, current_time, 13, BeeTheme.TEXT, "w") + bt = "ᛒ" if state.bluetooth_connected else "--" + self.text(WATCH_WIDTH-72, 24, bt, 14, BeeTheme.BLUE, "e", "bold") + self.text(WATCH_WIDTH-56, 24, f"{state.battery_percent}%", 12, BeeTheme.TEXT_SOFT, "w") + self.battery_icon(WATCH_WIDTH-20, 24, state.battery_percent) + + def draw_bee_mark(self, cx: int, cy: int, scale: float = 1.0, bag: bool = False) -> None: + s = scale + if bag: + self.rounded_rect(int(cx-42*s), int(cy-38*s), int(cx+42*s), int(cy+48*s), int(10*s), "#050505", BeeTheme.YELLOW, max(1, int(2*s))) + self.canvas.create_arc(self.sx(cx-int(24*s)), self.sy(cy-int(62*s)), self.sx(cx+int(24*s)), self.sy(cy-int(14*s)), start=0, extent=180, outline=BeeTheme.YELLOW, width=max(2, int(4*s)), style=tk.ARC) + else: + self.rounded_rect(int(cx-44*s), int(cy-48*s), int(cx+44*s), int(cy+52*s), int(18*s), "#050505", BeeTheme.YELLOW, max(1, int(2*s))) + self.circle(cx, int(cy-8*s), int(15*s), BeeTheme.YELLOW) + self.canvas.create_oval(self.sx(cx-int(56*s)), self.sy(cy-int(10*s)), self.sx(cx-int(12*s)), self.sy(cy+int(22*s)), fill=BeeTheme.YELLOW, outline=BeeTheme.YELLOW) + self.canvas.create_oval(self.sx(cx+int(12*s)), self.sy(cy-int(10*s)), self.sx(cx+int(56*s)), self.sy(cy+int(22*s)), fill=BeeTheme.YELLOW, outline=BeeTheme.YELLOW) + self.canvas.create_oval(self.sx(cx-int(18*s)), self.sy(cy+int(8*s)), self.sx(cx+int(18*s)), self.sy(cy+int(58*s)), fill="#101010", outline="#101010") + self.line(cx-int(15*s), cy+int(24*s), cx+int(15*s), cy+int(16*s), BeeTheme.YELLOW, max(2, int(7*s))) + self.line(cx-int(14*s), cy+int(44*s), cx+int(14*s), cy+int(36*s), BeeTheme.YELLOW, max(2, int(7*s))) + + def hexagon(self, cx: int, cy: int, r: int, outline: str) -> None: + pts = [] + for i in range(6): + a = math.pi/6 + i*math.pi/3 + pts.extend([self.sx(cx+r*math.cos(a)), self.sy(cy+r*math.sin(a))]) + self.canvas.create_polygon(pts, outline=outline, fill="", width=1) + + def icon_asset(self, x: int, y: int, size: int, icon_id: str, color: str, icon_manager=None, fallback: str | None = None) -> None: + """Draw a curated icon asset with a safe fallback. + + Plain Tkinter cannot fully render SVG path data. This lightweight + renderer draws simple SVG primitives and falls back to the configured + glyph when an icon relies on path geometry. + """ + glyph = fallback or (icon_manager.fallback(icon_id) if icon_manager else "⬢") + + if icon_manager is not None and hasattr(icon_manager, "has_png") and icon_manager.has_png(icon_id, size): + try: + image = tk.PhotoImage(file=str(icon_manager.png_path(icon_id, size))) + self._image_refs.append(image) + self.canvas.create_image(self.sx(x), self.sy(y), image=image) + return + except Exception: + pass + + if icon_manager is None or not icon_manager.has(icon_id): + self.text(x, y, glyph, size=max(10, int(size * 0.62)), color=color, weight="bold") + return + + try: + root = ET.fromstring(icon_manager.svg_text(icon_id)) + except Exception: + self.text(x, y, glyph, size=max(10, int(size * 0.62)), color=color, weight="bold") + return + + scale = size / 24.0 + ox = x - size / 2 + oy = y - size / 2 + line_width = max(1, int(2 * scale)) + drew = False + + def tx(value: str) -> int: + return self.sx(ox + float(value) * scale) + + def ty(value: str) -> int: + return self.sy(oy + float(value) * scale) + + for elem in root.iter(): + tag = elem.tag.split("}")[-1] + if tag == "line": + self.canvas.create_line( + tx(elem.attrib.get("x1", "0")), ty(elem.attrib.get("y1", "0")), + tx(elem.attrib.get("x2", "0")), ty(elem.attrib.get("y2", "0")), + fill=color, width=line_width, capstyle=tk.ROUND, + ) + drew = True + elif tag in ("polyline", "polygon"): + coords = [] + for pair in elem.attrib.get("points", "").strip().split(): + if "," in pair: + px, py = pair.split(",", 1) + coords.extend([tx(px), ty(py)]) + if len(coords) >= 4: + if tag == "polygon": + self.canvas.create_polygon(coords, outline=color, fill="", width=line_width) + else: + self.canvas.create_line(coords, fill=color, width=line_width, capstyle=tk.ROUND, joinstyle=tk.ROUND) + drew = True + elif tag == "circle": + cx = float(elem.attrib.get("cx", "0")) + cy = float(elem.attrib.get("cy", "0")) + r = float(elem.attrib.get("r", "0")) + self.canvas.create_oval( + self.sx(ox + (cx - r) * scale), self.sy(oy + (cy - r) * scale), + self.sx(ox + (cx + r) * scale), self.sy(oy + (cy + r) * scale), + outline=color, width=line_width, + ) + drew = True + elif tag == "rect": + rx = float(elem.attrib.get("x", "0")) + ry = float(elem.attrib.get("y", "0")) + rw = float(elem.attrib.get("width", "0")) + rh = float(elem.attrib.get("height", "0")) + self.canvas.create_rectangle( + self.sx(ox + rx * scale), self.sy(oy + ry * scale), + self.sx(ox + (rx + rw) * scale), self.sy(oy + (ry + rh) * scale), + outline=color, width=line_width, + ) + drew = True + + if not drew: + self.text(x, y, glyph, size=max(10, int(size * 0.62)), color=color, weight="bold") + + def metric_bar(self, x: int, y: int, w: int, label: str, value: str, percent: float, color: str, icon: str) -> None: + self.rounded_rect(x, y, x+w, y+74, 18, BeeTheme.CARD, BeeTheme.BORDER) + self.rounded_rect(x+12, y+15, x+48, y+51, 10, dark_variant(color), dark_variant(color)) + self.text(x+30, y+33, icon, 17, color) + self.text(x+62, y+22, label, 14, BeeTheme.TEXT, "w", "bold") + self.text(x+w-18, y+22, value, 13, BeeTheme.TEXT_SOFT, "e") + bx, by, bw = x+62, y+43, w-84 + self.pill(bx, by, bx+bw, by+10, "#292f3a", "#333a46") + self.pill(bx, by, bx+int(bw*max(0.0, min(1.0, percent))), by+10, color, color) diff --git a/beeos/ui/simulator.py b/beeos/ui/simulator.py new file mode 100644 index 0000000..ca4121b --- /dev/null +++ b/beeos/ui/simulator.py @@ -0,0 +1,1170 @@ +from __future__ import annotations +import sys +import time +import tkinter as tk +from pathlib import Path +from typing import Optional +from beeos.core.app_registry import AppRegistry, icon_asset_for_manifest +from beeos.core.asset_build import AssetBuildIndex +from beeos.core.hivestore import HiveStoreIndex +from beeos.core.icon_manager import IconManager +from beeos.core.models import PackageManifest +from beeos.core.navigation import NavigationController +from beeos.core.package_manager import PackageManager +from beeos.core.permission_manager import PermissionManager +from beeos.core.plugin_manager import PluginManager +from beeos.core.watchfaces import built_in_watch_faces +from beeos.core.permissions import format_permissions +from beeos.core.runtime_api import BeeRuntime, RuntimeResult, BeeRuntimeSession +from beeos.core.state import BeeOSState +from beeos.core.theme import APP_GRID_COLUMNS, APPS_PER_PAGE, WATCH_HEIGHT, WATCH_WIDTH, WINDOW_HEIGHT, WINDOW_PAD, WINDOW_WIDTH, BeeTheme +from beeos.core.theme_manager import ThemeManager +from beeos.core.update_manager import UpdateManager +from beeos.mock.hardware import MockHardware +from beeos.ui.components import BeeCanvas, dark_variant + +def current_time() -> str: + now = time.localtime() + hour = now.tm_hour % 12 or 12 + return f"{hour}:{now.tm_min:02d}" + +def current_date_short() -> str: + return time.strftime("%a, %b %d", time.localtime()) + +class BeeOSSimulator: + def __init__(self) -> None: + self.root = tk.Tk() + self.root.title("BeeOS Phase 9 Simulator") + self.root.resizable(False, False) + self.root.configure(bg=BeeTheme.WINDOW_BG) + self.canvas = tk.Canvas(self.root, width=WINDOW_WIDTH, height=WINDOW_HEIGHT, bg=BeeTheme.WINDOW_BG, highlightthickness=0) + self.canvas.pack() + self.ui = BeeCanvas(self.canvas) + + self.project_root = Path(__file__).resolve().parents[2] + self.data_dir = self.project_root / "beeos" / "data" + self.scripts_dir = self.project_root / "beeos" / "scripts" + self.packages_dir = self.project_root / "beeos" / "packages" + self.sideload_dir = self.project_root / "beeos" / "sideload" + self.storage_dir = self.project_root / "beeos" / "storage" + self.icons_dir = self.project_root / "beeos" / "assets" / "icons" / "lucide" + + self.state = BeeOSState(self.data_dir / "settings.json") + self.hardware = MockHardware() + self.navigation = NavigationController(self.state) + self.package_manager = PackageManager(self.data_dir, self.packages_dir, self.sideload_dir) + self.permission_manager = PermissionManager(self.data_dir) + self.plugin_manager = PluginManager(self.package_manager) + self.runtime = BeeRuntime(self.packages_dir, self.scripts_dir, self.storage_dir, self.state, self.hardware) + self.hivestore = HiveStoreIndex(self.data_dir / "hivestore_index.json") + self.hivestore.load() + self.source_manager = self.hivestore.source_manager + self.icon_manager = IconManager(self.icons_dir) + self.asset_build = AssetBuildIndex(self.project_root) + self.theme_manager = ThemeManager(self.data_dir / "themes.json") + self.update_manager = UpdateManager(self.package_manager, self.hivestore) + + self.registry = AppRegistry() + self.registry.register_builtin_apps({ + "clock": self.show_clock, "health": self.show_health, "hivestore": self.show_hivestore, + "settings": self.show_settings, "scripts": self.show_scripts, "resource": self.show_resource_monitor, + "developer": self.show_developer_tools, "gps": self.show_gps, "battery": self.show_battery, + "notifications": self.show_notifications, "about": self.show_about, + }) + self._sync_package_apps() + + self.drag_start_x: Optional[int] = None + self.drag_start_y: Optional[int] = None + self.selected_hivestore_index: Optional[int] = None + self.selected_installed_manifest: Optional[PackageManifest] = None + self.selected_sideload_index: Optional[int] = None + self.selected_source_index: Optional[int] = None + self.developer_page: int = 0 + self.settings_mode: Optional[str] = None + self.selected_script_index: Optional[int] = None + self.scripts_scroll_index: int = 0 + self.last_runtime_result: Optional[RuntimeResult] = None + self.current_session: Optional[BeeRuntimeSession] = None + self.current_session_result: Optional[RuntimeResult] = None + self.pending_permission_manifest: Optional[PackageManifest] = None + self.pending_permission_source: Optional[str] = None + self.pending_sideload_path: Optional[Path] = None + + self._bind_events() + self.show_watchface() + self._tick() + + def _icon_asset_for_manifest(self, manifest: PackageManifest) -> str: + return icon_asset_for_manifest(manifest) + + def _sync_package_apps(self) -> None: + self.registry.sync_package_apps(self.package_manager.installed_manifests(), self.show_installed_package_app) + + def _bind_events(self) -> None: + self.canvas.bind("", self._on_mouse_down) + self.canvas.bind("", self._on_drag) + self.canvas.bind("", self._on_mouse_up) + self.canvas.bind("", self._on_mouse_wheel) + self.canvas.bind("", lambda _event: self.scroll_launcher(-1)) + self.canvas.bind("", lambda _event: self.scroll_launcher(1)) + self.root.bind("", lambda _event: self.go_back()) + self.root.bind("", lambda _event: self.go_back()) + self.root.bind("", lambda _event: self.show_watchface()) + self.root.bind("", lambda _event: self.show_watchface()) + self.root.bind("", lambda _event: self.show_notifications()) + self.root.bind("", lambda _event: self.show_notifications()) + self.root.bind("", lambda _event: self.scroll_current_screen(1)) + self.root.bind("", lambda _event: self.scroll_current_screen(-1)) + + def _to_watch_xy(self, event: tk.Event) -> tuple[int, int]: + return int(event.x - WINDOW_PAD), int(event.y - WINDOW_PAD) + + def _on_mouse_down(self, event: tk.Event) -> None: + x, y = self._to_watch_xy(event) + self.drag_start_x, self.drag_start_y = x, y + + def _on_drag(self, event: tk.Event) -> None: + if self.drag_start_y is None: + return + _x, y = self._to_watch_xy(event) + if self.drag_start_y <= 52 and y - self.drag_start_y > 82: + self.drag_start_x = self.drag_start_y = None + self.show_notifications() + + def _on_mouse_up(self, event: tk.Event) -> None: + x, y = self._to_watch_xy(event) + if x < 0 or y < 0 or x > WATCH_WIDTH or y > WATCH_HEIGHT: + return + if self.drag_start_x is not None and self.drag_start_y is not None: + moved = abs(x - self.drag_start_x) + abs(y - self.drag_start_y) + if moved > 24: + self.drag_start_x = self.drag_start_y = None + return + self.drag_start_x = self.drag_start_y = None + + if y <= 48 and self.state.current_screen not in ("notifications", "package_detail", "sideload_detail", "settings_list"): + self.show_notifications() + return + + if self.state.current_screen == "watchface": + self.show_launcher() + elif self.state.current_screen == "launcher": + self._handle_launcher_tap(x, y) + elif self.state.current_screen == "notifications": + self._handle_notifications_tap(x, y) + elif self.state.current_screen == "app": + self._handle_app_tap(x, y) + elif self.state.current_screen == "hivestore": + self._handle_hivestore_tap(x, y) + elif self.state.current_screen == "package_detail": + self._handle_package_detail_tap(x, y) + elif self.state.current_screen == "developer": + self._handle_developer_tap(x, y) + elif self.state.current_screen == "sideload": + self._handle_sideload_tap(x, y) + elif self.state.current_screen == "sideload_detail": + self._handle_sideload_detail_tap(x, y) + elif self.state.current_screen == "settings": + self._handle_settings_tap(x, y) + elif self.state.current_screen == "settings_list": + self._handle_settings_list_tap(x, y) + elif self.state.current_screen == "scripts": + self._handle_scripts_tap(x, y) + elif self.state.current_screen == "runtime_result": + self._handle_runtime_result_tap(x, y) + elif self.state.current_screen == "app_session": + self._handle_app_session_tap(x, y) + elif self.state.current_screen == "permission_prompt": + self._handle_permission_prompt_tap(x, y) + elif self.state.current_screen == "plugin_hooks": + self._handle_plugin_hooks_tap(x, y) + elif self.state.current_screen == "hive_repos": + self._handle_hive_repos_tap(x, y) + elif self.state.current_screen == "hive_repo_detail": + self._handle_hive_repo_detail_tap(x, y) + + def _on_mouse_wheel(self, event: tk.Event) -> None: + direction = 1 if event.delta < 0 else -1 + if self.state.current_screen == "launcher": + self.scroll_launcher(direction) + elif self.state.current_screen == "developer": + self.scroll_developer(direction) + + def _begin_screen(self, name: str, bg: str = BeeTheme.SCREEN_BG) -> None: + self.state.current_screen = name + if name != "app": + self.state.active_app_name = None + self.ui.clear_window() + self.ui.clear_screen(bg) + + def _begin_app(self, title: str, title_color: str = BeeTheme.BLUE) -> None: + self._begin_screen("app", BeeTheme.SCREEN_BG) + self.state.active_app_name = title + self._draw_back_header(title, title_color) + + def _draw_back_header(self, title: str, title_color: str = BeeTheme.BLUE) -> None: + self.ui.text(22, 28, "‹", 25, BeeTheme.TEXT_SOFT, "w") + self.ui.text(58, 28, title, 14, title_color, "w", "bold") + self.ui.text(WATCH_WIDTH - 26, 28, current_time(), 13, BeeTheme.TEXT, "e") + + def _handle_app_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + self.show_launcher() + + def go_back(self) -> None: + if self.state.current_screen == "watchface": + return + if self.state.current_screen in ("launcher", "notifications"): + self.show_watchface() + elif self.state.current_screen in ("package_detail",): + self.show_hivestore() + elif self.state.current_screen in ("sideload_detail",): + self.show_sideload() + elif self.state.current_screen in ("settings_list",): + self.show_settings() + elif self.state.current_screen in ("scripts",): + self.show_launcher() + elif self.state.current_screen in ("runtime_result",): + self.show_launcher() + elif self.state.current_screen in ("app_session",): + if self.current_session is not None: + self.current_session.close() + self.current_session = None + self.show_launcher() + elif self.state.current_screen in ("permission_prompt",): + self._return_from_permission_prompt() + elif self.state.current_screen in ("plugin_hooks", "hive_repos"): + self.show_developer_tools() + elif self.state.current_screen in ("hive_repo_detail",): + self.show_hive_repos() + elif self.state.current_screen in ("hivestore", "developer", "sideload", "settings"): + self.show_launcher() + elif self.state.current_screen == "app": + self.show_launcher() + else: + self.show_watchface() + + # Main UI + def show_watchface(self) -> None: + self._begin_screen("watchface", BeeTheme.SCREEN_BG) + face = self.state.watch_face_name + if face == "Bee Minimal": + self._draw_watchface_minimal() + elif face == "Bee Analog": + self._draw_watchface_analog() + else: + self._draw_watchface_simple() + + def _draw_watchface_simple(self) -> None: + self.ui.text(24, 26, "ᛒ", 18, BeeTheme.BLUE, "w", "bold") + self.ui.text(WATCH_WIDTH - 64, 26, f"{self.state.battery_percent}%", 12, BeeTheme.TEXT_SOFT, "e") + self.ui.battery_icon(WATCH_WIDTH - 25, 26, self.state.battery_percent) + self.ui.draw_bee_mark(205, 108, 0.38) + now = time.localtime() + hour = now.tm_hour % 12 or 12 + self.ui.text(205, 188, f"{hour}:{now.tm_min:02d}", 58, BeeTheme.TEXT, weight="bold") + self.ui.text(282, 176, "AM" if now.tm_hour < 12 else "PM", 14, BeeTheme.TEXT_SOFT, "w") + self.ui.text(282, 204, f"{now.tm_sec:02d}", 20, BeeTheme.YELLOW, "w", "bold") + self.ui.text(205, 252, current_date_short(), 17, BeeTheme.TEXT_SOFT) + self.ui.text(205, 300, self.state.watch_face_name, 13, BeeTheme.TEXT_MUTED) + self.ui.text(94, 405, "♡", 17, BeeTheme.TEXT_SOFT) + self.ui.text(94, 432, "78", 13, BeeTheme.TEXT_SOFT) + self.ui.text(205, 405, "↯", 17, BeeTheme.TEXT_SOFT) + self.ui.text(205, 432, "7645", 13, BeeTheme.TEXT_SOFT) + self.ui.text(316, 405, "▱", 17, BeeTheme.TEXT_SOFT) + self.ui.text(316, 432, f"{self.state.battery_percent}%", 13, BeeTheme.TEXT_SOFT) + self.ui.text(205, 472, "Tap to open BeeOS", 14, BeeTheme.YELLOW) + + def _draw_watchface_minimal(self) -> None: + now = time.localtime() + hour = now.tm_hour % 12 or 12 + self.ui.text(205, 166, f"{hour}:{now.tm_min:02d}", 72, BeeTheme.TEXT, weight="bold") + self.ui.text(205, 236, current_date_short(), 18, BeeTheme.TEXT_MUTED) + self.ui.pill(124, 314, 286, 354, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.text(205, 334, f"{self.state.battery_percent}% battery", 13, BeeTheme.YELLOW) + self.ui.text(205, 472, "Tap to open BeeOS", 14, BeeTheme.TEXT_DIM) + + def _draw_watchface_analog(self) -> None: + now = time.localtime() + self.ui.circle(205, 214, 112, "#05070d", BeeTheme.YELLOW_DARK, 2) + for angle in range(0, 360, 30): + import math + r1, r2 = 96, 106 + x1 = 205 + int(math.sin(math.radians(angle)) * r1) + y1 = 214 - int(math.cos(math.radians(angle)) * r1) + x2 = 205 + int(math.sin(math.radians(angle)) * r2) + y2 = 214 - int(math.cos(math.radians(angle)) * r2) + self.ui.line(x1, y1, x2, y2, BeeTheme.TEXT_DIM, 2) + hour_angle = ((now.tm_hour % 12) + now.tm_min / 60) * 30 + minute_angle = now.tm_min * 6 + import math + hx = 205 + int(math.sin(math.radians(hour_angle)) * 52) + hy = 214 - int(math.cos(math.radians(hour_angle)) * 52) + mx = 205 + int(math.sin(math.radians(minute_angle)) * 82) + my = 214 - int(math.cos(math.radians(minute_angle)) * 82) + self.ui.line(205, 214, hx, hy, BeeTheme.YELLOW, 5) + self.ui.line(205, 214, mx, my, BeeTheme.TEXT, 3) + self.ui.circle(205, 214, 7, BeeTheme.YELLOW) + self.ui.text(205, 356, current_date_short(), 16, BeeTheme.TEXT_SOFT) + self.ui.text(205, 472, "Tap to open BeeOS", 14, BeeTheme.YELLOW) + + def show_launcher(self) -> None: + self._sync_package_apps() + self._begin_screen("launcher", BeeTheme.SCREEN_BG) + self.ui.status_bar(self.state, current_time()) + apps = self.registry.all_apps() + self.navigation.clamp_launcher_page(len(apps)) + page_count = self.navigation.page_count(len(apps)) + start = self.state.launcher_page * APPS_PER_PAGE + visible = apps[start:start + APPS_PER_PAGE] + cell_w, cell_h, gap_x, gap_y, start_x, start_y = 145, 132, 20, 18, 50, 82 + for index, app in enumerate(visible): + row, col = index // APP_GRID_COLUMNS, index % APP_GRID_COLUMNS + x1, y1 = start_x + col * (cell_w + gap_x), start_y + row * (cell_h + gap_y) + x2, y2 = x1 + cell_w, y1 + cell_h + self.ui.rounded_rect(x1, y1, x2, y2, 18, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.circle((x1+x2)//2, y1+43, 29, dark_variant(app.color)) + self.ui.icon_asset((x1+x2)//2, y1+43, 34, app.icon_asset or app.app_id.split(".")[-1], app.color, self.icon_manager, app.icon) + self.ui.text((x1+x2)//2, y1+91, app.name[:13], 15, BeeTheme.TEXT) + self._draw_page_dots(page_count) + self.ui.text(205, 466, "Swipe up/down to scroll", 12, BeeTheme.TEXT_DIM) + + def _draw_page_dots(self, page_count: int) -> None: + total_w = page_count * 18 + x, y = (WATCH_WIDTH - total_w) // 2, 388 + for page in range(page_count): + self.ui.circle(x + page * 18, y, 5, BeeTheme.YELLOW if page == self.state.launcher_page else "#5b6370") + + def scroll_launcher(self, direction: int) -> None: + if self.state.current_screen == "launcher" and self.navigation.scroll_launcher(direction, len(self.registry.all_apps())): + self.show_launcher() + + def _handle_launcher_tap(self, x: int, y: int) -> None: + apps = self.registry.all_apps() + start = self.state.launcher_page * APPS_PER_PAGE + cell_w, cell_h, gap_x, gap_y, start_x, start_y = 145, 132, 20, 18, 50, 82 + for index in range(APPS_PER_PAGE): + app_index = start + index + if app_index >= len(apps): continue + row, col = index // APP_GRID_COLUMNS, index % APP_GRID_COLUMNS + x1, y1 = start_x + col * (cell_w + gap_x), start_y + row * (cell_h + gap_y) + if x1 <= x <= x1+cell_w and y1 <= y <= y1+cell_h: + apps[app_index].launch() + return + + def show_notifications(self) -> None: + self._begin_screen("notifications", BeeTheme.SCREEN_BG) + self.ui.text(205, 18, "⌄", 24, BeeTheme.YELLOW) + self.ui.text(205, 48, "Notifications", 16, BeeTheme.TEXT, weight="bold") + x = 75 + for icon, color in [("ᛒ", BeeTheme.BLUE), ("☀", BeeTheme.GRAY), ("☾", BeeTheme.GRAY), (f"{self.state.battery_percent}%", BeeTheme.GREEN)]: + self.ui.circle(x, 92, 29, dark_variant(color), color, 2) + self.ui.text(x, 92, icon, 16, color, weight="bold") + x += 86 + y = 142 + if not self.state.notifications: + self.ui.text(205, 262, "No notifications", 18, BeeTheme.TEXT_MUTED) + else: + for note in self.state.notifications[:4]: + self.ui.rounded_rect(28, y, 382, y+74, 17, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.circle(54, y+26, 17, dark_variant(note.color)) + self.ui.text(54, y+26, note.icon, 13, note.color, weight="bold") + self.ui.text(82, y+18, note.title, 13, BeeTheme.TEXT, "w", "bold") + self.ui.text(354, y+18, note.timestamp, 10, BeeTheme.TEXT_MUTED, "e") + self.ui.text(82, y+43, f"{note.app}: {note.body}", 12, BeeTheme.TEXT_SOFT, "w") + y += 88 + self.ui.pill(60, 438, 350, 480, "#082344", "#123b68") + self.ui.text(205, 459, "Clear", 15, "#8ed7ff", weight="bold") + + def _handle_notifications_tap(self, x: int, y: int) -> None: + if 60 <= x <= 350 and 438 <= y <= 480: + self.state.notifications.clear() + self.show_notifications() + elif y <= 48: + self.show_watchface() + + # HiveStore + def show_hivestore(self) -> None: + self._begin_screen("hivestore", BeeTheme.SCREEN_BG) + self._draw_back_header("HiveStore", BeeTheme.YELLOW) + repo_line = f"{self.hivestore.source_name} • {len(self.hivestore.listings)} listings" + if self.hivestore.source_errors: + repo_line += f" • {len(self.hivestore.source_errors)} warning(s)" + self.ui.text(28, 62, repo_line[:48], 11, BeeTheme.TEXT_DIM, "w") + tabs = [("Featured", BeeTheme.YELLOW), ("Apps", BeeTheme.CARD_3), ("Faces", BeeTheme.CARD_3)] + x = 26 + for label, fill in tabs: + w = 92 if label == "Featured" else 72 + text_color = "#000000" if label == "Featured" else BeeTheme.TEXT_SOFT + self.ui.pill(x, 86, x+w, 116, fill, fill) + self.ui.text(x+w//2, 101, label, 11, text_color, weight="bold") + x += w + 8 + y = 134 + for i, listing in enumerate(self.hivestore.listings[:4]): + installed = self.package_manager.is_installed(listing.package_id) + update_available = self.update_manager.has_update(listing) + self.ui.rounded_rect(24, y, 386, y+70, 16, "#090b10", "#171c25") + self.ui.rounded_rect(38, y+14, 76, y+52, 10, dark_variant(listing.color), dark_variant(listing.color)) + self.ui.icon_asset(57, y+33, 24, self._icon_asset_for_manifest(listing), listing.color, self.icon_manager, listing.icon) + self.ui.text(92, y+18, listing.name[:22], 13, BeeTheme.TEXT, "w", "bold") + self.ui.text(92, y+39, f"{listing.category} • v{listing.version}", 10, BeeTheme.TEXT_MUTED, "w") + status_text = "Update available" if update_available else ("Installed" if installed else format_permissions(listing.permissions)) + self.ui.text(92, y+55, status_text[:28], 9, BeeTheme.ORANGE if update_available else (BeeTheme.YELLOW if installed else BeeTheme.TEXT_DIM), "w") + self.ui.pill(304, y+22, 372, y+50, "#101010", BeeTheme.YELLOW) + self.ui.text(338, y+36, self.update_manager.update_label(listing), 9, BeeTheme.YELLOW, weight="bold") + y += 76 + self.ui.text(205, 474, "Tap package • Dev Tools manages repos", 11, BeeTheme.TEXT_DIM) + + def _handle_hivestore_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + self.show_launcher(); return + row_y = 134 + for i, listing in enumerate(self.hivestore.listings[:4]): + if 24 <= x <= 386 and row_y <= y <= row_y + 70: + self.selected_hivestore_index = i + self.show_package_detail(listing) + return + row_y += 76 + + def show_package_detail(self, manifest: PackageManifest) -> None: + self._begin_screen("package_detail", BeeTheme.SCREEN_BG) + self._draw_back_header("Package", manifest.color) + installed = self.package_manager.is_installed(manifest.package_id) + update_available = self.update_manager.has_update(manifest) + self.ui.circle(205, 94, 40, dark_variant(manifest.color), manifest.color, 2) + self.ui.icon_asset(205, 94, 40, self._icon_asset_for_manifest(manifest), manifest.color, self.icon_manager, manifest.icon) + self.ui.text(205, 148, manifest.name[:26], 18, BeeTheme.TEXT, weight="bold") + version_line = f"{manifest.package_type} • v{manifest.version}" + if update_available: + old = self.update_manager.installed_manifest(manifest.package_id) + if old: + version_line = f"{manifest.package_type} • {old.version} → {manifest.version}" + self.ui.text(205, 174, version_line, 12, BeeTheme.TEXT_MUTED) + self.ui.text(32, 212, "Description", 12, BeeTheme.TEXT_DIM, "w") + self.ui.text(32, 236, manifest.description[:48], 12, BeeTheme.TEXT_SOFT, "w") + self.ui.text(32, 266, f"Author: {manifest.author}"[:42], 11, BeeTheme.TEXT_MUTED, "w") + approved = self.permission_manager.is_approved(manifest) + self.ui.text(32, 292, f"Perms: {format_permissions(manifest.permissions)}"[:45], 11, BeeTheme.YELLOW, "w") + self.ui.text(32, 318, ("Approved permissions" if approved else "Permissions need approval")[:45], 11, BeeTheme.GREEN if approved else BeeTheme.ORANGE, "w") + source_name = getattr(manifest, "source_name", "curated GitHub listing") + self.ui.text(32, 344, f"Source: {source_name}"[:48], 11, BeeTheme.TEXT_DIM, "w") + btn_label = "Update" if update_available else ("Remove" if installed else "Install") + btn_color = BeeTheme.ORANGE if update_available else (BeeTheme.RED if installed else BeeTheme.YELLOW) + text_color = "#000000" if (not installed or update_available) else BeeTheme.TEXT + self.ui.pill(58, 392, 352, 442, btn_color, btn_color) + self.ui.text(205, 417, btn_label, 16, text_color, weight="bold") + self.ui.text(205, 470, "Back returns to HiveStore", 11, BeeTheme.TEXT_DIM) + + def _handle_package_detail_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + self.show_hivestore(); return + if self.selected_hivestore_index is None: + return + manifest = self.hivestore.listings[self.selected_hivestore_index] + if 58 <= x <= 352 and 392 <= y <= 442: + if self.update_manager.has_update(manifest): + self.package_manager.install_from_manifest(manifest) + self._sync_package_apps() + self.show_package_detail(manifest) + elif self.package_manager.is_installed(manifest.package_id): + self.package_manager.remove(manifest.package_id) + self.permission_manager.revoke(manifest.package_id) + self._sync_package_apps() + self.show_package_detail(manifest) + else: + self.show_permission_prompt(manifest, source="hivestore") + + # Developer Tools and sideload + def _developer_items(self) -> list[tuple[str, str, str, str, object]]: + installed = len(self.package_manager.installed_records()) + sideload = len(self.package_manager.sideload_candidates()) + return [ + ("package", BeeTheme.YELLOW, "Packages", f"{installed} installed", self.show_installed_packages), + ("install", BeeTheme.GREEN, "Sideload", f"{sideload} ready", self.show_sideload), + ("github", BeeTheme.YELLOW, "Hive Repos", f"{len(self.source_manager.sources)} sources", self.show_hive_repos), + ("runtime", BeeTheme.ORANGE, "Runtime", "API + sessions", self.show_runtime_api_info), + ("apps", BeeTheme.BLUE, "Assets", f"{self.asset_build.icon_count} icons", self.show_icon_pack_info), + ("plugins", BeeTheme.PURPLE, "Plugins", f"{len(self.plugin_manager.installed_plugins())} hooks", self.show_plugin_hooks), + ("developer-tools", BeeTheme.CYAN, "Templates", "make package", self.show_template_tool_info), + ] + + def show_developer_tools(self) -> None: + self._begin_screen("developer", BeeTheme.SCREEN_BG) + + # Visibly different from the normal app list: compact dashboard header. + self.ui.text(24, 28, "‹", 25, BeeTheme.TEXT_SOFT, "w") + self.ui.text(58, 28, "Dev Hub", 16, BeeTheme.CYAN, "w", "bold") + + items = self._developer_items() + page_size = 4 + page_count = max(1, (len(items) + page_size - 1) // page_size) + self.developer_page = max(0, min(self.developer_page, page_count - 1)) + + installed = len(self.package_manager.installed_records()) + sources = len(self.source_manager.sources) + self.ui.rounded_rect(24, 56, 386, 106, 18, "#07121c", "#12334f") + self.ui.text(44, 75, f"Page {self.developer_page + 1}/{page_count}", 10, BeeTheme.CYAN, "w", "bold") + self.ui.text(44, 94, f"{installed} packages • {sources} repos • {self.asset_build.icon_count} icons", 10, BeeTheme.TEXT_MUTED, "w") + + start = self.developer_page * page_size + visible = items[start:start + page_size] + + # Dashboard tile grid, not list rows. + tile_w = 166 + tile_h = 118 + gap_x = 18 + gap_y = 18 + start_x = 30 + start_y = 132 + + for index, (icon_id, color, title, subtitle, _action) in enumerate(visible): + row = index // 2 + col = index % 2 + x1 = start_x + col * (tile_w + gap_x) + y1 = start_y + row * (tile_h + gap_y) + x2 = x1 + tile_w + y2 = y1 + tile_h + + self.ui.rounded_rect(x1, y1, x2, y2, 24, "#0b1018", "#253044") + self.ui.circle(x1 + 38, y1 + 38, 24, dark_variant(color)) + self.ui.icon_asset(x1 + 38, y1 + 38, 28, icon_id, color, self.icon_manager) + self.ui.text(x1 + 70, y1 + 30, title[:13], 13, BeeTheme.TEXT, "w", "bold") + self.ui.text(x1 + 70, y1 + 52, subtitle[:15], 9, BeeTheme.TEXT_MUTED, "w") + self.ui.text(x2 - 24, y2 - 24, "›", 22, color) + + # Big page controls to make the changed layout obvious. + if page_count > 1: + left_color = BeeTheme.TEXT_DIM if self.developer_page == 0 else BeeTheme.CYAN + right_color = BeeTheme.TEXT_DIM if self.developer_page >= page_count - 1 else BeeTheme.CYAN + self.ui.pill(48, 410, 142, 454, "#07121c", "#12334f") + self.ui.text(95, 432, "‹ Prev", 12, left_color, weight="bold") + self.ui.pill(268, 410, 362, 454, "#07121c", "#12334f") + self.ui.text(315, 432, "Next ›", 12, right_color, weight="bold") + + self._draw_developer_page_dots(page_count) + self.ui.text(205, 482, "Developer dashboard", 10, BeeTheme.TEXT_DIM) + + def _draw_developer_page_dots(self, page_count: int) -> None: + total_w = page_count * 18 + x = (WATCH_WIDTH - total_w) // 2 + y = 386 + for page in range(page_count): + color = BeeTheme.CYAN if page == self.developer_page else "#5b6370" + self.ui.circle(x + page * 18, y, 5, color) + + def scroll_developer(self, direction: int) -> None: + if self.state.current_screen != "developer": + return + page_count = max(1, (len(self._developer_items()) + 3) // 4) + old = self.developer_page + self.developer_page = max(0, min(self.developer_page + direction, page_count - 1)) + if old != self.developer_page: + self.show_developer_tools() + + def _handle_developer_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + self.show_launcher(); return + + page_count = max(1, (len(self._developer_items()) + 3) // 4) + + if 48 <= x <= 142 and 410 <= y <= 454: + self.scroll_developer(-1); return + if 268 <= x <= 362 and 410 <= y <= 454: + self.scroll_developer(1); return + + items = self._developer_items() + start = self.developer_page * 4 + visible = items[start:start + 4] + + tile_w = 166 + tile_h = 118 + gap_x = 18 + gap_y = 18 + start_x = 30 + start_y = 132 + + for index, (_icon_id, _color, _title, _subtitle, action) in enumerate(visible): + row = index // 2 + col = index % 2 + x1 = start_x + col * (tile_w + gap_x) + y1 = start_y + row * (tile_h + gap_y) + x2 = x1 + tile_w + y2 = y1 + tile_h + if x1 <= x <= x2 and y1 <= y <= y2: + action() + return + + def show_installed_packages(self) -> None: + self._begin_screen("sideload", BeeTheme.SCREEN_BG) + self._draw_back_header("Installed", BeeTheme.YELLOW) + manifests = self.package_manager.installed_manifests() + y = 80 + if not manifests: + self.ui.text(205, 236, "No installed packages yet", 16, BeeTheme.TEXT_MUTED) + return + for manifest in manifests[:5]: + self.ui.rounded_rect(24, y, 386, y+64, 16, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.icon_asset(48, y+22, 22, self._icon_asset_for_manifest(manifest), manifest.color, self.icon_manager, manifest.icon) + self.ui.text(84, y+20, manifest.name[:24], 13, BeeTheme.TEXT, "w", "bold") + self.ui.text(84, y+42, f"{manifest.package_type} • {manifest.version}", 10, BeeTheme.TEXT_MUTED, "w") + y += 72 + + def show_sideload(self) -> None: + self._begin_screen("sideload", BeeTheme.SCREEN_BG) + self._draw_back_header("Sideload", BeeTheme.GREEN) + candidates = self.package_manager.sideload_candidates() + y = 80 + if not candidates: + self.ui.text(205, 230, "No sideload packages", 16, BeeTheme.TEXT_MUTED) + self.ui.text(205, 262, "Use tools/create_package_template.py", 11, BeeTheme.TEXT_DIM) + return + for i, (path, result) in enumerate(candidates[:5]): + ok = isinstance(result, PackageManifest) + color = result.color if ok else BeeTheme.RED + name = result.name if ok else path.name + subtitle = f"{result.package_type} • v{result.version}" if ok else "Invalid manifest" + self.ui.rounded_rect(24, y, 386, y+64, 16, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.circle(54, y+32, 20, dark_variant(color)) + self.ui.text(54, y+32, result.icon if ok else "!", 13, color, weight="bold") + self.ui.text(84, y+20, name[:24], 13, BeeTheme.TEXT, "w", "bold") + self.ui.text(84, y+42, subtitle[:34], 10, BeeTheme.TEXT_MUTED if ok else BeeTheme.RED, "w") + self.ui.text(362, y+32, "›", 21, BeeTheme.TEXT_MUTED) + y += 72 + + def _handle_sideload_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + self.show_developer_tools(); return + candidates = self.package_manager.sideload_candidates() + row_y = 80 + for i, item in enumerate(candidates[:5]): + if 24 <= x <= 386 and row_y <= y <= row_y + 64: + self.selected_sideload_index = i + self.show_sideload_detail(i) + return + row_y += 72 + + def show_sideload_detail(self, index: int) -> None: + candidates = self.package_manager.sideload_candidates() + path, result = candidates[index] + self._begin_screen("sideload_detail", BeeTheme.SCREEN_BG) + self._draw_back_header("Sideload", BeeTheme.GREEN) + if isinstance(result, Exception): + self.ui.text(205, 160, "Invalid Package", 20, BeeTheme.RED, weight="bold") + self.ui.text(32, 220, str(result)[:52], 11, BeeTheme.TEXT_MUTED, "w") + return + manifest = result + installed = self.package_manager.is_installed(manifest.package_id) + self.ui.circle(205, 96, 40, dark_variant(manifest.color), manifest.color, 2) + self.ui.icon_asset(205, 96, 40, self._icon_asset_for_manifest(manifest), manifest.color, self.icon_manager, manifest.icon) + self.ui.text(205, 150, manifest.name[:26], 18, BeeTheme.TEXT, weight="bold") + self.ui.text(205, 176, f"{manifest.package_type} • v{manifest.version}", 12, BeeTheme.TEXT_MUTED) + self.ui.text(32, 222, manifest.description[:50], 12, BeeTheme.TEXT_SOFT, "w") + self.ui.text(32, 254, f"ID: {manifest.package_id}"[:50], 10, BeeTheme.TEXT_DIM, "w") + self.ui.text(32, 282, f"Perms: {format_permissions(manifest.permissions)}"[:50], 11, BeeTheme.YELLOW, "w") + self.ui.text(205, 330, "Developer sideload package", 11, BeeTheme.TEXT_DIM) + label = "Reinstall" if installed else "Install Sideload" + self.ui.pill(58, 392, 352, 442, BeeTheme.GREEN, BeeTheme.GREEN) + self.ui.text(205, 417, label, 16, "#000000", weight="bold") + + def _handle_sideload_detail_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + self.show_sideload(); return + if self.selected_sideload_index is None: + return + if 58 <= x <= 352 and 392 <= y <= 442: + candidates = self.package_manager.sideload_candidates() + path, result = candidates[self.selected_sideload_index] + if isinstance(result, PackageManifest): + self.show_permission_prompt(result, source="sideload", sideload_path=path) + + # Settings + def show_settings(self) -> None: + self._begin_screen("settings", BeeTheme.SCREEN_BG) + self._draw_back_header("Settings", BeeTheme.BLUE) + installed = self.package_manager.installed_manifests() + faces = built_in_watch_faces() + [m.name for m in installed if m.package_type == "watchface"] + themes = self.theme_manager.names() + [m.name for m in installed if m.package_type == "theme"] + items = [ + ("◷", BeeTheme.YELLOW, "Default Watch Face", self.state.watch_face_name, "watchface"), + ("◆", BeeTheme.YELLOW, "Theme", self.state.theme_name, "theme"), + ("▣", BeeTheme.BLUE, "Installed Packages", f"{len(installed)} installed", "installed"), + ("", BeeTheme.CYAN, "Developer Mode", "On" if self.state.settings.get("developer_mode") else "Off", "dev"), + ] + y = 82 + for icon, color, title, subtitle, _mode in items: + self.ui.rounded_rect(24, y, 386, y+68, 16, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.circle(56, y+34, 21, dark_variant(color)) + self.ui.text(56, y+34, icon, 14, color, weight="bold") + self.ui.text(90, y+24, title, 13, BeeTheme.TEXT, "w", "bold") + self.ui.text(90, y+45, subtitle[:30], 10, BeeTheme.TEXT_MUTED, "w") + self.ui.text(362, y+34, "›", 21, BeeTheme.TEXT_MUTED) + y += 78 + self._settings_faces = faces + self._settings_themes = themes + + def _handle_settings_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + self.show_launcher(); return + rows = [("watchface", 82), ("theme", 160), ("installed", 238), ("dev", 316)] + for mode, row_y in rows: + if 24 <= x <= 386 and row_y <= y <= row_y + 68: + if mode == "installed": + self.show_installed_packages() + elif mode == "dev": + self.state.settings["developer_mode"] = not self.state.settings.get("developer_mode", True) + self.state.save_settings() + self.show_settings() + else: + self.show_settings_list(mode) + return + + def show_settings_list(self, mode: str) -> None: + self.settings_mode = mode + self._begin_screen("settings_list", BeeTheme.SCREEN_BG) + self._draw_back_header("Watch Faces" if mode == "watchface" else "Themes", BeeTheme.YELLOW) + items = self._settings_faces if mode == "watchface" else self._settings_themes + current = self.state.watch_face_name if mode == "watchface" else self.state.theme_name + y = 88 + for item in items[:6]: + selected = item == current + self.ui.rounded_rect(28, y, 382, y+56, 16, BeeTheme.CARD, BeeTheme.YELLOW if selected else BeeTheme.BORDER_SOFT) + self.ui.text(52, y+28, "✓" if selected else "○", 15, BeeTheme.YELLOW if selected else BeeTheme.TEXT_MUTED, "w") + self.ui.text(88, y+28, item[:28], 13, BeeTheme.TEXT, "w", "bold" if selected else "normal") + y += 66 + + def _handle_settings_list_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + self.show_settings(); return + items = self._settings_faces if self.settings_mode == "watchface" else self._settings_themes + row_y = 88 + for item in items[:6]: + if 28 <= x <= 382 and row_y <= y <= row_y + 56: + if self.settings_mode == "watchface": + self.state.watch_face_name = item + else: + self.state.theme_name = item + self.show_settings_list(self.settings_mode or "watchface") + return + row_y += 66 + + # Other apps + def show_installed_package_app(self, manifest: PackageManifest) -> None: + session = self.runtime.start_package_app(manifest) + if isinstance(session, RuntimeResult): + self.show_runtime_result(session, back_hint="Back returns to launcher") + return + self.current_session = session + self.current_session_result = session.open() + self.show_app_session() + + def show_app_session(self) -> None: + self._begin_screen("app_session", BeeTheme.SCREEN_BG) + if self.current_session is None or self.current_session_result is None: + self.show_launcher() + return + result = self.current_session_result + color = BeeTheme.GREEN if result.success else BeeTheme.RED + self._draw_back_header(result.title[:16], color) + self.ui.text(205, 74, result.title[:28], 18, BeeTheme.TEXT, weight="bold") + self.ui.text(205, 100, result.subtitle[:34], 11, BeeTheme.TEXT_MUTED) + y = 136 + if result.error: + self.ui.text(32, y, ("Error: " + result.error)[:48], 11, BeeTheme.RED, "w") + y += 28 + for line in result.lines[:7]: + self.ui.rounded_rect(28, y, 382, y+38, 10, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.text(44, y+19, str(line)[:48], 10, BeeTheme.TEXT_SOFT, "w") + y += 46 + self.ui.pill(66, 426, 344, 470, BeeTheme.CARD, BeeTheme.YELLOW) + self.ui.text(205, 448, "Tap here to send on_touch()", 13, BeeTheme.YELLOW, weight="bold") + + def _handle_app_session_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + if self.current_session is not None: + self.current_session.close() + self.current_session = None + self.show_launcher() + return + if self.current_session is not None: + self.current_session_result = self.current_session.touch(x, y) + self.show_app_session() + + def show_scripts(self) -> None: + if not hasattr(self, "scripts_scroll_index"): + self.scripts_scroll_index = 0 + self._begin_screen("scripts", BeeTheme.SCREEN_BG) + self._draw_back_header("Scripts", BeeTheme.YELLOW) + self._script_files = sorted(self.scripts_dir.glob("*.py")) + + if not self._script_files: + self.scripts_scroll_index = 0 + self.ui.text(205, 230, "No local scripts", 16, BeeTheme.TEXT_MUTED) + self.ui.text(205, 470, "Add .py files to beeos/scripts", 10, BeeTheme.TEXT_DIM) + return + + visible_count = 4 + max_start = max(0, len(self._script_files) - visible_count) + self.scripts_scroll_index = max(0, min(self.scripts_scroll_index, max_start)) + visible_scripts = self._script_files[self.scripts_scroll_index:self.scripts_scroll_index + visible_count] + + self.ui.text(32, 62, f"{len(self._script_files)} scripts available", 10, BeeTheme.TEXT_DIM, "w") + + y = 88 + for offset, script in enumerate(visible_scripts): + actual_index = self.scripts_scroll_index + offset + self.ui.rounded_rect(28, y, 382, y+66, 16, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.circle(54, y+33, 19, dark_variant(BeeTheme.GREEN)) + self.ui.icon_asset(54, y+33, 22, "scripts", BeeTheme.GREEN, self.icon_manager, "▶") + self.ui.text(82, y+22, script.stem.replace("_", " ").title()[:24], 13, BeeTheme.TEXT, "w", "bold") + self.ui.text(82, y+43, script.name[:28], 10, BeeTheme.TEXT_MUTED, "w") + self.ui.text(350, y+33, "Run", 10, BeeTheme.YELLOW, weight="bold") + y += 76 + + if len(self._script_files) > visible_count: + track_x = 394 + track_y1 = 92 + track_y2 = 384 + self.ui.rounded_rect(track_x, track_y1, track_x+5, track_y2, 3, "#202631", "#202631") + thumb_h = max(32, int((visible_count / len(self._script_files)) * (track_y2 - track_y1))) + thumb_y = track_y1 + int((self.scripts_scroll_index / max_start) * ((track_y2 - track_y1) - thumb_h)) if max_start else track_y1 + self.ui.rounded_rect(track_x-1, thumb_y, track_x+6, thumb_y+thumb_h, 4, BeeTheme.YELLOW, BeeTheme.YELLOW) + self.ui.text(205, 450, f"{self.scripts_scroll_index + 1}-{self.scripts_scroll_index + len(visible_scripts)} of {len(self._script_files)}", 10, BeeTheme.TEXT_MUTED) + self.ui.text(205, 472, "Mouse wheel / ↑↓ to scroll", 10, BeeTheme.TEXT_DIM) + else: + self.ui.text(205, 470, "Tap a script to run through BeeOS Runtime", 10, BeeTheme.TEXT_DIM) + + def scroll_scripts(self, direction: int) -> None: + if not hasattr(self, "scripts_scroll_index"): + self.scripts_scroll_index = 0 + scripts = sorted(self.scripts_dir.glob("*.py")) + visible_count = 4 + max_start = max(0, len(scripts) - visible_count) + old = self.scripts_scroll_index + self.scripts_scroll_index = max(0, min(self.scripts_scroll_index + direction, max_start)) + if old != self.scripts_scroll_index: + self.show_scripts() + + def _handle_scripts_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + self.show_launcher(); return + + scripts = getattr(self, "_script_files", sorted(self.scripts_dir.glob("*.py"))) + visible_count = 4 + row_y = 88 + + for offset, script in enumerate(scripts[self.scripts_scroll_index:self.scripts_scroll_index + visible_count]): + if 28 <= x <= 382 and row_y <= y <= row_y + 66: + self.selected_script_index = self.scripts_scroll_index + offset + result = self.runtime.run_script(script) + self.show_runtime_result(result, back_hint="Back returns to launcher") + return + row_y += 76 + + def show_permission_prompt(self, manifest: PackageManifest, source: str, sideload_path: Optional[Path] = None) -> None: + self.pending_permission_manifest = manifest + self.pending_permission_source = source + self.pending_sideload_path = sideload_path + self._begin_screen("permission_prompt", BeeTheme.SCREEN_BG) + self._draw_back_header("Permissions", BeeTheme.YELLOW) + self.ui.circle(205, 86, 34, dark_variant(manifest.color), manifest.color, 2) + self.ui.icon_asset(205, 86, 34, self._icon_asset_for_manifest(manifest), manifest.color, self.icon_manager, manifest.icon) + self.ui.text(205, 134, manifest.name[:28], 17, BeeTheme.TEXT, weight="bold") + self.ui.text(205, 160, "Approve requested permissions", 11, BeeTheme.TEXT_MUTED) + y = 204 + permissions = manifest.permissions or ["none"] + for permission in permissions[:5]: + self.ui.rounded_rect(34, y, 376, y+34, 10, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.text(52, y+17, f"• {permission}", 11, BeeTheme.TEXT_SOFT, "w") + y += 42 + self.ui.pill(40, 420, 184, 466, BeeTheme.CARD, BeeTheme.RED) + self.ui.text(112, 443, "Deny", 14, BeeTheme.RED, weight="bold") + self.ui.pill(226, 420, 370, 466, BeeTheme.YELLOW, BeeTheme.YELLOW) + self.ui.text(298, 443, "Approve", 14, "#000000", weight="bold") + + def _handle_permission_prompt_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + self._return_from_permission_prompt(); return + if 40 <= x <= 184 and 420 <= y <= 466: + self._return_from_permission_prompt(); return + if 226 <= x <= 370 and 420 <= y <= 466: + manifest = self.pending_permission_manifest + if manifest is None: + self.show_launcher(); return + self.permission_manager.approve(manifest) + if self.pending_permission_source == "sideload" and self.pending_sideload_path is not None: + self.package_manager.install_sideload(self.pending_sideload_path) + self._sync_package_apps() + self.show_sideload_detail(self.selected_sideload_index or 0) + else: + self.package_manager.install_from_manifest(manifest) + self._sync_package_apps() + self.show_package_detail(manifest) + + def _return_from_permission_prompt(self) -> None: + if self.pending_permission_source == "sideload": + if self.selected_sideload_index is not None: + self.show_sideload_detail(self.selected_sideload_index) + else: + self.show_sideload() + elif self.pending_permission_manifest is not None: + self.show_package_detail(self.pending_permission_manifest) + else: + self.show_launcher() + + def show_icon_pack_info(self) -> None: + self._begin_screen("runtime_result", BeeTheme.SCREEN_BG) + self._draw_back_header("Asset Builds", BeeTheme.YELLOW) + self.ui.circle(205, 78, 30, dark_variant(BeeTheme.YELLOW), BeeTheme.YELLOW, 2) + self.ui.icon_asset(205, 78, 34, "apps", BeeTheme.YELLOW, self.icon_manager, "▦") + self.ui.text(205, 118, "LVGL + Theme Exports", 17, BeeTheme.TEXT, weight="bold") + self.ui.text(205, 142, f"{self.asset_build.icon_count} icons • {self.asset_build.theme_count} themes", 10, BeeTheme.TEXT_MUTED) + y = 176 + rows = [ + ("LVGL v8", "beeos/generated/icons/lvgl_v8"), + ("LVGL v9", "beeos/generated/icons/lvgl_v9"), + ("Generic C", "beeos/generated/icons/lvgl"), + ("Bitmap JSON", "beeos/generated/icons/bitmap_json"), + ("Themes C", "beeos/generated/themes"), + ("Tools", "convert_icons + export_themes"), + ] + for title, subtitle in rows: + self.ui.rounded_rect(28, y, 382, y+38, 10, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.text(46, y+14, title[:18], 10, BeeTheme.TEXT, "w", "bold") + self.ui.text(178, y+14, subtitle[:30], 9, BeeTheme.TEXT_MUTED, "w") + y += 44 + sizes = ", ".join(self.asset_build.sizes) or "none" + self.ui.text(205, 470, f"Generated icon sizes: {sizes}", 10, BeeTheme.TEXT_DIM) + + def show_hive_repos(self) -> None: + self._begin_screen("hive_repos", BeeTheme.SCREEN_BG) + self._draw_back_header("Hive Repos", BeeTheme.YELLOW) + self.source_manager.load() + self.ui.text(28, 62, "GitHub/raw JSON repos can host HiveStore indexes", 10, BeeTheme.TEXT_DIM, "w") + y = 92 + for i, source in enumerate(self.source_manager.sources[:5]): + enabled = "On" if source.enabled else "Off" + badge = "Official" if source.official else "Community" + self.ui.rounded_rect(24, y, 386, y+64, 16, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.circle(52, y+32, 20, dark_variant(BeeTheme.YELLOW if source.enabled else BeeTheme.GRAY)) + self.ui.text(52, y+32, "⌘", 12, BeeTheme.YELLOW if source.enabled else BeeTheme.GRAY, weight="bold") + self.ui.text(84, y+20, source.name[:26], 12, BeeTheme.TEXT, "w", "bold") + self.ui.text(84, y+42, f"{enabled} • {badge} • {source.status}"[:34], 9, BeeTheme.TEXT_MUTED, "w") + self.ui.text(362, y+32, "›", 20, BeeTheme.TEXT_MUTED) + y += 72 + self.ui.text(205, 468, "Use tools/import_hivestore_repo.py to add URLs", 9, BeeTheme.TEXT_DIM) + + def _handle_hive_repos_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + self.show_developer_tools(); return + row_y = 92 + for i, source in enumerate(self.source_manager.sources[:5]): + if 24 <= x <= 386 and row_y <= y <= row_y + 64: + self.selected_source_index = i + self.show_hive_repo_detail(i) + return + row_y += 72 + + def show_hive_repo_detail(self, index: int) -> None: + self._begin_screen("hive_repo_detail", BeeTheme.SCREEN_BG) + self._draw_back_header("Hive Repo", BeeTheme.YELLOW) + self.source_manager.load() + if index < 0 or index >= len(self.source_manager.sources): + self.show_hive_repos(); return + source = self.source_manager.sources[index] + self.ui.circle(205, 86, 34, dark_variant(BeeTheme.YELLOW), BeeTheme.YELLOW, 2) + self.ui.text(205, 86, "⌘", 24, BeeTheme.YELLOW, weight="bold") + self.ui.text(205, 136, source.name[:28], 17, BeeTheme.TEXT, weight="bold") + self.ui.text(205, 162, "Official source" if source.official else "Community source", 11, BeeTheme.TEXT_MUTED) + rows = [ + ("Enabled", "Yes" if source.enabled else "No"), + ("Status", source.status), + ("Index", source.index), + ("URL", source.url), + ] + y = 210 + for title, value in rows: + self.ui.rounded_rect(28, y, 382, y+36, 10, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.text(44, y+18, title, 10, BeeTheme.TEXT, "w", "bold") + self.ui.text(136, y+18, str(value)[:34], 9, BeeTheme.TEXT_MUTED, "w") + y += 42 + self.ui.pill(44, 414, 184, 458, BeeTheme.CARD, BeeTheme.YELLOW) + self.ui.text(114, 436, "Toggle", 13, BeeTheme.YELLOW, weight="bold") + self.ui.pill(226, 414, 366, 458, BeeTheme.CARD, BeeTheme.BLUE) + self.ui.text(296, 436, "Reload", 13, BeeTheme.BLUE, weight="bold") + + def _handle_hive_repo_detail_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + self.show_hive_repos(); return + if self.selected_source_index is None or self.selected_source_index >= len(self.source_manager.sources): + self.show_hive_repos(); return + source = self.source_manager.sources[self.selected_source_index] + if 44 <= x <= 184 and 414 <= y <= 458: + self.source_manager.toggle(source.source_id) + self.hivestore.load() + self.update_manager = UpdateManager(self.package_manager, self.hivestore) + self.show_hive_repo_detail(self.selected_source_index) + return + if 226 <= x <= 366 and 414 <= y <= 458: + self.hivestore.load() + self.update_manager = UpdateManager(self.package_manager, self.hivestore) + self.show_hive_repo_detail(self.selected_source_index) + return + + def show_plugin_hooks(self) -> None: + self._begin_screen("plugin_hooks", BeeTheme.SCREEN_BG) + self._draw_back_header("Plugin Hooks", BeeTheme.PURPLE) + self.ui.text(205, 72, "Hook registry placeholder", 13, BeeTheme.TEXT_MUTED) + y = 108 + for hook, summary in self.plugin_manager.hook_summary()[:6]: + self.ui.rounded_rect(28, y, 382, y+54, 14, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.text(48, y+19, hook[:32], 11, BeeTheme.TEXT, "w", "bold") + self.ui.text(48, y+38, summary[:34], 9, BeeTheme.TEXT_MUTED, "w") + y += 62 + self.ui.text(205, 470, "Plugin execution comes in a later phase", 10, BeeTheme.TEXT_DIM) + + def _handle_plugin_hooks_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + self.show_developer_tools(); return + + def show_runtime_result(self, result: RuntimeResult, back_hint: str = "Back returns to launcher") -> None: + self.last_runtime_result = result + self._begin_screen("runtime_result", BeeTheme.SCREEN_BG) + color = BeeTheme.GREEN if result.success else BeeTheme.RED + self._draw_back_header(result.title[:16], color) + self.ui.circle(205, 88, 34, dark_variant(color), color, 2) + self.ui.text(205, 88, "✓" if result.success else "!", 25, color, weight="bold") + self.ui.text(205, 134, result.title[:28], 18, BeeTheme.TEXT, weight="bold") + self.ui.text(205, 160, result.subtitle[:34], 11, BeeTheme.TEXT_MUTED) + y = 204 + if result.error: + self.ui.text(32, y, ("Error: " + result.error)[:48], 11, BeeTheme.RED, "w") + y += 28 + for line in result.lines[:8]: + self.ui.rounded_rect(28, y, 382, y+34, 10, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.text(44, y+17, str(line)[:48], 10, BeeTheme.TEXT_SOFT, "w") + y += 42 + self.ui.text(205, 470, back_hint, 10, BeeTheme.TEXT_DIM) + + def _handle_runtime_result_tap(self, x: int, y: int) -> None: + if x <= 64 and y <= 60: + self.show_launcher(); return + + def show_template_tool_info(self) -> None: + self._begin_screen("runtime_result", BeeTheme.SCREEN_BG) + self._draw_back_header("Templates", BeeTheme.CYAN) + self.ui.circle(205, 88, 34, dark_variant(BeeTheme.CYAN), BeeTheme.CYAN, 2) + self.ui.icon_asset(205, 88, 34, "developer-tools", BeeTheme.CYAN, self.icon_manager, "") + self.ui.text(205, 138, "Package Templates", 17, BeeTheme.TEXT, weight="bold") + self.ui.text(205, 164, "Run from desktop shell", 11, BeeTheme.TEXT_MUTED) + lines = [ + "py tools/create_package_template.py", + "app local.test.app Test App", + "types: app, script, watchface", + "theme, plugin, script_pack", + "output: beeos/sideload/", + ] + y = 214 + for line in lines: + self.ui.rounded_rect(30, y, 380, y+36, 10, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.text(46, y+18, line[:44], 10, BeeTheme.TEXT_SOFT, "w") + y += 42 + self.ui.text(205, 470, "Cleaner than a crowded Dev Tools list", 10, BeeTheme.TEXT_DIM) + + def show_runtime_api_info(self) -> None: + self._begin_screen("runtime_result", BeeTheme.SCREEN_BG) + self._draw_back_header("Runtime API", BeeTheme.YELLOW) + self.ui.circle(205, 92, 38, dark_variant(BeeTheme.YELLOW), BeeTheme.YELLOW, 2) + self.ui.text(205, 92, "⚡", 27, BeeTheme.YELLOW, weight="bold") + self.ui.text(205, 144, "BeeOS Runtime API", 18, BeeTheme.TEXT, weight="bold") + self.ui.text(205, 170, "Phase 5 session foundation", 11, BeeTheme.TEXT_MUTED) + lines = [ + "BeeApp(ctx).on_open()", + "BeeApp(ctx).on_draw(display)", + "BeeApp(ctx).on_touch(event)", + "BeeApp(ctx).on_close()", + "ctx.display.text/card/progress", + "ctx.storage.get/set", + "permission approval before install", + ] + y = 212 + for line in lines: + self.ui.rounded_rect(34, y, 376, y+34, 10, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.text(50, y+17, line, 10, BeeTheme.TEXT_SOFT, "w") + y += 40 + self.ui.text(205, 470, "Simulator only; sandboxing comes later", 10, BeeTheme.TEXT_DIM) + + def show_resource_monitor(self) -> None: + self._begin_app("Resource Monitor", BeeTheme.BLUE) + ram_used, ram_total = self.hardware.ram_usage_kb() + psram_used, psram_total = self.hardware.psram_usage_kb() + storage_used, storage_total = self.hardware.storage_usage_kb() + cpu = self.hardware.cpu_usage_percent() + battery = self.hardware.battery_percent(self.state.battery_percent) + self.ui.metric_bar(28, 72, 354, "RAM", f"{int(ram_used/ram_total*100)}%", ram_used/ram_total, BeeTheme.BLUE, "▣") + self.ui.text(92, 120, f"{ram_used} / {ram_total} KB", 10, BeeTheme.TEXT_MUTED, "w") + self.ui.metric_bar(28, 154, 354, "PSRAM", f"{int(psram_used/psram_total*100)}%", psram_used/psram_total, BeeTheme.PURPLE, "▰") + self.ui.text(92, 202, f"{psram_used} / {psram_total} KB", 10, BeeTheme.TEXT_MUTED, "w") + self.ui.metric_bar(28, 236, 354, "Storage", f"{int(storage_used/storage_total*100)}%", storage_used/storage_total, BeeTheme.GREEN, "▰") + self.ui.text(92, 284, f"{storage_used/1024:.1f} / {storage_total/1024:.1f} MB", 10, BeeTheme.TEXT_MUTED, "w") + self.ui.metric_bar(28, 318, 354, "CPU", f"{cpu}%", cpu/100, BeeTheme.ORANGE, "⌁") + self.ui.text(92, 366, "simulated load", 10, BeeTheme.TEXT_MUTED, "w") + self.ui.text(205, 438, f"Battery {battery}% • Uptime {self.state.uptime_text}", 13, BeeTheme.TEXT_SOFT) + + def show_clock(self) -> None: + self._begin_app("Clock", BeeTheme.BLUE) + self.ui.text(205, 160, current_time(), 60, BeeTheme.TEXT, weight="bold") + self.ui.text(205, 220, current_date_short(), 18, BeeTheme.TEXT_SOFT) + self.ui.pill(88, 300, 322, 344, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.text(205, 322, "Alarms / Timers later", 14, BeeTheme.TEXT_MUTED) + + def show_health(self) -> None: + self._begin_app("Health", BeeTheme.RED) + self.ui.circle(205, 148, 54, BeeTheme.RED_DARK, BeeTheme.RED, 2) + self.ui.text(205, 148, "♥", 44, BeeTheme.RED, weight="bold") + self.ui.text(205, 230, "-- bpm", 38, BeeTheme.TEXT, weight="bold") + self.ui.text(205, 274, "Heart rate / SpO₂ placeholder", 13, BeeTheme.TEXT_MUTED) + self.ui.pill(92, 340, 318, 382, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.text(205, 361, "Start reading", 14, BeeTheme.TEXT) + + def show_gps(self) -> None: + self._begin_app("GPS", BeeTheme.CYAN) + self.ui.circle(205, 148, 54, BeeTheme.CYAN_DARK, BeeTheme.CYAN, 2) + self.ui.text(205, 148, "⌖", 44, BeeTheme.CYAN, weight="bold") + self.ui.text(205, 228, "No fix", 28, BeeTheme.TEXT, weight="bold") + self.ui.text(205, 266, "GPS support after hardware bring-up", 12, BeeTheme.TEXT_MUTED) + self.ui.pill(110, 342, 300, 384, BeeTheme.CARD, BeeTheme.BORDER_SOFT) + self.ui.text(205, 363, "Start GPS", 14, BeeTheme.TEXT) + + def show_battery(self) -> None: + self._begin_app("Battery", BeeTheme.GREEN) + self.ui.text(205, 142, f"{self.state.battery_percent}%", 62, BeeTheme.TEXT, weight="bold") + self.ui.text(205, 200, "Estimated battery", 16, BeeTheme.TEXT_MUTED) + self.ui.metric_bar(28, 272, 354, "Battery", f"{self.state.battery_percent}%", self.state.battery_percent/100, BeeTheme.GREEN, "▱") + self.ui.metric_bar(28, 354, 354, "Power Draw", "light", 0.22, BeeTheme.BLUE, "↯") + + def show_about(self) -> None: + self._begin_app("About", BeeTheme.YELLOW) + self.ui.draw_bee_mark(205, 126, 0.44) + self.ui.text(205, 218, "BeeOS Phase 9", 24, BeeTheme.YELLOW, weight="bold") + self.ui.text(205, 252, "Multi-repo HiveStore", 13, BeeTheme.TEXT_SOFT) + self.ui.text(205, 288, "MicroPython-first watch OS", 13, BeeTheme.TEXT_MUTED) + self.ui.text(205, 346, "HiveStore • sideload • manifests", 12, BeeTheme.TEXT_SOFT) + self.ui.text(205, 374, "GitHub repo imports", 12, BeeTheme.TEXT_SOFT) + + def _tick(self) -> None: + if self.state.current_screen == "watchface": + self.show_watchface() + elif self.state.current_screen == "app" and self.state.active_app_name == "Resource Monitor": + self.show_resource_monitor() + elif self.state.current_screen == "app" and self.state.active_app_name == "Clock": + self.show_clock() + self.root.after(1000, self._tick) + + def run(self) -> None: + self.root.mainloop() + +if __name__ == "__main__": + try: + BeeOSSimulator().run() + except KeyboardInterrupt: + sys.exit(0) diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md new file mode 100644 index 0000000..c85545c --- /dev/null +++ b/docs/DEVELOPMENT.md @@ -0,0 +1,26 @@ +# BeeOS Development Notes + +BeeOS is currently a desktop simulator and project framework for a future MicroPython/LVGL watch OS. + +## Current development rules + +- Keep the simulator runnable on normal Windows Python. +- Do not require LVGL on Windows. +- Keep HiveStore curated, even when third-party repos are supported. +- Prefer small curated asset subsets over large full asset packs. +- Keep package formats JSON-based and easy to inspect. +- Keep generated firmware assets separate under `beeos/generated/`. + +## Before packaging + +Run: + +```powershell +py tools/validate_project.py --project-root . +``` + +Optional cleanup: + +```powershell +py tools/clean_project.py --project-root . +``` diff --git a/docs/HIVESTORE_REPOS.md b/docs/HIVESTORE_REPOS.md new file mode 100644 index 0000000..2380dbe --- /dev/null +++ b/docs/HIVESTORE_REPOS.md @@ -0,0 +1,49 @@ +# HiveStore Repos + +BeeOS supports multiple curated HiveStore repositories. + +A HiveStore repo can be hosted on GitHub by committing a `hivestore_index.json` file. + +## Create a starter repo + +```powershell +py tools/create_hivestore_repo.py .\my-hivestore "My HiveStore Repo" +``` + +## Import a local repo index + +```powershell +py tools/import_hivestore_repo.py .\my-hivestore\hivestore_index.json --project-root . +``` + +## Import a GitHub-hosted repo + +```powershell +py tools/import_hivestore_repo.py https://github.com/example/my-hivestore --project-root . +``` + +## Repo format + +```json +{ + "schema": 1, + "source_name": "My HiveStore Repo", + "source_url": "https://github.com/example/my-hivestore", + "packages": [ + { + "id": "example.app.hello", + "name": "Hello Bee", + "type": "app", + "version": "0.1.0", + "author": "Example Developer", + "description": "A simple BeeOS app.", + "entry": "app.py", + "permissions": ["display", "storage"], + "repository": "https://github.com/example/hello-bee", + "curated": true + } + ] +} +``` + +If duplicate package IDs appear across enabled repos, the first enabled source wins. diff --git a/docs/PROJECT_STRUCTURE.md b/docs/PROJECT_STRUCTURE.md new file mode 100644 index 0000000..1221f51 --- /dev/null +++ b/docs/PROJECT_STRUCTURE.md @@ -0,0 +1,39 @@ +# BeeOS Project Structure + +```text +beeos/ +├─ core/ Core OS simulation logic, registries, managers, runtime API +├─ ui/ Tkinter desktop simulator and drawing components +├─ mock/ Mock hardware providers used by the simulator +├─ data/ Local JSON databases and HiveStore indexes +├─ scripts/ Local BeeOS script examples +├─ sideload/ Local package folders for sideload testing +├─ packages/ Installed package folders +├─ storage/ Package-local runtime storage +├─ assets/ Source assets, including curated Lucide icons +└─ generated/ Generated firmware-facing assets +``` + +## Important tools + +```text +tools/create_package_template.py +tools/create_hivestore_repo.py +tools/import_hivestore_repo.py +tools/convert_icons_for_lvgl.py +tools/export_themes_for_lvgl.py +tools/validate_project.py +tools/clean_project.py +``` + +## Runtime entry point + +```text +run_beeos.py +``` + +Run it with: + +```powershell +py run_beeos.py +``` diff --git a/docs/history/PHASE3_NOTES.md b/docs/history/PHASE3_NOTES.md new file mode 100644 index 0000000..85336e0 --- /dev/null +++ b/docs/history/PHASE3_NOTES.md @@ -0,0 +1,54 @@ +# BeeOS Phase 3 Notes + +## Goal + +Phase 3 moves BeeOS from "fake install buttons" toward a real package runtime model. + +## New architecture + +```text +beeos/ +├─ packages/ installed package folders +├─ sideload/ local package import area +├─ data/ +│ ├─ hivestore_index.json +│ ├─ installed_packages.json +│ └─ settings.json +├─ core/ +│ ├─ package_manifest.py +│ ├─ package_manager.py +│ ├─ permissions.py +│ └─ ... +└─ ui/ + └─ simulator.py +``` + +## Official HiveStore rule + +HiveStore only shows curated listings. Sideloading is separate and developer-facing. + +## Package manifest shape + +```json +{ + "id": "beeos.app.example", + "name": "Example App", + "type": "app", + "version": "0.1.0", + "author": "BeeOS Community", + "description": "Example package.", + "entry": "app.py", + "permissions": ["time", "battery"] +} +``` + +## Next phase + +Phase 4 should likely focus on the BeeOS app runtime API: + +- `beeos_api.display` +- `beeos_api.storage` +- `beeos_api.notifications` +- `beeos_api.permissions` +- simulated package execution sandbox +- app lifecycle methods: `on_open`, `on_draw`, `on_touch`, `on_close` diff --git a/docs/history/PHASE4_NOTES.md b/docs/history/PHASE4_NOTES.md new file mode 100644 index 0000000..6146e1d --- /dev/null +++ b/docs/history/PHASE4_NOTES.md @@ -0,0 +1,55 @@ +# BeeOS Phase 4 Notes + +## Completed in this phase + +Phase 4 adds the first BeeOS Runtime API. + +New core file: + +```text +beeos/core/runtime_api.py +``` + +## New runtime concepts + +- `BeeRuntime` +- `BeeRuntimeContext` +- `BeeDisplayAPI` +- `BeeStorageAPI` +- `RuntimeResult` + +## Runtime API currently supports + +- app lifecycle simulation +- `BeeApp(ctx).on_open()` +- `BeeApp(ctx).on_draw(display)` +- `main(ctx)` fallback +- script execution through `main(ctx)` or `run(ctx)` +- display command capture +- notifications through `ctx.notify(title, body)` +- package-local JSON storage +- permission checks through `ctx.has_permission(name)` +- simple system APIs: + - battery percent + - uptime + - RAM usage + - PSRAM usage + - storage usage + - CPU usage + +## Not real sandboxing yet + +This is a simulator runtime. It is not a security sandbox. + +Actual watch firmware will need much stricter execution boundaries, especially for filesystem access, networking, Bluetooth, sensors, background services, plugin hooks, and permissions. + +## Next possible phase + +Phase 5 should probably add: + +- app lifecycle sessions +- touch event delivery to apps +- package settings pages +- watch face runtime +- plugin hook registry +- basic permission approval screens diff --git a/docs/history/PHASE5_NOTES.md b/docs/history/PHASE5_NOTES.md new file mode 100644 index 0000000..198373c --- /dev/null +++ b/docs/history/PHASE5_NOTES.md @@ -0,0 +1,67 @@ +# BeeOS Phase 5 Notes + +## Completed in this phase + +Phase 5 adds: + +- app runtime sessions +- simulated touch delivery +- `on_touch(event)` support +- `on_close()` support +- permission approval prompts +- permission approval persistence +- plugin hook registry placeholder +- built-in watch face registry + +## New files + +```text +beeos/core/permission_manager.py +beeos/core/plugin_manager.py +beeos/core/watchfaces.py +beeos/data/permission_approvals.json +``` + +## Runtime lifecycle now supports + +```python +class BeeApp: + def __init__(self, ctx): ... + def on_open(self): ... + def on_draw(self, display): ... + def on_touch(self, event): ... + def on_close(self): ... +``` + +## Runtime touch event format + +```python +{ + "type": "tap", + "x": 205, + "y": 260 +} +``` + +## Permission behavior + +HiveStore and sideload installs now show a permission approval screen before installation. + +Approved permissions are saved to: + +```text +beeos/data/permission_approvals.json +``` + +This is not real sandboxing yet. It is the first user-facing permission model. + +## Next possible phase + +Phase 6 should probably add: + +- real per-permission API enforcement +- background service/session model +- plugin hook execution +- notification action buttons +- on-watch package update simulation +- app settings pages diff --git a/docs/history/PHASE6_NOTES.md b/docs/history/PHASE6_NOTES.md new file mode 100644 index 0000000..ba259bc --- /dev/null +++ b/docs/history/PHASE6_NOTES.md @@ -0,0 +1,68 @@ +# BeeOS Phase 6 Notes + +## Completed in this phase + +Phase 6 integrates the uploaded Lucide icon asset pack into BeeOS. + +New files: + +```text +beeos/assets/icons/lucide/ +beeos/assets/icons/lucide/manifest.json +beeos/core/icon_manager.py +``` + +## Why curated icons? + +The uploaded Lucide pack contains more than 1,700 SVG icons. BeeOS should not ship the entire set on-watch. + +Phase 6 extracts a curated watch-sized subset for: + +- Clock +- Health +- HiveStore +- Settings +- Scripts +- Resource Monitor +- Developer Tools +- GPS +- Battery +- Notifications +- About +- Bluetooth +- Display +- Watch Faces +- Themes +- Plugins +- Permissions +- Runtime +- Install/remove actions +- HiveStore package types + +## Simulator limitation + +Tkinter does not natively render full SVG path data. The simulator now has a lightweight asset-aware icon renderer and glyph fallbacks. + +For real BeeOS/LVGL, the SVG files should be converted to a format LVGL can render efficiently. + +## Next possible phase + +Phase 7 should probably add an asset conversion tool: + +```text +tools/convert_icons_for_lvgl.py +``` + +Possible outputs: + +- PNG previews +- monochrome PBM/bitmap icons +- LVGL C image descriptors +- BeeOS compact JSON draw commands + + +## Icon-render fix + +The original Phase 6 build included SVG assets, but the simulator still displayed fallback glyphs because Tkinter cannot draw Lucide path-based SVGs directly. + +This fixed build adds pre-rendered PNGs and uses them for app icons. diff --git a/docs/history/PHASE7_NOTES.md b/docs/history/PHASE7_NOTES.md new file mode 100644 index 0000000..9f4ed9f --- /dev/null +++ b/docs/history/PHASE7_NOTES.md @@ -0,0 +1,43 @@ +# BeeOS Phase 7 Notes + +## Completed in this phase + +Phase 7 adds the first BeeOS asset conversion pipeline. + +New files: + +```text +tools/convert_icons_for_lvgl.py +beeos/core/asset_build.py +beeos/generated/icons/icon_build_index.json +beeos/generated/icons/bitmap_json/ +beeos/generated/icons/lvgl/ +beeos/generated/icons/previews/ +``` + +## Why this matters + +The desktop simulator can use PNG icons, but the PineTime Pro firmware/LVGL port will need compact generated assets. + +Phase 7 creates an intermediate format: + +- compact JSON bitmap rows +- packed 1-bit byte buffers +- C header/source files +- preview sheets + +## Not final LVGL descriptors yet + +The generated C files are firmware-friendly icon buffers, not full `lv_image_dsc_t` declarations yet. + +A future phase can wrap these buffers in LVGL-specific image descriptors once the exact LVGL version and color format are chosen. + +## Next possible phase + +Phase 8 should probably add: + +- actual LVGL image descriptor export option +- theme export tool +- watch face package runtime +- HiveStore update simulation +- app settings pages diff --git a/docs/history/PHASE8_NOTES.md b/docs/history/PHASE8_NOTES.md new file mode 100644 index 0000000..c88de1f --- /dev/null +++ b/docs/history/PHASE8_NOTES.md @@ -0,0 +1,62 @@ +# BeeOS Phase 8 Notes + +## Completed in this phase + +Phase 8 adds: + +- LVGL v8 icon descriptor export +- LVGL v9 icon descriptor export +- theme database +- theme manager +- theme C/JSON export tool +- HiveStore update detection +- updated asset build metadata + +## New files + +```text +beeos/core/theme_manager.py +beeos/core/update_manager.py +beeos/data/themes.json +tools/export_themes_for_lvgl.py +beeos/generated/icons/lvgl_v8/ +beeos/generated/icons/lvgl_v9/ +beeos/generated/themes/ +``` + +## Update detection + +HiveStore now compares installed package versions against the curated listing version. + +If the curated listing has a newer version, the UI can show: + +```text +Update available +``` + +and the package detail button changes to: + +```text +Update +``` + +## LVGL export note + +The generated LVGL files are much closer to firmware use, but still not a final board integration. + +Final integration will depend on: + +- LVGL major version +- display color format +- memory layout +- whether icons are drawn as alpha masks, monochrome bitmaps, or recolored images + +## Next possible phase + +Phase 9 should probably add: + +- app settings pages +- per-package settings schema +- runtime API enforcement by permission +- HiveStore update/install transaction log +- basic watch face package runtime diff --git a/docs/history/PHASE9_NOTES.md b/docs/history/PHASE9_NOTES.md new file mode 100644 index 0000000..eb4f765 --- /dev/null +++ b/docs/history/PHASE9_NOTES.md @@ -0,0 +1,58 @@ +# BeeOS Phase 9 Notes + +## Completed in this phase + +Phase 9 adds multi-repo HiveStore support. + +New files: + +```text +beeos/core/hivestore_sources.py +beeos/data/hivestore_sources.json +beeos/data/community_hivestore_index.json +tools/create_hivestore_repo.py +tools/import_hivestore_repo.py +``` + +## Behavior + +HiveStore now loads enabled sources from: + +```text +beeos/data/hivestore_sources.json +``` + +The official repo and a community demo repo are enabled by default. + +Package listings are merged into one HiveStore list. If two sources publish the same package id, the first enabled source wins. + +## GitHub support + +A normal GitHub repo URL can be normalized into: + +```text +https://github.com/owner/repo/raw/main/hivestore_index.json +``` + +A raw JSON URL can also be used. + +## Simulator limitation + +The simulator does not fetch remote repos every time it opens HiveStore. Remote fetching is handled by: + +```text +tools/import_hivestore_repo.py +``` + +This keeps the watch-side runtime simple and allows cached repo indexes later. + +## Next possible phase + +Phase 10 should probably add: + +- HiveStore repo update/check workflow +- source trust labels +- source signing/checksums +- package download/cache simulation +- install transaction log +- repo search/filtering diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..6acd6a0 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,8 @@ +[project] +name = "beeos-simulator" +version = "0.9.0" +description = "BeeOS smartwatch OS simulator and firmware asset pipeline" +requires-python = ">=3.10" + +[tool.beeos] +phase = "cleanup-after-phase-9" diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..f69bbfe --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,4 @@ +# BeeOS development/tooling dependencies +# Tkinter is provided by most desktop Python installations. +Pillow>=10.0 +cairosvg>=2.7 diff --git a/run_beeos.py b/run_beeos.py new file mode 100644 index 0000000..8b41227 --- /dev/null +++ b/run_beeos.py @@ -0,0 +1,7 @@ +from beeos.ui.simulator import BeeOSSimulator + +def main() -> None: + BeeOSSimulator().run() + +if __name__ == "__main__": + main() diff --git a/tools/clean_project.py b/tools/clean_project.py new file mode 100644 index 0000000..85eb2f2 --- /dev/null +++ b/tools/clean_project.py @@ -0,0 +1,30 @@ +from __future__ import annotations + +"""Clean generated Python cache files from the BeeOS project.""" + +import argparse +import shutil +from pathlib import Path + + +def main() -> None: + parser = argparse.ArgumentParser(description="Remove __pycache__ and .pyc files.") + parser.add_argument("--project-root", default=".", help="BeeOS project root") + args = parser.parse_args() + + project_root = Path(args.project_root).resolve() + removed = 0 + + for cache_dir in project_root.rglob("__pycache__"): + shutil.rmtree(cache_dir, ignore_errors=True) + removed += 1 + + for pyc in project_root.rglob("*.pyc"): + pyc.unlink(missing_ok=True) + removed += 1 + + print(f"Cleaned {removed} cache item(s).") + + +if __name__ == "__main__": + main() diff --git a/tools/convert_icons_for_lvgl.py b/tools/convert_icons_for_lvgl.py new file mode 100644 index 0000000..7fb8eec --- /dev/null +++ b/tools/convert_icons_for_lvgl.py @@ -0,0 +1,364 @@ +from __future__ import annotations + +"""BeeOS icon asset conversion tool. + +Converts the curated BeeOS/Lucide PNG icon subset into firmware-friendly formats. + +Outputs: +- JSON monochrome bitmap map +- generic packed 1-bit C buffers +- LVGL v8 image descriptors +- LVGL v9 image descriptors +- preview sheets + +The LVGL descriptor exports are intentionally generated as separate v8/v9 files +because LVGL image descriptor APIs changed between major versions. +""" + +import argparse +import json +from pathlib import Path + +from PIL import Image, ImageDraw + + +DEFAULT_SIZES = [18, 24, 34, 48] + + +def load_icon_ids(svg_manifest_path: Path) -> list[str]: + data = json.loads(svg_manifest_path.read_text(encoding="utf-8")) + return [item["id"] for item in data.get("icons", [])] + + +def image_to_mono_rows(path: Path, threshold: int = 24) -> tuple[int, int, list[str], list[int], int]: + img = Image.open(path).convert("RGBA") + width, height = img.size + stride = (width + 7) // 8 + + rows: list[str] = [] + packed: list[int] = [] + + for y in range(height): + bits = [] + byte = 0 + count = 0 + + for x in range(width): + r, g, b, a = img.getpixel((x, y)) + on = a > threshold and (r + g + b) > threshold + bits.append("1" if on else "0") + byte = (byte << 1) | (1 if on else 0) + count += 1 + + if count == 8: + packed.append(byte) + byte = 0 + count = 0 + + if count: + byte = byte << (8 - count) + packed.append(byte) + + rows.append("".join(bits)) + + return width, height, rows, packed, stride + + +def c_array_name(icon_id: str, size: int) -> str: + clean = icon_id.replace("-", "_").replace(".", "_") + return f"beeos_icon_{clean}_{size}" + + +def export_json(icon_ids: list[str], png_dir: Path, output_dir: Path, size: int) -> Path: + icons = {} + for icon_id in icon_ids: + path = png_dir / str(size) / f"{icon_id}.png" + if not path.exists(): + continue + width, height, rows, packed, stride = image_to_mono_rows(path) + icons[icon_id] = { + "width": width, + "height": height, + "stride": stride, + "rows": rows, + "packed_bytes": packed, + } + + output_dir.mkdir(parents=True, exist_ok=True) + out = output_dir / f"beeos_icons_{size}.json" + out.write_text(json.dumps({"size": size, "icons": icons}, indent=2), encoding="utf-8") + return out + + +def collect_icon_data(icon_ids: list[str], png_dir: Path, size: int) -> list[dict]: + rows = [] + for icon_id in icon_ids: + path = png_dir / str(size) / f"{icon_id}.png" + if not path.exists(): + continue + width, height, _rows, packed, stride = image_to_mono_rows(path) + name = c_array_name(icon_id, size) + rows.append( + { + "id": icon_id, + "name": name, + "width": width, + "height": height, + "stride": stride, + "data": packed, + } + ) + return rows + + +def export_generic_c(icon_rows: list[dict], output_dir: Path, size: int) -> tuple[Path, Path]: + output_dir.mkdir(parents=True, exist_ok=True) + + header = output_dir / f"beeos_icons_{size}.h" + source = output_dir / f"beeos_icons_{size}.c" + + header_lines = [ + "/* Auto-generated BeeOS icon declarations. */", + "#pragma once", + "", + "#include ", + "", + "typedef struct BeeOSIconAsset {", + " const char *name;", + " uint16_t width;", + " uint16_t height;", + " uint16_t stride;", + " const uint8_t *data;", + " uint32_t data_len;", + "} BeeOSIconAsset;", + "", + ] + + source_lines = [ + "/* Auto-generated BeeOS 1-bit icon data. */", + "", + f'#include "beeos_icons_{size}.h"', + "", + ] + + for row in icon_rows: + header_lines.append(f"extern const uint8_t {row['name']}_data[{len(row['data'])}];") + source_lines.append(f"const uint8_t {row['name']}_data[{len(row['data'])}] = {{") + for i in range(0, len(row["data"]), 12): + chunk = row["data"][i : i + 12] + source_lines.append(" " + ", ".join(f"0x{b:02x}" for b in chunk) + ",") + source_lines.append("};") + source_lines.append("") + + header_lines.extend( + [ + "", + f"extern const BeeOSIconAsset beeos_icons_{size}[];", + f"extern const uint32_t beeos_icons_{size}_count;", + "", + ] + ) + + source_lines.append(f"const BeeOSIconAsset beeos_icons_{size}[] = {{") + for row in icon_rows: + source_lines.append( + f' {{"{row["id"]}", {row["width"]}, {row["height"]}, {row["stride"]}, {row["name"]}_data, {len(row["data"])}}},' + ) + source_lines.append("};") + source_lines.append("") + source_lines.append(f"const uint32_t beeos_icons_{size}_count = {len(icon_rows)};") + source_lines.append("") + + header.write_text("\\n".join(header_lines), encoding="utf-8") + source.write_text("\\n".join(source_lines), encoding="utf-8") + return header, source + + +def export_lvgl_v8(icon_rows: list[dict], output_dir: Path, size: int) -> tuple[Path, Path]: + output_dir.mkdir(parents=True, exist_ok=True) + + header = output_dir / f"beeos_icons_{size}_lvgl_v8.h" + source = output_dir / f"beeos_icons_{size}_lvgl_v8.c" + + header_lines = [ + "/* Auto-generated BeeOS LVGL v8 icon descriptors. */", + "#pragma once", + "", + "#include ", + "", + ] + + source_lines = [ + "/* Auto-generated BeeOS LVGL v8 icon descriptors.", + " Uses LV_IMG_CF_ALPHA_1BIT for monochrome/alpha icon masks.", + " Style code should recolor these with image recolor/opacity if needed. */", + "", + f'#include "beeos_icons_{size}_lvgl_v8.h"', + "", + ] + + for row in icon_rows: + dsc_name = f"{row['name']}_dsc" + data_name = f"{row['name']}_data" + header_lines.append(f"LV_IMG_DECLARE({dsc_name});") + + source_lines.append(f"static const uint8_t {data_name}[] = {{") + for i in range(0, len(row["data"]), 12): + chunk = row["data"][i : i + 12] + source_lines.append(" " + ", ".join(f"0x{b:02x}" for b in chunk) + ",") + source_lines.append("};") + source_lines.append("") + source_lines.append(f"const lv_img_dsc_t {dsc_name} = {{") + source_lines.append(" .header.always_zero = 0,") + source_lines.append(" .header.reserved = 0,") + source_lines.append(" .header.cf = LV_IMG_CF_ALPHA_1BIT,") + source_lines.append(f" .header.w = {row['width']},") + source_lines.append(f" .header.h = {row['height']},") + source_lines.append(f" .data_size = {len(row['data'])},") + source_lines.append(f" .data = {data_name},") + source_lines.append("};") + source_lines.append("") + + header.write_text("\\n".join(header_lines), encoding="utf-8") + source.write_text("\\n".join(source_lines), encoding="utf-8") + return header, source + + +def export_lvgl_v9(icon_rows: list[dict], output_dir: Path, size: int) -> tuple[Path, Path]: + output_dir.mkdir(parents=True, exist_ok=True) + + header = output_dir / f"beeos_icons_{size}_lvgl_v9.h" + source = output_dir / f"beeos_icons_{size}_lvgl_v9.c" + + header_lines = [ + "/* Auto-generated BeeOS LVGL v9 icon descriptors. */", + "#pragma once", + "", + "#include ", + "", + ] + + source_lines = [ + "/* Auto-generated BeeOS LVGL v9 icon descriptors.", + " Uses LV_COLOR_FORMAT_I1 for monochrome/alpha icon masks.", + " Some LVGL v9 ports may need color-format adjustments depending on display setup. */", + "", + f'#include "beeos_icons_{size}_lvgl_v9.h"', + "", + ] + + for row in icon_rows: + dsc_name = f"{row['name']}_dsc" + data_name = f"{row['name']}_data" + header_lines.append(f"extern const lv_image_dsc_t {dsc_name};") + + source_lines.append(f"static const uint8_t {data_name}[] = {{") + for i in range(0, len(row["data"]), 12): + chunk = row["data"][i : i + 12] + source_lines.append(" " + ", ".join(f"0x{b:02x}" for b in chunk) + ",") + source_lines.append("};") + source_lines.append("") + source_lines.append(f"const lv_image_dsc_t {dsc_name} = {{") + source_lines.append(" .header.magic = LV_IMAGE_HEADER_MAGIC,") + source_lines.append(" .header.cf = LV_COLOR_FORMAT_I1,") + source_lines.append(" .header.flags = 0,") + source_lines.append(f" .header.w = {row['width']},") + source_lines.append(f" .header.h = {row['height']},") + source_lines.append(f" .header.stride = {row['stride']},") + source_lines.append(f" .data_size = {len(row['data'])},") + source_lines.append(f" .data = {data_name},") + source_lines.append("};") + source_lines.append("") + + header.write_text("\\n".join(header_lines), encoding="utf-8") + source.write_text("\\n".join(source_lines), encoding="utf-8") + return header, source + + +def export_preview(icon_ids: list[str], png_dir: Path, output_dir: Path, size: int) -> Path: + cols = 5 + cell_w = 96 + cell_h = 84 + rows = (len(icon_ids) + cols - 1) // cols + sheet = Image.new("RGBA", (cols * cell_w, max(1, rows) * cell_h), (0, 0, 0, 255)) + draw = ImageDraw.Draw(sheet) + + for idx, icon_id in enumerate(icon_ids): + x = (idx % cols) * cell_w + y = (idx // cols) * cell_h + draw.rounded_rectangle((x + 18, y + 6, x + 78, y + 66), radius=18, fill=(20, 22, 28, 255), outline=(255, 204, 0, 255)) + path = png_dir / str(size) / f"{icon_id}.png" + if path.exists(): + icon = Image.open(path).convert("RGBA") + sheet.alpha_composite(icon, (x + (cell_w - icon.width) // 2, y + 18)) + draw.text((x + 6, y + 68), icon_id[:14], fill=(220, 220, 220, 255)) + + output_dir.mkdir(parents=True, exist_ok=True) + out = output_dir / f"beeos_icons_{size}_preview.png" + sheet.save(out) + return out + + +def convert(project_root: Path, sizes: list[int]) -> dict: + svg_manifest = project_root / "beeos" / "assets" / "icons" / "lucide" / "manifest.json" + png_dir = project_root / "beeos" / "assets" / "icons" / "lucide_png" + + generated_root = project_root / "beeos" / "generated" / "icons" + json_dir = generated_root / "bitmap_json" + generic_dir = generated_root / "lvgl" + v8_dir = generated_root / "lvgl_v8" + v9_dir = generated_root / "lvgl_v9" + preview_dir = generated_root / "previews" + + icon_ids = load_icon_ids(svg_manifest) + + result = { + "icon_count": len(icon_ids), + "sizes": {}, + } + + for size in sizes: + icon_rows = collect_icon_data(icon_ids, png_dir, size) + json_out = export_json(icon_ids, png_dir, json_dir, size) + generic_h, generic_c = export_generic_c(icon_rows, generic_dir, size) + v8_h, v8_c = export_lvgl_v8(icon_rows, v8_dir, size) + v9_h, v9_c = export_lvgl_v9(icon_rows, v9_dir, size) + preview = export_preview(icon_ids, png_dir, preview_dir, size) + + result["sizes"][str(size)] = { + "json": str(json_out.relative_to(project_root)), + "generic_header": str(generic_h.relative_to(project_root)), + "generic_source": str(generic_c.relative_to(project_root)), + "lvgl_v8_header": str(v8_h.relative_to(project_root)), + "lvgl_v8_source": str(v8_c.relative_to(project_root)), + "lvgl_v9_header": str(v9_h.relative_to(project_root)), + "lvgl_v9_source": str(v9_c.relative_to(project_root)), + "preview": str(preview.relative_to(project_root)), + } + + index_out = generated_root / "icon_build_index.json" + index_out.parent.mkdir(parents=True, exist_ok=True) + index_out.write_text(json.dumps(result, indent=2), encoding="utf-8") + return result + + +def main() -> None: + parser = argparse.ArgumentParser(description="Convert BeeOS curated icons into firmware-friendly assets.") + parser.add_argument("--project-root", default=".", help="BeeOS project root") + parser.add_argument("--sizes", default="24,34", help="Comma-separated icon sizes to export") + args = parser.parse_args() + + root = Path(args.project_root).resolve() + sizes = [int(part.strip()) for part in args.sizes.split(",") if part.strip()] + result = convert(root, sizes) + + print("BeeOS icon conversion complete.") + print(f"Icons: {result['icon_count']}") + for size, outputs in result["sizes"].items(): + print(f"Size {size}:") + for key, path in outputs.items(): + print(f" {key}: {path}") + + +if __name__ == "__main__": + main() diff --git a/tools/create_hivestore_repo.py b/tools/create_hivestore_repo.py new file mode 100644 index 0000000..446a460 --- /dev/null +++ b/tools/create_hivestore_repo.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +"""Create a starter HiveStore repo index. + +Usage: + py tools/create_hivestore_repo.py ./my-hivestore "My HiveStore Repo" + +Then commit the generated hivestore_index.json to GitHub. +""" + +import json +import sys +from pathlib import Path + + +def create_repo(path: Path, name: str) -> None: + path.mkdir(parents=True, exist_ok=True) + index = { + "schema": 1, + "source_name": name, + "source_url": "https://github.com/example/my-hivestore", + "packages": [ + { + "id": "example.app.hello", + "name": "Hello Bee", + "type": "app", + "category": "Apps", + "version": "0.1.0", + "author": "Example Developer", + "description": "A simple starter BeeOS app listing.", + "repository": "https://github.com/example/hello-bee", + "entry": "app.py", + "permissions": ["display", "storage"], + "rating": "0.0", + "color": "#ffcc00", + "icon": "▣", + "curated": True + } + ] + } + (path / "hivestore_index.json").write_text(json.dumps(index, indent=2), encoding="utf-8") + (path / "README.md").write_text( + f"# {name}\\n\\nThis is a BeeOS HiveStore repo.\\n\\nThe package index lives at `hivestore_index.json`.\\n", + encoding="utf-8", + ) + print(f"Created HiveStore repo starter at: {path}") + + +def main() -> None: + if len(sys.argv) < 3: + print('Usage: py tools/create_hivestore_repo.py "Repo Name"') + raise SystemExit(1) + create_repo(Path(sys.argv[1]), " ".join(sys.argv[2:])) + + +if __name__ == "__main__": + main() diff --git a/tools/create_package_template.py b/tools/create_package_template.py new file mode 100644 index 0000000..20e1ca1 --- /dev/null +++ b/tools/create_package_template.py @@ -0,0 +1,92 @@ +from __future__ import annotations + +import json +import sys +from pathlib import Path + + +VALID_TYPES = {"app", "script", "script_pack", "watchface", "theme", "plugin"} + + +def create_template(package_type: str, package_id: str, name: str) -> None: + if package_type not in VALID_TYPES: + raise SystemExit(f"Invalid package type. Use one of: {', '.join(sorted(VALID_TYPES))}") + + root = Path("beeos") / "sideload" / package_id + root.mkdir(parents=True, exist_ok=True) + + entry = "app.py" + if package_type == "theme": + entry = "theme.json" + elif package_type == "watchface": + entry = "face.py" + elif package_type in {"script", "script_pack"}: + entry = "script.py" + elif package_type == "plugin": + entry = "plugin.py" + + manifest = { + "id": package_id, + "name": name, + "type": package_type, + "version": "0.1.0", + "author": "Local Developer", + "description": f"A local BeeOS {package_type} package.", + "entry": entry, + "permissions": ["display", "storage"], + "repository": "", + "category": package_type, + "color": "#ffcc00", + "icon": "⬢", + "curated": False, + } + (root / "manifest.json").write_text(json.dumps(manifest, indent=2), encoding="utf-8") + + if package_type == "app": + app_code = f"""class BeeApp: + def __init__(self, ctx): + self.ctx = ctx + + def on_open(self): + launches = self.ctx.storage.get("launches", 0) + 1 + self.ctx.storage.set("launches", launches) + + def on_draw(self, display): + display.title({name!r}) + display.card("BeeOS App", "Created from the Phase 5 template.") + display.list_item("Launches", str(self.ctx.storage.get("launches", 0))) + display.list_item("Touches", str(self.ctx.storage.get("touches", 0))) + display.progress("Battery", self.ctx.battery_percent()) + + def on_touch(self, event): + touches = self.ctx.storage.get("touches", 0) + 1 + self.ctx.storage.set("touches", touches) + + def on_close(self): + self.ctx.notify({name!r}, "Session closed") +""" + (root / entry).write_text(app_code, encoding="utf-8") + elif package_type == "theme": + (root / entry).write_text(json.dumps({"accent": "#ffcc00", "background": "#000000"}, indent=2), encoding="utf-8") + else: + script_code = f"""def main(ctx): + ctx.display.title({name!r}) + ctx.display.text("Hello from a BeeOS {package_type} package.") + ctx.notify({name!r}, "Package ran through BeeOS Runtime.") +""" + (root / entry).write_text(script_code, encoding="utf-8") + + print(f"Created BeeOS package template: {root}") + + +def main() -> None: + if len(sys.argv) < 4: + print("Usage: py tools/create_package_template.py ") + print("Example: py tools/create_package_template.py app local.test.app \"Test App\"") + raise SystemExit(1) + + create_template(sys.argv[1], sys.argv[2], " ".join(sys.argv[3:])) + + +if __name__ == "__main__": + main() diff --git a/tools/export_themes_for_lvgl.py b/tools/export_themes_for_lvgl.py new file mode 100644 index 0000000..804dbeb --- /dev/null +++ b/tools/export_themes_for_lvgl.py @@ -0,0 +1,109 @@ +from __future__ import annotations + +"""Export BeeOS themes into firmware-friendly C and JSON assets.""" + +import argparse +import json +from pathlib import Path + + +def hex_to_int(value: str) -> int: + value = value.strip().lstrip("#") + return int(value, 16) + + +def load_themes(project_root: Path) -> list[dict]: + path = project_root / "beeos" / "data" / "themes.json" + data = json.loads(path.read_text(encoding="utf-8")) + return list(data.get("themes", [])) + + +def export_themes(project_root: Path) -> dict: + themes = load_themes(project_root) + out_dir = project_root / "beeos" / "generated" / "themes" + out_dir.mkdir(parents=True, exist_ok=True) + + json_out = out_dir / "beeos_themes.json" + json_out.write_text(json.dumps({"themes": themes}, indent=2), encoding="utf-8") + + header = out_dir / "beeos_themes.h" + source = out_dir / "beeos_themes.c" + + header_lines = [ + "/* Auto-generated BeeOS theme declarations. */", + "#pragma once", + "", + "#include ", + "", + "typedef struct BeeOSTheme {", + " const char *id;", + " const char *name;", + " uint32_t accent;", + " uint32_t background;", + " uint32_t card;", + " uint32_t text;", + " uint32_t muted;", + "} BeeOSTheme;", + "", + "extern const BeeOSTheme beeos_themes[];", + "extern const uint32_t beeos_themes_count;", + "", + ] + + source_lines = [ + "/* Auto-generated BeeOS theme table. */", + "", + '#include "beeos_themes.h"', + "", + "const BeeOSTheme beeos_themes[] = {", + ] + + for theme in themes: + source_lines.append( + ' {"%s", "%s", 0x%06x, 0x%06x, 0x%06x, 0x%06x, 0x%06x},' + % ( + theme["id"], + theme["name"], + hex_to_int(theme["accent"]), + hex_to_int(theme["background"]), + hex_to_int(theme["card"]), + hex_to_int(theme["text"]), + hex_to_int(theme["muted"]), + ) + ) + + source_lines.append("};") + source_lines.append("") + source_lines.append(f"const uint32_t beeos_themes_count = {len(themes)};") + source_lines.append("") + + header.write_text("\\n".join(header_lines), encoding="utf-8") + source.write_text("\\n".join(source_lines), encoding="utf-8") + + index = { + "theme_count": len(themes), + "outputs": { + "json": str(json_out.relative_to(project_root)), + "header": str(header.relative_to(project_root)), + "source": str(source.relative_to(project_root)), + }, + } + index_out = out_dir / "theme_build_index.json" + index_out.write_text(json.dumps(index, indent=2), encoding="utf-8") + return index + + +def main() -> None: + parser = argparse.ArgumentParser(description="Export BeeOS themes into firmware-friendly assets.") + parser.add_argument("--project-root", default=".", help="BeeOS project root") + args = parser.parse_args() + + result = export_themes(Path(args.project_root).resolve()) + print("BeeOS theme export complete.") + print(f"Themes: {result['theme_count']}") + for key, value in result["outputs"].items(): + print(f" {key}: {value}") + + +if __name__ == "__main__": + main() diff --git a/tools/import_hivestore_repo.py b/tools/import_hivestore_repo.py new file mode 100644 index 0000000..eb56027 --- /dev/null +++ b/tools/import_hivestore_repo.py @@ -0,0 +1,73 @@ +from __future__ import annotations + +"""Import a HiveStore repo into BeeOS. + +Supports: +- local JSON file path +- raw GitHub JSON URL +- normal GitHub repo URL, normalized to /raw/main/hivestore_index.json +""" + +import argparse +import json +import shutil +import sys +import urllib.request +from pathlib import Path + +PROJECT_ROOT = Path(__file__).resolve().parents[1] +if str(PROJECT_ROOT) not in sys.path: + sys.path.insert(0, str(PROJECT_ROOT)) + +from beeos.core.hivestore_sources import HiveStoreSourceManager, normalize_github_url, source_id_from_url + + +def fetch_or_copy_index(url_or_path: str, cache_path: Path) -> dict: + cache_path.parent.mkdir(parents=True, exist_ok=True) + + local = Path(url_or_path) + if local.exists(): + shutil.copyfile(local, cache_path) + return json.loads(cache_path.read_text(encoding="utf-8")) + + normalized = normalize_github_url(url_or_path) + with urllib.request.urlopen(normalized, timeout=20) as response: + data = response.read() + cache_path.write_bytes(data) + return json.loads(data.decode("utf-8")) + + +def main() -> None: + parser = argparse.ArgumentParser(description="Import a BeeOS HiveStore repo source.") + parser.add_argument("source", help="Local hivestore_index.json, raw URL, or GitHub repo URL") + parser.add_argument("--project-root", default=".", help="BeeOS project root") + parser.add_argument("--name", default="", help="Display name override") + parser.add_argument("--no-fetch", action="store_true", help="Add source record without fetching/cache validation") + args = parser.parse_args() + + project_root = Path(args.project_root).resolve() + data_dir = project_root / "beeos" / "data" + manager = HiveStoreSourceManager(data_dir) + + normalized = normalize_github_url(args.source) + source_id = source_id_from_url(normalized) + cache_path = data_dir / "hivestore_cache" / f"{source_id}.json" + + name = args.name or "Imported HiveStore Repo" + + if not args.no_fetch: + data = fetch_or_copy_index(args.source, cache_path) + name = args.name or data.get("source_name", name) + index = str(cache_path.relative_to(data_dir)) + else: + index = normalized + + source = manager.add_source(name=name, url=args.source, index=index, enabled=True) + print("Imported HiveStore source:") + print(f" id: {source.source_id}") + print(f" name: {source.name}") + print(f" index: {source.index}") + + +if __name__ == "__main__": + main() diff --git a/tools/validate_project.py b/tools/validate_project.py new file mode 100644 index 0000000..12875b4 --- /dev/null +++ b/tools/validate_project.py @@ -0,0 +1,104 @@ +from __future__ import annotations + +"""Validate the BeeOS project tree. + +Checks: +- Python syntax +- JSON syntax +- HiveStore source loading +- package manifest loading +- generated asset indexes +""" + +import argparse +import json +import py_compile +import sys +from pathlib import Path + + +def fail(message: str) -> None: + raise RuntimeError(message) + + +def check_python(project_root: Path) -> int: + count = 0 + for py_file in project_root.rglob("*.py"): + if "__pycache__" in py_file.parts: + continue + py_compile.compile(str(py_file), doraise=True) + count += 1 + return count + + +def check_json(project_root: Path) -> int: + count = 0 + for json_file in project_root.rglob("*.json"): + json.loads(json_file.read_text(encoding="utf-8")) + count += 1 + return count + + +def check_hivestore(project_root: Path) -> tuple[int, int]: + if str(project_root) not in sys.path: + sys.path.insert(0, str(project_root)) + + from beeos.core.hivestore import HiveStoreIndex + + index = HiveStoreIndex(project_root / "beeos" / "data" / "hivestore_index.json") + index.load() + + if not index.source_manager.sources: + fail("No HiveStore sources configured.") + + if not index.listings: + fail("HiveStore loaded zero package listings.") + + return len(index.source_manager.sources), len(index.listings) + + +def check_generated_assets(project_root: Path) -> dict: + icon_index = project_root / "beeos" / "generated" / "icons" / "icon_build_index.json" + theme_index = project_root / "beeos" / "generated" / "themes" / "theme_build_index.json" + + result = { + "icon_index": icon_index.exists(), + "theme_index": theme_index.exists(), + "icon_count": 0, + "theme_count": 0, + } + + if icon_index.exists(): + data = json.loads(icon_index.read_text(encoding="utf-8")) + result["icon_count"] = int(data.get("icon_count", 0)) + + if theme_index.exists(): + data = json.loads(theme_index.read_text(encoding="utf-8")) + result["theme_count"] = int(data.get("theme_count", 0)) + + return result + + +def main() -> None: + parser = argparse.ArgumentParser(description="Validate the BeeOS project.") + parser.add_argument("--project-root", default=".", help="BeeOS project root") + args = parser.parse_args() + + project_root = Path(args.project_root).resolve() + + python_count = check_python(project_root) + json_count = check_json(project_root) + source_count, listing_count = check_hivestore(project_root) + assets = check_generated_assets(project_root) + + print("BeeOS validation passed.") + print(f"Python files: {python_count}") + print(f"JSON files: {json_count}") + print(f"HiveStore sources: {source_count}") + print(f"HiveStore listings: {listing_count}") + print(f"Generated icons: {assets['icon_count']}") + print(f"Generated themes: {assets['theme_count']}") + + +if __name__ == "__main__": + main()