[INFO] fetching crate tailwind-rs-scanner 0.15.4...
[INFO] testing tailwind-rs-scanner-0.15.4 against try#db823df02fd0c2cf67b43025ac3fef3f2d743245 for pr-150681
[INFO] extracting crate tailwind-rs-scanner 0.15.4 into /workspace/builds/worker-7-tc2/source
[INFO] started tweaking crates.io crate tailwind-rs-scanner 0.15.4
[INFO] finished tweaking crates.io crate tailwind-rs-scanner 0.15.4
[INFO] tweaked toml for crates.io crate tailwind-rs-scanner 0.15.4 written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate tailwind-rs-scanner 0.15.4 on toolchain db823df02fd0c2cf67b43025ac3fef3f2d743245
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate tailwind-rs-scanner 0.15.4 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" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 1e11cc3b9f21829c2cd88095959faa73848d5086f7ec2d8b3ee516559da70097
[INFO] running `Command { std: "docker" "start" "-a" "1e11cc3b9f21829c2cd88095959faa73848d5086f7ec2d8b3ee516559da70097", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "1e11cc3b9f21829c2cd88095959faa73848d5086f7ec2d8b3ee516559da70097", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "1e11cc3b9f21829c2cd88095959faa73848d5086f7ec2d8b3ee516559da70097", kill_on_drop: false }`
[INFO] [stdout] 1e11cc3b9f21829c2cd88095959faa73848d5086f7ec2d8b3ee516559da70097
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 067c3cb98d4ddbeb1f2f06bb7c86afce0f7ecb8089b50f8bd1b0dfff6c0e86dc
[INFO] running `Command { std: "docker" "start" "-a" "067c3cb98d4ddbeb1f2f06bb7c86afce0f7ecb8089b50f8bd1b0dfff6c0e86dc", kill_on_drop: false }`
[INFO] [stderr]    Compiling unicode-ident v1.0.19
[INFO] [stderr]    Compiling libc v0.2.176
[INFO] [stderr]    Compiling futures-sink v0.3.31
[INFO] [stderr]    Compiling regex-syntax v0.8.6
[INFO] [stderr]    Compiling serde_core v1.0.227
[INFO] [stderr]    Compiling futures-core v0.3.31
[INFO] [stderr]    Compiling aho-corasick v1.1.3
[INFO] [stderr]    Compiling bstr v0.2.17
[INFO] [stderr]    Compiling aho-corasick v0.7.20
[INFO] [stderr]    Compiling serde v1.0.227
[INFO] [stderr]    Compiling log v0.4.28
[INFO] [stderr]    Compiling thread_local v1.1.9
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling glob v0.3.3
[INFO] [stderr]    Compiling proc-macro2 v1.0.101
[INFO] [stderr]    Compiling futures-channel v0.3.31
[INFO] [stderr]    Compiling quote v1.0.40
[INFO] [stderr]    Compiling syn v2.0.106
[INFO] [stderr]    Compiling parking_lot_core v0.9.11
[INFO] [stderr]    Compiling mio v1.0.4
[INFO] [stderr]    Compiling signal-hook-registry v1.4.6
[INFO] [stderr]    Compiling socket2 v0.6.0
[INFO] [stderr]    Compiling parking_lot v0.12.4
[INFO] [stderr]    Compiling dashmap v5.5.3
[INFO] [stderr]    Compiling regex-automata v0.4.11
[INFO] [stderr]    Compiling serde_json v1.0.145
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling tokio-macros v2.5.0
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling serde_derive v1.0.227
[INFO] [stderr]    Compiling regex v1.11.3
[INFO] [stderr]    Compiling globset v0.4.6
[INFO] [stderr]    Compiling tokio v1.47.1
[INFO] [stderr]    Compiling ignore v0.4.17
[INFO] [stderr]    Compiling futures-util v0.3.31
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling futures-executor v0.3.31
[INFO] [stderr]    Compiling futures v0.3.31
[INFO] [stderr]    Compiling tailwind-rs-scanner v0.15.4 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `Result` and `ScannerError`
[INFO] [stdout]  --> src/cache.rs:7:20
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::error::{Result, ScannerError};
[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 import: `CacheEntry`
[INFO] [stdout]  --> src/file_scanner.rs:6:20
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::cache::{CacheEntry, CacheStats, ScanCache};
[INFO] [stdout]   |                    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ClassContext`
[INFO] [stdout]  --> src/file_scanner.rs:7:30
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::class_extractor::{ClassContext, ClassExtractor, ExtractedClass};
[INFO] [stdout]   |                              ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FilePattern`
[INFO] [stdout]  --> src/file_scanner.rs:8:44
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::content_config::{ContentConfig, FilePattern, ScanConfig};
[INFO] [stdout]   |                                            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ScannerError`
[INFO] [stdout]  --> src/file_scanner.rs:9:28
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::error::{Result, ScannerError};
[INFO] [stdout]   |                            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ScannerError`
[INFO] [stdout]  --> src/file_watcher.rs:6:28
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::{Result, ScannerError};
[INFO] [stdout]   |                            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ScannerError`
[INFO] [stdout]  --> src/glob_matcher.rs:6:28
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::{Result, ScannerError};
[INFO] [stdout]   |                            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ScannerError`
[INFO] [stdout]  --> src/parallel_processor.rs:9:28
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::error::{Result, ScannerError};
[INFO] [stdout]   |                            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `prefix`
[INFO] [stdout]    --> src/content_config.rs:210:25
[INFO] [stdout]     |
[INFO] [stdout] 210 |                     let prefix = suffix_parts[0];
[INFO] [stdout]     |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_prefix`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `config`
[INFO] [stdout]   --> src/parallel_processor.rs:68:9
[INFO] [stdout]    |
[INFO] [stdout] 68 |         config: &ScanConfig,
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]   --> src/parallel_processor.rs:70:13
[INFO] [stdout]    |
[INFO] [stdout] 70 |         let start_time = Instant::now();
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tree_sitter_parser.rs:174:13
[INFO] [stdout]     |
[INFO] [stdout] 174 |         let mut string_delimiter = '"';
[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: field `config` is never read
[INFO] [stdout]   --> src/file_watcher.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct FileWatcher {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 13 |     /// Watch configuration
[INFO] [stdout] 14 |     config: WatchConfig,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileWatcher` has a derived impl for the trait `Debug`, but this is 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: field `max_workers` is never read
[INFO] [stdout]   --> src/parallel_processor.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct ParallelProcessor {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     max_workers: Option<usize>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ParallelProcessor` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 30.64s
[INFO] running `Command { std: "docker" "inspect" "067c3cb98d4ddbeb1f2f06bb7c86afce0f7ecb8089b50f8bd1b0dfff6c0e86dc", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "067c3cb98d4ddbeb1f2f06bb7c86afce0f7ecb8089b50f8bd1b0dfff6c0e86dc", kill_on_drop: false }`
[INFO] [stdout] 067c3cb98d4ddbeb1f2f06bb7c86afce0f7ecb8089b50f8bd1b0dfff6c0e86dc
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] c7894ae7098365af0873c1201c5c60550e334b2e1eb5892cfff87efdc73e359f
[INFO] running `Command { std: "docker" "start" "-a" "c7894ae7098365af0873c1201c5c60550e334b2e1eb5892cfff87efdc73e359f", kill_on_drop: false }`
[INFO] [stderr]    Compiling getrandom v0.3.3
[INFO] [stderr]    Compiling serde_core v1.0.227
[INFO] [stderr]    Compiling serde v1.0.227
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling bitflags v2.9.4
[INFO] [stderr]    Compiling half v2.6.0
[INFO] [stderr]    Compiling clap_builder v4.5.48
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling is-terminal v0.4.16
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling rayon v1.11.0
[INFO] [stderr]    Compiling rustix v1.1.2
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling rand_core v0.9.3
[INFO] [stderr]    Compiling rand_xorshift v0.4.0
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling rand v0.9.2
[INFO] [stderr]    Compiling plotters v0.3.7
[INFO] [stderr]    Compiling criterion-plot v0.5.0
[INFO] [stderr]    Compiling clap v4.5.48
[INFO] [stderr]    Compiling tempfile v3.23.0
[INFO] [stderr]    Compiling rusty-fork v0.3.0
[INFO] [stderr]    Compiling serde_json v1.0.145
[INFO] [stderr]    Compiling proptest v1.8.0
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling tailwind-rs-scanner v0.15.4 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `Result` and `ScannerError`
[INFO] [stdout]  --> src/cache.rs:7:20
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::error::{Result, ScannerError};
[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 import: `CacheEntry`
[INFO] [stdout]  --> src/file_scanner.rs:6:20
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::cache::{CacheEntry, CacheStats, ScanCache};
[INFO] [stdout]   |                    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ClassContext`
[INFO] [stdout]  --> src/file_scanner.rs:7:30
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::class_extractor::{ClassContext, ClassExtractor, ExtractedClass};
[INFO] [stdout]   |                              ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FilePattern`
[INFO] [stdout]  --> src/file_scanner.rs:8:44
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::content_config::{ContentConfig, FilePattern, ScanConfig};
[INFO] [stdout]   |                                            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ScannerError`
[INFO] [stdout]  --> src/file_scanner.rs:9:28
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::error::{Result, ScannerError};
[INFO] [stdout]   |                            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ScannerError`
[INFO] [stdout]  --> src/file_watcher.rs:6:28
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::{Result, ScannerError};
[INFO] [stdout]   |                            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ScannerError`
[INFO] [stdout]  --> src/glob_matcher.rs:6:28
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::{Result, ScannerError};
[INFO] [stdout]   |                            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ScannerError`
[INFO] [stdout]  --> src/parallel_processor.rs:9:28
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::error::{Result, ScannerError};
[INFO] [stdout]   |                            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling criterion v0.5.1
[INFO] [stdout] warning: unused variable: `prefix`
[INFO] [stdout]    --> src/content_config.rs:210:25
[INFO] [stdout]     |
[INFO] [stdout] 210 |                     let prefix = suffix_parts[0];
[INFO] [stdout]     |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_prefix`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `config`
[INFO] [stdout]   --> src/parallel_processor.rs:68:9
[INFO] [stdout]    |
[INFO] [stdout] 68 |         config: &ScanConfig,
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]   --> src/parallel_processor.rs:70:13
[INFO] [stdout]    |
[INFO] [stdout] 70 |         let start_time = Instant::now();
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tree_sitter_parser.rs:174:13
[INFO] [stdout]     |
[INFO] [stdout] 174 |         let mut string_delimiter = '"';
[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: field `config` is never read
[INFO] [stdout]   --> src/file_watcher.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct FileWatcher {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 13 |     /// Watch configuration
[INFO] [stdout] 14 |     config: WatchConfig,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileWatcher` has a derived impl for the trait `Debug`, but this is 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: field `max_workers` is never read
[INFO] [stdout]   --> src/parallel_processor.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct ParallelProcessor {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     max_workers: Option<usize>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ParallelProcessor` 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 imports: `Result` and `ScannerError`
[INFO] [stdout]  --> src/cache.rs:7:20
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::error::{Result, ScannerError};
[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 import: `std::path::PathBuf`
[INFO] [stdout]    --> src/class_extractor.rs:251:9
[INFO] [stdout]     |
[INFO] [stdout] 251 |     use std::path::PathBuf;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CacheEntry`
[INFO] [stdout]  --> src/file_scanner.rs:6:20
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::cache::{CacheEntry, CacheStats, ScanCache};
[INFO] [stdout]   |                    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FilePattern`
[INFO] [stdout]  --> src/file_scanner.rs:8:44
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::content_config::{ContentConfig, FilePattern, ScanConfig};
[INFO] [stdout]   |                                            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ScannerError`
[INFO] [stdout]  --> src/file_scanner.rs:9:28
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::error::{Result, ScannerError};
[INFO] [stdout]   |                            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ScannerError`
[INFO] [stdout]  --> src/file_watcher.rs:6:28
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::{Result, ScannerError};
[INFO] [stdout]   |                            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ScannerError`
[INFO] [stdout]  --> src/glob_matcher.rs:6:28
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::{Result, ScannerError};
[INFO] [stdout]   |                            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ScannerError`
[INFO] [stdout]  --> src/parallel_processor.rs:9:28
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::error::{Result, ScannerError};
[INFO] [stdout]   |                            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `prefix`
[INFO] [stdout]    --> src/content_config.rs:210:25
[INFO] [stdout]     |
[INFO] [stdout] 210 |                     let prefix = suffix_parts[0];
[INFO] [stdout]     |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_prefix`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `config`
[INFO] [stdout]   --> src/parallel_processor.rs:68:9
[INFO] [stdout]    |
[INFO] [stdout] 68 |         config: &ScanConfig,
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]   --> src/parallel_processor.rs:70:13
[INFO] [stdout]    |
[INFO] [stdout] 70 |         let start_time = Instant::now();
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tree_sitter_parser.rs:174:13
[INFO] [stdout]     |
[INFO] [stdout] 174 |         let mut string_delimiter = '"';
[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: field `config` is never read
[INFO] [stdout]   --> src/file_watcher.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct FileWatcher {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 13 |     /// Watch configuration
[INFO] [stdout] 14 |     config: WatchConfig,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileWatcher` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 23.01s
[INFO] running `Command { std: "docker" "inspect" "c7894ae7098365af0873c1201c5c60550e334b2e1eb5892cfff87efdc73e359f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c7894ae7098365af0873c1201c5c60550e334b2e1eb5892cfff87efdc73e359f", kill_on_drop: false }`
[INFO] [stdout] c7894ae7098365af0873c1201c5c60550e334b2e1eb5892cfff87efdc73e359f
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 315bb4d2f44a5c9f05c7a282eaf802186973b79f2b8c45e6feed5fbf1292d55f
[INFO] running `Command { std: "docker" "start" "-a" "315bb4d2f44a5c9f05c7a282eaf802186973b79f2b8c45e6feed5fbf1292d55f", kill_on_drop: false }`
[INFO] [stderr] warning: unused imports: `Result` and `ScannerError`
[INFO] [stderr]  --> src/cache.rs:7:20
[INFO] [stderr]   |
[INFO] [stderr] 7 | use crate::error::{Result, ScannerError};
[INFO] [stderr]   |                    ^^^^^^  ^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `CacheEntry`
[INFO] [stderr]  --> src/file_scanner.rs:6:20
[INFO] [stderr]   |
[INFO] [stderr] 6 | use crate::cache::{CacheEntry, CacheStats, ScanCache};
[INFO] [stderr]   |                    ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ClassContext`
[INFO] [stderr]  --> src/file_scanner.rs:7:30
[INFO] [stderr]   |
[INFO] [stderr] 7 | use crate::class_extractor::{ClassContext, ClassExtractor, ExtractedClass};
[INFO] [stderr]   |                              ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `FilePattern`
[INFO] [stderr]  --> src/file_scanner.rs:8:44
[INFO] [stderr]   |
[INFO] [stderr] 8 | use crate::content_config::{ContentConfig, FilePattern, ScanConfig};
[INFO] [stderr]   |                                            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ScannerError`
[INFO] [stderr]  --> src/file_scanner.rs:9:28
[INFO] [stderr]   |
[INFO] [stderr] 9 | use crate::error::{Result, ScannerError};
[INFO] [stderr]   |                            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ScannerError`
[INFO] [stderr]  --> src/file_watcher.rs:6:28
[INFO] [stderr]   |
[INFO] [stderr] 6 | use crate::error::{Result, ScannerError};
[INFO] [stderr]   |                            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ScannerError`
[INFO] [stderr]  --> src/glob_matcher.rs:6:28
[INFO] [stderr]   |
[INFO] [stderr] 6 | use crate::error::{Result, ScannerError};
[INFO] [stderr]   |                            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ScannerError`
[INFO] [stderr]  --> src/parallel_processor.rs:9:28
[INFO] [stderr]   |
[INFO] [stderr] 9 | use crate::error::{Result, ScannerError};
[INFO] [stderr]   |                            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `prefix`
[INFO] [stderr]    --> src/content_config.rs:210:25
[INFO] [stderr]     |
[INFO] [stderr] 210 |                     let prefix = suffix_parts[0];
[INFO] [stderr]     |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_prefix`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `config`
[INFO] [stderr]   --> src/parallel_processor.rs:68:9
[INFO] [stderr]    |
[INFO] [stderr] 68 |         config: &ScanConfig,
[INFO] [stderr]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `start_time`
[INFO] [stderr]   --> src/parallel_processor.rs:70:13
[INFO] [stderr]    |
[INFO] [stderr] 70 |         let start_time = Instant::now();
[INFO] [stderr]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/tree_sitter_parser.rs:174:13
[INFO] [stderr]     |
[INFO] [stderr] 174 |         let mut string_delimiter = '"';
[INFO] [stderr]     |             ----^^^^^^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: field `config` is never read
[INFO] [stderr]   --> src/file_watcher.rs:14:5
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub struct FileWatcher {
[INFO] [stderr]    |            ----------- field in this struct
[INFO] [stderr] 13 |     /// Watch configuration
[INFO] [stderr] 14 |     config: WatchConfig,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `FileWatcher` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: field `max_workers` is never read
[INFO] [stderr]   --> src/parallel_processor.rs:22:5
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub struct ParallelProcessor {
[INFO] [stderr]    |            ----------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 22 |     max_workers: Option<usize>,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `ParallelProcessor` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: `tailwind-rs-scanner` (lib) generated 14 warnings (run `cargo fix --lib -p tailwind-rs-scanner` to apply 12 suggestions)
[INFO] [stderr] warning: unused import: `std::path::PathBuf`
[INFO] [stderr]    --> src/class_extractor.rs:251:9
[INFO] [stderr]     |
[INFO] [stderr] 251 |     use std::path::PathBuf;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `tailwind-rs-scanner` (lib test) generated 13 warnings (12 duplicates) (run `cargo fix --lib -p tailwind-rs-scanner --tests` to apply 1 suggestion)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.15s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/tailwind_rs_scanner-99fda529a70d3845)
[INFO] [stdout] 
[INFO] [stdout] running 36 tests
[INFO] [stdout] test cache::tests::test_cache_operations ... ok
[INFO] [stdout] test class_extractor::tests::test_class_context_creation ... ok
[INFO] [stdout] test cache::tests::test_scan_cache_creation ... ok
[INFO] [stdout] test content_config::tests::test_extraction_rule_creation ... ok
[INFO] [stdout] test content_config::tests::test_extraction_rule_with_context ... ok
[INFO] [stdout] test cache::tests::test_cache_stats ... ok
[INFO] [stdout] test cache::tests::test_cache_entry_creation ... ok
[INFO] [stdout] test content_config::tests::test_file_pattern_creation ... ok
[INFO] [stdout] test content_config::tests::test_content_config_default ... ok
[INFO] [stdout] test class_extractor::tests::test_class_context_with_file_type ... ok
[INFO] [stdout] test file_scanner::tests::test_file_type_detection ... ok
[INFO] [stdout] test file_watcher::tests::test_file_watcher_creation ... ok
[INFO] [stdout] test file_watcher::tests::test_watch_config_default ... ok
[INFO] [stdout] test glob_matcher::tests::test_glob_matcher_creation ... ok
[INFO] [stdout] test parallel_processor::tests::test_parallel_processor_creation ... ok
[INFO] [stdout] test parallel_processor::tests::test_parallel_processor_with_max_workers ... ok
[INFO] [stdout] test glob_matcher::tests::test_glob_pattern_matching ... ok
[INFO] [stdout] test content_config::tests::test_file_pattern_matching ... ok
[INFO] [stdout] test content_config::tests::test_scan_config_default ... ok
[INFO] [stdout] test error::tests::test_scanner_error_creation ... ok
[INFO] [stdout] test parallel_processor::tests::test_processing_stats_default ... ok
[INFO] [stdout] test file_scanner::tests::test_class_set_creation ... ok
[INFO] [stdout] test file_scanner::tests::test_class_set_operations ... ok
[INFO] [stdout] test tree_sitter_parser::tests::test_tree_sitter_parser_creation ... ok
[INFO] [stdout] test tree_sitter_parser::tests::test_language_support ... ok
[INFO] [stdout] test tree_sitter_parser::tests::test_parse_content ... ok
[INFO] [stdout] test tests::test_default_config ... ok
[INFO] [stdout] test error::tests::test_error_conversion ... ok
[INFO] [stdout] test class_extractor::tests::test_extracted_class_creation ... ok
[INFO] [stdout] test tests::test_version_constant ... ok
[INFO] [stdout] test class_extractor::tests::test_comment_detection ... ok
[INFO] [stdout] test class_extractor::tests::test_class_extractor_creation ... ok
[INFO] [stdout] test class_extractor::tests::test_custom_rule_addition ... ok
[INFO] [stdout] test class_extractor::tests::test_string_detection ... ok
[INFO] [stdout] test file_scanner::tests::test_content_scanner_creation ... ok
[INFO] [stdout] test tests::test_scan_content ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 36 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests tailwind_rs_scanner
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test src/lib.rs - (line 24) ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- src/lib.rs - (line 24) stdout ----
[INFO] [stdout] error[E0107]: type alias takes 1 generic argument but 2 generic arguments were supplied
[INFO] [stdout]   --> src/lib.rs:29:20
[INFO] [stdout]    |
[INFO] [stdout] 29 | async fn main() -> Result<(), ScannerError> {
[INFO] [stdout]    |                    ^^^^^^   -------------- help: remove the unnecessary generic argument
[INFO] [stdout]    |                    |
[INFO] [stdout]    |                    expected 1 generic argument
[INFO] [stdout]    |
[INFO] [stdout] note: type alias defined here, with 1 generic parameter: `T`
[INFO] [stdout]   --> src/error.rs:43:10
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub type Result<T> = std::result::Result<T, ScannerError>;
[INFO] [stdout]    |          ^^^^^^ -
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `scan_for_classes` found for struct `tailwind_rs_scanner::ContentScanner` in the current scope
[INFO] [stdout]    --> src/lib.rs:32:27
[INFO] [stdout]     |
[INFO] [stdout]  32 |     let classes = scanner.scan_for_classes().await?;
[INFO] [stdout]     |                           ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: there is a method `scan_file` with a similar name, but with different arguments
[INFO] [stdout]    --> src/file_scanner.rs:183:5
[INFO] [stdout]     |
[INFO] [stdout] 183 |     pub async fn scan_file(&self, file_path: &Path) -> Result<Vec<ExtractedClass>> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]   --> src/lib.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 32 |     let classes = scanner.scan_for_classes().await?;
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 33 |     println!("Found {} classes", classes.total_classes());
[INFO] [stdout]    |                                  ------- type must be known at this point
[INFO] [stdout]    |
[INFO] [stdout] help: consider giving `classes` an explicit type
[INFO] [stdout]    |
[INFO] [stdout] 32 |     let classes: /* Type */ = scanner.scan_for_classes().await?;
[INFO] [stdout]    |                ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `watch` found for struct `tailwind_rs_scanner::ContentScanner` in the current scope
[INFO] [stdout]   --> src/lib.rs:36:31
[INFO] [stdout]    |
[INFO] [stdout] 36 |     let mut watcher = scanner.watch().await?;
[INFO] [stdout]    |                               ^^^^^ method not found in `tailwind_rs_scanner::ContentScanner`
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]   --> src/lib.rs:36:9
[INFO] [stdout]    |
[INFO] [stdout] 36 |     let mut watcher = scanner.watch().await?;
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 37 |     while let Some(update) = watcher.next().await {
[INFO] [stdout]    |                              ------- type must be known at this point
[INFO] [stdout]    |
[INFO] [stdout] help: consider giving `watcher` an explicit type
[INFO] [stdout]    |
[INFO] [stdout] 36 |     let mut watcher: /* Type */ = scanner.watch().await?;
[INFO] [stdout]    |                    ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 5 previous errors
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0107, E0282, E0599.
[INFO] [stdout] For more information about an error, try `rustc --explain E0107`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     src/lib.rs - (line 24)
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.16s
[INFO] [stdout] 
[INFO] [stderr] error: doctest failed, to rerun pass `--doc`
[INFO] running `Command { std: "docker" "inspect" "315bb4d2f44a5c9f05c7a282eaf802186973b79f2b8c45e6feed5fbf1292d55f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "315bb4d2f44a5c9f05c7a282eaf802186973b79f2b8c45e6feed5fbf1292d55f", kill_on_drop: false }`
[INFO] [stdout] 315bb4d2f44a5c9f05c7a282eaf802186973b79f2b8c45e6feed5fbf1292d55f
