From 3a40df85d6ff5905eef589de01fcab5ad0e79e50 Mon Sep 17 00:00:00 2001 From: Angelo Ross Date: Wed, 13 Sep 2023 11:10:42 -0300 Subject: [PATCH 1/2] Showcase output with too many features --- .../features_too_many_activated/in/Cargo.toml | 5 + .../features_too_many_activated/in/src/lib.rs | 0 .../features_too_many_activated/mod.rs | 38 ++++ .../out/Cargo.toml | 8 + .../features_too_many_activated/stderr.log | 203 ++++++++++++++++++ .../features_too_many_activated/stdout.log | 0 .../in/Cargo.toml | 5 + .../in/src/lib.rs | 0 .../features_too_many_few_activated/mod.rs | 38 ++++ .../out/Cargo.toml | 8 + .../stderr.log | 203 ++++++++++++++++++ .../stdout.log | 0 tests/testsuite/cargo_add/mod.rs | 2 + 13 files changed, 510 insertions(+) create mode 100644 tests/testsuite/cargo_add/features_too_many_activated/in/Cargo.toml create mode 100644 tests/testsuite/cargo_add/features_too_many_activated/in/src/lib.rs create mode 100644 tests/testsuite/cargo_add/features_too_many_activated/mod.rs create mode 100644 tests/testsuite/cargo_add/features_too_many_activated/out/Cargo.toml create mode 100644 tests/testsuite/cargo_add/features_too_many_activated/stderr.log create mode 100644 tests/testsuite/cargo_add/features_too_many_activated/stdout.log create mode 100644 tests/testsuite/cargo_add/features_too_many_few_activated/in/Cargo.toml create mode 100644 tests/testsuite/cargo_add/features_too_many_few_activated/in/src/lib.rs create mode 100644 tests/testsuite/cargo_add/features_too_many_few_activated/mod.rs create mode 100644 tests/testsuite/cargo_add/features_too_many_few_activated/out/Cargo.toml create mode 100644 tests/testsuite/cargo_add/features_too_many_few_activated/stderr.log create mode 100644 tests/testsuite/cargo_add/features_too_many_few_activated/stdout.log diff --git a/tests/testsuite/cargo_add/features_too_many_activated/in/Cargo.toml b/tests/testsuite/cargo_add/features_too_many_activated/in/Cargo.toml new file mode 100644 index 00000000000..3ecdb668167 --- /dev/null +++ b/tests/testsuite/cargo_add/features_too_many_activated/in/Cargo.toml @@ -0,0 +1,5 @@ +[workspace] + +[package] +name = "cargo-list-test-fixture" +version = "0.0.0" diff --git a/tests/testsuite/cargo_add/features_too_many_activated/in/src/lib.rs b/tests/testsuite/cargo_add/features_too_many_activated/in/src/lib.rs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_add/features_too_many_activated/mod.rs b/tests/testsuite/cargo_add/features_too_many_activated/mod.rs new file mode 100644 index 00000000000..467e9a681c1 --- /dev/null +++ b/tests/testsuite/cargo_add/features_too_many_activated/mod.rs @@ -0,0 +1,38 @@ +use cargo_test_support::compare::assert_ui; +use cargo_test_support::prelude::*; +use cargo_test_support::Project; +use itertools::Itertools; + +use cargo_test_support::curr_dir; + +#[cargo_test] +fn case() { + const MANY_FEATURES_COUNT: usize = 200; + const ACTIVATED_FEATURES_COUNT: usize = 100; + + cargo_test_support::registry::init(); + let mut test_package = + cargo_test_support::registry::Package::new("your-face", "99999.0.0+my-package"); + for i in 0..MANY_FEATURES_COUNT { + test_package.feature(format!("eyes{i:03}").as_str(), &[]); + } + test_package.publish(); + + let project = Project::from_template(curr_dir!().join("in")); + let project_root = project.root(); + let cwd = &project_root; + + let features = (0..ACTIVATED_FEATURES_COUNT) + .map(|i| format!("eyes{i:03}")) + .join(","); + snapbox::cmd::Command::cargo_ui() + .arg("add") + .arg_line(format!("your-face --features {features}").as_str()) + .current_dir(cwd) + .assert() + .success() + .stdout_matches_path(curr_dir!().join("stdout.log")) + .stderr_matches_path(curr_dir!().join("stderr.log")); + + assert_ui().subset_matches(curr_dir!().join("out"), &project_root); +} diff --git a/tests/testsuite/cargo_add/features_too_many_activated/out/Cargo.toml b/tests/testsuite/cargo_add/features_too_many_activated/out/Cargo.toml new file mode 100644 index 00000000000..6c8c7e5a3e4 --- /dev/null +++ b/tests/testsuite/cargo_add/features_too_many_activated/out/Cargo.toml @@ -0,0 +1,8 @@ +[workspace] + +[package] +name = "cargo-list-test-fixture" +version = "0.0.0" + +[dependencies] +your-face = { version = "99999.0.0", features = ["eyes000", "eyes001", "eyes002", "eyes003", "eyes004", "eyes005", "eyes006", "eyes007", "eyes008", "eyes009", "eyes010", "eyes011", "eyes012", "eyes013", "eyes014", "eyes015", "eyes016", "eyes017", "eyes018", "eyes019", "eyes020", "eyes021", "eyes022", "eyes023", "eyes024", "eyes025", "eyes026", "eyes027", "eyes028", "eyes029", "eyes030", "eyes031", "eyes032", "eyes033", "eyes034", "eyes035", "eyes036", "eyes037", "eyes038", "eyes039", "eyes040", "eyes041", "eyes042", "eyes043", "eyes044", "eyes045", "eyes046", "eyes047", "eyes048", "eyes049", "eyes050", "eyes051", "eyes052", "eyes053", "eyes054", "eyes055", "eyes056", "eyes057", "eyes058", "eyes059", "eyes060", "eyes061", "eyes062", "eyes063", "eyes064", "eyes065", "eyes066", "eyes067", "eyes068", "eyes069", "eyes070", "eyes071", "eyes072", "eyes073", "eyes074", "eyes075", "eyes076", "eyes077", "eyes078", "eyes079", "eyes080", "eyes081", "eyes082", "eyes083", "eyes084", "eyes085", "eyes086", "eyes087", "eyes088", "eyes089", "eyes090", "eyes091", "eyes092", "eyes093", "eyes094", "eyes095", "eyes096", "eyes097", "eyes098", "eyes099"] } diff --git a/tests/testsuite/cargo_add/features_too_many_activated/stderr.log b/tests/testsuite/cargo_add/features_too_many_activated/stderr.log new file mode 100644 index 00000000000..af4f0fb6a76 --- /dev/null +++ b/tests/testsuite/cargo_add/features_too_many_activated/stderr.log @@ -0,0 +1,203 @@ + Updating `dummy-registry` index + Adding your-face v99999.0.0 to dependencies. + Features: + + eyes000 + + eyes001 + + eyes002 + + eyes003 + + eyes004 + + eyes005 + + eyes006 + + eyes007 + + eyes008 + + eyes009 + + eyes010 + + eyes011 + + eyes012 + + eyes013 + + eyes014 + + eyes015 + + eyes016 + + eyes017 + + eyes018 + + eyes019 + + eyes020 + + eyes021 + + eyes022 + + eyes023 + + eyes024 + + eyes025 + + eyes026 + + eyes027 + + eyes028 + + eyes029 + + eyes030 + + eyes031 + + eyes032 + + eyes033 + + eyes034 + + eyes035 + + eyes036 + + eyes037 + + eyes038 + + eyes039 + + eyes040 + + eyes041 + + eyes042 + + eyes043 + + eyes044 + + eyes045 + + eyes046 + + eyes047 + + eyes048 + + eyes049 + + eyes050 + + eyes051 + + eyes052 + + eyes053 + + eyes054 + + eyes055 + + eyes056 + + eyes057 + + eyes058 + + eyes059 + + eyes060 + + eyes061 + + eyes062 + + eyes063 + + eyes064 + + eyes065 + + eyes066 + + eyes067 + + eyes068 + + eyes069 + + eyes070 + + eyes071 + + eyes072 + + eyes073 + + eyes074 + + eyes075 + + eyes076 + + eyes077 + + eyes078 + + eyes079 + + eyes080 + + eyes081 + + eyes082 + + eyes083 + + eyes084 + + eyes085 + + eyes086 + + eyes087 + + eyes088 + + eyes089 + + eyes090 + + eyes091 + + eyes092 + + eyes093 + + eyes094 + + eyes095 + + eyes096 + + eyes097 + + eyes098 + + eyes099 + - eyes100 + - eyes101 + - eyes102 + - eyes103 + - eyes104 + - eyes105 + - eyes106 + - eyes107 + - eyes108 + - eyes109 + - eyes110 + - eyes111 + - eyes112 + - eyes113 + - eyes114 + - eyes115 + - eyes116 + - eyes117 + - eyes118 + - eyes119 + - eyes120 + - eyes121 + - eyes122 + - eyes123 + - eyes124 + - eyes125 + - eyes126 + - eyes127 + - eyes128 + - eyes129 + - eyes130 + - eyes131 + - eyes132 + - eyes133 + - eyes134 + - eyes135 + - eyes136 + - eyes137 + - eyes138 + - eyes139 + - eyes140 + - eyes141 + - eyes142 + - eyes143 + - eyes144 + - eyes145 + - eyes146 + - eyes147 + - eyes148 + - eyes149 + - eyes150 + - eyes151 + - eyes152 + - eyes153 + - eyes154 + - eyes155 + - eyes156 + - eyes157 + - eyes158 + - eyes159 + - eyes160 + - eyes161 + - eyes162 + - eyes163 + - eyes164 + - eyes165 + - eyes166 + - eyes167 + - eyes168 + - eyes169 + - eyes170 + - eyes171 + - eyes172 + - eyes173 + - eyes174 + - eyes175 + - eyes176 + - eyes177 + - eyes178 + - eyes179 + - eyes180 + - eyes181 + - eyes182 + - eyes183 + - eyes184 + - eyes185 + - eyes186 + - eyes187 + - eyes188 + - eyes189 + - eyes190 + - eyes191 + - eyes192 + - eyes193 + - eyes194 + - eyes195 + - eyes196 + - eyes197 + - eyes198 + - eyes199 diff --git a/tests/testsuite/cargo_add/features_too_many_activated/stdout.log b/tests/testsuite/cargo_add/features_too_many_activated/stdout.log new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_add/features_too_many_few_activated/in/Cargo.toml b/tests/testsuite/cargo_add/features_too_many_few_activated/in/Cargo.toml new file mode 100644 index 00000000000..3ecdb668167 --- /dev/null +++ b/tests/testsuite/cargo_add/features_too_many_few_activated/in/Cargo.toml @@ -0,0 +1,5 @@ +[workspace] + +[package] +name = "cargo-list-test-fixture" +version = "0.0.0" diff --git a/tests/testsuite/cargo_add/features_too_many_few_activated/in/src/lib.rs b/tests/testsuite/cargo_add/features_too_many_few_activated/in/src/lib.rs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_add/features_too_many_few_activated/mod.rs b/tests/testsuite/cargo_add/features_too_many_few_activated/mod.rs new file mode 100644 index 00000000000..4b7114c1690 --- /dev/null +++ b/tests/testsuite/cargo_add/features_too_many_few_activated/mod.rs @@ -0,0 +1,38 @@ +use cargo_test_support::compare::assert_ui; +use cargo_test_support::prelude::*; +use cargo_test_support::Project; +use itertools::Itertools; + +use cargo_test_support::curr_dir; + +#[cargo_test] +fn case() { + const MANY_FEATURES_COUNT: usize = 200; + const ACTIVATED_FEATURES_COUNT: usize = 10; + + cargo_test_support::registry::init(); + let mut test_package = + cargo_test_support::registry::Package::new("your-face", "99999.0.0+my-package"); + for i in 0..MANY_FEATURES_COUNT { + test_package.feature(format!("eyes{i:03}").as_str(), &[]); + } + test_package.publish(); + + let project = Project::from_template(curr_dir!().join("in")); + let project_root = project.root(); + let cwd = &project_root; + + let features = (0..ACTIVATED_FEATURES_COUNT) + .map(|i| format!("eyes{i:03}")) + .join(","); + snapbox::cmd::Command::cargo_ui() + .arg("add") + .arg_line(format!("your-face --features {features}").as_str()) + .current_dir(cwd) + .assert() + .success() + .stdout_matches_path(curr_dir!().join("stdout.log")) + .stderr_matches_path(curr_dir!().join("stderr.log")); + + assert_ui().subset_matches(curr_dir!().join("out"), &project_root); +} diff --git a/tests/testsuite/cargo_add/features_too_many_few_activated/out/Cargo.toml b/tests/testsuite/cargo_add/features_too_many_few_activated/out/Cargo.toml new file mode 100644 index 00000000000..82e0197df5a --- /dev/null +++ b/tests/testsuite/cargo_add/features_too_many_few_activated/out/Cargo.toml @@ -0,0 +1,8 @@ +[workspace] + +[package] +name = "cargo-list-test-fixture" +version = "0.0.0" + +[dependencies] +your-face = { version = "99999.0.0", features = ["eyes000", "eyes001", "eyes002", "eyes003", "eyes004", "eyes005", "eyes006", "eyes007", "eyes008", "eyes009"] } diff --git a/tests/testsuite/cargo_add/features_too_many_few_activated/stderr.log b/tests/testsuite/cargo_add/features_too_many_few_activated/stderr.log new file mode 100644 index 00000000000..2bc3c6c190b --- /dev/null +++ b/tests/testsuite/cargo_add/features_too_many_few_activated/stderr.log @@ -0,0 +1,203 @@ + Updating `dummy-registry` index + Adding your-face v99999.0.0 to dependencies. + Features: + + eyes000 + + eyes001 + + eyes002 + + eyes003 + + eyes004 + + eyes005 + + eyes006 + + eyes007 + + eyes008 + + eyes009 + - eyes010 + - eyes011 + - eyes012 + - eyes013 + - eyes014 + - eyes015 + - eyes016 + - eyes017 + - eyes018 + - eyes019 + - eyes020 + - eyes021 + - eyes022 + - eyes023 + - eyes024 + - eyes025 + - eyes026 + - eyes027 + - eyes028 + - eyes029 + - eyes030 + - eyes031 + - eyes032 + - eyes033 + - eyes034 + - eyes035 + - eyes036 + - eyes037 + - eyes038 + - eyes039 + - eyes040 + - eyes041 + - eyes042 + - eyes043 + - eyes044 + - eyes045 + - eyes046 + - eyes047 + - eyes048 + - eyes049 + - eyes050 + - eyes051 + - eyes052 + - eyes053 + - eyes054 + - eyes055 + - eyes056 + - eyes057 + - eyes058 + - eyes059 + - eyes060 + - eyes061 + - eyes062 + - eyes063 + - eyes064 + - eyes065 + - eyes066 + - eyes067 + - eyes068 + - eyes069 + - eyes070 + - eyes071 + - eyes072 + - eyes073 + - eyes074 + - eyes075 + - eyes076 + - eyes077 + - eyes078 + - eyes079 + - eyes080 + - eyes081 + - eyes082 + - eyes083 + - eyes084 + - eyes085 + - eyes086 + - eyes087 + - eyes088 + - eyes089 + - eyes090 + - eyes091 + - eyes092 + - eyes093 + - eyes094 + - eyes095 + - eyes096 + - eyes097 + - eyes098 + - eyes099 + - eyes100 + - eyes101 + - eyes102 + - eyes103 + - eyes104 + - eyes105 + - eyes106 + - eyes107 + - eyes108 + - eyes109 + - eyes110 + - eyes111 + - eyes112 + - eyes113 + - eyes114 + - eyes115 + - eyes116 + - eyes117 + - eyes118 + - eyes119 + - eyes120 + - eyes121 + - eyes122 + - eyes123 + - eyes124 + - eyes125 + - eyes126 + - eyes127 + - eyes128 + - eyes129 + - eyes130 + - eyes131 + - eyes132 + - eyes133 + - eyes134 + - eyes135 + - eyes136 + - eyes137 + - eyes138 + - eyes139 + - eyes140 + - eyes141 + - eyes142 + - eyes143 + - eyes144 + - eyes145 + - eyes146 + - eyes147 + - eyes148 + - eyes149 + - eyes150 + - eyes151 + - eyes152 + - eyes153 + - eyes154 + - eyes155 + - eyes156 + - eyes157 + - eyes158 + - eyes159 + - eyes160 + - eyes161 + - eyes162 + - eyes163 + - eyes164 + - eyes165 + - eyes166 + - eyes167 + - eyes168 + - eyes169 + - eyes170 + - eyes171 + - eyes172 + - eyes173 + - eyes174 + - eyes175 + - eyes176 + - eyes177 + - eyes178 + - eyes179 + - eyes180 + - eyes181 + - eyes182 + - eyes183 + - eyes184 + - eyes185 + - eyes186 + - eyes187 + - eyes188 + - eyes189 + - eyes190 + - eyes191 + - eyes192 + - eyes193 + - eyes194 + - eyes195 + - eyes196 + - eyes197 + - eyes198 + - eyes199 diff --git a/tests/testsuite/cargo_add/features_too_many_few_activated/stdout.log b/tests/testsuite/cargo_add/features_too_many_few_activated/stdout.log new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_add/mod.rs b/tests/testsuite/cargo_add/mod.rs index de93afbc1dd..47a595cd929 100644 --- a/tests/testsuite/cargo_add/mod.rs +++ b/tests/testsuite/cargo_add/mod.rs @@ -22,6 +22,8 @@ mod features_empty; mod features_multiple_occurrences; mod features_preserve; mod features_spaced_values; +mod features_too_many_activated; +mod features_too_many_few_activated; mod features_unknown; mod features_unknown_no_features; mod git; From 9928689d2c70c6c45d33c4d8e77f7516e7381a04 Mon Sep 17 00:00:00 2001 From: Angelo Ross Date: Tue, 12 Sep 2023 17:14:50 -0300 Subject: [PATCH 2/2] Limit features printed during cargo add --- src/cargo/ops/cargo_add/mod.rs | 29 ++++ .../features_too_many_activated/stderr.log | 152 +----------------- .../stderr.log | 151 +---------------- 3 files changed, 32 insertions(+), 300 deletions(-) diff --git a/src/cargo/ops/cargo_add/mod.rs b/src/cargo/ops/cargo_add/mod.rs index 2fbc3233864..3689ffbe328 100644 --- a/src/cargo/ops/cargo_add/mod.rs +++ b/src/cargo/ops/cargo_add/mod.rs @@ -966,16 +966,45 @@ fn print_dep_table_msg(shell: &mut Shell, dep: &DependencyUI) -> CargoResult<()> } else { "".to_owned() }; + shell.write_stderr(format_args!("{}Features{}:\n", prefix, suffix), &style::NOP)?; + + const MAX_FEATURE_PRINTS: usize = 50; + + let mut activated_printed = 0; + let total_activated = activated.len(); for feat in activated { + if activated_printed >= MAX_FEATURE_PRINTS { + let remaining = total_activated - activated_printed; + shell.write_stderr( + format_args!("{prefix}... {remaining} more activated features\n"), + &style::NOP, + )?; + break; + } + shell.write_stderr(&prefix, &style::NOP)?; shell.write_stderr('+', &style::GOOD)?; shell.write_stderr(format_args!(" {}\n", feat), &style::NOP)?; + activated_printed += 1; } + + let mut deactivated_printed = 0; + let total_deactivated = deactivated.len(); for feat in deactivated { + if activated_printed + deactivated_printed >= MAX_FEATURE_PRINTS { + let remaining = total_deactivated - deactivated_printed; + shell.write_stderr( + format_args!("{prefix}... {remaining} more deactivated features\n"), + &style::NOP, + )?; + break; + } + shell.write_stderr(&prefix, &style::NOP)?; shell.write_stderr('-', &style::ERROR)?; shell.write_stderr(format_args!(" {}\n", feat), &style::NOP)?; + deactivated_printed += 1; } } diff --git a/tests/testsuite/cargo_add/features_too_many_activated/stderr.log b/tests/testsuite/cargo_add/features_too_many_activated/stderr.log index af4f0fb6a76..05e69dbc7bc 100644 --- a/tests/testsuite/cargo_add/features_too_many_activated/stderr.log +++ b/tests/testsuite/cargo_add/features_too_many_activated/stderr.log @@ -51,153 +51,5 @@ + eyes047 + eyes048 + eyes049 - + eyes050 - + eyes051 - + eyes052 - + eyes053 - + eyes054 - + eyes055 - + eyes056 - + eyes057 - + eyes058 - + eyes059 - + eyes060 - + eyes061 - + eyes062 - + eyes063 - + eyes064 - + eyes065 - + eyes066 - + eyes067 - + eyes068 - + eyes069 - + eyes070 - + eyes071 - + eyes072 - + eyes073 - + eyes074 - + eyes075 - + eyes076 - + eyes077 - + eyes078 - + eyes079 - + eyes080 - + eyes081 - + eyes082 - + eyes083 - + eyes084 - + eyes085 - + eyes086 - + eyes087 - + eyes088 - + eyes089 - + eyes090 - + eyes091 - + eyes092 - + eyes093 - + eyes094 - + eyes095 - + eyes096 - + eyes097 - + eyes098 - + eyes099 - - eyes100 - - eyes101 - - eyes102 - - eyes103 - - eyes104 - - eyes105 - - eyes106 - - eyes107 - - eyes108 - - eyes109 - - eyes110 - - eyes111 - - eyes112 - - eyes113 - - eyes114 - - eyes115 - - eyes116 - - eyes117 - - eyes118 - - eyes119 - - eyes120 - - eyes121 - - eyes122 - - eyes123 - - eyes124 - - eyes125 - - eyes126 - - eyes127 - - eyes128 - - eyes129 - - eyes130 - - eyes131 - - eyes132 - - eyes133 - - eyes134 - - eyes135 - - eyes136 - - eyes137 - - eyes138 - - eyes139 - - eyes140 - - eyes141 - - eyes142 - - eyes143 - - eyes144 - - eyes145 - - eyes146 - - eyes147 - - eyes148 - - eyes149 - - eyes150 - - eyes151 - - eyes152 - - eyes153 - - eyes154 - - eyes155 - - eyes156 - - eyes157 - - eyes158 - - eyes159 - - eyes160 - - eyes161 - - eyes162 - - eyes163 - - eyes164 - - eyes165 - - eyes166 - - eyes167 - - eyes168 - - eyes169 - - eyes170 - - eyes171 - - eyes172 - - eyes173 - - eyes174 - - eyes175 - - eyes176 - - eyes177 - - eyes178 - - eyes179 - - eyes180 - - eyes181 - - eyes182 - - eyes183 - - eyes184 - - eyes185 - - eyes186 - - eyes187 - - eyes188 - - eyes189 - - eyes190 - - eyes191 - - eyes192 - - eyes193 - - eyes194 - - eyes195 - - eyes196 - - eyes197 - - eyes198 - - eyes199 + ... 50 more activated features + ... 100 more deactivated features diff --git a/tests/testsuite/cargo_add/features_too_many_few_activated/stderr.log b/tests/testsuite/cargo_add/features_too_many_few_activated/stderr.log index 2bc3c6c190b..c76c35caea2 100644 --- a/tests/testsuite/cargo_add/features_too_many_few_activated/stderr.log +++ b/tests/testsuite/cargo_add/features_too_many_few_activated/stderr.log @@ -51,153 +51,4 @@ - eyes047 - eyes048 - eyes049 - - eyes050 - - eyes051 - - eyes052 - - eyes053 - - eyes054 - - eyes055 - - eyes056 - - eyes057 - - eyes058 - - eyes059 - - eyes060 - - eyes061 - - eyes062 - - eyes063 - - eyes064 - - eyes065 - - eyes066 - - eyes067 - - eyes068 - - eyes069 - - eyes070 - - eyes071 - - eyes072 - - eyes073 - - eyes074 - - eyes075 - - eyes076 - - eyes077 - - eyes078 - - eyes079 - - eyes080 - - eyes081 - - eyes082 - - eyes083 - - eyes084 - - eyes085 - - eyes086 - - eyes087 - - eyes088 - - eyes089 - - eyes090 - - eyes091 - - eyes092 - - eyes093 - - eyes094 - - eyes095 - - eyes096 - - eyes097 - - eyes098 - - eyes099 - - eyes100 - - eyes101 - - eyes102 - - eyes103 - - eyes104 - - eyes105 - - eyes106 - - eyes107 - - eyes108 - - eyes109 - - eyes110 - - eyes111 - - eyes112 - - eyes113 - - eyes114 - - eyes115 - - eyes116 - - eyes117 - - eyes118 - - eyes119 - - eyes120 - - eyes121 - - eyes122 - - eyes123 - - eyes124 - - eyes125 - - eyes126 - - eyes127 - - eyes128 - - eyes129 - - eyes130 - - eyes131 - - eyes132 - - eyes133 - - eyes134 - - eyes135 - - eyes136 - - eyes137 - - eyes138 - - eyes139 - - eyes140 - - eyes141 - - eyes142 - - eyes143 - - eyes144 - - eyes145 - - eyes146 - - eyes147 - - eyes148 - - eyes149 - - eyes150 - - eyes151 - - eyes152 - - eyes153 - - eyes154 - - eyes155 - - eyes156 - - eyes157 - - eyes158 - - eyes159 - - eyes160 - - eyes161 - - eyes162 - - eyes163 - - eyes164 - - eyes165 - - eyes166 - - eyes167 - - eyes168 - - eyes169 - - eyes170 - - eyes171 - - eyes172 - - eyes173 - - eyes174 - - eyes175 - - eyes176 - - eyes177 - - eyes178 - - eyes179 - - eyes180 - - eyes181 - - eyes182 - - eyes183 - - eyes184 - - eyes185 - - eyes186 - - eyes187 - - eyes188 - - eyes189 - - eyes190 - - eyes191 - - eyes192 - - eyes193 - - eyes194 - - eyes195 - - eyes196 - - eyes197 - - eyes198 - - eyes199 + ... 150 more deactivated features