[INFO] cloning repository https://github.com/bheisler/cargo-criterion [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/bheisler/cargo-criterion" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fbheisler%2Fcargo-criterion", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fbheisler%2Fcargo-criterion'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 4d14e0d5e4b72e10c492dcb96dcafca342a3e77b [INFO] checking bheisler/cargo-criterion against db8f076d2619ce2585b0380dda06e8da25a40da4 for pr-163699 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fbheisler%2Fcargo-criterion" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/bheisler/cargo-criterion [INFO] finished tweaking git repo https://github.com/bheisler/cargo-criterion [INFO] tweaked toml for git repo https://github.com/bheisler/cargo-criterion written to /workspace/builds/worker-6-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/bheisler/cargo-criterion on toolchain db8f076d2619ce2585b0380dda06e8da25a40da4 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+db8f076d2619ce2585b0380dda06e8da25a40da4" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/bheisler/cargo-criterion 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" "+db8f076d2619ce2585b0380dda06e8da25a40da4" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded tinytemplate v1.1.0 [INFO] [stderr] Downloaded serde_json v1.0.56 [INFO] [stderr] Downloaded memoffset v0.5.5 [INFO] [stderr] Downloaded plotters-svg v0.3.1 [INFO] [stderr] Downloaded plotters-backend v0.3.2 [INFO] [stderr] Downloaded linked_hash_set v0.1.3 [INFO] [stderr] Downloaded hashbrown v0.8.1 [INFO] [stderr] Downloaded simplelog v0.10.0 [INFO] [stderr] Downloaded criterion-plot v0.4.3 [INFO] [stderr] Downloaded oorandom v11.1.2 [INFO] [stderr] Downloaded anyhow v1.0.31 [INFO] [stderr] Downloaded half v1.6.0 [INFO] [stderr] Downloaded quickcheck v0.9.2 [INFO] [stderr] Downloaded serde_cbor v0.11.1 [INFO] [stderr] Downloaded indexmap v1.5.0 [INFO] [stderr] Downloaded chrono v0.4.13 [INFO] [stderr] Downloaded clap v2.33.1 [INFO] [stderr] Downloaded libc v0.2.72 [INFO] [stderr] Downloaded plotters v0.3.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,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" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }` [INFO] [stdout] 0c2b4d11f6174224d1ce2b7d70683d9b826c9f3ac01e369c2ccb5dd8ba9cca52 [INFO] running `Command { std: "docker" "start" "0c2b4d11f6174224d1ce2b7d70683d9b826c9f3ac01e369c2ccb5dd8ba9cca52", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "0c2b4d11f6174224d1ce2b7d70683d9b826c9f3ac01e369c2ccb5dd8ba9cca52", kill_on_drop: false }` [INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "0c2b4d11f6174224d1ce2b7d70683d9b826c9f3ac01e369c2ccb5dd8ba9cca52" "/opt/rustwide/cargo-home/bin/cargo" "+db8f076d2619ce2585b0380dda06e8da25a40da4" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "0c2b4d11f6174224d1ce2b7d70683d9b826c9f3ac01e369c2ccb5dd8ba9cca52", kill_on_drop: false }` [INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-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" "-w" "/opt/rustwide/workdir" "--user" "0:0" "0c2b4d11f6174224d1ce2b7d70683d9b826c9f3ac01e369c2ccb5dd8ba9cca52" "/opt/rustwide/cargo-home/bin/cargo" "+db8f076d2619ce2585b0380dda06e8da25a40da4" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] Compiling autocfg v1.0.0 [INFO] [stderr] Compiling libc v0.2.72 [INFO] [stderr] Checking cfg-if v0.1.10 [INFO] [stderr] Compiling serde v1.0.114 [INFO] [stderr] Compiling maybe-uninit v2.0.0 [INFO] [stderr] Checking lazy_static v1.4.0 [INFO] [stderr] Compiling semver-parser v0.7.0 [INFO] [stderr] Compiling proc-macro2 v1.0.28 [INFO] [stderr] Compiling getrandom v0.1.14 [INFO] [stderr] Compiling ryu v1.0.5 [INFO] [stderr] Checking scopeguard v1.1.0 [INFO] [stderr] Compiling rayon-core v1.7.1 [INFO] [stderr] Compiling unicode-xid v0.2.1 [INFO] [stderr] Compiling log v0.4.11 [INFO] [stderr] Compiling serde_json v1.0.56 [INFO] [stderr] Compiling syn v1.0.74 [INFO] [stderr] Checking either v1.5.3 [INFO] [stderr] Compiling bitflags v1.2.1 [INFO] [stderr] Checking unicode-width v0.1.8 [INFO] [stderr] Checking ppv-lite86 v0.2.8 [INFO] [stderr] Compiling serde_derive v1.0.114 [INFO] [stderr] Checking itoa v0.4.6 [INFO] [stderr] Checking plotters-backend v0.3.2 [INFO] [stderr] Compiling anyhow v1.0.31 [INFO] [stderr] Checking itertools v0.9.0 [INFO] [stderr] Checking textwrap v0.11.0 [INFO] [stderr] Compiling semver v0.9.0 [INFO] [stderr] Checking ansi_term v0.11.0 [INFO] [stderr] Checking vec_map v0.8.2 [INFO] [stderr] Compiling crossbeam-utils v0.7.2 [INFO] [stderr] Compiling num-traits v0.2.14 [INFO] [stderr] Compiling memoffset v0.5.5 [INFO] [stderr] Compiling crossbeam-epoch v0.8.2 [INFO] [stderr] Compiling num-integer v0.1.43 [INFO] [stderr] Compiling hashbrown v0.8.1 [INFO] [stderr] Compiling indexmap v1.5.0 [INFO] [stderr] Compiling rayon v1.3.1 [INFO] [stderr] Checking plotters-svg v0.3.1 [INFO] [stderr] Checking half v1.6.0 [INFO] [stderr] Checking linked-hash-map v0.5.3 [INFO] [stderr] Compiling rustc_version v0.2.3 [INFO] [stderr] Checking strsim v0.8.0 [INFO] [stderr] Checking termcolor v1.1.0 [INFO] [stderr] Checking walkdir v2.3.1 [INFO] [stderr] Checking oorandom v11.1.2 [INFO] [stderr] Checking time v0.1.43 [INFO] [stderr] Checking num_cpus v1.13.0 [INFO] [stderr] Checking atty v0.2.14 [INFO] [stderr] Checking linked_hash_set v0.1.3 [INFO] [stderr] Checking clap v2.33.1 [INFO] [stderr] Compiling cast v0.2.3 [INFO] [stderr] Checking rand_core v0.5.1 [INFO] [stderr] Checking rand_chacha v0.2.2 [INFO] [stderr] Checking crossbeam-queue v0.2.3 [INFO] [stderr] Compiling quote v1.0.7 [INFO] [stderr] Checking rand v0.7.3 [INFO] [stderr] Checking crossbeam-deque v0.7.3 [INFO] [stderr] Checking criterion-plot v0.4.3 [INFO] [stderr] Checking plotters v0.3.1 [INFO] [stderr] Checking approx v0.3.2 [INFO] [stderr] Checking quickcheck v0.9.2 [INFO] [stderr] Checking chrono v0.4.13 [INFO] [stderr] Checking serde_cbor v0.11.1 [INFO] [stderr] Checking toml v0.5.6 [INFO] [stderr] Checking simplelog v0.10.0 [INFO] [stderr] Checking tinytemplate v1.1.0 [INFO] [stderr] Checking cargo-criterion v1.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: trailing semicolon in macro used in expression position [INFO] [stdout] --> src/plot/gnuplot_backend/mod.rs:413:28 [INFO] [stdout] | [INFO] [stdout] 413 | Ok(out) => error!("Error in Gnuplot: {}", String::from_utf8_lossy(&out.stderr)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stdout] = note: for more information, see issue #79813 [INFO] [stdout] = note: `#[warn(semicolon_in_expressions_from_non_local_macros)]` (part of `#[warn(future_incompatible)]`) on by default [INFO] [stdout] = note: this warning originates in the macro `error` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trailing semicolon in macro used in expression position [INFO] [stdout] --> src/plot/gnuplot_backend/mod.rs:414:27 [INFO] [stdout] | [INFO] [stdout] 414 | Err(e) => error!("Got IO error while waiting for Gnuplot to complete: {}", e), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stdout] = note: for more information, see issue #79813 [INFO] [stdout] = note: this warning originates in the macro `error` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trailing semicolon in macro used in expression position [INFO] [stdout] --> src/bench_target.rs:301:39 [INFO] [stdout] | [INFO] [stdout] 301 | ... Err(e) => error!("Failed to load historical data: {:?}", e), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stdout] = note: for more information, see issue #79813 [INFO] [stdout] = note: this warning originates in the macro `error` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trailing semicolon in macro used in expression position [INFO] [stdout] --> src/message_formats/json.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | error!("Unexpected error writing JSON message: {:?}", e) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: macro invocations at the end of a block are treated as expressions [INFO] [stdout] = note: to ignore the value produced by the macro, add a semicolon after the invocation of `error` [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stdout] = note: for more information, see issue #79813 [INFO] [stdout] = note: this warning originates in the macro `error` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trailing semicolon in macro used in expression position [INFO] [stdout] --> src/model.rs:90:17 [INFO] [stdout] | [INFO] [stdout] 90 | error!("Encountered error while loading stored data: {}", e) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: macro invocations at the end of a block are treated as expressions [INFO] [stdout] = note: to ignore the value produced by the macro, add a semicolon after the invocation of `error` [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stdout] = note: for more information, see issue #79813 [INFO] [stdout] = note: this warning originates in the macro `error` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trailing semicolon in macro used in expression position [INFO] [stdout] --> src/model.rs:264:31 [INFO] [stdout] | [INFO] [stdout] 264 | Err(e) => error!( [INFO] [stdout] | _______________________________^ [INFO] [stdout] 265 | | "Unexpected error loading benchmark history from file {}: {:?}", [INFO] [stdout] 266 | | entry.path().display(), [INFO] [stdout] 267 | | e [INFO] [stdout] 268 | | ), [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stdout] = note: for more information, see issue #79813 [INFO] [stdout] = note: this warning originates in the macro `error` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trailing semicolon in macro used in expression position [INFO] [stdout] --> src/plot/gnuplot_backend/mod.rs:413:28 [INFO] [stdout] | [INFO] [stdout] 413 | Ok(out) => error!("Error in Gnuplot: {}", String::from_utf8_lossy(&out.stderr)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stdout] = note: for more information, see issue #79813 [INFO] [stdout] = note: `#[warn(semicolon_in_expressions_from_non_local_macros)]` (part of `#[warn(future_incompatible)]`) on by default [INFO] [stdout] = note: this warning originates in the macro `error` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trailing semicolon in macro used in expression position [INFO] [stdout] --> src/plot/gnuplot_backend/mod.rs:414:27 [INFO] [stdout] | [INFO] [stdout] 414 | Err(e) => error!("Got IO error while waiting for Gnuplot to complete: {}", e), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stdout] = note: for more information, see issue #79813 [INFO] [stdout] = note: this warning originates in the macro `error` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trailing semicolon in macro used in expression position [INFO] [stdout] --> src/bench_target.rs:301:39 [INFO] [stdout] | [INFO] [stdout] 301 | ... Err(e) => error!("Failed to load historical data: {:?}", e), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stdout] = note: for more information, see issue #79813 [INFO] [stdout] = note: this warning originates in the macro `error` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trailing semicolon in macro used in expression position [INFO] [stdout] --> src/message_formats/json.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | error!("Unexpected error writing JSON message: {:?}", e) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: macro invocations at the end of a block are treated as expressions [INFO] [stdout] = note: to ignore the value produced by the macro, add a semicolon after the invocation of `error` [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stdout] = note: for more information, see issue #79813 [INFO] [stdout] = note: this warning originates in the macro `error` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trailing semicolon in macro used in expression position [INFO] [stdout] --> src/model.rs:90:17 [INFO] [stdout] | [INFO] [stdout] 90 | error!("Encountered error while loading stored data: {}", e) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: macro invocations at the end of a block are treated as expressions [INFO] [stdout] = note: to ignore the value produced by the macro, add a semicolon after the invocation of `error` [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stdout] = note: for more information, see issue #79813 [INFO] [stdout] = note: this warning originates in the macro `error` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trailing semicolon in macro used in expression position [INFO] [stdout] --> src/model.rs:264:31 [INFO] [stdout] | [INFO] [stdout] 264 | Err(e) => error!( [INFO] [stdout] | _______________________________^ [INFO] [stdout] 265 | | "Unexpected error loading benchmark history from file {}: {:?}", [INFO] [stdout] 266 | | entry.path().display(), [INFO] [stdout] 267 | | e [INFO] [stdout] 268 | | ), [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stdout] = note: for more information, see issue #79813 [INFO] [stdout] = note: this warning originates in the macro `error` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/value_formatter.rs:8:22 [INFO] [stdout] | [INFO] [stdout] 8 | pub fn new(conn: &mut Connection) -> ValueFormatter { [INFO] [stdout] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 8 | pub fn new(conn: &mut Connection) -> ValueFormatter<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/value_formatter.rs:8:22 [INFO] [stdout] | [INFO] [stdout] 8 | pub fn new(conn: &mut Connection) -> ValueFormatter { [INFO] [stdout] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 8 | pub fn new(conn: &mut Connection) -> ValueFormatter<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 24.91s [INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: cargo-criterion v1.1.0 (/opt/rustwide/workdir) [INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 2` [INFO] running `Command { std: "docker" "inspect" "0c2b4d11f6174224d1ce2b7d70683d9b826c9f3ac01e369c2ccb5dd8ba9cca52", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0c2b4d11f6174224d1ce2b7d70683d9b826c9f3ac01e369c2ccb5dd8ba9cca52", kill_on_drop: false }` [INFO] [stdout] 0c2b4d11f6174224d1ce2b7d70683d9b826c9f3ac01e369c2ccb5dd8ba9cca52