[INFO] updating cached repository https://github.com/richwandell/rust-algorithms [INFO] running `"git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "-c" "remote.origin.fetch=refs/heads/*:refs/heads/*" "fetch" "origin" "--force" "--prune"` [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 5c154c3e3da55f8c1be9b6f87c1537160409d6a6 [INFO] testing richwandell/rust-algorithms against beta-2020-06-03 for beta-1.45-1 [INFO] running `"git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Frichwandell%2Frust-algorithms" "/workspace/builds/worker-3/source"` [INFO] [stderr] Cloning into '/workspace/builds/worker-3/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/richwandell/rust-algorithms on toolchain beta-2020-06-03 [INFO] running `"/workspace/cargo-home/bin/cargo" "+beta-2020-06-03" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started tweaking git repo https://github.com/richwandell/rust-algorithms [INFO] finished tweaking git repo https://github.com/richwandell/rust-algorithms [INFO] tweaked toml for git repo https://github.com/richwandell/rust-algorithms written to /workspace/builds/worker-3/source/Cargo.toml [INFO] crate git repo https://github.com/richwandell/rust-algorithms already has a lockfile, it will not be regenerated [INFO] running `"/workspace/cargo-home/bin/cargo" "+beta-2020-06-03" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3/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" "MAP_USER_ID=0" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--network" "none" "rustops/crates-build-env" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2020-06-03" "build" "--frozen"` [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] [stdout] 356375e661ee07755a3a3786eaebfb2cb3fa1ff8479e0ab89b0c50e24ec3fa24 [INFO] running `"docker" "start" "-a" "356375e661ee07755a3a3786eaebfb2cb3fa1ff8479e0ab89b0c50e24ec3fa24"` [INFO] [stderr] sudo: setrlimit(RLIMIT_CORE): Operation not permitted [INFO] [stderr] Compiling ndarray v0.13.0 [INFO] [stderr] Compiling spmc v0.3.0 [INFO] [stderr] Compiling num-complex v0.2.3 [INFO] [stderr] Compiling num-integer v0.1.41 [INFO] [stderr] Compiling itertools v0.8.0 [INFO] [stderr] Compiling getrandom v0.1.12 [INFO] [stderr] Compiling noisy_float v0.1.11 [INFO] [stderr] Compiling rand_core v0.5.1 [INFO] [stderr] Compiling rand_chacha v0.2.1 [INFO] [stderr] Compiling rand_pcg v0.2.0 [INFO] [stderr] Compiling rand v0.7.2 [INFO] [stderr] Compiling rand_distr v0.2.2 [INFO] [stderr] Compiling ndarray-stats v0.3.0 [INFO] [stderr] Compiling ndarray-rand v0.11.0 [INFO] [stderr] Compiling Algos v0.1.0 (/opt/rustwide/workdir) [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bin/spoj_prime_generator.rs:29:9 [INFO] [stderr] | [INFO] [stderr] 29 | io::stdin().read_line(&mut input); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_must_use)]` on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused variable: `n` [INFO] [stderr] --> src/bin/producer_consumer_shared_memory.rs:15:9 [INFO] [stderr] | [INFO] [stderr] 15 | for n in 0..cpus { [INFO] [stderr] | ^ help: if this is intentional, prefix it with an underscore: `_n` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_variables)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/bin/producer_consumer_shared_memory.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | for i in 0..cpus { [INFO] [stderr] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stderr] [INFO] [stderr] warning: value assigned to `grid_x` is never read [INFO] [stderr] --> src/bin/sudoku_solver.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | let mut grid_x = 0; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_assignments)]` on by default [INFO] [stderr] = help: maybe it is overwritten before being read? [INFO] [stderr] [INFO] [stderr] warning: value assigned to `grid_y` is never read [INFO] [stderr] --> src/bin/sudoku_solver.rs:14:13 [INFO] [stderr] | [INFO] [stderr] 14 | let mut grid_y = 0; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: maybe it is overwritten before being read? [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bin/producer_consumer_shared_memory.rs:42:9 [INFO] [stderr] | [INFO] [stderr] 42 | sptx.send(exit); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_must_use)]` on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bin/sudoku_solver.rs:48:32 [INFO] [stderr] | [INFO] [stderr] 48 | fn solve(mut r:i32, mut c:i32, mut board: &mut Vec>) -> bool { [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_mut)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::process` [INFO] [stderr] --> src/bin/spoj_discrete_roots.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use std::process; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_imports)]` on by default [INFO] [stderr] [INFO] [stderr] warning: crate `Algos` should have a snake case name [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(non_snake_case)]` on by default [INFO] [stderr] = help: convert the identifier to snake case: `algos` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `n` [INFO] [stderr] --> src/bin/producer_consumer_message_passing.rs:14:9 [INFO] [stderr] | [INFO] [stderr] 14 | for n in 0..cpus { [INFO] [stderr] | ^ help: if this is intentional, prefix it with an underscore: `_n` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_variables)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/bin/producer_consumer_message_passing.rs:37:9 [INFO] [stderr] | [INFO] [stderr] 37 | for i in 0..cpus { [INFO] [stderr] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bin/producer_consumer_message_passing.rs:10:10 [INFO] [stderr] | [INFO] [stderr] 10 | let (mut mptx, mprx) = mpsc::channel(); [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_mut)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bin/producer_consumer_message_passing.rs:21:21 [INFO] [stderr] | [INFO] [stderr] 21 | tx.send(exit); [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_must_use)]` on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bin/producer_consumer_message_passing.rs:26:17 [INFO] [stderr] | [INFO] [stderr] 26 | tx.send(return_value); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bin/producer_consumer_message_passing.rs:38:9 [INFO] [stderr] | [INFO] [stderr] 38 | sptx.send(exit); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused imports: `ArrayBase`, `Ix`, `OwnedRepr` [INFO] [stderr] --> src/bin/neural_network.rs:3:21 [INFO] [stderr] | [INFO] [stderr] 3 | use ndarray::{arr2, ArrayBase, Array2, OwnedRepr, Ix}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^ ^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_imports)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `ndarray::Ix2` [INFO] [stderr] --> src/bin/neural_network.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use ndarray::Ix2; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error[E0308]: mismatched types [INFO] [stderr] --> src/bin/spoj_discrete_roots.rs:7:12 [INFO] [stderr] | [INFO] [stderr] 7 | if b & 1 { [INFO] [stderr] | ^^^^^ expected `bool`, found `i32` [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error; 1 warning emitted [INFO] [stderr] [INFO] [stderr] For more information about this error, try `rustc --explain E0308`. [INFO] [stderr] error: could not compile `Algos`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: unused variable: `alpha` [INFO] [stderr] --> src/bin/neural_network.rs:86:13 [INFO] [stderr] | [INFO] [stderr] 86 | let alpha = 0.02; [INFO] [stderr] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_alpha` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_variables)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `momentum` [INFO] [stderr] --> src/bin/neural_network.rs:89:13 [INFO] [stderr] | [INFO] [stderr] 89 | let momentum = 0.9; [INFO] [stderr] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_momentum` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `y` [INFO] [stderr] --> src/bin/neural_network.rs:105:56 [INFO] [stderr] | [INFO] [stderr] 105 | fn cost_function_prime(&mut self, X: &Array2, y: &Array2) { [INFO] [stderr] | ^ help: if this is intentional, prefix it with an underscore: `_y` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bin/neural_network.rs:30:13 [INFO] [stderr] | [INFO] [stderr] 30 | let mut W1: Array2 = Array2::::random( [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_mut)]` on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bin/neural_network.rs:34:13 [INFO] [stderr] | [INFO] [stderr] 34 | let mut W2: Array2 = Array2::::random( [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bin/neural_network.rs:42:13 [INFO] [stderr] | [INFO] [stderr] 42 | let mut Z2: Array2 = Array2::::random( [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bin/neural_network.rs:46:13 [INFO] [stderr] | [INFO] [stderr] 46 | let mut Z3: Array2 = Array2::::random( [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bin/neural_network.rs:50:13 [INFO] [stderr] | [INFO] [stderr] 50 | let mut A2: Array2 = Array2::::random( [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bin/neural_network.rs:79:13 [INFO] [stderr] | [INFO] [stderr] 79 | let mut bottom = z * -1.; [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: structure field `W1` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | W1: Array2, [INFO] [stderr] | ^^ help: convert the identifier to snake case (notice the capitalization): `w1` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(non_snake_case)]` on by default [INFO] [stderr] [INFO] [stderr] warning: structure field `W2` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | W2: Array2, [INFO] [stderr] | ^^ help: convert the identifier to snake case (notice the capitalization): `w2` [INFO] [stderr] [INFO] [stderr] warning: structure field `Z2` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | Z2: Array2, [INFO] [stderr] | ^^ help: convert the identifier to snake case (notice the capitalization): `z2` [INFO] [stderr] [INFO] [stderr] warning: structure field `Z3` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:14:5 [INFO] [stderr] | [INFO] [stderr] 14 | Z3: Array2, [INFO] [stderr] | ^^ help: convert the identifier to snake case (notice the capitalization): `z3` [INFO] [stderr] [INFO] [stderr] warning: structure field `A2` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | A2: Array2 [INFO] [stderr] | ^^ help: convert the identifier to snake case: `a2` [INFO] [stderr] [INFO] [stderr] warning: variable `X` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:20:27 [INFO] [stderr] | [INFO] [stderr] 20 | fn forward(&mut self, X: &Array2) -> Array2; [INFO] [stderr] | ^ help: convert the identifier to snake case (notice the capitalization): `x` [INFO] [stderr] [INFO] [stderr] warning: variable `X` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:21:25 [INFO] [stderr] | [INFO] [stderr] 21 | fn train(&mut self, X: &Array2, y: &Array2); [INFO] [stderr] | ^ help: convert the identifier to snake case (notice the capitalization): `x` [INFO] [stderr] [INFO] [stderr] warning: variable `X` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:22:39 [INFO] [stderr] | [INFO] [stderr] 22 | fn cost_function_prime(&mut self, X: &Array2, y: &Array2); [INFO] [stderr] | ^ help: convert the identifier to snake case (notice the capitalization): `x` [INFO] [stderr] [INFO] [stderr] warning: variable `X` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:23:37 [INFO] [stderr] | [INFO] [stderr] 23 | fn compute_gradients(&mut self, X: &Array2, y: &Array2); [INFO] [stderr] | ^ help: convert the identifier to snake case (notice the capitalization): `x` [INFO] [stderr] [INFO] [stderr] warning: variable `W1` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:30:17 [INFO] [stderr] | [INFO] [stderr] 30 | let mut W1: Array2 = Array2::::random( [INFO] [stderr] | ^^ help: convert the identifier to snake case (notice the capitalization): `w1` [INFO] [stderr] [INFO] [stderr] warning: variable `W2` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:34:17 [INFO] [stderr] | [INFO] [stderr] 34 | let mut W2: Array2 = Array2::::random( [INFO] [stderr] | ^^ help: convert the identifier to snake case (notice the capitalization): `w2` [INFO] [stderr] [INFO] [stderr] warning: variable `Z2` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:42:17 [INFO] [stderr] | [INFO] [stderr] 42 | let mut Z2: Array2 = Array2::::random( [INFO] [stderr] | ^^ help: convert the identifier to snake case (notice the capitalization): `z2` [INFO] [stderr] [INFO] [stderr] warning: variable `Z3` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:46:17 [INFO] [stderr] | [INFO] [stderr] 46 | let mut Z3: Array2 = Array2::::random( [INFO] [stderr] | ^^ help: convert the identifier to snake case (notice the capitalization): `z3` [INFO] [stderr] [INFO] [stderr] warning: variable `A2` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:50:17 [INFO] [stderr] | [INFO] [stderr] 50 | let mut A2: Array2 = Array2::::random( [INFO] [stderr] | ^^ help: convert the identifier to snake case: `a2` [INFO] [stderr] [INFO] [stderr] warning: variable `X` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:64:27 [INFO] [stderr] | [INFO] [stderr] 64 | fn forward(&mut self, X: &Array2) -> Array2 { [INFO] [stderr] | ^ help: convert the identifier to snake case (notice the capitalization): `x` [INFO] [stderr] [INFO] [stderr] warning: variable `Z2` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:65:17 [INFO] [stderr] | [INFO] [stderr] 65 | let mut Z2 = X.dot(&self.W1); [INFO] [stderr] | ^^ help: convert the identifier to snake case (notice the capitalization): `z2` [INFO] [stderr] [INFO] [stderr] warning: variable `A2` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:67:17 [INFO] [stderr] | [INFO] [stderr] 67 | let mut A2 = self.sigmoid(&Z2); [INFO] [stderr] | ^^ help: convert the identifier to snake case: `a2` [INFO] [stderr] [INFO] [stderr] warning: variable `Z3` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:70:17 [INFO] [stderr] | [INFO] [stderr] 70 | let mut Z3 = self.A2.dot(&self.W2); [INFO] [stderr] | ^^ help: convert the identifier to snake case (notice the capitalization): `z3` [INFO] [stderr] [INFO] [stderr] warning: variable `X` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:85:25 [INFO] [stderr] | [INFO] [stderr] 85 | fn train(&mut self, X: &Array2, y: &Array2) { [INFO] [stderr] | ^ help: convert the identifier to snake case (notice the capitalization): `x` [INFO] [stderr] [INFO] [stderr] warning: variable `X` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:100:37 [INFO] [stderr] | [INFO] [stderr] 100 | fn compute_gradients(&mut self, X: &Array2, y: &Array2) { [INFO] [stderr] | ^ help: convert the identifier to snake case (notice the capitalization): `x` [INFO] [stderr] [INFO] [stderr] warning: variable `X` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:105:39 [INFO] [stderr] | [INFO] [stderr] 105 | fn cost_function_prime(&mut self, X: &Array2, y: &Array2) { [INFO] [stderr] | ^ help: convert the identifier to snake case (notice the capitalization): `x` [INFO] [stderr] [INFO] [stderr] warning: variable `X` should have a snake case name [INFO] [stderr] --> src/bin/neural_network.rs:124:9 [INFO] [stderr] | [INFO] [stderr] 124 | let X = training_x / max; [INFO] [stderr] | ^ help: convert the identifier to snake case (notice the capitalization): `x` [INFO] [stderr] [INFO] [stderr] warning: 1 warning emitted [INFO] [stderr] [INFO] [stderr] warning: 3 warnings emitted [INFO] [stderr] [INFO] [stderr] warning: 1 warning emitted [INFO] [stderr] [INFO] [stderr] warning: 3 warnings emitted [INFO] [stderr] [INFO] [stderr] warning: 6 warnings emitted [INFO] [stderr] [INFO] [stderr] warning: 33 warnings emitted [INFO] [stderr] [INFO] [stderr] error: build failed [INFO] running `"docker" "inspect" "356375e661ee07755a3a3786eaebfb2cb3fa1ff8479e0ab89b0c50e24ec3fa24"` [INFO] running `"docker" "rm" "-f" "356375e661ee07755a3a3786eaebfb2cb3fa1ff8479e0ab89b0c50e24ec3fa24"` [INFO] [stdout] 356375e661ee07755a3a3786eaebfb2cb3fa1ff8479e0ab89b0c50e24ec3fa24