[INFO] cloning repository https://github.com/codydeyarmin/nightmare-gs
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/codydeyarmin/nightmare-gs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcodydeyarmin%2Fnightmare-gs", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcodydeyarmin%2Fnightmare-gs'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 1263ebc81b608caf0ccd57bc2586f875b8279eab
[INFO] checking codydeyarmin/nightmare-gs against master#c9af9c1dc85a55e309345030ff9cb7ea247953fa for pr-151146-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcodydeyarmin%2Fnightmare-gs" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/codydeyarmin/nightmare-gs
[INFO] finished tweaking git repo https://github.com/codydeyarmin/nightmare-gs
[INFO] tweaked toml for git repo https://github.com/codydeyarmin/nightmare-gs written to /workspace/builds/worker-3-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/codydeyarmin/nightmare-gs on toolchain c9af9c1dc85a55e309345030ff9cb7ea247953fa
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+c9af9c1dc85a55e309345030ff9cb7ea247953fa" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/codydeyarmin/nightmare-gs already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+c9af9c1dc85a55e309345030ff9cb7ea247953fa" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded thiserror-impl v1.0.65
[INFO] [stderr]   Downloaded libudev v0.3.0
[INFO] [stderr]   Downloaded strum_macros v0.27.1
[INFO] [stderr]   Downloaded strum v0.27.1
[INFO] [stderr]   Downloaded windows-strings v0.3.1
[INFO] [stderr]   Downloaded windows-link v0.1.0
[INFO] [stderr]   Downloaded castaway v0.2.3
[INFO] [stderr]   Downloaded thiserror v1.0.65
[INFO] [stderr]   Downloaded windows-collections v0.1.1
[INFO] [stderr]   Downloaded cassowary v0.3.0
[INFO] [stderr]   Downloaded windows-interface v0.59.0
[INFO] [stderr]   Downloaded windows-result v0.3.1
[INFO] [stderr]   Downloaded windows-numerics v0.1.1
[INFO] [stderr]   Downloaded signal-hook-mio v0.2.4
[INFO] [stderr]   Downloaded windows-future v0.1.1
[INFO] [stderr]   Downloaded windows-core v0.60.1
[INFO] [stderr]   Downloaded compact_str v0.8.1
[INFO] [stderr]   Downloaded backtrace v0.3.69
[INFO] [stderr]   Downloaded socket2 v0.5.5
[INFO] [stderr]   Downloaded crossterm v0.28.1
[INFO] [stderr]   Downloaded uuid v1.16.0
[INFO] [stderr]   Downloaded signal-hook v0.3.17
[INFO] [stderr]   Downloaded serialport v4.7.0
[INFO] [stderr]   Downloaded windows-implement v0.59.0
[INFO] [stderr]   Downloaded gilrs-core v0.6.3
[INFO] [stderr]   Downloaded indoc v2.0.4
[INFO] [stderr]   Downloaded instability v0.3.2
[INFO] [stderr]   Downloaded unicode-truncate v1.1.0
[INFO] [stderr]   Downloaded unicode-width v0.2.0
[INFO] [stderr]   Downloaded unescaper v0.1.5
[INFO] [stderr]   Downloaded crossterm_winapi v0.9.1
[INFO] [stderr]   Downloaded ratatui v0.29.0
[INFO] [stderr]   Downloaded windows v0.60.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:98afbf2d16093dec2546ff8915fddc74e65664aa03fc460b3712b1c2c54a33e4" "/opt/rustwide/cargo-home/bin/cargo" "+c9af9c1dc85a55e309345030ff9cb7ea247953fa" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 43012d4626bebc0247a3c0009ccb069a9e88defd7b361ce5b7155438f85a8714
[INFO] running `Command { std: "docker" "start" "-a" "43012d4626bebc0247a3c0009ccb069a9e88defd7b361ce5b7155438f85a8714", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "43012d4626bebc0247a3c0009ccb069a9e88defd7b361ce5b7155438f85a8714", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "43012d4626bebc0247a3c0009ccb069a9e88defd7b361ce5b7155438f85a8714", kill_on_drop: false }`
[INFO] [stdout] 43012d4626bebc0247a3c0009ccb069a9e88defd7b361ce5b7155438f85a8714
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:98afbf2d16093dec2546ff8915fddc74e65664aa03fc460b3712b1c2c54a33e4" "/opt/rustwide/cargo-home/bin/cargo" "+c9af9c1dc85a55e309345030ff9cb7ea247953fa" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 0234fd2534f0a587da59a1b9cbbea0f871caf10b4d449db717991582ae3ec4e4
[INFO] running `Command { std: "docker" "start" "-a" "0234fd2534f0a587da59a1b9cbbea0f871caf10b4d449db717991582ae3ec4e4", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.78
[INFO] [stderr]    Compiling unicode-ident v1.0.12
[INFO] [stderr]    Compiling autocfg v1.1.0
[INFO] [stderr]    Compiling rustversion v1.0.14
[INFO] [stderr]     Checking bitflags v2.4.2
[INFO] [stderr]     Checking log v0.4.20
[INFO] [stderr]    Compiling libudev-sys v0.1.4
[INFO] [stderr]    Compiling version_check v0.9.4
[INFO] [stderr]    Compiling parking_lot_core v0.9.9
[INFO] [stderr]     Checking scopeguard v1.2.0
[INFO] [stderr]     Checking futures-core v0.3.31
[INFO] [stderr]     Checking signal-hook-registry v1.4.1
[INFO] [stderr]     Checking smallvec v1.13.1
[INFO] [stderr]    Compiling signal-hook v0.3.17
[INFO] [stderr]     Checking mio v1.0.3
[INFO] [stderr]    Compiling lock_api v0.4.11
[INFO] [stderr]    Compiling slab v0.4.9
[INFO] [stderr]    Compiling ahash v0.8.7
[INFO] [stderr]     Checking zerocopy v0.7.32
[INFO] [stderr]    Compiling heck v0.5.0
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]     Checking once_cell v1.19.0
[INFO] [stderr]    Compiling quote v1.0.35
[INFO] [stderr]    Compiling thiserror v1.0.65
[INFO] [stderr]     Checking pin-project-lite v0.2.13
[INFO] [stderr]     Checking futures-sink v0.3.31
[INFO] [stderr]     Checking futures-channel v0.3.31
[INFO] [stderr]     Checking parking_lot v0.12.1
[INFO] [stderr]     Checking futures-io v0.3.31
[INFO] [stderr]     Checking memchr v2.7.1
[INFO] [stderr]    Compiling paste v1.0.14
[INFO] [stderr]    Compiling syn v2.0.58
[INFO] [stderr]     Checking linux-raw-sys v0.4.15
[INFO] [stderr]     Checking either v1.9.0
[INFO] [stderr]     Checking allocator-api2 v0.2.16
[INFO] [stderr]     Checking signal-hook-mio v0.2.4
[INFO] [stderr]     Checking inotify v0.11.0
[INFO] [stderr]     Checking nix v0.29.0
[INFO] [stderr]     Checking castaway v0.2.3
[INFO] [stderr]     Checking unicode-width v0.1.11
[INFO] [stderr]     Checking itertools v0.13.0
[INFO] [stderr]     Checking unicode-segmentation v1.10.1
[INFO] [stderr]    Compiling gilrs v0.11.0
[INFO] [stderr]     Checking hashbrown v0.14.3
[INFO] [stderr]     Checking uuid v1.16.0
[INFO] [stderr]     Checking itoa v1.0.10
[INFO] [stderr]     Checking ryu v1.0.16
[INFO] [stderr]     Checking nix v0.26.4
[INFO] [stderr]     Checking gilrs-core v0.6.3
[INFO] [stderr]     Checking compact_str v0.8.1
[INFO] [stderr]     Checking lru v0.12.2
[INFO] [stderr]     Checking libudev v0.3.0
[INFO] [stderr]     Checking socket2 v0.5.5
[INFO] [stderr]     Checking crossterm v0.28.1
[INFO] [stderr]     Checking cassowary v0.3.0
[INFO] [stderr]     Checking bytes v1.5.0
[INFO] [stderr]     Checking unicode-width v0.2.0
[INFO] [stderr]    Compiling indoc v2.0.4
[INFO] [stderr]     Checking strum v0.27.1
[INFO] [stderr]     Checking unicode-truncate v1.1.0
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling thiserror-impl v1.0.65
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling instability v0.3.2
[INFO] [stderr]    Compiling tokio-macros v2.5.0
[INFO] [stderr]    Compiling strum_macros v0.27.1
[INFO] [stderr]     Checking tokio v1.43.0
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]     Checking unescaper v0.1.5
[INFO] [stderr]     Checking serialport v4.7.0
[INFO] [stderr]     Checking strum v0.26.3
[INFO] [stderr]     Checking ratatui v0.29.0
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]     Checking nightmare-gs v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `Line` and `Text`
[INFO] [stdout]  --> src/pages/controlpanel.rs:3:101
[INFO] [stdout]   |
[INFO] [stdout] 3 |     buffer::Buffer, layout::{Alignment, Constraint, Layout, Rect}, style::{ Style, Stylize}, text::{Line, Text}, widgets::{Block, Bor...
[INFO] [stdout]   |                                                                                                     ^^^^  ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Alignment`, `Block`, `BorderType`, `Color`, `Paragraph`, and `Style`
[INFO] [stdout]  --> src/ui.rs:2:14
[INFO] [stdout]   |
[INFO] [stdout] 2 |     layout::{Alignment, Constraint, Layout},
[INFO] [stdout]   |              ^^^^^^^^^
[INFO] [stdout] 3 |     style::{Color, Style},
[INFO] [stdout]   |             ^^^^^  ^^^^^
[INFO] [stdout] 4 |     widgets::{Block, BorderType, Paragraph},
[INFO] [stdout]   |               ^^^^^  ^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Pending`, `Ready`, and `self`
[INFO] [stdout]  --> src/page_functions/stick.rs:1:23
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::task::Poll::{self, Pending, Ready};
[INFO] [stdout]   |                       ^^^^  ^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::future::*`
[INFO] [stdout]  --> src/page_functions/stick.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::future::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `poll`
[INFO] [stdout]  --> src/page_functions/stick.rs:3:15
[INFO] [stdout]   |
[INFO] [stdout] 3 | use futures::{poll, FutureExt};
[INFO] [stdout]   |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Gamepad`
[INFO] [stdout]  --> src/page_functions/stick.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use gilrs::{Gamepad, Gilrs};
[INFO] [stdout]   |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `strum_macros::EnumIter`
[INFO] [stdout]  --> src/page_functions/page.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use strum_macros::EnumIter;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: ambiguous glob re-exports
[INFO] [stdout]  --> src/page_functions.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use stick::*;
[INFO] [stdout]   |         ^^^^^^^^ the name `select_this_controller` in the value namespace is first re-exported here
[INFO] [stdout] 5 | pub use page::*;
[INFO] [stdout]   |         ------- but the name `select_this_controller` in the value namespace is also re-exported here
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(ambiguous_glob_reexports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `io`
[INFO] [stdout]  --> src/tasks/driver_task.rs:1:16
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{fmt, io, time::Duration};
[INFO] [stdout]   |                ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Line` and `Text`
[INFO] [stdout]  --> src/pages/controlpanel.rs:3:101
[INFO] [stdout]   |
[INFO] [stdout] 3 |     buffer::Buffer, layout::{Alignment, Constraint, Layout, Rect}, style::{ Style, Stylize}, text::{Line, Text}, widgets::{Block, Bor...
[INFO] [stdout]   |                                                                                                     ^^^^  ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Alignment`, `Block`, `BorderType`, `Color`, `Paragraph`, and `Style`
[INFO] [stdout]  --> src/ui.rs:2:14
[INFO] [stdout]   |
[INFO] [stdout] 2 |     layout::{Alignment, Constraint, Layout},
[INFO] [stdout]   |              ^^^^^^^^^
[INFO] [stdout] 3 |     style::{Color, Style},
[INFO] [stdout]   |             ^^^^^  ^^^^^
[INFO] [stdout] 4 |     widgets::{Block, BorderType, Paragraph},
[INFO] [stdout]   |               ^^^^^  ^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Pending`, `Ready`, and `self`
[INFO] [stdout]  --> src/page_functions/stick.rs:1:23
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::task::Poll::{self, Pending, Ready};
[INFO] [stdout]   |                       ^^^^  ^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::future::*`
[INFO] [stdout]  --> src/page_functions/stick.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::future::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `poll`
[INFO] [stdout]  --> src/page_functions/stick.rs:3:15
[INFO] [stdout]   |
[INFO] [stdout] 3 | use futures::{poll, FutureExt};
[INFO] [stdout]   |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Gamepad`
[INFO] [stdout]  --> src/page_functions/stick.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use gilrs::{Gamepad, Gilrs};
[INFO] [stdout]   |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `strum_macros::EnumIter`
[INFO] [stdout]  --> src/page_functions/page.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use strum_macros::EnumIter;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: ambiguous glob re-exports
[INFO] [stdout]  --> src/page_functions.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use stick::*;
[INFO] [stdout]   |         ^^^^^^^^ the name `select_this_controller` in the value namespace is first re-exported here
[INFO] [stdout] 5 | pub use page::*;
[INFO] [stdout]   |         ------- but the name `select_this_controller` in the value namespace is also re-exported here
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(ambiguous_glob_reexports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `io`
[INFO] [stdout]  --> src/tasks/driver_task.rs:1:16
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{fmt, io, time::Duration};
[INFO] [stdout]   |                ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SerialPort`
[INFO] [stdout]  --> src/tasks/driver_task.rs:4:92
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serialport::{available_ports, DataBits, Error as SerialPortError, FlowControl, Parity, SerialPort, SerialPortBuilder, StopBits};
[INFO] [stdout]   |                                                                                            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FutureExt`
[INFO] [stdout]  --> src/page_functions/stick.rs:3:21
[INFO] [stdout]   |
[INFO] [stdout] 3 | use futures::{poll, FutureExt};
[INFO] [stdout]   |                     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/pages/controlpanel.rs:367:13
[INFO] [stdout]     |
[INFO] [stdout] 367 |         let mut info_text: Option<String> = None;
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `info_text`
[INFO] [stdout]    --> src/pages/controlpanel.rs:367:13
[INFO] [stdout]     |
[INFO] [stdout] 367 |         let mut info_text: Option<String> = None;
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_info_text`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `info_pane`
[INFO] [stdout]    --> src/pages/controlpanel.rs:372:14
[INFO] [stdout]     |
[INFO] [stdout] 372 |         let [info_pane, window] = split.areas(area);
[INFO] [stdout]     |              ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_info_pane`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/page_functions/stick.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout] 19 |     let mut gilrs = Gilrs::new().unwrap();
[INFO] [stdout]    |         ----^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `time`
[INFO] [stdout]   --> src/tasks/controller_task.rs:42:62
[INFO] [stdout]    |
[INFO] [stdout] 42 |                     while let Some(GamepadEvent { id, event, time, .. }) = gilrs.next_event() {
[INFO] [stdout]    |                                                              ^^^^ help: try ignoring the field: `time: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `data_bits`, `flow_control`, `parity`, and `stop_bits` are never read
[INFO] [stdout]   --> src/tasks/driver_task.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub struct DriverPort {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 43 |     data_bits: DataBits,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 44 |     flow_control: FlowControl,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 45 |     parity: Parity,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 46 |     stop_bits: StopBits
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DriverPort` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_baud` is never used
[INFO] [stdout]   --> src/tasks/driver_task.rs:67:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl DriverPort {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub fn with_baud(mut self, baud: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `port` is never read
[INFO] [stdout]   --> src/tasks/driver_task.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub struct Driver{
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] 93 |     state: DriverState,
[INFO] [stdout] 94 |     port: SerialPortBuilder,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Driver` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/app.rs:121:29
[INFO] [stdout]     |
[INFO] [stdout] 121 | ...                   self.driver_task.set_port(port);
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 121 |                             let _ = self.driver_task.set_port(port);
[INFO] [stdout]     |                             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/app.rs:122:29
[INFO] [stdout]     |
[INFO] [stdout] 122 | ...                   self.driver_task.start_driver();
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 122 |                             let _ = self.driver_task.start_driver();
[INFO] [stdout]     |                             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]   --> src/pages/controlpanel.rs:20:10
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Debug, PartialEq, Eq, Clone)]
[INFO] [stdout]    |                 --------- in this derive macro expansion
[INFO] [stdout] 19 | pub enum ConfigFnOptions{
[INFO] [stdout] 20 |     None(fn() -> Option<ControlResult>),
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the address of the same function can vary between different codegen units
[INFO] [stdout]    = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]    = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout]    = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]   --> src/pages/controlpanel.rs:21:18
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Debug, PartialEq, Eq, Clone)]
[INFO] [stdout]    |                 --------- in this derive macro expansion
[INFO] [stdout] ...
[INFO] [stdout] 21 |     NoneToWindow(fn() -> (Window, Option<ControlResult>)),
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the address of the same function can vary between different codegen units
[INFO] [stdout]    = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]    = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]   --> src/pages/controlpanel.rs:22:20
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Debug, PartialEq, Eq, Clone)]
[INFO] [stdout]    |                 --------- in this derive macro expansion
[INFO] [stdout] ...
[INFO] [stdout] 22 |     WindowToWindow(fn(window: &Window) -> (Window, Option<ControlResult>)),
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the address of the same function can vary between different codegen units
[INFO] [stdout]    = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]    = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]   --> src/pages/controlpanel.rs:23:18
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Debug, PartialEq, Eq, Clone)]
[INFO] [stdout]    |                 --------- in this derive macro expansion
[INFO] [stdout] ...
[INFO] [stdout] 23 |     ConfigToNone(fn(config: &Config) -> Option<ControlResult>),
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the address of the same function can vary between different codegen units
[INFO] [stdout]    = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]    = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]   --> src/pages/controlpanel.rs:24:20
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Debug, PartialEq, Eq, Clone)]
[INFO] [stdout]    |                 --------- in this derive macro expansion
[INFO] [stdout] ...
[INFO] [stdout] 24 |     ConfigToWindow(fn(config: &Config) -> (Window, Option<ControlResult>))
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the address of the same function can vary between different codegen units
[INFO] [stdout]    = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]    = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/tasks/controller_task.rs:44:29
[INFO] [stdout]    |
[INFO] [stdout] 44 | ...                   _sender.send(Event::Controller(event));
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 44 |                             let _ = _sender.send(Event::Controller(event));
[INFO] [stdout]    |                             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SerialPort`
[INFO] [stdout]  --> src/tasks/driver_task.rs:4:92
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serialport::{available_ports, DataBits, Error as SerialPortError, FlowControl, Parity, SerialPort, SerialPortBuilder, StopBits};
[INFO] [stdout]   |                                                                                            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FutureExt`
[INFO] [stdout]  --> src/page_functions/stick.rs:3:21
[INFO] [stdout]   |
[INFO] [stdout] 3 | use futures::{poll, FutureExt};
[INFO] [stdout]   |                     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/pages/controlpanel.rs:367:13
[INFO] [stdout]     |
[INFO] [stdout] 367 |         let mut info_text: Option<String> = None;
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `info_text`
[INFO] [stdout]    --> src/pages/controlpanel.rs:367:13
[INFO] [stdout]     |
[INFO] [stdout] 367 |         let mut info_text: Option<String> = None;
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_info_text`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `info_pane`
[INFO] [stdout]    --> src/pages/controlpanel.rs:372:14
[INFO] [stdout]     |
[INFO] [stdout] 372 |         let [info_pane, window] = split.areas(area);
[INFO] [stdout]     |              ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_info_pane`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/page_functions/stick.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout] 19 |     let mut gilrs = Gilrs::new().unwrap();
[INFO] [stdout]    |         ----^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `time`
[INFO] [stdout]   --> src/tasks/controller_task.rs:42:62
[INFO] [stdout]    |
[INFO] [stdout] 42 |                     while let Some(GamepadEvent { id, event, time, .. }) = gilrs.next_event() {
[INFO] [stdout]    |                                                              ^^^^ help: try ignoring the field: `time: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `data_bits`, `flow_control`, `parity`, and `stop_bits` are never read
[INFO] [stdout]   --> src/tasks/driver_task.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub struct DriverPort {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 43 |     data_bits: DataBits,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 44 |     flow_control: FlowControl,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 45 |     parity: Parity,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 46 |     stop_bits: StopBits
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DriverPort` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_baud` is never used
[INFO] [stdout]   --> src/tasks/driver_task.rs:67:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl DriverPort {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub fn with_baud(mut self, baud: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `port` is never read
[INFO] [stdout]   --> src/tasks/driver_task.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub struct Driver{
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] 93 |     state: DriverState,
[INFO] [stdout] 94 |     port: SerialPortBuilder,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Driver` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/app.rs:121:29
[INFO] [stdout]     |
[INFO] [stdout] 121 | ...                   self.driver_task.set_port(port);
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 121 |                             let _ = self.driver_task.set_port(port);
[INFO] [stdout]     |                             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/app.rs:122:29
[INFO] [stdout]     |
[INFO] [stdout] 122 | ...                   self.driver_task.start_driver();
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 122 |                             let _ = self.driver_task.start_driver();
[INFO] [stdout]     |                             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]   --> src/pages/controlpanel.rs:20:10
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Debug, PartialEq, Eq, Clone)]
[INFO] [stdout]    |                 --------- in this derive macro expansion
[INFO] [stdout] 19 | pub enum ConfigFnOptions{
[INFO] [stdout] 20 |     None(fn() -> Option<ControlResult>),
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the address of the same function can vary between different codegen units
[INFO] [stdout]    = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]    = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout]    = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]   --> src/pages/controlpanel.rs:21:18
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Debug, PartialEq, Eq, Clone)]
[INFO] [stdout]    |                 --------- in this derive macro expansion
[INFO] [stdout] ...
[INFO] [stdout] 21 |     NoneToWindow(fn() -> (Window, Option<ControlResult>)),
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the address of the same function can vary between different codegen units
[INFO] [stdout]    = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]    = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]   --> src/pages/controlpanel.rs:22:20
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Debug, PartialEq, Eq, Clone)]
[INFO] [stdout]    |                 --------- in this derive macro expansion
[INFO] [stdout] ...
[INFO] [stdout] 22 |     WindowToWindow(fn(window: &Window) -> (Window, Option<ControlResult>)),
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the address of the same function can vary between different codegen units
[INFO] [stdout]    = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]    = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]   --> src/pages/controlpanel.rs:23:18
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Debug, PartialEq, Eq, Clone)]
[INFO] [stdout]    |                 --------- in this derive macro expansion
[INFO] [stdout] ...
[INFO] [stdout] 23 |     ConfigToNone(fn(config: &Config) -> Option<ControlResult>),
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the address of the same function can vary between different codegen units
[INFO] [stdout]    = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]    = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]   --> src/pages/controlpanel.rs:24:20
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Debug, PartialEq, Eq, Clone)]
[INFO] [stdout]    |                 --------- in this derive macro expansion
[INFO] [stdout] ...
[INFO] [stdout] 24 |     ConfigToWindow(fn(config: &Config) -> (Window, Option<ControlResult>))
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the address of the same function can vary between different codegen units
[INFO] [stdout]    = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]    = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/tasks/controller_task.rs:44:29
[INFO] [stdout]    |
[INFO] [stdout] 44 | ...                   _sender.send(Event::Controller(event));
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 44 |                             let _ = _sender.send(Event::Controller(event));
[INFO] [stdout]    |                             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 36.74s
[INFO] running `Command { std: "docker" "inspect" "0234fd2534f0a587da59a1b9cbbea0f871caf10b4d449db717991582ae3ec4e4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "0234fd2534f0a587da59a1b9cbbea0f871caf10b4d449db717991582ae3ec4e4", kill_on_drop: false }`
[INFO] [stdout] 0234fd2534f0a587da59a1b9cbbea0f871caf10b4d449db717991582ae3ec4e4
