commit 7d4d683a8fac214a8270e8d6f1fbe043a23abffd Author: RayPals Date: Tue Aug 25 20:29:05 2026 +0000 Initial BeeOS simulator and asset pipeline 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 0000000..6d9990a Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/about.png differ diff --git a/beeos/assets/icons/lucide_png/18/apps.png b/beeos/assets/icons/lucide_png/18/apps.png new file mode 100644 index 0000000..d39e4cc Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/apps.png differ 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 0000000..ea0e3c9 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/back.png differ 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 0000000..e13f156 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/battery.png differ 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 0000000..a8bebc6 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/bluetooth.png differ 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 0000000..135b9e7 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/clock.png differ 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 0000000..525ad12 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/developer-tools.png differ 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 0000000..760a44d Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/display.png differ diff --git a/beeos/assets/icons/lucide_png/18/github.png b/beeos/assets/icons/lucide_png/18/github.png new file mode 100644 index 0000000..de4f345 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/github.png differ diff --git a/beeos/assets/icons/lucide_png/18/gps.png b/beeos/assets/icons/lucide_png/18/gps.png new file mode 100644 index 0000000..5e461cb Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/gps.png differ 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 0000000..5b3ded2 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/health.png differ 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 0000000..3b72282 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/hivestore.png differ 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 0000000..6a71070 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/home.png differ diff --git a/beeos/assets/icons/lucide_png/18/install.png b/beeos/assets/icons/lucide_png/18/install.png new file mode 100644 index 0000000..f6e5ebe Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/install.png differ diff --git a/beeos/assets/icons/lucide_png/18/notifications.png b/beeos/assets/icons/lucide_png/18/notifications.png new file mode 100644 index 0000000..4806dc6 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/notifications.png differ 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 0000000..007f91c Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/package.png differ diff --git a/beeos/assets/icons/lucide_png/18/permissions.png b/beeos/assets/icons/lucide_png/18/permissions.png new file mode 100644 index 0000000..d06e441 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/permissions.png differ 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 0000000..fbafa61 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/plugin.png differ diff --git a/beeos/assets/icons/lucide_png/18/plugins.png b/beeos/assets/icons/lucide_png/18/plugins.png new file mode 100644 index 0000000..fbafa61 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/plugins.png differ diff --git a/beeos/assets/icons/lucide_png/18/quick-tools.png b/beeos/assets/icons/lucide_png/18/quick-tools.png new file mode 100644 index 0000000..4d5b9ae Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/quick-tools.png differ diff --git a/beeos/assets/icons/lucide_png/18/remove.png b/beeos/assets/icons/lucide_png/18/remove.png new file mode 100644 index 0000000..7d2fd0a Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/remove.png differ diff --git a/beeos/assets/icons/lucide_png/18/resource-monitor.png b/beeos/assets/icons/lucide_png/18/resource-monitor.png new file mode 100644 index 0000000..7d1fc8e Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/resource-monitor.png differ diff --git a/beeos/assets/icons/lucide_png/18/retro-clock.png b/beeos/assets/icons/lucide_png/18/retro-clock.png new file mode 100644 index 0000000..dab6a81 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/retro-clock.png differ 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 0000000..fcd284e Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/runtime.png differ diff --git a/beeos/assets/icons/lucide_png/18/script-run.png b/beeos/assets/icons/lucide_png/18/script-run.png new file mode 100644 index 0000000..e58fe88 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/script-run.png differ diff --git a/beeos/assets/icons/lucide_png/18/scripts.png b/beeos/assets/icons/lucide_png/18/scripts.png new file mode 100644 index 0000000..1e7e642 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/scripts.png differ 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 0000000..c4ca75c Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/search.png differ diff --git a/beeos/assets/icons/lucide_png/18/settings.png b/beeos/assets/icons/lucide_png/18/settings.png new file mode 100644 index 0000000..db95166 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/settings.png differ 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 0000000..3b72282 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/store.png differ 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 0000000..2479dc1 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/theme.png differ 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 0000000..6ca6412 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/themes.png differ 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 0000000..11c6ada Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/touch.png differ diff --git a/beeos/assets/icons/lucide_png/18/vibration.png b/beeos/assets/icons/lucide_png/18/vibration.png new file mode 100644 index 0000000..8cd4f3b Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/vibration.png differ 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 0000000..fa69a8e Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/watch-face.png differ diff --git a/beeos/assets/icons/lucide_png/18/weather.png b/beeos/assets/icons/lucide_png/18/weather.png new file mode 100644 index 0000000..76cd7a5 Binary files /dev/null and b/beeos/assets/icons/lucide_png/18/weather.png differ 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 0000000..f5237b5 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/about.png differ 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 0000000..5cf78ec Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/apps.png differ 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 0000000..554d07d Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/back.png differ 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 0000000..30138fb Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/battery.png differ 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 0000000..8c0df96 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/bluetooth.png differ diff --git a/beeos/assets/icons/lucide_png/24/clock.png b/beeos/assets/icons/lucide_png/24/clock.png new file mode 100644 index 0000000..3946283 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/clock.png differ diff --git a/beeos/assets/icons/lucide_png/24/developer-tools.png b/beeos/assets/icons/lucide_png/24/developer-tools.png new file mode 100644 index 0000000..f604a0e Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/developer-tools.png differ diff --git a/beeos/assets/icons/lucide_png/24/display.png b/beeos/assets/icons/lucide_png/24/display.png new file mode 100644 index 0000000..3b30669 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/display.png differ diff --git a/beeos/assets/icons/lucide_png/24/github.png b/beeos/assets/icons/lucide_png/24/github.png new file mode 100644 index 0000000..857f35b Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/github.png differ 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 0000000..1036aee Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/gps.png differ 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 0000000..c72e630 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/health.png differ 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 0000000..d2bbfcf Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/hivestore.png differ 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 0000000..012edcf Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/home.png differ 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 0000000..c614c23 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/install.png differ 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 0000000..ebaf131 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/notifications.png differ diff --git a/beeos/assets/icons/lucide_png/24/package.png b/beeos/assets/icons/lucide_png/24/package.png new file mode 100644 index 0000000..135e499 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/package.png differ 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 0000000..91aef51 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/permissions.png differ 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 0000000..ef56d54 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/plugin.png differ 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 0000000..ef56d54 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/plugins.png differ 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 0000000..b265bd2 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/quick-tools.png differ diff --git a/beeos/assets/icons/lucide_png/24/remove.png b/beeos/assets/icons/lucide_png/24/remove.png new file mode 100644 index 0000000..58c3aa9 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/remove.png differ 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 0000000..91d8425 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/resource-monitor.png differ diff --git a/beeos/assets/icons/lucide_png/24/retro-clock.png b/beeos/assets/icons/lucide_png/24/retro-clock.png new file mode 100644 index 0000000..1c87dd1 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/retro-clock.png differ diff --git a/beeos/assets/icons/lucide_png/24/runtime.png b/beeos/assets/icons/lucide_png/24/runtime.png new file mode 100644 index 0000000..32bdf10 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/runtime.png differ diff --git a/beeos/assets/icons/lucide_png/24/script-run.png b/beeos/assets/icons/lucide_png/24/script-run.png new file mode 100644 index 0000000..17a88e5 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/script-run.png differ 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 0000000..7fc2357 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/scripts.png differ diff --git a/beeos/assets/icons/lucide_png/24/search.png b/beeos/assets/icons/lucide_png/24/search.png new file mode 100644 index 0000000..a21315d Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/search.png differ diff --git a/beeos/assets/icons/lucide_png/24/settings.png b/beeos/assets/icons/lucide_png/24/settings.png new file mode 100644 index 0000000..e4981ba Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/settings.png differ diff --git a/beeos/assets/icons/lucide_png/24/store.png b/beeos/assets/icons/lucide_png/24/store.png new file mode 100644 index 0000000..d2bbfcf Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/store.png differ 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 0000000..f8be6b1 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/theme.png differ diff --git a/beeos/assets/icons/lucide_png/24/themes.png b/beeos/assets/icons/lucide_png/24/themes.png new file mode 100644 index 0000000..0d28db2 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/themes.png differ 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 0000000..3cf0154 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/touch.png differ diff --git a/beeos/assets/icons/lucide_png/24/vibration.png b/beeos/assets/icons/lucide_png/24/vibration.png new file mode 100644 index 0000000..9cacc58 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/vibration.png differ 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 0000000..48fbfea Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/watch-face.png differ diff --git a/beeos/assets/icons/lucide_png/24/weather.png b/beeos/assets/icons/lucide_png/24/weather.png new file mode 100644 index 0000000..19fe649 Binary files /dev/null and b/beeos/assets/icons/lucide_png/24/weather.png differ 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 0000000..1069002 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/about.png differ 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 0000000..9d3913b Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/apps.png differ diff --git a/beeos/assets/icons/lucide_png/34/back.png b/beeos/assets/icons/lucide_png/34/back.png new file mode 100644 index 0000000..f6697b6 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/back.png differ diff --git a/beeos/assets/icons/lucide_png/34/battery.png b/beeos/assets/icons/lucide_png/34/battery.png new file mode 100644 index 0000000..8e0a7fa Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/battery.png differ 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 0000000..518c617 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/bluetooth.png differ 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 0000000..9fa4d73 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/clock.png differ diff --git a/beeos/assets/icons/lucide_png/34/developer-tools.png b/beeos/assets/icons/lucide_png/34/developer-tools.png new file mode 100644 index 0000000..efddbba Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/developer-tools.png differ 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 0000000..a4d4578 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/display.png differ diff --git a/beeos/assets/icons/lucide_png/34/github.png b/beeos/assets/icons/lucide_png/34/github.png new file mode 100644 index 0000000..05651d6 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/github.png differ diff --git a/beeos/assets/icons/lucide_png/34/gps.png b/beeos/assets/icons/lucide_png/34/gps.png new file mode 100644 index 0000000..1ec9599 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/gps.png differ 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 0000000..a49893e Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/health.png differ 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 0000000..0abe8ab Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/hivestore.png differ 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 0000000..705bfcf Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/home.png differ 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 0000000..6b57915 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/install.png differ diff --git a/beeos/assets/icons/lucide_png/34/notifications.png b/beeos/assets/icons/lucide_png/34/notifications.png new file mode 100644 index 0000000..d7b18a6 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/notifications.png differ 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 0000000..8bca31b Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/package.png differ diff --git a/beeos/assets/icons/lucide_png/34/permissions.png b/beeos/assets/icons/lucide_png/34/permissions.png new file mode 100644 index 0000000..9796ff3 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/permissions.png differ diff --git a/beeos/assets/icons/lucide_png/34/plugin.png b/beeos/assets/icons/lucide_png/34/plugin.png new file mode 100644 index 0000000..62dc596 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/plugin.png differ 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 0000000..62dc596 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/plugins.png differ 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 0000000..90d1d0f Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/quick-tools.png differ diff --git a/beeos/assets/icons/lucide_png/34/remove.png b/beeos/assets/icons/lucide_png/34/remove.png new file mode 100644 index 0000000..b700bb4 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/remove.png differ diff --git a/beeos/assets/icons/lucide_png/34/resource-monitor.png b/beeos/assets/icons/lucide_png/34/resource-monitor.png new file mode 100644 index 0000000..f3d393f Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/resource-monitor.png differ 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 0000000..c141fd7 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/retro-clock.png differ 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 0000000..17473e1 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/runtime.png differ diff --git a/beeos/assets/icons/lucide_png/34/script-run.png b/beeos/assets/icons/lucide_png/34/script-run.png new file mode 100644 index 0000000..83615f6 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/script-run.png differ 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 0000000..aea0257 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/scripts.png differ 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 0000000..9dc4eae Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/search.png differ 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 0000000..978eb3e Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/settings.png differ diff --git a/beeos/assets/icons/lucide_png/34/store.png b/beeos/assets/icons/lucide_png/34/store.png new file mode 100644 index 0000000..0abe8ab Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/store.png differ 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 0000000..86a1486 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/theme.png differ diff --git a/beeos/assets/icons/lucide_png/34/themes.png b/beeos/assets/icons/lucide_png/34/themes.png new file mode 100644 index 0000000..4a2b226 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/themes.png differ 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 0000000..b39b360 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/touch.png differ 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 0000000..d95774f Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/vibration.png differ 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 0000000..fe7a060 Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/watch-face.png differ diff --git a/beeos/assets/icons/lucide_png/34/weather.png b/beeos/assets/icons/lucide_png/34/weather.png new file mode 100644 index 0000000..b8dadda Binary files /dev/null and b/beeos/assets/icons/lucide_png/34/weather.png differ 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 0000000..b19c911 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/about.png differ diff --git a/beeos/assets/icons/lucide_png/48/apps.png b/beeos/assets/icons/lucide_png/48/apps.png new file mode 100644 index 0000000..f93b3a0 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/apps.png differ diff --git a/beeos/assets/icons/lucide_png/48/back.png b/beeos/assets/icons/lucide_png/48/back.png new file mode 100644 index 0000000..dd53724 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/back.png differ 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 0000000..7803b35 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/battery.png differ diff --git a/beeos/assets/icons/lucide_png/48/bluetooth.png b/beeos/assets/icons/lucide_png/48/bluetooth.png new file mode 100644 index 0000000..9db14df Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/bluetooth.png differ diff --git a/beeos/assets/icons/lucide_png/48/clock.png b/beeos/assets/icons/lucide_png/48/clock.png new file mode 100644 index 0000000..9671484 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/clock.png differ 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 0000000..b3a911b Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/developer-tools.png differ diff --git a/beeos/assets/icons/lucide_png/48/display.png b/beeos/assets/icons/lucide_png/48/display.png new file mode 100644 index 0000000..9bcad38 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/display.png differ diff --git a/beeos/assets/icons/lucide_png/48/github.png b/beeos/assets/icons/lucide_png/48/github.png new file mode 100644 index 0000000..c8d6f0f Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/github.png differ 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 0000000..cc8817b Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/gps.png differ diff --git a/beeos/assets/icons/lucide_png/48/health.png b/beeos/assets/icons/lucide_png/48/health.png new file mode 100644 index 0000000..4a41d85 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/health.png differ 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 0000000..1f836ca Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/hivestore.png differ 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 0000000..cd1d4a0 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/home.png differ 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 0000000..1f0f8ee Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/install.png differ diff --git a/beeos/assets/icons/lucide_png/48/notifications.png b/beeos/assets/icons/lucide_png/48/notifications.png new file mode 100644 index 0000000..e475c06 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/notifications.png differ 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 0000000..dad0b56 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/package.png differ diff --git a/beeos/assets/icons/lucide_png/48/permissions.png b/beeos/assets/icons/lucide_png/48/permissions.png new file mode 100644 index 0000000..a95786d Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/permissions.png differ diff --git a/beeos/assets/icons/lucide_png/48/plugin.png b/beeos/assets/icons/lucide_png/48/plugin.png new file mode 100644 index 0000000..81f0670 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/plugin.png differ 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 0000000..81f0670 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/plugins.png differ 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 0000000..69fa3ec Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/quick-tools.png differ 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 0000000..48513a4 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/remove.png differ 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 0000000..d393f1a Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/resource-monitor.png differ diff --git a/beeos/assets/icons/lucide_png/48/retro-clock.png b/beeos/assets/icons/lucide_png/48/retro-clock.png new file mode 100644 index 0000000..e7de303 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/retro-clock.png differ diff --git a/beeos/assets/icons/lucide_png/48/runtime.png b/beeos/assets/icons/lucide_png/48/runtime.png new file mode 100644 index 0000000..416a32a Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/runtime.png differ 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 0000000..1367023 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/script-run.png differ 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 0000000..2c4ac8f Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/scripts.png differ diff --git a/beeos/assets/icons/lucide_png/48/search.png b/beeos/assets/icons/lucide_png/48/search.png new file mode 100644 index 0000000..0d6f2de Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/search.png differ 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 0000000..ff0616c Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/settings.png differ 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 0000000..1f836ca Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/store.png differ 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 0000000..42abe46 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/theme.png differ 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 0000000..29bece5 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/themes.png differ diff --git a/beeos/assets/icons/lucide_png/48/touch.png b/beeos/assets/icons/lucide_png/48/touch.png new file mode 100644 index 0000000..8d1b750 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/touch.png differ diff --git a/beeos/assets/icons/lucide_png/48/vibration.png b/beeos/assets/icons/lucide_png/48/vibration.png new file mode 100644 index 0000000..4587218 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/vibration.png differ 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 0000000..c46e944 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/watch-face.png differ diff --git a/beeos/assets/icons/lucide_png/48/weather.png b/beeos/assets/icons/lucide_png/48/weather.png new file mode 100644 index 0000000..1597592 Binary files /dev/null and b/beeos/assets/icons/lucide_png/48/weather.png differ diff --git a/beeos/assets/logo.jpg b/beeos/assets/logo.jpg new file mode 100644 index 0000000..0b29eff Binary files /dev/null and b/beeos/assets/logo.jpg differ 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 0000000..3b7f07c Binary files /dev/null and b/beeos/generated/icons/previews/beeos_icons_24_preview.png differ 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 0000000..ef7d8a7 Binary files /dev/null and b/beeos/generated/icons/previews/beeos_icons_34_preview.png differ 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()