From d43b7d0d3faf529eecaa1007c00a1e4f2d9903dd Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Sat, 11 Apr 2026 21:56:46 -0500 Subject: [PATCH] UI --- selfdrive/assets/icons_mici/adb_short.png | Bin 0 -> 2062 bytes .../buttons/button_circle_hover.png | Bin 7511 -> 0 bytes .../buttons/button_circle_pressed.png | Bin 0 -> 18666 bytes .../buttons/button_circle_red_hover.png | Bin 10380 -> 0 bytes .../buttons/button_circle_red_pressed.png | Bin 0 -> 32599 bytes .../icons_mici/buttons/button_rectangle.png | Bin 8210 -> 7982 bytes .../buttons/button_rectangle_disabled.png | Bin 3627 -> 4778 bytes .../buttons/button_rectangle_hover.png | Bin 7750 -> 0 bytes .../buttons/button_rectangle_pressed.png | Bin 21379 -> 56738 bytes .../buttons/toggle_dot_disabled.png | Bin 2470 -> 2220 bytes .../assets/icons_mici/exclamation_point.png | Bin 2086 -> 2289 bytes .../assets/icons_mici/experimental_mode.png | Bin 15690 -> 16243 bytes selfdrive/assets/icons_mici/microphone.png | Bin 7331 -> 6817 bytes .../icons_mici/offroad_alerts/green_wheel.png | Bin 13288 -> 13481 bytes .../offroad_alerts/orange_warning.png | Bin 12137 -> 12169 bytes .../icons_mici/offroad_alerts/red_warning.png | Bin 11898 -> 12124 bytes .../icons_mici/onroad/blind_spot_left.png | Bin 40406 -> 45297 bytes .../icons_mici/onroad/blind_spot_right.png | Bin 40979 -> 0 bytes .../assets/icons_mici/onroad/bookmark.png | Bin 11124 -> 11580 bytes .../driver_monitoring/dm_background.png | Bin 23549 -> 11678 bytes .../onroad/driver_monitoring/dm_person.png | Bin 1746 -> 1365 bytes .../assets/icons_mici/onroad/eye_fill.png | Bin 4829 -> 4983 bytes .../assets/icons_mici/onroad/eye_orange.png | Bin 29157 -> 36473 bytes .../assets/icons_mici/onroad/onroad_fade.png | Bin 28880 -> 38317 bytes .../icons_mici/onroad/turn_signal_left.png | Bin 30348 -> 45701 bytes .../icons_mici/onroad/turn_signal_right.png | Bin 35370 -> 0 bytes selfdrive/assets/icons_mici/settings.png | Bin 2321 -> 2198 bytes .../assets/icons_mici/settings/comma_icon.png | Bin 1392 -> 1388 bytes .../icons_mici/settings/developer/ssh.png | Bin 1328 -> 2620 bytes .../icons_mici/settings/developer_icon.png | Bin 1743 -> 1759 bytes .../icons_mici/settings/device/cameras.png | Bin 1345 -> 3117 bytes .../icons_mici/settings/device/info.png | Bin 2668 -> 2613 bytes .../icons_mici/settings/device/language.png | Bin 3664 -> 0 bytes .../icons_mici/settings/device/lkas.png | Bin 2554 -> 2028 bytes .../icons_mici/settings/device/pair.png | Bin 1594 -> 1779 bytes .../icons_mici/settings/device/power.png | Bin 2338 -> 2228 bytes .../icons_mici/settings/device/reboot.png | Bin 2360 -> 2362 bytes .../icons_mici/settings/device/uninstall.png | Bin 2421 -> 2424 bytes .../icons_mici/settings/device/up_to_date.png | Bin 3149 -> 2739 bytes .../icons_mici/settings/device/update.png | Bin 2493 -> 2409 bytes .../icons_mici/settings/device_icon.png | Bin 2443 -> 1888 bytes .../assets/icons_mici/settings/firehose.png | Bin 0 -> 1364 bytes .../assets/icons_mici/settings/galaxy.png | Bin 0 -> 339879 bytes .../settings/keyboard/backspace.png | Bin 2049 -> 1963 bytes .../settings/keyboard/caps_lock.png | Bin 1399 -> 1423 bytes .../settings/keyboard/caps_lower.png | Bin 1157 -> 1142 bytes .../settings/keyboard/caps_upper.png | Bin 1059 -> 1102 bytes .../icons_mici/settings/keyboard/confirm.png | Bin 1411 -> 0 bytes .../icons_mici/settings/keyboard/enter.png | Bin 0 -> 5620 bytes .../settings/keyboard/enter_disabled.png | Bin 0 -> 2445 bytes .../icons_mici/settings/keyboard/space.png | Bin 619 -> 654 bytes .../icons_mici/settings/manual_icon.png | Bin 1559 -> 0 bytes .../settings/network/cell_strength_full.png | Bin 1060 -> 777 bytes .../settings/network/cell_strength_high.png | Bin 1205 -> 936 bytes .../settings/network/cell_strength_low.png | Bin 1224 -> 945 bytes .../settings/network/cell_strength_medium.png | Bin 1219 -> 956 bytes .../settings/network/cell_strength_none.png | Bin 1178 -> 781 bytes .../settings/network/new/connect_button.png | Bin 8563 -> 0 bytes .../network/new/connect_button_pressed.png | Bin 21123 -> 0 bytes .../network/new/full_connect_button.png | Bin 9072 -> 0 bytes .../new/full_connect_button_pressed.png | Bin 21892 -> 0 bytes .../icons_mici/settings/network/new/lock.png | Bin 1235 -> 2509 bytes .../icons_mici/settings/network/new/trash.png | Bin 1524 -> 1533 bytes .../settings/network/new/wifi_selected.png | Bin 2489 -> 0 bytes .../icons_mici/settings/network/tethering.png | Bin 1609 -> 2752 bytes .../settings/network/wifi_strength_full.png | Bin 1976 -> 2026 bytes .../settings/network/wifi_strength_low.png | Bin 2111 -> 2196 bytes .../settings/network/wifi_strength_medium.png | Bin 2128 -> 2231 bytes .../settings/network/wifi_strength_none.png | Bin 2141 -> 2195 bytes .../settings/network/wifi_strength_slash.png | Bin 2512 -> 2318 bytes .../icons_mici/settings/toggles_icon.png | Bin 2528 -> 0 bytes .../settings/vertical_scroll_indicator.png | Bin 1272 -> 0 bytes .../assets/icons_mici/setup/back_new.png | Bin 1641 -> 0 bytes selfdrive/assets/icons_mici/setup/cancel.png | Bin 0 -> 1245 bytes .../assets/icons_mici/setup/continue.png | Bin 0 -> 10074 bytes .../icons_mici/setup/continue_disabled.png | Bin 0 -> 7109 bytes .../icons_mici/setup/continue_pressed.png | Bin 0 -> 22400 bytes .../setup/driver_monitoring/dm_check.png | Bin 809 -> 1412 bytes .../setup/driver_monitoring/dm_question.png | Bin 1388 -> 1438 bytes .../assets/icons_mici/setup/factory_reset.png | Bin 0 -> 11489 bytes .../assets/icons_mici/setup/green_button.png | Bin 24687 -> 0 bytes .../icons_mici/setup/green_button_pressed.png | Bin 62056 -> 0 bytes .../assets/icons_mici/setup/green_car.png | Bin 13281 -> 0 bytes .../assets/icons_mici/setup/green_dm.png | Bin 14289 -> 15052 bytes .../assets/icons_mici/setup/green_info.png | Bin 3957 -> 14154 bytes .../assets/icons_mici/setup/green_pedal.png | Bin 12209 -> 0 bytes .../icons_mici/setup/medium_button_bg.png | Bin 7935 -> 0 bytes .../setup/medium_button_pressed_bg.png | Bin 18225 -> 0 bytes .../assets/icons_mici/setup/orange_dm.png | Bin 11855 -> 13155 bytes .../assets/icons_mici/setup/red_warning.png | Bin 3185 -> 11123 bytes .../icons_mici/setup/reset/small_button.png | Bin 6949 -> 0 bytes .../setup/reset/small_button_pressed.png | Bin 13437 -> 0 bytes .../icons_mici/setup/reset/wide_button.png | Bin 9071 -> 0 bytes .../setup/reset/wide_button_pressed.png | Bin 21893 -> 0 bytes .../assets/icons_mici/setup/reset_failed.png | Bin 0 -> 11792 bytes selfdrive/assets/icons_mici/setup/restore.png | Bin 2962 -> 12320 bytes .../setup/scroll_down_indicator.png | Bin 1267 -> 0 bytes .../icons_mici/setup/small_red_pill.png | Bin 8765 -> 0 bytes .../setup/small_red_pill_pressed.png | Bin 22512 -> 0 bytes .../setup/small_slider/slider_arrow.png | Bin 1149 -> 1312 bytes .../setup/small_slider/slider_bg.png | Bin 5723 -> 0 bytes ...slider_black_rounded_rectangle_pressed.png | Bin 0 -> 14058 bytes .../slider_green_rounded_rectangle.png | Bin 10966 -> 10254 bytes ...slider_green_rounded_rectangle_pressed.png | Bin 0 -> 26729 bytes .../setup/small_slider/slider_red_circle.png | Bin 6611 -> 0 bytes .../icons_mici/setup/smaller_button.png | Bin 8604 -> 0 bytes .../setup/smaller_button_disabled.png | Bin 5341 -> 0 bytes .../setup/smaller_button_pressed.png | Bin 17554 -> 0 bytes .../assets/icons_mici/setup/start_button.png | Bin 0 -> 18608 bytes .../icons_mici/setup/start_button_pressed.png | Bin 0 -> 65513 bytes selfdrive/assets/icons_mici/setup/warning.png | Bin 3247 -> 9194 bytes .../assets/icons_mici/setup/widish_button.png | Bin 7112 -> 0 bytes .../setup/widish_button_disabled.png | Bin 4141 -> 0 bytes .../setup/widish_button_pressed.png | Bin 15572 -> 0 bytes selfdrive/assets/icons_mici/ssh_short.png | Bin 0 -> 1433 bytes .../assets/icons_mici/turn_intent_left.png | Bin 906 -> 914 bytes selfdrive/assets/icons_mici/wheel.png | Bin 2725 -> 2720 bytes .../assets/icons_mici/wheel_critical.png | Bin 10909 -> 11023 bytes selfdrive/ui/mici/layouts/home.py | 346 ++--- selfdrive/ui/mici/layouts/main.py | 115 +- selfdrive/ui/mici/layouts/offroad_alerts.py | 14 +- selfdrive/ui/mici/layouts/onboarding.py | 454 +++--- .../ui/mici/layouts/settings/developer.py | 231 +-- selfdrive/ui/mici/layouts/settings/device.py | 415 ++---- .../ui/mici/layouts/settings/driving_model.py | 87 +- .../ui/mici/layouts/settings/firehose.py | 26 +- selfdrive/ui/mici/layouts/settings/galaxy.py | 159 ++ .../mici/layouts/settings/network/__init__.py | 228 +-- .../layouts/settings/network/action_state.py | 5 - .../settings/network/network_layout.py | 154 ++ .../mici/layouts/settings/network/wifi_ui.py | 627 ++++---- .../ui/mici/layouts/settings/settings.py | 130 +- selfdrive/ui/mici/layouts/settings/toggles.py | 18 +- selfdrive/ui/mici/layouts/settings/visuals.py | 74 + selfdrive/ui/mici/onroad/alert_renderer.py | 29 +- selfdrive/ui/mici/onroad/cameraview.py | 21 +- selfdrive/ui/mici/onroad/confidence_ball.py | 16 +- .../ui/mici/onroad/driver_camera_dialog.py | 26 +- selfdrive/ui/mici/onroad/driver_state.py | 17 +- selfdrive/ui/mici/onroad/hud_renderer.py | 3 +- selfdrive/ui/mici/onroad/model_renderer.py | 7 +- selfdrive/ui/mici/onroad/torque_bar.py | 27 +- selfdrive/ui/mici/tests/test_widget_leaks.py | 119 ++ selfdrive/ui/mici/widgets/button.py | 312 ++-- selfdrive/ui/mici/widgets/dialog.py | 358 ++--- selfdrive/ui/mici/widgets/pairing_dialog.py | 27 +- selfdrive/ui/mici/widgets/side_button.py | 15 +- selfdrive/ui/onroad/augmented_road_view.py | 2 +- selfdrive/ui/onroad/driver_camera_dialog.py | 6 +- selfdrive/ui/onroad/exp_button.py | 2 +- selfdrive/ui/onroad/hud_renderer.py | 2 +- selfdrive/ui/ui.py | 52 +- selfdrive/ui/widgets/ssh_key.py | 46 + system/ui/lib/application.py | 423 +++--- system/ui/lib/emoji.py | 12 +- system/ui/lib/multilang.py | 157 +- system/ui/lib/networkmanager.py | 24 +- system/ui/lib/scroll_panel2.py | 35 +- .../ui/lib/tests/test_handle_state_change.py | 906 ++++++++++++ system/ui/lib/wifi_manager.py | 1296 ++++++++++------- system/ui/mici_reset.py | 203 ++- system/ui/mici_setup.py | 863 +++++------ system/ui/mici_updater.py | 240 ++- system/ui/reset.py | 6 +- system/ui/setup.py | 4 +- system/ui/spinner.py | 67 +- system/ui/tici_reset.py | 71 +- system/ui/tici_setup.py | 67 +- system/ui/tici_updater.py | 35 +- system/ui/updater.py | 2 +- system/ui/widgets/__init__.py | 303 +--- system/ui/widgets/button.py | 86 +- system/ui/widgets/confirm_dialog.py | 29 +- system/ui/widgets/html_render.py | 2 +- system/ui/widgets/icon_widget.py | 16 + system/ui/widgets/input_dialog.py | 43 - system/ui/widgets/keyboard.py | 82 +- system/ui/widgets/label.py | 277 +--- system/ui/widgets/layouts.py | 59 + system/ui/widgets/list_view.py | 1166 +-------------- system/ui/widgets/mici_keyboard.py | 56 +- system/ui/widgets/nav_widget.py | 229 +++ system/ui/widgets/network.py | 93 +- system/ui/widgets/option_dialog.py | 13 +- system/ui/widgets/scroller.py | 330 +++-- system/ui/widgets/selection_dialog.py | 290 ---- system/ui/widgets/slider.py | 66 +- 187 files changed, 5499 insertions(+), 6222 deletions(-) create mode 100644 selfdrive/assets/icons_mici/adb_short.png delete mode 100644 selfdrive/assets/icons_mici/buttons/button_circle_hover.png create mode 100644 selfdrive/assets/icons_mici/buttons/button_circle_pressed.png delete mode 100644 selfdrive/assets/icons_mici/buttons/button_circle_red_hover.png create mode 100644 selfdrive/assets/icons_mici/buttons/button_circle_red_pressed.png delete mode 100644 selfdrive/assets/icons_mici/buttons/button_rectangle_hover.png delete mode 100644 selfdrive/assets/icons_mici/onroad/blind_spot_right.png delete mode 100644 selfdrive/assets/icons_mici/onroad/turn_signal_right.png delete mode 100644 selfdrive/assets/icons_mici/settings/device/language.png create mode 100644 selfdrive/assets/icons_mici/settings/firehose.png create mode 100644 selfdrive/assets/icons_mici/settings/galaxy.png delete mode 100644 selfdrive/assets/icons_mici/settings/keyboard/confirm.png create mode 100644 selfdrive/assets/icons_mici/settings/keyboard/enter.png create mode 100644 selfdrive/assets/icons_mici/settings/keyboard/enter_disabled.png delete mode 100644 selfdrive/assets/icons_mici/settings/manual_icon.png delete mode 100644 selfdrive/assets/icons_mici/settings/network/new/connect_button.png delete mode 100644 selfdrive/assets/icons_mici/settings/network/new/connect_button_pressed.png delete mode 100644 selfdrive/assets/icons_mici/settings/network/new/full_connect_button.png delete mode 100644 selfdrive/assets/icons_mici/settings/network/new/full_connect_button_pressed.png delete mode 100644 selfdrive/assets/icons_mici/settings/network/new/wifi_selected.png delete mode 100644 selfdrive/assets/icons_mici/settings/toggles_icon.png delete mode 100644 selfdrive/assets/icons_mici/settings/vertical_scroll_indicator.png delete mode 100644 selfdrive/assets/icons_mici/setup/back_new.png create mode 100644 selfdrive/assets/icons_mici/setup/cancel.png create mode 100644 selfdrive/assets/icons_mici/setup/continue.png create mode 100644 selfdrive/assets/icons_mici/setup/continue_disabled.png create mode 100644 selfdrive/assets/icons_mici/setup/continue_pressed.png create mode 100644 selfdrive/assets/icons_mici/setup/factory_reset.png delete mode 100644 selfdrive/assets/icons_mici/setup/green_button.png delete mode 100644 selfdrive/assets/icons_mici/setup/green_button_pressed.png delete mode 100644 selfdrive/assets/icons_mici/setup/green_car.png delete mode 100644 selfdrive/assets/icons_mici/setup/green_pedal.png delete mode 100644 selfdrive/assets/icons_mici/setup/medium_button_bg.png delete mode 100644 selfdrive/assets/icons_mici/setup/medium_button_pressed_bg.png delete mode 100644 selfdrive/assets/icons_mici/setup/reset/small_button.png delete mode 100644 selfdrive/assets/icons_mici/setup/reset/small_button_pressed.png delete mode 100644 selfdrive/assets/icons_mici/setup/reset/wide_button.png delete mode 100644 selfdrive/assets/icons_mici/setup/reset/wide_button_pressed.png create mode 100644 selfdrive/assets/icons_mici/setup/reset_failed.png delete mode 100644 selfdrive/assets/icons_mici/setup/scroll_down_indicator.png delete mode 100644 selfdrive/assets/icons_mici/setup/small_red_pill.png delete mode 100644 selfdrive/assets/icons_mici/setup/small_red_pill_pressed.png delete mode 100644 selfdrive/assets/icons_mici/setup/small_slider/slider_bg.png create mode 100644 selfdrive/assets/icons_mici/setup/small_slider/slider_black_rounded_rectangle_pressed.png create mode 100644 selfdrive/assets/icons_mici/setup/small_slider/slider_green_rounded_rectangle_pressed.png delete mode 100644 selfdrive/assets/icons_mici/setup/small_slider/slider_red_circle.png delete mode 100644 selfdrive/assets/icons_mici/setup/smaller_button.png delete mode 100644 selfdrive/assets/icons_mici/setup/smaller_button_disabled.png delete mode 100644 selfdrive/assets/icons_mici/setup/smaller_button_pressed.png create mode 100644 selfdrive/assets/icons_mici/setup/start_button.png create mode 100644 selfdrive/assets/icons_mici/setup/start_button_pressed.png delete mode 100644 selfdrive/assets/icons_mici/setup/widish_button.png delete mode 100644 selfdrive/assets/icons_mici/setup/widish_button_disabled.png delete mode 100644 selfdrive/assets/icons_mici/setup/widish_button_pressed.png create mode 100644 selfdrive/assets/icons_mici/ssh_short.png create mode 100644 selfdrive/ui/mici/layouts/settings/galaxy.py delete mode 100644 selfdrive/ui/mici/layouts/settings/network/action_state.py create mode 100644 selfdrive/ui/mici/layouts/settings/network/network_layout.py create mode 100644 selfdrive/ui/mici/layouts/settings/visuals.py create mode 100755 selfdrive/ui/mici/tests/test_widget_leaks.py mode change 100755 => 100644 selfdrive/ui/ui.py create mode 100644 system/ui/lib/tests/test_handle_state_change.py mode change 100644 => 100755 system/ui/mici_reset.py mode change 100644 => 100755 system/ui/mici_setup.py mode change 100644 => 100755 system/ui/mici_updater.py mode change 100644 => 100755 system/ui/tici_reset.py mode change 100644 => 100755 system/ui/tici_setup.py mode change 100644 => 100755 system/ui/tici_updater.py create mode 100644 system/ui/widgets/icon_widget.py delete mode 100644 system/ui/widgets/input_dialog.py create mode 100644 system/ui/widgets/layouts.py create mode 100644 system/ui/widgets/nav_widget.py delete mode 100644 system/ui/widgets/selection_dialog.py diff --git a/selfdrive/assets/icons_mici/adb_short.png b/selfdrive/assets/icons_mici/adb_short.png new file mode 100644 index 0000000000000000000000000000000000000000..162b4e71da2527b550fc1e094e7ad2d4b5e1f2e8 GIT binary patch literal 2062 zcmV+p2=VucP)p*qNZt1Y#zLGlAF%>`rjS1yHL%;HOC8 z5AuHR;mIZ;kOB^ONALg;Wdbu7Hf`mTz_IsuY11cC#=$rKjve1^S`jF|@gM!Y-jZ?} zLE|&B5Co0SDg-A|)A*1=P}BH(J`gCs5jIag#kjO-iy#Ej_;N2c)!oYlDZ`Kk_Pw1E zH9a=2 ze&9UVu?oSsFn-Su*>MI!kjqf8Avffj8iQ6<#26;?HHSju+S^y3!0Jq$a+rwvWcJJ)};_=z=LC^`iA?Y3W!;n%B zyT5{qA~{ljC^C`Cu1y(-nCkR5X;e;&EtfGfEA-BO{_w}d#u^%z{anP-Uq>{;%M-2xp#h*q0;OBfa=5e3<9kXB zj1R!e3!y3qfSkj^l@U+@NJl{cr~oV+6@Z1K0x2!Nl(vm_y?2mmw_up|Nan*cx) zfN!)M#+b8sGH3z-Q7LCa1t7vw1fW7$FbYZlY^9X63_qYG5D>=!+UDZV0hr$iw@4J{ zyDV&1AYKCPfztpBFasq4fjSiYndZw!0s>V4WaY0pYJoenb1((4>jT3FgjgYvC0cVHB8F7`dvb{gdP{lw z1E0~ikI!P$D8Yw~i$73M9(=Klzb0_95da}0A;_ZfvxNIE&wg(1NSPLPLZI8nFCBI} zcpxB4(i&3E4-eb6WlUsOk~wW|l_%`9!H&&qZTJjeXBzHC5{4~1 z4O7s}$Z8y5DC{<8*r(^@mU=Jfcr%HLTpWT7J^w>4dZ$F*{aaBKMNt$*Q4~c{6h%=K zMNt$*Q4~c{6h%=K<$oYU!q|mbU&hY)DdT<0G99u>$X7Ka^s7htPsp=`p|F*D(-5F( zdX!UeKV-JiZP(z>0p&mX0Mj)o^>FjFuj?M=^lhL+K22Qyj$N>-a)_;zRZGQnUNYvy z1`myrG03E)Zc_&Y!c_$hBHE!HL{*!l`A50`NNczY6{r4Pj_F;*h-$k}Tg= z*5qIJyq?S>IKm!(VbhmLerf#9W^MNHvHcf^@G&^H=~z}wMeiE&o5;0kQ`t=`1hHjm zS3J_ZKwCc4if3p75ZeEJuM8`#cA#h^s>rc|rX$(hLv#&L2A_u*nvTgDq{g94rWIfW zpvM0HRQ-O4whGQo;s;ELH(R%nQ(q_%zY`8Im0lkFEnCVJhxw&K0jF-q`~_)vW78EK zn-W<}@{SULBml1?$I9UEcL)FP{eY6NkbCO-Sof!QI+KCq1B4pjA?V#@kJU|6|+8hTgJayd~Q94r`b~ z3UcoOrheDZ2#Ns2?0@XhC?*tWuT;f!JqwdPE-5w&c%4!RP&L5M2pT`u{$HYaPkKWc zASTQ&9sf3R`Z|>+Oa2s4WB;Wxx_Z*jDI=^9+}qz=(y;@(Cbv)0SwYYMhE4;~4`?Gc z@RLN45d>fiPae$=Xd^awRZs#D27*lFSk;h!MaK&~iXTwY2zYH`BB#b2uP+FMqypgW ze-RuOFZxBxcS8SQO!avcIW{O{yn)zL&kssKY7<~0#~OQD&4AD-et<1Q8h;ZxRnkb< zYkZ*i?=C3;sZBu4{(qx(N;-c0GdA5*JMyw7_C`+1s}rI=TfWu>kBFZl0%juTM8kBs z_j$qbmAqRWI-BP@^1Yi#zA?hKHx2hOM)^V(V;Q4TQ+baaziT4j{oe5!eb@~64WnLT zwy@jSA*9o!53Zj)vI_DIZ6JvZUU#^UQ)dPlN=!;0AZGu+QU}B%x0NT(VrVW5b@Kya sROEaM@j>n<2sC-}sU)|rU`YV{3-wDoL_;*?1poj507*qoM6N<$g42|evj6}9 literal 0 HcmV?d00001 diff --git a/selfdrive/assets/icons_mici/buttons/button_circle_hover.png b/selfdrive/assets/icons_mici/buttons/button_circle_hover.png deleted file mode 100644 index b098870b77f7b1fe02a0b31a82b054eb54cfdd8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7511 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 diff --git a/selfdrive/assets/icons_mici/buttons/button_circle_pressed.png b/selfdrive/assets/icons_mici/buttons/button_circle_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..90a5af125f6632213a3df4dc562d961f60ca851b GIT binary patch literal 18666 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 KMNUMnLSTZ_QQoZp literal 0 HcmV?d00001 diff --git a/selfdrive/assets/icons_mici/buttons/button_rectangle.png b/selfdrive/assets/icons_mici/buttons/button_rectangle.png index 0a68722c4d76d15e0c876aeaf926c75f843c3c3d..c9731f44ad5f5893ab2adb1695da5ab54436c016 100644 GIT binary patch literal 7982 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 diff --git a/selfdrive/assets/icons_mici/buttons/button_rectangle_hover.png b/selfdrive/assets/icons_mici/buttons/button_rectangle_hover.png deleted file mode 100644 index 6c98434f5dc3d5c1294935db7589ecac97d359f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7750 zcmX9?cOcaN|3BrUfikipa%S9F85KF@%rhDiXU7?xqjmPED0GS=Cn?G-l~@AJ4~gyq;0F%nUeBpFa%(fjEr};dekFmN?*h(MdMo zy&Ci#1$>-(WN7^q1Y+ksda-~$ei8&0S)Sf8xCzSZ5Sashu)5tay#WIKh+*G%`VR!U zFl+?BVd2NJ`1yJqO`q_qOYi(7CYkYVlht$X7~-=|m1x+5r^u0jG&7x5*0eSXJnEb- zw@TJ5YZ_54`y0FG9P6-foH93fFnRE9{_IBXR)VYr->qFH_!fv~hw~!SFX>e8jS`6^ zdW8n;%9Sf}RHwm%vDMYpSOVE0F;65p@j!UI^)RSx2?TOXmBomX1ZY)7z5llgsa(4z(bZ2TO4c-E0mvnz151n~R}M zDR+MUMcpb(=8&fow=*4}%-f)h%niLGJj;?^j-|JX7SpK>b z@AP4S2tjPEf#q=IopOk`eRa@I`LL2OZ=9TH=FLOf(^%Wy)mWU~pab{WviANbHV@R^ zS*Nkzs<^nkwxYYA|h9F9Y#egEsfHo9dA6|V8~ntwkr-1HBQu=%1VnA{TN_c&ly zClDFk;k+I`__3xr^qhL&Ths&?_NfiqQI9$>2tm^P%AKp3YO3O2G03TErv%$&#eN)E zdNgQnvBbQb#i~Ld7fFLotYEEYC=Xi8d&1$o@#PLJR+3L_((IJ_Uui||si7w4)q;e` z8iAwi*M+n1Tas*(Rs-Imibsh0AOCgWw7fE@lgkoQLNDCQ2$eyrPi#DFiuwxM4BqGQ zg%)%4RmGNVs?6HU&sr>nvL|KPA~X<&a+2USxp6OCT!$OuUHUqITqfUY#>ro^l7d5Z z|1}5;k9$q!VQk=>4!x0vB?SE}#_n}%lwz^$lIPBpa{h|PC4{6g)KBBlOx9AotGc;v z)1TRZE?Rn12rn^ytJ(v;)!Mrp%84-9Rwq??L6KC9f^3QRXo%&z>rlF#fZf@E&vRh# z8u%j2Qa+qD48m=0IOWsG%YEsh&Z>e=IYwmq=~otgRYb+)b@_`6aUaNv5&h#ir{@G zF@*<;_LY7sMCuHTu`*sCfz_H)7T_|6H-lG*ac|Vd6iPfCHkFToYOA?U8TXPJ>BJv^ z8SZvXCJ!ylaj4Y{>Xhc>HzYXoCo>KgAuVmIgB%tA2Dh^j38|buRn*xt|MREP(_x#H z?w)rjwtZxGf``kA6a7Z<#r^?9Wzw*Xp}4TvC%;wiswYLr#-uR&{E&67bAj!y^&3^Q zeP#N4eZCGgDsAdZOcQ!D<8z-74le9Diyq3mNnT(>SW7$QiD~&gvXxs_yrTul4aY^Q zAC%l=w4#1DO8w|Xj*NXw{!{Dzi-RTP3Zj{Tu?~|`xiEgGQL((P771GdlumAjRy|^}gA%16L_4~APxzEBv+^qX_>aw4`Sr8(~(i5c{S*@;_sbnMy)*}~T0;l)Of$`?Kg=Yni( zo~mj9o--hx0Gpe*pH?a}5+6rn3ha3CnW!hX`@{kY%e<^l%m;$?xDG2I%=6X~P|GN- zCVFY9MaH(3C&FdZx^4G;J8#I`$oWvjfGNz6gZq9KN76IZ(7`=P-DhU$&br&)Z_#4Q zp^Gn)m(gdZ`_#tlgzrR0JBP~UPR3~O{!Lz6TdP5@(3Uvf0HL6|^b~C?dET=GURTb& zjns7IPKu?yjreiSq3HtlsrwSr5;#9{>#h!vyM>~ckjUSnmu2cz8F(sYx^YyVfA*5mLu;<6*9SU}( zqr0z-(~)G(%^|xKAIvcO8d*z$D)1fF{&;74WVg|bkAEP|@Qe{QDc}1jL6x(*1SgISW!4Ia0V8-w!(_@WdaK4&8MRMU!}Q$T z>$(#4sZ4L;r(R|r_0DJr^Hzv43Ki|LQ{AjAz?RF7(6pC-VIyUs9EA6(JeD~e8$BL{ z`K#qJIqWm2@p(j=7;OpD%_>1?F}xu=qG@Ng<_=4S%&Q59r>N!Q#~Lb{!}px54-aSB zlT-cnHNrDGy1y^udOK4s*c$@6{(WAvgAP(qQHK4Pe0h1^@-azb*jmS;Ua_FBqhKfpZ^o4W^+*%z!v17F{kST9Btr#UK64$0 zugRg2rr$2L2bVGBd;g(tN^Mapt#+hXzJYHnQWl2dJo?qvm^scjpU^4yMjaJTFbk)7 zWo>mbavt62IxSl=U47pO=%+l1n|GheXk3yE!aGZ$nC8Aqw4J%x)KL50g3J7aG6W?< z-_B!QS$mcWiU;1F9%!!?Y-atYqr3BU~nL1lD@1iF``Qt+zfHX8|*A@`|)y0N^McTYR>@F_yy~y~xxx zRQS9SL)3BfWCek;!ZhIG2i8@V)Qxd$KY?F|(Yk6P=`RAD@%y^@F(%pSrFcx?Vtvy3 z0@lg@l$8*0M#-!a#>qj96=pD$<2>O6ht8u%c&(J@YlV*ZwZ!>T481st*C@{t{g}l- zE$2)_` zaSceErx=p8yaYIZ&1yN(Dn2hG@PcQm4c_%XHo6UBg zK}DeZS;2qq$lWoI!CP^=@B%0)*(1evC8$$Pfs#-cRyI4p!~zF*FdTCL5zYaha7atE z1_VVXYM(uz-Fyt?LHk%z*#W&kO?sQcHbRyVo=aSVC!PEOtwMhH8bq!7ez126#>915Oc4;D8Gy^3c5j-akf{x|_&MmM>i&}sjC2eF=Rh8F|gglb$gT;J73jD}soO^Ueqm`AA#Q(Japq<1Nn+qGFBm`GnumrR+ ziD=UVTPr`#Wb8id`u zj@2In+%Pv5b%S~$5Vf5&^WiNA|No04k_e@3OwX7s=H`x!9w4sbSD~SMjd?}23R+&p z`(J`1V52z^R?z+TfCSwaI|W4L*`a4+1oLz*(^SJ2eIV~S)>!Z4+C7onZBu()3pk}z zC}6+|Rd9Xpj{)M5k^+Fzr1W{uW#Lhx)RU`eXIB9H=fIp{1oMnXAFC-+4pwkqASarf zSPV7TR>l<2lP$36=v+N6M?4@*70>j^p&UTz4jSdfrI{@9fFln54DlXL)9stGac%7K z1r~q`$aRkry0wk{7p$o`V8x`PtVFGd#GHg6DJI{w8CktO@-N@#I zY~fzquPe}|8-;okEV=(nEDKqy;ris&P|2YI12h~u4s2Txz1o~|K?XnWW*N?pA1iVN zHrD$5({9e?ObaY!4yG6>y*Wxf+s*G{TnrEXER`Q=CMW>KJj1c6+DHzpP2wnX|~<$XU4-o?!em4*9?J}N~9y?ed=IUhVu`7h&Kz^{%1eA4-DzBln1 zMo;mAYm@o^D7o!1*R*OiH`ER8Jcc+Tfa!8)Gc_zJ(h&=IG(^1SpXg2|wue1xL`O3m z&@!u$E7bE||2%sXLC*i-D=)xFANU!9Ab9|e?{_Ro|I4}BuLX;LkGxE!=)cTo0++Cm zpT9IAKUU!GnP^1E*nGSYVA^DQ=Wn>H7HwgO++>(`lClk~MT?OZJ1WsClP4~x!dCWm zbO3`ZU9|Ca^uoyrG*c{!aO&A(7Jz8(2ZXeZwDNO_MX~O!E=gJiCcw@hIOehjTgIdC zu*KVTgsU#6*daUs4aK^y_@Wc}$4?tkXQx{LPdtANW&6F_qfQ{s$b@bnQ15Ft$hH@;mzKy?92bAw(DmP5~CT9Pc53+XEs)xAes7b^g{p zXp%r*aQyMS@d)1fLb<8!sA&gh*Za3EPa8h0Nb8>IJb|0)0CfnJuA>3wrKxF_6e{$sb4%j;upoIzve)|^~&7Y zz8Jlgr8)ZgFQBkrOZDBl;h@|Kv?aJAHp^K5o2qa1+oYo!D_YsFT2#!u$n+rQ=8@PD zkBcHDegaHU(k91$uUvUj-w6v3H*h(nr)tl$_`gsk^#rM1DCOrt_!m8Y*7gP%%GH(@ zG^v*+YknOG^?SR0vof&hOIxJzOi7J zg(jG=Y2lCH(6aC38r>Q~V^$NS6j1(l2XS(h;y+_?919qmnfI1Ju>;lD!I&Le{x*<` z{30LQVy2~y10mE0Qx&wcs%Cn;xc67oUwt+xu7T%>(~NP-FWOmB=AYYL94AeWf6#lf zGSP@j&8s8BJG8K?y{+@G9(V%}?@1s&izJ54a_N*IcZ62BJ8?k(JsaIU#T-0*yU3StN2`MatqAW3zRM$a`IPB{y)Ah}W*(YpYv*nQrf(-FLQ}sc9=sfuG!AU@7rsWz zYo78oMx|AnNpS8!WXh{F=!h}`+kcgX5gRPm-Ad<)5h$6KX2f|1&Xr6x%H4nFrL|?UOWJ8~ zLcdxJY|~sG+8JL8dhH^;h|Rym7%JF*IE=I%+Q{C)b>qFd)Cf_)pre|Z?$h~Qv(v7) zi*()e^{AT`vt-9?<=;JP(S-0bxp4~ZiMin(cH)Szi@9MA+ge%+KB=0cS`D3wfxL)BL}~UJV|vpi=?kSLTdYc zBuAecX^qE1Ta@hmQTC{isbZ{Xh9+$Jb}&M@D-V@xMhOh7b%*6S8jc!7c|MtJ}$!^pJ+y~vVM3NIB z2j+UMw3y*sSq zMXVnXx#0z@&l}QrGk@@qwM(&S*ST9tDcP*;Ko(qJNA6`=L!Q|1a)Zyqw^;Q=6(Jds z7M9^tJ8QE7XGOKPiISTVdeRlyr8$NVrN1TPic#CA9ndp{S=D{juiVJ!5Xg%{6Q4yv zSYFa^%K#N^b1jmpTByBH(Z2gmOdVX>uh)(%(`|<$dJPGQOiFiG zZNu)Z{SgADAVJpfG4AE=@5A>5-JunfsRigrRVEZUO~r6BUJD*$fJZF1l_%%}!PIM% zfQK#1+IGiv6B{2AFCUitR9Ff%r(Lh<({`AelDTy8vU4#({b}yD|0WQsibX;6B@W}- zY!ueEqBQ5ZTAiF=f}FIa_&2V~KwRG)L-*mpV`H{tFO{UcHpHfp%w%@s=T_LW-2?(o zl~-Cg-`B~_JLT`35|wNAcHZT23R!=aiqO=}8h<-sQ}UBwP8AY&kIHWhC0wF2Y4nf1 zUti(pS{9=t-NWXGd_FJjG4gA)7ddE`pDmA6`E$qA@U2{t#OVq@>xb}=^&z-$xi{Wx zl#F}RHvh~71vRetRyd{32QQ$0h#G^H@q|+X@29`)yovmMQL{w9^-#}a3r1wxp=N%t z%T7x9Qs;mDeFbMs!xcnnH@{+rX3=w^Wk5Bpj-}k3DwdYC)hhjB)e}g`Bh`hzXW1<5 zpgv6;>oJD~Td1sLN`w1^muTQ|?~3~wIqqn)Voe=kO}tEFz-}bl&!U5z+$MwryIbak zpFMc`nV`j2*-B84W+nS;T|Wq=yG``jmdmH}u}`i01-7!MN3X@)u12n=wq*N=s`SVD zT(IePvM|5BEqm7TJTQ-kLU0X8gFZvmyNJl>*LyboS#A7Bu~V2cZzP+6={Ff=hszVA{0T=u5EVQv+!z%IbG)qbgIf8 zl}+ta&ev9%?rD9{C^U_j=|UPbU&HToOp#(>`9a-cW#+)#3vy;rP=I|YD+-w7-cRn! z<;?RnLQGvdYbVjDa#bNWA9qp27~Q}anRozB%q#p)&+9m-R*c2eqzL2j!ks^=pCnbR z_-533Hx>WPzCyHj&{nETj5=c*m>SN0Qh?i=?S3N{jAI~YZ1wm z)pX}>J8HzV0X61+h-f08gEYxA1WYXN_=FG|kx#T#g#Id=E|~CWFTskc!GJLn0c3`e}D>Dqr-|w+pjx@2fEh=TrXIbw%iMR7>tzC?_0{jkUa{NWEv0n*p^(1rALZU;|Nd{7}q}V_-amQ_ldXX&@s#GkD%j$Cv*H4RY6& diff --git a/selfdrive/assets/icons_mici/buttons/button_rectangle_pressed.png b/selfdrive/assets/icons_mici/buttons/button_rectangle_pressed.png index 43ed496ad802b03bfdb2dc33e4a05c5377ed1e51..3adf0d1b3610b7fa56d09b740a34d0ef7d1f7956 100644 GIT binary patch literal 56738 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

6TE?0E8>JN>O(|S*-(bPhMtUD<7>O4GdX9| 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 Hu0mjfHzP&z diff --git a/selfdrive/assets/icons_mici/buttons/toggle_dot_disabled.png b/selfdrive/assets/icons_mici/buttons/toggle_dot_disabled.png index ae6111d12903b9610cd1a0f03bfb8c4563f81db1..03aa4cd1b2fcb586c7d9642449e56bdc34f10a26 100644 GIT binary patch delta 2193 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 Tkj8?%00000NkvXXu0mjfRwp1_ delta 2445 zcmV;833B$V5vCI%iBL{Q4GJ0x0000DNk~Le0000+0000+2nGNE0C6tjgpnaMe+fHD zL_t(|0lizltCdF+e)ilWSeWkvD?vp;i|@0tv9n1df)GglgII?YRv`ha5E2U^F@L~K z`Xr=N5mIPpCqhUBs|2hp5-ddSyE*6FyYHQS-e+d_y=n#yyYKAo?9A*lv-|!yKnLZV z6W1-TXIvy}&iLNGO3yj+nv<1Ze``{1Yso!mpSi{zRL5>%woN(9w)Mz(6a0u6DXiCl zoHGZ8Jx)@xz3U!1%1pdx+Cx&Lv}bs)Zms!Rj#(<Xy$6 z?(x^Ju3 ztV3REv~R>BFx2VCXp~_FB}6P}m4m!NYJv$AdB|=0glf%o<4)vU2dD-DH-(Fh> zRWg*#Rq|Ew*YKz^Yym%PQZOz`%GMCicy>^6{9sB58Q~dc&0n@+f6f@tv)Tz$r}QAm z3l9$&cJ2Yw@MM|N9_t(ih`VAllB{w<%Q+Ehc!yD;VG*MEst!?ycK}=}W`jx++{i`S zF$*fAyaQo?mv=aP5cHQ6*<9USx3aaF*cxAUg4Fo~wByt~T-rskWcl_yH9+g`9s<)`2cE+(J5<8asY%(qcS@>}SiH@ukWise4tlm6$6va1 z>4V3QAAdFs!#hGpEEbEu&YU@O>;C=w-(f$u%=u+ef6DVv67QH6jx!3iyzPaJbz~{W zwu=`pe)#Coqc1(DtZCKupC?bAe0KTrH3bspQT^gMQ;Cw06^N-+)>FQgW${PETE z=g;5Ae+)W#^5m_D4UL*#Z%P62dg&w?L?8;2BL zym;|{%%o?}o|SMaGG!>hPqyB{RXU|oxRatuQ={L8|MKO_|6wM*diCl!=w1iD9&%pO z$3B*D7qxOs&hGmcg%mrf>d)5+vGOfS!F6`Ze^R%L$B#318}?9Bd@wquK*>4md7cfA z*fe(2zFaQ<#7sJT`0%gr=eF~BiCB#t+lxc2{gYdQ(oqQWc#}j%*VXyq`0?XEVJ00p za^zPb(_SYrm+I$k)4VfRh_NN&IF3R`DKzr0U%$S+I=uajPFnZ9diCnJ(BT|~(3+Y^ ze^+k^HuGY?N2bQf2@#mwXGA$euG*C=SN>XU*`K46R;S;uuU)(L2lOeH=L3Aya(Hd{ z>aoMRjJ9h86GU4%E6%)p@7}#1&z?Q|MTDGn+xhe7KUv)pe2@C6oSjQKpZg`~g_L%> z=NRW}e|q#sn_LeaI`rqMQ>SiiZ*RYQ`}XZ0P(S3( zji0Bdw~#KmnY(fN<&!W!KViPQOJ?~>Y3tlIm6NRvD|^i+;mCp2s}+9nHhJNe^~<*c zNv?w?Ov0#y`tjoyrmt05HX{$19`VC)#Z-S~&*XSguB!)CVrR;M;%b$Pf?HJDe_Mkc z?4t%kmUZ{1y^kHo&V#7$GWcr;uY=gOIeZk)dj#2fdRJsIGVM>jVDp^R%11Dz ze19$9D~WGnV1z}8DXY4`K2j3#N)1SbcN7{>3y}ye`gmu@Tk`&Dy;Z#VW zVx*{?;w4{eL@U<-Q)dm(NGr}C=kbmxn@`Q)Q11IihF2g7Wq>-rsIh=pe?`Fkf~s}R zdMceqJJq9>>VH8g{_jAPYivEuYy-(FMtEhfb2tQ9_U?q@)rnQ4qK?-oy&+~%vIt~& zo9~Sj%nQ%IL~Q3r?lFt6EpxpnhuS%x9edW|t zxB1KRBUG(vvfDN83r7Xzep(2Pnf8ujhKg^PHjDt5>xA5WKu&v4dMqe*ee6>X`vyzWepMVXy8 z+g^S{qkZJ>%|G&kT~xklWqWP^*@$WJa(s`)otiZzAoryt!&PfO8hF z67}7nqw8E@(r<7HDS00000 LNkvXXu0mjfc;3Vs diff --git a/selfdrive/assets/icons_mici/exclamation_point.png b/selfdrive/assets/icons_mici/exclamation_point.png index 8e07b6ced7b28a602fe838fbb1f297ef98f6bd8a..7a5773d7a56e287ec4074f28eab487b7e534c34b 100644 GIT binary patch delta 2263 zcmV;|2q^ca5b+TqiBL{Q4GJ0x0000DNk~Le0000M0001S2nGNE0MSKL*^wbMe+Y(2 zL_t(|0qt5nl4M5_{_^dFEFxG=K<^1yiwIfTJ%K_7F47G&A~3)pb{9*5fmSC#i;Kev z&|+aSH`tyNXmBuKrjq)}pRcN4_qrJSjOo{}tG@c`tIVv-dLy`S=|AucvV9KKXZ72m zKNPvC_cze1H}diQ+jD*84B(;ufApsgDAq)EG#6;S7wdWh(a+>#9N!DvK~=u5w?C!d z2deZ>pj2QHwV!Trh0o;Yb&zww0jiBL60?D5YpY8a|E@=Dc+SkXiEi0mR5ph`ZMA;d z@eEDkY5YF!4=D1@F5}Mj0q@|%m}$f7vMQ1G-;nxW=@Vz2jPLPj?;Kp)e*o&!ABZaU zoCYr;N5$AaJ(WVMY2`#^$YCJG=xQwAkfPY6qiuQaa95jGhZ_Z0 z*dLz)7iEJ2%a3l%#>z!jx9MTr+;f& zPk%D$ob7}x1%7l4 z=WxIt8$xr6Y*4xz}( zKV5o?JBkc5vp^fyJ$4x1SAB$Z<+#BMnNzoXgT7-A7!`PTf7&z{=y$P=Hr=KDJz`f1 ztkajoE}Hi1Y>PFHRBWFy<~U0`am<2847t);Xj1Fq>6F4IAhGwj5j(ns7t+PRcjT@< z3?jJ4^By+SG9p8jfq|ewg#Tgr3t(>Hmy%(goGqw_@f0|Ps{+n68=5FM9^tr9c+5`=e zOkAK@#MqFDBY>O_LZqw75T%%PE(A8U#p+xq8t1|kW~j@e(qLB*TO+)bT|*J#XT#X zHv;_{e{~}WSxcF~&xK9lkYLXxyo_@&-w-B;K6UA1a$TxZPFW+Y`gd(r*DcOU(F>f` zNR~qnAmoTaguD}Z)UeBVu+cDnp@nnPnv=sZ^a6UyxX}$065fq8ecf$Z(zSiI=Yipi zkwHFcy2QwM;lZgk+UAU9mf~J+J90sus$^ZwfAKoQYLLlNY=`j!o1BuFNs!}2Q9O>c zt`E2XY%C^w1{Ql(xJ`G@lhL4D$}7qvcnvo2CO`mTVMEtKnbC618gEve`c#X3W78{2 z!N_g9Kf4g!T1Fn*5Jj~Ss*Mk3fI_K41WJ+zTpiF@?>k*qP$#4sbh=dw>TOfyg==jd-0Kfyb2vim(5) z1)$9`L#0NN5_+p|x`X}w{AOVpr?&kTKh%%Mldf5m&s`;)42G}d z%Km#6J%3$cPJtir6*5kwskv!kdTwXRe|Ys?VEL*s)?f86#j=Uqf&_CB+U{P}KF1Rr zoVoNHTvw1kdTm5KJW2eaPT=ry(fzQT*z@DNA2SQ8fB z`YDN-s{h{RN!@_2dyg)G%DZfAe==zH#dMmBtZCG%RFh`pB6qdWd2&_rh-aLX#=WlR z6^j9tmJ`$QSh3!sk1OUEH7S%|BHl^+G&PfLVI8M+6guYdWZk9t*X}oP(}P$gt8Z!lE}|m8k^>&p@mtk6^8<5>@%}Id>R|M-jfY}R9kc&e^u!PcdtJ* zkb`6iL(lBo)}*~!J%* zq51_Z2zAyQo&$E+ly7BdiaZNV&{%T4H4KoT*5@}Z!qq^pa-cYyB*_OrO7yei_AgUk z?*#g3fM4Tf1$z;%i^XOkC(T=3_!>XLw>7{|Mfxsq2fwcDw;K62E&06vf0oo)i~)|d lTl;skzt^JiyDsC-^*D=s delta 2058 zcmV+l2=({z5vC9!iBL{Q4GJ0x0000DNk~Le0000L0001S2nGNE06KE$+L0kNe+Ros zL_t(|0qt7Nj#Whv{_1cSvT}F=<_(ZH0Cp}6xHK`rtr~-qxFIfpg(1cmLgL=x3BZMM z=L~NEPvG?lW>^>!9lGqFs_Lpf=UnCirperMZr|>&>%XhIA*?k112;gp4WjbA3g#>M zc?za&em@4|DSeFX(p;K>J;xp{f8$|(y_W&Gb(V4LW|e-X+;xbzIG|7SVr!rRc$6ny z%hV7S$*^vgF|RW4O%FVU357z&N0q2bm{H1wu-cajkzAf6W3J)y^kk9JEW`c$_^Wp_ zRw-rwn=E|Bx9AfbM@lKnup$xHN$ha_lig?SD-`FyOIfKi_6yrpA6}NKe;?`;X@5}` zLzGsh+|ge*HZEmQ;(=?H$!;NTNL>Uh3({4c>=m`wOotkKW=;ZFeq((qV5OEs1mNGZ zJrC@+&jv!KT_cFxI9a%kbte2T-bD7{091Y?ly<|SKt03~L_}(u+4>4ND4^Z zb7GY0>gj4VbD|izn&Lz#9K6oEso*#pRFc^7-n_0;(cO5fP*J8me+H?KBStI=rT zlyG<9fU@LKT;-;&O0s~h$uR_~R?}KQv3K^$>DkImfb8PJ68lqC6uS|F2{}*m>H0a? zr#R3>_$Y6;D~7j$(n^eE#TFkKF@;3WRam`D6N{Ec&Ow{pIAnXaS5XI6W%UG@@c~X| zp!8WyC519ee;9;1U4$r#h}dlS?Hc=P(56vVOAx0Js>o&1$!CMDZ3dZ&g2oCZ>`y&N z>n;#2YM`|5P3%6GBU4k7a6wF;G?Lb5L88ect5qCyFC`T7J6D zzV6*!rZFD090#_$`mOx^l)?vN7W)+^hqK$I{AyKEeSW1h4PIvBZOqC0KqX+Xi=(0_ zAf}cYSP&I8gg&WHg9jPgS~aulUu;pPX>FL3bOdWgNV`D$u>R?+H-2-Q;7&!=vBWWE zB4lhme_&U1@rd1adK%?cS82I^52w`5rUF-|yV#c;Rd|fCbynDlh0t#H6O>cQrCd6b zKyjOKHR{mTJ&Ih!_n8Qzzv~3rEmNJr7Uuj)g?geP`K{nPWO|mjgh?o{pb?r1x@Ust zGAU1~x@Fv%Trx42=Q3!WTJ25UkpuGG{90})KZMUlm|vE?iN2d} zC5xc^Q;zh&ulc8a*!k%~!rR(5_a0>Me;2+pY<&D1Sp(hiF6?OgF&%Zsd z^OivC4}=Gnn~#^R?Z7|=*Y()y)I2ZC{b69gDq_-m=)x%Zj2S!Fk1gff^ZPh%lumRs z?C0DICOO)`LjDWmq-EGs;k0~vT>r?bhu9&^zTl`MXk{OCwd-J4L4Le;y<|&tp6EVqcieD2{nm zf?D+6rkjVbL?AizawOVq56xs;sWY1{FMC<0bYeMv;&^9jR8U{QY5=>3qA(V8GG(CG zE+yAV9I|DY5P*I#P4GvcS_Uz{f1YaQ97LciYq1at3yxga5h%N=^3{|-ehW%ra+I=^ zG&TQk%qD*>t(>^*`ae9K=zF}%UtR?EbZ~pJ96^gBOuSvj{gCF69%0+ubb|x1-bKT+ zBGfU00&PL+-^)3_)C=Yj{6n_agg^7^6^yN4xvAImqgXwbop8N!4SyzGU^*t;Lb<1J zwL_PknH+f?soLITVs0p405#xuxS3}h+I~#7{Rpt534>QM4goQO8@`>07*qoM6N<$g7oj;e*gdg diff --git a/selfdrive/assets/icons_mici/experimental_mode.png b/selfdrive/assets/icons_mici/experimental_mode.png index 73713dd31b2f0f9643f3b44b7824f9cf2aa33555..db699bc8d4aff5fba4644665f96eddbe87678dab 100644 GIT binary patch literal 16243 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 literal 15690 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 diff --git a/selfdrive/assets/icons_mici/microphone.png b/selfdrive/assets/icons_mici/microphone.png index b07d098dd594e0e37342a3a95d5a0302d1031809..c64f871d8335013f55b927c295f32ab45c7d8a2e 100644 GIT binary patch literal 6817 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 P00000NkvXXu0mjfH;yUO literal 7331 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%0A74!H_Ue)hz-BX559O?mM;^V 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

s#vmVts^Z)YUBcS>3z}>SmSOhIz022M# zjbouhze$#Al)^})w`z1-XyLM3ZdYL)?Zm4^k@3Xd> z2~$gMjvzrH0zE@uJ|et_2=8R(7H!Af&u+(A(Af(>qW^Q_193z)!4HDl_LbWrkHFl&+}Pr+21W>7HP&-~zkbyM zN={wOR#^#L(7tHRfFOUyI)0qv_XCM(~)|q^% zOnfM^2St{A+R82k2dCt4*D#5(Bnz#2?6CemV#;m6X55&&vh0Z9k6ZIiSXf83z48Oj zuth7>Zl|;K9`DG8$&HoxS}5ZgoxT%vFV2C^4FM8Gr!X{OGPbWP)=*v;THAW2)Ui&H zXflt7L`xx19nfPw^d#RSOVS`hCRVoWl4+rY8Ih3R|{t4=f%|(%nwK z-@nt#90(wgLkp^X1$8(*L{vBTsf!GP)LoZkmt30$%(Do_-Pbad ztvP+bnD0Z!xOI@0fcetyrJ*DQb6_EWGmLOc$jk=wu+-sCl75|ZQss0`k0gwORY5*d zfc;h-bVz$OO&DRk(8QZJ<|?`wCMCDL$C6)7%X$JE# z)3*f7moZ#AdLRnH5GG@xYYd2Mi0%t>tg*$*=7zbmW*S^L=+-FvsBQ9s>wK;(hn_LV-z**T`!r(-C<;N$5u`bT zwOV|z$O?7tyO>fH3WGVuVgcY@EmkO(fm77AsLk;a6(2pMy0TC!oVayV!E!xhoXrfT z`)Fyb!JIFn6+DA_6auZfXc|qpXDONAu3_ouftWH5v^#EXGJ9R9$HudoQf2@29A`ZM za;Cy8H&KNZFl{$aUE=35%myBX#V!u#0(#pa{(={bR{9g-(379-gNQNP^UCoIifv{Z zMPNyd1k=7)=DmZ=?k$$ij{pemzhOK=)`T)L6sv6Gp@FVTumrT_gT+Fu@b|DwKsKJ-BDuj9~c%z0upu9)T#=h5mpl z`?g50h$pLgfZ310)?Ah^^6T`V01zxPkn3BONO`^OE2K_^)f+lTyk~sc*SXWPv($| z67Qb(ZK<1vdw|(^h$8}+;IpWaGQY@=4Wa;Rc02kPQLnpl`{ah)!pgCZ~)in#QyuTTo~VXfSX4Bl=@VSO7V`qdmg}dl$9X8`0hIjoOx(OTLjD0< zK)Ub(kSIk7&8aQ1@^P>029a>np%AkV@{UyYgErpIAn*W_S7u=;BehFBdAqMovdJ5rtagrN-L_mK%pG-J zO26zy+MkR`o$YwXg@yZmbZH2H(EU*ms2Pt#)pg!Cv7^0kTYcil4ly7Qd-v^fyswb& zP{)t`_~6Sgz5p)=a^Y#^FlKG1eu=Fq(EJ46@zO~=Yz-+u>CunXT-c{bqdnwYTEdZYW;JS^N51XQ{Z;WcS8g)qMtS+@Cl@gI8 zium$ieuG4DB}%Wxqbe72A<5zuxg|Iun2jcEU-U2bTuLy1Cc1nCz|;NLtjBz3EHZl} z4*rPu1p9`RfSL~IcDw6kT9R6iwgD|j2|W?T!RS%$M`wN?p1^;0v}HYX*TX0iVUAZGe3>1qiuiN zONVe7)8#J!{ph!sM^qSEg-%3>rqhixYVkh|mwy_LonAv#aHiRt8J3ho@j%qMlEQUfe;iBbv*!y0djSVhk_Jbg@h1_z}4apaJv~Iuq~cZ2vubeVSsQu z17^ss0R#z<%R=HcNR<@@1`%EA6~$?<}J2xSf-B zBlaPB0F{Gw|ANbv!a{AF>^UTRgzITH;X!qW0!`#Dk;X}y7d-8+LXrAHr%o%`w)RgjwO z#j`sbO+!t&vyvD6YT<1tJ$pQ|;)lX#lNqBdc%ftn-ru|5TmA!XHDkDoXRJLl2B1H^ zdj-4GtC*V71l=v7_WvD zSFB%iQn6(a>risHjeS#o=;;d)Pn7{IFfR|g;yFGWlzZlGcMQcFbhG@i%JQl2xGW4N zZWa>9lq(%M8VuocHGpLa_o=*#u6Sgx zEwrsXu%9Haqk+jQg_6Y8y*%k*Fi+@$RccXk5u?xgR%5OA<2Js4H$TrD;d3#7WhwV- zc)hLJZ)7r9*vOYa29P0o#Qf^)f(;Z|hiYiPww@>cZsj3HhkcJ@_{t>BvtfukdZQJb z-jS;~z!Ppy+yL~>lHk4DoMx||Fe*6l;_qATW8OEuOHrCqa@V0gR`n^AASd_ULvt)x z#rhRj$cV!Ah~-osZ)4*2_dXu#H<}UL#S?5#%mA9=FSfGm^>*}nIKh@D6;G`RmTu(- z)lTX;8qBGvi|C59=4j7|=}MWG4G*~1w@7$M61AUY${U*{~rJxYixJP+GZ z7=2ihMCjFq2K#u-Z3mCJHRZqBK0a#y?PXzlywv4?egnE-dbZv*8cCkIpq4(6m11=1 z+xuBxo3o#b*%8$%0*)WHVid-g}!8Z>alX=(0CQTZ9cI#%dE-nbv)+w zSP?+)?7ZC=d}GXHYL4K`kiMLvOpe#>9A6_w#~AQLt@o+()DTh;=*Tcr??s)rKtze{ zTcM=V;kTFY(b4RNT%B&>F}25H086|_OZ0Ru^8C7infEb;!K zyx&Hi>-a@NN5x6Mta*6{#6uU^2*{LdZ5N7o63ICm&6(ElTXe5ju;flX49IG{Oh{f$ zj6PT+(>5Isnh~6PUU04kuqc0$JN*$YGHm8dIzW1b5H$=OQC!KZfd~(WC1o}7TjNMq z%Cq9m*nALvqOCTtW$ug!-W51SK?~&=!(@fD1S` zBRCfW2<0!EGcWgPs{5^kd@e@t$OfSQt||XQQ$B|0C&{=F0cx8p7wH`)C|Dp^hs5t`7aTs4b51nA+n%m^Zl8vg~Q|Op0ho9-6mOuAsM({`m zpzpVA|4Z@_c$4Ka>S4>P4cMgAy5o@M|4*P*7J?qYMcCXFneNOGi6T$P;&P_g#uEJ8#u0FPRpct>!Y9v+# zYBYH9r+-cqg={?Q$42ek>W~ez$mlY@x9H%^?aT(C|6#7{%PT>cfP{^tC_4@XN>)}M zVI0|igINthO)72-Ds<CcM<(mHcR&YCGJ5vbI|2RL&mA4TEk6ClGLrJ;2H zE<`VVGR&j!X7jj=#(YCFPzpaOUm5PLMP?rAh%T3d^l-=MIUh{(%P?|hNz6~tPGtc4 zZ!yFE9?bQp5sxFb2C`2T)NeKu`oxB)SCV(A*Aut@72SJqf1*AN4E=t>WI5YNp7w#Y|p{- z@O-@4Bsl<(j5I$y$}(6#XMocRxsOlvtMawu>jNhX0lUiv&b>|<#r;s?8cvNtj=7+F zl(=2*?$HFt9&*4rgwnhQGq!Z9aH>w*?(@JOybfIXKY|}_3Cj<+3qSNxKlj@%jS&SY zrq6BC;IoGT%TYj~2o(A<+)pY#w&h8-*<^?*=NC$0&T9)1lDrZMWF0K0_nOY$zzN#1 z2(V=RpEZlBmObcN4Q1ZEw#qWFA}xI?Hpda@yQHqU-cJ|UgX#M3dKvg*?>8ejBv1N{ zec|Hql1r=1p>HhLdzz^OzT={eR z(q8NHQ-a^|k|nrENEb9}F5V#K3LdSxDX!;^EL0Iyq=YzH=YJwzGb&0Hozf}^Y4!8j z@m0bj4WPyTuQwvDIfR+ejge_^rGv77qR4XDVCs_01uzt5N}q-i8w9Fb7MYlx_v{!{ zag&vi{L%Mu;x?lMm#QZ+BwzV>s0gg`zw8vOKxG;cV-Amk;zEBPs9?V-`4wqFj*c-%-DEd8yT|o60v!p zgagjEKU`k9JG32Y0E_p}YkrPF1~EW*nF~g#4|zDu!~K55{UoBv5yk2T)MdR>jUygaYLZCnpn_= z1*LU9kOwI|B;f2V@6%)439nZ2bVoQ1TB3jFS3tRtPo#d{oFtaEV+;$q3J<@6KtP@+ z(YQF=p(t<|0$eXjWT+ygKhS4z_E{zsK9xKWDK8L$eU8OA zvk@@*OsFMpdA7iA@!Z1u|;6g)Qi`!Tj2z3?%;3{40 z92%dbKu$L8nlFQmY#}dZBpZg)<(`vBPW*D>tbIq3#*#dePLnnntUIGDOZw6_LV#Qe zj}lV8L?#PjPB)4`6*+Ro3ve;S6EiPiU6-H9nE6R zHYY_IC>ceu*4Q(Lrc^ zk_`nz_S%}+^Ic&p2#h0#E~Wp>t7!aWlu$~7`kC*YAqV*MKnp)0MQSmS;Rh6pD{Zm7 zl?Ywt*@%^kEdl-0WDG>6--jVOBF6|s9w<(Ao8IRd?;3IgSfD}iJS7}#?c2L_l#-bV zRe|E;0J>5>$7*N9p1)=by{JGk_`HI5n4KB9KJ>Vg0Z<6fc|95{1q>G<;xNcCqiN( zi(5c02^#}ZP_#Od4jzD-|fh?FBaFFc19 z`9#9Ug_*fU9t3g**;oM?9ZEa~Z?XD_|HP00Bwdb&7p}~IcgMFYp-72?%^ylALWah9 z*tv2a$4uVL$Z^n(LzoNAbnram!=hSTgA2)+{?7jCjbK3lo?mUxf`v8;=%%EOuPb>) z{Ed(jHWTMTG>4oz4SlS*Uo`qlVUGC26)NKoj#u+6)W6lr8BM)Ru;sB z7PRs&os?w@w;*||2odVU#ymM;O1h4&h%Sa+OJ72y(>0>aGi>p(>zl!@1V=5CnG`RE z6EDJB+IwFQUDmD8o*ZQi)(r+>gdq7)SfEkbe=pAmJp?=)3E%=l03~XQv^4Pv`g1tgA&AdYDInAZ{@~-}~CH}|1 zv168OmZ>HMYZ6`|CEh1!Te&IqF<2l^4RR$dJ)Iwk>{g&@X~}!_?URMn9|#GaJK@HV zrEVaBWkNi4`Xlib1f0_3w-@_ zE%9SHz@W{?Mm#ArLyYhkwD6lkDI^aiCnp#v;7PfJmpi(ekt0YvP@OD~ym+BWhzbC)F0C-{=DCr{haf=6gAL|m?ij=9a5Lj%Nw;Y~O^YXK zK_4%zjD9Buvmt8H6#N01^^X+=XvKvPC-WhNDCJ99o+z4-NQT2{0tH=3qw9-p6(D;t z_qfv_b`gZfq<*n`|EN3<1*m;%v&ru z6JjlzlPozCKUq_fL7or3@-auqb5Qm}VmHzwxyw6_#$2A&GrO9+SltN4Lre-aM!us^ ztOD#}H^58tTkaQ=+`@BX7fgCd0r3ixKXMch+#tsDxUYV{3w9MQ&8z8ne0Q*r)YFsF zDb(TgsgKqBpC$x+=RrUxC#Mq`s$IAFQ;kD~>Ikt0_ddplf}VYF0*A8WO5&OZ@4cTO zmeWJFRw_3`0n+`n19`3lURuGqQf)Coxt(yY4!C6x;HP+zg=!ECcuwK}Di)r%=EF9t4 zMnICwd}g5gP6$x!Rim&RgE&pf9c-E@r}cI}mtjrvo5i4wo@V`nFpF1CrPIP|Z6)ZH z^vGF(93~WAdHc@&lPmu_`|!uUN-%1OWxRQCrNf&gAqej>bYauC z145qF%3v^R)?W?L?ophsd8Kb5Uy=Ykqoy#VDO3SmK@2v+(?d#vfMjH(8YtvVVs%xW z#R^MeC}R#Y@{c^N7!vIUBjW-uW$cLS(MmC`Lycy)qZ)!Kt1nXu(;6smeL^5HmfMdB zL*pI}8(mrPnmNE-b?oswS^I8z7O?fS%?mkdC1Qi)B5a9JwR*hkO~Up)q(tUl`>OjC zJI^o#a+V|rtaaJW?8N5D!C>8o&l@fSVq+GKjM4?>S@94ILsj)oz`{=$mxo0)nm}Pv zgE!GtSjn$$!5HmIJz<;sI(qrIaPMQDAoS8IY8VPbw^Ft}(Bh4z3;iY+le3S<<@Zo9 zKmGIb(4pKor$RIr8O^yO=HH%IV#Z=I<*Y;y!7d1n5DL+7&rrDAi>CD|@!b4Uo^)Wc1H!@Fk)n@}@8@z@WHe#e?T&abuLAa6@VtIEFY}*f;faR;JS!*f z16ij*Rbl`E;q!b9eG_B9 |7lR)0-s{mg2O3HMdmY=(cW843_HKw4t2swP9%s_&L z2Nl{$O|Pl};3uH50ajgB_G3^mdNt6jj}4a<8wbNX^U6gxr)wx6bZGiIm_xt=+Chte z9?l-=wyqF#|P9;-vvil2W6%YR2H z|G(VSG_?O_frRPR!i$H$F;CB_hLKqQAUuZnHHw(7AWLS|!$hKpj1%CH&OZ{+{Bnc%KlCc_16O)jn7_};|KIP~q%pQgyofR^!i_x&Go5OF)EiU?J@o10 z8|>Sl^@lPoq?*zoyb2q4@t8u$p*;Q?c z^+{!6k8e@-)iSQl!(~sCVcwY9`%We`MXo~-(fqiTw@uCMf8LTs;kMT2v_{AkBljT# zM<|P9dz85IhSZ=1nKl~RP$8DPqyuw65FL(ofRNQI8Ltu|xQwiybOhSb2lJM&2g|c$ zmo7;8LZ&YvFgteB=6Gp@ICCXym!qpt%fVKn_G74T{b(Eo;!RH9WcEmy; zgt_G|dUZ_yiTq0Ycws0BSnWz7W;0j>147?{Or%+o76(BBJ~+Df1g&J!CfA^vkgAgu(Jdw6A_(Vv$u>60@1<*O)isk!&$x`2+keKi50 zF%y8Pu{&BFJk^%T5JY2?8u+ zL_FmTHu|yxY}_C^HHSPSGvDKnW)-UyM6Mr%D{#L=qhzHfgCFz?k8Dpq$3S@pPUHls z=3bc84gQl;5aRLDTG(iYUPw$V1n0k^VISn`%j zN-C&?=W|9(v!v^FNtg5s_J!J~bhcAO6NV6Iu$*ac@aSGX1iY%1P=A|q#WSGP!6)F#UYW>7$bQ5MYsfeKI1d1ibF}I`SE3@-n zl{b41zy>hCAacLm_5c%cf#Y3Yrnb={OhZIdpHh(YdgOVnH<6hF$ymX_x16u8=UdWW4LZgD8nI!<`+$F z2l9r#U}ybDqMAh(-3jq>Ma2J_s-&L2OHc4r#-0{^=J^VPIN30xN;i!`~ItcV9YXY%3A zovVL?z+#GY+57ITq>s|{Hh(L>6gs_!RQxc;eG+(W+n7+ozOMNE^vsDJ2T?>qLK9yK z4P~pK6h!PlnqR}vObEVw9_RkV_0uWe+I-LD*QL-kXd`9$TqNnp>@zRn6!uqqZ2pI? ze1$Q1vHF3dilYL^*~p1p{z9@d$N7NST)~C@WBFG5cpj_zVqtPCW+h7~(`-TBR;w_W z&MS{+oor?a=pf03`Oe=S_~9puc>&cnUTuaRf)ry+(_t_+?#cbZ?Ls`nziH+fA$ z8Ke-yVGD>?yMO!R6mX(Yh#)WbR zVFwBHVdrpX#Lddy$^aTf%w^%bVOivD?)|RJwHLa#K$1su9ol1J5(k-$hDWn0MFONr zz$yMwzvDK5o}~3La^hvitK_BrX|;NH2u(&E^!JUQl`<_L zr!rX^eK)t*+cW_A8wO;#3)>=5LzhOjudRL#O#`gpcKD5sSG(VL($S+WxR>o6mm z7kLO1-v7UcM{dg)MB~IX2@*611%+>R0_WLsfYCEK3$h$2v9o!%j#Eewe%iRd=yanU z{_h5U*5XCCFrmc7hzwZpqyEdgZ063a8DT2Mj2whB@Gz3$F|-<}#^EStea3fxwQbBdkvx|sk@bU7L{OYz zU;ZZEJB-Dn|Lx$10|mk&!)hb@B+W}CC@D-x_LiCia{SV=ymC(m(uNT>q)0%q$_;+@ zo86O7+va^cgaZD4Opy`kA+-Rd+&$pR{8*wIsVclYXm8bF!V`QuzTdvB)d<%`WjGxA) zzI0E1TBrB}FAM(2*MaYU3HUvuP&9k|toZ-h4CEK?Vw+EfDQ20jdl~pp{<#eplya=b zUw)BBz_PVxFoM-1aXXKj4Z&~Vn07J)xX~UJe-R(G?t8?4D1YnGWSWAQ;(oDxn#C4; z`K3fe1g^tm;8gt=yRg2epF78?H(g|aVb6ex}12O}k z7^k#?&v*4Jas$UMflg!q%g{fLD=pK%Qzim^w;%+MS%zY1Iuq!ox5jY&J9`OI=e1*z zLHZvZi51-~VE{ZT3wQZz_elX3-9D!qXi*I_y))=uUCb~!%lbR>&IT6mV9wBgReo%H z-Cx`BIe<~NEDPI%B7uf*K`~Ktl9U`odd)kQN4n{09$Wde#a-=Q!G$3x%}*9-?&u?c~&+yfc;ybxI!fJC2C0Psm5rrMZ+cblOKojCB#yRdYqYT5Y zFr6+1;+uqDw}n3C4t1FlWU z!w6HD1JR_&-wgqr|FMI5&|>FSMx@Nw7;h+;Azs|6#vE>FbGy0d=9Eov#-@J{-$eiC z$m7LOTlUoKy=Jm}T$fNO^Ifiwu3L~gc;8y4)p3m7v=Wg_kB5`gmt(QPeJDOIR*}bLg5bA0 zgo}4ZEd8J*eP6>F+o?l9YE!Ec&hHgEM5_>76U=IqNbS49zF1r~I3IB5&m3T3MDtia zC*q-yhX(k4X>1^uXRV(g{o1y=VP>>29-R(TI)^1kL#G`46w_A(CZ92Q1KP+AZp#F3W5*m)bIw?nsms1DL zw}hg{)C%~X{V@rBs&PNa%&4KPd_xO87v(c0kK7g{0PeIQFQHbyIDuO-ZH}$rWG=)Z z<2=_2mWfJ2S(8k@*XD2{84aX-GBfR-9iEGj!N;i(fIt-=a_~DhbG7BSi68|W4@qhh zY8is;w=3tOe4_k(+F}H{7{Oj%qIdu{i60Uj#$_#V&DZ*24;?8?c-%%Q#>AHZ@~nCB zj2z^NWFM=sGCdIj`q(=#&+VP;y79BJJ0Gj_l|q!ATRNVr@{RO!ZHp01vk@$a5Ys3L z)vJ64+4R81ZpbnTuQrdeSDzuJvQJ?HbYJySj_iCM;EdnK%Elw944J2vF)vpa-5I>P z$78JAfOv+7OVN*;VSVj9m0u=3zqXW&AIiIp>{mj_ddTz@j<<)z>YDfj$TJ7&@2wpqM)4kKS$6^51^zYz$o8boW zZi2`PO_4$~OakG7DKuciriQXtPaa5^9nxdM{GLA{)yP$pl;*jtUt1$XwzF#0WKfk} z%6I(o^8Fq8`*;J7sXbN$n4A7sBVOh2!hVLXTuvUw4^rcDKz_Op=NY}vgN_6aW$b_4p%7!N!QXmUS|kolUCaoydiHLy`}3>+haF?x#{0-`M`y_R)9-~ z2sKHBj3FyIc^1XcuG}uTi3A!HAZubdCs-w^Tg~a?EaebO)7;c`>}Z(YuApa`oY6`qIJ`YHf)VYw}ra98DM@Epbk zhn&0Z(o>~)Yfq&CSX*)gT|z@M2-zEFL1ag?p8rnRsM9;l*GSEGuM0HGbq)(D-UE3T zZ-kP_W4_hS{RDP#TmAvg;fD$yPkX8jfSdj`T*J=JEA6NyjCv9Fu%urV|DKXJZjy32 z^3aW>F`-3qYsUOqSXkEXx7*<@`A1Kmw{Nv)#sIkKUvG#Yc(uv@a+CjMUv^dRM%|Y% zu6XJ7kYp|vhmyW;g@_$IXyeR3uz4H59rvD80q4BhGidufd}7&rdGA?Q_E!5%`OR8>f%iO(00000 LNkvXXu0mjfOp+w{ literal 12137 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 diff --git a/selfdrive/assets/icons_mici/offroad_alerts/red_warning.png b/selfdrive/assets/icons_mici/offroad_alerts/red_warning.png index 6913689a650107a846918c14a6f27adb40de2196..a726f528ae773cc938560a27f1caf5f6606fa9fb 100644 GIT binary patch literal 12124 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:ny_5Z&pM_WXZ^$TnW!#1W1v+ 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 ACjbBd diff --git a/selfdrive/assets/icons_mici/onroad/blind_spot_left.png b/selfdrive/assets/icons_mici/onroad/blind_spot_left.png index 2f8cab958d9aa91571f3c31d717f5ecac973edc3..e50c22c897d344582b139fc03125d8418fdf6ad0 100644 GIT binary patch literal 45297 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 Z9|0XZjAfIoOMCzT002ovPDHLkV1l9hE`0z1 literal 40406 zcmV)IK)k<+P)yH+TwhAOg8WNkNK=ug041glgsF|MbuIlQpIo3E;u0R|*yP`CS4E-zoce3>Ute&;(I(eXGQ$K!Y$kK=JXj>p&C2y{HY?naF9 z@O23RZ}22UOygs&9k#(feCnUYROav=rXkz%sP*^`d?uTh{bb)mU+1HszwYJ!czi8~3x>Q{T;!Fn8x9L!=fVf&-P#7r*ltLLPWjbZ$FKQq<@;>^zWk{9 z^quqH8xJ3^A7}Pk=<8&ZbUeQ1BR%?awTm^Z9r0#M85>w2*_LJH8lJL4qO1OK{tPeZ zbV#k&HD5=z9CZ1rt%HUiX5V%FBL%(0)0eNa_9xx;r7MBAYxZ&Vsy!L(JFX5RPjDcv z&gFaK)vNM*!quzwqlEl71JWErl&{suak9gOkX>^KH-tsDB^5pwn`^e=H5dIM(MLi- zAGuP{HG5xVaE%4@W}utA9i}hwK5t&p<(oH~=|>>=>xI5AH$frO>(_Z7{Cdf@!xX|U z`?{&$jqmmEkYng!SXaejP8QLy~641DpGGTt%gzC~7Pgz*6uw=cw7Lov` z!OPF_PH$Wmxuw@efu0*gx?zGWgXb^ci!b4eNT!Co7^U!Uqx9QknGEJY=ppXL<~TD$ZPth0;&CkCZ_#LBPSH?u z1;Irq1a}SQ!-eAJ&1Su8N@&iOK=b_Od> z-y3J|y~;O{3I5GXy6#f8ujex1zu_yhn;;$EI&RYF@~*H)_7xL`*ONl3&TX1&ZhOKV z3;5UDaH>zm*o?SgOc!#P!4J{SmlWSZ2y)>Tf%dW92y+^jO`uH+-{a4{_eGw6Ro~va z80g+cq%#+FKle(WpYi+#|G!8wy_oHe7wMv{z_!@WLq6b@7x{Cq^1fcwABLMkzS6!I zL!J_t$%GwG8i6zC8UelJzt!fGp-kj-ro)waTJfzE^kV`43P%fTAI1CPBF;auF%?MS z0=-W318YP-v98O|&VU+8o=m%b5SsT@737T#5@}sw!7N8i65P^Vz3@EImoUT2C-}N< z`hi^F*Jd;Ci#}aqM)E`*XtmHEfqk6deQ(%DF7nK27Wgd|_R}n|ukej^hPA&7JRpz2 z8H_cZxWMbWT5e>q8BEY~&7Pe`0_{g6~iAd z)0|;QjmExk$uuxDG*2N+4_TvL#7h3Nv%&APAn&n2UN9-$-3)a8Jkjmjyv$SL>GHWi zZ}99Q3+?`G{>(XExWoH8A8Ca@i}^)9>V4jBv1kj?^6i-Jhb7+T#KkDziz%c&*X};% zwfgpznm+XTf=<1=7K0ZM#_bFlHl5e#vd*+Rne*za9LECwCP&NlEs*4Do9fG%5P3ZF zg`L;h5O5fB=`o)fg7+9h115+-&-63Uur73~RS+Q-q2}e~T7~%;7TW!@{N7#uf0pR% zUHbsfAKc~jr->Hkgc;l7eT-d(1i{rjs^TpjH6xFfZQ47hv7Ket;S2nffL^*x<)oSr$0e_R@k#1;r&WN^#fdxkj zUqC#neI)iHGZxQKXe_`D+ZNEng}T=1GJo$P&qDwgaSSZPC!)MB!fo51--*5}Iye>6O|ow{z?n`>Z?I7_K4DypO~P=N2|`X+-93~d8^2PA z(6Ouj%??n1NiSSemw8LL?JW`RhqfUM$Qyx9vrr2cy;lg02jSjitqtLRV-we+pyF&n zovNUK7cWDwJ12R*E@%g@`vr|zxF1H|_CX=jd(@%bhXtgPJtzhB>kjo18bG=atefsK z4fs&!XGv78d70tE5(_3P(lbke_V}&YE`Mf;*Yo%E7FlC2Mw;yt9t$!AgY*2-B5%X5 z9)GB_SWuU>^o*eW8FKLZyUUTf{3@Kk6Aj9*2fAH9rW7dpy~j z@OSrWI>j_5*q3`OW*5NOkN94{sZN3m{P|0S^A^>?g-pA~K;SCO8 zL4VZrAnN>qE_eAxz-LR`xr;JOlYKTUmutBpAnX&s9flWxF@Qvo1-j2zeSbR&L$k*W z4d9H^j@9kDp%zJvP#Du&%%N{GF2CS0F)J})a%Y_qR~}=V6_0Nkj~_#nCyYm)P;uap z8kH&d>5gJ<5AT2x3EB@A7s7p!l*3l79mIeX&0X2!pEY+_RR}Uz!K)+C0eBkFVh}s5 znL9Mw>&S9gD5$s3%Xsm7V;0ea16@C3*aCP`9F(*==um}ayvMI%P%<{>eJ$tT z=MVN3#w_z^d%OG@eoBO0el07EnK6vvA0YdlR2|-n9{Ungk)Rm?Tkry8!BcAI`5<0W zA2=Tp2lKFjEuc`Hbix>B?)~8~WEX?p>^O!fj~TALU56yzduVai8b+!EjLE6%YEX(X zbpz~3AbF;5@R{ZdO%QIdBf>4Sh(yJ+oh`<^C)IeIK(O%yScVp7Z3@9=O}$U5t!FHN z(9$y)ktR5^L6AVyk}*uh0#~xe-s5>dn!ta?3=I|rf)L1l5RF-j9B^a@CI*C z3{*Qa_TZa^p~@b#I;&3B;QRbepSAh;0pA!r-($!!;_n;Bnqighd7q6>aO%W11)NFC z%(TGE`hd^FD@-R!h=Iq%TmmN7S!i(yVW7sQp-i}sgo;ld#}MT)<7jt$P`=yarC-kC zNZfhTf3bNo!q{5n*8@0fHlb1q(b^ay+-AhVpu=?XPz86otXg}T2{P@gc7~vWW!dBP zCBI}DQ=S<>$oajQ3sJwBjP01paZD>aER6oS8NvM@Y09j}4D=#Hn34sZ50v&7!1vdJ z*MZeBUFPM7a#)qHFQXm12^gDKEa;1O46Zz1TL^)&ET@fSf%`u>hWI^k2wiUiwOE-1 z%7WE~Ls_ObF^(b1lLoYQY@V1Y2?3APql9}qGb$n6J0{$~+ZWEMa6_;cO><+6nWvt} zwNogt4|u>(AnYkzfM9nShI9vDHh5m(h_Wtte<7AsjrjdOLlJ(j9P?-Ug)Db@zRNoL z01#zd$a2|N$U?k~?eRX1bYE3pp-uNdzeBM7g0eA7IKI6i9oIb^GfVi%okDL=-fEG# zc|aE2fMA3`d3L7C6alVm@KL{FFFgJ(WJ>nj9ff;K8ggBXu3zcp!-*S4ER5 z0MOH3LOLEtj#kWx!xAtjAGsNtcx@k-iWEnJ0SC_eSzCRYwe$gNZp1)=H+JE6I0EVq zV+tb=Ut>J>bU(0GRUUh0QwTAHnOHN6P>*f7M`BJ^OwE-nsEi*($bAX{#(WwO_=&Es zdMuceD4zp7sU{HiD6j>~*ap)$W+5EZg3^7oLYBX@%$EC<5EE z%Fdw$p6)ZPxX2iL_YPeD>goqvk-#lc2Fk2R;>L=)_95iSmCwuy7!_l%koWntSo|2G zJZ>af&=dxk6Uks;bOVF~y9CS9y}VAbUa@!;Pu;_*l7#1Bd^3)pV*!7}5UCD!QqveJ zbK;r>DrfDEoL16n) z1#t>^Inf(I1bPA?E@X=9+F=3iOgkdT9lHsrTPUFEma-1p;j;_T_R+N)!nemw6cx`` z;|%wkpo^!K?Sq3wy-5pDhs*lgfX7d;<+-@6H@1fyfcH;AZb=#L;YBR`B>L$muOK@lgfhxR1!U~9AJ>~uLe0PfF zDBDcCIxpMdbKNM*#grjRSJ!vDHDhjtEIsx}&J4QDCY9`^>_>qm0$)b8z!pH3lIg^_ z&+G|r1E!@X7EDcplT10HBn#qKEJ_j4i4}j(ty>y*zQQkuDxME2Ps%IiAtqBcZTS5p z$Ir2VA2Hhan;N&glvP->N9lS<3;?uu`FxS$wpWi3ZWxmf*_b>>s>uawQ%(hT#Gr#l z?#km@H6-8zj6i`cz}el72sxHJEWi-v%7nXPHvp*j0`ED8z$-c>c=ec8)ieEZMHd{n z3c0K|VUH|)n2%Ey&|b86YB5H8z~uc}DMnHZj(@=B@j$nO_fyvMs}H`Mh1>(S5Sh5^ z9#8%rWDrT3oh4C#Is|PfLVhl$lsB)-LQfwnehg9OhYNKwE-i@xkIL&;4sUd@ z3bzCyk@DOS<}nL5T<&n-+?x|_Xl@8M=s!S!0j7P`;1kx`eF*wQv9sfC!Q`yHr+_5T z@KN6%PjQp5;PZSeJ7y;8ync>FaMqDmD0y#KKkXRgDD|cxg(?DK_`M!~$CRHKlS$Fw zdWS60U=+Ng2YN#y1_slq{mueVW<|OFrAm$Ieb9)tGE0bi2TZ{e5T0N0oLz3tublE> z`ym8W4-js<*vB({eK%%vKW)zYdimKU55zsI#ML;{Vj**4@nw6}uc|F$6blC-4 z9qTN>Ch$=45b{p!>OSm73DY8BcD(^gd2$HOpO_Jf<1`+9z_1D&eXyuR7@+=S0>8f- zixi)J22qKYHiz@HbY7oU8>Hb37&lBWd=FWEBQ$7i}T6?(q`s?u%> z+XmVj-_^rSWyWcT@xB|Nbx&Cy7{56768!uq$Wur(IW-y_1MCW(W(Y?(h$_@zRrZjv z1cRGz90a1du@350V(BrU#)lT%W(g5bS>W?nz_XE<6LBht+p;NHhHy^zTtdU3-Ux6b z=&n;{V6HGU>9FCsxTVl!WPGsr`wGPnn+|pb^r4(+rVkG+Bp6Uj90iti3Z)@2 z^A1(kNz2P!(e1M^<)^7+d+f=~hEPu$ni*5gy-P#Y;LswQ*F!758=Uw15lB>PAQg1i z!D-gowF>q_c3~IG&{QO$trfE+C)kN|z%(F)d*qZGKk9217NPxmDkL3&2}<`t2#S*5 zXW^#Od2*i0IyTfwn23Cnbb=&^R*0PHNcseM0$9!O6)-G2cJMP&!;qJ&D(ZHn8kR6X z@qHC|msur7Ysu`&44QmeiCPS7+;*mLCb4X@(OLKT{V{(rSRf1V!rqqm)O=l8iu7<< zV#p{ytR>F9;wPPC_ag|6g}l0@u_|!>K)xk@YmFps9G9nw8P{b>C4?R+<;Mb^4|nV! zMe16}ieHjupgf02L8h=ELf=ZmQ}&&pRE9&P4{<5+woF|KcULm>gJ@-%^Am&=JYLGaR#w#g;%Nkq^yKX08@BkG%Q*A9Ug6C(Luiwu? z{o8pTA5uZ4HsI8wkC}e+>b1-|v(Sg|3`L_tWBf4bR(JUCr+B+x;P3l+d4jOPAkPa3 zdjz8K+|+5%5ZkUiyqIMnp);B6XU9}6fm{eg1eLhI&zmpu4Z}~bMONVt0N+kTjai9$ zR1#r{SeZ>@R7hR;GS-{lB{&>U*ASm3B;{DZv*86Hlb1~5PS$w-deo8+H#C7^W2VUq zo9xh8-Bj_q$E?ZZBx~gpK_CjelyK|_W3u1mM^*<)0Se9@o6DV)p-^M4Py^45%IL0m zU~fQ?;tw;&{zHt%pV1P<*$>D=deb`p6S6g-=^K&9+d$}R`az!k5NmKYmy7?4kK*t1 z4HX2c0NvC)k6Fbim8zHB8`UhC3cq zmlWJNt?S3;hTmS+$8tA@ZNhvicXOD9+1q%xkVA%ULMvsSv~#X>L1n zn3%A)3-mWP(0LZ-KgnBf_F{5Q}z6n~<%yIp%5L=jz9 zNU#u{E5v}55)Wov78VtV2s;fz>IiKnj*yXRHup+a22BLMfNzdPa>_u+MWcs5%P@AlfQ)icFvxyYH8*&I%HiJ!Tv+ zDiSL`jGmMno&Z&jHF!Q;qdC_qp|MvqCIVOx_}ks`FfM&8SjySNUU&>o7cCNyRJcov zFTrCRbRb@MAFgnX_6zD(pQ$DnuOskw@i7WT13%;#i|pmFL=HJLxZH$xzT8C)X%hBM zCm^<y#2BM{@KVpx3(8BN>lR*xQFwUm!4w} zC+r%OhLgdbVni59!JsutP9O9gLf5$`DCuJXx6v-iHbht^NnaZPzf{175Idm-C`*2n z!fOfbE%in~dp*=rY{8s5UDn*C?RU?zZzRsT7bK3PLbRVn1Ue>{P*->)<8#bwf2k_9YyO2S=9BLgLdJ2rt(aOB{|K zw_JFO(5y2-r+Muj8rMe>a-uoG4Gq*u@9B#4nGn-{{RU{@%pVmmDY*FV%x+BFxKj<$ z#czh^b1KOb`ul;yyZl0pmPLzGLFfXWc%z3=>&1~4|HMF94FK_1UM1-SCu5zo1hqBF zl46~YRp7@0-WuB0kEB`Hm7#SkSSLv)Mx+~@JK(y`gilq_+4_WGxx??5SVlL;Qo6()8uSe!@%}u=L=87pB-y074d4Wsci&C<=W%n3DL2Dw}%v8Cl&ORwX;SkeDfmy7&b%-mdARJ zt=t1DPeC(D{SxeHKuO3^q5;qZ7ai2vjPzCGrYUtAJ?N@@e+yd|MVN2N*Whnx^<0bl zB{fwX40R-?g>uZ@{Pu)U!rU9K;vJ^gTQ#whDQdu%gb>UMi8&X14lQn)Jn{c_9=aBg z1*cfoLTV>gI24hWizeh4o9U$M08Dww+N6NOy-M*(u_(s^K0o|?NiLxIhdq3AgI_4S z<|U0W5;e#d?=-xY3{A+YL*Zg}qh9FASp1O8nglb)RMomrC{<{Vp7H}pd*^~auc;5= zZ@Zjn-Tde0eq(NI#<}+rb`P1B56+e2z3)^U4)|g5F@nR*mVjMR<7S^|!UieQ%@^i{mEl1_|$- zntb7R1ES@S4d-ZapF}aBkSL7Jkv$Dj1`cD>A`AfyaS5c=%Q|H>-kRfk#5fjk8*({g z)EXQZQm>j>4BhCcVy^(5gF+^F&X^9l3#3m^l1I6|)7!?c08cMneQe3kJwKuJ! zogaQYQi~tQqS$C2bACauX#Ypl8{9%pAo}Jo{$4$gs#H-8Lxw7-|1p!86OtN&J@#5U z;VT|XHjqM39NkHi1ACK225JO{3VhYkM?Muxqz;UbaPK_bCk#kUNpSP(TM05_T}_Q1 z^JPpjt(OaW+AiCVtjfPzju^)qq?Wm4WR_aANN!q$+QN&9@Pla(?jOH&GLDk43|@S& zpygU{PWHqJL}ujj`98(xYuk)@6bmvjy>UaU6`;f$;)5;?gGNanYw#xzPjm?(#*6P;Ek@h9v4xWDgY-Y=!;u6bvG{9EvsphrxqL?_A0KOQ9~uj; z4j$>$z|)`Rlf2E(#%Htbq!H9vhT70Bh=>CN0Q`+~v<1y*7yp_C8`V}W4H~`&W`VUD zG+U4$EHlVR85!|rb~M-t0xiN7R1HB}2U{01%?%I zJ0Du_1b_Ay!Bf7saOd*3QQd=BAe2wJkI=p1{fC4>kJpSEppkbvV ztp1?YK5_3EI-voBBX1BMOhmp(Tao*WGnYG}eUN9lw68U`p_x#tJ7jSuNd1yRJm&e6 zq+z6vSx%+oMs|=^)}__6e}yE93xb$KC!&^vCe|Z1;C_K0{lCI+=>acWEMVavqPf12 zv|Jmuk^G&)z)|h2Ss8W^J(Dl04FP?PdlGViTVt4QzR=!h39KY+zFUss+G7xFw|G(c@Ua#I~x*u_ImIY|l4K@l);kFwKrzPZAMa zD{us8CD?nW`<;*qyvSIWk`Ev+RGw^=MIlq9Fp-?=9d+67Tax#e*n13`_L6rSSZfZ6 z1^jWve~ty*F&w7Dyax3;DKB+NtHokG=tPM>IdBcLqIrgJIiq&ATrA{ajhgbsi1`*R zZl%(s&f3f_c-d&Z$Qn=*gR78uz?|}HzeY6L{}o|G3cwP+8=#3BAAOO8*VokvvZ&TB zuw9*LaO|TlWIfUiVz}R8Y;rGViczr}NQAu7coY?C#nm0V;hh@?P3l!~-2s;R2JNY_ zjvGU28g4Z=>rz=^eZ@5!3qotdg}mx-_6!P$mY@b z3G|?3?~rOLFQtZont*{CA*hqK2OEMwt@E^Ua*YI|0Hd@x*-{uOhYy=b(#d?7Yny9N`fg%7uF=iA!1Y0j-jM%%VJU_yt3u zpX(nfBzo=THIftgK|Xg|7fBpE>e?u@o&i5brz@I6IJML;S>SzjqNW5$W(%N4S1CZD zpl6hDDiV3Y1Ft^&qYPhuuuaqD{C9S&vaW6n$huYyEn3{*2T}9B2yl^Ghh&)B0=Ptz zV_uI6luK2Iq^>gsPJSc}FaIM(so}mV z{R4{)-w%=k0VV~MX*|j2wnV=l81SHJqt#1^qQWH*4rBlwCp^5V0scGjtgJ1ztgHlDh^UiU1VUdLG z;H#4=v<5LC@HI6!Tm?8cCaHlZrfDr(Q*S!RIBvjNUxnNd4U^J}G0%DNM3&>tck_?_ zsH#jPC(S~FC|$s^soEi4j9*J-==nN;VqhE&4UU#56Wi}WeOPk6E)6tzD$4n2Pv)_J z6E%-FDU)nPexM;zUwI6EOrF232Ifh-_7ijNpj0rf5n`Qj!TMvx;H3ptA+pXP35>9g z2{-uSZvR6nYASyXOG1=lz*|v-NyrzHP-7b@+*&AXi56ifyRknGOUMjT$KC~HnBBh@ z`wW9Q?LFttpMS~mekj3{(!c?<_t>i7LNgaV-CMukL|h6C-`DLCQxBMeQ|wK1L4|K@ z5WQ~IXQczgx)uV0fZGjsl#m|_IN1Xh0}#bqN(&D@uoJqWUd%n)4jDXnlrFRO-qX4| z;+>x@==S@-nC#%0n3D(8p!CSGI(_x5xe%eV+)6(y++K3!8%*Fc;m51fS=1dAMKTig z#~7wIJnqa%Wjl3)G?=g}C6g`t4FUlVjnj^i@pLU2jUbU{w)X=gQ`Gs6a7BzpK##hi5Nl&oG`P#;z#K$18yQKUZJPW%^FmHBgDPfQV53rN zr~sWv4fCmfNCM6<#!X2L3~4P+O3O~Hp1PdtJGwb)K!OYR40|t(@6>Jx#~S>R!{bo! zs7rn4*Md+|sA47RgS2uiq6lTMmJt^{aN{Bvl_=4Jh?MJ$V`>C7ol@$+;9V9lq|}LA zklTksVUxgTcw7XmXx10qlP#k%W*ECjz`DWZ(S+KCJ7k7xC7*ZZg+CuowqTO&pe5JM z>RhNkkDVo_R&s7l)xnjRlu0AxKDs8H%gfEWL=|pok4-d@g$94^Ms_5_)MD^hgFj|S z=Pn4jBs!3_&mirsjxbq7wjmB2{brJ_k6X;xf%K>JBk5{L6GT~~$=|uxgqG58ZbD_o%FD7NYw`+GY++Djo4350f9Ij-O zMuJ4Rev+Y+Ezgt!t!ztapF+x_>(>g5eS$@_MOu5V7bBEvmm%KdWAN?=IVKp&`Qp`fS z!R1_-v#XP9{gDbiY)lDxfYMmew-&Yy23FcF8W1IoEBYG7*p9Mnk8fxmJRah8$yg^~ zlr?=E(#?Y1^!(^#t{CWKo3+YmX&Y%5gN@AnJ;jgUb|Fw*OV0uppYr1wLOw(AzZqPW z)cUidV2$_i_P^v^{j#v^q3Y4OZ~F_3vCpP>?-bl*vD{eI>Aj1V&wU@evwuMaNZj#; zza6$1v(o9vqlD^e0$fB&4}yNwNRrxu#HGAv?{~1_`<=3Va%AQnP0EfZ{%PI^q!usz zLGZ?w(C{m{*`#(MyX&i}rQ$fd$4cq<9XZ^!#f6LX zl4xvrVpZl5a-hEr&YQAqihOpZzPLh`jtRdst>P2s$q(YLU)BWfE<+R)$zR}~rfp6X zgJVduSd5_^V|=6r|AvAnfFo{cN6OljqE+E`;dsn8h`3`mr z?p@pPL!m|molLEp_=Kz*T+n+G12At);UOISXT!XhM4I_=eHo zqN$N26J>^BzK zKJ3GxIXRj*Q8!Ns-#%?X)Jlz$kOUkz3pH8}b&`a?z||?!PC`qfb)cNgCh9? zYz9G_PMDH_Z$X}BrorPKtGk{J(csqs!2^9f)>-HP&5w7q2G0#hv9k4P-<$>EP=l5q z@OFV{6^Ity&=U8IB1Cfc{<-FJ;=wd61L1|69-3%0vJLnO9$1>z)bM9%yfB7bP-`=S zFjELcG(j&+@Jh3JjivpN3vnMIC?D15@x!tkcwZ(Idvkf7${$xc->+9EBJor)L9jCz^ zb_7#9qPZd1*RBqasFA>-WSltm>-GgJKx#V4i3=H57+^5 z5>|fnF2$5I9HQj90%r?WNDU7$Ih7~w%{ z*Uora99a6AQLkDqj8fX#YN1E>+9jRB$n<1~$6)YxjDW}H!QAfBAS;7PK3bDpr6#e# zPY{;97Wk>_1)W;A4?<%A_njxnq~F|5b?zkxGc0Kh!mywvA}}E2VXRuJ*NrWd;6r%v zPC-*K&{UZV_D0e`)dW{1AvOckr?!(;aUQZ8ptfJ%G89eN=ix~tYD1O$2C)r9U-;*9 z2!!`4N*FwJVlxE?4k2gZE@t-RvKHdSMB~ColSm7F{SptA7c9cxCC%8N!Hox(?D}3U z=UyB=*!GB~yhn_8lm_<}BqFe0Gb3HJYeA&@T7Ih!bs}BVuABFgwKw1ix(^U)p@1S} zs3O@Ve8PA5LND@r0UkHjHqyBP?f(paBghK&5-ub%c_hJj8mwG|@!zEiG6oVH@MzcS z4w`gan9vHX9ov{XDO}senUMrTD7zv2J!)Dpy@6iklO}Z;OMcu%$WU> ze7x;3xG*C)^9((b)@I>$%&jhXvgSpGvvnga?&Cw+l&ow0JH$JHbKM|Kbdct*{Qly$ zWqmJe7Y8YI0BIg676+`Xr2ZfY4)6J+xvN^tda=ro03^B64T~b{D>CMSl8`4)VqqAY z=ummK7DJNZ0*o%wniyR4aOzP6uf_?O{Op;50m#JWg>Pp4HJdj-N1y9ON89Sl8wz}?|GPtx3lxz zQ4Cv~KqPm%V{muV7j2=EZRZWdxp~UhQ8u3$psn@!=i?FUh#C+`&Hg);zvWLOb?=n3 z3>!d$ceMrXRiSXBv`VcVS=ov5Tz5u~JH4sL=hs#Pr&l*GX>&>-)1pbyo zqPOWtryCmDf^AxfvgxrqY=01sHIHGqay?6ZTF*9O+>Ks5Um|5sQXZxmK5)?^N;cI1 zA6Xif`b(NnP}5wv*wS1T8gI^h?T>jeK}|qf42iy}%X91pJxZvL5?tHY{65n>W$(|6 z#r*gAcGg|!#+Z7LeH9=JJektFCnyi@3LN3GAW_gt z{hXAJh*C0wJgw;PczX)Ckfsazb;IVARY!8oeRI8_?Hl?TICrG~ z{2gsFh2dqAp~3fIxq-W7hywf#tqmccPqg(Sn;IXYXq?qrK~&Z5Gzeb=~J>K5;ikswK|6s>UUPtk9qo4jFU;6RfUl^-ZL60fc*O zwFpTwd0^imf^dwI3F?=&SZNKD#Z+iUxaN%$R{^0$8&k`EZ0V@vwy(2o&FSORO=3?9 zYS%HO_6`$W==+I{CXX%tFFPiDrlT#uJrQok%W~7A4H&7x%g6l1U(6i`ACzu1bE)Iy9Aal`I22n~2 zu!5Ez^%{ucbqGC@(5GTw`ZL|8r5k9W5wMnXW==ED8<~fUMmns?X-?VAWB3+ZlCv|} zaimc-_*>{r@oH-8TJYcQuJ@4H%CI;zIG%R>P}^yWdOnxL&m&PW{W+oC=Ka0?YLsiW zZtI4Ru`X@AJvF#FYfSGL2FI#lzLC*?H&tuHF(5`awD+18^}&!NRsg$8;J8h=d34Sf zQs{oEYTyZ)Oi2bf0Qg=Z6d}q1Lq?&+wa}(&cu<6)tGE+XnLw7AGAXqX4}~x$UW?E* zcoNEB+Sna7F%#B2=*pIz63mwq51zq}7X25Fa1dpmIlP^flJlFVQ%n2_G1j4<2xkywX1RH(l!I&WC8x>@?Ot=wyf&_Zc z2MpHa)k};8E8vbK;{jiwL0>gFY$w6s{z&HYJ1IlTPjr0}GXt~CXf|gha#~Q9i^H0_ zrOm1NT%6O?4kz+;EyI-NrlGw*U*Foq762Iv7INYAC9*IIlY$|JrPPeB6P;KKv&2lv zMD6iec4tj&zL#n4g|jx#Pt%nbV@d$`WR%u19zEVx0uFd0y2K4juSDgYiKWf6XXIpE ziqY2v#q1HJBV7VmV@pCYYlJhe>h@@ML>Kv7KChm$J65d;9gN}h@%G$6;#1EhWa0My zm*8}f#WN9xK+6aNp7dwx*uk|f45~O+oR@G=d>%DvH;*TAx-gs11#}*sw5Emf=rZQF z^VNZpV=0FzN8SYUHx#rszsinIJvbIQr=3~NINamRZ9QD_Fff_!LyZ|de^G97DLrk% z4S3SOZ$f;Vv@eoH5~5zD+fZ2n{6~$qm4L&TQ2dRh*gRRU;?GcD5bQ()@(Y6f^7Ras z0FGQH?OHrWk+Oo$%v88(qo8jFbAs{^ceVeHK$8_^Px>gVxv0Xe$qj|}o*8S!rrMo6 z7GQ-yt7)m)Y+{9Qq_kNIDGj2%D|@ty!I}54ERN9Tj}p9)FOI23-NNbtRnuD(XSWy{ z+>-fvc1H_s#&P2f&ChbigZqh2LZ96kvQ0;YTD+I6$ypnSa0^5s{q1cKT(c60TAnb= z$3#X{G(3)UHSr>!YV4mEtTy3uIEr;E`ZFYYG6a8nVQ`^?g!hhS+VK4Kn@t{N!r&IC z;DU`4;>GM`+|afp8|XWKQCEQ$1WUDgTZ^yXA`R0V7&VAMe6;QEN7J_l>YkV4?`B}) z-_*J|Xpv1}zEgsOzTec!uF10^l^#s4?@p#k(~qaNTb-KaYV;*Kc=#%f?thtP;|DaG zPK-SXiBUoJj=K6y)5^`$rE=jMAKN*$4c^NF`>v$j8_XY4T8Lx$m|oE+qFSH{u(6*X*5IOqE^DMG zzFC^VUdv9#(c|rBWV**v49y|dG{TL=kKa_mMh$5xzsBQ3pD#plU%07)jhKde{K$iF z?^y3k^q%jW*A8mScM3@^7VQ0i1sv=N3pqTO7$d7eC<(^aqD1*!H8iCms8P<;8Iuw^ZG7zlotCrts@kFZU;2l%_r@*q`Y0HZYgse~XAxTbEg!_6BNP@sA^mcKry=63=VD1f4;bx=KI|(eCXLG@5)8`)G&4mHOvF<3t&3Q%X<^;5-ZT>-UqnJh)+2#K^v(zad; z)MS5fD>B0s#m2;w7%}@`$gW;}htY&F<|jI)PPZ>vTnPqFz{~5TT++J5$6wZ7ms|Xq z4U|H@$eQ+f?f-IOv*}!1uu*wHM)loSD6%54-|D$sIzaWRLNvG_@P5&>2qeu^scpV0 zRT3pnai)TfY@RZbHAv0#F=Gp!$ljCYrKG_VWZ^&Kho7SH?)_917D66Gxa~V_zX}O# zUrB?jHZSZZkk9Gu!9u>p)aK7q+5Mf#*v$L%_%f!oX>Lr#RnPEbQYzQ&+FR&B*5I>= zu7iQ8N?Glg1uqw|qzp>E%Ab0G*l_+VL(4_PgI^@t;v3*Y7Agw_iu#e_(2MUNn$S?S2<%4)rdvhb1- zj~Q=64UYd;z4k99<^-Bs=)gP1m^@UY1Zv_8-vAJ9Phdc|2GkntSfn6I8SJC66ohzN zyEp8xvtjVS-06!!dapzCB2!106X@Tb>PJA7vdi@0w2>eYVRSmRus_wTHj0o1m$i17*5bXC3?5R=&g6}DIv(g$F!(+T z{IY!!Kse)X^q|@$tr+ITu5dX;gBu3FWQ4;z1%qqM0bhwBJ9w@Rb*1y&Apc*s5K0I) zf~K}D%SLi5UsOwc$DoO0?)?mGBFPnHkrDHK;(?wUBo>E#oi7=Gk48<$UcuhfG)?P^C0c4BSPZp(zlVJ|49W3#NGCyGqx-Mx3YWmTjjLL-YZcQRWACn)`lA`FiL)**F4w~aNP)nMI%$GBXXBSxWj6pZeq}WyXw?IN}7{E3KGFOWRoCd&A!lIWH$H_}q%)6x5i4WWpbh(BSe*GfZAruDxpwH>{g(uc>>Q zly8gav!bu-m|zP8zM3;eeZIi{z|-M}JMecEZU-j&s}zjHj>VW5MJR$k)!36RYw?-6 z=EuO{hyx!O&3mAp+>8>Z6FVgERF5N-cGc#rgdbk=M zC**G*4er@F5=>?D659>Oj#T^Cibvvx&$KdF5NPgG8@djiih;K!&Ko5OB<4Yd8_)y; zytfGVlDg+ZcAjRo4EO$X`D(sjWzH0by zn$@Dk!Fyvbpa}7OlZgs>Io2IG{)V$*%=0iX-$1>YlTqv-_#6OFPLyU}xxyOq@vqma z*q%tDe0>YJ7wSpzzE}B2U8P32^TbnN@7KKTA5O+ig(hb%265s*6L{BL#26!qVexcG z-5Q{|!%jhafEUY!V(&euzCt)}ICjwY5(Xx;_tdoYY+`W4DyYtkRq^h|qR~r>^)>*3 z2R0xIXhHDcR_1sX|+ru%=6^FhqxI`Fh%Zg?uo4J+J(Hr(fsJWTY==|amOpJX_4LNT{gjAcr2)mW46qDBSok}kt* zIf-cOs)CES6DbGLRY~e}JLJulYJ(}WnYrhqE_;I}H87hR-bGd$rO0$nqU0w z6FUuq5-e*eP8%#PEDaz^&>O3?brISdMU$2^8A3{>U>jyo;uddtJ_^gV1i!_LQOmTi zn}cUaqQqF?g|GK$!W7?a^UkrR0zH}`-w3kYy+d1ArxY9vXAUSqXzf?{j{l`sl@i=z z;ojVAj7cOgU;tj+zpt)%i8bNnT^2-?g8=T9-Z3WJ12!y62FHVOqm|{{F>5lgp6nvr z0MIkm@ccr1l2B&bBXFx@Ju$70NNQ_B+CngxhA%SBO&MjF&!ZdLGw=RwdJ=2Z(%v;N zQGqT@F5^98+_$IgiCen;bKZQ)WI;MR3?JD((8q6z25+Sp znU;b;2g-|KW<%q>b-h^722Ug|0o>6;hS8VM8z;!)3|>k&ayB=VEfL(!2FpFT;33$C zw*xfy0~KzG666y-STqeT@g^*YthvY5cOJB0EpGoA5xt?H7Lonwc;*#uY?0#V;B7A4U!;-l7DdDQq7>Yfw_UVCAI{H zA48dYr!_LLV-bQ=#F^kMEu&jn5bQnJRYCV|Y1M!M$4Dav3!^ur&wR{S6GR`DhQmn% ztla2?zK)e{S9dx|u!%I?ty8JsQ(oJz4(S%pTM4?rrwUh=9T6ChFP!`U4OTzkP?`H+5v=9p$x$j%+)jqE~u1EMeh?>|sXJ_s6Q1&R<3Ika^IToLcIwBI0AaulBw zi}E!W@WX{JsZD_i1i2d1a(W65o7YE7W8)=`oOOmImlbad$2}&^qr~aoP*^f%!2?UO z%#XVR6YkSyc`ejxJWee_P?(Wu1>+ZVTE&jVmUO6V+PR!`_^a4`f8qqqcJ`#nslP1rWMa* z)Ep(hOs>HXooqX|MTr(9Cq-E6OmIbc6egf`Bg_te>Uiklk?MbHho(Z_>s`g$#+pFL z!JN38{-CEkyE}N~slf*3bfg{W%6;`#A}+kkw$FXwZ}i4QY>aDfgvnksnO@5dV2Ixm zlRfg7@ii0hB-lBY1D5vsfB{o@qK1A2o4O@8t(70D7JVGT%^KUA5y6;5eYy)HV@WJ{ z3Jx5c5C~ei85C>7S#TF&uZ5H|7Ag>RP53IKJi!iJ@E+#6&)Xr+#07n1LfzNORjU_X zpfm6KZ<+J{tyV_uHQKxP(byEcpyef~Dj-FT=UIF21EMUd2XnHb z*j$nv_=QptAXP5d0pHt*s!g{!ISdA5IoO$7YVuPC;yGG*=ErFEtv^b4UjCG9?@&d9 zseto;kecX|U?+!B(Yf#ErGGA3+p#$KaO*Ni2M=DM{)rFFL6jygyQRR7&|+q?9};AJ zGnk;aZw&un4pEM{vgA2&kv>OO0YzxSl7+S_G2a^hjaq`Py+^#RZ_uPZh!STXmlUf{ z*naA*GDNu#&CXo-IaW&NSz+;wa^e>3DRuBV`2?`8@xoKkP(1O9zG zhPA!1Onb~5T<9&lk9sE-g&M3gA@umedtdkzLyLoS{^m!HgO7UOwXbXP zaOl0ZhHpW`xi?#8e;_4lYMl?y5jra*(kbEy?%qqyi18jF~d(uBRV;40)`s`lm= zV{f=A_bmtWfz?*I_o8WUtA!%+JS~6;7Pbu>*zr?g)p;28d7T4N2ayCe41zB zVA)xcK09Ejuf58(W=ZgtF!aV|LC>5c5$K#bP1{T3$sOy zJPfvvf5NZLguz4CyrbPpg06_EL1=IYH?eUU$F(?kgc<}?fwte%ASyfq`X}rd5zTo% z!`}#wgNNtx;UkrDAXgt*(aOhHt-(`EkensSPZKDXY_ z|Jn`BncQHnVmT^AxFw#14ZI8d`etD5JB2`!aDrjRea*y?W}?e1oDVJBb+^O!NJqHs zSyav3!*pPpoaZNfix31I2oj8qN^srPbnh_SN?MOOn3>%Wv9MZ$g*bJpsdUy-t&#X&q_9JywY)x9nl@LcRtM0bQG&tz8H4BR#lG$;O6>J}G2}FtW#z?yOw)$o!;1WNA?32LCCqNuYEv~C7$l7hE}a@nKuU= z`Tf<1r+pQ2ICH?1;Dzv5Vk)p?4L;hteWap*vH}bN_O49Gp}9jxDZ}ah&5Wv}B;0r{ zocx|t%MWad7M_afl8pBD=}W)zmw3PT(pje5$jjEbM$b2s`Rpb*6wi`fFZoQ!jLpzo zS>GGh7h#WY`aegr8l)X->{%sR8~@;%k3AK7Xz(6>QC~HCX)Vs-nunk-?$r`|0!0oaV20!0<$FbShaRJQSA#@BHe$d9dYFByndU`ev3l@E$tvvla7V6&oQKU z!+xv>Q1Rzp`$aZ1|7{bR*ixyT!MD?y7r%|}eCD&{eT!48bSYlbF>`KGQ4 zHoTTI7@d7+Zc8d2L@_+Ypxlq*xdi@3D|BSg z&LpvLOK{W%KfO$A?;1mbl(G(M?Sri#Ig`O^mJ}<6dLtQ*tXM2bFshFB!IrSD92CNB zk8E0*E2f6l?y1%u@f5-hSW?2J)9r|3r^A9CMnvLSu_R}_;u!6J}j{um6cM~{7jG4j)H9t?%$)&{oIe!&aMALw0RCinhQa# zw6fOwaSp0bNHLvk(pUxVf9kg8+NSlU~XQHl4C1l*c@hfe9=uGUy%ln zZlO1rG>T*C+MFQ?w>k4R#XN1ln7&;X9(W zB?t z@4cw;C(mUJ%FDy%+~u(BG2<%|@YE^DL8cLpaM4e`l<*RWtX1xmk0A^B(tRR88t6+`!$HWz1_9PbJP9K$4PiH-sD5 zd*7To2XO2lKIVKa+&F3wLVbfCl=zd&TFDB5y9m>enD8M87t#gZs|KGs!GT z92z_^p}&%qAeBU5Z;ibk_@JX;ZK(?g8fYd^TVToN`9c~#-R6t;9`M?@T!_usLL#vC zB|3S(BbpmA+l4fO(n?bYW3&fBt zJM9<5h@A12pDi%!!K?_95`d|@%!~krIF}7}MBVd+cr3|km;hr(McK^d@-hoEUZDNz znQCxx-0-^lU)*3#r;+(FV=w%yES+L7*6AocNTi>&{yUq$_IFrN_Y-!{UE><>eU_g6 z&LO?)x47ritF=Zci3VL-R64CBO-ut&J4VlGX1gTAvGDS=Qwg)*(F*1=mF+q+d7srY z@1LOssu78Z>SwDI*g6vpj%fha2EW~fhF08Nnloo#9wW%HG=~q)W~k(~aG+WoE_ydC zG3pbw(1O){74BUV(jC^`D3N^eqSlMNlnLF4K@M!u0%a{oPD&er)b+wwO2(_GO=fWkc3#+T(r2u)oS*YNJR zk#(hNX2IDIY^hFFrELYSuy7Y+zAgGuoH@9?#hJ5ECrU6fGy&&b^ZW|i6^Il(xNlDt zmhk$n-nbaxzL8)o#^nG{dOa~x`Wnp(K3+HWMk4MXtHs}x20s)TD1lNzy^xN=e-dME>1Y;RX&}G=@Z8E6Qp2Sh$NNWl0`DBkwCD@u)ximH|)4 zeaF&lK#n^yod_K1h;|piGA%4BTGzp~9!gIGR!t5Kj`s^pXR4X^w*G~j&RqNInZc=E zqG!JC_a))>CR1`1c-^gE{HJuV{ZEqiPA_)?S;}Nlyg+AP{IBTUAN&jSP2c_R)7f|b z7KTQrlVFiS3}|VHIi|t2cLg0hlXcM2qKzxn+J$TVFq7@%y_sru*VNGTv7Ctuz6iR{ z!g6zD+Eb%aC_!E~vX=<=LL=PMgQJBT<3Q5X)TvYRO}BhOPvSNU_h}Tlci~>i1ow(o z4wjC2jr@fep9oRjoCX&PHT#S=fb!T9?enhm-;Jz_s{}`l8{tloe^z83VXe}p@08|9 zA{jxncT|IMn^bGN!v@iTuBC%bv5aCoa#^B2ya7j~7^dY*;zk0mExD7V8982%#{;D# z6Nj{~P6_8tN2xzdar3?F-~4abpu1!hq{xa``srln%)j_in(ZH`V~Nx#%~^`~eBh5z zcjbfmIc>2YIef{NBr z7?JLFuWbBAKF&d^s3-c&HF8vy3h4CbXQFu+7nWvxy(__Je{M>tgCoP}-Ph0g$^3G?Y z2mhFE{nFo7hmB{;n;TxL#`3>!`E7rMdMn?jCpC)=NpapL-1)L=`h%_ionHU!KUBds zv6QTNluv`v*lFsNOrhz4ac2r)Bm=(G_foR4g}S14H`2|zUgg(Nef z04wXQqd2=yTI(b-?naFhcq+TX-6|a@xt6BEA>^oMh?*w|s#@Aazn#d2B?~vZ;!k0} z)`uqvxK%Doc?0xR1}4#)H8PXC*Y1nFifu%E`1kfd0v`xNH@g(nQ|1EQi&!nJ7!oi>?k``^InN+Q`jyat(A@o?#f7G(&5=M1%^g{5({3$!mJn=- zHGzutiC}BCdoUg%md2}_Mz1=ilFd8mytW2MF&4l3_h{w( zA2SAon)nUV=&R5F2<>hES>Eoh)zZ{hlW5c*#+QEOAJDVkewRJ8KP>#Up6KS(x`5aA zG)~Z^IH!2qG`Hl=SBht)(^*j1A>SrNcq%m>4Tb=YNX_n<)-IWvfj478ucuaRs>fe5 zQSB`^#>C)C->@~$dtT+jVl51bBrmXl*SlKdyT7W=ooJmJ_P0=qO>3@*aKk0fv>=R1 zi5fKQy(!xJun>YdiI#~G!V{wieLR&0557ac07BK6_V$==#Fl_Dk?eNRf!KG(mSE(< zEtxjRk!0aUHKT{MYHmaU?k`!f%RLotKoYpv#~vI7kEA6ch(l&#+S&xWCSyaox($rT zx>W6~#ST=XhnadQMTkKQcJw{b=9Ox6KobajFfCv6^4-t>9L<=2cA?C}Rds%mo_*=h z@Dpe$)$>V8xUz<@cqHHaS$geLf1aj$Kig>VI<}42d0amG0#QZ}DtBFp;K6wG$UbQ8 z(&)j;bNE?fPiLB(0L?AYfK%HSrffhW5^y}3nL(rKonrACUsgn2ak;{@yzxW=D4@5 z*;6p#4(6=Uye*O?lUp#QuY zRpm7UE#$SST~b(CHD^fJHaPn(I`f|YE@AI9rDnOBevvkR`N#N4qwy%J!DFgo70iqS zrMGb6ES-AcgVbC8ets&Pd!&Hx-Tm{lwekNc9ca%Llx`4>Y(}HhC?VC{+Hu&7$gU;@ zYu7V_Efxic)*=vP)bVy~?G<7HMNkd4GeFvz8Iy||JXJ31kBJOPddz&phx!>LGN4K< zU2Exy|-^E?#4iI)XfZgr^rDbAHNhOmC+#zSrE|EIWnJ4z?&2_{er}S zOP_ZZ*mY7y5N>#VLyOIS;nhMOLoh1$K?9P)lJS;$GLa_<8c<55Eo)7ZkjgfwprYWs z_QEmOc~oc3bkbmKgta087*M1(fsa-xP%yO#sWT;tze%>Mj0e|@9Cg#rY$|!;78wY^ zmK!160PJ-A_TNnlr$2h6ko)PaXJ4c@KJ(*@x$mVSIr>%*$9eLD?S z-^Y-QIjI7<=g9tfgLdEeN!r=`l(=T(7or@48;KMfgV7AgB49DduSJe zfGHH{nNbtNjrsmag`??sx~N?-<8s)PhcGAb)4~&sr*qY}5>82*J|Txv#v1=$SHto``b0rn zaFRXWXl@K)OZa9va}qHnmY4uWWZ5gShSWu&hW0)%e%s?ndaAXj(rZz@mf~ioU{C{} zw`v_Tb-7d72(YjrGn+RGFq%e|m?l!1QKl(hQje?lAS&|KBYZ!<^3%*!UuMJW+bP9h zh4wisI`5+M-}YzdcKzSe-j20Zsw}|=uc~R7Dj1ptedo(B)BP|18gKV^H3-Y8Koi_f z<*s$qBdI0APqcO!?N_QcuELxXM}(PV84etjQ;QRIqr6bIoK01IT zlLI6RgWh8y-{ZZ3DOpitvVTI^5@>CSHNn^1)mDsN2HAxh_1RA|eEqdSBdE~a(3D_K z#GYf})~+3DPg+PeWswd~CAv?uk!o;T7+S2i*9J`G(@cA(v@(3cv^ShM`=-6mY!%Wq z7{X0V1EMYl@+85M%=Wd&d{5l%io3f}W3!zVDa|<}Ewf2OTM-E;T6@+>0u2E!O4Z`g zcDhX`!oM{OMAo1s7|3eK^TuG2^KRFtwl&J4jnZdowxRkc5l8K&46@Bl3<9>Td!}S z0w;}-YYaC-4%80>t1?2AWG&PmZh+~c8kmUFm%SUmjlhuuur~LJPD*rOO$%GrCXkWV zrp0&*d&W>mvgBV>cRWI2F{JMIN=%vaSIn`KmkzP8kT(NQ^nyJ}xcv$t2d*XDq_`VN z!OvN$nPj@NaIZceTF?Z-jYMD=lsi`B(yJE1u-u6nEQNHk;y~evr+|rYk1d4^+8gVp zO)>&PTR{UxGZvMlElC~6s;R|m89Vk~Au%KJGJ{ft-j~g|?3mC)_mQwDr9vg(`;J$u zVyMJUojafTANYIjrdaQs_Dk{Ke90G2eU!fGyMC0l-PsiIMAkyk`@N?U#?&ro8BDlq z2)E&Cch*P{YgsjLq-$Qtsl}LdEnX#PxGMx&ypf0_F(a}sd6RJA&jfQ9?6{d6R92*i z4Nu-~VmH-;m0G-$ks%2%H(FLnR*rGq@KP=@=H4xgExDz*8&RVeuUnk=r;(wP8IlnklE5oD?W(Z3ahWpO4POg{fcBnQ`k29xW?MZzyTw|Dq}B*D zEMHNYhqm`NI*~%F$2>G`fB6iZ`_})G=g+o{O+R^F}ZweuBd?|!j5zmdbswM@(o?p+R^~ZsK1_JYe@n(F)C2YrF9ag?G#^dr;Taj+G1LgchVRUvTPf{t(m;bOsHMs6X$fP)(40PzfA?N3uVt zEq2gKJdnEfr2?!$lZiQRCc9Pzc2&zf^iOIxVi=Rsa{I1oZmlV(LI}+5^}UaRCc>Iz zhUF#u92h!iagSEbw03wC24;Tdj~pV_u6#W9`{N%eQu#Ee1;twlO#HlR#Y71j-;JbT z@Aobx(WZ|oeG7H%i)T_xr#b$XOTcghk$%o~3+^U$vDZfVxmJ#q zdntoJ5Eob%ZjI1uk{UeYrl}#=hH#;BVK)M;&@H5-f+Z>pR!`HJcmJsdlQ;7G*fTAW zgwtPRxb+1Z@BS)7o?SNVUT4?*>jF!hy@x>=%f@h&u-2}+*eBDb;C#Z`lZFP2R>A=| z8*GVFf5L4q#H6*6S|-jL4|T=14?*kIXegT8@5qFQa3kGp_l`PvHj%8dsZJbd?~RKL z(@nU?uh#Ok_bL#lZq#kf?VR_J&spP^PmzN$#0z7eAkXJE)nC6oXTe{kP2lT z(A;U4l!=h0PV9z9#`}4OCJ&hsTw%jdL|`g)XBya1j01mk?Lg+_mLL zO2JAiQS8o|(lj)RTUO?IEW6M01^W(W7~U;WenokaFSynx37vC_7Ch9I?r6!hh{QSO z5~jCUyWQd&?-tWxTT+s^w8pA6Po-;LZJf3>cJkmS$IqQ|ku~|h$2acxwl0zrQLf0d z^PDYY>rC+L*{9e*{abYZ_AiUZ?v?7Wf#wz*PR?(u&`(SoyO#Ib+yXxUPez(`gQ;w{ zV7+n{Rj7sjGp#LsbL<7JjZ`{75s&2-mV}p=VN+}(DaA@YkiimCtu3$wbf9JFU`VWq z`QyDLo6~}JLiK#PB7bx6#P;y$(FBwS%eNd-tE(9xiWKD`6>b<4D13=}B}iD1QpG1# zb5EI91K+)}q}cf&YBKORT2!Dpa-g}9{M$2#lHy3)+b~1xfl7=DV-S_kB1MEuw zK`FK)G1^%WRGM1!Un`b-ZkyC>m4&{Vyh7uLpQPRGSCaO2EMBLQ#L5rL{w#4A!u0Hm zzn}UmAGWLGXZ5f)m#?Z-)w@$CyRcd~lc(dozfAXj{qH7YQe5`am|%<7Bxz}F9G&G! zdI9>W!4hC?VMu~{BLPQTYv04vv^FxSR!><3<92N|AEUV5F%a^4lh4ERw=|}EgV(K? zaHAH$RvrSoPV@t7nw#qm9p}3-JZdnQHpp)Nud#p+Lkfw-I0Z?uSZ}Z=fG41WkV|>z zc99|kC8nEi0@NZ!Jh%6pl-3|DoI9lD(m?rvZ9(=8Vz*1v&~V~J%WMa}o|eXXNV?1l zL+>AEA!8vbmbAHP2qwg0ksO_zkPCV)*uLI=vvymEmZP@C*z+IJ&g=gou^rx$&l3qc zK@B`lIFN1$D`)7;3;zjw2;bM@a9b&F)CheZSe3Z-I@q;wz{lk1u0#u%DYhm5rw#;-`rWiJD7vM zpzmVg{ww^;|B%2C8CC;O{&_slyc8_R;}_~Bi;{W3dw?)^1hcc&dWXx~@o)FM$UnlK%Myp|i`p1Q%Q z@!3-Ja#D$Kd&2K%T&r-yakJ34-%H+pZ?TrRZAl1bcY9e>w2T{cwNAqA^dDkLVCL?! z)_xbyJ#(RM0;c%;K4o1PPCHY=8vEB6Zv$&TcUfb*Wvr>z2G@O^wf6O)YVNC~JhuyX zIyLH+f3t>VKAv8KU%yg_W$O$IxbL6lyYqwS|BehD6v3>tT!I*ue2TS;0-QM-NQL+k zlyvCscW7^*FvIHsqBcpL(Saok_KfL3Dc>MQWGNUN573hSC=1*lXhD#qnbW+s(o5mJ zrjb)V^t@I#%{{N_V>U1AZC{gz|A@Vf|JXVVo4dNMTh19Wn$Oqab^3)5Qh)UiN}_Ue zrt_0-%Te7v`MOxYMsIxj!@B?ExKTz0ntC>=k|8-5P{P_}Xk7M)ih-u?nh`nX>9WOb zW1!MhWH^E{#{1^5k&3Ut*^(IC94r_TXGfd@6o$ltrrbM;0gVm05w>L57FdZhiP`yW z&c#=%xqUpDMX?#d;9dgaL!U1+Y7om83n|d^fal*hr$y)C)CpE>9@rZNc@QB8)?{X0 z$nHU>i7y$efL9YWBzr8_(i&u{HAy9o+v<}R)t_X+`JooHC>%5Ud~pP(rbdv{d}vNV z;r%IT?k31?kXHG#LWO+$OaF)sPxCO=D%2{PO&cZ`c*(Tss1{v4_da&`tnu$=>nogB zI1(Ei?vI(6J&9(Mzeaby_&*C{;&CL7y~QipucV6tA@Yxfd$yoqRwy`62l~Ab?1yAg zd<;c)JSkzPakIk{DL6Z*vt~X>iY_WMa>g7oD6f_R0aGSdBbe^MX+e^qPOeg;wE=^n z$-hF*`>64B8r-`u02hHpkx~$Mij<|Z%CF67k&=cdvyLV&SSN*jE2AdGF0Gm?D8aD= zRdu8WchcZS2SQ_~&{fjB$XNV`{3Q6;(Kvb@Qy=l(ybK0Yve*&3faUo_8FTx-6zxg+8^h67UEyG z04Xpd5NZq$kdlI!FH%Y^lL0K^oHoW9iSq_SD+o7PIfyTDH+DL5gb?n{bzpE^5BKZE3%czychC;I5bOr`dm&MRK`Kras5r%{WW=v7A_T2aW+g>< zG?Ah1Y7&Bm$a;JT967wM_-;O`kEuo!YA#rj5|ceY7e^Rz@^m&ql@l4W`Os`TZ|sFa zF>nak`zcCF_tRhbgUnmMLI)4OD20d==SFjKYOW-uC_;lOmYm?FAnw2ZulQ&D5|C+= zkihQ@R?mx*=iuI##oaD>ktncZCDOEWFnbDEu=^tw>|#MV?R~4}nzGwT6A&=B<7s64 z+Ph!VnbR8mcZN0h0pn|cCkQs!6A6yu>1;!xh`^8&kv>G|8?R?;6LoIZG|W|C$T^f- zqbA*Kh(0?i*e_FT(SWSAL%gbmpko75-U{Kyc%+dj=rgY~2zcVj4SBuhQ!Y_#U4GG8 z^xeL%Qy7&9fkm4Tly{KOS1W$mA>W2I`$PkwJdWF&sdg-d3~}2r{>kRh^zc;hVuGy7 z8E2_qiHXSGPeNKZ@8>UyZNqflC`{{Ob7L%@{ev=fJ61aXqP?}1bnsFSb>%L174*uq zc;Rs*rL!WMq;RnHWjc89WzpIq+&!(_3apJ6gd4o}l(c+WwBRThk-*vIJ{ymFnhfy( z1|%Dgb)h{mxA=7uflE22{W)aI?Z`kG7RwDh#^635>E&Y_51mV z&L^utg)VBTh1dvebmJ^xSZWDsOK6V}XqsEsny;HA;Qae)iA8xY!-G>|*w*I0kH&|K zV3WDtO?zt#>`J2q%PM8Ldp3MDPb9Q9-0ccQw0djw0+(h?jz}rNa-kBzE|)4XCKt0% zSqQrb_DRP6g|_iN$;SY}1~cN6-wr&G%w;3f2Eq-29$&8MJD3rzPEKu z!On*Zd$7(4!7xYSk9|s%HCD2lBs5S(J9Y)inH7oUF6;z^G-*#Wqp*MSyJ&p-r^y90 zMFtu?0h3Z21}D+(wZ)f^WV)xg?U`rlR1#N021~qr!vfEbOt?Fis)o<*1uM3*hx9Rq zCP@0ljm2={1RIdOQ~F(!)egZvM@g`&O>OCi+9cn@8heWrYkSOyK#_F~WpzA#{albF zVZaVdp`{@wSh#Yv7SDHrB3Ii`uq|HUt%4&*jqs>95+=eHE#s0Xc`(H_Z{>|a4nRJx~q=^>XnT4iYF;d3_l7J-vOxgD`63S&`0B3t8sRcG5_Y3U- zF9A_ja7SXb%ci1~T;Dtq;YLh?jp6YkK8704k)+0%s6zr3UEosT%&&#Uo*$2P^yFSQ zcksY62LHXy8ay?*+thl3GPW6iBi9nG`j$!R2Vww!ON=*C=Le+5WiLAoQ^nrU-W~x6 zh=Tc<#GRa{Wa)Z+1OIVnfjDjp}d1^ejRFPug7A_k& zd#9Gb88~VLj%31(fT#&S5uD4Ga%nfUqXJ+E1bh44wer`bc-ones{)?Y>*$vO6kmSN zA9A2kQV@YC{zeElM)BBp)4>g`!!V&(y*`qDi3JcAwh*M&!xH5{fxji00eMP@Z`woY zVTC6Wl4@n#P`d=nnD)AS6QK3;l-HNRj;u)$)2iuiUb=dsCDJh9g_QI$)7s#(0Y?y{T|Hkn#dcV*X{pv$Ay!T5HLnMFr7eIG zzB-J4>YKu=_Ndo(>*U_Y9Fhbz>3+k6IvP6|*AQPn&3LSlDHbm9(r`$^UrL!| zBlU5DdbbLRJy|(N(xqW>TMbMU??Im&(rUx(QBwnOWyMiqKufey*C zp=^bF_NakS4$FnJE;1_6jl@W;dpTrZ8|=%R?~d75iC{bCrn$#0Wj9yQ?<-88b7&%T zAp})Qs%g{IJpWP*(wVy63oDuiL6^*V*50Tp6~~(B`*5Juq`G<=(PU3^BVkN-PiW=V zXu`c{nKik?=0xg!Lx(cjKZN65r_`)KuJRKyaj6AJ{ibz9qvF5pI0nOyB4L zf7_uUXCYMWgUe60EawNFv^QGty~^9Nh(x~gs*$lL_nZCTUtqJhSm5;oHvae*be^LU zecp=;jltxCZa0Gqcd}FLJ7-msS6Qbr5EhG4Ddz4-ad|TaK@TFQva7+r>PpwDQC)Gp zn}>1?+D;<@;lzn%R05VPTQjFoCfq1Vyvx_+!EMcC-(jtd1OyCsue;{X@U-^DY@SEZn2zN$OPC$;%)jIYDhyu9n%XFOWK6GceWmhhWibC6FKdmuOYM4r5D z&7t_;7&(_Kw(TNmIS8IbEHX+#j2WI3J$v7T90q1>M&_Zz6FF(5I@g}f!QwqWs_^4H zd!N)jq&g9lpg`r?P)hC3*C?&)(C7*9q$m_WYiu_k)@+OF`~QHC`x7)+{^KnCr`yL6 zGj7+WUgcG}ZuUiX8jX(fkm74~v#;cUv0`-egFLCPXF%?tFR7y{dukt5wh%7>ojhLUG|%;zPnSK@oOEGiyN@ z$hCA@Kmng_BiFUC-`SWoIq!}YVvbAvg-QIMScvaQHCDmFwWaRPYiZN05bnaXcBfE{ z3el2aCH@d11L5(jM)w%&{+$NPyMYVk%24fxE5&BDmjs*3OB|FEv*pc ziQ!uR(3LtFlo*KedpXg7VmoTYuE4mr9W?QAq=2^`Mbf=tsLMa$^-mB*crnm}Te`e| zw*BZr>`BjzL1-8<46Y?)MQK|NJRRM1G!O(5%`GfSsXK1ndBbwTG)2MZj$NvRlZRUBt`8}u70eSOdhNJ>h-ww zr6H{%&?dk>UmGkzPNgs=aK}%y&pQ%=1$z$yc^hnG-T-^wLD8KZ1h=tpTN`Y!S<7Bf zKFf!MLAmv+rj1D$(VEq9H-i!`cyY52NnY2C?aO#;dYg`;A&NhKhy2@K9)dCosrEOD z+CTfE;<+)~VHX&K-$UIKeh*gsj`e;KBYj_uOla&8KU2F5Peg@}Rg2GzMS%wI%pFn@ z-_7rxATOP!8hi5J@W35GQ&wTI@a za!s$OF^TI8Vb7Bf{3ka2(%Wu4U2Q@MdtBEH4Wz2w8*7sB89WPFYtUA+t(Jxew6~}1 zH5e2anFHh0B#^GBa74A4GAW?OD#6^#ENp+C*ME1LCNX}>A&TQ)eNd=rCHk;X7m-BN z+75&zgyyvZHDp=x^3ftIPhd|3$$_+|fj}O31EcRruXV^`UbNunB0FaOxNOnk-_l+9 z0*!Y5Gz;tlF)UGHEtJY*1FKKFD%jm=183l^lprcn?y&jwzH~--26i~2A8X)9F!@g;GzCG$MyzPjS z);LnYn*!sJQneur?K-QEJ`7M%zN1 zOc{_;g=mx%>+dJZHAbT}{pgwpW^_j7tYBXWR5I)=Oa;{$TVeuSs{j|qR1`&12T-60 zH56aW=UGEjeHeG^F^0q80=OxQA5w$TV2OAvXIWWe7jD+vdkBdgYh_o}+)4|gi$b}t z^q|@8bb`H=FzTh~4i1JnZ-lx^xa+Hwu8-Ft!2m%Z>YJ=w!*yzEybtZ=2D|$i;+rZq z|MfVIHZs+FslPIB54gFmg??UnRhOYLo-qx+z1{4<6}SNN1(HW9Sd`H~SEFckhfQP*ynkJqxtsIkJ*VN3zz=SYU;jtYGJ?d;;j8yx4OSswb zQzwlbTd^t9r_zPp1w6fPw4=qHc-s(}?pg*T(oDoS9Lo+8=Ac1n%p3YKoWs3{H#I0?Al!Eg+3LEpoKBKgac(- zJi!zbei;r~DtiuCHCUkpbL~A*V^O$oFV5rIo3tjkM+|C>ZIU|NIM;h;W9ky@*F%cR zUy8~7?#;lQAn;PxNwDn&!%~8!Vv+$l#a{=pBwy_~Y-Eb<6jg&mAP|QlgM}Oz4p2nB zVL={=l8J*lURokr%)N)CaymsGrb)wyG%vo&Fy?fk!d8pBUV}$M{48J4_mVl%GiQoQ zJy?VwxsOCDMdsaPM+|sytw~}xh8vP1&~8F%Vc1wSe2i{uS5@dlYrlv0rOIoiLQIX5 zC%+MOoyMi>cEMaDuL*P#3?9tDbUF}r0{Y>QR%|WC`Xs}rrS2aoYl2u5*=8jQgo8`| zq{VqloC%-{?`Pwpxgbmd0e6Gvh7(6RCfK;7xU(hT6zNe332*mtNWi_KENgMT($`GG zTMr)TpvH^$c92a^s>RXp^0p?ecF?&2k9g<6`O!LMYOZ^rUb*f7MkEVRU$OYKM^avF z)@`bLSH)lFqxdmuc`P-E#DvKKB2khqS>(H{^BGyE`H%%wxN6p)64j}c3e*pD>Y%X5 z96;pMqLnVzcoOwahWJA3;%B#o+-$WSS2|WXv|Sn<{1^pl3iQbBZ6%J~W0@+ylHT+k zYZroOL3C4iP^d8~C5s{0{IroL<~g;2mM_+F9WGu{gTU#)Z)It}1BUAkHOUIrHR0v# z7a$Xdi00$B-|m{*$6<(Kcd}<)$dD7mIL-@|OEE=4u>ma|(&GONCY-h@o}&+&)lwpi zPv`*g;3KU`jTicxi$M3HR8NAl1DYy!euj_X&+yzU$%ENAdi)^u6+-U!`Ce`HK^n#9 zMy5yg6+wfZVy&>Fw$cschNUESTXs#yGIB_JP*V7|gsbZodlJYTr)F5*=5??0_x&8h zi~oWt!p#Inrc>*yW4}2GchHy7_N3t-*{%wt+`98}8#0wTT}_cAiyrLxop zNr&JB9Z3tye}dF>l1%sOF(oTtK*+Cp4EIoz%R}41JXBTTZ8{DKc+OWyEtGj91mm=c z6@qyXF1wp`#R5h|j0A*rBF2!~n!uAVG67YjJ~b}%B#NOqnyR}Rk8&y6UjGaW*?-L1 zagAR;C|XjFE++g-)XXY^c^_-%4{0oR$6~Q1lCQFSNb4$Q0#|pMHhdP5F6m@iZ?I_* zQiKol7yOpyw8S=3LWxniO_T8-W?1%7ru6rmtoZ-D}<2B;((rSWIz zSz-V`t`V0~NMvDcSh*IlfOCXWxNJCF$0WO+A%2vF06un@ZJ#1pFR)~jQtcAwyz?fi@J_bc@R5}zzN*#9@-b&vww~bc zfbmFAreJVjvy^*>leVt2;8~aZTJZ>E_#1b$7&Z+iD^us?p$M%L-8zitvP-jF>TZ^F}5x=J7@`g8j-S~s+b9NY`^Dl z1$?+^ZSTO4LSRWtKA;ag@+?u`1UEQtcH~$>uwh`LejuO;YRTZdA;(hO?)NoA9^>|H zEi%7tneZr4ylMHAqPf>q>B-Z`@eWkKsYobE{LOY?2pg(aD`_=%dG-ESn-aH6-w`(=FyG_9yIZ6w( z$}G=D$mo!4wgoreAhcJtR>y2PmnG+kw4{5MdS=!BMDQJ$nA=IM1gZ9Wl zex(S0)~YWWJbAdMm8f*oVuYis0;*3TBOXp2DSpYu{$=Y9EaQrG;22V}o$|_2*;6ZA zy;{#F2GcumJic@rwD-_Y7-?00Bpr`W=*jnD=ZJ%NCWk3_yjl;%?y?HGMiwedkhj-> z*9Tp{3KQ}PdG<>sk$I*2IAeG$PaAX19NPkKKZsh_F}pz$91Agj+nyRk`6D9w%b|(i zY%J(#Em8#&?x}{zO3@yp1W{@Y(?zTsG#Vb~WzU3MUGlZCCeYgVPm+{O&^Mfx6^fS>in=_?@FLn)vKf^J#OC4 zL@QFEkWXoKyU|U!55Z>KJ>IWG89=~C>_LT+sCH^8{eVhTcuH1$TSlC>L6ZlR>YB*8J+EaSQ1U^>izID9a2*iajRC__oHj#=0*%+$Nq2;X4rUR5 zBM3LfBQgn5No@9coFxvnitq&^{Q@ts+qy<6y2U!<1Z=xRLXb9oZ|=%MkKI^w#Y zE?PM^)CnJG>yk4WKbu^PboUEl@H;nc-Pyzy3NVjXj-lsPrZCSjDcThlSwMz{w z5o8@gPWFC72=h_n(HPvdx8U%rYL$EbUJAMbMYUm{xS)Yog2P#h;{t&J=o{Vj(2CTE z10yt=3wV49k8LwJkwGtIg2`OkU2RRR0yL9(=?y6WrjmMo_$L*jc-?G<>MKe_`ZUh; z#T&`A6K1k4J{zj3Zimm6Q`rxeXXT8_S@s>JeutMf2G+)_obq<~j;SUu^g|_e1X07g zu$CgyE*rv~IdhH_?o}3I6K)ivClhYb-lR6qD?EM9!eH0etu@FnrsiN2sD-b;frT66 z(REQgV+B=0hqe-0;-=Ass4}|^3rD)w620&|KUtZdeS>d;WfpQ)P;|i9QF7c@3%P*k zuF+ps%3;cQd@&-ZAN>moMl!7F#)U*14uX|c2Bk)d)#b8*LS()iRaep1z6%d%3Fbm; z7~Qhbyami3U<>MXCeu9?XLM23ZLXLY7XX4SrHe%*jAw z^DnG59{Pm8-}#2)n;B202~*MXAvKYOHcoj<=8HsM%GM)=N@6BXDJ?EqoHU*Sai5^V z7A(3>T1PKvEXHV{0x=>L6tF8}(lWs_(~Ny{ru3$jYEG6~?e;sf)LvaKW>e`9Ox~<| zW*WQHZTtnT+%c_R&vc)7Rn}}(GkMkKlk3mjRgo0@`I6d}$b3S};IwDA+-O}zJHDzmm88wcDF|CRGO7Vb12jlolY zo)B8`D0!cH^gskvmHK3&%kg=3+q3I_`7C2`BqMJjMJ-6y4m33YL7#%5Wvv}PjiJHh zBQ25-EbeUvOKV((7K0Ms*VTggk|{LRd9QIO^C(7SbylPl1?sMNfugyGRxODI)UL@Q zr7SGtCq3e8D`~7IWEnI9uwzYEiJFeWvIPuEcflJKh?{zMU+bDUM3E@LqE2Owof1TK zDiq4Z$h(<+2UD~Nrt-uEjE{UgIm3>HyFDIXd=mqlsuy0&1s#vbO~3drYF~0_8k7q| ztb}+r3pJEbw*!Fu+^W)BcqEHsW62l<#9%B|sd-W~0qNTm?K(Q4!M|PBn4-~x;o+`n zRB+Ez)#jpQyUN6fX6JQf*EBvf>`XPUXzT1BG=4Rm%Kl2j`CXp&d4FE78#o)ZA3o`A zMZ{A(t^{x6SlyTu#)Pa;=6;<#ln1+&xZ&|sLwLi1X>Yo#-OVHn`IeqnKgTHl@Yn48 zBYYW63E+VH_(uxoxZ~rf-*3S2_`*M-MWHFCH4unLC@zMS3)|G9kGN2PDu_8j zG~E3M{5qkJWQn)fGdDgNbqGN`u)dB174DchL?BRrDPw~$UKk!iH=8y>T9`m%okJ17 zImB3H!w}QSRE@(T|BP)T+fNmOjQMrYvm0ol`-EUGO!T{@5!ASn*b?a|Oh_wJro`L# zNvmwkEvpk}bw$G&Pz@FX=jhBiE!=}@un)|z+_*@pz3p7XbD25?+mKkHxodSiWIVY( zc%qt#Qj9~3O(E4Rc-^xqN?=rA`NK#`c$~+xr>r021I6U()ze2duqguk@hFFo53(LJ zn4)X1VpzrI((Rx(lQ8G`NF87;BZ zVWXcLo5qF_DebbyR*-(=W!CK2`F9|A3cpYKz%Q%DhL;!GTj)SOC)H_7Vz^^W)Oig> zK9M~kUw>7fn8__aH&Eu`SiTR9rzqWqks@`nb!(c!CN(#p#Z8k7RDnQWP%RE2-?gfz zU*1-@0^B(=S`6_jVs!1*w8vTwEv0Eug+qGKj5O-bU&Yw8^4Mrb)}9cuK~IG&MfCO5 zMJ^h5szxC7W}=l9hUjzmc_dwPxph=7Vnxt3Byx|PEptsS?DlEk;p9l?)yQLDNu{A4;E1OjS>|oxDV$` z&$c~$I%=s~E*{ms6~82%V$3Wl7{vilvjj%uLC|F>OmFcd6MIP}{4%AyOVQkRbFZFK zXcD*0s61aQ-;GiQo3*$XP=g(@-l98h!k*WbA}}sLV$p&T_EDr(;MB39na0z#Fi9EL zLwjSb)}B4*)RX2-ix5V8`o);=_(snz8Vsg$n(;1OzD{eoU(jMJq;wfv`tGt`WNkk7 z9_%)S(KZRD(MPH^r=ii>qDA{^=tXn?_e{%6T9_GyfHY%Y#^)!q=4DW1ik8@S76`&Uw99b~H)<35dMw=S@f1cTQ9D*+*u0Sdak)k-pvM8IOg4Q8zgepP^ zA+}J|>A-{&!a7ixAuod*c#rz}d6JqW4aJA|q{(W~&pHe_SkUhlR_DO5xAmvo4Qe<` zBi6k-@&A&vz;*}9+9C9H-xww^Ccxd&@ywDKP|F*Bg^T+qI(F7UOu;}yS)z>l>3N6cOwy8+VE zV4yd}z=TD+m= z%~ptl#5k!4d(l`E{>^UJe0D9;50Eh@&?-ZHIb@7Pc{Qrz(TvAqa4R9v3cAWi>Ycf+ zMP`H>Uq{fDZhP-Vl$QvCCr?>G*6Mk~@eB1}JJAj?FkkOK=%%fTFrn-wje2 zoO{|PWpUBEx9ua+lm*>{75zCem3&ZZqk<}1SP#L)6t(|g$O`jvpmn$xdE0$_Zc%^y zBJa1fd6aTk;_sc9HxdRUDtSr0Zc=U=+8WRcPy~gNT(}X}jl_^$6YA6)>XuQguiDcu zgCzTwIrVKlkw!_2n35}EPnR^@2chRB~%jHVwMOj|b z*bkXsRHGD>qh!k9I~FY-ow4%*=@jdLnZLc1SUtE2I4hpV>fG21oF;^K5*Q!Vwd_@)$@seE# zIDkA>1%~I#W_aR4;sqhUz?v?V{Jm2Pl?YslqBbzX@PhW+XMwpVm0#K?{&ziJCGPgA`5veI_73AAj(`+u;aH%_^#-F)!fV1FRg zh$UGqw5QL4F(lPFeKOS^(`_1CF!%G#jV>+G5m#@LEv>X~sItHd$qd(r>Or2b2AeDF zW8?D3@l?;WWNhjJCBr5eocDBbFnE@ZoGObqxpcjOC0546vvnTTl=XP%czV$0Nyy2wY253z4EVW_ zQ)YOg)Py&$!q{d(zhuUz!A?5E-cJM-3Dbf~mYeF(Ln1SI0m*ZXu#dL_ojRra6M<$) z8?&&V*dYncg^`Dj%lVjOiN&in1-y`j2fBBcHa6l48UgX37?rF1$9R^!Nm9ah@DA=h*x96HFiCBEB~A98c9;aPPk&>_HIihWySK zNE0Y>S`my3ga@%L$liyh1oLvw4g+!LsQz>c?Zi*o?}CawsZ-bXJ3H3H27h=S+PH55 zJh&e;S=x#hNvy~z^Cm*5Pis=O(0yB)WIZ|?#8BQx?E4)pXDow-8=hQG>GO7e-a;G0 z>v%g;@{$R*lsxwKepxN=t5;*IG=|5X92=L99B)p*JvJq;514inGi^Sk1Y0~P|7D{Q zF~F63&wFs@U=E~^5Y)K|yK8hAx2%#a3k~{mVj!skT7ASf&)Ku2$rXG90s}(`(U=yR z7VrVWFQ37DULpcrDNbp33V$NN!+Osum41@i!k5!iNiL5;W5=W7u- zaLfza6}_=#R3opubG8;ui!2$uAgEZ60H-@0T?g24l5{GOeWx{M22EAP;C08$IW-vZ z!V?984ORp~jpLg1H0vENRJa1KeQ~3f-y@-}mt!N`H?%_7xpmXr=AnGa5{Mz#A5TqL zg|^BsLK5s_!}5vaD}T1-aStNnxfUNQ{g&5+>162qF?<}LLuaB#2y-lVQ@`8pne7a05Yo4mP`1VNEj zl-e^RSgK3$Qzd6ZHu&{D$a*)7?f6=L-=L91>6ybf3!Z3s(!%viO*aj#Z_*a(T&bjb zk;mT4Cyh6y!CNE8eSV7N+k=XHhF|^XD=`Aa5VQcWnbDLF zNZAi)VB9RIMdBJ7V{%ceyW$1|hy5*R*=PBZ7nxK4*?vq0B($^$Hq(W8T1giC4K0xQ zvO^J~bY4F0orXz^Wy(}+n|5zd)IG7@Img2N-f1|knAxtFn8r<`z`6rw<&50Y~!OR{d8wg+u zba$cFs75p?wj9SD?8}-KzaV|;8J67E81AYY7!Hw?lQ^-_oF)h|ige93bc*kS6YGpU zaUjfq@tbz+@>^J-*Lk|O7MnCPgCaMtE5?4wK=sQwG1r@OsCpuLAe9)C$I*gsdVEzU zOUzBgK;&J2b8Qo|Eur0!b%F$0xcHIZ`LY#f_hz$zE-#sOhw!7Y&DxrA=`J`{GeH8n zEZ!x>z2v{=MRTIC;J;$4P=yPEir5(S9)=X$07Zy=ALmXNX ze-o1tos34iY3G|jd2TBT(z~`!!BcYb4m)v<4a%=*yrtTp6@4gspJQ9{h{Tj3G}L5f z>AZ{V74wXONO(EN>g!F!BF`pSO2W?r<>X}CwD@#91+u^|dCM3ZF=i16_G&Yg{h7mM z+isv!8Gfc*J6q(We23%eJKE9AnIm~xc_Dg?q2g-@^;J0uVzlV8J@qIa3Vl6>B47D< z%O7_wAjWqAo(ZE5WTfA? zJU8!EbS^8TNMXNxwm|n}ie9dftb!hOKe)>xDJuo6$22b_)K^pWx>Ui7e6T|Cy@U+wsss)i#mdOo1B@(u*i{x}sj zUsWrG2jnp@q=JtjRkyCkRLk6l3#JdbQA}Ir5W=a=n>nR9j1A>U)b5{Z8d;9@T1Z0e z52x%QmBvw-H+dV8W1Rh#j^Eg4UmnjgkI!4nM@fjWGI%HmQ{#+{X~taW(@ilyr8Ym` zDuZFmLvPeHY#)0rxcYQ44Q=1cH)^hZ({IAW*XPiUjsv9LxuaJb}um2N&6ttP& z#GsI8AGv01*#J-4pGD;zC5*`}KDYnlaXfxg#-rL$KeZ;!9V*B19>?Q&9FMQp@&5x- W*A5-y@!Mwr0000- z@4d|0dU_<)On%+3?tS;&_wp|1p6_>lXCpctr{i>-j?-~EPRHr^H8%pi3?oKeJmq*p z2$4s~Hjr$2j&tp+jVS?T5rPo;>)6gA zobcUzTRi!J2*-cN|8D;GMR4VB@UPss(R|M9^1C>`AYYba6=Bbh-_F4w&eQRAIv^DC za$&}Lzh6vk_x1GNx8>{j9u;XRuYR-i-}RTjr|f(9t*QM-bxwe+S={cxdOzwzfOUia4d|hS?0wkP z0H&wY@l_dLT>*DdCNmIcZ!R=l|9VWC&jlL7;TrThzizT{-C^N!p@I>Ua{Z2WlMg)GB|#|o3|r9UJJC` zi}Lvp`S=nU^0oY5o*z+%=Z6hy25zfneT^^zcpIZ-{kXuJUIak@i@KSMh}dqP-0weZvb| z?(x39{t&`+z{kV;J$#d~_ig>1^ZXEe9y{#BaWMs|NDGT9w7T!lJyc>AG(FiQo&+u=2>2;zv?vX6d-s6K=VL{yF z1(qalX@?oWv$Y;5)(?2Uh1cyk`MYntuB%_Vr^~ae`WYS^j1TgI<$`~K1s8%o3uivY zuOD*b6~ipwWc(UVztM-S5fkU`vs~t^IyFS!-FQy~JPCI$*yKJGr}TXEDdFq}~>4kEPp2ZFoF|D37#yZ4DMUzP-`c1GmYjNs9zkY%-ni=V*Y|FbF?;Q_r+9sb~Rk&|7)Se4B1R4e- zrf?XM(BNP=WMsk(!G3sKg&Skfgc}<6vnxThGmqA|pfi^P9bPPD{g4Iq(#3+ds)CC9 z1wG{DA^(jv|DD${GZX@YKFu%8EPzRXO)yr^^ZMIn)Z*L#Um)anOsU{H+@^*Gh2hz}4Qckn z((Ra2=<>qjD-v+`2HG2H;xd9cPDmjLhTPEGjX?X21`H7>G60U%7lZ=>1Ho>+UZ_xS z6x10NBGl#OLInApOD2p_1r*~I7Sg4ylI}g=zt7vkG7Dy1K!o-EgM#J}W5V0#Cnc4S zn$L#3wr%?m|IQIV3U~-u?CIRNl!xV=P5#^bcOm%D@~eDI%Ns24{K5kWV-?5#`MY{4 zR!rdW;JT0t*NzXbsd4R`esWs%j~n4~S-)zWz}M{fimuo(-0fN?AMPM=;l@pN62vu} zPwiqTQe*sWZrB3|*ulbdcu7BpK+o6EmOLIYyjZs1dCYd^xj?<`01P2xXva9<>Ai>b zT>?$NK={%=7y0eSgO%<12$G5NfBheEPhO zfBKYel4z>+!j`%XMp#a@iD0i5q5;8zbZ}fO+%O7ZG(uYfIsjI@VjA`cLT+#)JO*^& z8&)NSZT-C+yg#RZ z>jGa#Dk{OX#n$K5mH8@+SJsuE>1IE^3B=R^kx!{+D6+)UcxzB3%5I;98*Ij*Ie6yJ z2hrAm8ql!A9o^oeMyN+D)LmX5)vx7f8mRa@5q zU7S~UrxKh;!l7SLYScpygk>SUp4VdoRS>h&@5gZJ1bVLV!VpC?hZvBd@mBf`NVJ!Y zI~K@%7Vhm@A&3iiZz%}8phez}*B%>{3%uml!aTni zZcHM>3oPeKS)Uw~vfhdIo?jg*(|*{#z}KQv>wEd`JobSc;cu5>h)xzt+UNJOjgMn* zNe$E?&nVjrT}EuQ!gxKZ)#w#^^1gBL#-~4G*z!R$K;6;0X>l>o;%oSuH!T9PPq}j} z!0*Yz?U9LeI-WUR+>@!YEP*5}V74qJRfHW+)xX6#4R)&Y3gw06PTxic3;6SwUlnjG<`bCQ$8pXr|( z@T+&kpY`}b>G6ABuX_3!p4S$?j_~G?WIfEW03StuIP~)cKKVmF^$u(Fupj9R!x=!B zbNtzW;Y*i4A8f)(zR{s78QL|uja6skOZd_@qY32QY0mv|Bg_By5DCkz-?5({E6ARD}GnKhZil6TlJ z12cl@9U2f=dycU-jJpw_3I9%KQTH8-a2GU&P|vG|#h7?N*HNLu%j*?yYw>F`VBuw< z#zrhB5N6&c-!TDinUD>5pVHWl77Gu4r^`^}h$Vjx4+;zSh@~8GMlJ}y#|u#948xY~ zv$fa-U1nYIkVb|o^ADJ9VL|^Ucud)G1kdT@UY+7!!1aIIm0F!bSEGa{U`baE=JahL zTrB12H$kbmFZX%uTMKddN(c3lQ zHcdU*XV`!jLx}~}u5G{#2>g-4iW*R&SFm80^1}IHd%LU9qvGX|@qR1f^S12M8t^(^ zQD2mOzcL6@9hEfCe-D3ad>BNt;~0R~1RG7=ugLqlDx8!=n}v!!8`T@#7L- zKFy7b#Gg8Vo;coJG$AhWjSP2tOtfdh2#z%25@=$sc6cN=?*-wu;j~#~?RLbD6Y$ES z^&s55UtzEVSX(@aZ19bZIOwpk*y43S2|?x1usD;UV)DXZ39$6MJ&-Qw5c0AU<$YAUEyPEZD%@h}eTOM3|C`LD+_Q)7lVl z3^-wivBBA67h6CQUK=tT5nSEVeMCFkt0j&fULTp}?gU6F3pFT3lFxJ*Z9hCQB>VUh z55U9)oj;d^*B^-S7m3c-z);I#oo77i3|gCPQPYK-BGPunBap+!FH?z zqnDwgF|#s}u{kvPm^Jwv*cO6!la~xxIt)2tq1qfQ3)mH~M)hTOB7s?9JPykAF$?&8 zetpMXrw;XR!vQ3-B)`Azcdy@sNStN>oj9ILz*Bh#&!=?Hr3X-9%nJ9OX>JTSIuQ8> zCc!l~M$e#0F5H2ITj;;TLa=SenUbgi-X4}J)SXg(V`NN;jIj!KX|M*v@i&CIZNi<8 z$^_fDi_r46qOHQKzgw$z7f4f!pyL|j~+kO;#1@KXu>IchwIm;DX-;g zF5DOlO)j`_v-b|cNBeyJkz61S98$r?Ys~Z-j64W;$AlYL`zY#C1y`393w9gSA48Iw zO2gfyz!nHJwuLsdJ06IZd=J}7L)>k=ZEav44m<64wFoInJiBo@2&^JcCP6$^J=hrGpA_ZnbVDZ=1 z75=T|Lflu!Pd-i!&12)40xr0&-%N!E?1hYb!4=x@=_QR=DHCtJ$F$9 zrVv*m+Ittc9Gb0^h(E9;qUlIo^-B<-feLw#-*;V;lL|Wotv2BjO+8k@6fMl_6*Tfh z1s_@)LSLJ3Lzv5!YW9kBzXFM=cMse7Nx=7cxU{eWauCh#p-_`3XX2+hhkV_N4`OrZ4q%QxZ7e&&TTUtdT&IsxgGS7M^>K|MrLt z(a@1OMrdgWdt?t$H-H^tST;uzzkNSPWTiWJXA(d1p8-R6Q)+V_z>K^ny< zd8lMb&3j?0HVZQJuYXcK$MC?B5XQ!PF`S7w! za>!LYdyfQnOB&e&5>F)<6A|vHQ+2Um!Y#&QA>PS3ULTN7^T5o4xA|eII;G)pqXvPi zS=ggR{uP43Az-|3i$9;JpcgG_j7@nTM1UtO;1L2nA$cg2+>5du!cF`e6$HDb+ab(& zXj&~8eNpyqky4t%;P5r7*oZ9HPC(p>P@gR168-{45KdINj0~T-MrS7VHiS5HL3= zzzM(xYuEOK_hW&pCboY|nG}IDB@EWr*ns;m-}7&xy28P{La|<8SNozYjp^20uy7!+ zP~B%ud%!~S1^&4&u+ZP<2k#ezDr`Z=PlCXfIAMJ*mn{fC-vVFGd*P_-wq8+0#flO| zJdCK+B1J78F=UY-Ex7fAYWK5ym0H$sQYC z3pzy$zkQ@eWxJ=5d7uIz*h=rIGp9B~5{4dx9GXnl=zyrnJFe)n+Y%wgI3XDY(Xg~-N@^QmugAoC25RJ{ts$Amzejm%z@8wg$#P3>} zrk#4BS>!f_%5^jdJAFCQ$M&5f+~?&FGvfKXq^7D0a+t8d3btmEHzCLSE(`jo11HZ! z;#M>OKpFheTqS>_byU$FgYE?gIXi&5XVu#YyrRgT1^)F~1ssEg+#?M?b*rALci6w4 z6nHrGXr}RO3@#AGZu~V1g}q9epaVw)=s}4R+)(BO16WcV8O)mWcGTq#N(D6FkqNgr za!k018mEr0Cu5S7qjr2bc?7KRmnnScBHM7TAsFPG5cGqwn9nB|MZR0Szl=$=F4 z3{qs=6~iB)qUOI@|2m~0-HF5x+@xjoRm4b!VayNss0lX!D+HJ#L1IVB_v3n;-&eb2 zw4~G_jB(&`7m71zZbgHXOJxgX_AE zi;N1aFfI`d2kAyIe_;-t`Nw>-&J>zvMk?H6PY{?3$r&<)7m!pKU`)C}DR9KtlwzVn z4b2T9uP6TjAKRbe1Dv1Iv?30^AvO}5P>4g2Y<&iur1KVPB253T6gCQ%S)2bEUjH|y zW))eF>L~>)B4LWc#VrbIFJ}nxK%_%ccXN_QQ`j7eban;cLy_gB%F`Ru2j^t;j zSUcDc%tDe7n*FCVel`O{`e8OS|BApBF+>GL^5^WhYii@>*ZJtqz~mcWCNL zoNDlFJdcr?xreQYkJO<@)F7#5LEXR)ScW`uE0LiErw&~4Shl6ini^Jeg9q*bRNS46 zOLF5fsCN@W(^5*XuD>s1dR=YL9&ManWS=_@KS{q$8J@l@6oVHg(CIVR?CC*34EZ0D z$FPH$Mr;N?i?Ir{Jiw&ue7Oil#?Q% zI~sY3Fb9OwBJ=^XrBo-F?XA++m)1<7)6tA43b>-#7^gHi2H?qKhV*Al$& zh&9i)YVAF2SR~=R+lQL@4$a**Xd*a#r0#eyCLL-t`6ScmpxNsBH#aOuoEFllgFZ=r z%@~&XCfCBnl+ZRpT!ajRpCIH#;m`$fD!*MG(qQp0IQmh`Gm#3(CK|gNpC9f8vRQ1P zE_@Ulf{+7;gEmBHgN*Ye@#F3t{`{L+zoB&v2@?NAUlSlsX~L=TR17{9-vFnAB){HL z1%m2h8>`w;0frF95yO)m#wRF%BM`-K{Fraxz)Cz!{N{92h{2#Borh=a8zCvh!RVcc*)fiO8A9A5H6gV+)g3kY|~w>&O38X3cc zFPT)45?x4PdY{}rq*=k85$61Lj5RSlPPrE6C!{D8sublV%r&a5&Co>Ht{cs;FDjg? zm9&t&(xKLYY4koUZPFC$&FOnF)xFuzH_+*LmXVoPufj$A z7$F8iuiO$#6X-#quz1Wr3hJ7-DOOU^4h@5X3mzyu5d&+~2svJoVrGIdG5jjbNy!3% znIXgmGEgRmAtO@q8yb(F%Zc#9gw~D9aDu?kuIDgjig`gScBMt~g++m&wrt%WUVDi~ z@94ES=r%?;&8bpAg)G=GD8`Qg>J_sj9BCNhd$^sQ;I+n?*{G&doI+25C>Cg?7qs6e zxu8Fe?qq9Pij7tggQ6-EHvkn?&#?z{3xP>ip=xX(1?vYr4HJc?mi)?*YHumx!^_h0 z7bS|XrR)NPWr8W+D997t>O`4mF^4KNE%X_*aN6%AZSMQZY9_?FXLD+wDNV`e1ut%? zJ%4KPZWh9gdwvmL1jgaDVDP$I>-h@?Cpq8tVPrT0ydE_fVmruPT8x^Q0a_L{#viRI zqxGrx*Vgk#PP*xnbUHAejKLMhsRoxEK++2;eP*mlD)KIo6pP^0ZN35fR=fu>-zYv0 zjRbfCN(>ANG!~}lR!3`;z!5T*%pBExYFq}1Iq?jgP=y3X(vq6>6bkD?n$7@hF{YOt z-e-sRLB#n`jZ;)uDknP8vGCT1eg;-E7TZ-yd9E|Ll}s>Ok0rT0_Z%&>#A;ZV=>wh$|9o-wb=1b@xK3< zpCI-L0(Y=5*M?(Zw1!&U{58I(g{N5H;k9HjvyC;cx68BC>RzRy^Xre&yLbLg5Y!D zeK+*v;g48ZXC|c|Wo8Y1N>}Jq$Ynf_C)2`YuUhjY*5D{FcJFmf-a%at?>vT}eS{7k z9O!${gA-#ZG-Dl<1|)q?g=OzoyL5E;H)*u{-|&xbD@M;=ltCSGKE2fA z7a=drz??MrTRgOF%MrynqpVz43x~E$2_Rkvh5W~Hnh!@cuy^dwA@3D!P~eY1?1U$w zB&QsmdNgf3-N^KD$6dnAy*?gj(k&>08vmx z$|{M7mXoZ!_GHGa?~WE@Z$8{u)oXm; zH$2t_>hBHFr3}e6hpMIAgNY%KqZ3k1KtL48H3UJU1xY-YQl6nSL8RGa+AzajVC8Mr z#5?4?y9j9A2rb@MG%e8bs&yHu+23DyA57bi55LGW!{E4J=kEPNLj_`tse_bZIjh_eTFzb7$j3 z4BkW%G6#O`6DD|9iG;fX%-vvEh<1N)AG4~OgJH-*1d?TrEU|&%$>NdL8o`ih-)?4T z8&zibdjhO#oN+Mt5~^=wp}`+0lhU3tFtb&`-Ucm1Pz#knzz@nax$Fw}m#8pC@C6{0xza zk7~6+OCkb;E9;~Ym+?qLj1gmwOdn~9@<>Zg^B46?chQNBVPY>xiDl`vX>s8poc8ar zak7!=H%~BK7AlJFp~JffTKLr+ z`y-~sg0LoJnhwv)f@bT`w>7aRnZ{Ouw&8*wdZu}c43?PoR_vh5!r2pLQplK;SVVEr zP+{ecNrha$NAh`c^4M{t<4Lo~Jhd18kZeF?Y8g~O*c2Rnw1^hJ0#*)(OUu)7@PTKDd=LRe9o<;xIkE6j=V$`XUsS8nN4xMduJ zC`o%mEA_8u7ipaYgL|tDFBG{@Pfv+x<$(x7@m?P3&C_bIq66gxx=g%!E&VQ>A@Zof zF%rI?_xQGq)TSwqB~eZV+9J%QvvJH#ChVfg3)ku@@X+G^U#yGt&1i5X+Bp^Wk>n*6 z=bjigEU1 znf1m&fqF48y-qigcrGhT*-#mSbX58;C_x9Fio1O@v21X!WMFbrVfE!>IT^Cg^47H)~|%q-dBFXmATp@Xiv_BdD7$nJ5R8d6UgB z;CC`5!Z;9}A@=g1tE;4aeELxfrA9hUK-O_G2G2n*ipv1&(R!d;jKNo6*sSX3a37Zp zvM=*=h_Y;$(j{}=LO+AI=)*%{(4-z|KoNu-vna}^xthawTaqE4k+@GHybQW1v%wH0 z_GF?LeVYlk-s3_N`wMgMDCV}u+r643_HFjJ#5JR9JVWFfTlUWnD$L9({-)Gc%B`0E zl5+bBQ@oD3_ymyAg#JO=)JOUY&CLf9d^phtXEb;X$32fTs)Mx$M~7sX*fbR@WElK3 z3Hez(I0CJtRC3=iIBSdZZ-!JJ8390u0l#lC;A6Y9(u@^e%z=i0LOXewsCX;Aw;(#Ncvq;K_sr&$R=(fPKVEw2_u)bBx&b3u-R^7~*LIe*Y4jY6J1k1j1U?!Q zs-nT?(Q-0LznY-P6gN&Y8eV9ccSLo&lSdANj2FlGN1fR!3%pV$CCc>!5J!gyl-$6X zA=@6xM8;-z5pGRi+Xl9s4tfFxmnqJJcHXicJTk86VwXLcD6lEKAd%2mNOI_A8eDov z+WS_w>4auG$bgYqPgH8KL@WozztONGE`-s!??CBa*PHH>RNU7q0 zILr=o-(CCop?Qo`g(V+XNtIAv?WR*VeHzb(D4$>re$$OiXp7t0?-Gqnf9axLMb7}= z-=~ztgCPdyP!;&dFgR|i7+hddtVA*9?z$Cq3a8JoQ2cRL)^~U>cCf?;O+Xc85G8vf zB3XXK3`qXn8E7K=)D5Rym=UQMyin*u8MGnY$33F$-usS)+)@rt5`1~Uzwwaj>JIHc zyiNxXJ|nOTf<4g-!q*}y|8K&6#P8udka7~hDNGfjcA;qT1v}ZL=AH-^-?VC1ux+4p z*6qVSQQlhSbewEt1`F1SH*OSqy{-oFX1>NB0fU3&E|~&EncpMCfuAGGb|B%v#}evU zh@u`kgEAtGA|$2FJkUzxrd4xEK&eFJZSdA;$kP8FEr5(CItZqO$%zCOiHG zHe!FOISs+mg*khu(Wd1YHaLfHqu>{LJzC64tx$s1Hn4OkyL9&aM|lSN&@lt^m^YOl z#QS&uIKwOy8Ar)Yt&##~Pqf1Pn6WU+fg-KOdi9kHS0#XJ1DSS>4rS2|8rl%q&N*NW z{!luz1=_h6B?0+usgV*TAnpz@d4F1af1PXdr$-a|cnhw2i${@8ynM6J`tGob(y4f^ z*4lc2%?I2&ht0@_foD4YStGCXeDPviGjd%i_0C z(fjo*%v&mVEXXRDT^8!@6wJsU5Gee}9!ULBK1zhv7W|zyf4{INH2?0bfRjP0st}l! zu3SYDEEb$8lEHsuTnSZJW!D&g1x$)WUJg7!OS@z&?5U6=sYI+0%g_9L52ZUux$q@D z3ivMiguY5K*;6ro-FAL>;#n)r#4FdJ`mSj}4~nmU=9UKVBb)vZlk9Rq=N=b~6ALfrf2}Z)in9|d`8MVk+Jujg)j6+a-dYD0)n{tz?DDpYwe-4& zf}u^6ajUei{ZdRV2Cdb%2l0G8dp4hr!Es4a#`aZRe9%9Hp>t7Jhv#%3z!O;i2$Ssr zL$Zb$4plpOTWt(zE*M?7=MpdOzX^?3DOW7Co`uTh(`?LOLN2I&ya_V+=S0)mm*^M+ za*PqlUWFo@X)k7=V_~!MFqHO0Rq7w`ywch{wT1N!O(|?+jjkL~Hq#9#70VZw<^f6h zyJTsSRWSgQvPw-Ew{`olZ)t{6hyo!Cj2HJx313g;-JU4m^2B>Kk5^Cuaz>-ej-$# z?U?pOlsk$mfeYWk8ExqPsPrq%z;06VS)iVKU(KoPrY2)Ol?C}4A5Ro;Ie8TQK{)~s zmqoFA1lq4+4-eZ!sO&jq2f(68MAf1GE=(=lG%++s>b(>tKBmMf$Y_xz254uqgu^{e zh(aGdRt+4gV(e@)@|_i`c5zc-ukaJ)dL9&b^Zqsv&FV1~2Dzk6)ByYBI< z&zYeKMbI`rTrLw*{SKnmN;yMQFK&&HR`&IT#|WrpuISr#v*94idv%8cc*xqe!2 zu^FYYNSfWGbx~09OJ+MrxO+3LemI1@cUB7lEoKk{3E_`&;& zXxg5kuj#mzCkwbwXMKB*l(pnETScH1Yiyf32f*MNR|_SMy4V6B%`4$>;FEUto-8n}r?VfF`23+6@B50u zQF|T3%jH4Ypz{On4XPfj+o8K}&YKq`L5^vg7@*htT7S~dg`IoJApIIJMxQR=xDW}0 zll7!$BXhac2(7jX4C1PnbTu1bQ5FrNK#hwh6R+{~-+(t$Aj-tz{>p5wg!ZoDG3|Ox z(4FQxNn`uhGA(~hV6z8fN`Q-*ZN<#&FeCi3Zxx$(6H>#uWe=)XN0HIiZGb7Bqgq;E z8mLyJuOR^$wZqYsPAquC;q&K%C>LmPX*0<8siurdN5vc=<-BIPohvo$UW(pwZxZMD}V8B(Drsibu@t48k~vLwM2nKRy~1nc<3=C z87M5ls4Q>_9c`kx=k#Y$;HGMc1CX^IiC`;lqNQ_EV*Qkdhn|SZr!@JjmVOdjLX-qn zzLs(0$KX-+fJvEU`MWIGm1%IY@L2vQlq&F1x+@D6E=y2_RX}XGmbC!18nFc~ekI4@ zbIKILy9s9)x6XQEwCt3HhGn#qp_DU80@H}-=4AHQ+x%&WwX!3ML$-- z2TTElRNaG(#=dsK>N8HQT3fd6?GT7_TKP#CXJY?e~u9o$50mq4B_U4c9(S4$w_abXmiY@lEf zrFLBc(MyR{o(xfxMKNbjpHf!+UA}miS1CCeKwH6Si2_V08!_2)ijajE@PuJXn}4S@ zLc(!G!70O^QCegBQAA@*JU!PRy_yB2RU8*UeM85!FEyWqeBE9-lOSyW2@r&4H9XNV zoId+^qaAQ*$4r$4TA3XpkE@lCh%GlVF_TfMI*V3=lTNhk2TNUp7AMqOFC;9v%`oK% z!EK;Z%##c@1u6P_8y2*4C5oVLu9IZkzr|4H&ehPATkbPJcAQNC zdlG3{^ELGYGmUD0>q(JvCkh~C-prYO{5vPIBboO!oB&bsha*x`o=%2A6P=ZUg$3(p z5h%>sYR11j+c>Dc{T=zvElJ3(wlKjt|KjMM%vqoszkOM zM_XL1#l?K2iS7bZJY?3LJw1L&UgAWtw`gsP4R?VSEnaDQ@D$|mWtf2*Ga5J-;#pWR zyPamV|E%!SNmOBWEctiEz%+-Cd<-MAQo7KS9`w3c!iNdEeAjD-cfBf@c4CvR&Sw0z~UQr9BWoy8O2c@lP`ZkFBk&n5aSO_etSmHF>ct>c!rnR z5%eq!PRZza%W(KI~~;bPVDoxh0V6xb>f996LMhj z!nAm8kfov~R#q;wADe8Tlc5CBlxB{Rj>C)D@0_r0)~lHwiX6LV`v8EegUVd=mA+c8 z$t|+1G^0@B!F5m4EPg9v7i|`hWd1_z8EEmt`9id~cSW9i+;l`nFHIQ!VsNsz`Jt6{ zle|sGg27%apt|CO$;&uVWvLCgE^=8z@}FDOZEin{b?P+>|P z8ZJDN1_sA*or2FgZLKMe3kWS927LB>{l>xE^`sDRC}SbB}g2LKo#>61+8Hhuajoz$Cpoyx1MjeezPha z*4VLt3-}AH!e7I5yv#->3wgor`iFcGdN76#qeMf)w=?NV(`vDuM4Ouzvo@2mo-pQY z8DCx+HisrGRh!FjgHW;)=$QLlh6!R_{StdkKSz_%J$|_M_!bFrO@fumN2ISs<@R`b znOnL@-Nj1`1>U6g+#AOpq7a_4-W;vKl2E#plXiPmG4D4 zy_AGR7cyQIS982D|aJH0b zv$tEaHeri@zNE=vDII-LK&KvP0)()^ox*z3^ZT*4VA6n;iuuA&TEAfScUNVbH~+7C zkuwit?rrpCjN3Fm`r9-*_)}pa;U;AQQ zF^f_OSP_a8z3YdyBt*oyS`G+UMg&oDdvwZ;&R4 zOAGKfRWOHV>!};O!UF#m|ISUzEXTs>LupM&u@P-}^j|J#&r>nDSk3wA{P?B8}3F-G&t~{vO+n)(sZFGcNbzi)W_OVq>-`G6*Ou6%`QUEpyDH{eR*%li$>a>Fk8 z%V}f2h$r)=1=aJ^_IcZc9+~?O?9?skc(l(3C`@&#sS9*JN=upzLrE`?F>UNs;DU$u2DMKz6~ z*3ZZxQPlnT0T>@{)6w3~9>d`|b90iB>Oof$PXku#JdmtNfmfKvP#|BL z1$0!Xt6@VIVxSWnzSDKekSRfjDhq6IA{hd+D&UF>ISNaAf6Y{S54O}+!>UN{`}L^s zyPus%UoVI0ua_;_@Yx6JK{uGYB&gmDm9wmAL4~7~*dYtb;j#((l19JH@e~Tzy$A2N zSc4;d4cYah%-Q2wyEZ0e%)&kiN)JNFgY)6J(U&icS(%JJZ9-ie3!|FaA%`wah()7g zy%HgJq4riLDa+X)%jD?G>0$Dwv2;R|qKv8$XpKh+*5jqnuvx?36BBHdj|MjPPIJB7 zb#K}n6~YDsr3#S_csOqjzTjQ5rm8RT|W#}+CfCrye}FD5?P9x#CaPvh-I`qQ||{VSAJsUermH_JfE# z{B$>7@#~dNvQ9hftzzv`lTc)l>i2P8;|S24;6R z((YdKeUC|jkOQ6ohr>AXx*rnsKUP6TZhdX|yVbHN!piV+rY%*VlUZ+e{Sl2vkF*Sx zYj77-$J`D_GT{%@?BhZ$(T;Va_3==Q_O_e9O|!?6Y46fm5yjhH03UD#!YMUhDs6O& z9-1C}RZg0CaA^#HzV>Ku(qR}fEVOCBpitqC+6fvJe6hZ`uch5Y$cdyv<9t@qdWALk zF4Ko_1WDf+8;K|98Tk*Qd)|7`8sk@WyHJK}@t8c&%jMC0s(_2=q)x{-Nvv&=Z_r7r z+T{Ub?jmdE?OHN>I%gP)Fb+ox4#awT!b58i#jDvJYIYBGlbORTs6$lYiA)GZqov*O zY?u^PH;tFhiGf< z)Ttt^+FV+fIQ}kT;=>c1snvN?G7v6X=cX{Yj0~cP@mX3KXqwL80W@is)5Z3shbF=# zTh?l@rL|%JPtZ%V4J}R@RCUzRX1a(KM@b3!<+(x_mGOK?2IrZ@LfXh6P9>b>_Y)Ld z(oWP%P9NH=`%MgaM97Ch6qd9kyk%Ki>uPXHqC~%W7H&3*Y!1`atEgM|MncW}8D4$KYQ0 zK9~lUB#79+6A^Uw=7x!HFSRoS!;~??WJgLJ)}2xeP9!CRLOik{taH&A6~^P}t+`h> z_fa*fkpXK3CQy8eVPrvn$6#gCu*Z#z43Gmj@SdR zDA$ci!2|udtC{ZHpr(}X1BEB?9AojlCn?n5V2p0UUKf;fD9;l|DRSIR)65El6ONtQUZM0(%_`IZ4Px;PYmumeZxE!_KoRMqX|y4h@cgphH-*yn zSjdN<4UY`EAe@$=is11@Yo`vct-VTqp+|zGXvW z8}=E#yaMg8tyPygQE}uL9oHDD1a>te(_ZvjS6lQ|z?UQ5j(+uH^=c|rs05+sWJ>YK zEOvxkS>)ORT73R{`SmfL9sVi1zc*=e@HPwaP{RUiz3Dz5cuNzJebN#=XyM&EbCzw0 z*QmGnDzASF8+WfJEnS>&eSEu%XKDs(MK~v>w}Ux+LK*BkkO&sspwX1lE7Mw<$8jO0 zHL#Rx!Wy^e=(l1=qcz1dJhaQeGbDFdZN>b?kxshpXVDuX|M5W6%O=8x0?^m(- z=QIDR94rnQ4=biB)NTFH6?GJVYHHmrBy@J=Qb7;dGlnT~mj$VSMITFXD@)1Axl*Rt zx!96c9f(V*q#$P@1v#Y%=a>OYt2AAuv9yRy>CXMwR58uG`O|D8sI-qQ5#tyF8v^lh zLot@Rbo^YjdW@5qY%6U!6Z7JKhh}47vVgC8a*sayssEA$CIwAQ!{ZbyHFgmv;%vCb zpdeOd(yAr)1hW?CQN*QCOZSD-tJ|)`XMlZ19bE#}4ft<#hc%6R`W~~T%uH~w9qJ6! zW9WNdtsw z+%|3P`2k?q+zFJ}wm>O%B?*x{@iFCg{tCvlJXM3slp`k)v|{PaPq2q;3zjzOQnQk{ zZ4MrWDesIe+vjm}W}<}`N@^XT+e6I;54)9d;fJb8&`?s!CGbrdN8WDPEt3dVf!A>J zQFB4+#Gz0^Q^GA|7x7qTkEvDN27$$ES+j8PMXMK{;!36-2pjq2ki!vIY&l$l7Ou>i zhGAMN6Yg2|5|6@P`lj#v9$I?!6a0HDTI2h4@aXT;=YRZ%)EK< z`0%`*?;*nS(bQ_ImYH~URcBX3AwtOC9w>8$foy%r)W5AP%S~D8g~(@lp2Z(UnMOvQhlKqngz5VdncYfQL@pDf{~r zrZzGBx|bpp9j*Xt7nYZ~`WwHC&V9qbMP)g!)wf!gY2o7c(g*(e-^@p zEVVfp{|&^hAZ{f*Zg6>N@hFnK40~!+NPyM_2ssNdO2dIG7i_*Bnj~hXjgb{3N$C`( z*p}?lr*R|W(xL4c!X%;pDvqZ^6nO|;TKE7zVZ13E0;oqV!8(k`5X@7OW_iPtwtbEb zp>4jfupZIqekJne|^pkuc*wrH1M3$HhlH|g2$ zSg7ra`8n3t**9{n*>5civ&{px`qwjU?jkom1Anz3%X1_=m~dmr39J_qbcN}x3wQ6E ze9`Q^VuAYo35&?lWUyiCSc~bmvX80f?AkV3J5KMD#*A7IbX*?4`^f`#0k-zl^XB8*Uen66%p+WBLhgmHPRZ~h?!mESgb;ccH}B}lw}gS1v+Iv=~8 zT3X2O>U(OCJ{^OT2G+>q*Eb{6t0rN9Ndbq7Da||ENfPp7EyyW#tr1gx!1#IrM_r51 z(x4R2X5c#>yC_+vY)XVfgYimeTZRj6UJJ(9PqXp)GyMJ|jgT4!@rEHGDz+y5lSxBN zLGx^z@19)H;kW=#$-M1XobY>thyRccA3f6J!48JKMVqs*U;gH|6uyMajW5bp|AMkF zFt(+$eR{Ua)(5FMq2`a`H`;TI4Ld)tWjOfTKy*Xa*kxDu1!EO^3{}9c%+-=Y2*(iq zQr8}&0@+u)`qV+#q0R9T0^=4LTD`-^r#=oaW;K19@AF65#sB#?HA_*l7jJ3JN;C**L=gxl|YUpIQ4LJzuvkpC=O z-_D0K9WFTB2cir27Zrjr*ZUt>(5S-PHT8+G#s!Fb*wuohc zYacJb#=Rx`oL&42{P!)2=5Jd%-15yr zT>U6h0VOVY{pR%XBRfn=!&&KKS@av>wtMtKBpu)y%ZnAI(EL%#eO-7r1 zQ~xL)mn3AOThvrZ8*=z^k^wVY0$~c3OsRX*;Gr>4XGcAGM8Ev$KTm_B!^TsJ&;=`C zSX?d25W?L7 zOo7p4b;O~;tDu~*@W7MLF>Ut!y#D1RbZP@P=-Menj70Bc5`Fx_O=H4j1lmXW0}<_s z!g6x-dHUs_{&RG&{m^nao4~NV?DP3I-eB19Ey+-v`YpCq4jnu^Z@_?(A(E_ z)F6kT!__~>+8psL+YbskHvETlxRuN76tWsD%dcyu5R}|QV_jU(A>_BL+-+jtc;#B( zZa`nt;`)Aa+J9I+^1`3*L7SE56>vL$bNe_@&=aa-e7Af&ai zQxJ4$^)|m2g^l7Dg#CzLOeYTKprx5cWFz5dUcc)vxcY~?{Muofkc?79_$~j{0~Ydk z*r`|EDrM4pcN%}%dVg_$Ff4838q|AZ7!j>{6dKe*mhP;E5;Ml_E$(FK3~}g z|0CD=bpw{M(S>+QQ3vng4(j4j%IX2tL=TunIj@=-%^!gEil`2r_Cg`eV#l$f?f`~A zUsT}mfmM7W?aC&cO0+;FnA_}3iY<)=9PIrV(`tX07Uupr*7(1j9{@H$<14a%IFT-C z&L`LYX+OM*Msw$%)%8P~?EMToW`2eq|FW?qMYP|F#;~Y2G1XV(gM8m_{5U_r->d>1 zri*UkcSn2wMCjGZjM26kn>fL_<=-@g*Yzuo;qUXg^Ea&&bKTa@N;PY>IA;(au3SSz zA|hryvH}T1t$f=)QfH79cVs`L;D zlvhowqYlT)Mi7{Srfawmo6Mk{KO3b4?a>ln#C_EbE!3BY%KJ`unrruJqYu@KBEo`~ z1!7I0ZN@F($b}c1XgqZ^^(z5ZyKnRQ|IO>>y|D~6yGLlUmH!Y2f0!tg9?F=+BA>0KzRe27~= zXI&qTaG@C&B8Z4c%1a15=^$&KBqpP7OBo@_YlM)?Lm(lxr6x{5lTS1&sF>7Au-%D* z*TgGMl|HQ(sfnv7+)7VcD#c1xJc?&}Bw+9|C&qOf_BY{P`N+p<@$&Cxp`W)b{g9xA z{wivsY|%SE|2HYI_{j8O&8-g(8*lIXmmAm=)q6>H`RmDjdbqhkAv-IqPta?WHTg)i zc}x$ZbL40 z`5^ZYML_3S$WeGmg10tcglbuBPt#o)DD#$LTb5LtvzI`4a|kt@Lf85>?Ol(4-tV@2 z^D_lJd6|4lcSG~qZJS~+ZrfDEM#cu?!sQKnBCMCD(1uJO&hJ2L@P$638tV~jazw6; z=WF?K7@g26sD_1KK+Pav#?VoyG8zTZq#BT`k=s z)bRos&?7CRxu~^rZ-~Y|D{0+Z{+VkJ6pUFK6 zNejz^V1l~)%YT!0-+mz9ms;Yb)hQ%+e&^WGUdtGpFvaFfMn9+L#vfNqp`z^zA`-p1 zmBfsXE2$EOAU2IDhc*ua>CiSMbX0?n_y;>(y|2TlA-gD1fk%6OP7PYXNjU1pu$y=Z zdr7>Yd@p;fu(p{uNAcA|Yeoj<9@TD3L@DwEjyR>&RS_j-TblF%XmjDr*Ohjb!dh0N z{DyaLb~qVms+{u+jOT(V^79^9D0E?8dCt_*YfU51Koc#o>mJpXB%Mu5kBC5YNvS{Z zw6q(fQ0FqZ@qL{NF)fbg3ehBOzA?bY;yT?Wjq zwRL*aCA`ka(CWf=+ShvkdbEc*1UaCL&F9#?`Ad8mdhGpNyrc?laRn5zW`6;;ctKF$ zaZ%*V#;x6g23H~f1gQ>{P+XR?>lEF7aapAIQotJx?sv^_AgDs{;j%=i<+^5WKSTwk zRg!F<$FFNmj(HdoeBy{+>oRs5o?~WZTW@&eX$o@~w6YqWB!XU)WLW8nuq0GS4gcccaC^Rh&#e|TxKG8HaG0I|*Ft`e{MpTuO7#u~oTLK-TeongI z`44>;EnfH?EFj;gSHc3Z1d|uju6=OdxyBjo{UmMt)DNfk3XAl?iTt5f;)wC@8t*eiJWEs}03^Y9p_bxKBls?u9YY2eWMp_QNE}kUXjU;6uFyjbdpea7JBh+-1pDVqPQlyVeh5Apcw};;JRmw zC0KleWpzAV=aL&$JF6mjl@_I4A+y^5Uj};l@io0vf2S5@b8U#>H$TP z3Q7u>b}*vbMp~S0($KvLT7aIW(2In!+A1d{mVvJS>nQ(Y4~>dsLLdln%_hyc@(4R}do0t^4+I_6|DG4_!UcL4O_FVO%#3tb2m+TJjY-+1J zq$?mK^H36Gh4Z5BW5#c1prLEY@`1Jv2a3s2?|PmuXgmr6c@QC2i4y~c5TEc+rC{7q zE#4j#qQS?28Rqzqa8)=naKl>)SCY^(j6wXhi1);!(6!i5E#hIAwN#A`!J1$G?j*3} zP$U^AlmKIN&22(H-2FTB#ee$Ov~Q2O@|#ge$>>WwGjtZdYnuBuY7nrZuD9s^Xa6rt zrf4c>S+bpE=11!w0ZiU8VFpxbOBcJK`L1IVa)TaVTI6qz)d-dP<9q-edq$DP-|DF* zM*tU64>3CC)4*uk#R#m;dkCOoOn&qzNR{CWmoyAlx+O5B2u&`D&d}z!%^`FfZvCkH zkz(>bWf8X_yB_Z`2G`%s0KT~GsnO(QWp^b$d_5>0zn$IjRmEVXc>995@iBz~t^l`f z^MyKBD@lfcd{`-QKS;R*XmeSLp!09^w8jX6iNKXhx+N(^i1sK!n3ka3gQZO&)-9N+ zlT(UeY7f=4z2!@^^vds>3gmKFQk$i9u=T&EnIzf+QrY*#&MASf3qb&|H>8@F;c*D^ zu%*?*6u#L$Z52>?Q24qbR07(3o~3&TEz3(d;HY#sYs8*vOtZrs zv$I$$%@?(#F(UYG@xGlHkK6pW!4U7QB95s}b;;rNL^)^ic-~ehL!=dME!Fcy8I|XA z)oTcLY;Hh5%HsvP5Ikm9BSw=|?SQ=|HC*@-r?M3#IeFi50_TFZKDoaerQ8D|4|jv* z65{W{@SF#gs1b;wF$Rc2)Byjnx$%n;T>V;Gd%_HY{|D_Nj&XKtQeTl)dN$QSjV)v>|cF68WldiaH(NbxGp=eNYHmfR?rb?|wJE&Z&e z`{A<@X}ro9RO&?chfNasNh!zrUBtAE+l2&hAu>@-?oztDp^S6gEfdRvm=@H2N1pA1 z6(2%O3)-uQNzR%a-qhh^t$KSTRHD{pk$^30wSwlg632qbM61h!JcCrmdA&$#Tw0O$ z6{5U=1L*nnJ)WE!HwsN*BNznwaNM*;qbL%CFiCj|E!#&bCox<>XH7|Id+3?MeRX@`W{Q5rbtt;q~PS7M#XvW8o&==N8EsJ)SB9o9Yj`{m2Viz zE`+vjL+cMzamCFotk_N|tgms^?l_uQvnUkhk*T;8gY?WBA7;4qUo{N(D3j`SQ5>!Z)&5+Feg!Gex6o7`X`w`f8P{aGArQkeD;sf;m($R&$?a+)~VT-KD3e&2#1gtLv5QPp(ZF!!j)NxbWjapsGlQ-2*zk@ zt`Zw*#C-WYH@n0U2%?`LEFr(oYnFU2w;i8bNg0qc;2Y1IfW0CquQ$07UHl#ZfEFf z5I=6eWC)Sopqg*qM7Z-p;7W(#%Mf0_SXeJw7ig=A*ixvXGqDsRxB`cai)K0^E*aO0jKB!Zr`Rxu17U%<2Z0?hz6Su=oz0)6$1Lbl zDb_K(KOm&lV<%-&>DI447<5&^n?HMjE`93{@NZmfG_~EpX7=UZ8GM?ye*Q`q` z9^VSauRh>ju@?P|>g?|lDT`Fd3~07WP*z2~sjx!|F+wX5{Yn@Z>{Ho8it}o*=Eijd zPmZFgWw%JirwDkjqWJ-Dn^W7Q&5GzCsBdG0`^dipVF!$#U$*1FUkFsKEENuQEg>T- zcac1y)Z&W4U%D1k_qSj$IfUnCRGtrm`xW;HFRy{o_q)-zG`veXy$J2&9lc<5-qrmk zZ`Ojx7c5W-j(}hApd~OYq=^zRP$DQNp5peFtj?j~a=b3gH#I=I%34c(kgoN!8IWS{ zj(rA<4y-;2hQ%$uT=2PJb7jo6Oogy4Uca!V)AhuDi@bLyMwKckN*szb&Vu-e+rBm^ zq5|o<{PH*dcDnqnf0~NoV#AoY#;!BmJ$XQnHvYOCrMsA-74Xz@%<2!&_oY^`HEb@< zsj8&HGJ0B7OV%sK=fK^Pw~yY260oKF$P)dLVoSqj$1SQ2+auN-43)&14>cSYvn8_m zaU2sCbR<>4_?JRQ2ij&OEb2@=WY2Xtqq2rNiIUg2r5&14Ve8E6L13(S!<|`K*Gmit z4B-Y$NqQhoSJir&%+d=CF=OosGP#B(*ZLSZ0Oa67&{2i<$H{s!-qMepiLg&N^du4_0*_SATFLbd#r~$a5*$OE^@1<8T{Z{ zr4^sm*G6iWyRxM`aV*Rm$hUhO#K6MRbKzw|Z|PFq{)*LMq(N(X$u)J`7lySnSAS(5 zQPb+Z^Oxw-o8M1m`&*xQb(7bVg?sCBKS+oB4|Rh*C~}>wq;yqM!rvCkm5f<=P%Fdf zWj(cBB6fs{sjcxqW$hakqc^?pDoGa%Z7nQx1lEMKaY50shaU_JFnLdn|L$BZvuKYA zc_f*`88l#}(y`)0111yBAUNy1<_pa8=Yq$L%|Z6QD8n@+D-s^Rse}f`b+R~{*pMGj z880N@dCr{Q6B%CgMdEvnQbDxgYgUri2TFpu;fWx54C%AJsd;}$jrv9w*n1DWJ)RcU zM+pj8<|8vcFD&wtZ_VMyR(NurZ`D3&%RQk7d)oQ~#VWnNHf2KXvzMfN;h}-Bj zwN!vxmJeIGaJOwXgV2s@VXjIkK2(`OT1g#vFkWPx;3VN(LT>q&Fe~HtnI4|-aY2zI z$ZYq%mZ^X{AN;sDfG}=*$+(!J4KaWqEI#E~5aq=%cn}|r5|WZrcfBdyCB-@Ww&OL+ z+q~&vlDf~P8J=+G1Fm3NI!jTqLe7FGWoN(_aZZ=iz!I*UNW5b`HbA#|syhd4&aUBl zskVaf8ppDOTI66n<_h(K9%)@b6#9fv9`I{nq}8-U&q}O$A(UgVklnF#J7aj!HVx78 z#{i$&1EF9+cy#F)SQ_Prb2QD^?k&>!*S>>#XFtZjwdVY-QH+g^lrtyt+tmYl@C$#I zj&>g>Z0$XYL_e35G_`**SPZ#5J7RDuR;}byf6Vmw#UW(-D0i+_2C$Lf_Ymw%P`_L` znpR8i9Uk@q2`BIxqgWH_UxPFsR#FTURkbQzWueQF8|J(rF7f*PF6T?(Q0G`46z1B25u zG{~sKwX9}__e+Nshld|o*%C9nL6X}CYz~hnl3O9@i}zWhU(|LSNAU^T9EIffRq#4i zTxe|V_8{D-@-!rcD9B4h+?Hr?hAj|op%SgYd>NZQITP}24O}79+O^S&YKSs?IB{k;Bu#`)GLJ5Y-Me(L>*Cfs*_kOupYw7jzQ_K~wIj2**IO8zH^k7!(a zOzjrEd2XG-718M4DFd*??1S1q!!|q^*e0w~Rf{K7s6bM!E^+u~r=U>*G&(%ST|_N* zRFfl@R{k=>3?!3_--4Mgun6#HM1*4O*8)}Kl+l5Ml@_{#K#NNa7I?k+SI)D+`4cSQ z%kYeg15p*GXz;$)R(Vbh{^A0TyX9Iu4`aj-ZQj>)uPN;TSx8s%HsI1_*NS(_xXXs< zs+RLbp5F@E6QcSl`0_1;;ugms3pi~Ed5_e+e7K+vhmO5Ri3Eo&5d4;~5-OM~@VZ_4 z!?U0xe^F|1M=Mi2)>b0g!%}R%7nk?bsniu7lj6DnZDMhwl;^rNaW|pjCvRH zvR5gS71Usdpd;D5eZYTrNh^OzscjZ=Xz>fY4~l>;O2e#3Kf4-f2~g#3l(5<`paJg1_%?hCmja7kRi$B~qK^Gx6`p~sGrX82_Z`&!P=cW`8x~=61pvk>i z61-kuTBHyAC3Os8N}l5-+Crgy9*j^xk|EC!q8ps{V01W|Gq-) z$`db0YNSB0-9c1jKMXNiT>c<+7C*wr{}KN23kd?vI*DS&)YQ2bHs5aFt!uv6)om8` zPq9b%XBG08fY-(@LFg+sJSFDb1RF*tw73*+>Y9+daA#F-@tS8$j)WH}ZwD>TFBqKl z13kFvb#?&VixPG{yj!a>Tv7pF%bH@PYPR&=3wRphQ=!mA*I}c$RBZ=aI=cc-=hR?t zC*TTrd=z479W@~id*E`d=$jtFhVh%k!An13-W@_Fg{=T<{x1V`l@Q4F-y;uakeZ2;j9xY46H75XN#RNnRQO@vbO*JDT9`8kP-T&! z3K^>sm$g3P1%@eTm^E3cQ;i+ksMT)EVM@lPfZSlH9G=3Yd_@ADH2Ex4k)Q21f}U$~ zj9i=Nqstmy>a4suBj`Cc=bL=!f45RB07`Ml9y4fkyddP@V4=+q4tT$L&ES~_eRve6 zC`D}VW$X$nLzRxPJB5^ThP%JVJn)2QTCcxnTP;N z)v#;q_&bLpxDj>5?)=>!qeu6C!s>;WM&Xr|f>g{?X>%2+tOYv%#&@%4_jgXg3X$8H zz^_@Mo_&98Jso>!&LMpktnw8j?QBEoIHUH%cqx`AmqWY_}k5y4x~UjJTd zcmHTIE^{c7&`6S(1OBalK*RliLc72G&s0mBGl;TER<6B~RRow7YYPEjWAp4cd=JxW z-+dys&IL6-34dqsV^)J>2n&<)K2?*)W01u$*5Bj(e~^u91Z|aQ;-BU3eFx}5XH&>B$!^ByWm3K(4KBBL zru6NU0V;p?dbGM1+8WwB0!Vcu?15^ey!;q%`*FMKn-J_Pji5_A4YsI7&{y@BE7s_6 z5-qZJ{~}+?S11atc=U)dA$rjmY(a-qR8WP$>>a3o$tl}M zh5h5a&JQj9kfz5?6lB56E1F!dn)nH{-b*3ZTWtjRD1wC79vo^$&@M~pIYVZfSVvt; zvu57lf6t;U+?x=VDD`(fgXQP+YkDx3yWS(27xGml6H8VEBBD(!$6EJ<53R zu2o)*reT53(S6to_4gK5Z@}&LGj^gGvm}rFo?rM@AdAi%J+3`;xP z7Hjm@k)$r`)Y`K+3u6O1#t)CI%rlMocMdlBCT;S=u|ryG%gUX3mj-jLxLX|Itfd8P z$<%EQnow$xmdJciFXYlI-*-%a>r4oBdz=<-Ixgtb0z56;eqWk$&bE~IA*TU0MVkbm*BofBVka$o)9xNu9AAiZ)#OqarQhr zLGwKqa34WsJRYmZ=Nes#p4-Ju8a;%Rz46Ju8WY!yUKBwmH8!BpF+{7|!|`QIV{3Yc z(DQKx);Jq0DCfNYK(#pp^ zP3}!)y?DQGo0vxT2tCQfF;_W$zs^Evg9*JB?c`%U_wC1_!Hl*}f}h|ACBdheee&)3 zy*PAM|e)fu2l?RIp#7HQRQ>(WxWz8YA#+NJiI^7Eb_FM7RaYhF}g{ zeoRsw4Z@BnQ>mr0s=p^t^{TSXHz_r~dT)cR-o;R;ViaqR`Eghtu!V8mj8ShF?O*@I z^;(&jHGOh#!bnAm95~UNfj)N?=N%2Jv*F4@jyM;<7bH6)hzE4!{sYwvC_gcWHWaKa z2HRR`s~0pmphI3>g7=XOavVaLnlJ&AwwMANb)d<020~FC8hdday`r_1QA02mv>Whd z4I@mPIkjXFh0==tRB8ar!+>oFv2A}S8G%XQoaxB7&kCu3R@0O)&z7G!3Bu3`+F#5) z|2$;JA>#v@q}|d4=4j_So+zJ!G&N*db?iQlt>gz7tCDS<){z>Ym;of@Vh53zS_V#{ z4DTyMkq}xxk#$>UIK`ZePZIR6x`5|H?vULu3B0{-;dNPq&?%}d+6JjM3hmy9yH~#cU->&*}}`w;Fuib5=6V%UO`tXhF6R zQsgA)kfm`b$5KnmRvc=nW2BBDs!j@BLP!~x4_jKrOJg_W@s{ivq{E>Ak#gN3MINT2 zcmUp&>VL$NNa+dE;HsqSb4^<}0+?hk)9C)*uJ$qEo;6&3lJNIavj;Vv+H^C+Wu-Zt z6>n+jW}FWU`6v%QX;#%peF|g50`-uERf&P$0^toD&M<}LTf#3eFyl^EcoqirJJI{e zH%P*-@7&T80<68R7A8Ffioa(p%DWxWaURV$j+{@=m;L_q@w)R!hD9$r>jHiw=g+0o z=}Muo=cHNQi=Y+7QKW{>`Nu_yR7Cqj^nQoCe{6g?+90Af3k{WF8MFE-rCy>s^CzTk zeW{o`QKltGc6&=*@76n~W@ZIhID%L!&3q4@9nV5@;r0KT&-Y?-?@w!TItD4yXBmc` z70@`NrStd4gg@Wze>0bGxupB-{JBP&;5JsMhEBGUz&ufxy(dP1UBN8IR4gJ50skag zkzpa2l=%$W!F3-WD?g5+QHU@^a`FMs%pP6%);iDLb})TihUv#IjbBj>e$vPxjJ$Uv z)$7pN6eJ%4x2LJ|hKA-stKZH9U+QXH)o#oXbnvL?RVK-;jGM(W=bwCqwZl8?dSBFF zJDNw5@N%s|N71-y`&p@-7;Eh+jA**9S2;o5ZB5}VV=W02ND7FS-&wabxmR0tBQ1=l z=81;4YAsx?i74kuUV11_Y3Y3AT07Uk$KXb6Xu_%AiYI)RroVSgxGDP^*)^fKC{Rp? zUV~OkuZq^AvFjMrGmP4j?QT#e1&{m@!^e64a6xbAporA#X5fusbM6 zaz#HzC0fkndH>BP*qdK9Bl9aA$v_ncq0x>>qhmV@_BEpxCGq*Dg;ZYEA3%v-R7(Pf z`sl8zE5H`?W5!Ce~WfzNyj5Gu^EWM5HO>uxWb|Gm4N-G&Wa~SgvG`nlxf8(yEJ$lfU zj6UU&obd^06} zAK8_&6o}Xp!Y&F@#_~1(JE-~k4Qlh$4c?a#GGlWFh{y7GF%3Eqmwjb9oLDc-bx-ET zhatZ>QrME*_IR+R^hYIBt>kU;e+SDIonzZ%{(<^5K>I%2&|Xj;SqNXrO!C98S%~r? zBb@|{3lt&3P_JlAmA1gP0Gn&|Ti#(^-Mnw}>pT)Hx>l%vmFdI{1k@L_!jNH}t@bZo z(jt^cK_ls)#nC)#VFBDNyOEhyX|pp3saZIhl8q+hB;xK@Y>l?~W}tjr)i#J?2sH?E zq9L%MW$9&6MNSL$cqNl)P9RF2M1A9mRQGZrM{(ov@F!U#-eUfJ+jb3##Vr{^&cw2S zYVvJOE~f~gv}9p-Z~Tq?{yRvFlAPYPtFKQ=!YJ}cf)N7bfU8~$3Xyb}DBQ@zb?j&z z&y*Ss{(fNV3)2c{KB`@`e@W9Dp@>k(^}>Qxq`hi_+$Z;jKS{XLQNL_sI>0M!RZWf| zwPI#n{;tifSpNmmdM&NHmi#QWT7qQvd%Ssgtc_Bk>(EaU<;l>M44Fa)N9?L+MgX15 zkPUQXSwVtFS(C@Mt|RSDUHGLI{PZN|5`{ubNo;TpE=%6N^vZv$MyBK78N4lT>qj)$ z{qLBE-j=Qz5)Wg-ZKWPrXpJJ2l(*W#2%?3;8tyMl&}(&qQN7Gs_dg=3R)W73rt2vt z@s6s&QQ{6-yRcGtNLcQ$hDH=79AHB>INSW-qjTQ4TSS!YKqp2JU`off&%clASG&wa;f~Ps@-=wMc>nk4!mg$)5>&e4=Rl$l4#; zc66cedbQrE8OyR|j-OVoS>~PzU)B~nYb6_ERwE^I^yCQ%)!^^2a6c05To+o5-r`$T zPZlvPi%hsvc?tVm;kmw7U+Y7L5PvycQ&-&4ZG+gr6@7%G?HUz}PrUM$7ETf#e5CJ@ z6N_jS(fH`P%-0fyg3uL0%Dq8AF%dDULYL)zD=D&fH>Ai?5$DdiW3={}O91B7>&uwd&gEPE+&r+^N z^V*Vpg4TOITZdo=b!>=7Gc@%@q~2dJ;kEiB!Z=LK(@7e$QdC|`u$ne79cO25`52FA zu>b$02DF7}-%13%Hi51kikO#29t1KWww%u34~D}PJU}AopCc^;OlHv&g_+r2pa@{L zbb90eC;Dhj@ZKaGaVgT>t)qPS;ZRcs;q8$|z%1n3!CJjDy<5~KkBpEWfJtH4h{8at ztJtJ}A0gHrQHbjTdkoM16Iy@2v>JTMY8In2Xdh4AV2Kr$-7m}vzdpn;B@fubw6{ds z`w>D8EsolW@8H7+>NdX2S{xk=7U9k(Wm7Puia2V3up7VItwqQ|Lmrw?OL;gjEU0iR z<>Am$M2lS(6UV?R`qIU7?;e8JYP=LY_+L_W9j)E6$${@dJ5A_Ep`sY2mjRkJq$>1%!MLvHFaqp~Wv$=LPLP0xGRC71kMQA^8z&uTEPHE=lKtJHO@H zQt34z)ruurI`^k|`Qe1Oo7S6VRQh@}BQnk@%&5(5tc#RM6z$)Tj7k;a!mzpgnhAR} zEneGSk^RV^Q<%3a?Z*-tFFi&3yZ@Cbc~rIiKlz;gJhMeREZ~apX9u!-krUq(qxfRLHvX-^;@EVLKtgUl|k$iN{um66^t(*I+Tqw6bep zco1uYEu^X+>!NY%dJ2a(-%m^_6M`kk!7uce};Uf5Ld zw_$LA@K*MN$kD{u_YJ^;?ytY79kVg3o?%+|5qutACe4!``i&esVZ5{&93!L(Emm<$ z%qV`3Zn++oE74~bf+ktn3{yNB5f8X?cWQXGTQ}_2ULakv4+brq-PP z4XJ9|tBsQmazBAJ5u1Y26C++ql$~kv(psm8yC;0435F6i8fKgnZK+aHTd+sl>5cs6cbIvqL&TtLra+g4Oh2)SgLWQ=h=! zBkM#lB+K+s7gw7dJ##GNBh#~R_5jtO1`du@>f-Qu?Ru8I&ANy%y#qU{ukTTaGs=^B zEa>W`*WjW`7=uT%vgS1QB^>|SyCI!k*`gE3-g;bnR3`(vv zf-x#e6GozA<+@a`rQ)GM6w%(GP(wo>f`RHBsWDHgn^RAFQRhmlDa^>ZoC3UB6J z4WN@MSL^1)>o>CS1Rnh57H~3{((f1Kwaay@E&GiY$NC++8yd5sJ9!JcO`HD25rjOz ziN=%fu@<3A>~ydiEVzh!_*;un;L7{~ZdlL`&B*mcnS^eXpsZF@kCYR)VoF*e{e#No9Qi z=ccctKY_V7Gd5KO{PV!{B4#PfSe4Cml?H?hdm?rUYwzBi*vZ0&kNElx`C4|My{+eW z*X*A86|0d#I=jBcO62YJ>{R;ntnqR~6dxXwG8GzX+wa_LSQZQk%rZxiyv!Mt$`U|> zv$ix;gRKb8aIyNX}F|lTQqyydf=qO`lG+V z0=PewnszK1xIO{CAZ8qoOj#+1E|RKHMfmMPv321X+g|dSRh|l#jVnhc*7>Rqd^y<7-eNswiue!U~(;Di6WSvW3B)1vAq2x zpTd0>cY!=##^?CpmgvdWe$7Y=VS%IL)O`ULX{7B3TB%U~T=b*1QXn*i2SV zPD&N9;{w4xn=7c?q-hC<+fmC>-F*Y$eQ{*{jM&T_{bw3=i2vGug)n!B{J3A-md+GW{1%=;em70ZA7u{O2|`T^i_WH0 z3O}THXQjS%&Ge@fd#)o&ofZ-9;9s_dB3%rf%{G3-mp51Uo@fCbY3;Ic?oAtoPPL~F_dmdMmeI{$bsw|=o0TYpZ3qi!{QRt z@9Db(rV9D( zn`)h}^XtkwjLm{BY>-5>E%H=(2zu%~B5v8a^H_5)@q=T&Nns&M{-)^Cf!>6&7nC>0 zpB!S!My0{2EGb(y#vO$ETa!SF?#{GtZg^u`A>Z}9 zcA9QQp6zF=Q|odpLiYQQ!j_1MIl&H9roAU9jz5YChoij-YKg;y9oZwZi0;UazjqY| zqBcyurN4=S_)^^p1CF^{Aw?5fb=h?9PZ(cQ8r;Y6dWl%cwUR-Y+2Iwo@?;6;U(r(t zWt@>|f;!%)f!MR82>d5)Q+RpAulcz`x=TQl4=g#tlO&KBA)SP!>6LaNZnssldk2Yj z>#y^1zN*X+O(!74SwWwb#$*gO=jXI(f;WMt9-v&3k8AHnp!2$u7&U#D)SRiTPD~tY zDdpI);z=WeFZ>%Qil6F)vq3(G{*l)C0d~PQ8^C8!-Rg0qcP?pHY^fFAQs2av;mbhZ z`}L-ba-U-Ig}iJjYhTF_qtjj9y5+cFWChe^{W|HimkjhPT1g8r5MWiLoG-=}s>Vf$ zSw=W*eO41>hor`43+`u>3Z7H8K&UaPtD@0{!jS`)j@8KPv@4m`QSQvkpe1LHM-XNK zS8901Daw#CEv<^wphR}QbWFHo67G=w#&JE^SnLh|tv?PX2$g$rE*?Bq@VTKum0)cP zLhJT)3C%7{5{yekW?FM9(1T}D7{%(M$N)m)S#uTZZ>q`UZE&txu$93sIiRnlXu{_j zv$dmLW9Li@rniP+iE`1TsLUm+W_nATA>jgpszSUt3JJY0XdxkS-|wh{LLvLAAz)@9q76^atSgMpqs(B8P# zfG4=_p6r18f$(QgznE=tPu;e7f(HMZgebEkf4Z|M#OdkyMs_Vw`PRqU9qr)1P8k2gkxm;NeAY!x`t9`HcuCGWjhN=9FC|_J;mY` zG;N1a$TZ!Ia5si%Odo_P>8DJk>kC`qv>LU+`zsFjK0Om^gj=$npveugLAc>NKn(bz zHKRI*2*PDn>K73fL6YdOLs3e6pb~=MlUpRsg(2KGv+A-LOrewRJ$;>zWRMDXo|Sc$ zzCzbDuty9|(n3OLt+I@|C#b1n?Nq`8*3jp)Ay#UkVw${tz`XdJQh<|a+gY1Wx-*b>BFe+rMM58PkF6Ib8=N^5F0f2QlQFwCD3GE z9_lDLm%J zzFoh5k-EaYZC#pEF-R83GweJ;J@SX7+&Ewg`m&>-^rv7#3tZE?n()YAVMp@$m=5$e94U@t&vz66I^B|t+iTw z)K)_=$`ZmZ-d3d7wWb9dwn90MP5qa#mXmHvgWbAm?TvUup0SRsevGscBx@yTVGa^l z#n5DDhorqXxNqdc3jW58SgqAXzgE+0mP`Bg)tJg_KWEv9uX_QP;oP|o@Av6geEADS zD#DM}ho3erE|G4a4z1Jy;+TWAP?3&rwuCUF$c@y~p0oPd1J&Sg21%iPtFJ8u_DRdZ zkp-~|K8N6&MitRd{nVt#B9V?<6v@!xke9?6bBWq95Vt746wCSO+?6RTYJG(CfHtu3!X|) zfoKjeFg8UR2MkoWaXyC-Zi6Kf)&(a{P@5$>i}Sda?48T^?b^St*;QI{kM+teXm54V zOW*pw#u!n2qUQGTbzx*a&q!Jzr<+oe1dq>M)x-$Uh6ty9YU=E$ zS=)OW;U^WF4r<|jF-0#ORqPZ}3b8xaXg`3I0W@G2^$yj=9Xk`L3?)sT#tlziS)3x; zh6o-GT9YKUCuunj6C>y*)+}oJh3Zpy$#;T&ukha?{d&pEo8XN+>BL)|HKU0cN zjaI0#w5PRI;=ba~ z(SlNC^AZZ8ZtIk=+%sd0wc*&>@RjTwnv5!g1k6N$h8t@zQ_EaMqLs(0jVG?%sY+T{ zwDfqAv_JkEnI@P0$L4YxYsX?~&24`JpS7*I6pnXbm>iy2r#*$|Hm=*@h@9(zYHYj* z<{q3;Dizm9gd0vB3##(gfzrl%LvH}MZx4}`N@e}#UKwloq*OH@rvjdjkU2O~$B8Un zoU*JR3_ukO7)6*~A>`2D;^oBE-%)oy0*N}T!MaOUrIx4b)?p>_(7>uvFMFVUfgt3F z+bBGC!#to96ZjqrUC)GAyraRKDIHxeGQqB_-L~x4w$FIkVn_n+y6~65p$Tbsw33?s z^MyY`*}h}xnx=mroznodP=<~2zVv`4UR3jpvL>Cf(g)u|VgXM8?<$msP(Q=!s$Sa* zuB~q=HHezv$pP25+Z0YQ_zMlKJ3>>}%o}7$XJ$;ZS7f8~1cD~_7?n-iAElUa<8TAv zynu)9tn~vL+LR6s7;zZ$hgt-_eH0Vx&^6B=4b(ZL)4z6k13uS833sTdz_nc)k5o`a zBw2{tL2q`@CVC`N{iyjqL$et{_ zY2-5$YwqE`YU;s~CW**?k2M`l!eLox(VHFvcFdVVh5Pn`hQ_)QK}sQf5z^fw%g(wH zlIMw@GEQm2d?dOMmjxL7y0#{l3?NLA>m-6sTZQFr>h+Uy%;2BzX%V27DGs>v(W?{g zd{Bqz)!DOaj-H)D4epZ=cjI}jm(A**-TT_iTN*g^lr@xG ztE0b-G{}+FB0lQbv%;8c?)z<_)>^Cu!9Q8E)PGE>1%beN`V>^B^B29zCOX-jV*n4o+3Thf8c|8+u z40OSRQot;T*HSihu3fFQTL&phoXV}W+Z3LypHBrm8`@QZns^N#{mfE_kh|gI1}9v~ zz~cf}_=ce&EpiIyGoH8mSf}i+8Cf06>qMxibo)JM1O~Cvq9x~4kRV_qb9=ks!VT^M ziFFu%7ivWavfe8>$iy4?Y_Y?6-M|G7r1#0VskJT{@mHT?3L!@UL;iuRV9pf9v7 zafU0N^58EtVvIAalZDu#$fIbGn`+IwX2F1$O*FaDS}4c7U`FSDp_&-%3N+Z92{<@l z@!nZ1dB<23XhKZ!2aL_@VnTB!M2GXrR@8HK!&o53qo?0nfbb4fSfS;6-lf?!uoa?PnNv+I&2U+`iz7`jLson=kEFZZg(X?imMm-`x@uiy9mNXE{t72_1RtJ69dOgTZM2}94GlkXPLm9a9`n%C^IWfz!4VV5> zA=-Qag2Fd#d=Th>g=mhKsG)rbcwsjaWrw>*=tQBNgO7r)6h}x{4^nqTitK=1Khk3u z_%^(s)7X^399hh^_DO>P-2^mQGY#BsQHkPtV1Pj8GENO$$-0j>a#wjIlE77x-jXACrQm+G`ldFx7|{p5Fe zw(yywwP0<`7Zk5!hCv*+v;-vO_kp*?u7LJl)<#~3#v-AFTz$EwJ!>w2#sLc!XTldt zFt=n(Wfcx^J*9dTe|B@KF}?h&rQzwRNe=lq74VsnFkK3b7Dh!slsbnuQ47&5eGC2( z`f#oJk@IgVE_Vu1l9o%Ip1rG^6x?BKUTxQOh6SU`u;u<)gDo)r_8<^SEkdw{L7gYk z_06C{y`U|~A(RlhgQKhl;k?p!f|>FDNZ0X#Axq{;A6s;vdLF^g>u-a?^tg6F5lKvd zU@z%Icwx!9Um%{_>Ioj&1B*H>fFs{@Ss!i*peoRFr`C=dWUypSJK$|flh-I-OL572 z4RC4_8!)aX9(Vd)J^g;3j@c0@^8hPjsMiTK4qdBAr-60*#?>ZYaAlxNgw`T3%Nx;x zMnp+wgxF%LMhOaxMLa|lM?Ho^(%T)hT+|lWKF0gDZbfte zZ_qeP(!vfv+p9HMDt$Y#(^1&i~2W)20>_F-`5s2 zhTmF(!)jMwVkq-*qUE1>B_G&pOW_z?@32F}kYq2bmVb!S5)i{XZAiw{x?Ue#Pl13K z*Bb48Lv9E)^*-Zs!4r&A0iPME3>-$Psbb^0Y$LhoZrDSk`%Qtt2?`NSXmJCFXKOK_ za8m(SoDzdJg8;zbB5y{^ckkelvJMa?^aqNTxexdvg2nH*P1tKo8i2qr3XG^!@EJlZ z3bSGyyBLHqy^ty<0?q<_!LYvY;X&K9bVwf*aP<;Lb5?1;-Z?82*k)bsD#Q_|i?3U; z9qhlw`$NE`bOULYyOeju;J*c-J~S9|#K$;i;laqC6sOI74LAeNh93Y9FKPXUy51YH zalK0qQ=*Sc2{sebb!AH++|r^OPPJg7F!XJQz7_Ih z4Re*>BArS!(z=Fudc|7MUx-~nWztGV+Av)VE*F~j9}8?h!3ZfI|> z<$k?SQ>EG7TA6*#L9_7yNnP(^X?!HiAs^WR9Y|!hwGhRq(77&^Ycxntt&tvu2 zhL5vg-(e{Cmen>9&v5?)f$eL(6CYkJm~Em{0sm@@tf1#qxiqP#ViAWJ(oMoJq&IfE zvvu+{c8u<{A|UFkRvQt5js~?D%M?UAqDBa4M(N*{HE+^NJ0Jkfg?c5! z*f7HVS^&nm>-|oaJd6Rn?bp%`{A?C|9$IjAoC^5!4!h7&jybPuD8sDJse+z;YB0L> zcFZ+8l9)Z_LXv9N>@yF;WsUwpmY_$h9XI?-SXpJEXAKXAV%a!$57Wg!;()aMxECZw z9q+LM4ZPw(>nlzCx@@z3b}~Ws-aAa;DWR6C zR5xR~K5kF~Z;Qg{N39F222kpw_b!B6zE7v)xySLUwIy7b%3g3n>MPW%k zPL0eL7^!NlzEMs#uhQyHArHz26Oh*-_w+YO!Mdi}?X62O;d76}fb(P7UWl+8Ua6CT zDh6Cv4M=EKwD*88t|1hbsX1s_EGPGB`X)ADe-Z0Ftxkm{3hAVM_yxuTOBjgq;E?@| z%pk_LO*0nJ;>CpHWzvb`6v6a!Jb!}a%Aoil>}$97p8j;{Kvjb8A{y7 zZH?U+-mRrop}4)TC`$w9(w9vr5$7S!6|0adu;Ml);g#=QsAMS*k^PQy)|)2GvdxYc zTKaQ*Jj=Ig_2y^t;9GT17k432XMWR7am(}Oh#&( zNSQ+_eQDY_^qD2u583-PZrbeBR~VL9k$$s_&ScRG^$5P6EwnUS?)p6%ryBe#7+$ef zZkTHwXrUzTvB?f{ye>7#ug7B;9fARE=bf2ltk)^gHg9|Q@oTkcOK5)dtnt1zAHSs< z7VkgB`+$~{&$0cg&j|X{_zeu%ZnK4yM_Z3+MtRHro;-K`+FCB^_ilOzX%lXolMA<> zAE-W^y`o^yYtR{^jk29Iq&gncuFdR{zIyy`=wCn8yr<(=X2j=EPVrqRuz0HUPRHqZdB*<_ X3X-#W3S)?c00000NkvXXu0mjf_1;Bo diff --git a/selfdrive/assets/icons_mici/onroad/bookmark.png b/selfdrive/assets/icons_mici/onroad/bookmark.png index dfeb0d7f55958a2b6449224f5f64e50bdb306d25..929654f0164d11ba88b5a9c1f141e121d68c63d6 100644 GIT binary patch literal 11580 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 literal 23549 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 %1S4P+LLY>$$YALg8yg+9fV& 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�E$P-RlgR0Tj6aX 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 KMNUMnLSTZb2uNuF diff --git a/selfdrive/assets/icons_mici/onroad/eye_fill.png b/selfdrive/assets/icons_mici/onroad/eye_fill.png index cc6d7666a8beef0fcb3be717e9831d76647dc8ed..438b3bc8c638d2b49a024b433e85a81eb18ce7cc 100644 GIT binary patch delta 4957 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 b67~HLh175j*K_l>00000NkvXXu0mjfA{dz4 delta 4802 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 diff --git a/selfdrive/assets/icons_mici/onroad/eye_orange.png b/selfdrive/assets/icons_mici/onroad/eye_orange.png index 3d304e462ee6f4d662fac32d002f0e78658f5edc..8cd92970781468a1a7c6f78cadde5240283c566c 100644 GIT binary patch literal 36473 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

}`(yw_-t5#~t&ehhJPSx|Y|Ud- z7;_a=W+vkn5akP2Z}mOhpQpT^?IHf*5+2^L?E|Mu&n;lB)I!9w_NM7q`T@uU60_G) zEVB^<6Dt^9KW)@wM=^uOscbng;E$)+2Q@t zBjW?GxiRyYNS5<5fpyJ|5fEY?cFGT;^pVG0<}%eKN4#%lNSo^gw6KHLGoa@hu#A=v zaalo>x26*|`u^zIx*T3yp{S0&3Z~UayH@iqabF#4WoGqe%k94z25Q(cg`4aS&f0H) z)0Nfw$0cX4Ny&>yAo@95Ecj^@+=s-27-RwT!gnPwEaDnre%UWp+rZWwaYY-)H$ZD^ z6**rQOqx7+{RqFcgVvX&lYJi6vn2U<@%92rZ(@B$xyj}#d#z z>#N1~d@&86CuV#7YGV;UXT$KhkZ<50kq`7P@^kBV`a&dlfvAOuf_E0d`xXFBTxaiM z>yb10sR3bmc~4SA1Co)%$UO=M%5Cq)FR80kqrB(KlpKT#n5a1w;Ia4jRS-!1z?4U0 z&m=p3yj~e~wPpp_%AaZO`0TZi$Kz)1kzTDx^+To$e4idA%1%g51)o!NWfZYcv~MVU(b`g*E~z)aj*ew*+bw{8AxP9 z$F>l}PWIzz%K+z}NQ;UugL)G*lT<}zj8LFH28QqwLhU6_Y!vXZ*1Vn+U((AK3}qbN z!W`(PcWAjs<4xU*#?R(zH%lW^%1fm&6yPb~$BzX9$qe^DV_gO{=nh&>K`$&|88vSU zzGtgb5_ph)kS8T2w%{9s4f{-r}LnuzGhxA;7y@hG8o$i zChfc83$(OHAnLrJwnP?BYtLytDeZto)VwYACqMXM61>@?@KC6ol#EkkWvwdvs7wB= zDWUq54&I72P%kHsg4$WXA4)!r!#4IB60RW5&ES|(W-DI@U|LxNd36b^s69WYKz#%c zCSHWMG(X?#2%kp((?(ap)@~Ej-R(#7Q&JIfPWVr<;w2yAC%dQhB(wuoq2_IAdjjKk z`VnF0qOKH2$M6wk4`Zm=Q>%`w?Z-@1xi3tRvZCRcJMfnJsk%E z-3-yT!$#foGV2D`d8a*mT*3eCq_&6bg6%#Y3H3mR#CYwdfKl~@HqfzrXMiCEt-Htr*aDP%ua$u*B#)iiU5_1<9~Xnop)+{*69ovFH#iQ6 zbu7lO#H)>dOl^>7T9f=Xo@_v}hq<{)*4y7f>vL!atjAE>7RLjVO|sOJ@FIH$yi1*%M)8siNWx>uTDX0aFpqenI{;8T3VvEBpvB`1Z!YQ; zVnBE{$-A0>2}qCrAyDL-$Awo3oyXBO^CA-M1)CMvS~!pbj@)(%^PES(6ta6mbiR@V z-*m}o{dCW19ittvo`5_|)Db3%RJR0E7;0<;NNB#)t{ zAq|+f?&0))rnw4_Q>uY0ZS@}uXziZX7VUub1xWux+{P`u(^nI#u%^#qZFQrzYJ~wz z;RaiLE-Sg=e0m!cQwViL(X1)mJpOnE^|ljW&dRHF&f7z|OplE@e&;Z?wrAx!g31x_ zp7w1~2Ra{SaLdDEZ?d8s^^@i#jKBsz(>QleYlC*cdJ57%zvQ>1y;A8F@ID`txv=^x zjiZ#m+I&d{#sL%Vap`ux>WI}wctbMErIjkFUPKMaFoiu*+uT$xU=#i5_|{^?F>vxj za%`n-qr4A{Pf6ekHpaC9iksUw=(^+?rM}kodEP4&((sFyl|%6zvF3CyQK=fqz88~)a&1tH zG(heiJST+W(h!Dxv2f=*oO7%bJb;Js5vaHo3c-v|wff6(Kq(o^FvdC&DsS@6UqQlS zEJv(Wudd5q9tWM9cUE+p%3<$+hL>6{&pqU}#A)(yyESjY?+|6TU&+Z* z9Wm*CO7b?-3o$^Q`r@ z*0%;q1J_gczx(IBJ#S;z4R_UAjax0d3fXc-U7`CW$fZtJszeEV)>70PjLS7?@MB18 znz0}^v$!TBuE4JKfB;h8%^Cc|xui3ru_|D5b#l7>@%f4J=Z;~vKk7d>8=qKAb$}J~e{d7tLZC#q-I-vV6Jkse%Ow%pR+C51B3DEDwYpNL z!-Ftv)^J2a^%kC6N1j>2|Gc(`;S-d85EKWa4$X$y++e`xkpd0`^r<|iDp9Y%bz{fm z!69F}`Z`+#NM|}S0I!A3cdfSMmfSUCO=8{&?+Y(AlvZR-e*++KW_Tzx+!$yXU->T&)kYnaSp$d{+&@UusA^@(e! zr!C7L>mEsp9>qw{WfiQwNmA1`?7wBPu50>)aG%p1kMKMEA=-FpVD?Nwzi;RJYQf&O zjRgUjMpyHfc)vYIA8Bbm(;#)@N*n2?a(kJK`dz&1&d=}H#@gswfI`ySyzl!-;)pVt zorn11whjAfY}NHf)Ll~l0WJV?ImfHyM>b7pPo+%LCvUWN6-vU~kj2S9eo7PWA7*7KcC*^Z|^#ervPLdEU|H}^+G#)wda zp`wRE3Cd&v6DMw_5gQsr@VUz41pfnA6XZssVzEG}3#d-!0o^mrE<%gsvJ$(~E+I3HUd9o`JuT2+yXcS>2OONlcLSbL!3 zr#wG`!qNRSvzDo%@sw+{wK!wBr)U9gt*A~E2yUrg`|KU&g{+y|DKwHwvRKi8WTppP zj3IQqzloOT_Z)hACAVgBB!N}Ea~<*RUh@Xqdk4w26)d2L7TOW8TRKZ=Ak$uR6OMH#+DgP0* z+~(Et*%KE+HTT4PyYfV)sRrkc={Hpyq8b@NJ$_#w9^`Toi5(nicR{dnR9a?Uj9- zRIobAXO>Hb^m69MdZtJk39)0pL4D(JzNPKc6zb6pir5&##al*NXCmU)9xHMzD>}ft zPP>eI4W~Cw_lsc=uM3LG>})yWVVnDiusN?m*sQzCj7sk1!T#*-XLcO#O#y~u$JVhX zkJALs%5xRhX||BG&l#Z-4CJ9%k~&%e8!=TL5lokNo%Z|~;*H1o{aL2rWMcN9xn^>t zYs@DTpHbHsh6z6{aFJ%(5aogEqc2R|<348n$>h$rnP5SY_WN+Ba&{evDpejl^n z*!OE{rR{JmLHguyy!+QF_twxLCZ=R+M@QH+?ZA96nEG_yn@yePnd_r zvGU%-id@X31~{!txS04YlvjiSzU-34$U>`5Pj2IfJ$PE_JIe(zkys?hhbwnw;I_h5 zYbXzd@ccE{R!HsR;jKh06cdaEIy`>T0N-Z($20KV_oSdG%(Lip@fn1giw^RFB%-=& zBUn(Wc1Y#=*)J!~B>$AKIL>+Nh^oWTaE|)yz{`}#wVzULV~Hw_9i&WA|9F4Pb!NHZ zk97M(VOo_eYB?~pAaGe|QQwVC>(R1>sH>6F?SG%^?ZzT$3^1J-)jnAFnc*CJ-M48+ zfgV`Z)chwcPk>>jBX9q~^9UZeiSvd0c3jQ=PT#aYFMY&JNE+Wb9X^r&bi$jhTapu8 ze=F56SsRlQviTLlzMu2J6sA1E)_}BotIUUAq`W?P-kjK7S25UocxmpjzrUrG@A_We zO%c1F2Dc~YLvHr@hrd4p7W4N)Id~|PC~B&qbD1iI)uqxSgoS{AZFjyrA+R=^F|!RR z0!HQ|neLYd`MTi6v_7fj8!;dzpf+{M+@;0ZdbDQ<4uqt4s@srJDm^Pv)VXGDWoKTy zE^~8TDXDuL)xiM%mWS4ewEd-EJ@lV(s$pbk75WsqsL5SA_M)fUxDM+a>HN}8SA}M~ z#yTwHc+^N}()*%zxVr9j>wm+)w0rQEhU^_LTtPqqH9MV%BeyHMifLcSgdMG^3Prl= z!malR5Ul6U$K+}c9AS&V|S7g0{XOMSga>P+=xiKsKoRc4NeF;Iy z=Ms|CdG#vo=*?0K?1OAxY8u%gXOy&Wpo*q8+%jC>uc@4Qe{^q;^E5Uky$-MVBf+V zzau{yYX}*)iE$54pBefjCxaSCeHHFhO-f_B<_bn8l7LzOtO|J%B|4Eg1dZ6mo-eMn z&GNhVTxy{*3gSJP0xOUBE*G&D4&3ic4*(p>eu$)VWkhruD;g;q^qtGp2t1;#KOAe5 z*JpG<8I66B#GquX+ZK=Je{@(pjF({aVU$JjazXQGUwqHo@G&tL{-WkX6XVKF4tko z>AxgsC!vo>mAL)J{&N+UuXC&J?flL2lAL4MD$>1|z!gaw2sL^~uv351F5{g-rh}$= zicB@^#Dh*cWF)dDejMyz{)g3Avn4T1Bqn0yr{V8osO9qa&K(swfYMvTp(0YT!=1{Z zLSk}$l9GGue-ThxdS=Ov@cIQrnj$@0J6gKyZyV;-}$`vz!RSIf*9v`2O0b{v7g>g{yZP3 zYRxA?O^XOkzaeh_2R0-?0;4({xpDkvU#B+FTmxi^7>q!uY-*HdttI9I`@NU4qe8DJ z+R|_HA6&G=;T~3U))V=35WUu-vRitkS;0^Md@hH?$HufXBO4zKtQi=zit;SZgGLXc zhvhl_f4#L{6fcbmelz4<2$VHucRA2A4kgzpE5c=nFS00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP`>vI0wa*Gxubn{aluqg9r!(BXw1L%21+28f@di+b^6j7j&Pw030G#5Z4s@q< zN~d&#)2#w5{eN(`fX_<~PFnv-Ae8jqXot4%?bHdhPU)1Mf^@qWmf#Hsq-ySpftA{a zn~B;%t(u6^nUy%FE2B%vCSanBmV^^N4W4$ve>AtIuWgWiSISueqJul|t3A9e> zlx}FcJq+uBR~sO82fMP*sxzx*DsJbcn}q#5{h@%K%7-V=I;B&(dFghUgd0d{@?VjI zUE0xcV^lH!-ps=MRObzmLR11p5jeU7#)_wiXhDt&Cv z%DM7)3NJaO%hIih!_xn|_^@h71De67)VBx}jpGg2&||RzyreU;7I3;b?l17X-b&D_ zVDwK40Nuwc6@U&K7;V6#uT*e4D?UBgm~rS@y}BFLlFjce*@(99dCcpjx|X|`iJzAL zKPz<=kkg9_Y8$|9pBt$C^Y{d(^h~B(16W%sptTA5i+(`5;~f;rz~_AR(IVVdWg}a> zLO(4F`t_$3w5n_!ftAo>>^7ZA??pG>XGSiLw)P6^p$HYpRJsGa6 z0ZGn_qaYOZ1kmxgdejN!)g=S7I;UH$hPq{AUxgK;g4vHwAa=Xbtpcnq70~)|k>6L^ zFBj%8P_ib+0au!omTS4fhBgoE{6G$5-tyZ=P~h0{&%Piwk; zfb~&f7-z+oCDr7ycq_?PAHwW`jvP!A`x^KeHuLa4o(O1FfO;OAf9XzX%d6PH%GncU zl2f-Hq~Ajs2fJBij71X@tyv~^NsZ8%nZ~}X0lNeq_6(ial6e^gC{~PWoRv%3Ml2A} zfmvsNTKls3#(q-9@drg#P5|~4rCSGBTME#s_Y@9&lpqHaxgrO%vxlX*b5Vr-TFk@V zmv3Qv^2Ej*MP6)e7aja;-icr--F|ZSl!Fa3pSWf_cIJRU8xg~%MSyx{LP826>WMm} zH9Sl@_JgJC+b^NE2!oc-Q&&Z*OVIOnjqM+u|FZ2+eq4b42W4J=bkoiLXF1(Uz}iw> z=+c=MYiHBO#xjyg10kO>88h{mxNo|p#|B!Z?RP3j>GpV>(*AmoG6?zM(hL$?vc`vx zD)O)|Nd^|WW=(c1fKC?;mqcp@rrM8%4{GGR{9TuI$nZn;$T=>Rz<5h%!l5geWuyN1 zw4DDDwr8fjc4A*QDcxGY+LD77wome{j80zo4ivKmvKE2K+1tu1TkrdTR%vTtPiNmL z-@aY`UR*xME9wUAmJN<{tew*X_2?XMW#hW@kZ7vN?8KZq(4inW=@A zSX`Sy+swYW3?$G>d1!1>TJ&+v-sZe325#sZ@px850WaN{*AH+?*Pd=YU~P$*)=S8a z=Ji&7yNU{Uz&J_SJyhKpw8pj(XfhbtqFS=VMTiD4_=6<-kVYR*Vwy_^g7i?t><||> z4M+dhSohQxZ@XhhPKG_Yz$px%=wo+0EW>rx$SKjw#fY-oXp1SP0s{iZK;O< zY@qeZu`Ea$I59EAaa~_4*pF$Uo3XJPC4XO~nuT`$EZ+iP+V7QFG_t4px3REvr+^SZ zu=S<+`V}BuJ#hz*=a9tQxRI0=%1Rz)N3;99fOk#~`^TG}8Nk|-gI3*bL-yrl6NDwU zbCP6^kiZl3vBxd%0b1I3ITO91FbroxX38a26#0!|)m{w@&HJab*_chq1vBZ*A)c2^ zP~X%LVp$AQLgP&AP#EZlxq-~$=nI>c`4%E8_*j6eAm_1q$9^VwoBV}SkYAWadtG+)0wgagc%4|+uIZTrtSwd0QUk4p5M~B4?vlxJCoAA<6W0su4O&*u*~l7V1-F3B z?X03c$6i)_N|b@v;o>`|GrAuT2zHT~4=x>__+rdT!kqMSWO=*LDu8qZ#C6+d%!;|n z`NpK+xHP(+#zIm=y=557{J6}=d-D5Fj{2*nXA-csM4Z735EX5J@2qj0dtaXhF_>2aA`&F^14?%Nf`RsFkTt*%Tf@xOb@M*Yw*K zePUOMISu6zBNA%MUj0I+ZdZ_jYr2ej@FKCP_1 zk<2A_V6Q?sf^De-bq-ZP+TL#m`@&N!>pPa%H)P|=OqM}EmUi!3y)SXWth`AJ$NNxs zj74T`Hm9xP267|wvwI^kuq~xW-tbc_ye~BNoCn+!2|eOx_5lH-ziW1^qt`iy5Fi+% z<+1OY$AFpcwo!3_q&@>fzd_(={b5kDQ_6i>j6bzK$$@l`(%etOH0d1>oEX<7=>%Am z8feLf<=Zb`n(-)OScE|2^ZPNa=ei@l;fJj2>;Fxg3bhpA*pnVsQQ~u7bRs4CAU_#> zH|T=bGn%aVx3#5~Jht5ye6QAaOB3K~9;ewU4vgzz6^Y;KKfd9T`m)HMl}l^G?3-(h z>$wwfjp+nfLvp6o9_6Bm*1Kp93w?gn3$0LEctG1J+KXu!XgPzjHj*DMU4$?TbBID_ zHX}Q0%0D9Lv)>3rzO0YxrlysXK`7cYro`RcDr9g{Vn~^(8KSZ8?aa-y3@!>x?HR`j z2u4|JV^ALEIRcwV|8U;+qk32WiHw)a4T;L;}`%3880qP?quh@iw@*F1awj)bcwzunu z9Sxwz&*k#*;qz^<;?NjUu~Z`4*N=;`d+Vxl^E9RtU_BrOXvr%{;|JsFzab%fN1U;} zNPrh%eX+$ppe6n+`=}?S!6)bWWNfo7+qQU|C1kJnjQTXkx3%L(+2+{Zk+u4{_%v8v$dT(|30^^YOd zCro|~uN6V*FYoN2)C9TB?e~44b&{Zjf*j``bYJv#MtG>JGYa@o$Swl zGjjpABW7g#c1Y%4jFmw}dt-P9m45s{?T?^XByd)$w~dj~7zNlR`B154`=E-Iuc=HM z+XLR*n6>_&cmvN!dL|f_{$F@S{>7`kEx0nRUq~|#krpB-1}m6Hy=W2pw9>FG&qX=& z`Yuch#Iz>gn=5V$0$rT5et^Ja+TORI%$Wt)idve=eIa5Iy?!)=!OM={QwRyQT@dqg z%#7qYTKV1PHg|x+!j}nvcY{~2D@#%G5E6mKI0&GNadX8%b7%m5R^{_1UKTeq5F zZ9t{}M_IfF`N#UdT}=yBruB7wt(5wc=5G-b;--b`E?3_%s@ktFrli@MWWyMMNo`{s z-z>jA+=XdjV}#qwMB}ivAU>-$C-z|IWvmOK*BPw5zkW6^w#G6$vrxXOpNDjYGLDO} z9d!n!%2%obq*A>pPw$R~!5Q4d7@vrPi}y<>TrlgR{=XtWcX5l;tz=mG+l3AN9(=caeVa7z_VK3tOIO=rsZ8tV zynDDEl(=Q3DL~$qM#LyNYZ$b%f7u%P8FVL~7V15c=lP7_fzE9UZ%Fsc_0^@*tun|2 zXHn0%F)=yQnK@x*98>#2j%*;aCGJz3oaOmcq|H$WZGJ(1m@M{1|{L;6c;Whl_EQ;zf|e%$gxLq;PoF^tx>LA(347yE%$Wm+%cvaNdi9{<Np*@fjoXfBy^M^5Sjdn+wS${Hva&^;Jbp(* zAx1_;V~R`bN3>UiF-n)O%R(=5`Mb!`O-Z)`u=F1lR`tBRU#9Au1b@(G!;{($c_*bmy^V&8oj$SF> z+Z$vq{OnozeW-cPsgCnr+SZ0|mcJLUg^J``ZkXYhb3S14m?i>ltpoQ;fL7N|xY^0a+E))hato13{ zJPM2^07>z9^Sm5A?(9d`ptj3AfKN`Doyh`7m*(aKvKu3Qr^x)fcnZ@~30V5S^c_H{ zk2r4WED3eik)B)_#@(C!K+9es#=6!R)MRux(*kmv73@T9Lij1ZC_6uUf|mJ2fS;DC zw&yVYplnF|2sbG8_HN+yMg^~W5X0<_jD(NZ3oeoKGzXXGsb2>rW9`ZJV)mI=9F>LM zu<3X1!Ek zT3@R{n=gZ%@UHb-in2Ccny?tn$!&+~0$=XPw6r>8e^A)l2YZ@%k1IKN)o_*iSRFYM zU`gY+FvA~Y*1>^XeTl4g4v#Ub(d2LBO+rsW=OEKsC!4oq9(GhZ#@ZP;+qs@oNAo#@ z**5<>$kTPErv|W^u$J8}?QunGs=ZJ(CVgyb^}MrY-5<0@ZMWXeR$2(*|FG5Ax?~!A zAEs5>`80sku~d9t-zwu&n09dqv?KjYLiz_V?M!A!rUp~J&zaAm`;V|FpBWV}MdbHm zTX;kY>6p71Wgk(@Sb){kTL(NkL~Uw)ct`%#rz8B~sQ|2M0&3N&FSa8`c2Dvx4YRNw z-@ca4aJFyzffnd_TD2|$E8aa42GRPl=o>Ku?a$MCik+u>rOvwEuJ_e#NhW_~V>jW@ z#?g%i9j@UMLZ;(*d1h2X`jY%((d3d}mVvSlAF2?n5JPAP#@*f{{T-8HyOH{PH(iO{ zc)-$sRGow0xjdJ3gTaaz%Sy|{r5blQs69XFE&0|Cp!Iy(J?z?A#%*rN@kjvHQQvMi zbU^#G(D~O-pw&_ZuKNYJv;r3^tIdkL4eF0#Oto~ zRF;K8Y;`5yEycT;;>#RNj<#{jdC<>px+1)>fK?X!_Kc_BE`R-%@(e2VH#Xu-+U^X={avrDZiYhFzLh0(uswv%~y zR(x-wJtE%k&%xXd`;8p@7XY>Hl2)Ro|~aSUdXf zmJK`wASpV{o#e%04gji8*#SnpMP za_I@QQmQQdxf-kYDw16_n1uP(BMfqZ!K@19A(N~u*i@3*-h!16R+vF8;K_k5=ZH2l z>&hHVhLE3l9{w5xn%UDMq@z_+AJ)$KPl{aq%1x208v$5#F&8v13;GR=HhpFuq?uNZ zQM%u2qA-+ibbNXZqXU*t>OP<){cSv6GzIgG618MrN?H@t-l}P(RTx%(lnUMwi8Cpj1TBAJYBxFRy8dn&&^C%OYHqLiK)?H3phQyiU15dg*?b`!}P4TdpnRpHk_%HU&rfDpmj;ACZf7SIgk6Oq%uos z`R%n~>)_?7I;{BEYPP5JkRZCMrCo2XkcVmK1DfJMePyM6mGs0Okz98IWs6*|U}eCg z@W;sZ@!f>u(80uCETC~NIUyCkctl>Rad}MfR-zFb=5|EO=`T${_c?gCopzPamo`AG3gMKdR2JMjWt6_xN3?@~A3G%z zu70}gHCb`|Fj?%QuUMZmlPlzx0&fKH`yE~Q+VLj4{Zl~l7iCTLGP;rSHzn=;;7`6z z#`5BP^yglYtGjqY>1wF^6;tW(9n>cR$O}YuA8ZP(wqz%bSPvo?m}a`}i&`o3YS(62 zf15bb4RBt+Dn0JLyN{3`P16OIV{cY5LqqHjmL}yz`8zSKBdLskF%9K6%eQaT11lMP z5XpJyr#bXFZP$QYk6HHWbuu2)L80|>bQF7vJG3>ikc|hewPp1EFc1g4BmesK1J|_! zmj1)~YNGeY!&uSgd^|fR*ZJZ1Y01(Q9Ixz?ufv%%Ijazg?Z2O)fx+IO<+g}xb$~~s zx6@3V!^2qtt;1bhW4czrDq!{9Qseh0jdNL=Sk*%1 zxr@+41Lly1b~+~7CW7zaAMZW0%GURHZU23aFZ4C}H+KRpr6-q~Tv%r(CvDP#v&?4e z-~uP6bu?AbYR|rZ5y$SkV<2(g&?p;%#Ck^XQQmP}FuA3y9bx~>mK;cpRau_Nkxz1O z@{TN9sh_|kbF|vfo*;6qOzYYJtAN$rQrp`B3Qn8zg!6=M19P^Z+#|nQriI3tqnF3h z+V{x>bAC@W-OKpAKB8j}&{AVs3s4^WCBx!jU6`K@X6XWQ0a+u^!G|4T`kI|i0k(qkF$N|8GB^*7u7(D*t1;Q(Hc67GIlNx0GaUH?VDZe=kI=SkB534**0;s% z$F$npco2#*wLDVIBK@ewf#?r%LkrV7(-YG=l8Tc3KD7E<>rZ5X@@&bp5_(QCvk^{> z1@-yU%!)?YT{0ffS^$#VW?5F)`wXlt5&n*}1HCGTI)(Xe5)3Tg{_B;UeNY_nZ{abe z#|BsqRu9Mqn-X_(vtyiRtmmDhgOQJu#yVD~(EmZfL1l&@wk%3=JNv*m$W)3W{{Bvm z`1`9DTX@rSZ8lnynYJ&|=7>K#`LvED{U7mTV0e9-rz9706rA)SDtf4pnk1@@LTT3! zYBG)G=FGYu>i10==&s7hO}V5zzxutxRv*hv(~kwP3N`#L^zi+x)U7%Kp9DhP)XI#d zUv@-8n9!u1KDsu!N=btJC}|mB)@te4D1oLKk;`mZwwF4*zAI>rT6fA!?X@FKu#m<) zGqul(DZ2}36;|?gecpPj@4O$rs14fQQTUv00J%Lw{3m!GpWO5(Tk1c+Ilf*%Ycuyv zFj>A9mjL9mN>+o)ERV=?*eb|u#^3tn<=c09JPwB4LItvfL>nd)4GKobv*hO;^ReC0 z=9HtZjd$eV*njtMcfhKS%li7QK7oo^gE(zPXn~1p4q9WnzK-WOpreL}+S2vJJ^}=? zGc)~mz_e}!NJfiTB)4mS2HnX#{L-HC(5sn&JOi)w@z@hAvN>>pFG@TA&=sE%zb)|R z>T|!&d$~y9IM3rYE+3b_9~Qy>7&kB#mbC?z{!cDr<5s^d+KF9}?8;!mjk30W_7(je zo<^GLf$8y3*6JY_a5q7x1=g(xZ|D#ZrFoooJmG7Q+aK%uH}(dtT>+~*oqwDbR-mpT zZx3g1S<~X#3>=Xhilf(Yy~mCx#^DWLZ8^8!XM;J20k#ZC8^`_}zbNM6AKnYJ`t!6> zO5@sbQSV{aNR@Y?Ef()jlSRd0qevtT%T%ezjf8N?2*a_(w)+v5Aonloq^eKnl$0eXD*EsbO*od zXP4SsCvPfQxft97x$XpHPBIk9@3mr!3t3yOe=R=Ujluunt3R6N%7CTsmqqk@rD&ky zyD&PKw@Y>U#`(rP7&Q`c?jtM@Q zpI2Ye9_HZ}8`F|k0#hl&DA1z-<$HKWpUIZ?1FbWAbdX@!Vn=9dnv3aPyPEG^{F7oT zzV&3C^u^t=J+tjw&RVu6Zcok-on>UiCK=ok?05Assi#b#2kS{P24qun63TT*1=q!C zVq8%SQndr%NiM`Yd-?j`MXs(MIQo0*M7~4=)s9=AHGNYbG}8|Cj7ZPHj&2|xq0zgp zR#GobWfBnWZO9;I0iHbaO5{nYMO+UF0QI>#HbtY|%EF-DHhU~iQ%o=5dHGQP>m7ni zi|JOX{{$Q;*n8>S^InqRrpRP~7GLyzdo)b}nhH2qY3Cnm&zVQvDb!=_iBBHK`rEJh zF8*o!xU}aEo@BaTw&_KFR=?Za8t^9Pc9#`R64B2}m}#zUVEvXRyY}0Bw$kRz^7I11 zLBTP0-I58Zhs$Gci@OnkblkyaWK^`KD}Z_b`g-j$_~7;bQeoX6R)TYdbS1#j|E}x+ z=ynfQ*NUpqOznVUjXof3U6WuRFz>XGA~N71Fkonx7#U5i>Wk6_x0-}jr#7u<8ps|f z)!Ww#Ao%j8fJLxf8x^O#d_;I6xBTDO-c`68Xl*-f{uUllZW6VDuViqg#o=>fFTFV5 z6|~f~D&1WmA@;{ojAdz00sDXO1fRoH`=ak+m|;)0FnulbJ{kbmJR0C~U;yd`y2&Z4 zvSG^xY4^H)@lO)zE*qKe9W0NpL%s=`co=PRc?7(UCaZYA9&Y`g-K>F;glit(T!eMh3Q2=cHfD56g5mPQK?<7lG2lu78nNucCMaUm?}-g+tvr zp@Y4&RiwC2Fgh?z&4}Hksd>t!HzBFt7UrPPryWfW>3Y3jbQIe0RLIc2RoKN?*VeZ= z>;ZGjsy1r3@$BK#`gwZF1DPEmsku8COm80JUPfGZu>sC5J}s%coaa-EqBcdmLy{E4 zH1?n1cS@U{fM2Uv6>pd3+?{0vqYUzVcljA*i+qXw03D~bk~X8Lu4#^=&Tzj7omu&Z zqb+F-rr)$ahI+;$54--iM=k$bkG^yG$PB9r-l5Ps)`m^a+pmKrkBASfX;T|W?TBxh z!WfM*ifcbc%*_1d{R?tzdQDoV9&GdaIHmG!UrYeU}PB zTXohL^q+qQ01SxEW)?su9WOYUuI2mwrY&S)NE+(O^S4YfnHtx584SYPk$Zb>*}Hit z@=3I$3)q$p7{+?h_vtqnoWHrTqg_A?=7`6*JV^=IBY=5MZQKl$pA2aATZ-PDfTgi! z0$8OJf&~x}D{@60@~V>TgtX`zsL-7jiedAl!_wd<^WV;*qg5V)Fv-Rm#ICyjMe9Q= zA9em739yRasZSvy4;F}(-K)UGU~`JC0kyI|;#G1)2Ah4eeRfx%B`chU?Ko#z5sHK_NOg%}9u z@k_woprt}>U+GI-`#v!@>3)~Ce3{Seg9v%SMWtnOChbL zag%3D2Vd#-U6XJ0kj4^VJoKGDiFI)3lc3^?IcNM$sqkhpfh`rhAVgAhP;&eyQ&sS~HWsidtd4_Yw0C0h^27x4K@=u_tJ0 zeG00QgT1#&*%{B~ddN&Lh&T1Ws<+NuTdL!%`T=-H(B+YO(zCm=vcxQG+<34{vRRJ! zu1KK^W`f#=V6b~dnE81f_| zU42O%q5WZAb{-fOKmF!i2>yg3;)*n1<)9?}dWiv($j9x7dL@CG4&{b6fSZdUU@_^Q z-30@F-Y;|NOm$;;9a(M1Jv^pVnbywF>u~mV6;wlCr;j~}tS3ehPIMUngBgu3K*6-Am1E~B ze!D%*Y$KJhx%WgVn;b;0oVscj2uk8v3_WB=dSpMEC)4t|8k zm?{JKc?E+{Qkwy8J7N(Spv$OH+o^*PgQz;A$ihyb_4CfOVy>*6qlYWzIgM*S|2%&4 zI{jIt?H`xQKlZU>vpcK;^&6qHe6LI<@$1@OlxIvh1tOcm5lI$@*8%mpAC6X^CLhts zT_6})qxI|YtpDvXO7G(#(gOjj_^sY7J$wTonzt~XtmgjPj??1RpdzCq&{t3Y(8+%{AgcTxcrp) zYm^1@rLrjZ1Fgfxv`oe@&P^yC`<}J-#st56)qvbbN@sm8M<3y#yA$l5LsO;!x}ktA zuUp;<^64S1vC%1>$AH>kEUi`M=Q*D}6d<)ts4k2fB9DLlKZI#`Im0?^L2~x=NFnoU zY!yHn7)gk1Vpcvx$=fXckJs=&N^1O%n#Ng7Ou^aITa2^w6}KAwe-)5NJ=Pue0H z9^IFm#}~dT3Dw0OcdS23YM|BQw3^H*5~)P)m%6qNvqdCKn{bh6AG7oAu{XPb)|VS2 z)Qi4=;-pgWZ^SnN1UbC7n7QbTwbqW^RNaYkbu zwM7xM(!18TJwh|l0N3jSq?nd&Cl3TJSY3;u&D`F8iHsm<-?=Y*jr)R-J`V%Xxx?Kj zdi%Q;b8t*<9@cvgyTF<7`hAwkAuBGyp+M|+&y&oI^WB)%mv$RZk~babb9^VTKcEbOgG$_~*~mup)WGPGT(pBmTju{0JK<-0MY12S_n_SPGUv?Dpmu}p2Z0PE{r z|CgGE#~Ie4zU@YnKM5EHsj~;}1I%n-0hflMj?jV>2p2x7j_kC6QfL7P#LP@ft(zw^ z+ANuM^$cmN76eKPqUJJQ)&Y;|>wU}ttW2yo$M6#YtSvdyYWE(}9QLHNs8Wz3TE9T~ z-I3bMX$zp55$hnOu|9h)k!XL-OVRQC zNF_ZU=*)i8M1WonKZNVaVnJtGlx>panHw~YRAo~ z{rThG9ehv<(2@Wx)4cxMge~=zK|M2x`e`QoV*ss~4>V0I)K>JiD(LA4+krdRwPPs% zZe>`XhwSARBb?Uo^UQ8E+mSU{xPY@FD}rzL0R=EifDu;}%oxtTIOw^7p+uW~UM0$> zrd{9q-=1pn9W2rWSY@Km%SCS^d>JuV9)rn?$F=&dj-?7(UurWC zx1{MWKq~uN5aUZ)dHU1dnZ7R0z1{bY4BM|=c=%^s`Ak4Fg3kg?UU$Qy%#TCnuAw5EzQT;@A!YD z&e@4+CFmed{(ZsbqHpo_?B=`~rh!&vFdqQPPHv!N&n^=Jr$A@Y&}rWLN1giyTJP@w zTHEuq4(5mlwa41c8#QqjXL5aj1@mJubK%o6$iFMK?57GgYsClwp28N2JM%HC-W2k~ z#2CcfOqPY$VQ%Y9SpPCR;1ggq0h2fC#q4miDh~_xz-XKr4n|i=2+C#hj-YSxQm2&J zRx^IV4&ShwCF%iaLNkr_agw0CUN864$`t2zP|{$*!r0-NWq=@q~`ViZ0FC%0b4< zQF3U?P>=fY5rl;D=Vd~vYYlTu-glwCQAyr7yjfcQTi##DoGBho*E?_EuAz;2gCYdK zJ#Kj~(6Zptcorr)@+kINvkgINHAq$ z%*NI#t=ZYXi)deO3oBU9CAe|x|158yIAB$wI#l6BAZz?b3sy3+ihXKAVPHUH$p}6- zPDx7;)s+E}y?sJ$5F`LYn%mqT0SS;0TNv9{G?dsm#TZRLY8c!3NbOYZ{r==hzeM4( zRGAj=TlGhV-Y%fd5Nx5vqEN|mu9mGYkP2F|qj^{#RXqCFTBWm(0dm>vi zpfL!^hjmcbVlZE5&4cWdZSBtraeM-Ym2JK~hHIAn_#~ENi@`yWnGJ5(`oF`n6AViT z$x=*4cNRKhFti+;pd2I@z!KUymr0H6lV>1dgUg?D=OT$jBWw_dC6~UZIHEowR=*6O zSIboK$X+fd=yjCGu`|i6)t}*prwUq!;?qi7%%l0;HLzteX5)*rgEl+A+kY=Xc4AtZ zo~IRamKL$K?HZ%rTa24xaz2xgwCM7FoX*!ixB?)v&hqd&pz?U#g~NJ~VPIMfd|Mj3 zTs+qeTmKRpC}a}K9YrnvX+pJgd=;>R1Su6sr~iKjo2Z4P%41%Ce&^>u{m$Q+$5QV z8<9_y%$-`IQq0i4pcNqx;tMI&Tfe+m>bow`x`3?YT(fVqjSk79!gmh+H!^5s&A6yT zs2=5m$QP~~=xgrguKzbIOr-)=`SE7?|D|@R3TX-<0EkYdKjrVlEQGX8Z^%JqzE&hm zh_0!XR)G$aXhLdQ#V6E-wzpHmYG#LG)&fLX{XA&`SO`UcV0vQdFc$vAQlb7;A-%v; zk{qgNqfSo`K^>(9+kh8uptS)Qk8D7S9Br#J}@+j%B zT5ViIj(M#~_^t>*d_2YGWOjR)PcMa3a2{J@+RL4XobS4jRLH1Nlz= zxQpBbF$#)-G!uZQ%?De9^)&iOP33Ep^6Iby(nra`Ty)R`3JY~On9zCy=Va}PXSzp! zQ-e4e%6mKKQvI7Pn&9Vsd@gVesQ|&-doYR$TBuB`gVf-^V+{y9uJH$uRy9ps4{!gS z1A8(p{VW!?OT1;<0wvFJ9qE8>_V-2NPrw-2g*)B-K)>3=4st4{cn2py$q$XQckOiF`RbjD&jLe=njN3!5leIyv4r#Zw07`=`mZBxPi}1K#rm?=zrPpL+JZ}a z#~AoQ<7`h|g^MlHRyMO)-`OobtzX)SX^HP1sx$1SvCnZ`DF<5;s{#SFhU3~rySozj z+7-?K0GpGX#Y}O3%#s0*2(f*{T)`9wo|^S9c;yV+JKl7_1f_+>4YgMZv9E?f!JTv( zrdw2Y#O$KB^F&YDQepsvj)#*k7KBZjP+6IR1`s6y0s`y?EpdS4_vF=jtaBlNtxg)1 zGJk*6VssvNQfhyF@8O60Fs;LzXg;j~BM14B34q5k#yLuhIctCC_7tUqWPf`+IuQniHA@1$48hjl+CF{RfgAK5J zkcSL3eu;5dN9LqyU_vOzMqywo>Vtn627!mef*230YCAfsH+&dOl{CS_JbIhGzp3Cc zZ+B8Uxb=M6sjo8izP3dZY}2iXbO8Ca@JEFEF^rLZQc78zQlmDhOlm#ea{o)<3hWO*Olu1cG{)BZ(XC9iOHtP0qv@%tU1kyE zbkKOdy8wypx3wT{-th}Ow6`n0xoLoer)B*^zuCeXq%#-kl^!(siF#!==#nc(A0nC&sUm6|oQyi9SW^|MLP^ z`gv?wig$?yE+)e|Z;m(Hw&!ympCR)rjB2+f=&RS35ZC&%KwK)vhS2K+)u}Wg8m+g5 z!E{%L<6H|<)2IOnglGiI8{jgB^I&9`F1TQGPnDJNV|2Kl?%_w z)3g3R*?d?ZdqEb2$)Wf*5R9(Qc32BI>s7bMUE5lx$Y+s;TcSg*F);c>K<(&V>TQhn zU^X+F%@_5I0EXVc-e+?r`?bE}4Zf%t$@Q_{!Qrj^_g~aoQXYT0zuka4`V53eaZ6k1 z!$1#cBktdpO z!Eong0j;m?3|fr{kTX^J`(j~Pd&uM%O(|5+`tYd$t>^kP! z{M|*Z%c5ZB@KXsgmtjiS<-5!M)3N?PJ}ZLzgD4PGIj>3=bQ@f6Ngo(K&Xri}Bps2# zxm~Y`dG$O?v#Q@LnVwCpRF@zFMs7(4AzT|NnV6eV=g=6T(O6qpKd+MB%ozr;_@`h(?uLCSE;VfO8DaTInctvpnty}bTxW9q#RL2)We zg5ab`!!l{1i?TdI`_5rPb-^|06Ru>HHG@Ct# zE-&dpfIWXxOy8^z0ldkeb=bm#$icjI#orB>6dYXP@lDJDPBAX*Ebk=@*BefZR)?hW zd4nSqL4aN|KX2&zFYHSG7%o~^!+qbT?%j9637V+DfW>esr;N6q;+T?F@CyguijJ3i zF&YTo2Qvnx511hIjZi^dt1YbNN$ZG}RZmLF?^>Xb-b%>OC&tS%WRtFauPGhy!`23g z-WnT4Z&!A9x7&F30Xl_X}fFwC# zE$GCzn_Z$=hKc=q=z<1Npcgf!LqG39zBK>snt4s!^?RyW__;U9{0d4H z)-yuwunwn3T}Y}VwqLCrYLkXD*0lteB?u--9ZATnQLblHYKK=P-8S#}sgCWN-*!Xi zTR~(}Axs;Wx5OHvsSz~S{tnmohX0-v?0njU^uS!eX6ylK25{E9Z(p<_eopTdz zT2s*yTZ=bw{i}YCuQx?p0jryZ@4{a;&mVf*5>3&fhz7aH>o74dZYa1}L;{`!)GJ>|96q)T0FzWsDgao8QhL zqfd)RR(xCz)?Z+VJU+*Dre+pudb_UqvBU+PoWZWmUaY>N-9QV!MP{EQmeE>(v_M(* zP44^&2x-V)s-X4vu2~UWmcGDni>5$|N=zi3B_oMp>%c5YLAa`A4LFH(;yP%=-ieq{q8j{tW7I1I}D)>bIc`fG$+d9+Y7Y* zgW)!wL)ZiEr(j_<_SX&sSlK)tdS{wadZGHXo-}CP_eV74#TR25YsJ>a`0`#`2TDps zC9lBn-|`xDO#mGL(tp^8%FsR#^Fo-K0B*|q|D9l0TS|Z>->Wx^zUKmE@e*m53FiDm z>X6U?j9?*>2g4kV;wOQKFNypDL;hG~Y6Gj8U4>@Koj#BqEor&~T$HtxJ1JX3d_Zkb ztsNTkJO#r!Xf^-VHV)5U(_4sp>MZMHA15IvDhQNW)B4y}O}O30vp;Bw*P;C*=I6i* zU4R_g5DEl-#g=I|MtFtvDtKp2hqd7t9f%w!>PN_WpB|U@$f~p!Oxg5R#5;#w=G1{d zvl%bj3)W$M$qicn_bMh)$_#5u8=|TF)CGC7k?-q($fN}g<2{Z^13Y|pN&${hiJ=S| z-!VaGAVjnCP>=+fgYX8%=P@b0 zkN2O*f_f*~@8CN7k@(ZTH;~@I;KSWO3;k_8-VU^J)=_EHPa4k^GXU=>wtFO>7--2I zus?{O{-J5?O)h#5Y^_e~!mf{XVl2eU4)x1Vdxftz1C-2sq8^uZ21RRw=*?LFnO$vZ z0<3~)pO=2TM*~W9RzPgSIv1WF-;NHDjsZsoq8K_Nlay^dA{4*(CG{=~~Vv4Y;G6kWDb$GR@THqBQ4Z!+Ocw0UFYi?!1Xh&x?6eBb8BgBD+fLDasKY|+>b`y z49c3bm)GDyr?oWwUceWcLM|YkH|cXqb58i8*HY^ zz))h59R@k8H+Ek$(>mZ=&iY#$NhV32Dw80Wf+PTrepo1h{f1ctK17n&kk^%=iy2iL zx0q=LG1Nr zY_(2GadVOxrDUw!B=zh;9j=$ag+9L zwd+ikF(2?N2uRAb+yQq2b4}yAIk{-scw1>9fEIsRQnkI`DARGB zOe^Np04D#ALpcPe&BZ}8qe?8Qf6saPH&WoS*n1iAw%=f;5dRF&@GCHd`%v4jd;OOU zqtSO|=_p{yAFq#{c^4kfp?ML<8(Wdk)fNStUx}V-A4f-5qy;qo`85s%l7+aBhLzXa zhO|W-PCzb~1YXC5EO~MWj0A8$1W&v=(?V*!31G{0?SQqVK9}$LSo4jg0jxc<^??{p zou?{TFYX6ghaM5%4=|$|lM6b3Hz2j_#J0Cx&T9az9=!T$0#KGOmp9k3N-;_7OJrr2 zk0c=I-$B<-Pc@~b%9|=WlyBEGu!3KUG2G|c*Z;>wp?!cO={UpM(idhL0^O&dQG1G&9%Yez_ zY5LgMO9q7c#&tEpdr|+h>)kE1RD|Grr42u7?NJ(++7EH1;AWPaAsyVTGqN9O{qey( z^f7ZlW#Fe=8oODRFPZ%HvKJpaXdSlKrwiOk&1nSQaYq>)D1yBVYX?Z-0CpyBsPEV4 z3_|&uo<@-ODHR8$>^6}El-ITXzc9;goh}8eYEGaO-~gcX24EgIfShMGGdyXU>}p;h zF{FbRg`I#J!t2B1+q6A&pwEW1g6UegUnHAu?T|By-T^!Az7+18#D&T&CI)vP^*`R$ z)2{dyo>cmxn1)pW*#heV>O!WVy#)y{^JHWD7(mPC(CY52&hG>5=LDH;g~0eC3E$0& zWr00L(2_TiUk2f=>N2$Q6T;V%$)=Uj2u@xV@f@lqfC-+|`OE-zq>N~DDk9~*iBV7g z&+>X3slAVT{h#6PF;g%#^Fc}fF1}xKezz~)EL7f0X+1T6jb2i^pOaYZn6Bu*Z4eAe z`nh<#lTdHk{S!Y9sJde2IUyD}!rK zWv8+}$rIZPMq4vO3!d2+^iLiQ8z)O`ynePlH(mZie1a>c!aVPlk2i+$*RrwwI&%gn zd5jIrI{3DQvRga734gb~75n{Yk%Z}=5_h5g)+`@MP3Qjldb?zexSPVy^wAf4f1(tR=wLCgbSG;TtFpvF4lGh2ej4xWyFBhF{+1&Qq# zowPgGJuB$BPeZxdn_WSR$H+%?)P(uG1(Y5PjU;>vqn2_rN~0fMZq57+JWmVrnp4$a z_v_0UF6sgE4c6}luqow5VRP8VcsB-9nU=k*b*p2%4=%}%pAUv>=Z!&Fpk&LpKhu(K z4qA)y1`f%+HHv*Y=&Vd)(OXE40${0P_NIgUjSR--D$P@CY#Sr0JIpn1x5V0$#d-i9 z%lg-%yuYj)Lk~<31z430JXg($XdLL%`$FG*8U)!P*tl|_H4luENrspPFI`e4SxCL! zT!!DT@*lBNJYh-NdWZpS;ro5>_E$R-(}@&*8~9-z_<4$-p>NWTO6I z#_&u;{~#}vvOX%zZ6DA&pzR)psh*cj#QpShl6^SdMmMv}ce#PqhkLZM#?x&N>@ztY z>jlp_Vq9H@nJ|II)(e}r4s>@3(s zJDIo7!{iz7^XmGqBUlK9!d~mt+Lb0y!`9~)YPK!>Er|3Eo?zMpq*Cxh4J;iO3|wI2 zppa4^p{;-IWvzRF)_1y3i*M5jHpMxOX}4UUwl!eTr1;voZ`2oCT(O-!ROGet_md=} z-UbP|dT79^&HLUa-138{n&K^ZfOQb=wDl@6EqRB7SP0aD!hdIbq=tmMa`GSa2P(B?fV(t#tlgF-J*o< z<4<6t;2{4dsLukQs~{5GCeTg;^|K9`lALjvSnzw|i`nP@MS z-3zo(St_|Jh_#Gc_I|N|^q#SiIG2@gB;VQAyuQ+!0s+FHNMl}ueVQN1&9k;(d$}_! zRL0;dum8`W>j2SX>5%}dru+I9;GqtZKqis~{Uc$qM%(jxEUyNK$wjfoH!w14&ChNDS)je z4j7EE1N8B>zHMNzA86elo)I4n(|$JtE52>qH7%^v2Ot)U?9$F)T5?ej)HfI-n1xkM z#$kXwH146ajSf3!13iEQdY_{-p*rFX$_^%~6X3T(tXxUp;^9Ai&Lj9b)@WLjS6Kgt zvJq0o?ol_N9vQGmvwS|-urxJ>DKIoApG1NSAp5BjcEk~7ldhM~bd-Teb%+g#ntXJ- zfbfeTx4(!n2|-8>PO)ueLEd%geHY9i))#yD5khOp&0twuswU!hx5ZZ!l7~J338cp4 z=lak#b9Wa8)7!L#4SX=nV^jBa6g9rbEGy;nq7cfikN4a^qb}5{iy_@ZQC)Jj#OQI@VfW2p~1&+gH)E;Zpv53A(`ryOUmO;7^nd(brDK| z+%}RRJI2xE(77E}kLv4X;y%U=OMQOdF8w%<@ogvp@Z6Zz6^&i$`d?YdRfAqVS?f*@~U%8z%T%-UXwwGnJ3RqageX~iD=FGvS^ZW?-2>KWq@W)}N}xUOT9)M&Uk<<=26X-y{3v4Bn-M;HC z;Mzb7AC5+jiG_U2NL_G<4s-xGwG~7N=%O{3;B+f$m5x0 zn%eqk>;DI3oF6KLVU?}~ShXepX%VC|`L)g}keFl)MjApKZw-TpPFf`vzJZo8AbXpyjV}6 z5P>noV3cjFSn;uR+4>pQfLjv}vHlgGmj8d>Rf49k3|O@_-^Y*3$1CvQGhV0|v~V9_ z|DFWg?Ce2HVAPxo5J~5P*-RP-19hgsPTWqBraP)*DmE`qFi=tb)>JIobS9sc`mQvQ z*O_V@k`~7GT$%Ij6=qtQ#mnuigwG;+xINzHwcS8V477M;7XUEI%gj9Na#N0<T_mJ){JN`h7~%jN6L5U`qvBm zZW-G@|LA_J)I;o$x&UvWb-uKlv$<3+K{k~#V@iG?KR?3S+!I~)P-BNqXRVtimF#a! znwc2bvAzv`AANDwhWbIk*4pr1S{_}G0gTsZoW#_~ip_50{rgdAo6tHyF$ z#x;A?ugil`SoZzGvj5E071l0*wWTycQG9>{-(xrWp7>aPe)n4Fat~sXLUS(l&$=u! zJ-4zfFwe`I@>BW4B(8M%*0wX~ase^p+y39SdH?jyHVtn|(!X6m>$&cVsA-({uI=lt zF=pj6%112ZZ9;#BFLwp4moWQ+tYXl*;4bK;Oz~{#P`84z;z#C|`4So@&`@s4d~R4> zN$VzADpQ_Ku79;Ctsh{A^yqO|M^dGFKd<+weIE1{l9@|grHVQFHMYIb2o4BvP<#TNQBA180oxTn4_(+r-zXV^e@UmX45%GWXiXjiNCO&gn3iGW0 zCM>b1lC}^k0xLInqmeFCi?xGZj=l9cWK4X`G)=1>azh2TSSbRdSZ`50-w7eqG#=CK zzXQIv7g%j+H^ACbouKU=H56KX2#kRRW7hA&U^EOe0?h1?>Pol_WF!k;Vr^7kRR-<% z`1D3)z!W|%L;L%83GuLF$=uTrL~D+En}vjhAMtDDotI;8p1bk*=7eN0vFmN|M4J0`(nNcy*MXM0~9Ksz|5NNNTQ1l1sV$cH8E zwU)P>Z0ASLIFNQPY`%%kGW}k~ka+Q9J%fXD$TEDVT;}-nKDWshM4J?EmWloVr}R*% znumg41MirPp(PJWoFmWa=bIAV#XNkzKh|e-xLciL_>22r6)D_6&E)InUF{_kGD>Dv z$GhICpJ|=u^%G+;JLY4(Ao~Y#SN`Nzi?zBeJr=;)lK!2l{ocnIo{;Y=0*3f|??(x&Wx+f_T5vNVp2sggEujuKAyv?VF)d&o z+d;OHTn@)4Cvs6D2Yr24rWGr}+QGZZ)MRpWC5Jt-v{_!>0q5`YdJlQazu|zC+Xw%Z zm=^U!%5L|ce0;mzyZW%kR3`VHzkSENSaxsGNMGaGIFZjCgbw)Iwd`H8xeOqRvTcIl zwmE-y4WV8mwY*P=*fk7Rk(a-jOeNo!a89ca{=GF*qn*9NmgO8@;;pPCfP7HV@kzju)kq?51-bT_0cpJND=DobpKxwH`&_}gzEr0!G_5xj&Km= z^#JRChM-!G`C65sh~>SrQrqP6^0)NC;{>Z{@MBJuX$gKa4xnxIACjrnKcSBJNAHDV z#?(tRhJ|BWy?pI*E1dPnz>Msh1RFDODl9)+KX*dBpv9l8v6~oc#>ClX+MlRW0YW8V*x1uwCCGvq)lKGqc6WL;YcKx6|Zc z?+6|2E18X}5!;S@a2;~`SQ(b3%Cx@3AL;1a9HR$b)T#(3V+=@#JI@D5v4MmV6OsY( z2gXAuTqAia8Y>&G_qjDwRPyeKJ>n!<8iB6Lk|E5V6!D}11xQ$|@7`~DQ~w6;;*=gb z$)D!uY1sm8r)<&_Lt)vn#NjdMbJXUnF|EJ41JkOHs@4l?C%59rhK^es(TBc-D36AZ zc<7I>Godo1zx7Gk$A!SAX`LX}9JbJf_pVE+3a&8~AH%mx=iUdVSfiO)TvANrb->Ts z=qRJ==T;Hv2PfD47)`n>C$6)XH)+0}S%>ntOb#@)`mLg*C8^EZ%O(Hp3Ai356`;Qd zSu(9<_Wnr=vd=~Mf;6%ernTM1^B1njw3>)=QOK)}esbpFe@tqofL2n|XLN5*y5X`(e+U z=hx47(^7SN1Jdg|f!2qJHDN%NWz6a|hQ8{Piz{fODp>+f?4#UvEA7H<(^EdzNi)xsEq66SV)BZ7WyCVtnX(N zb6Z<0$JS+x&$WY<)&4|M1uf~@yM7SFU=*Yw?7R#&uMz|D?dX} zSO6s47ciTVAbE-BY+=&eV>>toEsNTMlljH0?eEE-J2~PXB^7zw9!>LW$iBpur2m)0 zR_3|m{F#+}z8`4GN7!x+iuz}!J*v9omN>#Br$A`>o@E~?$9nyIx5(eF5$q3}o)}XJ7fI_q)~qDn+&YZ@?8{$ z`YU@pBIYXTi366U;%8`&Ti%il=XTH3+28~pouSL89a?^_fR3@lJDwx~DswbDyV0XIW2-Wb5zl7rT9 z=Q{d&&77;TBf$C57KO`H7I1U&;FI^@zHjxM2~yc-$J*vi?606g+?-n5%bKo(ljU30 zo5D%m5!%}X%t5zh5&mv*$iH)9TMv^eXzAwD0{T66?qIMXqkdEn+tcu(qUs4c{&TQ%pqIB#o~3 ztVR67{(qVXV!VlAL5XV3nkPy;uGMmhL!zC)R!uY@`a=C8#l|&1fV5Lx24)x7c5ikj$_qLlRRRl)abr({kkMArISn0NtX+_Za4TUo+rj zc|LmYMOGx5(0sdJ6811FS7oXS_WVdl`ahi&U7E$AEiwV`BtPA&8-IU}cPn zcL}FDXu1>H36%}M`3VPWr_d|MAr`q$3x6}tLH z`!(IRMLFG3?-VP~bCoN*upjF$wzw*2{ndJF+xtjWAJ1+LMrP`R8tiTjEM;tC@!xw= zJAs#_Yq>S&QBz-Nua&=TH$ngcmIhF5G7j`av3BDs^N`p@L_cTOwxj(v1*Ttdn(Cpl zG_+Kc&B$!WW?+*3Fhf>{>a0t>i3Xruh(I@>ibkE@I7#)^@4n#PEI&Wezk=`LlrBy3 z>xVZ1dk7%Sua7OqEBSN_?4gi4aBd~OB{dNA>bLRyg=)UO<+8;x%HpQIZB=%JOu*h6 zbvsH&CoS@DD1mA`Z{6E92EJXCt`p-(TH zN<8n&@u&GsvbZ19LcO&Ow^R`y*8mjhtB&#!AQIpTyLo#$gvpKC#-7P%lwI`3_z^S}hr z!}#?7D?VNnruWWm0!-wNo$Sx)jl)a7yrI!+P(QDRqz7J^Cfa`T=g|!g023i&dvfY6Gy3$hzSX-)-Ro^Zn zFR?9`7>5jtcf^j>B1SI;10!-P5=?nyG9fXrzMLOmGcE%3I&0!4iRT&^WTXiTJCmBX zx}&U2=UC%@Qh@7TF|B@h(}cHz6e>V{r}XUw8sE+u(me0Ww5no6?AqE~%JMdtk;MQU zgh@qXyJ7ll2d4EK+wP(KCT4#t+;zZ`%wwf^xA->Sxhe5g51XD!z}iwV3$|xtzYkP_ zrnCYg*N`-UNkjMJx~z&sF&{Oef0+ZEZ>YvV(?|c7qty{GP4)MM^T4cqhf#FZepxK4 zPs*8(%b6dR#sA553v@U4?vysXiZgkmn6EG581r4tn--JzzU~8BzhN6bQ@xl5y*`wZ z6y1Y1W~7>8R|l=XQhjdU=R=s*bz`wFZqUpD7|Cb9u-6@OymEI>x#tf3#)!R#saW{`-Kl6}5%V*Zc zR=Uzk@mL{VehikE+z8r0Yaga%YhYkhUcc4-Q5ow$@-*KK@zev>ma0Sk3wl2GE`=W3 z?OB13ebpn^nR3(YBz4-(&$z+B8kil*qTZE8<@T@GrF|n%pZiA;D)hU4zreQZsAm_2 zR$TOapVj~G*SGyx+8p99_RC(t76{xPF?`;?pD*h5)}h^ol<&8kf&7^7u|9%$H_(DJ zEhXi#Py{1$zby1YntAw~?gUzL7n$ZdO2A^*oBFWF7h78R~L;#dg!8cF2*UsTQ)Yh7t^}iSqwCTc?vb5!I+d` zA2%NZQUdmrhpU3tT{mGjU)9|LUr#-&;&kf(%Tk>BcTfeSY7HT z@`V-D#56MlTPtZXE4~hvXR(g|Sunz(-Cm<0#z(RzL^UtG*6cMyw6-MnM<6n_=afS6Xf=+Z(pLiL1VaV%K~G%DJnWEh+{e?u}^^Rvs*tyZ38Xck!e|Q>Bz{3 zDV^E}WSPsI+Q#>1dw|w$O}84bEEVADQPEr6Ry`tXFxV2aok3$x8kE=!n?qDJj*oFe z$N3 zH2)Ci(gEZ}<_mlQ2yxYHN-?7lu2+#uWXJdsr*F>Re{1|c_B}3)aj_H3Xu^LqFgG7R zZYTANfK7O85MVgnKRNiF|0-S4Cia#gXwyz zg`7ZZk)9dAvQ+H*Zxzb@Zt41YCLP1V$%4N~V}$#dcj-_c*+pE(aZ?x=!b2ryjJ&&< z?ln_h$Ni8T333c1Gs57{e4=|6bKOX*cIv_~CUHI%E&ra!3t>Vk?*s$P_#Ds{JCL;u zxhVbFk!cxdQT-0|HnzN>LrUaWGDkd4pvCE#11wAWmx`HqR?I~0W}@^3VBb?_9AP&) z+;~lou327Bzkzuxo;B@w%a73Osen(Ll74KmwN=TJwt>BllA2f0q5H#+F2 z#B^gE6Y1lj1NV?cxWrK2%;1p54V@WEjT_t3JiJSNnH9sOj``ju(^J_c@iUx2%hNLp zSX-)QBC3Xb14gwNxRBUHm=_$w<=H@>HND(m0Z0JG*OO7xIzt$Kk0uyjLhYLURC(9T zLl0>8l-n@2H=8iA@VU`5fMeL$2<~J+q)R3>uq`sH8oQ!HuthFjL_9=Oi9P228-M|y zmY=Wh4qD2)!MfTwAO?m!_v=uZpZ0b>^Pu%i1C}NIvjw=mUPB<>#LBeFaXtO28D&g8 zy5rX$$cL3r>;d=qdEU%sjvfQ1xTNEtGWyU0=+e&IywZ-Q060es#8WZ`xI5B5*tG^g zU?pIkjN@kuFvtu>>9R1#{I;5U{RL!4rgiY!c%t3uQQkB@OH?blG3ysv1Ec*zmwa~;R~#3mW&N(&@qUt&}}o6gM6m`wq|v8Qy{)j8axmmr^Z zFu1@Klm2CX%7Y;FBekY~U7GrU0~fbjdqn(Sdv-zV1Xzotzh0Qub9D#kJPx|~0VIbn zoj?fE*__l%EzYl1WO- z^AgrIG=_R>tgtnKO-y4rtSbganP|^;?$hGa+z+%47PJhS&mmxR8xy-%GWBULvL0{q z&>l_mj54hgU|o_baMgPgi({SxCe80tfASSh=Q}*FgG$Avc zR$q2tH_!-1!oI6$|02u-(PpoM+Qy7vWH!Le9DEGfu|JfDA;8zqjhg}!^Nnjq2FdNg z!ZdDWe^$)Q*LDQ0yM7=uU&+VE4Hk^wc~fJ%;-{tT*PlhEbpou1NC8~VxGvL#K(Z$> zYyWzze;s{J)6O_Y<9pSM`d6%Ek(LA|X?{2X@%D9gnVC}t?o=FsXbLzT>x7IJ((pa% zO)Ld$GIHunL~<5O3m zws_JxSx0nF+H@#~{Vpjqfv%T{#vorq=fkHGOvHEblA{-E76w2b7`l=BJeo&3uq^JU z)g7$sh)HTpmK)LY$hXp zIe(~+8o2|Gxd}6Gj(KA91Z-Xb;D_&}9K;l|qU}y|V0v;yJ3GPIWHL>2KL8z@wV9oS z$s!2Ah%gMDnV9DL4`*!6yOZ;AJrdC_Sdb8}ciqoy4(ic1ZO`@E2ef|O9!=9_1Ay0k z{KX|ShY}`z{V5=J`8j@3+WEJh4bVCP))i6>hj`AyAwb%i13F3Q#)S;c=F93S1gk*9 z(O=8}Y4;MY{8=3K5bUFyQTU3|;I^3@J#S9-v2EPn@dj=Or!ktH%*3&O%qG2A*0TY? zBIE?r8Vq3=?HTcZV=vH>w*z$S%ov2bV4!|MMpVlGGw8Fidw2q@9a06Z=eMYNd>fm& zXo5dF;5o6}WwQn8OyWswj?n@i%W`%$1ac;3M-KLS?3k%UKT=#O`{#I1|r9tsmsF1Y&laI7PfZqXvbsckJ%LQhXqsfI&4Rc!y6VL zJGN`tjbZD43cejm;vNA8Jlw@ckx@sY#IRbtoRx=5Ovu$U#I}n*t4}W7i)mG#))ABS zVMK%dgFMz7)4Jv6;R&!FQ*v`r>sx)!GeZC{20l)X=p()#JLkWJqpfB~_6VAJL8u46 z9(`ol#vJT~hB?ypzv}E=|RH(GZ(6 znl=o2ST6D7X##^OmSUZ^{+7YK>a1wGO(tD90B2`^tDdi)9KmUBV=ktHxnKybP|RD0 zxlJ>o2V-kr+mlQ80Ifeay+SO*JJ;)Tgxv1bwce4|<X{MAk%5w#X=5CScgwoL2D;}TH;iWACTh=E3P9pg$%UE${*XZ3Xt@iLms;>9>|x? zOCTGI%PVL4; zj+`?sWz!JUH^K-GEel8r#c5UoB$yChCpXa~1%{ zSyxR%C`D#s19Lj!fN$k^b(mfU=8j@?Ff)}d`Pva!g^X8aT7{nr8wSQz~ zmpl5${>}i&zCZ)1GyFjQI(~%5keq2T*sR)l+4iH zjdCX}FofZim5hlM+XyX_Q{P*#V<^(G21~amZq?)R_35x zq!SBFr&E7uATcwUjXnLaIN3igCe>pBsWDa1vL~13wjzF|@y%u}IA1M<^KO2(k8umq z39xQ(((mF${89~%_;&eguXA6{*=m(8!V4x-@yP04-isG!fyDAGHjE3DIqv{?t1|QV zyky&gwJe(A##a5{&pT6fJtfep8yVEcIe?bF$}p)D z(|WG}*7tA=(h0DhqU7wW#dzH*f9Gim*W2>JPEuk1zb)D@x9rpyo}ib6S1dy!=(^Pl zQ!^JEHxmXnH1uI?|FR#({-$t|?Xklfi~2zUsZXwpMLkT?Khxi*xutb@2uK+z5h_XM zY!37INd6{ng;{t4tfx42$NkIDy7Tx7I9L@}@trWIbj3CntPCsDlbBjK=Gg=RmCGrc zd|c0bpPgmWakYXS;kmB0Ja0EMZ|v!;fYbp$y6HP-9klLFCs=7@za3(%5V3u*L-?!! z);Dnr(h0C`S<*jUK&D_$1HpR*~i8R zw(_sZR8Ie;QA+sJKEuYIr21?wii!85CuQPYCF!5q-Z0It5L<>^bbum<{LE&za~nv% zhFg$Mfb|Td0%99@y@a*{x&6IV{x*&KV#_dGz)zRR+B(=xJ)Ug0Zh}D4O~=Qd5)n|u zj4QLhficilzSOPyjVZNH#ZT}BE}lkkI+iMEwRdS|<9QkzI_pfe4O$=f4+>ztgeT;QVPR+Ga|5&c#l$=-e+|g&vuD066k;qGgD*`Nc?O1;)92L@t`&?f>gQQC z>$YQ`$ls|f>X}F#wC>Jlj*Kf^+VN`3c;_bh>8_GafOSfjrVeW7@BDV@?O-S{Mb8}F2lcRE8ZX(kY$N6Hmpj zc#bV_czaMJZfW}e0YghkwS5AMeEbOj4NbfkqIdM}}O z5E4o#p@*NZ_vd~H_n+Ur*36ulwPu|&d#>4MpX*u^{Z>!|wmtsGYdkQ>?V|j0`u#z5 zuF=(1j_Rel`Shm)=vg_scn&)A9<8n0Ik;3>^gryRrwTeb{tuV7zepB-{tsID|F8A` zIQaSV|8emDIQUNx{{IyRZmp+fZgK3lSoXZ>$^YSG@A5rP{B~=Z1#xzUU%J4- z@T2UFxxwqw%NN7$hk^La+gBOS{||vVq|(S^$jwcc)^+&B4fysDoZu!iwtRaPyv()r ze%zEvW^jy=IA1v7%wH=UmgeJM}!udS)7CC-L6~!GpW7p z)5;b?qw9np^koR$-~We+3aq%s;*cxOAC|xgfg59BC*%vd?Nk{bx%?;Kms6^VR-O1p1v-eK2*UsTH3giQ zI4#pD;RerCzaPlDf6jZmkr!(pu0lP$5}ZU6asP?1Qs8ZbFYB=00KTMg|Npe#yr@gF zGu}zifMC8u6P;;sE=HwVtr?%f39rhV=+Fll-+D7_Er(|u1Z+ziKfU1!-blc(Ah6>2 z9=iQ}mfw5zw5bixFf)lEB7A@pMS;`*Zspe0#dgtP!|zX?`3 zvH$T_h|o73Sq-cFRZUxQwHYb(7blkTf5YYP^B{(*|J7!rkyLRB=6S~s7OPg`!xRFT zn>1!=^~FbnE{<%knFH(D6Ls1RW_P)rLxDHkSjYMg^hNpO4K8C1`)mg zvf6=uZ?Skv@ILRnaSeHJX^KGCOXrtoi3HHY@5nrA2j;hL0H&Mx+Q*FB!!hwlxR_U2fTr-*Yk4VSE|>r zMDqi{Gs8b&8|Ooa3vnpw@+!joocQ>P{kol<1+iIworX=okI8%HoWH&;oN8OXG!8~v zZ5bxrEF!La(m5~Ym+?5#Xg@y*>5p1{z9P2_w`=An6SNCVP9keLM>f}&)xo%t@^}i< zhW|vXtF6`tbAbPM?`1*oNrF+H&3`(0f=+g?S|pG{5-<$1q{|#J1Y;Rs)?KuGX%i{y zF!QEoyLe^lC_$o2p~>zKPM6wtak} z>{Bzrt+$O2%_(`%PI{0-w>&fS8?Dmr;y~;|!N6n6Q5y8j)_pCD){fyO2D*W0ih^A) zwC$_^f(_rUEMEOW}J$I>Z*ymi78s>;wPY_&yDpk)9!3=o+u%7nDp9TY46&`v->7;`H-0nkB;pe>+jn`P`5fCY*IbkgMY zlJqui>>B*NV6|Z2(yGSLinFTdw{D+4t@Zau>Wd?TjwfZCc71;Y(^rK~Dl)F(!DxHd z+PvNEi+kw|qmAWPWNqo@(l7P{=u(@;d@nI8kFjzqW6GjYWG}paXIFN8@YX;j^Wyw) zo5~oQZr*3-vfgrbbWkTXv10M_|K$9ppQAMC)X6!#Fr4a9045&GW_`Z2y$oJx$9=v7 z;&fH`-aTh{CJbo?N{UJLO6mQ{|GR66tbWTR{m00+A%BOuM+?KO1vgy<7^_wR3}T`Q zf%WQrI2=(u`{loHFXBg5keRuwZ_u1I5`5hT=Ad=1VXGUL)$QgYZ&*;cA$kQ`wY8zv zvQK}#XIL(6AYffp&@>;A7c01ON+LlxJgRjwsYNw{o>}5t;_zwp|Fn0y=N1ed(zA-R z8m+xr{?9Zt9Zx;=ZTgrtVss6T*Vi;NV;p42Te^_PS<7z?8~o2Xoc!6~K(E7Z|8Q)q zOY401ndlYk*I@`+sP^l*H(xs$<2|tymcrVLMD) zzP>}y<970F{0%D2w+gm^H;P(YXgOFe(?aXf}c;mC(`#Ru{7!UrB z3D)MV$Nbx$V3lE|(0f;T6v5O>@ov;L)QtdxTkq9l!{MwJik}o-tl~E_5qetdh_*4l zyDi;S93$uSbcpU{^59RCo5a?7D}(;o;!D9T1q2riAMt353!-6hUm5w+<^8eRmS&T1 zpB~ffGjr$Y&1#z4&RFh;K&TP`Eb9Ap^^xLVY-IsmbFN3C(kVfk+{$%>lcY@U4m{$2 zjwjgPh))%sx#22v>XA9qe`!GVo-@9w^P)<#GWd3r1O3E0Mpq=BVKhh%czI+FTIOx# zPla2@IvM`cuyYsi`u0H<^scm~r7pEFe~9Oe)U;wRCFRKp1y>#cdj5DMn8B=ZIwM%X zeR{`7`hoQ4rVngrD;4LNjF4f9&Xxkm?=&HktGt*6i+=liK?mAGQbV1x{M3KU(Y`q> ziKa&B-Vp{I(-;dcZf=px3SQbPGJD!BLz$@o!B_ zCEU_s&>Q?VINr`;rwjJKM@(Tcd7<9mk`crXeT4D)7V&Ia=`sVoLf+=(K<{LoW76QM zhV%1lpGNzJ$m_F0bF`dMkcqsDuX%>rMe3F1PjTi9EZ@W+GM)nb%^9reECyUbMX;NZ z(CK!%yCvzXTl(o~ob7UB>tN}1nLrUaJQD#7uYe};1g*Ml@l5nz((FKjNB|#u{Jf%2D3&5K3sEj z4Q4DSIN!;`?+|xUHxD<=2eQ(9Q*uA_{%Nv_NrBn7s3UG+|AaZW-2YIjh5tYXWCbz^ z?hSxcq>PlCqyn>qI!uPf>X!fGg29sT^R~opNLBirL>s|}RTaV%bBTs>EK0YVx>S(k zn+D37HJC%guYtk{SQ^uD-B9=@cAnZ<%e%4!rteGoE`4TIyA*cy@Lv3jpuMZN4bLbN z1Ffd(IteuPOy4wfo2DCZ`aT%c9l;5HDfeUvW>jZ2mJN`!mJQu8C&x4VmEp?*K5HhK zX^A+KbwM_y0cH8JwI0H`KllmBGfP_k8H*h@-0U(kHy>YLIVZI*Nd*~eSQ(f8>c0q; zeVm6#0qeI_arw$Dy9kga*S7Mp72BJ3ZWd;ltk;kwpm|jOn~60Y++^CVzh__9t;Gy| z9w(F045%x;E!h0llc~I9CejnI(XO5Atq?-tA{Zk3=Bv6y*ewkt{*xcA%zGwR=A{6I zb@JthAS2L+A_k**0aYdKS4>(mraO5OP1!9nYvx!QFr1-R?!jtoIJ3rMst_Mox6$H- zjcbIgJtKv$Y0uerVKVw8Eg^zKdWKj$4JkW>=w$G|HqnihQ~uq8{owvyRWuT<+(Nt?%v4yQ_y zSwMQr?o$`9A3j;~_%~JF1~4e|FIS=6q10uqyI z@w-R%bJ@Lv3Z%D)&9_nO|7+ZKilqdkRirE-2O8KP4xevA|4X-BrmBT;Pm;lHi|E2@ zD<#kiNF}Lp*NeZx#0{ErScmY=i6wD!p8!wKQ^9{yqzL?mHL*oq#cMe|E}plR9Uc1I z+Wp=9Sjtde5f+>jQGGyQh>62&jREF##mat}?yjQJt%?d>B-gqZ8)=&KswfQH#TF0b z{KPBY>-D#{Z#!808*?tfX?Yvr>farKJY4-iJYUh|JTLjtpnTR~2A#7ScYcv~dqH72 z+0epS;{*4(OReQ@5%1mVj^rrfj&`BMO2SH2O?yj`TRlXa4Lda(o zFqmK~Gw={iVD_bYjn&>nB7FTl>1RHEOx6C$Nl&~MJ;czkwHi~k`gfzD0aM{h7>Uqc zSu@*Q-;_uDQJ9=at$b}xqmjHg6~7~4ZB23Ojr_$EZB_D^7AlB0A?R_{0md39Q)LNp zThtvlZlK#5xGnUh<$><%ovrh!w>@&hCGP1DWaAF@u|%D^#Ct9mTae|%a8?Zu$FZu5 z>T4JIv3u}ZPwUe{a8#}SWp1k}6b+aefVv0P?8J-$(Z#+6}MLE&l z+qK6acE*c;aY?zIq$|XA z8Gp`zsi+)Ghf`JeF*Xdur!$$bDM3Ubn$SPV_rL~6@C zRQ$KURJQZWfcxs5^ebqoz&xspqE{nKOU7QP|WN05YCZ|2mR|=A3>sW+I?3)u{jlH-R?8DQCCqY$ z-;0H&1$;f}e4NJh{NF3Txz9r|wbvD$bGRaTEg;Dhx1;HKDq$2M;x0`2&rn(RQ8!0d znjp#K9(nB!6Byj`B$`r}^}e9iGJc~`^44Nzk(sU1M+ZzxN8D43+i8aBX+JpykCQ| z>FkhjZSG8E-f7Xu+iBRopIx!yPUpH}JaPaYUtf6KHh?o^%C3O-ku1yvR#S;zUkxzK zN9>ta9B%jAAPyPu9dpV&)W(dJcaRUxN_%=(@RsMb!7}bON9N9L?bHVJ#SbLpyXrEy zI_5b`igxrRFT^nb^m)9lEDdA-#f>Q`wwzGRdHCXTv^nUP&>n;VgU1Q?-!zaDAPX1y!DYB1A$6RPGW zp}`isdQOzT1f!K$P6AoFp}hOaj9-vITtOQR!5_Kt;(wXk9B7aX5zoZcjuv<4?NMAT zWqJmx?V1S+c%Ied;;*+f2xml%7%tSi;TuF#Q~#T**zerMEvMC}Q=$QoT5EYwB)QMO zL-L_-y1%JuyLOfNiz9D35G&JWbxq%{z1dle+}dpJyvX0dZh@O4Pwqi(ht;#SKT^jG zGkD{&;E%<24H_-48vb$kjK}+sbur-fg-e-cjRsQ3KMvk*O-pLcKs()a`P@aJGRWgH z%iQ{y?02+xVCk)tg>@kRInr{^GDbPr8Q4o)z=*Errl6~ADT!`rVc<3@Y(HX!f{eJN z`B`%6MoB=AlFfXisF02!6pdNi*nU->eUPmt-}-kRl{@C^1=ZNNH z5va?v9Ozb4N{Tau&O!s}kMiG$`Ie~FEy|hf^6dB=wmh zjjn0Mka{;XGI9*w6?R6Tdsh<1BmDzo8&@Mpu$HYCiH+}5v zi&~H~Sl1wKC83#tt5oq%(N5kc_&sEwKC4XoQ=kh>#pV!!^%%d$PH^kF;5NL58Zo63udaeRx$XJ(^9EEjq^>*r$i%H7#RISICV^>v^Z= zjWD{+9fgZwE_DHnn&GAf9kdx$IXR_iR{G6z)&e1EyN#q0AlAb$(K#X12Vx7Mt;J50 zz#Em$Tt8)Gc^LHDZKMkW#8ij8$@OpfowP1*1h{G6YOcaGeJ{>hT6o@}@=xS-`SIO# zoq`;F@w9kYNZgNa!Qx&Vn$Rc)5{iO!j|FoARG=l_N}$NP?R-)_gn7OHR7K}j zV;dMiI?q?%j%+fhXcW7J38dlZTj2pcKi=Km{Fig-2$&#Ce-y~y<#``vw|tNHqr;UhB$5hx;k0&qhtFf zy#LGI_qUIYf2YP3E}g$I>nEk~Mu(aFV6PeLc_Ew2d1}?vml$w{OMX>sQ9ZLtJ_5TX zUj1ela?%u)#^&PYbQS>7eZ~s6Xgukyz;2&as`m>rzywu;1wOGdo=F67I&;vPjdtHH zJY^PJwXqK!%Gwi7jGr>=9Qd-bKcX#&lM|5nHX~H>)4E5lcvf;;$Rrlf5vv z_TmfEC6{6SG}vh=h7;4ZjnG4%t;-cf`UzPTa+)W-h}j~d;yHLvd9Z>S>Z|pDvhq9a zkM09J5iFIHo<&ie)J~Q6Z9=^>F!TnU^vq7y_3$-BIUCO0`A4rh1pZ1aC=L)nM%8FW zukJ&@Ro93@f8mjV^`nkq#}lpgmP5p^xpXVpjGZ>3opGMr)QWdZTk8cNFK^R1XQjdp zO9>pUhrZB`GxCkidTOT6jMEEDvUx_SyaRSk7afXyil7&A*hHd~|~CO*@6iJ}>v0 z{Mj~sA*yUv@OS=tcE94d093g`v3tIQZSpXd=%RK6A864ro8h7PaCl(Bp|7d2Xs7xE z!tGK{N--r2Is^Cv6V?-5VaVhPUiKKSn@B(!&T9e;KBSmf1qQ{aAD`r$aqXo&>_ecEX!id(`Yw@Og=X@=9U8QE3;^7qGJuS z8Dg*lJTnH19>nbG{@w?c%K*Z0C+9iDI9$9kVKeBZnQEZ{a}$qYx`xLFpG=@NzqvuU zsO{b&Eu%_Lm5)es9A`wilP?D-%{ltZKCs7v&=;TsYZ9Eq)K(pA}r^A!( z8Km{D8E*fdmooGdrcjn7Z_{jLrk@-^#YLoXmF+#kV#AF-1Uk1$>k&6mzf$ zlSf-x%ty1AR(lmemgVyoYr-zzR7@gqns2vFt82{lhO)d_t?gmg^P61`PyUXN;iez; zcD_70euW+WdpVVZAb79Aa_X!P(d+8cNne$ye38PY09`E>*B!#cWqweE8^ zO4(Tthoc2TyrE$0QqQ>iKh%wRAH)Ww;{H~kF!#Ei;S;-k&^QR zh45u*Im>APrk85#$bTY%(q0Kw`I<{|>Z89sO;N_5j_(4rKA4Oxy1sxE-soG>ydq(U z*uL_sQB$V0dqnNH#=70d`MRlH;-&ZR+|@+eF;q-WR-;4C*Wc7P|W85TT2^IDzf3fu~w4~r$5ad9rnP{JehGI|!qvMGk95nwR z!FA8xOT@-B-4?}At!T@&KW_0-yT z){5fIK+n%BVC~1lx?NbO{S4w?{MV9yKKJX|zfJYa%5_B39fT#rVEz6-w%@0(2(O*2 zAN)#k*3tsQUMJ`-ph(+pb5Bhl!IpKmvsjE`cZ_fE@rvsfBY&ne3$1T_tujX_GgrOL z+YjwOxM7<3DHt|L7uNCW$JjfL?k#YGp1tC2%+*b+FUykpZKpKGf+FQhNzhFW?x4FO z@WJQzp4niKe)`WF=_5BmO*Z4rrdeb=-ST&7jZ3%eFV-H~!v3^{qwX7-Mh%lP1k{FPZ0c5F;o70OGP zs3*zBzGTmT35FK2;{@NXZq|`F&0RRQgd5ag5ZKDH^g(kL{(yMvT#GA%O~34UODi!6 zl=R4wy+;iAXw8^CV!0_rUjkgpMS9bDa)Mu#02Gu1R-a?t4^O`egq49=@Yse8v{{tg zi%9+N!6&QlT0x>XyA#DW(Cgb%CZW?QZEQnIn%2`bf1r!6dU-qYU&WMcP*j0&b^c@K z4`Ph}Is%}Pa3*(T>M64Ta;MDHJS>03#Q4%utMi=|V^pX033=9hF&D{Vs4uo_2~n8K z;_^|mFz~4b!v5_wH7nsZB(Mu<^Wn5fE4MiTOPS-oH*yEC6RwuE?bmw65a0DOHzQHt z?a4M36-E3ErQ8gA^Y!XYO!W78!!OS?SZ%9N52L30qo`#B`9x#ZY_zHgYlvHvO8}S?7cDBgt)kO{nQ`)+&1bGXRC zY;Ydg`hqEU$qjG%j{S;IzBxqAB^C~ffT9R@ZH^#v&W(khdb(A`>GC>?6+*lvxxBMb z{rjjOfr^XG+SU&PtH8KZMByhhhsrZiRyd{cVdKv*2L3e4H>HHQIEnnvuY5~^OHcH( z!#8ji2xPf|=179qngR)iqNR0sTXbu&lE&`k2}bO~Xw`sMW*;(abvf+BP}W`CQgLkT z(e3&iR(yZsOdKS0o?pLbmT&d#_BA2ciMrshjAU|Xj_*0wHnDE8>rd(V<(xocot)JE zfT|m;@$y_28zXe6L)~QNZEy)(MK6FpfM+UT^XowF4r!RFj#g_UT4;}O30*HW8J0UB zca$u?er7Hi$5*EI3;pivo0A-ykDvED!UMy10<~x>935D7+BI!1MI@iw|45RBwFJ+| zHb>6x@3M7vKb9gHu?)vnv^f8|Vk;4Wv!$&oDQ6$8g+S(3`>gDF)2-s1;X50wzVuvR z7X=_vKgL$+#Tj>9sS=5hG2{2e92|RDx~xuTHd3TVaZH4=`4HE|X`M-`t89w$#dX_3p!RtH64&PF2|Vt_yE`j`BYk&k}6>jY-aOHtLQG* z-+9RuA|h$zAemJGFxTwlK#<1kYfpF8rPv@doR_=BzEqAf4{4U; zjg&8^8Vz`w%r*-6)MAkS$a3H{<~uQzhT0u)F4eumUSvY~%s?YS*!eH;uCScgx^2dB!D!=Xd1)E`WY%isNysp^BmRT|IL|5cSJAfs~wV3UR>$!O~v%r-|` z!uI9#sF?@a9HJ|7P~}FFf|5y%(sx4Weys~%?6WxZPFT!U!WRFBteyy)7R zSyDXh@PJ4JB0E3t(N_41y}D+B=+R1-&3SoHxu+ud;D?PsQ|q^OpeH~lz|l!a@G{X` zCIe!dDJQ=$%8&`w4&CT_&vK>ac85#i_lXopXu?{P0t+u@)Oc(u&DI)-X-o^XMfa**rlKDLw*I2M?|pA6 z`T5H~&dNTwK{NM9ZXPHgCgJmlm|oF<5DO)F8;bC|Yqw!&{Jvb*{Dp2v@AU^WNuGxh z9|IqS9Vi%m2Ei*Q@)t*Q z>g7A8xEKq6t)E9*CmO7tNBIKvF{3rydbfH7y|qhp$tAP^dXCRLVY$;tlJIKl_obyM zUi6_Nrt<#!10kz*YmB>|bJyOBS;NoDa<~T%z4`sGM{EC|+yg|Hk zn-1x3?qYyd!s$KUM-pPmj&XqOLKM-U&M=9M>YvG1>Zh__FGR#?D$0JEiA|YWG6vOK z>-;UI!p&JYO24Z#o#7+T+9zEU&zN1ZK0H#AUBB7*WIa=SFt(!{1U42r8t32oo&$#% zP15o*mYGY~_8y)U{2}(XNI4;j=DnJ zF2n6)yv)m8$HMq^bFVAI5^e6o~J-5)l*>g*gg ztb90cQGI5=MOZ#x2xm2s2r4~+v%ef#r8wC z1NKMm1dlN{up`TsO*+YSWJ|GNFox&#`7e1R&P@6%QpJdN<8B)iA!(5|_A(Ja3x zGM4uS^-jMTu?&y9%tKJ%htHeV!{i}OT*$VY@{6YJV*Ohx3CmE{FhJ2#eWvT@+X5hnZ*r4QUoI+aie zYS!q_qJXi8{u&_R=Hi_b7A2kUdtdIs;IW^tZ}=Q-tdMgY6TrgV25Y~{3~Io2XD>G9GD2^@=R3hjiA50TkcuxVI9cuF0T7?C`#^SNSL`*G7bcAL-#aYE@hTLIk zvnoj5+u7q_!ZHg3gGNrAMo)q4@roI$=T{+8v(sc+p3aX+h5sc-ct}+w4)Ea9|v6d9-e8iPn~34~DR9ZTiZYi^2NRXA*Aw|5e)in8ZQ>aH&4K zr}QbEcj6-`G+N?NET8Iah#UM{m|~pYBFRE9Ac(N=VEONc)5l z&5AMnz0BBR)@X~KR3yowieSJpo0``=u?Yp&sZky-0;#UVEfcb_^ zQ|PD}vliyr@R#FPjGi8>1c_VZ-W?AP}vC!AU?>S%o?2Gh$Qqeco==)1n&7BcD zcpHlNBKIEbWmK$zKrDelcF>jB8Zac^>J*;zxdDFWs=|k`n|fA~x9&e1VaXmZ!?zS+ zVOH-X^t?La$=u-4eT%J;rTXk=pG8q2d$l(kuhsvnn>bKN3r~)cJb%X8CA@P;y#Bn+ z<3^!@U6J%uR8#rLTrReKNq02T2^DpR{nvvy_u)*D-ctDX%^GcSr)vG)Xn-?kyt0={ znL(EL#bKmcmcQ`DG3WEy&py&3b)S!geF)k!t(IR8cXFt$w!wUtNvMO|cgPRera3%Y z-oB|$FP`xEEc;C|yT1R+^TZTZn+Go1Y8}(a-GR4mO0tceR_nfURF2!q7d}q;B~E7Z zMTIihNb+8EKnO^0;yrV})VItTe*;_Q8l7LO*ga}Lhjo&G3irnMqC~mrW=@Q`Jd@48 zuX{Kh^y+lvE+~vyJAUpaKe~|N7(_YrY2AT#weOVUy*OwTs`}_BGG|6s(z}*W8=@fH0Rf~w| zg7@SUZ?ku6Z0f*3lx@jt6d^(dM)KjtMu;_l-SRJUw)PiHS&beD5SidL5+k1jj4TW%^qiYoRnXxQ1PkPz}@no$+RJKsBNEA6G9htu_J&%8qE# zd35G?Y$>GGs!8q8@>$GmQr#9maI8a;neZ6XD~ONiz3$Ds#FI zx!)ef9M+$O-A`kdi%~S>c6q6CV1y6&>7I$-;wlQ&=yXF*~j}7 zJE(TP6^Y37Z&5Hv*#5}>Z>{y`czeDjq70cken|fD@eGI%oM0$L62eE1w0_)i)Dhl4 z2Lk5}A;)1nsg@Q;PXqkI!G%lHqfv~LfkAP$bf{R_!t`enO*OPnTsz09+?v!oqPA_{ zB^FjT6F%v?2%1cv@w0>up(KKCs&?l=TlR)C)v+z7KetaWD>Wy6h?`PSMGsG0HLYRU zwyu38#(fvrz`1Xi-uH`3jQBCukrIKa>+nIoQgY5L*9Dr+kN@tS2;ZJ+4W{Qb*ucCC z4R$}dfdivMK{q8ke(FlCJ!+!DY6^?@$3HyPRe-Lgyh6ZU?v6iC8%Vma1~*%F7%nGP zK+oI;Iv28O?C3kEBL!LgO?*iX2q$lZ3MYSvbVw%zMpTlpFVob##tV@2?msWb%V12y za9dAywqSic%q!zwryUBamb}GAe)e@ZqamTI z5<-$a#!>xjG+@Xo)Q?T#|MMzuFAStacTG~pg_nu1NrryCGx>);dGl1tfJ5zTO~CeA zjjH(a%!$&RvW&2!+e8#};O-F}s+z}6wW>`kLzpR{OkZSRuvmg9$4- zLK#hzg>$p#@klf36OgvsGc6uG+SgSbxm#unE81+J^Z0ohu`A{$+S&fO(=CmS2UeDt zaYn7ZLEOUgQp(dEt2Au*ifs&?%VV+2fQfugp(Y_|+jqn*mo^HQwY@HXhIuS&!}l7( z-1xk9@{Zyx1?X5*o z2%$D@?piiP5}EoNAc^eL5mJ(cc1c0|+2#;-#ZOj`=azV?U-TnBGQN<^rnXGwKC7)N zJ~0yewSKhk+wzgVvA~@zGxH2u5!N@;f)iTv^&1Qm8{amaJpU@S`X@5|Ai2p67NqEa*;J- zi12x`MU<&(ETC?bgCi)(fwdV7C|#4=r;4ua$XImFS!iDjC5jyk6PqC@yX-1bl4-Pf zxv9e2Uq}UkaPbchdM1|+Lnh1k#Vw`P7hdQNg~SF(I5852R)|0pa8ADO!vqc2!k;oG ziZn>I&u8jHI0=)ivJpxUKATqdmnL8&f!bB~Gq<%9C6Xnwv22~(VdQKzpq1sG9b+fY zuMFo4%@TCG*s5hXc<4;<3|fez<+szLd^;gtzCJ6(s3w%*#!LgU0> z6J3a$dJIsyK_3XM39r_i2mSP2kZKs8Etd{x)kGRvy6X@{UCN){!T}K`j=4^31J=>Qr~z-^Xigbk*v!Ag;Y}TE-jt4M=c2QYEpYcpQbkxq zmXDrhch%ofAUQO1t76mJM-IvE3dg^=NYt#D+0x=OUE!|z&Vt;vCRw;)ky(*{cxW;* zhDmgts3qWABVSo`FuV*LKmwj{@T#F)6)LNkolIn6ZTRTnC!iMp!5?#pAADry{T?r- z#lLA2QkdEhj=W)3xqBq5-iGIA19nMMO;dtr*Jq#7ytuoh4Hr~jyL#j{r4ADRf(7=H zm#aN}Wq`^Z$3_~cXbfc5$)c9G85iz`NJxAP1lSw7HFp3Dl_er+Z%lZaFN`&d7r;_}=6pcXTX}Cp!CRlc1O7#M z{mG>gT2;jIn;a?=B+k?(_=MxnmH)ULA`00Q+Bx)x)r@Vj!x!{vdR#oSxvb4GVdYCS z_vGjjWsufIn-|M-m6Wler~TS*Q_GoCH=Yc*341JsiD_uz?sGv{LNUb&+`4rwYeA{f z$5NAb4c;iwkC$w0cB1NQE{FV7rQ3Y6j%$`*R%tM+peQ(WzrV@fJu@G+l|y>61D+jK z-=q(I=NnnCwZ8#gVoaQb$b4qh4)*Y;zPD$2_u}6%1AgZdMd1igFn~)x*WDvvF88;m z3QvU^)gmi5238ymj{->#p9ue&i1=VCq@WMf1kOG%CvYHNrq&D6V)oR4^smYNY9Jo2 zQ3O@onYOPHyUCBZR%4AbPmPM!lP3HEnw%7W;yC%#i68dir9^{;am+tmfm1 z&-N>UDXbaSYkLc`MGGx`q_Kz%)|_H_GiK?}kj{!nY6WWt)<;c>dgF6(_nLW(Un8Dg z|H3;zun3DS{%V-2;ZRq|XJM@7tF~s_moA$`sNsh!QIR3SxoVDM=FyMZsfx`%uM=^_ zv59BYWygB5e}{;jetu|tzyUoB6FV^2c>)!2lT=$8N#Wk0Q#pf?GbIa$!6P}rVZx>d zRXtZ@5j`pl{UmICTYMw;^5tLXimBz?o#Vb+D$eP`V#NQBGdFA3oVi&K=+k1uLfzx5rT zsfAtNnU*EwFMK~oW7X2RO59A=MvjkJOc%bh$gG@bN9MS4XE`Zso351+wL7}zPbeVy zq+IG7!NYvhGrM__iH*vQHb{CIZaLADE$?ashg_yRC+Z5(U!m{$kIydj&Nrd_Jx*_@d~Bzw*v z?R{ZErIwk~ZWXeO0h&avVY+*F^&`Kz zeN~YYOFlOuazDX|njdmQo`i@>GK3Z;i2IJ;{d%LZ#^kc2qu_;&f&w0s?k>H4Pj3E!7`hy&l9>@2l$|NFI%OiZV>ne{towr)4+ZChxc z@4@O5GlgerKi=LU42jv4kp7otMH{4ArhZIG^18$sIac={1s4jwGUfl~>TtGalKb&- zMwrSZXR+1q0R12WBh&GMy8;UOyd3EpBHo!DFOJ={PV&M+`6}8?4Ip3UoV&GzLezYK)F8Om+_2FOCItrt>HsF_^F zB>)Kc5djk~>H~G`lR{L#bdNK$Oul7P$5E!4A!a)LygNdpqqe$b!?*#-xnW60K5g@| zx$Puhef2;I*8%R=wqN9}hAxPM2z1^&d(xyKRX}%UEcIhqHcIJ%ty=02eF@>dS2s`3xU zzJ7P!crH{vL$FB4mXv~l`XkpFM|$!=$HLGB?y2sEvN`?wx}xd>xbkV-_IgYMpo%#vj@!b7FoZa2 zLiX}q+9Mva*~fO%DN_>}Wwa7nmCs!g#pc;2(3x$1XUdgh$oPVGnzrkZd!KwY5AG4} zKhU>c&n2;kKn(o|-G$rWRQ`8_(m%b=pd%tP{^0^VBzhGvWO=6*7<)DrIrn9tz!MiO z6(IaVSMJC?fZqXo=0Dn!?p-9xA_N_)6OHOod)9Nq{x3&1C@eua604Z8ZT~fpUsIDlT-?o3rAht9;$GfK2!0VD9&gAzbV;)Dq7DG(4nv zCe50|uU^E=FA0V|(XTTqA0haq=5P1bd}KigukQFE*?pFcPl3D-@~;dB+~&#%)foWf zIwM}Sz4oRC`jW^}QYHq8A5fNZQ&sq41H`JeKgm-&C%TiI5@y$$)LuDCsCSg6y~^!> z7~24_3c)}cJhklwwkXPP1BB`<3f3t>^{}bQM_-(~DLY@GbzF^bK;kG?| z&b=wXS$#QYMwqGQ`ylE28=ZvrlkqWYK~{h65yEbdw2Kp4eZEqjM1|elCzMg&uM)gJ zZb{(fp``Ap|9j;fxZlp$?n~tlgEeq~`}|LoO#R0@GG2cW94?pg2i2sVHx{)5j|#O) zSrHpu0;1B{hOy~02CBa``G35+PSd9710#mFc@B16xu93cyoZ`x{~rKYK&QXUZXm_( z`~;Lq?P~$HI6dc=UdPat>3B^oNt;O$y;=LJ0Bmu8DX_Bom)gXj#}f#|U1Xk1YhT5Q ziGgm~%l68AZXjnq80fEhy=wy42sh!iR3Y2x^iHMXo^tUgdg*|B6(@ zNwpjq4vCh-@9ee@@nA-{{4zj)t;{_ci1c$;6!9YYCg3DsW)<-i+b$N+q|-d81I zv~5@c-s62s%F5GORneeII!?Sn9fWI5L$hKAhnrXl@CWffaG&fV9HG4`B`JA%(7MPRG(IOQzKH1g;g(B8{qd&9WWUNsgo& z8pdF2X5+?bY5#sNpZj`%AbA)c(rP$0?ea+CtTu_*Ap50W$9inBXfH|jqi_b(9mkR{ z!UfD2WY@i_iY1O>Jd&?Uci6-kbRV+09N;!(IBr*R*?oW z^|20@@+6=Y^)vwg2*eI3VPSas%Hk^8(Z+oN2(=VPt0D@rRteHs8t$fP)_z`+Pq_sgI3yEi`N*FlgPeS zwYC59rXQ@nE_UPE1E}oCHAq68SF*M zOKBx+0O%RS*eT5{OMhakWHsz$UOWuTzbt@>^Ko}*-IPXcpqLyD>RU*g{7j5(qySSa zl>rfu8t?y0@66z9#F3*?l7OJWVf8P!ll&lz?ZzmFz6}OXBj=?H-($8&T9myTpp#_(yjOTBYOaE zfK-)n0Gfg>Hm@*}U>WrHB;s+uEGX51HeTYnEI`g0;xs|>ME?y{dVpz^UP`Jr5-0;R ztDdL+JzjQV;59%SVF^e@Wo?#$8+BM^M>ex+nNV`3Li#WD+TInf4pai{M}7g|RF40C z$y;6S`~;W`_^NI;0pmTmSIe0E;w}x=4O^CYjh8KPAIo+6WiTh3@rsXu?Ez`Rsqm^c z$%C?oICyQ~6zO=Sue`4#d>DZ^&RS(jn?QSgDB>8#(l#%rVu=i4gLeNKvJ;q*m-pa& zkoZKZh9~XfA3)41Qn8i4cg}k`R-ARZ-zz&oaPkgE45F0&*!_sK4_NXt#Rj^|psfe7 ziNi!bdp$p_FTY44<;@<99gUpmJk}LX@7ZAfk=Ek9yjfneCLm#=QPuBYyDB+28KvDo z8-Tac^V(Kb2@Ck59lRCdDj((XuUS$H?|%7mv&K~&k?0v+EMXSvU<{{-*}ypw82Dsru#v!trNeTONUr`-4h7{!42Y~j!t%70d&(o zr1)LGUx>ZX-!Shy9sV+8|PWFLDsYV2wBi6H$8~plbv~y3W}wsmHCbK_2l^ z{{}(Lt9%BbZ}@07y|3s1_K+~QraIQT)Fdhe8hHW0_RV>0oxPoFTd^Hz1(J6ld;ET> zm*tdFF{P;-qI5SXo38@^RQ0;S%CdC2B})Zl0<{BN&FZB)SKinHyk4T3W`N)M1$YP5 zVO9Y7_3~7{q&=&^|DIl)2PIzVqVQ6ZREhO*zkDcpDVrUK7^G!D!KtdPQ(6w=i9!M7 zRr)=kUN;V6W=RT8!1|V#BkkWx6|Lopx_Pnp_VVmwkTxx=3M=a0Y2c(KX;+;V16r|h zNBJx5T_j+fCTWr%z|4+Y09I4)>e!2VRO^g6pA&g?Zh%HwF5BxT0AO%7DW3;=Rd*-e zSptjufpd~IPsE`ugLeg^xDAF(BF%wTT9N8gd#ZcO;5Bq|A@z(RETvOvlkcfs@H%qK zk{URLv7HkWG!x0xUhhIu=dzPhlrg9bE4+mlsRZmKYF(CM*;9Aji@G?KVO|b-L zm&Z$RP(Yy;24ShpuIDZ9*pztSYf&kyr?EOnrMzGAlAvkgKt=Y`m50@2(Uz*+&B*{O0~ zVb|#lrJ&5J>kq+_{)XAPSM!Z@ym@;(9+gM55x)TZ`Rdm!8JoSNV5hgd8OO@=feQIp zQY1jV@`!plN!U`?EF@zSb@YS7{aUw*Bq^BdsN#>w27&T0E1kS}SreC=Kt{Z*RgJCd zj7`@Y`#-TeR{%Ce9iAM;EK5vNRow;XGJs72n^l$q6_vref(^<)qz+6F4*Rx(8kL*C z{iZCAQ_$v#M*?Uri+L!P+RRGg1j$5e(DUMFrjAJ_b)+RU_Ih@yeg`zDltnsK+vzUr zn{)lCsSTE#mYAnqR<$I@GHCPW{km>7l}B-D@?nI37jiWhqU9VU5qK)ELxh0{_h z*9w5;{C0xr3cFJkqi}dN7og?D4o4>G4u_?xj4$UN#5=B#h6k5ruPqc&cXE_c@MhcW z%A5gdmBH%WNTbe446-{9@;~amjq!UGAf5oytW+l>{BEgFRe$O)$^)L$HOs($w+xAS zeF*59l(#nC@cSnjPcYuj0~K~TVvEIfI;s#L{w8}qi=;a$fURu7;P>rZqnz4jYkZh1 z&H>HShsWb;<2QK?@k%dJD~C@S;1skkk(gD=*6<0nn-i(}7GFjH`%PY#Yzkz|qbzw^ zKv781J3ZgSbJed&WywIF+M*K!1u+Jq0>s$%I0@7&c>buo#T(~ie#q8&^v^HlWh~4C zr%OO8yr^V5gg=~vYT^)N^qi9elJL0iRZ^vQW)Fa@aS^-f8c$ft6(^|m%V8m%TD+47 zSec!+OeYGn8>gcUbZ@V9s22Ck&vulGu%pc2Ve=n+%nu~mRF02-U*5fk*E3RZT1*JY z*=w_hJNqU(Anm*b(3#nBO3w-`fRq6`*;^HuEl(JZ%`OPwFDh^K+e7TZC``KNdPp($!GJ#<^ED$ax$f^-5(-_?=nC?kT+vMnX};Y08`%RgZg^|*Y{q_ zT3GVi5<06?<9?8z0GG+-n3Rh)tJ4v9F``P!GtEZ;%%HDQrWGn&D{P^I{50;Iken|1 zei)PwNtL9`-KGLywY`-S6xX@Jaf*(SRBCppXjA{0sF3x#$e(Pw6mRmYHddqj3ZAIv zxs1HBD)lw$XCNh>hJw4Z7O&lZV?iz}E*}$yY5Ur*v0VlRJH}OsS2Q z!8~aQ@KX2(!gc#|2-|Qexr)v8im*%CllW$Ptw_p9mn7dWFAwU&ZX9uMX6ZB~V@dZd ztG376xs%r##NXa`lwn?1es8}31qMn;!Q-3kMZE@70^tOLmIvn~^$J*7q??h>m>`W? z2DcKZ!2DS(!F;(pgFDr&Zi-0-V zf$4fx<2(aU{okWlI}5%zpG+!D(t)Ro>!3_DuE0uo%0IQ_f zPuB#4}MsdXRgMrfQ!=0!q753qv^*Eidsy0`i+Q-HnR1V@z z_*AttJDVBO!9mN+j-^RoWJ^g7_usdhrA++$C9gMT@IBTKf5{G49Jkv>>gydY<(K)< zM%=%N_cf(KnFd=Lf$WMSb>);nd(rpAlUmi#s^T^RZqzSzn({zlBf=-wSMjC%6y+Xa z0(>8qDe7MEIjo@X$&wYK0WCpM{wVrdZKC^HCMpT^7`!BYrz5Fu=QG{9#Zf17ab}dVrN8EMQ-p!A5 zx2nyL2`Cc}3788$O@Lhc<}N&yLuDNk0pg$Ya@y4nE}J~1R~*}Ek?t)!W8r#6+#uf4 zvLdr%xe>PolqB67b+r}u44$Y51B*@+IE?G9!jeQS_3udlw~HjtU5)?^Pw>X~ZXCQ2 zUxbfJm2O!o0T54Bfug(u+z_Am73rSqLE1`UWVQT|yhimNaRRiH!UwC_1)$LXdoUO2 zZCaKFcYPxL9pFUISpmzWF3z9Y%JF8ktyc0>;C)OkB>$F7Nn16(6wXkz7xbij3@pai zkL=X5t_#p&DRWYq1FRp9a~-Y4d;7>cJned+iL{rR^+Qiyv-*Jef?v&h^hG7%avV#> z3dGWs$~6t6x*sCZTEz?3MR8TTP5Z`3`V#=% zvdVhEUIh<*s1v>Zwb0z&K1QYrB<`74p)hsRL)0vp-SD}?3F}KV7LZGeufb~L{qWbXas;o z`$sj|395jL%Q>V_s+aR_@Bu&<((U2sWEuR7-n~oOnfSAFFtq|?m48UCoUd}Ef_bR| zrfPlbiZ6gQfz9KkLPppw_fdNQtK$#@)G9(HK(pgOfn!OJouId!l7jb&*Ch28b>69^ z_e4PQRo>87jIHc^h37T`S+#7IWJh4+1+#2~ZK*f%t$_bE60g3Ff^a`4d2+ZqnbgY( zY(*NL0l*J>IRJFWCJ}VKy`BZEwxs+Jb?YU|hfsC}uoY-ion~ftWmKSEsn64d!OZT` z9_4V~eI!{EZ$@pg0;oS!Q(vK?=6e0&3)x}q18_AfC3p;UDSZLTrsutV+>1T|f4gnM*Wmt<@>LQ9FmXIj zlvpKeMp9-Wp;l^D)g%ndr1xf7ay{}e=nJq{lJmIfo2^aw3Yg#Vl9uQYP=92PJtXey zO4|^!O%P!$#U|<1UO+N9eFbh6h(2DnSp^ZZT8b^fRr3*V$Haiax{@qa!j-x|K+>-6s4(s{gCcpDP05Am+1{-=etUuY5f9$3EHU%-twb#o z0tFA2WQR(kb|Vc+-CWMTF4Cx~xl-#Ypc~!as=t}2yb_eb*W0ObW>A@L_i9yD!D8@F z=@g)(k18-tl9*ZA{&N&%C*U?qYSi6lT)u=4mcWb2hvqkt4pVsysFYq+yLW9J(x>*8 zH;+gFFY)ZDJl<+e!Ip9eq`waykT_Po$fac>-9#^N}Gb&yl zk8;aIE&EQr%h!iGnaVdSz_=)9RmHqWn{`rB=HdDrSOJ1aBT_4#@fH3|?+E%H&+6py z3eJ;}1hN$G((PMRxB=7br7EUEO0XkGs}gi2&+6~Ezi!g6Gz5kZ3kg)qd&p8Bys!aU zm;ynfOhCqxFTLnHEw>S1Q-Eih;YZmjp;p&dq`3;f0kE>FH-Hs=b7^~#&n&5qH$W4354OONDmNfpS#|6$LE1X< zaoV9xcuP{I0^*}^rXneS2ydyLLP}Q0ts||ZVbc1Oo%tr6zl+rlTj`$jejtHv04B+9 zMO1lIO6IZ(3DhdSK9XEHjS@-!6>%K5$Epd!mzRBaXkC?*Ej$Cn4k?)Pn1G#L+u4@! zm3XaRC3l36o4(rlIPR_RFphU@igbGLr4nWlZXW>VPRns7Kw@^NajgIr1>QRcCFH;O z`w}UWRkL=TcF}{U$7!>@KFDikrRq2>t+`(IRwI6}j&;(+0PW?pNov(Trv3mxrsX*H z0=?_yA3WGbYfvkby>{P|RGXIkARS4_M&<8zLZ$qFjMpLAsSN)k)p8_xPg+Q@kW}GV zWtHS>AgCfya=qcOtTvJjy1e?N`dMTp6b`Q$Bk1KGEtxM1j7n2H!h#r$`ZF~Bz78YHvz{1 z$jnP2bxlcUlorxg1*V4$`pc=FR%tZV@g>_GSKOPZ-I+-3d8_s|OKSW(fMuzYdEe=R zHrQ45S(Z3=o-Z#CZ-Q6IiK*nv5K|1lo?I}RnsQxKZ zAWMb(yc2*tL=7zYjN7Q7u97A5%@U&7=~PwlatFxZGu8VzRm6wdnkCxxPbB5LYpWfo zh63rMkZiAasfLlQ0%!%q)DI@oF@f}oV+q!>lv~BK)3Hh-t08}mGH*LB0Mp)U-jc5g zuo{7(q`6Zso1}%5{P-yEq;MmO(f+#P=5_{Zvaxuvl}V5lz6$la=rNa2&e_fjrvM~hk;n@IwWb17m(h> zs%+ff0T!o|G7`vAxhhGIkJ2i!#2rCAh^PKx+oRopx=;ez0-QG}SE_2H(RdD*_Lu5q zmN=1~24lNq`AZDYQ^4~8O_spqok@8f_tGWjWzb4xJWeMgmi)B-Bn?X0cfiC_^ug!j zRQaj|ISW8ED**DkU*7W(NT#;ZbpkwjmO7Crfwn4_<7eI_jP0dE9F{H;A`{q>1iSB9 z`egt$0%2~aNU!e|hvZ8WiH)27ypDvwE5(*N5g) zP&JWoshkI?yLE{YPP2G0Sc-JV*D7JouSlPq|4>T{V5DU@*LCjGY%fyK=DJkc)iP5% zA1~Fhs_Kn+RDeHtuo%#<8%HhWA8il*3=crTlL4RFVgl$|pHaUtzgA2VjCg^hgMJ+H zj5f){#a>+g7&B-IJ4K_j%RpXS?j@S*aL`fK$C%HUWJ|2@_?@IPLfguh)wdTbB`{= zVaaekE04Rfz0;&Gn72D=cY`GN`J<3jE%)`Fpggifocf~T^C3%ptN_EvqkWN7*_2Nw z4i(Vza-LCvAOk0}Y3Ds3iqDFOZ`8~Vn{kY?8uj9OlS0I}7+>%77Kx-L< zQd^8biMpbc9v`O!yC)I=Dk|f;vZGby$*grM;9petPIDE~w^^wYUwuyur8?+&TnemI zR{|^HbzKv%vZK-vX>#0vYw||^pe&?a{0i{y68dw+n5EHKzaknX&vr$of0eMRY{QfGBYcI73I;OJ&E5XIT9!*r!eAm6zw^{ zT=?bw8Io=ffLtE&x~~i1_)tAfJfyTB2IvZ0sBcnz6(AS9nM^O(TW_`jy?G(|KCcxM4_ zW(1@Ptm9^h(3~Hx&(*MXKS-sF=P19Ne}|K_yu$LtW6m3}IKZ+1-BRMUEGZtK=oba3 zJ!Eh@BuLAEm7JN(%1u2I@I7h=Gn2ONz9~RUrR5YyWh9`z3dbw6a;-0yIcYFSeMbGi z>#;l#K8nGbC6p=sayJ=Z$#hfzEN$C$K2C|7Jx$*#LSmPg(I!vxrk!B@h@%-cNfI{t40z(EqON~nt${0e|2z*MQy zULgCBd(`~@G0&0)Llc)8SJX@?iU!Jt=p7T*DTN`o@4 zEWv%G@;1u@qyp*zwgreG?f_P88xPO~7!Mkl6pW4fEWZasCLRp_+@48*!C=Mq(^6Gjfc2e(tRScZ zy-9x_s%3hnqo@;;0G^PfevmLTJ5;y3e#;=u(rG0zmvvDYDgBkD)L8%ymt6w*3%6mw#GQnbi-T7x;cC*Wzd0*lrxiXM4ct!d< z+w7eaR0-5Y{ieTmO2G+iDZko(E%;wI|4$@*aD;{#ft#7J>bP9W!*L=Jv%OaV`zXgU zIO|d)<1n*B+Qu#OQh8M`zPPQ_54&6f+r%rb1vGGNmIu-e-bK52o&uCPZ%S)c+K82> ztrC8mlDPto+Nq7&Ujnt1iS$qhm%#EUY{lT!GN@I+tP*IFT<_9T|0rNF7^r%F53bz5 z6~A1s@MaYV$+I!x+X^tKq-fTfj60xwoKoi`(AhxqI44|#(=rbQj~vGuj=}v%JaXSv zpp^Qi$g2|bkhUlAlZl4fHdnIX=a2v;|D}90fPVm5DEk&Puj|8oixZG4AV=6Jc;aVs zQ9b)t(sBBsaj5Gdk~T}G0I3*f(O(<11gKQiyVK}B*E90c9kT)yDgBD4bO3T))}!E^ zq+yy2@I61Hi?HP)A#|1d|5Cu=^*h9lYnFGH!aES@Ic(<}v^LiSSmpXC&&&>$HpL-r z0$=cWSJ$NVz{1mGzNSk%pGe+Xe+kA6m=(ZT2I|TYN`c+v`VO>a0h%Uh72J=s%$o^d z;lARB@-Z+SDqu=;@Tfd+nbFQ2S@fqB{gUz{>>(2KRZDg#FYzNha=od(tB?RA{}kX; z@Et`PO3Ae9mmmhD%8}?OM*;rI(h~PmQj43FOJlTb9+(c0)q85!0j$iArZKCfVap(d zbg6y@9u2GNF`0l6f2DL<^n)qr5pT->Aq^|g%A_huvND0tJlno&uWxjFS2OUgj3P~1 zevZk@cjo0fyB+gmrzLLh212v1dK2$(gt3H7VX6*hY4|7?V2$!e;hC)b7wxuh;twD* z85jw4xD%$G0LimG2F4Nhmz{t*=DFkucG}C#s?9QzR2o2jRp2^rY_`;{s|X*&54TmN zZR7g54amv>EP!{YS})puQtLI5^c1|VENyLx67^lDlal8>Y{pW*hd+qF1eC%fgJ)9r zBJ4V)uN8*+WU^tz!{O{Db&cz^b+5sLKsbSx0_WpK`r*j}k zy1!m_>483DptcMSvnuBXe5!J8^IccD0mLlAZY6m;r97Q5BtVkqrR{PM@P4_9KEGrV zl7O}V*!`c zAyZh{N%^Yr>!dbOJh=7#!tOnW_BiI=zS=d0nVy#)!>nv~LhT zu6%0Ko@g+i$~z5oYKzu>9UrvS%xcy2LnO~2@Ww#5CnMCXQT3ISsRL|9gUVAL)j_M0 zvJaatrB!fT>93Ea`2=uwN})+QysorPc2av3TzR4}q)rw(Ds`-J9PxBWNs_mcnuqie ztBDh!Q~W5(*)~<;0fV-Jj!J$N&{j53l};<0Cj+Nx`ru(pt9NyNRKHpFJRYYideA-h z$*nYw_L~{+#eAr->31Jq@F1{d2PA|gNsk@?ONWy|X54rvbG!){(tQHJnQg#T*-lUq zZ}qhTzr6s|(B|D3+k0uUsyR7jQMq@#y}s~MOR$zaXgCeJDjmLE*R4l!0&W_tlBCSw z!Jr+#No^?r$$Y4dc2GN2dQ6iD1<~Ls@$$$L%zmEN%PFOjut(9RR2PToBq4s^qKu2v zS71wJUYB?+UsqaIlKS#N5;%j?JSt$;NyapLHJ2wW{_8^_#``B`&0hkE*|CH3lhe3VA& zsX$``++BG@hZ9bbcHHFA=a8hxDi7aF`8qkclR(V`{t_uv(huP)0WeP@q%SUw z$33?t$~q+SD35WGr7@NocU?#)V7S%eF*dP8n~t}e*;ZLefd`<^mpO4Cfp<3nV8E1m zlXPnWqG*SJDEEo-GN|ss{89gKUuvByRkNmGcjnJU1Otmv0zQmjMUQOjT~15(B9G%O z80QV(s>FJL)ZWLrY>C@sH~f4g`HrG*xEJ;rreee*8^Kq(o zt9n>1euP=>lLWj9v=31sYaLt$J=@J+gr}uG+^!q& z(ft^O+Skmgx)?z1D`2d75-$XxT=&KOAZ3(18uc^PYXz@p_e5X*9RjLdiU8v6{W$Hv zywnH3Q-Ox#?yeQEi|`Ga#D7YIhTA<@Gw?DGtX5aa_CfuW@^d?xPi@~2tpWN{+sENt zrt(C;7NERu7gMp1FG}0!d-|+&73O+3PGZ>}` zK_SuJO%^oIkbY56OT1`%!4tRRqJ%m*D0n!+=-G|C$%R?6pC0YLPA}-|%I1nK8IMzX zWPZ}%A88T@3y5f0CHM+}Fz>hd3SRE`J^*oM8}Fg2<%z;PrBAMp>l~Vo;|qRLIrDVX zV*Bi6FG0(+4w@8jSu4@s6Uhphld6(I?G8K{SOok4c7uVF@+GILV3+~+0OgUT$Ru^n zypcx9_dM0xn(rffH0aoP!(LBeYX8aPWYPmk;wLH`6A_2j!r7| zCTZ?#pnMnp$ZFzw1B$y&8niHBNT4JDW)&Zi=5f8$c_=@nLAwygKvwX6fRN>h2LSo7 zy_%KMGxKW9!&iXRDk;_ODS@}y>78ungh-{wvYyA|+yM*WD&bN#UZd9Ti0_05;( z@K&pGI<#SAC!;&iJwQ+5hwyVqkF$`NN0yw^WMG~L2vie<4T4<94Tz_@sXldp;(q66 z#dV{9Q>Xm>0&q7dQDYQf)pp2v4$!5v$=*wVFp2po;5bKN`=z=PKx?`WcuRb6-Dvlu z?Ia`ZR_%TSpgKv=a0Pbsje@Y;GZ>F4s(Xr0&rSN8+iG`p&_H(Q)r>)7R)FNhc~!z? z;6|AOD7tJVmGO9_Z6g^#5`Xx;ZtR^myfQxtpoE`6ymOsqW|d@CEs^5-6A)e5iARBn z?aAXhH5$e|e*lK8rZuJt{Fpy&Z_y|G3Di4YU53-uM?IO%%#FY3NdhqA*iE9uRw z^aw5i*YfkcD#`fqNV`07+Zo_=Ku-uVMY=5Rk);H!nN_ztPX!bTqFe{k4FYYmQ-bBZ z^OORu0Q{ql-ME)jp6tbvC-qA)K`^sZg4Q(Sb&TFs@VcJW5O3v~RmWEzYB%6p#qVy< z^Y56SKZ>^`!A&KuBTAbt=Zl|;;T zVqV|7^WvI5gsJ@{pm#{Z+Lr{%3t)vuekN1-m-cQRs9$)JmC_+h>exg8@SwqEWx42x z#4D>qxAcg5M4~mVpYD0UW$<}aQeFY{s!kou!v}R&ye9DCwmxoljN-J{=|zsT3bM+> z?b4vDkjSb2w1I^@laGLyflDU@DutGkx&j-;>x3hLj zI8LQQl%K#4JW&5=J=(`!#+$V90NpW?GZup_cv_Pt?jPof>SVR}EcyW$b@WNmzIP^{ z^b4qgz^?*Ge5lzl?FOec*oBak%$*eYOG&FkG3$ zAD}NlH%S_tUjy0#OciJ`pjIBy7?`W|%v&W3o^UNvo(}k&*SHTJVmFm%qxMmgK0w{b zpZe&LwFNq`a6gy*r2wya`TjcXt;t!;Zh%mDnN%K2xof8Vfo@ZW{ zx~jMI`6mE523h*<5+G<_0mz0(x(Z_BC1HLI#8Q9EQ}w$6i5hbBJNL^xrO?d>GogHG zyxFmqbw4i!-^g}ImdxAuSl!D!Zs0B2%Gv|%uPtGN$C*DV~U(laSmB@SHk`M_2_GNqR>83Pc2i#%0WTO3+$P(SB|BWFG7U zyrbXfDWq*Pg|`G^W~NfDje4Rmt3I)!U#9>(mrH$MMc)~<;Q;G`kGnRl%R=g{)Vw^H ztHcb+ki$^kmWqqG!!G%_-%HsFsdMw95~t+HHF!;BSJJFypxtFFeI(sVK2^Q?^>x<< z;ceIrJ+kMl_R)~E_7%|O`j4~`R+Y)+C6DU)zH`zB!d2kwgV^O4V9EomwkN4c`Py#4 znAp{_Xko-fm7<^yax|jK9|EP%_uXiV~)I~eb~MZd^>*;X5VK$s){bxz6uYj zLT5h94KDoo&nyrO8NYZyK7egx2^8(s2?aioJbRDxpE*?#6(41C9~1xD4@bK3n!zQhxOko> zeRJ0b%HN)>aX<0kG>gea{yz5Xv|yv$z~uTsYObW!LzVmikQ${oE|=?5KzTgQLkp

Af$WB$3q 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 literal 28880 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 N002ovPDHLkV1fWz{9FJ4 literal 30348 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 diff --git a/selfdrive/assets/icons_mici/onroad/turn_signal_right.png b/selfdrive/assets/icons_mici/onroad/turn_signal_right.png deleted file mode 100644 index 3cccd96e6bc431e5264ede883e6c56385d590d3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35370 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 b#}VQ`@2_FPY@BmH00000NkvXXu0mjfBvkGr delta 2273 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 diff --git a/selfdrive/assets/icons_mici/settings/comma_icon.png b/selfdrive/assets/icons_mici/settings/comma_icon.png index e0b7d460e4541d7abd2ffe29084f98462d458e9b..71007e26010d7cd38aac16ab48e90522e40ab042 100644 GIT binary patch delta 1319 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 Ef;V+m2mk;8 diff --git a/selfdrive/assets/icons_mici/settings/developer_icon.png b/selfdrive/assets/icons_mici/settings/developer_icon.png index 42077fb6180f7301bcc28924d72f5225d129eb4b..b6e74098dafed568d0e3579bca9feb450bc7ab1a 100644 GIT binary patch delta 1693 zcmb7^`#;kQ1AxC{bKMM?%VsX|iNsD3xn@k7=57`5>|i5>Rx!-w_|9C)VLm%Y;W%MR z#mOb!j{9XUWrbc+=Pc2j;w9JZXhN*hzi^)4p5LF(^FM?b!8->seY`x#EXZ2r{tCnNYToA*9&zmC%v;?E&aPCmJ|Fo&!38y3FX&TSC7X0{wyi`%8Z|!=DB2!4 zJdxFJ0Jo?AXL#g5U#X}v66#f(SeA#gj;oHu}W08YVrVFn?1_Lt?8Q3YupB0;QV%A zCMVf117hnS&ZK;z5s_CF{I?VNiS?fYCrCinVO!;Ac_n?lc(GBWl6*JG69X0-eL@LT ziHx4pNDkMdwQc^%9d9}|WJvfSKck9gT=8HN0aC(T>F7bGUdl3@cx~mWTQqLV`ra|n z5ZiMruXoyN=-aUIM|5~yvNc*RB3rRVS)^0Y=Gg#f~{jMH{ zCroJ6N_Qemwd&hB$v$?k*%_O^1Fau-=zDbYENAA`k{?9CfG)GT*J#|TxWL>sc z(9*j2RrTeeC10^_RXBy3+UvwL7A(Jx*#e|0ad!hD60ZPIzNgaZLrliLQ!~g> z2me1``VC!9ovX(3vbx|CNE*X)F$buJ~HP1IO{tXV{jtZU`~MDnjhsQjBCX+~il8UthZHG+#UtyN!$d*oH5n=C@oX z+${f`_H}qef|4<&mu>Wg+Xk(ryD6C2~<|) zpGSM5vcrP)0Rvm!oHz6^Bvs3Z2N;1&^+_$UJIx40fesL*JHQjPc7GoL*;i9Fb!V#V z*0I~E4;aZr_@6WfnX%AXgu;f*@H(&->{Zl0)HdmHs zIr~W7?hId#3b<*|o(4DcLO*`pCms~2VDr7TX3J&(yA!CIs8QvR!!ioSGh;!?^+ewk zPg-<(UzeoT40ZElEiDd2GK)=O^YyZwKG=#LtF5*_s(mT(G@j(C^iMMBfap>a3~z|0B%8mAd1=i_!8x@s-u9@c_fRA|T}gd^OMk24Vb-;IDB`^?*SmQ>K!IUyzAk6&t^lLTGX^ zY8ywx{Dgn8tyUGzM*78ozJmwgG|Vu5#i+NT1o&+%-ax+*E6l40q@9<}t=xy?!d{xn z%EO`aa&cmM5hgUa3PO2&93Y5Ghui>@z^+?Gv_H=+Cn>)T^AhU$WP~?d{h`?THu|j^ z_hg--y3zY!TV=FM@Q=AZ3w5_P>Y6Hui<>(ahTT)mg&yqYe3sSlFe-Ia=UIizH#;1e zZTx2K@O=+u{ak$G?g(XSW^f4|SocqaEEl6&K<}LIE9&+@A_BOfHk>V|fyP~BAKvlq z*~?}p)on{E9bLy}t3ral4meV5c#Fh>UTps^??eFu?Z1_WIDZ!C($s}lh_B$K$8khU z(E67MI2(&@Dg0N*&p;_bH1(VaxnPO7j0CMMdU`wT89(s%$NQ(4y>q~Q&p|Tek>)vR zqxBDgIrub0^wlS|z}hW;p>IrKT%6kUd+Oo`T!)53UA_J}5jFH0)Ju>I;q7b2Cf4u- zmSv>iLnh%Na4YrLa)7z3?%{kPBX3{Z6el3(s43g zVD~z_6LU-|;Sp(NPb7MOJWYM`klH|^ot9yywBXI!65d^}#p9L_IKD6iydPK%DIaWJ z!WB@dT$j7YQ>R(MM~3;0id0F|7Sb=x;R7dFkg-RcQO4x zKYjpcDxJMkWW|}KlTC$ruSD8DLsD`g$lbWUZIwxU&ph%iR)cd0 z^s;`o^x3!0*{mt+#?k|9i#G$PrAXhqMCkvHBt0a+q7(Kr+~+bB(C33D>r3!CoO* zFwBIeb2ntUZ>Z3JKyv?#FaM3G)xvsB{kRQztmE2$gPT3wB{>`hwCQeFie;%QCyxBS zh%D7vO;94ZH8O^<2fEPn<|z|&)T_{H^l1nY%WacQOfSMiGpk?h^=cMj4LTeS(_TV6~W7}xXs$zm_v?`XFLCn^+I jZNG7Kv)4H1mxfQE=O&-2eR;G6_&iT{sIOa#D=p(M4}bZj diff --git a/selfdrive/assets/icons_mici/settings/device/cameras.png b/selfdrive/assets/icons_mici/settings/device/cameras.png index 2029b0da81618a53e15a8499982600ca1c1535e8..d51a1f1fa49bc08d4786b4c795cc7ac53d9603d5 100644 GIT binary patch delta 3097 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

7sXv&TL_)+(macJ9t=CD*#-wiTj;HncI{ zJd0F;b!TrZ!gk1r=(G}ie_Z++S;KGo(eJ!&H*_`;l9s>l`-BcIXAS=fE_!Z-GWC?a zfIL%CBv2OS;vz)g4IW!U7b_6LEXt>ZsOi=6oqOGwtqF zYf&ONLz*duIHgc(iiDqeMNbLTimnu4Q&@(u;y4-Ief2EPCI2ZSnhSLI8;tCxVDt07EqY1U6Q&Aaumg6-gpl7kY?Y?hw zG}QuxTPnwv67kJqJ_~r6x<9WqFTqAddGuV~=A097_0eYmFDMZ$@O#SVQ)cI#)2Aq) zr#We%^4+d1e^)CO;F=~XDgck-7ruxW zzYVCqBlXUIr82y6+QIu6VtIe=P|uh5to6@)70asW5QE4)8HhWs_k+q(JMP{2 zmacm`ap2BLUdSu3vpg%7AvwL{J)q=4%f53|xgRQy9bpS~Na18VJ_Rc0aSc;KL|53L zR0j3PfjWgEfBDM4+2$233{dubt&$1Svp-P7w@h4^gbDCN-l}fse|J(35(9 zfADuluP#$%o;EUMP=%n45vctDNkEo3BRJ3@V&fG5Zj8ij=-`k+op!)@WNq}^SXpz@ zz@Z43&o;>aSMVti{&e;?i^587f`rn*&>{Gb&eY@?fBnwWz{km`mo)WQI*j)G;Xl*V zkq?AzYFr}x0M!zREFp3~@&_x65@au~rqe;v!zWuzU`>hXOw5)}pS-LR{AX^CnGKZyafhXkg)*HVDPe=tp={?*ObPRJ zexw8mbvQa49}1PjIVahks!8PprPzKx|3HVI(Muk1mwG@Wls{vN VG`iH+fZYH9002ovPDHLkV1hNPb7TMj diff --git a/selfdrive/assets/icons_mici/settings/device/info.png b/selfdrive/assets/icons_mici/settings/device/info.png index fa538f8ac3d2a1cd1f3bc6a7e148d0bd836096cc..05cfb723ead1b83a36132638e07b1c210c5861ce 100644 GIT binary patch delta 2554 zcmVkF4o!e6X7A9Ua}$%s8Tn6DqrN>3?Oo^7j);0}I7%NdNNH z2}Ms6W^w}HDx52qTleoSozlatITwRKe00LFqKPpX0dN)HxyzsAD?L>UkA*eFwM(C! zFkI6Fs9FGAr4KFr9o1Xu57E1{a_R4>cN5v+*6z|0^I-|E!5WW&`BnTj)}=FQ+z0co z_-!mI5rm>P0Dt@t?uz{I?K#4R;$J0ggkvgztN0U_F5E{;&$sd!9?`HixPTwtW+%G_ zfH#J?)f;Mz>0LU{?Muj}0Ya<)$9-HMVIC9)R7lEAq2>{eLK}XZl?0`ZoUMV1x~`hRiUV z_%eJh<%wLlcm10ZkwgGOVX~ojO8Mwr`b>UeW~Hq@v6*7#JPksT3mz_>Zwqaea6!3r zgFGx*O@_)TkCk?>e2#!qNoZ&zCUEhyG5-+fb^BWHi}TlVX`mq zTEQY67Jsz~0n%2!#RO;4kX8^ZY7qjYt9(}VrA82HAe|sslokSb@1BJ|m#AFT9|ATu zf;Klr%gH_b6Lhhd@xlrCX>SW%K2ZtaXRtJxRjYppc&&K}U9!#}a3paH0eV7URm&MVLq3aE`A-79#IwuaSAz>Dnp^)tS(Os;wFr`@x8V+!0#ld zw$?xNo9{`^N2-&U_j-8gSVU{7vZXMPJ5p-TleDhx`8JM6H|nnp9Pa*sB*CX=8WY;^79IEE_dBfYFNZgIc5glJNRKMzZMm(2iOs6Mlp*%&ZtoY#CbXm-(#==V%Fxbs8Nb*lGE{z~?bMpS%s`Li3I#?(cTs9}kj zlJ#Dk*$F_1y48eWPsBDr?fqjI4)TbgBOz0<0T^*T&dmtihkf(>T#Ue;WX#QfFlEF; z`4}6Z2|zsN`I{JMX_Zp$^3BI*%h46?W7pjkNXiqTbuV573j0Db1PB73rZKYt26h zz`rCT=0uT(4$?-rUer4XfOvOFvjfV3O-OqQEBn`x`A>? z7r@@_>K;!9NjG}#Jb|*27Q~(Cde`NT1>l`#xw1IavcOK`-EP3^7CKee=m~cMCcDpXiGCU`uI2 znE&{mC#ZwuT_57ka%Q?io)@bH4u7BkJQD#xe1m-O{T|yF5P!SB?h1*!g5bO8sXWQf zOA2Ke8-`C-mx$K_$-4sRgocYH*<1+XM>ulr1f9T($wvi<52_f$f)e5G{TA_@Q4EOJ z0z4{6K3fPsM9MWH;5;pn(9S{J5&i?8C>Es`v1luY_6G4oz5zoTAkI5DU{OIJ=GuWy zv~XrYS}490tAFSw1P>6(S)&`X>g5a_gOF)Lumk8-KGRVOpl5A2As7MO%D<#kK(8wR znqjyGdIsOROerVw;AOoMLv^ke#B-STh3j> zw;}QVMt}9F=Gbh<<}>*?UxxC*%g)bJY`#sp`xV|nQ7ZZt7uFyYUud%@z9+v!_FiEI zp&gP5=|#A9RPJ!>_wHSjdHIrWe};EavJkY{zr$bw{mWJU2TDkm{qI42^3D`PjeY1{ zdXpnKcb1qzoDr9PbsyhT<0-g|UgwI;p8W(2cz<6%8;FJ)V|wz2-ik7kJ!)9U;A?7; zy~c1^yv|+uOwluNf^ERNho0*pQ!DbVzNbPIjT;zjgFoEIbE-HTeF9eGjl4G{E5AB| zSI=U;EHUHt4r;*9q%AQYmZ-GiYmfeE++{&NI*Fla!Hygr(p~ep{8TAZ3XRH!A}2nZ zxN}yoB3C;5?LU^V=p{@>0LBD$dPaU?Ci%|eC+NvfKyk(2PA#17Bn4m$HfQE{v=N9@ z8e%w+gad4_T3=1wil4jy>;nEg0u}2yd Q+W-In07*qoM6N<$g5HY7*#H0l delta 2610 zcmV-23eEMk6zmj`ReuTrNklV?~Uw_C6x^FT0=G(@$?^9Qb z$ti$;!mn(5>t8P^FC95$_={hyLfq4Yn1lihgnmtrCcRX?a6j zRJPD}(UG$ZzguPKsB%0kc-z*P4{O`5sj?r;Pw-DMsEY6$%wOTLphSoo(+@_y*A}fEE5na$|i%m1Aja zyG=1uh-v}6$^Srk;F$b|+|$(2=AN`Nq3Sz%{$gN*s$`y&^ zNaB(r5k&#KN6U`h6{VviH?7*P)b+v*g&)R#CU;LMRvm}jkee=+ztF@TW!o*%u(s{P z;0aEBp9`c5U~!)|R5HF(4B~QU+b3iY`WXJcR|)Rjpj0J5eBm40u8}EVax8FG!5|(6 zr6~d83V+|&_Le3F;wpkcDN2BN!e>*TYX%Vv#8U)=+}02-x@Qoc&)IJ-Ab9iz4Dwm45HqbXN{lekzARHc=!dQ_Pm%1}Tj*Jn z27kz(o*~(SJOQp>*Ma)$4-qVCNec91QJy&UaX zxM57|542=FDWCw58soHQCaR(0IM+z(&h2r*bD!g@)JSVuIxqpqG zy;H=~#jk}-T@T`A#THi*Xybc*^(;mMUBX9E-tsvBopamv?=uVp{X%knr%G!6B00}x z4Y~K9b;azQfjnUM;IO~&Z^R284avBnN-j1egJ(tC?e+Z-pjq*ngyS?*G{Zp4UwQ?Q zPJO=Bld$vQi&bFlU- zDk=+53_iQ%9aSYbnV(2V==1os_z2!BxSYP0#x2{v|C=Oy@Ake)f>;4c#pm^nE>Xj! zuPvyuMLYydXpTI4G*Qc0_tpZ3Fb*ciCgGvF!=|nXclpnaHUa3F! zLmLNZsgj$9gz(0a7k(wJ`T^5Lnhv*>`HSH{1YA)iH!aBsq5w_x1Ap=X-LCEpf9VxK zv&*zvfqZDrGukehZxz5NQ%D0sRRQwxkz_nMoV)3Gt@s# z2>FBLNF9>O>1d9!-G8e9nqh!r0@Vsc2D)M%-O&6q7dt+H_t_0{ozqgG!)ZfuHsV4U2vfm2YJdn~3S5UEcnk!3ub+_~1Nd+eYv_r( zT8R99z%2y^x_=5TJ$egl-{dv)7{s3@eS-d!&{MhdpBvQIfxb#;Pjl$AE{?n)O?0rQ zv+Z5%vv`rN>KE^)=t39B_CjN?y&)Y-du?G#`9NNL@hN-+Yh5-T0pWsL;ises;}9}c z33h;R4;j-?44^AjHe_-qa>oQ=!`boHVh~nK4XP4^7Jq*H^1TS>p>8i2XPi(9H^VXr zgF&hX3a&6iNX{;sC_*2mP0vR-f1qcDGjI;!hS3{@B~P_;gpa@(Bw9tx0o+W=AS@}D z-k;qNYx6C_v%-uVMBh(e5T4*6XvxjR%E&R8L6RxL6tWuYpE8C_#7)aGn4luStx_7q z!Jsq?iGTRHc?N|m0-UM;fcX8;P>CQ-f~G-XJ_6i)eu?<2k*1{k-U*x%#BdCEv9|3x zN2mDv{D5@12vOEhj#>^r6@Q_ejF2)o!Kq;za=V;^S2g!a){-l<$@kSzI&N(HE%eee z6GZ`f-~tp&%0s`|wJ)*$!~d*r{lOSd&)aW&dw=O)U;CEJ;|{m3zk{d>z`*Tg3sKVb z++ZbrZ-xJrA`)Ez7=+7mITzS!{hFeZd6J4Dd?S9-=#naj_+tC&O{y~XNi4vSY7Iu| zY+HzP_=O~|8C0#oGkC0D+V&>3@R{TmU0fr2ep{4xsgpQohxqXkZU=x!`D!>ptuF~-s z+b`V2q+ej#kUMz>%07*qoM6N<$f;M1& diff --git a/selfdrive/assets/icons_mici/settings/device/language.png b/selfdrive/assets/icons_mici/settings/device/language.png deleted file mode 100644 index 02b504fd89b5fdd762c9711bf1bdd17a52edbeca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3664 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 diff --git a/selfdrive/assets/icons_mici/settings/device/pair.png b/selfdrive/assets/icons_mici/settings/device/pair.png index 5e50b2fdb0a69d3d2b638bf38e0913ce3c67cddd..0c9a19c441c499b513fdf5809ae4ff82bffa86a1 100644 GIT binary patch delta 1728 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 diff --git a/selfdrive/assets/icons_mici/settings/device/power.png b/selfdrive/assets/icons_mici/settings/device/power.png index 9afe0bbb6b1d9f4b561296e482634612de3ab4d2..2b06febc10c7d61f1f9e94c3e0bfc67e3b0b2877 100644 GIT binary patch delta 2179 zcmV-}2z>XV60{MJ7Yc<41^@s6lk@O+ks&pINl8RORCodH-GO=3I1mNkmo#ut0j2_= z0(=z!6|fxu6(m#uRIpINaTO$20igo>Dj-+EJ5MANXS2Im&&amCp8xxN$q`5#Ydn%A zSppV@_k1XRL^4lMlE z8ad(Nh2Ofsh^T}SF{J!H@(2Qkmn<|&jD$)U2}8R{;|x=xzVO9ojD$)UiChcnnSwz5 z6wv(O*Ug7>==}lLdIG)kSQaX(0AOguS?i$3aIODfv!=3P-8%pn-k6a_ob}CrnHsKj z4V#-Xq2g^OO$LzX&;oYf;aVxKMS<`J)Nq;zTQLoP47`7i7ffTASK8RGqhgo;_L6A1XGEM52$ed&_gG!iyTqE{-m3TI1l5rvO=hEu(mnAm1|jVYzbqD6pb{p=FgZlCxJB3A9@~>WKfGu@SPSrJlg?^POk0>aED#aP z;RkFzuRF_OUmL*MtMoC4!k@c%4L`zWXIXBI@C0{%-JJMSWMa-4pvCZiY+pieYZlm* z0jzibpKz&Jp9)q7{jJ#WsHm6Md^OCs5x9xAr-H-QKBTSJuVRMl?NSMuVYoRhy@dDr z1-4ZI@1Xb18-BxSuC2@)_yWCGd%sFs$4|vfSKFo%GDLe8D7)WpGXq$<4ln)gA6|ki zP~Q1|-Tz_exhtTPMW@eyHrl&6*OfvU8gsv(bLSELwDV16sJ4L4SHJtm6SKf2bP9Hc z<-1it3B7M{W3%)Q{vMj|2EZ%m)N%OIjVNAo?QG(g?I$+@5bKl@I+t)$(PrK3=$wNj5iS-UdJkooi43(=k>9rTnK2fS1tu2X1PAL+4I^2GCXkKF@D@SJ1h+ z=}%*0Ks(z+`@>y2m(Y8LwDE z75C`m*k;RY6Fa+qWVX|x!7jo5VosA>wB@*n<>KQEnm#X9Ea$a0Dq)5gmSNvFqgKAQ z!VFPqQ2`(rroMmW-Pf+G<~XNfoxNO8N!u|Kp@5PEfOe^J&j9%-pz~9I0zlj4=^H-e;~8|WEp31j zE*AxKt}Gd#m~+R;v4~}$t&UBNK)~ApIZ&5@Oej5#y?HfsO1P<&(7DO{ZAXyy4Ik|r zMJ^p}8Qci~Z9Aa!cEEIE7jOxko14B3fbYziIsuY?-~ zZJSEnxmh8-9CEGF4R|JP0DDEBxVmU}@W3e3J}4 zFZL0Up|fqxbXFJxZTr}7s<^;$1EzV-@A`}}@$NEfRuyNuKA%SOyS`?+s#N^I*qA%>D4+61fhBJ>D>UhhP`a`Xd zvv?tfjQ&=|Fg{UWA`JEW8PhlJwvlUEBC$bs{fLDka{vmAqefWdLS{2x4Yi6nZ&&1h zlK1lE)$9V}sGH->5IeOFw(ZLVLC|#-kDu{l-FF9&c>Yq@^6^>xe2P}Lod27lb}$)q z-=BELNEc-;tBBMHE1~Sl5XHvFsmY6+?}yx%VU&%Z7{;f4^sk=}O~DV|zdzc}UlUge zb5diV`hJ_yHjI!utT~>d&nrsH^95mlySh;dUre(1pJ#)6q`)QRUt(mFY#GzZ2C|o5 zjpe%8&#<``FQzDbG5PMFF&ms?dFu^IRruL=UW<6UpWm@tGovw$?DqfVZAOsZwquzb zB6qno@Upw(v)uriw+kUl|3QIyxVmBw=xZe8sSc#MWJ`iE&#eZ)r7PcF~ zY19avG?Lcak;SWHdUQLg0N5u6haAP8zt)ZvUN7bO{C}h=>GBiPPpJR^002ovPDHLk FV1gLZDCGbE delta 2290 zcmVV*=1&%?+`Y)c{` z00dtEObjB*e7W=`rw6WmS^DB&j2GX)3p&mM#`vh&_$CBnB&hwSWH82oZ_G6{XN?Je zaDoZIt%>H``SSAQdD+x|6Voci)7M$YI30A)i;aTqyM5CG#DOaLa13BbfL z0hl-@029XqVB(knOdJz{iDLpVaZCUvjtRiT`2#KD2Vyu5zm3KFQMCd_EkeCHly!HL z+=!&Vf%%>>_*?2>-koqVNX1)pNVwL2^`7gylGMA&BAxh6~~;RIb6tmQ>n01NhY7z0Q|)EFn+} zfUxlq-amZ1)-wF`Lsoa|7!Qz20Kx@)g?#3Wbh_4pbQa5&iGkI{X*vheUWM9z)>8G5!3d8=J(|K(Q{2bJT}@S0PJ1g1Dg)-nN9s+AZGxAH3Q1B|`+x|t)6Q@Es>rl775z+S(D zjvH(ITAV>I1P*Z=_4`2{EjjfxibV;TfSqe@I3C zdw8_%o)rKp2P(ADz6)#o=J+~eGobArvi8d$C4w4?V}}$_f+pa}^Ij{LdrpFMNp zIdqO+;iWi6fMe=#9Tt$o{=~sB@pC3X`}Cf{P!l4B+TPRR&_DJH0F`#bL2*K}`|F)qv z$1BLS05|?4E$~zWoI}n6MpvvLXTJN(Qvr~MeeLP*mVY51CwRSU2JQtQc!<*O+X6;s zD0>8t%)qV&(5%w2$(`Nv9dfej#cban8?v#eU-yL3!VP5HoBFMP0EFO=gNzl7zL2h~ z;HctuvPh)?GRQIY-ya$?unlw1c7G9YW9q*@LfsdT@kj$m7btFE^o`UEWcRZgSOYl7C~Vlbe}W$%ZHHGZ0MZ>Q3K&CS0~uQlAPxVlGw@pi8Lr6<5aUtSb=m{p*b6* zLjfry=LHgh%GI__rc~!N)IE9kK#CRIlgJkk%)mc2-_GXZ{ba^CNC*7Pqx6G+9+!}pJZh-)S8@ojoIw+Z z1)zYDI^tlSMguq)LqWV6TcZISjG>^?00m?WW)A>EJfwfe0w7*u1Y;=lq5&L?p&)%2 zw*nyT%bNxm4k`hV&g|jUCCLm3jg=6(mYRT{Gv%bh3`XCGH8HO*tl|I#WSAM~AL**D z4gZ+!{vtqsx}k&-j|?)lroR#Z&FT{K19~FZe+L;G{-M<$KrSD8{rso;$VNVlK!rh2g}0P4*Kj84(0|5f$kep(lmTZi$i5=l^j z;|MQpv1m7FW&nBad^`PB{c^7XLgR^}g3w8%(F{$0_xrG^C*9WSQi(JgLb_BwZ=d^O z?Vj|e1zN_}@touwe@OkCK9QW929zvfY>+;m;BTn__RR^@^ah+SA7Qk`9J+ZJ_4acn zUCNkS(*p4!eFoS1xt~d&DZJAR;ZuO?lytZz=hJEdCW8?L(m8(2T5?jY7Rbp=ff|aF zNLm(usU^J@_zFWsgf?jY^zWQps|A<~7$SV#El7`p2GUC)lfh_&ud{cgNAHYN^X*mk z!Jl_9YSCq#A6*<8CJtOd2Rnmn6N2M}I%2!6b)c`JZF58A7(q^Ya0{GRSzu!Ld%mE!bh}E6bQ4GRv7`x@1S-wwn&Q%)-9K_O zD~d}_Bc4`9rOMAKE|=&Fit7~avZN7d11kNduN0s5oxYkkms5OlN_-%R$_Io8bYeMw zdb{w0H;kYfwI>8biJAo}9pyF}zN!<4Awlg5L3PuE76fYdiQlaUhap1k3qe%@%OO<) zmChYUN!x6AX82)rDutj8$M8^ve54+NN#Q>EXz3`3y87Fw}fi+hr ziK{xv7{WK=%S-fU4pM@ra=qy)Ygy-spQxN6%nqW1u}k60yz9hOo#zblH@Go>ZSWfl zU*7bQwXE0FZ^1Xv?neq6XC{{bn#zGDR;Mgo2pRg<4BW^ZuHE?ZJ+<9Zlg$8LLFG^|m$%{A_R#Rn zPWhI40`24lU>`v!cr>p{sN{Bzz+tUXgyUU!U8!_FZhZMQw*8R*2O|Fa&z;-UegFUf M07*qoM6N<$f{f5nX8-^I diff --git a/selfdrive/assets/icons_mici/settings/device/reboot.png b/selfdrive/assets/icons_mici/settings/device/reboot.png index 84ce963cc27a808769cca3e0561cf1c6d5910c6e..a107f9ebe5133ad66b858d8913e4cd178e233942 100644 GIT binary patch delta 2314 zcmV+l3HA2461ozQ7Yd9B1^@s6wEUs4ks&pI&q+i0JTpAe#ze zS8$sO;;Z0z6{j?-z zFc@Hf8Nk^J$+OTtg!YY*o6tHq^Ct-U{f6K-`Q}P6W5!W`#h1B)Ge3f0--I^sbp|+p z^I|ml`|=IWJQz*>Ee{0F^a*n8xu3~*1(+K_hLUe zbB58;GnxE3E5N@nV;FbsZbEwlXDg?eDM9$}!^;%obqsY1g{1IqcU`G^1^6;@^9EKx1lZIq=#{1XW%p#*q|buV8SqlW;;xa zRcIeiPEM}T0Fzw?2I0%{uEX@`Lc40kB20N7;0)8I!=oZ}sKk^N;49`q7n&%6>|GRB z>d7iVm_zTv%l|PS&O`e$PHn}Q^j2_C0_n7mm=7JI5_~`*CcO$+6FN*3K{{=J>VCl{ zGR6HTDESH*nS}xfqa$^TX|4=*u|iaWZ2nHxDS&a8?# z)Oh9=F3|#vcj&bgzi7z>Qvwcz`JB?aJ^^jQzXuhd(Lsa)K01r3sk206yl7#i+D%&; z=4lvUVt-_$M@g7&iFJ$0Fs|nh0!GIEOL>f~T;>wS-MxWnSfBxTm_jFi^IMp9i8`=E zIGO3r+&7hJgHf^fnWK|hEh;R~3*=oHFnY5oXg1jrU-#HAkQm0T06` zDM61EFrC+*XKtDyOf%qr2Bw$_m|(Y$862m%!!%383s_)uhO86|_{j>*vG{B>}OFj@gEPnPJX z8^6?&bm`hhe>p}gu!N3obFgks0X_8m4yQDh%qZVa1Jqw(@?F15Q11*r9BfTt0hVxT z@f&nJB<#3X0NRd!4{1MyW9Kt;i16>1gKG=WL&sfkNS1J_F!uc&bUaajpP=IpIJH?q zM=w9t3ZOl$yM$94?I64#^rxdU&_Tx%PHmRZA^QPmVgb}=^>gO0bM|ADfz}V`L;*VJ zSi)(A6?D9@D8S!vTH#OVFj)XM|Lvfa#SfwYKR|~oKs%U!d;smm4edjn^sJ!c%%T7* zIIXaP4wC{n)936&VuMf+)}OPfH82OXa-41TaA!YU0gfD3fFs8h;K&gLSU~~(7WnhbI^-rN5b%{i3z!b|o{m?ISJ2VJsZ9?Z_m+RX5v09b z@NYP^(aPX2`LR|2tsl_4A5f36?|bN2%8%2{H%i{YsfDHQmrvfMNH*Yc zz*x>s%ag(S{6L5$-CNyS_Q!=KpY!gVPPFHt?crpF_F^90YY(`k9`^+@Lt81I*K0Y@ zHopixoGj2@K&s#OL6-V7ZUr(yo9DkZqwB6y!ItEYVnNQ~Bqj9e0=8p#`{x#>-5JbN z!u&{oVRZZk>e-pkd8-9TP?SJ~@5Q6iAxrEIdJdOm0xKZ+RA40Z;d|N`sJ%Hvdj)H+ zBV>Tl^jinv0$P}+c=15@2M#7x-@{7yCGTkG2F^iHAM4*_ffUfTJGkZ&&R&GR`anDB z1|8GPMS=&6UV&+ZFLX!=?GE7@SArcdo$xPzkOSIFn6Ggqcm~r6KVK0qrke@`SAr3y z6Mp_>cX+@#({a>}A>&f-is>k`@kU!6`{xWi!p$N^Ynp0G6+WR9jGCMB!w;by%>@(2 zGZ(3*()<2HX=sm7ZR3(N-Zf+#IG0Szz*-iR@q|iBO_^b|<;Nxh&Wqzbj7f4K&svnFaRKk%R${-m| zmZANgvzj>{Gjd5J5f#tx3FBf8{6vH`!(Ih>lxa}g)H~@|97bJ9zv1A zPmJ+tkNzFTuR-wH_xFoc{;E7BOo6^EugfCQosr|>e z*Dt<72S-?;;HclEO34`cqM`kWcwsS{gEIl-yGtLuts#7&diBrIH@JW;?a36mMs)O! zc>p}Z7&W`*{JElEm)i~JsR*)-E63E#Rs2tt`Tzg`07*qoM6N<$f_0v15dZ)H delta 2312 zcmV+j3HSE861WnO7Yd6A1^@s6sriuzks&pI%}GQ-RCodHoq=`SHWG$MdRKr`!Qm>1 zuY%AO#8*Ld6%@ou}qPe z!OUPlV2GS20no(O#r6q_+t>m*+a?P6MQnF?nx6ljoNbaveUI<+hMesY1$&L-xTOt$ z@eew4vR`MRHb?%GO}T)xRsc5n@#Bt86Y8cE;F8XiDExQvqoa)p^i1JuTlku=-Un5;? zzmQ`O(#Y?z4ti9m2y34PHng58UWjd1n3xJfO4VES^ch;-ecC>zf0xf6_ zih*z6u?HS9XMv1}*LsWX&|wSv5O7?2wk0F5uH3*OdaN~@h$M&)Cp@g#lnBYy++aIg z)0%*66tYV&eL*u`?+W&5;tnbO{065fxR#dI0Cc%|^H;WD?-IHvu787h+)hh16L0V} zbR(|Vt{d0|h~0O72V0yDWofB@M)JdJ>8K#Ed0FJ(J;tB;32BB?ik4~uY2;gQM}1&AUym4DYQ z>{(`t2>a;zEiC|2&fxZh`&7j#C}Ry8nj6^8fj`i~;P{-u4Jm>BJB)mP-+|@=wr}6| zs3hl&Z$#xdNY!ZUa9ykN{Nm2rQnt<#~KwG8?e@%hJshoJ34 zZf{XYS)os$O(_=?!Y+8JTKG!>vo$It~HKIJO}bZ+^$ya4p`{y&!pQ5|MRnd16}YJ$e9J`EcI7z;Bs-M0i*$c;6P3-{7Eu`E5J4wNQO!Q z{vxLq1`?uCfKTMC9aRkAte+Pbyf{n(Vgh3I^@g^DRE}$}8s;bwD*)$_$*BS;&R=i~ zunklSFpzVu3>pg%$f<=uLRbN$i#k4itOs#6SK|T#Ikg}T$Tb!qkW&kRWVi*`2-3H@ zz9@inDRG^DB~7=9R2Cmu0mN^Uzz=|29Hd>@QaSvo%>!sQlsYzuEiu1PdYKO#7)VA# z&eBK+;TOw4CW7`PqakN$8j>;aAEN?DYrGZz~3 z|GbQ0d=9N+4|J!wA3o9#x-;p0N>~`^j`KZyntS}A20A=3R0zyf%K^HY0X7vYov(nt zhU4*n);a$0&(Kk}j{O+|eHFLUW@*qDENsXz0eZK5`gzXK`=+e6K7nGx){s z3Y0)^`sJs&!=`e$&kBUZzPpAVUH?NjBVfFMv;f%D4A$3hggyXadbkoC4Q%{A%=$cD z=mvVY_N@nn2Y{XMHR}c6+>~~WV8m0!-y!#Zv$jYy)5ChO#S6ZM4PIUJ31BCDrp$hg zc;Ovv=-}?)9@q-M+|)bYXb&6sfdid6NIu_6_&rJwEZ9s>rZ*huOv!!O!-n~$+ptMc zOmF<`l0`^KHjBV|WZoBZVKX(H($X1#X&-N*Q z9>_8%oYG=LvjmhG^-RBbKfx|@_0+?yJ~n{8ub=i$pc+6qB^V!cb&7yw?mLvBM{TYW zWtCuj=;{>#DP!8996f4{lTcm>#t!(UrcOZe@f^35F!hh0Jy6YH9wiv*u#hq!3H=Sq zj`k@KK7JOI^mLk>K~{3-z><_)KEH;=OxYiY`mT8zt+#h6s`J! zl%Qy78CV&HNgL}N^Y_n>I};Bzl(~ic`D6b6l9oFdvyJ!qD;1)6*_YU{ylIpb!B_uI zgBA2T3jaM7WR|)=*>~~FAc34?VC(gtDExs6GfTw~evsJy6~DeC=MdaSujUYcJ~Mme zFQgqq{8msPXUY)URTRAD#I}=}y=G8+zvs%lqC=@ScDDp~QfznF4jn2LeAV@T z@em_4v_AL1!5vTO-Y@CnHv`ghsU^3l8(t0Uup%?Rx(eV(IeYHl*HnjP;E}$gv|#f` zi3OXItiA+%R0v+E;Wn<)l`dxWF}FRpC~#@fttwc(0z5@l3NEI|pVQU7kbfjR^G}D# i=U7T-{Jwf&KgHjR*F3x&v;rmo0000|MVA diff --git a/selfdrive/assets/icons_mici/settings/device/uninstall.png b/selfdrive/assets/icons_mici/settings/device/uninstall.png index 08bb9f7b34aabfa83da335c324f8547ed2b65e2b..6db14985db10c90f0edc5f92649385c693aceaac 100644 GIT binary patch delta 2363 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 delta 2360 zcmV-83CH&M67>?0R(}dfL_t(|0qvdtRTN1O#|z*6FGg@<1Zo715y(X#MxaLE8i8a0 zMxaKpdl9TeFhc}z5qz(U?tu|m*sZGmF|+-7uNmOM?sivob#?WRI-r>W;Ltr9S6;gE zG(3mj9fm(^HvD@(dR~p5=luP_!ND(@83#0RoWL9RcuQW;Lw||MuTWO5oKIaTCZ__{mSF5LYxICZPZ$p}(VBlU^!6xHv`lMiZcD1#p6I$(#3MDqHCH z(UZ3fUz{@ZRM{RDyemu0hovj;sPZtFpWyG(p(?_kVE%%?ONT-fA*&DI8i5_UudcMT zpRmLDDW{L{gnu&N1b^ttiTid<`zw5gXEtmN7VtBjkPl+A8?%>0Nn~!Z(O+0i5tZk{|0Es%%T+$~whN zA*uxkCjSHFfn)M3^1Z32+ts~(_ygC&F8Jv_=ilL1&wt3TAP%dCT!savT#-nQBrYft zQ4}C}wCv~|Q963^)2i#0xe!5uxLK8QXD{G`->B@&u4^Car zW26gUaho<&GNDmA#O2bJ&&VM3O@w-%Ca8OdQk4Mlh2OdI4w(Wb+X8PDI>e(xX-a^& z!tY#pO@9*uaTTFMDN2BN!e>*TYX)Hk;weIh+}032y4S&;uh}bS2yT4@Yt~uY$-Vh^ z*wSHw=6+k?m%TgKa!NUXU%|3uR=s``h+_>FloI!bA7RHV#`;|`ZbK$b&<$RLFJVIm zzbRxd;kv_aNMM;X6cgAweH}^-Y9s`qM(vl^xGyPTg4*)w$(3!R~Y)pTLI_5tL?3Ca$Sr9&umJU_;TLYV!md&gHHqpMl zo$5(}j~Z%Ok_PyN3@v*Xw6G4w{ZFKudB~R7pk<-WkbY zrMX$08!Ldu{C}ZJYJQTOKV=QM_pe)WtcZa;V0YuNKM60yCZQo2XH?0>iezxG@A`QC zFa&5eZ2U`=Txf=YmcI-NAYHlpRd2%1M@UxDlZ=+XXf43(Qm9OjA0*>i=2``izJGbe zj&qXX6#%*oo6ffBy;V$xg7U0ry5=Gjur>|y_r zj6;-U64KEV4lVTG=F4_>lr6B z?*k?aSI2K;kJy1`1(2HEh9ck^h^@eTn%7x_l`CziTMWb&fY$&u z{0SK8a&-xCw6srqqq9%k$ zj)nPW#tNVbxoYkgs>skJ;<)MTcdv;vxq7S;m#_m!dNC&->U}o+aDQU~l<@#ontDxa zI$Dymd8kLdDs~b;cc1gyhhA8F4{fyqkwNTE>i*~}s?Bmw$NF5BmEg5C<$q*2B|m&t|MEo=;Z!orp+CP1IXZTE0J z^j4rl9SYRICY!iy(SHbfEAX8vDxl97C||6DO$O_aR1pEa*U#wARX}eAn7UfHBhaUd zW%SNC3lDla)NG<#1AUgzfrc!AE;=~Sp(??nz{crg>;iJohad;ms566&z)tw~A$iz1 zgiKX}dw^XhV;YJ9Y=#16jXE6M0K1;g#9NDjt(JDEN?c$ z>R>~MR2|B_(MQ;_cfq0vZJ73a2JHNSfm7^(a|l0-p23zpdoW-VB^=XX#;b_%GpP=? zld!P%8^Sbxdj*#tO3syj%hzxk$3cZ%0$+z zVZj=3dViQ#G_MpfkFg@3Lgr0Q;TMOq2(J@H)^f0f^q}TG0j~(Bm=8--!S4=yy!{mM z7nowe3qzk#_%^q!PT(%UUvG94N~w*?9z93y&PvJ-`Vf;*fH5OwXeoa@p(ihNF6UFb zEp?I#Fb21)bUelm3pX(t7MNCCoWL(=!c1NP?lA-Yun8x!Xh!9bZmmVL;a~gF^C~=t e?F3J4Y4rGlGR0j2^%1z9S% zP(h#qpn~07LGmh)sUX}6{!g=#iL+$0_RL6@z5bn}Y;suqA&o|(ku-BgGXy~8KhAyO z&lkQtkH1&(E7gJj+W7LbQ~2*6zTEQPXJ==(G&9a<;>5;Y`G4{!;xZJz{^5udK_vT!*0`bKQ!!@b>?4d%lJL4z$k1?JcA`#4`}T6hTN z-|+i56e0+t+J68DQ@Cpi)3;NE4aN6k+6d2R1bo9k_vOm}>gaSEpWzt|YlAC<>1}qh zYXAgehc4ZRD>N8`(P3JWt^YxRlyC1!r7Rw#18)5W*@LR%zU zQNG+D4;xmKv2n(D&l>q0SZ<8>97L=XhqT=JvPM`aDuVdlpEJC>L#aZ5^o_qWiZGJH zq%R0s!G9qg4y6eJ(l)-s1Xt3KRuCLY5dx%Zd{*^i%^=J`Izez4TL=)mdk*$|MB%D_ z2)MTqthpJrp8Uh*^}(3&4%OV;%Reu;OmV-{om zP!MJ`mb{@HAdF{su)(3A`Fw6*Yd~|GRFoRS2Y+@b)v1vY*b0F|%3;)B{BPJWuJu|N z2zG&$`#g<3fMCH|ur&T7z*Y!WWC`r%`%B|L0qlgpnbtFGrhE=d;~xcfoo!7PAQ&lH z92SGGH?T7dE7AfRZ(l_VgYb2B4*hg{LmChkGPInWlgA3!IEz*!1$s5~krq@y?>3fc z0e|Rwzr$kmsez4AxT2wqa?^!Jf!+r*ObZy?@R}A(fqp1h4Y}C{avV;~>PI~6x>s-P z(5cCYcn{62pr00ie%@cx34!BtcK)}D41j)CaD3&}f9V=>9Gw{GXDjh{OblY^Y_oOh z8`N|{V3>=1O$I<`pWPk1_yy#gRPV>|p?^~6m3w$^&4SUYd#(M`!GDpQWCs`vWoU!0 z$c`^0=kV4s$gRv%>-|>{Kt@0}BjEq{%N}{wx#)`IN1(TKA|P1wYZ{JOpy_x@_!G%! zL+$S94gs27rKhC+rTg%u4R#1kDB9nT?L%%@m>D;v1NnCNBts7^?Uh?GT`Oz%88y9M@1{BYjGkXhJg#toX;X?jHgspD>{hQOngdoQ7lu zV=rReHzZ@%>01GKNitGNb}>X%c||flWQgnYon-vUKeR)D^yX878^5CAeD;n1nbITe zgw^gR!sbJjAu(4V-xcL@)eUq8e1F9nKg@ef%$7 z^>^8ljGYFkNXGwYrXaY*YZ^{N<9J1Xkc^!GydW73%@^sO#!n*+iw(*6kH!X=`NY#L2&!M&kbjim50SRxC|Sb_WU8uP&B<#3|N8Izhs1hsd=>mb zg)l1(fDA{i;(aQTTm7$T4nR&4BM^CyT3tg%QE?BTFak9vfhtM>`X9BbNC9*!eMQZH zAYT!5njyfv5)f2;)#I!Doqw;=hCun7Jcd${jGrt34aum;o_7Pj%d42uE!tCB=}XB@ z0K_XvWY5s0=@kYBqkwLIU#aIGq)Yn$vH(ccSw&^QV|g!ij)`pY5KxhfrnDhoOET6y zg;@Z-4^$vyaeT4kL%1XVdkPLxMNPo09#@DT>V4!Qi z^Y$WA3988$*u=>_-@E1&WE6ky5lRi-`T-h}VSeT<8d~gT)y%awtq@?kn>_j=4eGJm z(bWpTKO{pFQRE;7Lck89ud(sxzS1Y{g!h|zp$iLJQ6iuZS3B#7C(w=myBGnj2H29E z3ra+sdc7w(Qg`)KR)6|dBk)>b$5I0Ogw-uYZSpt< z50>f`;0Dt=1FEvdF=sVCIoDzyfsOHUJGO&3gUC~c=;Lk z#vy-RV}i*nxelR2J~M+}3ouz{1#<%O@bq13(g3{{;NF*fwQz1gpTCijo}4m&5Qh`X zCaM8;Ue1avfX!OG!;($>D6m`SSd$fo55++q79lu5tbb=sPQVstUeB;G2$@9)9szcZ z&#Wi~(5EnOS%jbiY#Tq_#unJF!#ga7p{2pMt5Zr1blJ0hdtjWf5Fo5%I@oZRtuCQo zmfYv$oJ9yu9;=R&zYbw%545n$bM|%t!Z50J@9wjvF@XIJU55$!>-&N*lX9>{@9k5( zkfrt7<$oG8vJH@?*E0@dYfac%vHLGq)5L-OSl_Lmib??KgrI%VnkEL)sQYf6R8$g3 zD+KLJ*HkbFs-6=%rx+Hy^-xiXAiWT@6>wcrB_Pb_uaHL7@4tIRC4)Rd(6T}BNmP`X z_@0;0@0aMyO^WwS67wIyGUaX8Igec3#=_?t&406+$I4$(h{?zARZ%|pJm1?CF^ZEW zeL!$fXpS*!;L2)+;s@OyC~YXDy?s!bQE1yz#quJ4u4ugMYMhHOnU^nl)(-?1B@4l_ z`Zo*~(D$h$lx9i$g8OJ)6)p6k@#S@nC}mkv#_)^8{5qd#;TT*;ud-zyr_3Pu`q@CN zXn&zgL&4D7Qbw{TjfyY$ipq_>KL%VEuW~m&GivI$XdCe9p-DyPFl0-i*Ecj0qo$3E zw!wcX#QkaLbl6fb@?M`!Jn^I{(W~b$UpAQWeg`uUR?;?@4;vKP@I|M8#eJyvKWTci z26p7|l^-V delta 3095 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 diff --git a/selfdrive/assets/icons_mici/settings/device/update.png b/selfdrive/assets/icons_mici/settings/device/update.png index 6dcc59e601384d78312570862a74c9c4592390cb..277d27ea92a6b2a5ca4c5e16f1856ea60c685341 100644 GIT binary patch delta 2349 zcmV+|3DWkx6X_C=ReuQnNkl)+v<)@h?KoA5#5@-yPU1;mj zzKrc!{tZt1jKUY8A2Nitg3~tRXnzd(`30Od3Bvu2Pc!(G(0?dL%>OYi;j{&(bL-Zi zA*f>rt%p-TOv9&y+F?54M0RlMgfEgGd-3&6N^`!O{6Q-q&8#CsFkyI>9egfkB!^w2(VTEx$ifxb#8%L0V{ z5FRtgP3Yv;jDLCkrE<*%GK-7y0mcq}6Ph?(HFWM4m9G*Op#T*MexFTHfLExL*%g2> z>Lzn)hkAKYs}-0n4#4Q#t;1ihQMd4g4wX{e0*vNfMtn=bm4DS5ANURhVGQ21Fyi-l z@4=xHU|h?$#z#1h!++}ZTS9_TO-x}~eE`M;%`Mt8`G227`)?~5!fdO6AbeTZ|Aw}N z|1$~%enQ_}$lw`UebL77(w8j9I6KeNq$G}2+1sGRJQ(2Z0 zFrV39bAN&$Xv3NXi$16yI3KVCn8)E8sBpTNPVu!pPutLXjCp+m<`Mo!DwjUgGjOKu zVN7S9fD~iJjwJ&Vg+Lv$L3FmYHf>7XdX$9GaT#dGng&APG!_xgrA?SzK1+uZFh;2c z+HnOVCcKyYza0ArCKKM{Eo~TB!jjR}<6prLo`2?0seOzb&~`xOT^WeLXoHw6^AX4x z9enJWD=ZMkn7>uod!CRr?dJU~!XMvJM$1x68(Jdmx^iVpyS3ze>p}guz`+lf3WUP0X_8m0;e?Z zq37Fafco-ekNV97_0HgW_d6^szy{7-{2w~L9z1cU08A?%(!PX~&L`*);omI>cYhY3 zhmJpkL$ZN03uE7FkEpw+0RM)LU*XKn20D8AvQq$UweAMa+-L{k-Jm}ooq-NIHgM)< z1050%xDX4VuGJ57&}TTaGRi>f2XvwU9dvBqEQKv}{E(smf5BM_ze7io1#t7f9JI3d zUKHSa=x_yC4oN4>tO>ui%uXhn{Z_mSEb^V}Cvk6oxsD^kdpRwmqC8NMBRWy}^1|5R!7-+q`$#KQB_w zb3T5i6VuP3?crpF>6dwQPd#8wJ?;x+hG|#%Jbjk~)8-eUhm!@SkN*DD2c_Ik<5nOO zO!NF7Jkj-7RdCATk77aI!ZC&M>iZ6QPCr|i>CWJ3_tQ8h!D#vi>VG+Up7Vniz~E8> z5x!p@Wrr-WJLs7%O9Lw)_*9Tc=)*TmW1x2D5Yun4_Ird9U^M-ygKz~cw7I-^p!)-p zvFdxI5`M{RrgIBt64dAV_gTRLrbP#Le1LNjp|38Pj@_W6&0HjS!srQTBYdHQB}{h+ zcT}MSjC1fM|55x~W`A~QX(#+E=wb%hDF5)!n;Uu>u|z*n~gA@rf^dzGpLw$kNrMZSOAVFQ*1fviJDu5D3h5JBT z2F^8=GR~VxX=BU)6NLZ;Oi;K-nBR}0VTp2qcNMF(W+IAbUNaBN*q0ezWJMh-6oN6Q zVKVQY_`JhFk~J$V2~Jmnfd$MLGt9duJnxeE1TU^);Q+SkmFe3lhzfN|ul#*P`rCdm|uB4#ZPVVqTs0Cr&kZ~7Jd`Zu3SAQ63LS?x(<##j3MUSNf-_CPNJZT^;en+1#>wu0Ws@x!pf&Py!vMk z?JAb1j(>D{ZolNw{%l~(L=Mb{2z-~_toquVrm}(iFyoXEOnWo^*6iKEl0ggY1*V*i z<+KTnOS0kA2aQU?T>&bG27x0ub;HDMZE)&mRDv5SfYT0CoOb}HEjVpTm~~6LHO!Y#;|`+iGi)l^(#zyiiSj4SzTXup@J(=W~6jRm>V T1Af2i00000NkvXXu0mjfcY$eF delta 2433 zcmV-{34ZqJ61@|UReuRmNklv0=L633e=e?MLXw-muWCpZDRGC}&*^y)RS1CV&}N}M zBC-hW|KwZ-LD((!!%ESRQ!hcl?{Sq-0Y7#4MU8U_Ma#;ah6H z(MZWs2S6;Z&S=Dzvjq$Pb*K%jXoL)!10ZJh_Y~uNLx1Ckh5z$dh0hG;0V=b4=1XY* z8?*44K|BEBWJ)bo&)f&WkJjyPlhgxriQXp~*RbvwtI%$O;QypbNTvYY@UAASU((3q z{XUX}fG*xY&~U%Adut1y{yxw{K40g1ky`qXSEd+&^ z#a4Jn>3`s1*PL6h#;=r?d1$|c=VU4J;QM-qru)_^^kqqoIzRVye>%IVfHV*G>-eyXrfOIimwCVKZg7X#NQS&@2ATy*XL$J(Ze7vjpIW3(v1tuc~+F$^#E@Dg%jTK zoaA0$v)N=n&?SFWZ=os)#4T}B7KeVRW{J1$^rLeW=tcz3!oYS2&@7pnlQS6Iet*S# zlEK1%_rrG~uQ@-GGdR#KC7-4HWzJy0z-TuiK$F0ICMOrtch3gDmia~j#PL7Gqd&;W zh34LZwahmPFd-RBaIsJBPTa6Nyayp{iYNw4Fm20^7Ec#tYyAYfF;S8cpi|C?%hvF z#*#m56hLzkvmXkXj|s_H@_&c50(7@hOAA87-dX2tqshUZ8$EPKk$M;y80Zf5cskQ* zdp*FC

uY=LMnhyq|ygj#8uioS=b$(UE>n9zc2604t9tg9Cwh@^?crRzcQJ!~WeR zVV_CP4LL)hF}A}phW<$M2{}nY>hqk#Ke&UOmYk$Oca_iS6J4Rd%76TpoFqVZoG;Ta zbU=4g)elFKJ2pU<`S114hxP^hN^)5Eeod?~L4Y@;TZMIAf)D+Tp%ZdUfXxlA%{kAs zxI3tYhXNCj>kdccy0y}I0{Scbn1&=kKO$hJs4Bvl2AqoFu%bDfHM?Wntrv)}4YY!BJo%e3-vy*d&CE zj|>g~JK?7(#6dSvw2dc)JHSr(X(!}hGb$+B3m|$sR`!SP?@cSsg)YGFs4<$Xe4A9$bwKy>+wGy1KzGT6F&rbW)7HDn`$?4tn4tWc}~-SZw` zOBof`(24mOozA{)5OOO#TLEx9vD8w|wmkGxf)*Lw74(T$Zv{XUJP+@*vw4Roua<(C z6SR9e``G;~TYut*xWGj#jFSq0^nz!~E~JGHzTr-Gjla$*cuN;NJMo;X1=l8SF*|RK=9#$-K;r~RHf>^%2BV!PA7~Yr92^eSKLwGmdxA}H^PoEXlUHX6+ zZa$Ij^o){NQ561)5}>&+pg0gqwOnMHP#r8od!0)7On)^B5QKjpKJhGLLv=6>f`8j> z+fT;mLqHdk+2z-==5Q6-%}_V9kJTKzU- z9tQH5xS?^w@tv*yx74xz5Mx$=hQ`f2v|m$Z_-Uw;MAZ(&bO_F2&Cf&KbA3l_*c3wlu?F7%ioACH~TKVW1+uWB*~iDm!~u%vkD z0-wF}HP&TdWCUY!DL2txWLeEOMm zx1v=~wF5Ll>q13}^76adOD*;>Ye6rvMwe1d+YLiY}OoRRCtIW-#sfUsmMQ3HnVcy&m#q diff --git a/selfdrive/assets/icons_mici/settings/device_icon.png b/selfdrive/assets/icons_mici/settings/device_icon.png index 3a15e6bbf0b1bf2f4eb0b3ec8976076cd3656830..d56e6679da9c09fc6d3ee3e0d5a72e689b39be20 100644 GIT binary patch delta 1838 zcmV+}2hsS86W|Vz7Yb(x1^@s6$bU-lks&mH2K7lqK~#7F?VbO1+c*rzzwYb*%}r3= z1WhM6cY@1JPSk!{H$B+3+JeBPsf$TFiC zAV>nBIKzlB#wh!AV#}#NMDO4DW99qmbCtSdU3v1QimrM6Sb4Agcl2yFd%{SWAu(2e z$Rx};oWS1UMc@k4;vP;R==sq<-=|iNgDZd)_#95ae_@(}=5p`Lf3_4>Av6xi;0oYd z_ySJgbG(>up&o5ZVar#m3Yi0NBU&;Mfmxm;AGgyzCqxB3ex9K zfw^tW*G(VRDu5qJDhN~I+&k@d*ck(O)BgZrYETT}!}h^C3&5I33fVwi!D9R1h6Rw; zKY1uU?a%6gZ3`f+f7+<+vB0whkk)@RY>Wk}7GMtH7?}Hvtu?PJAACfFKqdLZp*UC)#>}Y1zbX^!no>B$>x-hrUxb;E=|RRg<`)$ zrf)fd`p3da_2O?$9-N~mwvKNJ>mL(yy54dSc#84!WX;wM`tv1G{bOUD&X<(}APyR7 z>K_}59$uM-Ab~J>XeP6^0J+5bV_m00n)=5Ec?C~M0dg?^#EHG&7`}>skBRCZBWndv z$OoEcT^Q%LU}4-ejk04F3F{vlr!(VHz30e}!j`YtvsTXZTdPlvOl(PaA!7GD=N%DrGfePaz_vl_W(Zkmm4+Zj$?iI)} zdT7#q9Bl>m(^$*DkM89XJzR%_m&kinkkFkEGzipx5RMk{0~|M66yUgd z5(PM7C~Pfbfa684AC0>SbQe~}&1-W{jLa47i7BUl4LffrqAt zE*3yRm;#-EuqAZ;fU@P*I4hyRgJYF-`J&4-kWdizVqW%JQs6VE z?;2iL`<8L;v%J>|;McNolt9J+doXeKTT*D*?`I3n-+G>Z^;NTiISQa4>?78eJ9EaE zKp~vxF2AY(8sWTwP>XN<3&bOI4+n*CHoE}NBf?P-nuxvW1_gTN`%Woh?Yo6@`z)~nf%tL3jW03jJOCs%x&ZM8W{F~)yEDtH zyHTWnMmS;t(!=q`=W66|wGoAq+sVN}+C=qPR;L cMlRu+-x>=S>Vt9r*8l(j07*qoM6N<$f+HJsivR!s delta 2397 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

  • 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

    eAJ(M^;4OwvRYrg*ZNxb9*>@k7X2O##j|)? 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 P00000NkvXXu0mjf+t~2N diff --git a/selfdrive/assets/icons_mici/settings/network/new/lock.png b/selfdrive/assets/icons_mici/settings/network/new/lock.png index b2096751be78e7cb7cbc79d065bbc1d5a7cdfecf..53f60e18708bf64d552b4bb8433dc25dc61910da 100644 GIT binary patch literal 2509 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 D95X?C diff --git a/selfdrive/assets/icons_mici/settings/network/new/trash.png b/selfdrive/assets/icons_mici/settings/network/new/trash.png index fe11f6486e3be32fad33bfecc8d218454e43891c..8805ac133c996ed23b8fc2db02c9c2467e577ed5 100644 GIT binary patch delta 1500 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 diff --git a/selfdrive/assets/icons_mici/settings/network/new/wifi_selected.png b/selfdrive/assets/icons_mici/settings/network/new/wifi_selected.png deleted file mode 100644 index 18b593b7a2fa5698da838758dc7a7ba6b1210265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2489 zcmV;q2}bsbP)Y|`FmIFm|IhC8fi^e{v|2q9POYj`fY8x%3p^OOP)aG2o^zYKzB1o-?2WrJ=adcn zT?(Ibo3`UZ;lA#i=T;28_G#1^37+jX&p~Z`gtTR)x##dOuDCyCH?-|{nR$KzIU$ke z2q?Abv5}O+xxmfX>i2AbX6JFO5(;qJ^(t*vO25~IQ&Uzut3ouO2XLzyVOe3IvEC}z zdd^3%ZEnYf8~FxW@Sjv34+XKGuV^K*8Uk68m18*w=oAGu%h8?lI0esKzwO6$AE(3= zH-~!2g8Kx)A6%M*kODsm(;h4z^qqlzQDsT6#8~{y{bdLKL@lW&T5mP) zV*nE?)QFuoQC(m5x&i-ZK!g(TLe2R*^?RUJwIFyha~*20ZnWnzX9B+L;D2<8h%xLs z1N>trfIS${daE1SEzA42b+-* zPtumf1y!dnLx6JsiP|+Q5p#l}RiO(+WP2i2rKr(92?1Lv2E5yXs2T^Z>X~3k9%T4h zb@65haY2sN;DuTm+~)?bGPA)_l~EvLVjK~fD)BXM$ALPY=oVac-{AnCza?N^TV(Hh zoM)O7VwkHjR=3l$sgt?x7L|b8`N0q|n{x)uPiVjy(Ddi7|a3FU!@MYo{(!o^*}QxuTx?ou5Q6%7RHBwoJ5?ua{uFzayE~Y#Z2z5 z74XpLq+gMvn>S0jW9=k}iMRM)IRS2=j4I6tnSbY1P2NunBm z)eB|!r%roM=hXpZk{dF2Hj6rU*5gFhK6Uz*3uCW%IqOD?IXX{Ol0|!^ClzN;L%U=z z^ocE$4;N*iSA!+DrOv~}fgS+um-^|8eYFqI(VO#qe`EeU_@O#8Qa7m^7r-<)j@D!e zt9y-k-kZ5zBnDuEjcapb0k3M)0QhMCRNKIygOfn7t;dXB=>l9 z?z^H74rtXv%ak0s|FKRyN%o9*mFrBb?jAY-vv#NV+^6Dvyp!SX1xd9kJClfdTsXEvmL zoYPP#9OuUajTrG2-;NLa_gt`3JqDjL?|7gw*(tjC-|lS~P`Loo8S}8bZD5x|7KE;- zm{XIi?Fzw}VK>a2>D8j!@n!BS^V8Mba-ZkzM%PYz)#n|^lAArX$wXZ~yw-cVX)71T zb>9mC{kY&%r*r`JY)$*3)Bjjw6p3~5o_8rpJCEqx|PsQpK>cJpE`vRp{E3rG)oTN$kF(z)Azu^ZzZl6uWM5d zA_14Fqq<5*h>o!;^tXl8&OH~eXty7q7`{{MDv&Lm!ACy>pcs%r1Sc-d@L9SAXC@+# z?YUOP^Dezq0|f}PAV2tP8nMptl72yi&hv?sECDL=37$)tqimu};1prFk>e-el8I*+W%E9|4V2=Sjf7 zaV9WDe@Ru zdIfbRu0F8v9Bc>QsHN~g8{kxh-d{5TZSJ%Z!kn8>XJUQFWcx9a`9h`i369n9L4eg3 zoCKQ4Tz!hDH*s#lW}Kf#@fSzYm%(e+I{$#k2C42>ZGfY*Gv+^&4gwiy5K!BL7FIEr z#L9ZBQqZ`-o=)QdAfD(j;^f_s5-{Q1Wlo0BEPXio=w3?qL@(6(uQt$>w*>gx+{6xo zbC8J`ROCWy<|1SqgVH?^yHMwWbZdP+Qg$|U%^=httHmNW)Gn79;RsgG#-Ou6cFe&{ zcOQcSp3^V1C7yY=BY#U71Z3`6cee^W3t+hs3wWoy{D2G+ZAkfaJDe_@7??4`YKRm;#U6y0IbxSNPL+}00000NkvXXu0mjf DP(G-} diff --git a/selfdrive/assets/icons_mici/settings/network/tethering.png b/selfdrive/assets/icons_mici/settings/network/tethering.png index c5031642acf7787ce26fb3c9e393dc1e392dcf05..239a2ce3b90250639e508da9569d197f0fb49565 100644 GIT binary patch delta 2729 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 delta 1946 zcmV;L2W9x`54aB@iBL{Q4GJ0x0000DNk~Le0001!0001M2nGNE0COa;VUZyXh!fkXvID)?q6 zyNZ4HPPSz2kJ;6H-dki0_av`BH@jMmMk`tv04lS2VcJvEo|#s;f2!PjPY?b+MCZ0Y z4_fE8KiunXwOVzwAXZc;PMX@Zf9GVyctOVn3B@g0xp@1XtYo)TAVtVz#NlYdvb=KJ zKJrL~BNz+Sn0CXjjbJ}1bF!4_5qWCLpN6bpe;ctH%8+biaspkD6{sfJk!LO(r5e+& z$;y>Q)DkU|6X*?DiE3Id*OY-+B4siX)n;==^5;G&*qZi5;!r3?CKrX?f1CD>RG=|* zrmao8k+KAlT&9C4RFiTpThl(LUUEn#lS&kXhOAWAlz`|m8Hp~*N>q^&iq5pPk?IRY zB$`Yv5^YE&ib+Qir3x;S4rd~0OnV!8q8>~pcWsO#QB8^zwx)duC6#xX^b}t_yy(f3 z^fh_Lt4umC%8Jgkmp-G^e=p<#jz*?^GB0At=wXb9^#42Uc(3#5!lVx(l8jFhrXfAaB^Lc?O&;L zQ10Kir+zVy%H$^663^E7Lvf^RaujF?*WaAu&Q}mBl0`=+mJbGH5-1W2w53cV&{RzS zbClv~1xGC@Lt#f#f7hc}B-41^K>~NCUBM2wiv#xR!X@N>1d%6O#)V`7U}qg$EF`hXFAV`q_1Cz z25IM1yN3s}MjAe1p%ZK0z>X|eNW;heATALf4v#vd1pw*hf4%Q1!H#pfwwEo4AEoYA z{3pesGwpH-3yxAiyCyl{KC(Ww}FtgBkV7dZjf$KuXX!>gRvJ# zBLKU`H}`W@r*<+&sN|>p<``<&Mc8kU2_F}Kku@a-=Pw_$n2&-&c?9zZ&zi zQ|_Cq$QF3#)BY$){brw>OwZ{J6)7D>Dk+HlT{65zHoA~~w3?PvfL5J52H(T>m$U_8 z#!G!Bf1iN!Vu-$xiZldA>!?HDSR_56pdyV%Q)wtd;nT5*kO^8aYz`e+p&Cj|@?p*m zYg#bud@9p+5{A8`kqLQJR>_G;C2)L`^4Td{vP%t$U$#c5x0HYs&racWDxM!*kP?c9 zY(81kT&ff@ZAl|i47l9TONvO;3AlTk&i8nW{6_GZrf0{dd9^+A)w>r@Xk^bX`Cu=XCCLIz(c0Z!uOjMIT{nHPyN&d0fL0EANq)Rh? ze@-QVc-2;R5ME&gaf@`7dG?I3Lbb5TblHILMY_sfhCvvivMm}0J6WH5L*!#DV?7W4 zglbVp(J=TeAhN85VaykbPrI{>Mnk|xsSW0_%qt8tgetoF9L~FK`);u!^-L6MF&$<; z=LN>!-o^jVM^%&j87b7_It=6HQ7Y0ye@+Os*bX}(l!`ROfKZF?umPb|q*J(#+qur$ zX@^;~Uz9~5^7io5z+UO^lir@V?Y*L?ITU`4jmkv--vr97e;D)F#n6WK$#o4W%LMyU zJuUpuB0-TZB_W7Y?`fk_6%5i84deY4b^UPhz*fF%k%ks}8eazHi+m3mtVziif24cD z=MW!B$q)0zZ6OnB_YW$^fV_zG5EUv1AYY`O;)cAUR={D`c3R4ZmnE&7i>tOflbZ74 z85KlnGIf*}9Th}TGPxlmcm;n?e9{MCX8`0b3-svOTuva&U9vtNJ|9%OCqXBOU9#6 zDw5(wD1Eq)vIo;DwW&zTabWMSn`H*B(SMU;$I0)ykF|M-2qLsyxGk>=fj gRJ^@{)(#ltUt<=f%pweUvj6}907*qoM6N<$f>wB=z5oCK diff --git a/selfdrive/assets/icons_mici/settings/network/wifi_strength_low.png b/selfdrive/assets/icons_mici/settings/network/wifi_strength_low.png index 75f92e91bae4dc10295fd701f10a69164de42ad2..93e66dc9ef456cc39763f7f551dd8a3c04476577 100644 GIT binary patch delta 2169 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 diff --git a/selfdrive/assets/icons_mici/setup/cancel.png b/selfdrive/assets/icons_mici/setup/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..b785c16b97a49f7bc3d95ab27efe487ed6d3dec2 GIT binary patch literal 1245 zcmWlZe^ioJ7{>wM@Wg;0?>p0B0WRZn0oMqV$Uh~*nBJTRf{oeb0pU-{nIrlmD)=IO) z%Y&#vI2>-dBx6$!m@5|tycFm_+Mc^$A{J%j9m3&)!xsl0ceaTFO#Go7u>jZk7yT&+ zpaT9DJ`VS*G1#|f2?&cNoA|j$@h={ZA9RYyx`~F|8(|MM4$Y|MZ(>itnbxo!+E1iJ zHh)d8b*C;M&IE^DD^Pn=U{E)`qn;oxVdBMqU1~mH`_v6 zf9?8~vCaGb_^)!{@b%(xit@{x>c>2@TYumny=HTbZ%66voY)UyxGrw~zGD@)HBNUS zR6R~oCu;|$Tf?1D_;wm%-~FV@&`!$SWlr@!r-YWTZkC^pc#4SaXn)d35G(H_w<3XB z3N^H6Fc%tk1$?8GgzeQcZ3E(IBJ14AIKL;=Cc}3TStYBLzDcrjI-|nsVR?+q`6eaz zv@AAnNekwl*8S*@n>;I@UavyL*-w%fUQ%Y?ahY#oBw!f^vs$DneuTeN1vSWiSmQ@D zVC78yy3TUcjAvSp=y$p~jG}(Ax%vDoRu{O+OWGH$Si}NV&=mcWO|}uMG|HPz|6p~Y zv972c1&UNZQU&VXCzjP(u=Id5ZKB~3!bx)g?1X6yU>g9IKe>p701TcDQ|mcu zHT*>Dx)|)c52^gf+?j~|2?SX#Hm^z`FmrvyOB1xc3fB-_0hJC97v>GaBPMIfbStTy zKfu{5h;ryc9t~EDikK;75j3iG|D-onrGTb}(an^5aNn(vNBy-TZ{m@eciR%QcE`lE zl6!EP*}am}{f1o1oA@YEElNSaTi=?-Q+Qd?cX*7e05?O4X;WDI9s;vK4@RGcr9pF_xV}SiGR0F!BSPyC@AxI)o=AU8%H++l67sPaL0o8c&N=n zu#o7DNvrN;quXy3KyFpH`gS&|JZ^^>?h{#_3s}i}3vd?7dgW=uXs1e`wo^tVS};iR zP{Bc>4w46>RU!p~ccfmMutg$9Bzr&$M7uC-2fUwn_zb!Fr8{(1EZ zsZYSIm)8&3L+7k7Kv!?Pq*y7R$x_z&TjWEQWrIRS=1={%IIjmI#&;(#+_4n7z?07$ vbLP!#Fo+vsP_(?+F**N>^YsO$Lyf=r{jyQB<-nidH^NCi&f3%|kZb=35&b}u literal 0 HcmV?d00001 diff --git a/selfdrive/assets/icons_mici/setup/continue.png b/selfdrive/assets/icons_mici/setup/continue.png new file mode 100644 index 0000000000000000000000000000000000000000..48641b1069ad7e95662b98b798311e1a6e994d6a GIT binary patch literal 10074 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 literal 0 HcmV?d00001 diff --git a/selfdrive/assets/icons_mici/setup/continue_disabled.png b/selfdrive/assets/icons_mici/setup/continue_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..f6cb6723f0ad68cb1d31757921d56ae6b1021098 GIT binary patch literal 7109 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 WrN$P}m%$Hp0HCXFgsRYTi25HC0Wl!} literal 0 HcmV?d00001 diff --git a/selfdrive/assets/icons_mici/setup/continue_pressed.png b/selfdrive/assets/icons_mici/setup/continue_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..e476cd84626d09ebe006c632e8d8402e6434642f GIT binary patch literal 22400 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 Dz?7G- literal 0 HcmV?d00001 diff --git a/selfdrive/assets/icons_mici/setup/driver_monitoring/dm_check.png b/selfdrive/assets/icons_mici/setup/driver_monitoring/dm_check.png index 72bc115291710eee04129599d07e1d8e2949f8be..f6ef2063e2c428da5f378de822104ff87c6db72a 100644 GIT binary patch delta 1358 zcmV-U1+n_6280Wc7Ycv~1^@s6!#-ilks&mH1sO?1K~#7F?cITK8b=hy@u#E#m4G`? zI*==fQh{*=u`2*qV0R#Opb}(PprnGM134A^v+F|%(FDQ4zPq=#-*4uI8ILRwyS(G} zeJo}&8^BFE?$gonug7%UrsLXVp7P+n81#MenAD|E>HmjGJ?IyD ziqa{d5^1b1)6JumDgDpB|722&m6aX*?3*e;1?b=SbynVcO@Iod36KYWVP$PDE-v2a z6cAh*e2>zfeKLuSe!17ftx0^Gx7NRZPlp;o@iDy3d#t5NY^e0NEe+HI<#nj^$H(a* zk3*Iwv2lLLV;_Y-YCz#m-;RYzZ1|P_wMlIFm41)@fs}?yf4i8t^s5^OQk9MJuN83=yqg`kdr*@&z z-!@eG+eQD)+#c2zfC3>0;P`bd7JvdFufQ?nVGhz^z%pGArH!wypH}ean+*LkVkreUnnD=LaLnvv>NiD?Cw=nMw)0j-2@Ha)Z&oGCV%* zx~pTtNkEWq>Iw_L^0;fVC1d7N5AQz z=jCBG%4#9n#OXBnT`%u)odjqnkMrQSUcSqvZHjjCC?oyBYy1^|UouAD)Kw1tlc4C5 zG1|$aJj%t#_9-$6@Vkl`{qi-O^d#KjtK-ZPi$2cnhu}-bDCFUfpi9Omc|sIE=Goy!xN}RmdX> z{IiAGyBGJ_QC`P?oI)OBVw}Fg_4dA2_*j~pj&b@1Uhn#w>h!to6PTXJyL1!wlR

    <#oPhrkmnvti~ZduEu_)I<7nn2 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 T|5zb~00000NkvXXu0mjf32&fm diff --git a/selfdrive/assets/icons_mici/settings/keyboard/caps_lock.png b/selfdrive/assets/icons_mici/settings/keyboard/caps_lock.png index ce27e4ab270fe5a8835649c37b1697e5f05cabe3..97c29255f5dbefd6cf1518d6a6348db0965f518b 100644 GIT binary patch delta 1389 zcmV-z1(N#r3XcmRiBL{Q4GJ0x0000DNk~Le0001f0001h2nGNE0L{DI;gKOVemy&|9f&?j#E00A^i4j1=n;>bqjv@8`WncEkNQx4pF|tdTPVK| z(uKZ>_P7D5L+mb%tHmM?DCL`A0K`0h{+ycisnjyHv&m!x(}i}Xcme+`B~NbS_R zeAD6wD7_`XxO}tXV@}9K`cPNL9+BlQVUXWokeHLPAxjtJdtXGReESh~)3{pv1@bh} zRxr~w40?7E$1T0ZjC>P=yO@)&8GJBL1HN-8qbfe;q)URCDSUC4+Iji_JVFUI@o_k5 zTrE^nJ{9qCxWP=<1SkbPf4z&R^j`>2kl$;76LT8(07~DaK@NI)edP5fK8_=et3`t> z|2=x57xAe>AJZ>$Q2KMMXE?E^l&`w@5?Wk??8{XjK~L4eUFpCD$T3``0pBGmQBAzF zG_DrcN&Y8PpmXshjT7m;4OB)>m6Wej@kP3f-1(YOw{)KJbtay{e@t}(It+R`5l`v8 z5zvwRS5N1d#`Q{rj#9o?i7!bL)3|T){l=AH*z63K;@NWiUnY~lK7sWG;8ytJ3e9ww!Ff&*JUI==g z6i?}cC*T?RJH=D_e`pAJLjEt}DSdPV?2!MHcuF5F0bBCFi>LI_6R;tFExt_IxWYDm zLTV>6&u_DO31=FRvC|;C#w6y`msp_B7pEd#p6gQ(Puz?6FW{QGHy%ZN1aXH9?$oL> z5H;4LdXokCNL7|1{vQx;+_nLZgg0Do_d!Sj&YL#CIRl^de;!!Z*OlL_#h3i{1Ub?p z<0N1^tKXz-)R*=aIpX6Sf0)SK9gqj_w@LW@=3nl+=T2IK?zw^AH3AWHhHiOm+e;fR zwJTe$;8*;5kOd`7)~hG=p?IfIyi+LNDHQJ%igyadJB8w%Lh*X2E{bW35Acg?@k9x2 z@!SKTgtqvvfAC9yB7DZ{@jn#N7Vmk7uWH{doHQwG@*a2j{GoZ$r0N}CI{q*GG1rtX zsNV5HDaat(yS?1?BK$<_Xweq+d3?D5)ehY;$fdS)!9;+QF2pr_$iFOoC7Yxl`xkM% z99?3(2I|lFZQ}TfFx?~H>Gv>%Iq@y&12Dyp7dzy=f4-p%{@NEA{!8u7n(!90;&)Mg z8f?>`f7%xpe!{|_jSxZzA%qY@2qA=w1e3{KiEAaM-K@hiq{y~yZEPE03{&DuBrA1s zrWhA@seQ8a0WkAIMa-vD%TAmr#)m96J(ND0z{DM2F321{n58@a7RqqXUH@>;T|tf| z_q4rQfBLF^6pZ%1`UZJly+=+pH)&|!@iX{EwOY8g__y$jYTvcRdoGaNKoN@9L$&V| zuZL^#LOTf delta 1365 zcmaJ>c~FuG6#sy)PsP;o$k0k~N-d9w{M6EsY&=W6vPEMh?9de(m9#@;#c~VLcGFBt zvZPJhM1`=D4iEBL$?#}J%ko&Yk}_{hM#!bvzjxpK-h029H@}(Rdw;yk`d`sFPDqfS z0ono$0DwV&zjv6nXMRszNL!mdqdW3(Fl%*yw^#UC#FxQyjJGbP(8%Fp-XKuSlYt^z z|D9e1dL=<2F{oH%g-MHLM6qNFY=WfFL^>2H4RCmiln0SoxxWE^*(Ad9PEkB=6QDpU655>+%-M zn9>#Qi!aC2hIDq|YqqneK>rZdL|(2);iXBzsJn_&yr*S#uNs5qd(xp3y0HIyd(8ob z><&HYMfU)=ciX92OQlw>1mq-$>F2-i^3eHxtHP-! zm8&z=O+&cGxob(!;P&ok7Z3Ked_v~UZA<(0{hQ4$zl?=h!oqNNPPj-n@CiXt`ORo4 zY0Fr>gJI+I>#0E4Gwsj}?r{bxG+gqwrpGp1N8|y4Z#ApGE)3BI_iP5X_Iuo9PVsjL zI1hBNj^Yo6gbL0B0b*RI?kdq~&!5bzuot`dr7^&Ug}oKYhPBNW zBNpSbL3xH;xTGR&EbUaHXP|NU1uCN9d|_ARJ%m42yx=HNUpKC~gUH4T6JUUh71mZ} zJYWxjqkFr}fBwu;{yq%PtsN)*u?$X4fs0=+xaXN$9qVKf6^9#Eobj2SCZ$_4c_tc@xt(|JP1}zh8W!;G61P=OR~q}i6abo--u>Os zMJ?kuqR)CJzFv?E1E*073em_Gu6ajlP!=>7Dku`1ALW&} z-RQ!ldwXE5n7GbQ0F~mbVQDvN8?q>w5|M~h#BQQsR(exx@1xWDgWGniL_xbIKfDwI(&;DO zYt5L}Kh@(lOTOL?4{fvW=+dhq8uYT)flFpIbrsY>x{Y84%0{MU9r3i(RgVD!YIF8+ zV98;$e&>1-Q-7pj-(rK5!jcH_k}PZc=ULWL5H+&l{}GI?&gyWC_OLtI_1-IAdrJqP zXc>{>*KOcm|8QVaLTX6a-HfVL4r4Agt!L)+C#dpah^to#m-OY|* z&8DGxI0CBLr?zMPx~o>0G}Xl!Cu<= Fe*hr1dF%iH diff --git a/selfdrive/assets/icons_mici/settings/keyboard/caps_lower.png b/selfdrive/assets/icons_mici/settings/keyboard/caps_lower.png index a762bc6dd9f7159951b5103c6f14db1ec128fdb7..e2e4526f44f05ad4e7a5289eae58ded69430bee0 100644 GIT binary patch delta 1106 zcmZqW{Klc!8Q|y6%O%Cdz`(%k>ERLtq?>>^pMwoZD%_M;-MXs~m@!WHg zjps_TJAHnjyyI}$n_G`J2h`tu^Xl&ZwD(tAIh|GOZTV+1RD19B zWE+1w>+zFO&fK?HbBf%h^_*5N|DPYY6Q`_O=ewkBqH>2^yJ1Far&33~T)$yPb0<(> zx?x76kDyEcd5I$DXB>;3ACxF+oCKr~ODtnc6?8e@ZRo@5rQ9)3K3PI~io1ZV|1kqG z5h2GfHImL*5`K0sC-}8<`h_wld$8}G+xTS;pYXi(9LF|Ti^w^Cv648v&0sReqU(nx z%vxu<3hdQ8_91RYCJUp);riPKpE;Ne+NLj@1fu>g+ytWBSC}+0^fU^xtgvJ=XsTau zOyU5?yw+Js49XRvSsjc$4`L0T1BJ|*ERQj`Z4f=92~;&VfzPl(P^EEFGJ~=Qmnu-g zfNP2fv&6v_0Zu##ER!3a0d=Uc_5u~9G=4GENsUfmiBzo5<@x4iGCO`6M~?&RlfHw0 zTJt@YGb`VaDmvP5c75BoS$sVS=^paVzppW`o8ZUpHi75Tu?x0;b7sA03`^TMt>})K zZ?T3~!VRPS6N~Q5F3h-hn7ukZvHpkEH7C=Jx4Bjqq(7XlI@RapoL{ChbEGOLM8urlaC+ja#ByEvnWB#Q?{^6N`Iol){=Doqt2?I(<~)3_|37ZW z!{iOSWv-{~oRawe5WA#a>-Asu+upOk{Pw_o$KBsg`6cAX-j4P~&gI!`7^BK98`Ry61 zthXm`TKm>OzC~n>IIGDTLAjPq$s9lbim^&K)oI1me-ro~ zmPheZ?5h&_G@X;a-W=jV&$l(rlFSNed9Yph+!DRLm3PG#wal{Ze&+i#No;yhdt964 z>MI#8lJ-;21U)ERLtq#J-ZpMwoZs_2}UGf~mBUdq$OF{Fa=?cK(} z+XfP>5A0*uGRzCqHGCXyH1N*y3$S9mx!|rsBJ&J}a;6t7e(D<1d%U*Bx_C=5 z|NGsSx3~qYEA6x?AJMeYvEK8?!G9ZAk{dUDX#ShT z8Pt3UNGEd!HGTrpDV#~piVxX;pB6gObm$QOx7n%^T&->LZ|uDbG(_a;3alfVt{-wa z#Gl9S{UK;Z#1GpIEWaOa=+CfU-gxNz`)1V}XYVdheU!1F;v?Gzmj6u?KU61h${hr& zD?9vNF^|*Equw*Y=8v4tGzOmkoDo`#68| zacOt?;z@~rPXAdQdA()nl;qdPI<*frYg}rrS3le=dHK4s@Qgg? zt;29MSeA3gUnf>umMXu^uGn<+{PLKu?2YoR$C;+( z+_m`p|7UDNUfS9C1CJYDuD)yWIz9OR9-c4aI|`NFZg$i)G2JT7J^f>(#Z^C^gH)Tlv(XLOBJ`}s=Q@>w|mR}_w(mk&42%ENIbgep_2($+YG4t9z#&p7)Bp zZZ*q$=d?@fN>p1%{d1^K(@*C5RT%lk`ikwXC@O0_(Dq^H)8ce4#GmeAmWfCO;lr52!K|H5X-X++9+B z>riiS=KY+H?A^ESm)-TU-v7QoJIg$8%iKFkU$})P|2?3%J=hLdYA|@Z`njxgN@xNA DyXX$` diff --git a/selfdrive/assets/icons_mici/settings/keyboard/caps_upper.png b/selfdrive/assets/icons_mici/settings/keyboard/caps_upper.png index ff44ff1c73583eba1fbffb078c27d2a8fe7b8d8e..348a4c14ff3a12f7e0228826c30cef57c36c62c3 100644 GIT binary patch delta 1065 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 bKJlMEQs4DbP0l+XkKjQ7s% diff --git a/selfdrive/assets/icons_mici/settings/keyboard/confirm.png b/selfdrive/assets/icons_mici/settings/keyboard/confirm.png deleted file mode 100644 index 375ceb5fdd7186cf62b3a99f7fb7e7101fc630aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1411 zcmV-}1$_F6P)>!ocL)1B5FrNvFi+(!l^Wl8$e+!H#3YGZrLw@=s1Yh5ameD==uS-& z1mZ~XX@W>35wFmnnkFb5v<yK_Q^q5HL*;6&yblOcO+dCLlBc zp$Ul41Vm0^f^#9`#@Pf*nxFt^0zwlInt%vRK!heBLK6_735d`HL}&scGy##73C`fR zvWO-qg(TER_&^hsLK5l*KF|cE;AjHn4hk#Xo6BeyFJ}wtbisc1^9In_nKf7 zS;Er6ouwBo=lS(r{#Ui}wde1Y#8WQ2@0Bkb@0*?9=y`q?`}4h;&1QdZesFRFpxp~M zPvtjh1+QdVXyVJ33ET~kYxiX;7x}fcS{#wJ30w@2Mb~?d3O*MyMl_k_zorJr!e6KI zL0HqrPLs-e69Z)7Z>1HUl*9FpGLR(xZF>1f80t&p=iU(@x8}90!evS2^3*F+XcAxV z^AAGtOXuw92#`bmjgSaD{dCN?llb@2cJD|G9y{LxlK7v5;zy&~H~_+QvNr4Sam}9X>8xfO+xv z0>AwLy~MwQJsdnPIBTY+|NBUWqw09M_=FrZC_H3{(*jR1NNA2cBpB?6#b(pHNPqZ41z2r!vp+zxn6 zy^d0R#pD){YR)@}!KK(UTJaS%KqF-HxkXlJWPLwo@f8~28`k3M6FEjdO>Wf&sHA+X z+Cs&Muc!h36CybaStG+JN_<5PFuCPiuW&E@DNg(~7`}NiM4C6WL%@Bm#j@yYkPiM1 z{qY(&`7WT{%{v|O6%5-P5^hIuHbLFt-0R}Se+K<_2-gU@BN%N)k2~x)LYSO~>oNR% zGCB)Zb^L9)jh-XPwfvX-XOqtPi$r9@_0tJ`6XTD>b6t82GiqyN7a0SG6FA7cTT`HtXu}g3Qh1ls$l~5b1stTzowW5NQq*Y32 zp%>Uda4)KY9jH>N3TcrOLT%cMrb26I8l(!_2ncDsOKD@9dQD+>&&>4wotf|K+4Zj3 z4YS_;e$RJio_XHic|SW?!glTbHw{cK3nLz2xEtdKy>lBN!K#?j5a3RV_}3-eNe-OD z?JN&+x}p2P^FKP}ogc%UG5qjEOmJ+Ohhw;Z?72OM#$bt>gGFxF?EBHIYybMDfvL0MI*70XQQ0gY1sY#UOdtY>Kyyqh11-ja72P%K7Z6acbk%!>i@+fS zk$D6bgC>CSY41IQho=ud|A*gx5*DGoXTUb^{f%AN;oT|5l@Y;+Au5pw7~3WWhYyWm z6z?=pbAaSf3dHy#=~=iNA-c=){ncfo*Nv+w4SkivZk z)L@K}07=X&+G&A=$3gky6tBpP%3{ZjQ0^n1PJoiDc8=vTgT_D_fOyRrc%FAW3$;h! zm~qaJfRXr3pG|k*V0VUqoMO=f-6A&3uq2=bRa;TP;bG%v6sMG> z(DYinW5zN$QL)R3Sdt`qXFT%)8Z~1Z{%sl-O9ZURU^eurjz6$$(mnjIcRe)$3up@h z>{lPSaj5Iy31U@XRuQda8(2>ffD92cjzJ?Z86k#Ie+xn_N-5(~-8p5Gq384hfkF}| zta6}o$N-WUdKFdDZ4H?MVHg6|&}SWsY2(K`2|l|J!!U2aSOjC(A4peqy9NaQ1_**q z28@6TERPu^xemqpk=cx?R{9b8+Diiod_G1wWjkqr8fbzL0we~2HNW=^qku%95zCr} zw_;VB3B39C`HE;WpPR1Pd&3T7(Ebp@asmipA)rwF6s(w-Wu)*CRA!Vhk3b<~5SVa$ zpX#^B;6)Z)wW46a3(yRxFp{3<1XOWH=v>rm0(^3ew@i@J*^xOQ2FgVh`y{`K4eJVo z?$bk`+;DRIyDuL<9~S2YY%_v|UveLUlSBel1Va?yf&f;)Q_)l_83^DgfUpHk(ToFu zNLr8C#lNic3Sb#LyKZ_=uZiiSC8>s{HBDi-$5TXGyliGy;RBHh}tHEwtLsYmS0I31F85jaH|f#78V9iGu=?Fw$2(1Bal9E>kyy z%w$6#HlAG#0Z~C~Si?;$`x$rhbD!&P2>Jp>u0!{1d}=y`!3-AbEF6ByG>hviNBw^e4boAyqBD`n3~W)WJB8E$Ah|eVhVV_ z3rtb^I1n=f8V{ESrT|Mv6-RtNpE#S_=<>KVrv*xVJkodEEU15%!7(%$cmd| zNA}Uww57@s(_jgTSn9rsEnRbZ&Z!Z|E}TUQ9M*%Os#5M$h_m7s;~;`v;;l?k`YLtj zgtADwUmCoA!|3=kFOSX1utedG*gy8(*%}6R3QRQnf<@PaNCHX_UqBTQL2NDCGSS=3-Mx~%fIUA1-Kcei}zlGp#|X!#@qK3Ep#czFi?cQ6ya@oigzdUgJb-OM- zHSyNu^RIsY9ad&Z;za|{z;hZxu?R}!&agSXuL2}rQ|QdHX3=yanpdyivhf=~K5}A; zSzWUWJ35%z6f8DW@r>e!s|3om8DNF%u~Uc?)G1|ojLw`|bwbmO-^de_vPIqYi(6JZ zD846xxBm9)Zo4EqyY@T^0$Ao*hf3eI4`zgf1W657l8{cE=p><>-j`yP!y|PX2d0)| zu1{N04k_-6F)P+83S=FoepM7v%NDcNS+NCHGQ}0eKdV7vPeVhRX#25^99h8wvfTV#pvMMwvTZPHK!_unc78}Bob2bOlt1D=((is2fHUpeGfU;5=|9UCmC8xb*pr;ceZYD zn^;U{Sa4~Vt9)~&w9;9`F0$1#M>Lw~sR-ySx50vvL^L*OqHNX}D4F}A`zPLbZEEXR zKmGFfTmLm#1%*7Q2X}sT{pW>glGlw1vb&Pm7TZb87?P#SE$J!7N!%g!J5$i>7SIVM zXh=u0NTLlL3F_k%kpxW=|0ip&&U1Jy&CYJu!BsJ=2mD~@IxjM`Z}e>-*VO!)Tq55Kiz*`bIPEQ?0@zhgh=CXL2`yh);daU=BfE`*wXx;|r(}3g6OMiaLrUQQ3 z`(JS8Qj>(|nTWN5u0T_FN1b-TNWJe^iD680ir+%pi8o$757TZ_ra`hinjDHl%zbp? zMbBheRxNtAnsnnKwy91W_DGqHG26vhR(Hzt47?IhC&^H8J}>KUSAjDVr(UsJD$um| zk`&>{!ZN&2+!xSs0S!UdM!mTOU%BMCwC z3JQ$sQySxSG1jGeChKNPVvE`40_{OF1Zq~rYO1(!hf>mLR!+oJ>0D6b5%aof4H}MQ zV+YY3nwg4@Bi70*EGXde)IzXHV^d2!|XY)g|}DU{NdDZ?){zD z_Wky~>xM7CdZ50x4_yw@+53+?cDkIUa9ZN-dI%NAW@-`%eO0Fsx8Q>vJRSl$r~0dn zQ!Mg1FT3`cYj>=E;vtyeT?AeKYrV#D=)hEeFe*$+%Iq6v$l01R>xvD;*|D}bmkcSPyw@Y=tI(ql-MGqV z#@W0ak-zDlZ|!~K+`Dgw1n)m?j~ssVzgs7&{D03$5T(wEM`(|gzOFcOLxG>rZ^|oBu1NQ5=jz3xgIe8W~gtFLKsprpPeeScj_jY~b{8 z&bzs4c$VkxL7mgW#pF6O71Y0$pcTww&QDhW`&d{SCEiJpFXNp3Hde!NVjYkT$)SCW&O76FdUxT46`0-^K*maq|6 z&wlBfAL$3y9S6UtU==OnysQuK5M`AYG{FOTY)hSz^jV;)V`EsOm3&&^ zCkY{+*+=yVstb4tUeT=dpX^eny&>C2rP1?hV=xS(Q)5$7Qh0 zzR_>P3@hTO+L|c96+PUun3_=*Nf0tIcwQF+yw?SRJQ%yq)7kK)Mnto5ZO~Mw3EK=f zZBTvyW*Sxl>&O@X?jwV1KD<0Z`Ju+H!(j@p6(~@!vc=Xu(->IYG&XO-Iy&}cg1nSR zITOXk#8D*9O+q@D0efN3-yg-hMwxoPDY{Cf-zjKiCVYOds!d&Kv7*~XK`U$%mgWfn zD4Z{&$l5~M!Owl|vcWZLmqU*ac<0yu<*FH3O;W|;BnL!!GZPIFD`Vv{W2~kX3?1OwFsdE%!nB5K$3)-N%AP)%8h6n8P<&Yzp2fQ-yefY$)l$yn zym7f84TRpFY3+0IE!SMBSjr^vEb|Knc|h{{EUrx!+xpk*_OJf=Z{EyFOZ?gMI5O+- zfzu3%J;xg~p1;fIf?yFt?xXC2j7o~>L`Y0>^t`DYV^>421e|>S4-S1R^U8L{o_=L= z-St;aV$}C*w$j0qFH_6Yuh}vuDL4heVz7KDGnk+lNbz&BAr~W_l_um#$x2i&eDB2Q z|NZdIAHDOVQ$K$9kG^rw*gyQ+(-ZkK1}n2ATRttA6V=j)B@~eaE}F}w=UhOC`<+tC z$;EXY+BO{qt<&M6&wFtJ_jpkVJ#Bd3jsFz8VTj5xxwe%`Gil3}hg>5>UC`RrZma zREdaSStVkp)1eQJy|Cxdmbwcw>ce8}+>Ofm39hH2j)g9jPXU*0IbmCspazLA0@qtb zPkG27tImm6?0{2k9A`yYCInq!AU$UxX$EW-#7xhb-qIHu1T>c&QeTWlF5hhAMFz9( zcq|r?b(nKnv+uGfvU+Lc{G528-|Q z214XO>EK?d}>tnvs$t14_JnrLBU+s!bejtJN2< zDnlSj9-rAvOat8f;+_SRooCP<`qXf@+kJvxhnWGIu7#69u!jf{m7VP0ca>dIT$iNGvnrF6Fe`&+ieG921)`KnM_TKdmBkcoFLzlQ zo--BD)P5b`!YLUjX(}&)t=Q0pvlZk@A6PNH#IG>djV$PNw|gJDUh9If4D5YL70n=S z1}LBCo@z}xzuA^%U9r?G1{5#D+2V^COjG|Ql?<6tUJZc0q{W#B45sljcmLF0lJ9Ms zAGmQl4rDhv1nbJH%$1cC7ef58m@TFHW4sG`V(yMwPra);T>z3x`rmvsmOWNR0g0c- zB{F#E=$(hY4)3A8XTYp&MoWqW+lAxbl=Sr)a~}*m11V+O+5XQyGNV%Ev0BcIny(gP zEyPO2qZgx~$xU@u@zzmPSWhm0*B@D^`1Nax2ADN649g(x#IcW{p4!AvX}Ut^GfHDC!la2bMhm O0000c*b?9QC|OXKe8nd$BRO;vTzY_GG>paz3M7m^`t*Z24L zF+ac*wmxhDH%(NYW!cm*Ue;>0a@fxyJBDkvVSfkm+n_u&q%71dfHZ_;2pzb+x3@PS zFdUG~CpWf)rKNlWaNCfM;Lu9l@M-~8TGA49{x{f$04m@{U@(u;z>z#~+^S@rHWYy3 z(2BI(Zg0b(#{lkWs6lfB16cQwN_$-vMBq0!F(P!}O_P!gKujvS2Uj?{5(X&lf*!y{G}1BPk2jp5v1Q(ZI( z7{FQv0IS@pBs31s8XYMwL2*d3TmsVeB`7EGPk;jpBTK_`ms19WcI*TWOKuXLWocU8 z8bxE9b_2X~IVb{!{h~ac3+XBx zUf|bESQt(r;G*SJi}GN_tcp4!gS*tplPAN%!b14``E&U4<%=83c-@+`Cj;#m+q$Pu zpZ*)HY*PgWjeCZpV$7N>SeiR(fKqkw;>B?F>eX=K#EEe3+_?hU$B!Q;IvE>5r7TD& z{#eBZ40O#W0PUaR9J;uip!Tg1Fy?|WSXy~ZXV0FU*k4>+EUZndS95*dHqA2&-GF*OLnBH&;_L=G)wyxM&}qzIJQjn7A}dCRIsK;R_wyc$l5euUW4b+ z`}gk)D?57h=tMb|p?i+U({EsnfAhFg4Iu6+(IO z;zf~4S(X-SUu<*wdL93?%1VcxJIV^RhBc*GprO3L9|L8?>m|IlT|P5DiUoREDSa?c zWxg(b{rWY$dGn^Sd!oDtcj<~K=e1A|M#~jEYv9eLVy?*5q_xdrY1TAGyWyS-v+#7i z1v{5C_p;)WSKhR$Lep-jb>mYE1T<{HT^LvwY9Dminsp%1WP!7efx76D-I&{HR@8Ld z@>B;jul;;q%rOV}@ZArJJP7ibj1@Sk!Smzeg4SqqDr~Z`VKa*l{HnlG;4U+eMil0Zvc^$7_y(%V} zKZ9PsemzxY8Aa;Ag+V{ZhfD3C_3ns+k{^UIV{L7%(V&kv1m9$!>tn3aK5KJxGrWEK zcB-6Wm}e+btUT|)&RDxZK0Z)B*mdym0`&;uTPo&I%teBY^+h$z*+B+tVT5*J&|9_|oEbAsqS$)=CB!UWHBhSKO)+ax_DOI&BIhV{Lamq3hQMS{%re1z8# zunmo>yh!fz50;IoL$kul9Jh*D6W@3_XypJHu7_&3+avD+4Vnc|HhNa!JgW*U&+08e zUZ12p9sn!#)LP!imj`JOt%k}@R0Ws{OS?I#7UmfVD|<}!a$wJKfvjbkvLf$}@CNe^ zRDIDXp9QN-N-`JaTezR{iYK+vyewu7TpvDsD83E) z^yyRB+SM%SMjk3W*OL}kZp-rXrdA;0`T_XD5?8D&$_~XEO?esUwZI<>#wo#C=C#y|Q_=-_ z9s@mC*Av;-j=|s|T)0H<`>_%a7GK$?eFH_7##63T7qwy^<+YpPS(jLD&i8XasE@chIJix42 zW&!hD7lBafxg?YiVMN}r+T{Lpri^EQK_yEv;9Cv#8qe>x%%{XD>sl*TaVRt@N?1I0 zVUP#QTJxAB4Mn(|6M(IzxFxqR%{3{{Q?A$unPOci3#c{k$`XH^mHe#2fBwf84X3Pu z<#RJFttu_pr&zOuRp#;OX32BIiO&udr2W9uvNA1}p;9Ka)@Vw{I4G^ma%DcpD)Tv< z)65S{N#*a5@JI3YQbx*H@ULQJDbtA9=*VC-{}X1e(nVKksd}Bjyf|iASOs7?2KQ7K zocjDQr^*50K7k`xsSAm@=5a}Dgk_*`eue*rVI|C=dR~o&18}$+dtk*el$Gb=;3gWI zWoD|yuX29`=^t>~T2=ScR2wi-IWXXlB!=O~|JsSVrOc}hO@PI$4*wepzTX?o>Uw57 zLW3&dUBWC34!ATF2aJBXRSNvt{44xe7gGGAB23YmplqWKOS1GIq{5yupCKQw00000 LNkvXXu0mjfsAY`* literal 0 HcmV?d00001 diff --git a/selfdrive/assets/icons_mici/settings/keyboard/space.png b/selfdrive/assets/icons_mici/settings/keyboard/space.png index 86327de2c172f2f186a782601a465feb0f9ba5e0..0d5bc90ef187ed06ba4b6b31bf8aaf17e5f186e1 100644 GIT binary patch delta 614 zcmaFO(#NXU8Q|y6%O%Cdz`(%k>ERLtq$dHf0S6n9{Iy;=d!nLgy|Sl^V@L(#+dFRy zFFObv`#80o=@O$C`-R3}#>rexS{xw>FBrlZR2^7naCxv>Y8?nEc(cenUxhc->=gi%g=hi4GZ@nh0%dKnvb^iM(yR4V2?y6JRZ3`DZP5*0e{oSoV#HsQE zb9iaJc+;}hPYbMT=laFnomhWF*m3fr${8>Ba_hFU9A3AyGdo;|zx0KT>?^kmOEToF zZhJW_XF1#XEK$vYsi{STg;SG5C`dqMiGqiRDobb;l+ZoIco z<+9n?oz>4}x9A&P$$7o*b=QNy&+6}d>rd>`xVGzzYTngKfd~;M{z9wIQYoqqXSSwh zeE#v@w_(Q8+x<9d4$j^D zUrue7WlyA-o~?Ab&pMyii|@s&+G+Qg-7vZJ^U9a&PkwupE&hIH?fnpzn|*NEvLnOIp%b+q}!2d`@7upnjX#1 lzQ6r?=Nisv*Lx3s@H&)hR;hA^?*t|t22WQ%mvv4FO#u8L2k!s? literal 619 zcmeAS@N?(olHy`uVBq!ia0vp^4M1$j!3HFSRxFeTQk(@Ik;M!Q+`=Ht$S`Y;1W=H% zILO_JVcj{Imp~3nx}&cn1H;CC?mvmF3=B*Ro-U3d6^w6hH3l9s5Mg^@?{h)$6`N6G zDN`!*90zj-^8>sEOodE|Og9^LF-l+gu42i($b)&xx4-veZ_8YeyZ*=b){=DsEA&dw z)iz`)U!8s`t+C5W;j#q7W9p!WXWjyeW(?C8>{{BffH7jxE}oF>(jnV>cpcdy(83^~f2exzkk_uw$lbpl7_JwBH*}pmSWxw+|%xrO7 zuKqPs@$2m)(S8_>5QcG=7T* zw=9Q72+aj@DK#@vOHHRTw=_NKxRio5%;P-uGUxp6ch9}&d%np`7aB~kARss2KwW}DSu_ez)nziN4iG=`Au<3wNYz$( zLjeGKk3l6Li2%(M++Yvkw_KhLdI;EaO5#L6v>XvJpa(6G6+k&s2=3S7X`L!Z4rnng z==O7szjQv_*4m(wwgICj?P2?kU=wu|%7W5s{e*9%?ws~3E6w(m2 zP5hlLPwO(nxNS%_fP*>9L}sMlBChK|t>OQrYishn_!+*eGOZyxi*LbOH#n1rX7d<& zbwtxC@8kYg`V=FZ1TSknOZ*%=Z2&^oGwON@Munp-fcZ5 zT-%&8;TCetRGg~;>JB*C*{OtdkNS%E)+;$#q@QSPdZ)_mF|GHSASgar6s47P>{TVP zQ@2;yLo7VjOZ==fPFrZm3}pv%e=c_1`;pUL9r03fpoln-aCV~)A5S2hZGtJm*BwFM z;n$g43OtVPkYUoXNT|wgGQJqOTyc2e7PFx2J@Y2fGB38@U;q4lDPX#3T4Wsdyx>$H zv&x0XSq$&r8M})cGbmS4iM4O5cB)NmNK!;Cc;1iY=Ibi3yCT+10mE4Apf&H^>HZfr4GXN5_Lk+v)nf zg@MMT@5Iv>gnk89IFGi(EjN%x+5)Fn z>pNv6#>pLHA=u&a*bn|Ul!WK1+xx3qW4GeI-g)82R=r^IiSCi6S8hu#q$;sj*Xdjg z=$-W}-upT=3ceCiQT}PL@0zxvy>#V+lme&nVwbi$xq-)!2Qs63k&bvzzebiA!u+tN z((ZS6fYv9-sJtQ=w^a!~S*)P(1y4|x+6%IyZ$4n;xkPb)R?H&Ob$C-BWOXUNU`eCn zv6b%v{9&$7ncR-@V0NoA$WQ&p!77%b$B~$Mz47#UY2Nl3ciwJY>PPuf%oCqvW{-@K ztU3uMP<<2{uyZ*fHGxC)+;`_qQWXjb^)$Y2MUpPP@eR;Ckve1;;y_UEIKXgnp;l46 G;{E}Yc)oc6 diff --git a/selfdrive/assets/icons_mici/settings/network/cell_strength_full.png b/selfdrive/assets/icons_mici/settings/network/cell_strength_full.png index ca7fda4441acb0d37131f7e4b5c85716a10f8b8b..6899a72cebe7bfda66b68363e769704d37b14c2f 100644 GIT binary patch literal 777 zcmeAS@N?(olHy`uVBq!ia0vp^6M#5@gAGW2y7GG=km4-xh%9Dc;1&j9Muu5)B!Gg9 z#X;^)4C~IxyaaMs(j9#r85lP9bN@+XWnf^M=jq}YQo;E4?!#PRM}fA7mM)BX2W2Pl zDTq2~mN0|}Om|{;VD)3q;e45JW1?=I!y=9EXEmy~zgM1nM*dv)pRBEq)XpW%=-OTX zLSO#3==%0L+4(=U*T(bz-Sz(Z_SDE(iFUSgocF(r5&v!>@vN}-`J2jfE+&HKZ&v;* z75^T`v-_I;i{$#Bxu$vdCBD7uzWUR};dgm*={?~K|3c-;_~$g1>G|yr>yYITVrpt> zP*7Cx;J{>7W_vt6Ba_T4U-Ilm_eT@EgI}5dCsuAY-za_e+uaujT|O#CE1q+(OnRkX zT=4o>mOAI<4a}W;DxU3l?_}?LfX`&#rJ2dnGK??1())4?Se9tdwcK{FkWDCbzTq!P zk6%3&%!wH+ES!vvP7V_U1XR$On|993NPi}g{bPyoakWoLvn!rFVmmL&FE`eY_m(3#pLUmk1w_ru+93_b5N3Fw;NWYAr}5W>tbzu zyrOYG|EqP$iw&zk-!xI*-J;Up%_g^uZ{NPxvki*(2>CzOpJ91Si`)448;7nNjX-vm zpn&o52wkS6XA-M*=NLxJZ~EWahBFMYhb&N3X+c`)te3N{W-iMPTRwALePR6LD$TG{aTklDe%=v;r}1kHa!e6nq9Fk_hl*{1h>gTe~DWM4fV39&A literal 1060 zcmeAS@N?(olHy`uVBq!ia0vp^lYuyngAGWkPgbi3Qk(@Ik;M!Q+`=Ht$S`Y;1W=H% zILO_JVcj{Imp~3nx}&cn1H;CC?mvmF3=GUWJzX3_Dj471eH(b&LEzZOQnmZe?1AhT z9Pc>3U|7y{r}1TjP=Qth-y6OK%$A}LLN@Glc5mCm8}=^pnE9{&X?#B#bbo*O(Xuu* zwe4il_e!blnP2L5{5Dy4`327jM~~#krE-@eq?WB_Sy?_;`>;u8^OrYw40JP>>)W{5 zJ(+ukXY$0diuwCW#gc!XGvL(pDDLJCD)XDM?D3VP(w0msKOM2eCceZb9&G4LweyM^ zv%78n^LI1X{Y^BR{dR3&i>8O=#$8^?cAv_2e|f9b`f9al+u=D8ah;bUmdl%)8F{!) zKX$8KY1=s|rx{=JF74P*6)QD+8k6gcmYNmqVbeC0W!{NW=9uge=@_=GeA+wfM|Dp* zCZAh+G;>kHe1n%~bp7Jy+TEI{>|>QKmYwI`XTZ7To0uIJHrF9L*=MrpgQXt!rpm2H0}Ic+udFfE;--TLc#*!3N& zHZR;36}Y@td=_VLWZ)FWi0Sq2O&-FDTx-_vGd!_nlaZ_FmFIbX=kp4=%P;$ME;q4I zjIC2FY}v`{VcQqA8kCB?Ub3cc#S!%f&HQayEu2QUP<_kFlJ32q3a9Iw5AVMhP+*q3 zzh&i=BhR#bo=@sO$2a|a?%7-oi`~oPFPi-230|49Mz{0qr^tWHqWGL2Yx-m!*Y}BT zxEATG+rIGQ9wXPSGI3IBk7FaJT6JG^`Ja{XWUA&SHmm){J?o|%nRp_x>)y@fZJs9* zU+ILU&tS1*Y)1|(qS;b4+pVe(2hS)IdwuYg%lj37bIexXa@$$^Xoct3~$Z9h)s~oA6t&4p_Hdd}r0V z`TP2E<{P&yIqJ7-{?6kse2=t;x%A69oAzt>U)+Dk|fJ9DF&Fw zsmpii=}yRIni~FS0yoP~ffc>iD{JLWw}si|iM}{J`F~2jLjLjgfUnB(k5Aoy!R41K xxBh>!T>iZRIq}r}vcI<9ORltAz5ncE{=bYXFU1?ZtO90g22WQ%mvv4FO#o|&+GhX& diff --git a/selfdrive/assets/icons_mici/settings/network/cell_strength_high.png b/selfdrive/assets/icons_mici/settings/network/cell_strength_high.png index 71da5bcf254a5bc8c1ee7321aecfcfd70f2f7f4f..751ce84acfb693d3c76e3ccd2cf687c40b9d69ec 100644 GIT binary patch literal 936 zcmeAS@N?(olHy`uVBq!ia0vp^6M#5@gAGW2y7GG=km4-xh%9Dc;1&j9Muu5)B!Gg9 z#X;^)4C~IxyaaMs(j9#r85lP9bN@+XWnf^o^>lFzsbGA2ccY((qs;M-|Ai)Rc9MGO zvu(lk3}v%Z!Wl=4C;VVIA$=m*;i&Y2-ZF8yh9kaj793o?C+qM3ol`Y3^zP)V&Aj`! zZqmuD6TWR9QuB%>-)S9Qu_gES5&dYpM^+y9}47t zJzd%_zHH_#r6uz}$}>qd>dlLl@7L}1mOn0daaJNv(sNJI{?g*yMYOJ{6Ve~hveiL&>M<<5~0s<;5ESy-F{5+mp zbAKPx&#ygFdf0vM6UE+sZTWONzE!KT*0@_-n$^)Ryz$NN8^&kdqgzT+Ie+ZB7wyI} z#Xf13Lnr};hy_(Jy0 zu|8_8EyMUS$gcG6w_9B94!d|yt3SWvDKKH(wwf%U3|=?xwHCJBW_*0<>$8oUn$F8? zpEhxQ@Gr?iwOd{G#Wt@ReiiYX+yY8#*Rj7kI5W9y!J*z?X9{2b61cG9yv+1<{ESd; zK<>{gY@F*|obiQ6`8k*3XA<8Fiz7OXkFS2{F!OKevxwf~yDa^7TN)PZf8S_P+%t7e zX?kDq8=LKKOTPz8Y`6gyb9IyCtfcqpG$-dW>syuId`;Dz+l&(D;s@&A1H)6R|t zKb`r^mp9s--TCx$>e}CX);N2=H#l0&y3wxpyrA`kE0<>fy0iK9_j#H>l~tKvU;gn+ zt?uU6jhUG-zbrm|jlIttx&4By_vhIn#VWs_0p*YI-_k!mEls`4vTv8=`?@Eo-^=vn zYizdu-g`9mj?cUm@`^ioK&D*#`{|U}?!Y%buf64j^qF0BK894>vsJzKgOy<}zkH|_ Se*`dNF?hQAxvXra-NZK|Gm=FgnDcWq<1JhrtRemEz0-pz`n6REIbU+;@Vx%~JMY$uMXgsdB@Z0hkTly=TGr;ywBDnf2{Cv`|$TZ-hvh8+S z>Z8L`wA{rDzl6A7YC9!zH(J)V-t3mZGNFxDyYe1guzsMtdBQQQ0SOD@pSnKg(`3Gx zU6=oAm9+ld_Qn4e?77Po998s#WpV2JKg<_)&5!)~*T%zIGelLz`g)?0p5>c`w?Y?u zDi&R~K(*amF;X&o*$UP6t4C){Tp2Re>qtan%30H(w~K#V)_C(@4nOj% zEv@GNEV&c=B^#12^(U9iIA`O-d}QUD<=ZYg`h_Zga;arw&z@($a#omq^`DiwdVhAYdPt4cdm-1k53S7u$HcdJ1;f*=ACj7Oji@j^Ab{~EAb@KTY0isNOi_bn6e>6X5 z&LYYE|88yl$+zzLzUuxh9@i_L?%1{8%5I;>yW3ByIi`KPD1PTd>rty6^^Kc8{;OoY zm;EcuK{m5gGCpWUcYW~98=E!??w!A_pL^TP?S|>eyN)^AIK*AuciUpi-`%B-@eWQ) q?d`)J{o60|RDI$21e);&I?|#wC$ES|Z?0>JhbpG{vL&;eW9^UzW z+FM@V$9QY1$Nop`ELR%z=6$!5i z)VUS&loouvy|ri?N5-Fd5teTpcyDYeGULqn^X`{jzlk}cqm#n~0Ra^j7EUb8?>v!D z?TTZpnNGP_6yISNTmEO>Pn-X9EZ50y-@vnOuI0JHPxgn6-f2{I_|2J$KsPiwK|I{Q1t7>$d)h zN0QjJb_VY;?ulZV^7&fnNTpd*9%PJ?x?c~Tvdg{Zo_*nTOMLZ#aBYZeA@}8dY zEzf-VWXA57Ux8-+=dbSDxqi(YnPT(3`#4_Ao@#7-mtXt&nG)ai`b<`viuioWv!2eG zvF_#9+$B@?{St4Vc0aN2JJ%=6N1`TM|17iH{-@@`uV26FTi-^{yX~8Q?d(kNJwnAf z&-WIe{`~5l>F#}3{`-8dv-@plH%qN-^WQu922Wpi_or2*o<46AdSvy-BiE;YeYolB z*QKKM7miF*wB7#o-XlG^WBt3LlMMIm`_ZxNM|TJRqUh(z`;)cp-)<|pHa)X;KjTEb W_ZwKk7*+vu7=x#)pUXO@geCyBAEE{T delta 1189 zcmdnUeu7i6Gr-TCmrII^fq{Y7)59eQNKXdhcn&ro`R4rBTN4#c>RDnvT^vIy7~kIA zn|;deTGON^Uc-ZJGZLJAHYlpy5D?Dk;50kJA`KRPrn}HZ?_@{)S-+mw zI=?H{{hV~;cB8qXZ^9&aO9ImCl#8Y@)=O7ntA8BrdUOCyd4_3v?7!*MFxv#x1A6T~m9ioqxUTH@_Q@wrrJZ{l?ASeB5IBH9on|R>W*N)owLe z@r=*a?A5Ek+e>n+}o8e>9<^r$lQF%#q=G=;)%w=Peng$SH6~;C}Om% zGpkmi$LUyzZLv>F-~;Ukn9+<8j*!@g3)c%=zBBVe^f8mrwJU#Bu8T^Kz5caJGj9Jc ziQxMWPRk$fc^Q87m+#*vwU4yY`-Cg!tO~pTH~e_XEJN89=S=QpS0BBV)_Y3$tBc(J z)#orO!hmG@{ub%m|`9}CH>7Q}?B2|1%_upLLEA!Yf zCuXz9FU@b6wF$RR7TL0USL#1}|KzLl?e(W0Dt&wR>HfCv+Pk6l?1uZg%nd>tEsov2 zap%(N)9gmhRjZT=d$uQUUR;-^7+SMT;`nrP^HbHb-*TWhvPE(3FGBw@UOVGwl%sy+ RGqB`g@O1TaS?83{1OU#2N)rG8 diff --git a/selfdrive/assets/icons_mici/settings/network/cell_strength_medium.png b/selfdrive/assets/icons_mici/settings/network/cell_strength_medium.png index c8ad726785dfd2f2522770731972bb889973525a..c69d6675029ded3118626f78242b1362b60c5a82 100644 GIT binary patch literal 956 zcmeAS@N?(olHy`uVBq!ia0vp^6M#5@gAGW2y7GG=km4-xh%9Dc;1&j9Muu5)B!Gg9 z#X;^)4C~IxyaaMs(j9#r85lP9bN@+XWnf?q^mK6ysbGA2$Ive%P^A6i=Z=#R3wz7d z)-TvRAwk*f6xWtTWt?vuZZ_&TYn3&a-4YaYFzl2y@ld^5!DqvxbTZ{xy?@dBGvB@Q z?nxM#o1Zg(Z>u)_C69Ni(M+4qhiCO$^wq5Kt31`(?=8RFuC65Z`|EG~)`x>W6v+L0 zIJJNJGRsY`C)6Fc=g8pX`Iz&&A}Mvw&l~+6VLYc5&e<$|v@vnr*$M{-?sMnu`hE82 z+)Y=0x11y6V{X(uQ>LgIe_j6c1*!&{Y?OhV%XZHvK2uZh;NTEqYHDdvP{d?DXo+TR@tpG9sjy4G%~xXMn!KKM)6vopol&lT9SI&!Bk zIAeUYx_L=!gICQDElg?*Dr7OQ7Y zI&b)_u#__yNR<}zADNeYCbiY}c)$_K4%_21qFF!!x=bKNVvJv>EjQOOvFmKZ9@_Xs zl@@G#DmgnZr}Egc-5YFFpZUecvrPGE{zmoLy4u?5)0Q8(v+{L!!@kIQ$(OJ0+c$sO z^D8AF0Y07c>t1HX-|u|-GjG?GuWNzH>8kvj$jWNfecCG;zaF*zbK;csr=3rKPk-~Z z^y7vTptE-lflEaqMGy2dC_XjHhbL z7ur*pFOe+sm}!pw|@_tKQiOu8VI3KK%Xe+(+x8gn8k% zGoMfQ;S2m$FzKi9=}nuxn?hcH_)w70{@Lu@jTx^iHrq|~aX7Q0gRo4;$Nk>!%;7yE={k2Y7mlRx8-b(rU5>?Q~CzsyHN1ZRIy+@ZL2 z-OZipqQS9xipSRUE=*eGQujn`qt;e2(O_FY{{ ze0yby-2DsZHYOkE?S92zyKuLqQTGAmT}_|V!)#aGu55kHdemh~xltTT|N4;Y7lpez zRr0U&-#BTpp?JP4zlNIJ{0}SU_5|L}T`3}bUZ9Yz_Qy?6!;fTl%};@Ucz3 z%YLujnDTgD@AtAk!IpLA`Whc581!avJ`H+H7cK@E`y4T*vZ_7_|pE&u-sp~KDcRbA3+19Z5{(?1o?cy8fPyMI0 zfP43`g|am=<%ewMnVW6<9GgC)rnh@W+~b_~*+0HkJjwq!`?dFk0JB6p&wt^I`(~{< f>Eg;R@{;>je5Xu!pQ}Hx%wh0!^>bP0l+XkK`Oreh diff --git a/selfdrive/assets/icons_mici/settings/network/cell_strength_none.png b/selfdrive/assets/icons_mici/settings/network/cell_strength_none.png index 41eb180bc0fdf4a5f595cc8b87e4df878ef17063..63846f360bacc47d22aad20b2613c20bfc0c274d 100644 GIT binary patch literal 781 zcmeAS@N?(olHy`uVBq!ia0vp^6M#5@gAGW2y7GG=km4-xh%9Dc;1&j9Muu5)B!Gg9 z#X;^)4C~IxyaaMs(j9#r85lP9bN@+XWnf@hzR+=aI6qad{)7AX89k!S61)S z`Zhlnx^`gp%*SGr>)ZET+mTkqa>eb&nZhy_m9BY~+n#WEh+7rsoD`g(SMuz}BxQxz z7iTuAx;yN;Ff-Y^uR%dk!GnWCh^eUslR4>V@0M?7#dGc^F}*5%X0h8f=1|o<%X4{} z-yQCrlS!X$x8PoS-{$B;k}E*YnkEo%-T3%TUBw0KK%!0#vFBydk85AV<`tL+Pqt4C zOY8e6yq?jpxW{sye&QLK_A} z*(1b@Gn8OPV<@O__%62m=&d*JzhD1Rl*|9(;-f7Qv;Y46Cl$Z$En{r-9O=s&?R{VT zvss|sU7Tq3Z8_)N`>UorYRy}-*EcqL-@i@vzF+<=+ka@!7qR81Pp;ki^X<$H_P#g% zo%%90QR2`23I1=N{;d^>`|Y}R^UJf+zc0JIU0?Ib#rm=E&)Ir^p6I^&6H;k9&*<=m d{V~6*nWD4bzRQ$2=L<}|44$rjF6*2UngB2hN}T`z literal 1178 zcmeAS@N?(olHy`uVBq!ia0vp^lYuyngAGWkPgbi3Qk(@Ik;M!Q+`=Ht$S`Y;1W=H% zILO_JVcj{Imp~3nx}&cn1H;CC?mvmFK(4;0i(^Oy+%r zEe;FFR5hFSL;mF!!T$^)NzAfSBU-t%f*)F*2-o|FHP{aq;V2-LwB+kgPiH{N>92J>NIxeU|=Z@xejX zx6WZk)iRdM>&xOh<%Alodh)07)Gp=;y78?c?}&NJO81)O`LoPCgstoDpKe(hzfJe} zrheZ;SA?JHZ|@1sOlmgxdVJN>C`F&Y8*_Hf6H+@NfCJeWF6mnR(yZ=l<*e69&ttFi zt_^I_^xU~&SE_NC@vpafxiJN0Nxcg%1+7`*^1db~YA(msdvC2?SN<$>-LTm!z^&rk zlI_V~9k~jl?&zj&^HuP1+V}YJiTeg~Ij*>8vm^>>YM+?)a_!XMD~FVQtk&zCFV1F2 zytJ~C|CV!DZRshUol_Njtg@$R8?O;+@m$av`q&VcL*e2kk<4*k$@g#Ucz(e|Jfi;g z4xVpYj^26|W+JY}AM|ByU)Qn7U%W?KZ*bgoTiN#K)xuw?6S7{JJa_E)^-AN~`pg*7 zgTF#%wK}bsX)smPRkGoQ!0$5(mtAHEy zpANO=OrPfc^>_OD{9L($tNFg&GlSx< zHj$s$J3UXliYUsETJ?M9Tc;aL8t>Gz(^qc$c%rE1S>Y#^KeJz+EDNz*Wz<&_>2aE? zDxvE5p~{}Or!8drpB1jOIWaS{|6jz*Z$8=gw+I(5$n$yjUEFs*v-j7G3h@hse_Fp}F0QB09fk|G%`SKREIgN`Kl5W{C3eJfz-DiJ{UGuluF_k?VKBo9c|G9B2S>9dJ z`o%V*{=$S~X6KCh?Q`#(`)K&AaMS!`>E)T9#6F9yj$-+H&gLIu>0F_ptNvQRB7}j# M)78&qol`;+025~*KmY&$ diff --git a/selfdrive/assets/icons_mici/settings/network/new/connect_button.png b/selfdrive/assets/icons_mici/settings/network/new/connect_button.png deleted file mode 100644 index 88967f7f4d9851be3cadae44bc1de4bbc0fe1c66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8563 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�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

  • cZmMSYxIC znfq3;+b1=DU~*$|HCOtdjka0zwi4uBGooEz=bcaM`b2MkL8I;#PM`M4r-Mk7;7zNq z{%q9U!qXF--w=MZIGQc}lVY4D<3rTxn-b$J8NX&>GOYtO8-2ZFbO&h{>;#y4!R=-|3QO4W7~<42l?s6D?V>ub8Rxn-;{puq9Oeo Q;s5{u07*qoM6N<$f}Hom`2YX_ delta 750 zcmV7YbYm1^@s6roz3Sks&mH0=`K^K~#7F?cLE)6hRb);k%dsk3NnW z7y?G3MxYt68E6KW0cNme1WN{xfn;#(VMd?|ih3i=vU)8+$)ZPDebq99VOi}@G zR<0lAy2gWjxh~2znB-LAo|fw;mW{)4YLdqse~;JOYY37!ApZR;fk|vf#Q*Q?ok>W4 z^Go=yTp#Ulw;F(eD#ahY-<9j6eEd z;#YSnBo&td}4}EO!0{+J~727 zruf7ZpP1qkQ+#5IPfYQNDL%2r@pp=U?^xsb7bbowJ~727ruf7ZpP1qk%NGC1heI*F z*ZgeLhY^SQk8jKMyIg-Zo6U`p!t|WI@q?O!)%UBM?N{rmZ18)z{w_@E)(B<$oB!Mf zx1koiA}GGog|7ev@dq3(^$>vJfBTr89UFfmm4W509_oA)In@w=>3u%xNihU}V7tkK zxq*6nx_Nzv=%BJ4&K8WsPzm0#rL5{2q?ZU zYX*Vh`?N+FD86rv16@M#t7`J?;b{9Hg%+*41wZ%*Ki0F zKZ*uJp!m^L90J9Us=^Q`eso6+f#PRzzz`^YHuDhd7Q&AYx%_65R|)(D)31U(exm94 gfa`PUt5lEn55p_4V?CW|y#N3J07*qoM6N<$g2Fm;lmGw# diff --git a/selfdrive/assets/icons_mici/setup/driver_monitoring/dm_question.png b/selfdrive/assets/icons_mici/setup/driver_monitoring/dm_question.png index 1b8b8721aee9ec43a7110b542c9665b7d7fcc371..c0abb7b149403f858b951dd2393ca7ddcc9bb278 100644 GIT binary patch delta 1404 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 M07*qoM6N<$f~F*Z%>V!Z diff --git a/selfdrive/assets/icons_mici/setup/factory_reset.png b/selfdrive/assets/icons_mici/setup/factory_reset.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d75c286c4b9387cfcdaeee539fb4f47609f6ad GIT binary patch literal 11489 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 Hu0mjf_U(bs literal 0 HcmV?d00001 diff --git a/selfdrive/assets/icons_mici/setup/green_button.png b/selfdrive/assets/icons_mici/setup/green_button.png deleted file mode 100644 index 7d01f054b5f7da9261b3dc2c4e2c30a3b2e1b3a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24687 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 tTtK~#7F?R|NS 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 diff --git a/selfdrive/assets/icons_mici/setup/green_dm.png b/selfdrive/assets/icons_mici/setup/green_dm.png index 2c9ce2ed395189d61ac276b252300d07cb8484e8..96907d67c5af427fa58e6e329f59a14e2e821a34 100644 GIT binary patch literal 15052 zcmV;-Iy1$IP)O=6fzCA;YUI`gH5Ik)0s{r zG5ynaCPw5(r}+`vLpx~$#WFu2gcKc@n@tmROpLh%TSvCJ`KF`0bS~f9b$M@V?_*1{ zj%3NpKHB@ct#7UO^1RP_*ZRIqcqJB|?5BSx(4pV!VN?1(&OqA7={r%{?lad@i8vLa zvKN?1yJrbJo4)U7(7sg1KJ+l1wr4?8(|Cmy!i8S4vKKLl5nMx@K8vC;UXCT@g0pJV zN9t-)Y}PxKZ}sA`w|=W7Zn14ssR7wI2-E4R=@H<8MI^(ZsTo|r<-#)no*W-d-raTG zR;J#~Nu~YLiK<=79$h!uzU7UgP&+T%1viQ}g_B#1V1!l1gY8KMk#Hfvhsa?1L%K2>obCVMo>9!^<+?gc2-uzQ_M&RhWQA^^g;i!Ji|A-MFph1NL zi3pV!=v4@}s74{T4dzw1dSWnLu5~6gW2)mjKJO4t&d1U|@ z<`+frd7Fi*lWC;vHMc7euL`JKPkO{~mJbDsavBGhwoA-PfS^k_I%sRCSb`#e>RkWf z&{pLa)UZn0m-g~1~C85$)uU2_`>3=ItDyhVcBD~UMySe+}$8OoCSe? zHWUy|Q-~>H8}-J_9S0+@O0DuimZ29@+~!C=OEYKEKc6}u4B_Q9fMb(=8dEi0w-!bA=92PW_TlGR(Uu1HerHNGHTOlm%M+{vLS71}=S3waEX zeKh#*E_9P8r1As}wqsJoJ`3*Cc9`Rw1F*hW@L2U5h4GsNM9^fh*rVc)zo#C}z{o(O7N=cW^Q z1k8W}Dj5gSzOaTGj)Z0}clanNp zV{jf|ykO931u;1CKEvAzG!{L>G`8hjaDyJsb~$#_t>}7t(zkwfb4EpEE)2UW zn(MeNOQMs_uBw{q`Qq?hse+-FK zfcCLpFy{{2a*FYfrXAY!IGI5Xc-y;+zO@5qshk}HNb#PIp13=8a%&)Q5_aph3EQp# zHA6HPHCdLHh8Q{=&b1m?ytSmkK)kP)L*%TG9)dYH1A{R93}}KtNc7x5Op6^ed%gh9 zDVn}3(Nu&0TnZ)w+|P3>Z^wq^A0;fm0i<|Oi@p0&yC)D*xN^Ie`>+ed8nc8V+9Zm5 zH-IH)X*}K|XlK~lm$;|7JDhFk)o`PV=XmsK>I0}@`N0l3^hs$=gG^}KT<@N;h$EbM z!Gkkc#~Nr{?x`$_7r* z>y1=Vq%*F8#D(**Qlit+e4J z0(@g2-k^s$kXW9RTbMe3H32MLq!8%h??aAqgEu|s

    eAJ(M^;4OwvRYrg*ZNxb9*>@k7X2O##j|)? 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 QlmGw#07*qoM6N<$g31^0n*aa+ diff --git a/selfdrive/assets/icons_mici/setup/reset_failed.png b/selfdrive/assets/icons_mici/setup/reset_failed.png new file mode 100644 index 0000000000000000000000000000000000000000..72491fbea3d1e69c735b4b0598a29350b85bb725 GIT binary patch literal 11792 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 delta 2906 zcmV-g3#Ig+V3HS*ReuX7Nklk1(uZzXv9%se^6Q?!U|1<54Ykw)Zcda(<`_zSEasprm zoS$SK(*e4dCYb&q(j4Jr}fTS2=8hWi3V<8@*~(9cMr7kKngGm$pAC(OLJ&m&=E2X7MkFB^EdcZ27egb05R4K4 zXYKRg&jw!^*f6{rvpN{-2jDgSJox3{d;cd!FjxSbgW?@#O0yi}EE+TgIQQ-vGm=;i zi8Klp0Dounv2TBN@5+MhfXh&$aL5$EM&CU6^58M~>`<_3I2M9lZ++`}cTKq$yY!++WXadr<`^^p){KS=y zKHue}1|VzoZy}S~v{me<-50V`1xGe7A(Pjm_Y26THA&-+GCuLAFnxJr+Lq)o&SoQ< zqbG?6(>_2brf)Z{kCLeR`n)*tg(Mk%HEdXvhG0nE?r3f9*;UsMI~_q}-MtDjxaBV~ zg?}__?xSh1&08r6pcM_tOeQ&2u2_|S3e)!u$)M8~Safu}LV2eTuVJsJSazj>tXr0+ zQ3+0@qt2l&S8(ZYZXW!r7zLPUUsLEe?2AY#{5&Y_s$ey20jL@yU`LGk`y1Fq*wV0H zpgwt(>9C^mjE*xPyMkHMIIDb1BddFmb$=R3q4MeQn#wY2&L?}rw-ld2saobU???`( zqlc)hL&M8`+0pMRQ{Pz-R6xHzkQ`VWUi5Xgq_hrlHj{?DNRlnU}(g*ti2I;u*0+>~i71b=I? zQ_zKLyE1pM8%5IKeT%1Q;K>g_*7E+0{4}03Z)grm9m`VyXtp=(+A6_@QxJ0N923%Ka?`nP>#0Xm{aa3RwtJ zEe%!7fQ78{wcB=;mW9(0)qk;Oe&3&zhHcDh;a-+~ESzCgLmttSRoxPDbcFOVV%h)? z$d9y*Asu1f?;^$0P{q^$OJs!hhek_5V?bD&FUgjM6psfAh?b4e?={IHiw#7PQ}$vC z0F%X~Og0T$64@e@D6;Vz`^Xp$I2={F^b};Z%;5ZiMC9<=?Qq8L3V)H{%^*U2ysK1& zLh?3;dh_p7KoQIKum;eG&zb@Y7WzOk>lBt)iNsnB=v1eMDMVJ&v_D{48j3O+zm916 z8$1QDo3TO~1{E+qgybJep<(Ccu0oXBXH$swsqB4Jh@SAG+x__L>IghDqfCiS*QA;E@?=LZ39s^v%xr1|cY5`z4PwoZ-5W3_G zC1g)OcWmZP1Nd&wj)8ZxhJ3lwb&6uJ3AnaGUhY`{YUClPmOaT#tqw&81ix0u&yQag z`D*Vec&c-bmJ@U?4c(Hj!t~h$I>1VVzt{XvGX*H*KNCR1 z22QdhD%d$cnv1g_8UaVT7P|M$<&zEII&uyvSQ5Alsc`CI36{vqlYP?O3`(7Z@Df-C z4!%MeFK6AnX@3jASImrI$i`QRqFhYfylD#nOKy&Y#39tM_Q9{_CiApaAKBzggYl>2oquB?VYiTj_tWLH0S9NY#;6e= z4LjGr9-8_^c3ZsU_V($O9?3W`qG7OyjOE| zA*i-a7i0&JjkOAP?&a2XWXyf5eP2X4f0wMGSh~oifA~7dIWV&SfP)D@_FhV`tBz{Z zMNh}2Xn%q1i5IaTIaSR&x2F5@0Q zvX#OKDi3@G8T1CGoXQN6q6HWQdpgGoLLs}%l2XGG~8k(W~RhDBH2p-7?N?KcnIvlV{cv!Tf$EJ?%a`8o$S4P1v}{6 zrsR-%?Ymm?7669q?%X)5vOF4AI1XLB7p^Hxn^j1ux*!2yDF5jqGyVjh!8oKsNUmD; zGk;+WI(|1;0NmVijTvd&4DpfjXOKyF%VmFJC$uk+#N1Yk&qipTZ8( z(TErq5lsM?SqPG&5jiL(YN=S)F`f>FWPi)d^wSu88WD+JE4U>DbGmsvHb@i>m!w!U z8-}K_%Xo#Ev9OcpI!1oNF{0W4#~>RT&AW(`j_)r35BSX@Lb2^Wk_!Mc8;8O0eE&X2 z1azwN0-jMgjeBZvK0&td_beKqjf*Tgms)@^(XiRagEEhYl0^fw;aI&{8$6>q1b^x> z_uwaLJOmK}(BPJg9A8l3JgFgM z;6=k4fn;aggmOobkCcyvC=GB3?QMh#)0-aHxZ@?=r;>C0DMSlE8zT&FVT(m_lj>FE zL9by;+e|{uPeuURw1lBTdCj0MZoM{D!z>%07*qoM6N<$ Eg6(s8i~s-t diff --git a/selfdrive/assets/icons_mici/setup/scroll_down_indicator.png b/selfdrive/assets/icons_mici/setup/scroll_down_indicator.png deleted file mode 100644 index 5a140d2e23157fdc847c3df4a4f575fb0c41f3b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1267 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%0AN8z3kX6kxPk#A0I?hS?lLZip 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 LNkvXXu0mjfztBWg diff --git a/selfdrive/assets/icons_mici/setup/small_slider/slider_arrow.png b/selfdrive/assets/icons_mici/setup/small_slider/slider_arrow.png index 8ec333d5bb6c37990a76c4b0427aa266a785e14a..7c9e6f74c0cf9007ca5ccd583e4544d2d96a5e0f 100644 GIT binary patch delta 1256 zcmV!G%0u``UKsp%T%MKVZgplm)%zJacbLQ+3k#pqT%+B3A z^A@Ot5WZl91vza=E}T#aAeR zQc#jRz!WKgmTU?IwNZ@Ee&s{o?Sn}Ws9 zMm7P&;va!zW$;B{w0Y|BCm`7wQ~(1*JDA^=9Y<&s7 zkU7dFYcN709ND~G*kLvrjb=~z2T26LC^tJQg3CC*izv-bz$mv^S{d&|2$%Q& zqPH~wquiotWL$(Ly$^bs0T|_);z(wK&$oZrS^x_kpDTSkd=e4N_gZcxfEeZK4`T7{ z@kZAK8?ONv<(g;S24|xgfKjf08+Mjp1`;hSkL)4Ag)=pDYOA&V)v{(8%Pnjr(Kx^M0fB;#u(^%xPh35JDGnA99LePqh!-w5Z4kj{1wPo_XhVq11iC2H#bFC#m8mZB zw`~&DfHu)0t&F!SfUUNKMVt5*T}x78hl5zV?e_%Er;*V}ZwKE%EO4;cJGi$^q4Gl~ zpiL~97TvTzUHoG2-NI#Ea3q&QkW$dj;rbBocv&m?RPEv?@N?LIw1o|3_r?{}=dWlL zucUlogo{X7eu2q;M~oT4sLm4TT zN0tSSEDlu&Utj>bfJ9h{lqrCOSg?t-feE2a%un_XA&ivsQbdawM#}jpsz(qb<>4u= zNmSf7YcU>1^@s6%c)3eks&pI5=lfsRCodH-OW|oKokYwXR^sM>A>kA zR1nias34&NNCmh9lL{aeKq|mgK(fouT4skkP~J5X2aE%f4#{6u!*OHLr z8Ig?Dbv@BB)3MNTSKq_qwT@#QW1;*Y*e2vIrb7A9Ku;dM+PgXz@(-`(y1$u_UmDaRlM(!xy2! zxG4a`55q+P7=AeB3&8NhGFfJ!fZ^MJ5xoEm-Gw zNkERnzYt%R&G@aO8jVK3y8dFY0`Qfe6v}X=t7sf7r^k{_@=vqv-Zg#1z`B@?6?0Z?7RzqVE8UQ zOoy{m0T{kple(D*qjv!qzI&(m(CZk0;b-Ih8`%=W&&r>z3c&EQQ*|x?!_U&+P6c52 z*?RlpL7)czP9HAi{(Lg!XZha(G~r+C_$ZXEjRj!%<#<*AhF_K^1z`B)SuX&lNoDv2 zdAJs!;o}-H!!OKg3!veD)d$Xhl3k#-01JH>3l(Rtxh^~wDiV$Xc#5}RC;$)q3WfrV zg^D#QZGi-O3R{4sP_a;eN~l;Uz+9+UD8NslV)0C1;o6HqM?ytf6`+|#;!LPG>-PiT zW{`?+Gj%?+Pv)-xpB0F7FIt2{QKT`~WOL)~Z*3X9&@A1h`sw zApGwjN3RzESb}UVJI@is5@cz<^&CMwCdkTu-$|la0{<|r{D)rC#Bq0!g(*Jto+pqc zaIMmDgHLvvDU>B}Yuc_KFw|txJSOntO2a>FpA0!&JWF67w$umBmV0He1tYjSFmEnv z;lrRShOh)CArtKLpM?*9p%#te?jSvceWv64rr=v4myPpWf=c{B$d%l0edikbO_yH^ zy>O(<66hZ<=-d1Sb{*z7XVm-a9k7sSb{Lz6aXTXU?~N0 zRRD-kf=UYFt^g3Y1eFxTWdR^y39f|v(33@DEO=25W6_*^B2NY^!Lg7}O$l!6{w{_5 z(;#Q{_D~#d`g5T#VNUAqyM&ogo;2J~I?n5-yN0{w`KgYv6z(5Ka`nF(RRX^N0000< KMNUMnLSTYEHS-4m diff --git a/selfdrive/assets/icons_mici/setup/small_slider/slider_bg.png b/selfdrive/assets/icons_mici/setup/small_slider/slider_bg.png deleted file mode 100644 index 291dbd6077f8c93b8e614fc0ae0f1d4e39dc85b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5723 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 UB3Ro-;s5{u07*qoM6N<$f^cym*#H0l literal 10966 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

    y4J8y|Wcd_-|GV#7wfPQ&vc8MSY)NLnJ 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 RQ9=L!002ovPDHLkV1kjdxPt%y diff --git a/selfdrive/assets/icons_mici/setup/smaller_button.png b/selfdrive/assets/icons_mici/setup/smaller_button.png deleted file mode 100644 index 35293936ad2f1d2d3e4f673f4000e6cf7eb02d23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8604 zcmV;NA!FW&P)t3N;A_kXs3DFMI)*Eo1WN`QU3=rL)E9xpx8u)0&h z>V2IySGJX2pJVR4HK+N8Wr zfs0>&FWl~2hX9O#LPm@4wgV>X>|xx!-P!ThakAL4080Vt)d-+xft|qFd3g6GAixSB z(QEV}0f(4M&;)-yvKns11o#$;E7aTC+OCRRDqdmUm+j-QCHHvLv|U(ByF_w>j*bD; z817JK8BF909q&gFSq-wT?+oCs>$(K6TQ`6Fra1A4U91tV`tZ^h@MW7*=Mr0z$3<+2SB%fG{2n_O}=Hvs5^Mx%V!EK#4 z2d*kDNaxl0js2iIdKcg=)wwHhOR^Q$mzhjlAZ$k#g1-bR0F!0*0yl{65M80|0c5cd zFd2ZZj{u8)^7{DT+?#jrzINX{ggq3nu3ULzfAE`MMb^1E3=vGgQV}f!Fji!uF~$)_ z)KxJZSStX)SYP3W07(RUW+e@%8eCa2dAwlLxI-(=>`+Gcmao$Mmb#YOv+cY`DGQuJ z*TB(Wuj)N(1XH4`&>7ZSu1$}BHRT{;8>{-8BSh9%E`=VFOJqPrppb?q=1O|YB1<7#IRsMzR7?k; z#rz%z01;R~cR#uF_SNfVN81@#2j95%{W!||-exnf>+@zajNs}bYk4zlB70%HO2Flb zp(xZ4kd*?vLDpU((j_bql0VGnT?&dmN!zA@wrR3QHF1Not-CJ8vmk>3m;skvAcBlR z1!IqcC z2El~v1TN6?h;SItt)XZiAhIq(KE<(gls!%5R7^#FQo~5(Y&|?rM})T4(rNW5Y$>m; zwam_8iMcRB{XW?lzkmjURyE(K31{9qDOiJ*5FUa(19344(n?Cc)Ixj3%} zV8ILO?d`X=g(DV$g`>Z5b9XZg&kCr}6~+zGQ!y_9Xi#^JICUe8mBc!+6ETygpjH;K zp#)4&h>G7ynFy=G4Pl}AL8b3fE|~et(8{aR>UvtP+g5F9ZBO$ET*lOGz>tGzF~=iB zlYyrJCx8OLF=Lgkuye)85P$=K+w1c_uok$&h%4&=a8c0j_2bu;MvJq+qBzyZcgJD4 zxB=FQLLD>}XsHrZUIaYqu0iQ5PoZ@~+sIW(q!VKW1P=kJ7VW{bW@K8C^W%=D&)JhY z&#soWmW&`1nAAwoCZGwR$SqO~i{}jyOvF?U-=SRJ_rg+9bGZbtJvgrKKO8sbzB(7@ z>gO5_!OsYWi-Q6cX{ih<7!88vLgDU7V~s4<=5(6!ut5*$F_wX4@;ldnagO{hb>)1XConmUYfR;AsL#==ua&2d)#t0v zCC310#_AFY=pBwcE!2Quf-B1)!!NpXHnk_X0Gcaw_~CjQOvTq;JY=*!sKI97x??RJ zT!)L@Qy+gnZv50VtjSm$tNP^w1XE_J4Fp36VXPEtNJ1V!MehV6k8Ux|4F*}cAdz?c za6S|rq}$=c;}Pp~5$`!I(>i{aa=WzSVd`97iuqLucu;O)LY+f>8-BS@aI4OH@}K5?fjSpIR!oyW5GKJ z_|ePgFzYIcxQ|Lx5mVtl21wy03}EwIA^)Q|7acR_tn+jbmC^gHmo9@}KN+ElTjp)O zKU>$9a=WzWNawTpGaFl%SNb&M7ZG2u&~HJ)VSx&Tpd+vFZ6=BjIV?tUpTb|fNpp;B z^ku*xzx%7teeTP*{_uz2Jkb3!afJ}C0$oLOe-H#k&16VhA!8XD4NgHd(7X*ELs}}N zIl??QXal)FwVGkZ?a>fYZO>R3=kuyEC`NWE|0uRpKU@N5&5VwV%SYV~Lm?*$CZZq%Dk;4N0`cEz>6fMLMpX^ z5rOaS#RjK45)J`bj|K zgXkzg$iO2%(NvLqY?rQ`!)=h>76w4TD={ey&f6GQN7(}Y4*E3K z9N7%%75W_AA7BE!;lQgTe9ZGvkHtQ};40QCu7vmFrIFnouTJ1Oz!5K;i1WeIzKr}3 zKr^7iN$3!S#n?p}kzD}BAQv-z%hbiy>*47$KMt(C5my1vD=1Lwm%^#Kc&1k%L^T1{ zrEgqKY(?Tbm^?M(QyK$^MS7sXCoZ=NO{NmS$%m^ytZdJ9RDFTxY_8*XDPNbHJ8swZ zEVX6Z=cvoKj-3T!fl&Ry!VRv74Cwa^t=NSC9~o30Zc4(t>^-LeTCJx@}AtfI*!X{r94{Lj=|^Y+iz& zVu{a1@bIe8#8&9;ax`7LK%z}{dpZVXOcPWqpq`Aim`m@=dy*_rCa*#%JP`wrwvl9b zpQltr13Gqx9I^#B82BezL~ZFrR9n(kEdJC<3gJi~QX;+O`c`|gR)2|W=E5@U5``3G zEnRY@BL%uyYvEFJW-yUXB;wf}BCulO^FiFNS~ulcPa%4PSCh#`oz(F1VrAVI36NmVLp}YaOFw!c0`EMDvoY%^67P8=Q7qCM z3x7-vu16g?c(j7)FPJtig)XUZjJH)wFW#V0-0j<0|nC2+XfT* zY-PjflO7A2WPB0U$Ro`@JoP-x_UsGs1g}it%tafru z`bw`R$@8}opykkm$*X?hFkTs)UywPB&jF)d=lSJSwMtz!=e2 znC8P`gI7CwRtHdvJpRQxn&p+fi~-MjJV|a}#VTXHE*7}JRV8{;CkkOUHif^8G%JQq zui;O{s+g9xq^0Y5T>4Q=CK{u3HocyUjOEYg5n(>K4t8d7XVQBJtE)SUR{!>Z(t>HP z^p)sANDK#iux^Wml+su}nB+rqOiN8{PLbW(UhQmHs0ha>-9;|Zr2B3N$Q&JLB?J*n zic@d})&?07VxV(@I#=O-x~yLLfN8bX(j-&pa4DChQ$cDDZh5UM^uf&NCLR&c@@F+7 zEEk!rb~>&8fk#G&LF}}n^|F=o@YjsiUS!6~F%6r4IB7y1>kPqa8f@8d-eG06&(=~O zH@Y;jSB8PU5ruJy&_bK4GE(JdMaHx=`_hjcRy(oK)|<|BM7)xIdWrHJNdTc zZ3s*nC*G)g$4<-z(-hz3jzXAko-{NXvD%q1zFm@?h-bN9gqA=-<+d?UR3bmy&T%ZW z+8HrT0Z4;j*cenv}=km|9gRUrV+f}Kba?`S9u5VjBqVBI7oSoi` zVgjrjWp8UNu8SHqxp&iQr`<%>(0#nrI(b>u!sbKL+SZ5ZkkYj(Ez+9eO#JG~SZB@3 zTYZ;0N*mswSy9ApOJGeaow~y1DVvqFPP6SY9VZwOS4g*! zuNljkt&vPT*~Asv=E)>|4UnECV=?a%J(amkJX4LehyfOF2{`S-Yk>6ZnGDP%FuKsE zA^kD=@pcI*yV2mb600jbZ8o`ah+hsRwd4|&*Xce--dkaXx(;YWIakQ2UR~jtFw6HA zEfc3~QT1;FX>bEw=lEGG6g}0?9Ii*6ax?lIzu+6=udeV+o4_c|#Bl%0sIYlVPyu@> zLC;>%73JlptxD$TakbN9&Zb9iG)+%JYsM-kr>(9pM^~Fq#)3z2y7Z{BS(#PDzE)Rw zYODguv_Omq=!M6Nb=h2s?%-YhK9Fw`Umu2lJykFvsdeS(>9nn~#igf-6&-9%#z^s~ z6?vXdPMDk$53Wz_bk(a1JoP4w)mobDGzH0nH`O?;aDr-q13z@Y9_mahPqmN-so(>u zRU=eopuL=$s66VUJXSjyR`(tBX-OJZ;h;*lnWd;M1mGdulTDCl**kIpE{Xa4#C2q^ z%v395oo?Gj3)fshTAQ#^KAT!S*2$!2B!*OwAI4*(fCzVKNK4;MCaqUHl_n3)O#8Na z7ecYMbjr`yp*^0`p}-g?**wXpE7*3@)lR?ZsC&H@t3?=sn*t{mpSOGu!lQ?&kPsO? z{wc*M>WOF>HR{pi>K0F@X?-=fWG2O`LY7Mz8%{AAhrFAa>JXFzUR?5tUzO?H|qJ?r4 zk+(CxR&bq6qt2gmbv}_xVkMUcbn=8%!3H18PhCwoI)ttJ;{F_az|JLC$PKZH=J-HN z>s%SjswbmYJK0ux80q7h3|Mn_l|ToE!Zaru%L*YyB;AMmV;%B?Gp(q5!<5F;I81-G z09ZzAd%=AM<;q$o$(H(qJP!$XA(qtF!6a6K2a_iki3CFo*f}e)&_j6m>W79|4-km& zE>}pr=MoJHMbh#a(p|2D&G|s-3a*o5lbIANfU!Ew@PLo|+!RZaX(UJ}C_@ktWRTf+ zAGoLcr~XIij0(_6IuiaCz}E5EZHjZz7?V>9)+&EKw2JwYX0^7Ww1!J`*>e#dtkP1J znTj!jY}Mtm!5_LCH-2;&x9>|P%<)(bP$a(!mi(zyZb}_yLmC}u)>^@Ja;yfGQ{ys+ z{cXe-CB2o&0tar{YvI9N@@f?OLfG7U`|WG*bL8Em{5u_rvP5}U zSqCBwUJSDMZXq8l?-;E-k4XC=1=@tQTFkZDld%LQ*B)SrX|~Fqs1ujReU4a2WCM^O zTx52`dTh9bb;6%dpK-THypt;gFeQNT=#Wm3Bl5EFPkgWA<5QXHn^1pX9ZOm5@mY(h zI%f;Ek|~@7AWqYf0Pa^j769cO^fh6n?<{wxwGX=ST|5u``LF-D7DMp%U8=+J=rEqB zcTwQShQP@<%~7jp$O%B~I>k`vW396#xHN0oY6P-^>-ek)d~R78n)}8T@<#Ntkc@y$ za3P{y7%bs}blC5Hed8xMMVQVWo!C1d-n)+D6fEMA5)qx0)=9h~yG=|3e@ry$Quv_; zmkvV|!e24i<7Tq61mwAErdeutv}16I3!Q>X{4su*9kf>qY^@8a-|LGz zy)S`Nzc85|H@CfX9-X(ey_A2HwlslMjLvN_GOq!p`+>-zV}{DIhTNV@@vmM^*)TMg20YT0;_r*xSsLvxn={hB@%~V#XYg&JC z^EG!0RE|OAL_b?`fqie8r809d229^~iLC?=F>H|73ar;VpFCr)KmDg^iouR`Sa_Fp)rl(Qv!vpL(<1Ic{7{Xw9K)NF@Tsz+E z_#(hL>Zm=e#fCI_*Xee4ltbmsf@v24S69mKa_pm;-7-S1^UKd)%*O`VsE?@w)#N>b zrKowwnks{ez|_i z^cz33j-E_lu;ZnQLLB4L~`70Migo(fs1vwM5wsrF*oey>9p*zfhU53jC=2bEvHb@QL!(O4=N3+$Pv z{q>K$y%f)}50&8EO@*<1hu;v`j`iX8U@#l|C$_~5h(Ta32hT%~pD2QH47ju&_5P!uUiJHbZ(d^FJxGjnxyd`jPnGHp@=(ef6zA;);y9^Bl`@jkW!>i zbB#TB&c6A{C+16`>-PE14VHnx%1evKNIRoVR|sG(q0`Qyb^X#8gscV;ZYiD0Gb9FoH`67(%DRef2t%X4PIOlR zDh@4SdX5y33mhMudvmVsi(iK;SKip)3=i%`R(ckQXtNp27#V8VM0Scy6qyR%Lu4ld zj0W$(T*y?+V40x;rpv9J>Be5Z$yh<%5?rM=+Zb?kD5FYsq2=~F2w+avx8zYvt0h1E zFhtb>4@TpYCs|XMOKrea-MKAT#!b`YSlwQF9%NY-f2-naIi<9h)Ah+H*XB}bBv>td zNx^NJQR!JzQ8+;{RnNgsc8Pm?J#O!H?*675z9v!jmTl$PuV17VbNL_RZP(u2QTe!%W#z z?$4peWWkQ?CM-p9D$81m7>P%Q7#L5Z!JbBk!F7Lk=jPRS%z|xq;L*N*`PwTHA+I;V z6+wjBD}oEaN%~X+oKW zx(Ip>HFO*xkDG7Yym{@HW{d57c`jeR`n`ykAD~zVFcDLsa7Xuu>;>-5i%T>k0}TMj z&%_fkZwOlnS%nA}Vb9xz5qq_pEqUo)<7!*1m3ExAt^T=uN!Ra7rnQw(*wU*?v{;u& zJ5M_E%3um3GN)y&QkNr*SB~B!A5&)Q)b|(5 z_2~93op%>2SxVYxIMxs_2JLL8eh_1M{S+~mxI~a&;`(R-0)!M$cUegTaK(z=xV-~Y zrS_R4+QGrqmm^kw9s%<#YOAr(Rn-y=x&2M@v>urnrYg(Jcd5yh?$ zK$iE#6~Z+e(0CyJ!eF};yZADs(m?5@amPPv?DF^o=FJ(p^YOy^{#vJ5VsGvo!Fc}*3u6wQ6wx5n|@n|JTN zcHcaNJv6YyuEcP}W;8#GAATQPA4C^`wMKG(g?LYKEa0ONeIb^^3xhFKNb{5URS7Qo zdhepU&VpH`pIT|6)ACR7D5F{;Zgm_hudS1Xn~sB}n0^?CjQ?=w#?f5gq}}G2?CWvV zXhw4op|lT^$)o3R!$=Pf7HuV3D+_oQ^iYXcqr`+8at!$a*ln4@aWMHm;3fw|ImAHIItR*nkE0m8iXXzqu4$-a*{mC-ELgz=x6aRG?TE zF%}E;B(G>A=@1D=$gW!bnc`cmN6PA0ki@QZ3`?iA%GY)2v=n?Q^Ae0&=UTG5T-6qQ zAf-1PyUOZ|g;mmYmZuhI)JH&)7*@$xUD8($e=yq=HV5eq-xv7@9GP)ksmYHKRbLDgA zHn-}Q&!JCOo;T|#e0TY?ismZTZy5xcl~oQ7CuiO7B76O2v-z`I#|fxOgCCaxi*@7p zV*J`2MEJZAFXDN8x&;JE4PJI$$lxm%s2(G%fuj0Qn2pz~n&~i0+Y)iKTvmO|QdFWE z{w>zuI%eLAu$DE2d(O*si~=J5wlB>{t99)WJodflt$*V;fBsm&WQwLfVY_tcM=yBa z?MI4_A&amdA#pxliG9e6jCLV5=scB#XAs-x~1Y>s{-KzXPgSV8@w-7^a>xwYkIGPI|(^^_~60t i-mias^pL@$*#84BNe{xUo|*{&0000Nu#2{*J-YhHP!f>~3T0(`*VdbPb0^Ua(zmQlT9 z(`$jx_RWmr{x$tJ^zY>d>KeMotZNs&cfVX18_jt^g^#rk#|HNe$^9a@ac94?hRnet;UDz@Ih4w9)2i=EeMh5mkP3v=b?qLBkk01 zCg^UPHJ2U)mhGP(%FFZf`r~mw?ccv&reELC^?4imZJKw_>{uJAijR~W!ZBQ?jgmxJ zV=(i?=%cW(fHUUS|l_zB*FE&*FSa0>E?P(l8l zOe`ds4n(S0Sx^N-(4AdP3<4M-nbtxu$S?-ZYD}$yAB{wVpAV2^&-Negs0+Zk5{uNy z|Lz;kt9#D*>)rv4fKd*Z1SSv26KJ0Z<#VM%l_DLJ{kG09WL>D-g^TTT+&6vzea7n- zgK$Z;dZv*}%0y8lViAdeSQZHe#L`r%vXF0$t}62z$lfvPrJeIsv2*#9T|zb29oV}D z4v<(45(tR}$BtCWGlfL4JekEne;njoUhg!i7WGGFU8B^rpER$ozW=4pSjUi`r3S8< z=RZ!L*V!qZ$V380$`uuh)eESF`#`7)B@8lc1;nzJQfuwln(*G!{r`BR&H>L&tj*20 zZr8qkr)k_xCKM=?q)061+4OnGiWL}1u@IzMp*4RYp3vf96)-~feTnZG{VdK>NxmYn zXx|!ADWeT37V-+sArZ>h4#7~t;NtHc>^(kE&w(=&i&g5A`(X0^zOEZpH!e8X8rJ}! z0uqbJ6p4jIa;;y*?l~QEeO3wIiHBF;h-wFtYL_=vx zCeSO6Eco1E=X6OHu}`Ku$Mj(&FP`t`FIwMe`DZP+NIi(>t*a$e$1EnIS?V1!$#Q~K zBQ%ATLe)ZIVQQ=D1PJ%NXL}FdS4+SyQ+RXp&3m&j}x8+kklGmxr_v-ECch2{&$K%+x zejA7GJ9IyCp2F$(ocH&km<{={{6|P_q;pum*VI0a6N-C6p&r$K8EiFxo7Z6bn^)KG z9v>YZ{8BB5g^9JX@#g*7HQ$*`YBYVSuIuoJ36rYwDuf@0J5WJFwV~5*0>}TaUwQR4ee}@>3pw=*5sQ_INi~_E>8lm_ zRpeVaQYkcv7zlMPI_jRC^NdV=BBd{N@V}kvrbFlE?Jv5e#+*_|zf8Y<{p%Jzo>#8( z$6D?)_RVQdG?pfz4jn5Yn;dH?7m39Qn$6p#H{izyB)tW&j zl@Bqx&S^#{X)v{~Po#p2!yJ+g5sXYE{fcSeXb%yM&r^&{>#u%s{m#Mo@L)Xe_H&7a zy}#P)pMXk@CX;5GRMZm`#c~+>WR-Fp1Dz&R!Jh^*NtO{zb5AY=F@+(HUgqPGaU4>A z?Mtt|_J1FJ^uf$f#7tsgoC?PJ{->$yKL*XQ6LJ{uBj3eP;GrLeU2) zq8747Y0HSUzlo0oH5Kjr`h|*I(Z`JlvfO-Dc*P2nIi!roKs` zgy>IEctJ?zsOJ|Fslqg=^0eT^L^k?C-=hq@!9IV-_+3+cvi2#o#Nj1>bK+0#&#HG& zv2d6MobrFI$^6BT0tG=ioX~i>F@+GMAycNW;KfGn>n1r8izp5}DwmGaBv{beF-RP1 zH1;cN>$eB}twF`YvAcmc$_x=*8;=r;fX(83;9l6zsF~+=ehCVf0t449ise#^F zcn964eqB?+^l4kgh`NFg(Su|bp;QhhFwe{Ydo@%u$zp1yM= z7kAjidNn*A?ETFqoZRcz*&)`(#y_pWb=y=44Jv!Ftqo3pfizG^Au@W%rz-e-Vivh# z7>PuNq5wX`js0%yz^QL+ZT&+>wK~M|YO)QzyqgUmNviR2*`%D}N>`Rka#c+-Nb0kT%uf%IY?9g7Sr7b_TW z=Xw)2*yYKK)T}xzYEvI0S*SZzL*^NajR{z$}J8BXbzpu}#nYx!C)Q4?Czd z<1_XW;th*hT}_Zn#B=P}Ng~b!ah*akheRxpvAx`8$6ZP`_4&3q0$u5bqr4zA<+9Qg3YYDm+E zRY;JhX@(cND7Z@KsFqK&A^147CXvYo zi|Qncxr7j>pfkDXNj{*?TIF#$A)MD0dw-c7?fX~73|>v7@10kz$?|(M%_*f-gjNj@ z=0^LhAFrk0Q(;ZHB`8{uBMFZ%$_uL^P0(k@hp<;=nqFs(sv(rvRY5BDVM}qT3YI~fr$-U^9(T+lgUn?(r=SmBl#Tr+24y5Cixo@H_s)wc zEI{7j62+k} z$dFI`)F!GF9vLP5L(Cr=Yez@gSk5v=2xU5ftwOGX9BlSXmop$vKqKM~gwu~q2%r8s zDU?nj3A{|A@7=I{F^5+V@jEAq7~L6_Nqn(3shJIvvDx4M@lj>Wv4xUW?5Gxfv%1jSGG_kZ$XTy5sp1_D@kf(a(1%KWTCs;i43D;1-i zkz5!Ml^E!+@VrDt?az#b6BSCD5plE0C`NM_yPCxuUOhxJ$l@b>s4NB4ku$&_GKa>5 z9V(B%D*e)q1<#8w03spDY#a27<`7Yo>*^p1NNxtDpC@h-9y8H!L;6(O9N;x{4Um1@U65n30zDQ#Z53w5|+TTzH=>SL_XHn|MNQl%ccFc6T3+scfo%%%N2* zYbKL7lT?fMvoJ&<*QG`N-EyzbFb71Xm>WQ^inyX|1>C8sop?>U8qMLz+T#icRRO^& zYcfWP{luuekgE-nnL@BjhTH_^z7_jWKqiCyh#a95eXa4+y&t_7>qv}1a|r781Q>|y zBgJAi+Dx@1vYMI1g3F62AknuXks)<5Nv)78wyNNy+UZ=IA5{7aPaqOcsx`6|F;bK( zk}UNQttqU!Y>3vU>#UR2B9$^^&43FAc>(-@Faju-hM)0@HXUNw{NV6#ck;^moogZJ z+x&V~)h@IpX;2<-$1gpk$9>v>YI)1k=NCPniqy)8sUuY)vBCXHk46?YNLMf&!KR<= z?>%}yuW!mZLe&CRjz>@#vQd04kv#UlVwbZx^Op}@Qguxr#;urCksGj827If>kNfpZ zF#&xoFoSPfsstnt>?fsGoHUX`t0azEocT+DzOx>cDt_0|1ZF~`su83k40wjOhw8LL znTLl@$6s9ktCzvHeFcx@g%tLra}rb!$r(qMk=&es8E&^YDG3Qfg}6-$Fu6UvreER z|K;^NKLc(0Ixy%OPbQ5HyyoQ|D2WPY_-SgH`<3fdQLh&ReTB+N)tbM)QZb=OrNB#H zA*a1Mah3VIXS@IT+gbOr^BQt^`0V&g>zls-gZFjH2<^hAw1iENDHNO`BoiXFN&CSH z!Tx0EkNZ)u+sMd@k&ps)*kFIun!lV>NV03!DhxaQ^Z)NX{N=p++0zll9?>0Z%(gm}inIR90p_f8?VgX}Xhc=hyKNjgo0mJdix9IHbU81(5(G z6daS&4g{+z`{?Q3!^aEVUoC;Vn{VE0n)+Yr2@tCWf+3+WP2@sSIV6|zJ^+`PV2WNC z%+7zidJPkeEGU+PLm5Taec~0&#;iy4bnl6pX#RMGn4C~r!V9EUN=VfzR)syl5zc4- z!PC7*Pt<}~dRS(2^E z%bU~NKUALIKcAPGRlZ+;ew^2FT3d$7&H5a(+BK`q{p%J%{EymBcZp7L$mXl(gwhmE z=d|ZrK|Z7>Fb??bgT2QGY6+Zayl-pk!Ro}RpEiwKB~pQDY+NnGVspr8Af-YRDGEjW z@#%dmOs@FHldxF9l8D5~a(c^ArAPa8RIj!NXoOHkA(3#>K}Cu+QW#Qbtp4WDWscQS zZBl2%*4B4#Oqx&bgHGLR#OFfwV#R8S#eNqO$&v3xe}W+I5zhX*wt^LuFZ4PSOmfoc zw-AYTm6h&0&#kg4URBZDDvnoG(i=pz0>ZtEajM}h_y8OQ<$typ&uQ4hgK$6;k0urrm(U+$V{^qVE7J1 zYYf)&?PX2hRD0Ap;r8Z(Zvj`fooj$#o_sDQlux}yWRmk?$}A%KJ{G%RmnUK$QkZ6b z-g1~;`!f=3*!)2XjH_tMxe;Q~lqd)_*b@jhyj$r{o}5*sI_*&B2=cuewGFh{Mg_wj zVN0w)s^!RghkuTHimmDEz6Xzqb@9@5mM`~WNV3>{a`YW~ovpvY1Owt(nNFf>A4UpwMAVJ?%sX#Z-G+VK&d-OF7~s~k!PvGVnhj4%g&3_ z)xk8O(v!-HeJj;dEA0KLWCr=c2lEVKR_|B(Wam5ymD;2(7^q@RV{Uuxwt+;qK!k1p z;V|q#B$CO55`yTP#2E8ZS02+VT6c%a5ZO{fX{3YJQ=qXAeGI>U1^w>#tLpa`LZ;!? zeMb1pjR&`^Q>$KwH6Ye1eEb_gpEYC;L|<-zfqXfZg~-b)sFieeP}+36pA|~`F`s7j zWaabg^E59@>)i)ETn@ig->p~2(1=&vdg8tgX+ixwzyDcsOtmSii}nK#(FQHK;i!AP vIg-)YBV)p`4rUBxkLr>7@GK#N=fNKVVWoIDf|uF800000NkvXXu0mjfrQkuk diff --git a/selfdrive/assets/icons_mici/setup/smaller_button_pressed.png b/selfdrive/assets/icons_mici/setup/smaller_button_pressed.png deleted file mode 100644 index 58d24382afc7adea13588acc989f805b9e03ac02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17554 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 diff --git a/selfdrive/assets/icons_mici/setup/start_button.png b/selfdrive/assets/icons_mici/setup/start_button.png new file mode 100644 index 0000000000000000000000000000000000000000..7453713814d457f2624d46b34b449cd4aeeb5957 GIT binary patch literal 18608 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 literal 0 HcmV?d00001 diff --git a/selfdrive/assets/icons_mici/setup/start_button_pressed.png b/selfdrive/assets/icons_mici/setup/start_button_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..3a303c029337b104803079fe72ef21be9aa3bca6 GIT binary patch literal 65513 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

    )IT6r#*R-|1w8KR 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 literal 0 HcmV?d00001 diff --git a/selfdrive/assets/icons_mici/turn_intent_left.png b/selfdrive/assets/icons_mici/turn_intent_left.png index 325adc857128b1850d7624fb279f5f43423b9c42..3815158c9c4608068a5cdb8ef254797828970ada 100644 GIT binary patch delta 876 zcmV-y1C#uU2a*RNiBL{Q4GJ0x0000DNk~Le0001S0000k2nGNE03W9I@{u7meu1Hplr}|g2K0cBTP`30C$3>6Cfrao#1+h zq}tGg#Q&vm@ADkzEjciFL0Ruur2OQrx?#Utfg2O5 z(1IQX3OUD;Tqozyhe$I1*q}Y8&M)(OktAQNmCtuRFIn&kBhk1e_AF4ae?A+efylHR zKjEYn7>Gs^2N1X~6mU|DKBd-{r~(@!m)nBl8cwQ3N7Rz20y{-6zn2_WZH4YEQ3dvj z2t7x`7P^x}6*wpb$0f^L?D~SO5>?=6SU90yx3$h^C91$^xZ*h9)Wh8XU0Fs=(+eIA-B8`=3M=f0zswZhm?7s`{)7ObWyCu*~ycOH_f$a{O9;vcMBg-=U<) zpUl_fWO0%~npl+Op*xh-4~xe&LSYq3M!v*VUCU#94t2;-pEQ+-k!9wWLQIhc3y$CL z;)X8L^8YH-F(tpR9FK_=iML3j6-o=5j9GkLN2O?;a~%2OAy?}?f3!qGIvfvKY;6j; zRqWEw2vYl`$o!(DA-_3okg2CrB!usC4aLtH_7rlh zbFt;~%WmtF>g(1`e}EfK(s>x7XVnC`$4s!tP}v#!h_cgZQ7*E2G|bvo6gK{35+c_J6y^~mXDD5@mhA=X?y`gsKLI%`WAUD80rW;4SHX z{x~5w$UPx9(A^~ULItj;w|in6sI1WiX@!mpH}e-uF}?@@eL$N400000igm+1waJ}6~rARsUS%OF%`sA;H3hb3Wgc) zY^<2r*1uNP+;irv=p+v_G**Ztujqyv^b8REcG(`;YOJz zvKPoO{5jlPx4q6ghlz}xf90#xkf?Z8Cjan)n=y<&kid7m|A$!<*;|fZX7^a+DL3C? z^pS^0nJV%OMqhci9A-`AelXIvJ64CY2S{@I6vJRW`Mizwgmxd8iOdu9myjTqhvx@8 zO&Uv}YMMz$u586Z*gw=ZB+9#HCc`WtejL28KUn1iT`XlBnFK&Q+~k_2%R%(&xTEg5fRUSBl?Dm?bEqs^PtZPt zxNp`)k?On@J~h_%FnrKP0r6m=c8B3HjOL-$>}yWVF~|u}87eL5li^P)#5fLk_XEcj zR;#D#;x&x!Ais(_&$Ch<&R}#8t%l)yDo+X{E>!F#6}!J)I>U$?>1`@@8*^HFU1e;i u^vdZvP+2Mbv#V@}S60jPS6@?KUGWcmzG67o^7QZk0000D#HpRV>Ak21wXehf5QnqRSSfp+ zU<3?W0j$uQmi`{Y75XlWEh}3t#@W#4_Lv!u;rt@tTA2T3o@b+Yw(e7c$=N<7J$wf zl2%`#(8k#EHuqdYHVfce{U>|5L=pZrDqEJmj3xjc&-q#= zbC_=etM21D4}wnkHPiCLmUFsRISBl7UuSssnnP6rrWgLbQ^cMoOu9m66>6rV=FpUY zX@y^Ngnuh(OsfbrhoS^bCwwvWeUBibVLC;q*|!qV&F>C|UIzx9U!XO8p2i=b z^I$b7!ruaQm0%7{s5jm(!hZ(pDM77T&(s<6)hxo_3-ub?IW(YiQevrD9KOy_&oQhJ z3w37uDijWaZofh7aC?au=oT_!ncO6g7Sx$6nj;j(o1rTdqG0?YQkWH>PV28wh=R^3 zjDKa0Lt%XDkL!O54={e;;Z9kc?6~0^@w;CCK|zbyx}0-|71$LR@)3n&W2;PmQUGqU zZpHEv1uZn{QmnvFE3dz7`9rPNe`as^AyqH~-K=6e|6lXI9o^IX4o|N4VYXa1xdXrB zaioz+8N;X8AO#83S+{>N+j2vR*{`6(wSTRgw+O@wxx(Y5kInVarj-pgN+HonQqd+h zxg_0CdI23I+2wETU(BA|Of*D$kC}uu?ahM0P5!?o{A!Nl2`FuH35sH@x+n$HWlwq2 z&Oz{00W`JkDcA7XHQ`#uo%c-tfO|+0{8Sc;nvA30;1$9PylDioy=#s%JhIA96@TCd zrXz%@BFguBh5x{i0w*VCiQ{`R(%74zC>GEsw0j5oH0w+#UfT=T+r~wovOD~5;6^27m zfQeHSVB!=7m^eiNCXOh8L1C(xU!aHVGye>CaMRicezarv=Ga916m}y4BTWF!3U1y0 zt`#}8fZNomF@JM6^T`9|h{K@cL5Hni$CS}8W21=@y6h56OTB|QR~k8JYJUc%f?>LY z6vo1mfk~XGleGIre1N?gw}*?+@M!rzTNd{6cU!(-I!KEbi}@z>uxMZBpAm=AZ~|9| zq@@U_IBus@8k;njQ>9bFFA+zy0<1KXBS@62En*E~HG7B{xK@7-CA_~7lYd}+68QoD zAp!Qm-rJWCI3A>XJB>{iv44Yq5zgI-Z^5B{zz-zCelIa^(j~N zZe{`v!uSmd@hxV|N^qfR@^=urrSIMvH3|@#hc0vlgJ;QSY zXUz%B_`JC(shKfBHpA=Uw)u?qa_~2Vu{8r_LZmAgsy`4sD|#r5OCb5s`r8U{gK)BR z1A?#MA$A3le(f6hh{@>sFzx=3CXQ~oQPRYOEHgezJ(dINtYT_m&~Y_X3x;QOeUvTq z!2)>Ug?0m?Gz;WqNPkw~BD3%p2>1SPp8MdK!y#{x84klC%${6}aff-F?fdYUHRd@o zLcP;WV^|;~j62F_zp~mtI%hb2v<9u?R>$(ZHN*Mo5U*{!f@4MlGBcQK5~Ly2Z_!|d zj4-b67rOaPjO$ya3(?rH*!8<=oT?Q{g-kI1G|}!8c8u>^(|;UczWe(wnV+mquf5+D z+m%CgxP`ol%!@e^8kSXU9u|Yz(3H^#?@6PJI3ZS(7TG_H> zTBk6@mg`*@B*NE`M%-Vg1*)$30mS4P#8Dx=667M~X{Z{)H|Q8O)JXySQnALSOz{O$ zDS<&g43udJU&CK|+jVb7=L{i!B0(c$E2R>Q5@q3ko_`$>cX()um~-f8zdYzIGtQ+C z6<-H3t*jw@bLfubgA~A<6|EqR3eFN#m?(6^V~svvXk>E`2PcX0o~2gcW@SrFoynq{ zT}t%5>@&ZEp74dN+tTC#E~(3>7{7pV8(9t|SYhd=tz)NmpK^{qp#Cy!&G3{dId=vH zP14X!t$)|ll?%@_4?*D>$7lIl@ z@n3ZKZXX$+%xN1nhvGmpof0$;y4d!x{=R)~3f(%CWm>@tHI;-vgA&xsUAGGv=Ex?D zCMAmGCOE?|4!pQVzVBtA7=@&!073>Om^uc^A%AG9$)a1?JPZoj$ZDs0{GocbaQ_7* zuTPdea}z=8GD+}hl63JhWo*k|7)M5rp(Besf2E4NR`mh4K{snAvFv5_?=VE*A5!NW zNUi`vaSjj0AXC19EGLHeT)@Yg0#+NTqtjdqJ6SA18@joE33RAXXk*}Z@~n`N>}Lk~ z2Y-}NLU9l`NL`%f7QT?(0<`hIfkY3TVVbPqTD?I}^m=NT_YGvYC>u@{DJX}8k%GDZW0|7p~9dQpbcGm zGbvhU=B1!nvi{PCM<2py6rc?^88c+ctLI4!@^2(MM zw($L_zZU*aiaq~oY`Jd~fMAo+}dqf;dofVS+LA=;P?c;OJ&PD$~*V7Qh2KVD%gWZ#1u3Fp0eoMd1>YTG%Nq^fAh`vw!aui{ zJIccELt)FEt-Ftun4}iKoBR(nEQYo#d-sjswNbQO3x66Go=IF%B9bV8_h{MCJ0m>| zxvAHUzvq>@?<4@+lr%3bziO0%^x)wlJBar*cDTQ{^<=gV^Eriei9U$cSZjlRQ#DX0oWHP!Mm1t|$`);un#^tN>(Me?gfj;GDu(O6m*Z zTYrCC|C4zH@%s+<%Hm|t2bL7S>vc^TDb^H6i9J?eUtoyL7&0>^T4nl+0$`hUE0%&X zQWO*qTY+CzUVm%(L#ft(Weh2TY-p<-T*;hV(!?g0 zv~_SzE<2h8ob2+C<}VgIAI70v(tFH0Wx>EU|KCf0E$Mi=kxip~?V=P&mp$c8GY7%0 z0`Lc(QyQ+xd9!uPxc8nZ7v2cULZ8cGQEer-aXcu57kJ$WxW$*0h9_2eR{?&|e1C*6 zS6KP}tbMb`QGjoaS@_3KZDk&44g+)ky7}<7zG*7JYzqZix-WZ}=3 zSF8Y|$+neIr(gvrC^J{G0?eG#?0*Byn<6W~yvYhMcNQEqK$+Px$e~f0@sJf@=41t! zIavW_PF8@K!wO(1Ggr)SBnR&^za$_0;R8SF&@K+^Drp<>li3dkjI0~ipN+cYg}ZZd zn>r=tZ|)a9c|b{V80vV?VI$ZvW%SF`sH24b?Gj82xq~>@5;o!alHxEDPGHajG-)Wp zYdUVHlp7m2nAf3#-{D`1<3RypPS;#ZCP&~XSzFi|#A@~!G35NDe@F=LFT~^@*qlVZ zL2UQYihZz8_VS62hihA2$A2b^*h9>F{ygz5I8=~H6o9eci><)xl%JsloBa19JolHk zg>UMaKto|9-AmwG%#@X2DQWWeP*4~TmZMgHHHDEpqR3mQH#9vZ&=5XTP#8}X;2VX( zW6|U%cY8|^oNQ_UE;WP?H~&&l7;F9!YXO)uQovRy&y+1`{A|1vtA9aB;XG~h2+s|y zniClDd2>@zK`}u#!t3I$evjsI@GXVWnt?JQ+!c(~9|)cm?F-@(NIni7n+ouS!g)(d z_zKo=uKL31*Zw0tVluj3*Ef%8;^3AWIZaH+(C$gRZh(ath9CVwliR2Kd@g?s&kTMfT|)g93D%?t z;`)B3o8N@EzLmR>q>Ds5-&NvNtxyV50`aGbcAv0AeBYYp2!Hea-**LlRGnVL@11Pj zd)OKn;tv#9Q#gF$Wl4IhNuM<-;p_68!ZG`{pgk8E6g$qof?ii3vA?b_D!zxW!`Ks8 zmlOixO{+>*fC2mfQo?@JCE^GlsX%6&tuiWr%yH{oQCR_n%;C{-^Aw1;0z4{6zFG*~ z0F&gF4bJP2<$vG-U|phvV|U_kA9jQELnh57VnYeRHuNi&gBw#0Du7?)SW+B?Ei0sT z3PZQGgKHZDNdf#)vBaiK_61TY zfgwE%3DXe1guis&b#F%J3?Y7U=#t_|sRWZmSooKH;(reNrikImAw%)-gWf@LE`6-{ zI^bz#3E`W*JCb`TfHx~rK^g@)OHj~Efg2u6^!ZFJn_l!z66HNhseSK-Efr)Yi!{5G zKPVFa%u>Qi)+&RUWNptki-;#QBZ=pV@NmzO*C0_BY&HRp^P+aVZ`GP#j}O`FUWa)hTN}z zY;avB2|i7dE}o~1ZTXv~k$+dd*2q$$5(8T)&yvP2G=E>TY_p0moI}CbinD-5MxX2q$4b6u&Z4ZnvlyShN zKdErMtPpra%&g!_!niYn_GN{U3Vu)@;1F;=0#729G`&$neT?3%HS?NLOT8Gi0yKe3 zZ+1rGSpsgOUb4O(!lMsiG78Ydo6~c0Yh&-pBaaVY$O)axx5fBQ26>iADnJw8P4J1D zC2bWVm4#s88fu*EX$2m0=+@v&UIE&G+pzgNIb|q(Ii;;1QSA9w)3|cEZ`^ODF6=h` Y2i0vWtl3Ai+yDRo07*qoM6N<$f;B@22LJ#7 diff --git a/selfdrive/assets/icons_mici/wheel_critical.png b/selfdrive/assets/icons_mici/wheel_critical.png index 502c7ce5f7e9411ea4559c99b62afab16f6684b9..3c399916dfdef60e886a766684316e520186a421 100644 GIT binary patch literal 11023 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 JPDHLkV1i<*b6)@e literal 10909 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 str: - brand = "starpilot" - description = ui_state.params.get("UpdaterCurrentDescription") - return f"{brand} {description}" if description else brand + self._cell_none_txt = gui_app.texture("icons_mici/settings/network/cell_strength_none.png", 54, 36) + self._cell_low_txt = gui_app.texture("icons_mici/settings/network/cell_strength_low.png", 54, 36) + self._cell_medium_txt = gui_app.texture("icons_mici/settings/network/cell_strength_medium.png", 54, 36) + self._cell_high_txt = gui_app.texture("icons_mici/settings/network/cell_strength_high.png", 54, 36) + self._cell_full_txt = gui_app.texture("icons_mici/settings/network/cell_strength_full.png", 54, 36) def _update_state(self): - # TODO: refresh function that can be called periodically, not at 60 fps, so we can update version - # update system status - self._system_status = "SYSTEM READY ✓" if ui_state.panda_type != log.PandaState.PandaType.unknown else "BOOTING UP..." - - # update network status - strength = ui_state.sm['deviceState'].networkStrength.raw - strength_text = "● " * strength + "○ " * (4 - strength) # ◌ also works - network_type = NETWORK_TYPES[ui_state.sm['deviceState'].networkType.raw] - self._network_status = f"{network_type} {strength_text}" + device_state = ui_state.sm['deviceState'] + self._net_type = device_state.networkType + strength = device_state.networkStrength + self._net_strength = max(0, min(5, strength.raw + 1)) if strength.raw > 0 else 0 def _render(self, _): - # draw status - status_rect = rl.Rectangle(self._rect.x, self._rect.y, self._rect.width, 40) - gui_label(status_rect, self._system_status, font_size=HEAD_BUTTON_FONT_SIZE, color=DEFAULT_TEXT_COLOR, - font_weight=FontWeight.BOLD, alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER) + if self._net_type == NetworkType.wifi: + # There is no 1 + draw_net_txt = {0: self._wifi_none_txt, + 2: self._wifi_low_txt, + 3: self._wifi_medium_txt, + 4: self._wifi_full_txt, + 5: self._wifi_full_txt}.get(self._net_strength, self._wifi_low_txt) + elif self._net_type in (NetworkType.cell2G, NetworkType.cell3G, NetworkType.cell4G, NetworkType.cell5G): + draw_net_txt = {0: self._cell_none_txt, + 2: self._cell_low_txt, + 3: self._cell_medium_txt, + 4: self._cell_high_txt, + 5: self._cell_full_txt}.get(self._net_strength, self._cell_none_txt) + else: + draw_net_txt = self._wifi_slash_txt - # draw network status - network_rect = rl.Rectangle(self._rect.x, self._rect.y + 60, self._rect.width, 40) - gui_label(network_rect, self._network_status, font_size=40, color=DEFAULT_TEXT_COLOR, - font_weight=FontWeight.MEDIUM, alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER) + draw_x = self._rect.x + (self._rect.width - draw_net_txt.width) / 2 + draw_y = self._rect.y + (self._rect.height - draw_net_txt.height) / 2 - # draw version - version_font_size = 30 - version_rect = rl.Rectangle(self._rect.x, self._rect.y + 140, self._rect.width + 20, 40) - wrapped_text = '\n'.join(wrap_text(self._version_text, version_font_size, version_rect.width)) - gui_label(version_rect, wrapped_text, font_size=version_font_size, color=DEFAULT_TEXT_COLOR, - font_weight=FontWeight.MEDIUM, alignment=rl.GuiTextAlignment.TEXT_ALIGN_LEFT) + if draw_net_txt == self._wifi_slash_txt: + # Offset by difference in height between slashless and slash icons to make center align match + draw_y -= (self._wifi_slash_txt.height - self._wifi_none_txt.height) / 2 + + rl.draw_texture_ex(draw_net_txt, rl.Vector2(draw_x, draw_y), 0.0, 1.0, rl.Color(255, 255, 255, int(255 * 0.9))) class MiciHomeLayout(Widget): @@ -100,117 +93,46 @@ class MiciHomeLayout(Widget): self._version_text = None self._experimental_mode = False - self._safe_mode = False self._current_model_name = "default" - self._settings_txt = gui_app.texture("icons_mici/settings.png", 48, 48) - self._experimental_txt = gui_app.texture("icons_mici/experimental_mode.png", 48, 48) - self._mic_txt = gui_app.texture("icons_mici/microphone.png", 48, 48) + self._experimental_icon = IconWidget("icons_mici/experimental_mode.png", (48, 48)) + self._mic_icon = IconWidget("icons_mici/microphone.png", (32, 46)) - self._net_type = NETWORK_TYPES.get(NetworkType.none) - self._net_strength = 0 + self._status_bar_layout = HBoxLayout([ + IconWidget("icons_mici/settings.png", (48, 48), opacity=0.9), + NetworkIcon(), + self._experimental_icon, + self._mic_icon, + ], spacing=18) - self._wifi_slash_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_slash.png", 50, 44) - self._wifi_none_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_none.png", 50, 44) - self._wifi_low_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_low.png", 50, 44) - self._wifi_medium_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_medium.png", 50, 44) - self._wifi_full_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_full.png", 50, 44) - - self._cell_none_txt = gui_app.texture("icons_mici/settings/network/cell_strength_none.png", 55, 35) - self._cell_low_txt = gui_app.texture("icons_mici/settings/network/cell_strength_low.png", 55, 35) - self._cell_medium_txt = gui_app.texture("icons_mici/settings/network/cell_strength_medium.png", 55, 35) - self._cell_high_txt = gui_app.texture("icons_mici/settings/network/cell_strength_high.png", 55, 35) - self._cell_full_txt = gui_app.texture("icons_mici/settings/network/cell_strength_full.png", 55, 35) - - self._openpilot_label = MiciLabel("starpilot", font_size=96, color=rl.Color(255, 255, 255, int(255 * 0.9)), font_weight=FontWeight.DISPLAY) - self._version_label = MiciLabel("", font_size=36, font_weight=FontWeight.ROMAN) - self._large_version_label = MiciLabel("", font_size=64, color=rl.GRAY, font_weight=FontWeight.ROMAN) - self._date_label = MiciLabel("", font_size=36, color=rl.GRAY, font_weight=FontWeight.ROMAN) + self._openpilot_label = UnifiedLabel("starpilot", font_size=96, font_weight=FontWeight.DISPLAY, max_width=480, wrap_text=False) + self._version_label = UnifiedLabel("", font_size=36, font_weight=FontWeight.ROMAN, max_width=480, wrap_text=False) + self._large_version_label = UnifiedLabel("", font_size=64, text_color=rl.GRAY, font_weight=FontWeight.ROMAN, max_width=480, wrap_text=False) + self._date_label = UnifiedLabel("", font_size=36, text_color=rl.GRAY, font_weight=FontWeight.ROMAN, max_width=480, wrap_text=False) self._branch_label = UnifiedLabel("", font_size=36, text_color=rl.GRAY, font_weight=FontWeight.ROMAN, scroll=True) - self._version_commit_label = MiciLabel("", font_size=36, color=rl.GRAY, font_weight=FontWeight.ROMAN) + self._version_commit_label = UnifiedLabel("", font_size=36, text_color=rl.GRAY, font_weight=FontWeight.ROMAN, max_width=480, wrap_text=False) def show_event(self): + super().show_event() self._version_text = self._get_version_text() - self._update_network_status(ui_state.sm['deviceState']) self._update_params() def _update_params(self): - self._safe_mode = ui_state.params.get_bool("SafeMode") - self._experimental_mode = requested_experimental_mode(ui_state.params, ui_state.params_memory) + self._experimental_mode = ui_state.params.get_bool("ExperimentalMode") - def _clean_name(value: str) -> str: + def _clean_model_name(value: str) -> str: return re.sub(r"[🗺️👀📡]", "", value).replace("(Default)", "").strip() - def _decode_default(value) -> str: - if isinstance(value, bytes): - return value.decode("utf-8", errors="ignore").strip() - return str(value or "").strip() + current_name = _clean_model_name(ui_state.params.get("DrivingModelName", encoding="utf-8") or "") + if not current_name: + default_name = ui_state.params.get_default_value("DrivingModelName") + if isinstance(default_name, bytes): + default_name = default_name.decode("utf-8", errors="ignore") + current_name = _clean_model_name(str(default_name or "")) - model_key = (ui_state.params.get("Model", encoding="utf-8") or - ui_state.params.get("DrivingModel", encoding="utf-8") or "").strip() - current_param_name = _clean_name(ui_state.params.get("DrivingModelName", encoding="utf-8") or "") - - available_models = [entry.strip() for entry in (ui_state.params.get("AvailableModels", encoding="utf-8") or "").split(",")] - available_names = [entry.strip() for entry in (ui_state.params.get("AvailableModelNames", encoding="utf-8") or "").split(",")] - model_versions = [entry.strip() for entry in (ui_state.params.get("ModelVersions", encoding="utf-8") or "").split(",")] - model_name_map = { - key: _clean_name(name) - for key, name in zip(available_models, available_names) - if key and _clean_name(name) - } - model_version_map = { - key: version - for key, version in zip(available_models, model_versions) - if key and version - } - - default_key = _decode_default(ui_state.params.get_default_value("DrivingModel") or - ui_state.params.get_default_value("Model")) or "sc" - default_name = _clean_name(_decode_default(ui_state.params.get_default_value("DrivingModelName"))) or "South Carolina" - - def _is_model_installed(key: str) -> bool: - if not key: - return False - - # Built-in default model is always available. - if key == default_key: - return True - - if (MODELS_PATH / f"{key}.thneed").is_file(): - return True - - version = model_version_map.get(key, "") - required = [ - f"{key}_driving_policy_tinygrad.pkl", - f"{key}_driving_vision_tinygrad.pkl", - f"{key}_driving_policy_metadata.pkl", - f"{key}_driving_vision_metadata.pkl", - ] - if version == "v12": - required.extend([ - f"{key}_driving_off_policy_tinygrad.pkl", - f"{key}_driving_off_policy_metadata.pkl", - ]) - return all((MODELS_PATH / filename).is_file() for filename in required) - - # If a stale custom model is selected but not actually installed, show default. - if model_key and not _is_model_installed(model_key): - model_key = default_key - - resolved_name = "" - if model_key in model_name_map: - resolved_name = model_name_map[model_key] - elif model_key.endswith("2") and model_key[:-1] in model_name_map: - resolved_name = model_name_map[model_key[:-1]] - elif model_key == default_key or (model_key.endswith("2") and model_key[:-1] == default_key): - resolved_name = default_name - - if not resolved_name and current_param_name: - resolved_name = current_param_name - if not resolved_name: - resolved_name = default_name if (not model_key or model_key == default_key) else model_key - - self._current_model_name = resolved_name + current_key = (ui_state.params.get("Model", encoding="utf-8") or + ui_state.params.get("DrivingModel", encoding="utf-8") or "").strip() + self._current_model_name = current_name or current_key or "default" def _update_state(self): if self.is_pressed and not self._is_pressed_prev: @@ -223,33 +145,18 @@ class MiciHomeLayout(Widget): if self._mouse_down_t is not None: if time.monotonic() - self._mouse_down_t > 0.5: # long gating for experimental mode - only allow toggle if longitudinal control is available - if ui_state.has_longitudinal_control and not self._safe_mode: - if ui_state.params.get_bool("ConditionalExperimental"): - current_status = ui_state.params_memory.get_int("CEStatus", default=CEStatus["OFF"]) - override_value = next_manual_ce_status(current_status, self._experimental_mode) - ui_state.params_memory.put_int("CEStatus", override_value) - sync_manual_ce_state(ui_state.params, override_value) - self._experimental_mode = override_value == CEStatus["USER_OVERRIDDEN"] - else: - self._experimental_mode = not self._experimental_mode - ui_state.params.put_bool("ExperimentalMode", self._experimental_mode) + if ui_state.has_longitudinal_control: + self._experimental_mode = not self._experimental_mode + ui_state.params.put("ExperimentalMode", self._experimental_mode) self._mouse_down_t = None self._did_long_press = True if rl.get_time() - self._last_refresh > 5.0: - device_state = ui_state.sm['deviceState'] - self._update_network_status(device_state) - # Update version text self._version_text = self._get_version_text() self._last_refresh = rl.get_time() self._update_params() - def _update_network_status(self, device_state): - self._net_type = device_state.networkType - strength = device_state.networkStrength - self._net_strength = max(0, min(5, strength.raw + 1)) if strength.raw > 0 else 0 - def set_callbacks(self, on_settings: Callable | None = None): self._on_settings_click = on_settings @@ -260,17 +167,22 @@ class MiciHomeLayout(Widget): self._did_long_press = False def _get_version_text(self) -> tuple[str, str, str, str] | None: - description = ui_state.params.get("UpdaterCurrentDescription") + version = ui_state.params.get("Version") + branch = ui_state.params.get("GitBranch") + commit = ui_state.params.get("GitCommit") - if description is not None and len(description) > 0: - # Expect "version / branch / commit / date"; be tolerant of other formats - try: - version, branch, commit, date = description.split(" / ") - return version, branch, commit, date - except Exception: - return None + if not all((version, branch, commit)): + return None - return None + commit_date_raw = ui_state.params.get("GitCommitDate") + try: + # GitCommitDate format from get_commit_date(): '%ct %ci' e.g. "'1708012345 2024-02-15 ...'" + unix_ts = int(commit_date_raw.strip("'").split()[0]) + date_str = datetime.datetime.fromtimestamp(unix_ts).strftime("%b %d") + except (ValueError, IndexError, TypeError, AttributeError): + date_str = "" + + return version, branch, commit[:7], date_str def _render(self, _): # TODO: why is there extra space here to get it to be flush? @@ -279,83 +191,31 @@ class MiciHomeLayout(Widget): self._openpilot_label.render() if self._version_text is not None: + # release branch + release_branch = self._version_text[1] in RELEASE_BRANCHES version_pos = rl.Rectangle(text_pos.x, text_pos.y + self._openpilot_label.font_size + 16, 100, 44) self._version_label.set_text(self._version_text[0]) self._version_label.set_position(version_pos.x, version_pos.y) self._version_label.render() self._date_label.set_text(" " + self._version_text[3]) - self._date_label.set_position(version_pos.x + self._version_label.rect.width + 10, version_pos.y) + self._date_label.set_position(version_pos.x + self._version_label.text_width + 10, version_pos.y) self._date_label.render() - self._branch_label.set_max_width(gui_app.width - self._version_label.rect.width - self._date_label.rect.width - 32) + self._branch_label.set_max_width(gui_app.width - self._version_label.text_width - self._date_label.text_width - 32) self._branch_label.set_text(" " + self._current_model_name) - self._branch_label.set_position(version_pos.x + self._version_label.rect.width + self._date_label.rect.width + 20, version_pos.y) + self._branch_label.set_position(version_pos.x + self._version_label.text_width + self._date_label.text_width + 20, version_pos.y) self._branch_label.render() - self._version_commit_label.set_text(self._version_text[2]) - self._version_commit_label.set_position(version_pos.x, version_pos.y + self._date_label.font_size + 7) - self._version_commit_label.render() - else: - self._branch_label.set_max_width(gui_app.width - 32) - self._branch_label.set_text(self._current_model_name) - self._branch_label.set_position(text_pos.x, text_pos.y + self._openpilot_label.font_size + 16) - self._branch_label.render() + if not release_branch: + # 2nd line + self._version_commit_label.set_text(self._version_text[2]) + self._version_commit_label.set_position(version_pos.x, version_pos.y + self._date_label.font_size + 7) + self._version_commit_label.render() - self._render_bottom_status_bar() - - def _render_bottom_status_bar(self): # ***** Center-aligned bottom section icons ***** + self._experimental_icon.set_visible(self._experimental_mode) + self._mic_icon.set_visible(ui_state.recording_audio) - # TODO: refactor repeated icon drawing into a small loop - ITEM_SPACING = 18 - Y_CENTER = 24 - - last_x = self.rect.x + HOME_PADDING - - # Draw settings icon in bottom left corner - rl.draw_texture(self._settings_txt, int(last_x), int(self._rect.y + self.rect.height - self._settings_txt.height / 2 - Y_CENTER), - rl.Color(255, 255, 255, int(255 * 0.9))) - last_x = last_x + self._settings_txt.width + ITEM_SPACING - - # draw network - if self._net_type == NetworkType.wifi: - # There is no 1 - draw_net_txt = {0: self._wifi_none_txt, - 2: self._wifi_low_txt, - 3: self._wifi_medium_txt, - 4: self._wifi_full_txt, - 5: self._wifi_full_txt}.get(self._net_strength, self._wifi_low_txt) - rl.draw_texture(draw_net_txt, int(last_x), - int(self._rect.y + self.rect.height - draw_net_txt.height / 2 - Y_CENTER), rl.Color(255, 255, 255, int(255 * 0.9))) - last_x += draw_net_txt.width + ITEM_SPACING - - elif self._net_type in (NetworkType.cell2G, NetworkType.cell3G, NetworkType.cell4G, NetworkType.cell5G): - draw_net_txt = {0: self._cell_none_txt, - 2: self._cell_low_txt, - 3: self._cell_medium_txt, - 4: self._cell_high_txt, - 5: self._cell_full_txt}.get(self._net_strength, self._cell_none_txt) - rl.draw_texture(draw_net_txt, int(last_x), - int(self._rect.y + self.rect.height - draw_net_txt.height / 2 - Y_CENTER), rl.Color(255, 255, 255, int(255 * 0.9))) - last_x += draw_net_txt.width + ITEM_SPACING - - else: - # No network - # Offset by difference in height between slashless and slash icons to make center align match - rl.draw_texture(self._wifi_slash_txt, int(last_x), int(self._rect.y + self.rect.height - self._wifi_slash_txt.height / 2 - - (self._wifi_slash_txt.height - self._wifi_none_txt.height) / 2 - Y_CENTER), - rl.Color(255, 255, 255, 255)) - last_x += self._wifi_slash_txt.width + ITEM_SPACING - - # draw experimental icon - if self._experimental_mode: - rl.draw_texture(self._experimental_txt, int(last_x), - int(self._rect.y + self.rect.height - self._experimental_txt.height / 2 - Y_CENTER), rl.Color(255, 255, 255, 255)) - last_x += self._experimental_txt.width + ITEM_SPACING - - # draw microphone icon when recording audio is enabled - if ui_state.recording_audio: - rl.draw_texture(self._mic_txt, int(last_x), - int(self._rect.y + self.rect.height - self._mic_txt.height / 2 - Y_CENTER), rl.Color(255, 255, 255, 255)) - last_x += self._mic_txt.width + ITEM_SPACING + footer_rect = rl.Rectangle(self.rect.x + HOME_PADDING, self.rect.y + self.rect.height - 48, self.rect.width - HOME_PADDING, 48) + self._status_bar_layout.render(footer_rect) diff --git a/selfdrive/ui/mici/layouts/main.py b/selfdrive/ui/mici/layouts/main.py index 5d0d27b0c..95258e279 100644 --- a/selfdrive/ui/mici/layouts/main.py +++ b/selfdrive/ui/mici/layouts/main.py @@ -1,7 +1,5 @@ import pyray as rl -from enum import IntEnum import cereal.messaging as messaging -from openpilot.system.hardware import PC from openpilot.selfdrive.ui.mici.layouts.home import MiciHomeLayout from openpilot.selfdrive.ui.mici.layouts.settings.settings import SettingsLayout from openpilot.selfdrive.ui.mici.layouts.offroad_alerts import MiciOffroadAlerts @@ -16,18 +14,12 @@ from openpilot.system.ui.lib.application import gui_app ONROAD_DELAY = 2.5 # seconds -class MainState(IntEnum): - MAIN = 0 - SETTINGS = 1 - - -class MiciMainLayout(Widget): +class MiciMainLayout(Scroller): def __init__(self): - super().__init__() + super().__init__(snap_items=True, spacing=0, pad=0, scroll_indicator=False, edge_shadows=False) self._pm = messaging.PubMaster(['bookmarkButton']) - self._current_mode: MainState | None = None self._prev_onroad = False self._prev_standstill = False self._onroad_time_delay: float | None = None @@ -44,46 +36,37 @@ class MiciMainLayout(Widget): # TODO: set parent rect and use it if never passed rect from render (like in Scroller) widget.set_rect(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) - self._scroller = Scroller([ + self._scroller.add_widgets([ self._alerts_layout, self._home_layout, self._onroad_layout, - ], spacing=0, pad_start=0, pad_end=0) + ]) self._scroller.set_reset_scroll_at_show(False) # Disable scrolling when onroad is interacting with bookmark self._scroller.set_scrolling_enabled(lambda: not self._onroad_layout.is_swiping_left()) - self._layouts = { - MainState.MAIN: self._scroller, - MainState.SETTINGS: self._settings_layout, - } - # Set callbacks self._setup_callbacks() - # Skip onboarding on desktop; keep normal flow on device. - self._onboarding_window = None - if not PC: - self._onboarding_window = OnboardingWindow() - if not self._onboarding_window.completed: - gui_app.set_modal_overlay(self._onboarding_window) + gui_app.add_nav_stack_tick(self._handle_transitions) + gui_app.push_widget(self) + + # Start onboarding if terms or training not completed, make sure to push after self + self._onboarding_window = OnboardingWindow(lambda: gui_app.pop_widgets_to(self)) + if not self._onboarding_window.completed: + gui_app.push_widget(self._onboarding_window) def _setup_callbacks(self): - self._home_layout.set_callbacks(on_settings=self._on_settings_clicked) - self._settings_layout.set_callbacks(on_close=self._on_settings_closed) + self._home_layout.set_callbacks(on_settings=lambda: gui_app.push_widget(self._settings_layout)) self._onroad_layout.set_click_callback(lambda: self._scroll_to(self._home_layout)) - device.add_interactive_timeout_callback(self._set_mode_for_started) + device.add_interactive_timeout_callback(self._on_interactive_timeout) def _scroll_to(self, layout: Widget): layout_x = int(layout.rect.x) self._scroller.scroll_to(layout_x, smooth=True) def _render(self, _): - # Initial show event - if self._current_mode is None: - self._set_mode(MainState.MAIN) - if not self._setup: if self._alerts_layout.active_alerts() > 0: self._scroller.scroll_to(self._alerts_layout.rect.x) @@ -92,59 +75,47 @@ class MiciMainLayout(Widget): self._setup = True # Render - if self._current_mode == MainState.MAIN: - self._scroller.render(self._rect) - - elif self._current_mode == MainState.SETTINGS: - self._settings_layout.render(self._rect) - - self._handle_transitions() - - def _set_mode(self, mode: MainState): - if mode != self._current_mode: - if self._current_mode is not None: - self._layouts[self._current_mode].hide_event() - self._layouts[mode].show_event() - self._current_mode = mode + super()._render(self._rect) def _handle_transitions(self): + # Don't pop if onboarding + if gui_app.widget_in_stack(self._onboarding_window): + return + if ui_state.started != self._prev_onroad: self._prev_onroad = ui_state.started + # onroad: after delay, pop nav stack and scroll to onroad + # offroad: immediately scroll to home, but don't pop nav stack (can stay in settings) if ui_state.started: self._onroad_time_delay = rl.get_time() else: - self._set_mode_for_started(True) - - # delay so we show home for a bit after starting - if self._onroad_time_delay is not None and rl.get_time() - self._onroad_time_delay >= ONROAD_DELAY: - self._set_mode_for_started(True) - self._onroad_time_delay = None - - CS = ui_state.sm["carState"] - if not CS.standstill and self._prev_standstill: - self._set_mode(MainState.MAIN) - self._scroll_to(self._onroad_layout) - self._prev_standstill = CS.standstill - - def _set_mode_for_started(self, onroad_transition: bool = False): - if ui_state.started: - CS = ui_state.sm["carState"] - # Only go onroad if car starts or is not at a standstill - if not CS.standstill or onroad_transition: - self._set_mode(MainState.MAIN) - self._scroll_to(self._onroad_layout) - else: - # Stay in settings if car turns off while in settings - if not onroad_transition or self._current_mode != MainState.SETTINGS: - self._set_mode(MainState.MAIN) self._scroll_to(self._home_layout) - def _on_settings_clicked(self): - self._set_mode(MainState.SETTINGS) + # FIXME: these two pops can interrupt user interacting in the settings + if self._onroad_time_delay is not None and rl.get_time() - self._onroad_time_delay >= ONROAD_DELAY: + gui_app.pop_widgets_to(self, lambda: self._scroll_to(self._onroad_layout)) + self._onroad_time_delay = None - def _on_settings_closed(self): - self._set_mode(MainState.MAIN) + # When car leaves standstill, pop nav stack and scroll to onroad + CS = ui_state.sm["carState"] + if not CS.standstill and self._prev_standstill: + gui_app.pop_widgets_to(self, lambda: self._scroll_to(self._onroad_layout)) + self._prev_standstill = CS.standstill + + def _on_interactive_timeout(self): + # Don't pop if onboarding + if gui_app.widget_in_stack(self._onboarding_window): + return + + if ui_state.started: + # Don't pop if at standstill + if not ui_state.sm["carState"].standstill: + gui_app.pop_widgets_to(self, lambda: self._scroll_to(self._onroad_layout)) + else: + # Screen turns off on timeout offroad, so pop immediately without animation + gui_app.pop_widgets_to(self, instant=True) + self._scroll_to(self._home_layout) def _on_bookmark_clicked(self): user_bookmark = messaging.new_message('bookmarkButton') diff --git a/selfdrive/ui/mici/layouts/offroad_alerts.py b/selfdrive/ui/mici/layouts/offroad_alerts.py index 60f64b31b..0dae5d207 100644 --- a/selfdrive/ui/mici/layouts/offroad_alerts.py +++ b/selfdrive/ui/mici/layouts/offroad_alerts.py @@ -144,7 +144,7 @@ class AlertItem(Widget): bg_texture = self._bg_small_pressed if self.is_pressed else self._bg_small # Draw background - rl.draw_texture(bg_texture, int(self._rect.x), int(self._rect.y), rl.WHITE) + rl.draw_texture_ex(bg_texture, rl.Vector2(self._rect.x, self._rect.y), 0.0, 1.0, rl.WHITE) # Calculate text area (left side, avoiding icon on right) title_width = self.ALERT_WIDTH - (self.ALERT_PADDING * 2) - self.ICON_SIZE - self.ICON_MARGIN @@ -183,22 +183,20 @@ class AlertItem(Widget): icon_texture = self._icon_orange icon_x = self._rect.x + self.ALERT_WIDTH - self.ALERT_PADDING - self.ICON_SIZE icon_y = self._rect.y + self.ALERT_PADDING - rl.draw_texture(icon_texture, int(icon_x), int(icon_y), rl.WHITE) + rl.draw_texture_ex(icon_texture, rl.Vector2(icon_x, icon_y), 0.0, 1.0, rl.WHITE) -class MiciOffroadAlerts(Widget): +class MiciOffroadAlerts(Scroller): """Offroad alerts layout with vertical scrolling.""" def __init__(self): - super().__init__() + # Create vertical scroller + super().__init__(horizontal=False, spacing=12, pad=0) self.params = Params() self.sorted_alerts: list[AlertData] = [] self.alert_items: list[AlertItem] = [] self._last_refresh = 0.0 - # Create vertical scroller - self._scroller = Scroller([], horizontal=False, spacing=12, pad_start=0, pad_end=0, snap_items=False) - # Create empty state label self._empty_label = UnifiedLabel(tr("no alerts"), 65, FontWeight.DISPLAY, rl.WHITE, alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER, @@ -289,7 +287,7 @@ class MiciOffroadAlerts(Widget): def show_event(self): """Reset scroll position when shown and refresh alerts.""" - self._scroller.show_event() + super().show_event() self._last_refresh = time.monotonic() self.refresh() diff --git a/selfdrive/ui/mici/layouts/onboarding.py b/selfdrive/ui/mici/layouts/onboarding.py index 0d5080d27..b918bf6ef 100644 --- a/selfdrive/ui/mici/layouts/onboarding.py +++ b/selfdrive/ui/mici/layouts/onboarding.py @@ -1,35 +1,27 @@ -from enum import IntEnum - -import weakref import math -import time import numpy as np +import qrcode import pyray as rl +from collections.abc import Callable from openpilot.common.filter_simple import FirstOrderFilter -from openpilot.system.hardware import HARDWARE from openpilot.system.ui.lib.application import FontWeight, gui_app from openpilot.system.ui.widgets import Widget -from openpilot.system.ui.widgets.button import SmallButton, SmallCircleIconButton -from openpilot.system.ui.widgets.label import UnifiedLabel -from openpilot.system.ui.widgets.slider import SmallSlider -from openpilot.system.ui.mici_setup import TermsHeader, TermsPage as SetupTermsPage -from openpilot.selfdrive.ui.ui_state import ui_state, device -from openpilot.selfdrive.ui.mici.onroad.driver_state import DriverStateRenderer -from openpilot.selfdrive.ui.mici.onroad.driver_camera_dialog import DriverCameraDialog +from openpilot.system.ui.widgets.button import SmallCircleIconButton +from openpilot.system.ui.widgets.scroller import NavScroller, Scroller +from openpilot.system.ui.widgets.nav_widget import NavWidget +from openpilot.system.ui.mici_setup import GreyBigButton, BigPillButton from openpilot.system.ui.widgets.label import gui_label from openpilot.system.ui.lib.multilang import tr from openpilot.system.version import terms_version, training_version +from openpilot.selfdrive.ui.ui_state import ui_state, device +from openpilot.selfdrive.ui.mici.widgets.dialog import BigConfirmationCircleButton +from openpilot.selfdrive.ui.mici.onroad.driver_state import DriverStateRenderer +from openpilot.selfdrive.ui.mici.onroad.driver_camera_dialog import BaseDriverCameraDialog -class OnboardingState(IntEnum): - TERMS = 0 - ONBOARDING = 1 - DECLINE = 2 - - -class DriverCameraSetupDialog(DriverCameraDialog): +class DriverCameraSetupDialog(BaseDriverCameraDialog): def __init__(self): - super().__init__(no_escape=True) + super().__init__() self.driver_state_renderer = DriverStateRenderer(inset=True) self.driver_state_renderer.set_rect(rl.Rectangle(0, 0, 120, 120)) self.driver_state_renderer.load_icons() @@ -43,7 +35,7 @@ class DriverCameraSetupDialog(DriverCameraDialog): gui_label(rect, tr("camera starting"), font_size=64, font_weight=FontWeight.BOLD, alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER) rl.end_scissor_mode() - return -1 + return # Position dmoji on opposite side from driver is_rhd = self.driver_state_renderer.is_rhd @@ -56,92 +48,64 @@ class DriverCameraSetupDialog(DriverCameraDialog): self._draw_face_detection(rect) rl.end_scissor_mode() - return -1 -class TrainingGuidePreDMTutorial(SetupTermsPage): - def __init__(self, continue_callback): - super().__init__(continue_callback, continue_text="continue") - self._title_header = TermsHeader("driver monitoring setup", gui_app.texture("icons_mici/setup/green_dm.png", 60, 60)) +class TrainingGuidePreDMTutorial(NavScroller): + def __init__(self, continue_callback: Callable[[], None]): + super().__init__() - self._dm_label = UnifiedLabel("Next, we'll ensure comma four is mounted properly.\n\nIf it does not have a clear view of the driver, " + - "unplug and remount before continuing.", 42, - FontWeight.ROMAN) + continue_button = BigPillButton("next") + continue_button.set_click_callback(continue_callback) + + self._scroller.add_widgets([ + GreyBigButton("driver monitoring\ncheck", "scroll to continue", + gui_app.texture("icons_mici/setup/green_dm.png", 64, 64)), + GreyBigButton("", "Next, we'll check if comma four can detect the driver properly."), + GreyBigButton("", "openpilot uses the cabin camera to check if the driver is distracted."), + GreyBigButton("", "If it does not have a clear view of the driver, unplug and remount before continuing."), + continue_button, + ]) def show_event(self): super().show_event() # Get driver monitoring model ready for next step - ui_state.params.put_bool("IsDriverViewEnabled", True) - - @property - def _content_height(self): - return self._dm_label.rect.y + self._dm_label.rect.height - self._scroll_panel.get_offset() - - def _render_content(self, scroll_offset): - self._title_header.render(rl.Rectangle( - self._rect.x + 16, - self._rect.y + 16 + scroll_offset, - self._title_header.rect.width, - self._title_header.rect.height, - )) - - self._dm_label.render(rl.Rectangle( - self._rect.x + 16, - self._title_header.rect.y + self._title_header.rect.height + 16, - self._rect.width - 32, - self._dm_label.get_content_height(int(self._rect.width - 32)), - )) + ui_state.params.put_bool_nonblocking("IsDriverViewEnabled", True) -class DMBadFaceDetected(SetupTermsPage): - def __init__(self, continue_callback, back_callback): - super().__init__(continue_callback, back_callback, continue_text="power off") - self._title_header = TermsHeader("make sure comma four can see your face", gui_app.texture("icons_mici/setup/orange_dm.png", 60, 60)) - self._dm_label = UnifiedLabel("Re-mount if your face is occluded or driver monitoring has difficulty tracking your face.", 42, FontWeight.ROMAN) +class DMBadFaceDetected(NavScroller): + def __init__(self): + super().__init__() - @property - def _content_height(self): - return self._dm_label.rect.y + self._dm_label.rect.height - self._scroll_panel.get_offset() + back_button = BigPillButton("back") + back_button.set_click_callback(self.dismiss) - def _render_content(self, scroll_offset): - self._title_header.render(rl.Rectangle( - self._rect.x + 16, - self._rect.y + 16 + scroll_offset, - self._title_header.rect.width, - self._title_header.rect.height, - )) - - self._dm_label.render(rl.Rectangle( - self._rect.x + 16, - self._title_header.rect.y + self._title_header.rect.height + 16, - self._rect.width - 32, - self._dm_label.get_content_height(int(self._rect.width - 32)), - )) + self._scroller.add_widgets([ + GreyBigButton("looking for driver", "make sure comma\nfour can see your face", + gui_app.texture("icons_mici/setup/orange_dm.png", 64, 64)), + GreyBigButton("", "Remount if your face is blocked, or driver monitoring has difficulty tracking your face."), + back_button, + ]) -class TrainingGuideDMTutorial(Widget): +class TrainingGuideDMTutorial(NavWidget): PROGRESS_DURATION = 4 LOOKING_THRESHOLD_DEG = 30.0 - def __init__(self, continue_callback): + def __init__(self, continue_callback: Callable[[], None]): super().__init__() - self._back_button = SmallCircleIconButton(gui_app.texture("icons_mici/setup/driver_monitoring/dm_question.png", 48, 48)) - self._back_button.set_click_callback(self._show_bad_face_page) - self._good_button = SmallCircleIconButton(gui_app.texture("icons_mici/setup/driver_monitoring/dm_check.png", 48, 35)) - # Wrap the continue callback to restore settings - def wrapped_continue_callback(): - device.set_offroad_brightness(None) - continue_callback() + self._back_button = SmallCircleIconButton(gui_app.texture("icons_mici/setup/driver_monitoring/dm_question.png", 28, 48)) + self._back_button.set_click_callback(lambda: gui_app.push_widget(self._bad_face_page)) + self._back_button.set_touch_valid_callback(lambda: self.enabled and not self.is_dismissing) # for nav stack + self._good_button = SmallCircleIconButton(gui_app.texture("icons_mici/setup/driver_monitoring/dm_check.png", 42, 42)) + self._good_button.set_touch_valid_callback(lambda: self.enabled and not self.is_dismissing) # for nav stack - self._good_button.set_click_callback(wrapped_continue_callback) + self._good_button.set_click_callback(continue_callback) self._good_button.set_enabled(False) self._progress = FirstOrderFilter(0.0, 0.5, 1 / gui_app.target_fps) - self._step_start_time = time.monotonic() self._dialog = DriverCameraSetupDialog() - self._bad_face_page = DMBadFaceDetected(HARDWARE.shutdown, self._hide_bad_face_page) - self._should_show_bad_face_page = False + self._bad_face_page = DMBadFaceDetected() # Disable driver monitoring model when device times out for inactivity def inactivity_callback(): @@ -149,23 +113,10 @@ class TrainingGuideDMTutorial(Widget): device.add_interactive_timeout_callback(inactivity_callback) - def _show_bad_face_page(self): - self._bad_face_page.show_event() - self.hide_event() - self._should_show_bad_face_page = True - - def _hide_bad_face_page(self): - self._bad_face_page.hide_event() - self.show_event() - self._should_show_bad_face_page = False - def show_event(self): super().show_event() self._dialog.show_event() self._progress.x = 0.0 - self._step_start_time = time.monotonic() - - device.set_offroad_brightness(100) def _update_state(self): super()._update_state() @@ -174,10 +125,6 @@ class TrainingGuideDMTutorial(Widget): sm = ui_state.sm if sm.recv_frame.get("driverMonitoringState", 0) == 0: - # Fallback for devices where DM model isn't publishing during onboarding: - # allow manual continue once camera is active so setup isn't hard-blocked. - if self._dialog._camera_view.frame and (time.monotonic() - self._step_start_time) > 2.5: - self._good_button.set_enabled(True) return dm_state = sm["driverMonitoringState"] @@ -190,7 +137,8 @@ class TrainingGuideDMTutorial(Widget): looking_center = False # stay at 100% once reached - if (dm_state.faceDetected and looking_center) or self._progress.x > 0.99: + in_bad_face = gui_app.get_active_widget() == self._bad_face_page + if ((dm_state.faceDetected and looking_center) or self._progress.x > 0.99) and not in_bad_face: slow = self._progress.x < 0.25 duration = self.PROGRESS_DURATION * 2 if slow else self.PROGRESS_DURATION self._progress.x += 1.0 / (duration * gui_app.target_fps) @@ -201,13 +149,12 @@ class TrainingGuideDMTutorial(Widget): self._good_button.set_enabled(self._progress.x >= 0.999) def _render(self, _): - if self._should_show_bad_face_page: - return self._bad_face_page.render(self._rect) - self._dialog.render(self._rect) - rl.draw_rectangle_gradient_v(int(self._rect.x), int(self._rect.y + self._rect.height - 80), - int(self._rect.width), 80, rl.BLANK, rl.BLACK) + gradient_y = int(self._rect.y + self._rect.height - 80) + gradient_h = int(self._rect.y) + int(self._rect.height) - gradient_y + rl.draw_rectangle_gradient_v(int(self._rect.x), gradient_y, + int(self._rect.width), gradient_h, rl.BLANK, rl.BLACK) # draw white ring around dm icon to indicate progress ring_thickness = 8 @@ -260,238 +207,181 @@ class TrainingGuideDMTutorial(Widget): )) # rounded border + rl.begin_scissor_mode(int(self._rect.x), int(self._rect.y), int(self._rect.width), int(self._rect.height)) rl.draw_rectangle_rounded_lines_ex(self._rect, 0.2 * 1.02, 10, 50, rl.BLACK) + rl.end_scissor_mode() -class TrainingGuideRecordFront(SetupTermsPage): - def __init__(self, continue_callback): - def on_back(): - ui_state.params.put_bool("RecordFront", False) - continue_callback() - - def on_continue(): - ui_state.params.put_bool("RecordFront", True) - continue_callback() - - super().__init__(on_continue, back_callback=on_back, back_text="no", continue_text="yes") - self._title_header = TermsHeader("improve driver monitoring", gui_app.texture("icons_mici/setup/green_dm.png", 60, 60)) - - self._dm_label = UnifiedLabel("Do you want to upload driver camera data?", 42, - FontWeight.ROMAN) - - def show_event(self): - super().show_event() - # Disable driver monitoring model after last step - ui_state.params.put_bool("IsDriverViewEnabled", False) - - @property - def _content_height(self): - return self._dm_label.rect.y + self._dm_label.rect.height - self._scroll_panel.get_offset() - - def _render_content(self, scroll_offset): - self._title_header.render(rl.Rectangle( - self._rect.x + 16, - self._rect.y + 16 + scroll_offset, - self._title_header.rect.width, - self._title_header.rect.height, - )) - - self._dm_label.render(rl.Rectangle( - self._rect.x + 16, - self._title_header.rect.y + self._title_header.rect.height + 16, - self._rect.width - 32, - self._dm_label.get_content_height(int(self._rect.width - 32)), - )) - - -class TrainingGuideAttentionNotice(SetupTermsPage): - def __init__(self, continue_callback): - super().__init__(continue_callback, continue_text="continue") - self._title_header = TermsHeader("driver assistance", gui_app.texture("icons_mici/setup/warning.png", 60, 60)) - self._warning_label = UnifiedLabel("1. openpilot is a driver assistance system.\n\n" + - "2. You must pay attention at all times.\n\n" + - "3. You must be ready to take over at any time.\n\n" + - "4. You are fully responsible for driving the car.", 42, - FontWeight.ROMAN) - - @property - def _content_height(self): - return self._warning_label.rect.y + self._warning_label.rect.height - self._scroll_panel.get_offset() - - def _render_content(self, scroll_offset): - self._title_header.render(rl.Rectangle( - self._rect.x + 16, - self._rect.y + 16 + scroll_offset, - self._title_header.rect.width, - self._title_header.rect.height, - )) - - self._warning_label.render(rl.Rectangle( - self._rect.x + 16, - self._title_header.rect.y + self._title_header.rect.height + 16, - self._rect.width - 32, - self._warning_label.get_content_height(int(self._rect.width - 32)), - )) - - -class TrainingGuide(Widget): - def __init__(self, completed_callback=None): +class TrainingGuideRecordFront(NavScroller): + def __init__(self, continue_callback: Callable[[], None]): super().__init__() - self._completed_callback = completed_callback - self._step = 0 - self_ref = weakref.ref(self) + def on_accept(): + ui_state.params.put_bool_nonblocking("RecordFront", True) + continue_callback() - def on_continue(): - if obj := self_ref(): - obj._advance_step() + def on_decline(): + ui_state.params.put_bool_nonblocking("RecordFront", False) + continue_callback() + + self._accept_button = BigConfirmationCircleButton("allow data uploading", gui_app.texture("icons_mici/setup/driver_monitoring/dm_check.png", 64, 64), + on_accept, exit_on_confirm=False) + + self._decline_button = BigConfirmationCircleButton("no, don't upload", gui_app.texture("icons_mici/setup/cancel.png", 64, 64), on_decline, + exit_on_confirm=False) + + self._scroller.add_widgets([ + GreyBigButton("driver camera data", "do you want to share video data for training?", + gui_app.texture("icons_mici/setup/green_dm.png", 64, 64)), + GreyBigButton("", "Sharing your data with comma helps improve openpilot for everyone."), + self._accept_button, + self._decline_button, + ]) + + +class TrainingGuideAttentionNotice(Scroller): + def __init__(self, continue_callback: Callable[[], None]): + super().__init__() + + continue_button = BigPillButton("next") + continue_button.set_click_callback(continue_callback) + + self._scroller.add_widgets([ + GreyBigButton("what is openpilot?", "scroll to continue", + gui_app.texture("icons_mici/setup/green_info.png", 64, 64)), + GreyBigButton("", "1. openpilot is a driver assistance system."), + GreyBigButton("", "2. You must pay attention at all times."), + GreyBigButton("", "3. You must be ready to take over at any time."), + GreyBigButton("", "4. You are fully responsible for driving the car."), + continue_button, + ]) + + +class TrainingGuide(NavWidget): + def __init__(self, completed_callback: Callable[[], None]): + super().__init__() self._steps = [ - TrainingGuideAttentionNotice(continue_callback=on_continue), - TrainingGuidePreDMTutorial(continue_callback=on_continue), - TrainingGuideDMTutorial(continue_callback=on_continue), - TrainingGuideRecordFront(continue_callback=on_continue), + TrainingGuideAttentionNotice(continue_callback=lambda: gui_app.push_widget(self._steps[1])), + TrainingGuidePreDMTutorial(continue_callback=lambda: gui_app.push_widget(self._steps[2])), + TrainingGuideDMTutorial(continue_callback=lambda: gui_app.push_widget(self._steps[3])), + TrainingGuideRecordFront(continue_callback=completed_callback), ] - def show_event(self): - super().show_event() - device.set_override_interactive_timeout(300) - - def hide_event(self): - super().hide_event() - device.set_override_interactive_timeout(None) - - def _advance_step(self): - if self._step < len(self._steps) - 1: - self._step += 1 - self._steps[self._step].show_event() - else: - self._step = 0 - if self._completed_callback: - self._completed_callback() + self._child(self._steps[0]) + self._steps[0].set_enabled(lambda: self.enabled and not self.is_dismissing) # for nav stack def _render(self, _): - if self._step < len(self._steps): - self._steps[self._step].render(self._rect) - return -1 + self._steps[0].render(self._rect) -class DeclinePage(Widget): - def __init__(self, back_callback=None): +class QRCodeWidget(Widget): + def __init__(self, url: str, size: int = 170): super().__init__() - self._uninstall_slider = SmallSlider("uninstall openpilot", self._on_uninstall) + self.set_rect(rl.Rectangle(0, 0, size, size)) + self._size = size + self._qr_texture: rl.Texture | None = None + self._generate_qr(url) - self._back_button = SmallButton("back") - self._back_button.set_click_callback(back_callback) + def _generate_qr(self, url: str): + qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=0) + qr.add_data(url) + qr.make(fit=True) - self._warning_header = TermsHeader("you must accept the\nterms to use openpilot", - gui_app.texture("icons_mici/setup/red_warning.png", 66, 60)) + pil_img = qr.make_image(fill_color="white", back_color="black").convert('RGBA') + img_array = np.array(pil_img, dtype=np.uint8) - def _on_uninstall(self): - ui_state.params.put_bool("DoUninstall", True) - gui_app.request_close() + rl_image = rl.Image() + rl_image.data = rl.ffi.cast("void *", img_array.ctypes.data) + rl_image.width = pil_img.width + rl_image.height = pil_img.height + rl_image.mipmaps = 1 + rl_image.format = rl.PixelFormat.PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 + + self._qr_texture = rl.load_texture_from_image(rl_image) def _render(self, _): - self._warning_header.render(rl.Rectangle( - self._rect.x + 16, - self._rect.y + 16, - self._warning_header.rect.width, - self._warning_header.rect.height, - )) + if self._qr_texture: + scale = self._size / self._qr_texture.height + rl.draw_texture_ex(self._qr_texture, rl.Vector2(round(self._rect.x), round(self._rect.y)), 0.0, scale, rl.WHITE) - self._back_button.set_opacity(1 - self._uninstall_slider.slider_percentage) - self._back_button.render(rl.Rectangle( - self._rect.x + 8, - self._rect.y + self._rect.height - self._back_button.rect.height, - self._back_button.rect.width, - self._back_button.rect.height, - )) - - self._uninstall_slider.render(rl.Rectangle( - self._rect.x + self._rect.width - self._uninstall_slider.rect.width, - self._rect.y + self._rect.height - self._uninstall_slider.rect.height, - self._uninstall_slider.rect.width, - self._uninstall_slider.rect.height, - )) + def __del__(self): + if self._qr_texture and self._qr_texture.id != 0: + rl.unload_texture(self._qr_texture) -class TermsPage(SetupTermsPage): - def __init__(self, on_accept=None, on_decline=None): - super().__init__(on_accept, on_decline, "decline") +class TermsPage(Scroller): + def __init__(self, on_accept, on_decline): + super().__init__() - info_txt = gui_app.texture("icons_mici/setup/green_info.png", 60, 60) - self._title_header = TermsHeader("terms & conditions", info_txt) + self._accept_button = BigConfirmationCircleButton("accept\nterms", gui_app.texture("icons_mici/setup/driver_monitoring/dm_check.png", 64, 64), on_accept) + self._decline_button = BigConfirmationCircleButton("decline &\nuninstall", gui_app.texture("icons_mici/setup/cancel.png", 64, 64), on_decline, + red=True, exit_on_confirm=False) - self._terms_label = UnifiedLabel("You must accept the Terms and Conditions to use openpilot. " + - "Read the latest terms at https://comma.ai/terms before continuing.", 36, - FontWeight.ROMAN) + self._terms_header = GreyBigButton("terms and\nconditions", "scroll to continue", + gui_app.texture("icons_mici/setup/green_info.png", 64, 64)) + self._must_accept_card = GreyBigButton("", "You must accept the Terms & Conditions to use openpilot.") - @property - def _content_height(self): - return self._terms_label.rect.y + self._terms_label.rect.height - self._scroll_panel.get_offset() + self._scroller.add_widgets([ + self._terms_header, + GreyBigButton("swipe for QR code", "or go to https://comma.ai/terms", + gui_app.texture("icons_mici/setup/small_slider/slider_arrow.png", 64, 56, flip_x=True)), + QRCodeWidget("https://comma.ai/terms"), + self._must_accept_card, + self._accept_button, + self._decline_button, + ]) - def _render_content(self, scroll_offset): - self._title_header.set_position(self._rect.x + 16, self._rect.y + 12 + scroll_offset) - self._title_header.render() - - self._terms_label.render(rl.Rectangle( - self._rect.x + 16, - self._title_header.rect.y + self._title_header.rect.height + self.ITEM_SPACING, - self._rect.width - 100, - self._terms_label.get_content_height(int(self._rect.width - 100)), - )) + def _render(self, _): + rl.draw_rectangle_rec(self._rect, rl.BLACK) + super()._render(_) class OnboardingWindow(Widget): - def __init__(self): + def __init__(self, completed_callback: Callable[[], None]): super().__init__() + self._completed_callback = completed_callback self._accepted_terms: bool = ui_state.params.get("HasAcceptedTerms") == terms_version self._training_done: bool = ui_state.params.get("CompletedTrainingVersion") == training_version - self._state = OnboardingState.TERMS if not self._accepted_terms else OnboardingState.ONBOARDING - - self.set_rect(rl.Rectangle(0, 0, 458, gui_app.height)) + self.set_rect(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) # Windows - self._terms = TermsPage(on_accept=self._on_terms_accepted, on_decline=self._on_terms_declined) + self._terms = TermsPage(on_accept=self._on_terms_accepted, on_decline=self._on_uninstall) + self._terms.set_enabled(lambda: self.enabled) # for nav stack self._training_guide = TrainingGuide(completed_callback=self._on_completed_training) - self._decline_page = DeclinePage(back_callback=self._on_decline_back) + self._training_guide.set_enabled(lambda: self.enabled) # for nav stack + + def _on_uninstall(self): + ui_state.params.put_bool("DoUninstall", True) def show_event(self): super().show_event() device.set_override_interactive_timeout(300) + device.set_offroad_brightness(100) def hide_event(self): super().hide_event() + # FIXME: when nav stack sends hide event to widget 2 below on push, this needs to be moved device.set_override_interactive_timeout(None) + device.set_offroad_brightness(None) @property def completed(self) -> bool: return self._accepted_terms and self._training_done - def _on_terms_declined(self): - self._state = OnboardingState.DECLINE - - def _on_decline_back(self): - self._state = OnboardingState.TERMS - def close(self): - ui_state.params.put_bool("IsDriverViewEnabled", False) - gui_app.set_modal_overlay(None) + ui_state.params.put_bool_nonblocking("IsDriverViewEnabled", False) + self._completed_callback() def _on_terms_accepted(self): ui_state.params.put("HasAcceptedTerms", terms_version) - self._state = OnboardingState.ONBOARDING + gui_app.push_widget(self._training_guide) def _on_completed_training(self): ui_state.params.put("CompletedTrainingVersion", training_version) self.close() def _render(self, _): - if self._state == OnboardingState.TERMS: - self._terms.render(self._rect) - elif self._state == OnboardingState.ONBOARDING: - self._training_guide.render(self._rect) - elif self._state == OnboardingState.DECLINE: - self._decline_page.render(self._rect) - return -1 + rl.draw_rectangle_rec(self._rect, rl.BLACK) + self._terms.render(self._rect) diff --git a/selfdrive/ui/mici/layouts/settings/developer.py b/selfdrive/ui/mici/layouts/settings/developer.py index 9b3ad1bfe..2ffc6c2bb 100644 --- a/selfdrive/ui/mici/layouts/settings/developer.py +++ b/selfdrive/ui/mici/layouts/settings/developer.py @@ -1,9 +1,6 @@ -import pyray as rl -from collections.abc import Callable - from openpilot.common.time_helpers import system_time_valid -from openpilot.system.ui.widgets.scroller import Scroller -from openpilot.selfdrive.ui.mici.widgets.button import BigButton, BigToggle, BigParamControl +from openpilot.system.ui.widgets.scroller import NavScroller +from openpilot.selfdrive.ui.mici.widgets.button import BigButton, BigToggle, BigParamControl, BigCircleParamControl from openpilot.selfdrive.ui.mici.widgets.dialog import BigDialog, BigInputDialog, BigMultiOptionDialog from openpilot.selfdrive.ui.mici.layouts.settings.fingerprint_catalog import ( FingerprintModelOption, @@ -12,106 +9,119 @@ from openpilot.selfdrive.ui.mici.layouts.settings.fingerprint_catalog import ( shorten_model_label, ) from openpilot.system.ui.lib.application import gui_app -from openpilot.system.ui.widgets import NavWidget from openpilot.selfdrive.ui.layouts.settings.common import restart_needed_callback from openpilot.selfdrive.ui.ui_state import ui_state -from openpilot.selfdrive.ui.widgets.ssh_key import SshKeyAction +from openpilot.selfdrive.ui.widgets.ssh_key import SshKeyFetcher -class DeveloperLayoutMici(NavWidget): - def __init__(self, back_callback: Callable): +class DeveloperLayoutMici(NavScroller): + def __init__(self): super().__init__() - self.set_back_callback(back_callback) + self._ssh_fetcher = SshKeyFetcher(ui_state.params) + self._make_options, self._models_by_make, self._models_by_value, self._make_by_model = get_fingerprint_catalog() def github_username_callback(username: str): if username: - ssh_keys = SshKeyAction() - ssh_keys._fetch_ssh_key(username) - if not ssh_keys._error_message: - self._ssh_keys_btn.set_value(username) - else: - dlg = BigDialog("", ssh_keys._error_message) - gui_app.set_modal_overlay(dlg) + self._ssh_keys_btn.set_value("Loading...") + self._ssh_keys_btn.set_enabled(False) + + def on_response(error): + self._ssh_keys_btn.set_enabled(True) + if error is None: + self._ssh_keys_btn.set_value(username) + else: + self._ssh_keys_btn.set_value("Not set") + gui_app.push_widget(BigDialog("", error)) + + self._ssh_fetcher.fetch(username, on_response) + else: + self._ssh_fetcher.clear() + self._ssh_keys_btn.set_value("Not set") def ssh_keys_callback(): github_username = ui_state.params.get("GithubUsername") or "" - dlg = BigInputDialog("enter GitHub username", github_username, confirm_callback=github_username_callback) + dlg = BigInputDialog("enter GitHub username...", github_username, minimum_length=0, confirm_callback=github_username_callback) if not system_time_valid(): - dlg = BigDialog("Please connect to Wi-Fi to fetch your key", "") - gui_app.set_modal_overlay(dlg) + dlg = BigDialog("", "Please connect to Wi-Fi to fetch your key.") + gui_app.push_widget(dlg) return - gui_app.set_modal_overlay(dlg) + gui_app.push_widget(dlg) - txt_ssh = gui_app.texture("icons_mici/settings/developer/ssh.png", 77, 44) + txt_ssh = gui_app.texture("icons_mici/settings/developer/ssh.png", 56, 64) github_username = ui_state.params.get("GithubUsername") or "" self._ssh_keys_btn = BigButton("SSH keys", "Not set" if not github_username else github_username, icon=txt_ssh) self._ssh_keys_btn.set_click_callback(ssh_keys_callback) - # Fingerprint controls - ( - self._make_options, - self._models_by_make, - self._models_by_value, - self._make_by_model, - ) = get_fingerprint_catalog() self._car_make_btn = BigButton("car make", self._get_display_make()) self._car_make_btn.set_click_callback(self._open_make_selector) self._car_model_btn = BigButton("car model", self._get_display_model()) self._car_model_btn.set_click_callback(self._open_model_selector) self._force_fingerprint_toggle = BigParamControl( - "disable auto fingerprint", "ForceFingerprint", toggle_callback=lambda checked: restart_needed_callback(checked) + "disable auto fingerprint", "ForceFingerprint", toggle_callback=restart_needed_callback, ) # adb, ssh, ssh keys, debug mode, joystick debug mode, longitudinal maneuver mode, ip address # ******** Main Scroller ******** - self._adb_toggle = BigParamControl("enable ADB", "AdbEnabled") + self._adb_toggle = BigCircleParamControl(gui_app.texture("icons_mici/adb_short.png", 82, 82), "AdbEnabled", icon_offset=(0, 12)) + self._ssh_toggle = BigCircleParamControl(gui_app.texture("icons_mici/ssh_short.png", 82, 82), "SshEnabled", icon_offset=(0, 12)) self._use_prebuilt_toggle = BigParamControl("use prebuilt binaries", "UsePrebuilt") - self._ssh_toggle = BigParamControl("enable SSH", "SshEnabled") - self._joystick_toggle = BigToggle( - "joystick debug mode", initial_state=ui_state.params.get_bool("JoystickDebugMode"), toggle_callback=self._on_joystick_debug_mode - ) - self._long_maneuver_toggle = BigToggle( - "longitudinal maneuver mode", initial_state=ui_state.params.get_bool("LongitudinalManeuverMode"), toggle_callback=self._on_long_maneuver_mode - ) - self._alpha_long_toggle = BigToggle( - "alpha longitudinal", initial_state=ui_state.params.get_bool("AlphaLongitudinalEnabled"), toggle_callback=self._on_alpha_long_enabled - ) - self._debug_mode_toggle = BigParamControl( - "ui debug mode", "ShowDebugInfo", toggle_callback=lambda checked: (gui_app.set_show_touches(checked), gui_app.set_show_fps(checked)) - ) + self._joystick_toggle = BigToggle("joystick debug mode", + initial_state=ui_state.params.get_bool("JoystickDebugMode"), + toggle_callback=self._on_joystick_debug_mode) + self._long_maneuver_toggle = BigToggle("longitudinal maneuver mode", + initial_state=ui_state.params.get_bool("LongitudinalManeuverMode"), + toggle_callback=self._on_long_maneuver_mode) + self._lat_maneuver_toggle = BigToggle("lateral maneuver mode", + initial_state=ui_state.params.get_bool("LateralManeuverMode"), + toggle_callback=self._on_lat_maneuver_mode) + self._alpha_long_toggle = BigToggle("alpha longitudinal", + initial_state=ui_state.params.get_bool("AlphaLongitudinalEnabled"), + toggle_callback=self._on_alpha_long_enabled) + self._debug_mode_toggle = BigParamControl("ui debug mode", "ShowDebugInfo", + toggle_callback=lambda checked: (gui_app.set_show_touches(checked), + gui_app.set_show_fps(checked))) - self._scroller = Scroller( - [ - self._adb_toggle, - self._use_prebuilt_toggle, - self._ssh_toggle, - self._ssh_keys_btn, - self._car_make_btn, - self._car_model_btn, - self._force_fingerprint_toggle, - self._joystick_toggle, - self._long_maneuver_toggle, - self._alpha_long_toggle, - self._debug_mode_toggle, - ], - snap_items=False, - scroll_indicator=True, - edge_shadows=True, - ) + self._scroller.add_widgets([ + self._adb_toggle, + self._ssh_toggle, + self._ssh_keys_btn, + self._car_make_btn, + self._car_model_btn, + self._force_fingerprint_toggle, + self._use_prebuilt_toggle, + self._joystick_toggle, + self._long_maneuver_toggle, + self._lat_maneuver_toggle, + self._alpha_long_toggle, + self._debug_mode_toggle, + ]) # Toggle lists self._refresh_toggles = ( ("AdbEnabled", self._adb_toggle), - ("UsePrebuilt", self._use_prebuilt_toggle), ("SshEnabled", self._ssh_toggle), ("ForceFingerprint", self._force_fingerprint_toggle), + ("UsePrebuilt", self._use_prebuilt_toggle), ("JoystickDebugMode", self._joystick_toggle), ("LongitudinalManeuverMode", self._long_maneuver_toggle), + ("LateralManeuverMode", self._lat_maneuver_toggle), ("AlphaLongitudinalEnabled", self._alpha_long_toggle), ("ShowDebugInfo", self._debug_mode_toggle), ) - onroad_blocked_toggles = (self._adb_toggle, self._car_make_btn, self._car_model_btn, self._force_fingerprint_toggle, self._joystick_toggle) - engaged_blocked_toggles = (self._long_maneuver_toggle, self._alpha_long_toggle) + onroad_blocked_toggles = ( + self._adb_toggle, + self._car_make_btn, + self._car_model_btn, + self._force_fingerprint_toggle, + self._use_prebuilt_toggle, + self._joystick_toggle, + ) + release_blocked_toggles = (self._joystick_toggle, self._long_maneuver_toggle, self._lat_maneuver_toggle, self._alpha_long_toggle) + engaged_blocked_toggles = (self._long_maneuver_toggle, self._lat_maneuver_toggle, self._alpha_long_toggle) + + # Hide non-release toggles on release builds + for item in release_blocked_toggles: + item.set_visible(not ui_state.is_release) # Disable toggles that require offroad for item in onroad_blocked_toggles: @@ -128,23 +138,43 @@ class DeveloperLayoutMici(NavWidget): ui_state.add_offroad_transition_callback(self._update_toggles) + def _update_state(self): + super()._update_state() + self._ssh_fetcher.update() + + def show_event(self): + super().show_event() + self._car_make_btn.set_value(self._get_display_make()) + self._car_model_btn.set_value(self._get_display_model()) + self._update_toggles() + + def _show_option_dialog(self, title: str, options: list[str], current: str, on_selected): + dialog_holder: dict[str, BigMultiOptionDialog] = {} + + def on_confirm(): + on_selected(dialog_holder["dialog"].get_selected_option()) + + dialog = BigMultiOptionDialog(options=options, default=current, right_btn_callback=on_confirm) + dialog_holder["dialog"] = dialog + gui_app.push_widget(dialog) + def _get_display_make(self) -> str: - make = ui_state.params.get("CarMake") or "" + make = ui_state.params.get("CarMake", encoding="utf-8") or "" if make: return make - model = ui_state.params.get("CarModel") or "" + model = ui_state.params.get("CarModel", encoding="utf-8") or "" if model: return self._make_by_model.get(model, format_fingerprint_value(model.split("_", 1)[0])) return "Select" def _get_selected_model_option(self) -> FingerprintModelOption | None: - model = ui_state.params.get("CarModel") or "" + model = ui_state.params.get("CarModel", encoding="utf-8") or "" if not model: return None - model_name = ui_state.params.get("CarModelName") or "" - make = ui_state.params.get("CarMake") or self._make_by_model.get(model, "") + model_name = ui_state.params.get("CarModelName", encoding="utf-8") or "" + make = ui_state.params.get("CarMake", encoding="utf-8") or self._make_by_model.get(model, "") if make and model_name: for option in self._models_by_make.get(make, ()): if option.value == model and option.label == model_name: @@ -157,8 +187,8 @@ class DeveloperLayoutMici(NavWidget): if selected_option is not None: return selected_option.button_label - model = ui_state.params.get("CarModel") or "" - model_name = ui_state.params.get("CarModelName") or "" + model = ui_state.params.get("CarModel", encoding="utf-8") or "" + model_name = ui_state.params.get("CarModelName", encoding="utf-8") or "" if model: model_option = self._models_by_value.get(model) if model_option is not None: @@ -197,54 +227,40 @@ class DeveloperLayoutMici(NavWidget): def _open_make_selector(self): options = list(self._make_options) if not options: - gui_app.set_modal_overlay(BigDialog("No fingerprint list available", "")) + gui_app.push_widget(BigDialog("", "No fingerprint list available")) return current_make = self._get_display_make() default_make = current_make if current_make in options else options[0] - def on_selected(): - selected_make = option_dialog.get_selected_option() + def on_selected(selected_make: str): self._set_car_make(selected_make) - - current_model = ui_state.params.get("CarModel") or "" + current_model = ui_state.params.get("CarModel", encoding="utf-8") or "" available_models = {option.value for option in self._models_by_make.get(selected_make, ())} - if current_model not in available_models: - default_model = self._models_by_make[selected_make][0] - self._set_car_model(default_model) + if current_model not in available_models and self._models_by_make.get(selected_make): + self._set_car_model(self._models_by_make[selected_make][0]) - option_dialog = BigMultiOptionDialog(options=options, default=default_make, right_btn_callback=on_selected) - gui_app.set_modal_overlay(option_dialog) + self._show_option_dialog("select make", options, default_make, on_selected) def _open_model_selector(self): make = self._get_display_make() model_options = self._models_by_make.get(make, ()) if not model_options: - gui_app.set_modal_overlay(BigDialog("Select a car make first", "")) + gui_app.push_widget(BigDialog("", "Select a car make first")) return - current_model = ui_state.params.get("CarModel") or "" - current_model_name = ui_state.params.get("CarModelName") or "" + current_model = ui_state.params.get("CarModel", encoding="utf-8") or "" + current_model_name = ui_state.params.get("CarModelName", encoding="utf-8") or "" option_labels = [option.option_label for option in model_options] selected_by_label = {option.option_label: option for option in model_options} default_model = next((option.option_label for option in model_options if option.value == current_model and option.label == current_model_name), None) if default_model is None: default_model = next((option.option_label for option in model_options if option.value == current_model), option_labels[0]) - def on_selected(): - selected_model = selected_by_label[option_dialog.get_selected_option()] - self._set_car_model(selected_model) + def on_selected(selected_label: str): + self._set_car_model(selected_by_label[selected_label]) - option_dialog = BigMultiOptionDialog(options=option_labels, default=default_model, right_btn_callback=on_selected) - gui_app.set_modal_overlay(option_dialog) - - def show_event(self): - super().show_event() - self._scroller.show_event() - self._update_toggles() - - def _render(self, rect: rl.Rectangle): - self._scroller.render(rect) + self._show_option_dialog("select model", option_labels, default_model, on_selected) def _update_toggles(self): ui_state.update_params() @@ -252,7 +268,7 @@ class DeveloperLayoutMici(NavWidget): # CP gating if ui_state.CP is not None: alpha_avail = ui_state.CP.alphaLongitudinalAvailable - if not alpha_avail: + if not alpha_avail or ui_state.is_release: self._alpha_long_toggle.set_visible(False) ui_state.params.remove("AlphaLongitudinalEnabled") else: @@ -263,8 +279,12 @@ class DeveloperLayoutMici(NavWidget): if not long_man_enabled: self._long_maneuver_toggle.set_checked(False) ui_state.params.put_bool("LongitudinalManeuverMode", False) + + lat_man_enabled = ui_state.is_offroad() + self._lat_maneuver_toggle.set_enabled(lat_man_enabled) else: self._long_maneuver_toggle.set_enabled(False) + self._lat_maneuver_toggle.set_enabled(False) self._alpha_long_toggle.set_visible(False) # Refresh toggles from params to mirror external changes @@ -278,11 +298,24 @@ class DeveloperLayoutMici(NavWidget): ui_state.params.put_bool("JoystickDebugMode", state) ui_state.params.put_bool("LongitudinalManeuverMode", False) self._long_maneuver_toggle.set_checked(False) + ui_state.params.put_bool("LateralManeuverMode", False) + self._lat_maneuver_toggle.set_checked(False) def _on_long_maneuver_mode(self, state: bool): ui_state.params.put_bool("LongitudinalManeuverMode", state) ui_state.params.put_bool("JoystickDebugMode", False) self._joystick_toggle.set_checked(False) + ui_state.params.put_bool("LateralManeuverMode", False) + self._lat_maneuver_toggle.set_checked(False) + restart_needed_callback(state) + + def _on_lat_maneuver_mode(self, state: bool): + ui_state.params.put_bool("LateralManeuverMode", state) + ui_state.params.put_bool("ExperimentalMode", False) + ui_state.params.put_bool("JoystickDebugMode", False) + self._joystick_toggle.set_checked(False) + ui_state.params.put_bool("LongitudinalManeuverMode", False) + self._long_maneuver_toggle.set_checked(False) restart_needed_callback(state) def _on_alpha_long_enabled(self, state: bool): diff --git a/selfdrive/ui/mici/layouts/settings/device.py b/selfdrive/ui/mici/layouts/settings/device.py index a774560f3..3c165b5bb 100644 --- a/selfdrive/ui/mici/layouts/settings/device.py +++ b/selfdrive/ui/mici/layouts/settings/device.py @@ -1,47 +1,52 @@ import os import threading -import json -import hashlib -import secrets -import string import pyray as rl from enum import IntEnum from collections.abc import Callable -from pathlib import Path from openpilot.common.basedir import BASEDIR from openpilot.common.params import Params -from openpilot.common.swaglog import cloudlog from openpilot.common.time_helpers import system_time_valid -from openpilot.system.ui.widgets.scroller import Scroller -from openpilot.system.ui.lib.scroll_panel2 import GuiScrollPanel2 -from openpilot.selfdrive.ui.mici.widgets.button import BigButton, BigCircleButton, BigParamControl -from openpilot.selfdrive.ui.mici.widgets.dialog import BigMultiOptionDialog, BigDialog, BigConfirmationDialogV2, BigInputDialog +from openpilot.system.ui.widgets.scroller import NavRawScrollPanel, NavScroller +from openpilot.selfdrive.ui.mici.widgets.button import BigButton, BigCircleButton +from openpilot.selfdrive.ui.mici.widgets.dialog import BigDialog, BigConfirmationDialog from openpilot.selfdrive.ui.mici.widgets.pairing_dialog import PairingDialog from openpilot.selfdrive.ui.mici.onroad.driver_camera_dialog import DriverCameraDialog -from openpilot.selfdrive.ui.mici.layouts.onboarding import TrainingGuide +from openpilot.selfdrive.ui.mici.layouts.onboarding import TrainingGuide, TermsPage from openpilot.system.ui.lib.application import gui_app, FontWeight, MousePos from openpilot.system.ui.lib.multilang import tr -from openpilot.system.ui.widgets import Widget, NavWidget +from openpilot.system.ui.widgets import Widget from openpilot.selfdrive.ui.ui_state import device, ui_state -from openpilot.system.ui.widgets.label import MiciLabel +from openpilot.system.ui.widgets.label import UnifiedLabel from openpilot.system.ui.widgets.html_render import HtmlModal, HtmlRenderer from openpilot.system.athena.registration import UNREGISTERED_DONGLE_ID -from openpilot.system.hardware import PC -from openpilot.system.hardware.hw import Paths - -import qrcode -import numpy as np -class MiciFccModal(NavWidget): - BACK_TOUCH_AREA_PERCENTAGE = 0.1 +class ReviewTermsPage(TermsPage, NavScroller): + """TermsPage with NavWidget swipe-to-dismiss for reviewing in device settings.""" + def __init__(self): + super().__init__(on_accept=self.dismiss, on_decline=self.dismiss) + self._terms_header.set_visible(False) + self._must_accept_card.set_visible(False) + self._accept_button.set_visible(False) + self._decline_button.set_visible(False) + +class ReviewTrainingGuide(TrainingGuide): + def show_event(self): + super().show_event() + device.set_override_interactive_timeout(300) + + def hide_event(self): + super().hide_event() + device.set_override_interactive_timeout(None) + ui_state.params.put_bool_nonblocking("IsDriverViewEnabled", False) + + +class MiciFccModal(NavRawScrollPanel): def __init__(self, file_path: str | None = None, text: str | None = None): super().__init__() - self.set_back_callback(lambda: gui_app.set_modal_overlay(None)) self._content = HtmlRenderer(file_path=file_path, text=text) - self._scroll_panel = GuiScrollPanel2(horizontal=False) self._fcc_logo = gui_app.texture("icons_mici/settings/device/fcc_logo.png", 76, 64) def _render(self, rect: rl.Rectangle): @@ -58,39 +63,32 @@ class MiciFccModal(NavWidget): rl.draw_texture_ex(self._fcc_logo, fcc_pos, 0.0, 1.0, rl.WHITE) - return -1 - -def _engaged_confirmation_callback(callback: Callable, action_text: str): +def _engaged_confirmation_click(callback: Callable, action_text: str, icon: rl.Texture, exit_on_confirm: bool = True, red: bool = False): if not ui_state.engaged: def confirm_callback(): # Check engaged again in case it changed while the dialog was open + # TODO: if true, we stay on the dialog if not exit_on_confirm until normal onroad timeout if not ui_state.engaged: callback() - red = False - if action_text == "power off": - icon = "icons_mici/settings/device/power.png" - red = True - elif action_text == "reboot": - icon = "icons_mici/settings/device/reboot.png" - elif action_text == "reset": - icon = "icons_mici/settings/device/lkas.png" - elif action_text == "reset driver monitoring": - icon = "icons_mici/settings/device/cameras.png" - elif action_text == "uninstall": - icon = "icons_mici/settings/device/uninstall.png" - else: - # TODO: check - icon = "icons_mici/settings/comma_icon.png" - - dlg: BigConfirmationDialogV2 | BigDialog = BigConfirmationDialogV2(f"slide to\n{action_text.lower()}", icon, red=red, - exit_on_confirm=action_text in {"reset", "reset driver monitoring"}, - confirm_callback=confirm_callback) - gui_app.set_modal_overlay(dlg) + gui_app.push_widget(BigConfirmationDialog(f"slide to\n{action_text.lower()}", icon, confirm_callback, exit_on_confirm=exit_on_confirm, red=red)) else: - dlg = BigDialog(f"Disengage to {action_text}", "") - gui_app.set_modal_overlay(dlg) + gui_app.push_widget(BigDialog("", f"Disengage to {action_text}")) + + +class EngagedConfirmationCircleButton(BigCircleButton): + def __init__(self, title: str, icon: rl.Texture, callback: Callable[[], None], exit_on_confirm: bool = True, + red: bool = False, icon_offset: tuple[int, int] = (0, 0)): + super().__init__(icon, red, icon_offset) + self.set_click_callback(lambda: _engaged_confirmation_click(callback, title, icon, exit_on_confirm=exit_on_confirm, red=red)) + + +class EngagedConfirmationButton(BigButton): + def __init__(self, text: str, action_text: str, icon: rl.Texture, callback: Callable[[], None], + exit_on_confirm: bool = True, red: bool = False): + super().__init__(text, "", icon) + self.set_click_callback(lambda: _engaged_confirmation_click(callback, action_text, icon, exit_on_confirm=exit_on_confirm, red=red)) class DeviceInfoLayoutMici(Widget): @@ -100,14 +98,15 @@ class DeviceInfoLayoutMici(Widget): self.set_rect(rl.Rectangle(0, 0, 360, 180)) params = Params() - header_color = rl.Color(255, 255, 255, int(255 * 0.9)) subheader_color = rl.Color(255, 255, 255, int(255 * 0.9 * 0.65)) max_width = int(self._rect.width - 20) - self._dongle_id_label = MiciLabel("device ID", 48, width=max_width, color=header_color, font_weight=FontWeight.DISPLAY) - self._dongle_id_text_label = MiciLabel(params.get("DongleId") or 'N/A', 32, width=max_width, color=subheader_color, font_weight=FontWeight.ROMAN) + self._dongle_id_label = UnifiedLabel("device ID", 48, max_width=max_width, font_weight=FontWeight.DISPLAY, wrap_text=False) + self._dongle_id_text_label = UnifiedLabel(params.get("DongleId") or 'N/A', 32, max_width=max_width, text_color=subheader_color, + font_weight=FontWeight.ROMAN, wrap_text=False) - self._serial_number_label = MiciLabel("serial", 48, color=header_color, font_weight=FontWeight.DISPLAY) - self._serial_number_text_label = MiciLabel(params.get("HardwareSerial") or 'N/A', 32, width=max_width, color=subheader_color, font_weight=FontWeight.ROMAN) + self._serial_number_label = UnifiedLabel("serial", 48, max_width=max_width, font_weight=FontWeight.DISPLAY, wrap_text=False) + self._serial_number_text_label = UnifiedLabel(params.get("HardwareSerial") or 'N/A', 32, max_width=max_width, text_color=subheader_color, + font_weight=FontWeight.ROMAN, wrap_text=False) def _render(self, _): self._dongle_id_label.set_position(self._rect.x + 20, self._rect.y - 10) @@ -131,9 +130,14 @@ class UpdaterState(IntEnum): class PairBigButton(BigButton): def __init__(self): - super().__init__("pair", "connect.comma.ai", "icons_mici/settings/comma_icon.png") + super().__init__("pair", "connect.comma.ai", gui_app.texture("icons_mici/settings/comma_icon.png", 33, 60)) + + def _get_label_font_size(self): + return 64 def _update_state(self): + super()._update_state() + if ui_state.prime_state.is_paired(): self.set_text("paired") if ui_state.prime_state.is_prime(): @@ -152,191 +156,27 @@ class PairBigButton(BigButton): return dlg: BigDialog | PairingDialog if not system_time_valid(): - dlg = BigDialog(tr("Please connect to Wi-Fi to complete initial pairing"), "") + dlg = BigDialog("", tr("Please connect to Wi-Fi to complete initial pairing.")) elif UNREGISTERED_DONGLE_ID == (ui_state.params.get("DongleId") or UNREGISTERED_DONGLE_ID): - dlg = BigDialog(tr("Device must be registered with the comma.ai backend to pair"), "") + dlg = BigDialog("", tr("Device must be registered with the comma.ai backend to pair.")) else: dlg = PairingDialog() - gui_app.set_modal_overlay(dlg) - - -class GalaxyQRDialog(NavWidget): - def __init__(self, url: str): - super().__init__() - self._url = url - self._qr_texture: rl.Texture | None = None - - self.set_back_callback(lambda: gui_app.set_modal_overlay(None)) - - self._title = MiciLabel("pair with galaxy", 48, font_weight=FontWeight.BOLD, - color=rl.Color(255, 255, 255, int(255 * 0.9)), line_height=40, wrap_text=True) - self._generate_qr_code() - - def _generate_qr_code(self) -> None: - try: - qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=0) - qr.add_data(self._url) - qr.make(fit=True) - - pil_img = qr.make_image(fill_color="white", back_color="black").convert("RGBA") - img_array = np.array(pil_img, dtype=np.uint8) - - if self._qr_texture and self._qr_texture.id != 0: - rl.unload_texture(self._qr_texture) - - rl_image = rl.Image() - rl_image.data = rl.ffi.cast("void *", img_array.ctypes.data) - rl_image.width = pil_img.width - rl_image.height = pil_img.height - rl_image.mipmaps = 1 - rl_image.format = rl.PixelFormat.PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 - self._qr_texture = rl.load_texture_from_image(rl_image) - except Exception as e: - cloudlog.warning(f"Galaxy QR generation failed: {e}") - self._qr_texture = None - - def _render(self, rect: rl.Rectangle): - if self._qr_texture is not None: - scale = rect.height / self._qr_texture.height - pos = rl.Vector2(rect.x + 8, rect.y) - rl.draw_texture_ex(self._qr_texture, pos, 0.0, scale, rl.WHITE) - else: - rl.draw_text_ex( - gui_app.font(FontWeight.BOLD), - "QR Code Error", - rl.Vector2(rect.x + 20, rect.y + rect.height // 2 - 15), - 30, - 0.0, - rl.RED, - ) - - label_x = rect.x + 8 + rect.height + 24 - self._title.set_width(int(rect.width - label_x)) - self._title.set_position(label_x, rect.y + 28) - self._title.render() - - return -1 - - def __del__(self): - if self._qr_texture and self._qr_texture.id != 0: - rl.unload_texture(self._qr_texture) - - -class GalaxyBigButton(BigButton): - _SLUG_CHARS = string.ascii_letters + string.digits - - def __init__(self): - super().__init__("galaxy", "", gui_app.starpilot_texture("../system/the_pond/assets/images/main_logo.png", 64, 64)) - self._galaxy_dir = Path(Paths.comma_home()) / "starpilot" / "data" / "galaxy" if PC else Path("/data/galaxy") - self._auth_path = self._galaxy_dir / "glxyauth" - self._session_path = self._galaxy_dir / "glxysession" - self._slug_path = self._galaxy_dir / "glxyslug" - - def _is_paired(self) -> bool: - try: - return len(self._auth_path.read_text(encoding="utf-8").strip()) == 64 - except Exception: - return False - - def _get_slug(self) -> str: - try: - return self._slug_path.read_text(encoding="utf-8").strip() - except Exception: - return "" - - def _show_qr(self): - slug = self._get_slug() - if not slug: - gui_app.set_modal_overlay(BigDialog("Galaxy is not paired yet.", "")) - return - gui_app.set_modal_overlay(GalaxyQRDialog(f"https://galaxy.firestar.link/{slug}")) - - def _pair_with_pin(self, pin: str): - clean_pin = str(pin or "").strip() - if len(clean_pin) < 6: - gui_app.set_modal_overlay(BigDialog("PIN must be at least 6 characters.", "")) - return - - try: - self._galaxy_dir.mkdir(parents=True, exist_ok=True) - self._auth_path.write_text(hashlib.sha256(clean_pin.encode("utf-8")).hexdigest(), encoding="utf-8") - self._session_path.write_text(secrets.token_hex(32), encoding="utf-8") - slug = "".join(secrets.choice(self._SLUG_CHARS) for _ in range(16)) - self._slug_path.write_text(slug, encoding="utf-8") - except Exception as e: - cloudlog.warning(f"Galaxy pairing write failed: {e}") - gui_app.set_modal_overlay(BigDialog("Failed to pair with Galaxy.", "")) - return - - self._show_qr() - - def _unpair(self): - for path in (self._auth_path, self._session_path, self._slug_path): - try: - path.unlink(missing_ok=True) - except TypeError: - # Python < 3.8 fallback - if path.exists(): - path.unlink() - except Exception as e: - cloudlog.warning(f"Galaxy unpair cleanup failed for {path}: {e}") - - def _handle_mouse_release(self, mouse_pos: MousePos): - super()._handle_mouse_release(mouse_pos) - - if self._is_paired(): - show_qr_option = "show qr" - unpair_option = "unpair" - - def on_option_selected(): - selected = option_dialog.get_selected_option() - if selected == show_qr_option: - self._show_qr() - elif selected == unpair_option: - confirm = BigConfirmationDialogV2( - "slide to\nunpair galaxy", - "icons_mici/settings/device/uninstall.png", - red=True, - confirm_callback=self._unpair, - ) - gui_app.set_modal_overlay(confirm) - - option_dialog = BigMultiOptionDialog( - options=[show_qr_option, unpair_option], - default=show_qr_option, - right_btn_callback=on_option_selected, - ) - gui_app.set_modal_overlay(option_dialog) - return - - pin_dialog = BigInputDialog( - hint="enter galaxy pin...", - default_text="", - minimum_length=6, - confirm_callback=self._pair_with_pin, - ) - gui_app.set_modal_overlay(pin_dialog) - - def _update_state(self): - self.set_value("paired" if self._is_paired() else "pair") + gui_app.push_widget(dlg) UPDATER_TIMEOUT = 10.0 # seconds to wait for updater to respond -UPDATE_SCREEN_TIMEOUT = 180 # Keep display awake for 3 minutes during long-running update phases. -EXTENDED_TIMEOUT_UPDATER_STATES = {"downloading...", "finalizing update..."} class UpdateOpenpilotBigButton(BigButton): def __init__(self): - self._txt_update_icon = gui_app.texture("icons_mici/settings/device/update.png", 64, 64) - self._txt_reboot_icon = gui_app.texture("icons_mici/settings/device/reboot.png", 64, 64) + self._txt_update_icon = gui_app.texture("icons_mici/settings/device/update.png", 64, 75) + self._txt_reboot_icon = gui_app.texture("icons_mici/settings/device/reboot.png", 64, 70) self._txt_up_to_date_icon = gui_app.texture("icons_mici/settings/device/up_to_date.png", 64, 64) super().__init__("update openpilot", "", self._txt_update_icon) self._waiting_for_updater_t: float | None = None self._hide_value_t: float | None = None self._state: UpdaterState = UpdaterState.IDLE - self._extended_timeout_enabled = False ui_state.add_offroad_transition_callback(self.offroad_transition) @@ -345,9 +185,11 @@ class UpdateOpenpilotBigButton(BigButton): self.set_enabled(True) def _handle_mouse_release(self, mouse_pos: MousePos): + super()._handle_mouse_release(mouse_pos) + if not system_time_valid(): - dlg = BigDialog(tr("Please connect to Wi-Fi to update"), "") - gui_app.set_modal_overlay(dlg) + dlg = BigDialog("", tr("Please connect to Wi-Fi to update.")) + gui_app.push_widget(dlg) return self.set_enabled(False) @@ -364,17 +206,6 @@ class UpdateOpenpilotBigButton(BigButton): threading.Thread(target=run, daemon=True).start() - def hide_event(self): - super().hide_event() - self._set_extended_timeout(False) - - def _set_extended_timeout(self, enabled: bool): - if self._extended_timeout_enabled == enabled: - return - - self._extended_timeout_enabled = enabled - device.set_override_interactive_timeout(UPDATE_SCREEN_TIMEOUT if enabled else None) - def set_value(self, value: str): super().set_value(value) if value: @@ -383,13 +214,13 @@ class UpdateOpenpilotBigButton(BigButton): self.set_text("update openpilot") def _update_state(self): + super()._update_state() + if ui_state.started: - self._set_extended_timeout(False) self.set_enabled(False) return updater_state = ui_state.params.get("UpdaterState") or "" - should_extend_timeout = updater_state in EXTENDED_TIMEOUT_UPDATER_STATES failed_count = ui_state.params.get("UpdateFailedCount") failed = False if failed_count is None else int(failed_count) > 0 @@ -411,7 +242,7 @@ class UpdateOpenpilotBigButton(BigButton): if self._waiting_for_updater_t is not None and rl.get_time() - self._waiting_for_updater_t > UPDATER_TIMEOUT: self.set_rotate_icon(False) - self.set_value("updater failed to respond") + self.set_value("updater failed\nto respond") self._state = UpdaterState.IDLE self._hide_value_t = rl.get_time() @@ -453,16 +284,12 @@ class UpdateOpenpilotBigButton(BigButton): if self._state != UpdaterState.WAITING_FOR_UPDATER: self._waiting_for_updater_t = None - self._set_extended_timeout(should_extend_timeout) - -class DeviceLayoutMici(NavWidget): - def __init__(self, back_callback: Callable): +class DeviceLayoutMici(NavScroller): + def __init__(self): super().__init__() self._fcc_dialog: HtmlModal | None = None - self._driver_camera: DriverCameraDialog | None = None - self._training_guide: TrainingGuide | None = None def power_off_callback(): ui_state.params.put_bool("DoShutdown", True) @@ -479,106 +306,52 @@ class DeviceLayoutMici(NavWidget): params.remove("LiveDelay") params.put_bool("OnroadCycleRequested", True) - def reset_driver_monitoring_callback(): - params = ui_state.params - params.remove("IsRhdDetected") - params.put_bool("OnroadCycleRequested", True) - def uninstall_openpilot_callback(): ui_state.params.put_bool("DoUninstall", True) - reset_driver_monitoring_btn = BigButton("reset driver monitoring calibration", "", "icons_mici/settings/device/cameras.png") - reset_driver_monitoring_btn.set_click_callback(lambda: _engaged_confirmation_callback(reset_driver_monitoring_callback, "reset driver monitoring")) + reset_calibration_btn = EngagedConfirmationButton("reset calibration", "reset", gui_app.texture("icons_mici/settings/device/lkas.png", 122, 64), + reset_calibration_callback) - reset_calibration_btn = BigButton("reset calibration", "", "icons_mici/settings/device/lkas.png") - reset_calibration_btn.set_click_callback(lambda: _engaged_confirmation_callback(reset_calibration_callback, "reset")) + uninstall_openpilot_btn = EngagedConfirmationButton("uninstall openpilot", "uninstall", + gui_app.texture("icons_mici/settings/device/uninstall.png", 64, 64), + uninstall_openpilot_callback, exit_on_confirm=False) - uninstall_openpilot_btn = BigButton("uninstall openpilot", "", "icons_mici/settings/device/uninstall.png") - uninstall_openpilot_btn.set_click_callback(lambda: _engaged_confirmation_callback(uninstall_openpilot_callback, "uninstall")) + reboot_btn = EngagedConfirmationCircleButton("reboot", gui_app.texture("icons_mici/settings/device/reboot.png", 64, 70), + reboot_callback, exit_on_confirm=False) - reboot_btn = BigCircleButton("icons_mici/settings/device/reboot.png", red=False) - reboot_btn.set_click_callback(lambda: _engaged_confirmation_callback(reboot_callback, "reboot")) + self._power_off_btn = EngagedConfirmationCircleButton("power off", gui_app.texture("icons_mici/settings/device/power.png", 64, 66), + power_off_callback, exit_on_confirm=False, red=True) + self._power_off_btn.set_visible(lambda: not ui_state.ignition) - self._power_off_btn = BigCircleButton("icons_mici/settings/device/power.png", red=True) - self._power_off_btn.set_click_callback(lambda: _engaged_confirmation_callback(power_off_callback, "power off")) - - self._load_languages() - - def language_callback(): - def selected_language_callback(): - selected_language = dlg.get_selected_option() - ui_state.params.put("LanguageSetting", self._languages[selected_language]) - - current_language_name = ui_state.params.get("LanguageSetting") - current_language = next(name for name, lang in self._languages.items() if lang == current_language_name) - - dlg = BigMultiOptionDialog(list(self._languages), default=current_language, right_btn_callback=selected_language_callback) - gui_app.set_modal_overlay(dlg) - - # lang_button = BigButton("change language", "", "icons_mici/settings/device/language.png") - # lang_button.set_click_callback(language_callback) - - regulatory_btn = BigButton("regulatory info", "", "icons_mici/settings/device/info.png") + regulatory_btn = BigButton("regulatory info", "", gui_app.texture("icons_mici/settings/device/info.png", 64, 64)) regulatory_btn.set_click_callback(self._on_regulatory) - driver_cam_btn = BigButton("driver camera preview", "", "icons_mici/settings/device/cameras.png") - driver_cam_btn.set_click_callback(self._show_driver_camera) + driver_cam_btn = BigButton("driver\ncamera preview", "", gui_app.texture("icons_mici/settings/device/cameras.png", 64, 64)) + driver_cam_btn.set_click_callback(lambda: gui_app.push_widget(DriverCameraDialog())) driver_cam_btn.set_enabled(lambda: ui_state.is_offroad()) - review_training_guide_btn = BigButton("review training guide", "", "icons_mici/settings/device/info.png") - review_training_guide_btn.set_click_callback(self._on_review_training_guide) + review_training_guide_btn = BigButton("review\ntraining guide", "", gui_app.texture("icons_mici/settings/device/info.png", 64, 64)) + review_training_guide_btn.set_click_callback(lambda: gui_app.push_widget(ReviewTrainingGuide(completed_callback=lambda: gui_app.pop_widgets_to(self)))) review_training_guide_btn.set_enabled(lambda: ui_state.is_offroad()) - self._scroller = Scroller([ + terms_btn = BigButton("terms &\nconditions", "", gui_app.texture("icons_mici/settings/device/info.png", 64, 64)) + terms_btn.set_click_callback(lambda: gui_app.push_widget(ReviewTermsPage())) + + self._scroller.add_widgets([ DeviceInfoLayoutMici(), UpdateOpenpilotBigButton(), - BigParamControl("automatically update starpilot", "AutomaticUpdates"), PairBigButton(), review_training_guide_btn, driver_cam_btn, - reset_driver_monitoring_btn, - # lang_button, + terms_btn, + regulatory_btn, reset_calibration_btn, uninstall_openpilot_btn, - regulatory_btn, reboot_btn, self._power_off_btn, - ], snap_items=False, scroll_indicator=True, edge_shadows=True) - - # Set up back navigation - self.set_back_callback(back_callback) - - # Hide power off button when onroad - ui_state.add_offroad_transition_callback(self._offroad_transition) + ]) def _on_regulatory(self): if not self._fcc_dialog: self._fcc_dialog = MiciFccModal(os.path.join(BASEDIR, "selfdrive/assets/offroad/mici_fcc.html")) - gui_app.set_modal_overlay(self._fcc_dialog, callback=setattr(self, '_fcc_dialog', None)) - - def _offroad_transition(self): - self._power_off_btn.set_visible(ui_state.is_offroad()) - - def _show_driver_camera(self): - if not self._driver_camera: - self._driver_camera = DriverCameraDialog() - gui_app.set_modal_overlay(self._driver_camera, callback=lambda result: setattr(self, '_driver_camera', None)) - - def _on_review_training_guide(self): - if not self._training_guide: - def completed_callback(): - gui_app.set_modal_overlay(None) - - self._training_guide = TrainingGuide(completed_callback=completed_callback) - gui_app.set_modal_overlay(self._training_guide, callback=lambda result: setattr(self, '_training_guide', None)) - - def _load_languages(self): - with open(os.path.join(BASEDIR, "selfdrive/ui/translations/languages.json")) as f: - self._languages = json.load(f) - - def show_event(self): - super().show_event() - self._scroller.show_event() - - def _render(self, rect: rl.Rectangle): - self._scroller.render(rect) + gui_app.push_widget(self._fcc_dialog) diff --git a/selfdrive/ui/mici/layouts/settings/driving_model.py b/selfdrive/ui/mici/layouts/settings/driving_model.py index eab57a220..3226ba6f8 100644 --- a/selfdrive/ui/mici/layouts/settings/driving_model.py +++ b/selfdrive/ui/mici/layouts/settings/driving_model.py @@ -18,7 +18,7 @@ from openpilot.selfdrive.ui.mici.widgets.button import BigButton from openpilot.selfdrive.ui.mici.widgets.dialog import BigDialog, BigDialogBase, BigMultiOptionDialog from openpilot.selfdrive.ui.ui_state import ui_state from openpilot.system.ui.lib.application import gui_app, FontWeight -from openpilot.system.ui.widgets import DialogResult, Widget +from openpilot.system.ui.widgets import Widget from openpilot.system.ui.widgets.label import gui_label import pyray as rl @@ -75,17 +75,19 @@ def _split_param(param_value: str | None) -> list[str]: class DownloadProgressDialog(BigDialogBase): def __init__(self, params_memory: Params, is_downloading: Callable[[], bool], cancel_callback: Callable[[], None], - is_terminal_progress: Callable[[str], bool]): + is_terminal_progress: Callable[[str], bool], on_close: Callable[[], None] | None = None): super().__init__() self._params_memory = params_memory self._is_downloading = is_downloading self._cancel_callback = cancel_callback self._is_terminal_progress = is_terminal_progress + self._on_close = on_close self._progress = 0.0 self._status = "Downloading..." self._terminal_progress_since = 0.0 self._downloading = False + self._dismissed = False self._cancel_btn = DownloadActionButton("cancel download") self._cancel_btn.set_click_callback(self._cancel_callback) @@ -140,7 +142,9 @@ class DownloadProgressDialog(BigDialogBase): if self._terminal_progress_since == 0.0: self._terminal_progress_since = time.monotonic() elif time.monotonic() - self._terminal_progress_since >= _DOWNLOAD_DIALOG_CLOSE_SECONDS: - self._ret = DialogResult.CONFIRM + if not self._dismissed: + self._dismissed = True + self.dismiss(self._on_close) else: self._terminal_progress_since = 0.0 @@ -235,8 +239,6 @@ class DownloadProgressDialog(BigDialogBase): alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER, ) - return self._ret - class DownloadActionButton(Widget): def __init__(self, label: str): @@ -276,7 +278,7 @@ class DownloadActionButton(Widget): class DrivingModelBigButton(BigButton): def __init__(self): - super().__init__("driving model", "", "icons_mici/settings/device/lkas.png") + super().__init__("driving model", "", gui_app.texture("icons_mici/settings/device/lkas.png", 72, 56)) self._params = Params() self._params_memory = Params(memory=True) self._model_manager = ModelManager(self._params, self._params_memory) @@ -285,12 +287,17 @@ class DrivingModelBigButton(BigButton): self._active_job = "" self._manifest_last_refresh_mono = 0.0 self._terminal_progress_since = 0.0 + self._sub_label.set_font_size(32) + self._sub_label._scroll = True + self._sub_label._elide = False + self._sub_label._wrap_text = False self.set_click_callback(self._open_manager_menu) self.refresh() def show_event(self): super().show_event() + self._sub_label.reset_scroll() self.refresh() # Always fetch manifest once when this settings pane opens. self._maybe_refresh_manifest(force=(self._manifest_last_refresh_mono == 0.0)) @@ -298,6 +305,31 @@ class DrivingModelBigButton(BigButton): def refresh(self): self._update_button_value() + def set_value(self, value: str): + super().set_value(value) + self._sub_label.reset_scroll() + + def _get_label_font_size(self): + return 42 + + def _width_hint(self) -> int: + icon_width = self._txt_icon.width + 16 if self._txt_icon else 0 + return int(self._rect.width - self.LABEL_HORIZONTAL_PADDING * 2 - icon_width) + + def _show_option_dialog(self, title: str, options: list[str], current: str | None, on_selected: Callable[[str], None], + back_callback: Callable[[], None] | None = None): + dialog_holder: dict[str, BigMultiOptionDialog] = {} + + def on_confirm(): + on_selected(dialog_holder["dialog"].get_selected_option()) + + default_option = current if current in options else None + dialog = BigMultiOptionDialog(options=options, default=default_option, right_btn_callback=on_confirm) + if back_callback is not None: + dialog.set_back_callback(back_callback) + dialog_holder["dialog"] = dialog + gui_app.push_widget(dialog) + def _update_state(self): super()._update_state() self._process_terminal_progress() @@ -315,8 +347,7 @@ class DrivingModelBigButton(BigButton): if not options: return - def on_confirm(): - value = option_dialog.get_selected_option() + def on_selected(value: str): if value == "set sort mode": self._open_sort_mode_dialog() elif value == "switch model": @@ -328,9 +359,7 @@ class DrivingModelBigButton(BigButton): elif value == "refresh manifest": self._maybe_refresh_manifest(force=True) - default_option = "switch model" if "switch model" in options else options[0] - option_dialog = BigMultiOptionDialog(options=options, default=default_option, right_btn_callback=on_confirm) - gui_app.set_modal_overlay(option_dialog) + self._show_option_dialog("driving model", options, None, on_selected) def _open_switch_dialog(self): self._maybe_refresh_manifest(force=False) @@ -346,7 +375,8 @@ class DrivingModelBigButton(BigButton): return current_key = self._get_current_model_key() - self._show_model_dialog("Select Driving Model", installed, current_key, self._switch_model) + self._show_model_dialog("Select Driving Model", installed, current_key, self._switch_model, + back_callback=self._open_manager_menu) def _open_download_dialog(self): if ui_state.started: @@ -365,7 +395,8 @@ class DrivingModelBigButton(BigButton): self._show_message("All models downloaded", "No additional models are available.", return_to_manager=True) return - self._show_model_dialog("Download Driving Model", missing, "", self._start_model_download) + self._show_model_dialog("Download Driving Model", missing, "", self._start_model_download, + back_callback=self._open_manager_menu) def _download_all_missing(self): if ui_state.started: @@ -398,22 +429,20 @@ class DrivingModelBigButton(BigButton): options = [_SORT_MODE_LABELS[mode] for mode in _SORT_MODES] current_mode = self._get_sort_mode() - def on_confirm(): - selected_label = sort_dialog.get_selected_option() + def on_selected(selected_label: str): selected_mode = _LABEL_TO_SORT_MODE.get(selected_label, _SORT_MODE_ALPHABETICAL) self._params.put(_SORT_MODE_PARAM, selected_mode) - self._open_manager_menu_if_no_overlay() + self._open_manager_menu() - sort_dialog = BigMultiOptionDialog(options=options, default=_SORT_MODE_LABELS[current_mode], right_btn_callback=on_confirm) - sort_dialog.set_back_callback(self._open_manager_menu) - gui_app.set_modal_overlay(sort_dialog) + self._show_option_dialog("sort mode", options, _SORT_MODE_LABELS[current_mode], on_selected, + back_callback=self._open_manager_menu) def _get_sort_mode(self) -> str: mode = (self._params.get(_SORT_MODE_PARAM, encoding="utf-8") or "").strip() return mode if mode in _SORT_MODES else _SORT_MODE_ALPHABETICAL def _show_model_dialog(self, title: str, entries: list[ModelEntry], current_key: str, - on_selected: Callable[[str], None]): + on_selected: Callable[[str], None], back_callback: Callable[[], None] | None = None): options, option_to_key, key_to_option = self._build_model_options(entries) if not options: self._show_message("No models available", "Refresh manifest and try again.", return_to_manager=True) @@ -421,15 +450,12 @@ class DrivingModelBigButton(BigButton): default_option = key_to_option.get(current_key, options[0]) - def on_confirm(): - model_key = option_to_key.get(model_dialog.get_selected_option()) + def on_dialog_selected(selected_option: str): + model_key = option_to_key.get(selected_option) if model_key: on_selected(model_key) - self._open_manager_menu_if_no_overlay() - model_dialog = BigMultiOptionDialog(options=options, default=default_option, right_btn_callback=on_confirm) - model_dialog.set_back_callback(self._open_manager_menu) - gui_app.set_modal_overlay(model_dialog) + self._show_option_dialog(title, options, default_option, on_dialog_selected, back_callback=back_callback) def _build_model_options(self, entries: list[ModelEntry]) -> tuple[list[str], dict[str, str], dict[str, str]]: # Ensure display names are unique before applying status text (date/favorite). @@ -712,21 +738,18 @@ class DrivingModelBigButton(BigButton): lower = progress.lower() return any(pattern in lower for pattern in _TERMINAL_PROGRESS_PATTERNS) - def _open_manager_menu_if_no_overlay(self): - if gui_app._modal_overlay.overlay is None: - self._open_manager_menu() - def _show_download_progress_dialog(self): dialog = DownloadProgressDialog( params_memory=self._params_memory, is_downloading=self._is_download_job_running, cancel_callback=self._cancel_download, is_terminal_progress=self._is_terminal_progress, + on_close=self._open_manager_menu, ) - gui_app.set_modal_overlay(dialog, callback=lambda _result: self._open_manager_menu()) + gui_app.push_widget(dialog) def _show_message(self, title: str, description: str, return_to_manager: bool = False): dialog = BigDialog(title, description) if return_to_manager: dialog.set_back_callback(self._open_manager_menu) - gui_app.set_modal_overlay(dialog) + gui_app.push_widget(dialog) diff --git a/selfdrive/ui/mici/layouts/settings/firehose.py b/selfdrive/ui/mici/layouts/settings/firehose.py index d305906e1..4c27a909f 100644 --- a/selfdrive/ui/mici/layouts/settings/firehose.py +++ b/selfdrive/ui/mici/layouts/settings/firehose.py @@ -13,7 +13,8 @@ from openpilot.system.ui.lib.application import gui_app, FontWeight, FONT_SCALE from openpilot.system.ui.lib.wrap_text import wrap_text from openpilot.system.ui.lib.scroll_panel2 import GuiScrollPanel2 from openpilot.system.ui.lib.multilang import tr, trn, tr_noop -from openpilot.system.ui.widgets import Widget, NavWidget +from openpilot.system.ui.widgets import Widget +from openpilot.system.ui.widgets.scroller import NavRawScrollPanel TITLE = tr_noop("Firehose Mode") DESCRIPTION = tr_noop( @@ -80,12 +81,12 @@ class FirehoseLayoutBase(Widget): def _render(self, rect: rl.Rectangle): # compute total content height for scrolling content_height = self._measure_content_height(rect) - scroll_offset = round(self._scroll_panel.update(rect, content_height)) + scroll_offset = self._scroll_panel.update(rect, content_height) # start drawing with offset - x = int(rect.x + 40) - y = int(rect.y + 40 + scroll_offset) - w = int(rect.width - 80) + x = rect.x + 40 + y = rect.y + 40 + scroll_offset + w = rect.width - 80 # Title title_text = tr(TITLE) @@ -99,7 +100,7 @@ class FirehoseLayoutBase(Widget): y += 20 # Separator - rl.draw_rectangle(x, y, w, 2, self.GRAY) + rl.draw_rectangle_rec(rl.Rectangle(x, y, w, 2), self.GRAY) y += 20 # Status @@ -115,7 +116,7 @@ class FirehoseLayoutBase(Widget): y += 20 # Separator - rl.draw_rectangle(x, y, w, 2, self.GRAY) + rl.draw_rectangle_rec(rl.Rectangle(x, y, w, 2), self.GRAY) y += 20 # Instructions intro @@ -132,9 +133,6 @@ class FirehoseLayoutBase(Widget): y = self._draw_wrapped_text(x, y, w, tr(answer), gui_app.font(FontWeight.ROMAN), 32, self.LIGHT_GRAY) y += 20 - # return value not used by NavWidget - return -1 - def _draw_wrapped_text(self, x, y, width, text, font, font_size, color): wrapped = wrap_text(font, text, font_size, width) for line in wrapped: @@ -220,9 +218,5 @@ class FirehoseLayoutBase(Widget): time.sleep(self.UPDATE_INTERVAL) -class FirehoseLayout(FirehoseLayoutBase, NavWidget): - BACK_TOUCH_AREA_PERCENTAGE = 0.1 - - def __init__(self, back_callback): - super().__init__() - self.set_back_callback(back_callback) +class FirehoseLayout(NavRawScrollPanel, FirehoseLayoutBase): + pass diff --git a/selfdrive/ui/mici/layouts/settings/galaxy.py b/selfdrive/ui/mici/layouts/settings/galaxy.py new file mode 100644 index 000000000..2eafabe1a --- /dev/null +++ b/selfdrive/ui/mici/layouts/settings/galaxy.py @@ -0,0 +1,159 @@ +import hashlib +import secrets +import string +from pathlib import Path + +import numpy as np +import pyray as rl +import qrcode + +from openpilot.common.swaglog import cloudlog +from openpilot.selfdrive.ui.mici.widgets.button import BigButton +from openpilot.selfdrive.ui.mici.widgets.dialog import BigDialog, BigConfirmationDialog, BigInputDialog, BigMultiOptionDialog +from openpilot.system.hardware import PC +from openpilot.system.hardware.hw import Paths +from openpilot.system.ui.lib.application import FontWeight, gui_app +from openpilot.system.ui.widgets.label import UnifiedLabel +from openpilot.system.ui.widgets.nav_widget import NavWidget + + +class GalaxyQRDialog(NavWidget): + def __init__(self, url: str): + super().__init__() + self._url = url + self._qr_texture: rl.Texture | None = None + self._title = UnifiedLabel("pair with galaxy", font_size=48, font_weight=FontWeight.BOLD, line_height=0.8) + self._generate_qr_code() + + def _generate_qr_code(self) -> None: + try: + qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=0) + qr.add_data(self._url) + qr.make(fit=True) + + pil_img = qr.make_image(fill_color="white", back_color="black").convert("RGBA") + img_array = np.array(pil_img, dtype=np.uint8) + + if self._qr_texture and self._qr_texture.id != 0: + rl.unload_texture(self._qr_texture) + + rl_image = rl.Image() + rl_image.data = rl.ffi.cast("void *", img_array.ctypes.data) + rl_image.width = pil_img.width + rl_image.height = pil_img.height + rl_image.mipmaps = 1 + rl_image.format = rl.PixelFormat.PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 + self._qr_texture = rl.load_texture_from_image(rl_image) + except Exception as e: + cloudlog.warning(f"Galaxy QR generation failed: {e}") + self._qr_texture = None + + def _render(self, rect: rl.Rectangle): + if self._qr_texture is None: + rl.draw_text_ex(gui_app.font(FontWeight.BOLD), "QR Code Error", rl.Vector2(rect.x + 20, rect.y + rect.height / 2 - 15), 30, 0.0, rl.RED) + return + + scale = rect.height / self._qr_texture.height + pos = rl.Vector2(round(rect.x + 8), round(rect.y)) + rl.draw_texture_ex(self._qr_texture, pos, 0.0, scale, rl.WHITE) + + label_x = rect.x + 8 + rect.height + 24 + self._title.set_max_width(int(rect.width - label_x)) + self._title.set_position(label_x, rect.y + 16) + self._title.render() + + def __del__(self): + if self._qr_texture and self._qr_texture.id != 0: + rl.unload_texture(self._qr_texture) + + +class GalaxyBigButton(BigButton): + _SLUG_CHARS = string.ascii_letters + string.digits + + def __init__(self): + super().__init__("galaxy", "", gui_app.texture("icons_mici/settings/galaxy.png", 64, 64)) + self._galaxy_dir = Path(Paths.comma_home()) / "starpilot" / "data" / "galaxy" if PC else Path("/data/galaxy") + self._auth_path = self._galaxy_dir / "glxyauth" + self._session_path = self._galaxy_dir / "glxysession" + self._slug_path = self._galaxy_dir / "glxyslug" + + def _get_label_font_size(self): + return 64 + + def _is_paired(self) -> bool: + try: + return len(self._auth_path.read_text(encoding="utf-8").strip()) == 64 + except Exception: + return False + + def _get_slug(self) -> str: + try: + return self._slug_path.read_text(encoding="utf-8").strip() + except Exception: + return "" + + def _show_qr(self): + slug = self._get_slug() + if not slug: + gui_app.push_widget(BigDialog("", "Galaxy is not paired yet.")) + return + gui_app.push_widget(GalaxyQRDialog(f"https://galaxy.firestar.link/{slug}")) + + def _pair_with_pin(self, pin: str): + clean_pin = str(pin or "").strip() + if len(clean_pin) < 6: + gui_app.push_widget(BigDialog("", "PIN must be at least 6 characters.")) + return + + try: + self._galaxy_dir.mkdir(parents=True, exist_ok=True) + self._auth_path.write_text(hashlib.sha256(clean_pin.encode("utf-8")).hexdigest(), encoding="utf-8") + self._session_path.write_text(secrets.token_hex(32), encoding="utf-8") + slug = "".join(secrets.choice(self._SLUG_CHARS) for _ in range(16)) + self._slug_path.write_text(slug, encoding="utf-8") + except Exception as e: + cloudlog.warning(f"Galaxy pairing write failed: {e}") + gui_app.push_widget(BigDialog("", "Failed to pair with Galaxy.")) + return + + self._show_qr() + + def _unpair(self): + for path in (self._auth_path, self._session_path, self._slug_path): + try: + path.unlink(missing_ok=True) + except TypeError: + if path.exists(): + path.unlink() + except Exception as e: + cloudlog.warning(f"Galaxy unpair cleanup failed for {path}: {e}") + + def _handle_mouse_release(self, mouse_pos): + super()._handle_mouse_release(mouse_pos) + + if self._is_paired(): + dialog_holder: dict[str, BigMultiOptionDialog] = {} + + def on_confirm(): + selection = dialog_holder["dialog"].get_selected_option() + if selection == "show qr": + self._show_qr() + elif selection == "unpair": + gui_app.push_widget( + BigConfirmationDialog( + "slide to\nunpair galaxy", + gui_app.texture("icons_mici/settings/device/uninstall.png", 64, 64), + self._unpair, + red=True, + ) + ) + + dialog = BigMultiOptionDialog(options=["show qr", "unpair"], default="show qr", right_btn_callback=on_confirm) + dialog_holder["dialog"] = dialog + gui_app.push_widget(dialog) + return + + gui_app.push_widget(BigInputDialog("enter galaxy pin...", default_text="", minimum_length=6, confirm_callback=self._pair_with_pin)) + + def _update_state(self): + self.set_value("paired" if self._is_paired() else "pair") diff --git a/selfdrive/ui/mici/layouts/settings/network/__init__.py b/selfdrive/ui/mici/layouts/settings/network/__init__.py index 333a24531..ddbab4b47 100644 --- a/selfdrive/ui/mici/layouts/settings/network/__init__.py +++ b/selfdrive/ui/mici/layouts/settings/network/__init__.py @@ -1,204 +1,60 @@ import pyray as rl -from enum import IntEnum -from collections.abc import Callable -from openpilot.system.ui.widgets.scroller import Scroller -from openpilot.selfdrive.ui.mici.layouts.settings.network.wifi_ui import WifiUIMici, WifiIcon, normalize_ssid -from openpilot.selfdrive.ui.mici.widgets.button import BigButton, BigMultiToggle, BigToggle, BigParamControl -from openpilot.selfdrive.ui.mici.widgets.dialog import BigInputDialog -from openpilot.selfdrive.ui.ui_state import ui_state -from openpilot.selfdrive.ui.lib.prime_state import PrimeType +from openpilot.selfdrive.ui.mici.layouts.settings.network.wifi_ui import WifiIcon +from openpilot.selfdrive.ui.mici.widgets.button import BigButton from openpilot.system.ui.lib.application import gui_app -from openpilot.system.ui.widgets import NavWidget -from openpilot.system.ui.lib.wifi_manager import WifiManager, Network, MeteredType +from openpilot.system.ui.lib.wifi_manager import WifiManager, ConnectStatus, SecurityType, normalize_ssid -class NetworkPanelType(IntEnum): - NONE = 0 - WIFI = 1 - - -class NetworkLayoutMici(NavWidget): - def __init__(self, back_callback: Callable): - super().__init__() - - self._current_panel = NetworkPanelType.WIFI - self.set_back_enabled(lambda: self._current_panel == NetworkPanelType.NONE) - - self._wifi_manager = WifiManager() - self._wifi_manager.set_active(False) - self._wifi_ui = WifiUIMici(self._wifi_manager, back_callback=lambda: self._switch_to_panel(NetworkPanelType.NONE)) - - self._wifi_manager.add_callbacks( - networks_updated=self._on_network_updated, - ) - - _tethering_icon = "icons_mici/settings/network/tethering.png" - - # ******** Tethering ******** - def tethering_toggle_callback(checked: bool): - self._tethering_toggle_btn.set_enabled(False) - self._network_metered_btn.set_enabled(False) - self._wifi_manager.set_tethering_active(checked) - - self._tethering_toggle_btn = BigToggle("enable tethering", "", toggle_callback=tethering_toggle_callback) - - def tethering_password_callback(password: str): - if password: - self._wifi_manager.set_tethering_password(password) - - def tethering_password_clicked(): - tethering_password = self._wifi_manager.tethering_password - dlg = BigInputDialog("enter password...", tethering_password, minimum_length=8, - confirm_callback=tethering_password_callback) - gui_app.set_modal_overlay(dlg) - - txt_tethering = gui_app.texture(_tethering_icon, 64, 53) - self._tethering_password_btn = BigButton("tethering password", "", txt_tethering) - self._tethering_password_btn.set_click_callback(tethering_password_clicked) - - # ******** IP Address ******** - self._ip_address_btn = BigButton("IP Address", "Not connected") - - # ******** Network Metered ******** - def network_metered_callback(value: str): - self._network_metered_btn.set_enabled(False) - metered = { - 'default': MeteredType.UNKNOWN, - 'metered': MeteredType.YES, - 'unmetered': MeteredType.NO - }.get(value, MeteredType.UNKNOWN) - self._wifi_manager.set_current_network_metered(metered) - - # TODO: signal for current network metered type when changing networks, this is wrong until you press it once - # TODO: disable when not connected - self._network_metered_btn = BigMultiToggle("network usage", ["default", "metered", "unmetered"], select_callback=network_metered_callback) - self._network_metered_btn.set_enabled(False) +class WifiNetworkButton(BigButton): + def __init__(self, wifi_manager: WifiManager): + self._wifi_manager = wifi_manager + self._lock_txt = gui_app.texture("icons_mici/settings/network/new/lock.png", 28, 36) + self._draw_lock = False self._wifi_slash_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_slash.png", 64, 56) self._wifi_low_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_low.png", 64, 47) self._wifi_medium_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_medium.png", 64, 47) self._wifi_full_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_full.png", 64, 47) - wifi_button = BigButton("wi-fi", "not connected", self._wifi_slash_txt) - wifi_button.set_click_callback(lambda: self._switch_to_panel(NetworkPanelType.WIFI)) - self._wifi_button = wifi_button - - # ******** Advanced settings ******** - # ******** Roaming toggle ******** - self._roaming_btn = BigParamControl("enable roaming", "GsmRoaming", toggle_callback=self._toggle_roaming) - - # ******** APN settings ******** - self._apn_btn = BigButton("apn settings", "edit") - self._apn_btn.set_click_callback(self._edit_apn) - - # ******** Cellular metered toggle ******** - self._cellular_metered_btn = BigParamControl("cellular metered", "GsmMetered", toggle_callback=self._toggle_cellular_metered) - - # Main scroller ---------------------------------- - self._scroller = Scroller([ - wifi_button, - self._network_metered_btn, - self._tethering_toggle_btn, - self._tethering_password_btn, - # /* Advanced settings - self._roaming_btn, - self._apn_btn, - self._cellular_metered_btn, - # */ - self._ip_address_btn, - ], snap_items=False, scroll_indicator=True, edge_shadows=True) - - # Set initial config - roaming_enabled = ui_state.params.get_bool("GsmRoaming") - metered = ui_state.params.get_bool("GsmMetered") - self._wifi_manager.update_gsm_settings(roaming_enabled, ui_state.params.get("GsmApn") or "", metered) - - # Set up back navigation - self.set_back_callback(back_callback) + super().__init__("wi-fi", "not connected", self._wifi_slash_txt, scroll=True) def _update_state(self): super()._update_state() - # If not using prime SIM, show GSM settings and enable IPv4 forwarding - show_cell_settings = ui_state.prime_state.get_type() in (PrimeType.NONE, PrimeType.LITE) - self._wifi_manager.set_ipv4_forward(show_cell_settings) - self._roaming_btn.set_visible(show_cell_settings) - self._apn_btn.set_visible(show_cell_settings) - self._cellular_metered_btn.set_visible(show_cell_settings) - - def show_event(self): - super().show_event() - self._current_panel = NetworkPanelType.NONE - self._wifi_ui.show_event() - self._scroller.show_event() - - def hide_event(self): - super().hide_event() - self._wifi_ui.hide_event() - - def _toggle_roaming(self, checked: bool): - self._wifi_manager.update_gsm_settings(checked, ui_state.params.get("GsmApn") or "", ui_state.params.get_bool("GsmMetered")) - - def _edit_apn(self): - def update_apn(apn: str): - apn = apn.strip() - if apn == "": - ui_state.params.remove("GsmApn") - else: - ui_state.params.put("GsmApn", apn) - - self._wifi_manager.update_gsm_settings(ui_state.params.get_bool("GsmRoaming"), apn, ui_state.params.get_bool("GsmMetered")) - - current_apn = ui_state.params.get("GsmApn") or "" - dlg = BigInputDialog("enter APN", current_apn, minimum_length=0, confirm_callback=update_apn) - gui_app.set_modal_overlay(dlg) - - def _toggle_cellular_metered(self, checked: bool): - self._wifi_manager.update_gsm_settings(ui_state.params.get_bool("GsmRoaming"), ui_state.params.get("GsmApn") or "", checked) - - def _on_network_updated(self, networks: list[Network]): - # Update tethering state - tethering_active = self._wifi_manager.is_tethering_active() - # TODO: use real signals (like activated/settings changed, etc.) to speed up re-enabling buttons - self._tethering_toggle_btn.set_enabled(True) - self._network_metered_btn.set_enabled(lambda: not tethering_active and bool(self._wifi_manager.ipv4_address)) - self._tethering_toggle_btn.set_checked(tethering_active) - - connected_network = next((network for network in networks if network.is_connected), None) - if connected_network is not None: - self._wifi_button.set_value(normalize_ssid(connected_network.ssid)) - strength = round(connected_network.strength / 100 * 2) - if strength >= 2: - self._wifi_button.set_icon(self._wifi_full_txt) - elif strength == 1: - self._wifi_button.set_icon(self._wifi_medium_txt) - else: - self._wifi_button.set_icon(self._wifi_low_txt) + # Update wi-fi button with ssid and ip address + # TODO: make sure we handle hidden ssids + wifi_state = self._wifi_manager.wifi_state + display_network = next((n for n in self._wifi_manager.networks if n.ssid == wifi_state.ssid), None) + if wifi_state.status == ConnectStatus.CONNECTING: + self.set_text(normalize_ssid(wifi_state.ssid or "wi-fi")) + self.set_value("starting" if self._wifi_manager.is_tethering_active() else "connecting...") + elif wifi_state.status == ConnectStatus.CONNECTED: + self.set_text(normalize_ssid(wifi_state.ssid or "wi-fi")) + self.set_value(self._wifi_manager.ipv4_address or "obtaining IP...") else: - self._wifi_button.set_value("not connected") - self._wifi_button.set_icon(self._wifi_slash_txt) + display_network = None + self.set_text("wi-fi") + self.set_value("not connected") - # Update IP address - self._ip_address_btn.set_value(self._wifi_manager.ipv4_address or "Not connected") - - # Update network metered - self._network_metered_btn.set_value( - { - MeteredType.UNKNOWN: 'default', - MeteredType.YES: 'metered', - MeteredType.NO: 'unmetered' - }.get(self._wifi_manager.current_network_metered, 'default')) - - def _switch_to_panel(self, panel_type: NetworkPanelType): - if panel_type == NetworkPanelType.WIFI: - self._wifi_ui.show_event() - self._current_panel = panel_type - - def _render(self, rect: rl.Rectangle): - self._wifi_manager.process_callbacks() - - if self._current_panel == NetworkPanelType.WIFI: - self._wifi_ui.render(rect) + if display_network is not None: + strength = WifiIcon.get_strength_icon_idx(display_network.strength) + self.set_icon(self._wifi_full_txt if strength == 2 else self._wifi_medium_txt if strength == 1 else self._wifi_low_txt) + self._draw_lock = display_network.security_type not in (SecurityType.OPEN, SecurityType.UNSUPPORTED) + elif self._wifi_manager.is_tethering_active(): + # takes a while to get Network + self.set_icon(self._wifi_full_txt) + self._draw_lock = True else: - self._scroller.render(rect) + self.set_icon(self._wifi_slash_txt) + self._draw_lock = False + + def _draw_content(self, btn_y: float): + super()._draw_content(btn_y) + # Render lock icon at lower right of wifi icon if secured + if self._draw_lock: + icon_x = self._rect.x + self._rect.width - 30 - self._txt_icon.width + icon_y = btn_y + 30 + lock_x = icon_x + self._txt_icon.width - self._lock_txt.width + 7 + lock_y = icon_y + self._txt_icon.height - self._lock_txt.height + 8 + rl.draw_texture_ex(self._lock_txt, (lock_x, lock_y), 0.0, 1.0, rl.WHITE) diff --git a/selfdrive/ui/mici/layouts/settings/network/action_state.py b/selfdrive/ui/mici/layouts/settings/network/action_state.py deleted file mode 100644 index 9f8b67617..000000000 --- a/selfdrive/ui/mici/layouts/settings/network/action_state.py +++ /dev/null @@ -1,5 +0,0 @@ -def should_show_forget_button(network=None, *, is_saved: bool = False, is_connected: bool = False) -> bool: - if network is not None: - return bool(network.is_saved or network.is_connected) - - return bool(is_saved or is_connected) diff --git a/selfdrive/ui/mici/layouts/settings/network/network_layout.py b/selfdrive/ui/mici/layouts/settings/network/network_layout.py new file mode 100644 index 000000000..9f6fae4b5 --- /dev/null +++ b/selfdrive/ui/mici/layouts/settings/network/network_layout.py @@ -0,0 +1,154 @@ +from openpilot.system.ui.widgets.scroller import NavScroller +from openpilot.selfdrive.ui.mici.layouts.settings.network import WifiNetworkButton +from openpilot.selfdrive.ui.mici.layouts.settings.network.wifi_ui import WifiUIMici +from openpilot.selfdrive.ui.mici.widgets.button import BigButton, BigMultiToggle, BigParamControl, BigToggle +from openpilot.selfdrive.ui.mici.widgets.dialog import BigInputDialog +from openpilot.selfdrive.ui.ui_state import ui_state +from openpilot.selfdrive.ui.lib.prime_state import PrimeType +from openpilot.system.ui.lib.application import gui_app +from openpilot.system.ui.lib.wifi_manager import WifiManager, Network, MeteredType + + +class NetworkLayoutMici(NavScroller): + def __init__(self): + super().__init__() + + self._wifi_manager = WifiManager() + self._wifi_manager.set_active(False) + self._wifi_ui = WifiUIMici(self._wifi_manager) + + self._wifi_manager.add_callbacks( + networks_updated=self._on_network_updated, + ) + + # ******** Tethering ******** + def tethering_toggle_callback(checked: bool): + self._tethering_toggle_btn.set_enabled(False) + self._tethering_password_btn.set_enabled(False) + self._network_metered_btn.set_enabled(False) + self._wifi_manager.set_tethering_active(checked) + + self._tethering_toggle_btn = BigToggle("enable tethering", "", toggle_callback=tethering_toggle_callback) + + def tethering_password_callback(password: str): + if password: + self._tethering_toggle_btn.set_enabled(False) + self._tethering_password_btn.set_enabled(False) + self._wifi_manager.set_tethering_password(password) + + def tethering_password_clicked(): + tethering_password = self._wifi_manager.tethering_password + dlg = BigInputDialog("enter password...", tethering_password, minimum_length=8, + confirm_callback=tethering_password_callback) + gui_app.push_widget(dlg) + + txt_tethering = gui_app.texture("icons_mici/settings/network/tethering.png", 64, 54) + self._tethering_password_btn = BigButton("tethering password", "", txt_tethering) + self._tethering_password_btn.set_click_callback(tethering_password_clicked) + + # ******** Network Metered ******** + def network_metered_callback(value: str): + self._network_metered_btn.set_enabled(False) + metered = { + 'default': MeteredType.UNKNOWN, + 'metered': MeteredType.YES, + 'unmetered': MeteredType.NO + }.get(value, MeteredType.UNKNOWN) + self._wifi_manager.set_current_network_metered(metered) + + # TODO: signal for current network metered type when changing networks, this is wrong until you press it once + # TODO: disable when not connected + self._network_metered_btn = BigMultiToggle("network usage", ["default", "metered", "unmetered"], select_callback=network_metered_callback) + self._network_metered_btn.set_enabled(False) + + self._wifi_button = WifiNetworkButton(self._wifi_manager) + self._wifi_button.set_click_callback(lambda: gui_app.push_widget(self._wifi_ui)) + + # ******** Advanced settings ******** + # ******** Roaming toggle ******** + self._roaming_btn = BigParamControl("enable roaming", "GsmRoaming", toggle_callback=self._toggle_roaming) + + # ******** APN settings ******** + self._apn_btn = BigButton("apn settings", "edit") + self._apn_btn.set_click_callback(self._edit_apn) + + # ******** Cellular metered toggle ******** + self._cellular_metered_btn = BigParamControl("cellular metered", "GsmMetered", toggle_callback=self._toggle_cellular_metered) + + # Main scroller ---------------------------------- + self._scroller.add_widgets([ + self._wifi_button, + self._network_metered_btn, + self._tethering_toggle_btn, + self._tethering_password_btn, + # /* Advanced settings + self._roaming_btn, + self._apn_btn, + self._cellular_metered_btn, + # */ + ]) + + # Set initial config + roaming_enabled = ui_state.params.get_bool("GsmRoaming") + metered = ui_state.params.get_bool("GsmMetered") + self._wifi_manager.update_gsm_settings(roaming_enabled, ui_state.params.get("GsmApn") or "", metered) + + def _update_state(self): + super()._update_state() + + # If not using prime SIM, show GSM settings and enable IPv4 forwarding + show_cell_settings = ui_state.prime_state.get_type() in (PrimeType.NONE, PrimeType.LITE) + self._wifi_manager.set_ipv4_forward(show_cell_settings) + self._roaming_btn.set_visible(show_cell_settings) + self._apn_btn.set_visible(show_cell_settings) + self._cellular_metered_btn.set_visible(show_cell_settings) + + def show_event(self): + super().show_event() + self._wifi_manager.set_active(True) + + # Process wifi callbacks while at any point in the nav stack + gui_app.add_nav_stack_tick(self._wifi_manager.process_callbacks) + + def hide_event(self): + super().hide_event() + self._wifi_manager.set_active(False) + + gui_app.remove_nav_stack_tick(self._wifi_manager.process_callbacks) + + def _toggle_roaming(self, checked: bool): + self._wifi_manager.update_gsm_settings(checked, ui_state.params.get("GsmApn") or "", ui_state.params.get_bool("GsmMetered")) + + def _edit_apn(self): + def update_apn(apn: str): + apn = apn.strip() + if apn == "": + ui_state.params.remove("GsmApn") + else: + ui_state.params.put("GsmApn", apn) + + self._wifi_manager.update_gsm_settings(ui_state.params.get_bool("GsmRoaming"), apn, ui_state.params.get_bool("GsmMetered")) + + current_apn = ui_state.params.get("GsmApn") or "" + dlg = BigInputDialog("enter APN...", current_apn, minimum_length=0, confirm_callback=update_apn) + gui_app.push_widget(dlg) + + def _toggle_cellular_metered(self, checked: bool): + self._wifi_manager.update_gsm_settings(ui_state.params.get_bool("GsmRoaming"), ui_state.params.get("GsmApn") or "", checked) + + def _on_network_updated(self, networks: list[Network]): + # Update tethering state + tethering_active = self._wifi_manager.is_tethering_active() + # TODO: use real signals (like activated/settings changed, etc.) to speed up re-enabling buttons + self._tethering_toggle_btn.set_enabled(True) + self._tethering_password_btn.set_enabled(True) + self._network_metered_btn.set_enabled(lambda: not tethering_active and bool(self._wifi_manager.ipv4_address)) + self._tethering_toggle_btn.set_checked(tethering_active) + + # Update network metered + self._network_metered_btn.set_value( + { + MeteredType.UNKNOWN: 'default', + MeteredType.YES: 'metered', + MeteredType.NO: 'unmetered' + }.get(self._wifi_manager.current_network_metered, 'default')) diff --git a/selfdrive/ui/mici/layouts/settings/network/wifi_ui.py b/selfdrive/ui/mici/layouts/settings/network/wifi_ui.py index 20c92649a..006027e25 100644 --- a/selfdrive/ui/mici/layouts/settings/network/wifi_ui.py +++ b/selfdrive/ui/mici/layouts/settings/network/wifi_ui.py @@ -4,407 +4,339 @@ import pyray as rl from collections.abc import Callable from openpilot.common.swaglog import cloudlog -from openpilot.system.ui.widgets.label import UnifiedLabel -from openpilot.selfdrive.ui.mici.widgets.dialog import BigMultiOptionDialog, BigInputDialog, BigDialogOptionButton, BigConfirmationDialogV2 +from openpilot.selfdrive.ui.mici.widgets.dialog import BigInputDialog, BigConfirmationDialog +from openpilot.selfdrive.ui.mici.widgets.button import BigButton, LABEL_COLOR from openpilot.system.ui.lib.application import gui_app, MousePos, FontWeight -from openpilot.system.ui.widgets import Widget, NavWidget -from openpilot.system.ui.lib.wifi_manager import WifiManager, Network, SecurityType -from openpilot.selfdrive.ui.mici.layouts.settings.network.action_state import should_show_forget_button - - -def normalize_ssid(ssid: str) -> str: - return ssid.replace("’", "'") # for iPhone hotspots +from openpilot.system.ui.widgets import Widget +from openpilot.system.ui.widgets.scroller import NavScroller +from openpilot.system.ui.lib.wifi_manager import WifiManager, Network, SecurityType, normalize_ssid class LoadingAnimation(Widget): - def _render(self, _): - cx = int(self._rect.x + 70) - cy = int(self._rect.y + self._rect.height / 2 - 50) + RADIUS = 8 + SPACING = 24 # center-to-center: diameter (16) + gap (8) + Y_MAG = 11.2 - y_mag = 20 - anim_scale = 5 - spacing = 28 + def __init__(self): + super().__init__() + w = self.SPACING * 2 + self.RADIUS * 2 + h = self.RADIUS * 2 + int(self.Y_MAG) + self.set_rect(rl.Rectangle(0, 0, w, h)) + + def _render(self, _): + # Balls rest at bottom center; bounce upward + base_x = int(self._rect.x + self._rect.width / 2) + base_y = int(self._rect.y + self._rect.height - self.RADIUS) for i in range(3): - x = cx - spacing + i * spacing - y = int(cy + min(math.sin((rl.get_time() - i * 0.2) * anim_scale) * y_mag, 0)) - alpha = int(np.interp(cy - y, [0, y_mag], [255 * 0.45, 255 * 0.9])) - rl.draw_circle(x, y, 10, rl.Color(255, 255, 255, alpha)) + x = base_x + (i - 1) * self.SPACING + y = int(base_y + min(math.sin((rl.get_time() - i * 0.2) * 4) * self.Y_MAG, 0)) + alpha = int(np.interp(base_y - y, [0, self.Y_MAG], [255 * 0.45, 255 * 0.9])) + rl.draw_circle(x, y, self.RADIUS, rl.Color(255, 255, 255, alpha)) class WifiIcon(Widget): - def __init__(self): + def __init__(self, network: Network): super().__init__() - self.set_rect(rl.Rectangle(0, 0, 89, 64)) + self.set_rect(rl.Rectangle(0, 0, 48 + 5, 36 + 5)) - self._wifi_low_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_low.png", 89, 64) - self._wifi_medium_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_medium.png", 89, 64) - self._wifi_full_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_full.png", 89, 64) - self._lock_txt = gui_app.texture("icons_mici/settings/network/new/lock.png", 23, 32) + self._wifi_slash_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_slash.png", 48, 42) + self._wifi_low_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_low.png", 48, 36) + self._wifi_medium_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_medium.png", 48, 36) + self._wifi_full_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_full.png", 48, 36) + self._lock_txt = gui_app.texture("icons_mici/settings/network/new/lock.png", 21, 27) - self._network: Network | None = None - self._scale = 1.0 + self._network: Network = network + self._network_missing = False # if network disappeared from scan results - def set_current_network(self, network: Network): + def update_network(self, network: Network): self._network = network - def set_scale(self, scale: float): - self._scale = scale + def set_network_missing(self, missing: bool): + self._network_missing = missing + + @staticmethod + def get_strength_icon_idx(strength: int) -> int: + return round(strength / 100 * 2) def _render(self, _): - if self._network is None: - return - # Determine which wifi strength icon to use - strength = round(self._network.strength / 100 * 2) - if strength == 2: + strength = self.get_strength_icon_idx(self._network.strength) + if self._network_missing: + strength_icon = self._wifi_slash_txt + elif strength == 2: strength_icon = self._wifi_full_txt elif strength == 1: strength_icon = self._wifi_medium_txt else: strength_icon = self._wifi_low_txt - icon_x = int(self._rect.x + (self._rect.width - strength_icon.width * self._scale) // 2) - icon_y = int(self._rect.y + (self._rect.height - strength_icon.height * self._scale) // 2) - rl.draw_texture_ex(strength_icon, (icon_x, icon_y), 0.0, self._scale, rl.WHITE) + rl.draw_texture_ex(strength_icon, (self._rect.x, self._rect.y + self._rect.height - strength_icon.height), 0.0, 1.0, rl.WHITE) # Render lock icon at lower right of wifi icon if secured if self._network.security_type not in (SecurityType.OPEN, SecurityType.UNSUPPORTED): - lock_scale = self._scale * 1.1 - lock_x = int(icon_x + 1 + strength_icon.width * self._scale - self._lock_txt.width * lock_scale / 2) - lock_y = int(icon_y + 1 + strength_icon.height * self._scale - self._lock_txt.height * lock_scale / 2) - rl.draw_texture_ex(self._lock_txt, (lock_x, lock_y), 0.0, lock_scale, rl.WHITE) + lock_x = self._rect.x + self._rect.width - self._lock_txt.width + lock_y = self._rect.y + self._rect.height - self._lock_txt.height + 6 + rl.draw_texture_ex(self._lock_txt, (lock_x, lock_y), 0.0, 1.0, rl.WHITE) -class WifiItem(BigDialogOptionButton): - LEFT_MARGIN = 20 +class WifiButton(BigButton): + LABEL_PADDING = 98 + LABEL_WIDTH = 402 - 98 - 28 # button width - left padding - right padding + SUB_LABEL_WIDTH = 402 - BigButton.LABEL_HORIZONTAL_PADDING * 2 - def __init__(self, network: Network): - super().__init__(network.ssid) - - self.set_rect(rl.Rectangle(0, 0, gui_app.width, self.HEIGHT)) - - self._selected_txt = gui_app.texture("icons_mici/settings/network/new/wifi_selected.png", 48, 96) + def __init__(self, network: Network, wifi_manager: WifiManager): + super().__init__(normalize_ssid(network.ssid), scroll=True) self._network = network - self._wifi_icon = WifiIcon() - self._wifi_icon.set_current_network(network) - - def set_current_network(self, network: Network): - self._network = network - self._wifi_icon.set_current_network(network) - - def _render(self, _): - if self._network.is_connected: - selected_x = int(self._rect.x - self._selected_txt.width / 2) - selected_y = int(self._rect.y + (self._rect.height - self._selected_txt.height) / 2) - rl.draw_texture(self._selected_txt, selected_x, selected_y, rl.WHITE) - - self._wifi_icon.set_scale((1.0 if self._selected else 0.65) * 0.7) - self._wifi_icon.render(rl.Rectangle( - self._rect.x + self.LEFT_MARGIN, - self._rect.y, - self.SELECTED_HEIGHT, - self._rect.height - )) - - if self._selected: - self._label.set_font_size(self.SELECTED_HEIGHT) - self._label.set_color(rl.Color(255, 255, 255, int(255 * 0.9))) - self._label.set_font_weight(FontWeight.DISPLAY) - else: - self._label.set_font_size(self.HEIGHT) - self._label.set_color(rl.Color(255, 255, 255, int(255 * 0.58))) - self._label.set_font_weight(FontWeight.DISPLAY_REGULAR) - - label_offset = self.LEFT_MARGIN + self._wifi_icon.rect.width + 20 - label_rect = rl.Rectangle(self._rect.x + label_offset, self._rect.y, self._rect.width - label_offset, self._rect.height) - self._label.set_text(normalize_ssid(self._network.ssid)) - self._label.render(label_rect) - - -class ConnectButton(Widget): - def __init__(self): - super().__init__() - self._bg_txt = gui_app.texture("icons_mici/settings/network/new/connect_button.png", 410, 100) - self._bg_pressed_txt = gui_app.texture("icons_mici/settings/network/new/connect_button_pressed.png", 410, 100) - self._bg_full_txt = gui_app.texture("icons_mici/settings/network/new/full_connect_button.png", 520, 100) - self._bg_full_pressed_txt = gui_app.texture("icons_mici/settings/network/new/full_connect_button_pressed.png", 520, 100) - - self._full: bool = False - - self._label = UnifiedLabel("", 36, FontWeight.MEDIUM, rl.Color(255, 255, 255, int(255 * 0.9)), - alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER, - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE) - - @property - def full(self) -> bool: - return self._full - - def set_full(self, full: bool): - self._full = full - self.set_rect(rl.Rectangle(0, 0, 520 if self._full else 410, 100)) - - def set_label(self, text: str): - self._label.set_text(text) - - def _render(self, _): - if self._full: - bg_txt = self._bg_full_pressed_txt if self.is_pressed and self.enabled else self._bg_full_txt - else: - bg_txt = self._bg_pressed_txt if self.is_pressed and self.enabled else self._bg_txt - - rl.draw_texture(bg_txt, int(self._rect.x), int(self._rect.y), rl.WHITE) - - self._label.set_text_color(rl.Color(255, 255, 255, int(255 * 0.9) if self.enabled else int(255 * 0.9 * 0.65))) - self._label.render(self._rect) - - -class ForgetButton(Widget): - HORIZONTAL_MARGIN = 8 - - def __init__(self, forget_network: Callable, open_network_manage_page): - super().__init__() - self._forget_network = forget_network - self._open_network_manage_page = open_network_manage_page - - self._bg_txt = gui_app.texture("icons_mici/settings/network/new/forget_button.png", 100, 100) - self._bg_pressed_txt = gui_app.texture("icons_mici/settings/network/new/forget_button_pressed.png", 100, 100) - self._trash_txt = gui_app.texture("icons_mici/settings/network/new/trash.png", 32, 36) - self.set_rect(rl.Rectangle(0, 0, 100 + self.HORIZONTAL_MARGIN * 2, 100)) - - def _handle_mouse_release(self, mouse_pos: MousePos): - super()._handle_mouse_release(mouse_pos) - dlg = BigConfirmationDialogV2("slide to forget", "icons_mici/settings/network/new/trash.png", red=True, - confirm_callback=self._forget_network) - gui_app.set_modal_overlay(dlg, callback=self._open_network_manage_page) - - def _render(self, _): - bg_txt = self._bg_pressed_txt if self.is_pressed else self._bg_txt - rl.draw_texture(bg_txt, int(self._rect.x + self.HORIZONTAL_MARGIN), int(self._rect.y), rl.WHITE) - - trash_x = int(self._rect.x + (self._rect.width - self._trash_txt.width) // 2) - trash_y = int(self._rect.y + (self._rect.height - self._trash_txt.height) // 2) - rl.draw_texture(self._trash_txt, trash_x, trash_y, rl.WHITE) - - -class NetworkInfoPage(NavWidget): - def __init__(self, wifi_manager, connect_callback: Callable, forget_callback: Callable, open_network_manage_page: Callable): - super().__init__() self._wifi_manager = wifi_manager - self.set_rect(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) + self._wifi_icon = WifiIcon(network) + self._forget_btn = ForgetButton(self._forget_network) + self._check_txt = gui_app.texture("icons_mici/setup/driver_monitoring/dm_check.png", 32, 32) - self._wifi_icon = WifiIcon() - self._forget_btn = ForgetButton(lambda: forget_callback(self._network.ssid) if self._network is not None else None, - open_network_manage_page) - self._connect_btn = ConnectButton() - self._connect_btn.set_click_callback(lambda: connect_callback(self._network.ssid) if self._network is not None else None) + # Eager state (not sourced from Network) + self._network_missing = False + self._network_forgetting = False + self._wrong_password = False - self._title = UnifiedLabel("", 64, FontWeight.DISPLAY, rl.Color(255, 255, 255, int(255 * 0.9)), - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE, scroll=True) - self._subtitle = UnifiedLabel("", 36, FontWeight.ROMAN, rl.Color(255, 255, 255, int(255 * 0.9 * 0.65)), - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE) - - self.set_back_callback(lambda: gui_app.set_modal_overlay(None)) - - # State - self._network: Network | None = None - self._connecting: Callable[[], str | None] | None = None - self._show_forget_btn = False - - def show_event(self): - super().show_event() - self._title.reset_scroll() - - def update_networks(self, networks: dict[str, Network]): - # update current network from latest scan results - for ssid, network in networks.items(): - if self._network is not None and ssid == self._network.ssid: - self.set_current_network(network) - break - else: - # network disappeared, close page - gui_app.set_modal_overlay(None) - - def _update_state(self): - super()._update_state() - # Modal overlays stop main UI rendering, so we need to call here - self._wifi_manager.process_callbacks() - - if self._network is None: - return - - self._show_forget_btn = should_show_forget_button(self._network) - self._connect_btn.set_full(not self._show_forget_btn) - if self._is_connecting: - self._connect_btn.set_label("connecting...") - self._connect_btn.set_enabled(False) - elif self._network.is_connected: - self._connect_btn.set_label("disconnect") - self._connect_btn.set_enabled(True) - elif self._network.security_type == SecurityType.UNSUPPORTED: - self._connect_btn.set_label("connect") - self._connect_btn.set_enabled(False) - else: # saved or unknown - self._connect_btn.set_label("connect") - self._connect_btn.set_enabled(True) - - self._title.set_text(normalize_ssid(self._network.ssid)) - if self._network.security_type == SecurityType.OPEN: - self._subtitle.set_text("open") - elif self._network.security_type == SecurityType.UNSUPPORTED: - self._subtitle.set_text("unsupported") - else: - self._subtitle.set_text("secured") - - def set_current_network(self, network: Network): + def update_network(self, network: Network): self._network = network - self._wifi_icon.set_current_network(network) + self._wifi_icon.update_network(network) - def set_connecting(self, is_connecting: Callable[[], str | None]): - self._connecting = is_connecting + # We can assume network is not missing if got new Network + self._network_missing = False + self._wifi_icon.set_network_missing(False) + if self._is_connected or self._is_connecting: + self._wrong_password = False @property - def _is_connecting(self): - if self._connecting is None or self._network is None: - return False - is_connecting = self._connecting() == self._network.ssid - return is_connecting + def network_forgetting(self) -> bool: + return self._network_forgetting - def _render(self, _): + def _forget_network(self): + if self._network_forgetting: + return + + self._network_forgetting = True + self._wifi_manager.forget_connection(self._network.ssid) + + def on_forgotten(self): + self._network_forgetting = False + + def set_network_missing(self, missing: bool): + self._network_missing = missing + self._wifi_icon.set_network_missing(missing) + + def set_wrong_password(self): + self._wrong_password = True + self.trigger_shake() + + @property + def network(self) -> Network: + return self._network + + @property + def _show_forget_btn(self): + if self._network.is_tethering or self._network_forgetting: + return False + + return (self._is_saved and not self._wrong_password) or self._is_connecting + + def _handle_mouse_release(self, mouse_pos: MousePos): + if self._show_forget_btn and rl.check_collision_point_rec(mouse_pos, self._forget_btn.rect): + return + super()._handle_mouse_release(mouse_pos) + + def _get_label_font_size(self): + return 48 + + def _draw_content(self, btn_y: float): + self._label.set_color(LABEL_COLOR) + label_rect = rl.Rectangle(self._rect.x + self.LABEL_PADDING, btn_y + self.LABEL_VERTICAL_PADDING, + self.LABEL_WIDTH, self._rect.height - self.LABEL_VERTICAL_PADDING * 2) + self._label.render(label_rect) + + if self.value: + sub_label_x = self._rect.x + self.LABEL_HORIZONTAL_PADDING + label_y = btn_y + self._rect.height - self.LABEL_VERTICAL_PADDING + sub_label_w = self.SUB_LABEL_WIDTH - (self._forget_btn.rect.width if self._show_forget_btn else 0) + sub_label_height = self._sub_label.get_content_height(sub_label_w) + + if self._is_connected and not self._network_forgetting: + check_y = int(label_y - sub_label_height + (sub_label_height - self._check_txt.height) / 2) + rl.draw_texture_ex(self._check_txt, rl.Vector2(sub_label_x, check_y), 0.0, 1.0, rl.Color(255, 255, 255, int(255 * 0.9 * 0.65))) + sub_label_x += self._check_txt.width + 14 + + sub_label_rect = rl.Rectangle(sub_label_x, label_y - sub_label_height, sub_label_w, sub_label_height) + self._sub_label.render(sub_label_rect) + + # Wifi icon self._wifi_icon.render(rl.Rectangle( - self._rect.x + 32, - self._rect.y + (self._rect.height - self._connect_btn.rect.height - self._wifi_icon.rect.height) / 2, + self._rect.x + 30, + btn_y + 30, self._wifi_icon.rect.width, self._wifi_icon.rect.height, )) - self._title.render(rl.Rectangle( - self._rect.x + self._wifi_icon.rect.width + 32 + 32, - self._rect.y + 32 - 16, - self._rect.width - (self._wifi_icon.rect.width + 32 + 32), - 64, - )) - - self._subtitle.render(rl.Rectangle( - self._rect.x + self._wifi_icon.rect.width + 32 + 32, - self._rect.y + 32 + 64 - 16, - self._rect.width - (self._wifi_icon.rect.width + 32 + 32), - 48, - )) - - self._connect_btn.render(rl.Rectangle( - self._rect.x + 8, - self._rect.y + self._rect.height - self._connect_btn.rect.height, - self._connect_btn.rect.width, - self._connect_btn.rect.height, - )) - + # Forget button if self._show_forget_btn: self._forget_btn.render(rl.Rectangle( self._rect.x + self._rect.width - self._forget_btn.rect.width, - self._rect.y + self._rect.height - self._forget_btn.rect.height, + btn_y + self._rect.height - self._forget_btn.rect.height, self._forget_btn.rect.width, self._forget_btn.rect.height, )) - return -1 + def set_touch_valid_callback(self, touch_callback: Callable[[], bool]) -> None: + super().set_touch_valid_callback(lambda: touch_callback() and not self._forget_btn.is_pressed) + self._forget_btn.set_touch_valid_callback(touch_callback) + + @property + def _is_saved(self): + return self._wifi_manager.is_connection_saved(self._network.ssid) + + @property + def _is_connecting(self): + return self._wifi_manager.connecting_to_ssid == self._network.ssid + + @property + def _is_connected(self): + return self._wifi_manager.connected_ssid == self._network.ssid + + def _update_state(self): + super()._update_state() + + if any((self._network_missing, self._is_connecting, self._is_connected, self._network_forgetting, + self._network.security_type == SecurityType.UNSUPPORTED)): + self.set_enabled(False) + self._sub_label.set_color(rl.Color(255, 255, 255, int(255 * 0.585))) + self._sub_label.set_font_weight(FontWeight.ROMAN) + + if self._network_forgetting: + self.set_value("forgetting...") + elif self._is_connecting: + self.set_value("starting..." if self._network.is_tethering else "connecting...") + elif self._is_connected: + self.set_value("tethering" if self._network.is_tethering else "connected") + elif self._network_missing: + # after connecting/connected since NM will still attempt to connect/stay connected for a while + self.set_value("not in range") + else: + self.set_value("unsupported") + + else: # saved, wrong password, or unknown + self.set_value("wrong password" if self._wrong_password else "connect") + self.set_enabled(True) + self._sub_label.set_color(rl.Color(255, 255, 255, int(255 * 0.9))) + self._sub_label.set_font_weight(FontWeight.SEMI_BOLD) -class WifiUIMici(BigMultiOptionDialog): - # Wait this long after user interacts with widget to update network list - INACTIVITY_TIMEOUT = 1 +class ForgetButton(Widget): + MARGIN = 12 # bottom and right - def __init__(self, wifi_manager: WifiManager, back_callback: Callable): - super().__init__([], None, None, right_btn_callback=None) + def __init__(self, forget_network: Callable): + super().__init__() + self._forget_network = forget_network - # Set up back navigation - self.set_back_callback(back_callback) + self._bg_txt = gui_app.texture("icons_mici/settings/network/new/forget_button.png", 84, 84) + self._bg_pressed_txt = gui_app.texture("icons_mici/settings/network/new/forget_button_pressed.png", 84, 84) + self._trash_txt = gui_app.texture("icons_mici/settings/network/new/trash.png", 29, 35) + self.set_rect(rl.Rectangle(0, 0, 84 + self.MARGIN * 2, 84 + self.MARGIN * 2)) - self._network_info_page = NetworkInfoPage(wifi_manager, self._connect_to_network, self._forget_network, self._open_network_manage_page) - self._network_info_page.set_connecting(lambda: self._connecting) + def _handle_mouse_release(self, mouse_pos: MousePos): + super()._handle_mouse_release(mouse_pos) + dlg = BigConfirmationDialog("slide to forget", gui_app.texture("icons_mici/settings/network/new/trash.png", 54, 64), self._forget_network, red=True) + gui_app.push_widget(dlg) + def _render(self, _): + bg_txt = self._bg_pressed_txt if self.is_pressed else self._bg_txt + rl.draw_texture_ex(bg_txt, (self._rect.x + (self._rect.width - self._bg_txt.width) / 2, + self._rect.y + (self._rect.height - self._bg_txt.height) / 2), 0, 1.0, rl.WHITE) + + trash_x = self._rect.x + (self._rect.width - self._trash_txt.width) / 2 + trash_y = self._rect.y + (self._rect.height - self._trash_txt.height) / 2 + rl.draw_texture_ex(self._trash_txt, (trash_x, trash_y), 0, 1.0, rl.WHITE) + + +class ScanningButton(BigButton): + def __init__(self): + super().__init__("", "searching for networks") + self.set_enabled(False) self._loading_animation = LoadingAnimation() - self._wifi_manager = wifi_manager - self._connecting: str | None = None - self._networks: dict[str, Network] = {} + def _draw_content(self, btn_y: float): + super()._draw_content(btn_y) + anim = self._loading_animation + x = self._rect.x + self._rect.width - anim.rect.width - 40 + y = btn_y + self._rect.height - anim.rect.height - 30 + anim.set_position(x, y) + anim.render() - # widget state - self._last_interaction_time = -float('inf') - self._restore_selection = False + +class WifiUIMici(NavScroller): + def __init__(self, wifi_manager: WifiManager): + super().__init__() + + self._scanning_btn = ScanningButton() + + self._wifi_manager = wifi_manager + self._networks: dict[str, Network] = {} self._wifi_manager.add_callbacks( need_auth=self._on_need_auth, - activated=self._on_activated, forgotten=self._on_forgotten, networks_updated=self._on_network_updated, - disconnected=self._on_disconnected, ) + @property + def any_network_forgetting(self) -> bool: + # TODO: deactivate before forget and add DISCONNECTING state + return any(btn.network_forgetting for btn in self._scroller.items if isinstance(btn, WifiButton)) + def show_event(self): - # Call super to prepare scroller; selection scroll is handled dynamically + # Re-sort scroller items and update from latest scan results super().show_event() self._wifi_manager.set_active(True) - self._last_interaction_time = -float('inf') - - def hide_event(self): - super().hide_event() - self._wifi_manager.set_active(False) - - def _open_network_manage_page(self, result=None): - self._network_info_page.update_networks(self._networks) - gui_app.set_modal_overlay(self._network_info_page) - - def _forget_network(self, ssid: str): - network = self._networks.get(ssid) - if network is None: - cloudlog.warning(f"Trying to forget unknown network: {ssid}") - return - - self._wifi_manager.forget_connection(network.ssid) + self._networks = {n.ssid: n for n in self._wifi_manager.networks} + self._update_buttons(re_sort=True) def _on_network_updated(self, networks: list[Network]): self._networks = {network.ssid: network for network in networks} self._update_buttons() - self._network_info_page.update_networks(self._networks) - def _update_buttons(self): - # Don't update buttons while user is actively interacting - if rl.get_time() - self._last_interaction_time < self.INACTIVITY_TIMEOUT: - return + def _update_buttons(self, re_sort: bool = False): + # Update existing buttons, add new ones to the end + existing = {btn.network.ssid: btn for btn in self._scroller.items if isinstance(btn, WifiButton)} for network in self._networks.values(): - # pop and re-insert to eliminate stuttering on update (prevents position lost for a frame) - network_button_idx = next((i for i, btn in enumerate(self._scroller._items) if btn.option == network.ssid), None) - if network_button_idx is not None: - network_button = self._scroller._items.pop(network_button_idx) - # Update network on existing button - network_button.set_current_network(network) + if network.ssid in existing: + existing[network.ssid].update_network(network) else: - network_button = WifiItem(network) + btn = WifiButton(network, self._wifi_manager) + btn.set_click_callback(lambda ssid=network.ssid: self._connect_to_network(ssid)) + self._scroller.add_widget(btn) - self._scroller.add_widget(network_button) + if re_sort: + # Remove stale buttons and sort to match scan order, preserving eager state + btn_map = {btn.network.ssid: btn for btn in self._scroller.items if isinstance(btn, WifiButton)} + self._scroller.items[:] = [btn_map[ssid] for ssid in self._networks if ssid in btn_map] + else: + # Mark networks no longer in scan results (display handled by _update_state) + for btn in self._scroller.items: + if isinstance(btn, WifiButton) and btn.network.ssid not in self._networks: + btn.set_network_missing(True) - # remove networks no longer present - self._scroller._items[:] = [btn for btn in self._scroller._items if btn.option in self._networks] - - # try to restore previous selection to prevent jumping from adding/removing/reordering buttons - self._restore_selection = True + # Keep scanning button at the end + items = self._scroller.items + if self._scanning_btn in items: + items.append(items.pop(items.index(self._scanning_btn))) + else: + self._scroller.add_widget(self._scanning_btn) def _connect_with_password(self, ssid: str, password: str): - if password: - self._connecting = ssid - self._wifi_manager.connect_to_network(ssid, password) - self._update_buttons() - - def _on_option_selected(self, option: str): - super()._on_option_selected(option) - - if option in self._networks: - self._network_info_page.set_current_network(self._networks[option]) - self._open_network_manage_page() + self._wifi_manager.connect_to_network(ssid, password) + self._move_network_to_front(ssid, scroll=True) def _connect_to_network(self, ssid: str): network = self._networks.get(ssid) @@ -412,51 +344,48 @@ class WifiUIMici(BigMultiOptionDialog): cloudlog.warning(f"Trying to connect to unknown network: {ssid}") return - if network.is_connected: - self._wifi_manager.disconnect_network(network.ssid) - return - - if network.is_saved: - self._connecting = network.ssid + if self._wifi_manager.is_connection_saved(network.ssid): self._wifi_manager.activate_connection(network.ssid) - self._update_buttons() elif network.security_type == SecurityType.OPEN: - self._connecting = network.ssid self._wifi_manager.connect_to_network(network.ssid, "") - self._update_buttons() else: self._on_need_auth(network.ssid, False) + return + + self._move_network_to_front(ssid, scroll=True) def _on_need_auth(self, ssid, incorrect_password=True): - hint = "incorrect password..." if incorrect_password else "enter password..." - dlg = BigInputDialog(hint, "", minimum_length=8, + if incorrect_password: + for btn in self._scroller.items: + if isinstance(btn, WifiButton) and btn.network.ssid == ssid: + btn.set_wrong_password() + break + return + + dlg = BigInputDialog("enter password...", "", minimum_length=8, confirm_callback=lambda _password: self._connect_with_password(ssid, _password)) - # go back to the manage network page - gui_app.set_modal_overlay(dlg, self._open_network_manage_page) + gui_app.push_widget(dlg) - def _on_activated(self): - self._connecting = None + def _on_forgotten(self, ssid): + # For eager UI forget + for btn in self._scroller.items: + if isinstance(btn, WifiButton) and btn.network.ssid == ssid: + btn.on_forgotten() - def _on_forgotten(self): - self._connecting = None + def _move_network_to_front(self, ssid: str | None, scroll: bool = False): + # Move connecting/connected network to the front with animation + front_btn_idx = next((i for i, btn in enumerate(self._scroller.items) + if isinstance(btn, WifiButton) and + btn.network.ssid == ssid), None) if ssid else None - def _on_disconnected(self): - self._connecting = None + if front_btn_idx is not None and front_btn_idx > 0: + self._scroller.move_item(front_btn_idx, 0) + + if scroll: + # Scroll to the new position of the network + self._scroller.scroll_to(self._scroller.scroll_panel.get_offset(), smooth=True) def _update_state(self): super()._update_state() - if self.is_pressed: - self._last_interaction_time = rl.get_time() - def _render(self, _): - # Update Scroller layout and restore current selection whenever buttons are updated, before first render - current_selection = self.get_selected_option() - if self._restore_selection and current_selection in self._networks: - self._scroller._layout() - BigMultiOptionDialog._on_option_selected(self, current_selection) - self._restore_selection = None - - super()._render(_) - - if not self._networks: - self._loading_animation.render(self._rect) + self._move_network_to_front(self._wifi_manager.wifi_state.ssid) diff --git a/selfdrive/ui/mici/layouts/settings/settings.py b/selfdrive/ui/mici/layouts/settings/settings.py index 28da9ad26..29709344a 100644 --- a/selfdrive/ui/mici/layouts/settings/settings.py +++ b/selfdrive/ui/mici/layouts/settings/settings.py @@ -1,34 +1,19 @@ -import pyray as rl -from dataclasses import dataclass -from enum import IntEnum -from collections.abc import Callable - from openpilot.common.params import Params -from openpilot.system.ui.widgets.scroller import Scroller +from openpilot.system.ui.widgets.scroller import NavScroller from openpilot.selfdrive.ui.mici.widgets.button import BigButton, BigMultiToggle from openpilot.selfdrive.ui.mici.layouts.settings.toggles import TogglesLayoutMici -from openpilot.selfdrive.ui.mici.layouts.settings.network import NetworkLayoutMici -from openpilot.selfdrive.ui.mici.layouts.settings.device import DeviceLayoutMici, PairBigButton, GalaxyBigButton -from openpilot.selfdrive.ui.mici.layouts.settings.driving_model import DrivingModelBigButton +from openpilot.selfdrive.ui.mici.layouts.settings.network.network_layout import NetworkLayoutMici +from openpilot.selfdrive.ui.mici.layouts.settings.device import DeviceLayoutMici, PairBigButton from openpilot.selfdrive.ui.mici.layouts.settings.developer import DeveloperLayoutMici -from openpilot.selfdrive.ui.mici.layouts.settings.firehose import FirehoseLayout +from openpilot.selfdrive.ui.mici.layouts.settings.driving_model import DrivingModelBigButton +from openpilot.selfdrive.ui.mici.layouts.settings.galaxy import GalaxyBigButton +from openpilot.selfdrive.ui.mici.layouts.settings.visuals import VisualsLayoutMici from openpilot.system.ui.lib.application import gui_app, FontWeight -from openpilot.system.ui.widgets import Widget, NavWidget -class PanelType(IntEnum): - TOGGLES = 0 - NETWORK = 1 - DEVICE = 2 - DEVELOPER = 3 - USER_MANUAL = 4 - FIREHOSE = 5 - - -@dataclass -class PanelInfo: - name: str - instance: Widget +class SettingsBigButton(BigButton): + def _get_label_font_size(self): + return 64 class ForceDriveStateBigButton(BigMultiToggle): @@ -37,6 +22,12 @@ class ForceDriveStateBigButton(BigMultiToggle): self._params = Params() self.refresh() + def _get_label_font_size(self): + return 40 + + def _width_hint(self) -> int: + return int(self._rect.width - self.LABEL_HORIZONTAL_PADDING * 2 - self._txt_enabled_toggle.width - 20) + def _handle_mouse_release(self, mouse_pos): super()._handle_mouse_release(mouse_pos) self._apply_mode(self.value) @@ -61,92 +52,51 @@ class ForceDriveStateBigButton(BigMultiToggle): self.set_value("off") -class SettingsLayout(NavWidget): +class SettingsLayout(NavScroller): def __init__(self): super().__init__() self._params = Params() - self._current_panel = None # PanelType.DEVICE - toggles_btn = BigButton("toggles", "", "icons_mici/settings/toggles_icon.png") - toggles_btn.set_click_callback(lambda: self._set_current_panel(PanelType.TOGGLES)) - network_btn = BigButton("network", "", "icons_mici/settings/network/wifi_strength_full.png") - network_btn.set_click_callback(lambda: self._set_current_panel(PanelType.NETWORK)) - device_btn = BigButton("device", "", "icons_mici/settings/device_icon.png") - device_btn.set_click_callback(lambda: self._set_current_panel(PanelType.DEVICE)) - developer_btn = BigButton("developer", "", "icons_mici/settings/developer_icon.png") - developer_btn.set_click_callback(lambda: self._set_current_panel(PanelType.DEVELOPER)) + toggles_panel = TogglesLayoutMici() + toggles_btn = SettingsBigButton("toggles", "", gui_app.texture("icons_mici/settings.png", 64, 64)) + toggles_btn.set_click_callback(lambda: gui_app.push_widget(toggles_panel)) - firehose_btn = BigButton("firehose", "", "icons_mici/settings/comma_icon.png") - firehose_btn.set_click_callback(lambda: self._set_current_panel(PanelType.FIREHOSE)) + network_panel = NetworkLayoutMici() + network_btn = SettingsBigButton("network", "", gui_app.texture("icons_mici/settings/network/wifi_strength_full.png", 76, 56)) + network_btn.set_click_callback(lambda: gui_app.push_widget(network_panel)) + + visuals_panel = VisualsLayoutMici() + visuals_btn = SettingsBigButton("visuals", "", gui_app.texture("icons_mici/settings/device/cameras.png", 64, 64)) + visuals_btn.set_click_callback(lambda: gui_app.push_widget(visuals_panel)) + + device_panel = DeviceLayoutMici() + device_btn = SettingsBigButton("device", "", gui_app.texture("icons_mici/settings/device_icon.png", 72, 58)) + device_btn.set_click_callback(lambda: gui_app.push_widget(device_panel)) + + developer_panel = DeveloperLayoutMici() + developer_btn = SettingsBigButton("developer", "", gui_app.texture("icons_mici/settings/developer_icon.png", 64, 60)) + developer_btn.set_click_callback(lambda: gui_app.push_widget(developer_panel)) self._force_drive_state_btn = ForceDriveStateBigButton() self._driving_model_btn = DrivingModelBigButton() + galaxy_btn = GalaxyBigButton() - self._scroller = Scroller([ + self._scroller.add_widgets([ toggles_btn, network_btn, self._force_drive_state_btn, - self._driving_model_btn, device_btn, + self._driving_model_btn, + visuals_btn, + galaxy_btn, PairBigButton(), - GalaxyBigButton(), #BigDialogButton("manual", "", "icons_mici/settings/manual_icon.png", "Check out the mici user\nmanual at comma.ai/setup"), - firehose_btn, developer_btn, - ], snap_items=False, scroll_indicator=True, edge_shadows=True) - - # Set up back navigation - self.set_back_callback(self.close_settings) - self.set_back_enabled(lambda: self._current_panel is None) - - self._panels = { - PanelType.TOGGLES: PanelInfo("Toggles", TogglesLayoutMici(back_callback=lambda: self._set_current_panel(None))), - PanelType.NETWORK: PanelInfo("Network", NetworkLayoutMici(back_callback=lambda: self._set_current_panel(None))), - PanelType.DEVICE: PanelInfo("Device", DeviceLayoutMici(back_callback=lambda: self._set_current_panel(None))), - PanelType.DEVELOPER: PanelInfo("Developer", DeveloperLayoutMici(back_callback=lambda: self._set_current_panel(None))), - PanelType.FIREHOSE: PanelInfo("Firehose", FirehoseLayout(back_callback=lambda: self._set_current_panel(None))), - } + ]) self._font_medium = gui_app.font(FontWeight.MEDIUM) - # Callbacks - self._close_callback: Callable | None = None - def show_event(self): super().show_event() self._force_drive_state_btn.refresh() self._driving_model_btn.refresh() - self._set_current_panel(None) - self._scroller.show_event() - if self._current_panel is not None: - self._panels[self._current_panel].instance.show_event() - - def hide_event(self): - super().hide_event() - if self._current_panel is not None: - self._panels[self._current_panel].instance.hide_event() - - def set_callbacks(self, on_close: Callable): - self._close_callback = on_close - - def _render(self, rect: rl.Rectangle): - if self._current_panel is not None: - self._draw_current_panel() - else: - self._scroller.render(rect) - - def _draw_current_panel(self): - panel = self._panels[self._current_panel] - panel.instance.render(self._rect) - - def _set_current_panel(self, panel_type: PanelType | None): - if panel_type != self._current_panel: - if self._current_panel is not None: - self._panels[self._current_panel].instance.hide_event() - self._current_panel = panel_type - if self._current_panel is not None: - self._panels[self._current_panel].instance.show_event() - - def close_settings(self): - if self._close_callback: - self._close_callback() diff --git a/selfdrive/ui/mici/layouts/settings/toggles.py b/selfdrive/ui/mici/layouts/settings/toggles.py index e638e365c..21b538597 100644 --- a/selfdrive/ui/mici/layouts/settings/toggles.py +++ b/selfdrive/ui/mici/layouts/settings/toggles.py @@ -1,21 +1,17 @@ -import pyray as rl -from collections.abc import Callable from cereal import log -from openpilot.system.ui.widgets.scroller import Scroller +from openpilot.system.ui.widgets.scroller import NavScroller from openpilot.selfdrive.ui.mici.widgets.button import BigParamControl, BigMultiParamToggle from openpilot.system.ui.lib.application import gui_app -from openpilot.system.ui.widgets import NavWidget from openpilot.selfdrive.ui.layouts.settings.common import restart_needed_callback from openpilot.selfdrive.ui.ui_state import ui_state PERSONALITY_TO_INT = log.LongitudinalPersonality.schema.enumerants -class TogglesLayoutMici(NavWidget): - def __init__(self, back_callback: Callable): +class TogglesLayoutMici(NavScroller): + def __init__(self): super().__init__() - self.set_back_callback(back_callback) self._personality_toggle = BigMultiParamToggle("driving personality", "LongitudinalPersonality", ["aggressive", "standard", "relaxed"]) self._safe_mode_btn = BigParamControl("safe mode", "SafeMode", toggle_callback=restart_needed_callback) @@ -27,7 +23,7 @@ class TogglesLayoutMici(NavWidget): record_mic = BigParamControl("record & upload mic audio", "RecordAudio", toggle_callback=restart_needed_callback) enable_openpilot = BigParamControl("enable openpilot", "OpenpilotEnabledToggle", toggle_callback=restart_needed_callback) - self._scroller = Scroller([ + self._scroller.add_widgets([ self._personality_toggle, self._safe_mode_btn, self._experimental_btn, @@ -37,7 +33,7 @@ class TogglesLayoutMici(NavWidget): record_front, record_mic, enable_openpilot, - ], snap_items=False, scroll_indicator=True, edge_shadows=True) + ]) # Toggle lists self._refresh_toggles = ( @@ -72,7 +68,6 @@ class TogglesLayoutMici(NavWidget): def show_event(self): super().show_event() - self._scroller.show_event() self._update_toggles() def _update_toggles(self): @@ -105,6 +100,3 @@ class TogglesLayoutMici(NavWidget): # Refresh toggles from params to mirror external changes for key, item in self._refresh_toggles: item.set_checked(ui_state.params.get_bool(key)) - - def _render(self, rect: rl.Rectangle): - self._scroller.render(rect) diff --git a/selfdrive/ui/mici/layouts/settings/visuals.py b/selfdrive/ui/mici/layouts/settings/visuals.py new file mode 100644 index 000000000..e44c57c69 --- /dev/null +++ b/selfdrive/ui/mici/layouts/settings/visuals.py @@ -0,0 +1,74 @@ +from openpilot.common.params import Params +from openpilot.selfdrive.ui.mici.widgets.button import BigButton, BigParamControl +from openpilot.selfdrive.ui.mici.widgets.dialog import BigDialog, BigMultiOptionDialog +from openpilot.system.ui.lib.application import gui_app +from openpilot.system.ui.widgets.scroller import NavScroller + +CAMERA_VIEW_LABELS = ["Auto", "Driver", "Standard", "Wide"] + + +class CameraViewBigButton(BigButton): + def __init__(self): + super().__init__("camera view", "", gui_app.texture("icons_mici/settings/device/cameras.png", 64, 64)) + self._params = Params() + self.set_click_callback(self._show_selector) + self.refresh() + + def refresh(self): + current_idx = self._params.get_int("CameraView", return_default=True, default=3) + current_idx = max(0, min(current_idx, len(CAMERA_VIEW_LABELS) - 1)) + self.set_value(CAMERA_VIEW_LABELS[current_idx].lower()) + + def _show_selector(self): + current_idx = self._params.get_int("CameraView", return_default=True, default=3) + current_idx = max(0, min(current_idx, len(CAMERA_VIEW_LABELS) - 1)) + dialog_holder: dict[str, BigMultiOptionDialog] = {} + + def on_confirm(): + try: + idx = CAMERA_VIEW_LABELS.index(dialog_holder["dialog"].get_selected_option()) + except ValueError: + gui_app.push_widget(BigDialog("", "Invalid camera view")) + return + self._params.put_int("CameraView", idx) + self.refresh() + + dialog = BigMultiOptionDialog(options=CAMERA_VIEW_LABELS, default=CAMERA_VIEW_LABELS[current_idx], right_btn_callback=on_confirm) + dialog_holder["dialog"] = dialog + gui_app.push_widget(dialog) + + +class VisualsLayoutMici(NavScroller): + def __init__(self): + super().__init__() + self._camera_view_btn = CameraViewBigButton() + self._driver_camera_btn = BigParamControl("driver camera on reverse", "DriverCamera") + self._stopped_timer_btn = BigParamControl("stopped timer", "StoppedTimer") + self._speed_limit_signs_btn = BigParamControl("speed limit signs", "ShowSpeedLimits") + self._slc_confirmation_btn = BigParamControl("confirm new speed limits", "SLCConfirmation") + self._slc_confirmation_lower_btn = BigParamControl("confirm lower limits", "SLCConfirmationLower") + self._slc_confirmation_higher_btn = BigParamControl("confirm higher limits", "SLCConfirmationHigher") + + self._scroller.add_widgets([ + self._camera_view_btn, + self._driver_camera_btn, + self._stopped_timer_btn, + self._speed_limit_signs_btn, + self._slc_confirmation_btn, + self._slc_confirmation_lower_btn, + self._slc_confirmation_higher_btn, + ]) + + def show_event(self): + super().show_event() + self._refresh() + + def _update_state(self): + super()._update_state() + self._refresh() + + def _refresh(self): + self._camera_view_btn.refresh() + confirmation_enabled = self._slc_confirmation_btn.params.get_bool("SLCConfirmation") + self._slc_confirmation_lower_btn.set_visible(confirmation_enabled) + self._slc_confirmation_higher_btn.set_visible(confirmation_enabled) diff --git a/selfdrive/ui/mici/onroad/alert_renderer.py b/selfdrive/ui/mici/onroad/alert_renderer.py index a8eb0998a..7b006aaae 100644 --- a/selfdrive/ui/mici/onroad/alert_renderer.py +++ b/selfdrive/ui/mici/onroad/alert_renderer.py @@ -98,8 +98,6 @@ class AlertRenderer(Widget): self._prev_alert: Alert | None = None self._text_gen_time = 0 self._alert_text2_gen = '' - self._last_started_frame = -1 - self._below_steer_speed_shown_this_drive = False # animation filters # TODO: use 0.1 but with proper alert height calculation @@ -113,23 +111,15 @@ class AlertRenderer(Widget): self._load_icons() def _load_icons(self): - self._txt_turn_signal_left = gui_app.texture('icons_mici/onroad/turn_signal_left.png', 100, 91) - self._txt_turn_signal_right = gui_app.texture('icons_mici/onroad/turn_signal_right.png', 100, 91) - self._txt_blind_spot_left = gui_app.texture('icons_mici/onroad/blind_spot_left.png', 108, 128) - self._txt_blind_spot_right = gui_app.texture('icons_mici/onroad/blind_spot_right.png', 108, 128) + self._txt_turn_signal_left = gui_app.texture('icons_mici/onroad/turn_signal_left.png', 104, 96) + self._txt_turn_signal_right = gui_app.texture('icons_mici/onroad/turn_signal_left.png', 104, 96, flip_x=True) + self._txt_blind_spot_left = gui_app.texture('icons_mici/onroad/blind_spot_left.png', 134, 150) + self._txt_blind_spot_right = gui_app.texture('icons_mici/onroad/blind_spot_left.png', 134, 150, flip_x=True) def get_alert(self, sm: messaging.SubMaster) -> Alert | None: """Generate the current alert based on selfdrive state.""" ss = sm['selfdriveState'] - # Reset per-drive one-shot alert state on each new onroad session. - if ui_state.started and ui_state.started_frame != self._last_started_frame: - self._last_started_frame = ui_state.started_frame - self._below_steer_speed_shown_this_drive = False - elif not ui_state.started: - self._last_started_frame = -1 - self._below_steer_speed_shown_this_drive = False - # Check if selfdriveState messages have stopped arriving if not sm.updated['selfdriveState']: recv_frame = sm.recv_frame['selfdriveState'] @@ -155,13 +145,6 @@ class AlertRenderer(Widget): # Return current alert ret = Alert(text1=ss.alertText1, text2=ss.alertText2, size=ss.alertSize.raw, status=ss.alertStatus.raw, visual_alert=ss.alertHudVisual, alert_type=ss.alertType) - - # Stock-like once-per-drive minimum lateral warning behavior. - if ret.alert_type.startswith("belowSteerSpeed/"): - if self._below_steer_speed_shown_this_drive: - return None - self._below_steer_speed_shown_this_drive = True - self._prev_alert = ret return ret @@ -275,8 +258,8 @@ class AlertRenderer(Widget): else: icon_alpha = int(min(self._turn_signal_alpha_filter.x, 255)) - rl.draw_texture(alert_layout.icon.texture, pos_x, int(self._rect.y + alert_layout.icon.margin_y), - rl.Color(255, 255, 255, int(icon_alpha * self._alpha_filter.x))) + rl.draw_texture_ex(alert_layout.icon.texture, rl.Vector2(pos_x, self._rect.y + alert_layout.icon.margin_y), 0.0, 1.0, + rl.Color(255, 255, 255, int(icon_alpha * self._alpha_filter.x))) def _draw_background(self, alert: Alert) -> None: # draw top gradient for alert text at top diff --git a/selfdrive/ui/mici/onroad/cameraview.py b/selfdrive/ui/mici/onroad/cameraview.py index 776bc8b65..aac38ba71 100644 --- a/selfdrive/ui/mici/onroad/cameraview.py +++ b/selfdrive/ui/mici/onroad/cameraview.py @@ -51,13 +51,9 @@ if TICI: void main() { vec4 color = texture(texture0, fragTexCoord); + // Keep the onroad camera feed full-color in every driving state. if (engaged == 1) { - float gray = dot(color.rgb, vec3(0.299, 0.587, 0.114)); // Luma - color.rgb = mix(vec3(gray), color.rgb, 0.2); // 20% saturation - color.rgb = clamp((color.rgb - 0.5) * 1.2 + 0.5, 0.0, 1.0); // +20% contrast - color.rgb = pow(color.rgb, vec3(1.0/1.28)); - } else { - color.rgb *= 0.85; // 85% opacity + color.rgb = color.rgb; } if (enhance_driver == 1) { float brightness = 1.1; @@ -82,12 +78,9 @@ else: float y = texture(texture0, fragTexCoord).r; vec2 uv = texture(texture1, fragTexCoord).ra - 0.5; vec3 rgb = vec3(y + 1.402*uv.y, y - 0.344*uv.x - 0.714*uv.y, y + 1.772*uv.x); + // Keep the onroad camera feed full-color in every driving state. if (engaged == 1) { - float gray = dot(rgb, vec3(0.299, 0.587, 0.114)); - rgb = mix(vec3(gray), rgb, 0.2); // 20% saturation - rgb = clamp((rgb - 0.5) * 1.2 + 0.5, 0.0, 1.0); // +20% contrast - } else { - rgb *= 0.85; // 85% opacity + rgb = rgb; } // TODO: the images out of camerad need some more correction and // the ui should apply a gamma curve for the device display @@ -324,8 +317,10 @@ class CameraView(Widget): def _update_texture_color_filtering(self): self._engaged_val[0] = 1 if ui_state.status != UIStatus.DISENGAGED else 0 - rl.set_shader_value(self.shader, self._engaged_loc, self._engaged_val, rl.ShaderUniformDataType.SHADER_UNIFORM_INT) - rl.set_shader_value(self.shader, self._enhance_driver_loc, self._enhance_driver_val, rl.ShaderUniformDataType.SHADER_UNIFORM_INT) + if self._engaged_loc >= 0: + rl.set_shader_value(self.shader, self._engaged_loc, self._engaged_val, rl.ShaderUniformDataType.SHADER_UNIFORM_INT) + if self._enhance_driver_loc >= 0: + rl.set_shader_value(self.shader, self._enhance_driver_loc, self._enhance_driver_val, rl.ShaderUniformDataType.SHADER_UNIFORM_INT) def _ensure_connection(self) -> bool: if not self.client.is_connected(): diff --git a/selfdrive/ui/mici/onroad/confidence_ball.py b/selfdrive/ui/mici/onroad/confidence_ball.py index 4ecfc4b68..62f14c561 100644 --- a/selfdrive/ui/mici/onroad/confidence_ball.py +++ b/selfdrive/ui/mici/onroad/confidence_ball.py @@ -34,8 +34,14 @@ class ConfidenceBall(Widget): if self._demo: return - self._confidence_filter.update((1 - max(ui_state.sm['modelV2'].meta.disengagePredictions.brakeDisengageProbs or [1])) * - (1 - max(ui_state.sm['modelV2'].meta.disengagePredictions.steerOverrideProbs or [1]))) + lateral_ui_active = ui_state.status != UIStatus.DISENGAGED or ui_state.always_on_lateral_active + + # animate status dot in from bottom + if not lateral_ui_active: + self._confidence_filter.update(-0.5) + else: + self._confidence_filter.update((1 - max(ui_state.sm['modelV2'].meta.disengagePredictions.brakeDisengageProbs or [1])) * + (1 - max(ui_state.sm['modelV2'].meta.disengagePredictions.steerOverrideProbs or [1]))) def _render(self, _): content_rect = rl.Rectangle( @@ -50,7 +56,7 @@ class ConfidenceBall(Widget): dot_height = self._rect.y + dot_height # confidence zones - if ui_state.status != UIStatus.OVERRIDE or self._demo: + if ui_state.status == UIStatus.ENGAGED or ui_state.always_on_lateral_active or self._demo: if self._confidence_filter.x > 0.5: top_dot_color = rl.Color(0, 255, 204, 255) bottom_dot_color = rl.Color(0, 255, 38, 255) @@ -65,6 +71,10 @@ class ConfidenceBall(Widget): top_dot_color = rl.Color(255, 255, 255, 255) bottom_dot_color = rl.Color(82, 82, 82, 255) + else: + top_dot_color = rl.Color(50, 50, 50, 255) + bottom_dot_color = rl.Color(13, 13, 13, 255) + draw_circle_gradient(content_rect.x + content_rect.width - status_dot_radius, dot_height, status_dot_radius, top_dot_color, bottom_dot_color) diff --git a/selfdrive/ui/mici/onroad/driver_camera_dialog.py b/selfdrive/ui/mici/onroad/driver_camera_dialog.py index afacb5323..e8b8abb7f 100644 --- a/selfdrive/ui/mici/onroad/driver_camera_dialog.py +++ b/selfdrive/ui/mici/onroad/driver_camera_dialog.py @@ -7,7 +7,8 @@ from openpilot.selfdrive.ui.ui_state import ui_state, device from openpilot.selfdrive.selfdrived.events import EVENTS, ET from openpilot.system.ui.lib.application import gui_app, FontWeight from openpilot.system.ui.lib.multilang import tr -from openpilot.system.ui.widgets import NavWidget +from openpilot.system.ui.widgets import Widget +from openpilot.system.ui.widgets.nav_widget import NavWidget from openpilot.system.ui.widgets.label import gui_label EventName = log.OnroadEvent.EventName @@ -24,19 +25,15 @@ class DriverCameraView(CameraView): return base -class DriverCameraDialog(NavWidget): - def __init__(self, no_escape=False): +class BaseDriverCameraDialog(Widget): + # Not a NavWidget so training guide can use this without back navigation + def __init__(self): super().__init__() self._camera_view = DriverCameraView("camerad", VisionStreamType.VISION_STREAM_DRIVER) self.driver_state_renderer = DriverStateRenderer(lines=True) self.driver_state_renderer.set_rect(rl.Rectangle(0, 0, 200, 200)) self.driver_state_renderer.load_icons() self._pm: messaging.PubMaster | None = None - if not no_escape: - # TODO: this can grow unbounded, should be given some thought - device.add_interactive_timeout_callback(lambda: gui_app.set_modal_overlay(None)) - self.set_back_callback(lambda: gui_app.set_modal_overlay(None)) - self.set_back_enabled(not no_escape) # Load eye icons self._eye_fill_texture = None @@ -85,7 +82,7 @@ class DriverCameraDialog(NavWidget): alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER) rl.end_scissor_mode() self._publish_alert_sound(None) - return -1 + return driver_data = self._draw_face_detection(rect) if driver_data is not None: @@ -103,7 +100,7 @@ class DriverCameraDialog(NavWidget): self._render_dm_alerts(rect) rl.end_scissor_mode() - return -1 + return def _publish_alert_sound(self, dm_state): """Publish selfdriveState with only alertSound field set""" @@ -217,13 +214,20 @@ class DriverCameraDialog(NavWidget): rl.draw_texture_v(self._eye_fill_texture, (eye_x, eye_y), rl.Color(255, 255, 255, int(255 * fill_opacity))) +class DriverCameraDialog(NavWidget, BaseDriverCameraDialog): + def __init__(self): + super().__init__() + # TODO: this can grow unbounded, should be given some thought + device.add_interactive_timeout_callback(gui_app.pop_widget) + + if __name__ == "__main__": gui_app.init_window("Driver Camera View (mici)") driver_camera_view = DriverCameraDialog() + gui_app.push_widget(driver_camera_view) try: for _ in gui_app.render(): ui_state.update() - driver_camera_view.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) finally: driver_camera_view.close() diff --git a/selfdrive/ui/mici/onroad/driver_state.py b/selfdrive/ui/mici/onroad/driver_state.py index 356d7ac83..92ff07c1e 100644 --- a/selfdrive/ui/mici/onroad/driver_state.py +++ b/selfdrive/ui/mici/onroad/driver_state.py @@ -61,7 +61,7 @@ class DriverStateRenderer(Widget): self._dm_cone = gui_app.texture("icons_mici/onroad/driver_monitoring/dm_cone.png", cone_and_person_size, cone_and_person_size) center_size = round(36 / self.BASE_SIZE * self._rect.width) self._dm_center = gui_app.texture("icons_mici/onroad/driver_monitoring/dm_center.png", center_size, center_size) - self._dm_background = gui_app.texture("icons_mici/onroad/driver_monitoring/dm_background.png", self._rect.width, self._rect.height) + self._dm_background = gui_app.texture("icons_mici/onroad/driver_monitoring/dm_background.png", int(self._rect.width), int(self._rect.height)) def set_should_draw(self, should_draw: bool): self._should_draw = should_draw @@ -88,15 +88,14 @@ class DriverStateRenderer(Widget): if DEBUG: rl.draw_rectangle_lines_ex(self._rect, 1, rl.RED) - rl.draw_texture(self._dm_background, - int(self._rect.x), - int(self._rect.y), - rl.Color(255, 255, 255, int(255 * self._fade_filter.x))) + rl.draw_texture_ex(self._dm_background, + rl.Vector2(self._rect.x, self._rect.y), 0.0, 1.0, + rl.Color(255, 255, 255, int(255 * self._fade_filter.x))) - rl.draw_texture(self._dm_person, - int(self._rect.x + (self._rect.width - self._dm_person.width) / 2), - int(self._rect.y + (self._rect.height - self._dm_person.height) / 2), - rl.Color(255, 255, 255, int(255 * 0.9 * self._fade_filter.x))) + rl.draw_texture_ex(self._dm_person, + rl.Vector2(self._rect.x + (self._rect.width - self._dm_person.width) / 2, + self._rect.y + (self._rect.height - self._dm_person.height) / 2), 0.0, 1.0, + rl.Color(255, 255, 255, int(255 * 0.9 * self._fade_filter.x))) if self.effective_active: source_rect = rl.Rectangle(0, 0, self._dm_cone.width, self._dm_cone.height) diff --git a/selfdrive/ui/mici/onroad/hud_renderer.py b/selfdrive/ui/mici/onroad/hud_renderer.py index efa4718b1..2c22ad638 100644 --- a/selfdrive/ui/mici/onroad/hud_renderer.py +++ b/selfdrive/ui/mici/onroad/hud_renderer.py @@ -264,12 +264,13 @@ class HudRenderer(Widget): def _draw_steering_wheel(self, rect: rl.Rectangle) -> None: wheel_txt = self._txt_wheel_critical if self._show_wheel_critical else self._txt_wheel + lateral_ui_active = ui_state.status == UIStatus.ENGAGED or ui_state.always_on_lateral_active if self._show_wheel_critical: self._wheel_alpha_filter.update(255) self._wheel_y_filter.update(0) else: - if ui_state.status == UIStatus.DISENGAGED: + if not lateral_ui_active and ui_state.status == UIStatus.DISENGAGED: self._wheel_alpha_filter.update(0) self._wheel_y_filter.update(wheel_txt.height / 2) else: diff --git a/selfdrive/ui/mici/onroad/model_renderer.py b/selfdrive/ui/mici/onroad/model_renderer.py index e3a1e23ed..b4112fff7 100644 --- a/selfdrive/ui/mici/onroad/model_renderer.py +++ b/selfdrive/ui/mici/onroad/model_renderer.py @@ -6,7 +6,7 @@ from dataclasses import dataclass, field from openpilot.common.params import Params from openpilot.common.filter_simple import FirstOrderFilter from openpilot.selfdrive.locationd.calibrationd import HEIGHT_INIT -from openpilot.selfdrive.ui.ui_state import ui_state +from openpilot.selfdrive.ui.ui_state import ui_state, UIStatus from openpilot.selfdrive.ui.mici.onroad import blend_colors from openpilot.selfdrive.ui.mici.onroad.starpilot_status import get_border_color, get_path_edge_color from openpilot.system.ui.lib.application import gui_app @@ -331,7 +331,8 @@ class ModelRenderer(Widget): if not self._path.projected_points.size: return - allow_throttle = sm['longitudinalPlan'].allowThrottle or not self._longitudinal_control + lateral_ui_active = ui_state.status == UIStatus.ENGAGED or ui_state.always_on_lateral_active + allow_throttle = sm['longitudinalPlan'].allowThrottle or not self._longitudinal_control or ui_state.always_on_lateral_active self._blend_filter.update(int(allow_throttle)) if self._experimental_mode: @@ -345,6 +346,8 @@ class ModelRenderer(Widget): # Blend throttle/no throttle colors based on transition blend_factor = round(self._blend_filter.x * 100) / 100 blended_colors = self._blend_colors(NO_THROTTLE_COLORS, THROTTLE_COLORS, blend_factor) + if lateral_ui_active and blend_factor < 1.0: + blended_colors = self._blend_colors(blended_colors, THROTTLE_COLORS, 0.65) gradient = Gradient( start=(0.0, 1.0), # Bottom of path end=(0.0, 0.0), # Top of path diff --git a/selfdrive/ui/mici/onroad/torque_bar.py b/selfdrive/ui/mici/onroad/torque_bar.py index 412d21a7f..079a9fcac 100644 --- a/selfdrive/ui/mici/onroad/torque_bar.py +++ b/selfdrive/ui/mici/onroad/torque_bar.py @@ -145,6 +145,9 @@ def arc_bar_pts(cx: float, cy: float, return pts +DEFAULT_MAX_LAT_ACCEL = 3.0 # m/s^2 + + class TorqueBar(Widget): def __init__(self, demo: bool = False): super().__init__() @@ -165,16 +168,23 @@ class TorqueBar(Widget): controls_state = ui_state.sm['controlsState'] car_state = ui_state.sm['carState'] live_parameters = ui_state.sm['liveParameters'] - lateral_acceleration = controls_state.curvature * car_state.vEgo ** 2 - live_parameters.roll * ACCELERATION_DUE_TO_GRAVITY - # TODO: pull from carparams - max_lateral_acceleration = 3 + car_control = ui_state.sm['carControl'] - # from selfdrived + # Include lateral accel error in estimated torque utilization actual_lateral_accel = controls_state.curvature * car_state.vEgo ** 2 desired_lateral_accel = controls_state.desiredCurvature * car_state.vEgo ** 2 accel_diff = (desired_lateral_accel - actual_lateral_accel) - self._torque_filter.update(min(max(lateral_acceleration / max_lateral_acceleration + accel_diff, -1), 1)) + # Include road roll in estimated torque utilization + # Roll is less accurate near standstill, so reduce its effect at low speed + roll_compensation = live_parameters.roll * ACCELERATION_DUE_TO_GRAVITY * np.interp(car_state.vEgo, [5, 15], [0.0, 1.0]) + lateral_acceleration = actual_lateral_accel - roll_compensation + max_lateral_acceleration = ui_state.CP.maxLateralAccel if ui_state.CP else DEFAULT_MAX_LAT_ACCEL + + if not car_control.latActive: + self._torque_filter.update(0.0) + else: + self._torque_filter.update(np.clip((lateral_acceleration + accel_diff) / max_lateral_acceleration, -1, 1)) else: self._torque_filter.update(-ui_state.sm['carOutput'].actuatorsOutput.torque) @@ -182,16 +192,17 @@ class TorqueBar(Widget): # adjust y pos with torque torque_line_offset = np.interp(abs(self._torque_filter.x), [0.5, 1], [22, 26]) torque_line_height = np.interp(abs(self._torque_filter.x), [0.5, 1], [14, 56]) + lateral_ui_active = ui_state.status == UIStatus.ENGAGED or ui_state.always_on_lateral_active # animate alpha and angle span if not self._demo: - self._torque_line_alpha_filter.update(1.0) + self._torque_line_alpha_filter.update(lateral_ui_active or ui_state.status == UIStatus.OVERRIDE) else: self._torque_line_alpha_filter.update(1.0) torque_line_bg_alpha = np.interp(abs(self._torque_filter.x), [0.5, 1.0], [0.25, 0.5]) torque_line_bg_color = rl.Color(255, 255, 255, int(255 * torque_line_bg_alpha * self._torque_line_alpha_filter.x)) - if ui_state.status != UIStatus.ENGAGED and not self._demo: + if not lateral_ui_active and ui_state.status != UIStatus.OVERRIDE and not self._demo: torque_line_bg_color = rl.Color(255, 255, 255, int(255 * 0.15 * self._torque_line_alpha_filter.x)) # draw curved line polygon torque bar @@ -234,7 +245,7 @@ class TorqueBar(Widget): max(0, abs(self._torque_filter.x) - 0.75) * 4, ) - if ui_state.status != UIStatus.ENGAGED and not self._demo: + if not lateral_ui_active and ui_state.status != UIStatus.OVERRIDE and not self._demo: start_color = end_color = rl.Color(255, 255, 255, int(255 * 0.35 * self._torque_line_alpha_filter.x)) gradient = Gradient( diff --git a/selfdrive/ui/mici/tests/test_widget_leaks.py b/selfdrive/ui/mici/tests/test_widget_leaks.py new file mode 100755 index 000000000..e35cb4477 --- /dev/null +++ b/selfdrive/ui/mici/tests/test_widget_leaks.py @@ -0,0 +1,119 @@ +import pyray as rl +rl.set_config_flags(rl.ConfigFlags.FLAG_WINDOW_HIDDEN) +import gc +import weakref +import pytest +from openpilot.system.ui.lib.application import gui_app +from openpilot.system.ui.widgets import Widget + +# mici dialogs +from openpilot.selfdrive.ui.mici.layouts.onboarding import TrainingGuide as MiciTrainingGuide, OnboardingWindow as MiciOnboardingWindow +from openpilot.selfdrive.ui.mici.onroad.driver_camera_dialog import DriverCameraDialog as MiciDriverCameraDialog +from openpilot.selfdrive.ui.mici.widgets.pairing_dialog import PairingDialog as MiciPairingDialog +from openpilot.selfdrive.ui.mici.widgets.dialog import BigDialog, BigConfirmationDialog, BigInputDialog +from openpilot.selfdrive.ui.mici.layouts.settings.device import MiciFccModal + +# tici dialogs +from openpilot.selfdrive.ui.onroad.driver_camera_dialog import DriverCameraDialog as TiciDriverCameraDialog +from openpilot.selfdrive.ui.layouts.onboarding import OnboardingWindow as TiciOnboardingWindow +from openpilot.selfdrive.ui.widgets.pairing_dialog import PairingDialog as TiciPairingDialog +from openpilot.system.ui.widgets.confirm_dialog import ConfirmDialog +from openpilot.system.ui.widgets.option_dialog import MultiOptionDialog +from openpilot.system.ui.widgets.html_render import HtmlModal +from openpilot.system.ui.widgets.keyboard import Keyboard + +# FIXME: known small leaks not worth worrying about at the moment +KNOWN_LEAKS = { + "openpilot.selfdrive.ui.mici.onroad.driver_camera_dialog.DriverCameraView", + "openpilot.selfdrive.ui.mici.layouts.onboarding.TermsPage", + "openpilot.selfdrive.ui.mici.layouts.onboarding.TrainingGuide", + "openpilot.selfdrive.ui.mici.layouts.onboarding.DeclinePage", + "openpilot.selfdrive.ui.mici.layouts.onboarding.OnboardingWindow", + "openpilot.selfdrive.ui.onroad.driver_state.DriverStateRenderer", + "openpilot.selfdrive.ui.onroad.driver_camera_dialog.DriverCameraDialog", + "openpilot.selfdrive.ui.layouts.onboarding.TermsPage", + "openpilot.selfdrive.ui.layouts.onboarding.DeclinePage", + "openpilot.selfdrive.ui.layouts.onboarding.OnboardingWindow", + "openpilot.system.ui.widgets.confirm_dialog.ConfirmDialog", + "openpilot.system.ui.widgets.label.Label", + "openpilot.system.ui.widgets.button.Button", + "openpilot.system.ui.widgets.html_render.HtmlRenderer", + "openpilot.system.ui.widgets.nav_widget.NavBar", + "openpilot.selfdrive.ui.mici.layouts.settings.device.MiciFccModal", + "openpilot.system.ui.widgets.inputbox.InputBox", + "openpilot.system.ui.widgets.scroller_tici.Scroller", + "openpilot.system.ui.widgets.label.UnifiedLabel", + "openpilot.system.ui.widgets.mici_keyboard.MiciKeyboard", + "openpilot.selfdrive.ui.mici.widgets.dialog.BigConfirmationDialog", + "openpilot.system.ui.widgets.keyboard.Keyboard", + "openpilot.system.ui.widgets.slider.BigSlider", + "openpilot.selfdrive.ui.mici.widgets.dialog.BigInputDialog", + "openpilot.system.ui.widgets.option_dialog.MultiOptionDialog", +} + + +def get_child_widgets(widget: Widget) -> list[Widget]: + children = [] + for val in widget.__dict__.values(): + items = val if isinstance(val, (list, tuple)) else (val,) + children.extend(w for w in items if isinstance(w, Widget)) + return children + + +@pytest.mark.skip(reason="segfaults") +def test_dialogs_do_not_leak(): + gui_app.init_window("ref-test") + + leaked_widgets = set() + + for ctor in ( + # mici + MiciDriverCameraDialog, MiciPairingDialog, + lambda: MiciTrainingGuide(lambda: None), + lambda: MiciOnboardingWindow(lambda: None), + lambda: BigDialog("test", "test"), + lambda: BigConfirmationDialog("test", gui_app.texture("icons_mici/settings/network/new/trash.png", 54, 64), lambda: None), + lambda: BigInputDialog("test"), + lambda: MiciFccModal(text="test"), + # tici + TiciDriverCameraDialog, TiciOnboardingWindow, TiciPairingDialog, Keyboard, + lambda: ConfirmDialog("test", "ok"), + lambda: MultiOptionDialog("test", ["a", "b"]), + lambda: HtmlModal(text="test"), + ): + widget = ctor() + all_refs = [weakref.ref(w) for w in get_child_widgets(widget) + [widget]] + + del widget + + for ref in all_refs: + if ref() is not None: + obj = ref() + name = f"{type(obj).__module__}.{type(obj).__qualname__}" + leaked_widgets.add(name) + + print(f"\n=== Widget {name} alive after del") + print(" Referrers:") + for r in gc.get_referrers(obj): + if r is obj: + continue + + if hasattr(r, '__self__') and r.__self__ is not obj: + print(f" bound method: {type(r.__self__).__qualname__}.{r.__name__}") + elif hasattr(r, '__func__'): + print(f" method: {r.__name__}") + else: + print(f" {type(r).__module__}.{type(r).__qualname__}") + del obj + + gui_app.close() + + unexpected = leaked_widgets - KNOWN_LEAKS + assert not unexpected, f"New leaked widgets: {unexpected}" + + fixed = KNOWN_LEAKS - leaked_widgets + assert not fixed, f"These leaks are fixed, remove from KNOWN_LEAKS: {fixed}" + + +if __name__ == "__main__": + test_dialogs_do_not_leak() diff --git a/selfdrive/ui/mici/widgets/button.py b/selfdrive/ui/mici/widgets/button.py index b500f1430..058c351fb 100644 --- a/selfdrive/ui/mici/widgets/button.py +++ b/selfdrive/ui/mici/widgets/button.py @@ -1,11 +1,11 @@ +import math import pyray as rl from typing import Union from enum import Enum from collections.abc import Callable from openpilot.system.ui.widgets import Widget -from openpilot.system.ui.widgets.label import MiciLabel +from openpilot.system.ui.widgets.label import UnifiedLabel from openpilot.system.ui.widgets.scroller import DO_ZOOM -from openpilot.system.ui.lib.text_measure import measure_text_cached from openpilot.system.ui.lib.application import gui_app, FontWeight, MousePos from openpilot.common.filter_simple import BounceFilter @@ -16,8 +16,7 @@ except ImportError: SCROLLING_SPEED_PX_S = 50 COMPLICATION_SIZE = 36 -LABEL_COLOR = rl.WHITE -LABEL_HORIZONTAL_PADDING = 40 +LABEL_COLOR = rl.Color(255, 255, 255, int(255 * 0.9)) COMPLICATION_GREY = rl.Color(0xAA, 0xAA, 0xAA, 255) PRESSED_SCALE = 1.15 if DO_ZOOM else 1.07 @@ -29,50 +28,51 @@ class ScrollState(Enum): class BigCircleButton(Widget): - def __init__(self, icon: str, red: bool = False): + def __init__(self, icon: rl.Texture, red: bool = False, icon_offset: tuple[int, int] = (0, 0)): super().__init__() self._red = red + self._icon_offset = icon_offset # State self.set_rect(rl.Rectangle(0, 0, 180, 180)) - self._press_state_enabled = True self._scale_filter = BounceFilter(1.0, 0.1, 1 / gui_app.target_fps) + self._click_delay = 0.075 # Icons - self._txt_icon = gui_app.texture(icon, 64, 53) + self._txt_icon = icon self._txt_btn_disabled_bg = gui_app.texture("icons_mici/buttons/button_circle_disabled.png", 180, 180) self._txt_btn_bg = gui_app.texture("icons_mici/buttons/button_circle.png", 180, 180) - self._txt_btn_pressed_bg = gui_app.texture("icons_mici/buttons/button_circle_hover.png", 180, 180) + self._txt_btn_pressed_bg = gui_app.texture("icons_mici/buttons/button_circle_pressed.png", 180, 180) self._txt_btn_red_bg = gui_app.texture("icons_mici/buttons/button_circle_red.png", 180, 180) - self._txt_btn_red_pressed_bg = gui_app.texture("icons_mici/buttons/button_circle_red_hover.png", 180, 180) + self._txt_btn_red_pressed_bg = gui_app.texture("icons_mici/buttons/button_circle_red_pressed.png", 180, 180) - def set_enable_pressed_state(self, pressed: bool): - self._press_state_enabled = pressed + def _draw_content(self, btn_y: float): + # draw icon + icon_color = rl.Color(255, 255, 255, int(255 * 0.9)) if self.enabled else rl.Color(255, 255, 255, int(255 * 0.35)) + rl.draw_texture_ex(self._txt_icon, (self._rect.x + (self._rect.width - self._txt_icon.width) / 2 + self._icon_offset[0], + btn_y + (self._rect.height - self._txt_icon.height) / 2 + self._icon_offset[1]), 0, 1.0, icon_color) def _render(self, _): # draw background txt_bg = self._txt_btn_bg if not self._red else self._txt_btn_red_bg if not self.enabled: txt_bg = self._txt_btn_disabled_bg - elif self.is_pressed and self._press_state_enabled: + elif self.is_pressed: txt_bg = self._txt_btn_pressed_bg if not self._red else self._txt_btn_red_pressed_bg - scale = self._scale_filter.update(PRESSED_SCALE if self.is_pressed and self._press_state_enabled else 1.0) + scale = self._scale_filter.update(PRESSED_SCALE if self.is_pressed else 1.0) btn_x = self._rect.x + (self._rect.width * (1 - scale)) / 2 btn_y = self._rect.y + (self._rect.height * (1 - scale)) / 2 rl.draw_texture_ex(txt_bg, (btn_x, btn_y), 0, scale, rl.WHITE) - # draw icon - icon_color = rl.WHITE if self.enabled else rl.Color(255, 255, 255, int(255 * 0.35)) - rl.draw_texture(self._txt_icon, int(self._rect.x + (self._rect.width - self._txt_icon.width) / 2), - int(self._rect.y + (self._rect.height - self._txt_icon.height) / 2), icon_color) + self._draw_content(btn_y) class BigCircleToggle(BigCircleButton): - def __init__(self, icon: str, toggle_callback: Callable = None): - super().__init__(icon, False) + def __init__(self, icon: rl.Texture, toggle_callback: Callable | None = None, icon_offset: tuple[int, int] = (0, 0)): + super().__init__(icon, False, icon_offset=icon_offset) self._toggle_callback = toggle_callback # State @@ -80,7 +80,7 @@ class BigCircleToggle(BigCircleButton): # Icons self._txt_toggle_enabled = gui_app.texture("icons_mici/buttons/toggle_dot_enabled.png", 66, 66) - self._txt_toggle_disabled = gui_app.texture("icons_mici/buttons/toggle_dot_disabled.png", 70, 70) # TODO: why discrepancy? + self._txt_toggle_disabled = gui_app.texture("icons_mici/buttons/toggle_dot_disabled.png", 66, 66) def set_checked(self, checked: bool): self._checked = checked @@ -92,62 +92,47 @@ class BigCircleToggle(BigCircleButton): if self._toggle_callback: self._toggle_callback(self._checked) - def _render(self, _): - super()._render(_) + def _draw_content(self, btn_y: float): + super()._draw_content(btn_y) # draw status icon - rl.draw_texture(self._txt_toggle_enabled if self._checked else self._txt_toggle_disabled, - int(self._rect.x + (self._rect.width - self._txt_toggle_enabled.width) / 2), - int(self._rect.y + 5), rl.WHITE) + rl.draw_texture_ex(self._txt_toggle_enabled if self._checked else self._txt_toggle_disabled, + (self._rect.x + (self._rect.width - self._txt_toggle_enabled.width) / 2, btn_y + 5), + 0, 1.0, rl.WHITE) class BigButton(Widget): + LABEL_HORIZONTAL_PADDING = 40 + LABEL_VERTICAL_PADDING = 23 # visually matches 30 in figma + """A lightweight stand-in for the Qt BigButton, drawn & updated each frame.""" - def __init__(self, text: str, value: str = "", icon: Union[str, rl.Texture] = ""): + def __init__(self, text: str, value: str = "", icon: Union[rl.Texture, None] = None, scroll: bool = False): super().__init__() self.set_rect(rl.Rectangle(0, 0, 402, 180)) self.text = text self.value = value - self.set_icon(icon) - self._label_font_size_override: int | None = None + self._txt_icon = icon + self._scroll = scroll self._scale_filter = BounceFilter(1.0, 0.1, 1 / gui_app.target_fps) + self._click_delay = 0.075 + self._shake_start: float | None = None + self._grow_animation_until: float | None = None self._rotate_icon_t: float | None = None - self._label_font = gui_app.font(FontWeight.DISPLAY) - self._value_font = gui_app.font(FontWeight.ROMAN) - - self._label = MiciLabel(text, font_size=self._get_label_font_size(), width=int(self._rect.width - LABEL_HORIZONTAL_PADDING * 2), - font_weight=FontWeight.DISPLAY, color=LABEL_COLOR, - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_BOTTOM, wrap_text=True) - self._sub_label = MiciLabel(value, font_size=COMPLICATION_SIZE, width=int(self._rect.width - LABEL_HORIZONTAL_PADDING * 2), - font_weight=FontWeight.ROMAN, color=COMPLICATION_GREY, - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_BOTTOM, wrap_text=True) + self._label = UnifiedLabel(text, font_size=self._get_label_font_size(), font_weight=FontWeight.BOLD, + text_color=LABEL_COLOR, alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_BOTTOM, scroll=scroll, + line_height=0.9) + self._sub_label = UnifiedLabel(value, font_size=COMPLICATION_SIZE, font_weight=FontWeight.ROMAN, + text_color=COMPLICATION_GREY, alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_BOTTOM) + self._update_label_layout() self._load_images() - # internal state - self._scroll_offset = 0 # in pixels - self._needs_scroll = measure_text_cached(self._label_font, text, self._get_label_font_size()).x + 25 > self._rect.width - self._scroll_timer = 0 - self._scroll_state = ScrollState.PRE_SCROLL - - def set_icon(self, icon: Union[str, rl.Texture]): - self._txt_icon = gui_app.texture(icon, 64, 64) if isinstance(icon, str) and len(icon) else icon - - def _refresh_label_metrics(self): - font_size = self._label_font_size_override if self._label_font_size_override is not None else self._get_label_font_size() - self._label.set_font_size(font_size) - self._needs_scroll = measure_text_cached(self._label_font, self.text, font_size).x + 25 > self._rect.width - self._scroll_offset = 0 - self._scroll_timer = 0 - self._scroll_state = ScrollState.PRE_SCROLL - - def _set_label_font_size_override(self, font_size: int | None): - self._label_font_size_override = font_size - self._refresh_label_metrics() + def set_icon(self, icon: Union[rl.Texture, None]): + self._txt_icon = icon def set_rotate_icon(self, rotate: bool): if rotate and self._rotate_icon_t is not None: @@ -158,32 +143,37 @@ class BigButton(Widget): self._txt_default_bg = gui_app.texture("icons_mici/buttons/button_rectangle.png", 402, 180) self._txt_pressed_bg = gui_app.texture("icons_mici/buttons/button_rectangle_pressed.png", 402, 180) self._txt_disabled_bg = gui_app.texture("icons_mici/buttons/button_rectangle_disabled.png", 402, 180) - self._txt_hover_bg = gui_app.texture("icons_mici/buttons/button_rectangle_hover.png", 402, 180) + + def set_touch_valid_callback(self, touch_callback: Callable[[], bool]) -> None: + super().set_touch_valid_callback(lambda: touch_callback() and self._grow_animation_until is None) + + def _width_hint(self) -> int: + # Single line if scrolling, so hide behind icon if exists + icon_size = self._txt_icon.width if self._txt_icon and self._scroll and self.value else 0 + return int(self._rect.width - self.LABEL_HORIZONTAL_PADDING * 2 - icon_size) def _get_label_font_size(self): - if len(self.text) < 12: - font_size = 64 - elif len(self.text) < 17: - font_size = 48 - elif len(self.text) < 20: - font_size = 42 + if len(self.text) <= 18: + return 48 else: - font_size = 36 + return 42 + def _update_label_layout(self): + self._label.set_font_size(self._get_label_font_size()) if self.value: - font_size -= 20 - - return font_size + self._label.set_alignment_vertical(rl.GuiTextAlignmentVertical.TEXT_ALIGN_TOP) + else: + self._label.set_alignment_vertical(rl.GuiTextAlignmentVertical.TEXT_ALIGN_BOTTOM) def set_text(self, text: str): self.text = text self._label.set_text(text) - self._refresh_label_metrics() + self._update_label_layout() def set_value(self, value: str): self.value = value self._sub_label.set_text(value) - self._refresh_label_metrics() + self._update_label_layout() def get_value(self) -> str: return self.value @@ -191,64 +181,60 @@ class BigButton(Widget): def get_text(self): return self.text - def _update_state(self): - # hold on text for a bit, scroll, hold again, reset - if self._needs_scroll: - """`dt` should be seconds since last frame (rl.get_frame_time()).""" - # TODO: this comment is generated by GPT, prob wrong and misused - dt = rl.get_frame_time() + def trigger_shake(self): + self._shake_start = rl.get_time() - self._scroll_timer += dt - if self._scroll_state == ScrollState.PRE_SCROLL: - if self._scroll_timer < 0.5: - return - self._scroll_state = ScrollState.SCROLLING - self._scroll_timer = 0 + def trigger_grow_animation(self, duration: float = 0.65): + self._grow_animation_until = rl.get_time() + duration - elif self._scroll_state == ScrollState.SCROLLING: - self._scroll_offset -= SCROLLING_SPEED_PX_S * dt - # reset when text has completely left the button + 50 px gap - # TODO: use global constant for 30+30 px gap - # TODO: add std Widget padding option integrated into the self._rect - full_len = measure_text_cached(self._label_font, self.text, self._get_label_font_size()).x + 30 + 30 - if self._scroll_offset < (self._rect.width - full_len): - self._scroll_state = ScrollState.POST_SCROLL - self._scroll_timer = 0 + @property + def _shake_offset(self) -> float: + SHAKE_DURATION = 0.5 + SHAKE_AMPLITUDE = 24.0 + SHAKE_FREQUENCY = 32.0 + if self._shake_start is None: + return 0.0 + t = rl.get_time() - self._shake_start + if t > SHAKE_DURATION: + return 0.0 + decay = 1.0 - t / SHAKE_DURATION + return decay * SHAKE_AMPLITUDE * math.sin(t * SHAKE_FREQUENCY) - elif self._scroll_state == ScrollState.POST_SCROLL: - # wait for a bit before starting to scroll again - if self._scroll_timer < 0.75: - return - self._scroll_state = ScrollState.PRE_SCROLL - self._scroll_timer = 0 - self._scroll_offset = 0 + def set_position(self, x: float, y: float) -> None: + super().set_position(x + self._shake_offset, y) + + def _handle_background(self) -> tuple[rl.Texture, float, float, float]: + if self._grow_animation_until is not None: + if rl.get_time() >= self._grow_animation_until: + self._grow_animation_until = None - def _render(self, _): # draw _txt_default_bg txt_bg = self._txt_default_bg if not self.enabled: txt_bg = self._txt_disabled_bg elif self.is_pressed: - txt_bg = self._txt_hover_bg + txt_bg = self._txt_pressed_bg - scale = self._scale_filter.update(PRESSED_SCALE if self.is_pressed else 1.0) + scale = self._scale_filter.update(PRESSED_SCALE if self.is_pressed or self._grow_animation_until is not None else 1.0) btn_x = self._rect.x + (self._rect.width * (1 - scale)) / 2 btn_y = self._rect.y + (self._rect.height * (1 - scale)) / 2 - rl.draw_texture_ex(txt_bg, (btn_x, btn_y), 0, scale, rl.WHITE) + return txt_bg, btn_x, btn_y, scale + def _draw_content(self, btn_y: float): # LABEL ------------------------------------------------------------------ - lx = self._rect.x + LABEL_HORIZONTAL_PADDING - ly = btn_y + self._rect.height - 33 # - 40# - self._get_label_font_size() / 2 - - if self.value: - self._sub_label.set_position(lx, ly) - ly -= self._sub_label.font_size + 9 - self._sub_label.render() + label_x = self._rect.x + self.LABEL_HORIZONTAL_PADDING label_color = LABEL_COLOR if self.enabled else rl.Color(255, 255, 255, int(255 * 0.35)) self._label.set_color(label_color) - self._label.set_position(lx, ly) - self._label.render() + label_rect = rl.Rectangle(label_x, btn_y + self.LABEL_VERTICAL_PADDING, self._width_hint(), + self._rect.height - self.LABEL_VERTICAL_PADDING * 2) + self._label.render(label_rect) + + if self.value: + label_y = btn_y + self.LABEL_VERTICAL_PADDING + self._label.get_content_height(self._width_hint()) + sub_label_height = btn_y + self._rect.height - self.LABEL_VERTICAL_PADDING - label_y + sub_label_rect = rl.Rectangle(label_x, label_y, self._width_hint(), sub_label_height) + self._sub_label.render(sub_label_rect) # ICON ------------------------------------------------------------------- if self._txt_icon: @@ -256,23 +242,35 @@ class BigButton(Widget): if self._rotate_icon_t is not None: rotation = (rl.get_time() - self._rotate_icon_t) * 180 - # drop top right with 30px padding + # draw top right with 30px padding x = self._rect.x + self._rect.width - 30 - self._txt_icon.width / 2 - y = self._rect.y + 30 + self._txt_icon.height / 2 + y = btn_y + 30 + self._txt_icon.height / 2 source_rec = rl.Rectangle(0, 0, self._txt_icon.width, self._txt_icon.height) - dest_rec = rl.Rectangle(int(x), int(y), self._txt_icon.width, self._txt_icon.height) + dest_rec = rl.Rectangle(x, y, self._txt_icon.width, self._txt_icon.height) origin = rl.Vector2(self._txt_icon.width / 2, self._txt_icon.height / 2) - rl.draw_texture_pro(self._txt_icon, source_rec, dest_rec, origin, rotation, rl.WHITE) + rl.draw_texture_pro(self._txt_icon, source_rec, dest_rec, origin, rotation, rl.Color(255, 255, 255, int(255 * 0.9))) + + def _render(self, _): + txt_bg, btn_x, btn_y, scale = self._handle_background() + + if self._scroll: + # draw black background since images are transparent + scaled_rect = rl.Rectangle(btn_x, btn_y, self._rect.width * scale, self._rect.height * scale) + rl.draw_rectangle_rounded(scaled_rect, 0.4, 7, rl.Color(0, 0, 0, int(255 * 0.5))) + + self._draw_content(btn_y) + rl.draw_texture_ex(txt_bg, (btn_x, btn_y), 0, scale, rl.WHITE) + else: + rl.draw_texture_ex(txt_bg, (btn_x, btn_y), 0, scale, rl.WHITE) + self._draw_content(btn_y) class BigToggle(BigButton): - def __init__(self, text: str, value: str = "", initial_state: bool = False, toggle_callback: Callable = None): + def __init__(self, text: str, value: str = "", initial_state: bool = False, toggle_callback: Callable | None = None): super().__init__(text, value, "") self._checked = initial_state self._toggle_callback = toggle_callback - self._set_label_font_size_override(48) - def _load_images(self): super()._load_images() self._txt_enabled_toggle = gui_app.texture("icons_mici/buttons/toggle_pill_enabled.png", 84, 66) @@ -290,35 +288,30 @@ class BigToggle(BigButton): def _draw_pill(self, x: float, y: float, checked: bool): # draw toggle icon top right if checked: - rl.draw_texture(self._txt_enabled_toggle, int(x), int(y), rl.WHITE) + rl.draw_texture_ex(self._txt_enabled_toggle, (x, y), 0, 1.0, rl.WHITE) else: - rl.draw_texture(self._txt_disabled_toggle, int(x), int(y), rl.WHITE) + rl.draw_texture_ex(self._txt_disabled_toggle, (x, y), 0, 1.0, rl.WHITE) - def _render(self, _): - super()._render(_) + def _draw_content(self, btn_y: float): + super()._draw_content(btn_y) x = self._rect.x + self._rect.width - self._txt_enabled_toggle.width - y = self._rect.y + y = btn_y self._draw_pill(x, y, self._checked) class BigMultiToggle(BigToggle): - def __init__(self, text: str, options: list[str], toggle_callback: Callable = None, - select_callback: Callable = None): + def __init__(self, text: str, options: list[str], toggle_callback: Callable | None = None, + select_callback: Callable | None = None): super().__init__(text, "", toggle_callback=toggle_callback) assert len(options) > 0 self._options = options self._select_callback = select_callback - self._label.set_width(int(self._rect.width - LABEL_HORIZONTAL_PADDING * 2 - self._txt_enabled_toggle.width)) - # Keep the title size stable when the selected option changes. - self._set_label_font_size_override(self._get_label_font_size()) - self.set_value(self._options[0]) - def _get_label_font_size(self): - font_size = super()._get_label_font_size() - return font_size - 6 + def _width_hint(self) -> int: + return int(self._rect.width - self.LABEL_HORIZONTAL_PADDING * 2 - self._txt_enabled_toggle.width) def _handle_mouse_release(self, mouse_pos: MousePos): super()._handle_mouse_release(mouse_pos) @@ -328,22 +321,60 @@ class BigMultiToggle(BigToggle): if self._select_callback: self._select_callback(self.value) - def _render(self, _): - BigButton._render(self, _) + def _draw_content(self, btn_y: float): + # don't draw pill from BigToggle + BigButton._draw_content(self, btn_y) checked_idx = self._options.index(self.value) x = self._rect.x + self._rect.width - self._txt_enabled_toggle.width - y = self._rect.y + y = btn_y for i in range(len(self._options)): self._draw_pill(x, y, checked_idx == i) y += 35 +class GreyBigButton(BigButton): + """Users should manage newlines with this class themselves""" + + LABEL_HORIZONTAL_PADDING = 30 + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.set_touch_valid_callback(lambda: False) + + self._rect.width = 476 + + self._label.set_font_size(36) + self._label.set_font_weight(FontWeight.BOLD) + self._label.set_line_height(1.0) + + self._sub_label.set_font_size(36) + self._sub_label.set_text_color(rl.Color(255, 255, 255, int(255 * 0.9))) + self._sub_label.set_font_weight(FontWeight.DISPLAY_REGULAR) + self._sub_label.set_alignment_vertical(rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE if not self._label.text else + rl.GuiTextAlignmentVertical.TEXT_ALIGN_BOTTOM) + self._sub_label.set_line_height(0.95) + + @property + def LABEL_VERTICAL_PADDING(self): + return BigButton.LABEL_VERTICAL_PADDING if self._label.text else 18 + + def _width_hint(self) -> int: + return int(self._rect.width - self.LABEL_HORIZONTAL_PADDING * 2) + + def _get_label_font_size(self): + return 36 + + def _render(self, _): + rl.draw_rectangle_rounded(self._rect, 0.4, 10, rl.Color(255, 255, 255, int(255 * 0.15))) + self._draw_content(self._rect.y) + + class BigMultiParamToggle(BigMultiToggle): - def __init__(self, text: str, param: str, options: list[str], toggle_callback: Callable = None, - select_callback: Callable = None): + def __init__(self, text: str, param: str, options: list[str], toggle_callback: Callable | None = None, + select_callback: Callable | None = None): super().__init__(text, options, toggle_callback, select_callback) self._param = param @@ -360,7 +391,7 @@ class BigMultiParamToggle(BigMultiToggle): class BigParamControl(BigToggle): - def __init__(self, text: str, param: str, toggle_callback: Callable = None): + def __init__(self, text: str, param: str, toggle_callback: Callable | None = None): super().__init__(text, "", toggle_callback=toggle_callback) self.param = param self.params = Params() @@ -376,8 +407,9 @@ class BigParamControl(BigToggle): # TODO: param control base class class BigCircleParamControl(BigCircleToggle): - def __init__(self, icon: str, param: str, toggle_callback: Callable = None): - super().__init__(icon, toggle_callback) + def __init__(self, icon: rl.Texture, param: str, toggle_callback: Callable | None = None, + icon_offset: tuple[int, int] = (0, 0)): + super().__init__(icon, toggle_callback, icon_offset=icon_offset) self._param = param self.params = Params() self.set_checked(self.params.get_bool(self._param, False)) diff --git a/selfdrive/ui/mici/widgets/dialog.py b/selfdrive/ui/mici/widgets/dialog.py index d64571e3c..b23a83ecd 100644 --- a/selfdrive/ui/mici/widgets/dialog.py +++ b/selfdrive/ui/mici/widgets/dialog.py @@ -1,19 +1,18 @@ import abc import math import pyray as rl -from typing import Union +from typing import Union, cast from collections.abc import Callable -from typing import cast -from openpilot.system.ui.widgets import Widget, NavWidget, DialogResult -from openpilot.system.ui.widgets.label import UnifiedLabel, gui_label +from openpilot.system.ui.widgets import Widget +from openpilot.system.ui.widgets.nav_widget import NavWidget +from openpilot.system.ui.widgets.label import UnifiedLabel from openpilot.system.ui.widgets.mici_keyboard import MiciKeyboard from openpilot.system.ui.lib.text_measure import measure_text_cached -from openpilot.system.ui.lib.wrap_text import wrap_text from openpilot.system.ui.lib.application import gui_app, FontWeight, MousePos, MouseEvent from openpilot.system.ui.widgets.scroller import Scroller from openpilot.system.ui.widgets.slider import RedBigSlider, BigSlider from openpilot.common.filter_simple import FirstOrderFilter -from openpilot.selfdrive.ui.mici.widgets.button import BigButton +from openpilot.selfdrive.ui.mici.widgets.button import BigCircleButton, BigButton, GreyBigButton from openpilot.selfdrive.ui.mici.widgets.side_button import SideButton DEBUG = False @@ -22,162 +21,80 @@ PADDING = 20 class BigDialogBase(NavWidget, abc.ABC): - def __init__(self, right_btn: str | None = None, right_btn_callback: Callable | None = None): + def __init__(self): super().__init__() - self._ret = DialogResult.NO_ACTION self.set_rect(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) - self.set_back_callback(lambda: setattr(self, '_ret', DialogResult.CANCEL)) - - self._right_btn = None - if right_btn: - def right_btn_callback_wrapper(): - gui_app.set_modal_overlay(None) - if right_btn_callback: - right_btn_callback() - - self._right_btn = SideButton(right_btn) - self._right_btn.set_click_callback(right_btn_callback_wrapper) - # move to right side - self._right_btn._rect.x = self._rect.x + self._rect.width - self._right_btn._rect.width - - def _render(self, _) -> DialogResult: - """ - Allows `gui_app.set_modal_overlay(BigDialog(...))`. - The overlay runner keeps calling until result != NO_ACTION. - """ - if self._right_btn: - self._right_btn.set_position(self._right_btn._rect.x, self._rect.y) - self._right_btn.render() - - return self._ret class BigDialog(BigDialogBase): - def __init__(self, - title: str, - description: str, - right_btn: str | None = None, - right_btn_callback: Callable | None = None): - super().__init__(right_btn, right_btn_callback) - self._title = title - self._description = description + def __init__(self, title: str, description: str, icon: Union[rl.Texture, None] = None): + super().__init__() + self._card = GreyBigButton(title, description, icon) - def _render(self, _) -> DialogResult: - super()._render(_) - - # draw title - # TODO: we desperately need layouts - # TODO: coming up with these numbers manually is a pain and not scalable - # TODO: no clue what any of these numbers mean. VBox and HBox would remove all of this shite - max_width = self._rect.width - PADDING * 2 - if self._right_btn: - max_width -= self._right_btn._rect.width - - title_font_size = 50 - desc_font_size = 30 - title_lines = wrap_text(gui_app.font(FontWeight.BOLD), self._title, title_font_size, int(max_width)) - if not title_lines: - title_lines = [""] - title_line_height = max(int(title_font_size * 1.2), int(measure_text_cached(gui_app.font(FontWeight.BOLD), "Ag", title_font_size).y)) - text_x_offset = 0 - title_x = int(self._rect.x + text_x_offset + PADDING) - title_y = int(self._rect.y + PADDING) - for i, line in enumerate(title_lines): - line_rect = rl.Rectangle( - title_x, - title_y + i * title_line_height, - int(max_width), - int(title_line_height), - ) - gui_label(line_rect, line, title_font_size, font_weight=FontWeight.BOLD, - alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER, - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_TOP) - - # draw description - desc_lines = wrap_text(gui_app.font(FontWeight.MEDIUM), self._description, desc_font_size, int(max_width)) - if not desc_lines: - desc_lines = [""] - desc_line_height = max(int(desc_font_size * 1.25), int(measure_text_cached(gui_app.font(FontWeight.MEDIUM), "Ag", desc_font_size).y)) - desc_y = max( - int(self._rect.y + self._rect.height / 3), - title_y + title_line_height * len(title_lines) + 22, - ) - for i, line in enumerate(desc_lines): - line_rect = rl.Rectangle( - title_x, - desc_y + i * desc_line_height, - int(max_width), - int(desc_line_height), - ) - gui_label(line_rect, line, desc_font_size, font_weight=FontWeight.MEDIUM, - alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER, - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_TOP) - - return self._ret + def _render(self, _): + self._card.render(rl.Rectangle( + self._rect.x + self._rect.width / 2 - self._card.rect.width / 2, + self._rect.y + self._rect.height / 2 - self._card.rect.height / 2, + self._card.rect.width, + self._card.rect.height, + )) -class BigConfirmationDialogV2(BigDialogBase): - def __init__(self, title: str, icon: str, red: bool = False, - exit_on_confirm: bool = True, - confirm_callback: Callable | None = None): +class BigConfirmationDialog(BigDialogBase): + def __init__(self, title: str, icon: rl.Texture, confirm_callback: Callable[[], None], + exit_on_confirm: bool = True, red: bool = False): super().__init__() self._confirm_callback = confirm_callback self._exit_on_confirm = exit_on_confirm - icon_txt = gui_app.texture(icon, 64, 53) self._slider: BigSlider | RedBigSlider if red: - self._slider = RedBigSlider(title, icon_txt, confirm_callback=self._on_confirm) + self._slider = self._child(RedBigSlider(title, icon, confirm_callback=self._on_confirm)) else: - self._slider = BigSlider(title, icon_txt, confirm_callback=self._on_confirm) - self._slider.set_enabled(lambda: not self._swiping_away) - - def show_event(self): - super().show_event() - self._slider.show_event() - - def hide_event(self): - super().hide_event() - self._slider.hide_event() + self._slider = self._child(BigSlider(title, icon, confirm_callback=self._on_confirm)) + self._slider.set_enabled(lambda: self.enabled and not self.is_dismissing) # for nav stack + NavWidget def _on_confirm(self): - if self._confirm_callback: - self._confirm_callback() if self._exit_on_confirm: - self._ret = DialogResult.CONFIRM + self.dismiss(self._confirm_callback) + elif self._confirm_callback: + self._confirm_callback() def _update_state(self): super()._update_state() - if self._swiping_away and not self._slider.confirmed: - self._slider.reset(reset_shimmer=False) + if self.is_dismissing and not self._slider.confirmed: + self._slider.reset() - def _render(self, _) -> DialogResult: + def _render(self, _): self._slider.render(self._rect) - return self._ret class BigInputDialog(BigDialogBase): BACK_TOUCH_AREA_PERCENTAGE = 0.2 BACKSPACE_RATE = 25 # hz + TEXT_INPUT_SIZE = 35 def __init__(self, hint: str, default_text: str = "", minimum_length: int = 1, - confirm_callback: Callable[[str], None] = None): - super().__init__(None, None) + confirm_callback: Callable[[str], None] | None = None, + auto_return_to_letters: str = ""): + super().__init__() self._hint_label = UnifiedLabel(hint, font_size=35, text_color=rl.Color(255, 255, 255, int(255 * 0.35)), font_weight=FontWeight.MEDIUM) - self._keyboard = MiciKeyboard() + self._keyboard = MiciKeyboard(auto_return_to_letters=auto_return_to_letters) self._keyboard.set_text(default_text) + self._keyboard.set_enabled(lambda: self.enabled and not self.is_dismissing) # for nav stack + NavWidget self._minimum_length = minimum_length self._backspace_held_time: float | None = None - self._backspace_img = gui_app.texture("icons_mici/settings/keyboard/backspace.png", 44, 44) + self._backspace_img = gui_app.texture("icons_mici/settings/keyboard/backspace.png", 42, 36) self._backspace_img_alpha = FirstOrderFilter(0, 0.05, 1 / gui_app.target_fps) - self._enter_img = gui_app.texture("icons_mici/settings/keyboard/confirm.png", 44, 44) + self._enter_img = gui_app.texture("icons_mici/settings/keyboard/enter.png", 76, 62) + self._enter_disabled_img = gui_app.texture("icons_mici/settings/keyboard/enter_disabled.png", 76, 62) self._enter_img_alpha = FirstOrderFilter(0, 0.05, 1 / gui_app.target_fps) # rects for top buttons @@ -185,14 +102,17 @@ class BigInputDialog(BigDialogBase): self._top_right_button_rect = rl.Rectangle(0, 0, 0, 0) def confirm_callback_wrapper(): - self._ret = DialogResult.CONFIRM - if confirm_callback: - confirm_callback(self._keyboard.text()) + text = self._keyboard.text() + self.dismiss((lambda: confirm_callback(text)) if confirm_callback else None) self._confirm_callback = confirm_callback_wrapper def _update_state(self): super()._update_state() + if self.is_dismissing: + self._backspace_held_time = None + return + last_mouse_event = gui_app.last_mouse_event if last_mouse_event.left_down and rl.check_collision_point_rec(last_mouse_event.pos, self._top_right_button_rect) and self._backspace_img_alpha.x > 1: if self._backspace_held_time is None: @@ -206,64 +126,60 @@ class BigInputDialog(BigDialogBase): self._backspace_held_time = None def _render(self, _): - text_input_size = 35 - # draw current text so far below everything. text floats left but always stays in view text = self._keyboard.text() candidate_char = self._keyboard.get_candidate_character() - text_size = measure_text_cached(gui_app.font(FontWeight.ROMAN), text + candidate_char or self._hint_label.text, text_input_size) - text_x = PADDING * 2 + self._enter_img.width + text_size = measure_text_cached(gui_app.font(FontWeight.ROMAN), text + candidate_char or self._hint_label.text, self.TEXT_INPUT_SIZE) - # text needs to move left if we're at the end where right button is - text_rect = rl.Rectangle(text_x, - int(self._rect.y + PADDING), - # clip width to right button when in view - int(self._rect.width - text_x - PADDING * 2 - self._enter_img.width + 5), # TODO: why 5? - int(text_size.y)) - - # draw rounded background for text input bg_block_margin = 5 - text_field_rect = rl.Rectangle(text_rect.x - bg_block_margin, text_rect.y - bg_block_margin, - text_rect.width + bg_block_margin * 2, text_input_size + bg_block_margin * 2) + text_x = PADDING / 2 + self._enter_img.width + PADDING + text_field_rect = rl.Rectangle(text_x, self._rect.y + PADDING - bg_block_margin, + self._rect.width - text_x * 2, + text_size.y) # draw text input # push text left with a gradient on left side if too long - if text_size.x > text_rect.width: - text_x -= text_size.x - text_rect.width + if text_size.x > text_field_rect.width: + text_x -= text_size.x - text_field_rect.width - rl.begin_scissor_mode(int(text_rect.x), int(text_rect.y), int(text_rect.width), int(text_rect.height)) - rl.draw_text_ex(gui_app.font(FontWeight.ROMAN), text, rl.Vector2(text_x, text_rect.y), text_input_size, 0, rl.WHITE) + rl.begin_scissor_mode(int(text_field_rect.x), int(text_field_rect.y), int(text_field_rect.width), int(text_field_rect.height)) + rl.draw_text_ex(gui_app.font(FontWeight.ROMAN), text, rl.Vector2(text_x, text_field_rect.y), self.TEXT_INPUT_SIZE, 0, rl.WHITE) # draw grayed out character user is hovering over if candidate_char: - candidate_char_size = measure_text_cached(gui_app.font(FontWeight.ROMAN), candidate_char, text_input_size) + candidate_char_size = measure_text_cached(gui_app.font(FontWeight.ROMAN), candidate_char, self.TEXT_INPUT_SIZE) rl.draw_text_ex(gui_app.font(FontWeight.ROMAN), candidate_char, - rl.Vector2(min(text_x + text_size.x, text_rect.x + text_rect.width) - candidate_char_size.x, text_rect.y), - text_input_size, 0, rl.Color(255, 255, 255, 128)) + rl.Vector2(min(text_x + text_size.x, text_field_rect.x + text_field_rect.width) - candidate_char_size.x, text_field_rect.y), + self.TEXT_INPUT_SIZE, 0, rl.Color(255, 255, 255, 128)) rl.end_scissor_mode() # draw gradient on left side to indicate more text - if text_size.x > text_rect.width: - rl.draw_rectangle_gradient_h(int(text_rect.x), int(text_rect.y), 80, int(text_rect.height), - rl.BLACK, rl.BLANK) + if text_size.x > text_field_rect.width: + rl.draw_rectangle_gradient_ex(rl.Rectangle(text_field_rect.x, text_field_rect.y, 80, text_field_rect.height), + rl.BLACK, rl.BLANK, rl.BLANK, rl.BLACK) # draw cursor + blink_alpha = (math.sin(rl.get_time() * 6) + 1) / 2 if text: - blink_alpha = (math.sin(rl.get_time() * 6) + 1) / 2 - cursor_x = min(text_x + text_size.x + 3, text_rect.x + text_rect.width) - rl.draw_rectangle_rounded(rl.Rectangle(int(cursor_x), int(text_rect.y), 4, int(text_size.y)), - 1, 4, rl.Color(255, 255, 255, int(255 * blink_alpha))) + cursor_x = min(text_x + text_size.x + 3, text_field_rect.x + text_field_rect.width) + else: + cursor_x = text_field_rect.x - 6 + rl.draw_rectangle_rounded(rl.Rectangle(cursor_x, text_field_rect.y, 4, text_size.y), + 1, 4, rl.Color(255, 255, 255, int(255 * blink_alpha))) # draw backspace icon with nice fade self._backspace_img_alpha.update(255 * bool(text)) if self._backspace_img_alpha.x > 1: color = rl.Color(255, 255, 255, int(self._backspace_img_alpha.x)) - rl.draw_texture(self._backspace_img, int(self._rect.width - self._enter_img.width - 15), int(text_field_rect.y), color) + rl.draw_texture_ex(self._backspace_img, rl.Vector2(self._rect.width - self._backspace_img.width - 27, self._rect.y + 14), 0.0, 1.0, color) if not text and self._hint_label.text and not candidate_char: # draw description if no text entered yet and not drawing candidate char - self._hint_label.render(text_field_rect) + hint_rect = rl.Rectangle(text_field_rect.x, text_field_rect.y, + self._rect.width - text_field_rect.x - PADDING, + text_field_rect.height) + self._hint_label.render(hint_rect) # TODO: move to update state # make rect take up entire area so it's easier to click @@ -271,10 +187,12 @@ class BigInputDialog(BigDialogBase): self._top_right_button_rect = rl.Rectangle(text_field_rect.x + text_field_rect.width, self._rect.y, self._rect.width - (text_field_rect.x + text_field_rect.width), self._top_left_button_rect.height) - self._enter_img_alpha.update(255 if (len(text) >= self._minimum_length) else 255 * 0.35) - if self._enter_img_alpha.x > 1: - color = rl.Color(255, 255, 255, int(self._enter_img_alpha.x)) - rl.draw_texture(self._enter_img, int(self._rect.x + 15), int(text_field_rect.y), color) + # draw enter button + self._enter_img_alpha.update(255 if len(text) >= self._minimum_length else 0) + color = rl.Color(255, 255, 255, int(self._enter_img_alpha.x)) + rl.draw_texture_ex(self._enter_img, rl.Vector2(self._rect.x + PADDING / 2, self._rect.y), 0.0, 1.0, color) + color = rl.Color(255, 255, 255, 255 - int(self._enter_img_alpha.x)) + rl.draw_texture_ex(self._enter_disabled_img, rl.Vector2(self._rect.x + PADDING / 2, self._rect.y), 0.0, 1.0, color) # keyboard goes over everything self._keyboard.render(self._rect) @@ -282,16 +200,17 @@ class BigInputDialog(BigDialogBase): # draw debugging rect bounds if DEBUG: rl.draw_rectangle_lines_ex(text_field_rect, 1, rl.Color(100, 100, 100, 255)) - rl.draw_rectangle_lines_ex(text_rect, 1, rl.Color(0, 255, 0, 255)) rl.draw_rectangle_lines_ex(self._top_right_button_rect, 1, rl.Color(0, 255, 0, 255)) rl.draw_rectangle_lines_ex(self._top_left_button_rect, 1, rl.Color(0, 255, 0, 255)) - return self._ret - def _handle_mouse_press(self, mouse_pos: MousePos): super()._handle_mouse_press(mouse_pos) # TODO: need to track where press was so enter and back can activate on release rather than press # or turn into icon widgets :eyes_open: + + if self.is_dismissing: + return + # handle backspace icon click if rl.check_collision_point_rec(mouse_pos, self._top_right_button_rect) and self._backspace_img_alpha.x > 254: self._keyboard.backspace() @@ -300,6 +219,30 @@ class BigInputDialog(BigDialogBase): self._confirm_callback() +class BigDialogButton(BigButton): + def __init__(self, text: str, value: str = "", icon: Union[str, rl.Texture] = "", description: str = ""): + super().__init__(text, value, icon) + self._description = description + + def _handle_mouse_release(self, mouse_pos: MousePos): + super()._handle_mouse_release(mouse_pos) + + dlg = BigDialog(self.text, self._description) + gui_app.push_widget(dlg) + + +class BigConfirmationCircleButton(BigCircleButton): + def __init__(self, title: str, icon: rl.Texture, confirm_callback: Callable[[], None], exit_on_confirm: bool = True, + red: bool = False, icon_offset: tuple[int, int] = (0, 0)): + super().__init__(icon, red, icon_offset) + + def show_confirm_dialog(): + gui_app.push_widget(BigConfirmationDialog(title, icon, confirm_callback, + exit_on_confirm=exit_on_confirm, red=red)) + + self.set_click_callback(show_confirm_dialog) + + class BigDialogOptionButton(Widget): HEIGHT = 64 SELECTED_HEIGHT = 74 @@ -308,12 +251,15 @@ class BigDialogOptionButton(Widget): super().__init__() self.option = option self.set_rect(rl.Rectangle(0, 0, int(gui_app.width / 2 + 220), self.HEIGHT)) - self._selected = False - - self._label = UnifiedLabel(option, font_size=70, text_color=rl.Color(255, 255, 255, int(255 * 0.58)), - font_weight=FontWeight.DISPLAY_REGULAR, alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE, - scroll=True) + self._label = UnifiedLabel( + option, + font_size=70, + text_color=rl.Color(255, 255, 255, int(255 * 0.58)), + font_weight=FontWeight.DISPLAY_REGULAR, + alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE, + scroll=True, + ) def show_event(self): super().show_event() @@ -324,10 +270,6 @@ class BigDialogOptionButton(Widget): self._rect.height = self.SELECTED_HEIGHT if selected else self.HEIGHT def _render(self, _): - if DEBUG: - rl.draw_rectangle_lines_ex(self._rect, 1, rl.Color(0, 255, 0, 255)) - - # FIXME: offset x by -45 because scroller centers horizontally if self._selected: self._label.set_font_size(self.SELECTED_HEIGHT) self._label.set_color(rl.Color(255, 255, 255, int(255 * 0.9))) @@ -340,56 +282,63 @@ class BigDialogOptionButton(Widget): self._label.render(self._rect) -class BigMultiOptionDialog(BigDialogBase): - BACK_TOUCH_AREA_PERCENTAGE = 0.1 +class BigMultiOptionDialog(NavWidget): + BACK_TOUCH_AREA_PERCENTAGE = 0.25 def __init__(self, options: list[str], default: str | None, - right_btn: str | None = 'check', right_btn_callback: Callable[[], None] = None): - super().__init__(right_btn, right_btn_callback=right_btn_callback) + right_btn: str | None = "check", right_btn_callback: Callable[[], None] | None = None): + super().__init__() self._options = options - if default is not None: - assert default in options + if default not in options: + default = options[0] if options else None + self._right_btn_callback = right_btn_callback self._default_option: str | None = default - self._selected_option: str = self._default_option or (options[0] if len(options) > 0 else "") + self._selected_option: str = self._default_option or (options[0] if options else "") self._last_selected_option: str = self._selected_option - - # Widget doesn't differentiate between click and drag self._can_click = True - self._scroller = Scroller([], horizontal=False, pad_start=100, pad_end=100, spacing=0, snap_items=True) + self._scroller = self._child(Scroller(horizontal=False, pad=100, spacing=0, snap_items=True, + scroll_indicator=False, edge_shadows=False)) + self._scroll_inner = self._scroller._scroller + + self._right_btn = self._child(SideButton(right_btn or "check")) if right_btn is not None else None if self._right_btn is not None: - self._scroller.set_enabled(lambda: not cast(Widget, self._right_btn).is_pressed) + self._right_btn.set_click_callback(self._confirm_selection) + self._scroller.set_enabled(lambda: self.enabled and not self.is_dismissing and not self._right_btn.is_pressed) + else: + self._scroller.set_enabled(lambda: self.enabled and not self.is_dismissing) for option in options: - self._scroller.add_widget(BigDialogOptionButton(option)) + self._scroll_inner.add_widget(BigDialogOptionButton(option)) def show_event(self): super().show_event() - self._scroller.show_event() if self._default_option is not None: self._on_option_selected(self._default_option) def get_selected_option(self) -> str: return self._selected_option + def _confirm_selection(self): + self.dismiss(self._right_btn_callback) + def _on_option_selected(self, option: str): y_pos = 0.0 - for btn in self._scroller._items: + for btn in self._scroll_inner.items: btn = cast(BigDialogOptionButton, btn) if btn.option == option: rect_center_y = self._rect.y + self._rect.height / 2 if btn._selected: height = btn.rect.height else: - # when selecting an option under current, account for changing heights - btn_center_y = btn.rect.y + btn.rect.height / 2 # not accurate, just to determine direction + btn_center_y = btn.rect.y + btn.rect.height / 2 height_offset = BigDialogOptionButton.SELECTED_HEIGHT - BigDialogOptionButton.HEIGHT height = (BigDialogOptionButton.HEIGHT - height_offset) if rect_center_y < btn_center_y else BigDialogOptionButton.SELECTED_HEIGHT y_pos = rect_center_y - (btn.rect.y + height / 2) break - self._scroller.scroll_to(-y_pos) + self._scroll_inner.scroll_to(-y_pos) def _selected_option_changed(self): pass @@ -400,9 +349,7 @@ class BigMultiOptionDialog(BigDialogBase): def _handle_mouse_event(self, mouse_event: MouseEvent) -> None: super()._handle_mouse_event(mouse_event) - - # # TODO: add generic _handle_mouse_click handler to Widget - if not self._scroller.scroll_panel.is_touch_valid(): + if not self._scroll_inner.scroll_panel.is_touch_valid(): self._can_click = False def _handle_mouse_release(self, mouse_pos: MousePos): @@ -411,8 +358,7 @@ class BigMultiOptionDialog(BigDialogBase): if not self._can_click: return - # select current option - for btn in self._scroller._items: + for btn in self._scroll_inner.items: btn = cast(BigDialogOptionButton, btn) if btn.option == self._selected_option: self._on_option_selected(btn.option) @@ -420,39 +366,27 @@ class BigMultiOptionDialog(BigDialogBase): def _update_state(self): super()._update_state() + if not self.is_dismissing: + self._nav_bar.set_alpha(1.0) - # get selection by whichever button is closest to center center_y = self._rect.y + self._rect.height / 2 - closest_btn = (None, float('inf')) - for btn in self._scroller._items: + closest_btn = (None, float("inf")) + for btn in self._scroll_inner.items: dist_y = abs((btn.rect.y + btn.rect.height / 2) - center_y) if dist_y < closest_btn[1]: closest_btn = (btn, dist_y) - if closest_btn[0]: - for btn in self._scroller._items: + if closest_btn[0] is not None: + for btn in self._scroll_inner.items: btn.set_selected(btn.option == closest_btn[0].option) self._selected_option = closest_btn[0].option - # Signal to subclasses if selection changed if self._selected_option != self._last_selected_option: self._selected_option_changed() self._last_selected_option = self._selected_option def _render(self, _): - super()._render(_) + if self._right_btn is not None: + self._right_btn.set_position(self._rect.x + self._rect.width - self._right_btn.rect.width, self._rect.y) + self._right_btn.render() self._scroller.render(self._rect) - - return self._ret - - -class BigDialogButton(BigButton): - def __init__(self, text: str, value: str = "", icon: Union[str, rl.Texture] = "", description: str = ""): - super().__init__(text, value, icon) - self._description = description - - def _handle_mouse_release(self, mouse_pos: MousePos): - super()._handle_mouse_release(mouse_pos) - - dlg = BigDialog(self.text, self._description) - gui_app.set_modal_overlay(dlg) diff --git a/selfdrive/ui/mici/widgets/pairing_dialog.py b/selfdrive/ui/mici/widgets/pairing_dialog.py index e064205d5..a18b26ec0 100644 --- a/selfdrive/ui/mici/widgets/pairing_dialog.py +++ b/selfdrive/ui/mici/widgets/pairing_dialog.py @@ -7,9 +7,9 @@ from openpilot.common.api import Api from openpilot.common.swaglog import cloudlog from openpilot.common.params import Params from openpilot.selfdrive.ui.ui_state import ui_state -from openpilot.system.ui.widgets import NavWidget +from openpilot.system.ui.widgets.nav_widget import NavWidget from openpilot.system.ui.lib.application import FontWeight, gui_app -from openpilot.system.ui.widgets.label import MiciLabel +from openpilot.system.ui.widgets.label import UnifiedLabel class PairingDialog(NavWidget): @@ -19,14 +19,12 @@ class PairingDialog(NavWidget): def __init__(self): super().__init__() - self.set_back_callback(lambda: gui_app.set_modal_overlay(None)) self._params = Params() self._qr_texture: rl.Texture | None = None self._last_qr_generation = float("-inf") - self._txt_pair = gui_app.texture("icons_mici/settings/device/pair.png", 84, 64) - self._pair_label = MiciLabel("pair with comma connect", 48, font_weight=FontWeight.BOLD, - color=rl.Color(255, 255, 255, int(255 * 0.9)), line_height=40, wrap_text=True) + self._txt_pair = gui_app.texture("icons_mici/settings/device/pair.png", 33, 60) + self._pair_label = UnifiedLabel("pair with comma connect", font_size=48, font_weight=FontWeight.BOLD, line_height=0.8) def _get_pairing_url(self) -> str: try: @@ -69,24 +67,22 @@ class PairingDialog(NavWidget): def _update_state(self): super()._update_state() - if ui_state.prime_state.is_paired(): - self._playing_dismiss_animation = True + if ui_state.prime_state.is_paired() and not self.is_dismissing: + self.dismiss() - def _render(self, rect: rl.Rectangle) -> int: + def _render(self, rect: rl.Rectangle): self._check_qr_refresh() self._render_qr_code() label_x = self._rect.x + 8 + self._rect.height + 24 - self._pair_label.set_width(int(self._rect.width - label_x)) + self._pair_label.set_max_width(int(self._rect.width - label_x)) self._pair_label.set_position(label_x, self._rect.y + 16) self._pair_label.render() rl.draw_texture_ex(self._txt_pair, rl.Vector2(label_x, self._rect.y + self._rect.height - self._txt_pair.height - 16), 0.0, 1.0, rl.Color(255, 255, 255, int(255 * 0.35))) - return -1 - def _render_qr_code(self) -> None: if not self._qr_texture: error_font = gui_app.font(FontWeight.BOLD) @@ -96,7 +92,7 @@ class PairingDialog(NavWidget): return scale = self._rect.height / self._qr_texture.height - pos = rl.Vector2(self._rect.x + 8, self._rect.y) + pos = rl.Vector2(round(self._rect.x + 8), round(self._rect.y)) rl.draw_texture_ex(self._qr_texture, pos, 0.0, scale, rl.WHITE) def __del__(self): @@ -107,10 +103,9 @@ class PairingDialog(NavWidget): if __name__ == "__main__": gui_app.init_window("pairing device") pairing = PairingDialog() + gui_app.push_widget(pairing) try: for _ in gui_app.render(): - result = pairing.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) - if result != -1: - break + pass finally: del pairing diff --git a/selfdrive/ui/mici/widgets/side_button.py b/selfdrive/ui/mici/widgets/side_button.py index 4803b6d20..f03ac00cc 100644 --- a/selfdrive/ui/mici/widgets/side_button.py +++ b/selfdrive/ui/mici/widgets/side_button.py @@ -1,11 +1,8 @@ import pyray as rl + from openpilot.system.ui.widgets import Widget from openpilot.system.ui.lib.application import gui_app -# --------------------------------------------------------------------------- -# Constants extracted from the original Qt style -# --------------------------------------------------------------------------- -# TODO: this should be corrected, but Scroller relies on this being incorrect :/ WIDTH, HEIGHT = 112, 240 @@ -15,17 +12,15 @@ class SideButton(Widget): self.type = btn_type self.set_rect(rl.Rectangle(0, 0, WIDTH, HEIGHT)) - # load pre-rendered button images if btn_type not in ("check", "back"): btn_type = "back" btn_img_path = f"icons_mici/buttons/button_side_{btn_type}.png" btn_img_pressed_path = f"icons_mici/buttons/button_side_{btn_type}_pressed.png" - self._txt_btn, self._txt_btn_back = gui_app.texture(btn_img_path, 100, 224), gui_app.texture(btn_img_pressed_path, 100, 224) + self._txt_btn = gui_app.texture(btn_img_path, 100, 224) + self._txt_btn_back = gui_app.texture(btn_img_pressed_path, 100, 224) - def _render(self, _) -> bool: + def _render(self, _): x = int(self._rect.x + 12) y = int(self._rect.y + (self._rect.height - self._txt_btn.height) / 2) - rl.draw_texture(self._txt_btn if not self.is_pressed else self._txt_btn_back, - x, y, rl.WHITE) - + rl.draw_texture(self._txt_btn if not self.is_pressed else self._txt_btn_back, x, y, rl.WHITE) return False diff --git a/selfdrive/ui/onroad/augmented_road_view.py b/selfdrive/ui/onroad/augmented_road_view.py index 519593198..913ca3c98 100644 --- a/selfdrive/ui/onroad/augmented_road_view.py +++ b/selfdrive/ui/onroad/augmented_road_view.py @@ -325,6 +325,7 @@ class AugmentedRoadView(CameraView): if __name__ == "__main__": gui_app.init_window("OnRoad Camera View") road_camera_view = AugmentedRoadView(ROAD_CAM) + gui_app.push_widget(road_camera_view) print("***press space to switch camera view***") try: for _ in gui_app.render(): @@ -333,6 +334,5 @@ if __name__ == "__main__": if WIDE_CAM in road_camera_view.available_streams: stream = ROAD_CAM if road_camera_view.stream_type == WIDE_CAM else WIDE_CAM road_camera_view.switch_stream(stream) - road_camera_view.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) finally: road_camera_view.close() diff --git a/selfdrive/ui/onroad/driver_camera_dialog.py b/selfdrive/ui/onroad/driver_camera_dialog.py index f69ad8c49..e66e04b82 100644 --- a/selfdrive/ui/onroad/driver_camera_dialog.py +++ b/selfdrive/ui/onroad/driver_camera_dialog.py @@ -14,7 +14,7 @@ class DriverCameraDialog(CameraView): super().__init__("camerad", VisionStreamType.VISION_STREAM_DRIVER) self.driver_state_renderer = DriverStateRenderer() # TODO: this can grow unbounded, should be given some thought - device.add_interactive_timeout_callback(lambda: gui_app.set_modal_overlay(None)) + device.add_interactive_timeout_callback(gui_app.pop_widget) ui_state.params.put_bool("IsDriverViewEnabled", True) def hide_event(self): @@ -24,7 +24,7 @@ class DriverCameraDialog(CameraView): def _handle_mouse_release(self, _): super()._handle_mouse_release(_) - gui_app.set_modal_overlay(None) + gui_app.pop_widget() def __del__(self): self.close() @@ -103,9 +103,9 @@ if __name__ == "__main__": gui_app.init_window("Driver Camera View") driver_camera_view = DriverCameraDialog() + gui_app.push_widget(driver_camera_view) try: for _ in gui_app.render(): ui_state.update() - driver_camera_view.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) finally: driver_camera_view.close() diff --git a/selfdrive/ui/onroad/exp_button.py b/selfdrive/ui/onroad/exp_button.py index 2dd3caf7b..a3047e280 100644 --- a/selfdrive/ui/onroad/exp_button.py +++ b/selfdrive/ui/onroad/exp_button.py @@ -63,7 +63,7 @@ class ExpButton(Widget): texture = self._txt_exp if self._held_or_actual_mode() else self._txt_wheel rl.draw_circle(center_x, center_y, self._rect.width / 2, self._black_bg) - rl.draw_texture(texture, center_x - texture.width // 2, center_y - texture.height // 2, self._white_color) + rl.draw_texture_ex(texture, rl.Vector2(center_x - texture.width / 2, center_y - texture.height / 2), 0.0, 1.0, self._white_color) def _held_or_actual_mode(self): now = time.monotonic() diff --git a/selfdrive/ui/onroad/hud_renderer.py b/selfdrive/ui/onroad/hud_renderer.py index 79f150dee..73df8b396 100644 --- a/selfdrive/ui/onroad/hud_renderer.py +++ b/selfdrive/ui/onroad/hud_renderer.py @@ -86,7 +86,7 @@ class HudRenderer(Widget): v_cruise_cluster = car_state.vCruiseCluster self.set_speed = ( - controls_state.vCruiseDEPRECATED if v_cruise_cluster == 0.0 else v_cruise_cluster + controls_state.deprecated.vCruise if v_cruise_cluster == 0.0 else v_cruise_cluster ) self.is_cruise_set = 0 < self.set_speed < SET_SPEED_NA self.is_cruise_available = self.set_speed != -1 diff --git a/selfdrive/ui/ui.py b/selfdrive/ui/ui.py old mode 100755 new mode 100644 index 185f82345..99e482105 --- a/selfdrive/ui/ui.py +++ b/selfdrive/ui/ui.py @@ -1,55 +1,35 @@ #!/usr/bin/env python3 import os -import pyray as rl from openpilot.system.hardware import TICI from openpilot.common.realtime import config_realtime_process, set_core_affinity -from openpilot.common.watchdog import kick_watchdog from openpilot.system.ui.lib.application import gui_app -from openpilot.selfdrive.ui.stall_monitor import UIStallMonitor -from openpilot.selfdrive.ui.layouts.main import MainLayout -from openpilot.selfdrive.ui.mici.layouts.main import MiciMainLayout from openpilot.selfdrive.ui.ui_state import ui_state +BIG_UI = gui_app.big_ui() + def main(): cores = {5, } config_realtime_process(0, 51) gui_app.init_window("UI") - if gui_app.big_ui(): - main_layout = MainLayout() + if BIG_UI: + from openpilot.selfdrive.ui.layouts.main import MainLayout + MainLayout() else: - main_layout = MiciMainLayout() - main_layout.set_rect(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) - stall_monitor = UIStallMonitor("raylib_ui") - gui_app.set_progress_hook(stall_monitor.progress) - stall_monitor.progress("ui.loop_ready") - stall_monitor.start() + from openpilot.selfdrive.ui.mici.layouts.main import MiciMainLayout + MiciMainLayout() - def render_layout() -> None: - stall_monitor.progress("ui.before_layout_render") - main_layout.render() - stall_monitor.progress("ui.after_layout_render") - - try: - for should_render in gui_app.render(render_callback=render_layout): - stall_monitor.progress("ui.loop_iteration") - kick_watchdog() - stall_monitor.progress("ui.after_watchdog") - ui_state.update() - stall_monitor.progress("ui.after_state_update") - if should_render: - # reaffine after power save offlines our core - if TICI and os.sched_getaffinity(0) != cores: - try: - set_core_affinity(list(cores)) - except OSError: - pass - stall_monitor.progress("ui.loop_idle") - finally: - gui_app.set_progress_hook(None) - stall_monitor.stop() + for should_render in gui_app.render(): + ui_state.update() + if should_render: + # reaffine after power save offlines our core + if TICI and os.sched_getaffinity(0) != cores: + try: + set_core_affinity(list(cores)) + except OSError: + pass if __name__ == "__main__": diff --git a/selfdrive/ui/widgets/ssh_key.py b/selfdrive/ui/widgets/ssh_key.py index 88389cb05..29af2ee02 100644 --- a/selfdrive/ui/widgets/ssh_key.py +++ b/selfdrive/ui/widgets/ssh_key.py @@ -25,6 +25,52 @@ from openpilot.system.ui.widgets.list_view import ( VALUE_FONT_SIZE = 48 +class SshKeyFetcher: + HTTP_TIMEOUT = 15 # seconds + + def __init__(self, params: Params): + self._params = params + self._on_response: Callable[[str | None], None] | None = None + self._done = False + self._error: str | None = None + + def fetch(self, username: str, on_response: Callable[[str | None], None]): + self._error = None + self._done = False + self._on_response = on_response + threading.Thread(target=self._fetch_thread, args=(username,), daemon=True).start() + + def update(self): + if not self._done: + return + self._done = False + if self._error is not None: + self.clear() + if self._on_response: + self._on_response(self._error) + + def clear(self): + self._params.remove("GithubUsername") + self._params.remove("GithubSshKeys") + + def _fetch_thread(self, username: str): + try: + response = requests.get(f"https://github.com/{username}.keys", timeout=self.HTTP_TIMEOUT) + response.raise_for_status() + keys = response.text.strip() + if not keys: + raise requests.exceptions.HTTPError("No SSH keys found") + + self._params.put("GithubUsername", username) + self._params.put("GithubSshKeys", keys) + except requests.exceptions.Timeout: + self._error = tr("Request timed out") + except Exception: + self._error = tr("No SSH keys found for user '{}'").format(username) + finally: + self._done = True + + class SshKeyActionState(Enum): LOADING = tr_noop("LOADING") ADD = tr_noop("ADD") diff --git a/system/ui/lib/application.py b/system/ui/lib/application.py index 72ffaa2cf..980410b02 100644 --- a/system/ui/lib/application.py +++ b/system/ui/lib/application.py @@ -1,6 +1,8 @@ import atexit import cffi +import math import os +import queue import time import signal import sys @@ -11,7 +13,6 @@ import subprocess from contextlib import contextmanager from collections.abc import Callable from collections import deque -from dataclasses import dataclass from enum import StrEnum from pathlib import Path from typing import NamedTuple @@ -40,6 +41,10 @@ PROFILE_RENDER = int(os.getenv("PROFILE_RENDER", "0")) PROFILE_STATS = int(os.getenv("PROFILE_STATS", "100")) # Number of functions to show in profile output RECORD = os.getenv("RECORD") == "1" RECORD_OUTPUT = str(Path(os.getenv("RECORD_OUTPUT", "output")).with_suffix(".mp4")) +RECORD_QUALITY = int(os.getenv("RECORD_QUALITY", "23")) # Dynamic bitrate quality level (CRF); 0 is lossless (bigger size), max is 51, default is 23 for x264 +RECORD_BITRATE = os.getenv("RECORD_BITRATE", "") # Target bitrate e.g. "2000k" (overrides RECORD_QUALITY when set) +RECORD_SPEED = int(os.getenv("RECORD_SPEED", "1")) # Speed multiplier +OFFSCREEN = os.getenv("OFFSCREEN") == "1" # Disable FPS limiting for fast offline rendering GL_VERSION = """ #version 300 es @@ -51,9 +56,7 @@ if platform.system() == "Darwin": """ BURN_IN_MODE = "BURN_IN" in os.environ -BURN_IN_VERTEX_SHADER = ( - GL_VERSION - + """ +BURN_IN_VERTEX_SHADER = GL_VERSION + """ in vec3 vertexPosition; in vec2 vertexTexCoord; uniform mat4 mvp; @@ -63,10 +66,7 @@ void main() { gl_Position = mvp * vec4(vertexPosition, 1.0); } """ -) -BURN_IN_FRAGMENT_SHADER = ( - GL_VERSION - + """ +BURN_IN_FRAGMENT_SHADER = GL_VERSION + """ in vec2 fragTexCoord; uniform sampler2D texture0; out vec4 fragColor; @@ -82,7 +82,6 @@ void main() { fragColor = vec4(gradient, sampled.a); } """ -) DEFAULT_TEXT_SIZE = 60 DEFAULT_TEXT_COLOR = rl.Color(255, 255, 255, int(255 * 0.9)) @@ -96,13 +95,10 @@ FONT_DIR = ASSETS_DIR.joinpath("fonts") class FontWeight(StrEnum): - LIGHT = "Inter-Light.fnt" NORMAL = "Inter-Regular.fnt" if BIG_UI else "Inter-Medium.fnt" MEDIUM = "Inter-Medium.fnt" BOLD = "Inter-Bold.fnt" SEMI_BOLD = "Inter-SemiBold.fnt" - EXTRA_BOLD = "Inter-ExtraBold.fnt" - BLACK = "Inter-Black.fnt" UNIFONT = "unifont.fnt" # Small UI fonts @@ -118,12 +114,6 @@ def font_fallback(font: rl.Font) -> rl.Font: return font -@dataclass -class ModalOverlay: - overlay: object = None - callback: Callable | None = None - - class MousePos(NamedTuple): x: float y: float @@ -179,6 +169,10 @@ class MouseState: self._rk.keep_time() def _handle_mouse_event(self): + # TODO: read touch events from evdev directly to get real kernel timestamps. + # Polling at 140Hz with time.monotonic() causes timing jitter that makes scroll + # velocity oscillate (alternating high/low). Real timestamps would also let us + # detect swipe-stop-lift via event gaps instead of the fragile decel heuristic. for slot in range(MAX_TOUCH_SLOTS): mouse_pos = rl.get_touch_position(slot) x = mouse_pos.x / self._scale if self._scale != 1.0 else mouse_pos.x @@ -192,7 +186,8 @@ class MouseState: time.monotonic(), ) # Only add changes - if self._prev_mouse_event[slot] is None or ev[:-1] != self._prev_mouse_event[slot][:-1]: + prev = self._prev_mouse_event[slot] + if prev is None or ev[:-1] != prev[:-1]: with self._lock: self._events.append(ev) self._prev_mouse_event[slot] = ev @@ -200,6 +195,8 @@ class MouseState: class GuiApplication: def __init__(self, width: int | None = None, height: int | None = None): + self._set_log_callback() + self._fonts: dict[FontWeight, rl.Font] = {} self._width = width if width is not None else GuiApplication._default_width() self._height = height if height is not None else GuiApplication._default_height() @@ -218,17 +215,17 @@ class GuiApplication: self._render_texture: rl.RenderTexture | None = None self._burn_in_shader: rl.Shader | None = None self._ffmpeg_proc: subprocess.Popen | None = None + self._ffmpeg_queue: queue.Queue | None = None + self._ffmpeg_thread: threading.Thread | None = None + self._ffmpeg_stop_event: threading.Event | None = None self._textures: dict[str, rl.Texture] = {} self._target_fps: int = _DEFAULT_FPS self._last_fps_log_time: float = time.monotonic() self._frame = 0 self._window_close_requested = False - self._trace_log_callback = None - self._progress_hook: Callable[[str], None] | None = None - self._modal_overlay = ModalOverlay() - self._modal_overlay_shown = False - self._modal_overlay_tick: Callable[[], None] | None = None - self._nav_stack: list = [] + self._nav_stack: list[object] = [] + self._nav_stack_ticks: list[Callable[[], None]] = [] + self._nav_stack_widgets_to_render = 1 if self.big_ui() else 2 self._mouse = MouseState(self._scale) self._mouse_events: list[MouseEvent] = [] @@ -255,6 +252,10 @@ class GuiApplication: def set_show_fps(self, show: bool): self._show_fps = show + @property + def show_touches(self) -> bool: + return self._show_touches + @property def target_fps(self): return self._target_fps @@ -262,31 +263,14 @@ class GuiApplication: def request_close(self): self._window_close_requested = True - def set_progress_hook(self, hook: Callable[[str], None] | None): - self._progress_hook = hook - - def _mark_progress(self, phase: str): - if self._progress_hook is None: - return - - try: - self._progress_hook(phase) - except Exception: - pass - def init_window(self, title: str, fps: int = _DEFAULT_FPS): with self._startup_profile_context(): - def _close(sig, frame): self.close() sys.exit(0) - signal.signal(signal.SIGINT, _close) atexit.register(self.close) - self._set_log_callback() - rl.set_trace_log_level(rl.TraceLogLevel.LOG_WARNING) - flags = rl.ConfigFlags.FLAG_MSAA_4X_HINT if ENABLE_VSYNC: flags |= rl.ConfigFlags.FLAG_VSYNC_HINT @@ -298,44 +282,48 @@ class GuiApplication: if self._scale != 1.0: rl.set_mouse_scale(1 / self._scale, 1 / self._scale) if needs_render_texture: - self._render_texture = rl.load_render_texture(self._width, self._height) + self._render_texture = rl.load_render_texture(self._scaled_width, self._scaled_height) rl.set_texture_filter(self._render_texture.texture, rl.TextureFilter.TEXTURE_FILTER_BILINEAR) if RECORD: + output_fps = fps * RECORD_SPEED ffmpeg_args = [ 'ffmpeg', - '-v', - 'warning', # Reduce ffmpeg log spam - '-stats', # Show encoding progress - '-f', - 'rawvideo', # Input format - '-pix_fmt', - 'rgba', # Input pixel format - '-s', - f'{self._width}x{self._height}', # Input resolution - '-r', - str(fps), # Input frame rate - '-i', - 'pipe:0', # Input from stdin - '-vf', - 'vflip,format=yuv420p', # Flip vertically and convert rgba to yuv420p - '-c:v', - 'libx264', # Video codec - '-preset', - 'ultrafast', # Encoding speed - '-y', # Overwrite existing file - '-f', - 'mp4', # Output format - RECORD_OUTPUT, # Output file path + '-v', 'warning', # Reduce ffmpeg log spam + '-nostats', # Suppress encoding progress + '-f', 'rawvideo', # Input format + '-pix_fmt', 'rgba', # Input pixel format + '-s', f'{self._scaled_width}x{self._scaled_height}', # Input resolution + '-r', str(fps), # Input frame rate + '-i', 'pipe:0', # Input from stdin + '-vf', 'vflip,format=yuv420p', # Flip vertically and convert to yuv420p + '-r', str(output_fps), # Output frame rate (for speed multiplier) + '-c:v', 'libx264', + '-preset', 'veryfast', + '-crf', str(RECORD_QUALITY) + ] + if RECORD_BITRATE: + # NOTE: custom bitrate overrides crf setting + ffmpeg_args += ['-b:v', RECORD_BITRATE, '-maxrate', RECORD_BITRATE, '-bufsize', RECORD_BITRATE] + ffmpeg_args += [ + '-y', # Overwrite existing file + '-f', 'mp4', # Output format + RECORD_OUTPUT, # Output file path ] self._ffmpeg_proc = subprocess.Popen(ffmpeg_args, stdin=subprocess.PIPE) + self._ffmpeg_queue = queue.Queue(maxsize=60) # Buffer up to 60 frames + self._ffmpeg_stop_event = threading.Event() + self._ffmpeg_thread = threading.Thread(target=self._ffmpeg_writer_thread, daemon=True) + self._ffmpeg_thread.start() - rl.set_target_fps(fps) + # OFFSCREEN disables FPS limiting for fast offline rendering (e.g. clips) + rl.set_target_fps(0 if OFFSCREEN else fps) self._target_fps = fps self._set_styles() self._load_fonts() self._patch_text_functions() + self._patch_scissor_mode() if BURN_IN_MODE and self._burn_in_shader is None: self._burn_in_shader = rl.load_shader_from_memory(BURN_IN_VERTEX_SHADER, BURN_IN_FRAGMENT_SHADER) @@ -372,93 +360,132 @@ class GuiApplication: print(f"{green}UI window ready in {elapsed_ms:.1f} ms{reset}") sys.exit(0) - def set_modal_overlay(self, overlay, callback: Callable | None = None): - if self._modal_overlay.overlay is not None: - if hasattr(self._modal_overlay.overlay, 'hide_event'): - self._modal_overlay.overlay.hide_event() + def _ffmpeg_writer_thread(self): + """Background thread that writes frames to ffmpeg.""" + while True: + try: + data = self._ffmpeg_queue.get(timeout=1.0) + if data is None: # Sentinel to stop + break + self._ffmpeg_proc.stdin.write(data) + except queue.Empty: + if self._ffmpeg_stop_event.is_set(): + break + continue + except Exception: + break - if self._modal_overlay.callback is not None: - self._modal_overlay.callback(-1) - - self._modal_overlay = ModalOverlay(overlay=overlay, callback=callback) - - def set_modal_overlay_tick(self, tick_function: Callable | None): - self._modal_overlay_tick = tick_function - - def push_widget(self, widget): + def push_widget(self, widget: object): if widget in self._nav_stack: + cloudlog.warning("Widget already in stack, cannot push again!") return - if self._nav_stack: - prev = self._nav_stack[-1] - if hasattr(prev, 'set_enabled'): - prev.set_enabled(False) + + # disable previous widget to prevent input processing + if len(self._nav_stack) > 0: + prev_widget = self._nav_stack[-1] + # TODO: change these to touch_valid + prev_widget.set_enabled(False) + self._nav_stack.append(widget) - if hasattr(widget, 'show_event'): - widget.show_event() - if hasattr(widget, 'set_enabled'): - widget.set_enabled(True) + widget.show_event() + widget.set_enabled(True) def pop_widget(self, idx: int | None = None): + # Pops widget instantly without animation if len(self._nav_stack) < 2: + cloudlog.warning("At least one widget should remain on the stack, ignoring pop!") return + idx_to_pop = len(self._nav_stack) - 1 if idx is None else idx if idx_to_pop <= 0 or idx_to_pop >= len(self._nav_stack): + cloudlog.warning(f"Invalid index {idx_to_pop} to pop, ignoring!") return - if idx_to_pop == len(self._nav_stack) - 1: - prev = self._nav_stack[idx_to_pop - 1] - if hasattr(prev, 'set_enabled'): - prev.set_enabled(True) - widget = self._nav_stack.pop(idx_to_pop) - if hasattr(widget, 'hide_event'): - widget.hide_event() - def _render_nav_stack(self) -> bool: - if not self._nav_stack: - return False - widget = self._nav_stack[-1] - if hasattr(widget, 'render'): - widget.render(rl.Rectangle(0, 0, self.width, self.height)) - return True + # only re-enable previous widget if popping top widget + if idx_to_pop == len(self._nav_stack) - 1: + prev_widget = self._nav_stack[idx_to_pop - 1] + prev_widget.set_enabled(True) + + widget = self._nav_stack.pop(idx_to_pop) + widget.hide_event() + + def pop_widgets_to(self, widget: object, callback: Callable[[], None] | None = None, instant: bool = False): + # Pops middle widgets instantly without animation then dismisses top, animated out if NavWidget + if widget not in self._nav_stack: + cloudlog.warning("Widget not in stack, cannot pop to it!") + return + + # Nothing to pop, ensure we still run callback + top_widget = self._nav_stack[-1] + if top_widget == widget: + if callback: + callback() + return + + # instantly pop widgets in between, then dismiss top widget for animation + while len(self._nav_stack) > 1 and self._nav_stack[-2] != widget: + self.pop_widget(len(self._nav_stack) - 2) + + if not instant: + top_widget.dismiss(callback) + else: + self.pop_widget() + + def get_active_widget(self): + if len(self._nav_stack) > 0: + return self._nav_stack[-1] + return None + + def widget_in_stack(self, widget: object) -> bool: + return widget in self._nav_stack + + def add_nav_stack_tick(self, tick_function: Callable[[], None]): + if tick_function not in self._nav_stack_ticks: + self._nav_stack_ticks.append(tick_function) + + def remove_nav_stack_tick(self, tick_function: Callable[[], None]): + if tick_function in self._nav_stack_ticks: + self._nav_stack_ticks.remove(tick_function) def set_should_render(self, should_render: bool): self._should_render = should_render - def texture(self, asset_path: str, width: int | None = None, height: int | None = None, alpha_premultiply=False, keep_aspect_ratio=True): - cache_key = f"{asset_path}_{width}_{height}_{alpha_premultiply}{keep_aspect_ratio}" + def texture(self, asset_path: str, width: int | None = None, height: int | None = None, + alpha_premultiply=False, keep_aspect_ratio=True, flip_x: bool = False) -> rl.Texture: + if width is not None: + width = round(width) + if height is not None: + height = round(height) + + cache_key = f"{asset_path}_{width}_{height}_{alpha_premultiply}_{keep_aspect_ratio}_{flip_x}" if cache_key in self._textures: return self._textures[cache_key] with as_file(ASSETS_DIR.joinpath(asset_path)) as fspath: - image_obj = self._load_image_from_path(fspath.as_posix(), width, height, alpha_premultiply, keep_aspect_ratio) + image_obj = self._load_image_from_path(fspath.as_posix(), width, height, alpha_premultiply, keep_aspect_ratio, flip_x) texture_obj = self._load_texture_from_image(image_obj) + + # Set logical size so widget layout math stays at 1x coordinates + if self._scale != 1.0 and width is not None and height is not None: + texture_obj.width = width + texture_obj.height = height + self._textures[cache_key] = texture_obj return texture_obj - def starpilot_texture(self, asset_path: str, width: int | None = None, height: int | None = None, alpha_premultiply=False, keep_aspect_ratio=True): - """Load a texture from the StarPilot assets folder.""" - cache_key = f"starpilot_{asset_path}_{width}_{height}_{alpha_premultiply}{keep_aspect_ratio}" - if cache_key in self._textures: - return self._textures[cache_key] - - starpilot_assets = files("openpilot.starpilot").joinpath("assets") - with as_file(starpilot_assets.joinpath(asset_path)) as fspath: - image_obj = self._load_image_from_path(fspath.as_posix(), width, height, alpha_premultiply, keep_aspect_ratio) - texture_obj = self._load_texture_from_image(image_obj) - self._textures[cache_key] = texture_obj - return texture_obj - - def _load_image_from_path( - self, image_path: str, width: int | None = None, height: int | None = None, alpha_premultiply: bool = False, keep_aspect_ratio: bool = True - ) -> rl.Image: + def _load_image_from_path(self, image_path: str, width: int | None = None, height: int | None = None, + alpha_premultiply: bool = False, keep_aspect_ratio: bool = True, flip_x: bool = False) -> rl.Image: """Load and resize an image, storing it for later automatic unloading.""" image = rl.load_image(image_path) - if image.width == 0 or image.height == 0: - return image - if alpha_premultiply: rl.image_alpha_premultiply(image) + # Scale up load size for sharper rendering, capped at source resolution + if self._scale != 1.0 and width is not None and height is not None: + width = min(int(width * self._scale), image.width) + height = min(int(height * self._scale), image.height) + if width is not None and height is not None: same_dimensions = image.width == width and image.height == height @@ -481,6 +508,10 @@ class GuiApplication: rl.image_resize(image, width, height) else: assert keep_aspect_ratio, "Cannot resize without specifying width and height" + + if flip_x: + rl.image_flip_horizontal(image) + return image def _load_texture_from_image(self, image: rl.Image) -> rl.Texture: @@ -495,11 +526,17 @@ class GuiApplication: return texture def close_ffmpeg(self): + if self._ffmpeg_thread is not None: + # Signal thread to stop, send sentinel, then wait for it to drain + self._ffmpeg_stop_event.set() + self._ffmpeg_queue.put(None) + self._ffmpeg_thread.join(timeout=30) + if self._ffmpeg_proc is not None: self._ffmpeg_proc.stdin.flush() self._ffmpeg_proc.stdin.close() try: - self._ffmpeg_proc.wait(timeout=5) + self._ffmpeg_proc.wait(timeout=30) except subprocess.TimeoutExpired: self._ffmpeg_proc.terminate() self._ffmpeg_proc.wait() @@ -539,17 +576,15 @@ class GuiApplication: def last_mouse_event(self) -> MouseEvent: return self._last_mouse_event - def render(self, render_callback: Callable[[], None] | None = None): + def render(self): try: if self._profile_render_frames > 0: import cProfile - self._render_profiler = cProfile.Profile() self._render_profile_start_time = time.monotonic() self._render_profiler.enable() while not (self._window_close_requested or rl.window_should_close()): - self._mark_progress("gui_app.loop_start") if PC: # Thread is not used on PC, need to manually add mouse events self._mouse._handle_mouse_event() @@ -561,7 +596,6 @@ class GuiApplication: # Skip rendering when screen is off if not self._should_render: - self._mark_progress("gui_app.skip_render") if PC: rl.poll_input_events() time.sleep(1 / self._target_fps) @@ -569,59 +603,43 @@ class GuiApplication: continue if self._render_texture: - self._mark_progress("gui_app.before_begin_texture_mode") rl.begin_texture_mode(self._render_texture) - self._mark_progress("gui_app.after_begin_texture_mode") - self._mark_progress("gui_app.before_clear_background") rl.clear_background(rl.BLACK) - self._mark_progress("gui_app.after_clear_background") else: - self._mark_progress("gui_app.before_begin_drawing") rl.begin_drawing() - self._mark_progress("gui_app.after_begin_drawing") - self._mark_progress("gui_app.before_clear_background") rl.clear_background(rl.BLACK) - self._mark_progress("gui_app.after_clear_background") - # Handle modal overlay rendering and input processing - if self._render_nav_stack(): - self._mark_progress("gui_app.nav_stack") - yield False - elif self._handle_modal_overlay(): - # Allow a Widget to still run a function while overlay is shown - if self._modal_overlay_tick is not None: - self._modal_overlay_tick() - self._mark_progress("gui_app.modal_overlay") - yield False - else: - self._mark_progress("gui_app.frame_ready") - if render_callback is not None: - self._mark_progress("gui_app.before_render_callback") - render_callback() - self._mark_progress("gui_app.after_render_callback") - yield True + if self._scale != 1.0: + rl.rl_push_matrix() + rl.rl_scalef(self._scale, self._scale, 1.0) + + # Allow a Widget to still run a function regardless of the stack depth + for tick in self._nav_stack_ticks: + tick() + + # Only render top widgets + for widget in self._nav_stack[-self._nav_stack_widgets_to_render:]: + widget.render(rl.Rectangle(0, 0, self.width, self.height)) + + yield True + + if self._scale != 1.0: + rl.rl_pop_matrix() if self._render_texture: - self._mark_progress("gui_app.end_texture_mode") rl.end_texture_mode() - self._mark_progress("gui_app.before_present_begin_drawing") rl.begin_drawing() - self._mark_progress("gui_app.after_present_begin_drawing") - self._mark_progress("gui_app.before_present_clear_background") rl.clear_background(rl.BLACK) - self._mark_progress("gui_app.after_present_clear_background") - src_rect = rl.Rectangle(0, 0, float(self._width), -float(self._height)) + src_rect = rl.Rectangle(0, 0, float(self._scaled_width), -float(self._scaled_height)) dst_rect = rl.Rectangle(0, 0, float(self._scaled_width), float(self._scaled_height)) texture = self._render_texture.texture if texture: - self._mark_progress("gui_app.before_present_draw_texture") if BURN_IN_MODE and self._burn_in_shader: rl.begin_shader_mode(self._burn_in_shader) rl.draw_texture_pro(texture, src_rect, dst_rect, rl.Vector2(0, 0), 0.0, rl.WHITE) rl.end_shader_mode() else: rl.draw_texture_pro(texture, src_rect, dst_rect, rl.Vector2(0, 0), 0.0, rl.WHITE) - self._mark_progress("gui_app.after_present_draw_texture") if self._show_fps: rl.draw_fps(10, 10) @@ -632,21 +650,17 @@ class GuiApplication: if self._grid_size > 0: self._draw_grid() - self._mark_progress("gui_app.end_drawing") rl.end_drawing() - self._mark_progress("gui_app.after_end_drawing") if RECORD: image = rl.load_image_from_texture(self._render_texture.texture) data_size = image.width * image.height * 4 data = bytes(rl.ffi.buffer(image.data, data_size)) - self._ffmpeg_proc.stdin.write(data) - self._ffmpeg_proc.stdin.flush() + self._ffmpeg_queue.put(data) # Async write via background thread rl.unload_image(image) self._monitor_fps() self._frame += 1 - self._mark_progress("gui_app.frame_complete") if self._profile_render_frames > 0 and self._frame >= self._profile_render_frames: self._output_render_profile() @@ -664,61 +678,17 @@ class GuiApplication: def height(self): return self._height - def _handle_modal_overlay(self) -> bool: - if self._modal_overlay.overlay: - if hasattr(self._modal_overlay.overlay, 'render'): - result = self._modal_overlay.overlay.render(rl.Rectangle(0, 0, self.width, self.height)) - elif callable(self._modal_overlay.overlay): - result = self._modal_overlay.overlay() - else: - raise Exception - - # Send show event to Widget - if not self._modal_overlay_shown and hasattr(self._modal_overlay.overlay, 'show_event'): - self._modal_overlay.overlay.show_event() - self._modal_overlay_shown = True - - if result >= 0: - # Clear the overlay and execute the callback - original_modal = self._modal_overlay - self._modal_overlay = ModalOverlay() - if hasattr(original_modal.overlay, 'hide_event'): - original_modal.overlay.hide_event() - if original_modal.callback is not None: - original_modal.callback(result) - return True - else: - self._modal_overlay_shown = False - return False - def _load_fonts(self): - self._ensure_font_atlases() - with as_file(FONT_DIR) as fspath: - for font_weight_file in FontWeight: + for font_weight_file in FontWeight: + with as_file(FONT_DIR) as fspath: fnt_path = fspath / font_weight_file font = rl.load_font(fnt_path.as_posix()) - rl.set_texture_filter(font.texture, rl.TextureFilter.TEXTURE_FILTER_BILINEAR) + if font_weight_file != FontWeight.UNIFONT: + rl.gen_texture_mipmaps(font.texture) + rl.set_texture_filter(font.texture, rl.TextureFilter.TEXTURE_FILTER_TRILINEAR) self._fonts[font_weight_file] = font rl.gui_set_font(self._fonts[FontWeight.NORMAL]) - def _ensure_font_atlases(self): - with as_file(FONT_DIR) as fspath: - required_fonts = [fspath / fw.value for fw in FontWeight] - missing_fonts = [font_path.name for font_path in required_fonts if not font_path.exists()] - if not missing_fonts: - return - - process_script = fspath / "process.py" - if not process_script.exists(): - cloudlog.warning(f"Missing font atlases {missing_fonts}, but no generator found at {process_script}") - return - - cloudlog.warning(f"Generating missing font atlases: {missing_fonts}") - try: - subprocess.run([sys.executable, process_script.as_posix()], check=True, cwd=fspath.as_posix()) - except Exception: - cloudlog.exception("Failed to generate font atlases") - def _set_styles(self): rl.gui_set_style(rl.GuiControl.DEFAULT, rl.GuiControlProperty.BORDER_WIDTH, 0) rl.gui_set_style(rl.GuiControl.DEFAULT, rl.GuiDefaultProperty.TEXT_SIZE, DEFAULT_TEXT_SIZE) @@ -737,6 +707,20 @@ class GuiApplication: rl.draw_text_ex = _draw_text_ex_scaled + def _patch_scissor_mode(self): + if self._scale == 1.0: + return + + if not hasattr(rl, "_orig_begin_scissor_mode"): + rl._orig_begin_scissor_mode = rl.begin_scissor_mode + + def _begin_scissor_mode_scaled(x, y, width, height): + return rl._orig_begin_scissor_mode( + int(x * self._scale), int(y * self._scale), + int(math.ceil(width * self._scale)), int(math.ceil(height * self._scale))) + + rl.begin_scissor_mode = _begin_scissor_mode_scaled + def _set_log_callback(self): ffi_libc = cffi.FFI() ffi_libc.cdef(""" @@ -773,6 +757,9 @@ class GuiApplication: else: cloudlog.error(f"raylib: Unknown level {log_level}: {text_str}") + # ensure we get all the logs forwarded to us + rl.set_trace_log_level(rl.TraceLogLevel.LOG_DEBUG) + # Store callback reference self._trace_log_callback = trace_log_callback rl.set_trace_log_callback(self._trace_log_callback) @@ -842,11 +829,11 @@ class GuiApplication: green = "\033[92m" reset = "\033[0m" print(f"\n{green}Rendered {self._frame} frames in {elapsed_ms:.1f} ms{reset}") - print(f"{green}Average frame time: {avg_frame_time:.2f} ms ({1000 / avg_frame_time:.1f} FPS){reset}") + print(f"{green}Average frame time: {avg_frame_time:.2f} ms ({1000/avg_frame_time:.1f} FPS){reset}") sys.exit(0) def _calculate_auto_scale(self) -> float: - # Create temporary window to query monitor info + # Create temporary window to query monitor info rl.init_window(1, 1, "") w, h = rl.get_monitor_width(0), rl.get_monitor_height(0) rl.close_window() diff --git a/system/ui/lib/emoji.py b/system/ui/lib/emoji.py index 37228e2d4..ad4c272c8 100644 --- a/system/ui/lib/emoji.py +++ b/system/ui/lib/emoji.py @@ -1,12 +1,13 @@ import io import re +import functools +from importlib.resources import as_file from PIL import Image, ImageDraw, ImageFont import pyray as rl from openpilot.system.ui.lib.application import FONT_DIR -_emoji_font: ImageFont.FreeTypeFont | None = None _cache: dict[str, rl.Texture] = {} EMOJI_REGEX = re.compile( @@ -33,11 +34,10 @@ EMOJI_REGEX = re.compile( flags=re.UNICODE ) -def _load_emoji_font() -> ImageFont.FreeTypeFont | None: - global _emoji_font - if _emoji_font is None: - _emoji_font = ImageFont.truetype(str(FONT_DIR.joinpath("NotoColorEmoji.ttf")), 109) - return _emoji_font +@functools.cache +def _load_emoji_font() -> ImageFont.FreeTypeFont: + with as_file(FONT_DIR.joinpath("NotoColorEmoji.ttf")) as font_path: + return ImageFont.truetype(io.BytesIO(font_path.read_bytes()), 109) def find_emoji(text): return [(m.start(), m.end(), m.group()) for m in EMOJI_REGEX.finditer(text)] diff --git a/system/ui/lib/multilang.py b/system/ui/lib/multilang.py index 9b10a8bdc..3c6a6b856 100644 --- a/system/ui/lib/multilang.py +++ b/system/ui/lib/multilang.py @@ -1,7 +1,7 @@ from importlib.resources import files -import os import json -import gettext +import os +import re from openpilot.common.basedir import BASEDIR from openpilot.common.swaglog import cloudlog @@ -16,7 +16,6 @@ TRANSLATIONS_DIR = UI_DIR.joinpath("translations") LANGUAGES_FILE = TRANSLATIONS_DIR.joinpath("languages.json") UNIFONT_LANGUAGES = [ - "ar", "th", "zh-CHT", "zh-CHS", @@ -24,14 +23,137 @@ UNIFONT_LANGUAGES = [ "ja", ] +# Plural form selectors for supported languages +PLURAL_SELECTORS = { + 'en': lambda n: 0 if n == 1 else 1, + 'de': lambda n: 0 if n == 1 else 1, + 'fr': lambda n: 0 if n <= 1 else 1, + 'pt-BR': lambda n: 0 if n <= 1 else 1, + 'es': lambda n: 0 if n == 1 else 1, + 'tr': lambda n: 0 if n == 1 else 1, + 'uk': lambda n: 0 if n % 10 == 1 and n % 100 != 11 else (1 if 2 <= n % 10 <= 4 and not 12 <= n % 100 <= 14 else 2), + 'th': lambda n: 0, + 'zh-CHT': lambda n: 0, + 'zh-CHS': lambda n: 0, + 'ko': lambda n: 0, + 'ja': lambda n: 0, +} + + +def _parse_quoted(s: str) -> str: + """Parse a PO-format quoted string.""" + s = s.strip() + if not (s.startswith('"') and s.endswith('"')): + raise ValueError(f"Expected quoted string: {s!r}") + s = s[1:-1] + result: list[str] = [] + i = 0 + while i < len(s): + if s[i] == '\\' and i + 1 < len(s): + c = s[i + 1] + if c == 'n': + result.append('\n') + elif c == 't': + result.append('\t') + elif c == '"': + result.append('"') + elif c == '\\': + result.append('\\') + else: + result.append(s[i:i + 2]) + i += 2 + else: + result.append(s[i]) + i += 1 + return ''.join(result) + + +def load_translations(path) -> tuple[dict[str, str], dict[str, list[str]]]: + """Parse a .po file and return (translations, plurals) dicts. + + translations: msgid -> msgstr + plurals: msgid -> [msgstr[0], msgstr[1], ...] + """ + with path.open(encoding='utf-8') as f: + lines = f.readlines() + + translations: dict[str, str] = {} + plurals: dict[str, list[str]] = {} + + # Parser state + msgid = msgid_plural = msgstr = "" + msgstr_plurals: dict[int, str] = {} + field: str | None = None + plural_idx = 0 + + def finish(): + nonlocal msgid, msgid_plural, msgstr, msgstr_plurals, field + if msgid: # skip header (empty msgid) + if msgid_plural: + max_idx = max(msgstr_plurals.keys()) if msgstr_plurals else 0 + plurals[msgid] = [msgstr_plurals.get(i, '') for i in range(max_idx + 1)] + else: + translations[msgid] = msgstr + msgid = msgid_plural = msgstr = "" + msgstr_plurals = {} + field = None + + for raw in lines: + line = raw.strip() + + if not line: + finish() + continue + + if line.startswith('#'): + continue + + if line.startswith('msgid_plural '): + msgid_plural = _parse_quoted(line[len('msgid_plural '):]) + field = 'msgid_plural' + continue + + if line.startswith('msgid '): + msgid = _parse_quoted(line[len('msgid '):]) + field = 'msgid' + continue + + m = re.match(r'msgstr\[(\d+)]\s+(.*)', line) + if m: + plural_idx = int(m.group(1)) + msgstr_plurals[plural_idx] = _parse_quoted(m.group(2)) + field = 'msgstr_plural' + continue + + if line.startswith('msgstr '): + msgstr = _parse_quoted(line[len('msgstr '):]) + field = 'msgstr' + continue + + if line.startswith('"'): + val = _parse_quoted(line) + if field == 'msgid': + msgid += val + elif field == 'msgid_plural': + msgid_plural += val + elif field == 'msgstr': + msgstr += val + elif field == 'msgstr_plural': + msgstr_plurals[plural_idx] += val + + finish() + return translations, plurals + class Multilang: def __init__(self): self._params = Params() if Params is not None else None self._language: str = "en" - self.languages = {} - self.codes = {} - self._translation: gettext.NullTranslations | gettext.GNUTranslations = gettext.NullTranslations() + self.languages: dict[str, str] = {} + self.codes: dict[str, str] = {} + self._translations: dict[str, str] = {} + self._plurals: dict[str, list[str]] = {} + self._plural_selector = PLURAL_SELECTORS.get('en', lambda n: 0) self._load_languages() @property @@ -44,27 +166,30 @@ class Multilang: def setup(self): try: - with TRANSLATIONS_DIR.joinpath(f'app_{self._language}.mo').open('rb') as fh: - translation = gettext.GNUTranslations(fh) - translation.install() - self._translation = translation - cloudlog.warning(f"Loaded translations for language: {self._language}") + po_path = TRANSLATIONS_DIR.joinpath(f'app_{self._language}.po') + self._translations, self._plurals = load_translations(po_path) + self._plural_selector = PLURAL_SELECTORS.get(self._language, lambda n: 0) + cloudlog.debug(f"Loaded translations for language: {self._language}") except FileNotFoundError: cloudlog.error(f"No translation file found for language: {self._language}, using default.") - gettext.install('app') - self._translation = gettext.NullTranslations() + self._translations = {} + self._plurals = {} def change_language(self, language_code: str) -> None: - # Reinstall gettext with the selected language self._params.put("LanguageSetting", language_code) self._language = language_code self.setup() def tr(self, text: str) -> str: - return self._translation.gettext(text) + return self._translations.get(text, text) or text def trn(self, singular: str, plural: str, n: int) -> str: - return self._translation.ngettext(singular, plural, n) + if singular in self._plurals: + idx = self._plural_selector(n) + forms = self._plurals[singular] + if idx < len(forms) and forms[idx]: + return forms[idx] + return singular if n == 1 else plural def _load_languages(self): with LANGUAGES_FILE.open(encoding='utf-8') as f: diff --git a/system/ui/lib/networkmanager.py b/system/ui/lib/networkmanager.py index ffa2ff4db..d2d6b30b1 100644 --- a/system/ui/lib/networkmanager.py +++ b/system/ui/lib/networkmanager.py @@ -3,14 +3,34 @@ from enum import IntEnum # NetworkManager device states class NMDeviceState(IntEnum): + # https://networkmanager.dev/docs/api/1.46/nm-dbus-types.html#NMDeviceState UNKNOWN = 0 + UNMANAGED = 10 + UNAVAILABLE = 20 DISCONNECTED = 30 PREPARE = 40 - STATE_CONFIG = 50 + CONFIG = 50 NEED_AUTH = 60 IP_CONFIG = 70 + IP_CHECK = 80 + SECONDARIES = 90 ACTIVATED = 100 DEACTIVATING = 110 + FAILED = 120 + + +class NMDeviceStateReason(IntEnum): + # https://networkmanager.dev/docs/api/1.46/nm-dbus-types.html#NMDeviceStateReason + NONE = 0 + UNKNOWN = 1 + IP_CONFIG_UNAVAILABLE = 5 + NO_SECRETS = 7 + SUPPLICANT_DISCONNECT = 8 + SUPPLICANT_TIMEOUT = 11 + CONNECTION_REMOVED = 38 + USER_REQUESTED = 39 + SSID_NOT_FOUND = 53 + NEW_ACTIVATION = 60 # NetworkManager constants @@ -29,8 +49,6 @@ NM_IP4_CONFIG_IFACE = 'org.freedesktop.NetworkManager.IP4Config' NM_DEVICE_TYPE_WIFI = 2 NM_DEVICE_TYPE_MODEM = 8 -NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT = 8 -NM_DEVICE_STATE_REASON_NEW_ACTIVATION = 60 # https://developer.gnome.org/NetworkManager/1.26/nm-dbus-types.html#NM80211ApFlags NM_802_11_AP_FLAGS_NONE = 0x0 diff --git a/system/ui/lib/scroll_panel2.py b/system/ui/lib/scroll_panel2.py index 0859071da..18fd8a9a6 100644 --- a/system/ui/lib/scroll_panel2.py +++ b/system/ui/lib/scroll_panel2.py @@ -20,6 +20,21 @@ MAX_SPEED = 10000.0 # px/s DEBUG = os.getenv("DEBUG_SCROLL", "0") == "1" +# Weights older (steadier) velocity samples more heavily on release. +# Finger-lift samples are noisy; trusting earlier samples gives consistent fling velocity. +# Reverse-engineered from iOS UIScrollView (tuned at 120Hz touch) by Flutter team: +# https://github.com/flutter/flutter/pull/60501 +# 3 samples ≈ 25ms at 120Hz (iOS) / ~21ms at 140Hz (comma). Scale if touch rate changes. +def weighted_velocity(buffer: deque) -> float: + if len(buffer) >= 3: + return buffer[-3] * 0.6 + buffer[-2] * 0.35 + buffer[-1] * 0.05 + elif len(buffer) == 2: + return buffer[-2] * 0.7 + buffer[-1] * 0.3 + elif len(buffer) == 1: + return buffer[-1] + return 0.0 + + # from https://ariya.io/2011/10/flick-list-with-its-momentum-scrolling-and-deceleration class ScrollState(Enum): STEADY = 0 @@ -73,8 +88,14 @@ class GuiScrollPanel2: def _update_state(self, bounds_size: float, content_size: float) -> None: """Runs per render frame, independent of mouse events. Updates auto-scrolling state and velocity.""" - if self._state == ScrollState.AUTO_SCROLL: - max_offset, min_offset = self._get_offset_bounds(bounds_size, content_size) + max_offset, min_offset = self._get_offset_bounds(bounds_size, content_size) + + if self._state == ScrollState.STEADY: + # if we find ourselves out of bounds, scroll back in (from external layout dimension changes, etc.) + if self.get_offset() > max_offset or self.get_offset() < min_offset: + self._state = ScrollState.AUTO_SCROLL + + elif self._state == ScrollState.AUTO_SCROLL: # simple exponential return if out of bounds out_of_bounds = self.get_offset() > max_offset or self.get_offset() < min_offset if out_of_bounds and self._handle_out_of_bounds: @@ -145,7 +166,13 @@ class GuiScrollPanel2: # Touch rejection: when releasing finger after swiping and stopping, panel # reports a few erroneous touch events with high velocity, try to ignore. - # If velocity decelerates very quickly, assume user doesn't intend to auto scroll + # If velocity decelerates very quickly, assume user doesn't intend to auto scroll. + # Catches two cases: 1) swipe, stop finger, then lift (stale high velocity in buffer) + # 2) dirty finger lift where finger rotates/slides producing spurious velocity spike. + # TODO: this heuristic false-positives on fast swipes because 140Hz touch polling + # jitter causes velocity to oscillate (not real deceleration). Better approaches: + # - Use evdev kernel timestamps to eliminate velocity oscillation at the source + # - Replace with a time-since-last-event check (40ms timeout) for swipe-stop-lift high_decel = False if len(self._velocity_buffer) > 2: # We limit max to first half since final few velocities can surpass first few @@ -160,6 +187,8 @@ class GuiScrollPanel2: print('deceleration too high, going to STEADY') high_decel = True + self._velocity = weighted_velocity(self._velocity_buffer) + # If final velocity is below some threshold, switch to steady state too low_speed = abs(self._velocity) <= MIN_VELOCITY_FOR_CLICKING * 1.5 # plus some margin diff --git a/system/ui/lib/tests/test_handle_state_change.py b/system/ui/lib/tests/test_handle_state_change.py new file mode 100644 index 000000000..69aae6fdf --- /dev/null +++ b/system/ui/lib/tests/test_handle_state_change.py @@ -0,0 +1,906 @@ +"""Tests for WifiManager._handle_state_change. + +Tests the state machine in isolation by constructing a WifiManager with mocked +DBus, then calling _handle_state_change directly with NM state transitions. +""" +import pytest +from jeepney.low_level import MessageType +from pytest_mock import MockerFixture + +from openpilot.system.ui.lib.networkmanager import NMDeviceState, NMDeviceStateReason +from openpilot.system.ui.lib.wifi_manager import WifiManager, WifiState, ConnectStatus + + +def _make_wm(mocker: MockerFixture, connections=None): + """Create a WifiManager with only the fields _handle_state_change touches.""" + mocker.patch.object(WifiManager, '_initialize') + wm = WifiManager.__new__(WifiManager) + wm._exit = True # prevent stop() from doing anything in __del__ + wm._conn_monitor = mocker.MagicMock() + wm._connections = dict(connections or {}) + wm._wifi_state = WifiState() + wm._user_epoch = 0 + wm._callback_queue = [] + wm._need_auth = [] + wm._activated = [] + wm._update_networks = mocker.MagicMock() + wm._update_active_connection_info = mocker.MagicMock() + wm._get_active_wifi_connection = mocker.MagicMock(return_value=(None, None)) + return wm + + +def fire(wm: WifiManager, new_state: int, prev_state: int = NMDeviceState.UNKNOWN, + reason: int = NMDeviceStateReason.NONE) -> None: + """Feed a state change into the handler.""" + wm._handle_state_change(new_state, prev_state, reason) + + +def fire_wpa_connect(wm: WifiManager) -> None: + """WPA handshake then IP negotiation through ACTIVATED, as seen on device.""" + fire(wm, NMDeviceState.NEED_AUTH) + fire(wm, NMDeviceState.PREPARE, prev_state=NMDeviceState.NEED_AUTH) + fire(wm, NMDeviceState.CONFIG) + fire(wm, NMDeviceState.IP_CONFIG) + fire(wm, NMDeviceState.IP_CHECK) + fire(wm, NMDeviceState.SECONDARIES) + fire(wm, NMDeviceState.ACTIVATED) + + +# --------------------------------------------------------------------------- +# Basic transitions +# --------------------------------------------------------------------------- + +class TestDisconnected: + def test_generic_disconnect_clears_state(self, mocker): + wm = _make_wm(mocker) + wm._wifi_state = WifiState(ssid="Net", status=ConnectStatus.CONNECTED) + + fire(wm, NMDeviceState.DISCONNECTED, reason=NMDeviceStateReason.UNKNOWN) + + assert wm._wifi_state.ssid is None + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + wm._update_networks.assert_not_called() + + def test_new_activation_is_noop(self, mocker): + """NEW_ACTIVATION means NM is about to connect to another network — don't clear.""" + wm = _make_wm(mocker) + wm._wifi_state = WifiState(ssid="OldNet", status=ConnectStatus.CONNECTED) + + fire(wm, NMDeviceState.DISCONNECTED, reason=NMDeviceStateReason.NEW_ACTIVATION) + + assert wm._wifi_state.ssid == "OldNet" + assert wm._wifi_state.status == ConnectStatus.CONNECTED + + def test_connection_removed_keeps_other_connecting(self, mocker): + """Forget A while connecting to B: CONNECTION_REMOVED for A must not clear B.""" + wm = _make_wm(mocker, connections={"B": "/path/B"}) + wm._set_connecting("B") + + fire(wm, NMDeviceState.DISCONNECTED, reason=NMDeviceStateReason.CONNECTION_REMOVED) + + assert wm._wifi_state.ssid == "B" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + def test_connection_removed_clears_when_forgotten(self, mocker): + """Forget A: A is no longer in _connections, so state should clear.""" + wm = _make_wm(mocker, connections={}) + wm._wifi_state = WifiState(ssid="A", status=ConnectStatus.CONNECTED) + + fire(wm, NMDeviceState.DISCONNECTED, reason=NMDeviceStateReason.CONNECTION_REMOVED) + + assert wm._wifi_state.ssid is None + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + + +class TestDeactivating: + def test_deactivating_noop_for_non_connection_removed(self, mocker): + """DEACTIVATING with non-CONNECTION_REMOVED reason is a no-op.""" + wm = _make_wm(mocker) + wm._wifi_state = WifiState(ssid="Net", status=ConnectStatus.CONNECTED) + + fire(wm, NMDeviceState.DEACTIVATING, reason=NMDeviceStateReason.USER_REQUESTED) + + assert wm._wifi_state.ssid == "Net" + assert wm._wifi_state.status == ConnectStatus.CONNECTED + + @pytest.mark.parametrize("status, expected_clears", [ + (ConnectStatus.CONNECTED, True), + (ConnectStatus.CONNECTING, False), + ]) + def test_deactivating_connection_removed(self, mocker, status, expected_clears): + """DEACTIVATING(CONNECTION_REMOVED) clears CONNECTED but preserves CONNECTING. + + CONNECTED: forgetting the current network. The forgotten callback fires between + DEACTIVATING and DISCONNECTED — must clear here so the UI doesn't flash "connected" + after the eager _network_forgetting flag resets. + + CONNECTING: forget A while connecting to B. DEACTIVATING fires for A's removal, + but B's CONNECTING state must be preserved. + """ + wm = _make_wm(mocker, connections={"B": "/path/B"}) + wm._wifi_state = WifiState(ssid="B" if status == ConnectStatus.CONNECTING else "A", status=status) + + fire(wm, NMDeviceState.DEACTIVATING, reason=NMDeviceStateReason.CONNECTION_REMOVED) + + if expected_clears: + assert wm._wifi_state.ssid is None + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + else: + assert wm._wifi_state.ssid == "B" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + +class TestPrepareConfig: + def test_user_initiated_skips_dbus_lookup(self, mocker): + """User called _set_connecting('B') — PREPARE must not overwrite via DBus. + + Reproduced on device: rapidly tap A then B. PREPARE's DBus lookup returns A's + stale conn_path, overwriting ssid to A for 1-2 frames. UI shows the "connecting" + indicator briefly jump to the wrong network row then back. + """ + wm = _make_wm(mocker, connections={"A": "/path/A", "B": "/path/B"}) + wm._set_connecting("B") + wm._get_active_wifi_connection.return_value = ("/path/A", {}) + + fire(wm, NMDeviceState.PREPARE) + + assert wm._wifi_state.ssid == "B" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + wm._get_active_wifi_connection.assert_not_called() + + @pytest.mark.parametrize("state", [NMDeviceState.PREPARE, NMDeviceState.CONFIG]) + def test_auto_connect_looks_up_ssid(self, mocker, state): + """Auto-connection (ssid=None): PREPARE and CONFIG must look up ssid from NM.""" + wm = _make_wm(mocker, connections={"AutoNet": "/path/auto"}) + wm._get_active_wifi_connection.return_value = ("/path/auto", {}) + + fire(wm, state) + + assert wm._wifi_state.ssid == "AutoNet" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + def test_auto_connect_dbus_fails(self, mocker): + """Auto-connection but DBus returns None: ssid stays None, status CONNECTING.""" + wm = _make_wm(mocker) + + fire(wm, NMDeviceState.PREPARE) + + assert wm._wifi_state.ssid is None + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + def test_auto_connect_conn_path_not_in_connections(self, mocker): + """DBus returns a conn_path that doesn't match any known connection.""" + wm = _make_wm(mocker, connections={"Other": "/path/other"}) + wm._get_active_wifi_connection.return_value = ("/path/unknown", {}) + + fire(wm, NMDeviceState.PREPARE) + + assert wm._wifi_state.ssid is None + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + +class TestNeedAuth: + def test_wrong_password_fires_callback(self, mocker): + """NEED_AUTH+SUPPLICANT_DISCONNECT from CONFIG = real wrong password.""" + wm = _make_wm(mocker) + cb = mocker.MagicMock() + wm.add_callbacks(need_auth=cb) + wm._set_connecting("SecNet") + + fire(wm, NMDeviceState.NEED_AUTH, prev_state=NMDeviceState.CONFIG, + reason=NMDeviceStateReason.SUPPLICANT_DISCONNECT) + + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + assert len(wm._callback_queue) == 1 + wm.process_callbacks() + cb.assert_called_once_with("SecNet") + + def test_failed_no_secrets_fires_callback(self, mocker): + """FAILED+NO_SECRETS = wrong password (weak/gone network). + + Confirmed on device: also fires when a hotspot turns off during connection. + NM can't complete the WPA handshake (AP vanished) and reports NO_SECRETS + rather than SSID_NOT_FOUND. The need_auth callback fires, so the UI shows + "wrong password" — a false positive, but same signal path. + + Real device sequence (new connection, hotspot turned off immediately): + PREPARE → CONFIG → NEED_AUTH(CONFIG, NONE) → PREPARE(NEED_AUTH) → CONFIG + → NEED_AUTH(CONFIG, NONE) → FAILED(NEED_AUTH, NO_SECRETS) → DISCONNECTED(FAILED, NONE) + """ + wm = _make_wm(mocker) + cb = mocker.MagicMock() + wm.add_callbacks(need_auth=cb) + wm._set_connecting("WeakNet") + + fire(wm, NMDeviceState.FAILED, reason=NMDeviceStateReason.NO_SECRETS) + + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + assert len(wm._callback_queue) == 1 + wm.process_callbacks() + cb.assert_called_once_with("WeakNet") + + def test_need_auth_then_failed_no_double_fire(self, mocker): + """Real device sends NEED_AUTH(SUPPLICANT_DISCONNECT) then FAILED(NO_SECRETS) back-to-back. + + The first clears ssid, so the second must not fire a duplicate callback. + Real device sequence: NEED_AUTH(CONFIG, SUPPLICANT_DISCONNECT) → FAILED(NEED_AUTH, NO_SECRETS) + """ + wm = _make_wm(mocker) + cb = mocker.MagicMock() + wm.add_callbacks(need_auth=cb) + wm._set_connecting("BadPass") + + fire(wm, NMDeviceState.NEED_AUTH, prev_state=NMDeviceState.CONFIG, + reason=NMDeviceStateReason.SUPPLICANT_DISCONNECT) + assert len(wm._callback_queue) == 1 + + fire(wm, NMDeviceState.FAILED, prev_state=NMDeviceState.NEED_AUTH, + reason=NMDeviceStateReason.NO_SECRETS) + assert len(wm._callback_queue) == 1 # no duplicate + + wm.process_callbacks() + cb.assert_called_once_with("BadPass") + + def test_no_ssid_no_callback(self, mocker): + """If ssid is None when NEED_AUTH fires, no callback enqueued.""" + wm = _make_wm(mocker) + cb = mocker.MagicMock() + wm.add_callbacks(need_auth=cb) + + fire(wm, NMDeviceState.NEED_AUTH, reason=NMDeviceStateReason.SUPPLICANT_DISCONNECT) + + assert len(wm._callback_queue) == 0 + + def test_interrupted_auth_ignored(self, mocker): + """Switching A->B: NEED_AUTH from A (prev=DISCONNECTED) must not fire callback. + + Reproduced on device: rapidly switching between two saved networks can trigger a + rare false "wrong password" dialog for the previous network, even though both have + correct passwords. The stale NEED_AUTH has prev_state=DISCONNECTED (not CONFIG). + """ + wm = _make_wm(mocker) + cb = mocker.MagicMock() + wm.add_callbacks(need_auth=cb) + wm._set_connecting("A") + wm._set_connecting("B") + + fire(wm, NMDeviceState.NEED_AUTH, prev_state=NMDeviceState.DISCONNECTED, + reason=NMDeviceStateReason.SUPPLICANT_DISCONNECT) + + assert wm._wifi_state.ssid == "B" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + assert len(wm._callback_queue) == 0 + + +class TestPassthroughStates: + """NEED_AUTH (generic), IP_CONFIG, IP_CHECK, SECONDARIES, FAILED (generic) are no-ops.""" + + @pytest.mark.parametrize("state", [ + NMDeviceState.NEED_AUTH, + NMDeviceState.IP_CONFIG, + NMDeviceState.IP_CHECK, + NMDeviceState.SECONDARIES, + NMDeviceState.FAILED, + ]) + def test_passthrough_is_noop(self, mocker, state): + wm = _make_wm(mocker) + wm._set_connecting("Net") + + fire(wm, state, reason=NMDeviceStateReason.NONE) + + assert wm._wifi_state.ssid == "Net" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + assert len(wm._callback_queue) == 0 + + +class TestActivated: + def test_sets_connected(self, mocker): + """ACTIVATED sets status to CONNECTED and fires callback.""" + wm = _make_wm(mocker, connections={"MyNet": "/path/mynet"}) + cb = mocker.MagicMock() + wm.add_callbacks(activated=cb) + wm._set_connecting("MyNet") + wm._get_active_wifi_connection.return_value = ("/path/mynet", {}) + + fire(wm, NMDeviceState.ACTIVATED) + + assert wm._wifi_state.status == ConnectStatus.CONNECTED + assert wm._wifi_state.ssid == "MyNet" + assert len(wm._callback_queue) == 1 + wm.process_callbacks() + cb.assert_called_once() + + def test_conn_path_none_still_connected(self, mocker): + """ACTIVATED but DBus returns None: status CONNECTED, ssid unchanged.""" + wm = _make_wm(mocker) + wm._set_connecting("MyNet") + + fire(wm, NMDeviceState.ACTIVATED) + + assert wm._wifi_state.status == ConnectStatus.CONNECTED + assert wm._wifi_state.ssid == "MyNet" + + def test_activated_side_effects(self, mocker): + """ACTIVATED persists the volatile connection to disk and updates active connection info.""" + wm = _make_wm(mocker, connections={"Net": "/path/net"}) + wm._set_connecting("Net") + wm._get_active_wifi_connection.return_value = ("/path/net", {}) + + fire(wm, NMDeviceState.ACTIVATED) + + wm._conn_monitor.send_and_get_reply.assert_called_once() + wm._update_active_connection_info.assert_called_once() + wm._update_networks.assert_not_called() + + +# --------------------------------------------------------------------------- +# Thread races: _set_connecting on main thread vs _handle_state_change on monitor thread. +# Uses side_effect on the DBus mock to simulate _set_connecting running mid-handler. +# The epoch counter detects that a user action occurred during the slow DBus call +# and discards the stale update. +# --------------------------------------------------------------------------- +# The deterministic fixes (skip DBus lookup when ssid already set, prev_state guard +# on NEED_AUTH, DEACTIVATING clears CONNECTED on CONNECTION_REMOVED, CONNECTION_REMOVED +# guard) shrink these race windows significantly. The epoch counter closes the +# remaining gaps. + +class TestThreadRaces: + def test_prepare_race_user_tap_during_dbus(self, mocker): + """User taps B while PREPARE's DBus call is in flight for auto-connect. + + Monitor thread reads wifi_state (ssid=None), starts DBus call. + Main thread: _set_connecting("B"). Monitor thread writes back stale ssid from DBus. + """ + wm = _make_wm(mocker, connections={"A": "/path/A", "B": "/path/B"}) + + def user_taps_b_during_dbus(*args, **kwargs): + wm._set_connecting("B") + return ("/path/A", {}) + + wm._get_active_wifi_connection.side_effect = user_taps_b_during_dbus + + fire(wm, NMDeviceState.PREPARE) + + assert wm._wifi_state.ssid == "B" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + def test_activated_race_user_tap_during_dbus(self, mocker): + """User taps B right as A finishes connecting (ACTIVATED handler running). + + Monitor thread reads wifi_state (A, CONNECTING), starts DBus call. + Main thread: _set_connecting("B"). Monitor thread writes (A, CONNECTED), losing B. + """ + wm = _make_wm(mocker, connections={"A": "/path/A", "B": "/path/B"}) + wm._set_connecting("A") + + def user_taps_b_during_dbus(*args, **kwargs): + wm._set_connecting("B") + return ("/path/A", {}) + + wm._get_active_wifi_connection.side_effect = user_taps_b_during_dbus + + fire(wm, NMDeviceState.ACTIVATED) + + assert wm._wifi_state.ssid == "B" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + def test_init_wifi_state_race_user_tap_during_dbus(self, mocker): + """User taps B while _init_wifi_state's DBus calls are in flight. + + _init_wifi_state runs from set_active(True) or worker error paths. It does + 2 DBus calls (device State property + _get_active_wifi_connection) then + unconditionally writes _wifi_state. If the user taps a network during those + calls, _set_connecting("B") is overwritten with stale NM ground truth. + """ + wm = _make_wm(mocker, connections={"A": "/path/A", "B": "/path/B"}) + wm._wifi_device = "/dev/wifi0" + wm._router_main = mocker.MagicMock() + + state_reply = mocker.MagicMock() + state_reply.body = [('u', NMDeviceState.ACTIVATED)] + wm._router_main.send_and_get_reply.return_value = state_reply + + def user_taps_b_during_dbus(*args, **kwargs): + wm._set_connecting("B") + return ("/path/A", {}) + + wm._get_active_wifi_connection.side_effect = user_taps_b_during_dbus + + wm._init_wifi_state() + + assert wm._wifi_state.ssid == "B" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + +# --------------------------------------------------------------------------- +# Full sequences (NM signal order from real devices) +# --------------------------------------------------------------------------- + +class TestFullSequences: + def test_normal_connect(self, mocker): + """User connects to saved network: full happy path. + + Real device sequence (switching from another connected network): + DEACTIVATING(ACTIVATED, NEW_ACTIVATION) → DISCONNECTED(DEACTIVATING, NEW_ACTIVATION) + PREPARE → CONFIG → NEED_AUTH(CONFIG, NONE) → PREPARE(NEED_AUTH, NONE) → CONFIG + → IP_CONFIG → IP_CHECK → SECONDARIES → ACTIVATED + """ + wm = _make_wm(mocker, connections={"Home": "/path/home"}) + wm._get_active_wifi_connection.return_value = ("/path/home", {}) + + wm._set_connecting("Home") + fire(wm, NMDeviceState.PREPARE) + fire(wm, NMDeviceState.CONFIG) + fire(wm, NMDeviceState.NEED_AUTH) # WPA handshake (reason=NONE) + fire(wm, NMDeviceState.PREPARE, prev_state=NMDeviceState.NEED_AUTH) + fire(wm, NMDeviceState.CONFIG) + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + fire(wm, NMDeviceState.IP_CONFIG) + fire(wm, NMDeviceState.IP_CHECK) + fire(wm, NMDeviceState.SECONDARIES) + fire(wm, NMDeviceState.ACTIVATED) + + assert wm._wifi_state.status == ConnectStatus.CONNECTED + assert wm._wifi_state.ssid == "Home" + + def test_wrong_password_then_retry(self, mocker): + """Wrong password → NEED_AUTH → FAILED → NM auto-reconnects to saved network. + + Confirmed on device: wrong password for Shane's iPhone, NM auto-connected to unifi. + + Real device sequence (switching from a connected network): + DEACTIVATING(ACTIVATED, NEW_ACTIVATION) → DISCONNECTED(DEACTIVATING, NEW_ACTIVATION) + → PREPARE → CONFIG → NEED_AUTH(CONFIG, NONE) ← WPA handshake + → PREPARE(NEED_AUTH, NONE) → CONFIG + → NEED_AUTH(CONFIG, SUPPLICANT_DISCONNECT) ← wrong password + → FAILED(NEED_AUTH, NO_SECRETS) ← NM gives up + → DISCONNECTED(FAILED, NONE) + → PREPARE → CONFIG → NEED_AUTH(CONFIG, NONE) → PREPARE(NEED_AUTH) → CONFIG + → IP_CONFIG → IP_CHECK → SECONDARIES → ACTIVATED ← auto-reconnect to other saved network + """ + wm = _make_wm(mocker, connections={"Sec": "/path/sec"}) + cb = mocker.MagicMock() + wm.add_callbacks(need_auth=cb) + + wm._set_connecting("Sec") + fire(wm, NMDeviceState.PREPARE) + fire(wm, NMDeviceState.CONFIG) + fire(wm, NMDeviceState.NEED_AUTH) # WPA handshake (reason=NONE) + fire(wm, NMDeviceState.PREPARE, prev_state=NMDeviceState.NEED_AUTH) + fire(wm, NMDeviceState.CONFIG) + + fire(wm, NMDeviceState.NEED_AUTH, prev_state=NMDeviceState.CONFIG, + reason=NMDeviceStateReason.SUPPLICANT_DISCONNECT) + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + assert len(wm._callback_queue) == 1 + + # FAILED(NO_SECRETS) follows but ssid is already cleared — no double-fire + fire(wm, NMDeviceState.FAILED, reason=NMDeviceStateReason.NO_SECRETS) + assert len(wm._callback_queue) == 1 + + fire(wm, NMDeviceState.DISCONNECTED, prev_state=NMDeviceState.FAILED) + + # Retry + wm._callback_queue.clear() + wm._set_connecting("Sec") + wm._get_active_wifi_connection.return_value = ("/path/sec", {}) + fire(wm, NMDeviceState.PREPARE) + fire(wm, NMDeviceState.CONFIG) + fire_wpa_connect(wm) + assert wm._wifi_state.status == ConnectStatus.CONNECTED + + def test_switch_saved_networks(self, mocker): + """Switch from A to B (both saved): NM signal sequence from real device. + + Real device sequence: + DEACTIVATING(ACTIVATED, NEW_ACTIVATION) → DISCONNECTED(DEACTIVATING, NEW_ACTIVATION) + → PREPARE → CONFIG → NEED_AUTH(CONFIG, NONE) → PREPARE(NEED_AUTH, NONE) → CONFIG + → IP_CONFIG → IP_CHECK → SECONDARIES → ACTIVATED + """ + wm = _make_wm(mocker, connections={"A": "/path/A", "B": "/path/B"}) + wm._wifi_state = WifiState(ssid="A", status=ConnectStatus.CONNECTED) + wm._get_active_wifi_connection.return_value = ("/path/B", {}) + + wm._set_connecting("B") + + fire(wm, NMDeviceState.DEACTIVATING, prev_state=NMDeviceState.ACTIVATED, + reason=NMDeviceStateReason.NEW_ACTIVATION) + fire(wm, NMDeviceState.DISCONNECTED, prev_state=NMDeviceState.DEACTIVATING, + reason=NMDeviceStateReason.NEW_ACTIVATION) + assert wm._wifi_state.ssid == "B" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + fire(wm, NMDeviceState.PREPARE) + fire(wm, NMDeviceState.CONFIG) + fire_wpa_connect(wm) + assert wm._wifi_state.status == ConnectStatus.CONNECTED + assert wm._wifi_state.ssid == "B" + + def test_rapid_switch_no_false_wrong_password(self, mocker): + """Switch A→B quickly: A's interrupted NEED_AUTH must NOT show wrong password. + + NOTE: The late NEED_AUTH(DISCONNECTED, SUPPLICANT_DISCONNECT) is common when rapidly + switching between networks with wrong/new passwords. Less common when switching between + saved networks with correct passwords. Not guaranteed — some switches skip it and go + straight from DISCONNECTED to PREPARE. The prev_state is consistently DISCONNECTED + for stale signals, so the prev_state guard reliably distinguishes them. + + Worst-case signal sequence this protects against: + DEACTIVATING(NEW_ACTIVATION) → DISCONNECTED(NEW_ACTIVATION) + → NEED_AUTH(DISCONNECTED, SUPPLICANT_DISCONNECT) ← A's stale auth failure + → PREPARE → CONFIG → ... → ACTIVATED ← B connects + """ + wm = _make_wm(mocker, connections={"A": "/path/A", "B": "/path/B"}) + cb = mocker.MagicMock() + wm.add_callbacks(need_auth=cb) + wm._wifi_state = WifiState(ssid="A", status=ConnectStatus.CONNECTED) + wm._get_active_wifi_connection.return_value = ("/path/B", {}) + + wm._set_connecting("B") + + fire(wm, NMDeviceState.DEACTIVATING, prev_state=NMDeviceState.ACTIVATED, + reason=NMDeviceStateReason.NEW_ACTIVATION) + fire(wm, NMDeviceState.DISCONNECTED, prev_state=NMDeviceState.DEACTIVATING, + reason=NMDeviceStateReason.NEW_ACTIVATION) + fire(wm, NMDeviceState.NEED_AUTH, prev_state=NMDeviceState.DISCONNECTED, + reason=NMDeviceStateReason.SUPPLICANT_DISCONNECT) + + assert wm._wifi_state.ssid == "B" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + assert len(wm._callback_queue) == 0 + + fire(wm, NMDeviceState.PREPARE) + fire(wm, NMDeviceState.CONFIG) + fire_wpa_connect(wm) + assert wm._wifi_state.status == ConnectStatus.CONNECTED + + def test_forget_while_connecting(self, mocker): + """Forget the network we're currently connecting to (not yet ACTIVATED). + + Confirmed on device: connected to unifi, tapped Shane's iPhone, then forgot + Shane's iPhone while at CONFIG. NM auto-connected to unifi afterward. + + Real device sequence (switching then forgetting mid-connection): + DEACTIVATING(ACTIVATED, NEW_ACTIVATION) → DISCONNECTED(DEACTIVATING, NEW_ACTIVATION) + → PREPARE → CONFIG → NEED_AUTH(CONFIG, NONE) → PREPARE(NEED_AUTH) → CONFIG + → DEACTIVATING(CONFIG, CONNECTION_REMOVED) ← forget at CONFIG + → DISCONNECTED(DEACTIVATING, CONNECTION_REMOVED) + → PREPARE → CONFIG → ... → ACTIVATED ← NM auto-connects to other saved network + + Note: DEACTIVATING fires from CONFIG (not ACTIVATED). wifi_state.status is + CONNECTING, so the DEACTIVATING handler is a no-op. DISCONNECTED clears state + (ssid removed from _connections by ConnectionRemoved), then PREPARE recovers + via DBus lookup for the auto-connect. + """ + wm = _make_wm(mocker, connections={"A": "/path/A", "Other": "/path/other"}) + wm._get_active_wifi_connection.return_value = ("/path/other", {}) + + wm._set_connecting("A") + + fire(wm, NMDeviceState.PREPARE) + fire(wm, NMDeviceState.CONFIG) + assert wm._wifi_state.ssid == "A" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + # User forgets A: ConnectionRemoved processed first, then state changes + del wm._connections["A"] + + fire(wm, NMDeviceState.DEACTIVATING, prev_state=NMDeviceState.CONFIG, + reason=NMDeviceStateReason.CONNECTION_REMOVED) + assert wm._wifi_state.ssid == "A" + assert wm._wifi_state.status == ConnectStatus.CONNECTING # DEACTIVATING preserves CONNECTING + + fire(wm, NMDeviceState.DISCONNECTED, prev_state=NMDeviceState.DEACTIVATING, + reason=NMDeviceStateReason.CONNECTION_REMOVED) + assert wm._wifi_state.ssid is None + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + + # NM auto-connects to another saved network + fire(wm, NMDeviceState.PREPARE) + assert wm._wifi_state.ssid == "Other" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + fire(wm, NMDeviceState.CONFIG) + fire_wpa_connect(wm) + assert wm._wifi_state.status == ConnectStatus.CONNECTED + assert wm._wifi_state.ssid == "Other" + + def test_forget_connected_network(self, mocker): + """Forget the currently connected network (not switching to another). + + Real device sequence: + DEACTIVATING(ACTIVATED, CONNECTION_REMOVED) → DISCONNECTED(DEACTIVATING, CONNECTION_REMOVED) + + ConnectionRemoved signal may or may not have been processed before state changes. + Either way, state must clear — we're forgetting what we're connected to, not switching. + """ + wm = _make_wm(mocker, connections={"A": "/path/A"}) + wm._wifi_state = WifiState(ssid="A", status=ConnectStatus.CONNECTED) + + fire(wm, NMDeviceState.DEACTIVATING, prev_state=NMDeviceState.ACTIVATED, + reason=NMDeviceStateReason.CONNECTION_REMOVED) + assert wm._wifi_state.ssid is None + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + + # DISCONNECTED follows — harmless since state is already cleared + fire(wm, NMDeviceState.DISCONNECTED, prev_state=NMDeviceState.DEACTIVATING, + reason=NMDeviceStateReason.CONNECTION_REMOVED) + assert wm._wifi_state.ssid is None + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + + def test_forget_A_connect_B(self, mocker): + """Forget A while connecting to B: full signal sequence. + + Real device sequence: + DEACTIVATING(ACTIVATED, CONNECTION_REMOVED) → DISCONNECTED(DEACTIVATING, CONNECTION_REMOVED) + → PREPARE → CONFIG → NEED_AUTH(CONFIG, NONE) → PREPARE(NEED_AUTH, NONE) → CONFIG + → IP_CONFIG → IP_CHECK → SECONDARIES → ACTIVATED + + Signal order: + 1. User: _set_connecting("B"), forget("A") removes A from _connections + 2. NewConnection for B arrives → _connections["B"] = ... + 3. DEACTIVATING(CONNECTION_REMOVED) — no-op + 4. DISCONNECTED(CONNECTION_REMOVED) — B is in _connections, must not clear + 5. PREPARE → CONFIG → NEED_AUTH → PREPARE → CONFIG → ... → ACTIVATED + """ + wm = _make_wm(mocker, connections={"A": "/path/A"}) + wm._wifi_state = WifiState(ssid="A", status=ConnectStatus.CONNECTED) + + wm._set_connecting("B") + del wm._connections["A"] + wm._connections["B"] = "/path/B" + + fire(wm, NMDeviceState.DEACTIVATING, prev_state=NMDeviceState.ACTIVATED, + reason=NMDeviceStateReason.CONNECTION_REMOVED) + assert wm._wifi_state.ssid == "B" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + fire(wm, NMDeviceState.DISCONNECTED, prev_state=NMDeviceState.DEACTIVATING, + reason=NMDeviceStateReason.CONNECTION_REMOVED) + assert wm._wifi_state.ssid == "B" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + wm._get_active_wifi_connection.return_value = ("/path/B", {}) + fire(wm, NMDeviceState.PREPARE) + fire(wm, NMDeviceState.CONFIG) + fire_wpa_connect(wm) + assert wm._wifi_state.status == ConnectStatus.CONNECTED + assert wm._wifi_state.ssid == "B" + + def test_forget_A_connect_B_late_new_connection(self, mocker): + """Forget A, connect B: NewConnection for B arrives AFTER DISCONNECTED. + + This is the worst-case race: B isn't in _connections when DISCONNECTED fires, + so the guard can't protect it and state clears. PREPARE must recover by doing + the DBus lookup (ssid is None at that point). + + Signal order: + 1. User: _set_connecting("B"), forget("A") removes A from _connections + 2. DEACTIVATING(CONNECTION_REMOVED) — B NOT in _connections, should be no-op + 3. DISCONNECTED(CONNECTION_REMOVED) — B STILL NOT in _connections, clears state + 4. NewConnection for B arrives late → _connections["B"] = ... + 5. PREPARE (ssid=None, so DBus lookup recovers) → CONFIG → ACTIVATED + """ + wm = _make_wm(mocker, connections={"A": "/path/A"}) + wm._wifi_state = WifiState(ssid="A", status=ConnectStatus.CONNECTED) + + wm._set_connecting("B") + del wm._connections["A"] + + fire(wm, NMDeviceState.DEACTIVATING, prev_state=NMDeviceState.ACTIVATED, + reason=NMDeviceStateReason.CONNECTION_REMOVED) + assert wm._wifi_state.ssid == "B" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + fire(wm, NMDeviceState.DISCONNECTED, prev_state=NMDeviceState.DEACTIVATING, + reason=NMDeviceStateReason.CONNECTION_REMOVED) + # B not in _connections yet, so state clears — this is the known edge case + assert wm._wifi_state.ssid is None + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + + # NewConnection arrives late + wm._connections["B"] = "/path/B" + wm._get_active_wifi_connection.return_value = ("/path/B", {}) + + # PREPARE recovers: ssid is None so it looks up from DBus + fire(wm, NMDeviceState.PREPARE) + assert wm._wifi_state.ssid == "B" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + fire(wm, NMDeviceState.CONFIG) + fire_wpa_connect(wm) + assert wm._wifi_state.status == ConnectStatus.CONNECTED + assert wm._wifi_state.ssid == "B" + + def test_auto_connect(self, mocker): + """NM auto-connects (no user action, ssid starts None).""" + wm = _make_wm(mocker, connections={"AutoNet": "/path/auto"}) + wm._get_active_wifi_connection.return_value = ("/path/auto", {}) + + fire(wm, NMDeviceState.PREPARE) + assert wm._wifi_state.ssid == "AutoNet" + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + fire(wm, NMDeviceState.CONFIG) + fire_wpa_connect(wm) + assert wm._wifi_state.status == ConnectStatus.CONNECTED + assert wm._wifi_state.ssid == "AutoNet" + + def test_network_lost_during_connection(self, mocker): + """Hotspot turned off while connecting (before ACTIVATED). + + Confirmed on device: started new connection to Shane's iPhone, immediately + turned off the hotspot. NM can't complete WPA handshake and reports + FAILED(NO_SECRETS) — same signal as wrong password (false positive). + + Real device sequence: + PREPARE → CONFIG → NEED_AUTH(CONFIG, NONE) → PREPARE(NEED_AUTH) → CONFIG + → NEED_AUTH(CONFIG, NONE) → FAILED(NEED_AUTH, NO_SECRETS) → DISCONNECTED(FAILED, NONE) + + Note: no DEACTIVATING, no SUPPLICANT_DISCONNECT. The NEED_AUTH(CONFIG, NONE) is the + normal WPA handshake (not an error). NM gives up with NO_SECRETS because the AP + vanished mid-handshake. + """ + wm = _make_wm(mocker, connections={"Hotspot": "/path/hs"}) + cb = mocker.MagicMock() + wm.add_callbacks(need_auth=cb) + + wm._set_connecting("Hotspot") + fire(wm, NMDeviceState.PREPARE) + fire(wm, NMDeviceState.CONFIG) + fire(wm, NMDeviceState.NEED_AUTH) # WPA handshake (reason=NONE) + fire(wm, NMDeviceState.PREPARE, prev_state=NMDeviceState.NEED_AUTH) + fire(wm, NMDeviceState.CONFIG) + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + # Second NEED_AUTH(CONFIG, NONE) — NM retries handshake, AP vanishing + fire(wm, NMDeviceState.NEED_AUTH) + assert wm._wifi_state.status == ConnectStatus.CONNECTING + + # NM gives up — reports NO_SECRETS (same as wrong password) + fire(wm, NMDeviceState.FAILED, prev_state=NMDeviceState.NEED_AUTH, + reason=NMDeviceStateReason.NO_SECRETS) + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + assert len(wm._callback_queue) == 1 + + fire(wm, NMDeviceState.DISCONNECTED, prev_state=NMDeviceState.FAILED) + assert wm._wifi_state.ssid is None + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + + wm.process_callbacks() + cb.assert_called_once_with("Hotspot") + + @pytest.mark.xfail(reason="TODO: FAILED(SSID_NOT_FOUND) should emit error for UI") + def test_ssid_not_found(self, mocker): + """Network drops off while connected — hotspot turned off. + + NM docs: SSID_NOT_FOUND (53) = "The WiFi network could not be found" + + Confirmed on device: connected to Shane's iPhone, then turned off the hotspot. + No DEACTIVATING fires — NM goes straight from ACTIVATED to FAILED(SSID_NOT_FOUND). + NM retries connecting (PREPARE → CONFIG → ... → FAILED(CONFIG, SSID_NOT_FOUND)) + before finally giving up with DISCONNECTED. + + NOTE: turning off a hotspot during initial connection (before ACTIVATED) typically + produces FAILED(NO_SECRETS) instead of SSID_NOT_FOUND (see test_failed_no_secrets). + + Real device sequence (hotspot turned off while connected): + FAILED(ACTIVATED, SSID_NOT_FOUND) → DISCONNECTED(FAILED, NONE) + → PREPARE → CONFIG → NEED_AUTH(CONFIG, NONE) → PREPARE(NEED_AUTH) → CONFIG + → NEED_AUTH(CONFIG, NONE) → PREPARE(NEED_AUTH) → CONFIG + → FAILED(CONFIG, SSID_NOT_FOUND) → DISCONNECTED(FAILED, NONE) + + The UI error callback mechanism is intentionally deferred — for now just clear state. + """ + wm = _make_wm(mocker, connections={"GoneNet": "/path/gone"}) + cb = mocker.MagicMock() + wm.add_callbacks(need_auth=cb) + + wm._set_connecting("GoneNet") + fire(wm, NMDeviceState.PREPARE) + fire(wm, NMDeviceState.CONFIG) + fire(wm, NMDeviceState.FAILED, reason=NMDeviceStateReason.SSID_NOT_FOUND) + + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + assert wm._wifi_state.ssid is None + + def test_failed_then_disconnected_clears_state(self, mocker): + """After FAILED, NM always transitions to DISCONNECTED to clean up. + + NM docs: FAILED (120) = "failed to connect, cleaning up the connection request" + Full sequence: ... → FAILED(reason) → DISCONNECTED(NONE) + """ + wm = _make_wm(mocker) + wm._set_connecting("Net") + + fire(wm, NMDeviceState.FAILED, reason=NMDeviceStateReason.NONE) + assert wm._wifi_state.status == ConnectStatus.CONNECTING # FAILED(NONE) is a no-op + + fire(wm, NMDeviceState.DISCONNECTED, reason=NMDeviceStateReason.NONE) + assert wm._wifi_state.ssid is None + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + + def test_user_requested_disconnect(self, mocker): + """User explicitly disconnects from the network. + + NM docs: USER_REQUESTED (39) = "Device disconnected by user or client" + Expected sequence: DEACTIVATING(USER_REQUESTED) → DISCONNECTED(USER_REQUESTED) + """ + wm = _make_wm(mocker) + wm._wifi_state = WifiState(ssid="MyNet", status=ConnectStatus.CONNECTED) + + fire(wm, NMDeviceState.DEACTIVATING, reason=NMDeviceStateReason.USER_REQUESTED) + fire(wm, NMDeviceState.DISCONNECTED, reason=NMDeviceStateReason.USER_REQUESTED) + + assert wm._wifi_state.ssid is None + assert wm._wifi_state.status == ConnectStatus.DISCONNECTED + + +# --------------------------------------------------------------------------- +# Worker error recovery: DBus errors in activate/connect re-sync with NM +# --------------------------------------------------------------------------- +# Verified on device: when ActivateConnection returns UnknownConnection error, +# NM emits no state signals. The worker error path is the only recovery point. + +class TestWorkerErrorRecovery: + """Worker threads re-sync with NM via _init_wifi_state on DBus errors, + preserving actual NM state instead of blindly clearing to DISCONNECTED.""" + + def _mock_init_restores(self, wm, mocker, ssid, status): + """Replace _init_wifi_state with a mock that simulates NM reporting the given state.""" + mock = mocker.MagicMock( + side_effect=lambda: setattr(wm, '_wifi_state', WifiState(ssid=ssid, status=status)) + ) + wm._init_wifi_state = mock + return mock + + def test_activate_dbus_error_resyncs(self, mocker): + """ActivateConnection returns DBus error while A is connected. + NM rejects the request — no state signals emitted. Worker must re-read NM + state to discover A is still connected, not clear to DISCONNECTED. + """ + wm = _make_wm(mocker, connections={"A": "/path/A", "B": "/path/B"}) + wm._wifi_device = "/dev/wifi0" + wm._nm = mocker.MagicMock() + wm._wifi_state = WifiState(ssid="A", status=ConnectStatus.CONNECTED) + wm._router_main = mocker.MagicMock() + + error_reply = mocker.MagicMock() + error_reply.header.message_type = MessageType.error + wm._router_main.send_and_get_reply.return_value = error_reply + + mock_init = self._mock_init_restores(wm, mocker, "A", ConnectStatus.CONNECTED) + + wm.activate_connection("B", block=True) + + mock_init.assert_called_once() + assert wm._wifi_state.ssid == "A" + assert wm._wifi_state.status == ConnectStatus.CONNECTED + + def test_connect_to_network_dbus_error_resyncs(self, mocker): + """AddAndActivateConnection2 returns DBus error while A is connected.""" + wm = _make_wm(mocker, connections={"A": "/path/A"}) + wm._wifi_device = "/dev/wifi0" + wm._nm = mocker.MagicMock() + wm._wifi_state = WifiState(ssid="A", status=ConnectStatus.CONNECTED) + wm._router_main = mocker.MagicMock() + wm._forgotten = [] + + error_reply = mocker.MagicMock() + error_reply.header.message_type = MessageType.error + wm._router_main.send_and_get_reply.return_value = error_reply + + mock_init = self._mock_init_restores(wm, mocker, "A", ConnectStatus.CONNECTED) + + # Run worker thread synchronously + workers = [] + mocker.patch('openpilot.system.ui.lib.wifi_manager.threading.Thread', + side_effect=lambda target, **kw: type('T', (), {'start': lambda self: workers.append(target)})()) + + wm.connect_to_network("B", "password123") + workers[-1]() + + mock_init.assert_called_once() + assert wm._wifi_state.ssid == "A" + assert wm._wifi_state.status == ConnectStatus.CONNECTED diff --git a/system/ui/lib/wifi_manager.py b/system/ui/lib/wifi_manager.py index 4fcd7c48a..6251c1474 100644 --- a/system/ui/lib/wifi_manager.py +++ b/system/ui/lib/wifi_manager.py @@ -1,44 +1,36 @@ import atexit -import os import threading import time import uuid import subprocess +import os import shutil from collections.abc import Callable -from dataclasses import dataclass +from dataclasses import dataclass, replace from enum import IntEnum from typing import Any +JEEPNY_AVAILABLE = True try: from jeepney import DBusAddress, new_method_call from jeepney.bus_messages import MatchRule, message_bus - from jeepney.io.blocking import open_dbus_connection as open_dbus_connection_blocking + from jeepney.io.blocking import DBusConnection, open_dbus_connection as open_dbus_connection_blocking from jeepney.io.threading import DBusRouter, open_dbus_connection as open_dbus_connection_threading from jeepney.low_level import MessageType from jeepney.wrappers import Properties - JEEPNY_AVAILABLE = True - JEEPNY_IMPORT_ERROR: Exception | None = None -except Exception as e: +except ImportError: JEEPNY_AVAILABLE = False - JEEPNY_IMPORT_ERROR = e - DBusAddress = Any # type: ignore[assignment] - DBusRouter = Any # type: ignore[assignment] - MatchRule = Any # type: ignore[assignment] - MessageType = Any # type: ignore[assignment] - Properties = Any # type: ignore[assignment] + DBusAddress = DBusConnection = DBusRouter = MatchRule = MessageType = Properties = Any + message_bus = None def new_method_call(*_args, **_kwargs): - raise RuntimeError("jeepney is unavailable") - - def message_bus(*_args, **_kwargs): - raise RuntimeError("jeepney is unavailable") + raise RuntimeError("jeepney unavailable") def open_dbus_connection_blocking(*_args, **_kwargs): - raise RuntimeError("jeepney is unavailable") + raise RuntimeError("jeepney unavailable") def open_dbus_connection_threading(*_args, **_kwargs): - raise RuntimeError("jeepney is unavailable") + raise RuntimeError("jeepney unavailable") from openpilot.common.swaglog import cloudlog from openpilot.system.hardware import PC @@ -49,9 +41,8 @@ from openpilot.system.ui.lib.networkmanager import (NM, NM_WIRELESS_IFACE, NM_80 NM_802_11_AP_FLAGS_PRIVACY, NM_802_11_AP_FLAGS_WPS, NM_PATH, NM_IFACE, NM_ACCESS_POINT_IFACE, NM_SETTINGS_PATH, NM_SETTINGS_IFACE, NM_CONNECTION_IFACE, NM_DEVICE_IFACE, - NM_DEVICE_TYPE_WIFI, NM_DEVICE_TYPE_MODEM, NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT, - NM_DEVICE_STATE_REASON_NEW_ACTIVATION, NM_ACTIVE_CONNECTION_IFACE, - NM_IP4_CONFIG_IFACE, NMDeviceState) + NM_DEVICE_TYPE_WIFI, NM_DEVICE_TYPE_MODEM, NM_ACTIVE_CONNECTION_IFACE, + NM_IP4_CONFIG_IFACE, NM_PROPERTIES_IFACE, NMDeviceState, NMDeviceStateReason) try: from openpilot.common.params import Params @@ -65,10 +56,26 @@ SCAN_PERIOD_SECONDS = 5 DESKTOP_FAKE_IP = "192.168.1.42" TRUE_VALUES = {"1", "true", "yes", "on"} +DEBUG = False +_dbus_call_idx = 0 -def _canonicalize_ssid(ssid: str) -> str: - # iPhone hotspots can alternate between unicode and ASCII apostrophes. - return ssid.replace("’", "'") + +def normalize_ssid(ssid: str) -> str: + return ssid.replace("’", "'") # for iPhone hotspots + + +def _wrap_router(router): + def _wrap(orig): + def wrapper(msg, **kw): + global _dbus_call_idx + _dbus_call_idx += 1 + if DEBUG: + h = msg.header.fields + print(f"[DBUS #{_dbus_call_idx}] {h.get(6, '?')} {h.get(3, '?')} {msg.body}") + return orig(msg, **kw) + return wrapper + router.send_and_get_reply = _wrap(router.send_and_get_reply) + router.send = _wrap(router.send) class SecurityType(IntEnum): @@ -105,24 +112,20 @@ def get_security_type(flags: int, wpa_flags: int, rsn_flags: int) -> SecurityTyp class Network: ssid: str strength: int - is_connected: bool security_type: SecurityType - is_saved: bool - ip_address: str = "" # TODO: implement + is_tethering: bool @classmethod - def from_dbus(cls, ssid: str, aps: list["AccessPoint"], is_saved: bool) -> "Network": + def from_dbus(cls, ssid: str, aps: list["AccessPoint"], is_tethering: bool) -> "Network": # we only want to show the strongest AP for each Network/SSID strongest_ap = max(aps, key=lambda ap: ap.strength) - is_connected = any(ap.is_connected for ap in aps) security_type = get_security_type(strongest_ap.flags, strongest_ap.wpa_flags, strongest_ap.rsn_flags) return cls( ssid=ssid, - strength=strongest_ap.strength, - is_connected=is_connected and is_saved, + strength=100 if is_tethering else strongest_ap.strength, security_type=security_type, - is_saved=is_saved, + is_tethering=is_tethering, ) @@ -131,14 +134,13 @@ class AccessPoint: ssid: str bssid: str strength: int - is_connected: bool flags: int wpa_flags: int rsn_flags: int ap_path: str @classmethod - def from_dbus(cls, ap_props: dict[str, tuple[str, Any]], ap_path: str, active_ap_path: str) -> "AccessPoint": + def from_dbus(cls, ap_props: dict[str, tuple[str, Any]], ap_path: str) -> "AccessPoint": ssid = bytes(ap_props['Ssid'][1]).decode("utf-8", "replace") bssid = str(ap_props['HwAddress'][1]) strength = int(ap_props['Strength'][1]) @@ -150,7 +152,6 @@ class AccessPoint: ssid=ssid, bssid=bssid, strength=strength, - is_connected=ap_path == active_ap_path, flags=flags, wpa_flags=wpa_flags, rsn_flags=rsn_flags, @@ -158,80 +159,96 @@ class AccessPoint: ) +class ConnectStatus(IntEnum): + DISCONNECTED = 0 + CONNECTING = 1 + CONNECTED = 2 + + +@dataclass(frozen=True) +class WifiState: + ssid: str | None = None + status: ConnectStatus = ConnectStatus.DISCONNECTED + + class WifiManager: def __init__(self): - self._networks: list[Network] = [] # a network can be comprised of multiple APs + self._networks: list[Network] = [] # an unsorted list of available Networks. a Network can be comprised of multiple APs self._active = True # used to not run when not in settings self._exit = False self._fake_networking = False self._nmcli_networking = False - self._dbus_available = False + self._backend_unavailable = False allow_desktop_fake = PC and os.getenv("SP_ALLOW_DESKTOP_FAKE_WIFI", "0").lower() in TRUE_VALUES has_nmcli = shutil.which("nmcli") is not None - if allow_desktop_fake: - self._router_main = None - self._conn_monitor = None - self._nm = None - self._fake_networking = True # DBus connections - elif not JEEPNY_AVAILABLE: - cloudlog.warning(f"jeepney unavailable: {JEEPNY_IMPORT_ERROR}") + if not JEEPNY_AVAILABLE: + cloudlog.warning("jeepney unavailable") self._router_main = None self._conn_monitor = None self._nm = None - if has_nmcli: + if allow_desktop_fake: + cloudlog.warning("Using desktop fake Wi-Fi backend") + self._fake_networking = True + elif has_nmcli: + cloudlog.warning("Using nmcli Wi-Fi backend") self._nmcli_networking = True else: - cloudlog.error("No networking backend available (jeepney missing, nmcli unavailable)") + cloudlog.warning("Wi-Fi backend disabled") + self._backend_unavailable = True + self._exit = True else: try: self._router_main = DBusRouter(open_dbus_connection_threading(bus="SYSTEM")) # used by scanner / general method calls + _wrap_router(self._router_main) self._conn_monitor = open_dbus_connection_blocking(bus="SYSTEM") # used by state monitor thread self._nm = DBusAddress(NM_PATH, bus_name=NM, interface=NM_IFACE) - self._dbus_available = True - except Exception as e: - cloudlog.warning(f"Failed to connect to system D-Bus: {e}") + except Exception: + if allow_desktop_fake: + cloudlog.warning("Failed to connect to system D-Bus; using desktop fake Wi-Fi backend") + self._fake_networking = True + elif has_nmcli: + cloudlog.warning("Failed to connect to system D-Bus; using nmcli Wi-Fi backend") + self._nmcli_networking = True + else: + cloudlog.exception("Failed to connect to system D-Bus") + self._backend_unavailable = True + self._exit = True self._router_main = None self._conn_monitor = None self._nm = None - if has_nmcli: - self._nmcli_networking = True - else: - cloudlog.error("No networking backend available (D-Bus unavailable, nmcli unavailable)") # Store wifi device path self._wifi_device: str | None = None # State - self._connecting_to_ssid: str = "" + self._connections: dict[str, str] = {} # ssid -> connection path, updated via NM signals + self._wifi_state: WifiState = WifiState() + self._user_epoch: int = 0 self._ipv4_address: str = "" self._current_network_metered: MeteredType = MeteredType.UNKNOWN self._tethering_password: str = "" self._ipv4_forward = False - self._last_network_update: float = 0.0 + self._last_network_scan: float = 0.0 self._callback_queue: list[Callable] = [] - self._fake_connected_ssid: str | None = None - self._fake_known_networks: dict[str, dict[str, Any]] = {} self._tethering_ssid = "weedle" if Params is not None: dongle_id = Params().get("DongleId") if dongle_id: self._tethering_ssid += "-" + dongle_id[:4] - if self._fake_networking: - self._init_fake_networking() # Callbacks self._need_auth: list[Callable[[str], None]] = [] self._activated: list[Callable[[], None]] = [] - self._forgotten: list[Callable[[], None]] = [] + self._forgotten: list[Callable[[str | None], None]] = [] self._networks_updated: list[Callable[[list[Network]], None]] = [] self._disconnected: list[Callable[[], None]] = [] - self._lock = threading.Lock() + self._scan_lock = threading.Lock() self._scan_thread = threading.Thread(target=self._network_scanner, daemon=True) self._state_thread = threading.Thread(target=self._monitor_state, daemon=True) self._initialize() @@ -239,80 +256,75 @@ class WifiManager: def _initialize(self): def worker(): - if self._fake_networking: - self._update_networks() - cloudlog.debug("WifiManager initialized in fake networking mode") + if self._backend_unavailable: + cloudlog.warning("WifiManager initialized without D-Bus backend") return + + if self._fake_networking: + self._tethering_password = DEFAULT_TETHERING_PASSWORD + self._enqueue_callbacks(self._networks_updated, self.networks) + cloudlog.debug("WifiManager initialized in desktop fake mode") + return + if self._nmcli_networking: + self._tethering_password = DEFAULT_TETHERING_PASSWORD self._update_networks() self._scan_thread.start() - cloudlog.debug("WifiManager initialized in nmcli networking mode") - return - if not self._dbus_available: - cloudlog.error("WifiManager unavailable: no active networking backend") + cloudlog.debug("WifiManager initialized in nmcli mode") return self._wait_for_wifi_device() + self._init_connections() + if Params is not None and self._tethering_ssid not in self._connections: + self._add_tethering_connection() + + self._init_wifi_state() + self._scan_thread.start() self._state_thread.start() - if Params is not None and self._tethering_ssid not in self._get_connections(): - self._add_tethering_connection() - self._tethering_password = self._get_tethering_password() cloudlog.debug("WifiManager initialized") threading.Thread(target=worker, daemon=True).start() - def _init_fake_networking(self): - primary_ssid = os.getenv("FAKE_WIFI_SSID", "Laptop Wi-Fi") - self._fake_known_networks = { - primary_ssid: {"security": SecurityType.WPA, "saved": True, "strength": 96}, - "Coffee Shop": {"security": SecurityType.OPEN, "saved": False, "strength": 68}, - "Phone Hotspot": {"security": SecurityType.WPA, "saved": False, "strength": 54}, - } - self._fake_connected_ssid = primary_ssid - self._tethering_password = DEFAULT_TETHERING_PASSWORD - self._current_network_metered = MeteredType.NO - self._ipv4_address = DESKTOP_FAKE_IP + def _init_wifi_state(self, block: bool = True): + def worker(): + if self._wifi_device is None: + cloudlog.warning("No WiFi device found") + return - def _update_networks_fake(self): - with self._lock: - networks: list[Network] = [] - for ssid, values in self._fake_known_networks.items(): - networks.append(Network( - ssid=ssid, - strength=int(values["strength"]), - is_connected=ssid == self._fake_connected_ssid, - security_type=values["security"], - is_saved=bool(values["saved"]), - )) + epoch = self._user_epoch - if self._fake_connected_ssid == self._tethering_ssid: - if self._tethering_ssid not in self._fake_known_networks: - networks.append(Network( - ssid=self._tethering_ssid, - strength=100, - is_connected=True, - security_type=SecurityType.WPA, - is_saved=True, - )) - self._ipv4_address = TETHERING_IP_ADDRESS - self._current_network_metered = MeteredType.UNKNOWN - elif self._fake_connected_ssid is None: - self._ipv4_address = "" - self._current_network_metered = MeteredType.UNKNOWN - else: - self._ipv4_address = DESKTOP_FAKE_IP + dev_addr = DBusAddress(self._wifi_device, bus_name=NM, interface=NM_DEVICE_IFACE) + dev_state = self._router_main.send_and_get_reply(Properties(dev_addr).get('State')).body[0][1] - networks.sort(key=lambda n: (-n.is_connected, -round(n.strength / 100 * 2), n.ssid.lower())) - self._networks = networks - self._enqueue_callbacks(self._networks_updated, self._networks) + ssid: str | None = None + status = ConnectStatus.DISCONNECTED + if NMDeviceState.PREPARE <= dev_state <= NMDeviceState.SECONDARIES and dev_state != NMDeviceState.NEED_AUTH: + status = ConnectStatus.CONNECTING + elif dev_state == NMDeviceState.ACTIVATED: + status = ConnectStatus.CONNECTED + + conn_path, _ = self._get_active_wifi_connection() + if conn_path: + ssid = next((s for s, p in self._connections.items() if p == conn_path), None) + + # Discard if user acted during DBus calls + if self._user_epoch != epoch: + return + + self._wifi_state = WifiState(ssid=ssid, status=status) + + if block: + worker() + else: + threading.Thread(target=worker, daemon=True).start() def add_callbacks(self, need_auth: Callable[[str], None] | None = None, activated: Callable[[], None] | None = None, - forgotten: Callable[[], None] | None = None, + forgotten: Callable[[str], None] | None = None, networks_updated: Callable[[list[Network]], None] | None = None, disconnected: Callable[[], None] | None = None): if need_auth is not None: @@ -326,6 +338,15 @@ class WifiManager: if disconnected is not None: self._disconnected.append(disconnected) + @property + def networks(self) -> list[Network]: + # Sort by connected/connecting, then known, then strength, then alphabetically. This is a pure UI ordering and should not affect underlying state. + return sorted(self._networks, key=lambda n: (n.ssid != self._wifi_state.ssid, not self.is_connection_saved(n.ssid), -n.strength, n.ssid.lower())) + + @property + def wifi_state(self) -> WifiState: + return self._wifi_state + @property def ipv4_address(self) -> str: return self._ipv4_address @@ -334,10 +355,25 @@ class WifiManager: def current_network_metered(self) -> MeteredType: return self._current_network_metered + @property + def connecting_to_ssid(self) -> str | None: + wifi_state = self._wifi_state + return wifi_state.ssid if wifi_state.status == ConnectStatus.CONNECTING else None + + @property + def connected_ssid(self) -> str | None: + wifi_state = self._wifi_state + return wifi_state.ssid if wifi_state.status == ConnectStatus.CONNECTED else None + @property def tethering_password(self) -> str: return self._tethering_password + def _set_connecting(self, ssid: str | None): + # Called by user action, or sequentially from state change handler + self._user_epoch += 1 + self._wifi_state = WifiState(ssid=ssid, status=ConnectStatus.DISCONNECTED if ssid is None else ConnectStatus.CONNECTING) + def _enqueue_callbacks(self, cbs: list[Callable], *args): for cb in cbs: self._callback_queue.append(lambda _cb=cb: _cb(*args)) @@ -350,68 +386,199 @@ class WifiManager: def set_active(self, active: bool): self._active = active - if self._fake_networking or self._nmcli_networking: - if active: - self._update_networks() + + if self._backend_unavailable: return - # Scan immediately if we haven't scanned in a while - if active and time.monotonic() - self._last_network_update > SCAN_PERIOD_SECONDS / 2: - self._last_network_update = 0.0 + if self._nmcli_networking: + if active: + self._update_networks(block=False) + return + + if self._fake_networking: + if active: + self._enqueue_callbacks(self._networks_updated, self.networks) + return + + # Update networks and WiFi state (to self-heal) immediately when activating for UI + if active: + self._init_wifi_state(block=False) + self._update_networks(block=False) def _monitor_state(self): - if not self._dbus_available: - return - - rule = MatchRule( - type="signal", - interface=NM_DEVICE_IFACE, - member="StateChanged", - path=self._wifi_device, + # Filter for signals + rules = ( + MatchRule( + type="signal", + interface=NM_DEVICE_IFACE, + member="StateChanged", + path=self._wifi_device, + ), + MatchRule( + type="signal", + interface=NM_SETTINGS_IFACE, + member="NewConnection", + path=NM_SETTINGS_PATH, + ), + MatchRule( + type="signal", + interface=NM_SETTINGS_IFACE, + member="ConnectionRemoved", + path=NM_SETTINGS_PATH, + ), + MatchRule( + type="signal", + interface=NM_PROPERTIES_IFACE, + member="PropertiesChanged", + path=self._wifi_device, + ), ) - # Filter for StateChanged signal - self._conn_monitor.send_and_get_reply(message_bus.AddMatch(rule)) + for rule in rules: + self._conn_monitor.send_and_get_reply(message_bus.AddMatch(rule)) - with self._conn_monitor.filter(rule, bufsize=SIGNAL_QUEUE_SIZE) as q: + with (self._conn_monitor.filter(rules[0], bufsize=SIGNAL_QUEUE_SIZE) as state_q, + self._conn_monitor.filter(rules[1], bufsize=SIGNAL_QUEUE_SIZE) as new_conn_q, + self._conn_monitor.filter(rules[2], bufsize=SIGNAL_QUEUE_SIZE) as removed_conn_q, + self._conn_monitor.filter(rules[3], bufsize=SIGNAL_QUEUE_SIZE) as props_q): while not self._exit: - if not self._active: - time.sleep(1) - continue - - # Block until a matching signal arrives try: - msg = self._conn_monitor.recv_until_filtered(q, timeout=1) + self._conn_monitor.recv_messages(timeout=1) except TimeoutError: continue - new_state, previous_state, change_reason = msg.body + # Connection added/removed + while len(removed_conn_q): + conn_path = removed_conn_q.popleft().body[0] + self._connection_removed(conn_path) + while len(new_conn_q): + conn_path = new_conn_q.popleft().body[0] + self._new_connection(conn_path) - # BAD PASSWORD - if new_state == NMDeviceState.NEED_AUTH and change_reason == NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT and len(self._connecting_to_ssid): - self.forget_connection(self._connecting_to_ssid, block=True) - self._enqueue_callbacks(self._need_auth, self._connecting_to_ssid) - self._connecting_to_ssid = "" - - elif new_state == NMDeviceState.ACTIVATED: - if len(self._activated): + # PropertiesChanged on wifi device (LastScan = scan complete) + while len(props_q): + iface, changed, _ = props_q.popleft().body + if iface == NM_WIRELESS_IFACE and 'LastScan' in changed: self._update_networks() - self._enqueue_callbacks(self._activated) - self._connecting_to_ssid = "" - elif new_state == NMDeviceState.DISCONNECTED and change_reason != NM_DEVICE_STATE_REASON_NEW_ACTIVATION: - self._connecting_to_ssid = "" - self._enqueue_callbacks(self._forgotten) + # Device state changes + while len(state_q): + new_state, previous_state, change_reason = state_q.popleft().body + + self._handle_state_change(new_state, previous_state, change_reason) + + def _handle_state_change(self, new_state: int, prev_state: int, change_reason: int): + # Thread safety: _wifi_state is read/written by both the monitor thread (this handler) + # and the main thread (_set_connecting via connect/activate). PREPARE/CONFIG and ACTIVATED + # have a read-then-write pattern with a slow DBus call in between — if _set_connecting + # runs mid-call, the handler would overwrite the user's newer state with stale data. + # + # The _user_epoch counter solves this without locks. _set_connecting increments the epoch + # on every user action. Handlers snapshot the epoch before their DBus call and compare + # after: if it changed, a user action occurred during the call and the stale result is + # discarded. Combined with deterministic fixes (skip DBus lookup when ssid already set, + # DEACTIVATING clears CONNECTED on CONNECTION_REMOVED, CONNECTION_REMOVED guard), + # all known race windows are closed. + + # TODO: Handle (FAILED, SSID_NOT_FOUND) and emit for UI to show error + # Happens when network drops off after starting connection + + if new_state == NMDeviceState.DISCONNECTED: + if change_reason == NMDeviceStateReason.NEW_ACTIVATION: + return + + # Guard: forget A while connecting to B fires CONNECTION_REMOVED. Don't clear B's state + # if B is still a known connection. If B hasn't arrived in _connections yet (late + # NewConnection), state clears here but PREPARE recovers via DBus lookup. + if (change_reason == NMDeviceStateReason.CONNECTION_REMOVED and self._wifi_state.ssid and + self._wifi_state.ssid in self._connections): + return + + self._set_connecting(None) + + elif new_state in (NMDeviceState.PREPARE, NMDeviceState.CONFIG): + epoch = self._user_epoch + + if self._wifi_state.ssid is not None: + self._wifi_state = replace(self._wifi_state, status=ConnectStatus.CONNECTING) + return + + # Auto-connection when NetworkManager connects to known networks on its own (ssid=None): look up ssid from NM + wifi_state = replace(self._wifi_state, status=ConnectStatus.CONNECTING) + + conn_path, _ = self._get_active_wifi_connection(self._conn_monitor) + + # Discard if user acted during DBus call + if self._user_epoch != epoch: + return + + if conn_path is None: + cloudlog.warning("Failed to get active wifi connection during PREPARE/CONFIG state") + else: + wifi_state = replace(wifi_state, ssid=next((s for s, p in self._connections.items() if p == conn_path), None)) + + self._wifi_state = wifi_state + + # BAD PASSWORD + # - strong network rejects with NEED_AUTH+SUPPLICANT_DISCONNECT + # - weak/gone network fails with FAILED+NO_SECRETS + # TODO: sometimes on PC it's observed no future signals are fired if mouse is held down blocking wrong password dialog + elif ((new_state == NMDeviceState.NEED_AUTH and change_reason == NMDeviceStateReason.SUPPLICANT_DISCONNECT + and prev_state == NMDeviceState.CONFIG) or + (new_state == NMDeviceState.FAILED and change_reason == NMDeviceStateReason.NO_SECRETS)): + + # prev_state guard: real auth failures come from CONFIG (supplicant handshake). + # Stale NEED_AUTH from a prior connection during network switching arrives with + # prev_state=DISCONNECTED and must be ignored to avoid a false wrong-password callback. + if self._wifi_state.ssid: + self._enqueue_callbacks(self._need_auth, self._wifi_state.ssid) + self._set_connecting(None) + + elif new_state in (NMDeviceState.NEED_AUTH, NMDeviceState.IP_CONFIG, NMDeviceState.IP_CHECK, + NMDeviceState.SECONDARIES, NMDeviceState.FAILED): + pass + + elif new_state == NMDeviceState.ACTIVATED: + # Note that IP address from Ip4Config may not be propagated immediately and could take until the next scan results + epoch = self._user_epoch + wifi_state = replace(self._wifi_state, status=ConnectStatus.CONNECTED) + + conn_path, _ = self._get_active_wifi_connection(self._conn_monitor) + + # Discard if user acted during DBus call + if self._user_epoch != epoch: + return + + if conn_path is None: + cloudlog.warning("Failed to get active wifi connection during ACTIVATED state") + else: + wifi_state = replace(wifi_state, ssid=next((s for s, p in self._connections.items() if p == conn_path), None)) + + self._wifi_state = wifi_state + self._enqueue_callbacks(self._activated) + self._update_active_connection_info() + + # Persist volatile connections (created by AddAndActivateConnection2) to disk + if conn_path is not None: + conn_addr = DBusAddress(conn_path, bus_name=NM, interface=NM_CONNECTION_IFACE) + save_reply = self._conn_monitor.send_and_get_reply(new_method_call(conn_addr, 'Save')) + if save_reply.header.message_type == MessageType.error: + cloudlog.warning(f"Failed to persist connection to disk: {save_reply}") + + elif new_state == NMDeviceState.DEACTIVATING: + # Must clear state when forgetting the currently connected network so the UI + # doesn't flash "connected" after the eager "forgetting..." state resets + # (the forgotten callback fires between DEACTIVATING and DISCONNECTED). + # Only clear CONNECTED — CONNECTING must be preserved for forget-A-connect-B. + if change_reason == NMDeviceStateReason.CONNECTION_REMOVED and self._wifi_state.status == ConnectStatus.CONNECTED: + self._set_connecting(None) def _network_scanner(self): while not self._exit: if self._active: - if time.monotonic() - self._last_network_update > SCAN_PERIOD_SECONDS: - # Scan for networks every 10 seconds - # TODO: should update when scan is complete (PropertiesChanged), but this is more than good enough for now - self._update_networks() + if time.monotonic() - self._last_network_scan > SCAN_PERIOD_SECONDS: self._request_scan() - self._last_network_update = time.monotonic() + self._last_network_scan = time.monotonic() time.sleep(1 / 2.) def _wait_for_wifi_device(self): @@ -435,7 +602,7 @@ class WifiManager: cloudlog.exception(f"Error getting adapter type {adapter_type}: {e}") return None - def _get_connections(self) -> dict[str, str]: + def _init_connections(self) -> None: settings_addr = DBusAddress(NM_SETTINGS_PATH, bus_name=NM, interface=NM_SETTINGS_IFACE) known_connections = self._router_main.send_and_get_reply(new_method_call(settings_addr, 'ListConnections')).body[0] @@ -449,13 +616,48 @@ class WifiManager: if "802-11-wireless" in settings: ssid = settings['802-11-wireless']['ssid'][1].decode("utf-8", "replace") - ssid_key = _canonicalize_ssid(ssid) - if ssid_key != "": - conns[ssid_key] = conn_path - return conns + if ssid != "": + conns[ssid] = conn_path + self._connections = conns - def _get_active_connections(self): - return self._router_main.send_and_get_reply(Properties(self._nm).get('ActiveConnections')).body[0][1] + def _new_connection(self, conn_path: str): + settings = self._get_connection_settings(conn_path) + + if "802-11-wireless" in settings: + ssid = settings['802-11-wireless']['ssid'][1].decode("utf-8", "replace") + if ssid != "": + self._connections[ssid] = conn_path + + def _connection_removed(self, conn_path: str): + self._connections = {ssid: path for ssid, path in self._connections.items() if path != conn_path} + + def _get_active_connections(self, router: DBusConnection | DBusRouter | None = None): + # Returns list of ActiveConnection + if router is None: + router = self._router_main + + return router.send_and_get_reply(Properties(self._nm).get('ActiveConnections')).body[0][1] + + def _get_active_wifi_connection(self, router: DBusConnection | DBusRouter | None = None) -> tuple[str | None, dict | None]: + # Returns first Connection settings path and ActiveConnection props from ActiveConnections with Type 802-11-wireless + if router is None: + router = self._router_main + + for active_conn in self._get_active_connections(router): + conn_addr = DBusAddress(active_conn, bus_name=NM, interface=NM_ACTIVE_CONNECTION_IFACE) + reply = router.send_and_get_reply(Properties(conn_addr).get_all()) + + if reply.header.message_type == MessageType.error: + cloudlog.warning(f"Failed to get active connection properties for {active_conn}: {reply}") + continue + + props = reply.body[0] + + conn_path = props.get('Connection', ('o', '/'))[1] + if props.get('Type', ('s', ''))[1] == '802-11-wireless' and conn_path != '/': + return conn_path, props + + return None, None def _get_connection_settings(self, conn_path: str) -> dict: conn_addr = DBusAddress(conn_path, bus_name=NM, interface=NM_CONNECTION_IFACE) @@ -503,36 +705,26 @@ class WifiManager: self._router_main.send_and_get_reply(new_method_call(settings_addr, 'AddConnection', 'a{sa{sv}}', (connection,))) def connect_to_network(self, ssid: str, password: str, hidden: bool = False): - if not (self._dbus_available or self._fake_networking or self._nmcli_networking): - cloudlog.warning("connect_to_network called with no available networking backend") + if self._backend_unavailable: + cloudlog.warning(f"Ignoring connect_to_network({ssid!r}); Wi-Fi backend unavailable") return - if self._fake_networking: - def worker(): - self._connecting_to_ssid = ssid - security = SecurityType.WPA if password else SecurityType.OPEN - if ssid not in self._fake_known_networks: - self._fake_known_networks[ssid] = {"security": security, "saved": True, "strength": 82} - else: - self._fake_known_networks[ssid]["saved"] = True - self._fake_known_networks[ssid]["security"] = security - self._fake_connected_ssid = ssid - self._connecting_to_ssid = "" - self._update_networks() - self._enqueue_callbacks(self._activated) - threading.Thread(target=worker, daemon=True).start() - return if self._nmcli_networking: + self._set_connecting(ssid) + def worker(): - self._connecting_to_ssid = ssid cmd = ["nmcli", "device", "wifi", "connect", ssid] if password: cmd += ["password", password] if hidden: cmd += ["hidden", "yes"] + result = subprocess.run(cmd, check=False, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - self._connecting_to_ssid = "" + if result.returncode != 0: + self._set_connecting(None) + self._update_networks() + if result.returncode == 0: self._enqueue_callbacks(self._activated) else: @@ -541,9 +733,22 @@ class WifiManager: threading.Thread(target=worker, daemon=True).start() return + if self._fake_networking: + self._set_connecting(ssid) + if not self.is_connection_saved(ssid): + self._connections[ssid] = ssid + if not any(network.ssid == ssid for network in self._networks): + self._networks.append(Network(ssid=ssid, strength=100, security_type=SecurityType.WPA if password else SecurityType.OPEN, is_tethering=False)) + self._wifi_state = WifiState(ssid=ssid, status=ConnectStatus.CONNECTED) + self._ipv4_address = DESKTOP_FAKE_IP + self._enqueue_callbacks(self._activated) + self._enqueue_callbacks(self._networks_updated, self.networks) + return + + self._set_connecting(ssid) + def worker(): # Clear all connections that may already exist to the network we are connecting to - self._connecting_to_ssid = ssid self.forget_connection(ssid, block=True) connection = { @@ -572,33 +777,29 @@ class WifiManager: 'psk': ('s', password), } - settings_addr = DBusAddress(NM_SETTINGS_PATH, bus_name=NM, interface=NM_SETTINGS_IFACE) - self._router_main.send_and_get_reply(new_method_call(settings_addr, 'AddConnection', 'a{sa{sv}}', (connection,))) - self.activate_connection(ssid, block=True) + # Volatile connection auto-deletes on disconnect (wrong password, user switches networks) + # Persisted to disk on ACTIVATED via Save() + if self._wifi_device is None: + cloudlog.warning("No WiFi device found") + # TODO: expose a failed connection state in the UI + self._init_wifi_state() + return + + reply = self._router_main.send_and_get_reply(new_method_call(self._nm, 'AddAndActivateConnection2', 'a{sa{sv}}ooa{sv}', + (connection, self._wifi_device, "/", {'persist': ('s', 'volatile')}))) + + if reply.header.message_type == MessageType.error: + cloudlog.warning(f"Failed to add and activate connection for {ssid}: {reply}") + # TODO: expose a failed connection state in the UI + self._init_wifi_state() threading.Thread(target=worker, daemon=True).start() def forget_connection(self, ssid: str, block: bool = False): - if not (self._dbus_available or self._fake_networking or self._nmcli_networking): - cloudlog.warning("forget_connection called with no available networking backend") + if self._backend_unavailable: + cloudlog.warning(f"Ignoring forget_connection({ssid!r}); Wi-Fi backend unavailable") return - if self._fake_networking: - def worker(): - self._fake_known_networks.pop(ssid, None) - was_connected = self._fake_connected_ssid == ssid - if was_connected: - replacement = next((s for s in self._fake_known_networks.keys() if s != self._tethering_ssid), None) - self._fake_connected_ssid = replacement - self._update_networks() - self._enqueue_callbacks(self._forgotten) - if was_connected and self._fake_connected_ssid is None: - self._enqueue_callbacks(self._disconnected) - if block: - worker() - else: - threading.Thread(target=worker, daemon=True).start() - return if self._nmcli_networking: def worker(): try: @@ -618,8 +819,11 @@ class WifiManager: stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) except Exception as e: cloudlog.warning(f"nmcli forget failed for {ssid}: {e}") + + if self._wifi_state.ssid == ssid: + self._set_connecting(None) self._update_networks() - self._enqueue_callbacks(self._forgotten) + self._enqueue_callbacks(self._forgotten, ssid) if block: worker() @@ -627,15 +831,24 @@ class WifiManager: threading.Thread(target=worker, daemon=True).start() return + if self._fake_networking: + self._connections.pop(ssid, None) + if self._wifi_state.ssid == ssid: + self._wifi_state = WifiState() + self._ipv4_address = "" + self._enqueue_callbacks(self._forgotten, ssid) + self._enqueue_callbacks(self._networks_updated, self.networks) + return + def worker(): - conn_path = self._get_connections().get(_canonicalize_ssid(ssid), None) - if conn_path is not None: + conn_path = self._connections.get(ssid, None) + if conn_path is None: + cloudlog.warning(f"Trying to forget unknown connection: {ssid}") + else: conn_addr = DBusAddress(conn_path, bus_name=NM, interface=NM_CONNECTION_IFACE) self._router_main.send_and_get_reply(new_method_call(conn_addr, 'Delete')) - if len(self._forgotten): - self._update_networks() - self._enqueue_callbacks(self._forgotten) + self._enqueue_callbacks(self._forgotten, ssid) if block: worker() @@ -643,34 +856,20 @@ class WifiManager: threading.Thread(target=worker, daemon=True).start() def activate_connection(self, ssid: str, block: bool = False): - if not (self._dbus_available or self._fake_networking or self._nmcli_networking): - cloudlog.warning("activate_connection called with no available networking backend") + if self._backend_unavailable: + cloudlog.warning(f"Ignoring activate_connection({ssid!r}); Wi-Fi backend unavailable") return - if self._fake_networking: - def worker(): - if ssid not in self._fake_known_networks and ssid != self._tethering_ssid: - return - self._connecting_to_ssid = ssid - if ssid == self._tethering_ssid and ssid not in self._fake_known_networks: - self._fake_known_networks[ssid] = {"security": SecurityType.WPA, "saved": True, "strength": 100} - else: - self._fake_known_networks[ssid]["saved"] = True - self._fake_connected_ssid = ssid - self._connecting_to_ssid = "" - self._update_networks() - self._enqueue_callbacks(self._activated) - if block: - worker() - else: - threading.Thread(target=worker, daemon=True).start() - return if self._nmcli_networking: + self._set_connecting(ssid) + def worker(): - self._connecting_to_ssid = ssid - result = subprocess.run(["nmcli", "connection", "up", "id", ssid], check=False, + conn_id = self._connections.get(ssid, ssid) + result = subprocess.run(["nmcli", "connection", "up", "id", conn_id], check=False, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - self._connecting_to_ssid = "" + if result.returncode != 0: + self._set_connecting(None) + self._update_networks() if result.returncode == 0: self._enqueue_callbacks(self._activated) @@ -681,16 +880,33 @@ class WifiManager: threading.Thread(target=worker, daemon=True).start() return - def worker(): - conn_path = self._get_connections().get(_canonicalize_ssid(ssid), None) - if conn_path is not None: - if self._wifi_device is None: - cloudlog.warning("No WiFi device found") - return + if self._fake_networking: + self._set_connecting(ssid) + if not self.is_connection_saved(ssid): + self._connections[ssid] = ssid + self._wifi_state = WifiState(ssid=ssid, status=ConnectStatus.CONNECTED) + self._ipv4_address = DESKTOP_FAKE_IP if ssid != self._tethering_ssid else TETHERING_IP_ADDRESS + self._enqueue_callbacks(self._activated) + self._enqueue_callbacks(self._networks_updated, self.networks) + return - self._connecting_to_ssid = ssid - self._router_main.send(new_method_call(self._nm, 'ActivateConnection', 'ooo', - (conn_path, self._wifi_device, "/"))) + self._set_connecting(ssid) + + def worker(): + conn_path = self._connections.get(ssid, None) + if conn_path is None or self._wifi_device is None: + cloudlog.warning(f"Failed to activate connection for {ssid}: conn_path={conn_path}, wifi_device={self._wifi_device}") + # TODO: expose a failed connection state in the UI + self._init_wifi_state() + return + + reply = self._router_main.send_and_get_reply(new_method_call(self._nm, 'ActivateConnection', 'ooo', + (conn_path, self._wifi_device, "/"))) + + if reply.header.message_type == MessageType.error: + cloudlog.warning(f"Failed to activate connection for {ssid}: {reply}") + # TODO: expose a failed connection state in the UI + self._init_wifi_state() if block: worker() @@ -698,122 +914,65 @@ class WifiManager: threading.Thread(target=worker, daemon=True).start() def _deactivate_connection(self, ssid: str): - if self._fake_networking: - if self._fake_connected_ssid == ssid: - self._fake_connected_ssid = None - self._update_networks() - self._enqueue_callbacks(self._disconnected) - return if self._nmcli_networking: - subprocess.run(["nmcli", "connection", "down", "id", ssid], check=False, + conn_id = self._connections.get(ssid, ssid) + subprocess.run(["nmcli", "connection", "down", "id", conn_id], check=False, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + self._set_connecting(None) self._update_networks() self._enqueue_callbacks(self._disconnected) return - for conn_path in self._get_active_connections(): - conn_addr = DBusAddress(conn_path, bus_name=NM, interface=NM_ACTIVE_CONNECTION_IFACE) - specific_obj_path = self._router_main.send_and_get_reply(Properties(conn_addr).get('SpecificObject')).body[0][1] + if self._fake_networking: + if self._wifi_state.ssid == ssid: + self._wifi_state = WifiState() + self._ipv4_address = "" + self._enqueue_callbacks(self._disconnected) + self._enqueue_callbacks(self._networks_updated, self.networks) + return + + for active_conn in self._get_active_connections(): + conn_addr = DBusAddress(active_conn, bus_name=NM, interface=NM_ACTIVE_CONNECTION_IFACE) + reply = self._router_main.send_and_get_reply(Properties(conn_addr).get('SpecificObject')) + if reply.header.message_type == MessageType.error: + continue # object gone (e.g. rapid connect/disconnect) + + specific_obj_path = reply.body[0][1] if specific_obj_path != "/": ap_addr = DBusAddress(specific_obj_path, bus_name=NM, interface=NM_ACCESS_POINT_IFACE) - ap_ssid = bytes(self._router_main.send_and_get_reply(Properties(ap_addr).get('Ssid')).body[0][1]).decode("utf-8", "replace") + ap_reply = self._router_main.send_and_get_reply(Properties(ap_addr).get('Ssid')) + if ap_reply.header.message_type == MessageType.error: + continue # AP gone (e.g. mode switch) - if _canonicalize_ssid(ap_ssid) == _canonicalize_ssid(ssid): - self._router_main.send_and_get_reply(new_method_call(self._nm, 'DeactivateConnection', 'o', (conn_path,))) + ap_ssid = bytes(ap_reply.body[0][1]).decode("utf-8", "replace") + + if ap_ssid == ssid: + self._router_main.send_and_get_reply(new_method_call(self._nm, 'DeactivateConnection', 'o', (active_conn,))) return def is_tethering_active(self) -> bool: - if self._fake_networking: - for network in self._networks: - if network.is_connected: - return bool(network.ssid == self._tethering_ssid) - return False + # Check ssid, not connected_ssid, to also catch connecting state + return self._wifi_state.ssid == self._tethering_ssid - if self._nmcli_networking: - try: - active = subprocess.run( - ["nmcli", "-t", "-f", "NAME,TYPE,802-11-wireless.ssid", "connection", "show", "--active"], - check=False, capture_output=True, text=True, - ) - for line in active.stdout.splitlines(): - parts = self._parse_nmcli_line(line) - if len(parts) < 3 or parts[1] != "802-11-wireless": - continue - if _canonicalize_ssid(parts[2]) == _canonicalize_ssid(self._tethering_ssid): - return True - except Exception as e: - cloudlog.warning(f"nmcli tethering state lookup failed: {e}") - return False - - if not self._dbus_available: - return False - - def decode_ssid(value: Any) -> str: - if isinstance(value, bytes): - return value.decode("utf-8", "replace") - if isinstance(value, str): - return value - if isinstance(value, list): - try: - return bytes(value).decode("utf-8", "replace") - except Exception: - return str(value) - return str(value) - - try: - for conn_path in self._get_active_connections(): - conn_addr = DBusAddress(conn_path, bus_name=NM, interface=NM_ACTIVE_CONNECTION_IFACE) - conn_type = self._router_main.send_and_get_reply(Properties(conn_addr).get('Type')).body[0][1] - if conn_type != '802-11-wireless': - continue - - settings_conn_path = self._router_main.send_and_get_reply(Properties(conn_addr).get('Connection')).body[0][1] - if settings_conn_path != "/": - settings = self._get_connection_settings(settings_conn_path) - ssid_value = settings.get('802-11-wireless', {}).get('ssid') - if isinstance(ssid_value, tuple) and len(ssid_value) > 1: - ssid = decode_ssid(ssid_value[1]) - if _canonicalize_ssid(ssid) == _canonicalize_ssid(self._tethering_ssid): - return True - - specific_obj_path = self._router_main.send_and_get_reply(Properties(conn_addr).get('SpecificObject')).body[0][1] - if specific_obj_path != "/": - ap_addr = DBusAddress(specific_obj_path, bus_name=NM, interface=NM_ACCESS_POINT_IFACE) - ap_ssid = decode_ssid(self._router_main.send_and_get_reply(Properties(ap_addr).get('Ssid')).body[0][1]) - if _canonicalize_ssid(ap_ssid) == _canonicalize_ssid(self._tethering_ssid): - return True - except Exception as e: - cloudlog.warning(f"DBus tethering state lookup failed: {e}") - - for network in self._networks: - if network.is_connected: - return bool(network.ssid == self._tethering_ssid) - return False - - def disconnect_network(self, ssid: str, block: bool = False): - if not (self._dbus_available or self._fake_networking or self._nmcli_networking): - cloudlog.warning("disconnect_network called with no available networking backend") - return - - def worker(): - self._deactivate_connection(ssid) - - if block: - worker() - else: - threading.Thread(target=worker, daemon=True).start() + def is_connection_saved(self, ssid: str) -> bool: + return ssid in self._connections def set_tethering_password(self, password: str): - if self._fake_networking: - self._tethering_password = password + if self._backend_unavailable: + cloudlog.warning("Ignoring set_tethering_password(); Wi-Fi backend unavailable") return + if self._nmcli_networking: self._tethering_password = password return + if self._fake_networking: + self._tethering_password = password + return + def worker(): - conn_path = self._get_connections().get(self._tethering_ssid, None) + conn_path = self._connections.get(self._tethering_ssid, None) if conn_path is None: cloudlog.warning('No tethering connection found') return @@ -838,12 +997,13 @@ class WifiManager: threading.Thread(target=worker, daemon=True).start() def _get_tethering_password(self) -> str: - if self._fake_networking: - return self._tethering_password + if self._backend_unavailable: + return "" + if self._nmcli_networking: return self._tethering_password or DEFAULT_TETHERING_PASSWORD - conn_path = self._get_connections().get(self._tethering_ssid, None) + conn_path = self._connections.get(self._tethering_ssid, None) if conn_path is None: cloudlog.warning('No tethering connection found') return '' @@ -867,24 +1027,27 @@ class WifiManager: self._ipv4_forward = enabled def set_tethering_active(self, active: bool): - if self._fake_networking: - def worker(): - if active: - if self._tethering_ssid not in self._fake_known_networks: - self._fake_known_networks[self._tethering_ssid] = {"security": SecurityType.WPA, "saved": True, "strength": 100} - self._fake_connected_ssid = self._tethering_ssid - else: - if self._fake_connected_ssid == self._tethering_ssid: - replacement = next((s for s in self._fake_known_networks.keys() if s != self._tethering_ssid), None) - self._fake_connected_ssid = replacement - self._update_networks() - - threading.Thread(target=worker, daemon=True).start() + if self._backend_unavailable: + cloudlog.warning(f"Ignoring set_tethering_active({active}); Wi-Fi backend unavailable") return + if self._nmcli_networking: cloudlog.warning("Tethering control is not supported via nmcli fallback backend") return + if self._fake_networking: + if active: + if self._tethering_ssid not in self._connections: + self._connections[self._tethering_ssid] = self._tethering_ssid + if not any(network.ssid == self._tethering_ssid for network in self._networks): + self._networks.append(Network(ssid=self._tethering_ssid, strength=100, security_type=SecurityType.WPA, is_tethering=True)) + self._wifi_state = WifiState(ssid=self._tethering_ssid, status=ConnectStatus.CONNECTED) + self._ipv4_address = TETHERING_IP_ADDRESS + else: + self._deactivate_connection(self._tethering_ssid) + self._enqueue_callbacks(self._networks_updated, self.networks) + return + def worker(): if active: self.activate_connection(self._tethering_ssid, block=True) @@ -898,81 +1061,49 @@ class WifiManager: threading.Thread(target=worker, daemon=True).start() - def _update_current_network_metered(self) -> None: - if self._nmcli_networking: - self._current_network_metered = MeteredType.UNKNOWN - return - - if self._wifi_device is None: - cloudlog.warning("No WiFi device found") - return - - self._current_network_metered = MeteredType.UNKNOWN - for active_conn in self._get_active_connections(): - conn_addr = DBusAddress(active_conn, bus_name=NM, interface=NM_ACTIVE_CONNECTION_IFACE) - conn_type = self._router_main.send_and_get_reply(Properties(conn_addr).get('Type')).body[0][1] - - if conn_type == '802-11-wireless': - conn_path = self._router_main.send_and_get_reply(Properties(conn_addr).get('Connection')).body[0][1] - if conn_path == "/": - continue - - settings = self._get_connection_settings(conn_path) - - if len(settings) == 0: - cloudlog.warning(f'Failed to get connection settings for {conn_path}') - continue - - metered_prop = settings['connection'].get('metered', ('i', 0))[1] - if metered_prop == MeteredType.YES: - self._current_network_metered = MeteredType.YES - elif metered_prop == MeteredType.NO: - self._current_network_metered = MeteredType.NO - return - def set_current_network_metered(self, metered: MeteredType): + if self._backend_unavailable: + cloudlog.warning(f"Ignoring set_current_network_metered({metered}); Wi-Fi backend unavailable") + return + + if self._nmcli_networking: + self._current_network_metered = metered + self._enqueue_callbacks(self._networks_updated, self.networks) + return + if self._fake_networking: self._current_network_metered = metered - self._enqueue_callbacks(self._networks_updated, self._networks) + self._enqueue_callbacks(self._networks_updated, self.networks) return - if self._nmcli_networking: - self._current_network_metered = metered - self._enqueue_callbacks(self._networks_updated, self._networks) - return - - # Keep UI state responsive while the DBus update completes. - self._current_network_metered = metered - self._enqueue_callbacks(self._networks_updated, self._networks) def worker(): - for active_conn in self._get_active_connections(): - conn_addr = DBusAddress(active_conn, bus_name=NM, interface=NM_ACTIVE_CONNECTION_IFACE) - conn_type = self._router_main.send_and_get_reply(Properties(conn_addr).get('Type')).body[0][1] + if self.is_tethering_active(): + return - if conn_type == '802-11-wireless' and not self.is_tethering_active(): - conn_path = self._router_main.send_and_get_reply(Properties(conn_addr).get('Connection')).body[0][1] - if conn_path == "/": - continue + conn_path, _ = self._get_active_wifi_connection() + if conn_path is None: + cloudlog.warning('No active WiFi connection found') + return - settings = self._get_connection_settings(conn_path) + settings = self._get_connection_settings(conn_path) - if len(settings) == 0: - cloudlog.warning(f'Failed to get connection settings for {conn_path}') - return + if len(settings) == 0: + cloudlog.warning(f'Failed to get connection settings for {conn_path}') + return - settings['connection']['metered'] = ('i', int(metered)) + settings['connection']['metered'] = ('i', int(metered)) - conn_addr = DBusAddress(conn_path, bus_name=NM, interface=NM_CONNECTION_IFACE) - reply = self._router_main.send_and_get_reply(new_method_call(conn_addr, 'Update', 'a{sa{sv}}', (settings,))) - if reply.header.message_type == MessageType.error: - cloudlog.warning(f'Failed to update tethering settings: {reply}') - return + conn_addr = DBusAddress(conn_path, bus_name=NM, interface=NM_CONNECTION_IFACE) + reply = self._router_main.send_and_get_reply(new_method_call(conn_addr, 'Update', 'a{sa{sv}}', (settings,))) + if reply.header.message_type == MessageType.error: + cloudlog.warning(f'Failed to update metered settings: {reply}') threading.Thread(target=worker, daemon=True).start() def _request_scan(self): if self._nmcli_networking: - subprocess.run(["nmcli", "device", "wifi", "rescan"], check=False, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + subprocess.run(["nmcli", "device", "wifi", "rescan"], check=False, + stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) return if self._wifi_device is None: @@ -985,116 +1116,114 @@ class WifiManager: if reply.header.message_type == MessageType.error: cloudlog.warning(f"Failed to request scan: {reply}") - def _update_networks(self): - if self._fake_networking: - self._update_networks_fake() - return - if self._nmcli_networking: - self._update_networks_nmcli() + def _update_networks(self, block: bool = True): + if not self._active: return - with self._lock: - if self._wifi_device is None: - cloudlog.warning("No WiFi device found") - return + def worker(): + with self._scan_lock: + if self._nmcli_networking: + self._update_networks_nmcli_locked() + return - # returns '/' if no active AP - wifi_addr = DBusAddress(self._wifi_device, NM, interface=NM_WIRELESS_IFACE) - active_ap_path = self._router_main.send_and_get_reply(Properties(wifi_addr).get('ActiveAccessPoint')).body[0][1] - ap_paths = self._router_main.send_and_get_reply(new_method_call(wifi_addr, 'GetAllAccessPoints')).body[0] + if self._wifi_device is None: + cloudlog.warning("No WiFi device found") + return - aps: dict[str, list[AccessPoint]] = {} + # NOTE: AccessPoints property may exclude hidden APs (use GetAllAccessPoints method if needed) + wifi_addr = DBusAddress(self._wifi_device, NM, interface=NM_WIRELESS_IFACE) + wifi_props_reply = self._router_main.send_and_get_reply(Properties(wifi_addr).get_all()) + if wifi_props_reply.header.message_type == MessageType.error: + cloudlog.warning(f"Failed to get WiFi properties: {wifi_props_reply}") + return - for ap_path in ap_paths: - ap_addr = DBusAddress(ap_path, NM, interface=NM_ACCESS_POINT_IFACE) - ap_props = self._router_main.send_and_get_reply(Properties(ap_addr).get_all()) + ap_paths = wifi_props_reply.body[0].get('AccessPoints', ('ao', []))[1] - # some APs have been seen dropping off during iteration - if ap_props.header.message_type == MessageType.error: - cloudlog.warning(f"Failed to get AP properties for {ap_path}") - continue + aps: dict[str, list[AccessPoint]] = {} - try: - ap = AccessPoint.from_dbus(ap_props.body[0], ap_path, active_ap_path) - if ap.ssid == "": + for ap_path in ap_paths: + ap_addr = DBusAddress(ap_path, NM, interface=NM_ACCESS_POINT_IFACE) + ap_props = self._router_main.send_and_get_reply(Properties(ap_addr).get_all()) + + # some APs have been seen dropping off during iteration + if ap_props.header.message_type == MessageType.error: + cloudlog.warning(f"Failed to get AP properties for {ap_path}") continue - if ap.ssid not in aps: - aps[ap.ssid] = [] + try: + ap = AccessPoint.from_dbus(ap_props.body[0], ap_path) + if ap.ssid == "": + continue - aps[ap.ssid].append(ap) - except Exception: - # catch all for parsing errors - cloudlog.exception(f"Failed to parse AP properties for {ap_path}") + if ap.ssid not in aps: + aps[ap.ssid] = [] - known_connections = self._get_connections() - networks = [Network.from_dbus(ssid, ap_list, _canonicalize_ssid(ssid) in known_connections) for ssid, ap_list in aps.items()] - # sort with quantized strength to reduce jumping - networks.sort(key=lambda n: (-n.is_connected, -round(n.strength / 100 * 2), n.ssid.lower())) - self._networks = networks + aps[ap.ssid].append(ap) + except Exception: + # catch all for parsing errors + cloudlog.exception(f"Failed to parse AP properties for {ap_path}") - self._update_ipv4_address() - self._update_current_network_metered() + self._networks = [Network.from_dbus(ssid, ap_list, ssid == self._tethering_ssid) for ssid, ap_list in aps.items()] + self._update_active_connection_info() + self._enqueue_callbacks(self._networks_updated, self.networks) # sorted - self._enqueue_callbacks(self._networks_updated, self._networks) + if block: + worker() + else: + threading.Thread(target=worker, daemon=True).start() - def _update_ipv4_address(self): + def _update_active_connection_info(self): if self._nmcli_networking: - self._ipv4_address = "" - try: - status = subprocess.run( - ["nmcli", "-t", "-f", "DEVICE,TYPE,STATE", "device", "status"], - check=False, capture_output=True, text=True, - ) - wifi_dev = None - for line in status.stdout.splitlines(): - parts = line.split(":") - if len(parts) >= 3 and parts[1] == "wifi" and parts[2].startswith("connected"): - wifi_dev = parts[0] + self._current_network_metered = MeteredType.UNKNOWN + return + + ipv4_address = "" + metered = MeteredType.UNKNOWN + + conn_path, props = self._get_active_wifi_connection() + + if conn_path is not None and props is not None: + # IPv4 address + ip4config_path = props.get('Ip4Config', ('o', '/'))[1] + + if ip4config_path != "/": + ip4config_addr = DBusAddress(ip4config_path, bus_name=NM, interface=NM_IP4_CONFIG_IFACE) + address_data = self._router_main.send_and_get_reply(Properties(ip4config_addr).get('AddressData')).body[0][1] + + for entry in address_data: + if 'address' in entry: + ipv4_address = entry['address'][1] break - if wifi_dev: - addr = subprocess.run( - ["nmcli", "-t", "-f", "IP4.ADDRESS", "device", "show", wifi_dev], - check=False, capture_output=True, text=True, - ) - for row in addr.stdout.splitlines(): - if row: - self._ipv4_address = row.split(":", 1)[-1].split("/", 1)[0] - break - except Exception as e: - cloudlog.warning(f"nmcli ipv4 lookup failed: {e}") - return - if self._wifi_device is None: - cloudlog.warning("No WiFi device found") - return + # Metered status + settings = self._get_connection_settings(conn_path) - self._ipv4_address = "" + if len(settings) > 0: + metered_prop = settings['connection'].get('metered', ('i', 0))[1] - for conn_path in self._get_active_connections(): - conn_addr = DBusAddress(conn_path, bus_name=NM, interface=NM_ACTIVE_CONNECTION_IFACE) - conn_type = self._router_main.send_and_get_reply(Properties(conn_addr).get('Type')).body[0][1] - if conn_type == '802-11-wireless': - ip4config_path = self._router_main.send_and_get_reply(Properties(conn_addr).get('Ip4Config')).body[0][1] + if metered_prop == MeteredType.YES: + metered = MeteredType.YES + elif metered_prop == MeteredType.NO: + metered = MeteredType.NO - if ip4config_path != "/": - ip4config_addr = DBusAddress(ip4config_path, bus_name=NM, interface=NM_IP4_CONFIG_IFACE) - address_data = self._router_main.send_and_get_reply(Properties(ip4config_addr).get('AddressData')).body[0][1] - - for entry in address_data: - if 'address' in entry: - self._ipv4_address = entry['address'][1] - return + self._ipv4_address = ipv4_address + self._current_network_metered = metered def __del__(self): self.stop() def update_gsm_settings(self, roaming: bool, apn: str, metered: bool): """Update GSM settings for cellular connection""" - if self._fake_networking: + + if self._backend_unavailable: + cloudlog.warning("Ignoring update_gsm_settings(); Wi-Fi backend unavailable") return + if self._nmcli_networking: - cloudlog.warning("GSM settings update is unavailable in nmcli fallback mode") + cloudlog.warning("Ignoring update_gsm_settings(); nmcli backend unavailable for GSM settings") + return + + if self._fake_networking: return def worker(): @@ -1209,77 +1338,116 @@ class WifiManager: out.append("".join(cur)) return out - def _update_networks_nmcli(self): - with self._lock: - networks_by_ssid: dict[str, Network] = {} - saved_ssids: set[str] = set() + def _update_networks_nmcli_locked(self): + networks_by_ssid: dict[str, Network] = {} + saved_connections: dict[str, str] = {} + active_ssid: str | None = None + active_device: str | None = None - try: - saved = subprocess.run( - ["nmcli", "-t", "-f", "NAME,TYPE,802-11-wireless.ssid", "connection", "show"], - check=False, capture_output=True, text=True, - ) - for line in saved.stdout.splitlines(): - parts = self._parse_nmcli_line(line) - if len(parts) >= 3 and parts[1] == "802-11-wireless" and parts[2]: - saved_ssids.add(_canonicalize_ssid(parts[2])) - saved_ssids.add(_canonicalize_ssid(parts[0])) - except Exception as e: - cloudlog.warning(f"nmcli saved networks query failed: {e}") - - try: - result = subprocess.run( - ["nmcli", "-t", "-f", "IN-USE,SSID,SIGNAL,SECURITY", "device", "wifi", "list", "--rescan", "no"], - check=False, capture_output=True, text=True, - ) - for line in result.stdout.splitlines(): - parts = self._parse_nmcli_line(line) - if len(parts) < 4: - continue - in_use, ssid, signal, security = parts[:4] - if not ssid: - continue - ssid_key = _canonicalize_ssid(ssid) - try: - strength = int(signal or 0) - except ValueError: - strength = 0 - - security_type = SecurityType.OPEN if security in ("", "--") else SecurityType.WPA - is_connected = in_use.startswith("*") - is_saved = ssid_key in saved_ssids - - existing = networks_by_ssid.get(ssid_key) - should_replace = ( - existing is None or - (is_connected and not existing.is_connected) or - (existing is not None and is_connected == existing.is_connected and strength > existing.strength) - ) - - if should_replace: - prior_saved = existing.is_saved if existing is not None else False - networks_by_ssid[ssid_key] = Network( - ssid=ssid, - strength=strength, - is_connected=is_connected, - security_type=security_type, - is_saved=is_saved or prior_saved, - ) - elif existing is not None: - networks_by_ssid[ssid_key] = Network( - ssid=existing.ssid, - strength=existing.strength, - is_connected=existing.is_connected or is_connected, - security_type=existing.security_type, - is_saved=existing.is_saved or is_saved, - ) - except Exception as e: - cloudlog.warning(f"nmcli scan failed: {e}") - - self._networks = sorted( - networks_by_ssid.values(), - key=lambda n: (-n.is_connected, -round(n.strength / 100 * 2), n.ssid.lower()), + try: + saved = subprocess.run( + ["nmcli", "-t", "-f", "NAME,TYPE", "connection", "show"], + check=False, capture_output=True, text=True, ) - self._update_ipv4_address() - self._current_network_metered = MeteredType.UNKNOWN - self._enqueue_callbacks(self._networks_updated, self._networks) + for line in saved.stdout.splitlines(): + parts = self._parse_nmcli_line(line) + if len(parts) < 2 or parts[1] != "802-11-wireless": + continue + + conn_id = parts[0] + ssid_lookup = subprocess.run( + ["nmcli", "-g", "802-11-wireless.ssid", "connection", "show", conn_id], + check=False, capture_output=True, text=True, + ) + ssid = ssid_lookup.stdout.strip() if ssid_lookup.returncode == 0 else "" + if ssid: + saved_connections[ssid] = conn_id + elif conn_id: + # Fallback for older/odd NetworkManager profiles where the connection + # name is the best identifier available. + saved_connections[conn_id] = conn_id + except Exception as e: + cloudlog.warning(f"nmcli saved networks query failed: {e}") + + self._connections = saved_connections + + try: + status = subprocess.run( + ["nmcli", "-t", "-f", "DEVICE,TYPE,STATE,CONNECTION", "device", "status"], + check=False, capture_output=True, text=True, + ) + for line in status.stdout.splitlines(): + parts = self._parse_nmcli_line(line) + if len(parts) >= 4 and parts[1] == "wifi": + device, _dev_type, state, connection = parts[:4] + if state.startswith("connected"): + active_device = device + active_ssid = next((ssid for ssid, conn_id in saved_connections.items() if conn_id == connection), + connection if connection not in ("", "--") else None) + break + except Exception as e: + cloudlog.warning(f"nmcli device status query failed: {e}") + + try: + result = subprocess.run( + ["nmcli", "-t", "-f", "IN-USE,SSID,SIGNAL,SECURITY", "device", "wifi", "list", "--rescan", "no"], + check=False, capture_output=True, text=True, + ) + for line in result.stdout.splitlines(): + parts = self._parse_nmcli_line(line) + if len(parts) < 4: + continue + in_use, ssid, signal, security = parts[:4] + if not ssid: + continue + + try: + strength = int(signal or 0) + except ValueError: + strength = 0 + + is_tethering = ssid == self._tethering_ssid + security_type = SecurityType.OPEN if security in ("", "--") else SecurityType.WPA + existing = networks_by_ssid.get(ssid) + if existing is None or strength > existing.strength or in_use.startswith("*"): + networks_by_ssid[ssid] = Network( + ssid=ssid, + strength=100 if is_tethering else strength, + security_type=security_type, + is_tethering=is_tethering, + ) + except Exception as e: + cloudlog.warning(f"nmcli scan failed: {e}") + + if active_ssid and active_ssid not in networks_by_ssid: + previous = next((network for network in self._networks if network.ssid == active_ssid), None) + networks_by_ssid[active_ssid] = Network( + ssid=active_ssid, + strength=previous.strength if previous is not None else 100, + security_type=previous.security_type if previous is not None else SecurityType.WPA, + is_tethering=active_ssid == self._tethering_ssid, + ) + + self._networks = list(networks_by_ssid.values()) + + if active_ssid is not None: + self._wifi_state = WifiState(ssid=active_ssid, status=ConnectStatus.CONNECTED) + elif self._wifi_state.status != ConnectStatus.CONNECTING: + self._wifi_state = WifiState() + + self._ipv4_address = "" + if active_device: + try: + addr = subprocess.run( + ["nmcli", "-t", "-f", "IP4.ADDRESS", "device", "show", active_device], + check=False, capture_output=True, text=True, + ) + for row in addr.stdout.splitlines(): + if row: + self._ipv4_address = row.split(":", 1)[-1].split("/", 1)[0] + break + except Exception as e: + cloudlog.warning(f"nmcli ipv4 lookup failed: {e}") + + self._current_network_metered = MeteredType.UNKNOWN + self._enqueue_callbacks(self._networks_updated, self.networks) diff --git a/system/ui/mici_reset.py b/system/ui/mici_reset.py old mode 100644 new mode 100755 index e5468b827..9cc6e7f3f --- a/system/ui/mici_reset.py +++ b/system/ui/mici_reset.py @@ -1,78 +1,109 @@ #!/usr/bin/env python3 import os import sys -import threading import time +import threading from enum import IntEnum import pyray as rl -from openpilot.system.ui.lib.application import gui_app, FontWeight -from openpilot.system.ui.widgets import Widget -from openpilot.system.ui.widgets.slider import SmallSlider -from openpilot.system.ui.widgets.button import SmallButton, FullRoundedButton -from openpilot.system.ui.widgets.label import gui_label, gui_text_box +from openpilot.system.hardware import HARDWARE, PC +from openpilot.system.ui.lib.application import gui_app +from openpilot.system.ui.widgets.scroller import Scroller +from openpilot.system.ui.mici_setup import GreyBigButton, FailedPage +from openpilot.selfdrive.ui.mici.widgets.dialog import BigDialog, BigConfirmationCircleButton USERDATA = "/dev/disk/by-partlabel/userdata" TIMEOUT = 3*60 -PC = not (os.path.isfile("/TICI") or os.path.isfile("/EON")) class ResetMode(IntEnum): USER_RESET = 0 # user initiated a factory reset from openpilot RECOVER = 1 # userdata is corrupt for some reason, give a chance to recover - FORMAT = 2 # finish up a factory reset from a tool that doesn't flash an empty partition to userdata + TAP_RESET = 2 # user initiated a factory reset by tapping the screen during boot -class ResetState(IntEnum): - NONE = 0 - RESETTING = 1 - FAILED = 2 +class ResetFailedPage(FailedPage): + def __init__(self): + super().__init__(None, "reset failed", "reboot to try again", icon="icons_mici/setup/reset_failed.png") + + def show_event(self): + super().show_event() + self._nav_bar._alpha = 0.0 # not dismissable + + def _back_enabled(self) -> bool: + return False -class Reset(Widget): +class ResettingPage(BigDialog): + DOT_STEP = 0.6 + + def __init__(self): + super().__init__("resetting device", "this may take up to\na minute...", + gui_app.texture("icons_mici/setup/factory_reset.png", 64, 64)) + self._show_time = 0.0 + + def show_event(self): + super().show_event() + self._nav_bar._alpha = 0.0 # not dismissable + self._show_time = rl.get_time() + + def _back_enabled(self) -> bool: + return False + + def _render(self, _): + t = (rl.get_time() - self._show_time) % (self.DOT_STEP * 2) + dots = "." * min(int(t / (self.DOT_STEP / 4)), 3) + self._card.set_value(f"this may take up to\na minute{dots}") + super()._render(_) + + +class Reset(Scroller): def __init__(self, mode): super().__init__() self._mode = mode - self._previous_reset_state = None - self._reset_state = ResetState.NONE + self._previous_active_widget = None + self._reset_failed = False + self._timeout_st = time.monotonic() - self._cancel_button = SmallButton("cancel") - self._cancel_button.set_click_callback(self._cancel_callback) + self._resetting_page = ResettingPage() + self._reset_failed_page = ResetFailedPage() - self._reboot_button = FullRoundedButton("reboot") - self._reboot_button.set_click_callback(self._do_reboot) + self._reset_button = BigConfirmationCircleButton("reset &\nerase", gui_app.texture("icons_mici/settings/device/uninstall.png", 70, 70), + self._start_reset, exit_on_confirm=False, red=True) + self._cancel_button = BigConfirmationCircleButton("cancel", gui_app.texture("icons_mici/setup/cancel.png", 64, 64), + gui_app.request_close, exit_on_confirm=False) + self._reboot_button = BigConfirmationCircleButton("reboot\ndevice", gui_app.texture("icons_mici/settings/device/reboot.png", 64, 70), + HARDWARE.reboot, exit_on_confirm=False) - self._confirm_slider = SmallSlider("reset", self._confirm) + # show reboot button if in recover mode + self._cancel_button.set_visible(mode != ResetMode.RECOVER) + self._reboot_button.set_visible(mode == ResetMode.RECOVER) - self._render_status = True + main_card = GreyBigButton("factory reset", "resetting erases\nall user content & data", + gui_app.texture("icons_mici/setup/factory_reset.png", 64, 64)) + self._scroller.add_widget(main_card) - def _cancel_callback(self): - self._render_status = False + if mode != ResetMode.USER_RESET: + self._scroller.add_widget(GreyBigButton("", "Resetting erases all user content & data.")) + if mode == ResetMode.RECOVER: + main_card.set_value("user data partition\ncould not be mounted") + elif mode == ResetMode.TAP_RESET: + main_card.set_value("reset triggered by\ntapping the screen") - def _do_reboot(self): - if PC: - return + self._scroller.add_widgets([ + GreyBigButton("", "For a deeper reset, go to\nhttps://flash.comma.ai"), + self._cancel_button, + self._reboot_button, + self._reset_button, + ]) - os.system("sudo reboot") - - def _backup_ssh_params(self): - if PC: - return - - backup_dir = "/cache/reset_backup" - os.system(f"sudo rm -rf {backup_dir}") - os.system(f"sudo mkdir -p {backup_dir}") - for key in ("GithubSshKeys", "SshEnabled"): - os.system(f"sudo cp /data/params/d/{key} {backup_dir}/{key} 2>/dev/null || true") - os.system(f"sudo chmod 600 {backup_dir}/* 2>/dev/null || true") + gui_app.add_nav_stack_tick(self._nav_stack_tick) def _do_erase(self): if PC: return - self._backup_ssh_params() - # Removing data and formatting rm = os.system("sudo rm -rf /data/*") os.system(f"sudo umount {USERDATA}") @@ -81,92 +112,42 @@ class Reset(Widget): if rm == 0 or fmt == 0: os.system("sudo reboot") else: - self._reset_state = ResetState.FAILED + self._reset_failed = True - def start_reset(self): - self._reset_state = ResetState.RESETTING - threading.Timer(0.1, self._do_erase).start() + def _start_reset(self): + def do_erase_thread(): + threading.Thread(target=self._do_erase, daemon=True).start() - def _update_state(self): - if self._reset_state != self._previous_reset_state: - self._previous_reset_state = self._reset_state + self._resetting_page.set_shown_callback(do_erase_thread) + gui_app.push_widget(self._resetting_page) + + def _nav_stack_tick(self): + if self._reset_failed: + self._reset_failed = False + gui_app.pop_widgets_to(self, lambda: gui_app.push_widget(self._reset_failed_page)) + + active_widget = gui_app.get_active_widget() + if active_widget != self._previous_active_widget: + self._previous_active_widget = active_widget self._timeout_st = time.monotonic() - elif self._reset_state != ResetState.RESETTING and (time.monotonic() - self._timeout_st) > TIMEOUT: + elif self._mode != ResetMode.RECOVER and active_widget != self._resetting_page and (time.monotonic() - self._timeout_st) > TIMEOUT: exit(0) - def _render(self, rect: rl.Rectangle): - label_rect = rl.Rectangle(rect.x + 8, rect.y + 8, rect.width, 50) - gui_label(label_rect, "factory reset", 48, font_weight=FontWeight.BOLD, - color=rl.Color(255, 255, 255, int(255 * 0.9))) - - text_rect = rl.Rectangle(rect.x + 8, rect.y + 56, rect.width - 8 * 2, rect.height - 80) - gui_text_box(text_rect, self._get_body_text(), 36, font_weight=FontWeight.ROMAN, line_scale=0.9) - - if self._reset_state != ResetState.RESETTING: - # fade out cancel button as slider is moved, set visible to prevent pressing invisible cancel - self._cancel_button.set_opacity(1.0 - self._confirm_slider.slider_percentage) - self._cancel_button.set_visible(self._confirm_slider.slider_percentage < 0.8) - - if self._mode == ResetMode.RECOVER: - self._cancel_button.set_text("reboot") - self._cancel_button.render(rl.Rectangle( - rect.x + 8, - rect.y + rect.height - self._cancel_button.rect.height, - self._cancel_button.rect.width, - self._cancel_button.rect.height)) - elif self._mode == ResetMode.USER_RESET and self._reset_state != ResetState.FAILED: - self._cancel_button.render(rl.Rectangle( - rect.x + 8, - rect.y + rect.height - self._cancel_button.rect.height, - self._cancel_button.rect.width, - self._cancel_button.rect.height)) - - if self._reset_state != ResetState.FAILED: - self._confirm_slider.render(rl.Rectangle( - rect.x + rect.width - self._confirm_slider.rect.width, - rect.y + rect.height - self._confirm_slider.rect.height, - self._confirm_slider.rect.width, - self._confirm_slider.rect.height)) - else: - self._reboot_button.render(rl.Rectangle( - rect.x + 8, - rect.y + rect.height - self._reboot_button.rect.height, - self._reboot_button.rect.width, - self._reboot_button.rect.height)) - - return self._render_status - - def _confirm(self): - self.start_reset() - - def _get_body_text(self): - if self._reset_state == ResetState.RESETTING: - return "Resetting device... This may take up to a minute." - if self._reset_state == ResetState.FAILED: - return "Reset failed. Reboot to try again." - if self._mode == ResetMode.RECOVER: - return "Unable to mount data partition. It may be corrupted." - return "All content and settings will be erased." - def main(): mode = ResetMode.USER_RESET if len(sys.argv) > 1: if sys.argv[1] == '--recover': mode = ResetMode.RECOVER - elif sys.argv[1] == "--format": - mode = ResetMode.FORMAT + elif sys.argv[1] == '--tap-reset': + mode = ResetMode.TAP_RESET gui_app.init_window("System Reset") reset = Reset(mode) + gui_app.push_widget(reset) - if mode == ResetMode.FORMAT: - reset.start_reset() - - for should_render in gui_app.render(): - if should_render: - if not reset.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height)): - break + for _ in gui_app.render(): + pass if __name__ == "__main__": diff --git a/system/ui/mici_setup.py b/system/ui/mici_setup.py old mode 100644 new mode 100755 index 079267b67..52b13cc79 --- a/system/ui/mici_setup.py +++ b/system/ui/mici_setup.py @@ -1,61 +1,52 @@ #!/usr/bin/env python3 -from abc import abstractmethod import os import re +import ssl import threading import time import urllib.request import urllib.error from urllib.parse import urlparse -from enum import IntEnum -import shutil from collections.abc import Callable import pyray as rl from cereal import log +from openpilot.common.filter_simple import BounceFilter +from openpilot.system.hardware import HARDWARE, TICI +from openpilot.common.realtime import config_realtime_process, set_core_affinity +from openpilot.common.swaglog import cloudlog +from openpilot.common.time_helpers import system_time_valid from openpilot.common.utils import run_cmd -from openpilot.system.hardware import HARDWARE from openpilot.system.ui.lib.application import gui_app, FontWeight -from openpilot.system.ui.lib.wifi_manager import WifiManager -from openpilot.system.ui.lib.scroll_panel2 import GuiScrollPanel2 -from openpilot.system.ui.widgets import Widget, DialogResult -from openpilot.system.ui.widgets.button import (IconButton, SmallButton, WideRoundedButton, SmallerRoundedButton, - SmallCircleIconButton, WidishRoundedButton, SmallRedPillButton, - FullRoundedButton) +from openpilot.system.ui.lib.wifi_manager import WifiManager, ConnectStatus +from openpilot.system.ui.widgets import Widget +from openpilot.system.ui.widgets.nav_widget import NavWidget from openpilot.system.ui.widgets.label import UnifiedLabel -from openpilot.system.ui.widgets.slider import LargerSlider, SmallSlider -from openpilot.selfdrive.ui.mici.layouts.settings.network import WifiUIMici -from openpilot.selfdrive.ui.mici.widgets.dialog import BigInputDialog +from openpilot.system.ui.widgets.scroller import Scroller, NavScroller, ITEM_SPACING +from openpilot.system.ui.widgets.slider import LargerSlider +from openpilot.selfdrive.ui.mici.layouts.settings.network import WifiNetworkButton +from openpilot.selfdrive.ui.mici.layouts.settings.network.wifi_ui import WifiUIMici +from openpilot.selfdrive.ui.mici.widgets.dialog import BigInputDialog, BigConfirmationCircleButton +from openpilot.selfdrive.ui.mici.widgets.button import BigButton, GreyBigButton NetworkType = log.DeviceState.NetworkType -NETWORK_CHECK_URL = "https://openpilot.comma.ai" -DEFAULT_INSTALLER_URL = "https://installer.comma.ai/firestar5683/StarPilot" +OPENPILOT_URL = "https://openpilot.comma.ai" USER_AGENT = f"AGNOSSetup-{HARDWARE.get_os_version()}" -CONTINUE_PATH = "/data/continue.sh" -TMP_CONTINUE_PATH = "/data/continue.sh.new" -INSTALL_PATH = "/data/openpilot" -VALID_CACHE_PATH = "/data/.openpilot_cache" -INSTALLER_SOURCE_PATH = "/usr/comma/installer" INSTALLER_DESTINATION_PATH = "/tmp/installer" INSTALLER_URL_PATH = "/tmp/installer_url" -CONTINUE = """#!/usr/bin/env bash - -cd /data/openpilot -exec ./launch_openpilot.sh -""" - class NetworkConnectivityMonitor: - def __init__(self, should_check: Callable[[], bool] | None = None, check_interval: float = 0.5): + def __init__(self, should_check: Callable[[], bool] | None = None): self.network_connected = threading.Event() self.wifi_connected = threading.Event() + self.recheck_event = threading.Event() self._should_check = should_check or (lambda: True) - self._check_interval = check_interval self._stop_event = threading.Event() + self._last_timesyncd_restart = 0.0 self._thread: threading.Thread | None = None def start(self): @@ -74,35 +65,41 @@ class NetworkConnectivityMonitor: self.network_connected.clear() self.wifi_connected.clear() + def invalidate(self): + self.recheck_event.set() + self.reset() + def _run(self): while not self._stop_event.is_set(): if self._should_check(): try: - request = urllib.request.Request(NETWORK_CHECK_URL, method="HEAD") - urllib.request.urlopen(request, timeout=0.5) + request = urllib.request.Request(OPENPILOT_URL, method="HEAD") + urllib.request.urlopen(request, timeout=2.0) + + # Discard stale result if invalidated during request + if self.recheck_event.is_set(): + self.recheck_event.clear() + continue + self.network_connected.set() if HARDWARE.get_network_type() == NetworkType.wifi: self.wifi_connected.set() + except urllib.error.URLError as e: + if (isinstance(e.reason, ssl.SSLCertVerificationError) and + not system_time_valid() and + time.monotonic() - self._last_timesyncd_restart > 5): + self._last_timesyncd_restart = time.monotonic() + run_cmd(["sudo", "systemctl", "restart", "systemd-timesyncd"]) + self.reset() except Exception: self.reset() else: self.reset() - if self._stop_event.wait(timeout=self._check_interval): + if self._stop_event.wait(timeout=1.0): break -class SetupState(IntEnum): - GETTING_STARTED = 0 - NETWORK_SETUP = 1 - NETWORK_SETUP_CUSTOM_SOFTWARE = 8 - SOFTWARE_SELECTION = 2 - CUSTOM_SOFTWARE = 3 - DOWNLOADING = 4 - DOWNLOAD_FAILED = 5 - CUSTOM_SOFTWARE_WARNING = 6 - - class StartPage(Widget): def __init__(self): super().__init__() @@ -111,35 +108,41 @@ class StartPage(Widget): font_weight=FontWeight.DISPLAY, alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER, alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE) - self._start_bg_txt = gui_app.texture("icons_mici/setup/green_button.png", 520, 224) - self._start_bg_pressed_txt = gui_app.texture("icons_mici/setup/green_button_pressed.png", 520, 224) - # Match The Galaxy accent palette while keeping existing setup assets/layout intact. - self._start_bg_tint = rl.Color(94, 200, 200, 255) - self._start_bg_pressed_tint = rl.Color(75, 168, 168, 255) + self._start_bg_txt = gui_app.texture("icons_mici/setup/start_button.png", 500, 224, keep_aspect_ratio=False) + self._start_bg_pressed_txt = gui_app.texture("icons_mici/setup/start_button_pressed.png", 500, 224, keep_aspect_ratio=False) + self._scale_filter = BounceFilter(1.0, 0.1, 1 / gui_app.target_fps) + self._click_delay = 0.075 def _render(self, rect: rl.Rectangle): - draw_x = rect.x + (rect.width - self._start_bg_txt.width) / 2 - draw_y = rect.y + (rect.height - self._start_bg_txt.height) / 2 + scale = self._scale_filter.update(1.07 if self.is_pressed else 1.0) + base_draw_x = rect.x + (rect.width - self._start_bg_txt.width) / 2 + base_draw_y = rect.y + (rect.height - self._start_bg_txt.height) / 2 + draw_x = base_draw_x + (self._start_bg_txt.width * (1 - scale)) / 2 + draw_y = base_draw_y + (self._start_bg_txt.height * (1 - scale)) / 2 texture = self._start_bg_pressed_txt if self.is_pressed else self._start_bg_txt - tint = self._start_bg_pressed_tint if self.is_pressed else self._start_bg_tint - rl.draw_texture(texture, int(draw_x), int(draw_y), tint) + rl.draw_texture_ex(texture, (draw_x, draw_y), 0, scale, rl.WHITE) - self._title.render(rect) + self._title.render(rl.Rectangle(rect.x, rect.y + (draw_y - base_draw_y), rect.width, rect.height)) -class SoftwareSelectionPage(Widget): +class SoftwareSelectionPage(NavWidget): def __init__(self, use_openpilot_callback: Callable, use_custom_software_callback: Callable): super().__init__() - self._openpilot_slider = LargerSlider("slide to use\nstarpilot", use_openpilot_callback) - self._custom_software_slider = LargerSlider("slide to use\ncustom software", use_custom_software_callback, - green=False, shimmer_offset=0.4) + self._openpilot_slider = self._child(LargerSlider("slide to install\nopenpilot", use_openpilot_callback)) + self._openpilot_slider.set_enabled(lambda: self.enabled and not self.is_dismissing) + self._custom_software_slider = self._child(LargerSlider("slide to install\ncustom software", use_custom_software_callback, green=False, shimmer_offset=0.4)) + self._custom_software_slider.set_enabled(lambda: self.enabled and not self.is_dismissing) def show_event(self): super().show_event() - self._openpilot_slider.show_event() - self._custom_software_slider.show_event() + self._nav_bar._alpha = 0.0 + + def _update_state(self): + super()._update_state() + if self.is_dismissing: + self.reset() def reset(self): self._openpilot_slider.reset(reset_shimmer=False) @@ -166,530 +169,347 @@ class SoftwareSelectionPage(Widget): self._custom_software_slider.render(custom_software_rect) -class TermsHeader(Widget): - def __init__(self, text: str, icon_texture: rl.Texture): - super().__init__() - - self._title = UnifiedLabel(text, 36, text_color=rl.Color(255, 255, 255, int(255 * 0.9)), - font_weight=FontWeight.BOLD, alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE, - line_height=0.8) - self._icon_texture = icon_texture - - self.set_rect(rl.Rectangle(0, 0, gui_app.width - 16 * 2, self._icon_texture.height)) - - def set_title(self, text: str): - self._title.set_text(text) - - def set_icon(self, icon_texture: rl.Texture): - self._icon_texture = icon_texture - - def _render(self, _): - rl.draw_texture_ex(self._icon_texture, rl.Vector2(self._rect.x, self._rect.y), - 0.0, 1.0, rl.WHITE) - - # May expand outside parent rect - title_content_height = self._title.get_content_height(int(self._rect.width - self._icon_texture.width - 16)) - title_rect = rl.Rectangle( - self._rect.x + self._icon_texture.width + 16, - self._rect.y + (self._rect.height - title_content_height) / 2, - self._rect.width - self._icon_texture.width - 16, - title_content_height, - ) - self._title.render(title_rect) - - -class TermsPage(Widget): - ITEM_SPACING = 20 - - def __init__(self, continue_callback: Callable, back_callback: Callable | None = None, - back_text: str = "back", continue_text: str = "accept"): - super().__init__() - - # TODO: use Scroller - self._scroll_panel = GuiScrollPanel2(horizontal=False) - - self._continue_text = continue_text - self._continue_slider: bool = continue_text in ("reboot", "power off") - self._continue_button: WideRoundedButton | FullRoundedButton | SmallSlider - if self._continue_slider: - self._continue_button = SmallSlider(continue_text, confirm_callback=continue_callback) - self._scroll_panel.set_enabled(lambda: not self._continue_button.is_pressed) - elif back_callback is not None: - self._continue_button = WideRoundedButton(continue_text) - else: - self._continue_button = FullRoundedButton(continue_text) - self._continue_button.set_enabled(False) - self._continue_button.set_opacity(0.0) - self._continue_button.set_touch_valid_callback(self._scroll_panel.is_touch_valid) - if not self._continue_slider: - self._continue_button.set_click_callback(continue_callback) - - self._enable_back = back_callback is not None - self._back_button = SmallButton(back_text) - self._back_button.set_opacity(0.0) - self._back_button.set_touch_valid_callback(self._scroll_panel.is_touch_valid) - self._back_button.set_click_callback(back_callback) - - self._scroll_down_indicator = IconButton(gui_app.texture("icons_mici/setup/scroll_down_indicator.png", 64, 78)) - self._scroll_down_indicator.set_enabled(False) - - def reset(self): - self._scroll_panel.set_offset(0) - self._continue_button.set_enabled(False) - self._continue_button.set_opacity(0.0) - self._back_button.set_enabled(False) - self._back_button.set_opacity(0.0) - self._scroll_down_indicator.set_opacity(1.0) - - def show_event(self): - super().show_event() - self.reset() - - @property - @abstractmethod - def _content_height(self): - pass - - @property - def _scrolled_down_offset(self): - return -self._content_height + (self._continue_button.rect.height + 16 + 30) - - @abstractmethod - def _render_content(self, scroll_offset): - pass - - def _render(self, _): - scroll_offset = round(self._scroll_panel.update(self._rect, self._content_height + self._continue_button.rect.height + 16)) - - if scroll_offset <= self._scrolled_down_offset: - # don't show back if not enabled - if self._enable_back: - self._back_button.set_enabled(True) - self._back_button.set_opacity(1.0, smooth=True) - self._continue_button.set_enabled(True) - self._continue_button.set_opacity(1.0, smooth=True) - self._scroll_down_indicator.set_opacity(0.0, smooth=True) - else: - self._back_button.set_enabled(False) - self._back_button.set_opacity(0.0, smooth=True) - self._continue_button.set_enabled(False) - self._continue_button.set_opacity(0.0, smooth=True) - self._scroll_down_indicator.set_opacity(1.0, smooth=True) - - # Render content - self._render_content(scroll_offset) - - # black gradient at top and bottom for scrolling content - rl.draw_rectangle_gradient_v(int(self._rect.x), int(self._rect.y), - int(self._rect.width), 20, rl.BLACK, rl.BLANK) - rl.draw_rectangle_gradient_v(int(self._rect.x), int(self._rect.y + self._rect.height - 20), - int(self._rect.width), 20, rl.BLANK, rl.BLACK) - - # fade out back button as slider is moved - if self._continue_slider and scroll_offset <= self._scrolled_down_offset: - self._back_button.set_opacity(1.0 - self._continue_button.slider_percentage) - self._back_button.set_visible(self._continue_button.slider_percentage < 0.99) - - self._back_button.render(rl.Rectangle( - self._rect.x + 8, - self._rect.y + self._rect.height - self._back_button.rect.height, - self._back_button.rect.width, - self._back_button.rect.height, - )) - - continue_x = self._rect.x + 8 - if self._enable_back: - continue_x = self._rect.x + self._rect.width - self._continue_button.rect.width - 8 - if self._continue_slider: - continue_x += 8 - self._continue_button.render(rl.Rectangle( - continue_x, - self._rect.y + self._rect.height - self._continue_button.rect.height, - self._continue_button.rect.width, - self._continue_button.rect.height, - )) - - self._scroll_down_indicator.render(rl.Rectangle( - self._rect.x + self._rect.width - self._scroll_down_indicator.rect.width - 8, - self._rect.y + self._rect.height - self._scroll_down_indicator.rect.height - 8, - self._scroll_down_indicator.rect.width, - self._scroll_down_indicator.rect.height, - )) - - -class CustomSoftwareWarningPage(TermsPage): +class CustomSoftwareWarningPage(NavScroller): def __init__(self, continue_callback: Callable, back_callback: Callable): - super().__init__(continue_callback, back_callback) + super().__init__() + self.set_back_callback(back_callback) - self._title_header = TermsHeader("use caution installing\n3rd party software", - gui_app.texture("icons_mici/setup/warning.png", 66, 60)) - self._body = UnifiedLabel("• It has not been tested by comma.\n" + - "• It may not comply with relevant safety standards.\n" + - "• It may cause damage to your device and/or vehicle.\n", 36, text_color=rl.Color(255, 255, 255, int(255 * 0.9)), - font_weight=FontWeight.ROMAN) + self._continue_button = BigPillButton("next") + self._continue_button.set_click_callback(continue_callback) - self._restore_header = TermsHeader("how to backup &\nrestore", gui_app.texture("icons_mici/setup/restore.png", 60, 60)) - self._restore_body = UnifiedLabel("To restore your device to a factory state later, use https://flash.comma.ai", - 36, text_color=rl.Color(255, 255, 255, int(255 * 0.9)), - font_weight=FontWeight.ROMAN) - - @property - def _content_height(self): - return self._restore_body.rect.y + self._restore_body.rect.height - self._scroll_panel.get_offset() - - def _render_content(self, scroll_offset): - self._title_header.set_position(self._rect.x + 16, self._rect.y + 8 + scroll_offset) - self._title_header.render() - - body_rect = rl.Rectangle( - self._rect.x + 8, - self._title_header.rect.y + self._title_header.rect.height + self.ITEM_SPACING, - self._rect.width - 50, - self._body.get_content_height(int(self._rect.width - 50)), - ) - self._body.render(body_rect) - - self._restore_header.set_position(self._rect.x + 16, self._body.rect.y + self._body.rect.height + self.ITEM_SPACING) - self._restore_header.render() - - self._restore_body.render(rl.Rectangle( - self._rect.x + 8, - self._restore_header.rect.y + self._restore_header.rect.height + self.ITEM_SPACING, - self._rect.width - 50, - self._restore_body.get_content_height(int(self._rect.width - 50)), - )) + self._scroller.add_widgets([ + GreyBigButton("caution: installing\n3rd party software", "swipe down to go back", + gui_app.texture("icons_mici/setup/warning.png", 64, 58)), + GreyBigButton("", "• It has not been tested by comma."), + GreyBigButton("", "• It may not comply with safety standards."), + GreyBigButton("", "• It may damage your device and/or vehicle."), + GreyBigButton("how to restore to a\nfactory state later", "https://flash.comma.ai", + gui_app.texture("icons_mici/setup/restore.png", 64, 64)), + self._continue_button, + ]) -class DownloadingPage(Widget): +# TODO: unifi with updater's progress page +class DownloadingPage(NavWidget): def __init__(self): super().__init__() - self._title_label = UnifiedLabel("downloading", 64, text_color=rl.Color(255, 255, 255, int(255 * 0.9)), + self._title_label = UnifiedLabel("downloading...", 64, text_color=rl.Color(255, 255, 255, int(255 * 0.9)), font_weight=FontWeight.DISPLAY) - self._progress_label = UnifiedLabel("", 128, text_color=rl.Color(255, 255, 255, int(255 * 0.9 * 0.35)), + self._progress_label = UnifiedLabel("", 132, text_color=rl.Color(255, 255, 255, int(255 * 0.9 * 0.65)), font_weight=FontWeight.ROMAN, alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_BOTTOM) self._progress = 0 + def _back_enabled(self) -> bool: + return False + + def show_event(self): + super().show_event() + self._nav_bar._alpha = 0.0 # not dismissable + self.set_progress(0) + def set_progress(self, progress: int): self._progress = progress self._progress_label.set_text(f"{progress}%") def _render(self, rect: rl.Rectangle): + rl.draw_rectangle_rec(rect, rl.BLACK) self._title_label.render(rl.Rectangle( - rect.x + 20, - rect.y + 10, + rect.x + 12, + rect.y + 2, rect.width, 64, )) self._progress_label.render(rl.Rectangle( - rect.x + 20, - rect.y + 20, + rect.x + 12, + rect.y + 18, rect.width, rect.height, )) -class FailedPage(Widget): - def __init__(self, reboot_callback: Callable, retry_callback: Callable, title: str = "download failed"): +class FailedPage(NavScroller): + def __init__(self, retry_callback: Callable | None, title: str = "download failed", + description: str | None = None, icon: str = "icons_mici/setup/warning.png"): super().__init__() + self.set_back_callback(retry_callback) - self._title_label = UnifiedLabel(title, 64, text_color=rl.Color(255, 255, 255, int(255 * 0.9)), - font_weight=FontWeight.DISPLAY) - self._reason_label = UnifiedLabel("", 36, text_color=rl.Color(255, 255, 255, int(255 * 0.9 * 0.65)), - font_weight=FontWeight.ROMAN) + self._reason_card = GreyBigButton("", "") + self._reason_card.set_visible(False) - self._reboot_button = SmallRedPillButton("reboot") - self._reboot_button.set_click_callback(reboot_callback) - - self._retry_button = WideRoundedButton("retry") - self._retry_button.set_click_callback(retry_callback) + self._scroller.add_widgets([ + GreyBigButton(title, description or "swipe down to go\nback and try again", + gui_app.texture(icon, 64, 58)), + self._reason_card, + BigConfirmationCircleButton("reboot\ndevice", gui_app.texture("icons_mici/settings/device/reboot.png", 64, 70), + HARDWARE.reboot, exit_on_confirm=False), + ]) def set_reason(self, reason: str): - self._reason_label.set_text(reason) - - def _render(self, rect: rl.Rectangle): - self._title_label.render(rl.Rectangle( - rect.x + 8, - rect.y + 10, - rect.width, - 64, - )) - - self._reason_label.render(rl.Rectangle( - rect.x + 8, - rect.y + 10 + 64, - rect.width, - 36, - )) - - self._reboot_button.render(rl.Rectangle( - rect.x + 8, - rect.y + rect.height - self._reboot_button.rect.height, - self._reboot_button.rect.width, - self._reboot_button.rect.height, - )) - - self._retry_button.render(rl.Rectangle( - rect.x + 8 + self._reboot_button.rect.width + 8, - rect.y + rect.height - self._retry_button.rect.height, - self._retry_button.rect.width, - self._retry_button.rect.height, - )) - - -class NetworkSetupState(IntEnum): - MAIN = 0 - WIFI_PANEL = 1 - - -class NetworkSetupPage(Widget): - def __init__(self, wifi_manager, continue_callback: Callable, back_callback: Callable): - super().__init__() - self._wifi_ui = WifiUIMici(wifi_manager, back_callback=lambda: self.set_state(NetworkSetupState.MAIN)) - - self._no_wifi_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_slash.png", 58, 50) - self._wifi_full_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_full.png", 58, 50) - self._waiting_text = "waiting for internet..." - self._network_header = TermsHeader(self._waiting_text, self._no_wifi_txt) - - back_txt = gui_app.texture("icons_mici/setup/back_new.png", 37, 32) - self._back_button = SmallCircleIconButton(back_txt) - self._back_button.set_click_callback(back_callback) - - self._wifi_button = SmallerRoundedButton("wifi") - self._wifi_button.set_click_callback(lambda: self.set_state(NetworkSetupState.WIFI_PANEL)) - - self._continue_button = WidishRoundedButton("continue") - self._continue_button.set_enabled(False) - self._continue_button.set_click_callback(continue_callback) - - self._state = NetworkSetupState.MAIN - self._prev_has_internet = False - - def set_state(self, state: NetworkSetupState): - self._state = state - if state == NetworkSetupState.WIFI_PANEL: - self._wifi_ui.show_event() - - def set_has_internet(self, has_internet: bool): - if has_internet: - self._network_header.set_title("connected to internet") - self._network_header.set_icon(self._wifi_full_txt) - self._continue_button.set_enabled(True) + if reason: + self._reason_card.set_value(reason) + self._reason_card.set_visible(True) else: - self._network_header.set_title(self._waiting_text) - self._network_header.set_icon(self._no_wifi_txt) - self._continue_button.set_enabled(False) + self._reason_card.set_visible(False) - if has_internet and not self._prev_has_internet: - self.set_state(NetworkSetupState.MAIN) - self._prev_has_internet = has_internet + +class BigPillButton(BigButton): + def __init__(self, *args, green: bool = False, disabled_background: bool = False, **kwargs): + self._green = green + self._disabled_background = disabled_background + super().__init__(*args, **kwargs) + + self._label.set_font_size(48) + self._label.set_alignment(rl.GuiTextAlignment.TEXT_ALIGN_CENTER) + self._label.set_alignment_vertical(rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE) + + def _load_images(self): + if self._green: + self._txt_default_bg = gui_app.texture("icons_mici/setup/start_button.png", 402, 180) + self._txt_pressed_bg = gui_app.texture("icons_mici/setup/start_button_pressed.png", 402, 180) + else: + self._txt_default_bg = gui_app.texture("icons_mici/setup/continue.png", 402, 180) + self._txt_pressed_bg = gui_app.texture("icons_mici/setup/continue_pressed.png", 402, 180) + self._txt_disabled_bg = gui_app.texture("icons_mici/setup/continue_disabled.png", 402, 180) + + def set_green(self, green: bool): + if self._green != green: + self._green = green + self._load_images() + + def _update_label_layout(self): + # Don't change label text size + pass + + def _handle_background(self) -> tuple[rl.Texture, float, float, float]: + txt_bg, btn_x, btn_y, scale = super()._handle_background() + + if self._disabled_background: + txt_bg = self._txt_disabled_bg + return txt_bg, btn_x, btn_y, scale + + +class NetworkSetupPageBase(Scroller): + def __init__(self, network_monitor: NetworkConnectivityMonitor, continue_callback: Callable[[bool], None], + disable_connect_hint: bool = False): + super().__init__() + + self._wifi_manager = WifiManager() + self._wifi_manager.set_active(True) + self._network_monitor = network_monitor + self._custom_software = False + self._wifi_ui = WifiUIMici(self._wifi_manager) + + self._connect_button = GreyBigButton("connect to\ninternet", "swipe down to go back", + gui_app.texture("icons_mici/setup/small_slider/slider_arrow.png", 64, 56, flip_x=True)) + self._connect_button.set_visible(not disable_connect_hint) + + self._wifi_button = WifiNetworkButton(self._wifi_manager) + self._wifi_button.set_click_callback(lambda: gui_app.push_widget(self._wifi_ui)) + + self._prev_has_internet = False + self._prev_wifi_connected = False + self._pending_has_internet_scroll: float | None = None # stores time to use as delay + self._pending_continue_grow_animation = False + self._pending_wifi_grow_animation = False + + def on_waiting_click(): + offset = (self._wifi_button.rect.x + self._wifi_button.rect.width / 2) - (self._rect.x + self._rect.width / 2) + self._scroller.scroll_to(offset, smooth=True, block_interaction=True) + # trigger grow when wifi button in view + self._pending_wifi_grow_animation = True + + self._waiting_button = BigPillButton("connect to\ncontinue", disabled_background=True) + self._waiting_button.set_click_callback(on_waiting_click) + self._continue_button = BigPillButton("install openpilot", green=True) + self._continue_button.set_click_callback(lambda: continue_callback(self._custom_software)) + + self._scroller.add_widgets([ + self._connect_button, + self._wifi_button, + self._continue_button, + self._waiting_button, + ]) + + gui_app.add_nav_stack_tick(self._nav_stack_tick) def show_event(self): super().show_event() - self._state = NetworkSetupState.MAIN - self._wifi_ui.show_event() + # make sure we populate strength and ip immediately if already have wifi + self._wifi_manager.set_active(True) + self._prev_has_internet = self._has_internet + self._prev_wifi_connected = self._wifi_manager.wifi_state.status == ConnectStatus.CONNECTED + self._pending_has_internet_scroll = None + self._pending_continue_grow_animation = False + self._pending_wifi_grow_animation = False - def hide_event(self): - super().hide_event() - self._wifi_ui.hide_event() + if self._prev_has_internet or self._prev_wifi_connected: + self.set_shown_callback(lambda: self._scroll_to_end_and_grow()) - def _render(self, _): - if self._state == NetworkSetupState.MAIN: - self._network_header.render(rl.Rectangle( - self._rect.x + 16, - self._rect.y + 16, - self._rect.width - 32, - self._network_header.rect.height, - )) + @property + def _has_internet(self) -> bool: + network_changing = self._wifi_ui.any_network_forgetting or self._wifi_manager.wifi_state.status == ConnectStatus.CONNECTING + if network_changing: + self._network_monitor.invalidate() - self._back_button.render(rl.Rectangle( - self._rect.x + 8, - self._rect.y + self._rect.height - self._back_button.rect.height, - self._back_button.rect.width, - self._back_button.rect.height, - )) + has_internet = (self._network_monitor.network_connected.is_set() and + not network_changing and + not self._network_monitor.recheck_event.is_set()) + return has_internet - self._wifi_button.render(rl.Rectangle( - self._rect.x + 8 + self._back_button.rect.width + 10, - self._rect.y + self._rect.height - self._wifi_button.rect.height, - self._wifi_button.rect.width, - self._wifi_button.rect.height, - )) + def _nav_stack_tick(self): + # Only run tick when this page or its WiFi UI is on the stack + if gui_app.get_active_widget() is not self and not gui_app.widget_in_stack(self._wifi_ui): + self._wifi_manager.process_callbacks() + return - self._continue_button.render(rl.Rectangle( - self._rect.x + self._rect.width - self._continue_button.rect.width - 8, - self._rect.y + self._rect.height - self._continue_button.rect.height, - self._continue_button.rect.width, - self._continue_button.rect.height, - )) - else: - self._wifi_ui.render(self._rect) + # Check network state before processing callbacks so forgetting flag + # is still set on the frame the forgotten callback fires + has_internet = self._has_internet + wifi_connected = self._wifi_manager.wifi_state.status == ConnectStatus.CONNECTED + + self._continue_button.set_visible(has_internet) + self._waiting_button.set_visible(not has_internet) + + # TODO: fire show/hide events on visibility changes + if not has_internet: + self._pending_continue_grow_animation = False + self._waiting_button.set_text("waiting for\ninternet..." if wifi_connected else "connect to\ncontinue") + + self._wifi_manager.process_callbacks() + + # Dismiss WiFi UI and scroll on WiFi connect or internet gain + if (has_internet and not self._prev_has_internet) or (wifi_connected and not self._prev_wifi_connected): + # TODO: cancel if connect is transient + self._pending_has_internet_scroll = rl.get_time() + + self._prev_has_internet = has_internet + self._prev_wifi_connected = wifi_connected + + if self._pending_has_internet_scroll is not None: + # Scrolls over to continue button, then grows once in view + elapsed = rl.get_time() - self._pending_has_internet_scroll + if elapsed > 0.7 or gui_app.get_active_widget() is self: # instant scroll + grow if not popping + # Animate WifiUi down first before scroll + self._pending_has_internet_scroll = None + gui_app.pop_widgets_to(self, self._scroll_to_end_and_grow) + + def _scroll_to_end_and_grow(self): + self._scroller._layout() + end_offset = -(self._scroller.content_size - self._rect.width) + remaining = self._scroller.scroll_panel.get_offset() - end_offset + self._scroller.scroll_to(remaining, smooth=True, block_interaction=True) + self._pending_continue_grow_animation = True + + def set_custom_software(self, custom_software: bool): + self._custom_software = custom_software + self._continue_button.set_text("install openpilot" if not custom_software else "choose software") + self._continue_button.set_green(not custom_software) + + def _update_state(self): + super()._update_state() + + if self._pending_continue_grow_animation: + btn_right = self._continue_button.rect.x + self._continue_button.rect.width + visible_right = self._rect.x + self._rect.width + if btn_right < visible_right + 50: + self._pending_continue_grow_animation = False + self._continue_button.trigger_grow_animation() + + if self._pending_wifi_grow_animation and abs(self._wifi_button.rect.x - ITEM_SPACING) < 50: + self._pending_wifi_grow_animation = False + self._wifi_button.trigger_grow_animation() + + +class NetworkSetupPage(NetworkSetupPageBase, NavScroller): + def __init__(self, network_monitor: NetworkConnectivityMonitor, continue_callback: Callable[[bool], None], + back_callback: Callable[[], None] | None): + super().__init__(network_monitor, continue_callback) + self.set_back_callback(back_callback) class Setup(Widget): def __init__(self): super().__init__() - self.state = SetupState.GETTING_STARTED - self.failed_url = "" - self.failed_reason = "" self.download_url = "" self.download_progress = 0 self.download_thread = None - self._wifi_manager = WifiManager() - self._wifi_manager.set_active(True) - self._network_monitor = NetworkConnectivityMonitor( - lambda: self.state in (SetupState.NETWORK_SETUP, SetupState.NETWORK_SETUP_CUSTOM_SOFTWARE) - ) - self._prev_has_internet = False - gui_app.set_modal_overlay_tick(self._modal_overlay_tick) + self._download_failed_reason: str | None = None + + self._network_monitor = NetworkConnectivityMonitor() + self._network_monitor.start() + + def getting_started_button_callback(): + gui_app.push_widget(self._software_selection_page) self._start_page = StartPage() - self._start_page.set_click_callback(self._getting_started_button_callback) + self._start_page.set_click_callback(getting_started_button_callback) + self._start_page.set_enabled(lambda: self.enabled) # for nav stack - self._network_setup_page = NetworkSetupPage(self._wifi_manager, self._network_setup_continue_button_callback, - self._network_setup_back_button_callback) + self._network_setup_page = NetworkSetupPage(self._network_monitor, self._network_setup_continue_callback, self._pop_to_software_selection) - self._software_selection_page = SoftwareSelectionPage(self._software_selection_continue_button_callback, - self._software_selection_custom_software_button_callback) + self._software_selection_page = SoftwareSelectionPage(self._push_network_setup, lambda: gui_app.push_widget(self._custom_software_warning_page)) - self._download_failed_page = FailedPage(HARDWARE.reboot, self._download_failed_startover_button_callback) + self._download_failed_page = FailedPage(self._pop_to_software_selection, icon="icons_mici/setup/red_warning.png") - self._custom_software_warning_page = CustomSoftwareWarningPage(self._software_selection_custom_software_continue, - self._custom_software_warning_back_button_callback) + self._custom_software_warning_page = CustomSoftwareWarningPage(lambda: self._push_network_setup(True), self._pop_to_software_selection) self._downloading_page = DownloadingPage() - def _modal_overlay_tick(self): - has_internet = self._network_monitor.network_connected.is_set() - if has_internet and not self._prev_has_internet: - gui_app.set_modal_overlay(None) - self._prev_has_internet = has_internet + gui_app.add_nav_stack_tick(self._nav_stack_tick) - def _update_state(self): - self._wifi_manager.process_callbacks() + def _nav_stack_tick(self): + self._downloading_page.set_progress(self.download_progress) - def _set_state(self, state: SetupState): - self.state = state - if self.state == SetupState.SOFTWARE_SELECTION: - self._software_selection_page.reset() - elif self.state == SetupState.CUSTOM_SOFTWARE_WARNING: - self._custom_software_warning_page.reset() - - if self.state in (SetupState.NETWORK_SETUP, SetupState.NETWORK_SETUP_CUSTOM_SOFTWARE): - self._network_setup_page.show_event() - self._network_monitor.reset() - self._network_monitor.start() - else: - self._network_setup_page.hide_event() - self._network_monitor.stop() + if self._download_failed_reason is not None: + reason = self._download_failed_reason + self._download_failed_reason = None + self._download_failed_page.set_reason(reason) + gui_app.pop_widgets_to(self._software_selection_page, lambda: gui_app.push_widget(self._download_failed_page)) def _render(self, rect: rl.Rectangle): - if self.state == SetupState.GETTING_STARTED: - self._start_page.render(rect) - elif self.state in (SetupState.NETWORK_SETUP, SetupState.NETWORK_SETUP_CUSTOM_SOFTWARE): - self.render_network_setup(rect) - elif self.state == SetupState.SOFTWARE_SELECTION: - self._software_selection_page.render(rect) - elif self.state == SetupState.CUSTOM_SOFTWARE_WARNING: - self._custom_software_warning_page.render(rect) - elif self.state == SetupState.CUSTOM_SOFTWARE: - self.render_custom_software() - elif self.state == SetupState.DOWNLOADING: - self.render_downloading(rect) - elif self.state == SetupState.DOWNLOAD_FAILED: - self._download_failed_page.render(rect) - - def _custom_software_warning_back_button_callback(self): - self._set_state(SetupState.SOFTWARE_SELECTION) - - def _custom_software_warning_continue_button_callback(self): - self._set_state(SetupState.CUSTOM_SOFTWARE) - - def _getting_started_button_callback(self): - self._set_state(SetupState.SOFTWARE_SELECTION) - - def _software_selection_back_button_callback(self): - self._set_state(SetupState.GETTING_STARTED) - - def _software_selection_continue_button_callback(self): - self.use_openpilot() - - def _software_selection_custom_software_button_callback(self): - self._set_state(SetupState.CUSTOM_SOFTWARE_WARNING) - - def _software_selection_custom_software_continue(self): - self._set_state(SetupState.NETWORK_SETUP_CUSTOM_SOFTWARE) - - def _download_failed_startover_button_callback(self): - self._set_state(SetupState.GETTING_STARTED) - - def _network_setup_back_button_callback(self): - self._set_state(SetupState.SOFTWARE_SELECTION) - - def _network_setup_continue_button_callback(self): - self._network_monitor.stop() - if self.state == SetupState.NETWORK_SETUP: - self.download(DEFAULT_INSTALLER_URL) - elif self.state == SetupState.NETWORK_SETUP_CUSTOM_SOFTWARE: - self._set_state(SetupState.CUSTOM_SOFTWARE) + self._start_page.render(rect) def close(self): self._network_monitor.stop() - def render_network_setup(self, rect: rl.Rectangle): - self._network_setup_page.render(rect) - has_internet = self._network_monitor.network_connected.is_set() - self._prev_has_internet = has_internet - self._network_setup_page.set_has_internet(has_internet) + def _pop_to_software_selection(self): + # reset sliders after dismiss completes + gui_app.pop_widgets_to(self._software_selection_page, self._software_selection_page.reset) - def render_downloading(self, rect: rl.Rectangle): - self._downloading_page.set_progress(self.download_progress) - self._downloading_page.render(rect) + def _push_network_setup(self, custom_software: bool = False): + # to fire the correct continue callback later + self._network_setup_page.set_custom_software(custom_software) + gui_app.push_widget(self._network_setup_page) - def render_custom_software(self): - def handle_keyboard_result(text): - url = text.strip() - if url: - self.download(url) - - def handle_keyboard_exit(result): - if result == DialogResult.CANCEL: - self._set_state(SetupState.SOFTWARE_SELECTION) - - keyboard = BigInputDialog("custom software URL", confirm_callback=handle_keyboard_result) - gui_app.set_modal_overlay(keyboard, callback=handle_keyboard_exit) - - def use_openpilot(self): - if os.path.isdir(INSTALL_PATH) and os.path.isfile(VALID_CACHE_PATH): - os.remove(VALID_CACHE_PATH) - with open(TMP_CONTINUE_PATH, "w") as f: - f.write(CONTINUE) - run_cmd(["chmod", "+x", TMP_CONTINUE_PATH]) - shutil.move(TMP_CONTINUE_PATH, CONTINUE_PATH) - shutil.copyfile(INSTALLER_SOURCE_PATH, INSTALLER_DESTINATION_PATH) - with open(INSTALLER_URL_PATH, "w") as f: - f.write(DEFAULT_INSTALLER_URL) - - # give time for installer UI to take over - time.sleep(0.1) - gui_app.request_close() + def _network_setup_continue_callback(self, custom_software: bool): + if not custom_software: + self._download(OPENPILOT_URL) else: - self._set_state(SetupState.NETWORK_SETUP) + def handle_keyboard_result(text): + url = text.strip() + if url: + self._download(url) - def download(self, url: str): + keyboard = BigInputDialog("custom software URL...", confirm_callback=handle_keyboard_result, auto_return_to_letters="./") + gui_app.push_widget(keyboard) + + def _download(self, url: str): # autocomplete incomplete URLs if re.match("^([^/.]+)/([^/]+)$", url): url = f"https://installer.comma.ai/{url}" parsed = urlparse(url, scheme='https') self.download_url = (urlparse(f"https://{url}") if not parsed.netloc else parsed).geturl() + self.download_progress = 0 - self._set_state(SetupState.DOWNLOADING) + def start_download(): + self.download_thread = threading.Thread(target=self._download_thread, daemon=True) + self.download_thread.start() - self.download_thread = threading.Thread(target=self._download_thread, daemon=True) - self.download_thread.start() + self._downloading_page.set_shown_callback(start_download) + gui_app.push_widget(self._downloading_page) def _download_thread(self): try: @@ -717,7 +537,6 @@ class Setup(Widget): if total_size: self.download_progress = int(downloaded * 100 / total_size) - self._downloading_page.set_progress(self.download_progress) is_elf = False with open(tmpfile, 'rb') as f: @@ -725,46 +544,44 @@ class Setup(Widget): is_elf = header == b'\x7fELF' if not is_elf: - self.download_failed(self.download_url, "No custom software found at this URL.") + self._download_failed_reason = "No custom software found at this URL: " + self.download_url.replace("https://", "", 1) return + # NOTE: currently unused, for future logging + with open(INSTALLER_URL_PATH, "w") as f: + f.write(self.download_url) + # AGNOS might try to execute the installer before this process exits. # Therefore, important to close the fd before renaming the installer. os.close(fd) os.rename(tmpfile, INSTALLER_DESTINATION_PATH) - with open(INSTALLER_URL_PATH, "w") as f: - f.write(self.download_url) - - if os.path.isfile(VALID_CACHE_PATH): - os.remove(VALID_CACHE_PATH) - # give time for installer UI to take over time.sleep(0.1) gui_app.request_close() except urllib.error.HTTPError as e: if e.code == 409: - error_msg = "Incompatible openpilot version" - self.download_failed(self.download_url, error_msg) + self._download_failed_reason = "Incompatible openpilot version." except Exception: - error_msg = "Invalid URL" - self.download_failed(self.download_url, error_msg) - - def download_failed(self, url: str, reason: str): - self.failed_url = url - self.failed_reason = reason - self._download_failed_page.set_reason(reason) - self._set_state(SetupState.DOWNLOAD_FAILED) + self._download_failed_reason = "Invalid URL: " + self.download_url.replace("https://", "", 1) def main(): + config_realtime_process(0, 51) + # attempt to affine. AGNOS will start setup with all cores, should only fail when manually launching with screen off + if TICI: + try: + set_core_affinity([5]) + except OSError: + cloudlog.exception("Failed to set core affinity for setup process") + try: gui_app.init_window("Setup") setup = Setup() - for should_render in gui_app.render(): - if should_render: - setup.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) + gui_app.push_widget(setup) + for _ in gui_app.render(): + pass setup.close() except Exception as e: print(f"Setup error: {e}") diff --git a/system/ui/mici_updater.py b/system/ui/mici_updater.py old mode 100644 new mode 100755 index 2ae2f7cc1..8437e6fa6 --- a/system/ui/mici_updater.py +++ b/system/ui/mici_updater.py @@ -3,179 +3,161 @@ import sys import subprocess import threading import pyray as rl -from enum import IntEnum -from openpilot.system.hardware import HARDWARE +from openpilot.common.realtime import config_realtime_process, set_core_affinity +from openpilot.system.hardware import HARDWARE, TICI +from openpilot.common.swaglog import cloudlog from openpilot.system.ui.lib.application import gui_app, FontWeight -from openpilot.system.ui.lib.text_measure import measure_text_cached -from openpilot.system.ui.lib.wifi_manager import WifiManager, Network -from openpilot.system.ui.widgets import Widget -from openpilot.system.ui.widgets.label import gui_text_box, gui_label, UnifiedLabel -from openpilot.system.ui.widgets.button import FullRoundedButton -from openpilot.system.ui.mici_setup import NetworkSetupPage, FailedPage, NetworkConnectivityMonitor +from openpilot.system.ui.widgets.nav_widget import NavWidget +from openpilot.system.ui.widgets.scroller import Scroller +from openpilot.system.ui.widgets.label import UnifiedLabel +from openpilot.system.ui.mici_setup import (NetworkSetupPage, FailedPage, NetworkConnectivityMonitor, + GreyBigButton, BigPillButton) -class Screen(IntEnum): - PROMPT = 0 - WIFI = 1 - PROGRESS = 2 - FAILED = 3 +class UpdaterNetworkSetupPage(NetworkSetupPage): + def __init__(self, network_monitor, continue_callback): + super().__init__(network_monitor, continue_callback, back_callback=None) + self._continue_button.set_text("download\n& install") + self._continue_button.set_green(False) -class Updater(Widget): +class ProgressPage(NavWidget): + def __init__(self): + super().__init__() + + self._progress_title_label = UnifiedLabel("", 64, text_color=rl.Color(255, 255, 255, int(255 * 0.9)), + font_weight=FontWeight.DISPLAY, line_height=0.8) + self._progress_percent_label = UnifiedLabel("", 132, text_color=rl.Color(255, 255, 255, int(255 * 0.9 * 0.65)), + font_weight=FontWeight.ROMAN, + alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_BOTTOM) + + def _back_enabled(self) -> bool: + return False + + def set_progress(self, text: str, value: int): + self._progress_title_label.set_text(text.replace("_", "_\n") + "...") + self._progress_percent_label.set_text(f"{value}%") + + def show_event(self): + super().show_event() + self._nav_bar._alpha = 0.0 # not dismissable + self.set_progress("downloading", 0) + + def _render(self, rect: rl.Rectangle): + rl.draw_rectangle_rec(rect, rl.BLACK) + self._progress_title_label.render(rl.Rectangle( + rect.x + 12, + rect.y + 2, + rect.width, + self._progress_title_label.get_content_height(int(rect.width - 20)), + )) + + self._progress_percent_label.render(rl.Rectangle( + rect.x + 12, + rect.y + 18, + rect.width, + rect.height, + )) + + +class Updater(Scroller): def __init__(self, updater_path, manifest_path): super().__init__() self.updater = updater_path self.manifest = manifest_path - self.current_screen = Screen.PROMPT - self._current_network_strength = -1 self.progress_value = 0 self.progress_text = "loading" self.process = None self.update_thread = None - self._wifi_manager = WifiManager() - self._wifi_manager.set_active(True) + self._update_failed = False - self._network_setup_page = NetworkSetupPage(self._wifi_manager, self._network_setup_continue_callback, - self._network_setup_back_callback) - - self._wifi_manager.add_callbacks(networks_updated=self._on_network_updated) self._network_monitor = NetworkConnectivityMonitor() self._network_monitor.start() - # Buttons - self._continue_button = FullRoundedButton("continue") - self._continue_button.set_click_callback(lambda: self.set_current_screen(Screen.WIFI)) + self._network_setup_page = UpdaterNetworkSetupPage(self._network_monitor, self._network_setup_continue_callback) - self._title_label = UnifiedLabel("update required", 48, text_color=rl.Color(255, 115, 0, 255), - font_weight=FontWeight.DISPLAY) - self._subtitle_label = UnifiedLabel("The download size is approximately 1GB.", 36, - text_color=rl.Color(255, 255, 255, int(255 * 0.9)), - font_weight=FontWeight.ROMAN) + self._progress_page = ProgressPage() - self._update_failed_page = FailedPage(HARDWARE.reboot, self._update_failed_retry_callback, - title="update failed") + self._failed_page = FailedPage(self._retry, title="update failed") - def _network_setup_back_callback(self): - self.set_current_screen(Screen.PROMPT) + self._continue_button = BigPillButton("next") + self._continue_button.set_click_callback(lambda: gui_app.push_widget(self._network_setup_page)) - def _network_setup_continue_callback(self): + self._scroller.add_widgets([ + GreyBigButton("update required", "the download size\nis approximately 1 GB", + gui_app.texture("icons_mici/offroad_alerts/green_wheel.png", 64, 64)), + self._continue_button, + ]) + + gui_app.add_nav_stack_tick(self._nav_stack_tick) + + def _network_setup_continue_callback(self, _): self.install_update() - def _update_failed_retry_callback(self): - self.set_current_screen(Screen.PROMPT) + def _retry(self): + gui_app.pop_widgets_to(self) - def _on_network_updated(self, networks: list[Network]): - self._current_network_strength = next((net.strength for net in networks if net.is_connected), -1) + def _nav_stack_tick(self): + self._progress_page.set_progress(self.progress_text, self.progress_value) - def set_current_screen(self, screen: Screen): - if self.current_screen != screen: - if screen == Screen.PROGRESS: - if self._network_setup_page: - self._network_setup_page.hide_event() - elif screen == Screen.WIFI: - if self._network_setup_page: - self._network_setup_page.show_event() - elif screen == Screen.PROMPT: - if self._network_setup_page: - self._network_setup_page.hide_event() - elif screen == Screen.FAILED: - if self._network_setup_page: - self._network_setup_page.hide_event() - - self.current_screen = screen + if self._update_failed: + self._update_failed = False + self.show_event() + gui_app.pop_widgets_to(self, lambda: gui_app.push_widget(self._failed_page)) def install_update(self): - self.set_current_screen(Screen.PROGRESS) self.progress_value = 0 self.progress_text = "downloading" - # Start the update process in a separate thread - self.update_thread = threading.Thread(target=self._run_update_process) - self.update_thread.daemon = True - self.update_thread.start() + def start_update(): + self.update_thread = threading.Thread(target=self._run_update_process, daemon=True) + self.update_thread.start() + + # Start the update process in a separate thread *after* show animation completes + self._progress_page.set_shown_callback(start_update) + gui_app.push_widget(self._progress_page) def _run_update_process(self): # TODO: just import it and run in a thread without a subprocess - cmd = [self.updater, "--swap", self.manifest] - self.process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, - text=True, bufsize=1, universal_newlines=True) + try: + cmd = [self.updater, "--swap", self.manifest] + self.process = subprocess.Popen(cmd, stdout=subprocess.PIPE, + text=True, bufsize=1, universal_newlines=True) + except Exception: + self._update_failed = True + return - for line in self.process.stdout: - parts = line.strip().split(":") - if len(parts) == 2: - self.progress_text = parts[0].lower() - try: - self.progress_value = int(float(parts[1])) - except ValueError: - pass + if self.process.stdout is not None: + for line in self.process.stdout: + parts = line.strip().split(":") + if len(parts) == 2: + self.progress_text = parts[0].lower() + try: + self.progress_value = int(float(parts[1])) + except ValueError: + pass exit_code = self.process.wait() if exit_code == 0: HARDWARE.reboot() else: - self.set_current_screen(Screen.FAILED) - - def render_prompt_screen(self, rect: rl.Rectangle): - self._title_label.render(rl.Rectangle( - rect.x + 8, - rect.y - 5, - rect.width, - 48, - )) - - subtitle_width = rect.width - 16 - subtitle_height = self._subtitle_label.get_content_height(int(subtitle_width)) - self._subtitle_label.render(rl.Rectangle( - rect.x + 8, - rect.y + 48, - subtitle_width, - subtitle_height, - )) - - self._continue_button.render(rl.Rectangle( - rect.x + 8, - rect.y + rect.height - self._continue_button.rect.height, - self._continue_button.rect.width, - self._continue_button.rect.height, - )) - - def render_progress_screen(self, rect: rl.Rectangle): - title_rect = rl.Rectangle(self._rect.x + 6, self._rect.y - 5, self._rect.width - 12, self._rect.height - 8) - if ' ' in self.progress_text: - font_size = 62 - else: - font_size = 82 - gui_text_box(title_rect, self.progress_text, font_size, font_weight=FontWeight.DISPLAY, - color=rl.Color(255, 255, 255, int(255 * 0.9))) - - progress_value = f"{self.progress_value}%" - text_height = measure_text_cached(gui_app.font(FontWeight.ROMAN), progress_value, 128).y - progress_rect = rl.Rectangle(self._rect.x + 6, self._rect.y + self._rect.height - text_height + 18, - self._rect.width - 12, text_height) - gui_label(progress_rect, progress_value, 128, font_weight=FontWeight.ROMAN, - color=rl.Color(255, 255, 255, int(255 * 0.9 * 0.35))) - - def _update_state(self): - self._wifi_manager.process_callbacks() - - def _render(self, rect: rl.Rectangle): - if self.current_screen == Screen.PROMPT: - self.render_prompt_screen(rect) - elif self.current_screen == Screen.WIFI: - self._network_setup_page.set_has_internet(self._network_monitor.network_connected.is_set()) - self._network_setup_page.render(rect) - elif self.current_screen == Screen.PROGRESS: - self.render_progress_screen(rect) - elif self.current_screen == Screen.FAILED: - self._update_failed_page.render(rect) + self._update_failed = True def close(self): self._network_monitor.stop() def main(): + config_realtime_process(0, 51) + # attempt to affine. AGNOS will start setup with all cores, should only fail when manually launching with screen off + if TICI: + try: + set_core_affinity([5]) + except OSError: + cloudlog.exception("Failed to set core affinity for updater process") + if len(sys.argv) < 3: print("Usage: updater.py ") sys.exit(1) @@ -186,9 +168,9 @@ def main(): try: gui_app.init_window("System Update") updater = Updater(updater_path, manifest_path) - for should_render in gui_app.render(): - if should_render: - updater.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) + gui_app.push_widget(updater) + for _ in gui_app.render(): + pass updater.close() except Exception as e: print(f"Updater error: {e}") diff --git a/system/ui/reset.py b/system/ui/reset.py index 2800fd962..c32504a5b 100755 --- a/system/ui/reset.py +++ b/system/ui/reset.py @@ -1,13 +1,11 @@ #!/usr/bin/env python3 -from openpilot.system.hardware import HARDWARE +from openpilot.system.ui.lib.application import gui_app import openpilot.system.ui.tici_reset as tici_reset import openpilot.system.ui.mici_reset as mici_reset def main(): - # Use actual hardware type, not UI scale/env flags, to choose reset UI. - # This prevents mici devices from launching tici reset layouts. - if HARDWARE.get_device_type() in ("tici", "tizi"): + if gui_app.big_ui(): tici_reset.main() else: mici_reset.main() diff --git a/system/ui/setup.py b/system/ui/setup.py index f96a426b9..23ffc26aa 100755 --- a/system/ui/setup.py +++ b/system/ui/setup.py @@ -1,11 +1,11 @@ #!/usr/bin/env python3 -from openpilot.system.hardware import HARDWARE +from openpilot.system.ui.lib.application import gui_app import openpilot.system.ui.tici_setup as tici_setup import openpilot.system.ui.mici_setup as mici_setup def main(): - if HARDWARE.get_device_type() in ("tici", "tizi"): + if gui_app.big_ui(): tici_setup.main() else: mici_setup.main() diff --git a/system/ui/spinner.py b/system/ui/spinner.py index 69f13ac5f..2a48b3889 100755 --- a/system/ui/spinner.py +++ b/system/ui/spinner.py @@ -1,12 +1,7 @@ #!/usr/bin/env python3 -import os import pyray as rl import select -import subprocess import sys -import time -from collections import deque -from pathlib import Path from openpilot.system.ui.lib.application import gui_app from openpilot.system.ui.lib.text_measure import measure_text_cached @@ -31,28 +26,12 @@ MARGIN_H = 100 FONT_SIZE = 96 LINE_HEIGHT = 104 DARKGRAY = (55, 55, 55, 255) -RESET_TAP_COUNT = 8 -RESET_TAP_WINDOW_S = 4.0 - -# StarPilot variables -GREEN = (23, 134, 68, 242) def clamp(value, min_value, max_value): return max(min(value, max_value), min_value) -def get_device_type() -> str: - model_path = Path("/sys/firmware/devicetree/base/model") - if model_path.is_file(): - try: - model = model_path.read_text().strip("\x00") - return model.split("comma ")[-1].strip().lower() - except Exception: - pass - return "" - - class Spinner(Widget): def __init__(self): super().__init__() @@ -61,10 +40,6 @@ class Spinner(Widget): self._rotation = 0.0 self._progress: int | None = None self._wrapped_lines: list[str] = [] - self._logo_rect = rl.Rectangle(0, 0, 0, 0) - self._tap_times = deque(maxlen=RESET_TAP_COUNT) - self._launch_reset = False - self._allow_reset_gesture = os.path.isfile("/TICI") and get_device_type() not in ("tici", "tizi") def set_text(self, text: str) -> None: if text.isdigit(): @@ -89,7 +64,6 @@ class Spinner(Widget): center = rl.Vector2(rect.width / 2.0, center_y) spinner_origin = rl.Vector2(TEXTURE_SIZE / 2.0, TEXTURE_SIZE / 2.0) comma_position = rl.Vector2(center.x - TEXTURE_SIZE / 2.0, center.y - TEXTURE_SIZE / 2.0) - self._logo_rect = rl.Rectangle(comma_position.x, comma_position.y, TEXTURE_SIZE, TEXTURE_SIZE) delta_time = rl.get_frame_time() self._rotation = (self._rotation + DEGREES_PER_SECOND * delta_time) % 360.0 @@ -106,30 +80,13 @@ class Spinner(Widget): rl.draw_rectangle_rounded(bar, 1, 10, DARKGRAY) bar.width *= self._progress / 100.0 - rl.draw_rectangle_rounded(bar, 1, 10, GREEN) + rl.draw_rectangle_rounded(bar, 1, 10, rl.WHITE) elif self._wrapped_lines: for i, line in enumerate(self._wrapped_lines): text_size = measure_text_cached(gui_app.font(), line, FONT_SIZE) rl.draw_text_ex(gui_app.font(), line, rl.Vector2(center.x - text_size.x / 2, y_pos + i * LINE_HEIGHT), FONT_SIZE, 0.0, rl.WHITE) - def _handle_mouse_release(self, mouse_pos): - if not self._allow_reset_gesture: - return - - if not rl.check_collision_point_rec(mouse_pos, self._logo_rect): - return - - now = time.monotonic() - self._tap_times.append(now) - if len(self._tap_times) == RESET_TAP_COUNT and (now - self._tap_times[0]) <= RESET_TAP_WINDOW_S: - self._tap_times.clear() - self._launch_reset = True - - @property - def should_launch_reset(self) -> bool: - return self._launch_reset - def _read_stdin(): """Non-blocking read of available lines from stdin.""" @@ -154,28 +111,6 @@ def main(): spinner.set_text(text_list[-1]) spinner.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) - if spinner.should_launch_reset: - reset_script = Path(__file__).with_name("reset.py") - try: - proc = subprocess.Popen( - [sys.executable, str(reset_script)], - cwd=str(reset_script.parent), - close_fds=True, - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - ) - except OSError: - spinner.set_text("Failed to launch reset UI") - continue - - # Keep spinner alive if reset process exits immediately (prevents blank screen). - time.sleep(0.2) - if proc.poll() is not None: - spinner.set_text("Reset UI failed to start") - continue - - gui_app.request_close() - break if __name__ == "__main__": diff --git a/system/ui/tici_reset.py b/system/ui/tici_reset.py old mode 100644 new mode 100755 index 3eda118ca..a6603d547 --- a/system/ui/tici_reset.py +++ b/system/ui/tici_reset.py @@ -7,21 +7,19 @@ from enum import IntEnum import pyray as rl +from openpilot.system.hardware import PC from openpilot.system.ui.lib.application import gui_app, FontWeight, FONT_SCALE from openpilot.system.ui.widgets import Widget from openpilot.system.ui.widgets.button import Button, ButtonStyle from openpilot.system.ui.widgets.label import gui_label, gui_text_box -NVME = "/dev/nvme0n1" USERDATA = "/dev/disk/by-partlabel/userdata" TIMEOUT = 3*60 -PC = not (os.path.isfile("/TICI") or os.path.isfile("/EON")) class ResetMode(IntEnum): USER_RESET = 0 # user initiated a factory reset from openpilot RECOVER = 1 # userdata is corrupt for some reason, give a chance to recover - FORMAT = 2 # finish up a factory reset from a tool that doesn't flash an empty partition to userdata class ResetState(IntEnum): @@ -37,35 +35,14 @@ class Reset(Widget): self._mode = mode self._previous_reset_state = None self._reset_state = ResetState.NONE - self._cancel_button = Button("Cancel", self._cancel_callback) + self._cancel_button = Button("Cancel", gui_app.request_close) self._confirm_button = Button("Confirm", self._confirm, button_style=ButtonStyle.PRIMARY) self._reboot_button = Button("Reboot", lambda: os.system("sudo reboot")) - self._render_status = True - - def _cancel_callback(self): - self._render_status = False - - def _backup_ssh_params(self): - if PC: - return - - backup_dir = "/cache/reset_backup" - os.system(f"sudo rm -rf {backup_dir}") - os.system(f"sudo mkdir -p {backup_dir}") - for key in ("GithubSshKeys", "SshEnabled"): - os.system(f"sudo cp /data/params/d/{key} {backup_dir}/{key} 2>/dev/null || true") - os.system(f"sudo chmod 600 {backup_dir}/* 2>/dev/null || true") def _do_erase(self): if PC: return - self._backup_ssh_params() - - # Best effort to wipe NVME - os.system(f"sudo umount {NVME}") - os.system(f"yes | sudo mkfs.ext4 {NVME}") - # Removing data and formatting rm = os.system("sudo rm -rf /data/*") os.system(f"sudo umount {USERDATA}") @@ -76,7 +53,7 @@ class Reset(Widget): else: self._reset_state = ResetState.FAILED - def start_reset(self): + def _start_reset(self): self._reset_state = ResetState.RESETTING threading.Timer(0.1, self._do_erase).start() @@ -87,34 +64,34 @@ class Reset(Widget): elif self._reset_state != ResetState.RESETTING and (time.monotonic() - self._timeout_st) > TIMEOUT: exit(0) - def _render(self, rect: rl.Rectangle): - label_rect = rl.Rectangle(rect.x + 140, rect.y, rect.width - 280, 100 * FONT_SCALE) + def _render(self, _): + content_rect = rl.Rectangle(45, 200, self._rect.width - 90, self._rect.height - 245) + + label_rect = rl.Rectangle(content_rect.x + 140, content_rect.y, content_rect.width - 280, 100 * FONT_SCALE) gui_label(label_rect, "System Reset", 100, font_weight=FontWeight.BOLD) - text_rect = rl.Rectangle(rect.x + 140, rect.y + 140, rect.width - 280, rect.height - 90 - 100 * FONT_SCALE) + text_rect = rl.Rectangle(content_rect.x + 140, content_rect.y + 140, content_rect.width - 280, content_rect.height - 90 - 100 * FONT_SCALE) gui_text_box(text_rect, self._get_body_text(), 90) button_height = 160 button_spacing = 50 - button_top = rect.y + rect.height - button_height - button_width = (rect.width - button_spacing) / 2.0 + button_top = content_rect.y + content_rect.height - button_height + button_width = (content_rect.width - button_spacing) / 2.0 if self._reset_state != ResetState.RESETTING: if self._mode == ResetMode.RECOVER: - self._reboot_button.render(rl.Rectangle(rect.x, button_top, button_width, button_height)) + self._reboot_button.render(rl.Rectangle(content_rect.x, button_top, button_width, button_height)) elif self._mode == ResetMode.USER_RESET: - self._cancel_button.render(rl.Rectangle(rect.x, button_top, button_width, button_height)) + self._cancel_button.render(rl.Rectangle(content_rect.x, button_top, button_width, button_height)) if self._reset_state != ResetState.FAILED: - self._confirm_button.render(rl.Rectangle(rect.x + button_width + 50, button_top, button_width, button_height)) + self._confirm_button.render(rl.Rectangle(content_rect.x + button_width + 50, button_top, button_width, button_height)) else: - self._reboot_button.render(rl.Rectangle(rect.x, button_top, rect.width, button_height)) - - return self._render_status + self._reboot_button.render(rl.Rectangle(content_rect.x, button_top, content_rect.width, button_height)) def _confirm(self): if self._reset_state == ResetState.CONFIRM: - self.start_reset() + self._start_reset() else: self._reset_state = ResetState.CONFIRM @@ -131,30 +108,18 @@ class Reset(Widget): def main(): - # Safety fallback: if this module is launched on a small-UI device, - # hand off to the mici reset implementation to avoid off-screen layout. - if not gui_app.big_ui(): - import openpilot.system.ui.mici_reset as mici_reset - mici_reset.main() - return - mode = ResetMode.USER_RESET if len(sys.argv) > 1: if sys.argv[1] == '--recover': mode = ResetMode.RECOVER - elif sys.argv[1] == "--format": - mode = ResetMode.FORMAT gui_app.init_window("System Reset", 20) reset = Reset(mode) - if mode == ResetMode.FORMAT: - reset.start_reset() + gui_app.push_widget(reset) - for should_render in gui_app.render(): - if should_render: - if not reset.render(rl.Rectangle(45, 200, gui_app.width - 90, gui_app.height - 245)): - break + for _ in gui_app.render(): + pass if __name__ == "__main__": diff --git a/system/ui/tici_setup.py b/system/ui/tici_setup.py old mode 100644 new mode 100755 index cd5089e7a..9eefb6af5 --- a/system/ui/tici_setup.py +++ b/system/ui/tici_setup.py @@ -7,16 +7,14 @@ import urllib.request import urllib.error from urllib.parse import urlparse from enum import IntEnum -import shutil import pyray as rl from cereal import log -from openpilot.common.utils import run_cmd from openpilot.system.hardware import HARDWARE from openpilot.system.ui.lib.scroll_panel import GuiScrollPanel from openpilot.system.ui.lib.application import gui_app, FontWeight, FONT_SCALE -from openpilot.system.ui.widgets import Widget +from openpilot.system.ui.widgets import DialogResult, Widget from openpilot.system.ui.widgets.button import Button, ButtonStyle, ButtonRadio from openpilot.system.ui.widgets.keyboard import Keyboard from openpilot.system.ui.widgets.label import Label @@ -32,24 +30,12 @@ BODY_FONT_SIZE = 80 BUTTON_HEIGHT = 160 BUTTON_SPACING = 50 -NETWORK_CHECK_URL = "https://openpilot.comma.ai" -DEFAULT_INSTALLER_URL = "https://installer.comma.ai/firestar5683/StarPilot" +OPENPILOT_URL = "https://openpilot.comma.ai" USER_AGENT = f"AGNOSSetup-{HARDWARE.get_os_version()}" -CONTINUE_PATH = "/data/continue.sh" -TMP_CONTINUE_PATH = "/data/continue.sh.new" -INSTALL_PATH = "/data/openpilot" -VALID_CACHE_PATH = "/data/.openpilot_cache" -INSTALLER_SOURCE_PATH = "/usr/comma/installer" INSTALLER_DESTINATION_PATH = "/tmp/installer" INSTALLER_URL_PATH = "/tmp/installer_url" -CONTINUE = """#!/usr/bin/env bash - -cd /data/openpilot -exec ./launch_openpilot.sh -""" - class SetupState(IntEnum): LOW_VOLTAGE = 0 @@ -93,7 +79,7 @@ class Setup(Widget): self._getting_started_body_label = Label("Before we get on the road, let's finish installation and cover some details.", BODY_FONT_SIZE, text_alignment=rl.GuiTextAlignment.TEXT_ALIGN_LEFT, text_padding=20) - self._software_selection_openpilot_button = ButtonRadio("StarPilot", self.checkmark, font_size=BODY_FONT_SIZE, text_padding=80) + self._software_selection_openpilot_button = ButtonRadio("openpilot", self.checkmark, font_size=BODY_FONT_SIZE, text_padding=80) self._software_selection_custom_software_button = ButtonRadio("Custom Software", self.checkmark, font_size=BODY_FONT_SIZE, text_padding=80) self._software_selection_continue_button = Button("Continue", self._software_selection_continue_button_callback, button_style=ButtonStyle.PRIMARY) @@ -177,7 +163,9 @@ class Setup(Widget): def _software_selection_continue_button_callback(self): if self._software_selection_openpilot_button.selected: - self.use_openpilot() + self.state = SetupState.NETWORK_SETUP + self.stop_network_check_thread.clear() + self.start_network_check() else: self.state = SetupState.CUSTOM_SOFTWARE_WARNING @@ -190,12 +178,12 @@ class Setup(Widget): def _network_setup_continue_button_callback(self): self.stop_network_check_thread.set() if self._software_selection_openpilot_button.selected: - self.download(DEFAULT_INSTALLER_URL) + self.download(OPENPILOT_URL) else: self.state = SetupState.CUSTOM_SOFTWARE def render_low_voltage(self, rect: rl.Rectangle): - rl.draw_texture(self.warning, int(rect.x + 150), int(rect.y + 110), rl.WHITE) + rl.draw_texture_ex(self.warning, rl.Vector2(rect.x + 150, rect.y + 110), 0.0, 1.0, rl.WHITE) self._low_voltage_title_label.render(rl.Rectangle(rect.x + 150, rect.y + 110 + 150 + 100, rect.width - 500 - 150, TITLE_FONT_SIZE * FONT_SCALE)) self._low_voltage_body_label.render(rl.Rectangle(rect.x + 150, rect.y + 110 + 150 + 150, rect.width - 500, BODY_FONT_SIZE * FONT_SCALE * 3)) @@ -219,7 +207,7 @@ class Setup(Widget): while not self.stop_network_check_thread.is_set(): if self.state == SetupState.NETWORK_SETUP: try: - urllib.request.urlopen(NETWORK_CHECK_URL, timeout=2) + urllib.request.urlopen(OPENPILOT_URL, timeout=2.0) self.network_connected.set() if HARDWARE.get_network_type() == NetworkType.wifi: self.wifi_connected.set() @@ -227,7 +215,7 @@ class Setup(Widget): self.wifi_connected.clear() except Exception: self.network_connected.clear() - time.sleep(1) + time.sleep(1.0) def start_network_check(self): if self.network_check_thread is None or not self.network_check_thread.is_alive(): @@ -328,38 +316,20 @@ class Setup(Widget): def render_custom_software(self): def handle_keyboard_result(result): # Enter pressed - if result == 1: + if result == DialogResult.CONFIRM: url = self.keyboard.text self.keyboard.clear() if url: self.download(url) # Cancel pressed - elif result == 0: + elif result == DialogResult.CANCEL: self.state = SetupState.SOFTWARE_SELECTION self.keyboard.reset(min_text_size=1) self.keyboard.set_title("Enter URL", "for Custom Software") - gui_app.set_modal_overlay(self.keyboard, callback=handle_keyboard_result) - - def use_openpilot(self): - if os.path.isdir(INSTALL_PATH) and os.path.isfile(VALID_CACHE_PATH): - os.remove(VALID_CACHE_PATH) - with open(TMP_CONTINUE_PATH, "w") as f: - f.write(CONTINUE) - run_cmd(["chmod", "+x", TMP_CONTINUE_PATH]) - shutil.move(TMP_CONTINUE_PATH, CONTINUE_PATH) - shutil.copyfile(INSTALLER_SOURCE_PATH, INSTALLER_DESTINATION_PATH) - with open(INSTALLER_URL_PATH, "w") as f: - f.write(DEFAULT_INSTALLER_URL) - - # give time for installer UI to take over - time.sleep(0.1) - gui_app.request_close() - else: - self.state = SetupState.NETWORK_SETUP - self.stop_network_check_thread.clear() - self.start_network_check() + self.keyboard.set_callback(handle_keyboard_result) + gui_app.push_widget(self.keyboard) def download(self, url: str): # autocomplete incomplete URLs @@ -418,9 +388,6 @@ class Setup(Widget): with open(INSTALLER_URL_PATH, "w") as f: f.write(self.download_url) - if os.path.isfile(VALID_CACHE_PATH): - os.remove(VALID_CACHE_PATH) - # give time for installer UI to take over time.sleep(0.1) gui_app.request_close() @@ -443,9 +410,9 @@ def main(): try: gui_app.init_window("Setup", 20) setup = Setup() - for should_render in gui_app.render(): - if should_render: - setup.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) + gui_app.push_widget(setup) + for _ in gui_app.render(): + pass setup.close() except Exception as e: print(f"Setup error: {e}") diff --git a/system/ui/tici_updater.py b/system/ui/tici_updater.py old mode 100644 new mode 100755 index 2e1a8687e..3a3b0987d --- a/system/ui/tici_updater.py +++ b/system/ui/tici_updater.py @@ -67,18 +67,24 @@ class Updater(Widget): def _run_update_process(self): # TODO: just import it and run in a thread without a subprocess - cmd = [self.updater, "--swap", self.manifest] - self.process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, - text=True, bufsize=1, universal_newlines=True) + try: + cmd = [self.updater, "--swap", self.manifest] + self.process = subprocess.Popen(cmd, stdout=subprocess.PIPE, + text=True, bufsize=1, universal_newlines=True) + except Exception: + self.progress_text = "Update failed" + self.show_reboot_button = True + return - for line in self.process.stdout: - parts = line.strip().split(":") - if len(parts) == 2: - self.progress_text = parts[0] - try: - self.progress_value = int(float(parts[1])) - except ValueError: - pass + if self.process.stdout is not None: + for line in self.process.stdout: + parts = line.strip().split(":") + if len(parts) == 2: + self.progress_text = parts[0] + try: + self.progress_value = int(float(parts[1])) + except ValueError: + pass exit_code = self.process.wait() if exit_code == 0: @@ -160,10 +166,9 @@ def main(): try: gui_app.init_window("System Update") - updater = Updater(updater_path, manifest_path) - for should_render in gui_app.render(): - if should_render: - updater.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) + gui_app.push_widget(Updater(updater_path, manifest_path)) + for _ in gui_app.render(): + pass finally: # Make sure we clean up even if there's an error gui_app.close() diff --git a/system/ui/updater.py b/system/ui/updater.py index 00694c267..a894dd18a 100755 --- a/system/ui/updater.py +++ b/system/ui/updater.py @@ -28,7 +28,7 @@ def _ui_device_type() -> str: def main(): device_type = _ui_device_type() - # The updater stack imports application sizing during module import, so patch the + # The updater imports application sizing during module import, so patch the # hardware probe before importing either UI implementation. HARDWARE.get_device_type = lambda: device_type diff --git a/system/ui/widgets/__init__.py b/system/ui/widgets/__init__.py index b7542851b..4ce1c1b69 100644 --- a/system/ui/widgets/__init__.py +++ b/system/ui/widgets/__init__.py @@ -1,18 +1,22 @@ +from __future__ import annotations + import abc import pyray as rl from enum import IntEnum +from typing import TypeVar from collections.abc import Callable -from openpilot.common.filter_simple import BounceFilter, FirstOrderFilter from openpilot.system.ui.lib.application import gui_app, MousePos, MAX_TOUCH_SLOTS, MouseEvent try: from openpilot.selfdrive.ui.ui_state import device except ImportError: - class Device: awake = True + device = Device() - device = Device() # type: ignore +W = TypeVar('W', bound='Widget') + +DEBUG = False class DialogResult(IntEnum): @@ -25,23 +29,28 @@ class Widget(abc.ABC): def __init__(self): self._rect: rl.Rectangle = rl.Rectangle(0, 0, 0, 0) self._parent_rect: rl.Rectangle | None = None + self._children: list[Widget] = [] + + self._enabled: bool | Callable[[], bool] = True + self._is_visible: bool | Callable[[], bool] = True + self.__is_pressed = [False] * MAX_TOUCH_SLOTS # if current mouse/touch down started within the widget's rectangle self.__tracking_is_pressed = [False] * MAX_TOUCH_SLOTS - self._enabled: bool | Callable[[], bool] = True - self._is_visible: bool | Callable[[], bool] = True self._touch_valid_callback: Callable[[], bool] | None = None + self._click_delay: float | None = None # seconds to hold is_pressed after release + self._click_release_time: float | None = None self._click_callback: Callable[[], None] | None = None self._multi_touch = False self.__was_awake = True - self._children: list = [] @property def rect(self) -> rl.Rectangle: return self._rect def set_rect(self, rect: rl.Rectangle) -> None: - changed = self._rect.x != rect.x or self._rect.y != rect.y or self._rect.width != rect.width or self._rect.height != rect.height + changed = (self._rect.x != rect.x or self._rect.y != rect.y or + self._rect.width != rect.width or self._rect.height != rect.height) self._rect = rect if changed: self._update_layout_rects() @@ -52,21 +61,8 @@ class Widget(abc.ABC): @property def is_pressed(self) -> bool: - return any(self.__is_pressed) - - @property - def _is_pressed(self) -> bool: - return any(self.__is_pressed) - - @_is_pressed.setter - def _is_pressed(self, value: bool): - if value: - for i, tracked in enumerate(self._Widget__tracking_is_pressed): - if tracked: - self.__is_pressed[i] = True - else: - for i in range(len(self.__is_pressed)): - self.__is_pressed[i] = False + # if actually pressed or holding after release + return any(self.__is_pressed) or self._click_release_time is not None @property def enabled(self) -> bool: @@ -95,7 +91,7 @@ class Widget(abc.ABC): return self._touch_valid_callback() if self._touch_valid_callback else True def set_position(self, x: float, y: float) -> None: - changed = self._rect.x != x or self._rect.y != y + changed = (self._rect.x != x or self._rect.y != y) self._rect = rl.Rectangle(x, y, self._rect.width, self._rect.height) if changed: self._update_layout_rects() @@ -107,26 +103,40 @@ class Widget(abc.ABC): return self._rect return rl.get_collision_rec(self._rect, self._parent_rect) - def render(self, rect: rl.Rectangle = None) -> bool | int | None: + def render(self, rect: rl.Rectangle | None = None) -> bool | int | None: if rect is not None: self.set_rect(rect) self._update_state() + if self._click_release_time is not None and rl.get_time() >= self._click_release_time: + self._click_release_time = None + if not self.is_visible: return None self._layout() ret = self._render(self._rect) + if gui_app.show_touches: + self._draw_debug_rect() + # Keep track of whether mouse down started within the widget's rectangle if self.enabled and self.__was_awake: self._process_mouse_events() + else: + # TODO: ideally we emit release events when going disabled + self.__is_pressed = [False] * MAX_TOUCH_SLOTS + self.__tracking_is_pressed = [False] * MAX_TOUCH_SLOTS self.__was_awake = device.awake return ret + def _draw_debug_rect(self) -> None: + rl.draw_rectangle_lines(int(self._rect.x), int(self._rect.y), + max(int(self._rect.width), 1), max(int(self._rect.height), 1), rl.RED) + def _process_mouse_events(self) -> None: hit_rect = self._hit_rect touch_valid = self._touch_valid() @@ -186,6 +196,8 @@ class Widget(abc.ABC): def _handle_mouse_release(self, mouse_pos: MousePos) -> None: """Optionally handle mouse release events.""" + if self._click_delay is not None: + self._click_release_time = rl.get_time() + self._click_delay if self._click_callback: self._click_callback() @@ -193,225 +205,40 @@ class Widget(abc.ABC): """Optionally handle mouse events. This is called before rendering.""" # Default implementation does nothing, can be overridden by subclasses - def show_event(self): - """Optionally handle show event. Parent must manually call this""" - for child in self._children: - child.show_event() - - def hide_event(self): - """Optionally handle hide event. Parent must manually call this""" - for child in self._children: - child.hide_event() - - def _child(self, widget): - """Register a child widget for lifecycle propagation.""" + def _child(self, widget: W) -> W: + """ + Register a widget as a child. Lifecycle events (show/hide) propagate to registered children. + - If the widget is pushed onto the nav stack, do NOT register it (gui_app manages its lifecycle). + - If the widget is rendered inline in _render(), register it. + """ assert widget not in self._children, f"{type(widget).__name__} already a child of {type(self).__name__}" self._children.append(widget) return widget + _show_hide_depth = 0 + + def show_event(self): + """Called when widget becomes visible. Propagates to registered children.""" + if DEBUG: + print(f"{' ' * Widget._show_hide_depth}show_event: {type(self).__name__}") + Widget._show_hide_depth += 1 + for child in self._children: + child.show_event() + if DEBUG: + Widget._show_hide_depth -= 1 + + def hide_event(self): + """Called when widget is hidden. Propagates to registered children.""" + if DEBUG: + print(f"{' ' * Widget._show_hide_depth}hide_event: {type(self).__name__}") + Widget._show_hide_depth += 1 + for child in self._children: + child.hide_event() + if DEBUG: + Widget._show_hide_depth -= 1 + def dismiss(self, callback: Callable[[], None] | None = None): - """Dismiss this widget from the nav stack.""" + """Immediately dismiss the widget, firing the callback after.""" gui_app.pop_widget() if callback: callback() - - -SWIPE_AWAY_THRESHOLD = 80 # px to dismiss after releasing -START_DISMISSING_THRESHOLD = 40 # px to start dismissing while dragging -BLOCK_SWIPE_AWAY_THRESHOLD = 60 # px horizontal movement to block swipe away - -NAV_BAR_MARGIN = 6 -NAV_BAR_WIDTH = 205 -NAV_BAR_HEIGHT = 8 - -DISMISS_PUSH_OFFSET = 50 + NAV_BAR_MARGIN + NAV_BAR_HEIGHT # px extra to push down when dismissing -DISMISS_TIME_SECONDS = 1.5 - - -class NavBar(Widget): - def __init__(self): - super().__init__() - self.set_rect(rl.Rectangle(0, 0, NAV_BAR_WIDTH, NAV_BAR_HEIGHT)) - self._alpha = 1.0 - self._alpha_filter = FirstOrderFilter(1.0, 0.1, 1 / gui_app.target_fps) - self._fade_time = 0.0 - - def set_alpha(self, alpha: float) -> None: - self._alpha = alpha - self._fade_time = rl.get_time() - - def show_event(self): - super().show_event() - self._alpha = 1.0 - self._alpha_filter.x = 1.0 - self._fade_time = rl.get_time() - - def _render(self, _): - if rl.get_time() - self._fade_time > DISMISS_TIME_SECONDS: - self._alpha = 0.0 - alpha = self._alpha_filter.update(self._alpha) - - # white bar with black border - rl.draw_rectangle_rounded(self._rect, 1.0, 6, rl.Color(255, 255, 255, int(255 * 0.9 * alpha))) - rl.draw_rectangle_rounded_lines_ex(self._rect, 1.0, 6, 2, rl.Color(0, 0, 0, int(255 * 0.3 * alpha))) - - -class NavWidget(Widget, abc.ABC): - """ - A full screen widget that supports back navigation by swiping down from the top. - """ - - BACK_TOUCH_AREA_PERCENTAGE = 0.65 - - def __init__(self): - super().__init__() - self._back_callback: Callable[[], None] | None = None - self._back_button_start_pos: MousePos | None = None - self._swiping_away = False # currently swiping away - self._can_swipe_away = True # swipe away is blocked after certain horizontal movement - - self._pos_filter = BounceFilter(0.0, 0.1, 1 / gui_app.target_fps, bounce=1) - self._playing_dismiss_animation = False - self._trigger_animate_in = False - self._back_enabled: bool | Callable[[], bool] = True - self._nav_bar = NavBar() - - self._nav_bar_y_filter = FirstOrderFilter(0.0, 0.1, 1 / gui_app.target_fps) - - self._set_up = False - - @property - def back_enabled(self) -> bool: - return self._back_enabled() if callable(self._back_enabled) else self._back_enabled - - def set_back_enabled(self, enabled: bool | Callable[[], bool]) -> None: - self._back_enabled = enabled - - def set_back_callback(self, callback: Callable[[], None]) -> None: - self._back_callback = callback - - def _handle_mouse_event(self, mouse_event: MouseEvent) -> None: - super()._handle_mouse_event(mouse_event) - - if not self.back_enabled: - self._back_button_start_pos = None - self._swiping_away = False - self._can_swipe_away = True - return - - if mouse_event.left_pressed: - # user is able to swipe away if starting near top of screen, or anywhere if scroller is at top - self._pos_filter.update_alpha(0.04) - in_dismiss_area = mouse_event.pos.y < self._rect.height * self.BACK_TOUCH_AREA_PERCENTAGE - - scroller_at_top = False - vertical_scroller = False - # TODO: -20? snapping in WiFi dialog can make offset not be positive at the top - if hasattr(self, '_scroller'): - scroller_at_top = self._scroller.scroll_panel.get_offset() >= -20 and not self._scroller._horizontal - vertical_scroller = not self._scroller._horizontal - elif hasattr(self, '_scroll_panel'): - scroller_at_top = self._scroll_panel.get_offset() >= -20 and not self._scroll_panel._horizontal - vertical_scroller = not self._scroll_panel._horizontal - - # Vertical scrollers need to be at the top to swipe away to prevent erroneous swipes - if (not vertical_scroller and in_dismiss_area) or scroller_at_top: - self._can_swipe_away = True - self._back_button_start_pos = mouse_event.pos - - elif mouse_event.left_down: - if self._back_button_start_pos is not None: - # block swiping away if too much horizontal or upward movement - horizontal_movement = abs(mouse_event.pos.x - self._back_button_start_pos.x) > BLOCK_SWIPE_AWAY_THRESHOLD - upward_movement = mouse_event.pos.y - self._back_button_start_pos.y < -BLOCK_SWIPE_AWAY_THRESHOLD - if not self._swiping_away and (horizontal_movement or upward_movement): - self._can_swipe_away = False - self._back_button_start_pos = None - - # block horizontal swiping if now swiping away - if self._can_swipe_away: - if mouse_event.pos.y - self._back_button_start_pos.y > START_DISMISSING_THRESHOLD: # type: ignore - self._swiping_away = True - - elif mouse_event.left_released: - self._pos_filter.update_alpha(0.1) - # if far enough, trigger back navigation callback - if self._back_button_start_pos is not None: - if mouse_event.pos.y - self._back_button_start_pos.y > SWIPE_AWAY_THRESHOLD: - self._playing_dismiss_animation = True - - self._back_button_start_pos = None - self._swiping_away = False - - def _update_state(self): - super()._update_state() - - # Disable self's scroller while swiping away - if not self._set_up: - self._set_up = True - if hasattr(self, '_scroller'): - original_enabled = self._scroller._enabled - self._scroller.set_enabled(lambda: not self._swiping_away and (original_enabled() if callable(original_enabled) else original_enabled)) - elif hasattr(self, '_scroll_panel'): - original_enabled = self._scroll_panel.enabled - self._scroll_panel.set_enabled(lambda: not self._swiping_away and (original_enabled() if callable(original_enabled) else original_enabled)) - - if self._trigger_animate_in: - self._pos_filter.x = self._rect.height - self._nav_bar_y_filter.x = -NAV_BAR_MARGIN - NAV_BAR_HEIGHT - self._trigger_animate_in = False - - new_y = 0.0 - - if self._back_button_start_pos is not None: - last_mouse_event = gui_app.last_mouse_event - # push entire widget as user drags it away - new_y = max(last_mouse_event.pos.y - self._back_button_start_pos.y, 0) - if new_y < SWIPE_AWAY_THRESHOLD: - new_y /= 2 # resistance until mouse release would dismiss widget - - if self._swiping_away: - self._nav_bar.set_alpha(1.0) - - if self._playing_dismiss_animation: - new_y = self._rect.height + DISMISS_PUSH_OFFSET - - new_y = round(self._pos_filter.update(new_y)) - if abs(new_y) < 1 and self._pos_filter.velocity.x == 0.0: - new_y = self._pos_filter.x = 0.0 - - if new_y > self._rect.height + DISMISS_PUSH_OFFSET - 10: - if self._back_callback is not None: - self._back_callback() - - self._playing_dismiss_animation = False - self._back_button_start_pos = None - self._swiping_away = False - - self.set_position(self._rect.x, new_y) - - def render(self, rect: rl.Rectangle = None) -> bool | int | None: - ret = super().render(rect) - - if self.back_enabled: - bar_x = self._rect.x + (self._rect.width - self._nav_bar.rect.width) / 2 - if self._back_button_start_pos is not None or self._playing_dismiss_animation: - self._nav_bar_y_filter.x = NAV_BAR_MARGIN + self._pos_filter.x - else: - self._nav_bar_y_filter.update(NAV_BAR_MARGIN) - - self._nav_bar.set_position(bar_x, round(self._nav_bar_y_filter.x)) - self._nav_bar.render() - - # draw black above widget when dismissing - if self._rect.y > 0: - rl.draw_rectangle(int(self._rect.x), 0, int(self._rect.width), int(self._rect.y), rl.BLACK) - - return ret - - def show_event(self): - super().show_event() - # FIXME: we don't know the height of the rect at first show_event since it's before the first render :( - # so we need this hacky bool for now - self._trigger_animate_in = True - self._nav_bar.show_event() diff --git a/system/ui/widgets/button.py b/system/ui/widgets/button.py index 9c0ea75b4..36ef3beda 100644 --- a/system/ui/widgets/button.py +++ b/system/ui/widgets/button.py @@ -5,7 +5,7 @@ import pyray as rl from openpilot.system.ui.lib.application import gui_app, FontWeight, MousePos from openpilot.system.ui.widgets import Widget -from openpilot.system.ui.widgets.label import Label, UnifiedLabel +from openpilot.system.ui.widgets.label import Label from openpilot.common.filter_simple import FirstOrderFilter @@ -191,7 +191,7 @@ class IconButton(Widget): color = rl.Color(255, 255, 255, int(255 * 0.9 * 0.35 * self._opacity_filter.x)) draw_x = rect.x + (rect.width - self._texture.width) / 2 draw_y = rect.y + (rect.height - self._texture.height) / 2 - rl.draw_texture(self._texture, int(draw_x), int(draw_y), color) + rl.draw_texture_ex(self._texture, rl.Vector2(draw_x, draw_y), 0.0, 1.0, color) class SmallCircleIconButton(Widget): @@ -219,85 +219,7 @@ class SmallCircleIconButton(Widget): bg_txt = self._icon_bg_pressed_txt if self.is_pressed else self._icon_bg_txt icon_white = white - rl.draw_texture(bg_txt, int(self.rect.x), int(self.rect.y), white) + rl.draw_texture_ex(bg_txt, rl.Vector2(self.rect.x, self.rect.y), 0.0, 1.0, white) icon_x = self.rect.x + (self.rect.width - self._icon_txt.width) / 2 icon_y = self.rect.y + (self.rect.height - self._icon_txt.height) / 2 - rl.draw_texture(self._icon_txt, int(icon_x), int(icon_y), icon_white) - - -class SmallButton(Widget): - def __init__(self, text: str): - super().__init__() - self._opacity_filter = FirstOrderFilter(1.0, 0.1, 1 / gui_app.target_fps) - - self._load_assets() - - self._label = UnifiedLabel(text, 36, font_weight=FontWeight.MEDIUM, - text_color=rl.Color(255, 255, 255, int(255 * 0.9)), - alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER, - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE) - - self._bg_disabled_txt = None - - def _load_assets(self): - self.set_rect(rl.Rectangle(0, 0, 194, 100)) - self._bg_txt = gui_app.texture("icons_mici/setup/reset/small_button.png", 194, 100) - self._bg_pressed_txt = gui_app.texture("icons_mici/setup/reset/small_button_pressed.png", 194, 100) - - def set_text(self, text: str): - self._label.set_text(text) - - def set_opacity(self, opacity: float, smooth: bool = False): - if smooth: - self._opacity_filter.update(opacity) - else: - self._opacity_filter.x = opacity - - def _render(self, _): - if not self.enabled and self._bg_disabled_txt is not None: - rl.draw_texture(self._bg_disabled_txt, int(self.rect.x), int(self.rect.y), rl.Color(255, 255, 255, int(255 * self._opacity_filter.x))) - elif self.is_pressed: - rl.draw_texture(self._bg_pressed_txt, int(self.rect.x), int(self.rect.y), rl.Color(255, 255, 255, int(255 * self._opacity_filter.x))) - else: - rl.draw_texture(self._bg_txt, int(self.rect.x), int(self.rect.y), rl.Color(255, 255, 255, int(255 * self._opacity_filter.x))) - - opacity = 0.9 if self.enabled else 0.35 - self._label.set_color(rl.Color(255, 255, 255, int(255 * opacity * self._opacity_filter.x))) - self._label.render(self._rect) - - -class SmallRedPillButton(SmallButton): - def _load_assets(self): - self.set_rect(rl.Rectangle(0, 0, 194, 100)) - self._bg_txt = gui_app.texture("icons_mici/setup/small_red_pill.png", 194, 100) - self._bg_pressed_txt = gui_app.texture("icons_mici/setup/small_red_pill_pressed.png", 194, 100) - - -class SmallerRoundedButton(SmallButton): - def _load_assets(self): - self.set_rect(rl.Rectangle(0, 0, 150, 100)) - self._bg_txt = gui_app.texture("icons_mici/setup/smaller_button.png", 150, 100) - self._bg_disabled_txt = gui_app.texture("icons_mici/setup/smaller_button_disabled.png", 150, 100) - self._bg_pressed_txt = gui_app.texture("icons_mici/setup/smaller_button_pressed.png", 150, 100) - - -class WideRoundedButton(SmallButton): - def _load_assets(self): - self.set_rect(rl.Rectangle(0, 0, 316, 100)) - self._bg_txt = gui_app.texture("icons_mici/setup/medium_button_bg.png", 316, 100) - self._bg_pressed_txt = gui_app.texture("icons_mici/setup/medium_button_pressed_bg.png", 316, 100) - - -class WidishRoundedButton(SmallButton): - def _load_assets(self): - self.set_rect(rl.Rectangle(0, 0, 250, 100)) - self._bg_txt = gui_app.texture("icons_mici/setup/widish_button.png", 250, 100) - self._bg_pressed_txt = gui_app.texture("icons_mici/setup/widish_button_pressed.png", 250, 100) - self._bg_disabled_txt = gui_app.texture("icons_mici/setup/widish_button_disabled.png", 250, 100) - - -class FullRoundedButton(SmallButton): - def _load_assets(self): - self.set_rect(rl.Rectangle(0, 0, 520, 100)) - self._bg_txt = gui_app.texture("icons_mici/setup/reset/wide_button.png", 520, 100) - self._bg_pressed_txt = gui_app.texture("icons_mici/setup/reset/wide_button_pressed.png", 520, 100) + rl.draw_texture_ex(self._icon_txt, rl.Vector2(icon_x, icon_y), 0.0, 1.0, icon_white) diff --git a/system/ui/widgets/confirm_dialog.py b/system/ui/widgets/confirm_dialog.py index 724d71541..354483676 100644 --- a/system/ui/widgets/confirm_dialog.py +++ b/system/ui/widgets/confirm_dialog.py @@ -1,5 +1,5 @@ -from collections.abc import Callable import pyray as rl +from collections.abc import Callable from openpilot.system.ui.lib.application import gui_app, FontWeight from openpilot.system.ui.lib.multilang import tr from openpilot.system.ui.widgets import DialogResult @@ -18,7 +18,7 @@ BACKGROUND_COLOR = rl.Color(27, 27, 27, 255) class ConfirmDialog(Widget): - def __init__(self, text: str, confirm_text: str, cancel_text: str | None = None, rich: bool = False, on_close: Callable[[DialogResult], None] | None = None): + def __init__(self, text: str, confirm_text: str, cancel_text: str | None = None, rich: bool = False, callback: Callable[[DialogResult], None] | None = None): super().__init__() if cancel_text is None: cancel_text = tr("Cancel") @@ -27,8 +27,7 @@ class ConfirmDialog(Widget): self._cancel_button = Button(cancel_text, self._cancel_button_callback) self._confirm_button = Button(confirm_text, self._confirm_button_callback, button_style=ButtonStyle.PRIMARY) self._rich = rich - self._dialog_result = DialogResult.NO_ACTION - self._on_close = on_close + self._callback = callback self._cancel_text = cancel_text self._scroller = Scroller([self._html_renderer], line_separator=False, spacing=0) @@ -38,17 +37,15 @@ class ConfirmDialog(Widget): else: self._html_renderer.parse_html_content(text) - def reset(self): - self._dialog_result = DialogResult.NO_ACTION - self._on_close = on_close - def _cancel_button_callback(self): - self._dialog_result = DialogResult.CANCEL - if self._on_close: self._on_close(self._dialog_result) + gui_app.pop_widget() + if self._callback: + self._callback(DialogResult.CANCEL) def _confirm_button_callback(self): - self._dialog_result = DialogResult.CONFIRM - if self._on_close: self._on_close(self._dialog_result) + gui_app.pop_widget() + if self._callback: + self._callback(DialogResult.CONFIRM) def _render(self, rect: rl.Rectangle): dialog_x = OUTER_MARGIN if not self._rich else RICH_OUTER_MARGIN @@ -78,11 +75,9 @@ class ConfirmDialog(Widget): self._scroller.render(text_rect) if rl.is_key_pressed(rl.KeyboardKey.KEY_ENTER): - self._dialog_result = DialogResult.CONFIRM - if self._on_close: self._on_close(self._dialog_result) + self._confirm_button_callback() elif rl.is_key_pressed(rl.KeyboardKey.KEY_ESCAPE): - self._dialog_result = DialogResult.CANCEL - if self._on_close: self._on_close(self._dialog_result) + self._cancel_button_callback() if self._cancel_text: self._confirm_button.render(confirm_button) @@ -92,8 +87,6 @@ class ConfirmDialog(Widget): full_confirm_button = rl.Rectangle(dialog_rect.x + MARGIN, button_y, full_button_width, BUTTON_HEIGHT) self._confirm_button.render(full_confirm_button) - return self._dialog_result - def alert_dialog(message: str, button_text: str | None = None): if button_text is None: diff --git a/system/ui/widgets/html_render.py b/system/ui/widgets/html_render.py index 7d90d5692..77fca9fe3 100644 --- a/system/ui/widgets/html_render.py +++ b/system/ui/widgets/html_render.py @@ -260,7 +260,7 @@ class HtmlModal(Widget): super().__init__() self._content = HtmlRenderer(file_path=file_path, text=text) self._scroll_panel = GuiScrollPanel() - self._ok_button = Button(tr("OK"), click_callback=lambda: gui_app.set_modal_overlay(None), button_style=ButtonStyle.PRIMARY) + self._ok_button = Button(tr("OK"), click_callback=gui_app.pop_widget, button_style=ButtonStyle.PRIMARY) def _render(self, rect: rl.Rectangle): margin = 50 diff --git a/system/ui/widgets/icon_widget.py b/system/ui/widgets/icon_widget.py new file mode 100644 index 000000000..bf7790b93 --- /dev/null +++ b/system/ui/widgets/icon_widget.py @@ -0,0 +1,16 @@ +import pyray as rl +from openpilot.system.ui.lib.application import gui_app +from openpilot.system.ui.widgets import Widget + + +class IconWidget(Widget): + def __init__(self, image_path: str, size: tuple[int, int], opacity: float = 1.0): + super().__init__() + self._texture = gui_app.texture(image_path, size[0], size[1]) + self._opacity = opacity + self.set_rect(rl.Rectangle(0, 0, float(size[0]), float(size[1]))) + self.set_enabled(False) + + def _render(self, _) -> None: + color = rl.Color(255, 255, 255, int(self._opacity * 255)) + rl.draw_texture_ex(self._texture, rl.Vector2(self._rect.x, self._rect.y), 0.0, 1.0, color) diff --git a/system/ui/widgets/input_dialog.py b/system/ui/widgets/input_dialog.py deleted file mode 100644 index b71b0df3f..000000000 --- a/system/ui/widgets/input_dialog.py +++ /dev/null @@ -1,43 +0,0 @@ -from collections.abc import Callable - -from openpilot.system.ui.widgets import Widget, DialogResult -from openpilot.system.ui.widgets.keyboard import Keyboard - - -class InputDialog(Widget): - def __init__(self, title: str, default_text: str = "", hint_text: str = "", on_close: Callable[[DialogResult, str], None] | None = None): - super().__init__() - self._default_text = default_text - self._on_close = on_close - self._dialog_result = DialogResult.NO_ACTION - - self._keyboard = Keyboard(callback=self._on_keyboard_result) - self._keyboard.set_title(title) - self._keyboard.set_text(default_text) - - def _on_keyboard_result(self, result: DialogResult): - if self._dialog_result != DialogResult.NO_ACTION: - return - self._dialog_result = result - if self._on_close: - self._on_close(result, self._keyboard.text) - - @property - def result(self) -> DialogResult: - return self._dialog_result - - @property - def text(self) -> str: - return self._keyboard.text - - def show_event(self): - super().show_event() - self._dialog_result = DialogResult.NO_ACTION - self._keyboard.show_event() - self._keyboard.clear() - if self._default_text: - self._keyboard.set_text(self._default_text) - - def _render(self, rect): - self._keyboard.render(rect) - return self._dialog_result diff --git a/system/ui/widgets/keyboard.py b/system/ui/widgets/keyboard.py index 0eec40611..49c59a431 100644 --- a/system/ui/widgets/keyboard.py +++ b/system/ui/widgets/keyboard.py @@ -7,7 +7,7 @@ import pyray as rl from openpilot.system.ui.lib.application import gui_app, FontWeight from openpilot.system.ui.lib.multilang import tr -from openpilot.system.ui.widgets import Widget, DialogResult +from openpilot.system.ui.widgets import DialogResult, Widget from openpilot.system.ui.widgets.button import ButtonStyle, Button from openpilot.system.ui.widgets.inputbox import InputBox from openpilot.system.ui.widgets.label import Label @@ -59,14 +59,8 @@ KEYBOARD_LAYOUTS = { class Keyboard(Widget): - def __init__( - self, - max_text_size: int = 255, - min_text_size: int = 0, - password_mode: bool = False, - show_password_toggle: bool = False, - callback: Callable[[DialogResult], None] | None = None, - ): + def __init__(self, max_text_size: int = 255, min_text_size: int = 0, password_mode: bool = False, show_password_toggle: bool = False, + callback: Callable[[DialogResult], None] | None = None): super().__init__() self._layout_name: Literal["lowercase", "uppercase", "numbers", "specials"] = "lowercase" self._caps_lock = False @@ -86,9 +80,6 @@ class Keyboard(Widget): self._backspace_press_time: float = 0.0 self._backspace_last_repeat: float = 0.0 - self._render_return_status = -1 - self._first_render = False - self._skip_input = False self._cancel_button = Button(lambda: tr("Cancel"), self._cancel_button_callback) self._eye_button = Button("", self._eye_button_callback, button_style=ButtonStyle.TRANSPARENT) @@ -109,18 +100,12 @@ class Keyboard(Widget): for _, key in enumerate(keys): if key in self._key_icons: texture = self._key_icons[key] - self._all_keys[key] = Button( - "", - partial(self._key_callback, key), - icon=texture, - button_style=ButtonStyle.PRIMARY if key == ENTER_KEY else ButtonStyle.KEYBOARD, - multi_touch=True, - ) + self._all_keys[key] = Button("", partial(self._key_callback, key), icon=texture, + button_style=ButtonStyle.PRIMARY if key == ENTER_KEY else ButtonStyle.KEYBOARD, multi_touch=True) else: self._all_keys[key] = Button(key, partial(self._key_callback, key), button_style=ButtonStyle.KEYBOARD, font_size=85, multi_touch=True) - self._all_keys[CAPS_LOCK_KEY] = Button( - "", partial(self._key_callback, CAPS_LOCK_KEY), icon=self._key_icons[CAPS_LOCK_KEY], button_style=ButtonStyle.KEYBOARD, multi_touch=True - ) + self._all_keys[CAPS_LOCK_KEY] = Button("", partial(self._key_callback, CAPS_LOCK_KEY), icon=self._key_icons[CAPS_LOCK_KEY], + button_style=ButtonStyle.KEYBOARD, multi_touch=True) def set_text(self, text: str): self._input_box.text = text @@ -142,39 +127,24 @@ class Keyboard(Widget): def set_callback(self, callback: Callable[[DialogResult], None] | None): self._callback = callback - def show_event(self): - super().show_event() - self._skip_input = True - - def _process_mouse_events(self): - if not self._skip_input: - super()._process_mouse_events() - - def _cancel_button_callback(self): - self.clear() - if self in gui_app._nav_stack: - gui_app.pop_widget() - else: - self._render_return_status = 0 - if self._callback: - self._callback(DialogResult.CANCEL) - def _eye_button_callback(self): self._password_mode = not self._password_mode + def _cancel_button_callback(self): + self.clear() + gui_app.pop_widget() + if self._callback: + self._callback(DialogResult.CANCEL) + def _key_callback(self, k): if k == ENTER_KEY: - if self in gui_app._nav_stack: - gui_app.pop_widget() - else: - self._render_return_status = 1 + gui_app.pop_widget() if self._callback: self._callback(DialogResult.CONFIRM) else: self.handle_key_press(k) def _render(self, rect: rl.Rectangle): - self._skip_input = False rect = rl.Rectangle(rect.x + CONTENT_MARGIN, rect.y + CONTENT_MARGIN, rect.width - 2 * CONTENT_MARGIN, rect.height - 2 * CONTENT_MARGIN) self._title.render(rl.Rectangle(rect.x, rect.y, rect.width, 95)) self._sub_title.render(rl.Rectangle(rect.x, rect.y + 95, rect.width, 60)) @@ -236,8 +206,6 @@ class Keyboard(Widget): self._all_keys[key].set_enabled(is_enabled) self._all_keys[key].render(key_rect) - return self._render_return_status - def _render_input_area(self, input_rect: rl.Rectangle): if self._show_password_toggle: self._input_box.set_password_mode(self._password_mode) @@ -289,7 +257,6 @@ class Keyboard(Widget): def reset(self, min_text_size: int | None = None): if min_text_size is not None: self._min_text_size = min_text_size - self._render_return_status = -1 self._last_shift_press_time = 0 self._backspace_pressed = False self._backspace_press_time = 0.0 @@ -298,15 +265,18 @@ class Keyboard(Widget): if __name__ == "__main__": - gui_app.init_window("Keyboard") - keyboard = Keyboard(min_text_size=8, show_password_toggle=True) - for _ in gui_app.render(): - keyboard.set_title("Keyboard Input", "Type your text below") - result = keyboard.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) - if result == 1: + def callback(result: DialogResult): + if result == DialogResult.CONFIRM: print(f"You typed: {keyboard.text}") - gui_app.request_close() - elif result == 0: + elif result == DialogResult.CANCEL: print("Canceled") - gui_app.request_close() + gui_app.request_close() + + gui_app.init_window("Keyboard") + keyboard = Keyboard(min_text_size=8, show_password_toggle=True, callback=callback) + keyboard.set_title("Keyboard Input", "Type your text below") + + gui_app.push_widget(keyboard) + for _ in gui_app.render(): + pass gui_app.close() diff --git a/system/ui/widgets/label.py b/system/ui/widgets/label.py index 173f104ef..7fe25ab51 100644 --- a/system/ui/widgets/label.py +++ b/system/ui/widgets/label.py @@ -27,166 +27,6 @@ class ScrollState(IntEnum): SCROLLING = 1 -# TODO: merge anything new here to master -class MiciLabel(Widget): - def __init__(self, - text: str, - font_size: int = DEFAULT_TEXT_SIZE, - width: int = None, - color: rl.Color = DEFAULT_TEXT_COLOR, - font_weight: FontWeight = FontWeight.NORMAL, - alignment: int = rl.GuiTextAlignment.TEXT_ALIGN_LEFT, - alignment_vertical: int = rl.GuiTextAlignmentVertical.TEXT_ALIGN_TOP, - spacing: int = 0, - line_height: int = None, - elide_right: bool = True, - wrap_text: bool = False, - scroll: bool = False): - super().__init__() - self.text = text - self.wrapped_text: list[str] = [] - self.font_size = font_size - self.width = width - self.color = color - self.font_weight = font_weight - self.alignment = alignment - self.alignment_vertical = alignment_vertical - self.spacing = spacing - self.line_height = line_height if line_height is not None else font_size - self.elide_right = elide_right - self.wrap_text = wrap_text - self._height = 0 - - # Scroll state - self.scroll = scroll - self._needs_scroll = False - self._scroll_offset = 0 - self._scroll_pause_t: float | None = None - self._scroll_state: ScrollState = ScrollState.STARTING - - assert not (self.scroll and self.wrap_text), "Cannot enable both scroll and wrap_text" - assert not (self.scroll and self.elide_right), "Cannot enable both scroll and elide_right" - - self.set_text(text) - - @property - def text_height(self): - return self._height - - def set_font_size(self, font_size: int): - self.font_size = font_size - self.set_text(self.text) - - def set_width(self, width: int): - self.width = width - self._rect.width = width - self.set_text(self.text) - - def set_text(self, txt: str): - self.text = txt - text_size = measure_text_cached(gui_app.font(self.font_weight), self.text, self.font_size, self.spacing) - if self.width is not None: - self._rect.width = self.width - else: - self._rect.width = text_size.x - - if self.wrap_text: - self.wrapped_text = wrap_text(gui_app.font(self.font_weight), self.text, self.font_size, int(self._rect.width)) - self._height = len(self.wrapped_text) * self.line_height - elif self.scroll: - self._needs_scroll = self.scroll and text_size.x > self._rect.width - self._rect.height = text_size.y - - def set_color(self, color: rl.Color): - self.color = color - - def set_font_weight(self, font_weight: FontWeight): - self.font_weight = font_weight - self.set_text(self.text) - - def _render(self, rect: rl.Rectangle): - # Only scissor when we know there is a single scrolling line - if self._needs_scroll: - rl.begin_scissor_mode(int(rect.x), int(rect.y), int(rect.width), int(rect.height)) - - font = gui_app.font(self.font_weight) - - text_y_offset = 0 - # Draw the text in the specified rectangle - lines = self.wrapped_text or [self.text] - if self.alignment_vertical == rl.GuiTextAlignmentVertical.TEXT_ALIGN_BOTTOM: - lines = lines[::-1] - - for display_text in lines: - text_size = measure_text_cached(font, display_text, self.font_size, self.spacing) - - # Elide text to fit within the rectangle - if self.elide_right and text_size.x > rect.width: - ellipsis = "..." - left, right = 0, len(display_text) - while left < right: - mid = (left + right) // 2 - candidate = display_text[:mid] + ellipsis - candidate_size = measure_text_cached(font, candidate, self.font_size, self.spacing) - if candidate_size.x <= rect.width: - left = mid + 1 - else: - right = mid - display_text = display_text[: left - 1] + ellipsis if left > 0 else ellipsis - text_size = measure_text_cached(font, display_text, self.font_size, self.spacing) - - # Handle scroll state - elif self.scroll and self._needs_scroll: - if self._scroll_state == ScrollState.STARTING: - if self._scroll_pause_t is None: - self._scroll_pause_t = rl.get_time() + 2.0 - if rl.get_time() >= self._scroll_pause_t: - self._scroll_state = ScrollState.SCROLLING - self._scroll_pause_t = None - - elif self._scroll_state == ScrollState.SCROLLING: - self._scroll_offset -= 0.8 / 60. * gui_app.target_fps - # don't fully hide - if self._scroll_offset <= -text_size.x - self._rect.width / 3: - self._scroll_offset = 0 - self._scroll_state = ScrollState.STARTING - self._scroll_pause_t = None - - # Calculate horizontal position based on alignment - text_x = rect.x + { - rl.GuiTextAlignment.TEXT_ALIGN_LEFT: 0, - rl.GuiTextAlignment.TEXT_ALIGN_CENTER: (rect.width - text_size.x) / 2, - rl.GuiTextAlignment.TEXT_ALIGN_RIGHT: rect.width - text_size.x, - }.get(self.alignment, 0) + self._scroll_offset - - # Calculate vertical position based on alignment - text_y = rect.y + { - rl.GuiTextAlignmentVertical.TEXT_ALIGN_TOP: 0, - rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE: (rect.height - text_size.y) / 2, - rl.GuiTextAlignmentVertical.TEXT_ALIGN_BOTTOM: rect.height - text_size.y, - }.get(self.alignment_vertical, 0) - text_y += text_y_offset - - rl.draw_text_ex(font, display_text, rl.Vector2(round(text_x), round(text_y)), self.font_size, self.spacing, self.color) - # Draw 2nd instance for scrolling - if self._needs_scroll and self._scroll_state != ScrollState.STARTING: - text2_scroll_offset = text_size.x + self._rect.width / 3 - rl.draw_text_ex(font, display_text, rl.Vector2(round(text_x + text2_scroll_offset), round(text_y)), self.font_size, self.spacing, self.color) - if self.alignment_vertical == rl.GuiTextAlignmentVertical.TEXT_ALIGN_BOTTOM: - text_y_offset -= self.line_height - else: - text_y_offset += self.line_height - - if self._needs_scroll: - # draw black fade on left and right - fade_width = 20 - rl.draw_rectangle_gradient_h(int(rect.x + rect.width - fade_width), int(rect.y), fade_width, int(rect.height), rl.BLANK, rl.BLACK) - if self._scroll_state != ScrollState.STARTING: - rl.draw_rectangle_gradient_h(int(rect.x), int(rect.y), fade_width, int(rect.height), rl.BLACK, rl.BLANK) - - rl.end_scissor_mode() - - # TODO: This should be a Widget class def gui_label( rect: rl.Rectangle, @@ -233,7 +73,7 @@ def gui_label( # Draw the text in the specified rectangle # TODO: add wrapping and proper centering for multiline text - rl.draw_text_ex(font, display_text, rl.Vector2(round(text_x), round(text_y)), font_size, 0, color) + rl.draw_text_ex(font, display_text, rl.Vector2(text_x, text_y), font_size, 0, color) def gui_text_box( @@ -393,7 +233,7 @@ class Label(Widget): class UnifiedLabel(Widget): """ - Unified label widget that combines functionality from gui_label, gui_text_box, Label, and MiciLabel. + Unified label widget that combines functionality from gui_label, gui_text_box, and Label. Supports: - Emoji rendering @@ -402,11 +242,12 @@ class UnifiedLabel(Widget): - Proper multiline vertical alignment - Height calculation for layout purposes """ - SHIMMER_BAND_WIDTH = 0.3 - SHIMMER_BLUR_RADIUS = 0.12 - SHIMMER_CYCLE_PERIOD = 2.5 - SHIMMER_SWEEP_FRACTION = 0.9 - SHIMMER_LOW_OPACITY = 0.65 + # Shimmer constants + SHIMMER_BAND_WIDTH = 0.3 # shimmer width as fraction of text width + SHIMMER_BLUR_RADIUS = 0.12 # gaussian blur as fraction of text width + SHIMMER_CYCLE_PERIOD = 2.5 # seconds per full shimmer cycle + SHIMMER_SWEEP_FRACTION = 0.9 # fraction of cycle spent sweeping (rest is pause) + SHIMMER_LOW_OPACITY = 0.65 # text opacity at rest, shimmer brings to 1.0 def __init__(self, text: str | Callable[[], str], @@ -439,6 +280,8 @@ class UnifiedLabel(Widget): self._line_height = line_height * 0.9 self._letter_spacing = letter_spacing # 0.1 = 10% self._spacing_pixels = font_size * letter_spacing + + # Shimmer state self._shimmer = shimmer self._shimmer_start_time = 0.0 @@ -477,6 +320,14 @@ class UnifiedLabel(Widget): """Get the current text content.""" return str(_resolve_value(self._text)) + @property + def font_size(self) -> int: + return self._font_size + + @property + def text_width(self) -> float: + return max((s.x for s in self._cached_line_sizes), default=0.0) + def set_text_color(self, color: rl.Color): """Update the text color.""" self._text_color = color @@ -504,7 +355,7 @@ class UnifiedLabel(Widget): new_line_height = line_height * 0.9 if self._line_height != new_line_height: self._line_height = new_line_height - self._cached_text = None + self._cached_text = None # Invalidate cache (affects total height) def set_font_weight(self, font_weight: FontWeight): """Update the font weight.""" @@ -527,7 +378,13 @@ class UnifiedLabel(Widget): self._scroll_pause_t = None self._scroll_state = ScrollState.STARTING + def show_event(self): + super().show_event() + if self._shimmer: + self.reset_shimmer() + def reset_shimmer(self, offset: float = 0.0): + """Reset shimmer animation timing.""" self._shimmer_start_time = rl.get_time() + offset def set_max_width(self, max_width: int | None): @@ -647,25 +504,6 @@ class UnifiedLabel(Widget): return self._cached_total_height return 0.0 - def _compute_shimmer_alpha(self, char_center_x: float, text_left: float, text_width: float) -> float: - if text_width <= 0: - return self.SHIMMER_LOW_OPACITY - - elapsed = rl.get_time() - self._shimmer_start_time - sigma = text_width * self.SHIMMER_BLUR_RADIUS - - t_raw = (elapsed % self.SHIMMER_CYCLE_PERIOD) / self.SHIMMER_CYCLE_PERIOD - t_clamped = max(0.0, min(t_raw / self.SHIMMER_SWEEP_FRACTION, 1.0)) - t = t_clamped * t_clamped * (3.0 - 2.0 * t_clamped) - - margin = text_width * self.SHIMMER_BAND_WIDTH - text_right = text_left + text_width - center = text_right + margin - t * (text_width + 2.0 * margin) - - d = char_center_x - center - shimmer = math.exp(-0.5 * d * d / (sigma * sigma)) if sigma > 0 else 0.0 - return self.SHIMMER_LOW_OPACITY + (1.0 - self.SHIMMER_LOW_OPACITY) * shimmer - def _render(self, _): """Render the label.""" if self._rect.width <= 0 or self._rect.height <= 0: @@ -792,11 +630,34 @@ class UnifiedLabel(Widget): # draw black fade on left and right fade_width = 20 rl.draw_rectangle_gradient_h(int(self._rect.x + self._rect.width - fade_width), int(self._rect.y), fade_width, int(self._rect.height), rl.BLANK, rl.BLACK) - if self._scroll_state != ScrollState.STARTING: + + # stop drawing left fade once text scrolls past + text_width = visible_sizes[0].x if visible_sizes else 0 + first_copy_in_view = self._scroll_offset + text_width > 0 + draw_left_fade = self._scroll_state != ScrollState.STARTING and first_copy_in_view + if draw_left_fade: rl.draw_rectangle_gradient_h(int(self._rect.x), int(self._rect.y), fade_width, int(self._rect.height), rl.BLACK, rl.BLANK) rl.end_scissor_mode() + def _shimmer_alpha(self, char_x: float, shimmer_left: float, shimmer_width: float) -> float: + """Compute shimmer opacity multiplier for a character at the given x position.""" + sigma = shimmer_width * self.SHIMMER_BLUR_RADIUS + if sigma <= 0: + return self.SHIMMER_LOW_OPACITY + + elapsed = rl.get_time() - self._shimmer_start_time + t_raw = (elapsed % self.SHIMMER_CYCLE_PERIOD) / self.SHIMMER_CYCLE_PERIOD + t_clamped = max(0.0, min(t_raw / self.SHIMMER_SWEEP_FRACTION, 1.0)) + t = t_clamped * t_clamped * (3.0 - 2.0 * t_clamped) # smoothstep + + margin = shimmer_width * self.SHIMMER_BAND_WIDTH + center = shimmer_left + shimmer_width + margin - t * (shimmer_width + 2.0 * margin) + + d = char_x - center + shimmer = math.exp(-0.5 * d * d / (sigma * sigma)) + return self.SHIMMER_LOW_OPACITY + (1.0 - self.SHIMMER_LOW_OPACITY) * shimmer + def _render_line(self, line, size, emojis, current_y, x_offset=0.0): # Calculate horizontal position if self._alignment == rl.GuiTextAlignment.TEXT_ALIGN_LEFT: @@ -809,21 +670,13 @@ class UnifiedLabel(Widget): line_x = self._rect.x + self._text_padding line_x += self._scroll_offset + x_offset - if self._shimmer and not emojis and line: - base_alpha = self._text_color.a / 255.0 - text_width = max(size.x, 1.0) - cursor_x = line_x - for char in line: - char_width = measure_text_cached(self._font, char, self._font_size, self._spacing_pixels).x - char_center_x = cursor_x + char_width / 2.0 - shimmer_alpha = self._compute_shimmer_alpha(char_center_x, line_x, text_width) - char_alpha = int(255 * base_alpha * shimmer_alpha) - char_color = rl.Color(self._text_color.r, self._text_color.g, self._text_color.b, char_alpha) - rl.draw_text_ex(self._font, char, rl.Vector2(cursor_x, current_y), self._font_size, self._spacing_pixels, char_color) - cursor_x += char_width - return + if self._shimmer: + self._render_line_shimmer(line, line_x, current_y) + else: + # Render line with emojis + self._render_line_normal(line, emojis, line_x, current_y) - # Render line with emojis + def _render_line_normal(self, line, emojis, line_x, current_y): line_pos = rl.Vector2(line_x, current_y) prev_index = 0 @@ -847,3 +700,23 @@ class UnifiedLabel(Widget): text_after = line[prev_index:] if text_after: rl.draw_text_ex(self._font, text_after, line_pos, self._font_size, self._spacing_pixels, self._text_color) + + def _render_line_shimmer(self, line, line_x, current_y): + # Shimmer range based on widest line so sweep is even across all lines + max_width = self.text_width + if self._alignment == rl.GuiTextAlignment.TEXT_ALIGN_RIGHT: + shimmer_left = self._rect.x + self._rect.width - self._text_padding - max_width + elif self._alignment == rl.GuiTextAlignment.TEXT_ALIGN_CENTER: + shimmer_left = self._rect.x + (self._rect.width - max_width) / 2 + else: + shimmer_left = self._rect.x + self._text_padding + + base_a = self._text_color.a / 255.0 + cursor_x = line_x + for ch in line: + char_width = measure_text_cached(self._font, ch, self._font_size, self._spacing_pixels).x + char_center_x = cursor_x + char_width / 2.0 + alpha = int(255 * self._shimmer_alpha(char_center_x, shimmer_left, max_width) * base_a) + color = rl.Color(self._text_color.r, self._text_color.g, self._text_color.b, alpha) + rl.draw_text_ex(self._font, ch, rl.Vector2(cursor_x, current_y), self._font_size, 0, color) + cursor_x += char_width + self._spacing_pixels diff --git a/system/ui/widgets/layouts.py b/system/ui/widgets/layouts.py new file mode 100644 index 000000000..6bbc49e92 --- /dev/null +++ b/system/ui/widgets/layouts.py @@ -0,0 +1,59 @@ +from enum import IntFlag +from openpilot.system.ui.widgets import Widget + + +class Alignment(IntFlag): + LEFT = 0 + # TODO: implement + # H_CENTER = 2 + # RIGHT = 4 + + TOP = 8 + V_CENTER = 16 + BOTTOM = 32 + + +class HBoxLayout(Widget): + """ + A Widget that lays out child Widgets horizontally. + """ + + def __init__(self, widgets: list[Widget] | None = None, spacing: int = 0, + alignment: Alignment = Alignment.LEFT | Alignment.V_CENTER): + super().__init__() + self._spacing = spacing + self._alignment = alignment + + if widgets is not None: + for widget in widgets: + self.add_widget(widget) + + @property + def widgets(self) -> list[Widget]: + return self._children + + def add_widget(self, widget: Widget) -> None: + self._child(widget) + + def _render(self, _): + visible_widgets = [w for w in self._children if w.is_visible] + + cur_offset_x = 0 + + for idx, widget in enumerate(visible_widgets): + spacing = self._spacing if (idx > 0) else 0 + + x = self._rect.x + cur_offset_x + spacing + cur_offset_x += widget.rect.width + spacing + + if self._alignment & Alignment.TOP: + y = self._rect.y + elif self._alignment & Alignment.BOTTOM: + y = self._rect.y + self._rect.height - widget.rect.height + else: # center + y = self._rect.y + (self._rect.height - widget.rect.height) / 2 + + # Update widget position and render + widget.set_position(x, y) + widget.set_parent_rect(self._rect) + widget.render() diff --git a/system/ui/widgets/list_view.py b/system/ui/widgets/list_view.py index 9605d22ce..82613c37c 100644 --- a/system/ui/widgets/list_view.py +++ b/system/ui/widgets/list_view.py @@ -2,7 +2,6 @@ import os import pyray as rl from collections.abc import Callable from abc import ABC -from openpilot.common.params import Params from openpilot.system.ui.lib.application import gui_app, FontWeight, MousePos from openpilot.system.ui.lib.multilang import tr from openpilot.system.ui.lib.text_measure import measure_text_cached @@ -11,7 +10,6 @@ from openpilot.system.ui.widgets.button import Button, ButtonStyle from openpilot.system.ui.widgets.toggle import Toggle, WIDTH as TOGGLE_WIDTH, HEIGHT as TOGGLE_HEIGHT from openpilot.system.ui.widgets.label import gui_label from openpilot.system.ui.widgets.html_render import HtmlRenderer, ElementType -from openpilot.common.filter_simple import FirstOrderFilter ITEM_BASE_WIDTH = 600 ITEM_BASE_HEIGHT = 170 @@ -59,9 +57,8 @@ class ItemAction(Widget, ABC): class ToggleAction(ItemAction): - def __init__( - self, initial_state: bool = False, width: int = TOGGLE_WIDTH, enabled: bool | Callable[[], bool] = True, callback: Callable[[bool], None] | None = None - ): + def __init__(self, initial_state: bool = False, width: int = TOGGLE_WIDTH, enabled: bool | Callable[[], bool] = True, + callback: Callable[[bool], None] | None = None): super().__init__(width, enabled) self.toggle = Toggle(initial_state=initial_state, callback=callback) @@ -138,15 +135,9 @@ class ButtonAction(ItemAction): value_text = self.value if value_text: value_rect = rl.Rectangle(rect.x, rect.y, rect.width - BUTTON_WIDTH - TEXT_PADDING, rect.height) - gui_label( - value_rect, - value_text, - font_size=ITEM_TEXT_FONT_SIZE, - color=ITEM_TEXT_VALUE_COLOR, - font_weight=FontWeight.NORMAL, - alignment=rl.GuiTextAlignment.TEXT_ALIGN_LEFT, - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE, - ) + gui_label(value_rect, value_text, font_size=ITEM_TEXT_FONT_SIZE, color=ITEM_TEXT_VALUE_COLOR, + font_weight=FontWeight.NORMAL, alignment=rl.GuiTextAlignment.TEXT_ALIGN_LEFT, + alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE) # TODO: just use the generic Widget click callbacks everywhere, no returning from render pressed = self._pressed @@ -173,15 +164,9 @@ class TextAction(ItemAction): return text_width + TEXT_PADDING def _render(self, rect: rl.Rectangle) -> bool: - gui_label( - self._rect, - self.text, - font_size=ITEM_TEXT_FONT_SIZE, - color=self.color, - font_weight=FontWeight.NORMAL, - alignment=rl.GuiTextAlignment.TEXT_ALIGN_RIGHT, - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE, - ) + gui_label(self._rect, self.text, font_size=ITEM_TEXT_FONT_SIZE, color=self.color, + font_weight=FontWeight.NORMAL, alignment=rl.GuiTextAlignment.TEXT_ALIGN_RIGHT, + alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE) return False def set_text(self, text: str | Callable[[], str]): @@ -189,14 +174,8 @@ class TextAction(ItemAction): class DualButtonAction(ItemAction): - def __init__( - self, - left_text: str | Callable[[], str], - right_text: str | Callable[[], str], - left_callback: Callable = None, - right_callback: Callable = None, - enabled: bool | Callable[[], bool] = True, - ): + def __init__(self, left_text: str | Callable[[], str], right_text: str | Callable[[], str], left_callback: Callable | None = None, + right_callback: Callable | None = None, enabled: bool | Callable[[], bool] = True): super().__init__(width=0, enabled=enabled) # Width 0 means use full width self.left_button = Button(left_text, click_callback=left_callback, button_style=ButtonStyle.NORMAL, text_padding=0) self.right_button = Button(right_text, click_callback=right_callback, button_style=ButtonStyle.DANGER, text_padding=0) @@ -228,7 +207,7 @@ class DualButtonAction(ItemAction): class MultipleButtonAction(ItemAction): - def __init__(self, buttons: list[str | Callable[[], str]], button_width: int, selected_index: int = 0, callback: Callable = None): + def __init__(self, buttons: list[str | Callable[[], str]], button_width: int, selected_index: int = 0, callback: Callable | None = None): super().__init__(width=len(buttons) * button_width + (len(buttons) - 1) * RIGHT_ITEM_PADDING, enabled=True) self.buttons = buttons self.button_width = button_width @@ -290,164 +269,31 @@ class MultipleButtonAction(ItemAction): self.callback(i) -class CategoryButtonsAction(ItemAction): - def __init__(self, buttons: list[tuple[str | Callable[[], str], Callable]], button_width: int = 150, enabled: bool | Callable[[], bool] = True): - # Calculate width_hint based on actual text content (matches _render logic) - padding = 20 # 10px per side - total_text_width = 0 - - for label, _ in buttons: - text = _resolve_value(label, "") - text_size = measure_text_cached(gui_app.font(FontWeight.MEDIUM), text, BUTTON_FONT_SIZE) - total_text_width += text_size.x + padding - - total_width = total_text_width + (len(buttons) - 1) * RIGHT_ITEM_PADDING - - super().__init__(width=total_width, enabled=enabled) - self.buttons = buttons - self._font = gui_app.font(FontWeight.MEDIUM) - - def _render(self, rect: rl.Rectangle): - spacing = RIGHT_ITEM_PADDING - button_y = rect.y + (rect.height - BUTTON_HEIGHT) / 2 - - # Calculate per-button width based on text + padding, scaled to fit - padding = 20 # 10px per side - button_widths = [] - ideal_total = 0 - - for label, _ in self.buttons: - text = _resolve_value(label, "") - text_size = measure_text_cached(self._font, text, BUTTON_FONT_SIZE) - ideal_width = text_size.x + padding - button_widths.append(ideal_width) - ideal_total += ideal_width - - ideal_total += (len(self.buttons) - 1) * spacing - - # Scale proportionally if total exceeds available space - if ideal_total > rect.width: - scale = rect.width / ideal_total - button_widths = [max(80, w * scale) for w in button_widths] - else: - # Ensure minimum width - button_widths = [max(80, w) for w in button_widths] - - # Start from left edge of rect - use cumulative sum for correct positioning - current_button_x = rect.x - - for i, (label, _) in enumerate(self.buttons): - btn_w = button_widths[i] - button_rect = rl.Rectangle(current_button_x, button_y, btn_w, BUTTON_HEIGHT) - - # Check button state - mouse_pos = rl.get_mouse_position() - is_pressed = rl.check_collision_point_rec(mouse_pos, button_rect) and self.enabled and self.is_pressed - - bg_color = rl.Color(57, 57, 57, 255) # Gray - if is_pressed: - bg_color = rl.Color(74, 74, 74, 255) # Dark gray - if not self.enabled: - bg_color = rl.Color(bg_color.r, bg_color.g, bg_color.b, 150) # Dim - - rl.draw_rectangle_rounded(button_rect, 1.0, 20, bg_color) - - # Draw text with proper centering - text = _resolve_value(label, "") - text_size = measure_text_cached(self._font, text, BUTTON_FONT_SIZE) - text_x = current_button_x + (btn_w - text_size.x) / 2 - text_y = button_y + (BUTTON_HEIGHT - text_size.y) / 2 - text_color = rl.Color(228, 228, 228, 255) if self.enabled else rl.Color(150, 150, 150, 255) - rl.draw_text_ex(self._font, text, rl.Vector2(text_x, text_y), BUTTON_FONT_SIZE, 0, text_color) - - # Advance position for next button - current_button_x += btn_w + spacing - - def _handle_mouse_release(self, mouse_pos: MousePos): - spacing = RIGHT_ITEM_PADDING - button_y = self._rect.y + (self._rect.height - BUTTON_HEIGHT) / 2 - - # Calculate per-button width based on text + padding, scaled to fit (same as _render) - padding = 20 # 10px per side - button_widths = [] - ideal_total = 0 - - for label, _ in self.buttons: - text = _resolve_value(label, "") - text_size = measure_text_cached(self._font, text, BUTTON_FONT_SIZE) - ideal_width = text_size.x + padding - button_widths.append(ideal_width) - ideal_total += ideal_width - - ideal_total += (len(self.buttons) - 1) * spacing - - # Scale proportionally if total exceeds available space - if ideal_total > self._rect.width: - scale = self._rect.width / ideal_total - button_widths = [max(80, w * scale) for w in button_widths] - else: - # Ensure minimum width - button_widths = [max(80, w) for w in button_widths] - - # Start from left edge of rect - use cumulative sum for correct positioning - current_button_x = self._rect.x - - for i, (_, callback) in enumerate(self.buttons): - btn_w = button_widths[i] - button_rect = rl.Rectangle(current_button_x, button_y, btn_w, BUTTON_HEIGHT) - if rl.check_collision_point_rec(mouse_pos, button_rect): - if callback: - callback() - # Advance position for next button - current_button_x += btn_w + spacing - - -def category_buttons_item( - title: str | Callable[[], str], - buttons: list[tuple[str | Callable[[], str], Callable]], - description: str | Callable[[], str] | None = None, - icon: str = "", - button_width: int = BUTTON_WIDTH, - enabled: bool | Callable[[], bool] = True, - starpilot_icon: bool = False, -) -> "ListItem": - action = CategoryButtonsAction(buttons, button_width, enabled=enabled) - icon_to_use = "" if starpilot_icon else icon - item = ListItem(title=title, description=description, icon=icon_to_use, action_item=action) - if icon and starpilot_icon: - item.set_icon(icon, starpilot=True) - return item - - class ListItem(Widget): - def __init__( - self, - title: str | Callable[[], str] = "", - icon: str | None = None, - description: str | Callable[[], str] | None = None, - description_visible: bool = False, - callback: Callable | None = None, - action_item: ItemAction | None = None, - ): + def __init__(self, title: str | Callable[[], str] = "", icon: str | None = None, description: str | Callable[[], str] | None = None, + description_visible: bool = False, callback: Callable | None = None, + action_item: ItemAction | None = None): super().__init__() self._title = title self.set_icon(icon) self._description = description self.description_visible = description_visible - self.set_click_callback(callback) + self.callback = callback self.description_opened_callback: Callable | None = None self.action_item = action_item self.set_rect(rl.Rectangle(0, 0, ITEM_BASE_WIDTH, ITEM_BASE_HEIGHT)) self._font = gui_app.font(FontWeight.NORMAL) - self._html_renderer = HtmlRenderer(text="", text_size={ElementType.P: ITEM_DESC_FONT_SIZE}, text_color=ITEM_DESC_TEXT_COLOR) + self._html_renderer = HtmlRenderer(text="", text_size={ElementType.P: ITEM_DESC_FONT_SIZE}, + text_color=ITEM_DESC_TEXT_COLOR) self._parse_description(self.description) # Cached properties for performance self._prev_description: str | None = self.description def show_event(self): + super().show_event() self._set_description_visible(False) def set_description_opened_callback(self, callback: Callable) -> None: @@ -474,7 +320,6 @@ class ListItem(Widget): return self._set_description_visible(not self.description_visible) - super()._handle_mouse_release(mouse_pos) def _set_description_visible(self, visible: bool): if self.description and self.description_visible != visible: @@ -499,7 +344,8 @@ class ListItem(Widget): return # Don't draw items that are not in parent's viewport - if (self._rect.y + self.rect.height) <= self._parent_rect.y or self._rect.y >= (self._parent_rect.y + self._parent_rect.height): + if ((self._rect.y + self.rect.height) <= self._parent_rect.y or + self._rect.y >= (self._parent_rect.y + self._parent_rect.height)): return content_x = self._rect.x + ITEM_PADDING @@ -509,7 +355,7 @@ class ListItem(Widget): if self.title: # Draw icon if present if self.icon: - rl.draw_texture(self._icon_texture, int(content_x), int(self._rect.y + (ITEM_BASE_HEIGHT - self._icon_texture.height) // 2), rl.WHITE) + rl.draw_texture_ex(self._icon_texture, rl.Vector2(content_x, self._rect.y + (ITEM_BASE_HEIGHT - self._icon_texture.height) / 2), 0.0, 1.0, rl.WHITE) text_x += ICON_SIZE + ITEM_PADDING # Draw main text @@ -521,7 +367,12 @@ class ListItem(Widget): if self.description_visible: content_width = int(self._rect.width - ITEM_PADDING * 2) description_height = self._html_renderer.get_total_height(content_width) - description_rect = rl.Rectangle(self._rect.x + ITEM_PADDING, self._rect.y + ITEM_DESC_V_OFFSET, content_width, description_height) + description_rect = rl.Rectangle( + self._rect.x + ITEM_PADDING, + self._rect.y + ITEM_DESC_V_OFFSET, + content_width, + description_height + ) self._html_renderer.render(description_rect) # Draw right item if present @@ -530,19 +381,12 @@ class ListItem(Widget): right_rect.y = self._rect.y if self.action_item.render(right_rect) and self.action_item.enabled: # Right item was clicked/activated - if self._click_callback: - self._click_callback() + if self.callback: + self.callback() - def set_icon(self, icon: str | None, starpilot: bool = False): + def set_icon(self, icon: str | None): self.icon = icon - if not icon: - self._icon_texture = None - elif starpilot: - self._icon_texture = gui_app.starpilot_texture(icon, ICON_SIZE, ICON_SIZE) - elif self.icon: - self._icon_texture = gui_app.texture(os.path.join("icons", self.icon), ICON_SIZE, ICON_SIZE) - else: - self._icon_texture = None + self._icon_texture = gui_app.texture(os.path.join("icons", self.icon), ICON_SIZE, ICON_SIZE) if self.icon else None def set_description(self, description: str | Callable[[], str] | None): self._description = description @@ -575,11 +419,15 @@ class ListItem(Widget): right_width = self.action_item.get_width_hint() if right_width == 0: # Full width action (like DualButtonAction) - return rl.Rectangle(item_rect.x + ITEM_PADDING, item_rect.y, item_rect.width - (ITEM_PADDING * 2), ITEM_BASE_HEIGHT) + return rl.Rectangle(item_rect.x + ITEM_PADDING, item_rect.y, + item_rect.width - (ITEM_PADDING * 2), ITEM_BASE_HEIGHT) - # Return rect at right edge of item, with action's full width - # The action itself will handle positioning within this rect (right-aligned) - right_x = item_rect.x + item_rect.width - right_width - ITEM_PADDING + # Clip width to available space, never overlapping this Item's title + content_width = item_rect.width - (ITEM_PADDING * 2) + title_width = measure_text_cached(self._font, self.title, ITEM_TEXT_FONT_SIZE).x + right_width = min(content_width - title_width, right_width) + + right_x = item_rect.x + item_rect.width - right_width right_y = item_rect.y return rl.Rectangle(right_x, right_y, right_width, ITEM_BASE_HEIGHT) @@ -589,942 +437,32 @@ def simple_item(title: str | Callable[[], str], callback: Callable | None = None return ListItem(title=title, callback=callback) -def toggle_item( - title: str | Callable[[], str], - description: str | Callable[[], str] | None = None, - initial_state: bool = False, - callback: Callable | None = None, - icon: str = "", - enabled: bool | Callable[[], bool] = True, - starpilot_icon: bool = False, -) -> ListItem: +def toggle_item(title: str | Callable[[], str], description: str | Callable[[], str] | None = None, initial_state: bool = False, + callback: Callable | None = None, icon: str = "", enabled: bool | Callable[[], bool] = True) -> ListItem: action = ToggleAction(initial_state=initial_state, enabled=enabled, callback=callback) - icon_to_use = "" if starpilot_icon else icon - item = ListItem(title=title, description=description, action_item=action, icon=icon_to_use) - if icon and starpilot_icon: - item.set_icon(icon, starpilot=True) - return item + return ListItem(title=title, description=description, action_item=action, icon=icon) -def button_item( - title: str | Callable[[], str], - button_text: str | Callable[[], str], - description: str | Callable[[], str] | None = None, - callback: Callable | None = None, - enabled: bool | Callable[[], bool] = True, - icon: str = "", - starpilot_icon: bool = False, -) -> ListItem: +def button_item(title: str | Callable[[], str], button_text: str | Callable[[], str], description: str | Callable[[], str] | None = None, + callback: Callable | None = None, enabled: bool | Callable[[], bool] = True) -> ListItem: action = ButtonAction(text=button_text, enabled=enabled) - item = ListItem(title=title, description=description, action_item=action, callback=callback, icon=icon if not starpilot_icon else "") - if icon and starpilot_icon: - item.set_icon(icon, starpilot=True) - return item + return ListItem(title=title, description=description, action_item=action, callback=callback) -def text_item( - title: str | Callable[[], str], - value: str | Callable[[], str], - description: str | Callable[[], str] | None = None, - callback: Callable | None = None, - enabled: bool | Callable[[], bool] = True, -) -> ListItem: +def text_item(title: str | Callable[[], str], value: str | Callable[[], str], description: str | Callable[[], str] | None = None, + callback: Callable | None = None, enabled: bool | Callable[[], bool] = True) -> ListItem: action = TextAction(text=value, color=ITEM_TEXT_VALUE_COLOR, enabled=enabled) return ListItem(title=title, description=description, action_item=action, callback=callback) -def dual_button_item( - left_text: str | Callable[[], str], - right_text: str | Callable[[], str], - left_callback: Callable = None, - right_callback: Callable = None, - description: str | Callable[[], str] | None = None, - enabled: bool | Callable[[], bool] = True, -) -> ListItem: +def dual_button_item(left_text: str | Callable[[], str], right_text: str | Callable[[], str], + left_callback: Callable | None = None, right_callback: Callable | None = None, + description: str | Callable[[], str] | None = None, enabled: bool | Callable[[], bool] = True) -> ListItem: action = DualButtonAction(left_text, right_text, left_callback, right_callback, enabled) return ListItem(title="", description=description, action_item=action) -def multiple_button_item( - title: str | Callable[[], str], - description: str | Callable[[], str], - buttons: list[str | Callable[[], str]], - selected_index: int, - button_width: int = BUTTON_WIDTH, - callback: Callable = None, - icon: str = "", - starpilot_icon: bool = False, -): +def multiple_button_item(title: str | Callable[[], str], description: str | Callable[[], str], buttons: list[str | Callable[[], str]], selected_index: int, + button_width: int = BUTTON_WIDTH, callback: Callable | None = None, icon: str = ""): action = MultipleButtonAction(buttons, button_width, selected_index, callback=callback) - item = ListItem(title=title, description=description, icon=icon if not starpilot_icon else "", action_item=action) - if icon and starpilot_icon: - item.set_icon(icon, starpilot=True) - return item - - -VALUE_BUTTON_WIDTH = 150 -VALUE_BUTTON_HEIGHT = 80 -VALUE_SLIDER_HEIGHT = 100 -VALUE_DISPLAY_WIDTH = 250 -VALUE_FONT_SIZE = 45 -VALUE_TEXT_COLOR = rl.Color(224, 232, 121, 255) - - -class ValueSliderAction(ItemAction): - def __init__( - self, - value: float | Callable[[], float], - min_val: float = 0, - max_val: float = 100, - step: float = 1, - unit: str = "", - labels: dict[float, str] | None = None, - callback: Callable[[float], None] | None = None, - enabled: bool | Callable[[], bool] = True, - negative: bool = False, - default_value: float | None = None, - fast_increase: bool = False, - is_metric: bool = False, - ): - self._params = Params() - self._value_source = value - self._min_val = min_val - self._max_val = max_val - self._step = step - self._unit = unit - self._labels = labels or {} - self._callback = callback - self._negative = negative - self._default_value = default_value - self._fast_increase = fast_increase - self._is_metric = is_metric - - self._font = gui_app.font(FontWeight.MEDIUM) - self._value_font = gui_app.font(FontWeight.DISPLAY) - - self._decrement_pressed = False - self._increment_pressed = False - self._repeat_timer = 0.0 - self._repeat_delay = 0.5 - self._repeat_interval = 0.1 - - self._params = Params() - - self._metric_multiplier = 1.0 - if self._is_metric: - if self._unit == "mph": - self._metric_multiplier = 1.60934 - elif self._unit == "feet": - self._metric_multiplier = 0.3048 - elif self._unit == "inches": - self._metric_multiplier = 2.54 - - total_width = VALUE_DISPLAY_WIDTH + VALUE_BUTTON_WIDTH * 2 + 20 - super().__init__(width=total_width, enabled=enabled) - - def _get_value(self) -> float: - value = self._value_source - if callable(value): - return float(value()) - if isinstance(value, (int, float)): - return float(value) - if isinstance(value, str) and value: - param_key = value - if self._step == 1: - return float(self._params.get_int(param_key, return_default=True, default=0)) - else: - return float(self._params.get_float(param_key, return_default=True, default=0.0)) - return 0.0 - - def _get_display_text(self, value: float) -> str: - display_val = value - display_unit = self._unit - - if self._is_metric and ui_state.is_metric and self._metric_multiplier != 1.0: - display_val = value * self._metric_multiplier - if self._unit == "mph": - display_unit = "km/h" - elif self._unit == "feet": - display_unit = "m" - elif self._unit == "inches": - display_unit = "cm" - - rounded_value = round(display_val / self._step) * self._step - if self._labels and rounded_value in self._labels: - return self._labels[rounded_value] - if display_unit: - return f"{rounded_value:g}{display_unit}" - return str(rounded_value) - - def _update_value(self, delta: float): - current = self._get_value() - - if self._is_metric and ui_state.is_metric and self._metric_multiplier != 1.0: - delta = delta / self._metric_multiplier - - min_val = _resolve_value(self._min_val, 0) - max_val = _resolve_value(self._max_val, 100) - new_value = max(min_val, min(max_val, current + delta)) - new_value = round(new_value / self._step) * self._step - - if self._callback: - self._callback(new_value) - elif isinstance(self._value_source, str): - param_key = self._value_source - if param_key: - if self._step == 1: - self._params.put_int(param_key, int(new_value)) - else: - self._params.put_float(param_key, new_value) - - def _handle_decrement(self, dt: float): - if self._decrement_pressed: - self._repeat_timer += dt - if self._repeat_timer >= self._repeat_delay: - repeat_count = int((self._repeat_timer - self._repeat_delay) / self._repeat_interval) + 1 - delta = -self._step - if self._fast_increase: - delta *= 5 - for _ in range(repeat_count): - self._update_value(delta) - self._repeat_timer = self._repeat_timer % self._repeat_interval - return True - return False - - def _handle_increment(self, dt: float): - if self._increment_pressed: - self._repeat_timer += dt - if self._repeat_timer >= self._repeat_delay: - repeat_count = int((self._repeat_timer - self._repeat_delay) / self._repeat_interval) + 1 - delta = self._step - if self._fast_increase: - delta *= 5 - for _ in range(repeat_count): - self._update_value(delta) - self._repeat_timer = self._repeat_timer % self._repeat_interval - return True - return False - - def get_width_hint(self) -> float: - return self._rect.width - - def _render(self, rect: rl.Rectangle) -> bool: - value = self._get_value() - display_text = self._get_display_text(value) - - button_y = rect.y + (rect.height - VALUE_BUTTON_HEIGHT) / 2 - - dec_btn_rect = rl.Rectangle(rect.x + rect.width - VALUE_BUTTON_WIDTH * 2 - 20, button_y, VALUE_BUTTON_WIDTH, VALUE_BUTTON_HEIGHT) - inc_btn_rect = rl.Rectangle(rect.x + rect.width - VALUE_BUTTON_WIDTH, button_y, VALUE_BUTTON_WIDTH, VALUE_BUTTON_HEIGHT) - - min_val = _resolve_value(self._min_val, 0) - max_val = _resolve_value(self._max_val, 100) - dec_color = rl.Color(57, 57, 57, 255) if value > min_val else rl.Color(40, 40, 40, 255) - inc_color = rl.Color(57, 57, 57, 255) if value < max_val else rl.Color(40, 40, 40, 255) - - if self._decrement_pressed: - dec_color = rl.Color(74, 74, 74, 255) - if self._increment_pressed: - inc_color = rl.Color(74, 74, 74, 255) - - if not self.enabled: - dec_color = rl.Color(dec_color.r, dec_color.g, dec_color.b, 128) - inc_color = rl.Color(inc_color.r, inc_color.g, inc_color.b, 128) - - rl.draw_rectangle_rounded(dec_btn_rect, 0.3, 10, dec_color) - rl.draw_rectangle_rounded(inc_btn_rect, 0.3, 10, inc_color) - - dec_text = "-" - inc_text = "+" - dec_size = measure_text_cached(self._value_font, dec_text, 50) - inc_size = measure_text_cached(self._value_font, inc_text, 50) - rl.draw_text_ex( - self._value_font, - dec_text, - rl.Vector2(dec_btn_rect.x + (dec_btn_rect.width - dec_size.x) / 2, dec_btn_rect.y + (dec_btn_rect.height - dec_size.y) / 2), - 50, - 0, - rl.WHITE, - ) - rl.draw_text_ex( - self._value_font, - inc_text, - rl.Vector2(inc_btn_rect.x + (inc_btn_rect.width - inc_size.x) / 2, inc_btn_rect.y + (inc_btn_rect.height - inc_size.y) / 2), - 50, - 0, - rl.WHITE, - ) - - value_rect = rl.Rectangle(rect.x + rect.width - VALUE_BUTTON_WIDTH * 2 - VALUE_DISPLAY_WIDTH - 30, rect.y, VALUE_DISPLAY_WIDTH, rect.height) - gui_label( - value_rect, - display_text, - font_size=VALUE_FONT_SIZE, - color=VALUE_TEXT_COLOR if self.enabled else rl.Color(100, 100, 100, 255), - font_weight=FontWeight.DISPLAY, - alignment=rl.GuiTextAlignment.TEXT_ALIGN_RIGHT, - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE, - ) - - return False - - def _handle_mouse_release(self, mouse_pos: MousePos): - button_y = self._rect.y + (self._rect.height - VALUE_BUTTON_HEIGHT) / 2 - - dec_btn_rect = rl.Rectangle(self._rect.x + self._rect.width - VALUE_BUTTON_WIDTH * 2 - 20, button_y, VALUE_BUTTON_WIDTH, VALUE_BUTTON_HEIGHT) - inc_btn_rect = rl.Rectangle(self._rect.x + self._rect.width - VALUE_BUTTON_WIDTH, button_y, VALUE_BUTTON_WIDTH, VALUE_BUTTON_HEIGHT) - - value = self._get_value() - min_val = _resolve_value(self._min_val, 0) - max_val = _resolve_value(self._max_val, 100) - - # Only one button can be triggered - check all but use elif - if rl.check_collision_point_rec(mouse_pos, inc_btn_rect) and self.enabled and value < max_val: - self._update_value(self._step) - elif rl.check_collision_point_rec(mouse_pos, dec_btn_rect) and self.enabled and value > min_val: - self._update_value(-self._step) - - # Reset all pressed states - self._decrement_pressed = False - self._increment_pressed = False - self._repeat_timer = 0.0 - - def _handle_mouse_event(self, mouse_event): - # Don't call super - we handle everything here to avoid double-processing - button_y = self._rect.y + (self._rect.height - VALUE_BUTTON_HEIGHT) / 2 - - dec_btn_rect = rl.Rectangle(self._rect.x + self._rect.width - VALUE_BUTTON_WIDTH * 2 - 20, button_y, VALUE_BUTTON_WIDTH, VALUE_BUTTON_HEIGHT) - inc_btn_rect = rl.Rectangle(self._rect.x + self._rect.width - VALUE_BUTTON_WIDTH, button_y, VALUE_BUTTON_WIDTH, VALUE_BUTTON_HEIGHT) - - # Visual feedback only - set pressed state - if mouse_event.left_pressed: - if rl.check_collision_point_rec(mouse_event.pos, inc_btn_rect) and self.enabled: - self._increment_pressed = True - elif rl.check_collision_point_rec(mouse_event.pos, dec_btn_rect) and self.enabled: - self._decrement_pressed = True - - # Reset on release for visual feedback - if mouse_event.left_released: - self._decrement_pressed = False - self._increment_pressed = False - - -class ValueButtonSliderAction(ValueSliderAction): - def __init__( - self, - value: float | Callable[[], float], - min_val: float = 0, - max_val: float = 100, - step: float = 1, - unit: str = "", - button_text: str = "Reset", - button_callback: Callable | None = None, - labels: dict[float, str] | None = None, - callback: Callable[[float], None] | None = None, - enabled: bool | Callable[[], bool] = True, - negative: bool = False, - default_value: float | None = None, - fast_increase: bool = False, - sub_toggles: list[tuple[str, bool]] | None = None, - is_metric: bool = False, - ): - super().__init__(value, min_val, max_val, step, unit, labels, callback, enabled, negative, default_value, fast_increase, is_metric) - self._button_text = button_text - self._button_callback = button_callback - self._sub_toggles = sub_toggles or [] - self._button_pressed = False - - button_width = 180 - total_width = VALUE_DISPLAY_WIDTH + VALUE_BUTTON_WIDTH * 2 + button_width + 40 - self._rect.width = total_width - - def _render(self, rect: rl.Rectangle) -> bool: - value = self._get_value() - display_text = self._get_display_text(value) - - button_y = rect.y + (rect.height - VALUE_BUTTON_HEIGHT) / 2 - button_width = 180 - - dec_btn_rect = rl.Rectangle(rect.x + rect.width - VALUE_BUTTON_WIDTH * 2 - button_width - 40, button_y, VALUE_BUTTON_WIDTH, VALUE_BUTTON_HEIGHT) - inc_btn_rect = rl.Rectangle(rect.x + rect.width - VALUE_BUTTON_WIDTH - button_width - 20, button_y, VALUE_BUTTON_WIDTH, VALUE_BUTTON_HEIGHT) - action_btn_rect = rl.Rectangle( - rect.x + rect.width - button_width, button_y + (VALUE_BUTTON_HEIGHT - VALUE_BUTTON_HEIGHT) / 2, button_width, VALUE_BUTTON_HEIGHT - ) - - min_val = _resolve_value(self._min_val, 0) - max_val = _resolve_value(self._max_val, 100) - dec_color = rl.Color(57, 57, 57, 255) if value > min_val else rl.Color(40, 40, 40, 255) - inc_color = rl.Color(57, 57, 57, 255) if value < max_val else rl.Color(40, 40, 40, 255) - - if self._decrement_pressed: - dec_color = rl.Color(74, 74, 74, 255) - if self._increment_pressed: - inc_color = rl.Color(74, 74, 74, 255) - - if not self.enabled: - dec_color = rl.Color(dec_color.r, dec_color.g, dec_color.b, 128) - inc_color = rl.Color(inc_color.r, inc_color.g, inc_color.b, 128) - - rl.draw_rectangle_rounded(dec_btn_rect, 0.3, 10, dec_color) - rl.draw_rectangle_rounded(inc_btn_rect, 0.3, 10, inc_color) - - dec_text = "-" - inc_text = "+" - dec_size = measure_text_cached(self._value_font, dec_text, 50) - inc_size = measure_text_cached(self._value_font, inc_text, 50) - rl.draw_text_ex( - self._value_font, - dec_text, - rl.Vector2(dec_btn_rect.x + (dec_btn_rect.width - dec_size.x) / 2, dec_btn_rect.y + (dec_btn_rect.height - dec_size.y) / 2), - 50, - 0, - rl.WHITE, - ) - rl.draw_text_ex( - self._value_font, - inc_text, - rl.Vector2(inc_btn_rect.x + (inc_btn_rect.width - inc_size.x) / 2, inc_btn_rect.y + (inc_btn_rect.height - inc_size.y) / 2), - 50, - 0, - rl.WHITE, - ) - - value_rect = rl.Rectangle(rect.x + rect.width - VALUE_BUTTON_WIDTH * 2 - button_width - VALUE_DISPLAY_WIDTH - 50, rect.y, VALUE_DISPLAY_WIDTH, rect.height) - gui_label( - value_rect, - display_text, - font_size=VALUE_FONT_SIZE, - color=VALUE_TEXT_COLOR if self.enabled else rl.Color(100, 100, 100, 255), - font_weight=FontWeight.DISPLAY, - alignment=rl.GuiTextAlignment.TEXT_ALIGN_RIGHT, - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE, - ) - - btn_color = rl.Color(57, 57, 57, 255) - if self._button_pressed: - btn_color = rl.Color(74, 74, 74, 255) - if not self.enabled: - btn_color = rl.Color(btn_color.r, btn_color.g, btn_color.b, 128) - - rl.draw_rectangle_rounded(action_btn_rect, 0.3, 10, btn_color) - - btn_text = _resolve_value(self._button_text, "Reset") - btn_font = gui_app.font(FontWeight.MEDIUM) - btn_size = measure_text_cached(btn_font, btn_text, 35) - rl.draw_text_ex( - btn_font, - btn_text, - rl.Vector2(action_btn_rect.x + (action_btn_rect.width - btn_size.x) / 2, action_btn_rect.y + (action_btn_rect.height - btn_size.y) / 2), - 35, - 0, - rl.WHITE if self.enabled else rl.Color(150, 150, 150, 255), - ) - - return False - - def _handle_mouse_release(self, mouse_pos: MousePos): - button_y = self._rect.y + (self._rect.height - VALUE_BUTTON_HEIGHT) / 2 - button_width = 180 - - dec_btn_rect = rl.Rectangle(self._rect.x + self._rect.width - VALUE_BUTTON_WIDTH * 2 - button_width - 40, button_y, VALUE_BUTTON_WIDTH, VALUE_BUTTON_HEIGHT) - inc_btn_rect = rl.Rectangle(self._rect.x + self._rect.width - VALUE_BUTTON_WIDTH - button_width - 20, button_y, VALUE_BUTTON_WIDTH, VALUE_BUTTON_HEIGHT) - action_btn_rect = rl.Rectangle(self._rect.x + self._rect.width - button_width, button_y, button_width, VALUE_BUTTON_HEIGHT) - - value = self._get_value() - min_val = _resolve_value(self._min_val, 0) - max_val = _resolve_value(self._max_val, 100) - - # Only one button can be triggered - check all but use elif - if rl.check_collision_point_rec(mouse_pos, action_btn_rect) and self.enabled: - if self._button_callback: - self._button_callback() - elif rl.check_collision_point_rec(mouse_pos, inc_btn_rect) and self.enabled and value < max_val: - self._update_value(self._step) - elif rl.check_collision_point_rec(mouse_pos, dec_btn_rect) and self.enabled and value > min_val: - self._update_value(-self._step) - - # Reset all pressed states - self._decrement_pressed = False - self._increment_pressed = False - self._button_pressed = False - self._repeat_timer = 0.0 - - def _handle_mouse_event(self, mouse_event): - # Don't call super - we handle everything here to avoid double-processing - button_y = self._rect.y + (self._rect.height - VALUE_BUTTON_HEIGHT) / 2 - button_width = 180 - - dec_btn_rect = rl.Rectangle(self._rect.x + self._rect.width - VALUE_BUTTON_WIDTH * 2 - button_width - 40, button_y, VALUE_BUTTON_WIDTH, VALUE_BUTTON_HEIGHT) - inc_btn_rect = rl.Rectangle(self._rect.x + self._rect.width - VALUE_BUTTON_WIDTH - button_width - 20, button_y, VALUE_BUTTON_WIDTH, VALUE_BUTTON_HEIGHT) - action_btn_rect = rl.Rectangle(self._rect.x + self._rect.width - button_width, button_y, button_width, VALUE_BUTTON_HEIGHT) - - # Visual feedback only - set pressed state - if mouse_event.left_pressed: - if rl.check_collision_point_rec(mouse_event.pos, action_btn_rect) and self.enabled: - self._button_pressed = True - elif rl.check_collision_point_rec(mouse_event.pos, inc_btn_rect) and self.enabled: - self._increment_pressed = True - elif rl.check_collision_point_rec(mouse_event.pos, dec_btn_rect) and self.enabled: - self._decrement_pressed = True - - # Reset on release for visual feedback - if mouse_event.left_released: - self._decrement_pressed = False - self._increment_pressed = False - self._button_pressed = False - - -class DualValueSliderAction(ItemAction): - def __init__( - self, - value1: float | Callable[[], float], - value2: float | Callable[[], float], - min_val: float = 0, - max_val: float = 100, - step: float = 1, - unit: str = "", - label1: str = "", - label2: str = "", - callback1: Callable[[float], None] | None = None, - callback2: Callable[[float], None] | None = None, - enabled: bool | Callable[[], bool] = True, - labels: dict[float, str] | None = None, - is_metric: bool = False, - ): - self._value1_source = value1 - self._value2_source = value2 - self._min_val = min_val - self._max_val = max_val - self._step = step - self._unit = unit - self._label1 = label1 - self._label2 = label2 - self._callback1 = callback1 - self._callback2 = callback2 - self._labels = labels or [] - self._params = Params() - - self._metric_multiplier = 1.0 - if is_metric: - if self._unit == "mph": - self._metric_multiplier = 1.60934 - elif self._unit == "feet": - self._metric_multiplier = 0.3048 - elif self._unit == "inches": - self._metric_multiplier = 2.54 - - self._slider1 = ValueSliderAction(value1, min_val, max_val, step, unit, labels, callback1, enabled, is_metric=is_metric) - self._slider2 = ValueSliderAction(value2, min_val, max_val, step, unit, labels, callback2, enabled, is_metric=is_metric) - - total_width = (VALUE_DISPLAY_WIDTH + VALUE_BUTTON_WIDTH * 2 + 20) * 2 + 40 - super().__init__(width=total_width, enabled=enabled) - - def _render(self, rect: rl.Rectangle) -> bool: - half_width = (rect.width - 40) / 2 - - slider1_rect = rl.Rectangle(rect.x, rect.y, half_width, rect.height) - slider2_rect = rl.Rectangle(rect.x + half_width + 40, rect.y, half_width, rect.height) - - if self._label1: - label_rect = rl.Rectangle(slider1_rect.x, slider1_rect.y - 30, half_width, 25) - gui_label(label_rect, self._label1, font_size=30, color=rl.Color(170, 170, 170, 255), font_weight=FontWeight.NORMAL) - - if self._label2: - label_rect = rl.Rectangle(slider2_rect.x, slider2_rect.y - 30, half_width, 25) - gui_label(label_rect, self._label2, font_size=30, color=rl.Color(170, 170, 170, 255), font_weight=FontWeight.NORMAL) - - return False - - def _handle_mouse_event(self, mouse_event): - half_width = (self._rect.width - 40) / 2 - slider1_rect = rl.Rectangle(self._rect.x, self._rect.y, half_width, self._rect.height) - slider2_rect = rl.Rectangle(self._rect.x + half_width + 40, self._rect.y, half_width, self._rect.height) - - adjusted_pos1 = MousePos( - rl.Vector2(mouse_event.pos.x - slider1_rect.x + self._rect.x, mouse_event.pos.y), - mouse_event.left_pressed, - mouse_event.left_released, - mouse_event.right_pressed, - mouse_event.right_released, - ) - adjusted_pos2 = MousePos( - rl.Vector2(mouse_event.pos.x - slider2_rect.x + self._rect.x + half_width + 40, mouse_event.pos.y), - mouse_event.left_pressed, - mouse_event.left_released, - mouse_event.right_pressed, - mouse_event.right_released, - ) - - if 0 <= mouse_event.pos.x - slider1_rect.x < half_width: - self._slider1._handle_mouse_event(adjusted_pos1) - if 0 <= mouse_event.pos.x - slider2_rect.x - half_width - 40 < half_width: - self._slider2._handle_mouse_event(adjusted_pos2) - - -class ButtonToggleAction(ItemAction): - def __init__( - self, - state: bool | Callable[[], bool], - sub_toggles: list[str] | None = None, - sub_toggle_names: list[str] | None = None, - callback: Callable[[bool], None] | None = None, - sub_callbacks: list[Callable] | None = None, - enabled: bool | Callable[[], bool] = True, - exclusive: bool = False, - ): - self._state_source = state - self._sub_toggles = sub_toggles or [] - self._sub_toggle_names = sub_toggle_names or [] - self._callback = callback - self._sub_callbacks = sub_callbacks or [] - self._exclusive = exclusive - self._params = Params() - - self._toggle = Toggle(initial_state=_resolve_value(state, False), callback=callback) - - button_width = 180 - total_width = TOGGLE_WIDTH + len(self._sub_toggles) * (button_width + 10) - super().__init__(width=total_width, enabled=enabled) - - def get_width_hint(self) -> float: - return self._rect.width - - def _render(self, rect: rl.Rectangle) -> bool: - toggle_rect = rl.Rectangle(rect.x, rect.y + (rect.height - TOGGLE_HEIGHT) / 2, TOGGLE_WIDTH, TOGGLE_HEIGHT) - self._toggle.set_enabled(self.enabled) - clicked = self._toggle.render(toggle_rect) - - button_width = 180 - button_spacing = 10 - button_y = rect.y + (rect.height - VALUE_BUTTON_HEIGHT) / 2 - - x_offset = rect.x + TOGGLE_WIDTH + 20 - - for i, (sub_key, sub_name) in enumerate(zip(self._sub_toggles, self._sub_toggle_names)): - btn_rect = rl.Rectangle(x_offset + i * (button_width + button_spacing), button_y, button_width, VALUE_BUTTON_HEIGHT) - - sub_value = False - if isinstance(sub_key, str) and sub_key: - sub_value = self._params.get_bool(sub_key) - - btn_color = rl.Color(51, 171, 76, 255) if sub_value else rl.Color(57, 57, 57, 255) - if not self.enabled: - btn_color = rl.Color(btn_color.r, btn_color.g, btn_color.b, 128) - - rl.draw_rectangle_rounded(btn_rect, 0.3, 10, btn_color) - - text_size = measure_text_cached(gui_app.font(FontWeight.MEDIUM), sub_name, 30) - rl.draw_text_ex( - gui_app.font(FontWeight.MEDIUM), - sub_name, - rl.Vector2(btn_rect.x + (btn_rect.width - text_size.x) / 2, btn_rect.y + (btn_rect.height - text_size.y) / 2), - 30, - 0, - rl.WHITE if self.enabled else rl.Color(150, 150, 150, 255), - ) - - return clicked - - def _handle_mouse_release(self, mouse_pos: MousePos): - button_width = 180 - button_spacing = 10 - button_y = self._rect.y + (self._rect.height - VALUE_BUTTON_HEIGHT) / 2 - - x_offset = self._rect.x + TOGGLE_WIDTH + 20 - - for i, (sub_key, sub_callback) in enumerate(zip(self._sub_toggles, self._sub_callbacks)): - btn_rect = rl.Rectangle(x_offset + i * (button_width + button_spacing), button_y, button_width, VALUE_BUTTON_HEIGHT) - if rl.check_collision_point_rec(mouse_pos, btn_rect) and self.enabled: - if isinstance(sub_key, str) and sub_key: - current = self._params.get_bool(sub_key) - self._params.put_bool(sub_key, not current) - if sub_callback: - sub_callback() - - -class MultiButtonsAction(ItemAction): - def __init__( - self, - buttons: list[str | Callable[[], str]], - button_callbacks: list[Callable] | None = None, - enabled: bool | Callable[[], bool] = True, - initial_value: str = "", - ): - self._buttons_source = buttons - self._button_callbacks = button_callbacks or [] - self._initial_value = initial_value - - button_width = 180 - total_width = len(buttons) * button_width + (len(buttons) - 1) * RIGHT_ITEM_PADDING - super().__init__(width=total_width, enabled=enabled) - - self._font = gui_app.font(FontWeight.MEDIUM) - - def get_width_hint(self) -> float: - return self._rect.width - - def _render(self, rect: rl.Rectangle) -> bool: - buttons = _resolve_value(self._buttons_source, []) - button_width = 180 - spacing = RIGHT_ITEM_PADDING - button_y = rect.y + (rect.height - VALUE_BUTTON_HEIGHT) / 2 - - pressed_any = False - - for i, btn_text in enumerate(buttons): - btn_x = rect.x + i * (button_width + spacing) - btn_rect = rl.Rectangle(btn_x, button_y, button_width, VALUE_BUTTON_HEIGHT) - - btn_color = rl.Color(57, 57, 57, 255) - if not self.enabled: - btn_color = rl.Color(btn_color.r, btn_color.g, btn_color.b, 128) - - rl.draw_rectangle_rounded(btn_rect, 0.3, 10, btn_color) - - text = _resolve_value(btn_text, "") - text_size = measure_text_cached(self._font, text, 30) - text_x = btn_rect.x + (btn_rect.width - text_size.x) / 2 - text_y = btn_rect.y + (btn_rect.height - text_size.y) / 2 - rl.draw_text_ex(self._font, text, rl.Vector2(text_x, text_y), 30, 0, rl.WHITE if self.enabled else rl.Color(150, 150, 150, 255)) - - return False - - def _handle_mouse_release(self, mouse_pos: MousePos): - buttons = _resolve_value(self._buttons_source, []) - button_width = 180 - spacing = RIGHT_ITEM_PADDING - button_y = self._rect.y + (self._rect.height - VALUE_BUTTON_HEIGHT) / 2 - - for i, callback in enumerate(self._button_callbacks): - btn_rect = rl.Rectangle(self._rect.x + i * (button_width + spacing), button_y, button_width, VALUE_BUTTON_HEIGHT) - if rl.check_collision_point_rec(mouse_pos, btn_rect) and self.enabled: - if callback: - callback() - - -class SelectionButtonAction(ItemAction): - def __init__( - self, - options: list[str], - selected_index: int = 0, - callback: Callable[[int, str], None] | None = None, - enabled: bool | Callable[[], bool] = True, - ): - self._options = options - self._selected_index = selected_index - self._callback = callback - self._params = Params() - self._button_pressed = False - - button_width = 300 - super().__init__(width=button_width, enabled=enabled) - - self._font = gui_app.font(FontWeight.MEDIUM) - - def get_width_hint(self) -> float: - return self._rect.width - - def _render(self, rect: rl.Rectangle) -> bool: - btn_rect = rl.Rectangle(rect.x, rect.y + (rect.height - VALUE_BUTTON_HEIGHT) / 2, self._rect.width, VALUE_BUTTON_HEIGHT) - - btn_color = rl.Color(57, 57, 57, 255) - if self._button_pressed: - btn_color = rl.Color(74, 74, 74, 255) - if not self.enabled: - btn_color = rl.Color(btn_color.r, btn_color.g, btn_color.b, 128) - - rl.draw_rectangle_rounded(btn_rect, 0.3, 10, btn_color) - - current_option = self._options[self._selected_index] if 0 <= self._selected_index < len(self._options) else "" - text_size = measure_text_cached(self._font, current_option, 35) - rl.draw_text_ex( - self._font, - current_option, - rl.Vector2(btn_rect.x + 20, btn_rect.y + (btn_rect.height - text_size.y) / 2), - 35, - 0, - rl.WHITE if self.enabled else rl.Color(150, 150, 150, 255), - ) - - arrow_text = "▼" - arrow_size = measure_text_cached(self._font, arrow_text, 25) - rl.draw_text_ex( - self._font, - arrow_text, - rl.Vector2(btn_rect.x + btn_rect.width - arrow_size.x - 20, btn_rect.y + (btn_rect.height - arrow_size.y) / 2), - 25, - 0, - rl.WHITE if self.enabled else rl.Color(150, 150, 150, 255), - ) - - return self._button_pressed - - def _handle_mouse_release(self, mouse_pos: MousePos): - btn_rect = rl.Rectangle(self._rect.x, self._rect.y + (self._rect.height - VALUE_BUTTON_HEIGHT) / 2, self._rect.width, VALUE_BUTTON_HEIGHT) - if rl.check_collision_point_rec(mouse_pos, btn_rect) and self.enabled and self._button_pressed: - if self._callback: - self._callback(self._selected_index, self._options[self._selected_index] if 0 <= self._selected_index < len(self._options) else "") - self._button_pressed = False - - def _handle_mouse_event(self, mouse_event): - super()._handle_mouse_event(mouse_event) - btn_rect = rl.Rectangle(self._rect.x, self._rect.y + (self._rect.height - VALUE_BUTTON_HEIGHT) / 2, self._rect.width, VALUE_BUTTON_HEIGHT) - if mouse_event.left_pressed: - if rl.check_collision_point_rec(mouse_event.pos, btn_rect) and self.enabled: - self._button_pressed = True - if mouse_event.left_released: - if not rl.check_collision_point_rec(mouse_event.pos, btn_rect): - self._button_pressed = False - - -class LabelAction(ItemAction): - def __init__( - self, - value: str | Callable[[], str], - enabled: bool | Callable[[], bool] = True, - ): - self._value_source = value - self._font = gui_app.font(FontWeight.NORMAL) - initial_text = _resolve_value(value, "") - text_width = measure_text_cached(self._font, initial_text, ITEM_TEXT_FONT_SIZE).x - super().__init__(width=int(text_width + TEXT_PADDING), enabled=enabled) - - def get_width_hint(self) -> float: - text = _resolve_value(self._value_source, "") - text_width = measure_text_cached(self._font, text, ITEM_TEXT_FONT_SIZE).x - return text_width + TEXT_PADDING - - def _render(self, rect: rl.Rectangle) -> bool: - value = _resolve_value(self._value_source, "") - gui_label( - rect, - value, - font_size=ITEM_TEXT_FONT_SIZE, - color=ITEM_TEXT_VALUE_COLOR if self.enabled else rl.Color(100, 100, 100, 255), - font_weight=FontWeight.NORMAL, - alignment=rl.GuiTextAlignment.TEXT_ALIGN_RIGHT, - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE, - ) - return False - - -def value_item( - title: str | Callable[[], str], - value: float | Callable[[], float], - min_val: float = 0, - max_val: float = 100, - step: float = 1, - unit: str = "", - description: str | Callable[[], str] | None = None, - callback: Callable[[float], None] | None = None, - icon: str = "", - enabled: bool | Callable[[], bool] = True, - labels: dict[float, str] | None = None, - negative: bool = False, - default_value: float | None = None, - fast_increase: bool = False, - is_metric: bool = False, -) -> ListItem: - action = ValueSliderAction(value, min_val, max_val, step, unit, labels, callback, enabled, negative, default_value, fast_increase, is_metric) - return ListItem(title=title, description=description, icon=icon, action_item=action) - - -def value_button_item( - title: str | Callable[[], str], - value: float | Callable[[], float], - min_val: float = 0, - max_val: float = 100, - step: float = 1, - unit: str = "", - button_text: str = "Reset", - button_callback: Callable | None = None, - description: str | Callable[[], str] | None = None, - callback: Callable[[float], None] | None = None, - icon: str = "", - enabled: bool | Callable[[], bool] = True, - sub_toggles: list[tuple[str, bool]] | None = None, - labels: dict[float, str] | None = None, - negative: bool = False, - default_value: float | None = None, - fast_increase: bool = False, - is_metric: bool = False, -) -> ListItem: - action = ValueButtonSliderAction( - value, min_val, max_val, step, unit, button_text, button_callback, labels, callback, enabled, negative, default_value, fast_increase, sub_toggles, is_metric - ) - return ListItem(title=title, description=description, icon=icon, action_item=action) - - -def dual_value_item( - title: str | Callable[[], str], - value1: float | Callable[[], float], - value2: float | Callable[[], float], - min_val: float = 0, - max_val: float = 100, - step: float = 1, - unit: str = "", - label1: str = "", - label2: str = "", - description: str | Callable[[], str] | None = None, - callback1: Callable[[float], None] | None = None, - callback2: Callable[[float], None] | None = None, - icon: str = "", - enabled: bool | Callable[[], bool] = True, - labels: dict[float, str] | None = None, - is_metric: bool = False, -) -> ListItem: - action = DualValueSliderAction(value1, value2, min_val, max_val, step, unit, label1, label2, callback1, callback2, enabled, labels, is_metric) - return ListItem(title=title, description=description, icon=icon, action_item=action) - - -def button_toggle_item( - title: str | Callable[[], str], - state: bool | Callable[[], bool], - sub_toggles: list[str] | None = None, - sub_toggle_names: list[str] | None = None, - description: str | Callable[[], str] | None = None, - callback: Callable[[bool], None] | None = None, - sub_callbacks: list[Callable] | None = None, - icon: str = "", - enabled: bool | Callable[[], bool] = True, - exclusive: bool = False, -) -> ListItem: - action = ButtonToggleAction(state, sub_toggles, sub_toggle_names, callback, sub_callbacks, enabled, exclusive) - return ListItem(title=title, description=description, icon=icon, action_item=action) - - -def buttons_item( - title: str | Callable[[], str], - buttons: list[str], - button_callbacks: list[Callable] | None = None, - description: str | Callable[[], str] | None = None, - icon: str = "", - enabled: bool | Callable[[], bool] = True, - initial_value: str = "", -) -> ListItem: - action = MultiButtonsAction(buttons, button_callbacks, enabled, initial_value) - return ListItem(title=title, description=description, icon=icon, action_item=action) - - -def selection_button_item( - title: str | Callable[[], str], - options: list[str], - selected_index: int = 0, - description: str | Callable[[], str] | None = None, - callback: Callable[[int, str], None] | None = None, - icon: str = "", - enabled: bool | Callable[[], bool] = True, -) -> ListItem: - action = SelectionButtonAction(options, selected_index, callback, enabled) - return ListItem(title=title, description=description, icon=icon, action_item=action) - - -def label_item( - title: str | Callable[[], str], - value: str | Callable[[], str], - description: str | Callable[[], str] | None = None, - icon: str = "", - enabled: bool | Callable[[], bool] = True, -) -> ListItem: - action = LabelAction(value, enabled) return ListItem(title=title, description=description, icon=icon, action_item=action) diff --git a/system/ui/widgets/mici_keyboard.py b/system/ui/widgets/mici_keyboard.py index 7459dc573..75a3c29e6 100644 --- a/system/ui/widgets/mici_keyboard.py +++ b/system/ui/widgets/mici_keyboard.py @@ -38,10 +38,10 @@ def fast_euclidean_distance(dx, dy): class Key(Widget): - def __init__(self, char: str): + def __init__(self, char: str, font_weight: FontWeight = FontWeight.SEMI_BOLD): super().__init__() self.char = char - self._font = gui_app.font(FontWeight.SEMI_BOLD) + self._font = gui_app.font(font_weight) self._x_filter = BounceFilter(0.0, 0.1 * ANIMATION_SCALE, 1 / gui_app.target_fps) self._y_filter = BounceFilter(0.0, 0.1 * ANIMATION_SCALE, 1 / gui_app.target_fps) self._size_filter = BounceFilter(CHAR_FONT_SIZE, 0.1 * ANIMATION_SCALE, 1 / gui_app.target_fps) @@ -53,20 +53,23 @@ class Key(Widget): self.original_position = rl.Vector2(0, 0) def set_position(self, x: float, y: float, smooth: bool = True): - # TODO: swipe up from NavWidget has the keys lag behind other elements a bit + # Smooth keys within parent rect + base_y = self._parent_rect.y if self._parent_rect else 0.0 + local_y = y - base_y + if not self._position_initialized: self._x_filter.x = x - self._y_filter.x = y + self._y_filter.x = local_y # keep track of original position so dragging around feels consistent. also move touch area down a bit - self.original_position = rl.Vector2(x, y + KEY_TOUCH_AREA_OFFSET) + self.original_position = rl.Vector2(x, local_y + KEY_TOUCH_AREA_OFFSET) self._position_initialized = True if not smooth: self._x_filter.x = x - self._y_filter.x = y + self._y_filter.x = local_y self._rect.x = self._x_filter.update(x) - self._rect.y = self._y_filter.update(y) + self._rect.y = base_y + self._y_filter.update(local_y) def set_alpha(self, alpha: float): self._alpha_filter.update(alpha) @@ -92,12 +95,12 @@ class Key(Widget): self._size_filter.update(size) def _get_font_size(self) -> int: - return int(round(self._size_filter.x)) + return round(self._size_filter.x) class SmallKey(Key): def __init__(self, chars: str): - super().__init__(chars) + super().__init__(chars, FontWeight.BOLD) self._size_filter.x = NUMBER_LAYER_SWITCH_FONT_SIZE def set_font_size(self, size: float): @@ -105,13 +108,15 @@ class SmallKey(Key): class IconKey(Key): - def __init__(self, icon: str, vertical_align: str = "center", char: str = ""): + def __init__(self, icon: str, vertical_align: str = "center", char: str = "", icon_size: tuple[int, int] = (38, 38)): super().__init__(char) - self._icon = gui_app.texture(icon, 38, 38) + self._icon_size = icon_size + self._icon = gui_app.texture(icon, *icon_size) self._vertical_align = vertical_align - def set_icon(self, icon: str): - self._icon = gui_app.texture(icon, 38, 38) + def set_icon(self, icon: str, icon_size: tuple[int, int] | None = None): + size = icon_size if icon_size is not None else self._icon_size + self._icon = gui_app.texture(icon, *size) def _render(self, _): scale = np.interp(self._size_filter.x, [CHAR_FONT_SIZE, CHAR_NEAR_FONT_SIZE], [1, 1.5]) @@ -141,8 +146,9 @@ class CapsState(IntEnum): class MiciKeyboard(Widget): - def __init__(self): + def __init__(self, auto_return_to_letters: str = ""): super().__init__() + self._auto_return_to_letters = auto_return_to_letters lower_chars = [ "qwertyuiop", @@ -167,8 +173,8 @@ class MiciKeyboard(Widget): self._super_special_keys = [[Key(char) for char in row] for row in super_special_chars] # control keys - self._space_key = IconKey("icons_mici/settings/keyboard/space.png", char=" ", vertical_align="bottom") - self._caps_key = IconKey("icons_mici/settings/keyboard/caps_lower.png") + self._space_key = IconKey("icons_mici/settings/keyboard/space.png", char=" ", vertical_align="bottom", icon_size=(43, 14)) + self._caps_key = IconKey("icons_mici/settings/keyboard/caps_lower.png", icon_size=(38, 33)) # these two are in different places on some layouts self._123_key, self._123_key2 = SmallKey("123"), SmallKey("123") self._abc_key = SmallKey("abc") @@ -222,6 +228,8 @@ class MiciKeyboard(Widget): for current_row, row in zip(self._current_keys, keys, strict=False): # not all layouts have the same number of keys for current_key, key in zip_repeat(current_row, row): + # reset parent rect for new keys + key.set_parent_rect(self._rect) current_pos = current_key.get_position() key.set_position(current_pos[0], current_pos[1], smooth=False) @@ -259,7 +267,8 @@ class MiciKeyboard(Widget): for key in row: mouse_pos = gui_app.last_mouse_event.pos # approximate distance for comparison is accurate enough - dist = abs(key.original_position.x - mouse_pos.x) + abs(key.original_position.y - mouse_pos.y) + # use local y coords so parent widget offset (e.g. during NavWidget animate-in) doesn't affect hit testing + dist = abs(key.original_position.x - mouse_pos.x) + abs(key.original_position.y - (mouse_pos.y - self._rect.y)) if dist < closest_key[1]: if self._closest_key[0] is None or key is self._closest_key[0] or dist < self._closest_key[1] - KEY_DRAG_HYSTERESIS: closest_key = (key, dist) @@ -269,14 +278,14 @@ class MiciKeyboard(Widget): self._set_keys(self._upper_keys if cycle else self._lower_keys) if not cycle: self._caps_state = CapsState.LOWER - self._caps_key.set_icon("icons_mici/settings/keyboard/caps_lower.png") + self._caps_key.set_icon("icons_mici/settings/keyboard/caps_lower.png", icon_size=(38, 33)) else: if self._caps_state == CapsState.LOWER: self._caps_state = CapsState.UPPER - self._caps_key.set_icon("icons_mici/settings/keyboard/caps_upper.png") + self._caps_key.set_icon("icons_mici/settings/keyboard/caps_upper.png", icon_size=(38, 33)) elif self._caps_state == CapsState.UPPER: self._caps_state = CapsState.LOCK - self._caps_key.set_icon("icons_mici/settings/keyboard/caps_lock.png") + self._caps_key.set_icon("icons_mici/settings/keyboard/caps_lock.png", icon_size=(39, 38)) else: self._set_uppercase(False) @@ -297,6 +306,10 @@ class MiciKeyboard(Widget): if self._caps_state == CapsState.UPPER: self._set_uppercase(False) + # Switch back to letters after common URL delimiters + if self._closest_key[0].char in self._auto_return_to_letters and self._current_keys in (self._special_keys, self._super_special_keys): + self._set_uppercase(False) + # ensure minimum selected animation time key_selected_dt = rl.get_time() - (self._selected_key_t or 0) cur_t = rl.get_time() @@ -314,7 +327,7 @@ class MiciKeyboard(Widget): self._selected_key_filter.update(self._closest_key[0] is not None) # unselect key after animation plays - if self._unselect_key_t is not None and rl.get_time() > self._unselect_key_t: + if (self._unselect_key_t is not None and rl.get_time() > self._unselect_key_t) or not self.enabled: self._closest_key = (None, float('inf')) self._unselect_key_t = None self._selected_key_t = None @@ -365,6 +378,7 @@ class MiciKeyboard(Widget): key.set_font_size(font_size) # TODO: I like the push amount, so we should clip the pos inside the keyboard rect + key.set_parent_rect(self._rect) key.set_position(key_x, key_y) def _render(self, _): diff --git a/system/ui/widgets/nav_widget.py b/system/ui/widgets/nav_widget.py new file mode 100644 index 000000000..11770bbe5 --- /dev/null +++ b/system/ui/widgets/nav_widget.py @@ -0,0 +1,229 @@ +from __future__ import annotations + +import abc +import pyray as rl +from collections.abc import Callable +from openpilot.system.ui.widgets import Widget +from openpilot.common.filter_simple import BounceFilter, FirstOrderFilter +from openpilot.system.ui.lib.application import gui_app, MousePos, MouseEvent + +SWIPE_AWAY_THRESHOLD = 80 # px to dismiss after releasing +START_DISMISSING_THRESHOLD = 40 # px to start dismissing while dragging +BLOCK_SWIPE_AWAY_THRESHOLD = 60 # px horizontal movement to block swipe away + +NAV_BAR_MARGIN = 6 +NAV_BAR_WIDTH = 205 +NAV_BAR_HEIGHT = 8 + +DISMISS_PUSH_OFFSET = NAV_BAR_MARGIN + NAV_BAR_HEIGHT + 50 # px extra to push down when dismissing +DISMISS_ANIMATION_RC = 0.2 # slightly slower for non-user triggered dismiss animation + + +class NavBar(Widget): + FADE_AFTER_SECONDS = 2.0 + + def __init__(self): + super().__init__() + self.set_rect(rl.Rectangle(0, 0, NAV_BAR_WIDTH, NAV_BAR_HEIGHT)) + self._alpha = 1.0 + self._alpha_filter = FirstOrderFilter(1.0, 0.1, 1 / gui_app.target_fps) + self._fade_time = 0.0 + + def set_alpha(self, alpha: float) -> None: + self._alpha = alpha + self._fade_time = rl.get_time() + + def show_event(self): + super().show_event() + self._alpha = 1.0 + self._alpha_filter.x = 1.0 + self._fade_time = rl.get_time() + + def _render(self, _): + if rl.get_time() - self._fade_time > self.FADE_AFTER_SECONDS: + self._alpha = 0.0 + alpha = self._alpha_filter.update(self._alpha) + + # white bar with black border + rl.draw_rectangle_rounded(self._rect, 1.0, 6, rl.Color(255, 255, 255, int(255 * 0.9 * alpha))) + rl.draw_rectangle_rounded_lines_ex(self._rect, 1.0, 6, 2, rl.Color(0, 0, 0, int(255 * 0.3 * alpha))) + + +class NavWidget(Widget, abc.ABC): + """ + A full screen widget that supports back navigation by swiping down from the top. + """ + BACK_TOUCH_AREA_PERCENTAGE = 0.65 + + def __init__(self): + super().__init__() + # State + self._drag_start_pos: MousePos | None = None # cleared after certain amount of horizontal movement + self._dragging_down = False # swiped down enough to trigger dismissing on release + self._playing_dismiss_animation = False # released and animating away + self._y_pos_filter = BounceFilter(0.0, 0.1, 1 / gui_app.target_fps, bounce=1) + + self._back_callback: Callable[[], None] | None = None # persistent callback for user-initiated back navigation + self._dismiss_callback: Callable[[], None] | None = None # transient callback for programmatic dismiss + # TODO: add this functionality to push_widget + self._shown_callback: Callable[[], None] | None = None # transient callback fired after show animation completes + + # TODO: move this state into NavBar + self._nav_bar = self._child(NavBar()) + self._nav_bar_show_time = 0.0 + self._nav_bar_y_filter = FirstOrderFilter(0.0, 0.1, 1 / gui_app.target_fps) + + def _back_enabled(self) -> bool: + # Children can override this to block swipe away, like when not at + # the top of a vertical scroll panel to prevent erroneous swipes + return True + + def set_back_callback(self, callback: Callable[[], None]) -> None: + self._back_callback = callback + + def set_shown_callback(self, callback: Callable[[], None] | None) -> None: + self._shown_callback = callback + + def _handle_mouse_event(self, mouse_event: MouseEvent) -> None: + super()._handle_mouse_event(mouse_event) + + # Don't let touch events change filter state during dismiss animation + if self._playing_dismiss_animation: + return + + if mouse_event.left_pressed: + # user is able to swipe away if starting near top of screen + self._y_pos_filter.update_alpha(0.04) + in_dismiss_area = mouse_event.pos.y < self._rect.height * self.BACK_TOUCH_AREA_PERCENTAGE + + if in_dismiss_area and self._back_enabled(): + self._drag_start_pos = mouse_event.pos + + elif mouse_event.left_down: + if self._drag_start_pos is not None: + # block swiping away if too much horizontal or upward movement + # block (lock-in) threshold is higher than start dismissing + horizontal_movement = abs(mouse_event.pos.x - self._drag_start_pos.x) > BLOCK_SWIPE_AWAY_THRESHOLD + upward_movement = mouse_event.pos.y - self._drag_start_pos.y < -BLOCK_SWIPE_AWAY_THRESHOLD + + if not (horizontal_movement or upward_movement): + # no blocking movement, check if we should start dismissing + if mouse_event.pos.y - self._drag_start_pos.y > START_DISMISSING_THRESHOLD: + self._dragging_down = True + else: + if not self._dragging_down: + self._drag_start_pos = None + + elif mouse_event.left_released: + # reset rc for either slide up or down animation + self._y_pos_filter.update_alpha(0.1) + + # if far enough, trigger back navigation callback + if self._drag_start_pos is not None: + if mouse_event.pos.y - self._drag_start_pos.y > SWIPE_AWAY_THRESHOLD: + self._playing_dismiss_animation = True + + self._drag_start_pos = None + self._dragging_down = False + + def _update_state(self): + super()._update_state() + + new_y = 0.0 + + if self._dragging_down: + self._nav_bar.set_alpha(1.0) + + # FIXME: disabling this widget on new push_widget still causes this widget to track mouse events without mouse down + if not self.enabled: + self._drag_start_pos = None + + if self._drag_start_pos is not None: + last_mouse_event = gui_app.last_mouse_event + # push entire widget as user drags it away + new_y = max(last_mouse_event.pos.y - self._drag_start_pos.y, 0) + if new_y < SWIPE_AWAY_THRESHOLD: + new_y /= 2 # resistance until mouse release would dismiss widget + + if self._playing_dismiss_animation: + new_y = self._rect.height + DISMISS_PUSH_OFFSET + + new_y = self._y_pos_filter.update(new_y) + if abs(new_y) < 1 and abs(self._y_pos_filter.velocity.x) < 0.5: + new_y = self._y_pos_filter.x = 0.0 + self._y_pos_filter.velocity.x = 0.0 + + if self._shown_callback is not None: + self._shown_callback() + self._shown_callback = None + + if new_y > self._rect.height + DISMISS_PUSH_OFFSET - 10: + gui_app.pop_widget() + + # Only one callback should ever be fired + if self._dismiss_callback is not None: + self._dismiss_callback() + self._dismiss_callback = None + elif self._back_callback is not None: + self._back_callback() + + self._playing_dismiss_animation = False + self._drag_start_pos = None + self._dragging_down = False + + self.set_position(self._rect.x, new_y) + + def _layout(self): + # Dim whatever is behind this widget, fading with position (runs after _update_state so position is correct) + overlay_alpha = int(200 * max(0.0, min(1.0, 1.0 - self._rect.y / self._rect.height))) if self._rect.height > 0 else 0 + rl.draw_rectangle_rec(rl.Rectangle(0, 0, self._rect.width, self._rect.height), rl.Color(0, 0, 0, overlay_alpha)) + + bounce_height = 20 + rl.draw_rectangle_rec(rl.Rectangle(self._rect.x, self._rect.y, self._rect.width, self._rect.height + bounce_height), rl.BLACK) + + def render(self, rect: rl.Rectangle | None = None) -> bool | int | None: + ret = super().render(rect) + + bar_x = self._rect.x + (self._rect.width - self._nav_bar.rect.width) / 2 + nav_bar_delayed = rl.get_time() - self._nav_bar_show_time < 0.4 + # User dragging or dismissing, nav bar follows NavWidget + if self._drag_start_pos is not None or self._playing_dismiss_animation: + self._nav_bar_y_filter.x = NAV_BAR_MARGIN + self._y_pos_filter.x + # Waiting to show + elif nav_bar_delayed: + self._nav_bar_y_filter.x = -NAV_BAR_MARGIN - NAV_BAR_HEIGHT + # Animate back to top + else: + self._nav_bar_y_filter.update(NAV_BAR_MARGIN) + + self._nav_bar.set_position(bar_x, self._nav_bar_y_filter.x) + self._nav_bar.render() + + return ret + + @property + def is_dismissing(self) -> bool: + return self._dragging_down or self._playing_dismiss_animation + + def dismiss(self, callback: Callable[[], None] | None = None): + """Programmatically trigger the dismiss animation. Calls pop_widget when done, then callback.""" + if not self._playing_dismiss_animation: + self._playing_dismiss_animation = True + self._y_pos_filter.update_alpha(DISMISS_ANIMATION_RC) + self._dismiss_callback = callback + + def show_event(self): + super().show_event() + + # Reset state + self._drag_start_pos = None + self._dragging_down = False + self._playing_dismiss_animation = False + self._dismiss_callback = None + # Start NavWidget off-screen, no matter how tall it is + self._y_pos_filter.update_alpha(0.1) + self._y_pos_filter.x = gui_app.height + self._y_pos_filter.velocity.x = 0.0 + + self._nav_bar_y_filter.x = -NAV_BAR_MARGIN - NAV_BAR_HEIGHT + self._nav_bar_show_time = rl.get_time() diff --git a/system/ui/widgets/network.py b/system/ui/widgets/network.py index f41a04c24..e739eef63 100644 --- a/system/ui/widgets/network.py +++ b/system/ui/widgets/network.py @@ -6,8 +6,8 @@ import pyray as rl from openpilot.system.ui.lib.application import gui_app from openpilot.system.ui.lib.multilang import tr from openpilot.system.ui.lib.scroll_panel import GuiScrollPanel -from openpilot.system.ui.lib.wifi_manager import WifiManager, SecurityType, Network, MeteredType -from openpilot.system.ui.widgets import Widget +from openpilot.system.ui.lib.wifi_manager import WifiManager, SecurityType, Network, MeteredType, normalize_ssid +from openpilot.system.ui.widgets import DialogResult, Widget from openpilot.system.ui.widgets.button import ButtonStyle, Button from openpilot.system.ui.widgets.confirm_dialog import ConfirmDialog from openpilot.system.ui.widgets.keyboard import Keyboard @@ -22,8 +22,8 @@ try: from openpilot.selfdrive.ui.lib.prime_state import PrimeType except Exception: Params = None - ui_state = None # type: ignore - PrimeType = None # type: ignore + ui_state = None + PrimeType = None NM_DEVICE_STATE_NEED_AUTH = 60 MIN_PASSWORD_LENGTH = 8 @@ -69,17 +69,14 @@ class NetworkUI(Widget): super().__init__() self._wifi_manager = wifi_manager self._current_panel: PanelType = PanelType.WIFI - self._wifi_panel = WifiManagerUI(wifi_manager) - self._advanced_panel = AdvancedNetworkSettings(wifi_manager) - self._nav_button = NavButton(tr("Advanced")) + self._wifi_panel = self._child(WifiManagerUI(wifi_manager)) + self._advanced_panel = self._child(AdvancedNetworkSettings(wifi_manager)) + self._nav_button = self._child(NavButton(tr("Advanced"))) self._nav_button.set_click_callback(self._cycle_panel) def show_event(self): + super().show_event() self._set_current_panel(PanelType.WIFI) - self._wifi_panel.show_event() - - def hide_event(self): - self._wifi_panel.hide_event() def _cycle_panel(self): if self._current_panel == PanelType.WIFI: @@ -187,8 +184,8 @@ class AdvancedNetworkSettings(Widget): self._wifi_manager.update_gsm_settings(roaming_state, self._params.get("GsmApn") or "", self._params.get_bool("GsmMetered")) def _edit_apn(self): - def update_apn(result): - if result != 1: + def update_apn(result: DialogResult): + if result != DialogResult.CONFIRM: return apn = self._keyboard.text.strip() @@ -203,7 +200,8 @@ class AdvancedNetworkSettings(Widget): self._keyboard.reset(min_text_size=0) self._keyboard.set_title(tr("Enter APN"), tr("leave blank for automatic configuration")) self._keyboard.set_text(current_apn) - gui_app.set_modal_overlay(self._keyboard, update_apn) + self._keyboard.set_callback(update_apn) + gui_app.push_widget(self._keyboard) def _toggle_cellular_metered(self): metered = self._cellular_metered_action.get_state() @@ -216,15 +214,18 @@ class AdvancedNetworkSettings(Widget): self._wifi_manager.set_current_network_metered(metered_type) def _connect_to_hidden_network(self): - def connect_hidden(result): - if result != 1: + def connect_hidden(result: DialogResult): + if result != DialogResult.CONFIRM: return ssid = self._keyboard.text if not ssid: return - def enter_password(result): + def enter_password(result: DialogResult): + if result != DialogResult.CONFIRM: + return + password = self._keyboard.text if password == "": # connect without password @@ -235,15 +236,17 @@ class AdvancedNetworkSettings(Widget): self._keyboard.reset(min_text_size=0) self._keyboard.set_title(tr("Enter password"), tr("for \"{}\"").format(ssid)) - gui_app.set_modal_overlay(self._keyboard, enter_password) + self._keyboard.set_callback(enter_password) + gui_app.push_widget(self._keyboard) self._keyboard.reset(min_text_size=1) self._keyboard.set_title(tr("Enter SSID"), "") - gui_app.set_modal_overlay(self._keyboard, connect_hidden) + self._keyboard.set_callback(connect_hidden) + gui_app.push_widget(self._keyboard) def _edit_tethering_password(self): - def update_password(result): - if result != 1: + def update_password(result: DialogResult): + if result != DialogResult.CONFIRM: return password = self._keyboard.text @@ -253,7 +256,8 @@ class AdvancedNetworkSettings(Widget): self._keyboard.reset(min_text_size=MIN_PASSWORD_LENGTH) self._keyboard.set_title(tr("Enter new tethering password"), "") self._keyboard.set_text(self._wifi_manager.tethering_password) - gui_app.set_modal_overlay(self._keyboard, update_password) + self._keyboard.set_callback(update_password) + gui_app.push_widget(self._keyboard) def _update_state(self): self._wifi_manager.process_callbacks() @@ -292,10 +296,12 @@ class WifiManagerUI(Widget): disconnected=self._on_disconnected) def show_event(self): + super().show_event() # start/stop scanning when widget is visible self._wifi_manager.set_active(True) def hide_event(self): + super().hide_event() self._wifi_manager.set_active(False) def _load_icons(self): @@ -311,31 +317,32 @@ class WifiManagerUI(Widget): return if self.state == UIState.NEEDS_AUTH and self._state_network: - self.keyboard.set_title(tr("Wrong password") if self._password_retry else tr("Enter password"), tr("for \"{}\"").format(self._state_network.ssid)) + self.keyboard.set_title(tr("Wrong password") if self._password_retry else tr("Enter password"), + tr("for \"{}\"").format(normalize_ssid(self._state_network.ssid))) self.keyboard.reset(min_text_size=MIN_PASSWORD_LENGTH) - gui_app.set_modal_overlay(self.keyboard, lambda result: self._on_password_entered(cast(Network, self._state_network), result)) + self.keyboard.set_callback(lambda result: self._on_password_entered(cast(Network, self._state_network), result)) + gui_app.push_widget(self.keyboard) elif self.state == UIState.SHOW_FORGET_CONFIRM and self._state_network: - confirm_dialog = ConfirmDialog("", tr("Forget"), tr("Cancel")) - confirm_dialog.set_text(tr("Forget Wi-Fi Network \"{}\"?").format(self._state_network.ssid)) - confirm_dialog.reset() - gui_app.set_modal_overlay(confirm_dialog, callback=lambda result: self.on_forgot_confirm_finished(self._state_network, result)) + confirm_dialog = ConfirmDialog("", tr("Forget"), tr("Cancel"), callback=lambda result: self.on_forgot_confirm_finished(self._state_network, result)) + confirm_dialog.set_text(tr("Forget Wi-Fi Network \"{}\"?").format(normalize_ssid(self._state_network.ssid))) + gui_app.push_widget(confirm_dialog) else: self._draw_network_list(rect) - def _on_password_entered(self, network: Network, result: int): - if result == 1: + def _on_password_entered(self, network: Network, result: DialogResult): + if result == DialogResult.CONFIRM: password = self.keyboard.text self.keyboard.clear() if len(password) >= MIN_PASSWORD_LENGTH: self.connect_to_network(network, password) - elif result == 0: + elif result == DialogResult.CANCEL: self.state = UIState.IDLE - def on_forgot_confirm_finished(self, network, result: int): - if result == 1: + def on_forgot_confirm_finished(self, network, result: DialogResult): + if result == DialogResult.CONFIRM: self.forget_network(network) - elif result == 0: + elif result == DialogResult.CANCEL: self.state = UIState.IDLE def _draw_network_list(self, rect: rl.Rectangle): @@ -383,7 +390,7 @@ class WifiManagerUI(Widget): gui_label(status_text_rect, status_text, font_size=48, alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER) else: # If the network is saved, show the "Forget" button - if network.is_saved: + if self._wifi_manager.is_connection_saved(network.ssid): forget_btn_rect = rl.Rectangle( security_icon_rect.x - self.btn_width - spacing, rect.y + (ITEM_HEIGHT - 80) / 2, @@ -396,11 +403,11 @@ class WifiManagerUI(Widget): self._draw_signal_strength_icon(signal_icon_rect, network) def _networks_buttons_callback(self, network): - if not network.is_saved and network.security_type != SecurityType.OPEN: + if not self._wifi_manager.is_connection_saved(network.ssid) and network.security_type != SecurityType.OPEN: self.state = UIState.NEEDS_AUTH self._state_network = network self._password_retry = False - elif not network.is_connected: + elif self._wifi_manager.wifi_state.ssid != network.ssid: self.connect_to_network(network) def _forget_networks_buttons_callback(self, network): @@ -410,7 +417,7 @@ class WifiManagerUI(Widget): def _draw_status_icon(self, rect, network: Network): """Draw the status icon based on network's connection state""" icon_file = None - if network.is_connected and self.state != UIState.CONNECTING: + if self._wifi_manager.connected_ssid == network.ssid and self.state != UIState.CONNECTING: icon_file = "icons/checkmark.png" elif network.security_type == SecurityType.UNSUPPORTED: icon_file = "icons/circled_slash.png" @@ -432,7 +439,7 @@ class WifiManagerUI(Widget): def connect_to_network(self, network: Network, password=''): self.state = UIState.CONNECTING self._state_network = network - if network.is_saved and not password: + if self._wifi_manager.is_connection_saved(network.ssid) and not password: self._wifi_manager.activate_connection(network.ssid) else: self._wifi_manager.connect_to_network(network.ssid, password) @@ -445,7 +452,7 @@ class WifiManagerUI(Widget): def _on_network_updated(self, networks: list[Network]): self._networks = networks for n in self._networks: - self._networks_buttons[n.ssid] = Button(n.ssid, partial(self._networks_buttons_callback, n), font_size=55, + self._networks_buttons[n.ssid] = Button(normalize_ssid(n.ssid), partial(self._networks_buttons_callback, n), font_size=55, text_alignment=rl.GuiTextAlignment.TEXT_ALIGN_LEFT, button_style=ButtonStyle.TRANSPARENT_WHITE_TEXT) self._networks_buttons[n.ssid].set_touch_valid_callback(lambda: self.scroll_panel.is_touch_valid()) self._forget_networks_buttons[n.ssid] = Button(tr("Forget"), partial(self._forget_networks_buttons_callback, n), button_style=ButtonStyle.FORGET_WIFI, @@ -463,7 +470,7 @@ class WifiManagerUI(Widget): if self.state == UIState.CONNECTING: self.state = UIState.IDLE - def _on_forgotten(self): + def _on_forgotten(self, _): if self.state == UIState.FORGETTING: self.state = UIState.IDLE @@ -474,10 +481,10 @@ class WifiManagerUI(Widget): def main(): gui_app.init_window("Wi-Fi Manager") - wifi_ui = WifiManagerUI(WifiManager()) + gui_app.push_widget(WifiManagerUI(WifiManager())) for _ in gui_app.render(): - wifi_ui.render(rl.Rectangle(50, 50, gui_app.width - 100, gui_app.height - 100)) + pass gui_app.close() diff --git a/system/ui/widgets/option_dialog.py b/system/ui/widgets/option_dialog.py index 62578d1cf..206400a74 100644 --- a/system/ui/widgets/option_dialog.py +++ b/system/ui/widgets/option_dialog.py @@ -1,5 +1,6 @@ import pyray as rl -from openpilot.system.ui.lib.application import FontWeight +from collections.abc import Callable +from openpilot.system.ui.lib.application import gui_app, FontWeight from openpilot.system.ui.lib.multilang import tr from openpilot.system.ui.widgets import Widget, DialogResult from openpilot.system.ui.widgets.button import Button, ButtonStyle @@ -17,13 +18,13 @@ LIST_ITEM_SPACING = 25 class MultiOptionDialog(Widget): - def __init__(self, title, options, current="", option_font_weight=FontWeight.MEDIUM): + def __init__(self, title, options, current="", option_font_weight=FontWeight.MEDIUM, callback: Callable[[DialogResult], None] | None = None): super().__init__() self.title = title self.options = options self.current = current self.selection = current - self._result: DialogResult = DialogResult.NO_ACTION + self._callback = callback # Create scroller with option buttons self.option_buttons = [Button(option, click_callback=lambda opt=option: self._on_option_clicked(opt), @@ -36,7 +37,9 @@ class MultiOptionDialog(Widget): self.select_button = Button(lambda: tr("Select"), click_callback=lambda: self._set_result(DialogResult.CONFIRM), button_style=ButtonStyle.PRIMARY) def _set_result(self, result: DialogResult): - self._result = result + gui_app.pop_widget() + if self._callback: + self._callback(result) def _on_option_clicked(self, option): self.selection = option @@ -74,5 +77,3 @@ class MultiOptionDialog(Widget): select_rect = rl.Rectangle(content_rect.x + button_w + BUTTON_SPACING, button_y, button_w, BUTTON_HEIGHT) self.select_button.set_enabled(self.selection != self.current) self.select_button.render(select_rect) - - return self._result diff --git a/system/ui/widgets/scroller.py b/system/ui/widgets/scroller.py index e941486a4..a3a0d2b38 100644 --- a/system/ui/widgets/scroller.py +++ b/system/ui/widgets/scroller.py @@ -3,38 +3,31 @@ import numpy as np from collections.abc import Callable from openpilot.common.filter_simple import FirstOrderFilter, BounceFilter +from openpilot.common.swaglog import cloudlog from openpilot.system.ui.lib.application import gui_app from openpilot.system.ui.lib.scroll_panel2 import GuiScrollPanel2, ScrollState from openpilot.system.ui.widgets import Widget +from openpilot.system.ui.widgets.nav_widget import NavWidget ITEM_SPACING = 20 LINE_COLOR = rl.GRAY LINE_PADDING = 40 ANIMATION_SCALE = 0.6 + +MOVE_LIFT = 20 +MOVE_OVERLAY_ALPHA = 0.65 +SCROLL_RC = 0.15 + EDGE_SHADOW_WIDTH = 20 MIN_ZOOM_ANIMATION_TIME = 0.075 # seconds DO_ZOOM = False DO_JELLO = False -SCROLL_BAR = False - - -class LineSeparator(Widget): - def __init__(self, height: int = 1): - super().__init__() - self._rect = rl.Rectangle(0, 0, 0, height) - - def set_parent_rect(self, parent_rect: rl.Rectangle) -> None: - super().set_parent_rect(parent_rect) - self._rect.width = parent_rect.width - - def _render(self, _): - rl.draw_line(int(self._rect.x) + LINE_PADDING, int(self._rect.y), - int(self._rect.x + self._rect.width) - LINE_PADDING, int(self._rect.y), - LINE_COLOR) class ScrollIndicator(Widget): + HORIZONTAL_MARGIN = 4 + def __init__(self): super().__init__() self._txt_scroll_indicator = gui_app.texture("icons_mici/settings/horizontal_scroll_indicator.png", 96, 48) @@ -48,23 +41,23 @@ class ScrollIndicator(Widget): self._viewport = viewport def _render(self, _): - if self._viewport.width <= 0 or self._viewport.height <= 0: - return + # scale indicator width based on content size + indicator_w = float(np.interp(self._content_size, [1000, 3000], [300, 100])) - indicator_w = min(float(np.interp(self._content_size, [1000, 3000], [300, 100])), self._viewport.width) + # position based on scroll ratio + slide_range = self._viewport.width - indicator_w max_scroll = self._content_size - self._viewport.width - if max_scroll > 0: - scroll_ratio = -self._scroll_offset / max_scroll - slide_range = max(self._viewport.width - indicator_w, 0.0) - x = self._viewport.x + scroll_ratio * slide_range - else: - x = self._viewport.x + (self._viewport.width - indicator_w) / 2 + scroll_ratio = (-self._scroll_offset / abs(max_scroll)) if abs(max_scroll) > 1e-3 else 0.0 + x = self._viewport.x + scroll_ratio * slide_range + # don't bounce up when NavWidget shows y = max(self._viewport.y, 0) + self._viewport.height - self._txt_scroll_indicator.height / 2 + # squeeze when overscrolling past edges dest_left = max(x, self._viewport.x) dest_right = min(x + indicator_w, self._viewport.x + self._viewport.width) dest_w = max(indicator_w / 2, dest_right - dest_left) + # keep within viewport after applying minimum width dest_left = min(dest_left, self._viewport.x + self._viewport.width - dest_w) dest_left = max(dest_left, self._viewport.x) @@ -74,23 +67,21 @@ class ScrollIndicator(Widget): rl.Color(255, 255, 255, int(255 * 0.45))) -class Scroller(Widget): - def __init__(self, items: list[Widget], horizontal: bool = True, snap_items: bool = True, spacing: int = ITEM_SPACING, - line_separator: bool = False, pad_start: int = ITEM_SPACING, pad_end: int = ITEM_SPACING, - scroll_indicator: bool = False, edge_shadows: bool = False): +class _Scroller(Widget): + """Should use wrapper below to reduce boilerplate""" + def __init__(self, items: list[Widget], horizontal: bool = True, snap_items: bool = False, spacing: int = ITEM_SPACING, + pad: int = ITEM_SPACING, scroll_indicator: bool = True, edge_shadows: bool = True): super().__init__() self._items: list[Widget] = [] self._horizontal = horizontal self._snap_items = snap_items self._spacing = spacing - self._line_separator = LineSeparator() if line_separator else None - self._pad_start = pad_start - self._pad_end = pad_end + self._pad = pad self._reset_scroll_at_show = True - self._scrolling_to: float | None = None - self._scroll_filter = FirstOrderFilter(0.0, 0.1, 1 / gui_app.target_fps) + self._scrolling_to: tuple[float | None, bool] = (None, False) # target offset, block_interaction + self._scrolling_to_filter = FirstOrderFilter(0.0, SCROLL_RC, 1 / gui_app.target_fps) self._zoom_filter = FirstOrderFilter(1.0, 0.2, 1 / gui_app.target_fps) self._zoom_out_t: float = 0.0 @@ -107,22 +98,27 @@ class Scroller(Widget): self.scroll_panel = GuiScrollPanel2(self._horizontal, handle_out_of_bounds=not self._snap_items) self._scroll_enabled: bool | Callable[[], bool] = True - self._txt_vertical_scroll_indicator = gui_app.texture("icons_mici/settings/vertical_scroll_indicator.png", 40, 80) self._show_scroll_indicator = scroll_indicator and self._horizontal self._scroll_indicator = ScrollIndicator() self._edge_shadows = edge_shadows and self._horizontal - for item in items: - self.add_widget(item) + # move animation state + # on move; lift src widget -> wait -> move all -> wait -> drop src widget + self._overlay_filter = FirstOrderFilter(0.0, 0.05, 1 / gui_app.target_fps) + self._move_animations: dict[Widget, FirstOrderFilter] = {} + self._move_lift: dict[Widget, FirstOrderFilter] = {} + # these are used to wait before moving/dropping, also to move onto next part of the animation earlier for timing + self._pending_lift: set[Widget] = set() + self._pending_move: set[Widget] = set() - @property - def items(self) -> list[Widget]: - return self._items + self.add_widgets(items) def set_reset_scroll_at_show(self, scroll: bool): self._reset_scroll_at_show = scroll - def scroll_to(self, pos: float, smooth: bool = False): + def scroll_to(self, pos: float, smooth: bool = False, block_interaction: bool = False): + assert not block_interaction or smooth, "Instant scroll cannot block user interaction" + # already there if abs(pos) < 1: return @@ -130,25 +126,35 @@ class Scroller(Widget): # FIXME: the padding correction doesn't seem correct scroll_offset = self.scroll_panel.get_offset() - pos if smooth: - self._scrolling_to = scroll_offset + self._scrolling_to_filter.x = self.scroll_panel.get_offset() + self._scrolling_to = scroll_offset, block_interaction else: self.scroll_panel.set_offset(scroll_offset) @property def is_auto_scrolling(self) -> bool: - return self._scrolling_to is not None + return self._scrolling_to[0] is not None + + @property + def items(self) -> list[Widget]: + return self._items + + @property + def content_size(self) -> float: + return self._content_size def add_widget(self, item: Widget) -> None: self._items.append(item) - item.set_touch_valid_callback(lambda: self.scroll_panel.is_touch_valid() and self.enabled) - def move_item(self, from_index: int, to_index: int) -> None: - if from_index == to_index: - return - if not (0 <= from_index < len(self._items) and 0 <= to_index < len(self._items)): - return - item = self._items.pop(from_index) - self._items.insert(to_index, item) + # preserve original touch valid callback + original_touch_valid_callback = item._touch_valid_callback + item.set_touch_valid_callback(lambda: self.scroll_panel.is_touch_valid() and self.enabled and self._scrolling_to[0] is None + and not self.moving_items and (original_touch_valid_callback() if + original_touch_valid_callback else True)) + + def add_widgets(self, items: list[Widget]) -> None: + for item in items: + self.add_widget(item) def set_scrolling_enabled(self, enabled: bool | Callable[[], bool]) -> None: """Set whether scrolling is enabled (does not affect widget enabled state).""" @@ -156,7 +162,7 @@ class Scroller(Widget): def _update_state(self): if DO_ZOOM: - if self._scrolling_to is not None or self.scroll_panel.state != ScrollState.STEADY: + if self._scrolling_to[0] is not None or self.scroll_panel.state != ScrollState.STEADY: self._zoom_out_t = rl.get_time() + MIN_ZOOM_ANIMATION_TIME self._zoom_filter.update(0.85) else: @@ -166,27 +172,25 @@ class Scroller(Widget): else: self._zoom_filter.update(0.85) - # Cancel auto-scroll if user starts manually scrolling - if self._scrolling_to is not None and (self.scroll_panel.state == ScrollState.PRESSED or self.scroll_panel.state == ScrollState.MANUAL_SCROLL): - self._scrolling_to = None + # Cancel auto-scroll if user starts manually scrolling (unless block_interaction) + if (self.scroll_panel.state in (ScrollState.PRESSED, ScrollState.MANUAL_SCROLL) and + self._scrolling_to[0] is not None and not self._scrolling_to[1]): + self._scrolling_to = None, False - if self._scrolling_to is not None: - self._scroll_filter.update(self._scrolling_to) - self.scroll_panel.set_offset(self._scroll_filter.x) + if self._scrolling_to[0] is not None and len(self._pending_lift) == 0: + self._scrolling_to_filter.update(self._scrolling_to[0]) + self.scroll_panel.set_offset(self._scrolling_to_filter.x) - if abs(self._scroll_filter.x - self._scrolling_to) < 1: - self.scroll_panel.set_offset(self._scrolling_to) - self._scrolling_to = None - else: - # keep current scroll position up to date - self._scroll_filter.x = self.scroll_panel.get_offset() + if abs(self._scrolling_to_filter.x - self._scrolling_to[0]) < 1: + self.scroll_panel.set_offset(self._scrolling_to[0]) + self._scrolling_to = None, False def _get_scroll(self, visible_items: list[Widget], content_size: float) -> float: scroll_enabled = self._scroll_enabled() if callable(self._scroll_enabled) else self._scroll_enabled - self.scroll_panel.set_enabled(scroll_enabled and self.enabled) + self.scroll_panel.set_enabled(scroll_enabled and self.enabled and not self._scrolling_to[1]) self.scroll_panel.update(self._rect, content_size) if not self._snap_items: - return round(self.scroll_panel.get_offset()) + return self.scroll_panel.get_offset() # Snap closest item to center center_pos = self._rect.x + self._rect.width / 2 if self._horizontal else self._rect.y + self._rect.height / 2 @@ -222,29 +226,86 @@ class Scroller(Widget): return self.scroll_panel.get_offset() + @property + def moving_items(self) -> bool: + return len(self._move_animations) > 0 or len(self._move_lift) > 0 + + def move_item(self, from_idx: int, to_idx: int): + assert self._horizontal + if from_idx == to_idx: + return + + if self.moving_items: + cloudlog.warning(f"Already moving items, cannot move from {from_idx} to {to_idx}") + return + + item = self._items.pop(from_idx) + self._items.insert(to_idx, item) + + # store original position in content space of all affected widgets to animate from + for idx in range(min(from_idx, to_idx), max(from_idx, to_idx) + 1): + affected_item = self._items[idx] + self._move_animations[affected_item] = FirstOrderFilter(affected_item.rect.x - self._scroll_offset, SCROLL_RC, 1 / gui_app.target_fps) + self._pending_move.add(affected_item) + + # lift only src widget to make it more clear which one is moving + self._move_lift[item] = FirstOrderFilter(0.0, SCROLL_RC, 1 / gui_app.target_fps) + self._pending_lift.add(item) + + def _do_move_animation(self, item: Widget, target_x: float, target_y: float) -> tuple[float, float]: + # wait a frame before moving so we match potential pending scroll animation + can_start_move = len(self._pending_lift) == 0 + + if item in self._move_lift: + lift_filter = self._move_lift[item] + + # Animate lift + if len(self._pending_move) > 0: + lift_filter.update(MOVE_LIFT) + # start moving when almost lifted + if abs(lift_filter.x - MOVE_LIFT) < 2: + self._pending_lift.discard(item) + else: + # if done moving, animate down + lift_filter.update(0) + if abs(lift_filter.x) < 1: + del self._move_lift[item] + target_y -= lift_filter.x + + # Animate move + if item in self._move_animations: + move_filter = self._move_animations[item] + + # compare/update in content space to match filter + content_x = target_x - self._scroll_offset + if can_start_move: + move_filter.update(content_x) + + # drop when close to target + if abs(move_filter.x - content_x) < 10: + self._pending_move.discard(item) + + # finished moving + if abs(move_filter.x - content_x) < 1: + del self._move_animations[item] + target_x = move_filter.x + self._scroll_offset + + return target_x, target_y + def _layout(self): self._visible_items = [item for item in self._items if item.is_visible] - # Add line separator between items - if self._line_separator is not None: - l = len(self._visible_items) - for i in range(1, len(self._visible_items)): - self._visible_items.insert(l - i, self._line_separator) - self._content_size = sum(item.rect.width if self._horizontal else item.rect.height for item in self._visible_items) self._content_size += self._spacing * (len(self._visible_items) - 1) - self._content_size += self._pad_start + self._pad_end + self._content_size += self._pad * 2 self._scroll_offset = self._get_scroll(self._visible_items, self._content_size) - rl.begin_scissor_mode(int(self._rect.x), int(self._rect.y), - int(self._rect.width), int(self._rect.height)) - self._item_pos_filter.update(self._scroll_offset) cur_pos = 0 for idx, item in enumerate(self._visible_items): - spacing = self._spacing if (idx > 0) else self._pad_start + spacing = self._spacing if (idx > 0) else self._pad # Nicely lay out items horizontally/vertically if self._horizontal: x = self._rect.x + cur_pos + spacing @@ -276,60 +337,125 @@ class Scroller(Widget): [self._item_pos_filter.x, self._scroll_offset, self._item_pos_filter.x]) y -= np.clip(jello_offset, -20, 20) + # Animate moves if needed + x, y = self._do_move_animation(item, x, y) + # Update item state - item.set_position(round(x), round(y)) # round to prevent jumping when settling + item.set_position(x, y) item.set_parent_rect(self._rect) + def _render_item(self, item: Widget): + # Skip rendering if not in viewport + if not rl.check_collision_recs(item.rect, self._rect): + return + + # Scale each element around its own origin when scrolling + scale = self._zoom_filter.x + if scale != 1.0: + rl.rl_push_matrix() + rl.rl_scalef(scale, scale, 1.0) + rl.rl_translatef((1 - scale) * (item.rect.x + item.rect.width / 2) / scale, + (1 - scale) * (item.rect.y + item.rect.height / 2) / scale, 0) + item.render() + rl.rl_pop_matrix() + else: + item.render() + def _render(self, _): - for item in self._visible_items: - # Skip rendering if not in viewport - if not rl.check_collision_recs(item.rect, self._rect): + rl.begin_scissor_mode(int(self._rect.x), int(self._rect.y), + int(self._rect.width), int(self._rect.height)) + + for item in reversed(self._visible_items): + if item in self._move_lift: continue + self._render_item(item) - # Scale each element around its own origin when scrolling - scale = self._zoom_filter.x - if scale != 1.0: - rl.rl_push_matrix() - rl.rl_scalef(scale, scale, 1.0) - rl.rl_translatef((1 - scale) * (item.rect.x + item.rect.width / 2) / scale, - (1 - scale) * (item.rect.y + item.rect.height / 2) / scale, 0) - item.render() - rl.rl_pop_matrix() - else: - item.render() + # Dim background if moving items, lifted items are above + self._overlay_filter.update(MOVE_OVERLAY_ALPHA if len(self._pending_move) else 0.0) + if self._overlay_filter.x > 0.01: + rl.draw_rectangle_rec(self._rect, rl.Color(0, 0, 0, int(255 * self._overlay_filter.x))) - # Draw scroll indicator - if SCROLL_BAR and not self._horizontal and len(self._visible_items) > 0: - _real_content_size = self._content_size - self._rect.height + self._txt_vertical_scroll_indicator.height - scroll_bar_y = -self._scroll_offset / _real_content_size * self._rect.height - scroll_bar_y = min(max(scroll_bar_y, self._rect.y), self._rect.y + self._rect.height - self._txt_vertical_scroll_indicator.height) - rl.draw_texture_ex(self._txt_vertical_scroll_indicator, rl.Vector2(self._rect.x, scroll_bar_y), 0, 1.0, rl.WHITE) + for item in self._move_lift: + self._render_item(item) rl.end_scissor_mode() + # Draw edge shadows on top of scroller content if self._edge_shadows: rl.draw_rectangle_gradient_h(int(self._rect.x), int(self._rect.y), EDGE_SHADOW_WIDTH, int(self._rect.height), - rl.Color(0, 0, 0, 166), rl.BLANK) + rl.Color(0, 0, 0, 204), rl.BLANK) right_x = int(self._rect.x + self._rect.width - EDGE_SHADOW_WIDTH) rl.draw_rectangle_gradient_h(right_x, int(self._rect.y), EDGE_SHADOW_WIDTH, int(self._rect.height), - rl.BLANK, rl.Color(0, 0, 0, 166)) + rl.BLANK, rl.Color(0, 0, 0, 204)) + # Draw scroll indicator on top of edge shadows if self._show_scroll_indicator and len(self._visible_items) > 0: self._scroll_indicator.update(self._scroll_offset, self._content_size, self._rect) self._scroll_indicator.render() def show_event(self): super().show_event() + for item in self._items: + item.show_event() + if self._reset_scroll_at_show: self.scroll_panel.set_offset(0.0) - for item in self._items: - item.show_event() + self._overlay_filter.x = 0.0 + self._move_animations.clear() + self._move_lift.clear() + self._pending_lift.clear() + self._pending_move.clear() + self._scrolling_to = None, False + self._scrolling_to_filter.x = 0.0 def hide_event(self): super().hide_event() for item in self._items: item.hide_event() + + +class Scroller(Widget): + """Wrapper for _Scroller so that children do not need to call events or pass down enabled for nav stack.""" + def __init__(self, **kwargs): + super().__init__() + self._scroller = self._child(_Scroller([], **kwargs)) + # pass down enabled to child widget for nav stack + self._scroller.set_enabled(lambda: self.enabled) + + def _render(self, _): + self._scroller.render(self._rect) + + +class NavScroller(NavWidget, Scroller): + """Full screen Scroller that properly supports nav stack w/ animations""" + def __init__(self, **kwargs): + super().__init__(**kwargs) + # pass down enabled to child widget for nav stack + disable while swiping away NavWidget + self._scroller.set_enabled(lambda: self.enabled and not self.is_dismissing) + + def _back_enabled(self) -> bool: + # Vertical scrollers need to be at the top to swipe away to prevent erroneous swipes + # TODO: only used for offroad alerts, remove when horizontal + return self._scroller._horizontal or self._scroller.scroll_panel.get_offset() >= -20 # some tolerance + + +# TODO: only used for a few vertical scrollers, remove when horizontal +class NavRawScrollPanel(NavWidget): + # can swipe anywhere, only when at top + BACK_TOUCH_AREA_PERCENTAGE = 1.0 + + def __init__(self): + super().__init__() + self._scroll_panel = GuiScrollPanel2(horizontal=False) + self._scroll_panel.set_enabled(lambda: self.enabled and not self.is_dismissing) + + def show_event(self): + super().show_event() + self._scroll_panel.set_offset(0) + + def _back_enabled(self) -> bool: + return self._scroll_panel.get_offset() >= -20 diff --git a/system/ui/widgets/selection_dialog.py b/system/ui/widgets/selection_dialog.py deleted file mode 100644 index f984e75f6..000000000 --- a/system/ui/widgets/selection_dialog.py +++ /dev/null @@ -1,290 +0,0 @@ -from enum import IntEnum -from collections.abc import Callable -import pyray as rl - -from openpilot.system.ui.lib.application import gui_app, FontWeight -from openpilot.system.ui.lib.multilang import tr -from openpilot.system.ui.widgets import Widget, DialogResult -from openpilot.system.ui.widgets.button import Button, ButtonStyle -from openpilot.system.ui.widgets.label import Label -from openpilot.system.ui.widgets.scroller_tici import Scroller - -SELECTION_COLOR = rl.Color(70, 91, 234, 255) # #465BEA -HEADER_BG = rl.Color(51, 51, 51, 255) # #333333 -BACKGROUND_COLOR = rl.Color(27, 27, 27, 255) # #1B1B1B -BORDER_COLOR = rl.Color(80, 80, 80, 255) -MARGIN = 40 -OUTER_MARGIN_X = 100 -OUTER_MARGIN_Y = 80 -BUTTON_HEIGHT = 90 - -class SortMode(IntEnum): - ALPHABETICAL = 0 - DATE_NEWEST = 1 - DATE_OLDEST = 2 - FAVORITES = 3 - -class SelectionHeader(Widget): - def __init__(self, text: str, is_expanded: bool, callback: Callable[[str], None]): - super().__init__() - self._text = text - self._is_expanded = is_expanded - self._callback = callback - self._font = gui_app.font(FontWeight.BOLD) - self._font_size = 40 - self._pressed = False - self.set_rect(rl.Rectangle(0, 0, 0, 70)) - - def set_parent_rect(self, parent_rect: rl.Rectangle) -> None: - super().set_parent_rect(parent_rect) - self._rect.width = parent_rect.width - - def _render(self, rect: rl.Rectangle): - # Header background - Match Qt .series-header {#333333} - bg_color = rl.Color(64, 64, 64, 255) if self._pressed else HEADER_BG - rl.draw_rectangle_rounded(rect, 0.1, 10, bg_color) - - # Arrow - Match Qt text-based arrows - arrow = "▼" if self._is_expanded else "▶" - arrow_pos = rl.Vector2(rect.x + 30, rect.y + (rect.height - self._font_size) / 2) - rl.draw_text_ex(self._font, arrow, arrow_pos, self._font_size, 0, rl.WHITE) - - # Text - Match Qt padding-left: 80px - text_pos = rl.Vector2(rect.x + 80, rect.y + (rect.height - self._font_size) / 2) - rl.draw_text_ex(self._font, self._text, text_pos, self._font_size, 0, rl.WHITE) - - def _handle_mouse_press(self, mouse_pos): - if rl.check_collision_point_rec(mouse_pos, self._hit_rect): - self._pressed = True - - def _handle_mouse_release(self, mouse_pos): - if self._pressed and rl.check_collision_point_rec(mouse_pos, self._hit_rect): - if self._callback: - self._callback(self._text) - self._pressed = False - -class SelectionItem(Widget): - def __init__(self, text: str, is_selected: bool, callback: Callable[[str], None]): - super().__init__() - self._text = text - self._is_selected = is_selected - self._callback = callback - self._font = gui_app.font(FontWeight.MEDIUM) - self._font_size = 48 - self._pressed = False - self.set_rect(rl.Rectangle(0, 0, 0, 110)) - - def set_parent_rect(self, parent_rect: rl.Rectangle) -> None: - super().set_parent_rect(parent_rect) - self._rect.width = parent_rect.width - - def _render(self, rect: rl.Rectangle): - # Background for item - Match Qt .model-option:checked {#465BEA} - if self._is_selected: - bg_color = rl.Color(70, 91, 234, 255) # #465BEA - else: - bg_color = rl.Color(90, 90, 90, 255) if self._pressed else rl.Color(79, 79, 79, 255) # #4F4F4F - - rl.draw_rectangle_rounded(rect, 0.1, 10, bg_color) - - # Selection Border - Match Qt {3px WHITE} - if self._is_selected: - rl.draw_rectangle_rounded_lines_ex(rect, 0.1, 10, 3, rl.WHITE) - - # Text - text_size = rl.measure_text_ex(self._font, self._text, self._font_size, 0) - text_pos = rl.Vector2(rect.x + 40, rect.y + (rect.height - text_size.y) / 2) - rl.draw_text_ex(self._font, self._text, text_pos, self._font_size, 0, rl.WHITE) - - # Indicator (Dot for selection instead of radio) - if self._is_selected: - circle_center = rl.Vector2(rect.x + rect.width - 50, rect.y + rect.height / 2) - rl.draw_circle_v(circle_center, 12, rl.WHITE) - - def _handle_mouse_press(self, mouse_pos): - if rl.check_collision_point_rec(mouse_pos, self._hit_rect): - self._pressed = True - - def _handle_mouse_release(self, mouse_pos): - if self._pressed and rl.check_collision_point_rec(mouse_pos, self._hit_rect): - if self._callback: - self._callback(self._text) - self._pressed = False - -class SelectionDialog(Widget): - def __init__(self, title: str, options, current_selection: str = "", - on_close: Callable[[DialogResult, str], None] | None = None, - model_released_dates: dict[str, str] | None = None, - model_file_to_name: dict[str, str] | None = None, - user_favorites: list[str] | None = None, - community_favorites: list[str] | None = None, - on_favorite_toggled: Callable[[str], None] | None = None, - favorites_editable: bool = True): - super().__init__() - self._title = title - self._options_raw = options - self._selected_value = current_selection - self._on_close = on_close - self._model_released_dates = model_released_dates or {} - self._name_to_file = {v: k for k, v in (model_file_to_name or {}).items()} - self._user_favorites = user_favorites or [] - self._community_favorites = community_favorites or [] - self._on_favorite_toggled = on_favorite_toggled - self._favorites_editable = favorites_editable - - self._sort_mode = SortMode.ALPHABETICAL - self._expanded_series = {s: True for s in (options.keys() if isinstance(options, dict) else [])} - - self._title_label = Label(title, 60, FontWeight.BOLD, text_color=rl.WHITE) - self._sort_button = Button("Alphabetical", self._toggle_sort, button_style=ButtonStyle.NORMAL) - self._cancel_button = Button("Cancel", self._cancel_button_callback) - self._confirm_button = Button("Select", self._confirm_button_callback, button_style=ButtonStyle.PRIMARY) - - self._scroller = None - self._build_scroller() - - def _toggle_sort(self): - self._sort_mode = SortMode((int(self._sort_mode) + 1) % 4) - modes = ["Alphabetical", "Date (Newest)", "Date (Oldest)", "Favorites First"] - self._sort_button.set_text(modes[int(self._sort_mode)]) - self._build_scroller() - - def _toggle_series(self, series: str): - self._expanded_series[series] = not self._expanded_series.get(series, True) - self._build_scroller() - - def _build_scroller(self): - items = [] - - if isinstance(self._options_raw, dict): - series_keys = list(self._options_raw.keys()) - priority_series = ["StarPilot", "Comma", "Experimental"] - sorted_series_keys = [] - for p in priority_series: - if p in series_keys: - sorted_series_keys.append(p) - series_keys.remove(p) - sorted_series_keys.extend(sorted(series_keys)) - - for series in sorted_series_keys: - models = self._options_raw[series] - if not models: - continue - - items.append(SelectionHeader(series, self._expanded_series.get(series, True), self._toggle_series)) - - if self._expanded_series.get(series, True): - sorted_models = list(models) - if self._sort_mode == SortMode.ALPHABETICAL: - sorted_models.sort() - elif self._sort_mode == SortMode.DATE_NEWEST: - def get_date(m): - key = self._name_to_file.get(m, m) - return self._model_released_dates.get(key, "0000-00-00") - sorted_models.sort(key=get_date, reverse=True) - elif self._sort_mode == SortMode.DATE_OLDEST: - def get_date(m): - key = self._name_to_file.get(m, m) - return self._model_released_dates.get(key, "9999-99-99") - sorted_models.sort(key=get_date) - elif self._sort_mode == SortMode.FAVORITES: - def is_fav(m): - key = self._name_to_file.get(m, m) - return key in self._user_favorites or key in self._community_favorites - sorted_models.sort(key=is_fav, reverse=True) - - for model in sorted_models: - key = self._name_to_file.get(model, model) - is_selected = (model == self._selected_value or key == self._selected_value) - items.append(SelectionItem( - text=model, - is_selected=is_selected, - callback=self._on_item_selected - )) - else: - for option in self._options_raw: - items.append(SelectionItem( - text=option, - is_selected=(option == self._selected_value), - callback=self._on_item_selected - )) - - self._scroller = Scroller(items, line_separator=False, spacing=10) - self._scroller.show_event() - - def _toggle_favorite(self, model_name: str): - if not self._favorites_editable: - return - - key = self._name_to_file.get(model_name, model_name) - if self._on_favorite_toggled: - self._on_favorite_toggled(key) - # Update local state for instant feedback - if key in self._user_favorites: - self._user_favorites.remove(key) - else: - self._user_favorites.append(key) - self._build_scroller() - - def _on_item_selected(self, val): - self._selected_value = val - # Instant visual update - if self._scroller: - for item in self._scroller._items: - if isinstance(item, SelectionItem): - item._is_selected = (item._text == val) - - def _cancel_button_callback(self): - gui_app.set_modal_overlay(None) - if self._on_close: - self._on_close(DialogResult.CANCEL, "") - - def _confirm_button_callback(self): - gui_app.set_modal_overlay(None) - if self._on_close: - self._on_close(DialogResult.CONFIRM, self._selected_value) - - def show_event(self): - super().show_event() - if self._scroller: - self._scroller.show_event() - - def _render(self, rect: rl.Rectangle): - # Dim background - rl.draw_rectangle(0, 0, int(rl.get_screen_width()), int(rl.get_screen_height()), rl.Color(0, 0, 0, 180)) - - # Dialog Box - dialog_rect = rl.Rectangle( - rect.x + OUTER_MARGIN_X, - rect.y + OUTER_MARGIN_Y, - rect.width - 2 * OUTER_MARGIN_X, - rect.height - 2 * OUTER_MARGIN_Y, - ) - rl.draw_rectangle_rounded(dialog_rect, 0.04, 12, BACKGROUND_COLOR) - rl.draw_rectangle_rounded_lines_ex(dialog_rect, 0.04, 12, 2, BORDER_COLOR) - - # Title - title_width = dialog_rect.width - 2 * MARGIN - 260 - self._title_label.render(rl.Rectangle(dialog_rect.x + MARGIN, dialog_rect.y + MARGIN, title_width, 80)) - - # Sort Button - self._sort_button.render(rl.Rectangle(dialog_rect.x + dialog_rect.width - MARGIN - 240, dialog_rect.y + MARGIN, 240, 80)) - - # Bottom Buttons - btn_y = dialog_rect.y + dialog_rect.height - BUTTON_HEIGHT - MARGIN - btn_width = (dialog_rect.width - 3 * MARGIN) / 2 - - self._cancel_button.render(rl.Rectangle(dialog_rect.x + MARGIN, btn_y, btn_width, BUTTON_HEIGHT)) - self._confirm_button.render(rl.Rectangle(dialog_rect.x + 2 * MARGIN + btn_width, btn_y, btn_width, BUTTON_HEIGHT)) - - # Scrollable Options List - scroller_y = dialog_rect.y + MARGIN + 80 + 20 - scroller_rect = rl.Rectangle( - dialog_rect.x + MARGIN, - scroller_y, - dialog_rect.width - 2 * MARGIN, - btn_y - scroller_y - 20 - ) - self._scroller.render(scroller_rect) - - return DialogResult.NO_ACTION diff --git a/system/ui/widgets/slider.py b/system/ui/widgets/slider.py index e606c5c37..bf965954f 100644 --- a/system/ui/widgets/slider.py +++ b/system/ui/widgets/slider.py @@ -1,3 +1,4 @@ +import abc from collections.abc import Callable import pyray as rl @@ -5,22 +6,24 @@ import pyray as rl from openpilot.system.ui.lib.application import gui_app, FontWeight from openpilot.system.ui.widgets import Widget from openpilot.system.ui.widgets.label import UnifiedLabel -from openpilot.common.filter_simple import BounceFilter, FirstOrderFilter +from openpilot.common.filter_simple import FirstOrderFilter, BounceFilter -class SmallSlider(Widget): +class SliderBase(Widget, abc.ABC): HORIZONTAL_PADDING = 8 CONFIRM_DELAY = 0.2 PRESSED_SCALE = 1.07 + _bg_txt: rl.Texture + _circle_bg_txt: rl.Texture + _circle_bg_pressed_txt: rl.Texture + _circle_arrow_txt: rl.Texture + def __init__(self, title: str, confirm_callback: Callable | None = None, shimmer_offset: float = 0.0): - # TODO: unify this with BigConfirmationDialogV2 super().__init__() self._confirm_callback = confirm_callback self._shimmer_offset = shimmer_offset - self._font = gui_app.font(FontWeight.DISPLAY) - self._load_assets() self._drag_threshold = -self._rect.width // 2 @@ -37,17 +40,13 @@ class SmallSlider(Widget): self._is_dragging_circle = False - self._label = UnifiedLabel(title, font_size=36, font_weight=FontWeight.SEMI_BOLD, text_color=rl.WHITE, - alignment=rl.GuiTextAlignment.TEXT_ALIGN_RIGHT, - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE, line_height=0.9, shimmer=True) + self._label = self._child(UnifiedLabel(title, font_size=36, font_weight=FontWeight.SEMI_BOLD, text_color=rl.WHITE, + alignment=rl.GuiTextAlignment.TEXT_ALIGN_RIGHT, + alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE, line_height=0.9, shimmer=True)) + @abc.abstractmethod def _load_assets(self): - self.set_rect(rl.Rectangle(0, 0, 316 + self.HORIZONTAL_PADDING * 2, 100)) - - self._bg_txt = gui_app.texture("icons_mici/setup/small_slider/slider_bg.png", 316, 100) - self._circle_bg_txt = gui_app.texture("icons_mici/setup/small_slider/slider_red_circle.png", 100, 100) - self._circle_bg_pressed_txt = self._circle_bg_txt - self._circle_arrow_txt = gui_app.texture("icons_mici/setup/small_slider/slider_arrow.png", 37, 32) + ... @property def confirmed(self) -> bool: @@ -57,15 +56,13 @@ class SmallSlider(Widget): super().show_event() self.reset() - def reset(self, reset_shimmer: bool = True): + def reset(self): # reset all slider state self._is_dragging_circle = False + self._circle_press_time = None self._confirmed_time = 0.0 self._confirm_callback_called = False - self._circle_press_time = None - self._circle_scale_filter.x = 1.0 - if reset_shimmer: - self._label.reset_shimmer(self._shimmer_offset) + self._label.reset_shimmer(self._shimmer_offset) def set_opacity(self, opacity: float, smooth: bool = False): if smooth: @@ -114,15 +111,15 @@ class SmallSlider(Widget): activated_pos = int(-self._bg_txt.width + self._circle_bg_txt.width) self._scroll_x_circle = max(min(self._scroll_x_circle, 0), activated_pos) - if self._confirmed_time > 0: + if self.confirmed: # swiped left to confirm self._scroll_x_circle_filter.update(activated_pos) # activate once animation completes, small threshold for small floats if self._scroll_x_circle_filter.x < (activated_pos + 1): if not self._confirm_callback_called and (rl.get_time() - self._confirmed_time) >= self.CONFIRM_DELAY: - self._on_confirm() self._confirm_callback_called = True + self._on_confirm() elif not self._is_dragging_circle: # reset back to right @@ -132,8 +129,6 @@ class SmallSlider(Widget): self._scroll_x_circle_filter.x = self._scroll_x_circle def _render(self, _): - # TODO: iOS text shimmering animation - white = rl.Color(255, 255, 255, int(255 * self._opacity_filter.x)) bg_txt_x = self._rect.x + (self._rect.width - self._bg_txt.width) / 2 @@ -154,21 +149,20 @@ class SmallSlider(Widget): ) self._label.render(label_rect) - circle_pressed = self._is_dragging_circle or self.confirmed or ( - self._circle_press_time is not None and rl.get_time() - self._circle_press_time < 0.075 - ) + # circle and arrow with grow animation + circle_pressed = self._is_dragging_circle or self.confirmed or (self._circle_press_time is not None and rl.get_time() - self._circle_press_time < 0.075) circle_bg_txt = self._circle_bg_pressed_txt if circle_pressed else self._circle_bg_txt scale = self._circle_scale_filter.update(self.PRESSED_SCALE if circle_pressed else 1.0) scaled_btn_x = btn_x + (self._circle_bg_txt.width * (1 - scale)) / 2 scaled_btn_y = btn_y + (self._circle_bg_txt.height * (1 - scale)) / 2 rl.draw_texture_ex(circle_bg_txt, rl.Vector2(scaled_btn_x, scaled_btn_y), 0.0, scale, white) - arrow_x = scaled_btn_x + (self._circle_bg_txt.width * scale - self._circle_arrow_txt.width) / 2 - arrow_y = scaled_btn_y + (self._circle_bg_txt.height * scale - self._circle_arrow_txt.height) / 2 + arrow_x = btn_x + (self._circle_bg_txt.width - self._circle_arrow_txt.width) / 2 + arrow_y = scaled_btn_y + (self._circle_bg_txt.height - self._circle_arrow_txt.height) / 2 rl.draw_texture_ex(self._circle_arrow_txt, rl.Vector2(arrow_x, arrow_y), 0.0, 1.0, white) -class LargerSlider(SmallSlider): +class LargerSlider(SliderBase): def __init__(self, title: str, confirm_callback: Callable | None = None, green: bool = True, shimmer_offset: float = 0.0): self._green = green super().__init__(title, confirm_callback=confirm_callback, shimmer_offset=shimmer_offset) @@ -179,24 +173,24 @@ class LargerSlider(SmallSlider): self._bg_txt = gui_app.texture("icons_mici/setup/small_slider/slider_bg_larger.png", 520, 115) circle_fn = "slider_green_rounded_rectangle" if self._green else "slider_black_rounded_rectangle" self._circle_bg_txt = gui_app.texture(f"icons_mici/setup/small_slider/{circle_fn}.png", 180, 115) - self._circle_bg_pressed_txt = self._circle_bg_txt + self._circle_bg_pressed_txt = gui_app.texture(f"icons_mici/setup/small_slider/{circle_fn}_pressed.png", 180, 115) self._circle_arrow_txt = gui_app.texture("icons_mici/setup/small_slider/slider_arrow.png", 64, 55) -class BigSlider(SmallSlider): +class BigSlider(SliderBase): def __init__(self, title: str, icon: rl.Texture, confirm_callback: Callable | None = None): self._icon = icon super().__init__(title, confirm_callback=confirm_callback) - self._label = UnifiedLabel(title, font_size=48, font_weight=FontWeight.DISPLAY, text_color=rl.WHITE, - alignment=rl.GuiTextAlignment.TEXT_ALIGN_RIGHT, alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE, - line_height=0.875, shimmer=True) + self._label.set_font_size(48) + self._label.set_font_weight(FontWeight.DISPLAY) + self._label.set_line_height(0.875) def _load_assets(self): self.set_rect(rl.Rectangle(0, 0, 520 + self.HORIZONTAL_PADDING * 2, 180)) self._bg_txt = gui_app.texture("icons_mici/buttons/slider_bg.png", 520, 180) self._circle_bg_txt = gui_app.texture("icons_mici/buttons/button_circle.png", 180, 180) - self._circle_bg_pressed_txt = gui_app.texture("icons_mici/buttons/button_circle_hover.png", 180, 180) + self._circle_bg_pressed_txt = gui_app.texture("icons_mici/buttons/button_circle_pressed.png", 180, 180) self._circle_arrow_txt = self._icon @@ -206,5 +200,5 @@ class RedBigSlider(BigSlider): self._bg_txt = gui_app.texture("icons_mici/buttons/slider_bg.png", 520, 180) self._circle_bg_txt = gui_app.texture("icons_mici/buttons/button_circle_red.png", 180, 180) - self._circle_bg_pressed_txt = gui_app.texture("icons_mici/buttons/button_circle_red_hover.png", 180, 180) + self._circle_bg_pressed_txt = gui_app.texture("icons_mici/buttons/button_circle_red_pressed.png", 180, 180) self._circle_arrow_txt = self._icon

    HVL7xl$Im3+0KxFscr0IHtUe*EU0yaV=P&+ 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 diff --git a/selfdrive/assets/icons_mici/setup/widish_button_pressed.png b/selfdrive/assets/icons_mici/setup/widish_button_pressed.png deleted file mode 100644 index 72a4c31814eb722985d5e02a352233a961d88052..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15572 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

    `@2}XmN&R?C33OEAtE&Fvt&FE*jOi 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 G+5URU4Q``M1b`W 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 diff --git a/selfdrive/assets/icons_mici/setup/green_info.png b/selfdrive/assets/icons_mici/setup/green_info.png index 3693d160821edc4b9c366c7c47a82c3c07e77137..0b860c86f1bfdf993395ebce6ccf5bc2299e1a1c 100644 GIT binary patch literal 14154 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 delta 3944 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 diff --git a/selfdrive/assets/icons_mici/setup/medium_button_bg.png b/selfdrive/assets/icons_mici/setup/medium_button_bg.png deleted file mode 100644 index 8cbcf232904c2d8f7576e701696480666c3f70ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7935 zcmV{t`@>R$_g9PCN>@KlE1Q!uL zgHOJA&7I-o6JsD)*eO@`R@OY7omo}=e!#MuPsBT2T_0Il)%`wiW>$4i3|})&PEMY< zckkYlF~*~OJjz+u^5^LM{5()zN{Nn%>gK%ZoKW%upYH;ewM#qJ1La5^wKA*iwtB27 z8?B@1O4zo~-gt4|v^u@x=^Rv~=D@z6Fw3WS+(g;h*Hs*=Dnu z^7HYNTy&cIr}XKqTet3nuMztlv4ZEGd+zGx%a^Zb^7?5W-CeLxoh-sTv|b3=hR-G85y5d;PDjX_(w8n>qN4wN?6JpgzV+5yH^Tw2 z*Q;BI?(Z{sy-1cEkz7ts)*6zWJVy(Uz~mPc(qr@p?_ngxhZzt0^?F$Er`EVyo(rdC zeMnCyNOID`W0IqjV(m?7%FF4G^XFzx-`uCww->?#qNC3b1kt5(J|nnd^`*3QXYt6f zylFDnrNuPDvXZ8O?%;;BFlw2N5zJ~WcFM^Lhl;&+U%lV zul}e7Xq~s}jsV@+B4a^x1axULiAAvVD&ZBPWAd93U&bq857_z6x_Z?#Jx@zT7n%c=U5*|TGH-BEWFK``X?8n`-Uoq>1 z2?WP(??iM&ib#C<^KsVUH*dfF_6K1HY)yD%)nz4qot5|%5gS`_WVI22!BM)hNyh82 zoFOlA@1n2$$oXblPzJj>5avbtIdT5&W{&tCoMgd>@?ydqLYM2=XoXfET?~yS99MB zE3k_2PEJl}QR1J7=$PaL>CK1^U06;F%dQd|=i}r`pqnG~Phw26oa@N(Ca52kykO*8 zdD=HY>r;~})4e`}ac=e1>eo6CqD?D*L}qB{6%_qKu;;_9E568@eC>YeeHVKAXmVQP z@6BoNy2geaONWv98<~rRE{0{d*rSI;hjF_W*`aHj^Xhp?|MQI-H(m>a7#>(AyO%Q| zz4YamUsg*lrxTMKlbvPVu@%Rb9a?l?=~V(`JSc8#>laNc@6|sP_Svsyo$XWZzUu8N zbJy`5LgqGo9zsU14ig&hq(FeBr&@dESmSk62Ulxl3=gb4vhXVD<+4{sS8<1Cj4eAN zxI$>vg_TEX-QkuLCcrX53DSWl7mm{}2Ui+(MIL2*8@^=w#)GKSqXzgX{VTYy)sA&eqsl^U=D8TDr+GO7!lF-n}l{YS6|Y^}?gH?lgT%y6MtN zE00N!EjqOHBMJ6@nj?9wvX6}NUqdX`IzaXjg^3hR#3NxNu| z3X)qdd&Pq=pAX|Th4DnIOp+p7d7P&$T;P#ocX%vmB)zjtj6Z9w-kLLC_SxO04aLQk zoyZL>J0v@f>*1a}jNS1jV`3)Yvr$Ld+2*&AF@Wq zKj@MQ9mWhsIdL{qk%s0S?Cgx>nEW^`C)EPW5N=2;Whu^M3Q1g`SnAXxiw$Cx zN|wvMKp(D`WFMM5tqj{@f7ll*5c_wvwOT0qSPVmq$J80~#k|b)PH-Wqi85DQ7Q~z+ ztWWopoD0+o?}=c{zZlzW?o(=q8dxsK2(mrTfp$O89~i^pI^cLf|2h_!-`XF~nW!6Z zTE*O|kmC_^89>+BwQ0y(%p>0p7{|-=5t;BZ-_-l2q>0cbkCF(D^(?Myoe~}+)gfam z82`O_S*gB?%lgH%TBtp7}I02<6|K++&&hhc_e`IodoZVM+X*rFqEt4L)vU2ZTYPhnJ z*pLic7Z)c{aHTfsvoBt+{w_GQ{C)J>tNTrjVV^qea|{o{eCz}J8pjB+$~s`(MJ&fB zFL=ckA1@ON6}Sg)a%0)WCAStx@Z-!Y3)l9NRI=>1`zc#;{J0pW(Xx|d$E&j3Ml4oT zqT{skOs%x|W@)XCtY@LrVRs=M5-s`CHQN;^uQM*`+J$E2-RDTU)$0Z9IFF6?Bf71c zuQjs1Nf_hM^qan?)*O#~AGPnZ(k3bo97G^yP6JQgPY@AuIlOg+&#z_DyL;!(otc$4 z8w{<=W()4G`E$gU9UKE#eA5jl;&|%5JBZOGW53-Z%?lhO*w)?KRn8%FIFx?dVvQSY zxzYR3d5s*c|83jvQfIX7nmOLKk8c8nj4Gr)e2!!#-CAC-z(owQ=6Kh${h+&8)g&#i>tL$j8Yf(P_U3lHl-0l@p}>LaqJv zwd(KkD_(vLhwHccI)r|^eo5EVvwq07>9=*=TkTpp^)PZRcO943Ct+ViwTpghV8vO9 z7qqc35#qHa-pJ`hU; z5m~mT&8RLdoirI*Tk9s%>S6uSzDLF*%Vc`w+{&~1?fnRj^fxljFre$&`^{?8(_>AY zZLe>u?a1|&KPnb!WBsUvVc=ekP@nhe@hi0=xV9Mkt8I$a7)$vYtT5xjviMCk5mK{zA0r%rc>~ga@9F7MA78y$*@$os=oy<8P zK+eN+AhjCP<8wlBgRf*4_kVLN@4u!x(EkY#8k1MTJ$2_7uYnpSI|j>=1jqx`@*EDw zw-1&vBds|C@&e~$SWN8YRUc^JhaNyyeWt&Bp5cBc!lT8CT;a!D5eP0|2jw#>hx}PN zE6y&gHW3=pIUJ6M7aHji1jj6%y_Z}g*A1v5?EjVA^)x*>M*U2Lm#wy+a7AF$g>}b_ z35wK34D1YvOd~rdI)~%Yg^c@Y+#n1l8;r;OHP74#%Sn$p^SaEs3}ukY6%f-lSNEOl?n+tW92>eJY<^1#&}|b`hg1N-gqa zJ*l``dJcy}19AxFF>&EJrX|@~)?X>V_UyCI9&K`^Cy>CG&EasY!iZsHagGSZ zE!<(qJ0c73YU;%3r1{7l8t$z7uMUS}HRPje1j##`rUAq z>vbw2my;b1hhtaZBW94N)|K_{uW`&`bF){xH_1wFHg0w1q~~xrc0t`YSN_jzNzdv? zPEytw79QyaPdJS}utfPElA#56YaI^9J|JHrAkp$nHUHLfX_F;%q*J%>91h1W7%-ZW ztS1*LFrTrp`qMh^#rqr%hhraTag4PxO8~bwYV8(;R~n@9e;>J`^`-)6K8M4xceM8W zYE~WRX&xxnUl5*n^GWC^<-t0K!*Nh(PhLnUwpZV!?d)OE%G|0OOf@ugx3~J_7`$k&vY<}yNb`qPGQ2DSfznTSzZ}E7CcJ6RE9Ba^f*)WtxoHD_koX=@ljz*n`5xom^%CmUdXVa}+%ZB!`W1n6)$c1DLs7G#F)G(w!} za-sEbu0$~(qZZ$DI2?|BL2?SatJPWq4w4)u+VB>Y*j%O6gvd@D4u|7GKt!`n#QYdJ zZ*z(bIDUr>(d|X>sx5Tj4Crt;4h}68CtO)A|8&EFy(rjB`oL)ISp?{CI2^k|;}^>V zZM8=b&rL>IsW8>R?J3w8t+-ytPJ#}HV_UTNMSHAFEUM1Z1dR6~;Vqvz6Xe%27ab0V zV;^X}lQZ2n)26g^NM%~%uH5{S8pGpE@j*si?03=JT!+Kq*cSwGEl5VQ>>6tjpKL6X zkmZX-iP{MWTo9p5I~)$j8puUZZFh)9fEPB}{l!;l<?!7OI2@w@;|udt&kzh3fwn*EK5E z-E3b>!=!Z5b2uC`NPYnFQWrwG4B~UM_#Inw#9f;4mh(?HZ@&5FX+Ak)V&gbo5styX zpmd~?A6j`%dJcy}18r%GO6-jwxg{zK6zIaD*U1K3A;(fZp53@{<9~Sn$(?wCiTH5g zg7acrzAB231b=mu!{Hc3)ZN#J9-|gI6Cccr#b{f!&A2nkFa5m76@l0yuw=E`xSm|Z z5U*jW^)*Y+;cz$@EmxKaP&*lpXG_?2}Ej#8I5poM)#qrw1OlGNblXa+sSKQkFV?jWEla(jT$e8m25MY!FNzwzW zF^XPr zYIQf8<@^15H=32N-GExUr@M6{_u7u=DsMcAk(;~MpOnAZEdQ~}Mp^6%hOV0Y5#2`S z80+J`Amz03HGNuh+pDLwvFdAczNT+Yo^>r+^JvXEe&{=0^qg5B^e4ffK=4lSX z{eR9q9jPA4$e&43%FzB%E>B8%W&CW$Ne{~7Bj#H-4%ZJ2z!x*JywSG1V&sNjD{EBm zmTa8o5m{FKIR9~pa&8SW-f7-_@$)PUz z!&uHElOXGg7M-;8xDFd)Y%o#XVgXXw>0^&Qc55~da&RXnCoks}jhDXs^2>1d?%kBr z>8r24O8J~VfzIheY04)8D@Urw1V?p3A-u%@yc=KShs3w`A9=Ul!6)4>S(nS@e`y>2 zuWeGUY~O3E=_lKuESa`+AJM_;3+G1mi}Ea8@Q5-s_p&w5mMp1*HGkH;VO^=e*1y(| zRZq(9$>(xQrge>F9qdQ;smpOuL>KYLQSSI)LSrwHh>gjNkD1V>GCEQ@ zABzR}r?=mJ`_I__WvS5jzW2S?KK=C5<6QZOgqDF-3y*YT3y;!7cE!S*l%VraEIj^~ zjv3Y3E0Yx2Dok)?nFQs98ktCpJ!o~caw|OotDk+f!yBQMr{!B;){#7`kDe|gdRlp{ zcD?ypb3J!0x9%~nkMq9k*jw#;V_tJ_ZhIYjIwCN=vdY4uSy<}sukOJ@xzca2U~KUO=LCdfH#$&-1b zX>FXEjwAhUJLj!yrs<%`lj9)Zm)*J#C3@qq?zPsOTK)I#8SGQj4f9$u>KDJHHR9ZC z<}Vv5$9fL&xJr6>#D!A&WXrC`0jWHT{;jH;rS$Rf@$d4$e#NdUxwOT-ozCe)ZYv+z zrKNKw$&w$KB+<3y3E_MR>?h&+ntv-_(oJZl_R(Ft! z%5u!Ey0Jujx&CXnZr%EWHkQl5!1urZ{a5lL#!s{2M_|!0d9mizeJ$Fv%gYuX$MD#~ zL+g&+5sjF}p^J4hi&+LSC={Z4$QyeQ|zL5cf$h zwkj<01iD5scXGUHe~Qc?LL^aZo9so3+NL45R>Zl8%A|_9jM$XjyEyM$UdL)U1h~&o z2A_xd+*o}ixSqXxVK%-n|Guc-iO}GUXvFoyaLBL1C+p zm<_Ewxkcr|$eUYvNyP6oSii`!TxJKwS`qc?uN)&Pal!$h3in=T5 zh4m5Om)x3zFfb-zVOtiEns4Z?S$#pf9=&@2b;Y&~Yi?1F{pq6TLsP7|*)=Zmq!o?V zc$TkqwhhrW+Mu;-UZ+-{t+|R2r{nW@A2aKY%8Dhoh~M#|MA?&9tv|N*$imCbf1l%a ze+eB7&)W6t*I&xS_G@0GV0RYMl?0207a(0p4G6F9#RKx=b2FAVvNAcc%5*67Bfy4e+~m!^)r!4@5Mae-|>nq#_rI{<70x=T5w}$F0Him7?#Cn zq4f)-{i2WLY5mGyGpoH-U(?sp#p)OHv~iB+^(>sxHkzJ2i!0hOBDKEOht@82VscX6 z$b4x!TXihCT0QIjvBuJp7Y8h1tq)D7mi!iE9W8Fh`O>B3bXj<)B*(;t3m5F>7UKK; zTW`J9wd|^nVI@vZPM*nR^e_4I10{A>x2hBpoLP62z=aFKd3iKN5}drr4bqc~5SmMe z$Iz)S%Ubnj!DFKjt6pmiK`GaCZ0Qync}cl}d%Cyg26b%Z$3{I%#+rUC{j6WhmYmp- z*^?Cpbg|~5b)WU_=e0VG+*7S<5`ws2Eq9jp*CO#D$z7Vi?@m5aR-dsIPg$Jh`}iMo z%TD{H0_1FA4V$#Fd9jwrzdt1-hr6pOEPY@)>@s5-RtUE%>of&m^)|&iQ zxzuNkd`%W%4I(ChDzE_APKjT=ljH#Q*mHsdmSE;-h*7|Pm+e&8O+N#!`#3%_m9FD`F<>I32n(n_~q~?nc{tpU#dvWBWB)*JSX`kKg+qcic zHhPC0k*&R_a~$uFd0MSo% zaM@=0o;#{f*4%H`y08l!!=CW`^UuGO4=0((j?jfA*EXZKa4~aTwHRK{d>8d)3_>ew zifh!_woI#|#j>pWP1$j|sG-F(*J8E}V&#ua)thC6?e$pOc2>8eyCv6(t*yoAb&zF4 zV~EQ|wAOfbx^K&MRJX23SC_3gPKUyKGJXeXw%{b`ktO$P{{FwVtyMSEE9?=^KKm@a zVdXf_$w@vv!cE9*;bqjg-gF`ekBJZ=EkAMbTfufN*8;UN7;DK}1ZvAgpOvMHg#fLu z7Dg9CG#z8h24fSvm>=UZ8M#Qa$wVxDI@Lw##3i}8rQ)$z!= z6tb;r&|8=Yh8)yOUN`MtmB*lrS1WI|v+nQM7$=_x(07&=E3}p1qFAY=A{oCcmK`lh z?2YIaO79zaHTO6xOT_mRaBXL?JRr8kJM*SYBMo`=1~JG`Jx6&~{gzCWgZhoONoj2R z3+mZ|*6-*zwuL2k&9&e>M$dv-o43ta4%MbL7cxz-WbfmC(dzfEgKWpAGEaUlnE067 zI1QHG%$3b}KOg^=!(=!2Npv%X4+*mRGFv~L2Xc}p@~Ql}D)!*btUH`+v;wQb7glvz zySnFaIL4u^coPyl-yM}FfaD^D$gi$#*{*Vy)AUcW|CakY2+1K1PIwZ>$Hz}moG%ZO zT;8Lcbv1wJNRxXl=U?Tz`TPk^i`Yckm!;zP_5$4EM;3>igAvarC{|v^N5Z8&E#yfH p4`-R^PP1HktH~Yy_laK@{vSf}+0bRjNG1RP002ovPDHLkV1hBE`B(q| diff --git a/selfdrive/assets/icons_mici/setup/medium_button_pressed_bg.png b/selfdrive/assets/icons_mici/setup/medium_button_pressed_bg.png deleted file mode 100644 index 905c6c92ec79694d9dd6c5cbe319818bf41b8916..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18225 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 diff --git a/selfdrive/assets/icons_mici/setup/orange_dm.png b/selfdrive/assets/icons_mici/setup/orange_dm.png index 0678e9f888bfe59fc3bbb2d1b3af1b0b4cfd93bb..87ffdaf1fd351e747dd4c5e33b4766791c022e4b 100644 GIT binary patch literal 13155 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 JPDHLkV1m8-w{rjh diff --git a/selfdrive/assets/icons_mici/setup/red_warning.png b/selfdrive/assets/icons_mici/setup/red_warning.png index 925871da3bc6739aa4f91568bb417ee7621081b7..ea712d50f838bdb6ff6e236300ab143ae70d68f0 100644 GIT binary patch literal 11123 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 FV1o2JUH||9 delta 3166 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 diff --git a/selfdrive/assets/icons_mici/setup/reset/small_button_pressed.png b/selfdrive/assets/icons_mici/setup/reset/small_button_pressed.png deleted file mode 100644 index 44cbbd195e0f4a23d292307c98b2c586fbd870c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13437 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 diff --git a/selfdrive/assets/icons_mici/setup/reset/wide_button.png b/selfdrive/assets/icons_mici/setup/reset/wide_button.png deleted file mode 100644 index 6b09801043d9e15caee46d5413bc4bc483f5364b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9071 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 diff --git a/selfdrive/assets/icons_mici/setup/reset/wide_button_pressed.png b/selfdrive/assets/icons_mici/setup/reset/wide_button_pressed.png deleted file mode 100644 index e5d9f4259d124131283a31ca39cc2fcc3ae38851..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21893 zcmV*;Krz3GP)Q^vMLa-+a?aO@WK%!Ihz1MldMxDT{lRwj#2OHwAtI}B0vC3 zj^l-QF50dWpo^|5rQJvQBgvBAWe?BgkN3ylnIU=Z_kB;#dS`&|JLizYncZC>MIn!C3g7tp6 z=I6Lv|9*MQPQrJ8`qQ8O_y<4u!MouB;Xzs)PQel#cw?#bS06uqoV~Z~5QHUdz0b