From 174772b5b8d9f5bf5e3c8e8152adfd89f0e83f6b Mon Sep 17 00:00:00 2001 From: Justin Wernick Date: Tue, 19 Apr 2022 20:22:56 +0200 Subject: Refile for merging repos --- 2016/.gitignore | 1 + 2016/aoc1/Cargo.lock | 4 + 2016/aoc1/Cargo.toml | 6 + 2016/aoc1/input.txt | 1 + 2016/aoc1/src/main.rs | 98 +++ 2016/aoc10/Cargo.lock | 98 +++ 2016/aoc10/Cargo.toml | 7 + 2016/aoc10/input.txt | 231 ++++++ 2016/aoc10/src/main.rs | 155 ++++ 2016/aoc11/Cargo.lock | 4 + 2016/aoc11/Cargo.toml | 7 + 2016/aoc11/input.txt | 4 + 2016/aoc11/src/main.rs | 166 ++++ 2016/aoc12/Cargo.lock | 98 +++ 2016/aoc12/Cargo.toml | 7 + 2016/aoc12/input.txt | 23 + 2016/aoc12/src/main.rs | 136 ++++ 2016/aoc13/Cargo.lock | 98 +++ 2016/aoc13/Cargo.toml | 7 + 2016/aoc13/src/main.rs | 64 ++ 2016/aoc14/Cargo.lock | 14 + 2016/aoc14/Cargo.toml | 7 + 2016/aoc14/src/main.rs | 84 ++ 2016/aoc15/Cargo.lock | 98 +++ 2016/aoc15/Cargo.toml | 7 + 2016/aoc15/input.txt | 7 + 2016/aoc15/src/main.rs | 35 + 2016/aoc16/Cargo.lock | 4 + 2016/aoc16/Cargo.toml | 6 + 2016/aoc16/src/main.rs | 68 ++ 2016/aoc17/Cargo.lock | 14 + 2016/aoc17/Cargo.toml | 7 + 2016/aoc17/src/main.rs | 98 +++ 2016/aoc18/Cargo.lock | 4 + 2016/aoc18/Cargo.toml | 6 + 2016/aoc18/src/main.rs | 20 + 2016/aoc19/Cargo.lock | 4 + 2016/aoc19/Cargo.toml | 6 + 2016/aoc19/src/main.rs | 42 + 2016/aoc2/Cargo.lock | 4 + 2016/aoc2/Cargo.toml | 6 + 2016/aoc2/input.txt | 5 + 2016/aoc2/src/main.rs | 61 ++ 2016/aoc20/Cargo.lock | 4 + 2016/aoc20/Cargo.toml | 6 + 2016/aoc20/input.txt | 1104 +++++++++++++++++++++++++ 2016/aoc20/src/main.rs | 114 +++ 2016/aoc21/Cargo.lock | 98 +++ 2016/aoc21/Cargo.toml | 7 + 2016/aoc21/input.txt | 100 +++ 2016/aoc21/src/main.rs | 233 ++++++ 2016/aoc22/Cargo.lock | 98 +++ 2016/aoc22/Cargo.toml | 7 + 2016/aoc22/input.txt | 1017 +++++++++++++++++++++++ 2016/aoc22/src/main.rs | 198 +++++ 2016/aoc23/Cargo.lock | 98 +++ 2016/aoc23/Cargo.toml | 7 + 2016/aoc23/input.txt | 26 + 2016/aoc23/src/main.rs | 247 ++++++ 2016/aoc24/Cargo.lock | 4 + 2016/aoc24/Cargo.toml | 6 + 2016/aoc24/input.txt | 39 + 2016/aoc24/src/main.rs | 135 ++++ 2016/aoc25/Cargo.lock | 98 +++ 2016/aoc25/Cargo.toml | 7 + 2016/aoc25/input.txt | 30 + 2016/aoc25/src/main.rs | 284 +++++++ 2016/aoc3/Cargo.lock | 4 + 2016/aoc3/Cargo.toml | 6 + 2016/aoc3/input.txt | 1734 ++++++++++++++++++++++++++++++++++++++++ 2016/aoc3/src/main.rs | 64 ++ 2016/aoc4/Cargo.lock | 4 + 2016/aoc4/Cargo.toml | 6 + 2016/aoc4/input.txt | 1091 +++++++++++++++++++++++++ 2016/aoc4/src/main.rs | 83 ++ 2016/aoc5/Cargo.lock | 12 + 2016/aoc5/Cargo.toml | 7 + 2016/aoc5/src/main.rs | 49 ++ 2016/aoc6/Cargo.lock | 4 + 2016/aoc6/Cargo.toml | 6 + 2016/aoc6/input.txt | 624 +++++++++++++++ 2016/aoc6/src/main.rs | 27 + 2016/aoc6/test_input.txt | 16 + 2016/aoc7/Cargo.lock | 4 + 2016/aoc7/Cargo.toml | 6 + 2016/aoc7/input.txt | 2000 ++++++++++++++++++++++++++++++++++++++++++++++ 2016/aoc7/src/main.rs | 95 +++ 2016/aoc7/test_input.txt | 4 + 2016/aoc8/Cargo.lock | 98 +++ 2016/aoc8/Cargo.toml | 7 + 2016/aoc8/input.txt | 194 +++++ 2016/aoc8/src/main.rs | 117 +++ 2016/aoc9/Cargo.lock | 98 +++ 2016/aoc9/Cargo.toml | 7 + 2016/aoc9/input.txt | 1 + 2016/aoc9/src/main.rs | 143 ++++ 96 files changed, 12300 insertions(+) create mode 100644 2016/.gitignore create mode 100644 2016/aoc1/Cargo.lock create mode 100644 2016/aoc1/Cargo.toml create mode 100644 2016/aoc1/input.txt create mode 100644 2016/aoc1/src/main.rs create mode 100644 2016/aoc10/Cargo.lock create mode 100644 2016/aoc10/Cargo.toml create mode 100644 2016/aoc10/input.txt create mode 100644 2016/aoc10/src/main.rs create mode 100644 2016/aoc11/Cargo.lock create mode 100644 2016/aoc11/Cargo.toml create mode 100644 2016/aoc11/input.txt create mode 100644 2016/aoc11/src/main.rs create mode 100644 2016/aoc12/Cargo.lock create mode 100644 2016/aoc12/Cargo.toml create mode 100644 2016/aoc12/input.txt create mode 100644 2016/aoc12/src/main.rs create mode 100644 2016/aoc13/Cargo.lock create mode 100644 2016/aoc13/Cargo.toml create mode 100644 2016/aoc13/src/main.rs create mode 100644 2016/aoc14/Cargo.lock create mode 100644 2016/aoc14/Cargo.toml create mode 100644 2016/aoc14/src/main.rs create mode 100644 2016/aoc15/Cargo.lock create mode 100644 2016/aoc15/Cargo.toml create mode 100644 2016/aoc15/input.txt create mode 100644 2016/aoc15/src/main.rs create mode 100644 2016/aoc16/Cargo.lock create mode 100644 2016/aoc16/Cargo.toml create mode 100644 2016/aoc16/src/main.rs create mode 100644 2016/aoc17/Cargo.lock create mode 100644 2016/aoc17/Cargo.toml create mode 100644 2016/aoc17/src/main.rs create mode 100644 2016/aoc18/Cargo.lock create mode 100644 2016/aoc18/Cargo.toml create mode 100644 2016/aoc18/src/main.rs create mode 100644 2016/aoc19/Cargo.lock create mode 100644 2016/aoc19/Cargo.toml create mode 100644 2016/aoc19/src/main.rs create mode 100644 2016/aoc2/Cargo.lock create mode 100644 2016/aoc2/Cargo.toml create mode 100644 2016/aoc2/input.txt create mode 100644 2016/aoc2/src/main.rs create mode 100644 2016/aoc20/Cargo.lock create mode 100644 2016/aoc20/Cargo.toml create mode 100644 2016/aoc20/input.txt create mode 100644 2016/aoc20/src/main.rs create mode 100644 2016/aoc21/Cargo.lock create mode 100644 2016/aoc21/Cargo.toml create mode 100644 2016/aoc21/input.txt create mode 100644 2016/aoc21/src/main.rs create mode 100644 2016/aoc22/Cargo.lock create mode 100644 2016/aoc22/Cargo.toml create mode 100644 2016/aoc22/input.txt create mode 100644 2016/aoc22/src/main.rs create mode 100644 2016/aoc23/Cargo.lock create mode 100644 2016/aoc23/Cargo.toml create mode 100644 2016/aoc23/input.txt create mode 100644 2016/aoc23/src/main.rs create mode 100644 2016/aoc24/Cargo.lock create mode 100644 2016/aoc24/Cargo.toml create mode 100644 2016/aoc24/input.txt create mode 100644 2016/aoc24/src/main.rs create mode 100644 2016/aoc25/Cargo.lock create mode 100644 2016/aoc25/Cargo.toml create mode 100644 2016/aoc25/input.txt create mode 100644 2016/aoc25/src/main.rs create mode 100644 2016/aoc3/Cargo.lock create mode 100644 2016/aoc3/Cargo.toml create mode 100644 2016/aoc3/input.txt create mode 100644 2016/aoc3/src/main.rs create mode 100644 2016/aoc4/Cargo.lock create mode 100644 2016/aoc4/Cargo.toml create mode 100644 2016/aoc4/input.txt create mode 100644 2016/aoc4/src/main.rs create mode 100644 2016/aoc5/Cargo.lock create mode 100644 2016/aoc5/Cargo.toml create mode 100644 2016/aoc5/src/main.rs create mode 100644 2016/aoc6/Cargo.lock create mode 100644 2016/aoc6/Cargo.toml create mode 100644 2016/aoc6/input.txt create mode 100644 2016/aoc6/src/main.rs create mode 100644 2016/aoc6/test_input.txt create mode 100644 2016/aoc7/Cargo.lock create mode 100644 2016/aoc7/Cargo.toml create mode 100644 2016/aoc7/input.txt create mode 100644 2016/aoc7/src/main.rs create mode 100644 2016/aoc7/test_input.txt create mode 100644 2016/aoc8/Cargo.lock create mode 100644 2016/aoc8/Cargo.toml create mode 100644 2016/aoc8/input.txt create mode 100644 2016/aoc8/src/main.rs create mode 100644 2016/aoc9/Cargo.lock create mode 100644 2016/aoc9/Cargo.toml create mode 100644 2016/aoc9/input.txt create mode 100644 2016/aoc9/src/main.rs (limited to '2016') diff --git a/2016/.gitignore b/2016/.gitignore new file mode 100644 index 0000000..9f97022 --- /dev/null +++ b/2016/.gitignore @@ -0,0 +1 @@ +target/ \ No newline at end of file diff --git a/2016/aoc1/Cargo.lock b/2016/aoc1/Cargo.lock new file mode 100644 index 0000000..b771521 --- /dev/null +++ b/2016/aoc1/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc1" +version = "0.1.0" + diff --git a/2016/aoc1/Cargo.toml b/2016/aoc1/Cargo.toml new file mode 100644 index 0000000..096aad6 --- /dev/null +++ b/2016/aoc1/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc1" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] diff --git a/2016/aoc1/input.txt b/2016/aoc1/input.txt new file mode 100644 index 0000000..456904d --- /dev/null +++ b/2016/aoc1/input.txt @@ -0,0 +1 @@ +R4, R5, L5, L5, L3, R2, R1, R1, L5, R5, R2, L1, L3, L4, R3, L1, L1, R2, R3, R3, R1, L3, L5, R3, R1, L1, R1, R2, L1, L4, L5, R4, R2, L192, R5, L2, R53, R1, L5, R73, R5, L5, R186, L3, L2, R1, R3, L3, L3, R1, L4, L2, R3, L5, R4, R3, R1, L1, R5, R2, R1, R1, R1, R3, R2, L1, R5, R1, L5, R2, L2, L4, R3, L1, R4, L5, R4, R3, L5, L3, R4, R2, L5, L5, R2, R3, R5, R4, R2, R1, L1, L5, L2, L3, L4, L5, L4, L5, L1, R3, R4, R5, R3, L5, L4, L3, L1, L4, R2, R5, R5, R4, L2, L4, R3, R1, L2, R5, L5, R1, R1, L1, L5, L5, L2, L1, R5, R2, L4, L1, R4, R3, L3, R1, R5, L1, L4, R2, L3, R5, R3, R1, L3 diff --git a/2016/aoc1/src/main.rs b/2016/aoc1/src/main.rs new file mode 100644 index 0000000..e9b4138 --- /dev/null +++ b/2016/aoc1/src/main.rs @@ -0,0 +1,98 @@ +use std::io::Read; +use std::fs::File; + +#[derive(Clone, Copy, Debug)] +enum Direction { + Up, + Left, + Down, + Right +} + +impl Direction { + fn turn_right(self) -> Direction { + match self { + Direction::Up => Direction::Right, + Direction::Right => Direction::Down, + Direction::Down => Direction::Left, + Direction::Left => Direction::Up + } + } + fn turn_left(self) -> Direction { + //not an ambiturner + self.turn_right().turn_right().turn_right() + } + + fn as_vector(self, dist: i32) -> (i32,i32) { + match self { + Direction::Up => (0, -dist), + Direction::Right => (dist, 0), + Direction::Down => (0, dist), + Direction::Left => (-dist, 0) + } + } +} + +fn main() { + let content = read_file().expect("Failed to read file"); + let (_, dist_x, dist_y) = first_repeated_dest(content); + println!("Total: ({}, {})", dist_x, dist_y); + println!("Net: {}", dist_x+dist_y); +} + +fn net_distance(content: String) -> (Direction, i32, i32) { + content.trim().split(", ") + .map(|action| + ( + action.chars().nth(0).unwrap(), + action.chars().skip(1).collect::().parse::().unwrap() + )) + .fold((Direction::Up, 0,0), |(facing, acc_x, acc_y), (dir, dist)| { + let new_facing = match dir { + 'R' => facing.turn_right(), + 'L' => facing.turn_left(), + _ => panic!("bad input") + }; + + let (new_x, new_y) = new_facing.as_vector(dist); + (new_facing, acc_x+new_x, acc_y+new_y) + }) +} + +fn first_repeated_dest(content: String) -> (Direction, i32, i32) { + let mut stops: Vec<(i32, i32)> = Vec::new(); + let actions = content.trim().split(", ") + .map(|action| + ( + action.chars().nth(0).unwrap(), + action.chars().skip(1).collect::().parse::().unwrap() + )); + let mut current_facing = Direction::Up; + let (mut acc_x, mut acc_y) = (0, 0); + for (dir, dist) in actions { + current_facing = match dir { + 'R' => current_facing.turn_right(), + 'L' => current_facing.turn_left(), + _ => panic!("bad input") + }; + + for _ in 0..dist { + let (new_x, new_y) = current_facing.as_vector(1); + acc_x += new_x; + acc_y += new_y; + + if stops.iter().any(|&(x, y)| x==acc_x && y==acc_y) { + return (current_facing, acc_x, acc_y); + } + stops.push((acc_x, acc_y)); + } + } + (current_facing, acc_x, acc_y) +} + +fn read_file() -> Result { + let mut file = try!(File::open("input.txt").map_err(|e| e.to_string())); + let mut content = String::new(); + try!(file.read_to_string(&mut content).map_err(|e| e.to_string())); + Ok(content) +} diff --git a/2016/aoc10/Cargo.lock b/2016/aoc10/Cargo.lock new file mode 100644 index 0000000..f8f7189 --- /dev/null +++ b/2016/aoc10/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc10" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc10/Cargo.toml b/2016/aoc10/Cargo.toml new file mode 100644 index 0000000..d6abdaf --- /dev/null +++ b/2016/aoc10/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc10" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] +regex = "0.1" \ No newline at end of file diff --git a/2016/aoc10/input.txt b/2016/aoc10/input.txt new file mode 100644 index 0000000..aeda3b5 --- /dev/null +++ b/2016/aoc10/input.txt @@ -0,0 +1,231 @@ +bot 59 gives low to bot 176 and high to bot 120 +bot 92 gives low to bot 42 and high to bot 187 +value 31 goes to bot 114 +bot 182 gives low to bot 49 and high to bot 176 +bot 17 gives low to bot 181 and high to bot 162 +bot 36 gives low to bot 118 and high to bot 121 +bot 118 gives low to bot 164 and high to bot 55 +bot 172 gives low to bot 79 and high to bot 123 +bot 51 gives low to bot 60 and high to bot 31 +bot 48 gives low to bot 107 and high to bot 58 +bot 142 gives low to output 6 and high to bot 35 +bot 133 gives low to output 4 and high to bot 47 +bot 134 gives low to bot 122 and high to bot 66 +bot 106 gives low to bot 155 and high to bot 99 +bot 77 gives low to bot 93 and high to bot 84 +bot 9 gives low to bot 173 and high to bot 197 +bot 64 gives low to bot 123 and high to bot 48 +bot 177 gives low to bot 21 and high to bot 132 +bot 94 gives low to bot 6 and high to bot 25 +bot 126 gives low to bot 193 and high to bot 56 +bot 74 gives low to bot 187 and high to bot 125 +bot 80 gives low to bot 41 and high to bot 191 +bot 62 gives low to bot 157 and high to bot 138 +bot 66 gives low to bot 1 and high to bot 209 +bot 90 gives low to bot 104 and high to bot 34 +bot 68 gives low to bot 23 and high to bot 87 +bot 121 gives low to bot 55 and high to bot 126 +bot 122 gives low to bot 137 and high to bot 1 +bot 209 gives low to bot 168 and high to bot 26 +bot 141 gives low to bot 170 and high to bot 6 +bot 149 gives low to bot 62 and high to bot 13 +bot 120 gives low to bot 179 and high to bot 71 +bot 160 gives low to bot 194 and high to bot 151 +bot 86 gives low to bot 96 and high to bot 106 +value 13 goes to bot 9 +bot 180 gives low to bot 189 and high to bot 27 +value 67 goes to bot 88 +bot 169 gives low to bot 99 and high to bot 159 +bot 56 gives low to bot 98 and high to bot 147 +bot 197 gives low to bot 174 and high to bot 81 +bot 57 gives low to bot 113 and high to bot 179 +bot 39 gives low to bot 115 and high to bot 3 +bot 79 gives low to bot 22 and high to bot 40 +bot 161 gives low to output 14 and high to bot 185 +bot 21 gives low to bot 114 and high to bot 119 +bot 136 gives low to bot 28 and high to bot 158 +bot 105 gives low to bot 89 and high to bot 19 +bot 168 gives low to bot 126 and high to bot 26 +bot 193 gives low to bot 64 and high to bot 98 +bot 186 gives low to bot 86 and high to bot 178 +value 11 goes to bot 165 +bot 33 gives low to bot 116 and high to bot 150 +bot 32 gives low to bot 154 and high to bot 206 +bot 166 gives low to bot 33 and high to bot 139 +value 7 goes to bot 63 +bot 203 gives low to bot 172 and high to bot 64 +bot 200 gives low to bot 94 and high to bot 25 +value 43 goes to bot 76 +bot 145 gives low to bot 103 and high to bot 128 +bot 119 gives low to bot 186 and high to bot 97 +bot 12 gives low to bot 31 and high to bot 4 +bot 23 gives low to bot 198 and high to bot 171 +bot 34 gives low to bot 10 and high to bot 20 +bot 198 gives low to bot 43 and high to bot 17 +bot 50 gives low to output 1 and high to bot 127 +bot 155 gives low to bot 191 and high to bot 32 +bot 206 gives low to bot 12 and high to bot 43 +bot 96 gives low to bot 80 and high to bot 155 +bot 93 gives low to bot 44 and high to bot 70 +bot 24 gives low to bot 85 and high to bot 83 +bot 30 gives low to bot 159 and high to bot 68 +bot 55 gives low to bot 203 and high to bot 193 +bot 199 gives low to bot 68 and high to bot 135 +bot 170 gives low to bot 97 and high to bot 5 +bot 65 gives low to bot 152 and high to bot 194 +bot 43 gives low to bot 4 and high to bot 181 +bot 113 gives low to output 9 and high to bot 161 +bot 81 gives low to bot 141 and high to bot 94 +value 29 goes to bot 7 +bot 46 gives low to bot 175 and high to bot 195 +value 47 goes to bot 21 +value 23 goes to bot 42 +bot 13 gives low to bot 138 and high to bot 61 +bot 135 gives low to bot 87 and high to bot 111 +bot 194 gives low to bot 190 and high to bot 82 +value 73 goes to bot 109 +bot 154 gives low to bot 51 and high to bot 12 +bot 1 gives low to bot 18 and high to bot 209 +bot 98 gives low to bot 48 and high to bot 45 +bot 147 gives low to bot 45 and high to bot 95 +bot 47 gives low to output 19 and high to bot 152 +bot 26 gives low to bot 56 and high to bot 147 +bot 179 gives low to bot 161 and high to bot 71 +bot 148 gives low to bot 204 and high to bot 137 +bot 5 gives low to bot 67 and high to bot 85 +bot 174 gives low to bot 132 and high to bot 141 +bot 8 gives low to bot 13 and high to bot 75 +bot 82 gives low to bot 146 and high to bot 22 +bot 123 gives low to bot 40 and high to bot 107 +bot 99 gives low to bot 32 and high to bot 201 +bot 41 gives low to bot 196 and high to bot 192 +bot 139 gives low to bot 150 and high to bot 153 +bot 11 gives low to output 16 and high to bot 113 +bot 72 gives low to bot 65 and high to bot 160 +bot 195 gives low to bot 133 and high to bot 183 +bot 54 gives low to output 12 and high to output 10 +bot 158 gives low to bot 102 and high to bot 110 +bot 112 gives low to bot 19 and high to bot 118 +bot 31 gives low to bot 208 and high to bot 143 +bot 167 gives low to bot 7 and high to bot 96 +bot 63 gives low to bot 92 and high to bot 74 +bot 116 gives low to bot 20 and high to bot 131 +bot 184 gives low to bot 39 and high to bot 3 +bot 162 gives low to bot 205 and high to bot 39 +bot 108 gives low to output 11 and high to bot 175 +value 53 goes to bot 207 +bot 111 gives low to bot 202 and high to bot 184 +bot 25 gives low to bot 24 and high to bot 83 +value 71 goes to bot 77 +bot 69 gives low to bot 142 and high to bot 0 +bot 146 gives low to output 13 and high to bot 53 +bot 7 gives low to bot 76 and high to bot 80 +bot 131 gives low to bot 73 and high to bot 204 +bot 102 gives low to bot 195 and high to bot 117 +bot 76 gives low to bot 165 and high to bot 41 +bot 153 gives low to bot 148 and high to bot 122 +bot 208 gives low to bot 90 and high to bot 163 +bot 70 gives low to bot 144 and high to bot 78 +bot 125 gives low to bot 8 and high to bot 156 +bot 83 gives low to bot 199 and high to bot 135 +bot 75 gives low to bot 61 and high to bot 104 +bot 67 gives low to bot 169 and high to bot 30 +bot 14 gives low to bot 81 and high to bot 200 +bot 159 gives low to bot 201 and high to bot 23 +value 3 goes to bot 93 +bot 110 gives low to bot 117 and high to bot 89 +bot 128 gives low to bot 129 and high to bot 182 +bot 87 gives low to bot 171 and high to bot 111 +bot 45 gives low to bot 58 and high to bot 95 +bot 4 gives low to bot 143 and high to bot 166 +bot 60 gives low to bot 156 and high to bot 208 +bot 27 gives low to bot 108 and high to bot 46 +bot 42 gives low to bot 207 and high to bot 149 +bot 117 gives low to bot 183 and high to bot 72 +bot 115 gives low to bot 153 and high to bot 134 +bot 140 gives low to bot 125 and high to bot 60 +bot 173 gives low to bot 177 and high to bot 174 +bot 138 gives low to bot 180 and high to bot 52 +bot 100 gives low to bot 38 and high to bot 59 +value 41 goes to bot 173 +value 59 goes to bot 177 +bot 165 gives low to bot 63 and high to bot 196 +bot 84 gives low to bot 70 and high to bot 78 +bot 2 gives low to bot 160 and high to bot 91 +value 61 goes to bot 29 +bot 114 gives low to bot 109 and high to bot 186 +bot 205 gives low to bot 139 and high to bot 115 +bot 175 gives low to output 17 and high to bot 133 +bot 176 gives low to bot 57 and high to bot 120 +bot 107 gives low to bot 124 and high to bot 15 +bot 52 gives low to bot 27 and high to bot 28 +bot 103 gives low to bot 50 and high to bot 129 +bot 150 gives low to bot 131 and high to bot 148 +bot 16 gives low to output 20 and high to bot 189 +bot 190 gives low to output 18 and high to bot 146 +bot 157 gives low to bot 16 and high to bot 180 +bot 10 gives low to bot 158 and high to bot 130 +bot 202 gives low to bot 162 and high to bot 184 +bot 88 gives low to bot 77 and high to bot 84 +bot 188 gives low to bot 128 and high to bot 38 +bot 58 gives low to bot 15 and high to bot 101 +bot 171 gives low to bot 17 and high to bot 202 +bot 97 gives low to bot 178 and high to bot 67 +bot 163 gives low to bot 34 and high to bot 116 +bot 124 gives low to bot 0 and high to bot 145 +bot 71 gives low to bot 185 and high to bot 54 +bot 78 gives low to bot 14 and high to bot 200 +bot 101 gives low to bot 188 and high to bot 100 +bot 189 gives low to output 7 and high to bot 108 +bot 95 gives low to bot 101 and high to bot 100 +bot 0 gives low to bot 35 and high to bot 103 +bot 207 gives low to bot 37 and high to bot 62 +bot 49 gives low to bot 11 and high to bot 57 +bot 85 gives low to bot 30 and high to bot 199 +bot 89 gives low to bot 72 and high to bot 2 +bot 3 gives low to bot 134 and high to bot 66 +bot 181 gives low to bot 166 and high to bot 205 +bot 91 gives low to bot 151 and high to bot 172 +value 17 goes to bot 167 +bot 20 gives low to bot 130 and high to bot 73 +bot 196 gives low to bot 74 and high to bot 140 +bot 18 gives low to bot 121 and high to bot 168 +bot 185 gives low to output 15 and high to bot 54 +bot 178 gives low to bot 106 and high to bot 169 +bot 129 gives low to bot 127 and high to bot 49 +bot 19 gives low to bot 2 and high to bot 164 +bot 15 gives low to bot 145 and high to bot 188 +bot 144 gives low to bot 197 and high to bot 14 +bot 201 gives low to bot 206 and high to bot 198 +bot 164 gives low to bot 91 and high to bot 203 +bot 73 gives low to bot 105 and high to bot 112 +bot 191 gives low to bot 192 and high to bot 154 +bot 109 gives low to bot 167 and high to bot 86 +bot 151 gives low to bot 82 and high to bot 79 +bot 53 gives low to output 2 and high to bot 142 +bot 37 gives low to bot 29 and high to bot 157 +value 2 goes to bot 44 +bot 204 gives low to bot 112 and high to bot 36 +bot 40 gives low to bot 69 and high to bot 124 +bot 22 gives low to bot 53 and high to bot 69 +bot 104 gives low to bot 136 and high to bot 10 +value 19 goes to bot 88 +bot 127 gives low to output 5 and high to bot 11 +bot 183 gives low to bot 47 and high to bot 65 +bot 192 gives low to bot 140 and high to bot 51 +bot 38 gives low to bot 182 and high to bot 59 +bot 61 gives low to bot 52 and high to bot 136 +bot 156 gives low to bot 75 and high to bot 90 +value 37 goes to bot 37 +bot 28 gives low to bot 46 and high to bot 102 +bot 187 gives low to bot 149 and high to bot 8 +bot 132 gives low to bot 119 and high to bot 170 +bot 44 gives low to bot 9 and high to bot 144 +bot 29 gives low to output 0 and high to bot 16 +bot 6 gives low to bot 5 and high to bot 24 +bot 137 gives low to bot 36 and high to bot 18 +bot 130 gives low to bot 110 and high to bot 105 +value 5 goes to bot 92 +bot 35 gives low to output 3 and high to bot 50 +bot 152 gives low to output 8 and high to bot 190 +bot 143 gives low to bot 163 and high to bot 33 diff --git a/2016/aoc10/src/main.rs b/2016/aoc10/src/main.rs new file mode 100644 index 0000000..c2c18be --- /dev/null +++ b/2016/aoc10/src/main.rs @@ -0,0 +1,155 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::cmp; + +#[derive(Debug, Clone)] +struct Bot { + low: Option, + high: Option, + low_dest: Option, + high_dest: Option +} + +#[derive(Debug, Clone)] +enum Dest { + Bot(usize), + Output(usize) +} + +impl Bot { + fn new() -> Bot { + Bot {low: None, high: None, low_dest: None, high_dest: None} + } + + fn add_input(&mut self, input: i32) { + if self.low.is_none() { + self.low = Some(input); + } + else { + let other = self.low.unwrap(); //already handled none case + self.low = Some(cmp::min(input,other)); + self.high = Some(cmp::max(input,other)); + } + } + fn ready(&self) -> bool { + self.low.is_some() && self.high.is_some() && + self.low_dest.is_some() && self.high_dest.is_some() + } + fn clear(&mut self) { + self.low = None; + self.high = None; + } +} + + +fn main() { + let mut bots = build_bots_graph(); + let outputs = find_outputs(&mut bots); + println!("Outputs {:?}", outputs); +} + +fn find_outputs(bots: &mut Vec) -> Vec { + let mut output = Vec::new(); + + let mut is_stable = false; + while !is_stable { + is_stable = true; + + for i in 0..bots.len() { + if bots[i].ready() { + is_stable = false; + + let low = bots[i].low.unwrap(); + let high = bots[i].high.unwrap(); + bots[i].clear(); + + match bots[i].low_dest { + Some(Dest::Bot(j)) => { + bots[j].add_input(low); + }, + Some(Dest::Output(j)) => { + check_add_output(&mut output, j); + output[j] = low; + }, + _ => {} + }; + match bots[i].high_dest { + Some(Dest::Bot(j)) => { + bots[j].add_input(high); + }, + Some(Dest::Output(j)) => { + check_add_output(&mut output, j); + output[j] = high; + }, + _ => {} + }; + } + } + } + + output +} + +fn build_bots_graph() -> Vec { + let lines = read_file(); + let mut bots = Vec::new(); + + let value_regex = Regex::new(r"^value (\d+) goes to bot (\d+)$").unwrap(); + let give_regex = Regex::new(r"^bot (\d+) gives low to (output|bot) (\d+) and high to (output|bot) (\d+)$").unwrap(); + + for line in lines { + if value_regex.is_match(line.as_ref()) { + let cap = value_regex.captures(line.as_ref()).unwrap(); + let value = cap.at(1).unwrap().parse().unwrap(); + let bot_index = cap.at(2).unwrap().parse().unwrap(); + check_add_bot(&mut bots, bot_index); + bots[bot_index].add_input(value); + } + else if give_regex.is_match(line.as_ref()) { + let cap = give_regex.captures(line.as_ref()).unwrap(); + let give_bot_index = cap.at(1).unwrap().parse().unwrap(); + let low_is_to_output = cap.at(2).unwrap() == "output"; + let low_dest = cap.at(3).unwrap().parse().unwrap(); + let high_is_to_output = cap.at(4).unwrap() == "output"; + let high_dest = cap.at(5).unwrap().parse().unwrap(); + + check_add_bot(&mut bots, give_bot_index); + bots[give_bot_index].low_dest = if low_is_to_output { + Some(Dest::Output(low_dest)) + } else { + Some(Dest::Bot(low_dest)) + }; + bots[give_bot_index].high_dest = if high_is_to_output { + Some(Dest::Output(high_dest)) + } else { + Some(Dest::Bot(high_dest)) + }; + } + } + + bots +} + +fn check_add_bot(bots: &mut Vec, index: usize) { + while index >= bots.len() { + bots.push(Bot::new()); + } +} + +fn check_add_output(outputs: &mut Vec, index: usize) { + while index >= outputs.len() { + outputs.push(0); + } +} + +fn read_file() -> Vec { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} diff --git a/2016/aoc11/Cargo.lock b/2016/aoc11/Cargo.lock new file mode 100644 index 0000000..b423029 --- /dev/null +++ b/2016/aoc11/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc11" +version = "0.1.0" + diff --git a/2016/aoc11/Cargo.toml b/2016/aoc11/Cargo.toml new file mode 100644 index 0000000..e0b3f68 --- /dev/null +++ b/2016/aoc11/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc11" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] + diff --git a/2016/aoc11/input.txt b/2016/aoc11/input.txt new file mode 100644 index 0000000..d453804 --- /dev/null +++ b/2016/aoc11/input.txt @@ -0,0 +1,4 @@ +The first floor contains a strontium generator, a strontium-compatible microchip, a plutonium generator, and a plutonium-compatible microchip. +The second floor contains a thulium generator, a ruthenium generator, a ruthenium-compatible microchip, a curium generator, and a curium-compatible microchip. +The third floor contains a thulium-compatible microchip. +The fourth floor contains nothing relevant. diff --git a/2016/aoc11/src/main.rs b/2016/aoc11/src/main.rs new file mode 100644 index 0000000..39a6e2f --- /dev/null +++ b/2016/aoc11/src/main.rs @@ -0,0 +1,166 @@ + +use std::collections::HashMap; + +//const MICROS: usize = 2; //example +const MICROS: usize = 7; + +#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] +struct State { + microchips: [[bool; MICROS]; 4], + generators: [[bool; MICROS]; 4], + elevator: usize +} + +impl State { + fn is_final(&self) -> bool { + let floor = 3; + + for i in 0..MICROS { + if !self.microchips[floor][i] || !self.generators[floor][i] { + return false; + } + } + true + } + + fn is_safe(&self) -> bool { + for floor in 0..4 { + for i in 0..MICROS { + for j in 0..MICROS { + //need to be on same floor, if any other micro is there + if self.generators[floor][j] && !self.generators[floor][i] && self.microchips[floor][i] { + return false; + } + } + } + } + true + } + + fn valid_moves(&self) -> Vec { + let mut moves = Vec::new(); + + let mut new_floors = Vec::new(); + if self.elevator > 0 { + new_floors.push(self.elevator-1); + } + if self.elevator < 3 { + new_floors.push(self.elevator+1); + } + for &new_floor in new_floors.iter() { + + //items to take can be: one micro, one generator, two micros, two generator, one of each + + //one micro + for i in 0..MICROS { + if self.microchips[self.elevator][i] { + moves.push(self.move_micro(i, self.elevator, new_floor)); + } + } + //one generator + for i in 0..MICROS { + if self.generators[self.elevator][i] { + moves.push(self.move_generator(i, self.elevator, new_floor)); + } + } + //two micros + for i in 0..MICROS { + for j in i+1..MICROS { + if self.microchips[self.elevator][i] && self.microchips[self.elevator][j] { + moves.push(self.move_micro(i, self.elevator, new_floor).move_micro(j, self.elevator, new_floor)); + } + } + } + //two generators + for i in 0..MICROS { + for j in i+1..MICROS { + if self.generators[self.elevator][i] && self.generators[self.elevator][j] { + moves.push(self.move_generator(i, self.elevator, new_floor).move_generator(j, self.elevator, new_floor)); + } + } + } + //one of each + for i in 0..MICROS { + for j in 0..MICROS { + if self.microchips[self.elevator][i] && self.generators[self.elevator][j] { + moves.push(self.move_micro(i, self.elevator, new_floor).move_generator(j, self.elevator, new_floor)); + } + } + } + } + + moves.iter().filter(|x| x.is_safe()).cloned().collect() + } + + fn move_micro(&self, micro: usize, floor: usize, new_floor: usize) -> State { + let mut new_state = self.clone(); + new_state.microchips[floor][micro] = false; + new_state.microchips[new_floor][micro] = true; + new_state.elevator = new_floor; + new_state + } + fn move_generator(&self, gen: usize, floor: usize, new_floor: usize) -> State { + let mut new_state = self.clone(); + new_state.generators[floor][gen] = false; + new_state.generators[new_floor][gen] = true; + new_state.elevator = new_floor; + new_state + } +} + +fn main() { + //Stronium, plutonium, thulium, ruthenium, curium, electrium, dilithium + let initial = State { + microchips: + [[true, true, false, false, false, true, true], + [false, false, false, true, true, false, false], + [false, false, true, false, false, false, false], + [false, false, false, false, false, false, false]], + generators: + [[true, true, false, false, false, true, true], + [false, false, true, true, true, false, false], + [false, false, false, false, false, false, false], + [false, false, false, false, false, false, false]], + elevator: 0 + }; + + /* + //example + let initial = State { + microchips: + [[true, true], + [false, false], + [false, false], + [false, false]], + generators: + [[false, false], + [true, false], + [false, true], + [false, false]], + elevator: 0 + }; + */ + + let mut states: HashMap = HashMap::new(); + states.insert(initial, 0); + + let mut moves = 0; + loop { + if states.iter().any(|(state, _)| state.is_final()) { + break; + } + + let new_states: Vec = states.iter().filter(|&(_, &x)| x == moves).flat_map(|(state, _)| state.valid_moves()).collect(); + + moves += 1; + + for state in new_states { + if !states.contains_key(&state) { + states.insert(state, moves); + } + } + } + + + println!("Moves required: {}", moves); +} diff --git a/2016/aoc12/Cargo.lock b/2016/aoc12/Cargo.lock new file mode 100644 index 0000000..24237f4 --- /dev/null +++ b/2016/aoc12/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc12" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc12/Cargo.toml b/2016/aoc12/Cargo.toml new file mode 100644 index 0000000..f224921 --- /dev/null +++ b/2016/aoc12/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc12" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] +regex = "0.1" \ No newline at end of file diff --git a/2016/aoc12/input.txt b/2016/aoc12/input.txt new file mode 100644 index 0000000..bb2a2ff --- /dev/null +++ b/2016/aoc12/input.txt @@ -0,0 +1,23 @@ +cpy 1 a +cpy 1 b +cpy 26 d +jnz c 2 +jnz 1 5 +cpy 7 c +inc d +dec c +jnz c -2 +cpy a c +inc a +dec b +jnz b -2 +cpy c b +dec d +jnz d -6 +cpy 17 c +cpy 18 d +inc a +dec d +jnz d -2 +dec c +jnz c -5 diff --git a/2016/aoc12/src/main.rs b/2016/aoc12/src/main.rs new file mode 100644 index 0000000..2356402 --- /dev/null +++ b/2016/aoc12/src/main.rs @@ -0,0 +1,136 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +enum Instruction { + CpyLit(i32, usize), + CpyReg(usize, usize), + Inc(usize), + Dec(usize), + Jnz(usize, i32), + Jmp(i32), + Noop +} + +impl Instruction { + fn parse(line: &str) -> Instruction { + let cpy_lit: Regex = Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap(); + let cpy_reg = Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap(); + let inc = Regex::new(r"inc (a|b|c|d)").unwrap(); + let dec = Regex::new(r"dec (a|b|c|d)").unwrap(); + let jnz_lit = Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap(); + let jnz_reg = Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap(); + + let cpy_lit_match = cpy_lit.captures(line); + let cpy_reg_match = cpy_reg.captures(line); + let inc_match = inc.captures(line); + let dec_match = dec.captures(line); + let jnz_lit_match = jnz_lit.captures(line); + let jnz_reg_match = jnz_reg.captures(line); + + if cpy_lit_match.is_some() { + let cap = cpy_lit_match.unwrap(); + let src: i32 = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + Instruction::CpyLit(src, dest) + } + else if cpy_reg_match.is_some() { + let cap = cpy_reg_match.unwrap(); + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + Instruction::CpyReg(src, dest) + } + else if inc_match.is_some() { + let cap = inc_match.unwrap(); + let dest = to_register_index(cap.at(1).unwrap()); + Instruction::Inc(dest) + } + else if dec_match.is_some() { + let cap = dec_match.unwrap(); + let dest = to_register_index(cap.at(1).unwrap()); + Instruction::Dec(dest) + } + else if jnz_lit_match.is_some() { + let cap = jnz_lit_match.unwrap(); + let condition: i32 = cap.at(1).unwrap().parse().unwrap(); + let offset: i32 = cap.at(2).unwrap().parse().unwrap(); + if condition != 0 { + Instruction::Jmp(offset) + } + else { + Instruction::Noop + } + } + else if jnz_reg_match.is_some() { + let cap = jnz_reg_match.unwrap(); + let condition = to_register_index(cap.at(1).unwrap()); + let offset: i32 = cap.at(2).unwrap().parse().unwrap(); + Instruction::Jnz(condition, offset) + } + else { + panic!("Invalid instruction line") + } + } +} + +fn main() { + let program = read_file(); + + let mut registers: [i32; 4] = [0, 0, 1, 0]; + let mut pc: usize = 0; + + while pc < program.len() { + let mut pc_next: usize = pc+1; + + match program[pc] { + Instruction::CpyLit(src, dest) => { + registers[dest] = src; + }, + Instruction::CpyReg(src, dest) => { + registers[dest] = registers[src]; + }, + Instruction::Inc(dest) => { + registers[dest] += 1; + }, + Instruction::Dec(dest) => { + registers[dest] -= 1; + }, + Instruction::Jnz(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::Jmp(offset) => { + pc_next = (pc as i32 + offset) as usize + }, + Instruction::Noop => {} + } + + pc = pc_next; + } + + println!("a: {}, b: {}, c: {}, d: {}", registers[0], registers[1], registers[2], registers[3]); + +} + +fn to_register_index(name: &str) -> usize { + match name { + "a" => 0, + "b" => 1, + "c" => 2, + "d" => 3, + _ => panic!("Invalid register provided") + } +} + +fn read_file() -> Vec { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap()) + .filter(|line| line.len() > 0) + .map(|line| Instruction::parse(line.trim())) + .collect() +} diff --git a/2016/aoc13/Cargo.lock b/2016/aoc13/Cargo.lock new file mode 100644 index 0000000..d60f2c7 --- /dev/null +++ b/2016/aoc13/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc13" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc13/Cargo.toml b/2016/aoc13/Cargo.toml new file mode 100644 index 0000000..347a1a4 --- /dev/null +++ b/2016/aoc13/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc13" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] +regex = "0.1" \ No newline at end of file diff --git a/2016/aoc13/src/main.rs b/2016/aoc13/src/main.rs new file mode 100644 index 0000000..2c0e70e --- /dev/null +++ b/2016/aoc13/src/main.rs @@ -0,0 +1,64 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::HashMap; + +fn main() { + //let target = (7, 4); + let target = (31,39); + + let mut states: HashMap<(i32, i32), u32> = HashMap::new(); + states.insert((1, 1), 0); + let mut moves = 0; + while moves < 50 { +/* if states.iter().any(|(&state, _)| state == target) { + break; + } +*/ + let new_states: Vec<(i32, i32)> = states.iter().filter(|&(_, &x)| x == moves).flat_map(|(state, _)| available_steps(state)).collect(); + + moves += 1; + + for state in new_states { + if !states.contains_key(&state) { + states.insert(state, moves); + } + } + } + + println!("Moves required: {}", moves); + println!("Possible destinations: {}", states.iter().count()); +} + + +fn available_steps(current: &(i32, i32)) -> Vec<(i32, i32)> { + let &(x0, y0) = current; + let mut results = Vec::new(); + for &(x, y) in [(x0-1, y0), (x0+1, y0), (x0, y0-1), (x0, y0+1)].iter() { + if x >= 0 && y >= 0 && !is_wall(x, y) { + results.push((x, y)); + } + } + results +} + +fn print_map() { + for y in 0..10 { + for x in 0..10 { + print!("{}", if is_wall(x, y) {'#'} else {'.'}); + } + println!(""); + } +} + +fn is_wall(x: i32, y: i32) -> bool { +// let favourite_number = 10; + let favourite_number = 1352; + let funny_num = x*x + 3*x + 2*x*y + y + y*y + favourite_number; + let bin = format!("{:b}", funny_num); + let number_of_ones = bin.chars().filter(|&c| c == '1').count(); + number_of_ones % 2 == 1 +} diff --git a/2016/aoc14/Cargo.lock b/2016/aoc14/Cargo.lock new file mode 100644 index 0000000..a889c91 --- /dev/null +++ b/2016/aoc14/Cargo.lock @@ -0,0 +1,14 @@ +[root] +name = "aoc14" +version = "0.1.0" +dependencies = [ + "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "md5" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7df230903ccdffd6b3b4ec21624498ea64c912ce50297846907f0b8e1bb249dd" diff --git a/2016/aoc14/Cargo.toml b/2016/aoc14/Cargo.toml new file mode 100644 index 0000000..eb3f92d --- /dev/null +++ b/2016/aoc14/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc14" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] +md5 = "^0.2" \ No newline at end of file diff --git a/2016/aoc14/src/main.rs b/2016/aoc14/src/main.rs new file mode 100644 index 0000000..d9410ce --- /dev/null +++ b/2016/aoc14/src/main.rs @@ -0,0 +1,84 @@ +extern crate md5; + +use std::collections::HashMap; + +fn main() { +// let input = "abc"; + let input = "yjdafjpo"; + let mut index = 0; + let mut results_found = 0; + + let mut hash_memo = HashMap::new(); + while results_found < 64 { + let hash = stretched_hash(format!("{}{}", input, index), &mut hash_memo); + + let threes = find_concurrent_symbols(&hash, 3, true); + if threes.len() > 0 { +// println!("Found three at {} -> {}", index, hash); + for i in 1..1001 { + let hash = stretched_hash(format!("{}{}", input, index+i), &mut hash_memo); + let fives = find_concurrent_symbols(&hash, 5, false); + if fives.iter().any(|c| threes.contains(c)) { + results_found += 1; +// println!("Five found at {} -> {}", index+i, hash); + println!("Found hash {} at index {}", results_found, index); + break; + } + } + } + index += 1; + } + +} + +fn find_concurrent_symbols(hash: &String, count: u8, exit_early: bool) -> Vec { + let mut last_symbol = None; + let mut last_symbol_run = 0; + let mut matches = Vec::new(); + for c in hash.chars() { + let symbol_matches = match last_symbol { + Some(s) => s == c, + None => false + }; + + if symbol_matches { + last_symbol_run += 1; + if last_symbol_run >= count && !matches.contains(&c) { + matches.push(c); + if exit_early { + break; + } + } + } else { + last_symbol = Some(c); + last_symbol_run = 1; + } + } + + matches +} + +fn hash_to_string(hash: &[u8; 16]) -> String { + let mut result = String::with_capacity(32); + + for &byte in hash.iter() { + result.push_str(format!("{:02x}", byte).as_ref()); + } + result +} + +fn stretched_hash(input: String, memo: &mut HashMap) -> String { + memo.entry(input.clone()).or_insert_with(|| { + let mut result = input; + for _ in 0..2017 { + result = string_hash(result); + } + result + }).clone() +} + +fn string_hash(input: String) -> String { + let bytes_to_hash = input.into_bytes(); + let hash = md5::compute(bytes_to_hash.as_slice()); + hash_to_string(&hash) +} diff --git a/2016/aoc15/Cargo.lock b/2016/aoc15/Cargo.lock new file mode 100644 index 0000000..38f1d9c --- /dev/null +++ b/2016/aoc15/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc15" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc15/Cargo.toml b/2016/aoc15/Cargo.toml new file mode 100644 index 0000000..eb75c1d --- /dev/null +++ b/2016/aoc15/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc15" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] +regex = "0.1" \ No newline at end of file diff --git a/2016/aoc15/input.txt b/2016/aoc15/input.txt new file mode 100644 index 0000000..c4cf544 --- /dev/null +++ b/2016/aoc15/input.txt @@ -0,0 +1,7 @@ +Disc #1 has 17 positions; at time=0, it is at position 5. +Disc #2 has 19 positions; at time=0, it is at position 8. +Disc #3 has 7 positions; at time=0, it is at position 1. +Disc #4 has 13 positions; at time=0, it is at position 7. +Disc #5 has 5 positions; at time=0, it is at position 1. +Disc #6 has 3 positions; at time=0, it is at position 0. +Disc #7 has 11 positions; at time=0, it is at position 0. diff --git a/2016/aoc15/src/main.rs b/2016/aoc15/src/main.rs new file mode 100644 index 0000000..a7f0f64 --- /dev/null +++ b/2016/aoc15/src/main.rs @@ -0,0 +1,35 @@ +extern crate regex; + +use regex::Regex; +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + + +fn main() { + let gears = read_file(); + let pass = (0..).find(|&i| can_pass(&gears, i)).expect("Reached end of infinite range without finding output"); + println!("First pass at t={}", pass); +} + +fn can_pass(gears: &Vec<(i32, i32, i32)>, time: i32) -> bool { + gears.iter().all(|&(time_offset, init_pos, gear_size)| (init_pos + time_offset + time) % gear_size == 0) +} + +fn read_file() -> Vec<(i32, i32, i32)> { + let file = BufReader::new(File::open("input.txt").unwrap()); + let line_regex = Regex::new(r"Disc #(\d+) has (\d+) positions; at time=0, it is at position (\d+).").unwrap(); + file.lines() + .filter_map(|line| { + line_regex.captures(line.unwrap().as_ref()).and_then(|cap| { + let time_offset = cap.at(1).and_then(|s| s.parse::().ok()); + let init_pos = cap.at(3).and_then(|s| s.parse::().ok()); + let gear_size = cap.at(2).and_then(|s| s.parse::().ok()); + match (time_offset, init_pos, gear_size) { + (Some(a), Some(b), Some(c)) => Some((a,b,c)), + _ => None + } + }) + }) + .collect() +} diff --git a/2016/aoc16/Cargo.lock b/2016/aoc16/Cargo.lock new file mode 100644 index 0000000..af71beb --- /dev/null +++ b/2016/aoc16/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc16" +version = "0.1.0" + diff --git a/2016/aoc16/Cargo.toml b/2016/aoc16/Cargo.toml new file mode 100644 index 0000000..3e56892 --- /dev/null +++ b/2016/aoc16/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc16" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] diff --git a/2016/aoc16/src/main.rs b/2016/aoc16/src/main.rs new file mode 100644 index 0000000..c5ecd10 --- /dev/null +++ b/2016/aoc16/src/main.rs @@ -0,0 +1,68 @@ +fn main() { + let data = initial(); + let expanded = expand_to_size(data, 35651584); + let check = checksum(expanded); + print(&check); +} + +fn initial() -> Vec { + to_bit_vec("10001001100000001") +} + +fn to_bit_vec(input: &str) -> Vec { + input.chars().map(|c| c == '1').collect() +} + +fn expand(a: Vec) -> Vec { + let mut b = a.clone(); + b.reverse(); + b = b.iter().map(|x| !x).collect(); + + let mut out = a.clone(); + out.push(false); + out.append(&mut b); + out +} + +fn expand_to_size(init: Vec, size: usize) -> Vec { + let mut out = init.clone(); + while out.len() < size { + out = expand(out); + } + out.truncate(size); + out +} + +fn checksum(data: Vec) -> Vec { + let mut check: Vec = data.chunks(2).map(|x| x[0] == x[1]).collect(); + if check.len() % 2 == 0 { + check = checksum(check); + } + check +} + +fn print(data: &Vec) { + for &bit in data { + print!("{}", if bit {'1'} else {'0'}); + } + println!(""); +} + +#[test] +fn test_expand() { + assert_eq!(expand(to_bit_vec("1")), to_bit_vec("100")); + assert_eq!(expand(to_bit_vec("0")), to_bit_vec("001")); + assert_eq!(expand(to_bit_vec("11111")), to_bit_vec("11111000000")); + assert_eq!(expand(to_bit_vec("111100001010")), to_bit_vec("1111000010100101011110000")); +} + +#[test] +fn test_expand_to_size() { + assert_eq!(expand_to_size(to_bit_vec("10000"), 20), to_bit_vec("10000011110010000111")); +} + +#[test] +fn test_checksum() { + assert_eq!(checksum(to_bit_vec("10000011110010000111")), to_bit_vec("01100")); +} + diff --git a/2016/aoc17/Cargo.lock b/2016/aoc17/Cargo.lock new file mode 100644 index 0000000..488e59b --- /dev/null +++ b/2016/aoc17/Cargo.lock @@ -0,0 +1,14 @@ +[root] +name = "aoc17" +version = "0.1.0" +dependencies = [ + "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "md5" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7df230903ccdffd6b3b4ec21624498ea64c912ce50297846907f0b8e1bb249dd" diff --git a/2016/aoc17/Cargo.toml b/2016/aoc17/Cargo.toml new file mode 100644 index 0000000..88c211c --- /dev/null +++ b/2016/aoc17/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc17" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] +md5 = "^0.2" \ No newline at end of file diff --git a/2016/aoc17/src/main.rs b/2016/aoc17/src/main.rs new file mode 100644 index 0000000..77fdf2e --- /dev/null +++ b/2016/aoc17/src/main.rs @@ -0,0 +1,98 @@ +extern crate md5; + +#[derive(Clone)] +struct State { + input: String, + path: String, + x: i8, + y: i8 +} + +impl State { + fn open_directions(&self) -> Vec<(char, i8, i8)> { + let hash_input = format!("{}{}", self.input, self.path); + let hash = md5::compute(hash_input.into_bytes().as_slice()); + + let mut results = Vec::new(); + if hash[0]/16 > 10 && self.y > 0 { + results.push(('U', 0, -1)); + } + if hash[0]%16 > 10 && self.y < 3 { + results.push(('D', 0, 1)); + } + if hash[1]/16 > 10 && self.x > 0 { + results.push(('L', -1, 0)); + } + if hash[1]%16 > 10 && self.x < 3 { + results.push(('R', 1, 0)); + } + + results + } + + fn next_states(&self) -> Vec { + self.open_directions().iter() + .map(|&(dir, dx, dy)| State { + input: self.input.clone(), + path: { + let mut p = self.path.clone(); + p.push(dir); + p + }, + x: self.x + dx, + y: self.y + dy + }).collect() + } + + fn is_final(&self) -> bool { + self.x == 3 && self.y == 3 + } +} + +fn main() { + let initial = State { + input: "lpvhkcbi".to_string(), + path: String::new(), + x: 0, + y: 0 + }; + + let final_state = find_final_state(initial.clone()); + let longest_path = find_longest_path(initial); + + println!("Final State Path: {}", final_state.path); + println!("Longest Path: {}", longest_path); +} + +fn find_final_state(initial: State) -> State { + let mut states = vec!(initial); + + loop { + match states.iter().find(|s| s.is_final()) { + Some(final_state) => {return final_state.clone();}, + None => {} + }; + + states = states.iter().flat_map(|s| s.next_states()).collect(); + } +} + +fn find_longest_path(initial: State) -> u32 { + let mut states = vec!(initial); + let mut current_longest = 0; + + while states.len() > 0 { + + match states.iter().find(|s| s.is_final()) { + Some(final_state) => {current_longest = final_state.path.len() as u32;}, + None => {} + }; + + states = states.iter() + .filter(|s| !s.is_final()) + .flat_map(|s| s.next_states()) + .collect(); + } + + current_longest +} diff --git a/2016/aoc18/Cargo.lock b/2016/aoc18/Cargo.lock new file mode 100644 index 0000000..d26659d --- /dev/null +++ b/2016/aoc18/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc18" +version = "0.1.0" + diff --git a/2016/aoc18/Cargo.toml b/2016/aoc18/Cargo.toml new file mode 100644 index 0000000..5eadfea --- /dev/null +++ b/2016/aoc18/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc18" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] diff --git a/2016/aoc18/src/main.rs b/2016/aoc18/src/main.rs new file mode 100644 index 0000000..52ad7a9 --- /dev/null +++ b/2016/aoc18/src/main.rs @@ -0,0 +1,20 @@ +fn main() { + let init: Vec = ".^^..^...^..^^.^^^.^^^.^^^^^^.^.^^^^.^^.^^^^^^.^...^......^...^^^..^^^.....^^^^^^^^^....^^...^^^^..^".chars().collect(); + + let mut map = Vec::new(); + map.push(init); + + for _ in 1..400000 { + let last = map.last().unwrap().clone(); + let mut next = Vec::new(); + for i in 0..last.len() { + let left = if i == 0 { '.' } else { last[i-1] }; + let right = if i == last.len()-1 { '.' } else { last[i+1] }; + next.push(if left == right { '.' } else { '^' }); + } + map.push(next); + } + + let safe_count = map.iter().map(|row| row.iter().filter(|&&c| c=='.').count() as u32).sum::(); + println!("Safe tiles: {}", safe_count); +} diff --git a/2016/aoc19/Cargo.lock b/2016/aoc19/Cargo.lock new file mode 100644 index 0000000..7dc8a26 --- /dev/null +++ b/2016/aoc19/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc19" +version = "0.1.0" + diff --git a/2016/aoc19/Cargo.toml b/2016/aoc19/Cargo.toml new file mode 100644 index 0000000..17889e3 --- /dev/null +++ b/2016/aoc19/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc19" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] diff --git a/2016/aoc19/src/main.rs b/2016/aoc19/src/main.rs new file mode 100644 index 0000000..1930d8d --- /dev/null +++ b/2016/aoc19/src/main.rs @@ -0,0 +1,42 @@ +fn main() { + part1(); + part2(); +} + +fn part1() { + let mut elves = (0..3017957).map(|i| i+1).collect::>(); + + let mut eliminate_mod = 1; + + while elves.len() > 1 { + let next_mod = if elves.len() % 2 == eliminate_mod { 0 } else { 1 }; + elves = elves.iter() + .enumerate() + .filter(|&(i, _)| i % 2 != eliminate_mod) + .map(|(_, &e)| e) + .collect(); + eliminate_mod = next_mod; + } + + let elf = elves[0]; + println!("Elf {} gets all the presents in part 1", elf); +} + +fn part2() { + let mut elves = (0..3017957).map(|i| i+1).collect::>(); + + let mut i = 0; + while elves.len() > 1 { + i = i % elves.len(); + let to_eliminate = (i + elves.len() / 2) % elves.len(); +// println!("Elf {} is taking presents from elf {}", elves[i], elves[to_eliminate]); + elves.remove(to_eliminate); + if to_eliminate > i { + i += 1; + } + } + + let elf = elves[0]; + println!("Elf {} gets all the presents in part 2", elf); + +} diff --git a/2016/aoc2/Cargo.lock b/2016/aoc2/Cargo.lock new file mode 100644 index 0000000..b0dbf6e --- /dev/null +++ b/2016/aoc2/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc2" +version = "0.1.0" + diff --git a/2016/aoc2/Cargo.toml b/2016/aoc2/Cargo.toml new file mode 100644 index 0000000..e4dcc6f --- /dev/null +++ b/2016/aoc2/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc2" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] diff --git a/2016/aoc2/input.txt b/2016/aoc2/input.txt new file mode 100644 index 0000000..ba5a73d --- /dev/null +++ b/2016/aoc2/input.txt @@ -0,0 +1,5 @@ +RUDULRLLUULRURDDRRUDURULLLDRLRLUDDLUDUDDUDRRDUDULDUUULLRULLRLDDLDLDDRLRRRRUDLLDDUULDRLLUDDRRUURLULRRRDLLURRUUDURUDDURLUDDDLUDDUUDUURUDLRDRDRLRDRLDRUDRUUDLRDDRRURDDLRDDRRURDUDDLULLUDRURURRRLRRUDUULULULRRLDLUDUURRLLRUDLLDRDDLRRRULRUDLULDDLLLULDLRUDLLLLRDDLRDRLDRLLRDRRDLRDULULRLLLDRUDRRRUULRUULDRURLUDRURRDLLDLRDLDDDDRRLUDLRRLUUUURDRDDLRRURURRDUULLRLURLURUDDDRDURDUUDRLRLRRLDDLDLDLDDDUDDULURLDDLLRLRRDULUDDLULRLUDDLDLRULUUUDRLDRUDURLUDDRLLRUULDLRRRRDLLLLURULLRDRRUDLUULRRDLLRLRLUDLDDULLDLLRDLDLL +LLUUUUUUDUDRLRDRDLDURRRLLRRLRURLLUURRLLUDUDLULUURUUURDLUDLDDLULLRDLRUULDLRDUDURLLDDUDUDULLUDDUULLLUULRRRLULRURRDLRUDUDDURRRDRUURDURLLULLRULLDRUULLURLDRDUUDDDDDDRRLDRLRRRLULDDUURRLLLLDRURLURDRDRDURUDUURRDUDUDRLLUUDDRLUDDDRDLDLRLDRURRDLLRULDRLLURURRLUULLRLRRURDDRDRUUURUURUUUDLLRRLUDRLDLRLURLDLUDDUDDDLDUDRRLDLRURULRLLRDUULURRRULDLLLRLDDDUURRRRDULLRURRLULULDLRRUDUDDLRUURDLDUDDUDRRDLRRRDUDUUUDLLDDDDLURLURRRUUULLLULRRLLLLLLULDUUDLRUDRRDLRDUUDUDLLRLDLLRUURDUUURUUUDDLLUUDLULDURLULULUUUDRUDULLURRULRULLRDLDDU +RLUUURULLDLRLDUDRDURRDUURLLUDDDUULRRRLRLURDDRUULUDULDUUDDDDUDDDDRUDDLDUUDRUDLRRRLLRDDLLLRLLRUULRUULDDRURRLURRLRLULDDRRRDDURDDRDRDULRUDRUUDULRLLULDLRLLDRULRDDRRDDUDLRLLUDRDRRRLUDULRDLRDDURRUUDDRRUDURRUUUDDRRDUDURLUUDUDUURDDDLURLULLUULULURUDUUDRUDULLUUULURDLDUULLDDLLDULRLRLRDUUURUUDLRLDURUDRLDULLUDLDLLRDUURRDUDURLUUUDLLRRULRLULRLDLLURDURRULRLLRRDUDLLRDRRRRDLUUDRUUUDDLRLUDDDDDDRURRRUUURRDLLRURLDDLLDLRRLLLDRRULRRUDLDRDDRRLULURLLUURURURRRRUUUUURUDURLRLLLULULDLLDLRDRRULUDUDRDRRDRDRRDUDLLLRUDRUDDDULRULRRRDRLRUUUURUDURDUUULLULRUDDULDUUDLDURRD +ULRULDDLDLULLLRRRLRUDDDDDLLDDUDLRRDULUUDRDLRRURDRRLUULRURUDRRULDLLLUDRUUDULULUDDRUDDDRDURRRDRDUUURLRDULUDRDRLDRUDDLLLDRRULUDLUDLDLLRRUDUULULDLDLLUURDLDDLLUUDURLURLLLDRDLDRRLRULUURRDRULRUUURULRRUDDDDLLDLDDLLRRLRRRRDUUDUDLDRDRRURDLRURULDLRDLLLLRUDRLLRDLRLRDURDRUDURRRLRDRDLLRLUDDDDRLRLLDUURRURLUURUULUDLUURDRRUDDLUDUDDDURRDRUDRLRULDULUUUUUUDDUDRUDUUURUDRRDLUDLUUDUULUDURDLDDDLLURRURUUDUDDRRDRLLULULDRLRURRDDDRDUUURDDDRULUDRDDLDURRLDDDLRRRLDDRDURULDLUDLLLURLURRLRRULDLLDDUDRRULDRRRRLURRUULRRRUDLURDLLDLLDULUUDRRLDLLLDRLRUDLUULDLDRUDUDURDRUDRDDDLRLULLUR +LRLUUURRLRRRRRUURRLLULRLULLDLUDLUDRDDRLDLRLULLURDURLURDLLRLDUUDDURRRRLDLLRULLRLDLLUUDRLDDLLDRULDRLLRURDLRURRUDLULLRURDLURRURUDULLDRLLUUULUDRURRUUDUDULUUULRLDDULDRDLUDDUDDDLRURULLDLLLRLLUURDLRUDLLLLDLLRLRUUUDDRUUUUDLDLRDDURLDURUULLLUUDLLLLDULRRRLLDLDRRDRLUDRUDURLLUDLRLLUDUDRDDDRDLRDLRULUULDRLUDLRLDUURLRRLUDDDUUDDDUDRLDLDUDLURUULLDDDURUUULRLUDLDURUUDRDRURUDDUURDUUUDLLDLDLDURUURLLLLRURUURURULRULLRUDLRRUUUUUDRRLLRDDUURDRDRDDDUDRLURDRRRUDLLLDURDLUUDLLUDDULUUDLDUUULLDRDLRURUURRDURRDLURRRRLLUUULRDULDDLDUURRDLDLLULRRLLUDLDUDLUUL diff --git a/2016/aoc2/src/main.rs b/2016/aoc2/src/main.rs new file mode 100644 index 0000000..f4c3bfd --- /dev/null +++ b/2016/aoc2/src/main.rs @@ -0,0 +1,61 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +fn main() { + let lines = read_file(); + let mut current = 5; + for line in lines { + current = line.chars().fold(current, |current, dir| move_char_hex(current, dir)); + println!("{:X}", current); + } +} + +fn read_file() -> Vec { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} + + +//assume current in 1-9 range, and char is in UDLR +fn move_char(current: i32, dir: char) -> i32 { + match dir { + 'U' => if current <= 3 { current } else { current - 3}, + 'D' => if current >= 7 { current } else { current + 3}, + 'L' => if current%3 == 1 { current } else { current - 1}, + 'R' => if current%3 == 0 { current } else { current + 1}, + _ => panic!("Bad direction character") + } +} + +// 1 +// 2 3 4 +// 5 6 7 8 9 +// A B C +// D +fn move_char_hex(current: i32, dir: char) -> i32 { + match dir { + 'U' => match current { + 1|2|4|5|9 => current, + 3|13 => current - 2, + _ => current - 4 + }, + 'D' => match current { + 5|10|13|12|9 => current, + 1|11 => current + 1, + _ => current + 4 + }, + 'L' => match current { + 1|2|5|10|13 => current, + _ => current - 1 + }, + 'R' => match current { + 1|4|9|12|13 => current, + _ => current + 1 + }, + _ => panic!("Bad direction character") + } +} diff --git a/2016/aoc20/Cargo.lock b/2016/aoc20/Cargo.lock new file mode 100644 index 0000000..26be916 --- /dev/null +++ b/2016/aoc20/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc20" +version = "0.1.0" + diff --git a/2016/aoc20/Cargo.toml b/2016/aoc20/Cargo.toml new file mode 100644 index 0000000..4c1e873 --- /dev/null +++ b/2016/aoc20/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc20" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] diff --git a/2016/aoc20/input.txt b/2016/aoc20/input.txt new file mode 100644 index 0000000..c3e912f --- /dev/null +++ b/2016/aoc20/input.txt @@ -0,0 +1,1104 @@ +272152717-281364173 +480675455-489214207 +3562619188-3566180938 +474796666-476679929 +1859288016-1859426304 +3500809029-3520779986 +1711620671-1724624325 +376497036-379822744 +2334350029-2336872286 +2880314906-2881510051 +257912946-260566708 +2964360275-2973540924 +889696219-900080622 +2727172832-2737372242 +33674001-51133436 +2718782366-2736816045 +41293631-52546854 +1064827080-1071610531 +1373807967-1374769067 +3261078460-3268114587 +1583129312-1602482863 +1605269651-1617971405 +365345542-377782493 +2858099254-2862714857 +1147380159-1156709753 +1087934555-1093750979 +998603437-1001868893 +234297440-245049936 +427084952-449321291 +3115490453-3126172818 +0-166475 +2859739533-2864404117 +2879116214-2888999956 +4166942312-4169074982 +2693533587-2694200673 +84162473-84534337 +2164071501-2168305216 +3745751095-3750043362 +2647427848-2647977897 +2028900925-2034847596 +876886411-878398110 +2589041333-2589873869 +876959837-878627172 +431139724-458304869 +1877994382-1887344924 +473575203-475773145 +252091135-257535969 +177110001-177143710 +2722497928-2723521816 +2208127-2536514 +1748077674-1751224226 +2362936907-2381045647 +2020385448-2029519771 +3108825744-3123438032 +872292652-885764819 +305053947-314709696 +2717924562-2718755692 +48149217-51160833 +2149726170-2150134226 +1729844094-1745733187 +1375741284-1378782323 +3744515388-3761146958 +78523085-78634151 +1634372345-1650424418 +3199349237-3209140394 +2011853949-2039316392 +769580925-794759455 +3841896290-3862358298 +3360393034-3379747723 +1120644472-1134516526 +815948131-837832345 +1590411139-1596337230 +2894381219-2935549329 +3688775236-3725245783 +963257634-966114246 +3566641344-3578334024 +1402589368-1434296916 +2742164387-2746045182 +3336884060-3357139723 +1529922302-1532912060 +812048355-820600359 +3535903629-3546917858 +3793132304-3794479774 +2441870431-2446591046 +790688046-795287265 +1094905232-1100177740 +2745878705-2749992348 +119256353-127273572 +3046258846-3057351205 +1754142948-1755600336 +1439035504-1441512409 +2099760008-2108426979 +2336936249-2337901885 +886155227-897744302 +278389264-304413122 +2261948686-2274345666 +3650645303-3661861270 +574462284-588550773 +1759196520-1782105094 +965026392-968307163 +2946755906-2963417308 +1766330775-1797112785 +1200115116-1225710522 +2080628180-2093783866 +2259186780-2265576012 +3422484974-3431403368 +2617357126-2619542029 +3535424340-3544236729 +1159703397-1178419333 +3695852451-3731387995 +2624409231-2626475102 +2462304649-2486546066 +1991659530-1991878310 +3675781139-3676295005 +3077370804-3098240471 +2410139047-2412323245 +1441379095-1464833739 +4254940654-4257828865 +3134602505-3135787446 +1531285367-1533939508 +1982248547-1989219645 +3717359312-3718050739 +1149793223-1159703395 +1718841131-1723739366 +1338353885-1363179561 +432322947-450369838 +3592044590-3598404106 +2783263665-2802135338 +2743201911-2758731127 +2940668500-2946140977 +3588363275-3594330069 +3675945049-3679197388 +154488705-187446525 +1653195306-1670854086 +2771303647-2772439896 +84146114-84264353 +1593778990-1622000763 +1580746474-1580917737 +801556682-801983712 +2268279290-2282899033 +3429390560-3432646573 +1355690206-1364432183 +3364827834-3370027309 +1343867080-1356033542 +2769747098-2802096717 +2451978746-2499145061 +3181481071-3202130015 +149287453-193454621 +2907925124-2933668261 +3525815495-3531996642 +892781900-902374081 +801983714-808209514 +1205516416-1207518863 +3475944050-3479276890 +1680662691-1693249318 +441188152-451875207 +3866263742-3869203885 +872306827-886155226 +3641638239-3656867109 +1292372277-1314188693 +1062559245-1064950825 +2334198700-2335529918 +1122962410-1136372412 +623323144-625918342 +2425193847-2429793856 +373315052-379611660 +2418007458-2424289401 +2149571480-2150070836 +1991878311-1994706041 +3043381174-3046887777 +497434379-500148281 +1825422529-1838184381 +137450473-139095016 +248808686-249748629 +1989969134-1990676913 +960553017-960915199 +2336374612-2337150925 +3369599561-3390928276 +113852260-145672651 +2986681144-2989530365 +3856382204-3873203604 +1657674792-1663548211 +2650185850-2651060935 +1647983099-1662799191 +1082357088-1112329267 +3793767754-3794336046 +3705877748-3728561957 +2769813898-2772369413 +3794164058-3801441915 +623200755-625407322 +1241966895-1253020214 +450369839-463131291 +2717038617-2723107862 +961267447-962353699 +193454623-196340979 +4253667440-4261704870 +3269563154-3275293388 +1505893371-1506880655 +3873203606-3889412741 +443548825-444733658 +3045753812-3049382630 +732764611-733035245 +961034623-961300670 +1373470559-1373526698 +2860192109-2867276065 +3312623058-3313008029 +3942424007-3951811891 +1197857710-1214225356 +458105388-462489469 +4259123154-4263336824 +960863927-961733781 +44819071-52470556 +957158383-958041099 +2543986743-2554322396 +339721933-346413740 +1010736956-1030771663 +4288781458-4289261456 +3687051286-3722932714 +2420813443-2424860115 +1989395087-1989698527 +3473694511-3476125935 +2408526816-2412196386 +1989398215-1991201331 +1526350090-1542206580 +2394556084-2399639414 +3510330656-3522250181 +137874061-144376880 +4167095310-4177987517 +2785359721-2785427263 +15024863-23531388 +1625174667-1658679299 +974122151-995631685 +1540947566-1554930456 +2424921025-2429636819 +1993822183-1994839237 +1094823818-1097108689 +69796587-71291314 +37126017-49427721 +3793022166-3794100162 +908189684-911496714 +2911211968-2917349047 +1227212686-1234159311 +3776286544-3783635666 +3531996644-3536250992 +3396302214-3406687062 +1476456536-1478818018 +2443497737-2447228620 +962292354-965288690 +1833703443-1843811212 +998277195-1000562480 +883225973-896212798 +2202815121-2215802598 +3557733372-3563107357 +2648035823-2649474134 +2723831559-2734044916 +1714279973-1738575730 +110217-574651 +1398965758-1409470798 +2330603686-2335139291 +1506286657-1511280423 +3365567975-3371386015 +466326205-480223737 +1989219647-1989438488 +3008188882-3010347685 +1070925288-1071665482 +2111554226-2123836945 +2137226110-2138852181 +1081261041-1091870264 +1081552237-1090538414 +2000657198-2037677988 +2718009384-2720142472 +925940762-939052067 +4179143261-4191765704 +3426378774-3430410036 +3676393933-3680167774 +3271833171-3277125583 +274414401-283893852 +3124560226-3128380638 +1208163309-1215074110 +2465798305-2494706753 +3050317115-3058897888 +1302678331-1315210828 +1751224227-1758206846 +931444766-948598982 +151669773-180559543 +255864690-255985990 +1556987318-1563743144 +16294070-23923782 +1415762720-1421421169 +3853344243-3864268114 +1280237454-1286328218 +2944350248-2976813361 +2187770126-2203436268 +3505239916-3517301515 +3232015564-3235367871 +2146211145-2166090499 +910952647-911877073 +1579658725-1581392690 +1237242317-1258610777 +2589766513-2598433041 +3449310840-3449858133 +745819525-755688297 +3776094116-3783478049 +2108426981-2124149170 +3449389881-3462604413 +2301503968-2324628965 +1005263513-1027181473 +1952664131-1969650551 +1285113553-1288652959 +3896408883-3908694324 +1920600328-1921999554 +1025403493-1031247416 +3905769594-3930128244 +1031247417-1047578444 +3885007170-3895219247 +3598377658-3599404192 +1697890477-1697912613 +954538505-957768997 +2816494072-2842728200 +492165035-498202012 +3137181704-3152588209 +1755735260-1759196518 +1371495492-1371550991 +2501923864-2514064340 +305959083-311818120 +4250019192-4275532230 +114168261-116414851 +2447228622-2451978745 +766211517-801556681 +3376445798-3394303381 +3501155911-3526104374 +2548986102-2564634962 +3263667615-3270390046 +1807095399-1824137700 +856041972-859823687 +3887315148-3892355947 +1030764665-1045428052 +638833662-640333593 +2121184882-2129744090 +2881011537-2885878144 +3588560066-3597713320 +3124980377-3134500989 +489214209-512240639 +3760702359-3764383643 +1090166392-1096894006 +917419134-922706929 +1296067761-1309424658 +689572986-696039127 +2660085630-2660431880 +680230992-716886780 +1592087783-1598197492 +1530767294-1575862739 +2082087967-2085220519 +2424541691-2426736024 +113504564-116385542 +1916132714-1932780572 +503684477-512284558 +2615977363-2622859043 +4035141786-4047227590 +1663548212-1680662689 +3047614614-3051657189 +2634680042-2641014306 +2583260376-2591896929 +2645275066-2647436256 +64047546-86026817 +1071039399-1072162085 +2594771897-2599508024 +83962861-84534191 +902374083-941216585 +2586806577-2599448524 +1274245593-1274516893 +4031038177-4040911753 +983068813-998624841 +534906133-573925401 +3329216543-3336884059 +4125892395-4138236492 +3807924665-3812644495 +1774911-2450996 +446418646-455236779 +2877486448-2884177700 +1373832888-1373901196 +370639181-384962937 +12016954-19316517 +3134500991-3134627688 +1373501126-1373590483 +1777703220-1777741597 +3743473590-3769013947 +2353521003-2362936906 +2468617254-2477279185 +78550601-78698869 +1273031112-1274488766 +968052409-969178069 +3907082563-3913084150 +3322437732-3338709909 +970661335-978617986 +2985507999-2990149897 +1499815926-1518480568 +2047086312-2056763544 +3154050192-3178489168 +1544927329-1559460655 +614918489-621719308 +3733606954-3743473589 +1499734003-1505336823 +1765493480-1780907733 +1112329269-1144192156 +1908189573-1916132712 +2978158245-2980295974 +854842773-855564041 +3851762797-3856667050 +2987912828-2988480807 +3845355673-3864117699 +2372563028-2379155071 +4164107384-4175248779 +206495443-209268583 +2893360924-2906330615 +1374122783-1374244946 +1315210829-1323332739 +2819221138-2820241142 +2987725800-2988399994 +3420480297-3426061444 +1745733189-1750260936 +2771579434-2772910814 +1721651362-1731098010 +1200223043-1222602885 +3431337889-3434193062 +2412323247-2441870430 +3756861847-3771488683 +853629069-857835277 +3744664061-3763198907 +1371491558-1371529465 +1932780573-1939156498 +3661861272-3662675926 +2648267077-2650619730 +3366486664-3371903512 +1268371412-1276470615 +2691106038-2691272785 +3227264064-3240740070 +1906133184-1910990608 +3853470102-3865286420 +2646285040-2646358000 +2196926231-2206264598 +4257710901-4257836607 +242078367-255972629 +4198987003-4201086361 +1240990629-1248211769 +2749992349-2760767131 +2787866331-2806708160 +809302575-853629067 +3032053776-3036049062 +2943717702-2946230991 +4288724821-4289568650 +3215397670-3224618461 +1858955725-1859353621 +2083864513-2101037055 +694973182-718973623 +4168983031-4174451494 +2807055496-2816494071 +1055347167-1064190974 +3424907263-3427071583 +859417782-872292650 +1467661058-1474811610 +2393002352-2403005964 +4197417217-4208856131 +3370246481-3375696999 +1373468974-1373569404 +2905152772-2910933373 +1980855826-1983920990 +732863279-733152241 +4285742284-4286129026 +1614476697-1614835826 +2635427600-2644232203 +1470741851-1479153638 +2944130276-2951908714 +4291064131-4293894991 +1990921080-1991701381 +4227850767-4244632336 +1807565528-1814396331 +2361860677-2376637038 +2943119919-2945768965 +2172859679-2221926662 +249198701-250135569 +2652844144-2657371637 +1885639221-1900413603 +1509729634-1512261818 +3004310417-3011080364 +1694482383-1697891607 +4177987519-4212820708 +4161048921-4161074968 +476220543-480675454 +2588894890-2592105515 +2757311298-2758434349 +4050934926-4082396822 +2034604741-2043305856 +2331464398-2333528059 +1066956928-1067355622 +2646313639-2648035821 +2066636902-2067863299 +2332503976-2334659414 +3180110462-3204410296 +577236362-586064251 +256418607-258764997 +2233705634-2248146735 +3716569187-3719939659 +1386717710-1439035502 +1859175593-1859580659 +3708021302-3722129580 +3976120818-4005662251 +304413124-306709976 +1395309937-1427985546 +4226665082-4232713677 +4212820709-4214429692 +1693249319-1711620669 +2499145063-2503398930 +3721989699-3733606952 +1717757397-1721218576 +1127769041-1132781724 +3644972707-3646872069 +2077152015-2084609524 +1990599678-1991511335 +2335139292-2353521001 +4088569210-4091483373 +1642017342-1657864055 +2588719725-2589121881 +2903005844-2913683635 +194715771-196440167 +3963719430-3974518407 +4288320832-4289172749 +3151726457-3165427383 +23507982-23800784 +2895160172-2940456225 +1001177233-1005263511 +43609109-48863103 +1144192157-1157514424 +734439882-765944362 +695965351-719454865 +856803507-869754401 +1890217805-1904089509 +3300131715-3305283163 +1529237006-1529595328 +2753090359-2757523819 +828668586-831203389 +3427619213-3428732628 +2967859507-2976560941 +2329569453-2332265395 +2239885549-2252296728 +1293808207-1320485733 +2604175022-2624108715 +2697882453-2723829703 +2463205201-2470677980 +3888353469-3890883045 +400102191-427084950 +4150245199-4164107383 +1395492363-1406000929 +3675122217-3676808853 +116414852-148746047 +787563761-789069064 +3197100188-3202418404 +1373782716-1373895006 +2617111647-2617819575 +2550216289-2557881293 +1851804917-1852370216 +2617793199-2618721355 +1939113565-1942772474 +1066259539-1066964651 +2536515-2749485 +3851513911-3872830251 +3315330215-3350319238 +1372313956-1373952939 +270099979-278389263 +2861061889-2874958905 +2982764434-2982918860 +1225710523-1232594859 +3080849793-3087237669 +2168507276-2172859677 +2554045929-2558669015 +2715737041-2742164385 +2564405335-2570912208 +3111405671-3131810967 +1881537985-1906133183 +2327518639-2329278606 +1695964017-1700687554 +2325334299-2328665915 +2329084251-2329569451 +2526389631-2574332443 +2716903062-2718451591 +177141073-177775415 +177103338-177124151 +1072162087-1081552236 +3178535948-3199349236 +2293206667-2314675667 +1889288474-1903754822 +4251848410-4278329656 +697896245-706915923 +1811201479-1827334058 +102113146-112076690 +2390223078-2399260655 +829332527-848880205 +3861878449-3866482364 +1213011864-1220748067 +3580711167-3587101215 +1286680169-1311818230 +3608853495-3610981230 +1511277091-1513257838 +3450147668-3459285977 +2780989504-2803855679 +3882846313-3888163900 +941216586-953952178 +2983401144-2988059936 +2624108716-2624926759 +3402309579-3420480295 +3312749262-3314042171 +3399699391-3418732708 +4105670961-4129433645 +4257493527-4284962279 +23923784-47709067 +953952180-957049748 +2876724088-2878697891 +2416003985-2423463911 +740946393-742024905 +1380318986-1386717709 +2026496387-2041982393 +3072950856-3095969673 +196440168-234297438 +3324520138-3350841770 +1184551931-1197857708 +3723507322-3732029196 +1781641387-1785877866 +2407131596-2409544298 +5689429-5741644 +1739110416-1741141505 +2548794765-2558310137 +808209515-836691306 +2657455751-2663837619 +790539346-793059170 +568516293-569131984 +3321930331-3346790026 +472011317-479941460 +857857646-863011064 +4168502125-4170164107 +588550774-597747807 +1637815642-1662350209 +2460793334-2466026338 +958041100-970661333 +2139217624-2146211143 +2539598-2830629 +1266192646-1268371411 +1323332741-1335959162 +1439736912-1446610546 +4061001198-4065392221 +2524105557-2526389630 +2222452808-2225462596 +1388815777-1397555491 +3612936376-3650645302 +3045926276-3065706826 +3574212945-3575594696 +2827277916-2836024368 +1991475869-1991926125 +3505806023-3528702608 +2414724634-2430851599 +3021588078-3028285988 +2574332445-2592271496 +2057264136-2059202053 +3244432520-3248685694 +1712738962-1729844093 +56528833-64047545 +2971719660-2977620581 +3605787690-3611524810 +3851574035-3854062441 +1235784822-1266192644 +3006793176-3021032700 +3900016789-3922138525 +1234159313-1235784821 +455883118-466326203 +1053312381-1063953379 +2820222101-2821175967 +2502044549-2506260381 +568736374-569251939 +1578664897-1579658724 +344106424-350103368 +1590175536-1595299212 +2273779785-2277363906 +3984562197-4010152611 +45721618-54860968 +3394303383-3402309578 +1511624839-1512608254 +3884829071-3890292172 +2038966626-2047086310 +4103290900-4119641469 +3357139725-3360393033 +2780813493-2807055494 +2225462598-2252329658 +2592271497-2604175020 +1049541136-1055392314 +1533973152-1578664895 +3209140396-3244432519 +3135787447-3178535946 +1873694527-1911946735 +3716488307-3717917511 +1863079077-1868159650 +1852620713-1869463034 +2340761-6722844 +4010806326-4011637774 +2335714002-2344955062 +2503398931-2516105578 +4096488349-4097750835 +495702052-499886980 +2633949022-2643879390 +2230563996-2248676097 +1992368509-1995459736 +725466259-734439880 +3284564906-3289305182 +3006621951-3015555807 +2221926663-2224742001 +1807424325-1816026389 +1876686839-1880758503 +2691158517-2691387740 +3757816372-3758051212 +2956964132-2972741344 +2636000153-2638744402 +678819639-679798433 +250063049-250516719 +3855876124-3866454360 +3312438883-3313193146 +82686086-84339480 +1092916631-1107918456 +1843811214-1852620712 +3809172487-3830073502 +2616993454-2620553751 +2682855477-2715737040 +3863648987-3866503080 +1271724277-1275741880 +2384026814-2393286163 +2957501262-2965749150 +4213745292-4214551645 +2556715457-2565699508 +2263615-2555032 +2510926180-2524105555 +2198333368-2201790504 +983311745-991202543 +326387197-344106423 +3087807140-3088895982 +86026819-109305037 +2504533668-2507452669 +1371550992-1377668791 +1656901715-1676675657 +130445224-140364961 +875328099-885585914 +2299489843-2306253705 +3450835271-3481339653 +4014358521-4031038176 +2340311395-2351064022 +2883149064-2887845481 +2259592077-2278614136 +3810542228-3827200634 +3056035363-3068664010 +722584522-723699159 +1735688023-1740818227 +3537763412-3542953759 +2366293314-2375211143 +1411814377-1424672790 +3100999210-3102484531 +4284962281-4294967295 +1446610547-1465468961 +2874958907-2877486447 +1765556195-1793446949 +4218980804-4226442852 +494048500-497170493 +360027343-374159699 +2651399811-2665409613 +1047578446-1052368079 +2362920294-2374232484 +2570748019-2571266639 +3256410480-3277105765 +3771488685-3794388011 +722551086-722999678 +741060508-762846249 +1479919768-1481248209 +614971153-617471673 +2982621961-2982812184 +2087732105-2106406062 +2302394373-2326071906 +886110869-893987869 +864175670-867272025 +2119076394-2126808897 +1051546928-1062419089 +678814708-679604844 +2168305217-2172141567 +2943803911-2945854166 +321232218-329790306 +391378250-412099930 +539629846-568721146 +3794388012-3806424827 +2894304683-2915255653 +856495621-857857645 +2743551156-2751996369 +1024955451-1026100964 +177078688-177123406 +4018256524-4039886263 +3945209398-3956309725 +2364930647-2378530823 +1006976522-1021887240 +3757741995-3757947507 +1421470109-1432888460 +3160832331-3169658872 +177045468-177087638 +1090463009-1104430857 +1274373481-1274578120 +2626475104-2640453818 +3284290551-3288427229 +1981618690-1984277097 +1186456381-1195032668 +5052363-7502553 +1509795877-1512150519 +3579924616-3582548171 +4121363479-4137513284 +1488580398-1503472581 +2423275742-2439608584 +2138662322-2138915998 +1382223606-1410305514 +3832391075-3853706505 +1614422103-1614651523 +3369142704-3373032779 +719454867-725466258 +2084732810-2095200322 +1442897307-1457439380 +2112887248-2129529980 +4023595164-4025287662 +611715160-617013605 +778751841-791194910 +3293566719-3305859750 +1772772441-1797304174 +1589764874-1592539287 +1373791581-1374176540 +1590792815-1594025491 +1981551967-1982435626 +1520347646-1542585100 +3099494317-3115490452 +3098240473-3103804691 +3264851832-3269554326 +766110784-766211515 +2019539430-2044044979 +3266317108-3273234008 +1274283817-1274437178 +2650371073-2672921107 +2672921108-2679629874 +2673449969-2682855475 +765944363-766205817 +3853706506-3859959741 +1508362252-1513253382 +876916046-879636492 +3809955806-3810745183 +1274121584-1274542630 +3157351170-3166046719 +1053524276-1064827079 +3791652757-3800601148 +2842728202-2853639142 +3571512615-3579166854 +679353613-679923926 +3809191752-3810740480 +2817388396-2819591739 +2852317315-2861061888 +4256942395-4260208971 +3501898903-3512880687 +3882475326-3886137014 +1966578885-1968167855 +410700018-415718837 +3806424829-3821851233 +1518480570-1533973151 +3147464447-3158958125 +197786374-207567591 +3535028299-3539195436 +4184714120-4186894005 +448892515-456388417 +671686622-678352726 +1360272787-1363580702 +2164873145-2165892440 +3361616306-3375689123 +3091164847-3093370647 +3297273994-3311056250 +398273343-404652855 +1782105095-1803766701 +1484145894-1503189992 +2160023298-2160172849 +2919583395-2932229908 +2812705686-2830443941 +2855216236-2865262494 +148746049-149287452 +589888575-595456264 +314410823-316970816 +2060986022-2063938184 +1803766703-1825422528 +2128237894-2139217623 +4248957737-4257018408 +3561933398-3574109426 +1614389854-1614749576 +468854062-476024564 +436179755-463764255 +589811734-589875676 +673967863-678814706 +979844884-993353080 +1945908845-1980551520 +1990017551-1992668548 +1252508632-1256783095 +2946230992-2982621959 +3954810178-3972017471 +3396778325-3399315311 +3331661742-3344656790 +3072306192-3077370803 +4093061872-4094625093 +2876543933-2878230248 +2854310965-2859128779 +4193316980-4200095285 +730205666-732782756 +3676211467-3676732582 +666890880-674578243 +1371568734-1380318984 +4184744194-4187112660 +1481248211-1499734002 +3379867668-3385527932 +1622428665-1625174665 +3671900758-3678171048 +3705951043-3716692751 +1465468963-1479919767 +1580610051-1583129310 +350103370-365345541 +3900102077-3919890024 +2940456227-2945966226 +3248685696-3284290550 +544295457-564157394 +4016705659-4021147057 +791731732-797225629 +1165689597-1184551930 +3289305184-3312438882 +4097750837-4102130426 +4055841302-4077041304 +3441155355-3450835270 +3314042173-3333554945 +597747809-623200754 +356234097-366220597 +2381045649-2408455595 +4047227592-4049208360 +4092327831-4093008849 +3986217544-4010716485 +3587101217-3589409982 +3939796675-3976120816 +1335959163-1365648715 +3809562980-3810806981 +1374160507-1375189297 +1229723962-1229853859 +2978027850-2978555872 +1081232290-1096685438 +3431403369-3441155353 +3058481098-3072306190 +3615995822-3647806423 +626772256-671686621 +1922970278-1932303880 +687812741-696977728 +3664395391-3676520369 +2073554869-2099760007 +512240640-534906131 +47709068-56528831 +255985991-270099977 +3481339655-3501155910 +2238475796-2249793376 +3866035083-3867269474 +4093117795-4094756619 +4285929403-4287400825 +702714634-707275982 +3036049064-3058481097 +1027080396-1032733050 +113815262-115324511 +2256577067-2275122653 +1990217023-1991256560 +109305038-113504562 +978617987-1000518126 +4057509129-4071389442 +3739975721-3747173973 +320182613-320260227 +1770166-1994691 +291087466-296873313 +4086243810-4096488348 +1276470617-1302918078 +4009439486-4012738003 +4229206868-4234285011 +50143427-53071093 +404422891-410359316 +4161013486-4161053283 +911138009-929609461 +689609396-696731723 +2252329659-2256577065 +613133080-613942155 +4795688-12016953 +641672798-650081964 +389776265-420161914 +3625922134-3642274972 +1846384495-1862435820 +2275122654-2286941521 +4005662252-4011759888 +1579087992-1581111352 +574652-1770165 +1442180635-1450176908 +2760767133-2771395260 +1928232572-1932533591 +102995855-104909244 +4049179426-4050691624 +2830630-3651339 +3552827772-3568200782 +2149613227-2163021264 +1355394428-1371491556 +1697279405-1703102679 +2056763545-2073554867 +3935325191-3944187216 +3553082925-3579924615 +471239627-477134321 +3651340-4795687 +336457769-347991249 +93183635-111293337 +2192128388-2196145589 +2584811687-2598361179 +2772743660-2798530311 +966574237-968633571 +4234775226-4245296919 +3662498499-3663349534 +1373549652-1374239894 +58302860-63670232 +1942772476-1980855825 +3367790115-3376760130 +153092723-163571711 +729975675-730335988 +2192513622-2204700032 +809609217-841628900 +1180032684-1187000735 +1179227554-1195640753 +4232727143-4234293540 +1127122996-1154171178 +314709697-321232216 +324796849-347951368 +1095126621-1109642108 +384962939-400102190 +363929652-366175319 +3821851234-3832391073 +338713138-348077886 +817486506-837487497 +1051940232-1067333023 +19243172-19587047 +257512323-261464746 +1753791137-1753975241 +202493249-230688701 +1579363284-1580767164 +2763246325-2780813492 +2242297310-2249800231 +1995459738-2019539429 +573925402-574462282 +3673851405-3681451655 +3423327301-3428356692 +3681451657-3695852450 +3717161710-3718982299 +2043127586-2043244031 +2888999958-2894304682 +2061236903-2067109739 +2643879391-2646512593 +1139540259-1146292375 +3544236730-3552827770 +2287385837-2325334298 +3598404107-3612936374 +3623885184-3631095478 +1752497514-1756572770 +2817718245-2824409717 +679569338-680230991 +4102130427-4150245197 +1869463036-1881600179 +286732642-289325518 +2995454654-3032053775 +1274816430-1274830828 +4008677258-4014358519 +248491486-248842325 +1622000764-1625125474 +1165689487-1187305806 +3937241402-3968405869 +4050691625-4086243808 +3663349535-3676933438 +2982918861-2995454652 +1372603515-1379417540 +2408455596-2411739453 +201820937-227275418 +1753934804-1754073983 +2280075243-2287385835 +2905919817-2917493149 +2757562598-2759204124 +1444583282-1458937548 +1699259773-1707790200 +1579284365-1579540410 +624710045-626772254 +2971742099-2980188298 +3895219248-3896408881 +1637216769-1663878490 +1606776283-1612157133 +1527331165-1569579671 +1468822607-1477434547 +3930477156-3939796674 +4214551647-4234775225 +1469208064-1469259449 +4245296921-4257493526 +3930128245-3930477154 diff --git a/2016/aoc20/src/main.rs b/2016/aoc20/src/main.rs new file mode 100644 index 0000000..ee14583 --- /dev/null +++ b/2016/aoc20/src/main.rs @@ -0,0 +1,114 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::u32; + +#[derive(Debug)] +struct IpRange { + start: u32, + end: u32 +} + +impl IpRange { + fn new(start: u32, end: u32) -> IpRange { + IpRange { + start: start, + end: end + } + } + + fn contains(&self, other: u32) -> bool { + self.start <= other && other <= self.end + } + + fn try_combine(&self, other: &IpRange) -> Option { + if self.contains(other.start) && self.contains(other.end) { + Some(IpRange::new(self.start, self.end)) + } + else if other.contains(self.start) && other.contains(self.end) { + Some(IpRange::new(other.start, other.end)) + } + else if self.contains(other.start) && other.contains(self.end) { + Some(IpRange::new(self.start, other.end)) + } + else if other.contains(self.start) && self.contains(other.end) { + Some(IpRange::new(other.start, self.end)) + } + else { + None + } + } +} + +fn main() { + let mut ranges = read_file(); + optimize_ranges(&mut ranges); + + let mut allowed = Vec::new(); + + // current will be in the u32 range while it's in the loop, but + // needs to be a u64 to pass u32::MAX. Otherwise it will just + // overflow and run forever. + let mut current: u64 = 0; + while current <= u32::MAX as u64 { + match ranges.iter().find(|range| range.contains(current as u32)) { + Some(blacklisting_range) => { + current = blacklisting_range.end as u64 + 1; + }, + None => { + allowed.push(current as u32); + current += 1; + } + } + } + + let min_not_in_range = allowed[0]; + let allowed_count = allowed.len(); + + println!("Min not in any range: {}", min_not_in_range); + println!("Allowed count: {}", allowed_count); +} + +fn read_file() -> Vec { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .filter_map(|line| { + let line = line.unwrap(); + let mut split = line.split('-'); + let start = split.next(); + let end = split.next(); + match (start, end) { + (Some(start), Some(end)) => Some(IpRange { + start: start.parse().unwrap(), + end: end.parse().unwrap() + }), + _ => None + } + }) + .collect() +} + +fn optimize_ranges(ranges: &mut Vec) { + let mut before_count = ranges.len(); + let mut after_count = 0; + while before_count != after_count { + before_count = ranges.len(); + ranges.sort_by_key(|r| r.start); + + let mut i = 0; + while i < ranges.len()-1 { + match ranges[i].try_combine(&ranges[i+1]) { + Some(combined) => { + ranges[i] = combined; + ranges.remove(i+1); + }, + None => {} + } + i += 1; + } + + after_count = ranges.len(); + + println!("Number of ranges {} => {}", before_count, after_count); + } +} diff --git a/2016/aoc21/Cargo.lock b/2016/aoc21/Cargo.lock new file mode 100644 index 0000000..9a1075b --- /dev/null +++ b/2016/aoc21/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc21" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc21/Cargo.toml b/2016/aoc21/Cargo.toml new file mode 100644 index 0000000..bc0d468 --- /dev/null +++ b/2016/aoc21/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc21" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] +regex = "0.1" \ No newline at end of file diff --git a/2016/aoc21/input.txt b/2016/aoc21/input.txt new file mode 100644 index 0000000..ebd7d52 --- /dev/null +++ b/2016/aoc21/input.txt @@ -0,0 +1,100 @@ +rotate based on position of letter d +move position 1 to position 6 +swap position 3 with position 6 +rotate based on position of letter c +swap position 0 with position 1 +rotate right 5 steps +rotate left 3 steps +rotate based on position of letter b +swap position 0 with position 2 +rotate based on position of letter g +rotate left 0 steps +reverse positions 0 through 3 +rotate based on position of letter a +rotate based on position of letter h +rotate based on position of letter a +rotate based on position of letter g +rotate left 5 steps +move position 3 to position 7 +rotate right 5 steps +rotate based on position of letter f +rotate right 7 steps +rotate based on position of letter a +rotate right 6 steps +rotate based on position of letter a +swap letter c with letter f +reverse positions 2 through 6 +rotate left 1 step +reverse positions 3 through 5 +rotate based on position of letter f +swap position 6 with position 5 +swap letter h with letter e +move position 1 to position 3 +swap letter c with letter h +reverse positions 4 through 7 +swap letter f with letter h +rotate based on position of letter f +rotate based on position of letter g +reverse positions 3 through 4 +rotate left 7 steps +swap letter h with letter a +rotate based on position of letter e +rotate based on position of letter f +rotate based on position of letter g +move position 5 to position 0 +rotate based on position of letter c +reverse positions 3 through 6 +rotate right 4 steps +move position 1 to position 2 +reverse positions 3 through 6 +swap letter g with letter a +rotate based on position of letter d +rotate based on position of letter a +swap position 0 with position 7 +rotate left 7 steps +rotate right 2 steps +rotate right 6 steps +rotate based on position of letter b +rotate right 2 steps +swap position 7 with position 4 +rotate left 4 steps +rotate left 3 steps +swap position 2 with position 7 +move position 5 to position 4 +rotate right 3 steps +rotate based on position of letter g +move position 1 to position 2 +swap position 7 with position 0 +move position 4 to position 6 +move position 3 to position 0 +rotate based on position of letter f +swap letter g with letter d +swap position 1 with position 5 +reverse positions 0 through 2 +swap position 7 with position 3 +rotate based on position of letter g +swap letter c with letter a +rotate based on position of letter g +reverse positions 3 through 5 +move position 6 to position 3 +swap letter b with letter e +reverse positions 5 through 6 +move position 6 to position 7 +swap letter a with letter e +swap position 6 with position 2 +move position 4 to position 5 +rotate left 5 steps +swap letter a with letter d +swap letter e with letter g +swap position 3 with position 7 +reverse positions 0 through 5 +swap position 5 with position 7 +swap position 1 with position 7 +swap position 1 with position 7 +rotate right 7 steps +swap letter f with letter a +reverse positions 0 through 7 +rotate based on position of letter d +reverse positions 2 through 4 +swap position 7 with position 1 +swap letter a with letter h diff --git a/2016/aoc21/src/main.rs b/2016/aoc21/src/main.rs new file mode 100644 index 0000000..1366f1e --- /dev/null +++ b/2016/aoc21/src/main.rs @@ -0,0 +1,233 @@ +extern crate regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::VecDeque; + +use regex::Regex; + +fn main() { + let password = "abcdefgh".to_string(); + let program = read_file(); + let scrambled = scramble_password(password, &program); + println!("Scrambled password is {}", scrambled); + let unscrambled = unscramble_password(scrambled, &program); + println!("Which unscrambles to {}", unscrambled); + + let other_scrambled = "fbgdceah".to_string(); + let other_unscrambled = unscramble_password(other_scrambled, &program); + + println!("Decrypted easter bunny password is {}", other_unscrambled); +} + +fn read_file() -> Vec { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} + +fn scramble_password(password: String, program: &Vec) -> String { + let mut pass = password.chars().collect::>(); + + let instructions = scramble_instruction_set(); + + for line in program { + for &(ref reg, ref func) in &instructions { + let captures = reg.captures(line.as_ref()); + if captures.is_some() { + func(&mut pass, captures.unwrap()); + } + } + } + + pass.iter().cloned().collect() +} + +fn unscramble_password(password: String, program: &Vec) -> String { + let mut pass = password.chars().collect::>(); + + let instructions = unscramble_instruction_set(); + + let mut backwards_program = program.clone(); + backwards_program.reverse(); + for line in backwards_program { + for &(ref reg, ref func) in &instructions { + let captures = reg.captures(line.as_ref()); + if captures.is_some() { + func(&mut pass, captures.unwrap()); + } + } + } + + pass.iter().cloned().collect() +} + +fn scramble_instruction_set() -> Vec<(Regex, fn(&mut VecDeque, regex::Captures))> { + let mut instructions : Vec<(Regex, fn(&mut VecDeque, regex::Captures))> = Vec::new(); + instructions.push((Regex::new(r"swap position (\d+) with position (\d+)").unwrap(), swap_pos)); + instructions.push((Regex::new(r"swap letter ([a-z]) with letter ([a-z])").unwrap(), swap_let)); + instructions.push((Regex::new(r"rotate left (\d+) step").unwrap(), rotate_left)); + instructions.push((Regex::new(r"rotate right (\d+) step").unwrap(), rotate_right)); + instructions.push((Regex::new(r"rotate based on position of letter ([a-z])").unwrap(), rotate_pos)); + instructions.push((Regex::new(r"reverse positions (\d+) through (\d+)").unwrap(), reverse_sub)); + instructions.push((Regex::new(r"move position (\d+) to position (\d+)").unwrap(), move_pos)); + + instructions +} + +fn unscramble_instruction_set() -> Vec<(Regex, fn(&mut VecDeque, regex::Captures))> { + let mut instructions : Vec<(Regex, fn(&mut VecDeque, regex::Captures))> = Vec::new(); + instructions.push((Regex::new(r"swap position (\d+) with position (\d+)").unwrap(), swap_pos)); + instructions.push((Regex::new(r"swap letter ([a-z]) with letter ([a-z])").unwrap(), swap_let)); + instructions.push((Regex::new(r"rotate left (\d+) step").unwrap(), rotate_right)); + instructions.push((Regex::new(r"rotate right (\d+) step").unwrap(), rotate_left)); + instructions.push((Regex::new(r"rotate based on position of letter ([a-z])").unwrap(), undo_rotate_pos)); + instructions.push((Regex::new(r"reverse positions (\d+) through (\d+)").unwrap(), reverse_sub)); + instructions.push((Regex::new(r"move position (\d+) to position (\d+)").unwrap(), undo_move_pos)); + + instructions +} + +fn swap_pos(pass: &mut VecDeque, cap: regex::Captures) { + let src = cap.at(1).unwrap().parse::().unwrap(); + let dest = cap.at(2).unwrap().parse::().unwrap(); + pass.swap(src, dest); +} + +fn swap_let(pass: &mut VecDeque, cap: regex::Captures) { + let src = cap.at(1).unwrap().chars().next().unwrap(); + let dest = cap.at(2).unwrap().chars().next().unwrap(); + let src_position = pass.iter().position(|&c| c == src); + let dest_position = pass.iter().position(|&c| c == dest); + match (src_position, dest_position) { + (Some(src_pos), Some(dest_pos)) => { + pass.swap(src_pos, dest_pos); + }, + _ => {} + }; +} + +fn rotate_left(pass: &mut VecDeque, cap: regex::Captures) { + let steps = cap.at(1).unwrap().parse::().unwrap(); + for _ in 0..steps { + let c = pass.pop_front().unwrap(); + pass.push_back(c); + } +} + +fn rotate_right(pass: &mut VecDeque, cap: regex::Captures) { + let steps = cap.at(1).unwrap().parse::().unwrap(); + for _ in 0..steps { + let c = pass.pop_back().unwrap(); + pass.push_front(c); + } +} + +fn rotate_pos(pass: &mut VecDeque, cap: regex::Captures) { + let letter = cap.at(1).unwrap().chars().next().unwrap(); + let pos = pass.iter().position(|&c| c == letter).unwrap(); + let steps = 1 + pos + if pos >=4 { 1 } else { 0 }; + for _ in 0..steps { + let c = pass.pop_back().unwrap(); + pass.push_front(c); + } +} + +fn move_pos(pass: &mut VecDeque, cap: regex::Captures) { + let src = cap.at(1).unwrap().parse::().unwrap(); + let dest = cap.at(2).unwrap().parse::().unwrap(); + let c = pass.remove(src).unwrap(); + pass.insert(dest, c); +} + +fn reverse_sub(pass: &mut VecDeque, cap: regex::Captures) { + let mut start = cap.at(1).unwrap().parse::().unwrap(); + let mut end = cap.at(2).unwrap().parse::().unwrap(); + while start < end { + pass.swap(start, end); + start += 1; + end -= 1; + } +} + +fn undo_rotate_pos(pass: &mut VecDeque, cap: regex::Captures) { + let letter = cap.at(1).unwrap().chars().next().unwrap(); + let dest_pos = pass.iter().position(|&c| c == letter).unwrap(); + let mut pos = dest_pos; + + loop { + let c = pass.pop_front().unwrap(); + pass.push_back(c); + pos -= 1; + let steps = 1 + pos + if pos >=4 { 1 } else { 0 }; + if (pos + steps) % pass.len() == dest_pos { + break; + } + } +} + +fn undo_move_pos(pass: &mut VecDeque, cap: regex::Captures) { + let src = cap.at(1).unwrap().parse::().unwrap(); + let dest = cap.at(2).unwrap().parse::().unwrap(); + let c = pass.remove(dest).unwrap(); + pass.insert(src, c); +} + +#[test] +fn swap_pos_example() { + let instructions = vec!("swap position 4 with position 0".to_string()); + let password = "abcde".to_string(); + assert_eq!("ebcda".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn swap_let_example() { + let instructions = vec!("swap letter d with letter b".to_string()); + let password = "ebcda".to_string(); + assert_eq!("edcba".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn reverse_example() { + let instructions = vec!("reverse positions 0 through 4".to_string()); + let password = "edcba".to_string(); + assert_eq!("abcde".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn rotate_left_example() { + let instructions = vec!("rotate left 1 step".to_string()); + let password = "abcde".to_string(); + assert_eq!("bcdea".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn move_example() { + let instructions = vec!("move position 3 to position 0".to_string()); + let password = "bdeac".to_string(); + assert_eq!("abdec".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn rotate_pos_example_1() { + let instructions = vec!("rotate based on position of letter b".to_string()); + let password = "abdec".to_string(); + assert_eq!("ecabd".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn rotate_pos_example_2() { + let instructions = vec!("rotate based on position of letter d".to_string()); + let password = "ecabd".to_string(); + assert_eq!("decab".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn rotate_right_example() { + let instructions = vec!("rotate right 2 steps".to_string()); + let password = "decab".to_string(); + assert_eq!("abdec".to_string(), scramble_password(password, instructions)); +} diff --git a/2016/aoc22/Cargo.lock b/2016/aoc22/Cargo.lock new file mode 100644 index 0000000..81a7213 --- /dev/null +++ b/2016/aoc22/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc22" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc22/Cargo.toml b/2016/aoc22/Cargo.toml new file mode 100644 index 0000000..074ccd5 --- /dev/null +++ b/2016/aoc22/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc22" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] +regex = "0.1" \ No newline at end of file diff --git a/2016/aoc22/input.txt b/2016/aoc22/input.txt new file mode 100644 index 0000000..08e9843 --- /dev/null +++ b/2016/aoc22/input.txt @@ -0,0 +1,1017 @@ +root@ebhq-gridcenter# df -h +Filesystem Size Used Avail Use% +/dev/grid/node-x0-y0 89T 65T 24T 73% +/dev/grid/node-x0-y1 92T 64T 28T 69% +/dev/grid/node-x0-y2 85T 70T 15T 82% +/dev/grid/node-x0-y3 90T 64T 26T 71% +/dev/grid/node-x0-y4 86T 72T 14T 83% +/dev/grid/node-x0-y5 90T 68T 22T 75% +/dev/grid/node-x0-y6 94T 64T 30T 68% +/dev/grid/node-x0-y7 87T 72T 15T 82% +/dev/grid/node-x0-y8 90T 65T 25T 72% +/dev/grid/node-x0-y9 90T 65T 25T 72% +/dev/grid/node-x0-y10 89T 66T 23T 74% +/dev/grid/node-x0-y11 94T 70T 24T 74% +/dev/grid/node-x0-y12 90T 65T 25T 72% +/dev/grid/node-x0-y13 91T 72T 19T 79% +/dev/grid/node-x0-y14 85T 70T 15T 82% +/dev/grid/node-x0-y15 89T 70T 19T 78% +/dev/grid/node-x0-y16 90T 66T 24T 73% +/dev/grid/node-x0-y17 86T 64T 22T 74% +/dev/grid/node-x0-y18 88T 65T 23T 73% +/dev/grid/node-x0-y19 85T 68T 17T 80% +/dev/grid/node-x0-y20 93T 70T 23T 75% +/dev/grid/node-x0-y21 89T 64T 25T 71% +/dev/grid/node-x0-y22 87T 67T 20T 77% +/dev/grid/node-x0-y23 90T 73T 17T 81% +/dev/grid/node-x0-y24 92T 68T 24T 73% +/dev/grid/node-x0-y25 88T 69T 19T 78% +/dev/grid/node-x0-y26 88T 69T 19T 78% +/dev/grid/node-x0-y27 86T 72T 14T 83% +/dev/grid/node-x0-y28 92T 71T 21T 77% +/dev/grid/node-x1-y0 89T 73T 16T 82% +/dev/grid/node-x1-y1 89T 68T 21T 76% +/dev/grid/node-x1-y2 94T 70T 24T 74% +/dev/grid/node-x1-y3 90T 68T 22T 75% +/dev/grid/node-x1-y4 89T 67T 22T 75% +/dev/grid/node-x1-y5 90T 70T 20T 77% +/dev/grid/node-x1-y6 92T 71T 21T 77% +/dev/grid/node-x1-y7 92T 71T 21T 77% +/dev/grid/node-x1-y8 86T 73T 13T 84% +/dev/grid/node-x1-y9 87T 69T 18T 79% +/dev/grid/node-x1-y10 87T 66T 21T 75% +/dev/grid/node-x1-y11 85T 72T 13T 84% +/dev/grid/node-x1-y12 90T 69T 21T 76% +/dev/grid/node-x1-y13 89T 67T 22T 75% +/dev/grid/node-x1-y14 90T 65T 25T 72% +/dev/grid/node-x1-y15 94T 65T 29T 69% +/dev/grid/node-x1-y16 85T 70T 15T 82% +/dev/grid/node-x1-y17 93T 64T 29T 68% +/dev/grid/node-x1-y18 87T 68T 19T 78% +/dev/grid/node-x1-y19 85T 66T 19T 77% +/dev/grid/node-x1-y20 90T 72T 18T 80% +/dev/grid/node-x1-y21 89T 73T 16T 82% +/dev/grid/node-x1-y22 90T 65T 25T 72% +/dev/grid/node-x1-y23 91T 72T 19T 79% +/dev/grid/node-x1-y24 87T 70T 17T 80% +/dev/grid/node-x1-y25 91T 64T 27T 70% +/dev/grid/node-x1-y26 90T 64T 26T 71% +/dev/grid/node-x1-y27 93T 69T 24T 74% +/dev/grid/node-x1-y28 89T 65T 24T 73% +/dev/grid/node-x2-y0 89T 72T 17T 80% +/dev/grid/node-x2-y1 92T 69T 23T 75% +/dev/grid/node-x2-y2 91T 65T 26T 71% +/dev/grid/node-x2-y3 86T 73T 13T 84% +/dev/grid/node-x2-y4 90T 69T 21T 76% +/dev/grid/node-x2-y5 86T 68T 18T 79% +/dev/grid/node-x2-y6 91T 70T 21T 76% +/dev/grid/node-x2-y7 86T 64T 22T 74% +/dev/grid/node-x2-y8 88T 65T 23T 73% +/dev/grid/node-x2-y9 94T 73T 21T 77% +/dev/grid/node-x2-y10 89T 71T 18T 79% +/dev/grid/node-x2-y11 88T 64T 24T 72% +/dev/grid/node-x2-y12 92T 71T 21T 77% +/dev/grid/node-x2-y13 86T 69T 17T 80% +/dev/grid/node-x2-y14 87T 69T 18T 79% +/dev/grid/node-x2-y15 93T 71T 22T 76% +/dev/grid/node-x2-y16 91T 65T 26T 71% +/dev/grid/node-x2-y17 93T 65T 28T 69% +/dev/grid/node-x2-y18 86T 69T 17T 80% +/dev/grid/node-x2-y19 87T 69T 18T 79% +/dev/grid/node-x2-y20 86T 72T 14T 83% +/dev/grid/node-x2-y21 86T 73T 13T 84% +/dev/grid/node-x2-y22 505T 499T 6T 98% +/dev/grid/node-x2-y23 89T 65T 24T 73% +/dev/grid/node-x2-y24 92T 64T 28T 69% +/dev/grid/node-x2-y25 94T 64T 30T 68% +/dev/grid/node-x2-y26 87T 73T 14T 83% +/dev/grid/node-x2-y27 87T 69T 18T 79% +/dev/grid/node-x2-y28 94T 71T 23T 75% +/dev/grid/node-x3-y0 88T 66T 22T 75% +/dev/grid/node-x3-y1 91T 69T 22T 75% +/dev/grid/node-x3-y2 91T 69T 22T 75% +/dev/grid/node-x3-y3 86T 67T 19T 77% +/dev/grid/node-x3-y4 90T 64T 26T 71% +/dev/grid/node-x3-y5 89T 72T 17T 80% +/dev/grid/node-x3-y6 87T 66T 21T 75% +/dev/grid/node-x3-y7 90T 68T 22T 75% +/dev/grid/node-x3-y8 91T 66T 25T 72% +/dev/grid/node-x3-y9 89T 64T 25T 71% +/dev/grid/node-x3-y10 92T 67T 25T 72% +/dev/grid/node-x3-y11 86T 64T 22T 74% +/dev/grid/node-x3-y12 94T 65T 29T 69% +/dev/grid/node-x3-y13 91T 70T 21T 76% +/dev/grid/node-x3-y14 89T 72T 17T 80% +/dev/grid/node-x3-y15 89T 64T 25T 71% +/dev/grid/node-x3-y16 85T 73T 12T 85% +/dev/grid/node-x3-y17 89T 65T 24T 73% +/dev/grid/node-x3-y18 88T 71T 17T 80% +/dev/grid/node-x3-y19 89T 69T 20T 77% +/dev/grid/node-x3-y20 91T 68T 23T 74% +/dev/grid/node-x3-y21 90T 72T 18T 80% +/dev/grid/node-x3-y22 505T 498T 7T 98% +/dev/grid/node-x3-y23 85T 65T 20T 76% +/dev/grid/node-x3-y24 94T 72T 22T 76% +/dev/grid/node-x3-y25 90T 68T 22T 75% +/dev/grid/node-x3-y26 90T 65T 25T 72% +/dev/grid/node-x3-y27 87T 66T 21T 75% +/dev/grid/node-x3-y28 90T 66T 24T 73% +/dev/grid/node-x4-y0 86T 67T 19T 77% +/dev/grid/node-x4-y1 92T 67T 25T 72% +/dev/grid/node-x4-y2 91T 71T 20T 78% +/dev/grid/node-x4-y3 94T 69T 25T 73% +/dev/grid/node-x4-y4 90T 64T 26T 71% +/dev/grid/node-x4-y5 93T 70T 23T 75% +/dev/grid/node-x4-y6 93T 67T 26T 72% +/dev/grid/node-x4-y7 91T 71T 20T 78% +/dev/grid/node-x4-y8 90T 70T 20T 77% +/dev/grid/node-x4-y9 89T 66T 23T 74% +/dev/grid/node-x4-y10 94T 64T 30T 68% +/dev/grid/node-x4-y11 94T 70T 24T 74% +/dev/grid/node-x4-y12 89T 69T 20T 77% +/dev/grid/node-x4-y13 90T 72T 18T 80% +/dev/grid/node-x4-y14 88T 69T 19T 78% +/dev/grid/node-x4-y15 85T 64T 21T 75% +/dev/grid/node-x4-y16 86T 71T 15T 82% +/dev/grid/node-x4-y17 90T 65T 25T 72% +/dev/grid/node-x4-y18 88T 65T 23T 73% +/dev/grid/node-x4-y19 91T 71T 20T 78% +/dev/grid/node-x4-y20 94T 71T 23T 75% +/dev/grid/node-x4-y21 91T 65T 26T 71% +/dev/grid/node-x4-y22 510T 491T 19T 96% +/dev/grid/node-x4-y23 86T 72T 14T 83% +/dev/grid/node-x4-y24 91T 69T 22T 75% +/dev/grid/node-x4-y25 93T 64T 29T 68% +/dev/grid/node-x4-y26 92T 65T 27T 70% +/dev/grid/node-x4-y27 91T 67T 24T 73% +/dev/grid/node-x4-y28 93T 66T 27T 70% +/dev/grid/node-x5-y0 85T 70T 15T 82% +/dev/grid/node-x5-y1 90T 71T 19T 78% +/dev/grid/node-x5-y2 94T 68T 26T 72% +/dev/grid/node-x5-y3 88T 73T 15T 82% +/dev/grid/node-x5-y4 85T 71T 14T 83% +/dev/grid/node-x5-y5 92T 67T 25T 72% +/dev/grid/node-x5-y6 92T 68T 24T 73% +/dev/grid/node-x5-y7 86T 69T 17T 80% +/dev/grid/node-x5-y8 90T 64T 26T 71% +/dev/grid/node-x5-y9 88T 71T 17T 80% +/dev/grid/node-x5-y10 91T 65T 26T 71% +/dev/grid/node-x5-y11 92T 65T 27T 70% +/dev/grid/node-x5-y12 87T 66T 21T 75% +/dev/grid/node-x5-y13 87T 71T 16T 81% +/dev/grid/node-x5-y14 90T 67T 23T 74% +/dev/grid/node-x5-y15 92T 70T 22T 76% +/dev/grid/node-x5-y16 94T 66T 28T 70% +/dev/grid/node-x5-y17 88T 68T 20T 77% +/dev/grid/node-x5-y18 86T 69T 17T 80% +/dev/grid/node-x5-y19 94T 66T 28T 70% +/dev/grid/node-x5-y20 90T 69T 21T 76% +/dev/grid/node-x5-y21 88T 71T 17T 80% +/dev/grid/node-x5-y22 509T 496T 13T 97% +/dev/grid/node-x5-y23 87T 67T 20T 77% +/dev/grid/node-x5-y24 91T 64T 27T 70% +/dev/grid/node-x5-y25 93T 69T 24T 74% +/dev/grid/node-x5-y26 93T 73T 20T 78% +/dev/grid/node-x5-y27 88T 70T 18T 79% +/dev/grid/node-x5-y28 87T 73T 14T 83% +/dev/grid/node-x6-y0 87T 65T 22T 74% +/dev/grid/node-x6-y1 85T 64T 21T 75% +/dev/grid/node-x6-y2 91T 72T 19T 79% +/dev/grid/node-x6-y3 90T 64T 26T 71% +/dev/grid/node-x6-y4 93T 66T 27T 70% +/dev/grid/node-x6-y5 93T 67T 26T 72% +/dev/grid/node-x6-y6 89T 64T 25T 71% +/dev/grid/node-x6-y7 89T 64T 25T 71% +/dev/grid/node-x6-y8 86T 72T 14T 83% +/dev/grid/node-x6-y9 87T 68T 19T 78% +/dev/grid/node-x6-y10 94T 73T 21T 77% +/dev/grid/node-x6-y11 88T 65T 23T 73% +/dev/grid/node-x6-y12 88T 70T 18T 79% +/dev/grid/node-x6-y13 93T 66T 27T 70% +/dev/grid/node-x6-y14 87T 68T 19T 78% +/dev/grid/node-x6-y15 87T 68T 19T 78% +/dev/grid/node-x6-y16 87T 73T 14T 83% +/dev/grid/node-x6-y17 87T 70T 17T 80% +/dev/grid/node-x6-y18 87T 69T 18T 79% +/dev/grid/node-x6-y19 85T 67T 18T 78% +/dev/grid/node-x6-y20 91T 71T 20T 78% +/dev/grid/node-x6-y21 86T 72T 14T 83% +/dev/grid/node-x6-y22 503T 497T 6T 98% +/dev/grid/node-x6-y23 93T 72T 21T 77% +/dev/grid/node-x6-y24 91T 72T 19T 79% +/dev/grid/node-x6-y25 85T 67T 18T 78% +/dev/grid/node-x6-y26 86T 65T 21T 75% +/dev/grid/node-x6-y27 92T 67T 25T 72% +/dev/grid/node-x6-y28 87T 72T 15T 82% +/dev/grid/node-x7-y0 88T 67T 21T 76% +/dev/grid/node-x7-y1 85T 64T 21T 75% +/dev/grid/node-x7-y2 90T 67T 23T 74% +/dev/grid/node-x7-y3 87T 65T 22T 74% +/dev/grid/node-x7-y4 92T 70T 22T 76% +/dev/grid/node-x7-y5 89T 67T 22T 75% +/dev/grid/node-x7-y6 90T 65T 25T 72% +/dev/grid/node-x7-y7 88T 66T 22T 75% +/dev/grid/node-x7-y8 88T 65T 23T 73% +/dev/grid/node-x7-y9 93T 72T 21T 77% +/dev/grid/node-x7-y10 91T 70T 21T 76% +/dev/grid/node-x7-y11 90T 70T 20T 77% +/dev/grid/node-x7-y12 89T 68T 21T 76% +/dev/grid/node-x7-y13 91T 65T 26T 71% +/dev/grid/node-x7-y14 90T 65T 25T 72% +/dev/grid/node-x7-y15 85T 65T 20T 76% +/dev/grid/node-x7-y16 91T 65T 26T 71% +/dev/grid/node-x7-y17 89T 72T 17T 80% +/dev/grid/node-x7-y18 88T 65T 23T 73% +/dev/grid/node-x7-y19 94T 72T 22T 76% +/dev/grid/node-x7-y20 85T 73T 12T 85% +/dev/grid/node-x7-y21 85T 68T 17T 80% +/dev/grid/node-x7-y22 507T 497T 10T 98% +/dev/grid/node-x7-y23 91T 69T 22T 75% +/dev/grid/node-x7-y24 93T 68T 25T 73% +/dev/grid/node-x7-y25 90T 72T 18T 80% +/dev/grid/node-x7-y26 91T 70T 21T 76% +/dev/grid/node-x7-y27 93T 65T 28T 69% +/dev/grid/node-x7-y28 91T 64T 27T 70% +/dev/grid/node-x8-y0 86T 71T 15T 82% +/dev/grid/node-x8-y1 88T 69T 19T 78% +/dev/grid/node-x8-y2 90T 64T 26T 71% +/dev/grid/node-x8-y3 92T 67T 25T 72% +/dev/grid/node-x8-y4 86T 71T 15T 82% +/dev/grid/node-x8-y5 88T 68T 20T 77% +/dev/grid/node-x8-y6 90T 71T 19T 78% +/dev/grid/node-x8-y7 86T 70T 16T 81% +/dev/grid/node-x8-y8 87T 72T 15T 82% +/dev/grid/node-x8-y9 93T 67T 26T 72% +/dev/grid/node-x8-y10 93T 65T 28T 69% +/dev/grid/node-x8-y11 94T 66T 28T 70% +/dev/grid/node-x8-y12 92T 70T 22T 76% +/dev/grid/node-x8-y13 91T 68T 23T 74% +/dev/grid/node-x8-y14 93T 72T 21T 77% +/dev/grid/node-x8-y15 90T 71T 19T 78% +/dev/grid/node-x8-y16 87T 73T 14T 83% +/dev/grid/node-x8-y17 86T 73T 13T 84% +/dev/grid/node-x8-y18 89T 68T 21T 76% +/dev/grid/node-x8-y19 88T 67T 21T 76% +/dev/grid/node-x8-y20 87T 64T 23T 73% +/dev/grid/node-x8-y21 90T 71T 19T 78% +/dev/grid/node-x8-y22 505T 497T 8T 98% +/dev/grid/node-x8-y23 92T 72T 20T 78% +/dev/grid/node-x8-y24 86T 70T 16T 81% +/dev/grid/node-x8-y25 92T 69T 23T 75% +/dev/grid/node-x8-y26 93T 71T 22T 76% +/dev/grid/node-x8-y27 91T 70T 21T 76% +/dev/grid/node-x8-y28 92T 0T 92T 0% +/dev/grid/node-x9-y0 87T 69T 18T 79% +/dev/grid/node-x9-y1 90T 69T 21T 76% +/dev/grid/node-x9-y2 91T 69T 22T 75% +/dev/grid/node-x9-y3 92T 71T 21T 77% +/dev/grid/node-x9-y4 91T 66T 25T 72% +/dev/grid/node-x9-y5 92T 65T 27T 70% +/dev/grid/node-x9-y6 87T 71T 16T 81% +/dev/grid/node-x9-y7 88T 68T 20T 77% +/dev/grid/node-x9-y8 85T 67T 18T 78% +/dev/grid/node-x9-y9 86T 65T 21T 75% +/dev/grid/node-x9-y10 88T 64T 24T 72% +/dev/grid/node-x9-y11 90T 70T 20T 77% +/dev/grid/node-x9-y12 88T 64T 24T 72% +/dev/grid/node-x9-y13 85T 69T 16T 81% +/dev/grid/node-x9-y14 85T 71T 14T 83% +/dev/grid/node-x9-y15 92T 70T 22T 76% +/dev/grid/node-x9-y16 92T 65T 27T 70% +/dev/grid/node-x9-y17 89T 66T 23T 74% +/dev/grid/node-x9-y18 85T 69T 16T 81% +/dev/grid/node-x9-y19 94T 69T 25T 73% +/dev/grid/node-x9-y20 92T 66T 26T 71% +/dev/grid/node-x9-y21 88T 70T 18T 79% +/dev/grid/node-x9-y22 507T 498T 9T 98% +/dev/grid/node-x9-y23 86T 68T 18T 79% +/dev/grid/node-x9-y24 90T 69T 21T 76% +/dev/grid/node-x9-y25 87T 65T 22T 74% +/dev/grid/node-x9-y26 86T 71T 15T 82% +/dev/grid/node-x9-y27 85T 65T 20T 76% +/dev/grid/node-x9-y28 87T 70T 17T 80% +/dev/grid/node-x10-y0 91T 64T 27T 70% +/dev/grid/node-x10-y1 92T 65T 27T 70% +/dev/grid/node-x10-y2 89T 66T 23T 74% +/dev/grid/node-x10-y3 94T 64T 30T 68% +/dev/grid/node-x10-y4 92T 69T 23T 75% +/dev/grid/node-x10-y5 91T 64T 27T 70% +/dev/grid/node-x10-y6 86T 72T 14T 83% +/dev/grid/node-x10-y7 87T 66T 21T 75% +/dev/grid/node-x10-y8 90T 73T 17T 81% +/dev/grid/node-x10-y9 91T 73T 18T 80% +/dev/grid/node-x10-y10 94T 71T 23T 75% +/dev/grid/node-x10-y11 94T 71T 23T 75% +/dev/grid/node-x10-y12 92T 67T 25T 72% +/dev/grid/node-x10-y13 92T 66T 26T 71% +/dev/grid/node-x10-y14 86T 66T 20T 76% +/dev/grid/node-x10-y15 93T 73T 20T 78% +/dev/grid/node-x10-y16 92T 66T 26T 71% +/dev/grid/node-x10-y17 92T 71T 21T 77% +/dev/grid/node-x10-y18 86T 65T 21T 75% +/dev/grid/node-x10-y19 92T 68T 24T 73% +/dev/grid/node-x10-y20 87T 66T 21T 75% +/dev/grid/node-x10-y21 90T 65T 25T 72% +/dev/grid/node-x10-y22 501T 494T 7T 98% +/dev/grid/node-x10-y23 87T 66T 21T 75% +/dev/grid/node-x10-y24 85T 69T 16T 81% +/dev/grid/node-x10-y25 90T 72T 18T 80% +/dev/grid/node-x10-y26 94T 69T 25T 73% +/dev/grid/node-x10-y27 86T 69T 17T 80% +/dev/grid/node-x10-y28 90T 68T 22T 75% +/dev/grid/node-x11-y0 90T 65T 25T 72% +/dev/grid/node-x11-y1 90T 70T 20T 77% +/dev/grid/node-x11-y2 94T 69T 25T 73% +/dev/grid/node-x11-y3 92T 72T 20T 78% +/dev/grid/node-x11-y4 93T 67T 26T 72% +/dev/grid/node-x11-y5 89T 70T 19T 78% +/dev/grid/node-x11-y6 87T 66T 21T 75% +/dev/grid/node-x11-y7 92T 70T 22T 76% +/dev/grid/node-x11-y8 93T 71T 22T 76% +/dev/grid/node-x11-y9 93T 68T 25T 73% +/dev/grid/node-x11-y10 85T 65T 20T 76% +/dev/grid/node-x11-y11 90T 72T 18T 80% +/dev/grid/node-x11-y12 89T 65T 24T 73% +/dev/grid/node-x11-y13 86T 69T 17T 80% +/dev/grid/node-x11-y14 93T 73T 20T 78% +/dev/grid/node-x11-y15 93T 68T 25T 73% +/dev/grid/node-x11-y16 92T 72T 20T 78% +/dev/grid/node-x11-y17 85T 71T 14T 83% +/dev/grid/node-x11-y18 90T 68T 22T 75% +/dev/grid/node-x11-y19 90T 69T 21T 76% +/dev/grid/node-x11-y20 85T 73T 12T 85% +/dev/grid/node-x11-y21 93T 68T 25T 73% +/dev/grid/node-x11-y22 504T 491T 13T 97% +/dev/grid/node-x11-y23 87T 69T 18T 79% +/dev/grid/node-x11-y24 88T 65T 23T 73% +/dev/grid/node-x11-y25 94T 67T 27T 71% +/dev/grid/node-x11-y26 92T 73T 19T 79% +/dev/grid/node-x11-y27 87T 64T 23T 73% +/dev/grid/node-x11-y28 89T 70T 19T 78% +/dev/grid/node-x12-y0 88T 73T 15T 82% +/dev/grid/node-x12-y1 90T 68T 22T 75% +/dev/grid/node-x12-y2 85T 65T 20T 76% +/dev/grid/node-x12-y3 94T 71T 23T 75% +/dev/grid/node-x12-y4 86T 68T 18T 79% +/dev/grid/node-x12-y5 89T 67T 22T 75% +/dev/grid/node-x12-y6 89T 71T 18T 79% +/dev/grid/node-x12-y7 85T 68T 17T 80% +/dev/grid/node-x12-y8 94T 68T 26T 72% +/dev/grid/node-x12-y9 91T 71T 20T 78% +/dev/grid/node-x12-y10 91T 65T 26T 71% +/dev/grid/node-x12-y11 91T 71T 20T 78% +/dev/grid/node-x12-y12 85T 65T 20T 76% +/dev/grid/node-x12-y13 89T 71T 18T 79% +/dev/grid/node-x12-y14 85T 70T 15T 82% +/dev/grid/node-x12-y15 92T 73T 19T 79% +/dev/grid/node-x12-y16 94T 66T 28T 70% +/dev/grid/node-x12-y17 90T 72T 18T 80% +/dev/grid/node-x12-y18 90T 64T 26T 71% +/dev/grid/node-x12-y19 87T 72T 15T 82% +/dev/grid/node-x12-y20 89T 70T 19T 78% +/dev/grid/node-x12-y21 90T 66T 24T 73% +/dev/grid/node-x12-y22 506T 497T 9T 98% +/dev/grid/node-x12-y23 90T 67T 23T 74% +/dev/grid/node-x12-y24 85T 67T 18T 78% +/dev/grid/node-x12-y25 85T 72T 13T 84% +/dev/grid/node-x12-y26 94T 71T 23T 75% +/dev/grid/node-x12-y27 92T 64T 28T 69% +/dev/grid/node-x12-y28 90T 65T 25T 72% +/dev/grid/node-x13-y0 85T 72T 13T 84% +/dev/grid/node-x13-y1 93T 67T 26T 72% +/dev/grid/node-x13-y2 94T 64T 30T 68% +/dev/grid/node-x13-y3 85T 71T 14T 83% +/dev/grid/node-x13-y4 93T 71T 22T 76% +/dev/grid/node-x13-y5 85T 67T 18T 78% +/dev/grid/node-x13-y6 91T 68T 23T 74% +/dev/grid/node-x13-y7 92T 66T 26T 71% +/dev/grid/node-x13-y8 88T 66T 22T 75% +/dev/grid/node-x13-y9 91T 72T 19T 79% +/dev/grid/node-x13-y10 89T 72T 17T 80% +/dev/grid/node-x13-y11 90T 68T 22T 75% +/dev/grid/node-x13-y12 89T 65T 24T 73% +/dev/grid/node-x13-y13 90T 69T 21T 76% +/dev/grid/node-x13-y14 86T 64T 22T 74% +/dev/grid/node-x13-y15 91T 65T 26T 71% +/dev/grid/node-x13-y16 86T 72T 14T 83% +/dev/grid/node-x13-y17 85T 71T 14T 83% +/dev/grid/node-x13-y18 85T 68T 17T 80% +/dev/grid/node-x13-y19 91T 69T 22T 75% +/dev/grid/node-x13-y20 87T 70T 17T 80% +/dev/grid/node-x13-y21 94T 65T 29T 69% +/dev/grid/node-x13-y22 503T 492T 11T 97% +/dev/grid/node-x13-y23 91T 70T 21T 76% +/dev/grid/node-x13-y24 91T 66T 25T 72% +/dev/grid/node-x13-y25 88T 64T 24T 72% +/dev/grid/node-x13-y26 87T 70T 17T 80% +/dev/grid/node-x13-y27 91T 66T 25T 72% +/dev/grid/node-x13-y28 86T 68T 18T 79% +/dev/grid/node-x14-y0 85T 67T 18T 78% +/dev/grid/node-x14-y1 87T 70T 17T 80% +/dev/grid/node-x14-y2 92T 67T 25T 72% +/dev/grid/node-x14-y3 87T 64T 23T 73% +/dev/grid/node-x14-y4 92T 73T 19T 79% +/dev/grid/node-x14-y5 86T 66T 20T 76% +/dev/grid/node-x14-y6 89T 69T 20T 77% +/dev/grid/node-x14-y7 89T 67T 22T 75% +/dev/grid/node-x14-y8 89T 70T 19T 78% +/dev/grid/node-x14-y9 91T 70T 21T 76% +/dev/grid/node-x14-y10 87T 70T 17T 80% +/dev/grid/node-x14-y11 86T 66T 20T 76% +/dev/grid/node-x14-y12 92T 67T 25T 72% +/dev/grid/node-x14-y13 87T 68T 19T 78% +/dev/grid/node-x14-y14 94T 65T 29T 69% +/dev/grid/node-x14-y15 93T 68T 25T 73% +/dev/grid/node-x14-y16 87T 66T 21T 75% +/dev/grid/node-x14-y17 90T 70T 20T 77% +/dev/grid/node-x14-y18 90T 66T 24T 73% +/dev/grid/node-x14-y19 89T 71T 18T 79% +/dev/grid/node-x14-y20 85T 72T 13T 84% +/dev/grid/node-x14-y21 90T 66T 24T 73% +/dev/grid/node-x14-y22 504T 491T 13T 97% +/dev/grid/node-x14-y23 90T 71T 19T 78% +/dev/grid/node-x14-y24 94T 68T 26T 72% +/dev/grid/node-x14-y25 91T 73T 18T 80% +/dev/grid/node-x14-y26 88T 68T 20T 77% +/dev/grid/node-x14-y27 86T 66T 20T 76% +/dev/grid/node-x14-y28 92T 70T 22T 76% +/dev/grid/node-x15-y0 91T 73T 18T 80% +/dev/grid/node-x15-y1 85T 65T 20T 76% +/dev/grid/node-x15-y2 88T 67T 21T 76% +/dev/grid/node-x15-y3 91T 66T 25T 72% +/dev/grid/node-x15-y4 92T 65T 27T 70% +/dev/grid/node-x15-y5 94T 66T 28T 70% +/dev/grid/node-x15-y6 90T 67T 23T 74% +/dev/grid/node-x15-y7 91T 72T 19T 79% +/dev/grid/node-x15-y8 88T 65T 23T 73% +/dev/grid/node-x15-y9 90T 66T 24T 73% +/dev/grid/node-x15-y10 86T 69T 17T 80% +/dev/grid/node-x15-y11 89T 67T 22T 75% +/dev/grid/node-x15-y12 86T 67T 19T 77% +/dev/grid/node-x15-y13 85T 65T 20T 76% +/dev/grid/node-x15-y14 92T 68T 24T 73% +/dev/grid/node-x15-y15 85T 73T 12T 85% +/dev/grid/node-x15-y16 86T 65T 21T 75% +/dev/grid/node-x15-y17 92T 69T 23T 75% +/dev/grid/node-x15-y18 87T 72T 15T 82% +/dev/grid/node-x15-y19 92T 64T 28T 69% +/dev/grid/node-x15-y20 92T 71T 21T 77% +/dev/grid/node-x15-y21 86T 71T 15T 82% +/dev/grid/node-x15-y22 501T 494T 7T 98% +/dev/grid/node-x15-y23 93T 65T 28T 69% +/dev/grid/node-x15-y24 85T 71T 14T 83% +/dev/grid/node-x15-y25 90T 66T 24T 73% +/dev/grid/node-x15-y26 87T 67T 20T 77% +/dev/grid/node-x15-y27 90T 70T 20T 77% +/dev/grid/node-x15-y28 89T 71T 18T 79% +/dev/grid/node-x16-y0 91T 72T 19T 79% +/dev/grid/node-x16-y1 91T 65T 26T 71% +/dev/grid/node-x16-y2 90T 64T 26T 71% +/dev/grid/node-x16-y3 87T 67T 20T 77% +/dev/grid/node-x16-y4 86T 66T 20T 76% +/dev/grid/node-x16-y5 88T 73T 15T 82% +/dev/grid/node-x16-y6 85T 68T 17T 80% +/dev/grid/node-x16-y7 86T 66T 20T 76% +/dev/grid/node-x16-y8 91T 69T 22T 75% +/dev/grid/node-x16-y9 87T 66T 21T 75% +/dev/grid/node-x16-y10 86T 72T 14T 83% +/dev/grid/node-x16-y11 90T 66T 24T 73% +/dev/grid/node-x16-y12 85T 72T 13T 84% +/dev/grid/node-x16-y13 88T 71T 17T 80% +/dev/grid/node-x16-y14 90T 70T 20T 77% +/dev/grid/node-x16-y15 91T 71T 20T 78% +/dev/grid/node-x16-y16 86T 70T 16T 81% +/dev/grid/node-x16-y17 86T 73T 13T 84% +/dev/grid/node-x16-y18 88T 66T 22T 75% +/dev/grid/node-x16-y19 92T 67T 25T 72% +/dev/grid/node-x16-y20 92T 73T 19T 79% +/dev/grid/node-x16-y21 94T 71T 23T 75% +/dev/grid/node-x16-y22 507T 498T 9T 98% +/dev/grid/node-x16-y23 92T 72T 20T 78% +/dev/grid/node-x16-y24 85T 72T 13T 84% +/dev/grid/node-x16-y25 88T 66T 22T 75% +/dev/grid/node-x16-y26 92T 67T 25T 72% +/dev/grid/node-x16-y27 94T 64T 30T 68% +/dev/grid/node-x16-y28 86T 66T 20T 76% +/dev/grid/node-x17-y0 88T 65T 23T 73% +/dev/grid/node-x17-y1 85T 66T 19T 77% +/dev/grid/node-x17-y2 88T 70T 18T 79% +/dev/grid/node-x17-y3 89T 68T 21T 76% +/dev/grid/node-x17-y4 89T 68T 21T 76% +/dev/grid/node-x17-y5 94T 69T 25T 73% +/dev/grid/node-x17-y6 85T 66T 19T 77% +/dev/grid/node-x17-y7 93T 67T 26T 72% +/dev/grid/node-x17-y8 87T 67T 20T 77% +/dev/grid/node-x17-y9 94T 67T 27T 71% +/dev/grid/node-x17-y10 92T 64T 28T 69% +/dev/grid/node-x17-y11 94T 68T 26T 72% +/dev/grid/node-x17-y12 85T 66T 19T 77% +/dev/grid/node-x17-y13 87T 68T 19T 78% +/dev/grid/node-x17-y14 89T 65T 24T 73% +/dev/grid/node-x17-y15 94T 69T 25T 73% +/dev/grid/node-x17-y16 90T 69T 21T 76% +/dev/grid/node-x17-y17 85T 66T 19T 77% +/dev/grid/node-x17-y18 91T 68T 23T 74% +/dev/grid/node-x17-y19 89T 73T 16T 82% +/dev/grid/node-x17-y20 94T 66T 28T 70% +/dev/grid/node-x17-y21 91T 68T 23T 74% +/dev/grid/node-x17-y22 509T 499T 10T 98% +/dev/grid/node-x17-y23 89T 69T 20T 77% +/dev/grid/node-x17-y24 91T 64T 27T 70% +/dev/grid/node-x17-y25 89T 66T 23T 74% +/dev/grid/node-x17-y26 91T 72T 19T 79% +/dev/grid/node-x17-y27 93T 69T 24T 74% +/dev/grid/node-x17-y28 87T 73T 14T 83% +/dev/grid/node-x18-y0 85T 69T 16T 81% +/dev/grid/node-x18-y1 90T 65T 25T 72% +/dev/grid/node-x18-y2 85T 69T 16T 81% +/dev/grid/node-x18-y3 89T 66T 23T 74% +/dev/grid/node-x18-y4 88T 69T 19T 78% +/dev/grid/node-x18-y5 90T 70T 20T 77% +/dev/grid/node-x18-y6 90T 69T 21T 76% +/dev/grid/node-x18-y7 92T 67T 25T 72% +/dev/grid/node-x18-y8 85T 64T 21T 75% +/dev/grid/node-x18-y9 86T 68T 18T 79% +/dev/grid/node-x18-y10 89T 66T 23T 74% +/dev/grid/node-x18-y11 87T 70T 17T 80% +/dev/grid/node-x18-y12 93T 68T 25T 73% +/dev/grid/node-x18-y13 89T 67T 22T 75% +/dev/grid/node-x18-y14 91T 66T 25T 72% +/dev/grid/node-x18-y15 91T 65T 26T 71% +/dev/grid/node-x18-y16 90T 66T 24T 73% +/dev/grid/node-x18-y17 85T 69T 16T 81% +/dev/grid/node-x18-y18 93T 70T 23T 75% +/dev/grid/node-x18-y19 93T 64T 29T 68% +/dev/grid/node-x18-y20 87T 70T 17T 80% +/dev/grid/node-x18-y21 87T 73T 14T 83% +/dev/grid/node-x18-y22 503T 498T 5T 99% +/dev/grid/node-x18-y23 92T 68T 24T 73% +/dev/grid/node-x18-y24 88T 68T 20T 77% +/dev/grid/node-x18-y25 94T 64T 30T 68% +/dev/grid/node-x18-y26 93T 66T 27T 70% +/dev/grid/node-x18-y27 90T 67T 23T 74% +/dev/grid/node-x18-y28 89T 67T 22T 75% +/dev/grid/node-x19-y0 91T 67T 24T 73% +/dev/grid/node-x19-y1 87T 64T 23T 73% +/dev/grid/node-x19-y2 94T 64T 30T 68% +/dev/grid/node-x19-y3 90T 71T 19T 78% +/dev/grid/node-x19-y4 88T 66T 22T 75% +/dev/grid/node-x19-y5 93T 69T 24T 74% +/dev/grid/node-x19-y6 89T 73T 16T 82% +/dev/grid/node-x19-y7 91T 68T 23T 74% +/dev/grid/node-x19-y8 89T 67T 22T 75% +/dev/grid/node-x19-y9 90T 72T 18T 80% +/dev/grid/node-x19-y10 93T 73T 20T 78% +/dev/grid/node-x19-y11 88T 70T 18T 79% +/dev/grid/node-x19-y12 89T 67T 22T 75% +/dev/grid/node-x19-y13 91T 65T 26T 71% +/dev/grid/node-x19-y14 92T 67T 25T 72% +/dev/grid/node-x19-y15 88T 69T 19T 78% +/dev/grid/node-x19-y16 93T 72T 21T 77% +/dev/grid/node-x19-y17 88T 64T 24T 72% +/dev/grid/node-x19-y18 88T 67T 21T 76% +/dev/grid/node-x19-y19 85T 65T 20T 76% +/dev/grid/node-x19-y20 90T 68T 22T 75% +/dev/grid/node-x19-y21 88T 65T 23T 73% +/dev/grid/node-x19-y22 508T 498T 10T 98% +/dev/grid/node-x19-y23 93T 65T 28T 69% +/dev/grid/node-x19-y24 85T 67T 18T 78% +/dev/grid/node-x19-y25 92T 65T 27T 70% +/dev/grid/node-x19-y26 92T 67T 25T 72% +/dev/grid/node-x19-y27 91T 65T 26T 71% +/dev/grid/node-x19-y28 91T 73T 18T 80% +/dev/grid/node-x20-y0 86T 64T 22T 74% +/dev/grid/node-x20-y1 89T 68T 21T 76% +/dev/grid/node-x20-y2 92T 71T 21T 77% +/dev/grid/node-x20-y3 86T 68T 18T 79% +/dev/grid/node-x20-y4 86T 66T 20T 76% +/dev/grid/node-x20-y5 94T 66T 28T 70% +/dev/grid/node-x20-y6 91T 73T 18T 80% +/dev/grid/node-x20-y7 87T 68T 19T 78% +/dev/grid/node-x20-y8 94T 66T 28T 70% +/dev/grid/node-x20-y9 89T 64T 25T 71% +/dev/grid/node-x20-y10 92T 68T 24T 73% +/dev/grid/node-x20-y11 94T 66T 28T 70% +/dev/grid/node-x20-y12 88T 73T 15T 82% +/dev/grid/node-x20-y13 91T 67T 24T 73% +/dev/grid/node-x20-y14 93T 66T 27T 70% +/dev/grid/node-x20-y15 88T 72T 16T 81% +/dev/grid/node-x20-y16 93T 68T 25T 73% +/dev/grid/node-x20-y17 91T 68T 23T 74% +/dev/grid/node-x20-y18 87T 73T 14T 83% +/dev/grid/node-x20-y19 94T 70T 24T 74% +/dev/grid/node-x20-y20 88T 67T 21T 76% +/dev/grid/node-x20-y21 88T 68T 20T 77% +/dev/grid/node-x20-y22 503T 499T 4T 99% +/dev/grid/node-x20-y23 88T 67T 21T 76% +/dev/grid/node-x20-y24 92T 68T 24T 73% +/dev/grid/node-x20-y25 85T 69T 16T 81% +/dev/grid/node-x20-y26 87T 70T 17T 80% +/dev/grid/node-x20-y27 86T 70T 16T 81% +/dev/grid/node-x20-y28 93T 65T 28T 69% +/dev/grid/node-x21-y0 90T 67T 23T 74% +/dev/grid/node-x21-y1 85T 66T 19T 77% +/dev/grid/node-x21-y2 93T 73T 20T 78% +/dev/grid/node-x21-y3 88T 71T 17T 80% +/dev/grid/node-x21-y4 94T 71T 23T 75% +/dev/grid/node-x21-y5 92T 69T 23T 75% +/dev/grid/node-x21-y6 94T 66T 28T 70% +/dev/grid/node-x21-y7 94T 65T 29T 69% +/dev/grid/node-x21-y8 85T 71T 14T 83% +/dev/grid/node-x21-y9 87T 69T 18T 79% +/dev/grid/node-x21-y10 86T 68T 18T 79% +/dev/grid/node-x21-y11 92T 68T 24T 73% +/dev/grid/node-x21-y12 89T 68T 21T 76% +/dev/grid/node-x21-y13 88T 73T 15T 82% +/dev/grid/node-x21-y14 86T 67T 19T 77% +/dev/grid/node-x21-y15 87T 72T 15T 82% +/dev/grid/node-x21-y16 87T 70T 17T 80% +/dev/grid/node-x21-y17 87T 71T 16T 81% +/dev/grid/node-x21-y18 88T 72T 16T 81% +/dev/grid/node-x21-y19 93T 65T 28T 69% +/dev/grid/node-x21-y20 92T 70T 22T 76% +/dev/grid/node-x21-y21 91T 70T 21T 76% +/dev/grid/node-x21-y22 510T 493T 17T 96% +/dev/grid/node-x21-y23 89T 69T 20T 77% +/dev/grid/node-x21-y24 94T 72T 22T 76% +/dev/grid/node-x21-y25 91T 70T 21T 76% +/dev/grid/node-x21-y26 89T 65T 24T 73% +/dev/grid/node-x21-y27 85T 72T 13T 84% +/dev/grid/node-x21-y28 93T 72T 21T 77% +/dev/grid/node-x22-y0 89T 67T 22T 75% +/dev/grid/node-x22-y1 85T 65T 20T 76% +/dev/grid/node-x22-y2 93T 64T 29T 68% +/dev/grid/node-x22-y3 93T 71T 22T 76% +/dev/grid/node-x22-y4 85T 65T 20T 76% +/dev/grid/node-x22-y5 85T 67T 18T 78% +/dev/grid/node-x22-y6 90T 64T 26T 71% +/dev/grid/node-x22-y7 87T 69T 18T 79% +/dev/grid/node-x22-y8 94T 72T 22T 76% +/dev/grid/node-x22-y9 87T 71T 16T 81% +/dev/grid/node-x22-y10 87T 65T 22T 74% +/dev/grid/node-x22-y11 93T 72T 21T 77% +/dev/grid/node-x22-y12 86T 72T 14T 83% +/dev/grid/node-x22-y13 89T 66T 23T 74% +/dev/grid/node-x22-y14 90T 67T 23T 74% +/dev/grid/node-x22-y15 92T 70T 22T 76% +/dev/grid/node-x22-y16 92T 66T 26T 71% +/dev/grid/node-x22-y17 91T 66T 25T 72% +/dev/grid/node-x22-y18 91T 68T 23T 74% +/dev/grid/node-x22-y19 88T 71T 17T 80% +/dev/grid/node-x22-y20 90T 69T 21T 76% +/dev/grid/node-x22-y21 90T 68T 22T 75% +/dev/grid/node-x22-y22 502T 490T 12T 97% +/dev/grid/node-x22-y23 91T 67T 24T 73% +/dev/grid/node-x22-y24 93T 71T 22T 76% +/dev/grid/node-x22-y25 92T 65T 27T 70% +/dev/grid/node-x22-y26 93T 69T 24T 74% +/dev/grid/node-x22-y27 85T 72T 13T 84% +/dev/grid/node-x22-y28 93T 64T 29T 68% +/dev/grid/node-x23-y0 92T 73T 19T 79% +/dev/grid/node-x23-y1 90T 64T 26T 71% +/dev/grid/node-x23-y2 93T 65T 28T 69% +/dev/grid/node-x23-y3 88T 72T 16T 81% +/dev/grid/node-x23-y4 92T 70T 22T 76% +/dev/grid/node-x23-y5 90T 66T 24T 73% +/dev/grid/node-x23-y6 86T 66T 20T 76% +/dev/grid/node-x23-y7 89T 71T 18T 79% +/dev/grid/node-x23-y8 89T 64T 25T 71% +/dev/grid/node-x23-y9 90T 64T 26T 71% +/dev/grid/node-x23-y10 94T 70T 24T 74% +/dev/grid/node-x23-y11 85T 64T 21T 75% +/dev/grid/node-x23-y12 86T 66T 20T 76% +/dev/grid/node-x23-y13 86T 64T 22T 74% +/dev/grid/node-x23-y14 92T 68T 24T 73% +/dev/grid/node-x23-y15 94T 70T 24T 74% +/dev/grid/node-x23-y16 91T 69T 22T 75% +/dev/grid/node-x23-y17 93T 70T 23T 75% +/dev/grid/node-x23-y18 87T 65T 22T 74% +/dev/grid/node-x23-y19 86T 64T 22T 74% +/dev/grid/node-x23-y20 94T 66T 28T 70% +/dev/grid/node-x23-y21 92T 64T 28T 69% +/dev/grid/node-x23-y22 507T 491T 16T 96% +/dev/grid/node-x23-y23 88T 73T 15T 82% +/dev/grid/node-x23-y24 87T 69T 18T 79% +/dev/grid/node-x23-y25 91T 71T 20T 78% +/dev/grid/node-x23-y26 90T 71T 19T 78% +/dev/grid/node-x23-y27 87T 70T 17T 80% +/dev/grid/node-x23-y28 91T 70T 21T 76% +/dev/grid/node-x24-y0 86T 67T 19T 77% +/dev/grid/node-x24-y1 94T 67T 27T 71% +/dev/grid/node-x24-y2 89T 71T 18T 79% +/dev/grid/node-x24-y3 86T 67T 19T 77% +/dev/grid/node-x24-y4 87T 73T 14T 83% +/dev/grid/node-x24-y5 86T 64T 22T 74% +/dev/grid/node-x24-y6 92T 68T 24T 73% +/dev/grid/node-x24-y7 85T 68T 17T 80% +/dev/grid/node-x24-y8 86T 65T 21T 75% +/dev/grid/node-x24-y9 87T 73T 14T 83% +/dev/grid/node-x24-y10 91T 68T 23T 74% +/dev/grid/node-x24-y11 94T 67T 27T 71% +/dev/grid/node-x24-y12 94T 67T 27T 71% +/dev/grid/node-x24-y13 88T 71T 17T 80% +/dev/grid/node-x24-y14 91T 70T 21T 76% +/dev/grid/node-x24-y15 89T 72T 17T 80% +/dev/grid/node-x24-y16 92T 69T 23T 75% +/dev/grid/node-x24-y17 87T 70T 17T 80% +/dev/grid/node-x24-y18 94T 69T 25T 73% +/dev/grid/node-x24-y19 91T 66T 25T 72% +/dev/grid/node-x24-y20 90T 64T 26T 71% +/dev/grid/node-x24-y21 86T 65T 21T 75% +/dev/grid/node-x24-y22 508T 494T 14T 97% +/dev/grid/node-x24-y23 89T 72T 17T 80% +/dev/grid/node-x24-y24 94T 66T 28T 70% +/dev/grid/node-x24-y25 88T 64T 24T 72% +/dev/grid/node-x24-y26 86T 64T 22T 74% +/dev/grid/node-x24-y27 92T 65T 27T 70% +/dev/grid/node-x24-y28 89T 72T 17T 80% +/dev/grid/node-x25-y0 93T 70T 23T 75% +/dev/grid/node-x25-y1 91T 73T 18T 80% +/dev/grid/node-x25-y2 89T 65T 24T 73% +/dev/grid/node-x25-y3 86T 69T 17T 80% +/dev/grid/node-x25-y4 90T 70T 20T 77% +/dev/grid/node-x25-y5 89T 65T 24T 73% +/dev/grid/node-x25-y6 92T 71T 21T 77% +/dev/grid/node-x25-y7 91T 65T 26T 71% +/dev/grid/node-x25-y8 91T 67T 24T 73% +/dev/grid/node-x25-y9 94T 73T 21T 77% +/dev/grid/node-x25-y10 94T 73T 21T 77% +/dev/grid/node-x25-y11 91T 70T 21T 76% +/dev/grid/node-x25-y12 91T 71T 20T 78% +/dev/grid/node-x25-y13 86T 67T 19T 77% +/dev/grid/node-x25-y14 88T 67T 21T 76% +/dev/grid/node-x25-y15 90T 67T 23T 74% +/dev/grid/node-x25-y16 92T 64T 28T 69% +/dev/grid/node-x25-y17 94T 68T 26T 72% +/dev/grid/node-x25-y18 87T 73T 14T 83% +/dev/grid/node-x25-y19 86T 73T 13T 84% +/dev/grid/node-x25-y20 92T 72T 20T 78% +/dev/grid/node-x25-y21 93T 73T 20T 78% +/dev/grid/node-x25-y22 504T 491T 13T 97% +/dev/grid/node-x25-y23 91T 72T 19T 79% +/dev/grid/node-x25-y24 85T 70T 15T 82% +/dev/grid/node-x25-y25 85T 73T 12T 85% +/dev/grid/node-x25-y26 85T 67T 18T 78% +/dev/grid/node-x25-y27 89T 69T 20T 77% +/dev/grid/node-x25-y28 86T 66T 20T 76% +/dev/grid/node-x26-y0 91T 72T 19T 79% +/dev/grid/node-x26-y1 86T 68T 18T 79% +/dev/grid/node-x26-y2 88T 70T 18T 79% +/dev/grid/node-x26-y3 88T 66T 22T 75% +/dev/grid/node-x26-y4 85T 71T 14T 83% +/dev/grid/node-x26-y5 90T 66T 24T 73% +/dev/grid/node-x26-y6 90T 66T 24T 73% +/dev/grid/node-x26-y7 89T 73T 16T 82% +/dev/grid/node-x26-y8 85T 65T 20T 76% +/dev/grid/node-x26-y9 90T 72T 18T 80% +/dev/grid/node-x26-y10 86T 64T 22T 74% +/dev/grid/node-x26-y11 90T 64T 26T 71% +/dev/grid/node-x26-y12 92T 73T 19T 79% +/dev/grid/node-x26-y13 85T 72T 13T 84% +/dev/grid/node-x26-y14 91T 73T 18T 80% +/dev/grid/node-x26-y15 92T 69T 23T 75% +/dev/grid/node-x26-y16 90T 72T 18T 80% +/dev/grid/node-x26-y17 90T 68T 22T 75% +/dev/grid/node-x26-y18 90T 73T 17T 81% +/dev/grid/node-x26-y19 94T 64T 30T 68% +/dev/grid/node-x26-y20 86T 73T 13T 84% +/dev/grid/node-x26-y21 86T 66T 20T 76% +/dev/grid/node-x26-y22 510T 491T 19T 96% +/dev/grid/node-x26-y23 87T 66T 21T 75% +/dev/grid/node-x26-y24 91T 64T 27T 70% +/dev/grid/node-x26-y25 94T 66T 28T 70% +/dev/grid/node-x26-y26 85T 68T 17T 80% +/dev/grid/node-x26-y27 85T 71T 14T 83% +/dev/grid/node-x26-y28 94T 64T 30T 68% +/dev/grid/node-x27-y0 88T 73T 15T 82% +/dev/grid/node-x27-y1 94T 67T 27T 71% +/dev/grid/node-x27-y2 90T 73T 17T 81% +/dev/grid/node-x27-y3 93T 71T 22T 76% +/dev/grid/node-x27-y4 89T 70T 19T 78% +/dev/grid/node-x27-y5 90T 66T 24T 73% +/dev/grid/node-x27-y6 87T 73T 14T 83% +/dev/grid/node-x27-y7 87T 66T 21T 75% +/dev/grid/node-x27-y8 86T 69T 17T 80% +/dev/grid/node-x27-y9 88T 73T 15T 82% +/dev/grid/node-x27-y10 92T 64T 28T 69% +/dev/grid/node-x27-y11 87T 69T 18T 79% +/dev/grid/node-x27-y12 91T 64T 27T 70% +/dev/grid/node-x27-y13 94T 68T 26T 72% +/dev/grid/node-x27-y14 89T 68T 21T 76% +/dev/grid/node-x27-y15 87T 67T 20T 77% +/dev/grid/node-x27-y16 90T 72T 18T 80% +/dev/grid/node-x27-y17 94T 65T 29T 69% +/dev/grid/node-x27-y18 90T 72T 18T 80% +/dev/grid/node-x27-y19 88T 73T 15T 82% +/dev/grid/node-x27-y20 88T 71T 17T 80% +/dev/grid/node-x27-y21 88T 64T 24T 72% +/dev/grid/node-x27-y22 504T 490T 14T 97% +/dev/grid/node-x27-y23 93T 66T 27T 70% +/dev/grid/node-x27-y24 85T 67T 18T 78% +/dev/grid/node-x27-y25 94T 64T 30T 68% +/dev/grid/node-x27-y26 85T 72T 13T 84% +/dev/grid/node-x27-y27 85T 73T 12T 85% +/dev/grid/node-x27-y28 89T 70T 19T 78% +/dev/grid/node-x28-y0 93T 66T 27T 70% +/dev/grid/node-x28-y1 86T 71T 15T 82% +/dev/grid/node-x28-y2 94T 73T 21T 77% +/dev/grid/node-x28-y3 91T 72T 19T 79% +/dev/grid/node-x28-y4 87T 69T 18T 79% +/dev/grid/node-x28-y5 85T 70T 15T 82% +/dev/grid/node-x28-y6 85T 72T 13T 84% +/dev/grid/node-x28-y7 89T 72T 17T 80% +/dev/grid/node-x28-y8 90T 73T 17T 81% +/dev/grid/node-x28-y9 94T 64T 30T 68% +/dev/grid/node-x28-y10 85T 73T 12T 85% +/dev/grid/node-x28-y11 89T 70T 19T 78% +/dev/grid/node-x28-y12 94T 67T 27T 71% +/dev/grid/node-x28-y13 87T 68T 19T 78% +/dev/grid/node-x28-y14 94T 72T 22T 76% +/dev/grid/node-x28-y15 92T 66T 26T 71% +/dev/grid/node-x28-y16 91T 64T 27T 70% +/dev/grid/node-x28-y17 86T 69T 17T 80% +/dev/grid/node-x28-y18 88T 69T 19T 78% +/dev/grid/node-x28-y19 90T 70T 20T 77% +/dev/grid/node-x28-y20 89T 69T 20T 77% +/dev/grid/node-x28-y21 90T 67T 23T 74% +/dev/grid/node-x28-y22 506T 491T 15T 97% +/dev/grid/node-x28-y23 89T 70T 19T 78% +/dev/grid/node-x28-y24 90T 73T 17T 81% +/dev/grid/node-x28-y25 86T 65T 21T 75% +/dev/grid/node-x28-y26 93T 73T 20T 78% +/dev/grid/node-x28-y27 88T 69T 19T 78% +/dev/grid/node-x28-y28 92T 68T 24T 73% +/dev/grid/node-x29-y0 88T 70T 18T 79% +/dev/grid/node-x29-y1 89T 68T 21T 76% +/dev/grid/node-x29-y2 85T 73T 12T 85% +/dev/grid/node-x29-y3 89T 73T 16T 82% +/dev/grid/node-x29-y4 86T 68T 18T 79% +/dev/grid/node-x29-y5 91T 70T 21T 76% +/dev/grid/node-x29-y6 86T 70T 16T 81% +/dev/grid/node-x29-y7 86T 64T 22T 74% +/dev/grid/node-x29-y8 90T 73T 17T 81% +/dev/grid/node-x29-y9 92T 65T 27T 70% +/dev/grid/node-x29-y10 89T 72T 17T 80% +/dev/grid/node-x29-y11 85T 66T 19T 77% +/dev/grid/node-x29-y12 89T 73T 16T 82% +/dev/grid/node-x29-y13 90T 72T 18T 80% +/dev/grid/node-x29-y14 86T 69T 17T 80% +/dev/grid/node-x29-y15 85T 64T 21T 75% +/dev/grid/node-x29-y16 88T 69T 19T 78% +/dev/grid/node-x29-y17 92T 64T 28T 69% +/dev/grid/node-x29-y18 86T 65T 21T 75% +/dev/grid/node-x29-y19 92T 70T 22T 76% +/dev/grid/node-x29-y20 94T 64T 30T 68% +/dev/grid/node-x29-y21 87T 64T 23T 73% +/dev/grid/node-x29-y22 509T 497T 12T 97% +/dev/grid/node-x29-y23 91T 67T 24T 73% +/dev/grid/node-x29-y24 90T 67T 23T 74% +/dev/grid/node-x29-y25 86T 65T 21T 75% +/dev/grid/node-x29-y26 94T 68T 26T 72% +/dev/grid/node-x29-y27 89T 69T 20T 77% +/dev/grid/node-x29-y28 87T 71T 16T 81% +/dev/grid/node-x30-y0 92T 64T 28T 69% +/dev/grid/node-x30-y1 93T 67T 26T 72% +/dev/grid/node-x30-y2 93T 66T 27T 70% +/dev/grid/node-x30-y3 93T 67T 26T 72% +/dev/grid/node-x30-y4 86T 70T 16T 81% +/dev/grid/node-x30-y5 91T 67T 24T 73% +/dev/grid/node-x30-y6 89T 66T 23T 74% +/dev/grid/node-x30-y7 89T 72T 17T 80% +/dev/grid/node-x30-y8 93T 69T 24T 74% +/dev/grid/node-x30-y9 94T 68T 26T 72% +/dev/grid/node-x30-y10 89T 69T 20T 77% +/dev/grid/node-x30-y11 94T 64T 30T 68% +/dev/grid/node-x30-y12 93T 65T 28T 69% +/dev/grid/node-x30-y13 85T 72T 13T 84% +/dev/grid/node-x30-y14 88T 68T 20T 77% +/dev/grid/node-x30-y15 94T 64T 30T 68% +/dev/grid/node-x30-y16 92T 73T 19T 79% +/dev/grid/node-x30-y17 92T 73T 19T 79% +/dev/grid/node-x30-y18 87T 68T 19T 78% +/dev/grid/node-x30-y19 93T 64T 29T 68% +/dev/grid/node-x30-y20 94T 67T 27T 71% +/dev/grid/node-x30-y21 89T 67T 22T 75% +/dev/grid/node-x30-y22 507T 491T 16T 96% +/dev/grid/node-x30-y23 91T 64T 27T 70% +/dev/grid/node-x30-y24 87T 65T 22T 74% +/dev/grid/node-x30-y25 85T 65T 20T 76% +/dev/grid/node-x30-y26 91T 68T 23T 74% +/dev/grid/node-x30-y27 90T 67T 23T 74% +/dev/grid/node-x30-y28 94T 66T 28T 70% +/dev/grid/node-x31-y0 92T 67T 25T 72% +/dev/grid/node-x31-y1 93T 68T 25T 73% +/dev/grid/node-x31-y2 92T 66T 26T 71% +/dev/grid/node-x31-y3 89T 64T 25T 71% +/dev/grid/node-x31-y4 90T 71T 19T 78% +/dev/grid/node-x31-y5 89T 68T 21T 76% +/dev/grid/node-x31-y6 85T 72T 13T 84% +/dev/grid/node-x31-y7 88T 65T 23T 73% +/dev/grid/node-x31-y8 86T 66T 20T 76% +/dev/grid/node-x31-y9 90T 72T 18T 80% +/dev/grid/node-x31-y10 86T 67T 19T 77% +/dev/grid/node-x31-y11 89T 72T 17T 80% +/dev/grid/node-x31-y12 90T 73T 17T 81% +/dev/grid/node-x31-y13 91T 70T 21T 76% +/dev/grid/node-x31-y14 94T 67T 27T 71% +/dev/grid/node-x31-y15 94T 73T 21T 77% +/dev/grid/node-x31-y16 86T 71T 15T 82% +/dev/grid/node-x31-y17 86T 73T 13T 84% +/dev/grid/node-x31-y18 89T 65T 24T 73% +/dev/grid/node-x31-y19 86T 72T 14T 83% +/dev/grid/node-x31-y20 88T 64T 24T 72% +/dev/grid/node-x31-y21 90T 64T 26T 71% +/dev/grid/node-x31-y22 505T 496T 9T 98% +/dev/grid/node-x31-y23 90T 73T 17T 81% +/dev/grid/node-x31-y24 91T 73T 18T 80% +/dev/grid/node-x31-y25 94T 69T 25T 73% +/dev/grid/node-x31-y26 92T 64T 28T 69% +/dev/grid/node-x31-y27 91T 66T 25T 72% +/dev/grid/node-x31-y28 85T 65T 20T 76% +/dev/grid/node-x32-y0 85T 69T 16T 81% +/dev/grid/node-x32-y1 93T 67T 26T 72% +/dev/grid/node-x32-y2 93T 73T 20T 78% +/dev/grid/node-x32-y3 94T 71T 23T 75% +/dev/grid/node-x32-y4 90T 70T 20T 77% +/dev/grid/node-x32-y5 92T 68T 24T 73% +/dev/grid/node-x32-y6 94T 64T 30T 68% +/dev/grid/node-x32-y7 86T 72T 14T 83% +/dev/grid/node-x32-y8 85T 73T 12T 85% +/dev/grid/node-x32-y9 89T 69T 20T 77% +/dev/grid/node-x32-y10 89T 73T 16T 82% +/dev/grid/node-x32-y11 87T 65T 22T 74% +/dev/grid/node-x32-y12 94T 67T 27T 71% +/dev/grid/node-x32-y13 93T 67T 26T 72% +/dev/grid/node-x32-y14 93T 66T 27T 70% +/dev/grid/node-x32-y15 86T 72T 14T 83% +/dev/grid/node-x32-y16 89T 69T 20T 77% +/dev/grid/node-x32-y17 93T 67T 26T 72% +/dev/grid/node-x32-y18 87T 64T 23T 73% +/dev/grid/node-x32-y19 85T 69T 16T 81% +/dev/grid/node-x32-y20 85T 69T 16T 81% +/dev/grid/node-x32-y21 91T 65T 26T 71% +/dev/grid/node-x32-y22 503T 491T 12T 97% +/dev/grid/node-x32-y23 94T 71T 23T 75% +/dev/grid/node-x32-y24 87T 64T 23T 73% +/dev/grid/node-x32-y25 91T 73T 18T 80% +/dev/grid/node-x32-y26 93T 67T 26T 72% +/dev/grid/node-x32-y27 86T 71T 15T 82% +/dev/grid/node-x32-y28 91T 64T 27T 70% +/dev/grid/node-x33-y0 86T 73T 13T 84% +/dev/grid/node-x33-y1 88T 71T 17T 80% +/dev/grid/node-x33-y2 90T 66T 24T 73% +/dev/grid/node-x33-y3 85T 64T 21T 75% +/dev/grid/node-x33-y4 87T 66T 21T 75% +/dev/grid/node-x33-y5 91T 68T 23T 74% +/dev/grid/node-x33-y6 93T 68T 25T 73% +/dev/grid/node-x33-y7 92T 70T 22T 76% +/dev/grid/node-x33-y8 91T 64T 27T 70% +/dev/grid/node-x33-y9 85T 72T 13T 84% +/dev/grid/node-x33-y10 89T 65T 24T 73% +/dev/grid/node-x33-y11 91T 66T 25T 72% +/dev/grid/node-x33-y12 87T 68T 19T 78% +/dev/grid/node-x33-y13 89T 70T 19T 78% +/dev/grid/node-x33-y14 86T 68T 18T 79% +/dev/grid/node-x33-y15 85T 69T 16T 81% +/dev/grid/node-x33-y16 94T 66T 28T 70% +/dev/grid/node-x33-y17 92T 68T 24T 73% +/dev/grid/node-x33-y18 88T 72T 16T 81% +/dev/grid/node-x33-y19 90T 73T 17T 81% +/dev/grid/node-x33-y20 89T 64T 25T 71% +/dev/grid/node-x33-y21 92T 71T 21T 77% +/dev/grid/node-x33-y22 502T 497T 5T 99% +/dev/grid/node-x33-y23 94T 67T 27T 71% +/dev/grid/node-x33-y24 93T 64T 29T 68% +/dev/grid/node-x33-y25 90T 66T 24T 73% +/dev/grid/node-x33-y26 87T 72T 15T 82% +/dev/grid/node-x33-y27 85T 73T 12T 85% +/dev/grid/node-x33-y28 86T 72T 14T 83% +/dev/grid/node-x34-y0 89T 66T 23T 74% +/dev/grid/node-x34-y1 94T 64T 30T 68% +/dev/grid/node-x34-y2 92T 69T 23T 75% +/dev/grid/node-x34-y3 93T 70T 23T 75% +/dev/grid/node-x34-y4 88T 64T 24T 72% +/dev/grid/node-x34-y5 94T 67T 27T 71% +/dev/grid/node-x34-y6 89T 68T 21T 76% +/dev/grid/node-x34-y7 94T 71T 23T 75% +/dev/grid/node-x34-y8 88T 69T 19T 78% +/dev/grid/node-x34-y9 89T 72T 17T 80% +/dev/grid/node-x34-y10 90T 69T 21T 76% +/dev/grid/node-x34-y11 91T 65T 26T 71% +/dev/grid/node-x34-y12 88T 69T 19T 78% +/dev/grid/node-x34-y13 90T 69T 21T 76% +/dev/grid/node-x34-y14 92T 66T 26T 71% +/dev/grid/node-x34-y15 94T 70T 24T 74% +/dev/grid/node-x34-y16 87T 69T 18T 79% +/dev/grid/node-x34-y17 86T 67T 19T 77% +/dev/grid/node-x34-y18 94T 66T 28T 70% +/dev/grid/node-x34-y19 94T 69T 25T 73% +/dev/grid/node-x34-y20 91T 67T 24T 73% +/dev/grid/node-x34-y21 87T 72T 15T 82% +/dev/grid/node-x34-y22 501T 495T 6T 98% +/dev/grid/node-x34-y23 93T 71T 22T 76% +/dev/grid/node-x34-y24 92T 73T 19T 79% +/dev/grid/node-x34-y25 90T 73T 17T 81% +/dev/grid/node-x34-y26 89T 69T 20T 77% +/dev/grid/node-x34-y27 89T 72T 17T 80% +/dev/grid/node-x34-y28 87T 66T 21T 75% diff --git a/2016/aoc22/src/main.rs b/2016/aoc22/src/main.rs new file mode 100644 index 0000000..bd374d5 --- /dev/null +++ b/2016/aoc22/src/main.rs @@ -0,0 +1,198 @@ +extern crate regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::HashMap; +use std::collections::HashSet; + +use regex::Regex; + +use std::str::FromStr; + +#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] +struct Node { + x: i8, + y: i8, + size: i16, + used: i16, + avail: i16, + blocker: bool +} + +impl FromStr for Node { + type Err = String; + + fn from_str(s: &str) -> Result { + let reg = Regex::new(r"/dev/grid/node-x(\d+)-y(\d+) +(\d+)T +(\d+)T +(\d+)T +(\d+)%").unwrap(); + let cap = match reg.captures(s) { + Some(cap) => cap, + None => return Err("Does not match regex".to_string()) + }; + Ok(Node { + x: cap.at(1).unwrap().parse().unwrap(), + y: cap.at(2).unwrap().parse().unwrap(), + size: cap.at(3).unwrap().parse().unwrap(), + used: cap.at(4).unwrap().parse().unwrap(), + avail: cap.at(5).unwrap().parse().unwrap(), + blocker: false + }) + } +} + +impl Node { + fn is_viable_pair(&self, other: &Node) -> bool { + (self.x != other.x || self.y != other.y) && self.used > 0 && self.used <= other.avail + } + + fn recalculate_avail(&mut self) { + self.avail = self.size - self.used; + debug_assert!(self.avail >= 0); + debug_assert!(self.used >= 0); + } +} + +#[derive(Clone, Hash, PartialEq, Eq)] +struct Grid { + nodes: Vec>, + goal_x: i8, + goal_y: i8 +} + +impl Grid { + fn new(nodes: Vec) -> Grid { + let mut grid_nodes = Vec::new(); + let mut next_col = Vec::new(); + + let mut current_x = 0; + + for node in nodes { + if current_x != node.x { + grid_nodes.push(next_col); + next_col = Vec::new(); + current_x += 1; + } + + next_col.push(node); + } + grid_nodes.push(next_col); + grid_nodes = Grid::normalize(grid_nodes); + + Grid { + nodes: grid_nodes, + goal_x: current_x, + goal_y: 0 + } + } + + fn normalize(mut nodes: Vec>) -> Vec> { + for x in 0..nodes.len() { + for y in 0..nodes[x].len() { + nodes[x][y].size = ((nodes[x][y].size + 50)/100) * 100; + nodes[x][y].used = ((nodes[x][y].used + 50)/100) * 100; + nodes[x][y].avail = ((nodes[x][y].avail + 50)/100) * 100; + } + } + nodes + } + + fn is_final(&self) -> bool { + self.goal_x == 0 && self.goal_y == 0 + } + + fn make_move(&self, x: i8, y: i8, dx: i8, dy: i8) -> Option { + if x+dx < 0 || x+dx >= self.nodes.len() as i8 || y+dy < 0 || y+dy >= self.nodes[x as usize].len() as i8 { + return None; + } + if !self.nodes[x as usize][y as usize].is_viable_pair(&self.nodes[(x+dx) as usize][(y+dy) as usize]) { + return None; + } + + let mut new_grid = self.clone(); + new_grid.nodes[(x+dx) as usize][(y+dy) as usize].used += new_grid.nodes[x as usize][y as usize].used; + new_grid.nodes[(x+dx) as usize][(y+dy) as usize].recalculate_avail(); + new_grid.nodes[x as usize][y as usize].used = 0; + new_grid.nodes[x as usize][y as usize].recalculate_avail(); + + if new_grid.goal_x == x && new_grid.goal_y == y { + new_grid.goal_x = x+dx; + new_grid.goal_y = y+dy; + } + + Some(new_grid) + } + + fn available_moves(&self) -> Vec { + let mut moves = Vec::with_capacity(4); + + for x in 0..self.nodes.len() as i8 { + for y in 0..self.nodes[x as usize].len() as i8 { + match self.make_move(x, y, -1, 0) { + Some(grid) => { moves.push(grid); }, + None => {} + }; + match self.make_move(x, y, 0, -1) { + Some(grid) => { moves.push(grid); }, + None => {} + }; + match self.make_move(x, y, 1, 0) { + Some(grid) => { moves.push(grid); }, + None => {} + }; + match self.make_move(x, y, 0, 1) { + Some(grid) => { moves.push(grid); }, + None => {} + }; + } + } + + moves + } +} + + +fn main() { + let nodes = read_input(); + + let initial = Grid::new(nodes); + println!("Initial grid has {} possible moves", initial.available_moves().len()); + + let mut explored: HashSet = HashSet::new(); + let mut frontier: HashMap = HashMap::new(); + frontier.insert(initial, 0); + let mut found_final = false; + + while !found_final { + let (best_frontier, moves) = find_best_frontiers(&frontier); + + let new_states = best_frontier.available_moves(); + found_final = new_states.iter().any(|ref s| s.is_final()); + + for state in new_states { + if !(explored.contains(&state) || frontier.contains_key(&state)) { + frontier.insert(state, moves+1); + } + } + + frontier.remove(&best_frontier); + explored.insert(best_frontier); + } + + let (final_frontier, moves) = frontier.iter().find(|&(s, _)| s.is_final()).unwrap(); + println!("It took {} moves to get the data", moves); +} + +fn read_input() -> Vec { + let file = BufReader::new(File::open("input.txt").unwrap()); + + file.lines() + .skip(2) + .filter_map(|line| Node::from_str(line.unwrap().as_ref()).ok()) + .collect() +} + +fn find_best_frontiers(frontier: &HashMap) -> (Grid, u32) { + frontier.iter().min_by_key(|&(ref grid, &moves)| { + grid.goal_x as u32 + grid.goal_y as u32 + moves + }).map(|(&ref grid, &moves)| (grid.clone(), moves.clone())).unwrap() +} diff --git a/2016/aoc23/Cargo.lock b/2016/aoc23/Cargo.lock new file mode 100644 index 0000000..c6ab041 --- /dev/null +++ b/2016/aoc23/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc23" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc23/Cargo.toml b/2016/aoc23/Cargo.toml new file mode 100644 index 0000000..39fd06e --- /dev/null +++ b/2016/aoc23/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc23" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] +regex = "0.1" \ No newline at end of file diff --git a/2016/aoc23/input.txt b/2016/aoc23/input.txt new file mode 100644 index 0000000..3ff0460 --- /dev/null +++ b/2016/aoc23/input.txt @@ -0,0 +1,26 @@ +cpy a b +dec b +cpy a d +cpy 0 a +cpy b c +inc a +dec c +jnz c -2 +dec d +jnz d -5 +dec b +cpy b c +cpy c d +dec d +inc c +jnz d -2 +tgl c +cpy -16 c +jnz 1 c +cpy 90 c +jnz 90 d +inc a +inc d +jnz d -2 +inc c +jnz c -5 diff --git a/2016/aoc23/src/main.rs b/2016/aoc23/src/main.rs new file mode 100644 index 0000000..a12fa18 --- /dev/null +++ b/2016/aoc23/src/main.rs @@ -0,0 +1,247 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +enum Instruction { + Inc(usize), + Dec(usize), + + TglLit(i32), + TglReg(usize), + + CpyLitReg(i32, usize), + CpyRegReg(usize, usize), + CpyLitLit(i32, i32), + CpyRegLit(usize, i32), + + JnzLitLit(i32, i32), + JnzRegLit(usize, i32), + JnzLitReg(i32, usize), + JnzRegReg(usize, usize), + + Noop +} + +impl Instruction { + fn parse(line: &str) -> Instruction { + match Regex::new(r"inc (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::Inc(reg); + }, + _ => {} + } + + match Regex::new(r"dec (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::Dec(reg); + }, + _ => {} + } + + + match Regex::new(r"tgl (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::TglReg(reg); + }, + _ => {} + } + + match Regex::new(r"tgl ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let lit = cap.at(1).unwrap().parse().unwrap(); + return Instruction::TglLit(lit); + }, + _ => {} + } + + + match Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::CpyLitReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::CpyRegReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy ([-\d]+) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::CpyLitLit(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy (a|b|c|d) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::CpyRegReg(src, dest); + }, + _ => {} + } + + + match Regex::new(r"jnz ([-\d]+) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::JnzLitReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz (a|b|c|d) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::JnzRegReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::JnzLitLit(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::JnzRegLit(src, dest); + }, + _ => {} + } + + panic!("Invalid instruction line"); + } + + fn toggle(&self) -> Self { + match *self { + Instruction::Inc(a) => Instruction::Dec(a), + Instruction::Dec(a) => Instruction::Inc(a), + + Instruction::TglLit(_) => Instruction::Noop, + Instruction::TglReg(a) => Instruction::Inc(a), + + Instruction::CpyLitReg(a, b) => Instruction::JnzLitReg(a, b), + Instruction::CpyRegReg(a, b) => Instruction::JnzRegReg(a, b), + Instruction::CpyLitLit(a, b) => Instruction::JnzLitLit(a, b), + Instruction::CpyRegLit(a, b) => Instruction::JnzRegLit(a, b), + + Instruction::JnzLitLit(a, b) => Instruction::CpyLitLit(a, b), + Instruction::JnzRegLit(a, b) => Instruction::CpyRegLit(a, b), + Instruction::JnzLitReg(a, b) => Instruction::CpyLitReg(a, b), + Instruction::JnzRegReg(a, b) => Instruction::CpyRegReg(a, b), + Instruction::Noop => Instruction::Noop + } + } +} + +fn main() { + let mut program = read_file(); + + let mut registers: [i32; 4] = [12, 0, 0, 0]; + let mut pc: usize = 0; + + while pc < program.len() { + let mut pc_next: usize = pc+1; + + match program[pc] { + Instruction::Inc(dest) => { + registers[dest] += 1; + }, + Instruction::Dec(dest) => { + registers[dest] -= 1; + }, + + Instruction::TglReg(offset) => { + let line_to_toggle = (pc as i32 + registers[offset]) as usize; + if line_to_toggle > 0 && line_to_toggle < program.len() { + program[line_to_toggle] = program[line_to_toggle].toggle(); + } + }, + Instruction::TglLit(offset) => { + let line_to_toggle = (pc as i32 + offset) as usize; + if line_to_toggle > 0 && line_to_toggle < program.len() { + program[line_to_toggle] = program[line_to_toggle].toggle(); + } + }, + + Instruction::CpyLitReg(src, dest) => { + registers[dest] = src; + }, + Instruction::CpyRegReg(src, dest) => { + registers[dest] = registers[src]; + }, + Instruction::CpyLitLit(_, _) | Instruction::CpyRegLit(_, _) => {}, + + Instruction::JnzRegLit(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::JnzLitLit(condition, offset) => { + if condition != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::JnzRegReg(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + registers[offset]) as usize; + } + }, + Instruction::JnzLitReg(condition, offset) => { + if condition != 0 { + pc_next = (pc as i32 + registers[offset]) as usize; + } + }, + Instruction::Noop => {} + } + + pc = pc_next; + } + + println!("a: {}, b: {}, c: {}, d: {}", registers[0], registers[1], registers[2], registers[3]); + +} + +fn to_register_index(name: &str) -> usize { + match name { + "a" => 0, + "b" => 1, + "c" => 2, + "d" => 3, + _ => panic!("Invalid register provided") + } +} + +fn read_file() -> Vec { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap()) + .filter(|line| line.len() > 0) + .map(|line| Instruction::parse(line.trim())) + .collect() +} diff --git a/2016/aoc24/Cargo.lock b/2016/aoc24/Cargo.lock new file mode 100644 index 0000000..d8b394a --- /dev/null +++ b/2016/aoc24/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc24" +version = "0.1.0" + diff --git a/2016/aoc24/Cargo.toml b/2016/aoc24/Cargo.toml new file mode 100644 index 0000000..26becbd --- /dev/null +++ b/2016/aoc24/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc24" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] diff --git a/2016/aoc24/input.txt b/2016/aoc24/input.txt new file mode 100644 index 0000000..cc45a4f --- /dev/null +++ b/2016/aoc24/input.txt @@ -0,0 +1,39 @@ +####################################################################################################################################################################################### +#...........#.....#...........#.#.......#.....#.#...............#.....#.....#.......#.......#.......#.....................#.........#.....#...#3......#...#.#.............#.......#...# +#####.#.#.###.###.#####.#.#####.#.###.###.###.#.#.#.#.#.#.###.#.###.###.###.#.#######.#.#.#.###.###.#.#.#.#####.#.#.#####.###.#.#######.#############.#.#.#.#.#.#.###.#.#.#.#.###.#.#.# +#...#.#.#.#.....#.#...#...#.....#.....#.#...#.........#.....................#.....#...#...#.......#.....#.#.........#.#.#.#.#.......................#...#...#.#.#.#.....#.#.........#.# +#.#.#.#.#.#####.#.#.#.#.#.#.#.#.###.#.#.###.#.#.#.#.#.#########.#.###.###.#.#.###.###.#.#.#.#.###.#.#.#.#.#.#.#####.#.#.###.###.#######.#.#.#.###.#.###.#.#.#####.#####.#.#.###.#.#.#.# +#.#.#...#.....#.#.....#...#.#...#.#...#.......#...........#...#...#...#.#.....#.#...#...........#.#.......#...#...#.#.........#...#.......#.#...#.....#...#.......#.#.#.............#.# +#.#######.#.#.###.#.#.#####.#.#.#.#.###.#####.#.#.###.#.#.#.#.#.#.#.#.#.#.###.#.#.#.###.#######.#######.#.#.###.#.#.#.#.#.#.###.#.#.#.#.#.###.#.#####.#.#.#.#.#.#.#.#.#.###.#.#####.#.# +#.#...#.....#.......#.......#.#.......#...#.#.....#.#.#.#.#.#.......#...#.....#.#.#.#.#.........#...#...#...#.......#...#...#.....#.....#...#.........#...#.#...#...#...#.........#.#.# +#.#.#.#.###.###.#.#.#.###.###.#.#.###.#.#.#.#####.#.###.#.#####.#####.###.#.#.#.#.###.#.#.#.###.###.#.#.#.#.#.#####.#.###.#.#.###.#.#.#.#.###.###.#######.#.###.###.#.#######.#.#.#.#.# +#.#...#...#...............#...#...#...#.#.........#.#...#...#.#...#.#.....#...#.#...#.#.#...#.#.#.#.#.....#...#...#.......#.#...#.........#.#.....#.#...#.....#.#...#.#2#.....#.......# +#.#.#####.#########.#.###.#.#####.#.#.#.#######.#.###.#.#.#.#.###.#.#.###.#.###.#.#.#.#.#.###.###.#.#.#######.#.###.#.#.#.#.#.#.#.#####.###.#.###.#.#####.#.#.###.#.#.#.###.#.###.###.# +#...#...........#.....#.......#...#0..........#...#.....#.#...#.#...#.#.#...#.#.......#.........#...#.#...#.#.#.......#...#.#.........#.#.....................#.#.#.#.....#.#.....#...# +#.###.#.#.#.#.#.###.#.#.#.#.#.###.#.#.###.#.#.#.###.###.#.#####.#.#.#.#.###.#.#.###.#.#.###.###.#.#####.#.#.#.###.#.#######.#######.#.#.#.###.#.#.#.#.#.#######.#.#.#####.#.###.###.#.# +#...#...#...#.#...........#...#.#.....#...#...#.....#.#.............#...#.........#...#.....#...#.......#...#.#.............#.........#...#.#.....#.#.........#.............#...#.....# +#.#.#.###.#.###.#.#.#.###.#.###.#######.#.#.###.#.#.#.#.###.#.###.#.#.#.#.#####.#.#.#.#####.#.#####.#.#.#.#.###.###.#.###.###.###.#.#.#.###.#.#.###.#.#.###.#########.#####.#.#.#.##### +#.#...#.#.......#...#.....#.....#...#...#.....#...#...#.........#.....#.#.........#.....#.....#.........#...#.#.....#.#...#...#.#.#...#.#...#.........#.#...#.........#.#.......#.....# +#.#####.#.###.#.#.#.###.#.#.#.#.#.#.###.#.#.#.###.###.#.###.#.###.#.#.#.###.#.#####.###.#.#.#.#.#.#####.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#.###.#.#.# +#.....#...#...........#...#...........#.#.....#...#.....#...#.#.#.#...#.....#...#...#...............#...#.........#...#.....#...#.#...#.#...#.....#.....#.....#...#.#...#...#.#.......# +###.###.#.#.#####.###.#####.#.###.#.#.#####.#.###.#.###.#.###.#.#.#.#.###.#.###.#.#.#.#.###.#.###.#.#.#.#.#.#.###.#.#.#.###.###.#.#.###.#########.#.#####.###########.#.###.###.#####.# +#...#1#...#...#.......#...#...#.#...#...#...........#.#.......#.......#.#.........#.#...#...#...............#...#.....#.#...#.#.....#.........#...#.....#.#...#...#.....#.#.#.#...#...# +#.###.###.#.#.#.#####.#.#.#.#.#.#.#####.#####.#.#####.#.#.#.#.###.#.#.#.###.#.###.#.###.#.#.#####.#.#.#####.#.#.###.#.###.#.#.#.#.#.#.#####.#.#.#.#.###.#.#.###.#.#.#.#.#.#.#.###.#.#.# +#.....#.#.#.#.........#.#.#.....#.....#...#.....#...#.............#...#...#.....#...#.......#.......#.#.....#...#...#.#...#.....#.#...#.....#.#.#.#.#.#.#.......#...........#.#5#.....# +#.###.#.#.###.###.###.#.#####.#.#.###.###.#.###.#############.#######.#.###.#.###.#.#####.#.#.#.#####.#.#.#####.#.#.#.#.#.#######.#.#.###########.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#.###.# +#.....#...#...................#.......#...#...#.#.....#.............#.....#...#.....#.......#.#.#.........#.........#.......#.......#...#.........#.#...#...#.....#.#.....#...#...#.#.# +#.###.###.###########.###.#####.#####.###.#.#.#.#.#.#.###.#.###.#.#######.#.#.#.#.#.#.###.#.#.#####.#.#.#.#######.#.###.#.#.###.#.#.#.###.#####.#####.#.#.#.#.###.#.###.###########.#.# +#.#.#.#...#...#.....#.....#.#.......#.....#.....#...........#.#...#.........#.#.#.#.....#.#.#...........#...#...#...#.......#...#.........#.....#.....#.....#.......#...#...#.#...#...# +#.#.#.#.#.#########.#.#.###.#.#.###.###.#.#.#.###.#####.#.#.#.#.#.#.#######.#.#.#######.#.###.#.###.###.#.###.#.#.#.#######.#######.#.#.#.#####.#.###.#.#####.#.###.#.#.###.#.#######.# +#.#...#...#.#...................#.#...#.#...#.......#.#...#.#...#.#.#.....#.#...#...#...#.#.............#.....#...........#.........#...#.#.#.....#.......#.......#.....#...#.#...#...# +###.#.#.#.#.#.#.###.#.###.#####.#.#####.#.#.###.#.#.#.#####.#.###.#####.#.#.#.#.#.#.#.###.#.#.#####.###.#.###.#####.#.#.#.#####.###.#.#.#.#.#.#######.###.#.#.#########.###.#.#######.# +#.....#...................#...#.#...#...#...........#.#.......#.#.....#.#.....#...........#.....#.........#.#...........#...#.....#...#.....#.............#.#.#.........#.#.#.#.......# +#.#.#.#.#.###.#.#.#.#.#########.###.#.#.#.#########.#.#.#.#.#.#.###########.#.#.###.###.###.#.#.#.#.#.###.#.###.#.###.#.###.###.#.###.#.#.#####.#.#.#######.#.#.###.###.#.#.#.###.##### +#...#.#.#....7#.#...#.#.........#.....#...#.#.......#.....#...........#.#...#.......#.#...#.#...#...........#...#.#...#.....#...#.#.#...........#...#.#...#...#4....#...#...#...#.....# +###.#.#.###.#####.#.#.#.#.#.#.#.#.#.#.###.#.###.#.###.#######.#.#.###.#.#####.#.#####.###.#.###.#.#.#.#.#####.###.#.###.#.#.#.#.###.#.#.###.#.#.###.#.###.#########.#.###.#.#.#.#.#.#.# +#.....#.#.#.......#.#.#.......#.#.#.............#...#.........#.......#.#.#...........#.....#.....#...#...#.#.....#...#.....#.#.#...#...#...#.....#...#...#.#...#...#.#.#.....#...#.#.# +#.###.#.#.#########.#.#.#.#######.#.#.#.#.###.###.#####.#.#.#.#.#.###.#.#.#.#.#####.#.#.###.#.#.#.#.###.###.###.#.#.#######.#.#.###.#####.#.#.###.#.#.#####.###.#.#.###.#.#########.### +#.......#...#...#...#...#.#...#...#.#.#...#.#...........#.........#...#.#.#.#.....#...#.....#.#.....#...#...#...#.#.#.#...#...#.#...#.....#...........#.#.........#.....#.#.#...#.....# +#####.###.#####.#.#####.#######.#.#.#.###.#.#######.###.#####.###.#.#.#.#.#.#####.#####.###.###.###.#.#.###.#.#.#.###.#.#.###.#.#.#####.#.###.#.#.#.###.#.#.#.#.#.###.###.#.#.###.#.#.# +#.....#.#.#.......#...#.#.#.....#.........#...#.....#6......#...#.#...........#.......#.............#...#...#...#...#.#...#...#...#.....#.........#.#...#.....#.#.#.......#...#.#.#...# +####################################################################################################################################################################################### diff --git a/2016/aoc24/src/main.rs b/2016/aoc24/src/main.rs new file mode 100644 index 0000000..c4d620e --- /dev/null +++ b/2016/aoc24/src/main.rs @@ -0,0 +1,135 @@ +use std::io::BufReader; +use std::io::BufRead; +use std::fs::File; +use std::collections::HashMap; + +struct Map { + walls: Vec>, + destinations: Vec<(usize, usize)>, + start: (usize, usize) +} + +impl Map { + fn new(input: &[String]) -> Map { + let mut walls = Vec::with_capacity(input.len()); + let mut start = (0, 0); + let mut destinations = Vec::new(); + + let mut y = 0; + + for line in input { + let mut x = 0; + let mut wall_row = Vec::with_capacity(line.len()); + for c in line.chars() { + wall_row.push(c == '#'); + if c == '0' { + start = (y, x); + } + else if c.is_numeric() { + destinations.push((y, x)); + } + + x += 1; + } + + walls.push(wall_row); + y += 1; + } + + Map { + walls: walls, + destinations: destinations, + start: start + } + } + + fn is_valid_position(&self, y: i32, x: i32) -> bool { + y > 0 && + x > 0 && + (y as usize) < self.walls.len() && + (x as usize) < self.walls[y as usize].len() && + !self.walls[y as usize][x as usize] + } +} + +#[derive(Clone, Hash, PartialEq, Eq)] +struct State { + robot_location: (usize, usize), + destinations_hit: Vec +} + +impl State { + fn new(map: &Map) -> State { + State { + robot_location: map.start, + destinations_hit: map.destinations.iter().map(|_| false).collect() + } + } + + fn next_state(&self, movement: (i32, i32), map: &Map) -> Option { + let (y, x) = self.robot_location; + let (dy, dx) = movement; + let y2 = y as i32 + dy; + let x2 = x as i32 + dx; + + if !map.is_valid_position(y2, x2) { + return None; + } + + let y2 = y2 as usize; + let x2 = x2 as usize; + + Some(State { + robot_location: (y2, x2), + destinations_hit: self.destinations_hit.iter() + .zip(map.destinations.iter()) + .map(|(&hit, &(dest_y, dest_x))| hit || (dest_y == y2 && dest_x == x2)) + .collect() + }) + } + + fn next_states(&self, map: &Map) -> Vec { + [(-1, 0), (1, 0), (0, -1), (0, 1)].iter() + .filter_map(|&movement| self.next_state(movement, &map)) + .collect() + } + + fn is_complete(&self, map: &Map) -> bool { + self.destinations_hit.iter().all(|&x| x) && self.robot_location == map.start + } +} + +fn main() { + let map = Map::new(&read_file()); + let initial = State::new(&map); + + let mut states = HashMap::new(); + states.insert(initial, 0); + + let mut moves = 0; + + while !states.iter().any(|(&ref s, _)| s.is_complete(&map)) { + let new_states = states.iter() + .filter(|&(_, &m)| m == moves) + .flat_map(|(&ref s, _)| s.next_states(&map)) + .collect::>(); + + moves += 1; + + for state in new_states { + if !states.contains_key(&state) { + states.insert(state, moves); + } + } + } + + println!("Final state found in {} moves", moves); +} + +fn read_file() -> Vec { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap()) + .filter(|line| line.len() > 0) + .collect() +} diff --git a/2016/aoc25/Cargo.lock b/2016/aoc25/Cargo.lock new file mode 100644 index 0000000..c4553c9 --- /dev/null +++ b/2016/aoc25/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc25" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc25/Cargo.toml b/2016/aoc25/Cargo.toml new file mode 100644 index 0000000..aa84af4 --- /dev/null +++ b/2016/aoc25/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc25" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] +regex = "0.1" \ No newline at end of file diff --git a/2016/aoc25/input.txt b/2016/aoc25/input.txt new file mode 100644 index 0000000..a9734a4 --- /dev/null +++ b/2016/aoc25/input.txt @@ -0,0 +1,30 @@ +cpy a d +cpy 7 c +cpy 362 b +inc d +dec b +jnz b -2 +dec c +jnz c -5 +cpy d a +jnz 0 0 +cpy a b +cpy 0 a +cpy 2 c +jnz b 2 +jnz 1 6 +dec b +dec c +jnz c -4 +inc a +jnz 1 -7 +cpy 2 b +jnz c 2 +jnz 1 4 +dec b +dec c +jnz 1 -4 +jnz 0 0 +out b +jnz a -19 +jnz 1 -21 diff --git a/2016/aoc25/src/main.rs b/2016/aoc25/src/main.rs new file mode 100644 index 0000000..7db2ce5 --- /dev/null +++ b/2016/aoc25/src/main.rs @@ -0,0 +1,284 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +enum Instruction { + Inc(usize), + Dec(usize), + + TglLit(i32), + TglReg(usize), + + OutLit(i32), + OutReg(usize), + + CpyLitReg(i32, usize), + CpyRegReg(usize, usize), + CpyLitLit(i32, i32), + CpyRegLit(usize, i32), + + JnzLitLit(i32, i32), + JnzRegLit(usize, i32), + JnzLitReg(i32, usize), + JnzRegReg(usize, usize), + + Noop +} + +impl Instruction { + fn parse(line: &str) -> Instruction { + match Regex::new(r"inc (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::Inc(reg); + }, + _ => {} + } + + match Regex::new(r"dec (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::Dec(reg); + }, + _ => {} + } + + + match Regex::new(r"tgl (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::TglReg(reg); + }, + _ => {} + } + + match Regex::new(r"tgl ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let lit = cap.at(1).unwrap().parse().unwrap(); + return Instruction::TglLit(lit); + }, + _ => {} + } + + + match Regex::new(r"out (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::OutReg(reg); + }, + _ => {} + } + + match Regex::new(r"out ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let lit = cap.at(1).unwrap().parse().unwrap(); + return Instruction::OutLit(lit); + }, + _ => {} + } + + + match Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::CpyLitReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::CpyRegReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy ([-\d]+) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::CpyLitLit(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy (a|b|c|d) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::CpyRegReg(src, dest); + }, + _ => {} + } + + + match Regex::new(r"jnz ([-\d]+) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::JnzLitReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz (a|b|c|d) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::JnzRegReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::JnzLitLit(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::JnzRegLit(src, dest); + }, + _ => {} + } + + panic!("Invalid instruction line"); + } + + fn toggle(&self) -> Self { + match *self { + Instruction::Inc(a) => Instruction::Dec(a), + Instruction::Dec(a) => Instruction::Inc(a), + + Instruction::TglLit(_) => Instruction::Noop, + Instruction::TglReg(a) => Instruction::Inc(a), + + Instruction::OutLit(_) => Instruction::Noop, + Instruction::OutReg(a) => Instruction::Inc(a), + + Instruction::CpyLitReg(a, b) => Instruction::JnzLitReg(a, b), + Instruction::CpyRegReg(a, b) => Instruction::JnzRegReg(a, b), + Instruction::CpyLitLit(a, b) => Instruction::JnzLitLit(a, b), + Instruction::CpyRegLit(a, b) => Instruction::JnzRegLit(a, b), + + Instruction::JnzLitLit(a, b) => Instruction::CpyLitLit(a, b), + Instruction::JnzRegLit(a, b) => Instruction::CpyRegLit(a, b), + Instruction::JnzLitReg(a, b) => Instruction::CpyLitReg(a, b), + Instruction::JnzRegReg(a, b) => Instruction::CpyRegReg(a, b), + Instruction::Noop => Instruction::Noop + } + } +} + +fn main() { + let expected_output = vec!(0, 1, 0, 1, 0, 1, 0, 1, 0, 1); + let min_input = (0..).find(|&i| run_program(i) == expected_output).unwrap(); + println!("{}", min_input); +} + + +fn run_program(input: i32) -> Vec { + let mut transmission = Vec::new(); + let mut program = read_file(); + + let mut registers: [i32; 4] = [input, 0, 0, 0]; + let mut pc: usize = 0; + + while pc < program.len() && transmission.len() < 10 { + let mut pc_next: usize = pc+1; + + match program[pc] { + Instruction::Inc(dest) => { + registers[dest] += 1; + }, + Instruction::Dec(dest) => { + registers[dest] -= 1; + }, + + Instruction::TglReg(offset) => { + let line_to_toggle = (pc as i32 + registers[offset]) as usize; + if line_to_toggle > 0 && line_to_toggle < program.len() { + program[line_to_toggle] = program[line_to_toggle].toggle(); + } + }, + Instruction::TglLit(offset) => { + let line_to_toggle = (pc as i32 + offset) as usize; + if line_to_toggle > 0 && line_to_toggle < program.len() { + program[line_to_toggle] = program[line_to_toggle].toggle(); + } + }, + + Instruction::OutReg(output) => { + transmission.push(registers[output]); + }, + Instruction::OutLit(output) => { + transmission.push(output); + }, + + Instruction::CpyLitReg(src, dest) => { + registers[dest] = src; + }, + Instruction::CpyRegReg(src, dest) => { + registers[dest] = registers[src]; + }, + Instruction::CpyLitLit(_, _) | Instruction::CpyRegLit(_, _) => {}, + + Instruction::JnzRegLit(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::JnzLitLit(condition, offset) => { + if condition != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::JnzRegReg(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + registers[offset]) as usize; + } + }, + Instruction::JnzLitReg(condition, offset) => { + if condition != 0 { + pc_next = (pc as i32 + registers[offset]) as usize; + } + }, + Instruction::Noop => {} + } + + pc = pc_next; + } + + transmission +} + +fn to_register_index(name: &str) -> usize { + match name { + "a" => 0, + "b" => 1, + "c" => 2, + "d" => 3, + _ => panic!("Invalid register provided") + } +} + +fn read_file() -> Vec { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap()) + .filter(|line| line.len() > 0) + .map(|line| Instruction::parse(line.trim())) + .collect() +} diff --git a/2016/aoc3/Cargo.lock b/2016/aoc3/Cargo.lock new file mode 100644 index 0000000..f581b3c --- /dev/null +++ b/2016/aoc3/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc3" +version = "0.1.0" + diff --git a/2016/aoc3/Cargo.toml b/2016/aoc3/Cargo.toml new file mode 100644 index 0000000..c8a1b62 --- /dev/null +++ b/2016/aoc3/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc3" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] diff --git a/2016/aoc3/input.txt b/2016/aoc3/input.txt new file mode 100644 index 0000000..1458df8 --- /dev/null +++ b/2016/aoc3/input.txt @@ -0,0 +1,1734 @@ + 330 143 338 + 769 547 83 + 930 625 317 + 669 866 147 + 15 881 210 + 662 15 70 + 273 277 707 + 50 592 770 + 280 313 407 + 642 487 372 + 94 619 295 + 734 243 141 + 220 141 515 + 198 824 745 + 210 787 964 + 213 627 601 + 918 4 447 + 805 630 802 + 711 237 987 + 938 552 388 + 643 405 779 + 803 747 525 + 917 832 631 + 899 292 843 + 81 206 445 + 141 874 465 + 177 974 54 + 520 725 814 + 271 958 554 + 779 579 264 + 358 18 257 + 978 77 270 + 984 88 131 + 475 702 940 + 183 756 160 + 383 941 820 + 806 142 646 + 793 275 804 + 53 272 368 + 942 821 785 + 863 830 902 + 219 52 199 + 473 479 351 + 860 522 361 + 890 240 216 + 94 756 407 + 310 189 468 + 234 909 178 + 889 667 756 + 429 485 730 + 825 405 30 + 943 806 253 + 98 455 365 + 998 454 290 + 971 576 223 + 64 429 273 + 945 779 63 + 352 960 59 + 672 948 577 + 782 43 567 + 460 315 719 + 825 604 183 + 453 442 788 + 694 632 334 + 569 619 317 + 337 49 17 + 878 468 660 + 393 598 717 + 550 827 159 + 540 362 346 + 66 713 380 + 491 477 44 + 411 114 320 + 554 96 250 + 306 67 196 + 769 553 333 + 762 436 382 + 278 322 153 + 894 603 334 + 539 441 844 + 486 162 927 + 197 9 218 + 94 221 804 + 250 220 913 + 557 626 486 + 562 705 630 + 968 922 285 + 518 36 468 + 18 608 83 + 512 611 530 + 534 37 65 + 621 136 90 + 239 113 139 + 371 640 956 + 629 54 959 + 531 620 338 + 682 499 810 + 798 170 968 + 187 640 645 + 660 535 332 + 663 530 314 + 64 26 65 + 55 285 488 + 620 288 52 + 642 474 450 + 455 9 962 + 51 760 489 + 426 760 833 + 304 783 772 + 498 765 695 + 635 53 126 + 44 430 774 + 979 943 838 + 962 892 64 + 494 709 614 + 7 695 120 + 503 114 606 + 362 340 689 + 509 367 389 + 673 410 664 + 773 262 558 + 897 958 245 + 140 773 483 + 965 468 584 + 546 209 668 + 856 381 184 + 274 237 762 + 888 677 906 + 871 516 405 + 102 529 912 + 285 724 885 + 352 501 53 + 774 139 245 + 380 309 594 + 813 185 765 + 530 645 965 + 958 618 120 + 851 202 957 + 737 476 131 + 595 546 108 + 716 113 66 + 327 215 318 + 397 343 390 + 351 143 103 + 138 91 31 + 108 224 919 + 230 276 896 + 426 975 177 + 327 975 918 + 238 365 764 + 328 799 775 + 590 906 967 + 578 460 338 + 507 619 647 + 711 617 867 + 933 478 734 + 820 760 721 + 199 711 824 + 983 214 228 + 382 150 648 + 415 782 242 + 615 754 445 + 693 689 590 + 382 784 482 + 997 181 322 + 682 241 172 + 587 302 252 + 184 135 254 + 574 104 549 + 88 738 796 + 486 715 861 + 62 491 815 + 463 434 569 + 519 622 310 + 199 443 782 + 572 657 85 + 763 517 844 + 750 175 835 + 228 269 710 + 611 316 551 + 883 546 296 + 169 693 18 + 992 743 316 + 263 529 529 + 705 570 4 + 918 706 527 + 609 285 971 + 260 533 112 + 711 486 904 + 820 40 472 + 997 301 129 + 257 288 343 + 635 439 375 + 560 381 417 + 773 105 145 + 58 963 267 + 976 742 424 + 994 441 384 + 389 770 514 + 782 463 335 + 919 727 276 + 780 794 372 + 326 180 590 + 918 946 257 + 889 842 181 + 507 61 464 + 762 835 443 + 827 607 982 + 174 875 544 + 934 885 589 + 32 343 757 + 987 826 257 + 981 782 844 + 446 291 397 + 443 800 421 + 165 668 539 + 410 373 487 + 422 803 881 + 546 998 953 + 291 607 160 + 919 894 62 + 842 718 117 + 110 816 582 + 470 836 596 + 575 687 35 + 37 835 374 + 90 954 354 + 101 141 407 + 174 398 499 + 173 737 964 + 4 365 950 + 946 616 634 + 906 904 619 + 40 789 16 + 788 769 76 + 737 867 88 + 565 812 31 + 508 380 201 + 34 935 339 + 500 862 326 + 431 181 475 + 403 346 585 + 88 530 708 + 731 137 781 + 715 563 272 + 817 659 932 + 396 368 360 + 162 683 376 + 278 620 39 + 525 910 371 + 688 524 149 + 488 998 279 + 286 392 523 + 325 144 406 + 79 532 419 + 540 460 465 + 222 832 416 + 517 507 46 + 87 744 183 + 382 819 701 + 306 763 647 + 744 74 913 + 62 813 849 + 691 874 775 + 291 422 314 + 432 630 809 + 611 510 566 + 583 745 289 + 397 19 727 + 188 766 442 + 96 108 329 + 963 719 598 + 963 764 469 + 444 636 731 + 792 636 422 + 993 1 416 + 518 300 532 + 298 312 736 + 316 111 463 + 825 569 35 + 858 591 584 + 809 84 607 + 681 610 740 + 383 279 210 + 851 733 615 + 287 959 160 + 856 851 171 + 606 115 211 + 310 541 845 + 506 119 319 + 665 471 562 + 382 885 798 + 440 29 595 + 113 903 475 + 257 773 846 + 306 741 776 + 97 804 76 + 489 332 423 + 466 632 613 + 86 739 481 + 199 846 712 + 62 282 809 + 155 681 142 + 705 525 270 + 159 800 117 + 612 664 316 + 505 616 837 + 578 839 770 + 942 535 122 + 542 781 512 + 552 22 475 + 760 791 97 + 432 626 837 + 26 616 336 + 412 316 702 + 108 232 242 + 158 311 449 + 60 141 325 + 58 1 714 + 532 977 123 + 531 978 598 + 679 899 57 + 645 523 54 + 167 892 14 + 164 574 492 + 105 37 491 + 132 555 485 + 600 879 508 + 608 843 222 + 270 255 398 + 232 960 281 + 241 995 436 + 113 674 411 + 381 567 5 + 697 450 966 + 726 857 969 + 722 686 965 + 543 20 453 + 955 689 554 + 858 161 923 + 140 979 953 + 786 836 237 + 200 322 875 + 311 623 398 + 510 814 945 + 67 387 825 + 621 620 740 + 630 842 163 + 545 75 373 + 506 531 501 + 301 571 357 + 746 491 253 + 37 29 748 + 769 507 754 + 69 886 861 + 423 629 856 + 380 723 83 + 875 647 657 + 144 696 580 + 896 49 629 + 275 598 374 + 118 636 279 + 277 80 529 + 623 130 493 + 368 712 621 + 833 730 512 + 59 767 829 + 105 933 731 + 54 240 108 + 803 235 992 + 837 726 881 + 426 855 450 + 636 730 731 + 840 561 977 + 996 229 670 + 508 234 186 + 529 108 917 + 373 337 795 + 681 35 565 + 790 251 152 + 301 235 599 + 875 416 653 + 277 338 990 + 800 207 595 + 954 650 896 + 931 667 706 + 84 851 822 + 254 778 816 + 316 141 732 + 233 759 239 + 546 473 315 + 69 15 96 + 513 470 320 + 460 188 729 + 429 950 288 + 709 807 790 + 456 161 570 + 269 718 339 + 213 628 602 + 155 367 686 + 176 418 568 + 66 251 723 + 959 696 536 + 794 279 885 + 315 527 993 + 603 853 868 + 727 747 994 + 411 287 193 + 528 763 559 + 803 149 739 + 542 883 696 + 275 676 183 + 411 317 161 + 349 875 35 + 39 729 221 + 256 831 216 + 247 238 176 + 399 59 306 + 409 445 550 + 9 387 253 + 613 204 474 + 81 868 944 + 589 912 735 + 319 264 83 + 984 704 614 + 778 614 532 + 699 762 556 + 680 250 507 + 504 581 647 + 160 351 295 + 513 739 413 + 651 915 651 + 878 218 499 + 872 990 503 + 38 886 12 + 218 201 415 + 240 250 504 + 265 448 382 + 402 876 126 + 488 950 649 + 189 210 597 + 24 850 758 + 30 451 347 + 5 437 723 + 634 310 546 + 801 179 411 + 679 338 852 + 385 32 933 + 406 531 554 + 88 516 871 + 860 486 834 + 467 535 849 + 419 820 785 + 206 649 526 + 244 499 714 + 80 774 678 + 336 149 612 + 310 175 656 + 150 221 791 + 159 806 701 + 336 465 530 + 376 819 272 + 533 472 421 + 82 124 909 + 523 561 539 + 844 811 576 + 439 612 587 + 782 457 686 + 152 51 837 + 413 573 855 + 403 608 26 + 893 819 910 + 361 499 657 + 677 937 617 + 428 6 343 + 310 38 431 + 474 35 420 + 574 256 221 + 700 907 515 + 149 685 478 + 206 325 720 + 114 51 67 + 320 338 686 + 293 59 527 + 147 756 986 + 250 697 573 + 968 194 545 + 542 480 72 + 454 574 619 + 473 55 592 + 475 339 889 + 884 313 993 + 125 127 742 + 591 514 585 + 543 583 282 + 264 580 390 + 839 487 781 + 902 664 868 + 334 459 819 + 107 20 211 + 368 479 775 + 683 691 273 + 681 336 630 + 22 978 536 + 926 828 708 + 210 319 723 + 787 689 866 + 854 633 856 + 960 494 866 + 122 687 596 + 918 705 539 + 84 564 791 + 876 138 949 + 836 1 500 + 718 308 466 + 228 311 271 + 421 998 433 + 622 772 174 + 875 720 432 + 680 687 509 + 215 95 623 + 674 732 166 + 198 174 645 + 721 839 390 + 617 896 448 + 73 331 155 + 789 134 431 + 853 376 400 + 82 862 411 + 779 362 70 + 750 777 349 + 674 604 224 + 812 731 446 + 280 546 336 + 922 781 619 + 196 892 876 + 941 361 479 + 344 988 873 + 499 92 795 + 287 913 546 + 625 167 604 + 617 1 399 + 154 166 720 + 328 323 111 + 713 619 530 + 606 756 580 + 194 247 935 + 149 65 64 + 55 287 902 + 870 866 127 + 478 679 587 + 900 459 565 + 563 787 743 + 962 798 769 + 669 39 525 + 745 691 317 + 484 123 93 + 500 598 348 + 159 535 681 + 618 176 877 + 723 373 464 + 304 184 131 + 542 209 654 + 716 47 647 + 976 537 771 + 914 606 568 + 241 250 481 + 616 640 660 + 744 187 843 + 303 617 927 + 369 525 773 + 754 697 360 + 595 560 605 + 562 589 610 + 799 497 655 + 823 553 532 + 937 502 449 + 976 941 158 + 194 720 347 + 474 694 822 + 528 184 272 + 922 698 568 + 415 889 638 + 169 822 65 + 547 281 663 + 582 167 110 + 365 56 914 + 431 162 923 + 473 812 578 + 572 890 386 + 164 119 308 + 604 946 496 + 327 142 72 + 641 916 472 + 743 663 228 + 107 446 345 + 823 486 152 + 997 47 968 + 565 155 631 + 438 205 416 + 271 163 875 + 123 393 111 + 169 412 854 + 615 683 659 + 592 362 9 + 99 895 668 + 834 205 172 + 359 355 550 + 499 149 389 + 755 298 916 + 475 706 807 + 829 425 118 + 43 527 479 + 159 473 874 + 151 326 992 + 970 660 509 + 837 930 35 + 164 345 506 + 209 879 487 + 97 157 503 + 289 755 793 + 624 897 293 + 382 134 451 + 257 917 339 + 110 168 85 + 470 583 139 + 486 613 120 + 584 747 795 + 959 699 339 + 866 384 672 + 157 639 464 + 939 485 409 + 947 441 131 + 179 953 581 + 735 587 605 + 834 582 36 + 304 422 707 + 195 348 347 + 163 521 486 + 948 471 675 + 915 453 406 + 40 345 635 + 81 124 115 + 127 105 127 + 50 32 10 + 221 399 397 + 487 676 412 + 574 607 450 + 268 625 323 + 843 858 145 + 706 286 218 + 822 168 254 + 950 708 944 + 572 640 775 + 958 563 909 + 996 154 918 + 378 626 564 + 335 823 339 + 499 810 270 + 294 22 98 + 987 959 591 + 101 899 442 + 931 409 576 + 542 102 655 + 404 980 398 + 759 990 381 + 692 990 750 + 752 93 149 + 278 973 883 + 621 459 232 + 398 261 626 + 221 212 744 + 790 241 352 + 802 218 317 + 443 294 244 + 393 131 941 + 466 378 885 + 516 419 240 + 799 748 407 + 468 502 386 + 829 329 766 + 432 376 408 + 681 88 198 + 553 351 489 + 234 717 59 + 332 525 675 + 437 691 723 + 441 834 433 + 616 144 274 + 966 911 650 + 254 274 782 + 346 714 856 + 330 696 171 + 394 407 298 + 897 553 867 + 755 503 956 + 253 840 382 + 923 195 262 + 918 735 483 + 55 703 227 + 768 759 225 + 825 238 14 + 7 479 978 + 211 603 957 + 216 866 94 + 112 698 60 + 847 631 307 + 940 164 253 + 406 133 14 + 380 816 425 + 147 873 429 + 698 987 98 + 534 823 691 + 197 690 754 + 979 39 468 + 928 73 531 + 119 66 920 + 982 810 569 + 476 534 397 + 931 366 182 + 783 104 732 + 131 32 619 + 784 136 530 + 16 933 484 + 995 987 739 + 985 88 977 + 43 919 914 + 540 399 915 + 566 859 257 + 639 419 73 + 727 118 865 + 477 370 834 + 293 434 155 + 422 557 603 + 203 243 754 + 373 15 748 + 466 574 807 + 282 576 70 + 275 365 608 + 987 644 648 + 711 629 717 + 420 410 696 + 252 417 874 + 642 26 202 + 223 23 531 + 545 580 675 + 565 600 521 + 130 745 142 + 264 377 397 + 300 618 253 + 683 331 279 + 440 826 275 + 835 785 266 + 592 264 590 + 257 255 173 + 532 23 620 + 571 749 434 + 988 552 492 + 566 766 234 + 617 818 776 + 45 113 882 + 579 793 114 + 971 243 608 + 979 241 241 + 130 83 634 + 91 361 5 + 311 107 501 + 377 388 496 + 727 849 317 + 323 702 256 + 804 254 189 + 70 11 246 + 752 425 785 + 799 413 882 + 917 133 695 + 959 49 902 + 420 121 412 + 177 170 158 + 828 734 135 + 880 875 75 + 824 556 960 + 857 689 960 + 74 951 2 + 246 687 756 + 311 93 487 + 209 626 886 + 17 545 566 + 963 252 283 + 947 493 805 + 185 493 462 + 728 365 885 + 808 214 528 + 582 780 100 + 30 254 654 + 596 706 553 + 713 968 803 + 123 270 839 + 792 778 475 + 442 95 682 + 931 212 678 + 781 140 439 + 651 645 978 + 137 829 286 + 593 503 895 + 642 215 144 + 687 122 934 + 84 240 919 + 656 515 774 + 51 799 273 + 636 324 924 + 213 161 309 + 509 157 458 + 582 1 727 + 716 269 819 + 978 343 303 + 828 264 708 + 108 620 190 + 12 12 634 + 103 615 579 + 364 286 660 + 809 714 656 + 729 504 10 + 994 366 341 + 433 796 77 + 663 462 353 + 776 687 758 + 751 495 651 + 33 751 753 + 349 919 228 + 204 799 584 + 335 156 563 + 725 191 535 + 731 676 524 + 455 571 10 + 899 379 689 + 773 641 812 + 324 761 421 + 354 557 897 + 571 740 161 + 407 271 856 + 886 393 428 + 286 870 218 + 950 819 347 + 331 847 858 + 498 471 689 + 357 378 775 + 890 503 514 + 201 863 428 + 721 737 796 + 636 178 974 + 14 387 936 + 622 424 144 + 82 201 727 + 127 164 779 + 173 319 326 + 195 748 641 + 469 512 510 + 626 949 405 + 552 542 251 + 192 204 382 + 655 558 631 + 970 519 3 + 918 701 399 + 56 543 403 + 524 848 641 + 620 431 539 + 604 473 824 + 369 105 464 + 575 957 429 + 859 978 199 + 712 381 199 + 941 305 738 + 892 663 937 + 653 963 365 + 70 331 508 + 620 923 682 + 739 122 350 + 288 418 768 + 733 326 520 + 694 472 793 + 725 415 739 + 895 398 201 + 500 157 168 + 727 814 354 + 807 726 340 + 431 329 212 + 635 374 403 + 677 78 347 + 386 559 505 + 385 361 161 + 262 494 621 + 481 237 767 + 318 966 640 + 723 732 546 + 911 652 823 + 958 502 677 + 718 258 834 + 98 666 506 + 929 41 933 + 869 637 605 + 585 156 335 + 490 316 149 + 436 339 323 + 596 948 224 + 275 433 241 + 545 890 155 + 601 413 676 + 893 401 673 + 694 171 403 + 211 110 482 + 267 61 541 + 206 124 256 + 189 353 308 + 351 880 70 + 237 677 380 + 759 754 388 + 465 99 862 + 852 787 925 + 758 890 804 + 252 817 784 + 773 129 860 + 954 102 872 + 743 396 730 + 500 304 173 + 492 399 527 + 413 465 813 + 670 837 933 + 897 424 430 + 782 404 14 + 151 24 418 + 897 260 306 + 811 287 386 + 440 93 449 + 229 185 582 + 136 63 678 + 211 250 940 + 184 400 209 + 122 383 238 + 143 386 111 + 320 194 415 + 925 790 501 + 924 596 614 + 606 733 277 + 886 116 194 + 278 627 189 + 225 536 981 + 487 538 584 + 539 2 793 + 219 456 57 + 341 424 941 + 199 482 921 + 231 241 588 + 711 740 334 + 596 554 323 + 917 164 629 + 19 138 756 + 939 70 225 + 536 432 401 + 137 614 14 + 593 818 402 + 871 280 515 + 268 259 326 + 900 97 376 + 68 699 461 + 546 810 400 + 540 697 676 + 591 125 751 + 159 719 919 + 605 763 898 + 171 845 459 + 115 289 376 + 265 636 317 + 646 225 84 + 663 755 89 + 192 828 12 + 316 523 822 + 310 933 784 + 44 721 873 + 893 873 461 + 898 15 548 + 96 861 726 + 9 837 398 + 238 404 29 + 227 845 428 + 770 764 472 + 960 747 784 + 990 281 811 + 59 597 111 + 930 799 729 + 930 882 758 + 459 961 116 + 484 83 914 + 83 969 994 + 828 423 132 + 346 541 246 + 783 484 303 + 983 7 921 + 216 208 905 + 802 216 54 + 6 121 306 + 609 36 749 + 608 84 626 + 97 705 89 + 200 688 878 + 242 314 802 + 294 66 338 + 768 417 272 + 785 351 266 + 58 505 668 + 791 291 679 + 783 694 43 + 794 468 355 + 777 796 171 + 378 784 426 + 224 510 840 + 557 606 708 + 513 127 189 + 231 976 517 + 772 37 433 + 684 973 324 + 70 661 83 + 914 136 702 + 917 630 710 + 826 894 84 + 373 416 248 + 551 924 226 + 357 646 374 + 890 491 246 + 938 293 519 + 66 42 704 + 537 60 374 + 508 56 405 + 437 751 653 + 681 718 160 + 683 293 800 + 569 288 878 + 692 206 611 + 173 157 399 + 201 492 645 + 98 132 329 + 234 612 711 + 296 54 975 + 651 219 923 + 527 177 138 + 585 598 302 + 552 653 474 + 54 288 358 + 828 631 279 + 854 642 746 + 80 52 645 + 386 346 181 + 488 7 569 + 168 351 533 + 906 186 681 + 833 404 191 + 863 297 526 + 451 555 808 + 336 544 155 + 253 211 838 + 759 819 238 + 921 343 761 + 264 632 690 + 165 424 159 + 121 481 361 + 181 409 439 + 94 972 995 + 696 904 722 + 613 238 422 + 190 281 334 + 385 127 129 + 300 364 234 + 479 768 937 + 883 654 35 + 979 679 959 + 244 51 788 + 275 613 804 + 143 575 210 + 160 168 608 + 330 471 651 + 407 594 410 + 723 576 943 + 268 912 361 + 692 442 760 + 443 288 20 + 382 610 556 + 62 694 568 + 322 257 214 + 253 458 861 + 260 213 829 + 37 137 420 + 668 220 104 + 673 150 435 + 551 466 897 + 390 729 999 + 423 963 763 + 837 36 295 + 854 726 495 + 16 728 389 + 735 246 510 + 218 136 617 + 604 197 140 + 113 355 499 + 631 902 488 + 689 898 212 + 780 826 901 + 556 205 657 + 855 661 288 + 141 34 480 + 27 23 194 + 115 53 393 + 333 287 700 + 68 300 671 + 394 589 28 + 572 248 771 + 454 118 797 + 526 141 300 + 785 377 504 + 886 723 105 + 541 712 470 + 156 128 932 + 479 85 989 + 381 207 162 + 813 839 544 + 143 783 541 + 916 361 24 + 878 133 886 + 986 750 335 + 122 643 864 + 395 460 591 + 387 896 627 + 117 455 109 + 2 14 569 + 873 364 215 + 875 350 554 + 70 878 940 + 234 846 82 + 256 279 901 + 693 990 473 + 951 866 824 + 923 408 891 + 36 5 531 + 954 654 266 + 921 652 434 + 561 701 427 + 232 764 365 + 330 331 73 + 46 813 6 + 380 698 297 + 396 221 289 + 135 867 633 + 814 649 286 + 797 918 827 + 705 58 338 + 6 305 310 + 701 352 28 + 903 97 825 + 693 126 794 + 438 144 592 + 367 932 400 + 320 820 264 + 687 210 652 + 682 84 566 + 671 604 816 + 529 646 267 + 795 654 114 + 955 426 118 + 249 759 102 + 343 581 267 + 341 619 107 + 479 57 341 + 683 32 870 + 630 609 210 + 361 643 803 + 506 856 406 + 580 562 359 + 312 433 154 + 750 379 920 + 448 520 312 + 733 259 899 + 33 786 319 + 579 669 90 + 595 769 242 + 160 985 236 + 654 903 946 + 635 99 802 + 75 158 437 + 467 382 289 + 406 542 548 + 684 417 794 + 729 105 122 + 44 485 689 + 737 15 713 + 970 391 17 + 373 384 729 + 336 1 118 + 814 807 759 + 965 808 828 + 179 181 834 + 242 94 838 + 188 183 82 + 691 402 618 + 984 43 561 + 330 447 872 + 553 581 30 + 884 393 836 + 431 298 837 + 278 389 690 + 976 587 803 + 722 220 538 + 548 208 107 + 629 414 729 + 543 584 672 + 512 431 954 + 475 367 959 + 226 306 9 + 824 774 668 + 188 22 870 + 722 764 300 + 647 803 256 + 410 972 21 + 436 536 278 + 995 577 453 + 670 439 224 + 434 488 572 + 82 317 498 + 559 823 662 + 499 614 196 + 944 14 432 + 618 866 652 + 467 872 289 + 471 722 189 + 923 756 17 + 790 409 195 + 511 500 545 + 667 283 758 + 271 373 283 + 573 686 490 + 659 706 560 + 770 247 633 + 424 169 895 + 47 349 411 + 380 235 805 + 384 546 148 + 747 870 831 + 754 421 910 + 937 15 433 + 188 760 806 + 872 748 418 + 718 556 510 + 165 590 486 + 798 40 177 + 349 923 530 + 795 690 746 + 550 671 360 + 824 442 775 + 331 686 152 + 570 270 926 + 860 64 383 + 408 464 170 + 758 440 349 + 773 434 699 + 780 563 352 + 18 644 621 + 432 663 188 + 420 887 956 + 237 586 788 + 319 526 586 + 544 647 115 + 628 235 511 + 666 408 33 + 670 459 697 + 48 189 692 + 837 708 428 + 462 652 632 + 426 106 457 + 730 744 195 + 700 816 769 + 383 480 923 + 601 612 910 + 559 953 779 + 533 937 240 + 464 123 344 + 579 82 76 + 179 188 373 + 1 641 56 + 688 698 50 + 688 160 4 + 790 364 767 + 202 70 137 + 914 420 674 + 961 657 851 + 578 708 875 + 503 94 776 + 221 143 356 + 34 126 403 + 234 31 78 + 721 949 330 + 675 191 460 + 80 957 651 + 690 580 824 + 461 73 802 + 725 606 51 + 183 857 521 + 708 800 482 + 644 111 37 + 769 778 869 + 883 693 909 + 549 714 43 + 273 246 599 + 637 309 675 + 451 195 552 + 681 408 126 + 422 465 52 + 743 235 144 + 248 586 312 + 42 398 313 + 222 335 21 + 528 312 738 + 856 312 132 + 915 79 610 + 550 605 186 + 566 815 698 + 127 250 717 + 532 129 775 + 604 132 549 + 134 44 247 + 521 815 470 + 370 853 515 + 795 187 851 + 963 295 50 + 757 228 169 + 706 303 120 + 416 133 309 + 956 63 11 + 751 162 301 + 387 632 29 + 257 383 994 + 215 247 994 + 529 606 963 + 770 305 756 + 721 791 971 + 558 531 675 + 253 477 918 + 470 52 615 + 256 335 24 + 301 523 651 + 316 702 637 + 321 721 32 + 591 730 179 + 341 364 146 + 673 120 501 + 31 183 207 + 641 116 463 + 221 54 775 + 262 458 669 + 139 486 904 + 736 260 139 + 406 359 663 + 434 563 753 + 981 6 215 + 423 320 358 + 719 319 415 + 315 375 320 + 7 637 423 + 314 365 175 + 199 687 754 + 174 546 1 + 29 526 754 + 153 402 251 + 787 565 919 + 820 239 876 + 994 614 47 + 958 816 288 + 244 750 275 + 248 890 694 + 628 194 414 + 774 958 466 + 181 34 442 + 569 371 939 + 500 347 740 + 745 123 467 + 614 662 119 + 201 690 352 + 596 974 215 + 508 921 240 + 405 947 317 + 402 372 733 + 298 41 357 + 135 339 759 + 544 683 690 + 584 1 893 + 215 680 501 + 191 453 649 + 952 84 727 + 815 494 293 + 163 168 46 + 136 119 441 + 185 112 474 + 877 830 354 + 497 242 226 + 484 714 178 + 854 570 402 + 873 120 432 + 30 613 50 + 365 529 624 + 969 332 586 + 636 617 153 + 588 669 314 + 12 52 628 + 584 704 642 + 95 199 69 + 979 486 705 + 953 391 698 + 698 471 333 + 302 466 64 + 678 19 376 + 353 860 905 + 236 113 797 + 400 879 962 + 341 805 493 + 661 506 196 + 736 357 644 + 943 352 365 + 484 756 282 + 491 943 262 + 765 494 729 + 321 208 986 + 621 346 290 + 258 706 386 + 179 452 276 + 433 583 153 + 708 2 212 + 193 151 320 + 647 149 299 + 335 951 831 + 661 787 792 + 818 742 477 + 799 964 157 + 726 780 172 + 740 225 24 + 428 39 263 + 388 901 506 + 97 940 413 + 41 454 826 + 324 453 443 + 346 76 938 + 463 595 751 + 854 948 454 + 451 902 507 + 722 961 130 + 695 529 425 + 59 591 467 + 559 623 222 + 991 194 196 + 749 793 245 + 474 327 247 + 346 2 277 + 643 328 135 + 785 264 751 + 35 537 887 + 811 584 685 + 475 903 748 + 471 115 698 + 7 945 449 + 464 880 227 + 287 868 878 + 564 11 850 + 221 623 475 + 314 325 553 + 209 865 621 + 39 655 236 + 95 296 235 + 124 920 21 + 439 473 902 + 334 375 792 + 315 116 768 + 267 736 95 + 703 606 595 + 505 886 514 + 114 168 52 + 301 584 495 + 200 709 527 + 164 422 554 + 246 546 460 + 377 141 223 + 286 323 354 + 810 240 90 + 920 450 425 + 277 8 570 + 28 649 50 + 295 650 534 + 690 187 665 + 674 184 483 + 68 139 376 + 570 430 500 + 590 422 543 + 304 68 43 + 422 666 163 + 501 375 696 + 81 621 813 + 19 981 945 + 410 83 941 + 427 945 25 + 283 408 825 + 281 648 635 + 294 678 615 + 113 936 500 + 554 772 314 + 502 642 624 + 262 318 699 + 88 526 817 + 242 468 161 + 820 179 253 + 580 62 531 + 343 183 422 + 430 161 485 + 26 127 435 + 442 32 517 + 491 243 544 + 552 680 310 + 131 489 457 + 697 162 526 + 897 838 305 + 695 748 335 + 753 936 24 + 46 681 637 + 745 808 617 + 318 251 171 + 49 39 855 + 359 284 725 + 221 837 145 + 581 821 444 + 573 267 318 + 706 969 583 + 722 912 586 + 680 86 869 + 833 546 97 + 865 507 481 + 938 104 386 + 941 217 265 + 360 53 607 + 634 197 476 + 787 659 444 + 368 163 783 + 493 738 345 + 182 539 52 + 764 827 612 + 699 493 663 + 914 384 17 + 495 546 260 + 739 461 275 + 386 91 394 + 804 506 198 + 780 421 269 + 109 669 193 + 457 298 349 + 560 800 331 + 282 153 637 + 160 254 807 + 434 204 476 + 717 759 737 + 629 785 65 + 347 614 790 + 270 663 647 + 188 271 528 + 277 929 591 + 853 744 589 + 704 881 761 + 573 714 627 + 541 689 287 + 540 301 187 + 670 397 368 + 867 8 698 + 869 146 802 + 10 137 104 + 164 575 450 + 507 233 466 + 548 425 46 + 435 824 78 + 334 951 34 + 646 551 99 + 60 829 569 + 501 866 382 + 440 327 222 + 744 132 333 + 800 983 126 + 887 866 451 + 28 599 39 + 833 129 307 + 804 519 319 + 510 746 821 + 639 209 561 + 197 649 333 + 638 644 361 + 754 474 366 + 193 219 106 + 843 536 331 + 483 634 611 + 367 195 592 + 753 71 115 + 934 42 83 + 337 75 85 + 475 304 169 + 672 143 211 + 360 406 74 + 370 119 111 + 351 955 696 + 543 849 785 + 375 576 836 + 288 316 239 + 512 273 786 + 721 407 82 + 998 634 292 + 449 399 284 + 540 316 693 + 430 68 984 + 146 376 482 + 785 134 643 + 157 509 441 + 808 615 552 + 920 564 452 + 407 341 441 + 990 778 211 + 822 325 925 + 368 206 876 + 491 153 126 + 11 373 546 + 854 752 143 + 843 773 660 + 777 472 964 + 359 708 889 + 575 941 882 + 945 22 152 + 968 237 115 + 30 238 110 + 101 504 412 + 119 646 719 + 28 190 336 + 890 301 712 + 11 657 782 + 885 465 361 + 424 669 645 + 528 654 194 + 894 252 667 + 516 299 998 + 370 837 976 + 305 651 194 + 701 447 175 + 470 234 929 + 752 606 965 + 568 370 322 + 226 592 281 + 553 801 330 + 576 228 623 + 639 477 637 + 252 664 998 + 781 215 994 + 446 698 25 + 562 500 980 + 702 444 299 + 971 550 387 + 754 562 439 + 347 896 716 + 242 861 596 + 588 829 323 + 464 211 949 + 481 192 47 + 598 98 963 + 932 960 32 + 933 482 893 + 15 989 888 + 866 735 629 + 636 513 470 + 280 528 944 + 531 66 867 + 284 735 865 + 778 743 3 + 458 131 262 + 772 273 255 + 942 278 50 + 269 151 917 + 502 4 883 + 538 155 68 + 929 850 21 + 126 759 729 + 869 689 711 + 180 359 855 + 299 68 975 + 210 371 205 + 477 183 827 + 922 50 841 + 665 154 312 + 379 848 486 + 450 835 743 + 69 161 515 + 680 535 83 + 692 779 352 + 818 554 389 + 781 89 538 + 746 218 209 + 292 201 652 + 417 375 393 + 916 962 644 + 518 923 561 + 915 469 386 + 142 460 454 + 947 392 89 + 144 840 866 + 205 465 967 + 209 657 650 + 891 322 207 + 800 522 907 + 516 498 994 + 185 806 804 + 179 393 137 + 316 765 892 + 850 756 123 + 494 783 627 + 832 53 659 + 93 949 602 + 666 954 516 + 592 11 210 + 223 4 389 + 221 280 388 + 100 279 50 + 380 589 345 + 385 238 382 + 205 506 359 + 98 280 652 + 396 371 290 + 314 477 454 + 368 692 564 + 48 263 586 + 356 902 922 diff --git a/2016/aoc3/src/main.rs b/2016/aoc3/src/main.rs new file mode 100644 index 0000000..678933f --- /dev/null +++ b/2016/aoc3/src/main.rs @@ -0,0 +1,64 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + + +struct Triangle { + l1: i32, + l2: i32, + l3: i32 +} + +impl Triangle { + fn is_valid(&self) -> bool { + (self.l1 + self.l2) > self.l3 && + (self.l2 + self.l3) > self.l1 && + (self.l3 + self.l1) > self.l2 + + } +} + +fn main() { + let len = read_file().iter().filter(|tri| tri.is_valid()).count(); + println!("{} valid triangles", len); +} + +fn read_file() -> Vec { + let file = BufReader::new(File::open("input.txt").unwrap()); + let mut lines = file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .peekable(); + + let mut results = Vec::new(); + while lines.peek().is_some() { + let (t11, t21, t31) = parse_line(lines.next().unwrap()); + let (t12, t22, t32) = parse_line(lines.next().unwrap()); + let (t13, t23, t33) = parse_line(lines.next().unwrap()); + + results.push(Triangle { + l1: t11, + l2: t12, + l3: t13 + }); + results.push(Triangle { + l1: t21, + l2: t22, + l3: t23 + }); + results.push(Triangle { + l1: t31, + l2: t32, + l3: t33 + }); + } + results +} + +fn parse_line(line: String) -> (i32, i32, i32) { + let mut separated = line.split_whitespace(); + (separated.next().unwrap().trim().parse().unwrap(), + separated.next().unwrap().trim().parse().unwrap(), + separated.next().unwrap().trim().parse().unwrap()) +} + diff --git a/2016/aoc4/Cargo.lock b/2016/aoc4/Cargo.lock new file mode 100644 index 0000000..df3af88 --- /dev/null +++ b/2016/aoc4/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc4" +version = "0.1.0" + diff --git a/2016/aoc4/Cargo.toml b/2016/aoc4/Cargo.toml new file mode 100644 index 0000000..7d02c6d --- /dev/null +++ b/2016/aoc4/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc4" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] diff --git a/2016/aoc4/input.txt b/2016/aoc4/input.txt new file mode 100644 index 0000000..c23ffc2 --- /dev/null +++ b/2016/aoc4/input.txt @@ -0,0 +1,1091 @@ +gbc-frperg-pubpbyngr-znantrzrag-377[rgbnp] +nij-mywlyn-wlsiayhcw-jfumncw-alumm-mbcjjcha-422[mcjwa] +pualyuhapvuhs-ibuuf-zhslz-227[uhalp] +xlrypetn-prr-lylwjdtd-665[dzoya] +zilqwikbqdm-rmttgjmiv-mvoqvmmzqvo-278[mqvio] +rgllk-bxmefuo-sdmee-geqd-fqefuzs-274[efdgl] +ugfkmewj-yjsvw-wyy-lwuzfgdgyq-814[wygfj] +lnkfaypeha-xwogap-bejwjyejc-524[uqzms] +laffe-sorozgxe-mxgjk-jek-xkykgxin-254[kxegf] +ytu-xjhwjy-hfsid-htfynsl-qtlnxynhx-411[hyntx] +vetllbybxw-xzz-mktbgbgz-709[kblty] +ixeumktoi-kmm-giwaoyozout-176[oimkt] +frqvxphu-judgh-udpsdjlqj-udeelw-uhvhdufk-647[ntbsq] +ixccb-hjj-uhvhdufk-725[hcjub] +sehheiylu-isqludwuh-xkdj-qsgkyiyjyed-634[ydehi] +yhwooebeaz-acc-ajcejaanejc-316[acejo] +qyujihctyx-vumeyn-zchuhwcha-318[hcuya] +xtwtelcj-rclop-clmmte-nzyeltyxpye-171[eltcy] +pinovwgz-mvwwdo-yzkgjthzio-941[owzgi] +htwwtxnaj-xhfajsljw-mzsy-hzxytrjw-xjwanhj-229[jwhxa] +amlqskcp-epybc-cee-pcyaosgqgrgml-652[cegpa] +fab-eqodqf-omzpk-emxqe-560[eqfmo] +bnmrtldq-fqzcd-idkkxadzm-qdrdzqbg-365[dqzbk] +ovbunmneqbhf-wryylorna-qrirybczrag-559[rbnya] +ynukcajey-xwogap-iwjwcaiajp-966[jydme] +dkqjcbctfqwu-uecxgpigt-jwpv-fgrctvogpv-128[cgptv] +ugfkmewj-yjsvw-tmffq-vwhdgqewfl-606[zfmlc] +htqtwkzq-idj-ijxnls-723[rwmzt] +kgjgrypw-epybc-aylbw-amyrgle-amlryglkclr-184[lygra] +jxdkbqfz-yrkkv-bkdfkbbofkd-705[csxut] +ujqgywfau-uzgugdslw-sfsdqkak-684[duboh] +rwcnawjcrxwju-mhn-nwprwnnarwp-823[wnrac] +eqttqukxg-rncuvke-itcuu-ujkrrkpi-102[ukrtc] +jvuzbtly-nyhkl-ibuuf-dvyrzovw-201[uvybl] +tvsnigxmpi-fewoix-wxsveki-750[ixesv] +rtqlgevkng-ejqeqncvg-ncdqtcvqta-336[prlxq] +wfummczcyx-luvvcn-nywbhifias-864[cfimn] +irdgrxzex-vxx-nfibjyfg-763[xfgir] +buzahisl-ipvohghykvbz-qlssfilhu-klclsvwtlua-591[moyzp] +dpotvnfs-hsbef-sbnqbhjoh-fhh-nbobhfnfou-831[vbmns] +owshgfarwv-lgh-kwujwl-usfvq-ghwjslagfk-164[wgfhl] +yuxufmdk-sdmpq-bxmefuo-sdmee-dqeqmdot-222[dmequ] +clotzlnetgp-clmmte-opawzjxpye-873[elptc] +mfklstdw-usfvq-kwjnauwk-268[kwfsu] +vhglnfxk-zktwx-unggr-xgzbgxxkbgz-839[gxkzb] +yrwxefpi-tpewxmg-kveww-ywiv-xiwxmrk-932[pxhgu] +shmml-cynfgvp-tenff-qrfvta-143[fmntv] +zhdsrqlchg-sodvwlf-judvv-uhdftxlvlwlrq-855[ldvhf] +kfg-jvtivk-sleep-uvjzxe-711[evjkf] +molgbzqfib-yxphbq-obpbxoze-757[bopqx] +qfmcusbwq-qobrm-qcohwbu-fsoqeiwgwhwcb-168[qwbco] +sbejpbdujwf-gmpxfs-tupsbhf-623[bfpsj] +jsehsyafy-hdsklau-yjskk-ksdwk-242[ksyad] +rwcnawjcrxwju-ljwmh-bcxajpn-823[jwcan] +excdklvo-oqq-oxqsxoobsxq-874[oqxsb] +buzahisl-jhukf-jvhapun-klwsvftlua-565[uahlf] +gpbepvxcv-snt-steadnbtci-453[tbcen] +wyvqljapsl-ihzrla-zlycpjlz-149[lzajp] +amlqskcp-epybc-cee-kylyeckclr-938[cekly] +jchipqat-qphzti-advxhixrh-895[hiapq] +tinnm-qvcqczohs-qighcasf-gsfjwqs-818[jfuek] +qyujihctyx-mwupyhayl-bohn-wihnuchgyhn-890[hynuc] +wlqqp-nvrgfezqvu-irsszk-ivjvrity-607[viqrs] +molgbzqfib-avb-cfkxkzfkd-315[bfkza] +luxciuwncpy-wuhxs-womnigyl-mylpcwy-266[ylhtr] +ugdgjxmd-bwddqtwsf-ugflsafewfl-762[qdtes] +fmsledevhsyw-nippcfier-eguymwmxmsr-438[vmsip] +xekdwvwnzkqo-xwogap-ajcejaanejc-706[aejwc] +wfummczcyx-yaa-fiacmncwm-136[bxsio] +rdadguja-tvv-ldgzhwde-375[dagve] +wsvsdkbi-qbkno-oqq-domrxyvyqi-718[qobdi] +oaxadrgx-qss-oazfmuzyqzf-300[mfedb] +hqfxxnknji-uqfxynh-lwfxx-xfqjx-125[zkwtx] +gpbepvxcv-qphzti-rdcipxcbtci-947[cpibt] +etyyx-bzmcx-bnzshmf-qdrdzqbg-443[btyez] +htqtwkzq-gzssd-qfgtwfytwd-541[ogntm] +uiovmbqk-kpwkwtibm-mvoqvmmzqvo-798[awevt] +zotts-vumeyn-xypyfijgyhn-448[qasni] +zovldbkfz-pzxsbkdbo-erkq-xznrfpfqflk-367[eunpo] +htwwtxnaj-gntmfefwitzx-hfsid-htfynsl-zxjw-yjxynsl-255[tfnwx] +vhglnfxk-zktwx-vahvhetmx-labiibgz-839[hvxab] +htqtwkzq-idj-wjhjnansl-983[rmtzn] +irgyyolokj-vrgyzoi-mxgyy-aykx-zkyzotm-358[yogkz] +ktfitzbgz-lvtoxgzxk-angm-wxitkmfxgm-943[vxmua] +uwtojhynqj-hmthtqfyj-jslnsjjwnsl-879[jhnst] +mrxivrexmsrep-gerhc-gsexmrk-hiwmkr-100[yzpuo] +hdgdovmt-bmvyz-ezggtwzvi-adivixdib-707[divgz] +lqwhuqdwlrqdo-iorzhu-ghvljq-959[qhldo] +vhkkhlbox-wrx-inkvatlbgz-397[kbhlv] +tyepcyletzylw-awldetn-rcldd-dezclrp-795[ldect] +sedikcuh-whqtu-uww-tufqhjcudj-946[uhwcd] +lsyrkjkbnyec-zvkcdsm-qbkcc-myxdksxwoxd-848[kcdsx] +fnjyxwrinm-lqxlxujcn-mnyjacvnwc-355[ncjxl] +gpbepvxcv-tvv-rdcipxcbtci-141[cvpbi] +xgsvgmotm-hgyqkz-ykxboiky-124[gkymo] +udskkaxawv-usfvq-esjcwlafy-814[uidxk] +fydelmwp-nlyoj-opalcexpye-899[elpyo] +aczupnetwp-qwzhpc-afcnsldtyr-717[cpant] +bknsykmdsfo-nio-yzobkdsyxc-926[kosyb] +xjmmjndqz-xcjxjgvoz-mzvxlpdndodji-343[fqvmn] +amjmpdsj-qaytclecp-fslr-bcqgel-782[claej] +fnjyxwrinm-ouxfna-anjlzdrbrcrxw-719[nrxaf] +qcbgiasf-ufors-pogysh-zcuwghwqg-168[gscfh] +kmjezxodgz-wpiit-mzxzdqdib-109[aypcu] +ckgvutofkj-xghhoz-uvkxgzouty-696[ajsic] +lsyrkjkbnyec-mkxni-cdybkqo-510[kybcn] +tipfxvezt-gcrjkzt-xirjj-jvimztvj-919[pofxi] +pbybeshy-cynfgvp-tenff-svanapvat-403[afnpv] +cjpibabsepvt-cvooz-usbjojoh-155[objcp] +jvyyvzpcl-lnn-ayhpupun-929[npylu] +wsvsdkbi-qbkno-zvkcdsm-qbkcc-oxqsxoobsxq-276[sbkoq] +ugdgjxmd-usfvq-ugslafy-ugflsafewfl-918[xbmpo] +nwlddtqtpo-ojp-xlcvpetyr-639[ptdlo] +nzcczdtgp-prr-opdtry-587[wsiym] +ynssr-yehpxk-wxlbzg-111[plhnx] +xjmmjndqz-xcjxjgvoz-xjiovdihzio-967[jxioz] +enqvbnpgvir-pubpbyngr-znexrgvat-585[qtsjn] +gvcskirmg-qekrixmg-ikk-xvemrmrk-126[kmrgi] +gpbepvxcv-uadltg-ejgrwphxcv-921[gpvce] +kmjezxodgz-nxvqzibzm-cpio-adivixdib-941[izdxb] +hcd-gsqfsh-xszzmpsob-sbuwbssfwbu-428[sbfhu] +nwlddtqtpo-upwwjmply-dpcgtnpd-119[pdtwl] +mbggf-msvdly-zlycpjlz-929[aonev] +lhkhszqx-fqzcd-qzaahs-btrsnldq-rdquhbd-443[qdhsz] +luxciuwncpy-xsy-uwkocmcncih-500[cuinw] +qvbmzvibqwvit-kpwkwtibm-zmkmqdqvo-564[mqvbi] +tvsnigxmpi-jpsaiv-irkmriivmrk-568[yileu] +vxupkizork-kmm-lotgtiotm-748[xymrs] +gpewwmjmih-gerhc-hiwmkr-152[lostk] +ibghopzs-gqojsbusf-vibh-rsgwub-818[bsghi] +guahyncw-luvvcn-wihnuchgyhn-552[hncug] +iruzfrtkzmv-treup-tfrkzex-ivjvrity-373[rtivz] +dsxxw-cee-ylyjwqgq-704[eqwxy] +lhkhszqx-fqzcd-eknvdq-lzmzfdldms-911[dzlqf] +oxmeeuruqp-omzpk-oamfuzs-emxqe-248[emoup] +dyz-combod-mkxni-mykdsxq-vklybkdybi-848[dkybm] +bpvctixr-qphzti-ldgzhwde-999[abmop] +kwvacumz-ozilm-jiasmb-mvoqvmmzqvo-824[tnqvi] +njmjubsz-hsbef-kfmmzcfbo-nbobhfnfou-389[luxhg] +hwbba-fag-tgceswkukvkqp-622[kabgw] +nchhg-jiasmb-lmxizbumvb-382[bmhia] +ymszqfuo-dmnnuf-emxqe-170[syxpj] +ymszqfuo-qss-abqdmfuaze-144[qsafm] +tcfkqcevkxg-hwbba-hnqygt-vtckpkpi-440[kctbg] +zloolpfsb-gbiivybxk-rpbo-qbpqfkd-705[bopfi] +slqryzjc-pyzzgr-rpyglgle-288[uanmz] +iutyaskx-mxgjk-inuiurgzk-rumoyzoiy-696[klmzy] +dpssptjwf-cvooz-efqmpznfou-311[fopsz] +dsxxw-cee-dglylagle-756[eldgx] +nwlddtqtpo-upwwjmply-xlcvpetyr-223[pltwd] +jvuzbtly-nyhkl-lnn-lunpullypun-201[tqlba] +uiovmbqk-kivlg-bmkpvwtwog-720[kpvsu] +nchhg-xtiabqk-oziaa-zmamizkp-850[aizhk] +molgbzqfib-zixppfcfba-gbiivybxk-pqloxdb-237[igmjz] +jyfvnlupj-jhukf-jvhapun-yljlpcpun-539[dmnws] +hqtyeqsjylu-sqdto-tufqhjcudj-712[cnysz] +gsvvswmzi-gerhc-gsrxemrqirx-100[dlypm] +ktwbhtvmbox-xzz-vhgmtbgfxgm-709[bgmtx] +hjgbwuladw-uzgugdslw-vwhsjlewfl-580[wlgud] +njmjubsz-hsbef-kfmmzcfbo-efqmpznfou-181[subnv] +bnknqetk-bzmcx-zbpthrhshnm-417[bhnkm] +gspsvjyp-fyrrc-jmrergmrk-126[rgjmp] +bjfutsneji-gntmfefwitzx-kqtbjw-fhvznxnynts-307[ntfjb] +sedikcuh-whqtu-rqiauj-tuiywd-270[gipnv] +hjgbwuladw-bwddqtwsf-jwsuimakalagf-294[wadbf] +encuukhkgf-uecxgpigt-jwpv-rwtejcukpi-986[ucegk] +nzydfxpc-rclop-nlyoj-nzletyr-zapcletzyd-847[lyzcn] +eqpuwogt-itcfg-lgnnadgcp-tgceswkukvkqp-518[gckpt] +nzwzcqfw-mldvpe-afcnsldtyr-171[cdfln] +ide-htrgti-snt-advxhixrh-401[hitdr] +fmsledevhsyw-gerhc-gsexmrk-erepcwmw-776[emrsw] +jvyyvzpcl-yhiipa-aljouvsvnf-201[vyaij] +chnylhuncihuf-zfiqyl-mniluay-656[hilnu] +udskkaxawv-xdgowj-klgjsyw-346[eruiv] +pbeebfvir-sybjre-qrcnegzrag-585[erbga] +aoubshwq-qobrm-obozmgwg-948[obgmq] +jvsvymbs-ibuuf-huhsfzpz-747[subfh] +qvbmzvibqwvit-jiasmb-ikycqaqbqwv-928[qbiva] +zuv-ykixkz-kmm-jkyomt-748[kmyzi] +slqryzjc-zsllw-amlryglkclr-808[lrcsy] +enzcntvat-enoovg-ybtvfgvpf-273[vntef] +iqmbazulqp-dmnnuf-oazfmuzyqzf-664[zfmqu] +yaxsnlcrun-ouxfna-uxprbcrlb-537[nruxa] +ovbunmneqbhf-cynfgvp-tenff-ratvarrevat-351[uakpm] +qzchnzbshud-idkkxadzm-rghoohmf-885[hdzkm] +fodvvlilhg-sodvwlf-judvv-fxvwrphu-vhuylfh-101[vfhld] +qvbmzvibqwvit-kpwkwtibm-apqxxqvo-798[qvbiw] +aoubshwq-pwcvonofrcig-rms-aofyshwbu-688[oswab] +hwbba-gii-fgrnqaogpv-882[gabif] +pkl-oaynap-acc-pnwejejc-186[acpej] +ltpedcxots-qphzti-ejgrwphxcv-323[ptceh] +mybbycsfo-nio-nofovyzwoxd-250[stdkc] +bgmxkgtmbhgte-ietlmbv-zktll-inkvatlbgz-397[ptrnf] +dpotvnfs-hsbef-dipdpmbuf-qvsdibtjoh-545[dbfps] +fmsledevhsyw-veqtekmrk-tpewxmg-kveww-hitevxqirx-568[evwkm] +ykjoqian-cnwza-ywjzu-ykwpejc-wymqeoepekj-628[hmfzu] +wihmogyl-aluxy-vumeyn-jolwbumcha-240[lmuya] +yuxufmdk-sdmpq-eomhqzsqd-tgzf-emxqe-664[mqdef] +wifilzof-vumeyn-guhuaygyhn-864[uyfgh] +hplazytkpo-nlyoj-cpdplcns-457[plcno] +vhglnfxk-zktwx-utldxm-hixktmbhgl-917[tursp] +jxdkbqfz-zxkav-zlxqfkd-pxibp-133[xkzbd] +mfklstdw-xdgowj-jwuwanafy-554[wadfj] +eqttqukxg-tcddkv-vtckpkpi-596[ampxv] +tpspahyf-nyhkl-jovjvshal-mpuhujpun-591[fkeyj] +vqr-ugetgv-ecpfa-eqcvkpi-ujkrrkpi-414[ekprv] +mvkccspson-bkllsd-nozvyiwoxd-952[oscdk] +ugjjgkanw-ugfkmewj-yjsvw-bwddqtwsf-kwjnauwk-528[nkliy] +wkqxodsm-lexxi-myxdksxwoxd-848[xdkmo] +tfiifjzmv-tyftfcrkv-jyzggzex-841[unmyd] +wdjcvuvmyjpn-rzvkjiduzy-mvwwdo-adivixdib-421[dvijw] +xzwrmkbqtm-jcvvg-amzdqkma-226[uonyt] +tvsnigxmpi-mrxivrexmsrep-veffmx-xvemrmrk-308[mrxev] +iehepwnu-cnwza-nwxxep-owhao-420[wenah] +fubrjhqlf-edvnhw-wudlqlqj-725[lqdfh] +wfummczcyx-wuhxs-mniluay-370[cbijt] +jchipqat-eaphixr-vgphh-sthxvc-895[hpaci] +pelbtravp-ohaal-hfre-grfgvat-169[arefg] +jshzzpmplk-jhukf-aljouvsvnf-279[jfhkl] +hwbba-ejqeqncvg-ocpcigogpv-128[cgbeo] +fnjyxwrinm-ajkkrc-cajrwrwp-745[rjwac] +mhi-lxvkxm-utldxm-tgterlbl-267[lmtxb] +jxdkbqfz-bdd-pqloxdb-237[dbqxf] +qfkkj-nzydfxpc-rclop-clmmte-xlylrpxpye-197[vzyuc] +bxaxipgn-vgpst-qxdwpopgsdjh-ytaanqtpc-hwxeexcv-687[csdop] +rdggdhxkt-eaphixr-vgphh-itrwcdadvn-245[dhgra] +qlm-pbzobq-zxkav-zlxqfkd-obzbfsfkd-471[bzfkq] +ajyqqgdgcb-qaytclecp-fslr-sqcp-rcqrgle-106[cqglr] +zgmfyxypbmsq-aylbw-amyrgle-qfgnngle-704[jmbna] +pkl-oaynap-acc-zalhkuiajp-654[apckl] +bqxnfdmhb-okzrshb-fqzrr-btrsnldq-rdquhbd-599[nszgr] +mybbycsfo-mkxni-mykdsxq-cobfsmoc-302[mbcos] +ujoon-eaphixr-vgphh-ldgzhwde-141[hdego] +iuxxuyobk-hatte-lotgtiotm-852[toiux] +muqfedyput-rkddo-huqsgkyiyjyed-608[dyuek] +mrxivrexmsrep-ikk-irkmriivmrk-230[rikme] +htqtwkzq-wfggny-ywfnsnsl-749[nwfgq] +sno-rdbqds-idkkxadzm-trdq-sdrshmf-599[dsrkm] +apuut-wpiit-gvwjmvojmt-369[tijmp] +molgbzqfib-yxphbq-tlohpelm-133[blhmo] +ugdgjxmd-wyy-hmjuzskafy-866[ydgjm] +slqryzjc-hcjjwzcyl-dglylagle-860[lcjyg] +ktwbhtvmbox-wrx-etuhktmhkr-241[psbxd] +oaddaeuhq-otaoaxmfq-ruzmzouzs-950[aouzd] +ugfkmewj-yjsvw-tmffq-klgjsyw-528[sqogh] +vrurcjah-pajmn-ajvyjprwp-ljwmh-anlnrerwp-433[jkstx] +fab-eqodqf-vqxxknqmz-ymdwqfuzs-586[qfdmx] +tpspahyf-nyhkl-kfl-klwhyatlua-123[lahky] +zntargvp-enoovg-znexrgvat-195[gnvae] +dkqjcbctfqwu-uecxgpigt-jwpv-ugtxkegu-934[gucte] +owshgfarwv-xdgowj-jwkwsjuz-320[wjgos] +gifavtkzcv-treup-jyzggzex-659[gzetv] +bjfutsneji-gfxpjy-tujwfyntsx-203[jftns] +pxtihgbsxw-ietlmbv-zktll-ybgtgvbgz-371[bgtli] +crwwv-zxkav-pefmmfkd-367[fkmvw] +sbqiiyvyut-fbqijys-whqii-tulubefcudj-998[xytos] +gvcskirmg-gsvvswmzi-fewoix-pskmwxmgw-230[gmswi] +eqttqukxg-ejqeqncvg-octmgvkpi-232[qegtc] +lqwhuqdwlrqdo-fdqgb-zrunvkrs-439[qdrlu] +tinnm-gqojsbusf-vibh-gozsg-480[gsbin] +lujbbrornm-ljwmh-orwjwlrwp-849[rwjlb] +jef-iushuj-rkddo-efuhqjyedi-868[dejuf] +szfyrqriuflj-treup-jrcvj-971[slkjz] +ltpedcxots-rpcsn-itrwcdadvn-921[cdtnp] +ohmnuvfy-xsy-jolwbumcha-968[hmouy] +gntmfefwitzx-wfintfhynaj-uqfxynh-lwfxx-wjhjnansl-905[fnwxh] +xcitgcpixdcpa-tvv-hwxeexcv-271[cxvei] +jyfvnlupj-qlssfilhu-ayhpupun-227[zbydk] +wdjcvuvmyjpn-zbb-vxlpdndodji-291[djvbn] +wfummczcyx-dyffsvyuh-xymcah-630[ycfmh] +cebwrpgvyr-wryylorna-phfgbzre-freivpr-897[opgba] +cjpibabsepvt-tdbwfohfs-ivou-fohjoffsjoh-363[fobhj] +zekvierkzferc-jtrmvexvi-ylek-wzeretzex-425[erzkv] +sgmtkzoi-pkrrehkgt-ygrky-228[kgrty] +iruzfrtkzmv-jtrmvexvi-ylek-jkfirxv-971[nvfye] +dfcxsqhwzs-pogysh-obozmgwg-870[goshw] +yuxufmdk-sdmpq-vqxxknqmz-bgdotmeuzs-326[tidcv] +iuxxuyobk-igtje-ygrky-878[mflrz] +laffe-igtje-vaxingyotm-800[aefgi] +tpspahyf-nyhkl-wshzapj-nyhzz-zhslz-643[hzpsy] +diozmivodjivg-xviyt-ozxcijgjbt-473[cmtlp] +pyknyegle-njyqrga-epyqq-pcyaosgqgrgml-314[gyqep] +bwx-amkzmb-zijjqb-tijwzibwzg-824[egorq] +drxevkzt-vxx-uvjzxe-581[xvezd] +ktfitzbgz-cxeeruxtg-wxitkmfxgm-761[txgef] +htsxzrjw-lwfij-wfggny-ywfnsnsl-801[cjidb] +oxmeeuruqp-nmewqf-pqeusz-742[eqump] +hqfxxnknji-kzeed-ojqqdgjfs-jslnsjjwnsl-671[jnsqd] +pbybeshy-rtt-phfgbzre-freivpr-221[rbepf] +pdjqhwlf-edvnhw-xvhu-whvwlqj-231[hwvdj] +gcfcnuls-aluxy-vumeyn-lywycpcha-188[cylua] +plolwdub-judgh-edvnhw-pdqdjhphqw-699[dhpwj] +udpsdjlqj-hjj-pdqdjhphqw-751[jdhpq] +amjmpdsj-pyzzgr-qyjcq-886[jmpqy] +lahxpnwrl-ljwmh-bqryyrwp-667[tifxe] +drxevkzt-avccpsvre-uvgcfpdvek-191[vcedk] +xzwrmkbqtm-rmttgjmiv-apqxxqvo-928[lmkgz] +eqnqthwn-tcddkv-fgrctvogpv-648[tvcdg] +bjfutsneji-ojqqdgjfs-ijajqturjsy-515[jqsfi] +sebehvkb-hqrryj-ixyffydw-166[siyrz] +zlkprjbo-doxab-mixpqfz-doxpp-jxohbqfkd-783[yjhzq] +eza-dpncpe-nsznzwlep-opdtry-821[sdeti] +tbxmlkfwba-yxphbq-xkxivpfp-523[slfmk] +ucynmlgxcb-hcjjwzcyl-umpiqfmn-548[cmjln] +lxwbdvna-pajmn-bljenwpna-qdwc-dbna-cnbcrwp-199[nabwc] +eadalsjq-yjsvw-wyy-jwsuimakalagf-892[ajswy] +fruurvlyh-mhoobehdq-zrunvkrs-907[rhuov] +sbqiiyvyut-vbemuh-sedjqydcudj-686[ltadr] +fkqbokxqflkxi-avb-lmboxqflkp-991[kbflq] +lhkhszqx-fqzcd-atmmx-kzanqzsnqx-677[qzxah] +cebwrpgvyr-hafgnoyr-cynfgvp-tenff-qrcnegzrag-793[rxmql] +ajmrxjlcren-cxy-bnlanc-ouxfna-lxwcjrwvnwc-927[cnxaj] +hqtyeqsjylu-isqludwuh-xkdj-tulubefcudj-244[udjlq] +vdzonmhydc-azrjds-cdudknoldms-157[lzowh] +uwtojhynqj-kqtbjw-zxjw-yjxynsl-333[grmkp] +myxcewob-qbkno-oqq-ecob-docdsxq-614[oqbcd] +rkpqxyib-gbiivybxk-abpfdk-419[bikpx] +zlilocri-zelzlixqb-qbzeklildv-497[ucyzj] +pinovwgz-xviyt-vivgtndn-499[vingt] +gcfcnuls-aluxy-luvvcn-xymcah-318[cluan] +sebehvkb-fbqijys-whqii-husuylydw-400[bhisy] +rdchjbtg-vgpst-eaphixr-vgphh-rjhidbtg-htgkxrt-323[hgtrp] +pualyuhapvuhs-jshzzpmplk-wshzapj-nyhzz-zlycpjlz-175[zphla] +atyzghrk-sgmtkzoi-hgyqkz-yzuxgmk-228[gkzyh] +ohmnuvfy-mwupyhayl-bohn-yhachyylcha-630[hyacl] +oxjmxdfkd-avb-pqloxdb-211[dxboa] +iqmbazulqp-bdavqofuxq-omzpk-ruzmzouzs-482[zqumo] +zsxyfgqj-gzssd-wjxjfwhm-619[jsfgw] +qvbmzvibqwvit-jcvvg-abwziom-512[tcrkb] +xgjougizobk-lruckx-aykx-zkyzotm-826[koxzg] +bkzrrhehdc-rbzudmfdq-gtms-zmzkxrhr-755[rzdhm] +myxcewob-qbkno-cmkfoxqob-rexd-zebmrkcsxq-302[syrvm] +zekvierkzferc-treup-tfrkzex-uvgrikdvek-867[ekrvz] +cvabijtm-lgm-bziqvqvo-330[vbimq] +vhglnfxk-zktwx-ktuubm-vhgmtbgfxgm-553[gkmtx] +xst-wigvix-fyrrc-vieguymwmxmsr-490[yentm] +ktfitzbgz-fbebmtkr-zktwx-xzz-lmhktzx-111[ztkbx] +vdzonmhydc-eknvdq-sqzhmhmf-963[xacdu] +dmpuamofuhq-otaoaxmfq-efadmsq-742[amfoq] +htqtwkzq-gfxpjy-wjxjfwhm-827[fnred] +sbnqbhjoh-xfbqpojafe-cbtlfu-dpoubjonfou-311[kezry] +qyujihctyx-vumeyn-lywycpcha-604[ychua] +ide-htrgti-tvv-uxcpcrxcv-973[ctvir] +bxaxipgn-vgpst-snt-gtprfjxhxixdc-791[xgpti] +nbhofujd-dipdpmbuf-dvtupnfs-tfswjdf-363[dfpub] +apuut-nxvqzibzm-cpio-mznzvmxc-291[zmcin] +uzfqdzmfuazmx-otaoaxmfq-pqhqxabyqzf-768[pzmry] +tpspahyf-nyhkl-ibuuf-klwhyatlua-253[xkrsz] +iqmbazulqp-vqxxknqmz-efadmsq-950[jrnox] +bpvctixr-rpcsn-igpxcxcv-375[cpxir] +ytu-xjhwjy-uqfxynh-lwfxx-yjhmstqtld-489[xyhjt] +qvbmzvibqwvit-ntwemz-kwvbiqvumvb-720[vbimq] +mhi-lxvkxm-ietlmbv-zktll-vnlmhfxk-lxkobvx-553[eusnm] +tpspahyf-nyhkl-jhukf-wbyjohzpun-487[hpyfj] +avw-zljyla-qlssfilhu-zlycpjlz-929[lzajs] +sawlkjevaz-xwogap-skngodkl-290[akglo] +xgjougizobk-laffe-lruckx-gtgreyoy-774[goefk] +aoubshwq-qobrm-qcohwbu-qighcasf-gsfjwqs-948[qsbho] +wifilzof-vumeyn-lyuwkocmcncih-968[avixc] +uiovmbqk-xtiabqk-oziaa-mvoqvmmzqvo-382[moqva] +sawlkjevaz-oywrajcan-dqjp-lqnydwoejc-342[ajwcd] +kfg-jvtivk-jtrmvexvi-ylek-rercpjzj-529[jvekr] +houngfgxjuay-igtje-giwaoyozout-228[gouai] +gcfcnuls-aluxy-mwupyhayl-bohn-ijyluncihm-916[tacdb] +cjpibabsepvt-cvooz-ufdiopmphz-155[pobci] +iuxxuyobk-igtje-sgtgmksktz-878[uwcvx] +thnulapj-ibuuf-ylzlhyjo-305[sfdnr] +xzwrmkbqtm-rmttgjmiv-zmamizkp-434[ifpry] +yhwooebeaz-zua-yqopkian-oanreya-680[aoeyn] +tfcfiwlc-wcfnvi-wzeretzex-243[cefwi] +guahyncw-xsy-uwkocmcncih-864[qsmtb] +ovbunmneqbhf-rtt-qrfvta-689[zymsd] +rgllk-eomhqzsqd-tgzf-ymdwqfuzs-638[qzdfg] +ryexqpqhteki-sqdto-seqjydw-skijecuh-iuhlysu-946[eqshi] +avw-zljyla-qlssfilhu-mpuhujpun-383[luahj] +pynffvsvrq-onfxrg-znantrzrag-143[nrfag] +ikhcxvmbex-xzz-phkdlahi-839[cstrx] +mvhkvbdib-wvnfzo-zibdizzmdib-187[bizdv] +ipvohghykvbz-wshzapj-nyhzz-huhsfzpz-747[hzpsv] +htqtwkzq-hmthtqfyj-ijuqtdrjsy-151[tqhjy] +xzz-ftgtzxfxgm-865[tupfq] +jyfvnlupj-jhukf-klwhyatlua-747[jydsc] +mbiyqoxsm-mkxni-kxkvicsc-510[ikmxc] +bgmxkgtmbhgte-ietlmbv-zktll-labiibgz-163[bglti] +vdzonmhydc-bqxnfdmhb-rbzudmfdq-gtms-lzmzfdldms-469[arkps] +forwcoqhwjs-gqojsbusf-vibh-rsgwub-688[dgqsb] +qcffcgwjs-pogysh-qcbhowbasbh-688[bchsf] +apuut-xviyt-yzqzgjkhzio-317[zituy] +ide-htrgti-qjccn-jhtg-ithixcv-479[itchg] +kgjgrypw-epybc-hcjjwzcyl-cleglccpgle-262[qphrv] +atyzghrk-lruckx-jkvruesktz-384[krtuz] +hqtyeqsjylu-rqiauj-vydqdsydw-998[gqeba] +uwtojhynqj-gfxpjy-qfgtwfytwd-177[fjtwy] +nglmtuex-xzz-ftgtzxfxgm-839[xgtzf] +ncjzrpytn-clmmte-epnsyzwzrj-951[yqksh] +gntmfefwitzx-gzssd-htsyfnsrjsy-333[cngmk] +qcbgiasf-ufors-qvcqczohs-hfowbwbu-168[bcfoq] +wlqqp-gcrjkzt-xirjj-dribvkzex-529[ycrxs] +drxevkzt-irdgrxzex-jtrmvexvi-ylek-glityrjzex-321[erxit] +ovbunmneqbhf-qlr-znexrgvat-559[nbeqr] +bwx-amkzmb-jiasmb-camz-bmabqvo-512[bmazc] +vcibutulxiom-vohhs-womnigyl-mylpcwy-838[fczlm] +fmsledevhsyw-ikk-hitpscqirx-230[owjnv] +ykhknbqh-ywjzu-ykwpejc-odellejc-940[xguqm] +nsyjwsfyntsfq-gzssd-uzwhmfxnsl-203[sfnwy] +mtzslklcozfd-clmmte-nzyeltyxpye-301[tmlui] +dsxxw-cee-kypicrgle-106[ecxdg] +ujqgywfau-aflwjfslagfsd-tskcwl-ghwjslagfk-476[fagls] +nchhg-jcvvg-mvoqvmmzqvo-642[vmcgh] +cjpibabsepvt-tdbwfohfs-ivou-efqmpznfou-831[mvwiq] +votubcmf-njmjubsz-hsbef-dboez-dpbujoh-fohjoffsjoh-129[izchs] +njmjubsz-hsbef-fhh-nbobhfnfou-337[unims] +iwcjapey-lhwopey-cnwoo-hkceopeyo-576[oecpw] +ydjuhdqjyedqb-fbqijys-whqii-efuhqjyedi-322[qdijy] +bknsykmdsfo-lkcuod-mecdywob-cobfsmo-250[obcdk] +sbqiiyvyut-zubboruqd-cqdqwucudj-530[uqbdc] +etaqigpke-dcumgv-vgejpqnqia-960[egqai] +ykjoqian-cnwza-nwxxep-paydjkhkcu-134[pcdmt] +iehepwnu-cnwza-lhwopey-cnwoo-nawymqeoepekj-108[ewnop] +vagreangvbany-rtt-phfgbzre-freivpr-221[raegv] +surmhfwloh-sodvwlf-judvv-xvhu-whvwlqj-595[vhwlu] +qekrixmg-ikk-gywxsqiv-wivzmgi-256[jsykh] +sno-rdbqds-bgnbnkzsd-otqbgzrhmf-495[rypqa] +guahyncw-vohhs-nywbhifias-214[hains] +sno-rdbqds-atmmx-bnmszhmldms-365[posvl] +zovldbkfz-zxkav-zlxqfkd-zlkqxfkjbkq-575[zrqmk] +ykhknbqh-zua-owhao-888[hakob] +xmrrq-vqw-ugflsafewfl-372[isvjx] +wdjcvuvmyjpn-wpiit-vxlpdndodji-395[cvdlm] +wyvqljapsl-ihzrla-zopwwpun-123[lpwaz] +kdijqrbu-tou-husuylydw-816[uvcwx] +fhezusjybu-fbqijys-whqii-husuylydw-764[uyhis] +jyfvnlupj-kfl-mpuhujpun-773[ujpfl] +hafgnoyr-pubpbyngr-nanylfvf-715[nkyzs] +jfifqxov-doxab-oxyyfq-absbilmjbkq-341[qmgrk] +nij-mywlyn-wuhxs-wiuncha-uwkocmcncih-188[cnwhi] +amjmpdsj-afmamjyrc-ylyjwqgq-470[jmayq] +rdggdhxkt-eaphixr-vgphh-jhtg-ithixcv-921[yvuxl] +ucynmlgxcb-qaytclecp-fslr-dglylagle-184[tudeg] +dpmpsgvm-tdbwfohfs-ivou-sfdfjwjoh-363[qhgxy] +bqvvu-ykhknbqh-fahhuxawj-wymqeoepekj-498[hekqa] +qczcftiz-xszzmpsob-sbuwbssfwbu-818[sbzcf] +aietsrmdih-hci-wlmttmrk-360[imthr] +xst-wigvix-ikk-qevoixmrk-256[ikxve] +nzydfxpc-rclop-nzwzcqfw-mfyyj-opalcexpye-405[cpyfz] +frqvxphu-judgh-udeelw-uhdftxlvlwlrq-933[ludhe] +jsehsyafy-jsttal-hmjuzskafy-892[sajyf] +zbytomdsvo-mrymyvkdo-vyqscdsmc-276[mydos] +tcorcikpi-ecpfa-eqcvkpi-fgxgnqrogpv-934[jziot] +ytu-xjhwjy-hfsid-wjxjfwhm-905[jhwfx] +hjgbwuladw-tmffq-suimakalagf-554[afglm] +pyknyegle-zsllw-nspafyqgle-730[leygn] +gifavtkzcv-avccpsvre-uvjzxe-607[zhayg] +bpvctixr-snt-tcvxcttgxcv-973[vrteq] +wyvqljapsl-jovjvshal-zlycpjlz-175[nrwfe] +kwzzwaqdm-lgm-aitma-122[amwzd] +iqmbazulqp-dmnnuf-qzsuzqqduzs-690[qhzsm] +udskkaxawv-xdgowj-xafsfuafy-138[nailf] +ipvohghykvbz-wshzapj-nyhzz-yljlpcpun-929[lwyvn] +forwcoqhwjs-foppwh-hsqvbczcum-636[chowf] +pualyuhapvuhs-msvdly-svnpzapjz-903[pasuv] +xgjougizobk-vrgyzoi-mxgyy-xkykgxin-436[tjykb] +sedikcuh-whqtu-rkddo-cqdqwucudj-348[brlqi] +elrkdcdugrxv-fdqgb-uhfhlylqj-465[dlfgh] +mhi-lxvkxm-lvtoxgzxk-angm-ltexl-917[xlmgk] +bqvvu-fahhuxawj-yqopkian-oanreya-212[cpdwf] +buzahisl-jhukf-thyrlapun-903[hualb] +rgllk-oaxadrgx-nmewqf-pqbxakyqzf-690[aqxfg] +iuruxlar-irgyyolokj-jek-ynovvotm-488[ohpdn] +xmtjbzidx-nxvqzibzm-cpio-yzkgjthzio-811[zixbj] +xmrrq-ugfkmewj-yjsvw-usfvq-ugslafy-ghwjslagfk-866[fgsju] +yhtwhnpun-wshzapj-nyhzz-vwlyhapvuz-851[hznpw] +zgmfyxypbmsq-zyqicr-kypicrgle-340[ycgim] +uwtojhynqj-hfsid-htfynsl-wjfhvznxnynts-489[nhfjs] +fab-eqodqf-dmnnuf-bgdotmeuzs-196[dfbem] +wifilzof-wuhxs-wiuncha-lyuwkocmcncih-578[ciwhu] +gspsvjyp-veffmx-pefsvexsvc-516[svefp] +yknnkoera-xwogap-bejwjyejc-732[ejakn] +nsyjwsfyntsfq-gfxpjy-knsfshnsl-333[sfnyj] +fodvvlilhg-gbh-ghvljq-595[vgprj] +nuatmlmdpage-bxmefuo-sdmee-emxqe-482[emadu] +jvyyvzpcl-msvdly-vwlyhapvuz-903[vylpz] +fruurvlyh-iorzhu-vdohv-517[hruvo] +houngfgxjuay-hgyqkz-ykxboiky-618[ygkho] +gsrwyqiv-kvehi-gerhc-gsexmrk-xiglrspskc-750[grsei] +pualyuhapvuhs-qlssfilhu-zhslz-799[hlsua] +nwlddtqtpo-nlyoj-nzletyr-opdtry-119[tdlno] +fydelmwp-prr-nfdezxpc-dpcgtnp-535[pdcef] +qmpmxevc-kvehi-jpsaiv-hizipstqirx-672[ipveh] +nzwzcqfw-nlyoj-nzletyr-opawzjxpye-587[znwye] +bpvctixr-rwdrdapit-hpath-973[prtad] +gzefmnxq-omzpk-oazfmuzyqzf-430[zfmoq] +wpuvcdng-hnqygt-vgejpqnqia-102[tmdxr] +aoubshwq-foppwh-igsf-hsghwbu-610[tsrzk] +wihmogyl-aluxy-mwupyhayl-bohn-mbcjjcha-422[vuypz] +cqwdujys-uww-sedjqydcudj-478[djuwc] +votubcmf-tdbwfohfs-ivou-sfbdrvjtjujpo-883[fobjt] +gpbepvxcv-ytaanqtpc-apqdgpidgn-427[pagcd] +bnknqetk-eknvdq-qdrdzqbg-885[qdknb] +uwtojhynqj-wfruflnsl-hfsid-wjxjfwhm-541[fjwhl] +zhdsrqlchg-fodvvlilhg-gbh-frqwdlqphqw-361[hlqdg] +cvabijtm-jcvvg-lmxizbumvb-174[vbmci] +fruurvlyh-fdqgb-ghsorbphqw-205[hrbfg] +pualyuhapvuhs-msvdly-thyrlapun-279[uahlp] +iehepwnu-cnwza-ydkykhwpa-ajcejaanejc-212[oqwrn] +bqvvu-xwogap-yqopkian-oanreya-680[ckqtm] +ktwbhtvmbox-vahvhetmx-mxvaghehzr-917[hvmtx] +uzfqdzmfuazmx-omzpk-oamfuzs-fqotzaxask-274[mnilo] +gntmfefwitzx-idj-rfsfljrjsy-931[fjirs] +tcrjjzwzvu-tfiifjzmv-tyftfcrkv-vexzevvizex-399[vzfte] +oaddaeuhq-vqxxknqmz-qzsuzqqduzs-404[qzdua] +sorozgxe-mxgjk-yigbktmkx-natz-zxgototm-514[hejid] +eadalsjq-yjsvw-ujqgywfau-tskcwl-kwjnauwk-554[wajks] +lxuxaodu-rwcnawjcrxwju-ljwmh-fxatbqxy-693[xwaju] +plolwdub-judgh-fdqgb-frdwlqj-vdohv-153[dlbfg] +kdijqrbu-jef-iushuj-sqdto-seqjydw-kiuh-juijydw-218[iqtvx] +tfejldvi-xiruv-tfcfiwlc-srjbvk-jyzggzex-243[fijvc] +jchipqat-ltpedcxots-uadltg-tcvxcttgxcv-609[ezynj] +ryexqpqhteki-sxesebqju-udwyduuhydw-816[eudqy] +iuxxuyobk-xgjougizobk-hatte-sgtgmksktz-436[pwdlc] +gcfcnuls-aluxy-wuhxs-wiuncha-guleyncha-136[ucahl] +ugfkmewj-yjsvw-usfvq-ugslafy-mkwj-lwklafy-476[ohqre] +laffe-vxupkizork-vrgyzoi-mxgyy-uvkxgzouty-488[awgqz] +eqttqukxg-hnqygt-rwtejcukpi-570[tqegk] +yuxufmdk-sdmpq-ngzzk-ruzmzouzs-534[zumdk] +ktwbhtvmbox-ietlmbv-zktll-kxtvjnblbmbhg-553[btlkm] +qxdwpopgsdjh-eaphixr-vgphh-prfjxhxixdc-999[hpxdg] +bnmrtldq-fqzcd-oqnidbshkd-qzaahs-cdoknxldms-703[lxvwe] +gokzyxsjon-nio-gybucryz-172[oygnz] +cqwdujys-uww-cqhaujydw-660[wucdj] +mbggf-pualyuhapvuhs-msvdly-aljouvsvnf-123[ngwhl] +crwwv-oxaflxzqfsb-zelzlixqb-ixyloxqlov-913[lxoqz] +qlm-pbzobq-ciltbo-abmxoqjbkq-861[bqolm] +oqnidbshkd-dff-rghoohmf-313[dfhob] +lzfmdshb-eknvdq-cdudknoldms-937[dklmn] +wsvsdkbi-qbkno-nio-ecob-docdsxq-614[jsetb] +zlilocri-zxkav-zlxqfkd-qoxfkfkd-835[kflxz] +wlqqp-upv-vexzevvizex-165[vepqx] +vcibutulxiom-vumeyn-womnigyl-mylpcwy-838[myilu] +pelbtravp-cynfgvp-tenff-svanapvat-663[kzmfp] +xgvnndadzy-wpiit-jkzmvodjin-421[dinjv] +foadouwbu-pogysh-fsqswjwbu-480[osuwb] +yrwxefpi-hci-wxsveki-308[iewxc] +tmrszakd-azrjds-otqbgzrhmf-105[rzadm] +sbnqbhjoh-dboez-dpbujoh-usbjojoh-155[bohjd] +eqnqthwn-gii-fgrctvogpv-908[ginqt] +uiovmbqk-jcvvg-amzdqkma-356[mvakq] +sbejpbdujwf-gmpxfs-pqfsbujpot-857[pbfjs] +ide-htrgti-ytaanqtpc-stepgibtci-531[mnyed] +aietsrmdih-glsgspexi-gywxsqiv-wivzmgi-230[igsem] +htqtwkzq-xhfajsljw-mzsy-zxjw-yjxynsl-931[cmkfr] +ckgvutofkj-xgjougizobk-yigbktmkx-natz-lotgtiotm-436[tgkoi] +nwlddtqtpo-upwwjmply-fdpc-epdetyr-509[pdtwe] +irdgrxzex-sleep-jyzggzex-373[tvnma] +crwwv-zxkav-qoxfkfkd-939[lyjmh] +ejpanjwpekjwh-nwzekwypera-oywrajcan-dqjp-nawymqeoepekj-368[zmuyt] +lzfmdshb-rbzudmfdq-gtms-knfhrshbr-495[bdfhm] +nchhg-rmttgjmiv-uizsmbqvo-252[mghit] +amjmpdsj-aylbw-rpyglgle-626[lagjm] +dfcxsqhwzs-pogysh-qighcasf-gsfjwqs-220[sfghq] +xjgjmapg-nxvqzibzm-cpio-nojmvbz-707[jmzbg] +zntargvp-enoovg-qrirybczrag-663[scjtg] +bkzrrhehdc-qzaahs-qdzbpthrhshnm-391[zjbto] +hafgnoyr-wryylorna-erprvivat-429[rayno] +apwmeclga-afmamjyrc-rpyglgle-262[aglmc] +jsvagsulanw-jsttal-hmjuzskafy-606[asjlt] +bnknqetk-lhkhszqx-fqzcd-cxd-zmzkxrhr-651[kzhqx] +ykhknbqh-nwxxep-nayaerejc-966[enahk] +vrurcjah-pajmn-kdwwh-cajrwrwp-667[rwajc] +vhehkyne-utldxm-vhgmtbgfxgm-891[ghmet] +zotts-dyffsvyuh-xymcah-812[yfhst] +vhglnfxk-zktwx-vtgwr-vnlmhfxk-lxkobvx-319[gvnom] +ajvyjprwp-mhn-nwprwnnarwp-563[npwra] +guahyncw-chnylhuncihuf-jfumncw-alumm-guleyncha-110[zjirh] +hwdtljsnh-jll-xfqjx-801[jlhxd] +xjgjmapg-mvwwdo-xjiovdihzio-525[ijodg] +pybgmyargtc-zgmfyxypbmsq-zsllw-asqrmkcp-qcptgac-262[cgmpy] +aflwjfslagfsd-hdsklau-yjskk-esfsywewfl-528[sflak] +lugjuacha-dyffsvyuh-xypyfijgyhn-708[yfhua] +lxaaxbren-mhn-cnlqwxuxph-823[nzsvm] +sehheiylu-tou-cqdqwucudj-738[xciqn] +slqryzjc-djmucp-qrmpyec-808[sznhq] +ykjoqian-cnwza-bhksan-opknwca-264[ankco] +pualyuhapvuhs-lnn-bzly-alzapun-721[auzfj] +tfiifjzmv-wcfnvi-jkfirxv-997[fivjc] +lsyrkjkbnyec-mkxni-mykdsxq-vyqscdsmc-562[ksycm] +fnjyxwrinm-lujbbrornm-ajkkrc-nwprwnnarwp-927[zmyco] +pyknyegle-amlqskcp-epybc-hcjjwzcyl-qcptgacq-860[cpyel] +rzvkjiduzy-ezggtwzvi-kpmxcvndib-811[zivdg] +wyvqljapsl-yhiipa-bzly-alzapun-773[alpyi] +joufsobujpobm-dipdpmbuf-bdrvjtjujpo-415[gvkud] +zloolpfsb-zxkav-zlxqfkd-lmboxqflkp-393[lfkox] +zilqwikbqdm-jcvvg-kwvbiqvumvb-174[vbiqk] +kzeed-wfggny-xmnuunsl-853[negud] +ftzgxmbv-xzz-phkdlahi-657[grbhi] +bnqqnrhud-bzmcx-sqzhmhmf-131[hmqbn] +zntargvp-pnaql-pbngvat-nanylfvf-169[napvf] +jxdkbqfz-pzxsbkdbo-erkq-absbilmjbkq-315[uzmcf] +jshzzpmplk-buzahisl-kfl-klzpnu-695[lzkph] +pualyuhapvuhs-msvdly-jbzavtly-zlycpjl-825[lyapu] +lujbbrornm-ouxfna-xynajcrxwb-667[bnrxa] +dmpuamofuhq-nmewqf-pqhqxabyqzf-482[lndmj] +cvabijtm-moo-zmikycqaqbqwv-148[mqabc] +wyvqljapsl-msvdly-zlycpjlz-435[lyjps] +fmsledevhsyw-ikk-gywxsqiv-wivzmgi-204[isvwe] +ide-htrgti-snt-sthxvc-297[tyvnc] +guahyncw-luvvcn-qilembij-292[tcrsd] +udskkaxawv-wyy-kwjnauwk-710[kwauy] +aczupnetwp-clmmte-dezclrp-379[ynpmz] +ikhcxvmbex-ietlmbv-zktll-vnlmhfxk-lxkobvx-449[lxkvb] +rzvkjiduzy-xcjxjgvoz-rjmfncjk-707[tmnki] +enzcntvat-cynfgvp-tenff-ynobengbel-923[neftb] +vkrhzxgbv-bgmxkgtmbhgte-lvtoxgzxk-angm-kxtvjnblbmbhg-111[iwvbg] +esyfwlau-tskcwl-jwsuimakalagf-398[ywmzb] +lhkhszqx-fqzcd-bzmcx-nodqzshnmr-287[zhqcd] +nzwzcqfw-ojp-dstaatyr-977[dsznk] +qfkkj-xlrypetn-nlyoj-xlcvpetyr-691[lczde] +wifilzof-luvvcn-nywbhifias-552[sxghy] +nchhg-kivlg-zmamizkp-928[ghikm] +tipfxvezt-tcrjjzwzvu-upv-kirzezex-295[zetvi] +gsvvswmzi-tpewxmg-kveww-gsrxemrqirx-698[wegmr] +pynffvsvrq-sybjre-ernpdhvfvgvba-663[epsqt] +sedikcuh-whqtu-vbemuh-udwyduuhydw-894[udhwe] +tmrszakd-bzmcx-rsnqzfd-183[zdmrs] +zilqwikbqdm-jcvvg-wxmzibqwva-798[iqvwb] +lejkrscv-jtrmvexvi-ylek-nfibjyfg-815[ejvfi] +zsxyfgqj-jll-qtlnxynhx-151[lxjnq] +gbc-frperg-onfxrg-qrirybczrag-923[rgbcf] +xjgjmapg-kgvnodx-bmvnn-nvgzn-343[ngvjm] +dmybmsuzs-ngzzk-mocgueufuaz-534[uzmgs] +dmpuamofuhq-omzpk-oamfuzs-pqbxakyqzf-482[mafop] +fbebmtkr-zktwx-unggr-ehzblmbvl-787[begkl] +zntargvp-enoovg-ybtvfgvpf-481[vgfno] +fubrjhqlf-gbh-vhuylfhv-933[hfblu] +fruurvlyh-fdqgb-frdwlqj-whfkqrorjb-569[tmdlw] +ixccb-udeelw-ghvljq-335[nibrq] +tcorcikpi-dwppa-fgukip-570[qnzgc] +ibghopzs-pibbm-rsdzcmasbh-428[bshim] +apuut-wpiit-nzmqdxzn-889[inptu] +qzoggwtwsr-pibbm-igsf-hsghwbu-246[gbswh] +atyzghrk-yigbktmkx-natz-uvkxgzouty-488[pxeoy] +mbiyqoxsm-mkxni-bokmaescsdsyx-796[erynw] +qxdwpopgsdjh-uadltg-itrwcdadvn-401[mzukc] +tinnm-rms-kcfygvcd-688[cmndf] +crwwv-mixpqfz-doxpp-xkxivpfp-107[tpawu] +qxdwpopgsdjh-qphzti-itrwcdadvn-999[lenub] +jqwpihizlwca-lgm-abwziom-538[iwalm] +votubcmf-dboez-dpbujoh-gjobodjoh-909[szlxy] +nwzekwypera-oywrajcan-dqjp-iwjwcaiajp-446[awjpc] +lxuxaodu-vrurcjah-pajmn-ljwmh-cnlqwxuxph-329[uxahj] +gvaaz-ezf-efwfmpqnfou-779[scdpt] +jsvagsulanw-hdsklau-yjskk-vwhdgqewfl-190[saklw] +yrwxefpi-fewoix-irkmriivmrk-828[irefk] +jrncbavmrq-rtt-fgbentr-819[rtbna] +tpspahyf-nyhkl-msvdly-klwsvftlua-409[lsyaf] +veqtekmrk-tpewxmg-kveww-qerekiqirx-100[szdiy] +ykhknbqh-ydkykhwpa-hkceopeyo-108[khyeo] +gifavtkzcv-treup-tfrkzex-dribvkzex-503[ekrtv] +hafgnoyr-pubpbyngr-bcrengvbaf-351[bgnra] +ide-htrgti-gpqqxi-gtprfjxhxixdc-999[ixgtd] +yhtwhnpun-ipvohghykvbz-wshzapj-nyhzz-zavyhnl-617[hznyp] +enqvbnpgvir-pynffvsvrq-rtt-erprvivat-559[vrnpt] +jxdkbqfz-yrkkv-pxibp-159[kbpxd] +etyyx-rbzudmfdq-gtms-rdquhbdr-833[drbmq] +owshgfarwv-udskkaxawv-hdsklau-yjskk-ogjckzgh-398[kasgh] +xst-wigvix-gerhc-irkmriivmrk-828[ilntc] +ugfkmewj-yjsvw-wyy-klgjsyw-684[wyjgk] +zloolpfsb-mixpqfz-doxpp-pbosfzbp-211[topig] +fruurvlyh-vfdyhqjhu-kxqw-orjlvwlfv-569[vfhlr] +xst-wigvix-fyrrc-vigimzmrk-516[irgmv] +rnqnyfwd-lwfij-wfggny-wjxjfwhm-281[wfjng] +rdchjbtg-vgpst-ytaanqtpc-sthxvc-557[tcagh] +fubrjhqlf-fdqgb-frdwlqj-dftxlvlwlrq-465[flqdr] +qlm-pbzobq-pzxsbkdbo-erkq-xznrfpfqflk-679[bqfkp] +ltpedcxots-rpcsn-bpcpvtbtci-921[dtejs] +froruixo-edvnhw-ghsorbphqw-231[horwb] +bjfutsneji-hmthtqfyj-fsfqdxnx-333[fjthn] +yhtwhnpun-lnn-zavyhnl-669[wpsgy] +dmpuamofuhq-ngzzk-xmnadmfadk-742[madfk] +ejpanjwpekjwh-ywjzu-oanreyao-498[yzjwm] +eza-dpncpe-qwzhpc-afcnsldtyr-353[ivxnu] +qekrixmg-nippcfier-gywxsqiv-wivzmgi-464[yxkwm] +avw-zljyla-ibuuf-ylzlhyjo-383[lyaju] +lqwhuqdwlrqdo-mhoobehdq-rshudwlrqv-621[qdhlo] +qvbmzvibqwvit-jcvvg-apqxxqvo-200[vqbix] +ugjjgkanw-esyfwlau-jsttal-ugflsafewfl-164[fgcep] +shoewudys-isqludwuh-xkdj-ijehqwu-504[stjyd] +luxciuwncpy-vohhs-yhachyylcha-214[hcyal] +gifavtkzcv-sleep-ivjvrity-685[vieta] +rzvkjiduzy-xviyt-yzqzgjkhzio-161[ziyjk] +iehepwnu-cnwza-ykjoqian-cnwza-ywjzu-ykwpejc-iwjwcaiajp-316[wajci] +sorozgxe-mxgjk-jek-vaxingyotm-956[goxej] +dmpuamofuhq-dmnnuf-dqmocgueufuaz-560[umdfa] +hjgbwuladw-kusnwfywj-zmfl-ugflsafewfl-450[aezbn] +esyfwlau-usfvq-ugslafy-ghwjslagfk-294[fsagl] +shmml-sybjre-erfrnepu-195[ngkjp] +jlidywncfy-ohmnuvfy-wuhxs-wiuncha-ijyluncihm-240[xtjsm] +ixeumktoi-lruckx-aykx-zkyzotm-436[kximo] +nzydfxpc-rclop-upwwjmply-xlylrpxpye-535[plyxc] +fodvvlilhg-sodvwlf-judvv-pdunhwlqj-725[krngz] +xjmmjndqz-ezggtwzvi-adivixdib-733[idzgj] +pbybeshy-pnaql-pbngvat-znantrzrag-533[anbpg] +fnjyxwrinm-ljwmh-lxjcrwp-bqryyrwp-329[rwjyl] +lhkhszqx-fqzcd-okzrshb-fqzrr-cdoknxldms-391[zdhkq] +pynffvsvrq-ohaal-znantrzrag-637[anrfv] +hafgnoyr-sybjre-genvavat-767[ngacu] +lhkhszqx-fqzcd-bgnbnkzsd-lzmzfdldms-443[ynael] +lugjuacha-wbiwifuny-mufym-786[uafim] +vkrhzxgbv-xzz-ftgtzxfxgm-995[xzgft] +uzfqdzmfuazmx-rxaiqd-emxqe-170[mqxza] +ajvyjprwp-snuuhknjw-anlnrerwp-771[njprw] +zuv-ykixkz-igtje-iugzotm-zxgototm-930[lifhb] +mfklstdw-wyy-ksdwk-294[kwdsy] +kyelcrga-slqryzjc-hcjjwzcyl-qrmpyec-990[kypqm] +vkppo-sxesebqju-tulubefcudj-400[uebjp] +ynukcajey-xqjju-lqnydwoejc-394[jycen] +qzlozfhmf-qzchnzbshud-qzaahs-qdzbpthrhshnm-287[hzqsa] +kmjezxodgz-mvwwdo-ncdkkdib-109[dkmow] +oazegyqd-sdmpq-ngzzk-bgdotmeuzs-482[zdgem] +qfkkj-mldvpe-cpdplcns-561[pcdkl] +hvbizodx-ezggtwzvi-xjiovdihzio-577[voqzy] +iuxxuyobk-inuiurgzk-xkikobotm-722[ikuox] +jyddc-gsvvswmzi-jpsaiv-jmrergmrk-958[cpedy] +vhkkhlbox-unggr-hixktmbhgl-449[hgkbl] +clotzlnetgp-nsznzwlep-dpcgtnpd-145[tehzy] +plolwdub-judgh-hjj-dqdobvlv-543[zkryh] +ajmrxjlcren-ouxfna-ydalqjbrwp-355[ajrln] +uqtqbizg-ozilm-lgm-amzdqkma-304[mqzag] +lnkfaypeha-zua-lqnydwoejc-914[aelny] +ibghopzs-pwcvonofrcig-qobrm-aobousasbh-844[obsac] +ocipgvke-eqpuwogt-itcfg-tcddkv-gpikpggtkpi-804[salbg] +ajmrxjlcren-lqxlxujcn-uxprbcrlb-823[lrxcj] +rgndvtcxr-ytaanqtpc-sthxvc-843[tcanr] +hqcfqwydw-sxesebqju-qdqboiyi-894[qbdei] +tbxmlkfwba-gbiivybxk-qbzeklildv-757[biklv] +vetllbybxw-utldxm-vhgmtbgfxgm-735[bglmt] +mfklstdw-hdsklau-yjskk-vwhsjlewfl-528[xyuts] +pxtihgbsxw-vtgwr-nlxk-mxlmbgz-657[xgblm] +bnmrtldq-fqzcd-dff-lzqjdshmf-677[szdpt] +xekdwvwnzkqo-sawlkjevaz-fahhuxawj-nayaerejc-654[zdeyh] +gzefmnxq-bxmefuo-sdmee-xmnadmfadk-170[medfx] +gpsxdprixkt-eaphixr-vgphh-rjhidbtg-htgkxrt-115[hgprt] +eza-dpncpe-hplazytkpo-awldetn-rcldd-xlcvpetyr-535[tnpmg] +bnmrtldq-fqzcd-eknvdq-sdbgmnknfx-781[dnqbf] +nzcczdtgp-dnlgpyrpc-sfye-opgpwzaxpye-899[pcgyz] +nwzekwypera-ydkykhwpa-odellejc-992[pwqrh] +oknkvcta-itcfg-gii-wugt-vguvkpi-154[giktv] +tcrjjzwzvu-upv-kvtyefcfxp-373[vcfjp] +xst-wigvix-ikk-stivexmsrw-230[isxkt] +fkqbokxqflkxi-zelzlixqb-qoxfkfkd-705[mntlq] +qlm-pbzobq-yxphbq-zrpqljbo-pbosfzb-237[bpqoz] +drxevkzt-avccpsvre-wzeretzex-269[ervzc] +ksodcbwnsr-pogysh-oqeiwgwhwcb-480[mxdsl] +tyepcyletzylw-qwzhpc-xlylrpxpye-613[tvcgy] +rnqnyfwd-lwfij-hmthtqfyj-qtlnxynhx-437[ukdrt] +oxjmxdfkd-jfifqxov-doxab-yxphbq-ixyloxqlov-393[xodfq] +tcorcikpi-ejqeqncvg-fgrnqaogpv-804[cgqei] +hqtyeqsjylu-zubboruqd-qsgkyiyjyed-712[yqubd] +hvbizodx-ezggtwzvi-gjbdnodxn-967[dgzbi] +zntargvp-enoovg-fgbentr-923[gneor] +mvydjvxodqz-wvnfzo-hvmfzodib-447[zfpes] +emixwvqhml-zijjqb-lmdmtwxumvb-148[mbijl] +frqvxphu-judgh-gbh-whfkqrorjb-179[jwmgn] +kyelcrga-njyqrga-epyqq-dglylagle-782[glyae] +npmhcargjc-pyzzgr-bctcjmnkclr-522[crgjm] +pxtihgbsxw-xzz-tvjnblbmbhg-943[bxght] +oknkvcta-itcfg-hnqygt-qrgtcvkqpu-206[tcgkq] +amlqskcp-epybc-zyqicr-sqcp-rcqrgle-522[bnemi] +enqvbnpgvir-pnaql-fuvccvat-299[vnacp] +xlrypetn-mldvpe-cpnptgtyr-509[nugrq] +mbggf-qlssfilhu-klclsvwtlua-383[lsfgu] +wlsiayhcw-wuhxs-wiuncha-mniluay-656[wahiu] +gvaaz-cbtlfu-efqmpznfou-415[byzhx] +rzvkjiduzy-nxvqzibzm-cpio-hvivbzhzio-343[zivbh] +bqxnfdmhb-dff-otqbgzrhmf-781[fbdhm] +wihmogyl-aluxy-wuhxs-wiuncha-lyuwkocmcncih-838[chuwi] +enzcntvat-onfxrg-hfre-grfgvat-689[nkvyi] +xgjougizobk-igtje-iugzotm-ygrky-540[giojk] +mbggf-kfl-aljouvsvnf-773[fglva] +qzoggwtwsr-xszzmpsob-sbuwbssfwbu-662[sbwzg] +wsvsdkbi-qbkno-mkxni-mykdsxq-nofovyzwoxd-744[kodns] +tpspahyf-nyhkl-lnn-klzpnu-721[nlphk] +pejji-nio-bomosfsxq-380[oijsb] +amlqskcp-epybc-cee-nspafyqgle-132[dsayt] +luxciuwncpy-xsy-lyuwkocmcncih-240[cuyil] +irdgrxzex-gcrjkzt-xirjj-vexzevvizex-165[xerzi] +lxaaxbren-snuuhknjw-ujkxajcxah-381[axjnu] +ktfitzbgz-ynssr-xzz-wxiehrfxgm-839[sjagq] +hafgnoyr-enzcntvat-pnaql-pbngvat-genvavat-975[antvg] +dfcxsqhwzs-qobrm-fsqswjwbu-896[sqwbf] +zsxyfgqj-xhfajsljw-mzsy-xytwflj-619[jfsxy] +yhwooebeaz-ywjzu-ykwpejc-hkceopeyo-706[eoywc] +mvydjvxodqz-wpiit-kpmxcvndib-863[yrjnz] +otzkxtgzoutgr-igtje-iugzotm-iutzgotsktz-332[tgzoi] +pdjqhwlf-sodvwlf-judvv-vdohv-855[vdfhj] +gpewwmjmih-fyrrc-gywxsqiv-wivzmgi-724[iwgmr] +oqnidbshkd-idkkxadzm-rsnqzfd-391[lpscd] +rgndvtcxr-hrpktcvtg-wjci-uxcpcrxcv-765[crtvx] +esyfwlau-tmffq-xafsfuafy-970[fasuy] +gvaaz-dipdpmbuf-efqbsunfou-545[zmynh] +zsxyfgqj-wfggny-uzwhmfxnsl-463[cvqjn] +oazegyqd-sdmpq-ngzzk-emxqe-430[flhis] +jvuzbtly-nyhkl-zjhclunly-obua-zlycpjlz-643[ueimk] +surmhfwloh-vfdyhqjhu-kxqw-ghsorbphqw-205[hqwfo] +pualyuhapvuhs-zjhclunly-obua-thuhnltlua-825[ficqs] +wbhsfbohwcboz-rms-oqeiwgwhwcb-194[wbhoc] +gpsxdprixkt-ytaanqtpc-bpcpvtbtci-635[qkzhc] +rnqnyfwd-lwfij-xhfajsljw-mzsy-qfgtwfytwd-931[fwjyd] +ubhatstkwhnl-ktuubm-vnlmhfxk-lxkobvx-787[gtsqv] +lqwhuqdwlrqdo-udeelw-dftxlvlwlrq-413[ldqwe] +kloqemlib-lygbzq-pqloxdb-991[lbqod] +veqtekmrk-tpewxmg-kveww-hiwmkr-282[ekwmr] +rflsjynh-ytu-xjhwjy-jll-knsfshnsl-333[jlshn] +bknsykmdsfo-pvygob-domrxyvyqi-432[yobdk] +mybbycsfo-bkllsd-kxkvicsc-822[yzxcq] +zixppfcfba-yxphbq-absbilmjbkq-991[gbhts] +udskkaxawv-uzgugdslw-klgjsyw-684[gksuw] +clxalrtyr-mfyyj-qtylyntyr-665[ylrta] +uiovmbqk-jiasmb-lmaqov-694[mabio] +xmtjbzidx-mvwwdo-zibdizzmdib-161[dizbm] +wyvqljapsl-jovjvshal-bzly-alzapun-643[lajvp] +zlilocri-zxkav-mrozexpfkd-445[rifng] +pinovwgz-zbb-hvmfzodib-811[bziov] +rtqlgevkng-dwppa-vgejpqnqia-284[gpqae] +vrurcjah-pajmn-ljwmh-jlzdrbrcrxw-667[lmdrk] +jlidywncfy-dyffsvyuh-ijyluncihm-838[yficd] +cebwrpgvyr-sybjre-qrirybczrag-741[tsrqd] +pbafhzre-tenqr-onfxrg-grpuabybtl-949[rbaef] +lahxpnwrl-ljwmh-lxjcrwp-nwprwnnarwp-433[seonp] +iuxxuyobk-igtje-iugzotm-iutzgotsktz-644[tiugo] +qfkkj-prr-fdpc-epdetyr-951[prdef] +nchhg-akidmvomz-pcvb-nqvivkqvo-954[osgtz] +htwwtxnaj-gzssd-ijufwyrjsy-385[jswty] +myxcewob-qbkno-mrymyvkdo-bokmaescsdsyx-328[sezot] +rzvkjiduzy-mvwwdo-ncdkkdib-499[mfyze] +emixwvqhml-lgm-uizsmbqvo-798[milqv] +xmtjbzidx-wvnfzo-vivgtndn-941[nvdit] +bknsykmdsfo-zvkcdsm-qbkcc-cobfsmoc-198[cksbm] +gsrwyqiv-kvehi-fyrrc-jmrergmrk-906[regik] +bqvvu-oywrajcan-dqjp-nawymqeoepekj-524[aejqn] +upq-tfdsfu-sbccju-bobmztjt-883[btucf] +surmhfwloh-fruurvlyh-mhoobehdq-orjlvwlfv-933[zymnj] +wkqxodsm-tovvilokx-gybucryz-588[okvxy] +nchhg-ntwemz-twoqabqka-902[ahnqt] +iqmbazulqp-rgllk-rxaiqd-fqotzaxask-950[dtanc] +ejpanjwpekjwh-nwxxep-bejwjyejc-732[jewpn] +ajmrxjlcren-fnjyxwrinm-lqxlxujcn-vjwjpnvnwc-329[yhgwz] +qcbgiasf-ufors-qvcqczohs-aofyshwbu-532[scfoq] +jsehsyafy-vqw-ugflsafewfl-970[mfzcn] +fab-eqodqf-qss-geqd-fqefuzs-560[qfesd] +jef-iushuj-uww-sedjqydcudj-322[qyadz] +kfg-jvtivk-jtrmvexvi-ylek-ivtvzmzex-347[wmlfu] +pxtihgbsxw-ietlmbv-zktll-wxiehrfxgm-371[xiltb] +wfintfhynaj-hmthtqfyj-jslnsjjwnsl-463[jnfhs] +forwcoqhwjs-foppwh-kcfygvcd-480[cfowh] +kzgwomvqk-rmttgjmiv-camz-bmabqvo-616[mvabg] +pybgmyargtc-aylbw-amyrgle-nspafyqgle-392[yaglb] +jyfvnlupj-ihzrla-lunpullypun-149[lytps] +dpmpsgvm-cbtlfu-xpsltipq-467[plmst] +oxaflxzqfsb-avb-zrpqljbo-pbosfzb-965[bfoza] +amlqskcp-epybc-afmamjyrc-bctcjmnkclr-392[cmabj] +encuukhkgf-tcddkv-yqtmujqr-362[kucdq] +lqwhuqdwlrqdo-edvnhw-hqjlqhhulqj-595[sywmh] +njmjubsz-hsbef-qspkfdujmf-cbtlfu-vtfs-uftujoh-857[fujsb] +dsxxw-djmucp-umpiqfmn-340[mdpux] +aflwjfslagfsd-hdsklau-yjskk-dstgjslgjq-736[sjlad] +ynukcajey-ywjzu-iwjwcaiajp-758[sthmn] +froruixo-lqwhuqdwlrqdo-fdqgb-uhdftxlvlwlrq-621[gtcry] +chnylhuncihuf-jfumncw-alumm-mylpcwym-526[tyodr] +ujoon-qphzti-uxcpcrxcv-817[copux] +bkwzkqsxq-cmkfoxqob-rexd-ckvoc-666[kcoqx] +pelbtravp-enqvbnpgvir-qlr-qrfvta-403[wqynx] +yhtwhnpun-ibuuf-thuhnltlua-643[trfed] +willimcpy-yaa-wihnuchgyhn-344[hiyac] +thnulapj-jovjvshal-mpuhujpun-799[juhpa] +nzcczdtgp-mldvpe-lnbftdtetzy-821[qvnmi] +qzlozfhmf-idkkxadzm-btrsnldq-rdquhbd-209[dqzbf] +ajvyjprwp-ouxfna-vjwjpnvnwc-407[jnpvw] +hcd-gsqfsh-dzoghwq-ufogg-zcuwghwqg-688[nwgox] +jrncbavmrq-qlr-genvavat-169[arvnq] +crwwv-yrkkv-jxkxdbjbkq-653[ylpzs] +pejji-tovvilokx-vyqscdsmc-146[vcijo] +ikhcxvmbex-lvtoxgzxk-angm-inkvatlbgz-189[xgkva] +jyddc-wgezirkiv-lyrx-xiglrspskc-620[ircdg] +ajyqqgdgcb-aylbw-amyrgle-rpyglgle-210[glyab] +mhi-lxvkxm-yehpxk-kxvxbobgz-319[lcest] +rkpqxyib-gbiivybxk-lmboxqflkp-211[vustn] +jchipqat-rdadguja-hrpktcvtg-wjci-tcvxcttgxcv-999[ctagj] +ovbunmneqbhf-fpniratre-uhag-grpuabybtl-949[banru] +nchhg-xtiabqk-oziaa-abwziom-174[aibho] +dwbcjkun-ljwmh-ydalqjbrwp-303[jwbdl] +lxuxaodu-krxqjijamxdb-bljenwpna-qdwc-bnaerlnb-563[ycjlt] +yhkpvhjapcl-wshzapj-nyhzz-shivyhavyf-461[hyapv] +udglrdfwlyh-mhoobehdq-wudlqlqj-959[dlhqo] +myxcewob-qbkno-lsyrkjkbnyec-lexxi-cdybkqo-588[nfdem] +fnjyxwrinm-ljwmh-lxwcjrwvnwc-459[wjncl] +udpsdjlqj-udeelw-ghvljq-491[djleq] +zloolpfsb-yrkkv-mrozexpfkd-783[koflp] +drxevkzt-jtrmvexvi-ylek-ivrthlzjzkzfe-997[evzkr] +ykjoqian-cnwza-ywjzu-ykwpejc-opknwca-264[wacjk] +xekdwvwnzkqo-zua-zalwnpiajp-992[awzkn] +fydelmwp-aczupnetwp-prr-cplnbftdtetzy-847[ptecd] +lxwbdvna-pajmn-ouxfna-anjlzdrbrcrxw-563[anrxb] +xfbqpojafe-gmpxfs-tbmft-545[rgdzm] +kzeed-ojqqdgjfs-ijuqtdrjsy-411[jdqes] +ktiaaqnqml-ntwemz-uizsmbqvo-642[azvew] +udpsdjlqj-gbh-whfkqrorjb-725[rnqmt] +lahxpnwrl-ouxfna-ydalqjbrwp-745[alnpr] +dsxxw-bwc-mncpyrgmlq-548[cmwxb] +joufsobujpobm-gvaaz-qmbtujd-hsbtt-fohjoffsjoh-727[ojbfh] +laffe-jek-ynovvotm-670[efova] +nzcczdtgp-ojp-xlcvpetyr-353[nvmak] +kgjgrypw-epybc-djmucp-qyjcq-496[sqhmg] +ykjoqian-cnwza-ywjzu-klanwpekjo-680[ajknw] +nbhofujd-dipdpmbuf-efqbsunfou-415[fubdn] +oaddaeuhq-ngzzk-fqotzaxask-144[hbxcm] +lujbbrornm-vjpwncrl-snuuhknjw-ldbcxvna-bnaerln-459[nblrj] +xgvnndadzy-wvnfzo-yzkvmohzio-135[znovd] +jchipqat-tvv-jhtg-ithixcv-271[ymstr] +xtwtelcj-rclop-nlyoj-dstaatyr-431[ntags] +iutyaskx-mxgjk-jek-xkykgxin-618[kxgij] +pxtihgbsxw-ktwbhtvmbox-cxeeruxtg-tgterlbl-943[txbeg] +xfbqpojafe-dboez-dpbujoh-mbcpsbupsz-441[bpode] +qfkkj-mfyyj-opalcexpye-613[yefjk] +ejpanjwpekjwh-lhwopey-cnwoo-nawymqeoepekj-836[ewjop] +qjopwxha-xqjju-odellejc-732[jeloq] +bnknqetk-atmmx-lzmzfdldms-261[mdkln] +xgsvgmotm-pkrrehkgt-sgtgmksktz-332[gktms] +ryexqpqhteki-vbemuh-huqsgkyiyjyed-244[tjsqx] +xjinphzm-bmvyz-ytz-yzkvmohzio-239[oznyv] +eqttqukxg-rncuvke-itcuu-cpcnauku-180[jztvf] +xgjougizobk-xghhoz-ygrky-696[gohkx] +mtzslklcozfd-nsznzwlep-opgpwzaxpye-769[zplen] +kgjgrypw-epybc-pyzzgr-jmegqrgaq-626[gprye] +jlidywncfy-wbiwifuny-mniluay-396[iynwf] +myvybpev-mkxni-mykdsxq-psxkxmsxq-536[rxnml] +ibghopzs-qobrm-rsdzcmasbh-246[bshmo] +jyfvnlupj-wshzapj-nyhzz-klwsvftlua-201[jlzaf] +dzczkrip-xiruv-avccpsvre-cfxzjkztj-113[czrvi] +dmbttjgjfe-dboez-dpbujoh-nbslfujoh-493[bjdoe] +kfg-jvtivk-gifavtkzcv-srjbvk-jvimztvj-347[aymns] +ktwbhtvmbox-vetllbybxw-ietlmbv-zktll-wxlbzg-241[bltvw] +tmrszakd-cxd-qdrdzqbg-417[dqrza] +nzydfxpc-rclop-nsznzwlep-nfdezxpc-dpcgtnp-899[ynbfk] +fruurvlyh-mhoobehdq-rshudwlrqv-491[hrudl] +odkasqzuo-pkq-emxqe-144[qekoa] +hwbba-dcumgv-vtckpkpi-180[bckpv] +lsyrkjkbnyec-cmkfoxqob-rexd-wkbuodsxq-718[yfzcq] +xgvnndadzy-kgvnodx-bmvnn-xjiovdihzio-395[ndvio] +willimcpy-vumeyn-omyl-nymncha-890[nmyux] +mbggf-zjhclunly-obua-yljlpcpun-487[lubcg] +ryexqpqhteki-sqdto-tuiywd-608[xhjzp] +egdytrixat-gpqqxi-prfjxhxixdc-193[xidgp] +nbhofujd-dszphfojd-cbtlfu-sftfbsdi-909[fdbsh] +rflsjynh-gfxpjy-htsyfnsrjsy-489[istpm] +vkrhzxgbv-vetllbybxw-ietlmbv-zktll-phkdlahi-189[lbvhk] +lujbbrornm-ouxfna-uxprbcrlb-459[ozvca] +pbafhzre-tenqr-fpniratre-uhag-erprvivat-117[raept] +xgvnndadzy-xjmmjndqz-ytz-nvgzn-577[nzdgj] +houngfgxjuay-pkrrehkgt-jkyomt-618[dltyf] +bjfutsneji-hmthtqfyj-jslnsjjwnsl-411[jsntf] +sgmtkzoi-lruckx-rghuxgzuxe-774[guxkr] +nuatmlmdpage-nmewqf-abqdmfuaze-326[zbewa] +dsxxw-zsllw-qyjcq-912[lqswx] +cvabijtm-kivlg-kwibqvo-aitma-226[mvuhw] +yuxufmdk-sdmpq-qss-bgdotmeuzs-768[sdmuq] +qspkfdujmf-fhh-usbjojoh-597[elvgu] +htqtwkzq-gfxpjy-hzxytrjw-xjwanhj-359[jpytc] +gbc-frperg-pnaql-pbngvat-grpuabybtl-169[bgpar] +yhkpvhjapcl-qlssfilhu-klclsvwtlua-123[lhsac] +nglmtuex-vtgwr-vhtmbgz-ftkdxmbgz-813[emnca] +atyzghrk-lruckx-ygrky-592[kryga] +dkqjcbctfqwu-tcddkv-tgegkxkpi-362[kcdtg] +sawlkjevaz-bhksan-lqnydwoejc-914[aejkl] +kdijqrbu-uww-ijehqwu-712[uwijq] +rwcnawjcrxwju-snuuhknjw-mnbrpw-121[wnjru] +vrurcjah-pajmn-mhn-bcxajpn-225[ajnch] +clotzlnetgp-mldvpe-cpdplcns-353[lpcde] +wihmogyl-aluxy-dyffsvyuh-womnigyl-mylpcwy-682[khzto] +qcbgiasf-ufors-dzoghwq-ufogg-kcfygvcd-428[mselb] +kwtwznct-ktiaaqnqml-akidmvomz-pcvb-bmkpvwtwog-824[kmtwa] +crwwv-oxyyfq-pqloxdb-289[oqwxy] +iutyaskx-mxgjk-ckgvutofkj-lruckx-jkvgxzsktz-852[kxgjt] +irgyyolokj-yigbktmkx-natz-giwaoyozout-930[oygik] +yhtwhnpun-buzahisl-jhukf-jvhapun-mpuhujpun-565[uhnpj] +fbebmtkr-zktwx-ktuubm-ybgtgvbgz-761[ifsyt] +lejkrscv-avccpsvre-dribvkzex-165[vcerk] +avw-zljyla-yhiipa-jvuahputlua-617[aluhi] +xjmmjndqz-wpiit-xjiovdihzio-889[ijdmo] +pbybeshy-fpniratre-uhag-jbexfubc-819[snuje] +ktwbhtvmbox-vtgwr-phkdlahi-683[htbkv] +avw-zljyla-wshzapj-nyhzz-ylzlhyjo-409[zlyah] +tcrjjzwzvu-treup-tfrkzex-drerxvdvek-633[retvz] +zlkprjbo-doxab-ciltbo-qoxfkfkd-627[nmwxj] +vkrhzxgbv-lvtoxgzxk-angm-labiibgz-995[gbvxz] +gpbepvxcv-hrpktcvtg-wjci-sthxvc-609[cvptg] +hwbba-gii-fgrctvogpv-804[gbiva] +nwlddtqtpo-nsznzwlep-dstaatyr-275[tdnal] +ovbunmneqbhf-fpniratre-uhag-hfre-grfgvat-637[fraeg] +pkl-oaynap-fahhuxawj-nayaerejc-888[mnchz] +etaqigpke-hnqygt-qrgtcvkqpu-752[antmz] +lugjuacha-wuhxs-ijyluncihm-214[hfsun] +zloolpfsb-zxkav-abpfdk-341[abfkl] +bknsykmdsfo-mkxni-mykdsxq-bokmaescsdsyx-822[skmdx] +xjgjmapg-zbb-hvivbzhzio-499[bzghi] +amjmpdsj-ajyqqgdgcb-qaytclecp-fslr-qrmpyec-652[smgnt] +qczcftiz-dzoghwq-ufogg-rsgwub-714[gzcfo] +gokzyxsjon-wsvsdkbi-qbkno-nio-myxdksxwoxd-900[oksxd] +ktfitzbgz-vtgwr-vhtmbgz-lxkobvxl-969[tbgvz] +hqtyeqsjylu-uww-efuhqjyedi-270[dytgj] +ovbunmneqbhf-pnaql-pbngvat-freivprf-845[nbfpv] +kzgwomvqk-akidmvomz-pcvb-aitma-902[makvi] +sedikcuh-whqtu-zubboruqd-bqrehqjeho-790[hqube] +kwvacumz-ozilm-jcvvg-lmaqov-382[vmacl] +rgndvtcxr-qjccn-prfjxhxixdc-661[cxrdj] +tbxmlkfwba-oxyyfq-tlohpelm-523[uhvaf] +iuxxuyobk-inuiurgzk-vaxingyotm-514[iuxgk] +odkasqzuo-omzpk-oamfuzs-ymzmsqyqzf-170[zmoqs] +ktwbhtvmbox-unggr-lxkobvxl-527[bxgkl] +ynssr-vtgwr-mxvaghehzr-423[rghsv] +sgmtkzoi-kmm-lotgtiotm-670[mtogi] +ugdgjxmd-vqw-kwjnauwk-944[wdgjk] +rdggdhxkt-jchipqat-snt-gthtpgrw-713[tghdp] +zvyvgnel-tenqr-wryylorna-npdhvfvgvba-663[vnrya] +jsvagsulanw-usfvq-ugslafy-esjcwlafy-762[fygle] +zsxyfgqj-wfggny-hzxytrjw-xjwanhj-931[jgwxy] +wkqxodsm-tovvilokx-dbksxsxq-822[cpsgv] +mbiyqoxsm-tovvilokx-yzobkdsyxc-458[oxybi] +lzfmdshb-bzmcx-bnzshmf-vnqjrgno-261[ujfyc] +oknkvcta-itcfg-dcumgv-hkpcpekpi-258[ckpgi] +iuxxuyobk-inuiurgzk-sgtgmksktz-202[ztjvk] +hjgbwuladw-hdsklau-yjskk-ljsafafy-372[mvkts] +rdadguja-eaphixr-vgphh-tcvxcttgxcv-739[acght] +nsyjwsfyntsfq-idj-xmnuunsl-983[nsfju] +gifavtkzcv-wcfnvi-rthlzjzkzfe-971[zfvci] +qvbmzvibqwvit-jiasmb-zmamizkp-278[imbvz] +houngfgxjuay-ckgvutofkj-yigbktmkx-natz-ykxboiky-930[kgyot] +guahyncw-wuhxs-lyuwkocmcncih-500[chuwn] +gpbepvxcv-ytaanqtpc-bpgztixcv-479[pctva] +ksodcbwnsr-pogysh-gsfjwqsg-584[sgowb] +dmybmsuzs-pkq-mzmxkeue-612[meksu] +xmtjbzidx-xviyt-vxlpdndodji-577[dxijt] +dpmpsgvm-kfmmzcfbo-bobmztjt-701[mbfop] +oxjmxdfkd-pzxsbkdbo-erkq-xznrfpfqflk-627[jhlvw] +npmhcargjc-aylbw-amyrgle-pcacgtgle-652[acgle] +votubcmf-fhh-tfswjdft-701[fthbc] +gzefmnxq-dmnnuf-geqd-fqefuzs-482[fenqd] +dmpuamofuhq-oazegyqd-sdmpq-eomhqzsqd-tgzf-emxqe-378[mctsn] +gzefmnxq-dmnnuf-etubbuzs-508[nubef] +bwx-amkzmb-ntwemz-ivitgaqa-902[noeig] +rdchjbtg-vgpst-qphzti-pcpanhxh-635[hptcg] +qzchnzbshud-atmmx-sqzhmhmf-131[hmzqs] +tipfxvezt-treup-tfrkzex-cfxzjkztj-633[tzefx] +mvhkvbdib-wpiit-vivgtndn-603[ivbdn] +hqfxxnknji-ojqqdgjfs-htsyfnsrjsy-957[bdtai] +clxalrtyr-clmmte-dezclrp-275[lcrem] +fubrjhqlf-udpsdjlqj-udeelw-ghyhorsphqw-387[hdjlq] +qzoggwtwsr-dzoghwq-ufogg-hsqvbczcum-792[goqwz] +nvrgfezqvu-sleep-ivtvzmzex-113[evzfg] +fruurvlyh-iorzhu-orjlvwlfv-881[jcdtf] +myxcewob-qbkno-mkxni-mykdsxq-nozvyiwoxd-900[oxkmn] +wyvqljapsl-jhukf-jvhapun-aljouvsvnf-955[jvalu] +tpspahyf-nyhkl-jhukf-zhslz-643[pytob] +kgjgrypw-epybc-rmn-qcapcr-qaytclecp-fslr-nspafyqgle-938[mxunk] +yknnkoera-zua-klanwpekjo-446[dphwe] +kzgwomvqk-xtiabqk-oziaa-bziqvqvo-278[qaiko] +iruzfrtkzmv-wcfnvi-rercpjzj-555[rzcfi] +diozmivodjivg-apuut-nxvqzibzm-cpio-yzkvmohzio-447[iozvm] +fydelmwp-ojp-nzyeltyxpye-405[nyzmg] +ktiaaqnqml-ziuxioqvo-kivlg-kwibqvo-zmikycqaqbqwv-564[qikva] +xst-wigvix-ikk-vieguymwmxmsr-724[imxgk] +jfifqxov-doxab-ciltbo-jxohbqfkd-965[obfxd] +rdggdhxkt-hrpktcvtg-wjci-rdcipxcbtci-531[ctdgi] +awzwhofm-ufors-qobrm-qcohwbu-oqeiwgwhwcb-896[mkvzu] +vagreangvbany-fpniratre-uhag-qrcnegzrag-689[xfuaz] +vjpwncrl-lqxlxujcn-jlzdrbrcrxw-693[lrcjx] +ibghopzs-dzoghwq-ufogg-rsdzcmasbh-948[ghosz] +ynssr-vhglnfxk-zktwx-ietlmbv-zktll-phkdlahi-917[lkhti] +tfcfiwlc-treup-tfrkzex-dribvkzex-685[efrtc] +frqvxphu-judgh-fkrfrodwh-hqjlqhhulqj-803[wjnmk] +vhkkhlbox-xzz-kxtvjnblbmbhg-631[bhkxl] +ltpedcxots-snt-stepgibtci-297[tscei] +nzwzcqfw-nlyoj-xlylrpxpye-275[lynpw] +ejpanjwpekjwh-nwilwcejc-zua-hkceopeyo-498[ypoze] +sno-rdbqds-azrjds-rghoohmf-859[dorsh] +qzoggwtwsr-suu-qcbhowbasbh-480[bswgh] +gvcskirmg-ikk-gywxsqiv-wivzmgi-698[rmvil] +ktwbhtvmbox-ftzgxmbv-vtgwr-ftkdxmbgz-163[tbgmv] +oxmeeuruqp-omzpk-oamfuzs-efadmsq-716[meoua] +xjinphzm-bmvyz-hvbizodx-xviyt-xjvodib-ozxcijgjbt-343[ixbjv] +jyfvnlupj-ibuuf-svnpzapjz-851[gmsnf] diff --git a/2016/aoc4/src/main.rs b/2016/aoc4/src/main.rs new file mode 100644 index 0000000..ea1edd8 --- /dev/null +++ b/2016/aoc4/src/main.rs @@ -0,0 +1,83 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::BTreeMap; + +#[derive(Debug)] +struct Room { + encrypted_name: String, + sector_id: u32, + checksum: String +} + +impl Room { + fn new(line: String) -> Room { + let name_length = line.find(char::is_numeric).unwrap(); + let (name, sector_and_check) = line.split_at(name_length); + let (sector, check) = sector_and_check.split_at(sector_and_check.len()-7); + + Room { + encrypted_name: name.trim_matches('-').to_string(), + sector_id: sector.parse().unwrap(), + checksum: check.trim_matches(|c| c=='[' || c==']').to_string() + } + } + + fn is_valid(&self) -> bool { + let mut char_counts: BTreeMap = BTreeMap::new(); + let chars = self.encrypted_name.chars() + .filter(|&c| c != '-'); + for c in chars { + *char_counts.entry(c).or_insert(0) += 1; + } + + let mut vec_char_counts = char_counts.iter().collect::>(); + vec_char_counts.sort_by_key(|&(_, &value)| -value); + let expected_checksum = vec_char_counts + .iter() + .take(5) + .map(|&(&key, _)| key) + .collect::(); + + expected_checksum == self.checksum + } + + fn decrypt_name(&self) -> String { + self.encrypted_name.chars().map(|c| { + if c == '-' { + ' ' + } else { + let current_digit = c as u8 - 'a' as u8; + let new_digit = ((current_digit as u32 + self.sector_id) % 26) as u8; + (new_digit + 'a' as u8) as char + } + }).collect() + } +} + +fn main() { + let rooms = read_file(); + let valid_rooms = rooms.iter() + .filter(|r| r.is_valid()) + .collect::>(); + let sector_sum: u32 = valid_rooms.iter() + .map(|r| r.sector_id) + .sum(); + + println!("Sector sum {}", sector_sum); + + let north_poles = rooms.iter() + .filter(|r| r.decrypt_name().contains("north")) + .inspect(|r| println!("{} {}", r.decrypt_name(), r.sector_id)) + .collect::>(); + println!("{:?}", north_poles); +} + +fn read_file() -> Vec { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .map(Room::new) + .collect() +} diff --git a/2016/aoc5/Cargo.lock b/2016/aoc5/Cargo.lock new file mode 100644 index 0000000..6d0e69c --- /dev/null +++ b/2016/aoc5/Cargo.lock @@ -0,0 +1,12 @@ +[root] +name = "aoc5" +version = "0.1.0" +dependencies = [ + "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "md5" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + diff --git a/2016/aoc5/Cargo.toml b/2016/aoc5/Cargo.toml new file mode 100644 index 0000000..cc09c3c --- /dev/null +++ b/2016/aoc5/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc5" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] +md5 = "^0.2" \ No newline at end of file diff --git a/2016/aoc5/src/main.rs b/2016/aoc5/src/main.rs new file mode 100644 index 0000000..31bef5e --- /dev/null +++ b/2016/aoc5/src/main.rs @@ -0,0 +1,49 @@ +extern crate md5; + +fn main() { + let room = "reyedfim"; + + let mut i = 0; + let mut found_bytes = 0; + + let mut code: [Option; 8] = [None;8]; + + println!("Cracking the passwordz"); + print_code(&code); + + while found_bytes < 8 { + let room_string = format!("{}{}", room, i); + let room_bytes = room_string.into_bytes(); + let hash = md5::compute(room_bytes.as_slice()); + if match_hash(hash) { + let position = hash[2]; + let value = hash[3] / 16; + if code[position as usize].is_none() { + code[position as usize] = Some(value); + print_code(&code); + found_bytes += 1; + } + } + + i+=1; + } + + println!("Password found!"); +} + +fn match_hash(hash: [u8; 16]) -> bool { + hash[0] == 0 && + hash[1] == 0 && + hash[2] < 8 +} + +fn print_code(code: &[Option; 8]) { + println!(""); + for &byte in code.iter() { + match byte { + None => {print!("-");}, + Some(x) => {print!("{:x}", x);} + } + } + println!(""); +} diff --git a/2016/aoc6/Cargo.lock b/2016/aoc6/Cargo.lock new file mode 100644 index 0000000..f61aebf --- /dev/null +++ b/2016/aoc6/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc6" +version = "0.1.0" + diff --git a/2016/aoc6/Cargo.toml b/2016/aoc6/Cargo.toml new file mode 100644 index 0000000..22fc24a --- /dev/null +++ b/2016/aoc6/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc6" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] diff --git a/2016/aoc6/input.txt b/2016/aoc6/input.txt new file mode 100644 index 0000000..6caf81a --- /dev/null +++ b/2016/aoc6/input.txt @@ -0,0 +1,624 @@ +iyeajeby +qengiuoe +wxzardgo +jciguemn +zcampkps +kiqjpjqb +knwhoxlw +iaxxpjhe +kgrgaixi +lciydajs +svugtdwe +nwailbqu +cbkwwxvt +lqjyrawh +jylmtlzk +firecpyg +xegtcvvx +jllqqzeq +hggmnxlc +pdmfuqlx +hnbksbkl +pmjmiqti +gpmuvcsh +tspnxvnm +hghwizhe +sgokeybb +jtphckcv +usypmmzq +irlfaboj +prgiqvil +nfqegpjd +aivwwkix +xeljyzjv +mrdpqlzc +metcvpvd +ifizfkgl +uznvqiqw +uzylkeui +obmqhlan +vaoivkeq +wvlbwfaf +ntbgtbpz +lbuieiea +rljyfeop +rynkdwiq +hyqpjwzl +supxlsql +bntmjboc +qntfhain +xxtjctjz +qppakrbj +ptnnwmlg +pucuqrpi +ensluhxm +wtnabsej +hvnozkvx +dhxgysdk +qdizyrkg +vtuyxjky +lxwcyfxr +xoyphxmb +ltylucct +oaawvjfa +qbjmdcap +raqhkkbe +uqtxpvhj +pddzoucq +axfbgpvj +eohksqcm +jtmmkovb +paronxgv +gtxnqybz +qfsobvxz +ywrnogwz +ytdvpmzv +daeappko +zgjdatzf +psrfofvi +uobknckb +rvndwdgs +oedojfqv +shxmutcm +nigdxgrz +ngwvdair +wexxkvwn +oqmrjlcr +vcbmxvyb +ekdfdzch +klphcryl +bbtobqqo +wupuvqio +hwiufjpk +rckjewzp +vhgzdtil +qrvqytfe +opolrgwi +nektqhbg +ynubobwy +cqnysvzf +muqrlihy +ncbeeuur +hxsvpoug +kacsofnk +vztkoicu +smxiuykn +sgnmdqmw +sfsxxnds +iwquujxr +fwssfvfw +qyoswzsm +kvfvizgu +fmewmudq +mvtekgjn +kkffshrt +jzbkyxzf +beszoylz +lnhmbwae +tijfkcrt +culovluh +jrgtbxma +yqtlarnm +rdlxlplt +vzgphnpi +igpbfrrd +yqdgvyke +juhzerjo +kfwlvhag +ysznuuey +turxgyik +iqgcxxpa +tjrmtkjk +ywfcwvqp +ozmguljj +maxegnqi +vavydxwd +dhlckjra +omvdoafe +rvzejiol +rsnpjser +nejognkt +agkavzki +uzskztny +knvzbkff +iiuhrzsp +amxryjhv +yqxdgdaj +tpvellfc +dqutbibf +fbbrpcbg +shxlcvmc +ociooedg +nedlhmfo +ohdxifnx +mqhbpyed +tauomzjy +bkooiesi +xtukgdec +mygazipf +wkvecylo +tlejwzcj +rcpygkbi +uihidqdr +lxwthely +ywyoahob +zwjrveex +eqahofbx +mvipdaql +zccdioga +gttnacns +urajevul +uhsdjkhm +cjbpznua +tyfvodhw +feadmwyl +cjmccfcy +uawxsuyy +xzzidfrj +slhgapvb +tbdwntwx +bvspfozq +pkkwgooy +frnhifax +sxfkbojn +ffnzlqda +pbtbewtm +mivpqcyc +gztezasy +jlfdrmou +xjmazeef +lgcaevtl +piidoxbi +iczlosyt +egszahwu +cmbybzvi +orczduhd +hzorfhdv +yptggtmu +yfsmednv +ajawzgpp +niicgavl +mmdpsogr +wkufsuct +yboinvnc +lmwbrqmb +rrsfhics +xguvmcmi +yldifule +laycxgaf +jtnizmxf +qrbpqznc +cpplgbsm +xzkwttnj +axjxusuh +nthcjcqn +zjkdjlcz +uulqjmfq +djqlzrcb +ftxhzuoq +bfrzrdtn +fvovpzts +tloyyqoa +spupkgwb +ishhbwok +spyfzbsj +bvvnfnxx +iuectyxc +xbbjridq +drzfvsrw +gokuvwjf +hhkmgqxf +epijynaj +bfxdnibq +pjoovmhf +izbgldjr +rvxrhjxa +blhhorwy +xwmobyph +pfoimsbl +gprwonid +hfwmazfu +dudhehvt +nbekhgbg +qbwklpvg +yemjyobm +vmocaztb +xkwklord +tjooucsf +qowresxh +cxeapuvv +zmlzqivx +fryanflf +kxcrserx +jtoqtooo +axrtkjyo +fwwzdsbx +pyphszfp +ekdcnrgx +zyrhxcvc +blcqplmo +wnsiistm +slavtfip +sixawglm +sxpjnpsa +sfwmudzt +kcpetkcw +iqfufsws +wdfbgvol +muvtnxzg +otgycshn +gddbabma +swksjxjx +hnfcsnir +tmcnycfi +lpvuwehn +htyogany +rggezmhh +guzhwmss +zoqiscdy +dqbtvyrb +wfnymsai +klfpdgvn +ihqjdope +dudllmty +gpbkmwtd +tjmtvjpk +sjnkfrsk +bgruelqs +repdjhre +flxjlvah +lkpnbajp +rmkqdjpx +enimddcn +nzowveei +cohzzkee +sxfvyqwi +vlztaixp +xgkrlsyh +eaurshic +kifvzhsv +dxfsexup +fyqqbzgm +bnxsgjxg +ndbbkscp +xyjhzqel +eyanetmo +quakpmsr +kqfeprrb +hhsvwyse +jjvjivng +zkeiinwn +adibxest +zjzrkmxr +kceozeud +iknfusda +gqmuepbo +ccwltods +smaurfwy +yojrrudk +akygvwyf +dermnpvn +bvfvjskb +pcohqoyu +odyqfyhy +nqgepwqo +zijtbqgd +czfgqsmr +fkgeoorf +udvncboo +dwxgrgck +vqhthccp +gvkfkpwr +pquhsiha +hlpqfrpz +aeirprab +bouoglph +zwyimnhu +zpculwdn +mokpnpeq +hfgfjamc +osgncdnf +ejfjqwql +tovcchzu +wwmburym +mdonvwnw +wxjysrlt +cjrqrnqv +okzeilge +egunoujn +dlbaqemd +qrdyabya +vaaxguwe +hjqwytxz +xtvmgdaq +noijjgft +xgysigmw +urbsmwdk +bjnerghw +aspvghjp +hgciumho +ivjihqed +wtvkobuw +zhtyhllg +jlxjwjui +xkmxhoek +rydzmqip +ydonbzvk +byeoptyo +gpnnqxrb +hyzplaie +tbedyaph +zgqhqnmg +tdepvaex +wytwmgkr +qsmuyzys +fijlauqj +wyqylgam +lbwxnluj +nmecxavu +ofktnhfb +lhjgzkjr +ucctfetk +mggvgkmu +yzmnbbhe +kcnqhuam +rxiwfblx +vfufzjou +cpynrovg +qdwshnpi +pcrxywto +ozhzwpwa +zroxmvfr +fpipfjvu +leyiafxs +oacgxszs +voebeyvn +ixkqabkl +lqabfhtd +oewbtlgc +vdlaniii +tabtkolp +xufkdmem +niofeqxn +innfbedm +zahlnzhd +whmqyffv +fhjascxd +wnsktsdi +ucdgnvkf +fmpxuyml +pnvuhmup +wohfuyto +wthjmlzx +tkcdmttv +ubyrests +mkrplnes +mglepvyl +shqafjly +gbpaitlu +cesjmugk +qnqmvnks +kbvvlltq +luvgtdmv +rrrhawdz +dthrxkth +bglwrdgk +apqxickb +vnzwzjba +reiafjdt +qfcunhks +dwmhshtd +rwtwnxxu +gjgdhwtr +dhrwidzp +manohccv +jvccmlat +txhfklix +nczocnew +gxlpkgqr +vsrtxogh +ixhtcwaz +qfapctcq +glvtpiug +jnuecngg +bktbndyg +ceboexzj +lsjakjjw +oemmiqvu +zqscwlay +hqedlpzb +hsrztfxj +fjpwidgw +abrsenrv +qseoiuyj +jtjtqxgr +esczykzc +mazmziim +szzwzfuq +zbcfhaiz +uqsnjwus +vwzqohsu +yylbjhnl +chqdcblk +vporypnv +vfhdofdx +eztmaogh +wlzjsgbw +dqutunrc +gwtpdvpm +ywxghnkc +alacomlw +jfuygdcy +zkoeauig +abufqquo +ncilvdgq +guinnabe +pdwybure +jocsrmfp +acwncthl +cdnaffnn +zyqbszzz +azhxybig +hibjuhsw +tvckjxuf +vklsqbos +efzukhlt +kjaqqofz +esxcyrxt +yocrwucn +iodafafm +oiakmvtb +dmbgtcpj +qnzrryot +ufcbptbz +veprgqre +umsltfes +bvvqhcmz +rucsowjt +kkbgkrxe +fksibbfh +tyckeiqo +gfqurpyl +raljmvsf +chednohc +gowzqrfm +ypktqcvb +fgiusizq +jvdsmnhu +esfuxpra +uraiwlfz +vpkulaao +erkvbjrj +mrhjjist +xmpayrdq +biqwpkrm +lrlhkljw +rbaglxsu +kryywepc +mrydxkuv +obksnkir +jogxscwa +pxkzdamo +wcywigdv +acqicmyz +xiqhgpik +izubxapc +yrzfptzd +qmyltgkw +dwedcarp +oouewlrv +izelyufn +ehdstcah +nylqvqtd +ywxjkxnx +sstceepq +bjihzptq +nvawrewu +plftxhsh +eyuzdika +gjdyaoek +euqeablj +zhgjzdki +lyygbhly +joscwikc +cbqczxbu +xnhptyqu +txvltmyh +kwtaueat +btpbbibj +ueytsouw +kfmmcyqk +fwflotzv +ouwyewua +hslsjpur +jdgrtwme +lgelctfc +nlxyvkgh +xpeslfje +adcifgwz +gquvwdeb +rkmzqard +lvzehstp +cijqaygt +dwfzsddm +vmwqrrsy +aotsaqoj +irjumknp +altzbfjo +hubsrgdb +nudnkfof +bvhvcltf +xupumtmg +kjfxunyd +pjwhyeuz +zmnxkepw +mpzvjjni +cskxvphp +dykbldmb +ymmsshaj +gdsvrycq +ehdvpiqy +engermzp +tmexxgkw +acjslpiv +qprqqyqf +fbictbjs +llaeirez +uxoofxnc +ukgpjtlz +tpxwxzpu +cuzgcjgd +jnzxfqww +wemyhsbv +aslnwaqg +aibaikgt +hglojgqv +larqrtka +ozlrwpna +pzxsdrjh +vsnuuusj +jswkkvun +darbbbhk +woeihkoh +xdsunolx +ymvbtrxg +mtodxqik +fxkcdfwq +koivubnr +gitldbqs +bsjymzpd +whaluyys +rvaftjox +qhinxcid +snpkwuko +mdgvstoq +zzytixxc +qsgrlmdn +ddjqxeaw +uilqxznh +chazpmyk +iivrixot +casfxwwa +mvjdazsr +dnmivmal +eayyeyfh diff --git a/2016/aoc6/src/main.rs b/2016/aoc6/src/main.rs new file mode 100644 index 0000000..45ae3b1 --- /dev/null +++ b/2016/aoc6/src/main.rs @@ -0,0 +1,27 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::HashMap; + +fn main() { + let lines = read_file(); + let answer_width = lines[0].len(); + for i in 0..answer_width { + let line = lines.iter().map(|line| line.chars().nth(i).unwrap()).collect::>(); + + let mut char_counts = HashMap::new(); + for character in line { + *char_counts.entry(character).or_insert(0) += 1; + } + let (character, _) = char_counts.iter().min_by_key(|&(_, &count)| count).unwrap(); + println!("{}", character); + } +} + +fn read_file() -> Vec { + let file = BufReader::new(File::open("test_input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} diff --git a/2016/aoc6/test_input.txt b/2016/aoc6/test_input.txt new file mode 100644 index 0000000..32ba518 --- /dev/null +++ b/2016/aoc6/test_input.txt @@ -0,0 +1,16 @@ +eedadn +drvtee +eandsr +raavrd +atevrs +tsrnev +sdttsa +rasrtv +nssdts +ntnada +svetve +tesnvt +vntsnd +vrdear +dvrsen +enarar diff --git a/2016/aoc7/Cargo.lock b/2016/aoc7/Cargo.lock new file mode 100644 index 0000000..58e04ee --- /dev/null +++ b/2016/aoc7/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc7" +version = "0.1.0" + diff --git a/2016/aoc7/Cargo.toml b/2016/aoc7/Cargo.toml new file mode 100644 index 0000000..1b18be9 --- /dev/null +++ b/2016/aoc7/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc7" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] diff --git a/2016/aoc7/input.txt b/2016/aoc7/input.txt new file mode 100644 index 0000000..d50f36c --- /dev/null +++ b/2016/aoc7/input.txt @@ -0,0 +1,2000 @@ +wysextplwqpvipxdv[srzvtwbfzqtspxnethm]syqbzgtboxxzpwr[kljvjjkjyojzrstfgrw]obdhcczonzvbfby[svotajtpttohxsh]cooktbyumlpxostt +emzopymywhhxulxuctj[dwwvkzhoigmbmnf]nxgbgfwqvrypqxppyq[qozsihnhpztcrpbdc]rnhnakmrdcowatw[rhvchmzmyfxlolwe]uysecbspabtauvmixa +bqooxxweoytjghrqn[hkwwukixothfyglw]kpasnmikmbzcbfi[vlnyszifsaaicagxtqf]ucdyxasusefuuxlx +rxpusykufgqujfe[rypwoorxdemxffui]cvvcufcqmxoxcphp[witynplrfvquduiot]vcysdcsowcxhphp[gctucefriclxaonpwe]jdprpdvpeumrhokrcjt +iungssgfnnjlgdferc[xfffplonmzjmxkinhl]dehxdielvncdawomqk[teizynepguvtgofr]fjazkxesmlwryphifh[ppjfvfefqhmuqtdp]luopramrehtriilwlou +mqxqhcpalwycdxw[fkwhjscfmgywhtvdb]khadwvhkxygtxqx +ihekzgbwpjxgbau[eqpvqxncntbtsqn]mbtbcujdkbrhxdu +izikobnovmjzngo[ombcpcvshnedtndu]lnnmdkuapgnxpgyxcmg[bgnxdzmiolfvvaizu]tcvnrfufuvhgmlxcm +yhrowrreplrrsbupeor[nchtznfzbzwnogh]rynudxihckzattbz[dshxeaqusdlhydtm]rvqzuffgqtysfzxp +unfjgussbjxzlhopoqg[ppdnqkiuooukdmbqlo]flfiieiitmettblfln +hgtbgxarmgbxqrhghxb[hflfvoetxfisqsj]syhkugztqkywetyhad[fmptjuaqittvvyooda]cjkxbnylglnlfleelzu +npxhwtitqnddkwg[gmzggwnvygsroeaadtc]gudnfyefqbbgyspdxjw[ilthbdqubqnveowv]xitfldhfjyjsomygjg[knmrlvoiqyytigytlum]dlfpsnyzmhkmeevfwsf +wjzwftiuixvwyzmgoe[jbfghrqhyywwhlu]wcijbojvlgjjdtowzpv[lgfvxfdusgxddsppbxb]pagicuiuerzeydww[wlpjklgzyilrifonz]gdicckmxibtwwoesaxf +eilrieezaciolhnhrc[hcisnfomqiiaculxfv]bfyxxhgrakqogthzft +xijomgpzpilomlpy[sfgwaovcybyhoogrxsv]ufncwrahejwlhyvz +nojlhdpfkjbhahgqo[lqrkjabuijutlcbq]caszlkvkofxjyqzsttc[isqicyomykudneq]izuzehgtmwnnvfrlrja +qwfvuzrogqzvnhyqdv[qhnjhafmrtghosbmskc]msmwswtgzlpmtmzne[kovzhefjqtqadhj]myqisirynftmtzvxvvz +frfongnaecavmrhj[uuptwvcqozxnglsd]kwpovfwuhmqjkog[phtrgysxaltvbohmv]abhuahonmbhsmfglltm +wdqcwcbtpexduecepe[zwrcpctlwglgfpappb]zdadimzdcpxhxwde[yquulvwgyyzwcfsvkdt]thgziwclyxxfyjpbpc[ypkjfrfkxlkavboh]hxylcecamgezuoljh +yqxkafpkuuxfafe[zehlwtvpprtiqbl]qswqigaeaneovxm[bqoieihtxarwyrqegb]yzdopgmqklqaizxjm[jhrsftklywefyevvha]xuvydwcntczjvuduj +judhawjtmpsxfocai[qghshlgvbitxevt]xehceioknrewezihnb[jvrzemakemtgmqiqmvj]wewpjflvqmottqx +uhokpvanmvdobqitn[eosarcmqnukoczgz]rmoowtgbbyimkptlxdu[rqhewmnpypqpyosgehz]nqdwglwscsizxey +sbnojmynueuyyutr[oonxqrbbjxwvwafad]krqlneuehyrghmkrq[khsckkfwowubtglegu]xweufrmlufamzbcedk +nmgjmbwyrvcbthw[ogtvotifzugvvrsfe]jucqbvfqclkuxzumoed +uaokpcytcrfpitfursj[lweyfahryjfprulw]dsdutsxdtugaced +ahshwqihivxlgsj[ldnmuwbrmoxtypqluyz]intafryfavcnotgxu[xjggdyvoarfajgp]zhfgnytzjhuyheqdy[yeynlfshsyrhjxrzguu]onvyhjfwooikmmqzwgc +djkgxfnfojgjpxec[ngwqajfbywoxlbm]oqdqigzeqadgqjt[tvojayieruftbjokeeq]gxwtruomnhorqqrpzt[bxppvnbiwhkhdka]rhpffqekyrcgwqmoi +aasbwiocfkaahrjwerr[dvlemehlhfzxnzymqn]okxibfrlswfvmreuf +rwcjoknjvyufkrp[hsqrwhdlwrtlthp]ijezyezjdrhzgltliq +azawpddzkqbosmltyxt[zoaaqnowmmwkmfkq]lgusvzwnimvgagupkt[scbjhqdftzssbvnvff]coiaslgcrwvyioxx[jouvwdiwvbsembzf]popmlnhjkoaeahcny +snucfdhspcbcsgjnmcc[qbicureolmbzhsy]cuabqhzbcbkezsumkq[cnggwqizurflommitua]ajtxxkqwqynnwroi +bsxzwpiauwlqelesq[uqfdggoirtlucvedpl]asacxftfqfswiapmj[nqohanbbzodfgkxihtt]lhshhkgjvjkumja +beewgulkwnmwxenstrz[vybrrqhcdpkhfnshccv]xdfvqzdslwosulzatc[kuknmynmjntvtyduwlh]trfvychdobyghnrxrfy +oxrwmqpvxntdkohmxb[wugyubwxumwnxlk]jidpzvtbomuymyf +pqzbwlnmvtytsfre[pmtmcnxkylmqaeb]alfdaofnqpohulpmfoj +qopdwichdepaubxxeu[ifjozmlqttahyugyt]mfmlwxifscsnuom[kiyjlqqxunsxfmht]icofrxpdpsktwiifyb[hetijegmockkyjhhc]aarioqngqmdpkti +klumchkwczxuuekdb[nlalmjunselydybqxdj]alagfcxocldfyzdnzd[abfnqrgrxbscagj]cohrecgrcaxljkz +djydzyiyydcneoubp[gorqzujuwkjsqhelfrp]pvtvbhztirfzmwcopfv[wfjumxbfvvgvzltlcf]ergdkkakrtfzcxmqcc[vwnkrxhayzbvbauvn]yjoqveipzibbmjq +qbdruhoywfjhaljfkoy[tznfejprrnzrrewdx]jziputgqfcqtbhvhlnw[ikahxtlheeunzrdq]tmoanjmpioumvpcu[tnmcvxkewovprxgzd]trnmnhdvtsisiujqjk +llojixxpxtvcwxaxp[rurmhymwuztchngs]weaefxdkjmofeydvfy[hmbracjdcwxfeva]jkiybiomykfexjlyg[pgrlrqgoxqqtoio]rdynpcndtqarmkagbw +kislmybuoblnpsc[dvsrnwlsvxxmzuu]jakczftcvijbavhjgb[osdyplcgliragfnpezx]kihkywmwgbkjtgxn[tdsgdadcvcaxfrbur]lzyjmrjqztybfdmm +orfngwdzlrucbkbqd[ibvlkwlnnzwkhnoad]brstantuaxwkibofh +vuumejklanuomqqdbva[mwjzrpargsphzkkhaaz]lkkewmbrvuczyyu[ebpoqgoifelelzzhd]biflvclnnimuojihdmn[llrnjdgzagktjrys]edtbmzmcbthpixhwwyz +ftaciyszakisxhzjhbo[khfshezpopvjaki]pdnnsqmgpgatvubllrr[ovjrouomglbpgvtya]ifwcvhascqptbvbums[cfpimraygtnuimiup]zeykmilehidtlstjux +nzgbxxiimmzsvhe[ixypsgextxvdckbjelq]jpklrvkhgzprfrsv +mpdlsziccgzmvorvm[vhxbfkwfwbxqbvxp]zbsxgodzhgmrhrprpu[pvawdsvqybgdncgxido]zuhyfbmmhzegohu +rdkteyoeleyhxdlfa[nrrzftpiqatsnnnsd]qwelhxwbpuwjmrjxmgq +vpdhtcgjpkrqmrt[gozqldncggxpvou]zedtarenbxskusqk[mwpmzpwraryuqqmdhrd]eoculislafmbqzy[okpddsvrtyrkbjtihhb]dvuadhnaxkfewhnksl +ivjfulhqfbdqiprzbbe[ezhkhqxcviwxbwmlnbb]ttekmmdrphuteslzwcj[iocuduwexawydww]qmrfnnedqtqezclpuq +tksplumjkpsjjorux[dpffmbayilzuszc]rsiowigabmredkfv[aurieaasmsrxufpo]lbwvhcrjfgomkff +uwuobjzxkgeugrivc[biktdwykzondbwiko]nnrtnqzhdhdwzkau +cjjawanjvbxvmvdmtu[kubvvkuoynaawzowphv]ssijoohfemyhrde +qlykdpnioshrexuw[tjwoswemjxylnqupgv]ymovhecbliuuzhjwu[ghxibaaourtzzogrynv]hmlndovkousrtbomlnz[nzkdpmqrqovnvskh]vdvntntzrqrhvcaxdov +tdhrefyrccgkdquxz[jqeprpsvvkmmldlwyq]lwhnimtgegsziejeh[gyefzqbmfnhzgtq]fmbcvbjtsriuicde[sbkkbqwzlluccpa]nwxmuolcbhtwcllmz +cakfzlwlaxgrzjpgck[toihlzbehdzesbt]azrsizelgzczqxwejb[ypecquckfavmixeyjgr]njiyddhuwlwogbnpt +jadaohixgxzjcopk[wopcnehanaabtklxnez]jgvumwvmixxxwaolxb[lrhmslkbmylyvlkx]tatmsbtlbcutcydlrf +gelrpwfiyiszejt[skpclwjhzgwvfbbd]ibwzelwwhvudmvoe[gpdveubkzkkxvtjn]khmkjslnkdlmefcx[fcwhuyiyvnjgfcva]qjcfuqxwmkyvvzuj +pbejigkioxtdjjzbl[uihultqxejdyegacm]fitsnuitopdzrxskz[shbzwyodcotpvoixoz]qrhuyetkmnnljfqt +yohbaryhrhuobkf[fmfsylvacrgvpnlqdb]iucbpagpbziaqae[lfcjrlbgxiytord]mhjlzecyrqcpbxsaq +vguohtnahunrvrfv[lwbganvrrgnasnkqjz]yuoncrmethwiglfiy +pljibizefgbrfauieem[yadmbpkftrtwjrize]fuzpxdpomsdxfocc[lvoahklovaxtucrpwhj]newpgoizivpqkpo[uloztzclhwixtcjhyon]qyzzqoyirejavchy +plinqqpqghkeuipqppp[rndecheohrsftgvku]ogsyvyxuetmdomwdmx[lumcfskwppjacuddm]uptsydogwyqaupdft +ewvtreckmjqvkvwgtz[leisttvtmrxnzjv]bfzzponjsjmepqjfs[knbonuuuhvtvteiov]vaejlijsnrpqppo[hvwwdxernqcxtxe]ssznbkhfmchmjjiahkk +rrofpphpfkeeqlxcev[ierkxtuduxxxbilmg]vmipzdomogxwiazla +uqmllifxqxwcskoj[lwrjkmxgwxwvkqrsajx]wpbkbsohlaeskzbv[boyvlwxpqpppcknocv]pgsvgtugmxmoexrvpkk +zupunwchccxqggie[sdcdhzciymhppyaaaib]izbizcvzvbcnofmqt[lvvxmcmydxruvudsar]gnspfiadqokusllygyw[wbcpnuppeugrqobtnu]mcvfhylypayxquurcv +ngscsmmvttxjxoaniu[wsfnnfnkwmjxjql]ijtqswaevexzcmgime +hkmykmrremccqxvfdps[izfaeewfadfhuwwd]yffzgiqtmayebphb +znzxjrdnxhfydrhr[kwafvmygvlylite]hmskvvpqyoblrygj +gkxzweijinwxyajq[jzljdfxlossksqa]octzjmrvxkumtpn[jypbqguwpybykguwn]ngriygtjydfznsf[cpwtojpifkhwtfknjsg]zahxvqxjtoutvvsphh +kmvndjahzayidho[fitbtgfncjvmbyrbvnf]fodwrbklqhxpsrqwh[ccwvgmocbtbqvwzu]uuidhylekzxzvmce[qbhkjfhnczasecv]ctsfirxwjfvrmayoeb +oktwbkikybfwojcweal[pnhqkawxmfxggabhgpa]kdjghdalrpgsdhqj[bxjcqdytenfjirvb]odnhihekqyskaoedyor[pqsixozypkjdnnntbng]negjtmkqfykrjgewt +hriyrcurqmacydyay[gfblxaovvngyesfa]tmftedgxujvmjze[knivpbneiuxdsowcxdt]zzncnfcouzoppog +edabqgdgbyjqkzjvzhr[rdejmmymhnvfrqvf]zknrxaqjohlncvwc[lcpuoqnkvwgjycfm]ohuebodqzydltckrsb +rxcyawcfxcjtdshxg[zvggbsrobekoxidyx]zdpvqowndwgdubbhst +qngajrgvzuafovkr[kracjvrryquumqerjev]mqddkdpqmfgexahczm[psmbzonkrrtlqdpgqci]obiynfssuwhprevmzm +dihkldbnjicztjfrvga[qtlevmacqkefjomc]opjaojctoraohocxaca[ojldoulpocpcpexnyx]qnouppkcuggjmod[oeiywfzmbjrhtxz]mvhoarchbrpndgwhxga +qyncschbsnqwgvfu[cscsfdcfbfqiwgwqi]pqzbontuospgycwzqn +lwvovybfksidtajq[vrtqmrxzouplnjogzk]gailtfjtszlxzwhbs[bgqzyhgudphwgufmg]levofhjnxjqhkcy[wbffnapyutukiavenm]olkwwlrbbobqudwvnur +yeqiptxuczuxzeatp[upzutosphyfhuho]jehejxjvfpqeifogn[odhltqvdcwwmshl]coezfdamogigspon[syppfhysfwfkisltwr]ihkaelrbcelykby +nmciqyaovpdwzldwt[zoaowvxkrpfuwnyepcb]yhqlmmrxxvguuajawb[rmilfmqzokaeabc]yhmswnsiyrepbudi +pifzooabiqmuicfqi[tvaqijdwxsbamxzg]zncutzbfmraagej +jpgkrbovswsjnbcj[bjybzimnzszdkqj]mvwmgdithrxecpselt[kghbhnctqnhhxxhdro]drttsuyvtuuygdtfaf[zohajxyfyjnqrigq]gadarjzfafqxsjxk +wivyofwdmipecdxuqu[trccnlbsvfbagstm]xajuejldffxzxfygsg +qsuxdmtfgpmlgkh[gisuuzaglpmbmydtt]qzyfvzryxepjmnr[mgsjrbmtxxzkadomelm]fqzjahepxspwkwpwd +pncauthrouncvjkrik[cyiovjnoesdgpeyjpvd]ajhonypsbifeghxi[wmudcxwbewumjbegnh]qetzbstgmzfruzxqln +qmkcddrhexvtylukq[nwrryzbnjnhvvgm]edxlyprwzzhgfmhz +iuonniejtavofqdqsln[ynjrsfsqrdsgydhpdvh]xvqtjledtcgkjkealws +fhbxdtddlvkjrmjyae[nwwjmjvxtabdwdezfdy]iwnsmstiulolahbxka[lqrxlwifzndbeid]jilfjomwrbjeniwybv +iptzrdexpfzabqcqkm[kvaxgarrbrobtmu]fqaedifschjkoepn[widcirixuswhcvcqywp]kpkxphryiwwnkmb +zbeoanntetxhvigve[fhwvhghpujcldib]ncrcyvevibooqesy[ougjirkquasabeqad]ydufeicmimcwgtbg +jaocnzcwgxknexaf[cqykwbyvxtcwnurw]udxjnumyhelfogapi +sduqgjoijyfrcnfencj[uxuiwklsiuqwjjrzcfn]epnvqcjspwopyffl[mwghrhtfclodjan]ghamugnhrrzjwmnc +woygyvtrlmjzaeteuj[vvvfohavzuuzyzgu]xjjcxhosambmkixiie[lqholbwbktlvdljmapw]diufpkdnjmjnmyc[ehjexwagbmezmpj]czhwzecixzxfykaiafj +nkijgkhyilzqvtgj[llydwhyhnhpcracxxd]zgtsspcwpyujndbxvp +nawnrsgxqpctinyek[ieguugfkwujnymij]rfmqypeekkdsttdw[rfuanabgfjgctueaaqo]vranbomhrynvjyywmh[zjncmschlfmkvhd]gfeoftxsawcgrzvrlx +jgazasxbickiiiz[duuskjowanfmieegl]cwgdwtrzpbfemqitbhb +lahkgoaoeofjlocsei[bwxyguvgmenwnpwlp]jigdlgdjptkimoyipa[zlcyjbqohvmlxgxp]bmovqedgchicusqzq +jhkxinkbwhpddvjzgod[fypyyhptvewejlbwdmx]teagznqhjydanxxi[wkppnjsyzhwshtpo]piaqxcwqolwklwzsfkg +sjedigezzdkqlxlcnr[xanehtpradlngiob]uonmjrieoycpthh[wnsqwfubwxkqhlflzv]smrebfwpnhskzlknva[pylbyttmhyggonlk]dwqkzjmatybpmgeb +ktfcuvnwueamlwvgwmq[czcgevditrtvddgfh]djmmelqewdnzrlqliz[fkpieaipgyxnkmjp]rdpkfzvqpfpvczv +tixjemagwmynkihelk[bnwfmkugsnivgdmvskc]nlasqrjqrlorszi[kbatouwdhejxchpdhd]etmbkytyrpnrpgqvel[xahfkfjmsqjycaq]mispsimhcckrhqvek +abudxncgozbrbnx[fllpjgocynbuyawgs]hiphrvpugpfnnppn[jhmlgjsufflkdgw]ldmdclrkorzjtbjqcrn +aljahmvdrraiavzv[tevjntkppnjqwovvuuh]ozmgagxzixxyzuy[zgefziawisowuyqra]nrqmsbwgqbfrxqvzu[zvzglmnjmjpmditiodb]odzbozesvocemfyis +zgdukwtswaosbrossf[ugdnezayjnbjuhpeh]knkvomcsgfptssifni[votpmaaohcyofgdz]skbvfugaaxutcmrmsc +ywiphurgqcvybiakgok[cscyksufsduegggw]rtvvvokrvwmwsvmk[oqvdxhoqfsfdwwm]sbzajtnbxzkyiwrj +nxrvrsbjsrysysvftoo[qowwnvlezexjyynm]nknzluizyzjpbzpevb[adkqviapkjbmknchtb]xsgtthuifmsqidyh +ejrplkjjbnjjouesaph[bdtybzkfyictcjuagr]ivtcttyunertnzgmpqv[roikukeznmtkqomqbk]lsxzsjrnsrdlxevj +qgcebktqtyjjwsav[naozjsnqufkkgkp]evimphuulhzflub[weanrdvlsmmypnh]rojhwlyxtszxsjiuai +zludmyuqlfpefvxcm[hejpyhwaqdndtwslan]ldtxkxxtegoqpntsnwg[olhtlkpvkdgkkxkisp]hursraavetjgloks +rosuljoqspxeovaqr[ocjdnpuzmwioylt]txylrlsndrifxiuxuyg[jnubpcjyfzhiwul]pdtcjcrkpmzlayzcty[gasynfnouxnvrplkym]naxwpqsxlsbvyuavty +oxbyqbqmpckkdpfjtr[ggnmfcjtyfspqrqkg]tzapjijawrabozckadp[varichgjrivmseddxv]admqmnzxzqcbapdquwd +jvhvqxvhqfxnjzmv[hwfwxvwhxorzqizc]rpjpwggqxqkaznkuqn +yrsucbqcfaukancrr[nabtowgijsnzryuvbiv]sfpffzxrftnrkjx[qfyfsbkyhetcedf]xdykjbymrqgheanxx[oxchcwrkbqvvfeyi]bztjlknshikocxztjm +iniqqqqprdeznwhr[arooglolfjgprfrbhbm]sczcmpftuhbaagwgedq[yutgzaqyxntjxoglmb]vswbhlspwfulowkif +bjcjrdzwhmssgoinrcj[jobrpyapaxkasve]hzacshssrxkdtrlqhr[yygotqrmvhiqjrja]ljwfwudymzkpczysknf +lrnqnaxtavkhwfebb[vwyqnqkveujnlzv]coizhrfmviizxgz[zklqinvtnwtajyjx]nxvpznyebozrosfgh +ccjjszgrbozbpopagns[abiuzirqfzactus]eemrbqrkhhppvan +xeaifcibybamzzzic[ymvsqllvremyfify]ftgmrkhzswdpbmukcdv[fbyevcnnwtnodgxy]slfjznnldyuvair +ajmeryqwfhniqenmi[bdzlgljpkkgsvpjcy]hqzxecqxmneterlqizz[pzrbbprbhujzpcxhjmh]lvrckyomhvidbiapikk[cyyapugbrwlubpmn]toodggarcneobyz +lehpdvqjccdfpzpo[ssunfejvfxwzlzqy]dvhwfrwiipveqpb +ijmthhifxtkoubt[jcgoxkntpnxkmdp]rzsfekfmamzddgm[szvzrwthulqzcorhnk]lmgsxsjjcagkaysalnj +qmfgzmmoylbruqxoh[uoyinkzbglorxud]frtffuhkchkrwbxfx[urlwigeirzobvhir]pqrqujuwxueommaj +tzjhaiqumjufkzcvphi[lhfohqxxuoqybomckm]qjhpjkjljzekboyc[gvzfehzyrfaarfklybg]fhurcpaukztwesz[lhvnhfgpmunjukye]mdzcvgeehmchcqe +cbyyjbdwzgdhveyw[ockkdpwglixvbom]ozezplbkvaulagw[vmzfmqxplwaqjrf]upytqbnzjrclzfvti[hztxfkqwcuypqyhsfa]sfwcfhrnccesyncbg +zaclpaavkxbpjxse[dmuzswkobdcfmrejhaj]eqdwvpiphijpwrvg +yvectfptgdasqxi[rmpaospaiqhwpjwdru]ollajqbxmfnqmqrdce[jqixwgznolbepskpm]pmyfsrnbdcqdrhplko[pzblovbmbnbwjzsxrk]hgwpjhgshxoozdu +gpnplfnpnmdlhehgazx[gkgcsjdcfnxytzp]wamlpixcrqvbtseb[ijaxccauotewzkgu]usgmgqmezufmgqjslbu +jgtqghpjnbjkmajymfw[isxpkhlvtuyqpscvm]czbrsyeqmjnksov +fjsepwfaxbbsdxlcz[efiljmecvcsybpj]fsvcvvewoepnvqz +nxzdtgomsakdhwefrn[cobjsrlxnkxvmhk]wkfnuypvsigzcnswufj[ttmtjfkbnhmmdebtr]ffumzvnvgitjccgz[offnegtizuxhpqmic]lbhljegbjmldqbzryis +gnnsvlcqoatssjuijb[eaodophfeufuvdodj]jplhbuvzqfgvrqbuy[ezxxqanlgnxdkohew]vsukbzhjshwmmqdkzdh +shfhzsmqdeibrwgyr[slyyksjeywcnuaocadr]kdwnsokrwkajgnwi[zsfujtkhknplyieg]kijuvumdqvjyjpbhl[qyrlzloooajylfrsfk]gwqdkfpitiitrednt +zhmwbilhpywvxrza[tgnybotdqixzolvn]ptxzyjbayyevmcqua[hcmgjpycosutmqbtkf]tboiprpyhwgjceu +ejuvrirctrlirihunm[nfjigabdmqnkfoauuyg]rfwcumqndfgotyx +cxkwlruaswigkrtxxch[fjsovwltjonhegm]zkfawxnzxlkaqawq[rgfftbipxlmelfnpf]qhhslyyiluvowxz[bgxutaxmhxyxxdob]hzthuaqpiyeomlgqqcn +qyzwezoszvwrwiilglw[opryawlpulfkpkmuave]taxeqyunnihulfp[vzxzosekvamoofva]bbtonpohbgdwfmt[xwzkmwrwruatcdqrj]enrapbeqoxrufgp +lowqonzaekybouni[uehkpbaxwfixuwlj]ionorsihznoszwzyq[cnatlobscugfpvpbw]lnsmgieepzvmhvbz[lsjebmtctttclkxqok]jwevnfmcrtmgjyniiuf +ltxumfyzdinfqrlf[jyiwmlpqkbnbgmu]bnicegkghtwivvyozea[qhgoiugrookfmdsln]fpokyqsoknuahpmutnm[smzqellevlxgdbbet]vsadiuyglyyuccgkrz +fvhanaukvcjdkhsydnz[pbjsoundyybhvaqglj]esjjvkdvjmgmlox +hcckhzdfmmvnsmuzjg[uuajvdzksgilxpjmnv]opbmjvfljnqzxkql[pgdelzddxqrfdoqnit]hqrrfnwrokufpybg +ovtjlczqesucgox[kiqphngcbakoelqncyi]jhrwrpwdjxbhnqp[kqvqdyokyuxulxidc]qumskxudarjyagegy +mxrxpfkynragapzrmdv[rdhsbrxgeywqbqh]rpoerdiwdisciarhl +ejbdfeqrdsrijztlibc[beglofnxveiorftulay]jslqibpnunabgqmi +uplsbqledimexhzwnkk[sfreaeitecravsu]exfxqlrumxaeasi +gicahlhkuxbhppe[cypyeqpzkrggfqrielv]pkuwwtbezndgtqhbz[ojnnxanlkamvmpqfj]eozgnkxtbtyecuhs +jtzwiyeueztuiwysyv[awibgssyyssrnuxrvuw]mmyvqfgaaraahzzen[rhscfvdrvagricw]qsqbnurcszgekmp +dxkeveuauhblqnq[oksqvawybtejxmdw]jrbwmyxdggncxitwcms[fvhnmupxnynxmprs]odbifiqqxskxaqn[xwdwagplcltcepjmtf]zsfevibkmzwtzoq +kflcnlkdujmtiug[rwydvjaazfgmfcn]qolbbuxzxhoizfqcwn[tprjkbylcrlvmbggae]pjwhgcmgxzhxbxdceme +donbjfkqtygixfpaa[lhfcyuzcmsgixjbr]njvgmbwgzimrtpdmvf[eonodblqfpgtmex]rkakjzfmuyeajvhs[lmgtvenasnqbyby]jdbxoeqnwoednoncq +laiyueskjnlltkwm[lzrgjwrjchpmnais]pqltpskalrwtmtagvm[luctnpiuqvulmtmw]awlqbuutunlbpusn[hdetxhrtzhkyfktmfn]qpmezabxzrtquidbjc +hritvdzjxipitctgoex[jtbjcyaysbefjme]ebbcyqglydfhqjfa[uwuwqhwanfydpxqk]enevryjyzduawrfc +axxprqpxpifqnwte[qwkkhbywyixngun]ufwcbmerbqiblbdmn[mguzyerbfhpqnybh]gscgmmckgfxvvwgxxm[gfjzckcxdowpwmhmg]hjblyfatzhxjyvlccb +qzzkrqfnnzvgfmrpjr[sktcrqxcctcduir]vmhsrsedrxpnrugm +mpxgzowtjabzwfcbeg[olgfqepvinejmstbrj]fnqxcfzuxojvkscyk[pxbyuusrrbjwrygkxm]wiojjquwvhineivnkys +vqcisychxuswbqlzdkj[jetvpggxtqqguuh]tyllnzfyfphoudijzj[xlnznxybxscqjktjn]oysyrlqascsqbclsb[rzhxpwwrjwakoldm]mrwzibdjlhsdsbew +rttdskfweqmkjolrgsd[gmdwcimmgetwiprem]wkyklvpjyhpzvmsh[zftyxsrvhnioomw]mrvoyvyyrlguwedz[xyrajtcatyabfqigup]srjmohoxwdybksfv +xzeexlrzdznmhbph[vobtfjuyowqppxw]mjxwhgwveozusndvi[jthhtubbkbmdiepfh]gtedeqwesiwzlrfny[tppxuofhnwwkbkysg]aygwlnvczaarhfgkw +zxirxtzlqkptwqd[vwdzostlmrbjclfj]aluxqfcdbjwbeerhr[nsjcafnammlxjafrzaa]kipaqywrtrpkbcdtnyi +vovbpdgnfhmeuadh[bcgvleartfaspvvjjz]ajyzrbirtimuifvs[lykguucpvkxuupcbims]qplsipqneiycefb +alqzdecagmvodcigcd[atmngaijkfehfbc]cprsiaclouvtbpaab[lfrxlrzuuooqdtfirbj]olcjwtrkndcvykp[lelvgglysdxycvk]uyakjndqzxtzmxs +syngsortxjqcdwcz[qkiseyvolwhibxdg]ucuxqdozkfgaxqwovk[eqeessuwvcayhpc]wkhzcbkxgakgxnmho +bhtxesznfkwqbodb[ptpuhbdsvbcjpmnsl]oohvgktjsjwxqgyxov +udnbbnkojrdevgujkg[cramyjeuckywtuw]qtldussgogyblkm[yuwacyafnikvgbibmwn]xvsgxmywenrmhdctxg +uzqtkzkmmeuttwyklv[rgnrxkbavqabukxvnp]whhgpmwocfmplba +kvbjvjxyqiqitikvm[vkzunkivwcpvxng]totvodotoqiqokouz[luzygityrnpuiih]eadddxqveeuujmvnek[nyxhwlkatungkgm]bdhobvhktlnfpjelr +inmnseeoqimzjwzhltk[ntwlsdvvybtdoqciu]jaurhomtnyudxxmslj[wqygsctddywlbxg]apsdlaftsghmhtj +pxieimaprtbntgvm[xuvwwsinhwjjapu]taeomoijctvzyeijfr[gitzztxejfefzvepf]udobxonjlqagrkpaehc[fkqjhfjicleroxp]hxpzoklhbgtngtagcz +lqmoxvnknpqzcgs[zktsmqcgzqjponj]wfhhzvqiqkxfwrrw[actbxtcdlogatfkprc]tvzphmtxfrptzlopv +czdnqiwqhighizbmivy[tptpsvsahslbsovazkk]ycppvkqvuggebgxibe[qutumfpnpzjkgqyfkok]ixywxvmvliftixfie[qipgniycxomhgmwje]vnhxbcnofkcnzep +igvdicnzsefxlgk[dzppkxdievabwyh]fvyywjzcyfcqahv +bjzwblslduiolbezybz[flvsgshhznvzmrxo]lottitaizuksqfihn[kgsgzawzjlqjsep]ihadewtrfpsudggga[oecgswhnbhslysd]flpdpxndzacxeskzmn +syxfjuakhrnntipfpb[xmntswflflstndkv]lityfpfignnxsyirja +unggjaqgvzrckyqx[llllagrmuioghea]qafuiwqpxcljhvf[tevtmuvcyqqrzvrduc]kqnaadyfxfyyzjuco +cpjvjnocqphsagdizq[rzfbvtnodwqrqprvqh]rnlzshtjhrevjgdu[lbozqegfwoaikxbnt]cqmzymvkummuzjfx[vtknqltevighwfdnjv]djhfeemiljlvkgqkpp +adbbbgxmiqomckxesb[dmwxvrammletdiim]eiozjsockohijbiinia[zyjjubdniurametk]ajivyylxbhvkktrzdg[byxiykqfbvpfdzdv]zborzsvqimrhyoyhevj +frshflyhzegyezg[xxaoqtzxuqbamukfxed]klyullmlailfvcz[boefzsdpblwpbna]dbnxivwobykcfwogv +xxycwortiwhndrvlr[mspdwmhyqdwtctlyek]qnzfcwwvvlfsael +fnekkofpuwhttni[mlwvhzrwfdtfnvof]gtlyjqokjymvtkiqdl[gdjobagxsuhudnoi]jgcgyusdyyocqwwtatk[rjujihcuqgdpcbdnkco]iewvagokrzdhhhskv +dfadfbjefyinccgzt[gzoojtdlvqysetfihg]nlsriqansooflahzhoa[vlzwtzgipbaxudxg]htykxxpfmhigbdqsu[pzipnakgdfpajkbqowq]zrwedqiuobogirulfwm +wevlduhhsouwlqxdcfc[bxcvjwespxdkulgun]hfuhwpzgdgqsujeex +zweayhrezaoqibgvc[sosownrvumzvynfpvr]lzubqqqepwraqqdxxy[bniazltbdanpnjjjuox]tulybfbbzeiyidrv[zbebbcdzpcvegcms]jdfofmnlgwrnvann +gkmbgzvludgmjgnrkck[ijywdgxetrginhtaa]yiokddkvhxebbuyrwoy[erhxxldeegvsebr]ujqickibpbjpizhbjw[mtzvltxionpxygo]mbcgbublhkajfdfvf +ddjzsqkoizakmeifr[sigtlzmyyrflvjowj]dyqyfvpkhdulwuj +jivforicorwbkmccpgj[oviyldmrjjzbojbs]wpztdiwcdrwttmfdw[jgylosmbgxlrogsa]htkvwsfczzoascpunqr[uemtqxhcvvphnvktio]xkghvnicljrlndjtsv +zkzjccnvukaraob[asytykcstvxtkvermx]lqgjlittfqpyxcq[dwyrqfxmwryvxjzr]edufjnmxhzxokjgphk[ucthvgtgfpzxikmnjv]yqumujliwpjujnymcen +bhbndmsnnbhspzjby[llodpdecwrlspsbhbhm]zqulqmxwcerescalp +ozkoqhvatxmivox[qffeloluwcgsimvcrnu]pweywrdkmtqjiflvcm +rznstgdzevfsthcc[jpgjzgeibmumtatu]asgwjccfkwzaigwp[soegoylmysqcequdsw]pennknxcwwasonjz +afniplpdesiwqvdioov[xfkwuijxjgtqbhqow]idmgzrcmwzmrfbsubkz[mjwyiznfpjztbfervj]cythmqghdkjcfrt[ekhpwckuwduoexycc]htaeivvotvlstvsrpj +gecbcvpiswzjjeiriav[ivbfdesbkamvngogjb]xphdszgbcburesbfi +uldzgctwccgqdbxrmpo[guiftcqomdqlqua]dmxluytucnlndazic[mhmdapmemlrwmvdzwkn]oqyvwmhlabcwxpzioz +mganrfqbsckpjsnvlh[vlwmfxhxlnnpsghrhmr]eqyrkxjcwpkahqpxeqr +wpbzefalgkbnrke[qruzjqtrkbzsvfgwz]vahtniazgsicquatrg[zzslttuxbwolldy]cuejnzjsuwgkobp[yspyowiamjpzcaqwb]vhakhmjrncjoroe +ycxznczxbzrprsiw[oggkqxyiyvsrmxck]asjjivqayantzzfysr +ewbllymppqrdnaeni[qkytupytcgsftpprv]jfepwibznfbypfnf[lrparpwtkrzlxwep]vdsywhvslycyohef[lxhwibvmyypfrkdsley]kookbjfsapqphmywuu +cfpbgrwdsnrgddzzh[vbqzujunswprxyxnk]efqzsevzxurynhnm[cyctdnsmqdssnmzyrg]vvswrmqzxnrbkhunu[homwjhndwctdbecwh]cdvggafdchgeuqy +lihwrhvzkhbrgct[hmwzxlaycaimxchybqf]ruvcpltuinwybvv[xjbzxcihznlkorih]zxnxeqobqveujyrdnur[ijhueqaqprdlrdcjsh]blwxhcuajnskuntgo +iroxkwgrjpzdodvmohd[wexdltrhssaqwqnh]ynvmdpomrekdsfrjccp +gfusgnroizvfwwcsc[jgvlrznerrnjretc]dcbnruamgkyrowpglv[tbusonvwwycqtfk]oqngfriboradzof[yosalcuxlovxpjnoss]teunwgykswgulguic +bsjpzlhhqvnghwnp[gakhkxegeohljlwz]hfhculyhgdwcflbdt +ataqyejfhrpvpagptx[ufqdptheyevtxqjuqsm]tekvtwjvapcyamluzbn[xxktujajfnprffsvfkc]espinhantulzwpqug[pamkrynxvlrwccp]bgzabgrubbhhwwanvf +qkyfobviahzasbi[dqhxzkbapqmrubogqg]aenfdyclijdpkeqzc[fbetcpbytjywomh]mqzvwjmgiexjfehor[ntwcsnflvlaxmfqh]uvubufoducqwacwio +zvygygjncwkyceve[knrtgwmfgpjlqdzusvb]denyidxiinzvmhkeads[nuqpppqdsbypxncb]pzqujhpprhbxvnuzis[zxyppxjfqtzdplvbegi]imswdcvwdghzhmyyoci +mpiwlfpsupluuwzyqte[mtyfeccxfpcorktwam]jtmnexxnxsdutfve[ktzdkimtvwbcjrr]crdupwumoriklqckirt +clubjinwpyiguop[xummstkqfygcnsu]rektotfjzzguums[hcxlqatyhaqponifaa]vdzuiclpdtepfqmbdiw +sswrlfxpvbjntaovr[cajokjrogvtnguj]jsyxzvoomnfbtcc[lgpureoznbgrfwv]rbrwjeeiqshuvkwub[gzvyjbprnocmpkyk]gzibarcxnwnvuymlxpn +wpdzryxwfahiwguwvtz[epyjrrvvjpkuogtflte]shadblrllcaigwocsw +osmgewmpcqugjqyddn[omtivijufzacwctoaf]rvlwqcfmfuazwlas[wbpvzrbsnzqnhygpexe]vxvfjrrcjutfivtxb +unyfptkouxbhwwur[atheuhcficbccfur]djycwrtnlttopnjcm[pyocjfcogkyoogo]uoogeqkztdvsgdj +gdmorpdnzddjtbzo[hxulwsrafnvyxokoe]flzcmbhukjwjfnxsq[bzqqvrmxihbugam]kwwzidcxteeodrcekl[vtjszsdbmsxqouutvkt]whnkvoierxzhehwcjh +laswazcejcxyzcocca[utnlyecffzypkiocowm]nievutnusvrsixk +xlcgrfodctfmyxvsms[bgnofwciyllnekkiqf]knqjmtgrurhsjrwahoz +enrcvyphrazilaqswz[gdxchlzickidnqfeo]wmadrvyuoczftbdbbij[jxlyycfmgmbujmas]gsreebayzepseakylr +zeenyzzskgvaysxe[drhsgkqipilrdmcl]xyhouejaqgfdhoshp +sclmsgjqcijlilhtyn[tyxuebqjqjqdnzg]rfeqmnwynyzfwsfq[jnrjwlqvcnvziqjqnz]zjyeqebxncecsykm[jizuywrcdskgjpv]nkogvpblfiwwnynxf +rkklgzusmfikiyxsk[zfcqvybbvwxwxlosyhk]pbcybycsiegagdr[jfrnxtonuvihkiueuhz]xlfvapkzcpysqoi +nllzirippgseojljl[oahmzicssbyckdhyb]qqaeuleefpxlwfl[orimgxtsfwsplrbuppt]eyzeliykpnmmklg +sypyjddvabqnknl[zfoknkriiqmevubru]rcxkbkzngjzzcchl +uveautnfudowpkocevc[xqckexnnmsrzxwrgnwo]fbrkssqktfmvbebfs[jmkkvbmhembpojk]vrixaskbnwyzibmtux[evdzaxyibnensgkua]djjjewnszeukvelm +xcidhycxopgdfgzxp[wcybbxckgqmwttrrvq]zjynrtlsoibooaiqg[zzsjshnyyytzmrcskh]lnvmmzokrgnyqfvsi[kjpgxjqiyimfzec]bpdjsrxzsbwigarmwi +zytphsjaeavezjmtjf[ocfrxoepijrllfc]gsnkhdomwvsrvmctk +hjrxkkrrutrkmsiax[zwsclcwdqaukxxwmbgk]jjvxzyshctodfeeonp[eklzpyupurxmcvgndo]neaovsspupkhdclbo +agrgepnpjdjmmzxtoz[yptupgqukzyiwko]zegusqzhdpylmvhgh[ftclkimlyjeiqxymyc]qplgypcugeybdlznf +clmaojwiieaxtkf[hybxxzkuvyvljxs]nqyvgwkyfgwgpvjix[ffrpmlqwqbfqfpyn]wewixukrkkavdgpr[zabgeqjcvdsvydus]crgezocdrhjcufljyf +xwekgqqxadszfqxp[xgftweqykbpaqymyaev]aawdhgjkmwqayhfuja +tynmzjhrddacgjexrr[kgxebvnmaazmffon]qercmbticxiauyauxmp +ueswrzmngurxaqja[yzlfxoaxangzjbyqm]zrwxnhpmqiespczu +caxoesrhrghfcyunxkf[lmalmkbhrhijrvmafw]sdbhqytqtaviurkzi[ozohqgqrkgcbhet]wgwgtjtcfcqzvymnp[zxuhhoxlpsgrfcrejmn]hkopyalfpjzbptgetj +osmyszkhkpaedzdy[xfincacxeotivra]lksiavomozgiywoxrdu +fzbuakjjvpyjimycrt[vvbkutdqqtyjgqz]rxzeygtijyrfiqm[qxcgvagpoqyoxhziej]tfoadqfiddsurhergel[sxqvskkcvlkpavpls]ivztxqjuntogjxx +hphqkgxgqhazalmlqoe[ovhvftdmpwudzdicfkc]tdfnmaosfddlzbhv[obkkfppmoqirgmih]xrsrqaohawnwlxpvq[btfonxzgatdqmohserb]bukakcwcagvcuuwvhtw +cknwenzzehwdrlje[sctyfugmaxgbetxzf]fcsbyyqvoowzutlge +gpjdtjgclynikoh[vicphcxycqsiiiglrsw]bcjlerxdimzupbpnw[waevcaeooffjikclq]nhajkvqepdnzgiijfrm[lvmtxqhswljuvux]rnmiklyolpctfrfgxs +weolymxfeyqemlpxulo[ifjuypsxwrwczhpsw]hziolxpchkfouvegj[svfsshaljdhmwcmu]zqbrupsvenlvvfiuhf +mxvfnwvzsyldqyi[bvfuwmmrksbxbzcmzrz]wktcxsiresexdodbtl[hijoaneecbrhpmaa]xajfvvnvwcocpcbrhbc +pboivziugjszfopvkwa[kdcvzroeislbcymt]plydaqvkrjbbtlutgvv +dtzdswmudibubrthcxc[vgmrnyfsqtutxfq]xwbupswdznzazrecwr[ijppmhwabxmhfgcqu]rwvltmqsymbydmqfnzp +agaxfzobcsjhyutfk[ftmcykjveqrlmvizdt]agbgsgsmhehzvoy +fbgqlgcyjmcjajxgq[xrxyfyshmvxgquv]ubfzmnkgipmqeucbk[ebcveyedtkxwqcni]dvujsyfjdfowgxfh[oubuurnpwusoxrx]bzxtjgpylljsuruwlq +nbctombtbcumuwmay[pryqddzmpxgkjlz]bwwebcrzdpkqlex +pvwqgvrjhkhjycm[luquegjefcvhweovots]vddsjvlawwxvkcepqx[xkomwqdwvymcgtgxky]tmjyqmzqxuhzxjekwpw[jdszwjkhkxkkpjjwkvh]jnlsvhnyijndbcavtlh +ccitzedsdvzmktzl[qjtmlhlgdmhomythbe]skkosmhqaqyxvrpwyvi[toqfnarddgzlwhipiqf]vlallikphqpggunc +aapudqmdqsoadhf[bptieajhwtguxpprkdn]fiopmsokjtonmei[rdcwfyvsmtkqwtpzwcg]pmgiakezkvhfiqxw[bmglrvzatxatgooc]jdkxirlaztzghpcgiot +csxohvjhmjbjmsw[zgvrfjdvjkjrrsc]wbnhtwfofrquxtzynmy[smcwkfovyaozfhhf]yfribcdfykfzsig +mzvhznqsykmcdgkphhu[cmmcxolosuhnkmuwhf]gkzgbqwzbzzurzehdm +yecvknvwvjguxlytj[pncdvmrcqcjmsyix]nvosjrornnfgznaby[tzuoscqaarhjnslab]whvfxspoocikxfkyj +guaouikkjfrtolsug[tzdjiielpgytyhis]gwwwtmdeetytmerjk[sorwxqfcsuhbvecom]wmfmxfovbdjhajcaxyx +ouvjolrkjyetsqlo[vnadgdxvtdkqlgi]pivwtbhwibflcoh +puboxtiwmmabyqgn[zhxzdcswdaavgdaly]ksukgpnictzfxxsuqsk[feoibpurptzvrqy]tytogwcrtiofplr +pyeiwajmvimttmi[pkvpbhnufrwpwdwy]dwdpuymdrskpgfwp +uwctwjpjojxatnyjwm[utlxyebxsfrddigrjh]rwepcpjgrqeafmr +mcibrhjsqyketegjx[wjiejdvcjjaijnmoy]lsjoughndzzedmblz[ovdcmldcmntnxwk]gtjntfaikfbfhuercc +xkcadobnrwjczwpo[izovquqhogzhtajgcfu]feiizljlnxughttxhy +zovyoejioovblepnri[wpjrezfxmhepyyhi]lissctcyvfbtuklymtd[vtakkwrsocdxmyqjkl]idfjftptuoiheqi +fjylzurwqfvphvctbn[wtraagycimmpycsbtw]zdolnnawyfkozoduzht[wqccswxyzozewtayycz]zngifgtxacyrwiacyd +mkdselqpwqchnwxgydj[orjtmojhzkuxfbpmxa]udrbphkhzchgiyq[ckkhkoltyjlfzrro]kdyudnkzdsjpvonrw +bpjaenogjpzaxxkejpa[jqgajznyesxfcdhph]euziwygknckkkkunxux +btjnlodtnbaubkvb[topsbnzgxbfanulah]uksjmxxfwfzxqfcij +zkfnmdwdaviehibtjy[adnmoctsyzhtangoxtk]rjydanokxyuxajmnx[rbamopbudxevhpoezc]mzurnxtacbelmitu[oidbxqghkpqjzyqrrox]ezgwbeyokfmjwblqq +nwefqukauecrgki[ofkmtkzupjriwlml]diautbiayphukxvmhlo[iggbxeudmmbkayonzyc]hkijrjxiffmncybco +ytgimnonvbqexhbabc[jbkbctatpdataxjqtee]bxzwvqoqyazdgoy +bjztbbhxzzuannkyvet[mngxjhitobvkzvls]abhmarswjsswftn[ihxeotxkwnknkbmkvjs]iovgdoevhkarwuraoef[wvsvcnptmpcktslrn]ldjniscnknkjaheayp +avmlgtbubxrilqdbvd[eqaifmlaniocwybqh]juzknvgrahckcrhagh +dyvzlyoefrbtxizlod[ussgexxviaibhrkb]tcgkgkyckgkyewp +jvrsopjyjarbkenouax[gwyjvegfpwvjsdl]crgcqjzhywhasbuzdji[wqqiwpzcllmnopvbf]hpirheoriudpernd +cpykkvqvowwhoiys[yjoethxfromctdkog]cvlcjvgbugyqvqxjbc[ipyvfwhqyocrksd]dsvipsvdgzruhsli +gsyxcrknbxxyhvnss[zymlfgpcupgtzycu]sjucevsghhzpuqe[qldvqrwjankaiexmj]cacvncnvtlbnxfybngh +ndbxeywazfrnghgdjog[vncdnjelecbwcnuecit]obhfqkcyucffwbhk[wiboksymurccujv]kxhiktclvdsgbxt +ieqiuumamwhkexjene[tubauuniiqmzdntax]kxiqlujdvpjqqrtkiy[ubnpvsfjutgvfhpe]fnwawoyfoqqdgyr +lromgmscqlmoqtqrr[wbndhgvivyrvevwpbd]fjvqzyqdkqfpica[isfiiygygruduhleff]lbfsdwsbvndxjord[zmgvcnxjevefjnqx]izvrxpsfekwsaxhzg +vfqitwljrqvsyilpb[ugzycuwrexfoavmalm]dshatbrosrihtwpf +hduooarqszvabcwukj[ajuwsrthbgchctbyuyj]tpzioxoqtyfuwtdccn[jisrxrmnmzhnhotwra]swseywswdlsbzzqqlv +aarocdgubnvehgg[xvfugpdczaccgttycv]nhzocbyrdhlppydelyq[uloucbldnjeulomssv]ayxgxkrslthaspz +dhyljzgyamlcdmmz[zdkwfrroodcyfnfie]zkwhzngaidridcagekh[emzeeodcnuvzddnbm]vtwokrqakoovvcdisvm[nzdlsyrpcsicoedyx]rrnfnhgpaeqtlxv +nxybztwairyftfvig[syeyundkruexgbwyvz]pspeqstftxbbaevhql +sbbhfvvgyscleyxzki[hgjoiilqwuiiogtt]sblfjsptehcxdilpgw +fmynycbkkkiwjllu[iolpwypqrdrnkitax]fwfzssjntanttkkboq[afgwfwvsudpprmpne]fbzhbkoxpxavaskchfq +jcyrspmtzwxqtomkqab[xqivjfrwadfvtfmp]fxkhdbiczckphwhil[ztemqpsvuwhwhfdfip]zxqetcaulofvxrsak +ozgxtokkrotpphxsnt[txgvekxlxkhufcwi]hspcyxwyijgjaqsyfw[bcjgsvsfzmvjklh]bxjmkqkynrusvvq +wofaptbytcugaluqc[qdgdqupqigweysdhq]saaeqyqazqqaunofl[iorcsdtwdhfmajh]owdrcjffsvszwflax +icrmudvzysqefbfgpae[uypfoutavxnzfpcfafy]moghronhxpgorkpypoi[ayrgvytktzzwtfuvfxm]ktoiazynmsksawusbsv[vypyasahxszocsfrcx]wyodebbscuterfrji +otrgqclsvnjpznt[dwzibvrmtngomacr]xtqtbpxdtejwbstddr +csiarmhcmunsjogtwp[nborrnynefhrgwy]lvsacfkgakkbjyny +ijejwezkizvuswn[zfkgmewadvwroqibng]kqhmbrdzuvhcwkwxfwe[mgopomvjdemllzygc]ivzzvgcwpmgjewb +jznavprnlcygwvvj[eobpbcbuqceogtei]jilcppgbqnzzjrjjjx[xurpitsmdxtiihb]pkwkdkckicticboagma +hrarppjudvbccxdepdg[ksabupqjypyrwctd]jzmkavpyparwxrivfq +kjtgdhvqyzisomc[koywiyiymrrjpbqno]vbbusjzesxjpwkrh[zfalkzmohlxcdykl]hdctcfabyzteadzofca[vlbsevgalpsvreryxda]oocgdkoeoxgepsikokz +nckfsyxjdgmgcdyqoaz[cegnbhaksrdfaokttjc]rmfzhgwbszywwzbzpe[nofsbyxiguiaxju]vjjitkzyrugozdspwjy[gwkdakutwllydivtnns]gswugowdiouemkrf +evjgxyciglvcnkjdep[ixmlhpvkldxvcerjb]eqpkpmyqvctcepuljz[aylvsdrrbajlptvfeo]nqmtctitzqxeluw[pkylojlgnaunmolry]patyaqnazqoykcls +yklraufwcbbewrzdnl[dfsdynavgwiwbkmmpo]atqaaprzieowbqafr[udtaocwgbvqqztkykeh]eyzakgtvzrmejksf +gplhegstsxbqvxtnp[sheoxtsrbdxposgmtx]fazbemqbzmssyce +ulhekckzsguaeuectg[msnwinlfedcaqdyb]przurxwotscdzgtcjv[sbqdcqeculwutvfecqm]mjosilvbpgaawll +bjohxvdcujujaoxe[buibijjxplrerpiphn]eorjpmrcugznwsi +yflomjbhtnsgkkx[hhpskaiqhzlmbnpv]lgsdbeankbosyptonh[vxodyzameaaajwc]nwpmycktztqrgmxgbg +eajkclofrzpwbscfuwv[vgcyrfqnycmarafkjc]yfrtobkpkwlmgyckhmt +czamuejkegyxhetxmou[edrrdhmhhtxvpoxvx]wbzihlibvexqyvclzml[dnzwkagaeyicaojzg]wkireqqnngbfxsygz +kwbjoaorrluxekext[ffjrmxvgeqyaoartr]pwxypyiquumrhbz +pyxpvbqfwlpnawrygi[dtqrrjolckhpczlk]mtknbyltlictunxq +cgwtgnafiflwgoims[qdbdbgkqhmtkzmmyuke]cuhipgoscmxtoihh[ieqobhwtcxsehgils]pmtyremzeqhcuinxs +lmcuchgkedjkgbvxjdw[jxqmqodwyieikurcwf]mkfmofgbnxsmluu[rymmyeyhyncfnzobk]jnwjbmejttstvhumye +qsuhfviyinfcwufzu[pqmeenwhbstgguzs]ypqszcvmaxfqwqcvqro[xiofditiroisnpbx]vhftrwgnrxoxciva[esrtbbadduxicftf]vcslxziacmscxaxvnbs +bbfcqaoedfdwphomkh[jnslunmdmvkiyup]gfnnjqweocbybtjdtn +srjpaxfvehavomsjq[nqqcwddbzqvxdacdep]hhpbhajjqaazpqyo[fclqwfkctufgmkqm]pzkwekfirzlcgduifqu +kfmoszcssmucztdn[tllxhkubjuqjmgfeqw]djyeyajqakxkoxpk +peeaqxjifuloiujd[tgplullzdgeqjononx]lsmrbynngeveozz +chytpljkoqzhxfu[izwdbatnmmzzttst]pkfsahxrlgxedvsev[rcxdfirqmtavigilk]lvrudkskrxxyulbjbe +iatlnhdapqsyskgstls[nqzlofurrzibukxddw]yxdwqadthjynwvatmp[bdkndmhtngzerzwqgmx]iclavwyossjrhtoqf +vvanifuojsytdel[dmqjrwfgjqrcyazxa]mivahklphnoapabp[tlwiiuvxlonsucr]fccfhxkvvqeqvclcnr[rankwbxciojgzdhuuu]eycbcqhnkawkwmkxb +kyqnkbwfvcarqcrcfua[toxpqnxiuyvfjlekjk]hfponcmqqsfdzqtlgm +ksrmipfvtrgwofiqxx[dxncthyfpoivapdpf]tzlnjrfggtbgdxec[tmlpzqicqjfhxwjcigo]uzmkhvbltpwdbpxzfpi[yfkkmkzokekiidxpugj]jbmagsjlfozkajt +xhrfhwrsgduyobjodd[pazkwxnflbwbpwxych]yvasgopohztnfcsbc[dohwmwtdklyjkbaqe]cttccmlckzlioizfufc +lygkfdlnlrukwjskxqp[tcskymqclunvdqywv]rhxfxbjftjxdepuwax[eoqchqlngjnnshc]gvjhyrvjgueweik +cehpocjxzxkpnxglhzc[ltjmejyuouzkisdnlah]ytzdlqcewgwzxdz[hcupzenhdmtvigdodq]oivalfgkscgnaxih[opciwwcvzkrsehcznh]iveqylobdjvqqrbb +ofluwuxajcsnkanvg[vwpsezopzkpvhlobfos]gmnrtcprhthefopis[yvcgpesbspnlbvdcdj]unooggcrpjinkxmqsg[stfmzxmnwkyujhwqilj]editpyjnpwaefawwq +cdneyarppztbtwsaqy[euyswrwxaaolxkzgcx]cqqabzealhvuwzo[hvnmwoqlzyjguvyy]goqjeapcwghvfszwsc +hohlnwotueozwhyfgg[bdiawrubvrnulfemv]yohmiujjdfjexybb[uyyzvnainybidqfmll]pyybgwdxcdqdgjp[qpowhiuynwospqdgui]lqdoiaufqbqljkvhgjj +tirxyuvikznzsavp[omifkdfvljmhlrk]ouzmaxynnznyhfrud +iyoipjyrywuhpipcx[zkrusibgupcteuls]rkwpwfppboaxzgkbwuh +yebynyhsovfufkhwoel[rqgwgiuuztoboxqo]tbcahalhrqzpqxhud +mxvixuvpntcsxjzvpy[jnjtyjwuivtsxlko]zugkjugtwymssxd +ddxewdmzqrmjcdx[tehlbyapxxetbkp]lkfkrutmzvjsvynmt[aryjfitktobzfnhcxu]rrbqdbzhgjwwnfpkxbx[ggbsnbwuwlduhlfp]bdniebubtcxsubscaad +osbvoidqyhsnydypy[virseojzmlplzxfwcdk]qyyespqaegmtzgckltr[kjowbsggjlyrbtcxj]poychjfbatvhkrs +rlvvjqnaiasedvpjbr[fufrhampzwdniipjc]oqjmidcyiekvayqfl +hvtczuskhiykvchxno[benlaiuubpaghzlwbf]tarjrksfzvilwquxj[wehwbwsxfuaptyty]gvvlkkyayfstbcut[hxnojqaxevtbvmaz]jnhvumhqfgkaqhumxt +thxtkuentusmryim[hzgibspwboqacdlwc]clsunqcnrlgldjbsvz[scnclutgijjilirutnn]izdwhvipobyzirg[hliollkyedcuomrwyyq]dpibjmbezvzyspmkgwj +apezafwfsqifmip[kuxynugvrndkdifwhd]pixpqmsbuqspsdpqnzw[qfiqdwcdzbtidgm]otzbkrciacwchdnqa[kiblvlkmtkqjzyyv]hnucmptrhrodosk +nuiovzzixafjgvl[slswktlejrrsmxujjrk]cjassomselslooj +vnlustrakmrdrkjwju[nnlzyowyjshralbkgo]jpwjwpehndfweegrnq +hdiueeojljpcqrdkdfk[aseznfnjilqktdx]fubppvpqwksxeiwpm +kjlbdmnhtzcagcpc[wybonbamfkugypt]gnjrawnjietdzhaf +ufmoyzcmcxoqqpsg[hkdzmupftmazbrhul]mypsxfpshzcirslsq[rumehwhrobhrjstjd]tcdatsxbxwzxseileyd[iwyafcoefsrbynl]vedzteatonqliwgyj +wtmyhvmsfoxphqrusjw[ozpswsyjxemnczhga]xeplvzvjzdgqspqjv +wxyocgbulqhbzyekcln[dijevkhdfkfwmppnert]uuxxnhhkbmcegbtugap +ijgtsfvyzgrzjonlq[bxxhmrfelsyxkyxrex]pimhbbzahddhwrhudyo +ydjcoqvktwdjucx[riqvhezqqrwpizvn]pptmsnmubbjzwozxy[rbzbtfnnkeyuvjqhjhu]hnqyyqccouflfzmk +dordtdxwtwahcjcb[gumvtsackxhwojebt]gdzjirhxegmrgishf[ueivwcnfptgagdj]kzqyptwgfykrxqsc +yovgolzpfuxumuusnu[yzmsckgxuxbcfhpovdi]ydcgpjfgjgstljbkc[jnxpktvohnxeoett]wijsttknnkaxhyx +xaajqzktqfslihurb[ssufsbsajcwrysbaweg]odddpcsenmcxilrkp +lhkzyewhnntocluc[witlpxxovbpaeue]zokmfkrsuzblnubzq[qbubewghnsjcnbku]xicstwzulnzadvwgv +pzuhirxrvaghkajqsg[edyrpkukyvidoqbabcu]vfqcnorzlzxypla +xythdypgcqkccfv[zrbuwbhkohddkmbj]dbkreagpyprchmoktz[mehstplzokdjkasge]bypysrypwfqaupkwmad[ywkktyjruqqoexms]xdvcvnaeuiwdtcjcwg +ebmymncvgrkqlusommh[wtkwqtpboedpdwaxoxv]iezxkyrvialjrev +njvacohjeagiztos[afpmzgmxbvpzrkpikb]cxbsozlksnpvdxh +wnpqmnhzhaclqkn[neseqjerkxmpddehzpv]buwoodytrhkaffpb[zpqzycmuzkevvyl]iqdqjuqnmddqdmktojn[ocbknhhzdyzcpzi]srfnmfblqrqzwtusu +paxcryjinpwgadnzgdn[pedljgwehinbuvueies]wykembvekyliivgd[mjonnndjrswlfvlo]vuanwryeqmmovavhf[pouuyesundysqaxzciv]itixbjpcioinvfkh +vmlgtgupmvpnwkh[cpuwomxbeionmrkx]zwjdjcytxjxbzltbp +gxbttoltnwfholw[srbxnbzsdlwegml]ufeghhwivplxych[kesniuppshrvbic]ongllrrsyzxurhxc[ucssycrhethdlhyzd]jvhniomjxluggwtcv +kpwrbbrusxmusejnwz[wbgriazubzccotlcdbh]dxnvqwslhdxbbufe[pobrzwumffnjxfghv]qplrnuqjguonrpmpv[xxwugdzbckpvhhr]vbrmirtrwprtqli +mlonozngubrbmumjxb[vzvxodkubovdionkb]uidfhtqhxxsetsnvy[spdgbqevotzyzhtyy]mjvctpqrtpxrbqeckq +wftjnmpwffdunhwr[nzepzikompkwgje]rahnwuphbxpmwmtwboe[wcwxzwqppyaeihnxrvi]wozbvaemreqcvsoafr +lmfgslqcwpzvgxgmgty[ihjhsbvhdnsbkroszc]scwicucudbqrvtygt[iomkilvjwsofqnjqtd]amzyfxiaogrsdikrgye +fcjsdhrxjiuugivwyk[kazerfwbmgeiituwksg]nalxpcedxoajytfpg[lldrwcgzwhmukpmsvot]yzsnbooxncfhjdqi +ljjwrowxmpvvwvsit[lhezgrfdcwohtllany]huqtnutwnuamaahpwa[ezoifbtagkrzzjybsf]fehkkskjziztlravf +qggqdwibskgshrkyc[bcqhsghufawaskgezjl]tikipezkvitcxtefpg[rwvlyjcgevwbikop]ygxubvtkciptbhi +gmlqugapdwdohic[fbxygwjlnwqygmnxma]sgnfeprkyxrzspd +gtokbujgojpkdtrvt[hxtbjjffjwxnpco]vaxogwcclwrodfdxlfp[hihtvdymxjotbfuyfr]muubeuzwzbdsydkkss +rpqdqfjuutdfbaarkgb[nihwtvhhcmxwbgr]evovoyejllhtmpv[qvkudqduftuvccmeby]caeupguvwobwkccojl +gxqxcqpcbqmscefvj[jodkjejtlvhhyrw]ciduukfamepbpemyol[uchoefnuqlolilidyp]rsjsqlxmjccoipqueq[qlxonqxtccxuwcnrizs]plzdntlmgcnrwawrxdm +jvbbytsctqrwjrdr[xtqorzwdmhunrtevfb]qqxbyumulbmrsbhtx +yoenmlwliczccpkolc[xsolpcnqbbkrani]tzczkjomtarfeqiq +ogxowfxoqczptla[ayzmunzjrhsyyit]ckixtyzdkicgemx[hhubqmeqeenjuwuclx]zjhusfgvemklroia +wtnnwdcuqnxduod[nugtcdeviqkajsqxgvh]ujsnisiydziqndzgtn +eylerocwshewgerk[szefiobgoejulsas]jxmoefzlxhchgmspo +nnwqedoiuhqmmbqewzx[ocxrbmgeqxsjeorfrde]agqexvigcnntkdck[vopzcxqdokfydsh]aajrpilxdhftxbprqn +gieaqwfwcaktnyrak[ckstsfspnaxvkkecu]nywzcpsrpeypytm +nlsmbjepecyztmhys[yseyspewhduijglnxs]nmttyybnzhxcbuvcm +gzimfexrobypudb[fmrtikpcalnxzjco]qbxokzuhvtgzerkwgig[otsumbzbiecnrsfvgox]pnbeigikjxbnesh[ifovbpoycogawpmbtuj]qjoaetsrenrirpvb +ybjllzyznkniidrl[txlisrbknkopgbgutv]rspeuydexyushei +nnigaodunsopocfqf[fdkbcjzyxamtnwn]obloxevzqyrmswtc[jkuniykbwsytpivsh]ceuzwuogyqxferdic +gyuypjyncazpjtbni[aietrzglhhgxscvnwvu]ccqmabbzdawwoctwywe[fassebimijhpenb]bwqtcbfdilruikksetv +ldxvntffkplnjgt[lhwtwwfoyuoumxngqbp]eyoreivfgqwyfet[ylipomgffukvmjynvu]npvyofzmqlyboidqya +tpnxkxbhphxzetonae[sugfadsgjpdwxup]jainzhhwfvgcljydo +uzllwzqtwsmvdpoivdm[geidfnypnnnszjjgc]vtwpieaxgzxbslxld +lzeizipamzynfflhuhz[qzwbfnjeulpgjjn]aapdqkjbpljvnvt[qhauhykubojxcoyuglc]tkflnjrdtjgwilk[aorfkrzlpuhgozwyhj]kmbwxqqwfjxawbj +ivqhauvcbmbzijrl[lbsmgujvpbayaoy]kteathfvlzvbfzdgw[xkpwoqzbkbdgrsjzn]hnihhzpetldtahy[ocottuvddcefplijb]vfolexdinkkgmcdwfyc +vqblvnbutgxixnfcwc[kphevjpgctxpkavh]riyfeqvpyvgckaselrb[ryoltaxliqsnlqdagr]shrflexwtlaivfow +lreoiyjedxzdyhdnlde[levshlupfrkvdfdeav]ehfmfwbetbsduiudzr[uoxbgzrwlqkbkcwo]wjlwlixknhzeuyw +abnhwwybagtjfrh[jaoeeifkdmlksncnjp]rulgazssxsmrrwe[hisspgixyvssxiumqtj]ohkxzqzkfnkvvgvrhgf +drtqdxxqsrkujjyyb[jxitdcumljupwcmxx]kmzgykavruhbplvjjp[tjxjcibazngasivc]iuhgnmtzaozykgtedes[pproeupegraihkv]vuptfrfnrwopiczzkos +kbkxcesohyjlgyynpwe[bkintqjcoqshvve]torkeaaagbkbxosriuc +qklkbdielutwmtwkgz[dtruujvmzvmannceu]xmrwrcevkgapcagtuof[ebouhjnkpgmqairnh]trgbvkjhgjvqmceu +xcoycanpxtathanw[xdfzqcekyrgixxcc]zpbmkgrykuvlldgzh[zltkqabodeywxhtyfkc]jzetstuqnplogpkjyx +pirttznzezsktas[ogefjszaezeqipdhy]tfzgyjkulhtyuhnvf +kxyvrtcpdqieyro[wnvmnmiobotxsispv]qyvdfrfhxkjuqwdtw[qolhrtzasgthtplihxg]gfjpittpnbsymvnotyj[znwgxnufnotguzwgwxd]rdmgzgfprxmavttnoz +mubjhrjxqggcrus[ammffdekmguajiq]wvtsxaabnjzbekpx[thnwbdcskocytas]yimpbasvxqiylaqn[mrrzwqztanrkdqwvw]uvtlhtffzkcautuvm +xbnvzradisweizc[ogurjxmpvzglqbgjlpc]hhujtmvfmcqqcukjvjp[wgkwvyjkwkufvventj]ehdkswmxyekfimbk[ovbdceenqmnrjeqvf]oqvujeqvjlplnzgi +ggbrbreeteveahudoxy[wuvddvvvugkdows]ftzrwbghewsdfqaigt +shelsgoglooyenhx[lylymuuhrtnflwww]muaexmsuihzdiyly +slmxqaktxwfpfgrqv[ekjhbymdpfpiqvm]zybjhwobkrylohor[xflqcdxcgvqpzzdd]txshvtkbijbkbnsh +bpocmihqoplucwnvyb[scxgrmfmuycybgura]yupkvewviiggoszst[suowhbqfktiboyik]hqqmqjvjczoxgeoqof +elmexemdeoaajpjhu[kilercdwmwidrkpx]pvyefsmytxvaxuzsq[xyyhrtmwtglmcqik]spnsavadaexrodemqbq[wzzqmadwqbqbuvdxpmv]tuvloljoyhrqccyd +rzngofliosgytzkunp[cyjzxhswcqeeqhmkjn]ymhsqcfuowylqtjrb[pwocjlxtfqsmelq]ezhrwjlzjtsdqorfsn[iekekpprqmwpdyl]aduyoxkvlkxejyjnqdz +yhwdblscdqhpdbthaac[xadcyjrkldvjlntkxl]tcohssfmczzbomezqdr[wspvzvkctwmmhfujxm]fgxpvtsninxayplzlas[poflalkhzwwqwotgldo]mihbeaapilajefhlxs +xgwckmpjphdwvzujv[svfqqafftzlgoifup]pezixwriwatkcez +mfgtxxoygegwmitbzkt[qxivglwljmpsfzn]mfvhkhhddithgxaokf +npkhgeapbthebsqk[bwoqhnxqzhkkwcm]alwpwqgoitrupvsz[yqvcrithxqfdgzux]adoiatxqsplvllzivzb[fcfyicpoiqaagrb]lummgoxyspqibxaq +vikqemveklzlaqdxvev[tsqfmvvhysvdmlspknc]ejryfsjgnpmxcvks[ecwobztvirmokwcf]siwzbkgxlniwnmhzyhd +ltlhegkfxhbndmfcpo[pmcjzvzmerxvsdo]dijdhpewjuwnatewmg[ylninmvyjhiqvicagy]cqrtolyldnbzfufnju +mxsbpkqgsuhpvsrwzdl[dlrlhbdjvmrjwwthq]rqowmkoukgclzrfh[djjugwzxaaqtqavlo]gdzvdzibnckhkqb[xvfheuckvskmouv]uwrmeqlloqbtbfc +emfplgnlzranlwxnk[ubuhxoejgoxfciarjtr]uzcfagjxdfnewbxxcb +tlkmvlcqcbaqozlwn[lbupwjeefgtoovnrkkh]sdzgkexzxzcpdjgaid[qisspueisheejzkfxdi]inhxlauecmmkpenqqf +fdtrgsgechhugwnidpi[dtwwiqlxgtadmnrtej]hdgoyjhlzdrcjzvl +mtglmkersierfaishps[gilijizfqdzqihkbsd]ieqqthavsiqbkxvrmll[oxznuqiocyxjzymxm]epuxtetrnfrzrlqd[gooprerdkioisowygrb]zzowrurkwngpvvh +tznoyelqlffpalatbs[cmtlsjviihyavtxz]lphzihbzjykeuhuzpg[xqfwolpahmfquhuh]rpqawvkxodxmvfhswz +ybityzvtpsfbovx[yrggwxpkqjtzdvkr]gphdlfythiokoitpcjx[wmfvcehazqfxesy]utjcvxaybxcikaqgrx +olqndwuwjvfqhxt[qfgqmmyeowawqckfh]ngkiagyxtqpdwbrwlm +ukuozdurxxrvljkoi[eysjyckwyiyuopa]fconkkukvvmgnvyn[nwkqsifcwlzjurruho]ryslsdfmhgesmdf +tlchnjfxtkubrlta[rsqsxplnikmqxsyhyoq]xcytyjjduledlzhuh[qudvljyfmodytzaw]hspqkfbkjtsvcwpl[ptfjakjrpvqcqcuhmf]inxwobxnnzfirnvgmmr +gaviilzxljsozua[vmqvdrqoqnztbdmzstt]ufxaggbphqyxgnpcgzm[zglcpiqjhahiqcb]tsiqxcvrwvqistphkj[ebajnjrqotekcerg]kciocwshxzksmunx +cgpgikxsukwvmwi[janhpuvmccsdahfk]rrmkjehchkefwnz[plbujeqhgjvljzkwg]ttwfjicxkkofysgob +girkwjuugyxtovkjr[htizrvsispydidi]wqdtgvsfnuisigmalai +ajbikjzwulcmizeoasw[pkkgiucjnrubiwqoll]gscdqocmpsuvfznqhah[rztusgyvsxaeqfmesh]rarydwrmadghrjtx +hxpxckfcwipinrxk[morfsambyhipqzwl]wzgttlcuikfpvywm[cyebxypkgvxhope]dqazfmcgyppybetn +nrisbenoupwrstlxy[uewucgmzkoyulfbt]bbvorytlrgqknqz[zwseofceynlohaooxzm]hfzyxxxfpjmubbjysld[tetgwcwvhctlndovx]jxflzwtuhkltaqmnuh +nmyrirhwawjtgcgma[ilkcycomeqvcsuwmmq]iridicawanwkaeumbvz +sunhpdrgrjztzvkxnl[mtztitboyfmtysqeqzl]unugkiwrweincocilom +jhoqhwlkzccmtrlrs[tazackiqztlndogrmgz]zsfezvlpuzwmfwee[vcfxoionmgpezbalm]ujdbonopokhkgynmhp[pcdhdmwegmihhkh]dgjjkcyuetspltxpl +siocivjbvwhltkyk[imgupkeeknlltlk]qxfcqnjbjtenubcjasr +hswgnfwswhyngohhyvo[vamsrkcpvakzvbsvls]ehqrevmxiccgfsq[pffckymkoredwdpcmx]vjdjsrqxttbfjqf +qemtumhnmgkgfzfzqho[wfluvctfqhrwznyzfsa]zriirahfdpleznfto[dugecvltxsfumxvjaah]lvudvknmsbudzxoadg +mvrjzvsrconakgifqj[ehgbxxxhfqcigyhuyya]eqofdufzntqtsjukffc[hbzrfurkracnfeig]zmahsqiqbinnlhnvrz[qdajsuhymeavrqpdoy]nspfggpgnwnalzuk +sejkhhjswpiqukaddwc[vwdsuuxtfaxqbrcne]njkrzolxoqpmmua +fumcwsiexfoqklovype[bzxfxytncrmwtfrojv]bfvsmplxarmselz[nrnsymdrakyaqzwivoe]fpvboftrzvkemjgqt[akiqkjrmnvhucjcxk]ynityzhxqopnjpslhg +msoqujlsilpcgchprz[gqdevmuryxipqcgfdwz]wxjkmuhjootmigfietn[flfcoqhksuopnwk]cewizdzpgetongprkb[pqizytyliwhnetg]uknrvmoahsbicmeg +evyofxtcsyfbjtbml[wjqpsedellhzgmvk]emdpcwxuuaccubksbqb[krehpfhgyibfxepo]imvfvflnagwulpcp[cldtyjrcehkgtfyxnws]gaicllkdzufdmja +plinmvdjkaswskiw[zejltttlwtcetjb]uqkwaifdtedvcmiqcs[smlzeqfmbhssmvvmvh]lgypwtxchfxksqgmeb[fqygohnnxmmvazctrl]rwbjopgpdkeejeb +hgxczafqluesrmrtuc[jkowxyxlufhgbmk]zbiycjiafsngeoz[mltnmcbnsrmdjini]wtokbcbelvzibjncpat[dmjqentqrspifbnind]drpbucndawosqjk +hqaysnyyigyfvzsm[vrqjwqmhiywsbblfrq]wseacbmleqwlaci[eisrrgcmewmlsqkremg]hfqkdkghomzddiaeq +qrcyyzpfuupvipsuor[ujvnwghyvsujblbiwy]uofftaesrxvghupknr[divaemcywwpnkeejjo]dmgdiifbkggxpzmfy +qjttccgwnqwdehsoz[dfbrkdapobhqvzom]hqtnzkmtiunvomn +irxyxnmdlzgxmpg[ityfjgihvzrylygz]qollizryghyxjglce +bnibapdblbaoehfbvin[kmummoqopswsmvtgiz]isaumuoiybqckfvkhx +waimkuqinxbmazab[foxenwzsxkkupwo]yjelgjycvabztzb +exxvbdzpyswekjnfmef[tjmrddaazxyynamc]nambmdtnmfhtkiyqqct[patbobzwiwlidazpoc]nzbneeilwcjqnxqwh +obtckokgcgcwbtyww[gxpfdpaggfbadjvdo]trethfifqwrfexv[uiucztyublzgcky]msapdqrbpbwxkoeuidi +yfhewfkbdwvgwvmhqbd[fqginmtqmkcubfvci]aidxbpzcktshamejexi +jjjryxfwjklxrkhhcxu[gwwrmyzrpjmjtmfl]fvjaxkdviibxaodo[csagiwfbhogtnpixzc]miorozrdmimmefh +tzpxkatetacnqzombnn[bwzhrlkgwcolxczvcbg]rplchqjvjthsortjqb[oyqjdlyeyqhqtrfbfh]munhcovgrhuwhvkjzja +slrtmwlceytivwzb[xapqxilotekdngaekz]rzohiqiljdhennylmk[whtwrgrfpxkgqrs]rtlehyggcuplhrfwsvs +vjregfcqrdxbfntljq[xpfnzsjsmphfbppf]kwfjfcrvygtqwtdgh +mnrnbytuhhsxrzgz[nzdxekogduhxbpipobg]ydgjseiypncodnm[oylueeldnmgcwmqhq]svqllgtwmhshzqaxf +xhcxtoxuqumfxatsl[qlkqdcziwtbclcph]ysfpbfueqmlluib[jjvxhqopyhgxgvb]flovcgpyjyubpbdmp +nvpcfbzmykatqdpgpv[eywcemzcjnlhwhfbjv]gcnnnrxczlzbtufuie +rhikymyqgbqbwgw[eeitheuwdamcndqibp]aiikebogsqexfbob[tcsuzyilztxrrqa]wutfkolihzuhbvptoqn +kokyhjebbwniohsgrbr[ggsocxmupmielega]esekvzvbajssesin[ipwqyvkwospydzpmk]byhqabwpjuihcpgipx +pizgcsuyqldtehjc[utwlsnwndcjqnndpppe]qxzxhkayzcicvstxiws[tjqhoiifvxdzdkigtb]zjquhrplvjxruwjpyl +oadivwkprasfyitu[yygivqpjckczybxrq]bezhtnyscekflpszt[eqvoapqpfnmwddehqbe]mnkqjstlvogsipe[vmcrcaytblgxyarcrx]nwvjubzclcaxtdmgl +gimpphsdpyklrcsbk[qphbkjzijutqysed]fpokchopspibqiyyb[owxliqxhpvjjqjzvs]ttjeutzqspjqklxsx[nvxybvsgtxxwagkvg]pximctvjdqxbodwbid +xmgqacsovxksrfnypy[jjybvmwissplkcttnp]ksakyoqvswnbrezeze +xoxquvrpgiiopvepjd[xakbfdhgtdrxixz]uuidqssmeiardumqppv[ewdkbrnwbodzzyb]kuyvmhqxititvvmf +ujuuypsguepvtqiurq[psgjujogkcbqrtrr]ckjvvhzookepzzwyuye +lwnhrcbjrjqarzdx[jezkqlffqqbioajjbnl]zssjjsdouwbegdbnxx +jghqoqlqghfqdfh[jswcksaiwouxhnssqin]kqcasjkrnihqmenbqbh[mgpmbwkzuduzsmnjb]dxsvhizedmabyjo[rbupdqkkgeihkywitk]pcgvmkrlpkbqfhune +eopvqwwlvntomltpv[bwkbunwyjojuxoteyua]arbceqrmsflnytkl +rcgjbumerakfnebou[qimexcxydncncunkhv]frixowswdjgqndoos[zkjdmnsofgvagtnlyph]efpdksfvricswsrn[vxscblhqnzquxmxw]dxnstwznvmwyawith +zjddycxtbubaliviw[cwmjgucnnrbsybtpxu]zhmadkawbwtdlnjwb[qovxqaebehomoacpxyw]qctfbtyvbabebup[bwqjuutjmbgfdznqfa]jzitebxzsshsmoge +hogrxyrrvjayayny[kdweaxnjncgvxhpud]orhfjkslldcjiokooob +jdduztuhjzvbooejd[mcudzrhxonujxksbibe]ybhfelrayyxuuhuwmyx[lgshxdlzxbzcwhuru]zdkvnjkyhausdby +xsuzxmrqkqtxmchz[dmgddhaltnlpfzkf]dexcfjfqdnajuzccluj +ezpxycrcxzxycllpyc[stdgybwrxfzewkqqvzx]sxivpekfrrrqlfhg[nolxlfvwwqvkhou]psuyhkfiyohkogwfmt[zxwiqmslanvyrquhqa]fereljocexswrvs +aeogravcbprgitmqedh[yjqbxvjwrcrbyneghi]lugbamrjgzqaixjxpa[zpvvfxavievwanxkedz]zksdwfkwtrmtaoy +mvchajtfbplmslzxhk[pmkjinpckdvwjliz]lwigecrikkyoijkeow +fnwfspmlakldfdhc[ujbeoudcbtqjmjy]tgitkdutjdhlrkwbts[upqsuxqtzrmwgmbjqyx]ayaivsgiqcuzizeau[fiqnymhyqjapvri]eioouxtbfwduighy +dcuvsezsqwjnsvlqzah[jjzbyxctqhdxfuqer]wztjqxgjynojjur[zkiosthyfrroydaykyc]ocihuyyzvwdoixygzk[psaghlhtqoptvsldbdi]zxqwrhusqligxnoa +tjzqnocojjzktgk[omlfecncaondrqrvwyw]dxwuwvsdiehvzqmafo[ihbhwnmxkbkypmum]enkexramnrjguwuxq +ftdnelzrwzvxobrhjtb[kwnjqdhwztogpvvt]frxznutubezaczhwucd +wtvnfoqoqvuioaotdqv[qwzmcsqjvpkrudkdu]vdcgzytjsihjytaunui[vxnbnlwvtribvbzv]lclrytcczbraubnr[fptsjqwofyngtnurf]izhrnmwjxwvsdcfai +nqmhpgsurlnnjikyotm[nxxdysiylpgivpuc]uofofpqgcbojfofja[gmborbfjvlfokmkjlx]yptrgkpiarzgsgl +polwihnjvtlojae[iyjbafwjoxqcjbwn]ecidvqragdcuotbw[ununcsfdoxstecbass]knnitckftuczdpblih[wylrqjxehihxfvzjn]lpjuibfkwrcmcijkho +gsvfujdbedschya[owwscbzhfkkymsfy]bbxedxnzigfiogb[sebiwzxbshqohku]wqmnnhmldplmhwnngu +cvgevjryjbmodqfw[jskismdjblbsjgmhilp]xhjlblnepxqayxpw[pmifrcxnxmadetumwm]lvjmmbceghwqdmk +jgssirdflqhglgopgx[epcwzeqqkidejdrw]mjnozbbmubmqooiqr[wacqyepsgljjipi]vowguayfwcghbghhoyp +tfkqxobejvvmglhqrgw[ddleaoforgpypavf]flnaiggwuxdbldb[rqqrjlzosctaouurtsr]bduvfxlomgfdwhxj +iwhaxbggngkgdfi[xklwprhyorwyfcyo]lbrfcbprxedylzpfjk +ixorpegqzuxidsasn[pwuwcywpavudpbkmdrk]stfjklbehmjdobcr[ziugachuezezjsw]dzwuijfiexsbbxjcga +lcstmefgsfxelap[iaroxcldkoxjprhpni]erzoueqtwtyftuvz +gsnvneyjuacyhipd[aglvnvpawajzbbgk]ptnrpilavksgzjyyo +frxawoaynynrnxzk[agbtdjypjtpqskh]ljshzsnnynqotgog[ckariglbjzvbcedrap]sqdkygpetxuwfnk +nuxleplcklptuce[fxsyqwfblquzwqjw]ndnvzriqecbqphdoc[pmvfypuinsxgglg]vcgzvoddzudwrapmyh[laengialdtihgzitt]ktbypjipfpnczyqw +snghsdifwlabsbpzw[xgnrqjnhwdqkbhowzaz]cygljjwohwpzvxuaw +hhxorrjxjnhcavt[lkeigkktbiaquqqh]ernbnsmtunqyccft[jiespyeonlsjliwt]vbhzvdhvvgsdgijg[lkxvfabwpujiaeaidj]dkilxjpizbzeqxkzt +ukgapmfifvftpexnr[jydugqlbqyhvbsmoxd]kwvttiyqdmyaxidts[lqfofueuycoihkxig]vqbdiqazwnqetguq[fxhgbqqsilfcaflj]oissblxkisbkmolspwp +hanudfleaqpnnykwfu[kllfsqanmahiwkqz]mkyztkpwilxirukacz[vnwdxbzbjrcvmmbx]lsjlgrnzdilnkxp[hhepketmdumjgjjsu]zrgaagprkrmgggpk +qcaodhkekjwrjeu[bvbkikapkhneodeaqox]xxshbrfdxgvyabbuj[nnyshhdaogsermyisk]ieutdajlitenkmoh +ryfcblckaejcahgy[kymhoizkyffsxybzdta]olmhiudvbcfbkjb +jryuwyprwczmcczi[vtijzvfbpssohcdgv]qizkalsooznmasljh[sdvwxkvydoikgjtomxh]ixzqpazdakfwczn[tyjorxvairghzrqi]aunhzwxnkjqryibre +mlcynvuzmmcgoqkft[fkeqzbjanvjoieooecy]muvosxtjytdkhuh[gsdxscdehocmajsnhn]kvqitwpizpjwzmeb[kpnyyoozocsxurfl]obfvxcgoavxoiyy +tunaljqogcgofeh[ivxhcnvflsbnmktk]akwwtuwpdpbnesmrklw +hicudrdjoglrnongron[mxaxjxojmjgutxg]tbetamqqcheyjbpa[itozzzbcpnyerpth]brqcvektqfaxazdfivl +pdyuonakwvugssuduom[swhnhhzcbkrrpovuomy]ecfconssgftuhtwswfd[mjdgnwmncbjoxlinm]oklhmwptexymbgyfdaa +hcxljuahgmiolty[kulhszpqyvsurma]xwknankkjfsieauadw[anajqqpwdkodeaagy]iupvtabiqsykmohiisl +qruhviuomiixcoarv[idffbgdhamsshlinl]ygsinapdnmzvgit[xinvdhbqhbvqrjx]zdamlvlunjkkhof +zyeynxvzdmmiybab[vhgjepcwqjbolwnft]aopzcryhnpswgmds[yynbcrcgegnrpsk]munxtddzxyvzwwcosq[igdwjifdopnhwzv]oyebiutkmraayzr +onkgxvprjaynfipxeum[jjwmjcepwxbleahq]ofvhiwoyxmfnjbn +jdwjapulavrgiviora[vnwjfwpsfcdkhamtg]jqcgsuleganytwsm[qajmdsarjnocjpq]lxpalpkeehxjdslu +mzyzoemluwoovah[bydwxptnmzqxdqfgdgk]hekhqzpgilidwvpey[ouhnrujqyhnlilh]qjarvqynycolakyiu[wzeffbptmwixrmr]bowqsnjgurjpkuc +jawvxlepzelbjymcke[atwksupwtnjjnkwe]xqqcmguandaqptp[yqsfhnssllituzzwa]xbgaqeuqtnclehgr +xumjolgnaowjdoq[obqxrncwytcvrsa]tivvsxdntkrivblx[nfiworqsxjvwyki]nxnpoipcjqeeukx +svkoyidvkhkvock[htgrjltotuunrwka]uqyezwkltzsjtaysa[tqaaskeswcllblpnozj]yizblbkqgvblvqghvk +lfqasqaubbgirmw[xxpjcwlwjsklklgyrk]fwckfwwekdgcesswh[xkcxlxtanadezjpva]naodeooepetabkh +mtbhzeufmgeskqsp[deibjhufkntahso]oxebgcgzvpudozi +epuzizxnxpmgjkabqfb[fmteazugbgjgozgsmhl]conlsruhnwdekaxf[zimnpzazgotaghhaq]gmkwnkivobskmeafcck +epbvuluuhaazalp[dtsthsijbzgbvwzwgpo]blfatalfityajcpmyc[bbypikyeizyfntdt]tcnzahhiwutntyt +vailqzvutssuxjy[llxrpxlpcojwmab]kqpqrpogogkpefajeuj[afzpfhjmpnestctyqz]mdggrbuuglbmweujgxl[qhheeepqrcbdfhlxoo]lxvrdwpugjperwt +roreocnumcerxnrhr[ricaoyebqjpgzazssc]xzuqnzfgbrcvfnmpcgs +uludakjsmsamkpmy[ropmbbvjvupftps]swngrcigiqzdkie[hjhbsazzxdxrseczxyi]pjymgjgdksaalxbav +ftvggoxgdteaxbrq[tifvvmwnraoiprgs]xopjvpddfjnbmcuxpu +buzursiffpqcwnlsl[plvkitdlxiyiotdk]anlvhgektgbpslsiai[gdgwwvjcdnywwguf]bydbjfxclhxyfgruke +indbphvhghzxsuy[izgrijghgwhcooc]gkaqbcpwwiyfwmv[xxlzhbqmxquoawq]gbazvlthqbviupchz +qofufmkbljfygwxym[egvtczslvioufuzsyk]uscakosnjpjbcrggach[gnyghyvmgirmwolh]rotkdpwevcsipnxjokp +jwaktcuuojllglwmr[dfntqdtznawzmzgwbj]gjykvnqmtzelkaus[eghpxrcnnhijhev]osfvouazhsijprtbtnm +rqrtzzgqsnzzfntl[mrleyuyknyxyjhoibf]mwxfdxpeiyuhjcbdyi +xgqwglrrdtupbjlmy[ayygnszmebgddghqg]hslqxsvijohmvklknkz +sfqhncgimlzgjqs[vsudwekhrjuwjgig]fwkpceyrznigiwq +bellebgmjpcruwv[njhctgeptjieourukf]sgybshminsxktqlfxr +mpwnzwvblaseycnljze[qhrfygccokretvo]ydomrtoamoecceekrr[lgslvkhwnmsovxvhqhs]cbyuvbrusqqpvkmlhm[wrvxwjyyzsvxvxwpdq]amynjoncmemftlnqa +iniemtnmqwdmxvpicqn[drdrbflsylzhzltq]orjcjdsbzijkfwhdhz[mrfovzdsugacpyvlaj]azjikxjuaszxpapss +ynnxsnsrjdaqbbaa[lyifxbzcyzenzpzzulj]xejnjfbuykeojbeatvf[uhpeylmwgllqxtj]hirppxrtcuybulsuek[tzbdcyvsbmqtrzbakxj]kzpsdszfyuvgbtlksus +ujrrrtdxpyhlpcyxs[molsrkbbxoexpbqhnhx]aesumqacmujuchpxv[jlwaktyumxuiyvt]mmwjujsvuvxsxxmsfr +uehksybnnztmczl[suqgywouppzavyoi]zbndcbjuexdgscb[cliuxzpullifofbhgy]kupndcjvxqiavpk[hqgafivwddbbepkvjj]lrqalseezuhjjbkese +djidmbcuqbjpfolm[cbbrttiwmetodejw]ghgnojuvsogrchwfp[qpikwfkqkfphshxbmxm]gsinzrkbzacyutlxso +nvvjtnsnglopvcmna[opnjujeqmpgipfm]rudoacagklnjajjye[fqrtapichjqkhhf]zpkowfxfuoecvzq[juwjiqcolafbxzsw]fogkbzmrovqvbxbxeb +ixciqkqggdxskbso[wkjptmoonusnkzyadmx]tvbhebhhaqhopjbjqht +gepgaafxcogfkyecgs[jdqmpkhjkqefzkwxglq]zfpkqukaelflilmzwph[fndatrnmtrwgbwpj]bndevgsiouveums[fqxvkjthzmyryobt]ywgqodizmhsymako +gjlyyrwgrugaulnj[zwsmlmyahggpvugef]ppqrrbxasqowhwz[ngwudjmonpelxhubwnj]ucfcaicagnbvlboiwky +lfckmicaonarlbnu[qnigowwaziwjlmf]ihypnqqozcilwpm +xmtcgkcyfjppjwaa[jlzhrxmfyfjfmadttpo]vucnncbadihuewzn +sviknjiphswrawyskzz[vlsdhjduekvalqgwy]qlvefwhnwmxrzgxq[dwnapnjsuiowoqjts]pnepuekbrlbsswijr +fknvwkusyvzledp[qzplkidoxmvxrxcfs]jxdhirqylkerndfd[vlqmngoqxsbmljcle]rtwemwvqkpfwfri +cujhxofpcjpskrgn[jxxgrxhgnutgsusruvy]dewdqleqewbqftd[nfjzhgvvqummwzhyd]yrccepfnpbehqei +dmfygizbsbrtgnzam[xdnnacheufcqahvx]rxtljkenkwxgkhrwos[xnxicyqemngzgjp]slcfzksterjpmiz[okdqdoipoqwcoyfyamu]cmoedniphnfddoywbne +oafdrqypmxjzxbxutj[yzlsdipaswmgyay]xwllqynhfregxpwc[tjgxnibylfayarir]phswgvlkkfjjetrhdl[pkcutagssxligtwbd]xrvonaibaytcqnhgc +ivalpefzoxwoqycavx[wnrysytaesivblx]dblopqsupplgoom[vxtobrfntcvixltcb]kzktacrarmtwuhkcoin[eviwodeyddmsfkvhzue]drtrnlgrndrxgcp +aygkprnkwdzydlmww[firwrjxyrnqlvycccg]lcqurfdlcrvbzctz[cxzfxjybrqysasrppqr]domoafryutthljppcg +uowwwiqusrqkpamdm[cppbcnmcxpecyoey]ndmdrcadjoukusxjfl +mueapqgbxuyuttzaw[eojhbogjbfdbhyqjp]sxsjeclolvcjexxvxij[zugkiortijshaocu]mfayspauxoxdwkbj +swusnwjcduzzhsjhykq[jhweoafdbntsmxcg]fwqrvlhlltfeygpcnyi[wzibgavydimypgdao]ocomuevbncyimhlbppq +vzatvkicsxcmgcx[lembxneuonlldqupk]svfxiuungebjjgfre[ijwzrpepzkmvdwrjck]bhjiggmcfirhzyjljkd +nlauzkixeqoldqwd[dwvmcwkqnwjlzqscj]hnnwnarbtuijzys[umpmhpnsrbypmpulhf]nijrnkqfvbyjfvgseaw +gefcvkqyyecmnorr[unfzknqltdwwrejeix]quyfoemcjnbrarjuowo[znhhaogjluucobyvq]nozfnuqwkqrcbtwujxt +keerveohuokinft[vtganysszjzosaco]ufsxvtiyupbeddibmt[wrlgimiwaspamrdp]wdjcaxuqikgauum[jpwldupwbuuufjnx]tumqrmftbkrmohls +rtgtdqksqxgvgxadbjy[uclopjtrzpccvdpjq]hiqaonacbzvgvigg[dirbsktzndttpzmtznz]laimumxqrcnhoitaokp +iqthbpkfocdhsvzje[jbxkmkvmrbnqjwlp]kycbbizaasoayspojv[iojspytksdfugqsqhvf]dlkjrsotrfugfft[zuzflpijcwgbioujw]tgyhlfclaxcsjnavdkh +lmekqqiuknygtdo[ramnjnqzfihksfpoqsv]jhhvgphkjifxgap[dmpwxrhmhkwfsfgtn]mfzdjfhxmkrascd +fywgfyehgheiqhbayw[ntuqlvjvldeyzokdepc]jrqpaluvezoujks[ijkurhccihukzuis]cljvkxweuvldevt +udnphzgdlussuatatj[phfqqkmuhvlehlo]cyvspnwlrcmatbwoua +lozehtimrottjudo[krocuifdrqwhsmm]uhauuuzfssimtfl[lyshrfrnvlueierymi]xogtepsflxfwcpau[nurlztguypvwjvoldsn]yxwnuqtvewgmlbfj +qkioxzfrxxwbcddg[iecvjowpxnrevqrhl]qxpciafqndxasahsvoo[adfpiuoapzqsasajd]lduzndmefgsvzzdpmcg +klfxwvnampkmmqjmfc[pcaeswcdleyweirmxpv]jnwkgamdjeoakjcnuep[hjwzdndjlvqfzkarwk]ewwgtcnyjuczgmyif[eaaehzgwbkdfbcgbz]eeioocxrjsulyuj +eptlgbashiewmonaaal[ohtsrundioavfrouii]aydjhcanascnanbfzvd +ikhfkzncdqyitenbg[ldqqsrhumdmiraztslw]aydpjfypxqllkevec[aponlfgxnzgcaddwt]yxlzqyhbilnsgjen[dwdrsgergyrzumtlpvd]srlqivkdhbdbevnq +xpjwxwgiyzqfwajto[msisxrvzebbtxiv]zkuujbuznilsymuuxq +vkmqsygowhcqzdxlslt[fnaztaplxaputnm]ykkslsosxwczlrwbpmc[orlhcrbdjuujhaj]odtfvozkxuwqdpsm +qqxdpjpmujaveczctbz[gulkmdfhbgvyxuyd]jtxafmzqwqxauaxjt[jgfnrwhgdtkwdfgt]unidfciwdvpazpgfa +lfcczmpjpqgqonvcvb[iflurylkaiuflxp]dbepqquyeagxsmrhbwr[vjjohmujkozstni]suvejhnfwknjusxgxwr[wkjnfmxxzwulujmw]qyawlzkyazbwftlw +uwmrxdaxrlsvujdjrm[dmdnqcmdmnmnhhwicwk]uowycyvqvjwrjgtpfqu +zbxlifyzwnwujvs[pyyyjxylpmpwgbh]iutvnonqqqtbxisfopf[qevehnvgqgkyfuqr]mqrcuibiihlwdrzd +rxlnsbgsuofdjgifrnu[eougczwqhpbyqjpo]rokdsivylwcqepdyhfp +yhzwpokjwnqbwtsxuh[ekjrlmzyakgkzlemnxp]gbktdprzdyhcifmigxt +ewjfrgfxriqmbvczdtw[wlbdrngfgnwdvkt]vxgbaaggmwndxlms[vupgwxfgfpxtnen]kfeekrdualqqnril +awkkejmtiopfrqfasgn[alciuobkmtbxngulv]qlowmadlrlapsquuhw[hhtlyfkusvlwunbbjod]seacetmksrrodjqdffk[aunntgaemlyoabfgpf]yrlrzbdjfejbmskdtrz +uegpnmuaxvvpcsuzi[pxcbpsgaecuqyhvov]oiyjoyraxkymelqg +ffpelsnrffyfzzfdb[ymtulkndbgguyivf]uauzvyseztbkdvxow +omolchhfvuuzzbodx[zhvhxrqwbdhfwlnn]wyyrsjfjsfyafjfpoe +puihcjkezjyjjfl[cornhtqjyqlebvqyl]dbemzlxolqxpzoi[qeihkchqoewcabbwog]rlfloutfwlcjywygd[glqjydslofkcstjxd]oxcycaaadlnxfkl +hbxhlyelfyszkzyc[cdxcsyocdiifefpytl]wxefesokgwwvcrp +vdqcqggyjstyefs[yiskvcmdlbyuwzdom]cwmntthjhfyzlus[dpoubuwkbwrkpfvlgf]zryvvtowakcyclcg +kcpbllbamycbuynia[duyxsbzyzibjwejygq]mszplxmgtkqorlklg[kkbpzdcqtwkteqfpm]nvgoipyzmaxtizqkxk[dkjpvseaxvosmsh]ourguqaabxzzovsn +ovojqexhiiwdqunfvpy[ijzonrwpmtbftrqgs]zkmuxgcckijagmj[oygvczrrilsowmxrcwq]jpwamodaidqrzmal[yglvklzzljuqykuxte]cifhyowckekufubnmu +hqsemgdtjpiikngtrd[bqryvzqcejlkziqbeg]gycysifcawyjyeu +tgdpvbxtvxlyqvouu[xqefdugumgqctwvihz]yxymyatxjpknmpb +mghmbjssqzjlzlg[kilmyfmenoqjnmwg]hzuujufmwyperhvdl +ieqarqlveeycgazb[azjmtbkbixtazbcv]xroiknhtlbefpgh[xnhgnpluemfqqkxg]okbkpxswfoikufwzazc +phtjaokeiocojxb[snjwozbjnpwckhr]cjwsbiopkgqjjaz[rxkobmvupvjvobifvx]edubeedqalxklpb[nyfuqcxwtynmofmfg]zwdaaonmcoczxvfr +fddrwtloipcoigpruvm[nmnolrurottdlkhfwzy]dzztqofiytbyhhzwsy[ovdmmhigvmzuuji]jirdnbaefkkdpgi[orlijsvzupzadsvi]mnmwussnnikjigkkr +gspafobrohvirgeaxdq[igehxnlnjtwfcuc]aeibhshuiyekgcymyty[xhoayxpksnfvdzjwh]ktkoteqwnsouvwcftyu[eqfnhshsnakdnxwonzz]wwfzvzaupuirropirue +bpyvotpfgrefzidpn[pyvnycicdpcutcayrv]twcjgpggepbtnute[fdumsgxervdixwv]ydccutccndbxxfjrxh +okzxxrtdrfviychsj[ymguzlptohblvsj]ofquaojgbjuxhkrm[ingfugdcfpjtyoj]xwplthdujgksrosmv +jbwwuuqkuwrrzxmuwh[hxqptnyqwndsntckqex]mgmaotcyybmuihu +rojskmdnydeouqz[cdmuavkcabowcozhe]znwaohorcanpbyhjii[gkpcxjhxnhligil]qbzwurxyzdakgsnwvh[ettfivzqkrrenpxmsj]dfbcrgpjbivcpcpcoqr +iztjhisgpskdgwxwfdq[avnaibsrkfmlavnyuce]innbnunmtkplvdhq[lxexsvmjqjzpswjyrju]adcnelughetzceb[cmafkyaouzplrel]iqhabfxgwxdrqojp +mcxijhkidamijcggv[buvpvujncpcwxvvt]xortwrcnebozerevim[ylisqiexudovelmczm]sophxrbvffupehspu +tdbjhtyvoiflmgdt[lbwyayxikccooiw]rbhpfinzxpaayibe[twvandevzmehmiiot]npuymvedotdclzovsq +jtfyyycvwwukxvfbpq[acoshjowooeituuy]xicaiqqcrtpkwtu[lnnokqhsagantfsyl]kchtjwkppjyxtwjh +vfzsxxvmxhdpjrlm[wpzhdncopnapfijmlcr]lqhsravxxgptgjs[wwyuluteptkhznh]tthklcbbtbvhauug[nfplnscrhldnwtdyzqe]ockiyqmpnksijbf +dlnpcnognelscok[ibbeqsbqltfskgcgqb]htrpytqxmucqlnane[vtltdgsfjrwohtc]sbykausqnffmqkv +kxnaikbdqxcponrlivi[pxltpufeegjrawwanax]apuwyiawecyuqhgjc[vtenugjmwgebqzdt]jpstgvxeivppyaqwdbh +bjnvrqvazthxmzqe[vhhndcvzvvtdjpu]xvyoyqrjtbnonsstb +rglwwateiuipzihomf[rvlceqfsjsdeajp]umwquiuviykogvs[nyxtxtkhyplexemcvjk]kgqhfvraxxybvapgs +jfhopiiqntjmgdsj[lrijxadhlagitvp]uiwltkpdmqcvklmj[celhtexfpelokeyl]jucghcilfpxmuhsxlj[lnzbuosgycapkcujcsq]uipyywsuzrkxcxma +zbczjtvnmirbqohanm[bssrqrthbgrtjlfdeyh]sajloorydqhdlpfx[twqasimfthlutzbvc]xdyjyaewqxknvdz[exppwmacezbuavlhe]cldjcsqujgldchzigys +xvhlvnfixnvekmxfzr[mnmpxowwvahbtuiltn]facqroxwyyelgbeupk[liawlvgwyfizmas]yxgndlsxircarikrb +yjisbltbmhloiojwzy[uiqmflerfnevkzvnfmy]kecwgynuudxejjvth[joscliommzmbkqcqa]pwypdesmkawikue +hsiwncahwnipmmjwspf[icngtprynzjdnsgmh]htclvcobutyrczggpic[saypixczichbjeve]jmpwkwrnvhjcpglrul +aagdbakqyfriiolq[cjlhszgovtyhykgikl]excahvgfswdnpezh[typkmvlnkgjkmherbx]zuhrtvvwvcvhuzalde +qdunnnxbbpkljlj[opuhjxcwbtvnyzd]gqsaxqcmgmnagnim[sbbkqokcljlriqvwlj]vvgscumyxkrpmyrwz +drtuyztubzingcdvpy[ichljckfcgomhcfah]wpkgosokfjvzabii[gufmzunfeecjsbgg]pbtuedlavgbxdqq[vbbhreveuzdzbjygt]kglhdfghynsujkvnug +iccedgowicdllievwww[jrxauxixbmexkgfvvz]fysjaucelduzrxp[kubsdwfsoejcskemvl]wszejdloyalatpjq +oujirnbrjgnlqaksps[lphfkzalpspyhuxf]kuscphbgysuwhwyhot +vwpxodocwmfhzkhyf[srbxugrfpcalangfdj]bopxssvinpngkthdqyw[vkkyaqsjhizvounptrb]iiwhyeuatcqnojoidrn[xiuphhwusooiewosd]gggtfejwtpburzqyr +ysoiymdfphxmwlmlbm[nudcbwwqdfabqxc]adsnqcsxmpxwrhdwp[kullnmgtapmantsqr]ykmzsizznrmofzmy[cxnrxafdhfprlarkd]pffnyurmoaxrpvd +pouuuowcgcsgvuznt[wvbnsxurcwwxhkpdg]oncpjgpynhzxyvi +vlyfxbogdlwgzbuy[bkgdkemihxctcppam]ckevcpesenqjadifwz[smxfhxaidkueomhxyc]qwokiceophbpdyjovvy[tmzeqvagzhvviakrh]hionrvofdutctqdb +upsxlrmcnqiikdzhlcy[hehttqfmtzwgrmxfo]irippmddtqadjgytw[zkxutgforgpenbx]coziqjvbhjetosrtek +oewwtzgqsoedpidbn[rjmmegjghjfposhp]tgddsmuqxnvfpopcg[iwwvjgzvbmkhcmlhm]teygdquxhyhkrtiyjse[sknqnxtiutqtavvf]bcqiwxuliuhpeto +pdejprrltzgdddqhod[jgwgzdgvdopqgknwbqt]jaxeauvefzuvvgxlid[fpahofmhzzirjuw]enbiyknxsjhuxzx[bicvtjwkkhelcgebywj]ldvpqmpgzvihjkejl +oazlgrzhvtekbje[rcnbajbbtikrfapsnuh]gtddpwaqibjnpmfhp[zxarpxagmnzespusnm]svtfacsjwezouqnyfa[ujbucyylrrvuijybde]bgumlrbysgompdeo +eyescsulrvrxyngf[wpzojptmtmqywwvdz]oicscctycvplkhsb +ecwhdlfufxxytti[tjpmriwkymqufurtux]kvcdcihmfxydmxb +tmlzauuiszcwimcvli[vnvyjnebqbpoaotvcre]eupqvhojcmoweveps[cmjkegzrkspdwmdyuo]rjcxvzssaopikbi +wmgjjrccewrspnkcdg[kqagiunuhskruqpsmql]histajgekuklfzmu[caldsteatfkgwqogjb]hwweftyntccwfmw +lvwovmvymkxwcvuvuov[sxedhxpfwkndxgtwn]jnpctsvjkqsybbfy[coophwmyxhbhjjzvf]applfppvbrejnvz[ipytgyblyicrnet]ogktxhleyrrhjwqqt +xuiednrxcdyejmgcsg[mlmhqtzingaekkj]xmvjiydsuffmteb +zyweldtmlathqbd[zsskrkndiopdfqocigx]mpflfwtncuwjcnnvhf +chmlgfccuyimavif[kpgcuavqzwvekmahgxu]zrrkiipozbierayt[ooxqyjdkmmuaonht]qhifgfwmnavhlgnz[cnbosuyqrbqiuye]ksvsrroennhnxup +agxsrnpuwtpthaijwgi[fhyxwctpsxqkkypdfie]craulpcmyeifxluxu[yypagmcumxjcraxnvpz]zdgmbgteapcjwwzaive[rowspqgmcvqudjxm]qydbkwdeuraznvzzno +rhlhblmxdccpvudu[jhbawwnkolhlfssiw]rahopqrzbhdivhkrl[sdyjjbmlxlpcfabw]olocfasvuwqfxbbynn +xzbhnrzyvfvbrodi[kikpaqjccdhwfmjps]tqeliktvbjjnbpxwtq[jqjvumyqcjodqippp]ufaxyqyvdhjxccwbsfe[pxiqyqpvccnocmbinr]fqjralzkdemnowygd +lvbihonzfclpqyijtk[tzokuoeriylwwjahfud]vqbyrpbchllhsmeodxl[ktbdicmiebbpuxnyi]guxcypoxyjhshqgshs +nnmyoxtukxhrsgt[ecovrntpmkcaekonw]ncfzdxdlawbwtxqpkik[fkkkkxidubuatpihcnc]wqxmtvyakouvijt[tjvyhgempiufanh]bcibhdmbmbmmbyyi +jjyiltmpfvlkclthbz[icijdepekvlffegr]xnmbqmdiaskvieeudt[clfecicrgtuxodur]kqcqrnvwfdhpibndt[xsieatgypudmiedmfo]eqaouqptjuohpzbxml +waqqyhmfacfjbfasug[mbghdrtwrqihjje]jczikhpsasvutpmb[obwkagptmpwgjbhev]ozwfarybcfhihoku +tocybmyipesjprx[jdsdjyflopvltwsccxe]esswfgrsjawbduxuu +qwdwzgezyklxtmnd[uikylllxmtfhnwh]dmozabuomdvhcoz +tffooggeeufibvgyy[walfmmmfaegxaua]woxfjealuwsjajkk +aipayrjoievpqkqcb[pcnirwsnebqijke]ocpwinpdigoxudcksgx[vvuxytomiqmmacndtk]lkwmarnwqvzulsxofid +jwrefdombiesxvvap[fwhhajyhfaqzgym]gersxvbwsbqezoxcg[iaetgujgempehiaxx]llbgjukufbvdfxvjs +hexdafengwxaarjkqhe[brxnqkfcyltwlxc]tfqwhqspdfcgajfzlak[shtfaywffbchkkk]txpanajvkwazozn[jzfxmgozivlbctstlz]paxycypplmjazycksx +rwttdrhdouzvmhalwc[ozryzmmhwztywhuif]favxmwzmgawjdmcho +sndufqsbyhdkyathrxm[spluzodshkuiqhrm]gwctupgaumdalep[urynlbtsukjumpcrgar]mvgkstgtaxmtiufho +miypgghnpfhpcndife[uogotzsxnulstsucja]wrdogybnlkagqdtv[uerlwvvqvxrvtsaycg]bxpngxvmakjdvvdqfed +hgcyvldphesdmdma[inomdckqkhupvxmc]avlnivtukipmdmts +vgjaofvwaodncajhg[wmqzkrqiwbxdfsgdc]uzsywyzfptypsbto[lwfowjvhczggllfrw]nwchgcixmkxheceuq[eanuozoreimfpjooin]btyiwwfizhdbpfazpjx +ldsqkerydfisskoimys[ltqspskmalvyujfyrqt]dtyknopltmnvdtc +ekrdpdzvkoxfkjfpx[dpskecmtgjtwkhi]nidanbsojuexjgife[pgpitenqczwzafdad]mfcmnjodtkvhbknfto[uutgojscjiffmofegr]rwirhlyejxezndbs +mhsngxyweukngbybc[uiapxfrpfptauhiw]ruywrhlzekcudjgkw +urxtzdmrfedalnuuha[ioeyevidklsxpqkaahw]jhcrcdzwljhnudk[dfvcwbualikbxihqg]rhhwlhcfpbkexewpgn[gkgaygbsxboxypxbq]trsaulacafchpndootk +jmlhqgixgtfbcxyt[vhwpsfjufpbampqyqa]wwzszedhhdmztex +exilqpohtavxypsco[wtjdsrkpmulcraoaooz]ozlzxumlxhyyvcg[btpzjjbgjlydtfq]suniwwnwobellpbwd +glgwpqmljnfxjwsgae[hdnpgizkkafrkqfalpg]pskoghwqhabbrazqtgu[howksatecaqyemgxpye]bvrcfhawviubspmkeon[qciouynjddffdlp]kruofqzvhiaqbtm +ekyqqslkiuaxpucbsj[nsltoiyaeyfkygmtaul]eryfelvxmeekndddu[waprjreciavpzzsj]cppczdrntzrrqpk +draegnpszalplun[jwpjzjfpanpyqcxnu]lddilnitonnehft +afwslsdmylslwvekv[ngnsirjimcteduhmbia]utirtwchbjinjtkp[xtdywavaenpcexfi]fsxuipobvivhpowgioh +zpjzyqnadncjcbgulq[wtwvealiuqmxtmgbsu]wyjqglyafposcrwxue[xqmgfmbrcdcjfmazd]hjcjhoqisrvxdtiefm +nlchdiedtvmvrwq[aeqiwviurvdlsaxzdy]vrjrsalrqznvzhwxpjv[ghsoysknlxlzbqjv]cwklpwafgddnupknr +zxqjiqwrswpnotkjm[vdlwfpqexfvgzxjbsdl]avnrytuqubaojek +oklkhatqbeccsctaq[jfvcdwlampkhgkjw]hwnefdbhaixemttbk[xbnquvzqozdzbntm]rpyliiqlbmravsu +dazldpxyqjgbihafnl[udnqydjynzfllmxayne]oasevmgbxuvgxtmurus[alpxiujmrobllilgb]rrgekfumvabcjzmh +zoojpgbyojsophrflji[bobvppelwuyynrwinzj]kfsldwgeqtbvtsfy[icdvpxikjxhdaipte]kxyxztmtqiksvidn +ensxpontjxipkckasr[bdikuxubzmiuhsb]rffefjgowtxzjltz +suqgbqjkbymetile[jmgtojqeprpffkogv]pnffnorgbyrwddlm[pozvbivhruebmmjwogs]fuleotnbbnpuqre +yjwcijeeaqhjdmu[emqntgsefvphvpc]hddshsiudkvrzghal[aieudiuufjmtihwli]bbytteummcluoygddky[fbkfhkdwubnigzvl]phfapgcqrshmwis +fbqpgkdmhvtjmkepui[harjpumdzotcylumk]fglgadntxizpjsy +iforzbbzeepoddbalyb[cutsqxklmoljnexuaxo]ajmokylzrakmmlxcub[rximbemhrndnogfzf]pokqtdgeipqlswvrim +umtkjkgoyutnxym[nizqgpcfftiydbqutr]rzgvklegcqnetqkg +zdykayyaybkihcyc[qgmrngcbixqqdbvx]hcicjeavoycywax[bkjnxvfknauougpe]xjfsxnxlgixldzb[thjemtygmoazibfsar]qzdtbduakjdqteckq +dwwceyrsaqrhiadehmw[bushvhvxdeznysxjr]hnrekmeoxifqrsq[ynfaykimagehxbcxhka]ucdpjqxgcyyhvhobmdj[ywcjwcveqtzgqkzx]poruhxqfxuyhgqog +mcxpgupgbiznbdjjfzn[nxackwalqammtynl]qnrwciginnlyfxiyiv[hvovgilkgigolcolf]fyqfptzmgmzbgkh +kwzvwimdnfngglsqk[tvhytletnpwmogdq]zjndivdpftqyecxhnyi[iiqioqsyphxjxdy]diyppzzxximnlgyhzh[ylyboefbsjwjkkxbar]fuvxtvpoyomnkwjwsg +vlcyiigmifwxnvcdw[enlnmvlfghlbwib]lwsaxkcpgluzkmx[kglnyaprvaagswvfg]vvdeqkfdrjeqhfp[fcqxurkfmmorcenve]copdpqayaaolcox +rxjfsazvypysbra[pwnsoibariykvjgubu]nyuqsygdavnxfakwlm +kkgyhdbiwyexyhxgd[aigctwltgdrvyxbs]xypkkzuhuzpxygupvcz[lwjjxozwzniiywpv]koyfescfdlnyzhcgxin +cmgqspcojjombguppb[atincfnafdmbhtgzk]bidgxkkmgvgbeilvk +fphcdhkhetqucchmtm[ieoeogxnvdaxsayhc]xeigwycormzmwgf[cllkxjnlkjdinvouy]ammsmdyoyvlpldkgy +pjewtnwxajalxzrw[sreuxtjgiwxqmsfkj]nghqriebzmyhgcgoks +trtaefztlkjjzbxpip[fgpnmiewbmzvqfxoikc]wpemgpznkrerwlgr[ptjdchwakbcdmrjwxnf]unaxvqinaglgfeoi[ekfifzrybpfkjiehpsi]bxkuqrbzgfctzult +oyuobptvcbpmiiw[fhefjfnvmrpohae]uykwxrtssawavbuk[cyabwfmaxwqgmudcmpx]vahdtwpzvebiypwjvq[twtyrryywtwsckmff]vkmzcehpgydnorxo +dbgblaadftjartioq[avryclynyjmceujmy]nsqtusikmlamzfht[qmvmgeprwbsokvbzmmc]ddeuxmektypsukme[gqzmpenqiqlihjqoceh]fmsjcayltvsxycmzv +ixacedvqlzvneoqus[zmgeugtrxuidpdtzzn]besixpupznfgvqelwxq +ausrpqkpblrplbq[pzqlirofwbtvjvoua]yljvwgnjvjehsyjd +dmreexcoqmzxelfjeib[zaghgfbihozktuebhb]vdwkqxzetddhhbhhyd[smjdjtmnswvdeuyt]noyncdtfrtokngqld +akpixaofgmscjdmr[oiothmxmcgwvxmx]yjiwdlhqlrqerce +deyrfnzcctnmwjagql[qgcmtvfvpvvdminuwa]tynjoikfebqrxgvyehu[qhyenmsqmxshkvcmohh]llpblusdcqfywcdq[ikngnvowhnvaiwno]ixndafincaxkyqwimq +rjcoodvjnnbhxnlo[spesoflcmfcoifzosgs]qauqixapgyfzvtjbpee[zzxomezynqnoeue]xpiblpyghkxfueapcm[qotnfesblvvyrnsu]keguppozqkwfxlf +jgrowursqweqfwxbg[rfyvmzbkacqjzooslnr]znoeuzryfguydetugz[ssotfccqiuilzfuexd]zqatqqmmdnuiicv[mkijjomihqrtuiuobl]erhrjzotwvvpqek +unyrjnckltxyfxyj[vdlbfpobsnokudzqab]dhhsatcnsuifpwsqe +iscfknfmwdnipkvxcma[shkdzhzbrpdpacel]nrbkhvxfyoslwfhkldm +poxfvymkfzuhovx[wyjhfwnozjdghzuenkx]tpldycstgwuagjrz +taqbysrkuxvxncweld[vquzvmysufavywl]irixymrfapfwvnorzx[wznvlqeltnvzjhd]wgpdkhhoypflubfznpa +veeytotjubsezxvh[mlbakwdftkyfbpid]qehdyxzxctrdvvmpil[cfnhvbvjkuqwyzgie]wxbvbxibaqoefhzkimu[vcdhqkaxllbdmbuxowp]ifrawmsqulaizxxqytk +pbwglxgdiijskqrksnc[xryasmfvaqakaovslr]wslyywaninmrddik[uhieoolqnqxdmmltpyp]sgjoghttawugzcwzstd[zwhohshbhultyyoti]anvjcthgqapmftxhe +wmqxexytqfmdfgzkw[gbjexhyoufthdghiibi]ejhfohkfsaixzvtx +msrjuadzrxxolmxfxq[slurgkvzzfgqpnwdhxg]mhvtwtqplrxzvrmwtw +vzrfylnagvwqrbukxkt[wofldsbvtgzqsfxbl]scrfvyjrwyqmrsbot[bngltozaybaghfij]msdphikahbxebdar +cqpwfhfmgioybwsq[judebliwtcirgrtjcs]zrprctntnwcrszilkws[qwoaitshrtavmpse]zubuyfygpgdycnytnt[ctkvsrkjluwdqeeyku]ksncsilzwvkwtmn +lwtwlwmtqtjqiym[nxfgdevoxcdimcnb]koarjfajilpityyhmbc[emidtlwzhvfmrpqbhik]gsefmkukbjyhgdclj +fesirdkrgznhplitqo[erpgpujpndzzaho]wqzethjbporhxokift[rwelvzaswcwwstny]xgqpqjlcukivddrlv +zozyeoozrjrbdccroq[pffesupjavtnanbmhae]gatiaxphiwsrnnwloj[viampjpkjyrhypjmto]vsqwksazgcaggsv +fycnqvxfihmjnkjogf[jjxnxjolrlkbcqp]pdqtmmxyrfzpbbdm[fdaejpjrasjphazkc]hntqbpjeliiqmtne +yeounyqfhbnbmjc[mzbietsligfkult]bywnnvpavyhinsm[xuwaqmeiaffetkpkvoq]ufmjhazqnhdmqyecja[ztqflfgjsoqybaf]pjnbnrsnmfrgqamxb +ycyxnmxnttqiqnsnmi[wkrtuoeddszbizysqv]yzbksxesoscmlzquqfp[unqyazgxjzdgvhjylfd]kunijisskcelgtxzp[ciyxcpyyefoyhqm]eoqszchkgdhttjn +evecetgcdniectsnadi[skxzpvvuabkudplm]zqykqoduyjvgssjin[uyojccqmnfbztpdnwvs]uzysyjyjvowlsvpqa +cqkietrmjexdkqb[rhubbesuoeclwmtakqe]ivdnvnndssfznwmhbrk[zmjmfprnnowiedabycu]rmgmbgvihdcuzarhbum +zdhjklxbktkqeglhts[iqagcckadjftptawh]ezdtjbiebkjvivekdzt[gwehifbjyqnazsgzziv]fhdnwvcwnamqdaeb[rgxvlygqlocpfgqfpd]kkssrbltmsamrpiedjw +jlttcsywphepmcike[kufzshdcbvfvkwsahfu]ioqzvlzvjqnavymv +cfyvaasepjmgtofy[hhoqwyrkhuweoetwtir]fvpxylsiwyinialjsg[hqahlwsskotrjlid]azfumcjerwanpukap[iqjcxdwtvmvjkoukcvq]koeodiiywozmrtktxur +llaevsbyxpkahrii[dxfpfzvxwpzedtvhtlx]corhjnbybhlahvogj[aeukoetmokgjlswve]iwamrxgeszbcnzsxy +abxkqpiyavrfgxjbmx[uqzsbujxbmrjyxf]dsiktkwxjovhabuir[baqaipezkcvfjyqc]svvyuknankhxlttwng[kwsoccnvjnctnxa]zgnsnelphgyhfolihu +oquaqiwlkhwwfxnox[rifozvbwcclekccqk]mmmgicxioqwhlvjpsu[tndpmsoarmdojex]spywovxndxncbpshb[rgceaghxxvddklc]osijkijuctxjhtbv +ewucowyzjaqacfu[hruhcyudsttblexjwy]mjxsgzalkyasstkuzi[drnyfhqgaemafei]uuimofkacnittaoorr +nyzetoiyaqbsxum[jowknmpjwqdutjlfwo]oalwqxqoyovfjriwb[lvwabzjorjiiemeaacg]znsbvpusrratzywwwyk +lsjzqfxbbuihsdx[akccvjqdtzmxywakf]fkxrqzurzmqusrx[wmkamfvugczykevpq]avcvjbiwezkocfvo +ohoszcqvqivamuaisf[lyyacjpyelrsgafmyl]icwpankirjvekeg +kruylpszzrkzbfxbmk[thxwtofeyjsijenmom]gjblnnkhejpqdomos[xjfzkxpgfltzzfdby]fnbkcvyhwtwmvpykj +dtqrdvxfjedeydhdsz[depsrsktdbsiwudc]unbdedwnchjgetnwf[bhojevqkvcgacid]jmyzzhyslvuhnaizc +dwlyvffagjfzbevant[baalozybgljljwj]jomnxqrlanqrkcjds +kjdsccouzjkqxgicub[ghhfptkxbsgatseoxgz]jiqgnfilkycyuvlwbid +sxbgpazgvlipytzq[fixpxpdcuetwlqprcs]qcvdieujpvhwveur +gerfcffcrfrwvsjw[ypgmjuvhhzvvavtyulf]cjhqxizulglhcvy[mpjpctaxpnlrfhalp]wmhafecpyzjuagisv[aumyqoujcjkxusu]skhuivrgveucfrfzb +rqkibcopsltsjwq[gmnenbrlgqtvqflnt]xuczjcgsxmtbmeaysdk[rkjjglznqblxednxx]npiikosjigixuvlnzes[vqdtacxnqagckmz]bnrzgyqhejnbmtqa +ekzqugvzksupljx[hsjwrqxwwgcdhqhhzo]cqnomxxbemqmhqnnw[udcfrvgkcibabyssusn]zfuxkqiwlbbhssd[pfvscossyfdhjyed]zlwsqyhygkdgfah +uhfxysjbqxaerhsanh[zyuotxgmbwkahzyevkq]dricwyfpfffhxncjn +cmccqegbarzixhqucrl[ztgvmqmqpjtfgfuqjjj]ubawaltzbmhdhqioav[sszfycahkeptflx]otogjwoazgidspib +fgfdvktoaiucefhets[qwjumhonvmtimauqsy]zkzorsvmedrlycqel[caaejbjnvlaqlqonk]ndndrqbsaaweqoyi[ovnpneqkmsbqsav]cepurdlgjkedaaeo +nfhaistnlhzethu[gyozecvbgbkutaiuiiy]vbmcwkesewbbcdvw[zxgnhhbnldllaacb]kbtgbqxtmqtatjc +nuxiknpvosedexey[gfixiukjvovooybkr]nkprytbsajposdjcv[ahjzndfqmisqonz]kzybggzczcwhlnrerfd +puxghpwmypdrhykyd[xioiypketoaohdxa]lybkoxvoraessmzzztd +qwlzyfwnqvxylbttyy[idtjcszoblpujfkf]nbwtcwowujbgzsz[mqckgqkhmbzpwtuekcf]xyquvnuptbiwlqdn[gwgdvbsouphvvovkg]buqxksahwsgvruovojo +nvjqtzkgoenxnismrq[mxybkgtvioipfjecdma]wtgqwbkpqfepskvvay[qqxflmtbhprambdu]iqtqqujmqrlzpdwbljh[cmdesejkyvjzwhevg]qkclggetgpamrach +ntxnwuudhhghcgd[rlyqxrlsbpsdrdlls]qfzxlyrfjeshhmsyz +rxgpjhpklloihtpptpy[pcbbsflfkrknahkeq]uljnjuavjkhklwwcm +byxqwjjdyqqsdnt[nkxqnfrxqqjtwsnpj]xstdzfnmxpkyszg[yswyxmgmqsrvaxdkx]sjfpeyrrswxgeflbncz[likexnumjhlodzimm]crnvrjyaumqgmjmy +skwhvjyhmosrbbziiaw[dbztswjofjvkcbjtapg]yrzwevkwnjjefwzl[ifwifdeiaqpvuyiidrz]kqnqtbvgpxkejxvf[ubyvhimnnmhkbbnbu]zsqpbztopdvjzbpj +jttcdvuuyawsjnode[ahfzcsoxjswcdysclk]ubdipqyzzhafcdusjuf[wtsiychncfnaztdn]teqnxwryvsfwqbbw +gsoacpemvpypmizazb[rzluiccnkviutvg]bxmhsnyomypyueyhqbo[mzxxtfjifzluckdypta]qlirsetsxpkgewemam +cdqotetervrpkaiz[tohfcmgrtozdfduhk]mlgpfaviqgvzicff[snphhquukvzrgqynfqi]eredworrsugqqqowk[fvcdlekaqtuqhhchh]hhrerrbpzzarqnxiwwk +eitniklfnvnilfttm[qduauheufxnjowyar]oxizltxvldookdlomn[igmwlbhxgszcvhshy]knibbdqqnftzglqjodl +ibypwndwhrbzbowoa[wyrgxqcbqoqayqkf]rlnhzutwptjhfwrsme[cfpmzztsrhtdcgy]tdvricsznenkyphwzt +orvqewlxihoswvwlx[ifiaqweqqmaeasrkvxt]icmqkogypgrbjoij[qnkooyxicmbjhormbu]wkpucublpyqfkpjewzd +lzshelyjacfkrkykwe[jehbtylsskmnxigkrh]wgnozoomyzpbyrytrme[uwcvshtsdstibykyrnm]nykxibwjjcaacgg +fgdrabfqaogxyvpqfgs[bandjgjgkuuuxfuh]wwxxsusuuiezkvojziu[jsprwhpeictwield]tbpmjxfilclfrqx[zdmxvurgzzrompujt]ausuaokslerjqiveplk +jyhxxfrgrdjjsorsgu[uxzaififwgjnklvj]uehxdiantcneqrxeqi[nigrgktauzcpyazs]fjyinlukaspltshmhlh[mfvrnccglqfrdbk]qrmbqjtcccjrsrdmgs +nltgngsggdruwrahzhq[gvjujsgoyasfqql]btwmnkkccdcvuyniu[tsqzwyypufxxjhd]dvqickfwnoqtrhokrud[qjhdfcdcsfvdgkotq]hndylujuuecvakzmrp +xyvhcwkqkedbjzarfht[njkseezhzjrbujcdjs]obghjeljjsjksswil[mhfukqardbaypasf]wjcerxswmwvghjortxs[ghqmhxisgehdsyb]ysvgpyswsdfkomanrtp +wdwmhahsrdjogceb[jdwdpxaeemsjficjz]qqysutatflhmanx +cpctsiwpwyifqkk[eebyeqlgxyvaskcoda]sjayfoyavfkaydph[aztkadhyekpqtys]jwzqgyewxxkbisw[gvlxjstngthhsjeybv]ponztgpuhfsndjb +fawvrgcdqdidogtfu[yidikecuyabulhiia]fxfmgcpdbdzdsfkm +yjateqpywpcjcbo[xddnertejcjeedjulw]humaqnneeeynnpp +jutrwhvpaknrwoxp[ajhencapzncoyszy]qyhbpivdpqjeebsirf[lbsqceuykthorgpk]olrdkqyikfzrdzi[bmqrmgcmvqcgaxosaho]dkejbjzuzvyypxz +rhsdxnktvyiully[nciwcjzdccerinfkgi]czljhsizretcfuea[gudarsiefwzfdvfqsip]tedaanrqtnfjdvgm +grkgawgbvajxlbmbgwm[dpfpvpbrcwxethiu]rpfkykrvmatjwkd +daemahshxyowxgjuio[dwhknewdrwoxbgk]vggqgdzpypjshps[arwnnbysrmyfijttrh]mwuwdtpqmiqgfkntqm +ljpbbzgdgfqmvis[zqmfyouebpfvuscncay]omiockdgdxibtmyfwsk +pirgefjkoicryrcgu[qxkwrjfuhqmjzzmbc]jrofqkmdftjbupytg[mywqavlapyesbfea]trqscgjokafiarh +qsycbrrefosycpzj[guklennkilcmomyngzq]numvvwtbyvtfarlt[frfzzodqottlwzj]qumundqekohrpin[rsxaymghybsvzymhac]wkmbavpbqtoewxruut +erpqoualxstxkzkwgf[spsetkclioxmkpobkij]mocioemqrazrpexy +ryeoamcyfewnjlbdfsu[mmelohdonphatmxblhd]wgkjtelxmbwunvaxfne[xgohvvrmkweaabsd]dkukcrasqoceqjyehjs +zkmkqzphahjdzwot[objfpvwrjdcdxinuvi]goabmmhuvavbjgebdow[jbqupsngpnuoubvn]xofdcclnjyfofxnzyvk[mkmshdjabucvgpkteh]kqxuwhyogoxhgwqyyvf +yqlzjzpztzgtpomj[qcmfrvyamtxxtcv]hupfwqhpdvdwfvu[edoxxlncqxfxpsls]iyflxxkaztzxodxfd[xavxxfdkzquifiwuu]bkjzjuxybfdjcqw +gspnkpswktczjhi[pkpwicpaszrfnsa]reqjlqsucfsixykwmg[matrmmvriujnldbcuaf]lckpqdyikkaprdje +pbkxtroofyztckqg[arrmawhzlhytfodqb]pirguzqkvbgxznqnn +mmybfuxiqgljxdih[dzgfakmxryeoylimdqp]vizjwwrhnihcakb[njplrxabbturflf]qclfldtmazmigmd +exhynsvqvhtzexfjt[rdzxptfigworypkcz]disdlwcxksxjghkkbqe[ktpysvjomszwxdmqdv]cmwenbksdvfihvxvz[vrxbmhxkfjwgktuy]xpyefktsqohxwkaowk +iiuuszfrkqjprgoumy[svdcdtozwwtofuizxg]gkenicdslqaemvwlov +mldgparlhmdhgvz[bexmggptmuvhkjj]hfnccpxdkireolxpe +tzyrycryhzonuxekwt[cvskbxzwbuotnsu]pvybsdovxceqjfmo[oxjqmhruryormwvgkc]kiygcylmgxdjubtefiw +egklopkulrxyltcpbnu[nmbkrgnsjyfjugcx]bufmkakubfrwnwai[pprytunilpvguaen]bceequilwywvtvmshg[aszamqynotadciwdwzk]uivoeunohsbulzpxko +ubhofoouxcmdsqqkjbv[fdvdmyjaukqeuaassk]tjajanohfobuhgih[dfscfkxpzwoqobajau]aspwsctdasjdjnqbmt +urlkduvyyyatpkb[zrolecowduswyfn]bgkveercmmeecop +aitmhwttzyrqwwk[lxntglszzkyjrqogob]exmxyvhwwcopudfekgu[fzxdevariaovvyuof]almvqtftjsdqkevnw +ftftrmapzrqqyql[fmxcumhriyippgxmy]igyxwlfgcjfwwwgpy +ftkqjwepfbngstefaji[ekaiaqtwacopwxfcf]deswaixrljslcqc[nqwlvvuuziefvrd]pgfvwqsqxeqamxsjjw[zispeamntwboenxygcp]cwdhurmclfnjjjwjygh +fixhqdsaxorgfndumt[ccglwvkrpbwideuhvx]fgsxflvifyrzlznwvp[lmebhuhqemgwxpuvb]psfuyywbujlpwcekwz +otmnqzcbakdxosl[skiwodrlvhfjsuqfsma]wtyrxmotiqdinxmrbe[lhgprkzlguroolg]kjgvxaekydqxdepu[mvffwznlsunzhxknier]irzzbykjkzjdoybqg +aauhucqygvsgwdaqfa[leenmhlorfgbyorrd]soryphiyiqsoydfkwzw +aggwrqdafwtwwqjr[eafpfpxygvnfblxikwm]mlgoiwxfigmduubsr +rglpanreckskdaojotf[yuywsgztcjzyrfqawj]wzwtndwugnelcmxpyme[uwcqyuebxpprisdls]kjisjtwisxawsufrd +uqeuvhdoyujlazejbix[wtdxrqucvkbkavrvor]fclqcjvpxqgnkkhi +mgpszcffmfxeacayj[eorkhzrwqvxkrnessk]wykadaapxxqmohwriin[iwfmoieivcljpem]bxhutydaznvlbuu +vkvvkjckohpxkolpff[pepxkcsneexhhlsjs]mffyiopxkqdnwlg[qmkttuxyhvemywmu]puqepezxejnldtlf +fkyblzyluhloblrlj[uuznhpsjgbnzghjczsq]ekddnoeylbefgmpwjp[gbfxttshaolcvhfsl]iygnwnznafbluanu[mnylijsqhwlhhbq]ultecropzmivwizl +rwpypdkhndrotod[rganbztsadndbxr]dorwmwqoeppdpoyz[sefhqmaxuxqwjpgaofp]kerdiohsaddctmnj +hlzqtzrmmgkudvsaxn[wnujyposfazclkutfq]yugpiuxxydkbjtqd[bxeuhvpdnzqzvrtynq]nqcwrvbzjijfjkmq[gviaheipjpncyxq]thgypvingfouyrdexu +abnhtjtbkrvmukjsbi[yivolobglxbtivbmlxe]gpoearvtfhhjjxedpq +uiubiwrlfkwrsnewvwz[xymjmptyaoiartx]lkyzzzynibifaahjewx[ijvyqumtxyumrnpyfz]hddwfrbrgifyegaji[tguxrbbrdvhmssvbopf]ykkkdwtdtlajkmbgnww +omqzieitwyasnbuae[citxwhjdkqyzmfotup]enzrramzittuhgjcv[fierpodjceckpxwoiav]edtoxignggotlwka[sbjkaiypsozrukh]hdwihijpdemzcdvlsz +rummzhhnmypaltcxrja[nbcaecgbuslkyfar]hhfbjgrmbmjexlllok[swzivorldyknmqbnmtp]yjimyhqwgrgdphl +mvpjigwjeejzhnr[zmxoaofpatkxkbecaq]szixqtsjizfgvfioq +umnruavumjfrbywaswu[aeypnvqccjmqfflsyyn]anbehjastasljxkg[kwsjaebdtuslcbae]corzitvsrhthwmjsny[gzojgomcsqjubqrwor]tcektreziofkfzlyp +atrjsjmfiyyhjjpcq[aygsawvwkgmvjly]nvxcabdkjbowvfiuqim[nxwlnfgnkfmmrdqwva]bjqsncyahbgqgcck[kudkiazyfbbvwvae]egtutxkpkpibqcxd +yyxasjrusephnhgz[tbgueaajlxklmqfzfxx]rbirjquhusiueda[wwyfqgowviapcam]iwwwfcjtyuokivtkaet[ojcechttmtwizhjzb]ilybbjncssrsdpyvun +ouzhmpmtsxtbpgxd[xkpvjnalwhbhiwl]dohtpyllehgsmfqwio[pswfztwnlizwbhbopug]znhnnlkxrlsswkgrb +wdfqtfgtawjujjnipv[ffiedysbmudjwegxa]uixjrzxqsqknbro[uijbgaxqvjeiaddellx]golimewbjgojubbk[cmkrjtwjwjndagjoidq]kuaetseghitsonmjxez +hinvjpjfkrcfikcsnk[neznqyunxrviafftsv]xxzaxudvxzpzayzu[igikyqxlllewgxp]bbrmixylwkvzstannjk +jnfqvpcsjlhmsgttoo[keugkkuywiztndixql]fwcomunksourfiufwgf[vwalfwhhknnkmlelb]lxwrjniskrxyxxfgbj +hmxhwwoaovcmrsjng[caxzefbacuvtevwsn]lgybmbmfeizwrbfrzuc[usgudhgiwtuirjfkpz]dmohwrrvvujowdchnh +suctmalsyteahln[iwbpvohjintrccllib]zdppjeyrkkjlwgfp +hmnzkxvelkvxzminaj[llmbrsvokhyfowaimt]otgsfjkhormfnubhirp[cbycbwoqvdgyvbnmkz]gnnjznpxfxwfvaoc +jniltxvpjudmaao[ukqflhglxrfpfjg]djvtunwwabljjdirgrj[zkfyhzxkarvjfrbzbhx]zrrzbzubefvchvrpftc +lyqyzdgisrvolizgkvq[fcdlhezvozbrglr]lcuqsfwchyucocowuz[acdcsqmgffussoy]jlnuxatzdobackkwgwp +gwcvsoqytskjaqo[rfzimztlooyjbodjcud]ewbpnbzdilxvjmwy[ugoqefqofiwkgnv]pugnbbxqbmpephsby +bbzqqwyepafkukwqjbb[sprroemdjetnbhdu]donxkujxpajsakirfap[ybomycmhvmvslykfxuo]auqvkrofncqftmjshtz +qbxmiueonhzkluju[yocqzkbdskeisgvm]kaasgmyupwosdzbumq[lkqmadnwplwlawznb]zxldpcgbouydtatpo[dqdshurolnithdof]sscgvlgvpgthgkhtszr +uzcvcnjawdeonomhoh[lnckzlsxtxekacx]ogcbcsdksosgbdlrexd +kiiixiatixklryllfyd[bdtcggfxvupbohvclg]rxwnmgvwphunygx[jisbxeqdcnocecrtabk]cpbsvzurbvmtwucvhk[hlrjqjldshzvbrn]wlmkcxbepdkwafeovn +xavkcpvzdiowrpduy[lujfjaxzrmxxcnxfrlb]szegppqkdzrwkokbi +ojlbyagshifmlrv[qexvdlykxlebrlrjkg]lvdobhyszjfkocbmt[uorpnorysdsqycpdoje]tknlzfganuxeulzv[amollnzxactinrv]unmkoyxobuuzfwduxa +pjhpwsfoiufywtd[pzudakbhkrvzepfl]cnmjmtmacyjulpcu[yvevxufpkzfrksn]qqdusuumfgtaemuscj +ffnxshbygoxcatgz[byegatenneixbjbrri]xrxazipjarxrrjj[ilvdkjlixdbdieycbvz]lvngjqnhjjhlvki +maocxpwqvhfgoaoy[jthtqiiuukttxhh]qpvgjokizpojnsvgg +vstmpuwjzkvzxakgreh[vwxiygqjyyvmgvjdhz]yanevbmxttonaonlgeq[rskehprefzmdfujh]kddqkrshtgymbyf[tdciwdrqgnrwygvlqwy]mwyxsmscrhxowaezs +lpetegprilvnporglm[efutqcurzhuymzl]vpuzirgjkjkqmpglqoc[ynrhizbevmuobpyduap]joqowueodytoothjk +uovjoxozjbjgjoedh[hdufcoupnwyqzqsdz]bfkcibjpdceeawfsxnb[pmfdhpjltsthickltq]wnvrznraeqgmhfh[zqsykjfanpwhdbm]oltzbvppyqrhmom +cuptpflteqvnaexzwj[sokwgqieratedygx]tlgoqkfvmifmdguz[kfiwutninqxzwie]dulfdtlbltfjevgp[oftsoxfpwolpbvflmvk]xfbcennewbsxcgin +xoajbdvgnaxyewthsyy[gbvxbmhptnkenvoef]iyxfsrwruprnhml[pwrbjucvopfozdjlg]ntsdilgkqjkwifjcmqq[gqtizyvtmqydqdemxx]llggegbgpbiebcsg +osoqemdejeowlmtbr[gvnuwetgdhuzlfoyp]ynbzmlvpoydjaix +xmtosmglxiswygqd[djjpcftewakmxhe]cxrcujdbpfpmpqaqp +kmffzaniobvxkqobrz[xemvsxzxpikkgnz]coopvxaqcwwvcpzzbwc[frbwadxyrqsjmeb]solyurryfbhunkug +syuvjlrlrotbcxtmqlh[plnbhkottpkhbgrmmc]tpkceggxjkkshgovp +xypvptyubhdywjddc[dkdpirtrddhczvbi]gppnmtijmtndwsd[jctdyzyrapkwpsudre]ofnnmlflpjenwqme[wjlbkjvlxuwubdkskq]zmhodofehapyshkw +zyfesoxeyyvugukolxq[sduqoqepedvxiaojef]ujbihfjhwwrxjbmjzwo[fjbbqkruyeexkrk]fyjhwioedesstjkw[nyhqlxexvrlglwcqbi]zgxdbhdcqgccgodx +kbgeflyhriyaitjdw[gkmsfhbeeftzvlkkxd]leroadltgqyqepa[apzlemfdxyxhyqy]bifkxoyxysldsif[bypdkygwlqgxlhmay]odffxnaayhgxkyjsyg +etnylemzuybethsak[rbqwbwcpspvwcnrtiaa]cxdlfpvaizzsiqy[cofixscwpmoaptvu]tuvmcbkoqlfljpc +nafgslpawkgystrbu[lholsrbjchktftlct]cwxorzjqzuibydw[wolwkkqcflunakpsf]ftfjgybmpgmpzjpxok[omccjdarvniomtniw]vmtkovkvuahhcgj +arfxtgjhwjbqqpn[ozbglzichfmhnsrmc]sxwomutyoliqdfrziy +yrfbyqpslcykicx[uoxnsxbpkzuarrmhesg]ohscdwcojgysjov[epkotielizvhfbauf]kdichwakhcwuitdohe +lxdfxhtcxpaqfgud[kietvvqhjbhmbdjh]rnnxrywwubyivxj +wwqhnufhgdpwnidwe[trkijfvlemsenfvm]hwhzclbeilbbpmbdgvy[kcqrejunfyofjviz]ymhbanffstqwvlkczn +bemjirozvmspfrojywv[gnkvjdexdgqeqvom]akfgpxfgjwsymkegz[yrbmhgnacpufxmilwbe]taxwtqhrfqehzvndlix[ndjuozknfyplqafyu]bwogrlytfyopgayph +tzrwkqaembipwoyysy[zmjpcdqtbucakwta]eelwgobyifozmawhaeu +pxpftlpvkjcwicy[ordfpujlgwgxccjcvc]ghrlgcktvifkicv[kteuygrgxnqbaagldhw]elebyndnyuknsxwsz +eoayeeinavevnkocsh[wlhcijujotnsmyfwrg]nsghlrcpvhazacbriwy +myqilamxvrkimzrypsq[dritxccifmrgnynl]ahpnxwgmmlcrmtujqv +prjupstfryhiyxjr[nznibizpdpgsxozff]omzpiwgyqqytncz[ixhfkzmhfpctiaflrsg]fkxetrnjkjhwmbcs[mgfwcdxioxwsbpbxg]pnmcyowtigkikfbqem +obihtythngvjelm[flrqufrqlvaamtlt]gbuppvlrpotvhgoivu +wdovdejwygfyguc[acoacyczfmzugdiwfy]hbboqkjmpktiqigkaxi[eirojscvpewshvdslgs]oloathxikscihfpy[vbwlxhdnmpcvhrdwm]zxwsxrhoksbgnyva +vuaiucuvucxmowfvdc[pkwwdrystnkynnfonv]bkguisxgqtsizbdpon +nhegyhsxwcesxgagl[jsdkwvzzfvxuxsmkans]cwhuierxyqjmueehii +nmtqqwclrkwlikw[drthkxkyfxqugph]bbneldbvtittaydbgag[vviulwoviezlxte]oqzoapkqstfdxbxm[bmhsjxwoxtflbqeo]hnsldpfruxcdnvz +xrkijlvluezxevaye[erofwbtsylzfvyrersj]bkvnbppereymraau +jamtmykfjuhzndgnzrj[ezhkpcujzmcdkkjjfbm]yojgtkoobnwvgendjt[jkeeulmfzdbfwnohfaf]cudgyvipscncfbvmlh[kxikmcqmpounqkwjhg]emsdqszhrpxpwcwb +yywwadanokysrfh[btwstuwbsdiotcudf]qrsrtonegzitpgnzsvd +hrhfutggyymxzgyj[agqctqvhyfytwsdmzf]ozyonngtqdoaagdl[uuykvsdfqdknray]shhtieifkqfewhopney[ydgftitgfmfdqwh]dfxovuekyvtaddh +dbsuuitjdsiymhek[jgxxnjjzwgwirdlgwg]xwlvqyufgiwbwyfhqn[yywjhwiwijsuhlarpxv]zmpooqvlrrnwdfhsheg[piwaxxvwgzbbruij]izqwldwwjvrxmzuj +nuxzejoidicdupcgdum[nelehvehbccqmwnla]bhazpsnmekeqkvr +evnsveqnndjyarol[tgeuojqlculphzfva]rilaooxfpwyreyh +hhwvcwpwgzktzotcrx[khmiivstojdaciyzb]xwaeqbqyqwqltdx[rgwirleearklteybyx]ckiyopbgfygyvui +zpfozblbuwkdkkfsuft[lccwcopfworwnry]srwrcwdkalvsnsu[jmgukelsagifrhkxqma]wtrtztsztpnryaqw +iszcbgumuoarzlkblr[xphrddxkyclfvnapk]rzryxqdnmxplfiu[plghrphjxgqlxtp]cxpvhwxkzkeczxcenm +aezqpvhdbflknptrc[zykqxuzbatudehe]lugjrgmxtqlxrvt +jsejnywikaohtarsxmp[whmztgiaadmiarwlbj]yjrgwesrymvzhlades +cxmorkzlibiuyjgs[nyierakbbzkhvyizl]hmtqhrxddgdwmoayyse[ldupkxzsfkmnsfdnzsl]sfpntvoniewgfnyfw +rtlhvogqfabwioi[mloxkofbaemaxcfzdo]ofeukqafbxivgvygl +rjnyhsocogdwhswqonr[jrwafksjhfamqvfjk]seiscoezqmbopqryc +txdcwwtcedbymvxy[dbhxqovjeifzsuvm]alhqphxcmfmodeb[zdzxpgxeezjaeichq]ggadublqxpfyoyc +rvoblfajodmlbftahtv[dgglfidheitvcqob]uzvojeukksuthhlpyoc[ovnskmuaaxulloi]wqhxsjbtaqbgjpbw[ohmzmzpqzevicbzmtk]yjrbmkldmwmmcndia +rnsgsacbysmwnhlqjps[hmjfyywxcpxwsicxit]rnikgavmgagtsoqjnfp[qvcofkevjqjqhiqhzek]vlhfbggnwqwohspyig[ibsdkevufgsnowonkj]ufazmdkexffmxxfwf +qkcfiavyhcmknbqcjtq[lknppgsvbdvpftnzcgo]qswbyhtruabsyhvz[ilrimrzzjctbbwhc]knpudsvkdphxsuevep +wmeryhgvkftqiyctbt[terkorqjaagtbsp]hilrpcfcjsyguukcehn[scmgvajuiuybvzt]enjhgqtdjabbkgh +kvczijzgmasricwj[xhgvyfhnaxeugzje]xwcxqjegagsjbvnuskc[iiokktbsnmwxknkqch]vtuobocpydqweamu[jgmazxfjiryndgtcqjx]pykbsnsoxbfgacvgpz +guthejosohmrswzgk[uqthzxkpgxlcmqyop]fxedavqwkrmzbfr[itsvdugwjezrjtgqmua]yotsdzczslbvzatsom +lyltslrourlevnxw[dtiihjdbejwusjmfap]hdmttxgttdqytvdfpp[qhdrjcwprncegzdfl]iinunfljrfhgifws[fvjgcqtqgxqtgca]bzlvdtdsxgrtzuvh +ndwwncgabwoynmn[zbxvlpndrsbczbklwrb]bkcrlonwivcipxe[eoliublkzenpeyxfk]voydcapbmbsiuvqfywt[mmiirgxvnbpnkyjh]pgkocrralcozybthp +lvrcxgzomstmslr[vczvuydqcmhfmlt]gmogxiffrfsazqbh[yvnoqlavmbnattcrgd]tsbkxinrrbbxypwnafo[pgtfpwnnlxibpjchgd]hznabthirzxjipjd +jtczttrstcpmsko[mabkmpwpcytkqdmhjc]jntwxslpyrkrehj[cqbvlkhugmarodmoqeo]weaiacdfakrkuizqw[uiwkgtbzmmffxrhtn]lhygapgcdaszgoyy +ahnbwmiwwwivkykv[pcsiuyrowqrqfxcvw]mgksjiinoudrumr[ocwtmprzvamougd]lvqqlgaftlflllvqo[akvkgazplkkvqshgbk]zvyvtmxkttxnxxdy +tsbifacnljabpczi[cmmjarpfeeyoeplv]zsjcjdfidfjvcgdd +vaviqqmsbqellpw[xjjzxupmjbkyuzq]putpqaavecqypslf[nkyslewbmmsxvdy]maszkbnmujztqfbzq[hjwtywxdrybhcvplncc]bvgsnjtjidiuvggo +jhejwzckrrrzcjgs[vjkxxdonhncwkykwi]kyuvbdlmkffyzept[jloktbqtmtczmjbdord]uzggzgltjzngpsboyxy +rkrntmebnqrkoboby[gujdrcqoqatyewm]qhrzxubcwkrkqibjwl[hvnezryivakciaoukrd]teefauinxaijxil +zkuajphbyhsxocacplf[tqkosililhbxgsgp]xttqprajeocotwoixkw[hdmduoyjxcizwpa]cihkdwlaxhjzpjw +xzcmplyeabfrcpfr[qhfkyjzmivvhbqeblph]bkwydbvhtutbtytnrx[oslchcvrlcxmsnbqoq]zkggbeglckihzjuq[lxywqhpuarhpasbul]vqmgizoanebmehzfwyt +bjrvsfwownhpxsowafm[dtmxsbtquavgypbizrj]boqoiajglkefiwaj[ycjpupieshgdmbwp]riufwociykhnwdsci +urcrpmkeszzuctovhqu[vsutbxseevalnah]rwrptzraxwhuskb[inpentirbmcxdvof]nvtxiwtlkeknxfl[rddddhtpudrgpjafk]cojkmbekefbmuwev +djavlwoikblvsufxrb[suujlpxslswxgfmrjj]drrpikhibuvwdlhvt[iopyjysnsjpyyxngdfq]sijwvhrwtourowgv +kitztjpylzlaposkaun[szjrduixywmdpxbl]kaltysqcxzjrengtkwv[jhsqhlzxzayxdbebu]apyxjlaydhhokxacq +kvzdgclklqsndxdo[kudsmgggtnwtxdnrev]quljmegosayhdwum[kklkxlmmmtjcretlyx]dtsexdvvjndpxtggjlw[mpcaczddrmktrpgngw]usxsptmzgzqhjaycg +oxvlhxlmhhyqgwlao[wiqlkdwjluvqwgqp]sbjmqvssbwefsvq[ocwwdefylfgvgsygfbr]fbtqyawdbswjpux[loeconwsbvgbccoz]cdotdnnkzyaupynuk +ykozujsmdopwobif[xaupavllckswbcyszd]jqdeagvmvsxpumvmu +naxhmkdggymqhjcycw[xkhrapbevbaiwzdn]etnivyebbwvqarn[dnskxishknmcidwv]uctdvqkipycyzhgcp +uktvpthtrtlgmwofun[rmevlwmmvzucsuxqx]zokkayofazorjdec[ickalywptsyxrttbynx]olddxeqctucllsvrvhn[pxfftvrdqdglkvll]xymmmimcqskfozlkyos +rlqkqjeaqkqkdsfb[igleoesoxntrdwsyoz]ujmbnjtysangjwpsod[nniriilejnvzrrnn]mbqjytlwauzscjj +egnnnubdxhgpiypsha[byoisscizhhpsjy]hmtbmbgshscaxadry +qjafhagbtdpvszwlpz[ipehjbasniypubhfb]hreoxsqzigscxhnaf[rntqxzmxfxdldnpxqb]jriknndggvtkifa[kavxsbypdwmsildd]uisivvrtykssbvmsm +rwxhzignxkrqeuy[memzudqlzcfrgudefyh]pyoldsepksbcbthfdcw +jhgyboztenuwlqu[zjsmipieimgaypipjm]jbjlglomhxosmwypq[lvpsqwjvzepgvzbfs]ergqdyrvicbsgxg[ugcuougnecjcrpav]pzgpppoonvamxhkbg +mdmifuoicysmavfkvtr[rdcuzujskhncvsy]ypspsiiizkvopyb +tlwbtllklxrkyivnnuw[zqphdjfrntryqssd]uuefrmazhsiqdbodatx[zdptibmcvohmnwrv]jofpqdvwggfsdkz +rkgfksxcpqkspdsx[zubzkcjhpvtdvow]bkbmwwrfqtmaosodlhx[shxfozufozglsgfj]tbtwcavcbvhjourcvu +ayayqmsdvbzfnut[nzwcajbcbcduifari]eazisrtfqhzophb[zkgweftquububoothq]lrpktclkzizrutnybq[guuneltajlsxbbx]rrakswukxamcewdy +dtuezfpubkdvxojau[ipzyfbjcwxazbqeslhs]nelubzldtozljzyj[uqkgjszhpokhonrpg]pgaebrtqevqblaxqa +bbduqlqjpilanyikfb[iwngaxahwxongrgf]krgrarolzgmzdtj[mbsttcbkbedkcmbl]whecpxbvhuemjloxkcq[lrtaeothcehqsmbes]chuesxuwklohzrvgjkh +sextateheibnehs[ccvuuyctlffatnmhie]xdrwtaeangizfxkt +nayfogrvrhhvdfqf[upaiyvrvkcygazw]wtsawgmklbrjjhc +qumnikpzpmsjvfiwapn[fdqlumgxklzlxcm]dczsgahneieodmhgvgt[babaxdoljtacfza]teoddbtcemfketpp[vazvzbcnqacbwcx]fulxjfohtywgtagn +crcyymrdfaawflxfmfg[ovbkvuhdrxdbhmyphao]myqpzivnpjyjkogknqz +xfkrzuoeclfphdae[wfuevmepzjjuzlbc]icytgjlzxvnjgugxyv[ppqszfvkmppjvktn]cifddqrtlcodiincw +gobxpjjturfsgzell[rfhdgfzwpfoztzgcn]eworfqsmysqolgq +laagoxczwfikjawci[sljddbmwqdnwxlkhdi]hwmoerlalfpjshedio +wyomncmyxejknhswjv[awtbfqiarnoabkab]nitvsmoxyfdhpcdiee[sipoxhfskauxfskix]nktheznrekmrrxl[gwpmodgajfihlnad]pereyxjrernitwktv +xxkbizhzxvqxbecadt[omafffruievwfqocujp]zpuotjhjwsdbsxteza[otcdtybhkqhjhvjjz]zjrkvtevohcfvlvq[yjdkpxspyojxstjkv]fbccdkbjrebcrxyrg +zrctbusxagvjendfdf[szvxchrhjussntb]mzhzysbvlwwflpx[heijmktbzrbgqsklhcu]ygpkfilealopaixduvm[rakktnzhooijvydazhb]msnpudxdeaujqysbje +xoemgrrmqqtfwtnwnyt[jextspoeediexugdgc]foyqnwnwstrguzk +siuojescxsrrhvgpeoh[dnizqgnuprmevtqws]jtrkiydptijrwewcqz[zkvjwozfadmizvhfdk]kamauddrolxbdrn[yzfffqfeadlyfje]qanqnshkelszldi +wdiojuevpybfvdp[zxyrygvkvufixzdwds]tgjzjufuuwenexe[outgdpnnysadoyeon]hvelposyxhlvfmdi[gazrxuhxrfxofsrxq]wpkujtixgvfrdgg +pufjsqcfddyeghd[iylozggwqlqevyb]cbkdjgvbrpmrwrsgn[nuinkqeqchwluhwye]baetibebzmndgrulqdo +rwwiamjdgdfsttq[xnsuyncklmryvumrii]qtcphhihqqqqtntvoev +bwhfulscfcqggdswt[ostyvvcpdoyzvuhodeg]ekpjrxajoziohdvkfco[tbbppuyifwtcgvci]lwjfhfqfmclrhdhplbs[pplppkgrmykhtfnq]sfvskkgimpacxfam +jripvodavtgdgkv[isotocixmxjmcldpx]oaptjpebswetmacnf[zdlipacteuduvqdhcfg]chciftufaejhxkmpozz[cmnwvdkbsczhekzwi]ovnjvgsuxmszncr +ylpnqmqhlnmuxei[cyqofexibcjwunyl]ettxreudzmlhgtha +dhmperfgtcbqlipcjbr[gkmgkletrzhoyhfcwb]psllsosgwjmtrvfanv[fimdtpgcoolukvvpu]ccqgkaqltrreqchxpbf +huvrdvtjmncbokh[mxnsccgwblyahbdao]mpscnoohrsqideuhf +pfvpbqmyapypiubxmt[kjfhekecjzzqftpj]sybxxlmvzhloooom +iicuihjkntpnytg[xpzlplwvgwmzazj]dfiftbbvxbztjpx[patfyqrujpvwbsl]mxgsntaernztshbi[nfwhtuuwhgsljivcrws]iwzqwnbjapcfujz +fdiifotbpdpfvedsfn[ptkzrnhuybmhzkh]rmxekkyxbqxmxccc[icwqbjmjtakfsqbd]euycnuevdyommhq[dqfyackkxmvbehucn]aabiiukaxiowhbtbwpj +ofaeegcqivqrmtz[nyotqurllbitpijzdz]pdlsomnmdsbfhdzdh +yxihvlkrcvzxhlmzm[asvxysmyxovvxdvv]rrwmvextlthjopu[nuaoossiaxivwwxwpa]xgaovndeadfyofish[dpdhiwlsvntqxypdpy]ddmbndbjtnpazhj +kfqeicvkuvmsljtsez[vplnucnqgngsbfv]ycjwthuykmlfejqepad[ngklfmgvredrinryy]snsxjeqdinbbapwuno +yznxssrnyacwtxlfbab[mpjvrwoguxgvcbtbmdv]uflsilwcemofepjghvh[cpprubjartjbnrdo]pocdfdephebcdavrxpo +xkiccyvosgzxwtuck[oqqbviclakixdgc]kteovpyjbcejxui[mzuzcghrxtkssnrsqy]hcdpzjidycnlowgvaxo[iawhkiyhbswqsibqp]ltyzmuplqyoivgmzfa +qllumnywkyqjpfv[lgkmvmbdwnkhlhqfse]lroouhapmomchyeghsp +egmftdtwkpmhdpda[jlxrjvldyikwjlcwx]inqnhjexcxubtzbx[nxiniqbbzoedxkyc]siepprpdulpnkrussom[srrupzubqhkmccxcnas]qylljcyzwypwzumem +ikjwnxkhkzqmppk[tzaysscnyqriqxcg]miabsouchfluijdwa[cmxeoduyguwjxqcj]ilprgkdcvvopotdzzon +cauxikrtpgqgwydmagf[nrnvqarumgmthrf]xyyopmoyoampemafwe[jwjgmglxphjkvfg]oxltiecspkarhualt +pjzcgmqitucfyph[cxxlbsznvwpxvzghv]woqulnjvvfjvjzy[wgxczusgzxnpkakki]fvtepvwjkaozguggqk +fgwvbbyiyljwmkgcmic[gnohlyijeqfjldrpqey]qbdzxnxuiprcwjsn[ogtlzpxxzbtgfbjx]wxgaduaiyihyumprhe +mgemsvccgqreluv[qrlpjfkdoinuyou]ovkiqoqefrjmrzgb[fzmqpuzoufcybpucq]aaftwlldjkholezzpk +vxfsphugegtougthxk[lkvniyzlltosedmpgr]tomgbtfosxegecoqtn[mvptnxvxddkaqnjvnue]kclnhnpveadosfktw +ltlrncoqeeupwtoxv[yoosiulyjjmwacymwfk]vdgfdfcjubkcbhiixv +ediaeekjpbzidrfpu[rowhynyrchamhzrp]wetzubsftjwuksnd[yqbtzngplxcqkyxf]blzuvnektffqbkf[egmvyplsbysvfjjkr]ikrllifuchlkthknpqb +ohspsyvzulzfsgghvbu[tvtbzqptcpguecpgb]zyadwosbwchbgrkypj[cphkhvagaasozym]tvgkhkooyejddnhv +uxtuhgkkulhrvowswt[etzltbttiofnkeyh]gsgnleidfbomktjtbrq +owccdxohulgarvvxx[pbbuwbbkrgqlhxa]lqbqozlyegslpxvr[arduobjtbducuoiwykm]tfziqcucaqjcfrc +foxbwdzngattycaunku[lnkqgrufdcqreruqp]otrfaarzydubngucw[hhaqnaieublicggcep]jjvurleoxyatgtlexjd +bxercunxdkmyxoo[zuvlzxstpwfmbnv]laszhsamraptopjmfx[syvqwydkiawwwpb]dyrhipcnwwbhmcotha +mrcbhykyikojmqmxr[gijdvcjehxyzlpxms]bkzqdkykgcvrlbdcpck +dqdrhkhanojahvaof[msammceatlnnwypjnk]yxkhkmiroydwvls[bgxvfxasrtzmiqpueoy]esjxrbelpjsvdcdx +tuxcluskqsebpcm[xplkqkfmkdsjlgnome]qkweswhvzqmpkujows +nbpwnioczrkicxddphr[zmtlntcztddnmcl]gjultcfncpmekcsosbn[pzwvjmfvfkanhxbhcy]kafsqjaraeicizjy +drcviwihoplftyb[xykuycwejtdqehmuf]kfmgemdaoetwhczw +iuqdiepdheskvvgvix[ayfqccpnsyzawotpt]xjmljfmrhvqedfsrdg[rvdqhetiopoykpopol]lnqyxioswrssucownvu +umqpsyqwafisrktta[eqncbzzavysoixd]wdtnkvsvsfcvfks[opjoivoqobrzeepln]ziqmbmxwsppwzfro[mkhssttidvdgsvstov]akkdvcsjflhxllpblu +qjlmfjwtglolrdxvqk[yufnmwyfhjrqzrxrddv]pzcaaeoitighunvg[eamjujwzolooemhj]mxbnbjvuikcycvnfuh +zykdcejnrxpiimmbf[ofuzkgknvcexqzxpu]ketlytmhcmzvwtssaq[pgruobcnyaqmyjvospf]jkkvdoervshvgeqwj[fiexihxudpdrzdwp]pzmgprenvskgbgupy +edesihewpfcjzkjhhk[ydoqcgosoyuebpoib]oaxftiagsynwawlukdo[pobikbzlxzzatth]tzvwglytrgbmlsdikum +rvdcduthikkjrfx[oxwihjkewocfvjpq]wtpoobflhevxjuwnqr[ltfcdcjnkkfetnor]obpzfslqfunurzhpr +ihikssgoutovoropq[nitrordhoxvqfbjfc]lxnjmoufkqnxizdcthn +nsnkrlllkoyukbkwikp[anhzfrtqwndvwcndm]xyvidixcvjwqwxbsctb[awnmlqopvrjxyvjlbn]ldmgegtwfkvwjurzk +dvjmhdavqxdhnbglm[qopsknwswyqoqccp]jycpmzubidfbwsskm +dstxfmmohcyoivxmci[prdroxyvxqzdrdsu]qzczowwyxtufoewluu[ywzeufezgbazekly]tiifyttcldlhravctc +anocufhbdffrnyhxt[sopxugpfxbbjlsgtdc]nvnnbdsjqfevwbgbaif[ljuuwzmlrnpjvxgbp]hoeejpqdkbrafcmv +mvoaumknaokkjrduxj[anhqilrxkkqawmtdwhd]zuugnxwinmpwchymrx[ftylpriufvgtanapyy]xnizqpmgcbbotfpru[ilovypboxtuyozqag]aldfcdeyubuntmvyv +xlvezhyhuvbnhgezw[yvaxeeokyjwjgzr]hqtybqtojttsyhycsy +bjcbsmjssbubqixiqmu[uzycqzxxixenmtvz]ykvtnssyurdixcswneu +gwcwwzlhdufsjwaxal[howbmljowljdsvbm]jggvldehjwoafvshlw[bfevufuakhrccqcc]dfufvaxzavehxgwb +xuigvxgnmagtmdke[nxkzzxieoqxbaei]nqnpncmtrsiytxhy[bqpabinchcjqcjy]ysktjdirrevjyqyc[rwtodjwpnppdvig]cxedadgimutpobykf +daqanavryjmzxflo[vcpyomgckepdftz]tizgysgskfuntqedhp[bkasgyhpytrbqvgf]dtjwyykxvutfihl[dgidcqrglxeuqmjvryo]baclxsovuumhgjffx +lpyeghloevhgthedzjl[schxctqynpinoswgvwv]jpuvctsvrdpdhwsh[xdjqrqfwodmrxta]cmeizobaqtszfini[ttbvcouiaworjdp]uwfkbkxwhrkeugsccp +ctvifkpejmwnuapjpjh[glykzeqimofbvirvv]kbzjjjxmiasijhyak[ucyzsvtasjfewtbm]zbhktdmufikfwsiqyfz[kolsqantshbocapum]jvjtmsmzjvdyawlrrv +zbxgniymzkidlugns[xsyjfooxpsbhtjvjp]lydpcozhcmkdiactgsu +rzsziayhprsxlwr[szdcnmcdpqkwlmhqlp]uctizqyfzorwogahopa +njpfvxluupsvtbenq[cgenluehtxacymtm]onnngstsltmtobh[jkjpmbsumgmtkbyg]uvsefrirmvsuiff +qukyshliwhitgmyeb[eikuuslkfgergykosp]fthsbtteuspbrqpssb +xpgwgflgtkmtzhw[prdmpsbkrcbmjfitdyn]kqiyknqfoudyfvdmlhz[zswwgwvjkyvrjlg]zzmkyxkalhbbgcouvog +dgxbmggkttasrcjotn[hsfrmfxeeuvovzuij]lnbdybfhkdsrymhu +ryjamwprtdolosp[nkucayakarxezyxpgkp]qnezibzbjadqvqzz[kehgcplpjdlitdsg]nagotxuswnxikkicoi[fbpbayqjockutfqu]gnylxqhcacwdrdhlp +quayrjbyxiviwukq[mwkxplqhlociiriaaao]lswnrperjoqewphn[nmwqzenrjmgikodk]sagkvoqqoayykkzri[uyenuakxyohedlz]ffzfpyguqryzodjwqxj +fkymdwjnylzqnxhl[lsrorhrzdxpfkmai]vfytomporosnlpzc[pwpodimqjyfmczra]nibuxkjazxghetmxe +vlrxyrxugxmmxnr[gioetjknstpngomi]jgzsfyvgbteacpupi[aeyhvaqkilxenfy]ezhnkbgkqgbymgzolq[dkzztikgwfghpltsd]nrslpkmvahlvwfhavn +xpjvbcihegkoyjg[ddyxkmnhpnucgbeu]xnvxewhefxmfesoqkfo +qgavdsmekecmyuuxln[toczsvzymwfzzrxprb]igonrcvkpxvekefo[abktdknxsdmpionl]uhhlekwqmalhfauva +uveiuvjjvxlrlyxpc[ucbsqehsihiilfmxz]nvhvrtaxdpiqpbuyj[rhtfedxbiqutzvaucj]dxtgbmuwqxxqpfbohfb +qerjjnnafocowost[axrfofdityutyzgv]acicnljrpsxzlcg[dhslugmdfaxclhrdecs]ekxnsbqhlxcfuron +jknvvunefcyqagtj[zhgsvdlsfrlcfyoqt]srtokcehvdjwwkcwczm +wwwyfmlxivfqcmnwtw[kaeymickhvsdlqkfuqc]dyzktnegiqbohljysa[qmnzkoqxsgtpattmt]oxxczwgodhiecoyp[swszkqetvvgdctkhyxo]qrjhaothcmyajmpy +oldhdgmnxrbjncj[kkrntxgkrpbrsyi]qjronlhwmcpdnpp[ksqudrshtdnenqxt]wzbkmgdhgylcfpberv[nyddphsypgzienevnmx]memczjhmgzeyjchv +jxojiumgecewqlc[nmiruhzcybahusxwt]pqlrbrwjitwylvzx[rjwehkmounctpcecz]jbhagxjlhngeibhh +lbpildbxlosyqfun[razlyptphvjizuyonoy]atrqbzjakphxrguvmbt[ybdqfljkspdlgisypun]xttstfdytowwtxytsn +txrzvdxevhqzpkb[xbsfvyjkimceqeog]ilzhcjiezytvmdd[kuhqkwaweasjoae]fuyyczwcpbdblxtxjgt[ujdwvuypmibgdbdtkij]vhrvswtmxfqkwmtjjld +zipaigqfaywgroxzyh[nfaubfwofvgmjrlxw]srjdkzejhrpctlhbevh +mtshlkbkfdacuvtjkbk[qemjvtgzaxmgvojtfl]emvduvrdlxnwgqrquk +nekajppmdnadytnn[ynkibteahksyzvpenmp]jqxybiytpkgzgws[whyeilzvjokewweunf]ndkfvbdnbdoszwfugue +fwfviekoibnqhpis[esurgsppgqchztm]vaxsbcgtqipiemvreaw[ytkxlxyzfifrxgmbggv]tygxkuusmptxqyl[lpuxifizetrlbsefado]rbykxursrelvgiilrai +xyniecftatconlmstl[rpmxaolsbezfwzof]zvcmwpmmcszbaimwhfj[hggnwfkyexqkdancmc]cakzrmvvnmyiyzbwx[eizlhdetlkmzlrob]elvcwtpqtdpqxwdgjd +yfxqriltoucrnfnj[zlvarepakboasju]bhpvqvllpphryccbjz[gilhjdjlsinanvhhe]rkypfwnsrmshanawlb +cffxddoarujtkpwt[vgtsjcyuqgpoklcem]enplegjrghgfkvaqhtc +kybnjsgrfnckxytl[obtlaqusuhkyeswu]vhaghsusagftgzxz[ganwwupndegfgxbckde]ncgnimjtllrpmajya[dmzimljmhjkbyozpmk]ygyhjeeexzqadcdyhf +icjonhtmvgnwowp[xdtgaeotcyiyzozqwd]wudhamantwimysgpu[wjeyfkqluqgmbspxi]piyixwwkfdbogwcmtac +qextqvcvlshqhbunkg[ouypttbdsycmscqe]qpxtjvipjkrbasofu[lzonfnanpflaekzhl]xwwxnjgtmzxnhmq +zbtonkedeacrlltqnl[qlssupkhjptzbbru]nroemsymerldlshy[anmlmugxtrgypsvkgs]wfagpjfzgqcdhslmlnf +dpjpmruktkfkpurvcks[mcdigtlyilcdvykpng]wrbydnqwmaatgjpjnew +nhcyufcfcqqsxef[msqbqdsheiodqzpkcv]qlownycyhpteerrdfid[geiuncokzuwybrefno]mgugljgzgtdvyhpflbk[kwgpiyryqpdmphcwk]rghcxpkbbmimkui +yyutoljmokemaksyh[ofyxkifbjqhrdklh]ltfjtukyeekhbjd +uolodqcxatkpbywxs[qdpmghhjdsvuolwk]qfvcnuajofrynqndg[cpojwkswcxdorxvknrg]hluvdzuqsjsvhnqd[coemqesbuoorqrcht]oymvojeakuzzydb +qrghrzhmccfpfymd[ejpldprfcjwhfthnli]wayofelvbtvjfesq[crskpxtazgepeguyywt]hedblyskngtnxnchdz +gvebyckhjgfmqrxmmd[eklljmmtwggtlqdq]hmxazjnitvfcjmlactd[qhlsytdoiaksvney]jsdeegafywarxlsnkl[ycoyqpbbwsanlnoes]mnfxjeakujicrhn +ttowopleauigqfzpuws[rwaipjqlxeajbszmt]ewurrgikabumnsg[hqhoudrdngplyncdoq]jvazavwibnayzbkmei[yfeaerzswqrhjiiqbb]khsqzfojtdimvcgsxuv +zysbeejbuanxhomwne[wzcjovlgygbogvj]wqqbmqmudmkidhnm +hzetqrjsokpzsfe[sfvglwbyaoczjozubjo]fisxeqpvyscesgy +txsslfbzdakhenov[pdzbirgfxvyufuz]mwbclrbkpszfpgbrhu[ozmwusngkhbkluzvgo]wuwvzagakqcmcrcq +vxmeolvgvkzdbldvid[ebhmwbfcvzykllewj]ngsvjbjjbyyoybnai[vvhfsezmrbmdkoxbdmj]pxxmcprffpzqadbu +kagnhnyzbognzsmifby[rujzhkfynwygbcpuoq]wfgodhqkdextspa +meyjysyguijkyen[vjyhsmvoyoppjknvivn]yuyroikrroyknlkgfn +yrbljqrlekktwvq[ubrwbmlwxxtxnwa]ekompfyzprhialu[rdglmpamldxxxsgpmwk]atazfgcgkzbjydvf[sjdezkpgsienutudx]zuxyrrwpglvstutp +yqhreymyqostwga[wngmbpfomuxgcyqdl]jdkppprtdctuyaonlqz[dfpqdidzlofdishhmot]gnifxcpfecsxdincqib +xdfslzwasuifmmi[lbvuxnulhamtgfyhwz]sarfovphjgpdckkrbgy +bzkfxruybgbjsmeflp[ubqugccjulkryeh]yaldnucjnxhktrgf[jamlgglyzdlaidp]dsvhuxerhecwhjslfk[yibicfmmkiugttqi]byyytkpsforwainomd +asxywcdszmdtdndivdg[qkyfhaxaietrign]sjpliketcpjxkwxaoo[vmjxfuqxqgscfpd]mnpdsyqpnhlksmrcpa +gpgcqhpkdzpmjoxbjvk[stpachxjlsdooglph]jaaoaxtyaogvmuhl[yochbczehvuvauxj]zatcmyzbmktdoohzgx[cbwozqlvqfssqaagyf]dkeooopvydlsoakyc +blfmanmskfsbhnj[qurkejaextecwkh]iekzoszfdtcjcvqf[cllmensfekeoduop]kpldtlzhhnyaweelg[duturhserahslsvavl]tlscacpaddzunyhknql +fgtfcerscppphulhdpc[cjasnicuepcfcpwwq]ubfqrgkjexhpcpdh[fcuypvlkciryarmpsb]lkazlfdxilmfoccr +jaytjcjzwzzrwrosfig[bjwjolqvmwjwehvkyqm]qdrcohrlcqldwsj +darwjaqwucpzrgob[utcloaeoixtgcssljwg]daazkyzlexvrwrvcoho[hesdrjjliusilwgn]kflojebucroplzdkid[mxvmzdobkvksvvzg]mllhibzchrvzahrj +umabodjruykdkzuebe[pdyqfuwbwbnhvbgh]mvwcfyrzvyzbwbhen +uuvjgoiafuuacqj[ccihiuugtipqyyve]xmtwktbgcgwvwchsseg +oldckvjhhtvodiljhx[nqcvjxjohtdbukds]qsspbsmfdcamiwwr +dzilyknpfbgtdnvntf[fzelzighvnvvqypxz]ntthcasrqrblqsk +hphpardvfoqnqncq[ppvkmutvbzybiwmmcuz]kgfwazxcanccijxdxr[kvvrehncwizamjfbv]ptzvpznypbvmrshiq +iteoprxpltaartmz[mnybqocmkusetlywx]mxfikdltxvgvklaxzqt +qxldpbwuuyarzvlokm[peamzjnqawztknvnssx]pjacikdaebekzndkqbs +kswrzqhftfhqqgetg[bplpppimgpytieviwci]gfeqifrktgdqxzw[ylzjvdvhoocfxoijb]jhullyfbzrzbtiujxo +jbyalllemspbiba[fihpzyuwtiisvalzl]egftfecpkrowpxz[fwyjugfywhzgpbgxam]iuwakremprjkdfqep[cwjewifgwauyxaqa]gfnznfakypqatvp +gtdsifvoatfwztxsgmn[lrdwcnvmfiuzxuyad]alnsyodvmgpdxqk +ffyhycigkhlyiopmdx[yuuvtuoepntnqhkof]atumrmkzfhinoqq +wrkcbbifeyemfppiaga[msgxssztbxvmdii]ydxtnokgvpouvcuk +xivexjhdjysgmklbjp[scteqtgrnyuxsonvbx]kzbopsageoqsymtcfo +jtsjoerkjzurnysfnwe[jqglomdcjmtvcwvhir]rozwrmwjuehpapebmgz +qnscyvubszfeloscaez[povhdeeifvqfpyd]hdpspdtgtqpklhwqjec[xtqeoudrdzirwfxrowf]dllykbtfgrdwdlchn[fsjzptvngbbulfkpkh]nvyonktuxkjzpsciihm +jzrrmwegexitufpbx[orlvlpnnuklsapk]kpwkwfggbcxwdxvp +hfvhjwieruryoqk[qrtlruplpqjtwpuhhoa]ddbsdfqczwrmnrpm[hjjqrsppkjnvxmjq]juvwgpsglqllqhrc +wogxentwvncxpjbntf[lunrnlkbjpkqcxprp]yanygvijbyhhpohijj +kjwqxolclqanoyfes[oeasucvzznhjxkzlqb]bbxecjmmedvyfzapfif +hfdiajyktrmlfzfbv[vdnyppvsruscsgvji]opwnmoadgirnedufn +mrkqlpkzkhbfncol[huvazflnaswuhnv]pznbrubmgazkzfvkltx +lfqfiunlwragtrknwpx[quvtbwmfgutkzaeng]kcdzgwyybqugyfgf[mjngrfgzmtbehzxzsbg]zjvpmzakgijjfyz[ghpyxsxuycqgdipdua]bjqtbqlzwyinovhnmmu +ayagxnelxjvkqkwhax[zlimrxwrtlqtkvdny]nosfkooohodpzjp[hsrgztcucnuagedqoz]aujduldshdugxgbszom +wkeqhrtgnhyektefk[afuwzaqdvmzzzgnuvw]aaisrnfyhuifpglpgp +kpqqecovarltptjfdf[fwpprvpqfsntlobpdm]dtnujgpbbrqwqdyzs +alnyvjvicoigistbmh[ueworbfuagjnech]dpzdovbhhbguxpginqy +eiumooyxoukvaqoiv[qrygigmnybosyay]byhcqoggajjtotnuw[wpgsucwktfgcuhhi]hwoelhsxarzriqxtwao[nvemgikmzntrcfr]uguazrjfisipwrhcbn +ghierhnuwvmisxxa[cmfxbenynymgvcrr]oknavjpheqtlsvwabd[izrzgzwvdgymivghdpv]fbqrtbvhcjgvbkwjs[ivdprbnygkhgzgaym]ziwhfgnbawgtpmkswvu +pqcsccgpceupnvtr[bzfagcvmbelgxyns]uxkvxgveigehxsugzj[oojovkdwhojqcbilwvh]xeamwxhelypwwefsabq +iltmsmcvjnhczdxoti[umsmolikbpmqnsyah]tdtojhhqszysiqkfqr +eubknijqrihrbulq[hfmdunzrzrgseunf]qgdasqmtmgoacfid[duazrfhejbzxepx]apwgpewymhnhxsrx[judrexlgitldqqlnrpb]ynfdtcugmjvpdajapon +lqwdkmmktuhdbawow[lsrovmkjyktyduf]utmrjitsbijombwo[abvvufjkwoxsthzbao]wteqdxfhbqrakiqenh +phudxliosbjdplwzx[wmreutzkdlbxfksjt]onwnwzbffksdsrrvxuy[fuklieqfenqwinbmf]ckltdwaxzrpebmksn +mldqsgldkmerpwqlg[thmshstolghijyjy]xzhkcpjyjuydgxjm +wpsseyevqcibokcb[hnqscfwtkqckqmao]jsnvfanwiodlasx +pomqeoawmwhijaq[ejtmvzlmidqwcft]hkeetgkruqgmnpoi +twkcrdetwuxaxucnjv[xffwyrqfcqouyxmkrro]ezewjlxapphabveea[jfyjgbpkflijwvreer]nesuewscsclvwiwkn[xxjkzrpeonyctow]yclvbgnwgcarcxos +ugndgtdqyxtplkdz[worxgglrocgtypfvmb]lcziijmkjfdpghkjqfp[qomfivwilarizmq]dnglkuyyinegywu[batxtrembnirlwr]ovrphoeyxqnhcvmts +zgtxjxnktlvldrxpul[rviiugbdqcysxijrc]kyktcnhhtompktirdjz[bkusovlvbbigibd]airrtdvywvomcfrhi[xgapjazusatwmnl]usdiffjsbadtdonojs +mimjtxkzfsnijawjrey[appuokfywghecatbzwo]aovbqviminrwaszvo +kcmrpjoggjmfzwezv[onaeglpwhoxczbw]totswqmklmzrwmxdf[befvnijunppmomoduhr]wydkdiejzzdppny +fgpjujczabbtkxwvfd[cicmceziihzlkcwdwhr]sicifccwrljuhteondz[qwtxzkpzaspfynin]scyjunafukgggpc +buyslulsiiwxkge[ypiuwaxgxsqpbqqx]dwsyrzemulupybvx +telsdbhziecdqvmyprn[hqpxpfnttkmchynab]wvopujdicijhmttrn[orfuzixnlfdimtsc]jzvuxsquolwwtzr[dmiytgapehniwib]zylakfeifdzatmqpb +klvmlkigwhcckkyx[qxriuexxfsmfcpgvlzb]ygklxunjumjcmoph[ychtcmyhbyipspnnsr]pjqqgfbcsqmmrxbtj +ugulusabrxqyxbvv[atgfhjdhplritht]glsimouvohndboxh +fatrlhuimyqjjobdq[xvvmkavirljwcgmkvx]kbesaoxeeabtywsxcwr[pmvliimbudlzabbz]vseagltcmulcdib +vowrlwyrxwivzacnop[fegbzczrceczdasjr]orroaksljdcydlk[clwvvrdfhommqcn]yqigbtlwvklqxxiors[uliodgyotgxdymyi]lqverjsyuxifpjoru +wevsnwwlgslgxsof[eyjhzwdmvusnuerbqmh]mjzmgpkhaatmwptbo +hljbwkfykqbnpqhkfuv[uirnlrjpryuhtqztz]ackmzmullgwefgug +lmumdzgnhyjajoazd[yksltxstrsvugowym]xcmwqzbluyzdlbpkfkj[sbnktloqdabygsmyp]pyavvgzsxokeecxh[xcoublhmghnexnts]sdbkqumfdezjvqp +stnccrfzofqwbcafssa[toskkshmnjeywtuq]kbkyxwghqfgrtxs[myvqujeowntxqiekgxh]dplyqviwehtzoxrrix[covstbqzxjrditsf]qxyocadbpdqqqpadl +evgjdjnbnzmbzjpbfm[cxhsxvxtdtdowbd]wceyuozkwdjdsrsarl +rbnbqreygxxaufhws[alsptejilzoslxfj]xirgkoxgpdsolbhqiqb +kpzbxjsrsdgzstpc[jnpsoqmjqnfzkfsgq]tunpisxseqxjtyfwij +kegehkcwqdyujtyv[qfprszwdyjylowrl]yqhpsvfmcofhrfn +usfdjspdmrsmwotku[phpquxkrbrefnesvoig]vbrbyhzjjueflzur +ahcrumgrsucgvcvs[zgiwqzqxdocenumve]wwmkejymlaysmpr +egorqvqrhdxdcwglb[pewidggmjfdwchmpuxq]vfpginbbwnzhzutt +rbwgxniblxrzdux[ctmqwdtjnnoizpfxkb]cjalwfgvfvehdshc +grpqqrkmvatjnpe[fpuzplowwtztimw]zsebojrxdfyouujqu[jieuliemrlsrrhaaral]vapfxmifbvtdzjpqfn +kxqzgqwklgxylpccai[scugesodkfdyduxfgpq]qeoajrdmbkawsrcde[yhplavixoxekedvoq]oefgpvukotfhzxvdpt[vfffrlkuirbixakjbg]shhslgefljkjhdu +xltaldprsvinvsgfg[korqzbyuimhrmxg]pamxettjpfchnwvxfb[secngupffbmiekzfewg]jzqfwquugmanazihei[ldhzfrgdbneaxjjndgg]toefzbwrdaiqssxrbqh +qgiiylhrxzzvniaegfw[vfxiqmehxnnjheiszxb]txrwpqbqkdbnsvt[voiphlhjwxrkcyrarwt]lhlhcobxijaoosyx[dyqmagxqryuyfbat]oovkonlsaeiqnil +cwxhidoqdhxragzpib[hjmpsaxbqpiwqhy]csdontizglsbbeh +cvqlicsscacfmuugq[eejkmtnhdfogzpbhygc]hsqpgofmanfemhido +tsbgyswofaablrj[kxsfwmoymlmvxujvqc]oiatufqeigamjtqj[lbnetvjnhlmvyjs]aeeetvtqgykzstpt +zikurkodzkxzvjucknr[eeldigjdnjetqzwtl]itaxybvtwbhjdci[hbkvepoewuzexeg]ohfbodukqdlanpa[rlxoscpwxfbemxvye]ydahcjuodtvinta +dkdquuhvndpmvudwjx[hofzlmhpteoarpre]sdvnkykpcblbaardmf[hdtnalxmijwrorx]ixsdqmnoqrieeqn[tvyurwrpjzolmoqn]odvpdodyhdjvcaqi +leufyoljrgauyshjmdn[omwkxoqtffghqvn]iqpnagprpvmlsvo[glbhtzdectgrymdzxf]dwgpfoqsivjdvpiidzo[glnavlopicrpfkc]nnstfkiqjxccqrvmg +jdpqymeesiieeeb[iwrygkpzdjttxuz]qqrbobabyedbigesuh[tmfkwpopdgcfuydhukb]mzldoxgjdeckpdvu[obojbnmmlhdwsman]nssaclvkjwmoozuissi +upgpcxmqbimkrcvcmp[ivnacnyueiepraljdh]vfagabifynlpbjdc[dobimimkhmytben]pgasxhypmszdnvjwnwh[nvcvwfgrqenthqcqlw]cdvvgepmrqskpffhw +fifgarfuqaoifkymgx[mvgawkhnxvgaqdmzat]fuemwmfadtlaxwyslr +bcbtmtmkhecpaemtmec[apsgtrjqwqreuntmdyq]qecxvrivzvlkwwnzcfv +vslhwcbtvnnkfge[zbotbapnldktkexac]ieekqwkifqtpzwsb[wjjwgvhvnqaqmrmath]aeauqxrfhwdlbsqx[ijqqcgxjzepgnbru]uycbebwrapkiobz +fgfxlcgdrvbwkhf[gcdnlfdqppnocayj]kgluimmxtrnrkxxy[ebmozaizcvfxamjfgfl]zxjsthsrjazocerdybe[uiodgjwmepojoaswdqb]gsywzobidosuauosihp +jocqkcfjxtprwzxcol[jomzitpuxjjstqj]jyaupzbknhzvwkwejgg[frkljzosjvpzzffe]najjqpukuhkyseux[obvojkkfdiawyysye]awwxmmkvzedenpagx +wnjitpqtpbywfdfzqb[zsmozjfwpksophbzrp]ryxeuskjtgqxlkqinbl[jbenmfsdrvwdjfxhibx]vdwygykkkqqzoueisnu[xgnqjjcnbpugkeuaon]wvyttauvhjmdqcbmfqz +cjikxgbzdupqnoq[khvayknbckfnohcbc]gjsqdwbzsjnwjblbe +sknizlycschmfbcbo[glptboptcwtmwmyj]hmgkwtwaifrmzxhee[dxxxiulybtkhkstynq]mjntafrkgppmgisnz +vbijkdmufqxhuinw[nqkbpwcxoozkrllibiu]maiisvopemncukdedg[flspngjuzwaveawgk]lqinchaieoizrwr[tuyuxyvxkesiktilna]rhyincnkvnnqejsoxp +eehvafmuwihwbizcao[vnktgdjhjeatxeshjh]taoisnoyefbphntft[pfzlfnftyvfkkmau]gxmhcurnvyqxgffll +ytdqzmfcxjezgvr[yttnwhebnitzkmpvg]gnxpxseopkiwdwq +tiygnypqepfcbcqasq[qoiylamohtllezrd]hieijornlrltkvvf +gcolxjnzzqtozkqlo[gwiytfqkewszkddc]mervsuxdbxtqkclwli[zamcpapgayrobsrnros]skfbjychckenvdnk[msqqgpdtgzpbdsflgo]hswedrxeichgpbkt +aoyzbbkhsyzouhf[yuheesbhrurspvkoeoa]icwrvttxwvrjodooy[lclcdnulwihttoo]aheoekyzcrdbtnkdn +epqxzqeqfqquuvaxut[rvniqevejzxwbgdj]mdozdllbtyxiessvou[ftmdtfmxjktmdjrp]rbdfhuqvdzpiyaw +fvfozofyprhtptnvfvv[cvjusvxzqhknsrfuw]wwjlogceospgxpoq +lboiooritgdlzti[dcvmycwryuiwrxuf]rgsvwmbouwqweusdsrb[ncalmljnmldxtgjyn]digztuhetumfrmzwg[jxhgzioinwtdfvsczf]ormtzakkenigohbn +jjgkkenzhjxreujjury[oqbhgbvyvybhznj]lzzpsybrpvmfxftasjv[fajchcbbxzyjzdmzju]jbyovxsryhenhqd +kimqpwhmrecjichuf[biclfkhxsptyasun]cykzrmdsfvyszfldtxb[foamaxeacbbfukrav]kpdkasbbrjuqndsjf +ixiemjwdwfauydlzrf[ehczcannzlhrpuu]zgmsdfleegepchlbml[pxixfrfqusymnyad]wynixqpqilkigha[ujtjksmgswjsqlt]uabmyxgfqtqxbtggvoh +vvxrjenkffmjasf[zxizrnxsywrjpbsy]danlwskfpxmwozazt +hdbwqsphlabkzxxhrgo[erldraphnhaevid]ynkxoezwjpygvftw +eynyhfzlfnvsrguftv[olhsgnhicqlhqcopiai]azubeqximmxxruopbcv +ixkfvfumxiagjybsn[frwibevmaiibyzd]qzqfzepjziatdpyqmr[onsezbgebekxybzzqzw]yqotbtwhsuxraexdfes[sqyxxukeslhogqaftl]kpqsxbeawasfnbwm +fbotlkdfsscgahhtbvr[qzlujuyglqbktek]fitzbfribrvygprgssx[ytfthkzieycghddhs]twelmrjujaidadamq +nuxgihsikrkmrydy[awvlrjbdobngseyw]owlsggrmwypppcnkmws[ipqmpwdvbohtnbs]nutezdkbigrjnveau +ftxpxuuvsdipzjvmy[zfrkyfvducmhwzfdxj]ycyrhdiyszpbldrqyqp[pdhfnaicafoldftflv]rskyllsuaaxidlokgxz +gqnlikldqbizpsceti[skfmnlrtbwyqrwpi]ubwivkayvgbhnixj[kmlxwcfmudgamallj]tfwinixbevrrgzozw[iufudfqiwsyjcyqrs]ujixfobkouvxhmvcql +iddngjedxnwlbcxhkw[yqwiebcdacegykn]saybhmmqxdoxrrzced[bqjiuuqpbxczshymt]qagtwkbyyslughgsxrd[wjjqtpphygirijzcnun]lvwqqctdkjvaatovttj +qzarsgfojoaqkzb[jiuvvyihogymomqddqs]ekacrjmxsudjuvjd[dkfjwxmpbviqeuiotlu]tpmzbyfqhelgtpic[xcankncgcyaixxcuaj]jsieyimscyfvaeduf +epqisdvjvcpyxcwxuu[hhdspwfhkosxunncv]iibgrkioklsoktfp[kjvjytinytggjurws]oekjstnakyoohller +yidewjsqwykhvakby[ewhvuvpzmeexvwtd]mygypbsbaabkccvslri[dgaksoqgxghazflkn]kpdssbszxhpltdxht +ijhcdyyvjscrvhh[fpobanqwzccnyev]vtvztxptbegfabvm +fcicsnaoileyhlta[ivnthhpicibzhtyfaf]agaffazyjidivabel[zprfefitivfahmsx]jxfvpjrbftgokdclnw[vfmlrayxecyduau]dkuaarmbkuqqjuva +wjhhegqxpegrypjlpvr[orhbboezmjncmclamy]pckznmicczddarise +ccxnbhlsqrtqcbrczci[zwbnllwffvdsmmd]wdcyuartrmykqbvmlc +shpzokvkrrpypaohp[cdbxbviwegleqizw]dcilynllhnasdzaku[brkdsnedgdlzlhxzlzg]ygvficcbzjonmzh +vzdkvwtqbqsgxenb[dfrsswrrxxxlpxpgp]lheiqkpbahpgjtvax[lbfhfdztehvveioipoj]xkpbfwdxvkcndrbfgya[qvewltgemzljlokhjxi]bufpvhmvhrndnkmjsjr +mynfnfbjlwljwoqbenl[wnuganfnmpqrgcdxvn]kpcfvfegyibrhoeouiv[tmquruuijoivdluhc]lnspgmbphvhxlcw[slrraibkhqkaupb]vxwczoqsrepmgzz +eaeovlebqlahuiztd[dngzrklmortvzksk]atunvakfxeqeymw[huaccbfdtygotzubrj]poeblqeqsdqpcbqd +gzbgdqlebuwepvx[qpajreszsyyluwi]hymkhgxqpabniqzells[zediljwkqfpvblioz]zguladbcmloyugl +cvkyjumasouhugvvz[dtidgtxbbufhwyvob]pdmhzqubmdreglyy +tcxjcacxysuimczi[uhflafmjntxmsaf]uexrhinqroupcbksrsj[nocrykejeuzzigkyqxx]crwdvpjofxynwft[fmxkcqrsrpdfxscabs]crbnlnzoihruuilu +notkmxwmhfptgfpvntf[ucdfxyikwxtsumebhj]kjhhkgtruhuqzsl[nyiklbrbfvreipanby]flesvbofrdsclfvm[zghcpgxoauylwmlzfl]vwotzewzjzpyccl +pjrbmasdillqwdkjfni[lalstrvjalnttmwr]xbezkjpklkrnlpzjjn[wbpwhbukoixcfsqnu]xknhkqjktuybkfnz +ykvyxzavfcirelraq[itraxkxjwslzkxkigcm]ndbwcybrgayecrpjao +jqwujyllrskoetkbz[akunxyvvaxrysiygb]ynqqotupdoqbfwncn[yyszfaxjmgqmwxrvdx]zeacfwrreohtnzvobhj +fsfgewroujqwaek[mryrrkeqgtpibzn]vlmavzfvsadxbdiph[tdlovgncglhaoqafic]ziupjyryletstrull +fosmjgkqrqvjjigrtf[ejrefcyognxkuvlwl]bzhpufedodqwsztzng[rgxidklqahcldewgfrl]eodokojqopkrrhfpmmf[yqwaeuztmjkelpwlj]zijgacsyrbtwkxh +cehnutkhbzhfouyk[pdiacmcgcdpmsvgvkmp]uaslakppkycqbzn[ldbaomdftjcnpasl]fgdrrrzumavxzlojm[iyknsyaoypsbqicx]ggtbqnjftvmqkmiu +nmezigjskmagkzcsyhb[rfrggycsxoxxnxrhyb]zjlrnpgxzgljzfw[ztdnrdocidkgbqmmqa]hnuqryossbzlfaivij[dkaufcpwgzsxztpqsk]tzkdznvnizjtbrnqosj +zcdfhyoyrbwonet[otdhxcbmwxzgoyoo]kbkvqasgmhmuynqth +wajbfmurouvueehl[dvyueqwzbqcpdvbjfr]vkujmhhlqbdaqcsvomz[wlekuxdiumhnwms]yzgtuwxfirpmllcek[tzipbxbzpxcvzxzmtr]tynktoelqfhedvavge +hueffzriwkhilam[zheswsymmryugjawlxy]rptwswnecdpsdjujnt[rjyipvpqzbnvtugvi]xkicvyasotmrxvqj +rqbhugeaozfjbqm[blpvbvcvrytbekhjfo]twsrzdeuojhqpaa +fymuqqbklufqakg[wfsqzzrvdqcubxbdr]yzvdgnwitopzvtha[vhrdzzbmubhgovut]tfkcybfbdsxbxaxnmm[ruvfmuciecbfoxbummm]ysaeetmynjhyegk +koqhuxoxhzmsycbr[vbpklymhqueodieomz]jmstuovitaskfbay[mpccjuzuqwkhvnzlbl]jvdqgfkbyzaaeaxjfcl +sbryyigqipvwczxty[ypjxmlzyfjkfqxyxibv]ktqvnmbdtykqyiu +vivvjcfrqdbkyopqjdd[wkpuxloudonlcsutb]wpcbavtlbxcojarsj[wxihbnghmpfppwqlykz]dpyadzmpvgwtjoiz[jgagjiqugqvjnehajcv]tvrrkzjwwxaswbaz +tkpkdqijrxmpddkkau[yljmixrzauogowt]yngihfgazktusprrt[ggqtnksekzzypkpud]rxvvuhfakfcxjieaa[spuvyobjexcgobltmk]radfcjxnsgsntezrerl +hywcvnclwvvcmkdk[teiryduhljxirhrjbt]brkfilaybgtdkdh[zjqmovlmzogwvfmmi]czmtshoirukgjgeug +sdbxirgqauygushqq[itvwniqwuzmpzqbuug]dnrxseaisdgklwodsgq[euqpdyvpyncxocy]ggchswamymfpxaiap +nzteyxnakzfebtcszx[uctynyhtavkzfcudvke]uasdfpeleelxacxq[kyqsinbcwbvlrmr]zelddmnaqlkhmbsw +ttzhosgzkuxfwsy[carsvskefzrusoihqw]qiuobbcgndqqukuvbmp +wihzjoazedelgsojb[ftgarhsuahimrocy]umttbzcrvgzroprh +itojzylgycblvbao[xgmeltpmzvzvyfnso]kuohqnawebyjdrerwty[oslthgekjbgpsnkyk]jifnogopgpnkfdrwi +nvyowfknauliiht[tskhxdgvaggvgsbk]blgylrovweecglu +hvzpbfqqlwjennnj[vnmqrqlfiqeqdmg]hfofuvqicttlcxka[ievkgdwazpamrdzz]aoofvzixtqamcvhbh +yuxckarjmwgyvqjl[nvlegkojdyybpty]hvkrieawbpkcjit[tewpyncidhvdtomjq]dtgggmzwogtyoxrepi +jobfkxxyhcfvetxwuc[nreuagzglpniuwkvui]seztmibtqvrdepqyt[skrxasyhbotymilzgzr]jnhqwvcpirmpnltnyn +hoqhdburqwecnzksmd[gnegphjoyuvflxlujbs]zhuvrcztcfgorbwuc[pjxxfqyqmnhyopaeh]ewbvxrexhvdawazw[kbngpgqwtgkzuwupwj]kmatbuqigzqrzmbq +ltjrhusfbjbciixg[swlhqxnykjxumuifqdd]romkzpszqgaflgbjpsp[lbaqcvazaucueltnp]wovkfmiuwjdqxovf[vuundonjprqrxakp]wxeulnkckdufqjy +xkdmgtutsfumpzteeh[yvkilakqbawvedm]dwwaexrzzsyjpzsn[pxitznlnnvnjyrs]kcnhpbkzicorrgncowu[ogyvmiykolbwdtv]vjaksxdrtpuuyykihe +eyzjheolvkemumxpo[ipwxnrhyldvgewl]zbrzwobnthndxxvthe[gkfleabqwkpjxbtdlt]wywjazwwxwmuqkpwj[omgsyntzcnhjvsu]asknyjsgbofzyfte +kxxpalmmgdqwahfxs[zwafxcjjypzibafhrag]qfnbakvxozjqgbnnizp[bqhtnoqzctknrmmh]zvmyctoitshakgx[dzatbhonulhknbio]eufzjykwmqoignzm +beenkdmzqibirws[majntndkzawkbfpi]biygjiawnioazizbt[yonbljzgueyiuirtv]umjmhspfocrpobmrfu[dwegjekvrmgoaqc]dorpbifeqhmtglavx +sstlfeielfmztngzpbl[alzfrbyqiqangbkwi]qcomrirvulgipuk[mdvsghpkpisxplgit]aykwuhadobubmrdtvvj[pqdycsmawculwsz]oemcgayshwppgbwanxk +qwhfnqzudzysqxwebj[nhsrdvugubbtuuseux]etcjsefcsjblcjgshh +cgagbjtoxvwwqonb[crbqhpfajsdwtudybm]dquyiuqtarcupaeujhk +qjsqqlgdczcqarhftri[rchwsuodsdofjpd]mrpwnlqgetejijnwnr[lwusdojqkioapaxwc]ioumfyxtwspuyztz[dgncyjfldlapoasebgz]raelsaeajwuhnabrgw +tihnitxxkxjvudnrj[neqbqspcfnldrna]qkkcggwjgejtbmggemx[ffhkzdeopnhrdfpbrfn]rucxwfyfiavskfahg +zralvoiqdvpvjkkf[ttvdslqoxnlvnyyskq]joucwcxixdqsagu[tulodbmorpbjnzz]qkknyrgruwgrgupgb +fgfaohmvjameqyl[riumppkgphbaziwbfcn]gspevtjsfjazlolblh[sueqarjummrmwdgzsr]szmltztnwpqshlr +lgcudszwvsooaxhuz[wpnexmkikdsfquxleu]icefstmmxwsrzqoiki +elrybwwbktbemldjqeu[moigtqyrbfwcdtjkm]cfquoomooaqrsuomty +rihnsvwngkabincos[hrafbjoluwrkoaqb]genyvelnsrwqpljgdf[ytnarqybnwaeawssx]bdhppadoofmwwbcbl[acnqxbqukongbge]tptnvsrcborwgumweyb +sesxnxaikeytqds[groytsrabjvakklwp]jzexhtzpseseauk[sdndnglavrmhzyjdh]mpsxlaxqnazayppc +ozkfwwrdoftbpnqwa[mvzpilxwrdeszungggo]fbjxevczxrypzzegxmv[zvzaovlhirczrlwnvk]yulsjotokxaurjibuk[hygvqlsqfygujup]ijtuoskhnrvxmmnety +ssoavardlqlejqfndz[emljlpogavcsyvavr]izdkqsihedwjaxva +wixidnoyhmsiuzwbm[jgqpnkzbobknrufgif]yaarbsalkqgscyv +hgcggfqnkhbjlhhipc[cgcrrzyspqlllhee]czfvtkjhfgnrwwua +ggnsczivqxwhungxmb[foslhzlzqyhcwepvhga]qgqnwrpvfjilhnttbv[uhuhvuqwbxsjxqbmqfs]pvwkiufdudmyabq[ffqrrfjgkmegfls]pvuflwvnbnllckrmdas +llelndaczjibswzoaen[dzvunuujhpmgqdyond]slkfwoyxpgohhelexsl[hvtucjohyvbuihbonup]mwatlwbwxntozpiymy +epjldiafxyinaljee[zfgytlqlzoaauszrn]gvyukiahumemeqnsy +vldhkwyfpfssriaiwe[yuluhcsjdkyumyhnd]wggzcfalpkmnsudzr[qisyeltbpzmkvqr]kmbnsrdjgspckgmwfj +qkxpyonwbsteomlyhxz[wdkzqjywdsbiccr]ojkvswlubvbbskvnbdw[ejvtytntukhcuuad]hspfdjitkfetytyb[hlgziyjqrulvyaoco]rfhwusvjmkzkpmjvrm +lnmjprwzvaboyyobux[lncninvpqfpuaswssjs]vodhkkndlvixtbsdfph[gdufsyhihlynxuluvx]oyczgnpmusuvligf[jqtdbytmuyavcyfaia]mcdloputyodiezffqpd +awulgpuvbkountidkgx[rzatlqccygoyamniyaw]zmkfnkaiuzjgdsxd[dornnqierejrlxbitfn]qyhlxykziurpdxpz[fjaesxiowwxjvoxzq]oujzxyreqtbosriwkl +hcycycsytqzpijy[pptcwgiggnlhewdwfa]aqrsokplrsmbzzovz +szlezpesytqglub[hlmouktdjtcglvvb]wgcrjqyvabgnnirxs[cafdqrjgmugvsjarx]uomjcavfgggsyknjge[syhraisenfpvlekk]voyezwktjlqoirx +ltjosfxwsqmgdrnpyav[revxajvfbpuqqscgxb]pnjpsoikmxwrpbk[frqghuqvbomoddukohb]egfbhndnpnlxjhyv +ydyzmmgkrvbycjgeheq[xmrcsrshrtogjfez]vberqebkqhindvsj +usczwnycqbxdrcfr[papmzhuxspnfexyr]pwsybmexcdgfztkc[jmiatnbqkxmarkaeer]whejsdpzzxkdxgwm +vfiswfowhnwcuusmd[dhhjzfujepawktlh]quzyrwoerrtncnnxup[ekhrriqhoudhiwiju]exzcmnyrtbnxlchf +fmobpaevmkephhfuu[pjbpnzxkqpvoafxj]ickqqwfifesukyx[uzfultsftvuzbipz]jgvjewotmlkzqhvvc[fhfgcekzgmgxosyuac]gwbmgqtvkhyqidnehhy +zbwadipvxkyqwsaassl[wcojcviexybrfhdfc]euliyskdckqzozfnlpn[fsvqspcvigzxlzya]vzabwryzpqlmvns +wavahkemgrtwnvbocse[hnzvxqcxzisfehcy]mqvssniqlwekgowu[cusnrkcbwuichekh]cfvncmjjykeaufknu +wvtptjerlrfvtbywes[ciopqzpfjdoclfyxxqy]sleyhkequxorssls[weyxuuiigtkjsmnugij]onxiowvkwaaycpv +csanwgypabdqhiinan[gujzhrxowlgejtk]mkczaemurigewvqw[lsqtuuxcsuphogl]acfqrkiewfykgnx +ennvxqkaqdppzmj[litdmoukvydtepvji]hfuqcwyuufmxcxy[bilbdvnquchtcjquymu]yjndoqqpyzrjudd +vhkrlicuffddtktngy[opctcwvtlypwglpaoi]iscxtzlmlkjdgty[xadnwdasnszzmwwid]uijlqxpfgkkcmwga[ykqorpoxpbjkepibk]dmuojdumobwfmkvqg +wgcihfnjvadtczgqbj[psdtqjwifivgbhp]ocykhmjfvbppiltqpvv[ermpbuyieexqujuiji]vjioxemsjslsdxso[bmsocpaehaeadsaqzbm]hqlzlnedzwgbxbcacf +reesvrozyerxeid[ymtiurpepvrvnkf]thobixnwiqrdkih[uipdwllkuudcydjinew]lzpxeltetaixzfjxvf[ewlhchkdiewigxy]wfeiqnngnifjzbpikb +rxgukabwlgxzaxjxch[ljrblzdmvcwcxdoomq]ksidvuwcwvwlvrpe[yrnyjokakcbwdxh]nertnqwigrzbtdmj[gxbsdsdmishqjeswt]dsgnhlagonywspbr +jjdfvvurvfljscocvr[ueywpzuumfihiocoe]lmcrxdlkqsouhpimc +qgelmqtmcfsdugg[jpbrzcblivebxazpamj]jpkxrusyqkjnndao[nqcxhhmkpfgrcwhsoyr]wvigixehqklwvrscmz[xutrclaofzczcvfnxll]xsyxrvfnovmohxfbt +aqhrsqbyxtxhsvmnz[pfpclhprjghikyngp]krgiznxuehpzeiy +trqnrkulbvipvmj[mgsdnaqnayymjyp]otecdnzhhcufrly +illmnsgqusbqybiso[fxddafnnoholnqjotb]uplvjosscbyhwmw[jsedsarqbralzbjmyq]sdwkyeychcdpqvfup +zehmutjhkodiqpi[usuretqrbmggvlvr]dewkdjmtingkzuyq[pmmbbozcvplhejh]jzasjfqvsusgnkfegad +ljpcpqtpcpcdttjo[qbmnhadshlheoavsbxi]wnwuahdcagpellgs +ayqxaqtrqzbxyhu[wkplzaetynfxqzhtkco]jpgbztbvmojlflc[ojmgjvfxdvlyzih]levvkelkzftbzwzkow[fmszxqchzjhxtwfm]vihmoqcosarkzsad +nigshquyfjlleujdtw[qmiqiabzqiqafambcv]ywbltgpjxcwlkyahg +vmgyovkavazsxwed[anpflkjsqieufhscn]uizulvgasvsstuhfn[ygxgsfldybdnsleqy]tztuatotreocsrfevpy[yxqmsidajmknyrae]whoydkufyieuqhmqv +jyhhfbftixtntuozgfl[ffrzhxpaezbspndbo]sbwvaoziercfpmeo[tzeluvflupgartnyjes]gqfmzvmpieczbjdsr[zeenwxfhhxbdgjkr]ojqxbcxciclzwthvqyv +olhruodhjmaicslbgw[upvujuuazyolckot]gcwfjukdneuxqreeg[tnnnlficumlgwkdsxus]pxrxdntakudobpo +vdowqzktnmpimsvok[gggjvxecgicglrkuvfb]xtsuhbzqpovnoqhnbs +hxvziijhffbzjnjvgoc[sealjvjgnjnkzac]neuhdwcgtjcvpku +qryaqhtnjvickffebwj[hcgzffksmwbqqdm]zrwihiolnfuqzqpkxn +egbqexgeqnqsaxdi[xghkrttlbmkxgfj]rpulxldvweijplm[dldqxbqxenksncnwhxo]steqcncxfskqcfwfnbm +dhusxmzjdacdrqor[tzblogyadgggzbi]vssexeogwduosdoeo[xexqnjrctzlbkfri]dqppelyoecnnacs +tkrkjtgdhxdcyapamp[gvyyiztulksqxosp]voudpakpaphmrlebpj[vghkfcrqexfgoguvbxv]yronkwfpvrwilnuegkb +yiuhvglusvqtzvngzuc[mfvcrgjuywuthtprxe]vjrrmtbyppmesvorp[ucqdvtwolrvpjyhiolf]eazedskopeknjcqx +segabhonjryukdicj[zvjqilxyvwjnjgjvrnf]gxibvkxslgkpfdhsn[tlbwwiypungvwcvwngx]hhgglxqosunhdvgr[mrjgltlfxwsznpnmdox]bqsgftffsibfruyz +hrtiuksavtjzekgf[vaagjkvweeznlshs]ntotbakgpxpcmqanhab[pqvkabybndisouur]cnjoxldhauoppnqqk +yizxcouxlbjqbijqmj[kkqvlcusdkmkbmuia]pidiunjwlkapojzzmf +dfzinzasgtnjdbdh[wyguangjweruyqm]jfpqpyqydvbdtgqpqt[eryvzkaxiahxekwbp]sywpjhgufixvhljk +jkmabkiiltlvopaxec[utofhywhxjucodwke]dwxatuzwebnyulyt[iajptbioysozunsws]nmfnmtguoqipjmigsyn +yxletutyrgisbrm[ljtuifjmgxupgerhuhb]wpqnfedngiollocqbfh +zszqqoahkvdvpezddea[defewzqptytvhnpzcdu]cxuavzeyqysdynnr[gvmfnqnjwrjrjzphei]pelrqmmykeiamnh[jrjqavultdjecnghoc]ekxawogufyfdmltveqf +morsvbgrpgqiqeplgg[giswwkjoxkgkbonav]lyhrrcwskwjjflawgs[ogjazoccoomohhalb]gjnkzumbxtojtud +gtgotbovcctgtwwc[owthnyvlmcwnctlkilj]eytxalpmzywmwqc +ikznlwbayqdbhusm[iqstwodfolztyldh]amvvpwqwlswcnut +kumjpojktwxazwtg[idtisckrbetbaye]mgqtwjxlbdpadrnxg[eourfrbwgoeoqrlvhv]gegegzbxfyzpbij +mxcepmkacvzxddcpnsf[jviddcgbglreegewbj]qmqdhescnuuswkhpvxn +ltsouowwsvovkbie[huwwuaptbopxsixrb]skscogxrektbbmuwqu[niaczcnnxkymnnuu]sfczdkldegoynqw[mrjssleiutncang]jkfgyuzcaisvrjekiwe +mfqowsxqmywlvauv[fziifhafjuiwdizvm]gmaxzryznwavsaxsv +okmehkbnqsegqinj[dxddmmglnqftiunfuea]todmrlalqdfqfkbq[vrktligspzyclnfz]jwdvkpuvhpwffrnyxw +mybozskxkccdsuuptc[mrlkqwbdhhktuxpzjxi]xrujoxxkxwqcthydsw +jupphmpmynzxsfkr[xhvcemrobysjizesgs]ijjlrwbpchbbiblvr +vpabzrcqfzsejjgln[segfzwfyprsfqskhop]gksthicdjyagobs +tuhzaznrumhuwud[szqusyzaykegklbcdoo]prwjxzrwyrgcouehrg +dfvbjgrshvnvfumqxh[tgnhpzveumwngrnoc]qpntyvcxxoofgsk[jibdpycgwklugip]mgkzhcifwyzxsbuwj +mbdpghflpcondfk[ftzfdsbexmnznqqmfaa]xznzgqjdfkmjzvwni +ojjaanxihagtezp[pxqpdgygyklexhrpc]lapqmhronwsmwbbf[rzuhtemugsniacn]apixdvsnjpsplmjwvn[iwdpiqgoztjamenyyw]zjyidlwjbvevovgf +pijmbdkeyhcjzuwclu[onazufaoibbwzepmbr]jhjaqudvrdoqcvobs[lrwjikvojmgdtkwb]gfxgoeihxughdfbetm[yjhxesdcdudwszwv]hgfdxuejwfuedpdu +hvdutkvozvxwpvx[beubpipzuwaclrev]lqeylkxqdqmcdqd[oivjrkpjzrjywzrxely]dcupjtbrltnguho +esrepqjymnodspvjib[kwdoleplnoxmntjuip]lvrhqceegktadibgh[yfbqpomfldnbpxsaoan]cheitjzmqwdbilm +oakpwuuoizfcsfo[csxawuixxvzzooah]dafrurtufjpuetnui +jmmekugaastsvdn[qoasgnykbkodsgt]lmfvbqomdghvicry +hqznrdvlwnamiushnou[iufqiqjtaiejfqwns]xsgjmqqsvbctpwqcgz[mvpdchozogazbfywqd]iqimztlwajwbxhr +gkeetoqftvsdjhhghre[nspwxohslbgkpyyhdh]glknqkzyfmvjczau[zrzurqfppidpckhmxu]rtawnnjhyjnbvnt[deisyafkjnxtcjas]cshchafpoiqptus +jpkjyjiucudsgjz[mppiltmurhwxvmv]sdhrapccelecuctxq[cnwlmuvyistotoykn]hjzxzneifkwmvumg +uvzuxzcnipyfyuesvna[ckplomuathpfkndodxk]vrqhbliixmzbefuh +ionmypunjczxhry[bvgmqzohimrjmijzkwz]qfzsokgukugmeso[uarvxrewouktpgnghtq]rsnccdtstsegeoudngq[hkvkymbbgdyncilyf]zteoiyacrtwykwzbxy +jnyydhrsrkeujfvj[qmxzqkbwizhvcztzdqr]yllidgevuektldszzjy +nuylrchiwpfvhdumyet[hfgfzmeldvotgtxqh]frzcopyhigfewcnb +sdcvojpgatiidjvfy[zhvymqejqxllelyux]ektbysjcypxfjrsor[kgfvqbereoskymyfp]izmdymjhwwtelesjr +xnelfgdpnrfhdombqq[oiidietkplqnygwsgo]jiltmfqqavrjrvyui +zyuubhwaovcbnaxrmtv[yefoksxqkrkbmbm]ainfhyuonvdvcyegy[nntnxqkqdqattwt]tcrtyqjhokntxcb +hxkbhdfwcraxhdcff[umxxccphsddzavdqn]zsmmtgneghqsrwfauw +kbdughqnourxomuiab[xcjayouykostteh]enwbjtpxpyzaeuhuwb +cpmzhwxdntahvhl[diddnwirsnqchwr]etsizyoarkawzrpfidi +xrruvcmbmigmutacwc[owhorlqlgqujvhos]iddgaukpxlielcko[gawcwcvuviuohmda]bfdceclnseehdeyxv +vlxaputciirctva[qgmwpinixdixaiut]kkoousbfcxganzcffg[cikwetvrztjgefpzsks]jrsyfxydznmupwapco[ooydsykpjwakdep]krlytknowykzzqaafou +dnnvcszortmitfv[sbnurvnwxwmvbdpawa]ewayhapxdfxplpqudro +fsiehjchtnyenvmjfw[obnlguwjqsgylwveak]hupypbuggmbkeqxt[ljxbmifxgorvriaj]tkttmzairwztsmn +pnhgjwzyqnjrkkw[ofyifgmztnzelptkwho]cgnlnrfdgfgjvztpz[wemrlhyskboycpdbzr]azikmfaudvrdhvfvt[chxmcbgineaycjiwy]kjbfttnqgqhkefoolo +khdlanelfapgxqpspe[alrgipfwfdyguqtk]coxffjtxpbqmxig +sxobbewirkvducqxd[ubfbqjccnbtkwpbxqpg]hgsswdjiudnvmvijt +jzbqaqfubdsfinobsdu[rojkizavtvueepedxw]lcsyjeoyieqjcim[nszibgczunpslecxo]louacmgeotayemh[zvpjwwpeyjjdhjc]jidkptxmhccryujojap +rrofkfoljuossrced[ymvijcmdvrzhcyh]zegkwrmeneexpcnrh +eniwjwjnmgyzescoz[semlscmtbagknxpbvte]ysqfgrshborwtgnwtr[bossxfqcyadppdflbr]pyiuttfsuegwjwcxzr[yaymomeitxwdfvsr]elhifdegwfstqyniqta +xauanaojjnhdgcpuwwj[ccitjseyrwjqvaljv]ebbwxnquaqlhgqjsgwc[jybietxintbtpzncpw]wfkwxwffzxwqucjhyvs +ipmxdranyxbmwlo[ueimjvadwbdjithwn]ifmvlcsneopyffsums[ejornegszbqxtosc]iucimozjnkqkeysden[vvtdfnvjnzqbxujml]klrpisgrmdbrqbupc +evolkocwyejqtcazj[dzleqjleocyexjivik]zmvqrxiqhsjtoezm[sskndhlmxrucdyqvop]murrraduofedtltbtg[kuzqpodvwnewwqdil]otvalnjnbexltsbitwi +ppqnetrairzkzlt[hyydyimhgzayzgnxqn]lwubwuvowsyovjjfgp[xbzmifaqcmpyuev]wtgcnccsysrfvbtb +jpecpgdrvunkjfrp[eevsiosfybfgdgalp]veprfliqlxmoctjx[bcfelthvqqxthqwpuoz]beufleuquitnnsti[aslupsydyktxgqsolq]gctlsoauflrjprdn +yekfawwakhkqvpqf[cvenkdpepuyimstwmnz]fphlenyhtsxxeyst[yohciybbsiokzajcwlz]vtqcjngqpamsvrchix +ougrpfmoohiymnx[gorlgyciageugmcbony]ozmvirifntorlvzz[klsgbagukrnbyzsez]rdzhlkpoucggkcdqm +gfhrcutoyproiww[nzgfaaccfrgdbcg]fcrtnobfhhyzmadxjv[vlbueztcxkkbufljse]gqpnxtlrrhclwuaj[sstrllihglystknh]alxmlywxfjwnynbwfk +opeacxklhjwcefmwrwg[mzqwxyfltfqyepcgnym]cpziqpjettzcnktrqi[mbnwwhyxebbececc]tdkduejetkrqwoxrsoq[ncenzwgjnekbobv]yxhgzizqxwaihedda +svatyxdgfofrrkiksjf[mxmrficzxfyykqekorr]qojleucutcqxqryi +prrhfrigzcmemou[zkhokevqzcspzoyt]tytqcpuucppiwio[mogedxwsflwocpkdh]kkqnructlslbaked[sslztcwiwkudgtji]djssvabrpmygljeh +btundrdlcsgtilltpue[jiunnaqqzfgxauqjes]wtdxsfqroorcghqk[qvyzuidvkzmomfi]cgckuokezrtxrgdlo +tjcpdjzfllhwugiy[vxypwowarlatqjlwq]wnpwefpgpfcqqwwrsq +zfduowqkrccccgggmbl[iwwfgrhmjxgljwqf]cminvjjyetivkvhvkdy[ismlcjjywxxvaehvhhm]eojlvocbfkftjkapzs +hzkrcmpwhfnbwlisg[wxwoegwncugpcfwywxe]voktthitecybcfpnz +dcsrtgkbstmkwlzy[pcnwmgmcmpsiyizqx]pzjcivraubvgbkdahk[yydvhvyumdzfmjuso]bfljbkwodikjenu[toxagxhnvgkwcivpcuc]sanysdrigussqum +lpcxkqrspacyzrqhbhr[vdcbkamwyjnxpgjpm]afxbzzxzrtaacbypq[ftbpiplrdrreqesthw]tidlvfojrlctjkfel[iibzklhicpqjvzrnza]bmekkyjigxxtegqbait +duchvjohwoouxgmmxds[qscgkenygikbdrsqc]iovrgoggtgiebylbu[iqqrytrhujzcywwq]ybgfnnhqwfpfios[dryqypecmskrqux]klqhpvydovzggsqo +gwgojmuthbgcalzvdxh[njicnwbqdckxtyxkj]rwyptcssdkdqthiydea +yokzqvwcycvjgouoyw[starlvyjnijeacjseo]iehvlergdbswibmzci[ppmriizuqubzfehcz]jartjkmqzngigjvl[izpxafhxdmckrcuufu]pvkldotwdzdluoubpnm +rogyxrgfqivkovtna[xtahrogngfeygkasq]kpcpvtirxettedux[cdlnciogkcsaras]bupwazalrmfnjufn +eaeubxmpmymzrfleut[eharpivgddyokps]wimaximeayrixnts[paysmyvjuzpjjqr]fcqykmkzbcbyrpy +exvlqvnfmpkxfjwbhol[utjaefsandulqaw]xjrjchxifscadbld[ifrckhdhmptybkhrj]ykcqgygngiwzzyfnxg[plfhikkzndknbpdeeu]siwtfnlbcxuqkrhwj +ljihefaqagbmffbcr[ccmafzhpsvluglwsgh]jioaeefkgujinzlgn +rgysyaquiuyvtojxnaj[gcygzkwqdebiqsr]icaeuutjodsizqzfvj[qapmsqsaoniuinsz]ppgtfxsblzgtqtaiiey[xlkzyyvcgyhlmvnzrpr]htorgwwkbhasrsbvemq +coiurrjhxxkcplh[nkusmllwtsuddqasyc]vyxzujqohjyctyv +briulribegnliapcimw[rgawfayyoopbosvc]owgryasogyewgxchxgr +smseegsurmfktgmefhw[paopyayrwykwdvcjjhp]byayaatpurrllyzd +mvgbtjdigbhhywarz[pfrhqtizabthnqrvvw]azdztfkkfizbxsy[jozzjtzkscklmdt]ucnptpblgcgmkeojpl[nqsybfqdphdncqgigis]yecpixjgagdgkbz +zyuzikehgrfaztne[oaxgeczbaafnottqg]kuuggppqtgrncptm[tcfnyqvqcijfcfdljh]pwntuaixpqfvyoatk[mowgvynrpbvmqlpucq]vgopzmyigjbqlismti +ostutlkruoevsjr[qnvqsxlasjyrdyyz]klwvhuhmvgrlcdy[tycmevukacjlveu]mvxcfqojmrijbubfm[rbodtpwkkidfrnhayj]jsbgdcwbfdfflvupn +eaiframmiukbcixxi[bmqaglfamrqoswuhme]lxvkwmzgauwmabu[kxusdngtifhpmplxl]sfccogjqnblrahch +hcjmrcnzrhznwvtjby[lxmehjbnudevzmhx]ukfmdplzriyztnioty[lqjesrsxjozxcgfaknm]qifmjftfaswtrjblzf +xmhpeigrzvrgknc[drornrcakzujdrsbrvj]czapwkwkwwnkwks +sfdyqdpsfcxebamsf[vehdpjffaqhytqhhbi]urolmsuobvbecvcnv[toagfgryhwfgfwxmvs]btjwiwdrxnpzxlxdsdi +gnjmrczrqiryaodop[etlqbnstgjysesf]ggmbohbzrtfbapbjg +wwkqbdcmlkfwxwdu[firsfuftyxwxpcicu]cntzxuydyjkgkkfvdl +cvcsgxflnidiwtvy[hhzzbmygwugzsfnus]evzlovhsgqumejki[btikqitubnwzkhfyhh]xwxvlgyojlmkwljv +bzuxzgeuobcctajvva[lpqpidtuzmrrnnlgkqu]lhyxsevugkrdimm[umbmngadfcujqpqr]nizwephuepdykbgj[hfheiymxxfgyxyl]zlurubnhkwxdrwllatg +gkwahvrljkerohucrty[lgxqhorgrscmkjqcziq]otxkbzuzncbznvr +hpoehzfotnjpnhl[yrkyqbolznetbgxmy]fblwkhzfebmzavscyyl[lxvxgdkjvtoxjpu]oetusxkoxlpceierbt[faylwjcdxicxbqr]ledknznfnaiaovejww +xifdyajgrrrhakdqhg[qtzmwfjraqbrwstiibr]juciognmzyafmai[lgbmgoxqtjngqpqkwt]zzkhrunuborvoajlvul +ekecthrkwdbjhsy[klxbdnucasemwhlpjj]jbvenwrnvynlfyjybm[zgfxxurrduhtlmsbelf]lxuxlahnrqvjssffj[wzcpjiesgsbwbtnlrs]sofzsskbviyfvlo +jscqvqqdwvkvrqcb[vzfqbgopfnjcekjs]dmspregwlklxptp[lsxjobfksvzwshdre]yqfwrvjrykinzeon +rbtqjtepvufhwpjugj[vkdhjmfkeocnauedxp]vpoqmfpnmjdpcxw +ihhaztfuasflyghkndl[vseslcbeufhmrpyfqb]mtcgpfjhjeowjpqc[cabeopcrmhjhudob]fgeutfapismkdwqxmal[wldzeajldxlxpwfrb]rvyuojjnauuitoofgcm +ixrzwptyltfshve[xwlsfazypzeuauxpozt]nwfgkbpuxeauadrgbbm +vppgbcdybisarvokztx[yuykfmzxbgfwzdohup]vlkdreyqjihmdksxih[iysfrpczrirzbeirih]czkbhrqlrovfkmlu +iaatwbohmiosyiqfq[imajfecefyujhwg]aanaybxebrfpdfxxpgw +qgomsuglksqobwhaq[fzcrputgufyvnesoqwe]ipziztlrfmlaizts[pulgtrdydqegbymu]pxcyeozdofdghkmst +tlxidzqdeqchemiqdsm[hacfdsanbiffzhilct]jtclxgjapfmwhlkn[ieafoftblueqcped]lauckblqborgtjnj +upkkaykvxwvkgwgztzp[jmotfixnvoqrpwsci]wszntutpsjljzmwqpgp[dbnlosuwazvekoplb]bmobthbbmitprffl[qkjfwmsronqjmylzcre]yaulmyfoixmkgjs +zxxsmidmqxjigkbos[iwsufumylphrhyx]uqmpbcxmvhzuppxqopf[ykipifsdwkpzgmt]zzcwzmwugdzckey +ciakjtvtrkgrxvp[yhxuyhyxwytquzxujw]lrxibndatfiqyltehl[nnadhofokmcutiyc]vosxtisllkweiaapagg[vwniutthbrvmqrvik]aixaxvddxrdnmmt +mbjsskcvljlehsxc[cknzgxghehlmats]eqknrogpyfcmtfhso +lcbrfrsccsbhyhurc[mheohludmokwwjx]bezowkrdzwhssgbvydq[kiwqvuebvywyegmdyy]ioskcrvqcagocnnh[zgttakbraxpcsqsc]hmmqufyflbmjlcciqvn +ezmqplezxylckxcqjxn[pdzarngoyfbjgyxqxgt]yokricbfoocmehi[cffrwwrwhmilnyf]uaybztxphgccfuu +xnjslvbmmapiwwpq[qmuxemavopeoiwnebts]xmrajpgpgeojtabumm[tbjjrgipnfzjafi]hcuirvleolclticur +eltfnqblogwvtjgni[bjfxnnmgalahvpdtvku]eingohwswwabsbtb[nxsqsvleqobfpxlaxj]gfsbsvcbbnwtuktuw[wrgcswhmdtssvxobcu]wgsniklaxmadgnjd +kxpuygixzfwrwzpzsbw[uqxqvvupyvvajkcysh]scshpiffohigsgm +ovchugxbmthhhijq[fznmygfcqewzomfgbc]qczlousnoccgyrgs +imtfinjttxvhtcll[xiqmbmrcqdxlvuf]pybqlwqezwrkvikns[usjydesemedszquseso]fhcgyicfbdrmgcnk +aqnavkllyitzewgs[cbbqmbtgufuvcun]iugpkakfufksfitigk[lyqiierbjucxbvaux]szbwsttayzipkcdb +yetucqvgffnvnxqx[pvgczfwkehnfqxawz]vfxegwcevafevvzx[ukcwxvnvfnqvxhfa]bdciuylrvfkmxyi +yvachrqguvjhkrbe[rtlpuvvfdvmtqswiln]jcyqjdmtzndhrif +rphybwiwiszwkkxm[waiaqtuthjgfgag]ttlnqhzfagaregyo +unsmoewlzxuguuwu[dyqsnohyqcommmmov]jipyewobyjdzkgkgo[yphyanakgkgvybsx]pjtzynsvtltzzajc[iweuafprefmbuekk]rwelzzbkbqjwjrw +kluxazqhqmcrvldfv[dbxzgwsfmxettwmgj]rgvfmxibxzbajitnud[vtlbsgrkhnfpmvvkp]pdycyraaqooszqa[eyliotjigekmtov]eiopplzmedvdvmwt +mlozzkwmfcrdlvns[wsdduzxzfvlvldpjvgg]ywqncwocnslofij[sakivxaniergaouc]nzmhdlkxeiehdpuok[zfwtadjlizjcauurkq]vlvtdicnyhseqbeo +ssfmkfdeguuaqdbyqub[nbobgowoboytefejnz]fplpuipnficejfsuid +lljnuuistrsmsjazzy[vccsskujvdwxypuk]jhqjqhfatmuedugl[hufmsmgjutabctabusw]zcoiiovxkxtualjx[zdxdbmbibryrqaubxy]tyayojdxepcpmwi +zursgksbdkuzemouhl[sekbvoxwlmumyrdh]yxafewnovnxivyp[ajjditfeeocipuvdl]ygsuxuhtqervumd +suxzfxizhyzbovsz[dtamgkleqiesxemqkgl]vjuviztkxzchergyx[tvazaqnrstjbdts]wccoiceucunjiuus +gongygcedfxwncy[lxtpoagiqvgiryasha]elmaiygycycdtsclhpf +pkyqsmcicydbmdagw[ayulcaspxpbtnegeoou]welxvngiualigfefv[veqtcxgkgzveegxckee]djmbhovzjfexqaedywl[okzphpgdqtpicit]mistlyyaoyphetsxqxi +uwrxhstckbebnlw[yhflbfhsqhshieo]dvmzzqknrjcnwixhgk[upxuqrlwzvvsgpa]bmnfpjynunfbwunupiv[mbcmrpoxtbzcbijmmu]icdxewwtwcibjotjf +pscqchwjixrhpzprdla[nzfglspgwpsaiph]xtypkrtleiujsfmcso +llcxlfghzjvyhgill[vtqyiyrwujkovfctkk]arbtetvtixtnyavydg[ozxyyroceqktxhpv]maekylkkwdbgwgug +bzagcsgcadoffot[demvhzpdjthrniiuvj]nwwrkguuemsdtvspi[sququtlqggtpszucm]pqaqqxpssdgniycn[lkdwrbxkrkiqdxjc]bqngsdxlxxvxdvqww +wijjgkptnkbnzpqr[zylewxhygsxcrlyi]nanyoaosbxahyvdsett[kojrflwbltrombqxo]lfdpaptujhwfgrrnf[slsmmogpspgpuwnce]sihedfdnqnejevnw +nutyeltkszkulqpt[cpgdmqleitivdtr]veieyzmfjafragrcht[nzudyhtmpopacznkq]dmywgwmnrieiohcuf[ctbktcgxznhoqoxczzf]bqzffvqraxpjdcvt +akgmlcznqnhncjknbp[bwdbsrdxqqmaavngjc]cwyygvcrkagmmrciout[nkpzkdmflljxczogs]mqkafcpxslquyrudeui[clvbdgnkrjdpptqwq]cyygmkgtftxvsbbbfgc +fxlpnkdskynkosqpp[efnouhxslwitteqrtx]xjxojaxrbampbcknga[ugewjlmzbspxhtejamk]nrtflumsbbtkejw +vzrzmtwbxwfhyjvcmft[wrdvmieyzckycagwma]izyptswwlzgivtgyfd[jaujtzdzregakjk]cjdnelesxnhmgkqsgs[tjcsmxghgtmstejjhb]tzqsgoiospxadncn +okgjhnzaxrtektb[sleqpxoqckdrsiwi]jzthxxszazdahvhq[mgxzdqnfscpqdoykr]doyvhvnmbshvkcib[jtrsntjktunoxxn]rmejgievrkrxaziux +fodknkictemsxiicght[tdltamcatgnknki]hzdspvkbgipuvnb +xhhmaiussrmwaxcpoq[agyegtzmrcgdrqiiv]akuxocgoidnfmkffroz[lkkfnmgryejzyvjh]ozdzcbsfmllaiyclho[vseayejwmotjhccg]qfqchpalcnaweyo +imdrphyleudnvhc[lzqochrdcjotjojk]cwsqzuwoflalwatlsd[ctefovkyinrjchrwdav]cmnbuqveexpaxmhi +vckjhzrdtpyynzbdsad[ehjwlyfbffzszrx]aizjcopfbdgrrtei +vfkpxnrqufijmniu[wnwtwpmgtjonykmcsp]mhehavmuivmxhdelxa[spyybveheykroybw]bfzudojcjhzckbac +egipucceijeltfoz[jpyjfgsqdywwjillf]kltttxmvrepsures[asbzcnwdqvfkfkiqqs]usnadxpcdxpjnifm +svsbijigntdtxph[fabzbljmijzwvjlac]kieomhcpodzimrmqoc[xusohhfobyruazi]wxkjzzpskukqjirtjc[iwqdjijjucrslihqpo]faezwwmpfpxenvp +sbjgcnwomllqwavkviw[pxekvxjtjbgjuouft]puzjbrwmyzsxclgmqsb[vtpnaljnxkgwlryjo]lhqzwvnpkzsdndp +fyfyvifiocceoozl[dmjxamblfosaizav]smoyhjbuffpgqdl +tlbdacsdiavtwucvf[npepgjenhdkgfavbn]hvbffufjyehpsoa[xghicdcxptmipfxlz]lvducqyymcqkket +nuystaihvpelybkvch[rlqyflvholahkcxw]gicdfjzhwwocfejthx[jpeuakotyanntiw]sfsavxuyyulvuluyur[asngaxekprpfzsvxx]rliayxmjvsrnizh +axquvvjwulrntbzzf[fddxxjwbdaecbsderd]vjtqwpjlhbdhxjoh +cgeyfvgczhhwbdz[kgsqgnalsysssiyhqp]wqzhbjvykeuyjxgfzgg[mqkzclianfnifjdql]vbeyhsxsfmoeanpnipa[sxmzlhgrezqxsxzzcku]gwmgkijugjwtutmgj +nnjlbnnasmuhskqu[shbjjccjlumeuigoim]ndwzzmbtazttjpawtzl[cnkpifihvkmsallifij]ccpzfojfxszmytbd[jtcogseximfojmjm]bgdltwjrqciyqfifkh +pkdqnzhjzcttkackdba[mucwutymaybynvttts]nndhioamrjejmibag[fndcrctykpehoglop]rgxjwrpzlqapjsv +nccuyvrhzyszqnw[ogdgzsefffyfoenfh]jnqnhnyoyrcnrowjmpv[wmlihztaoyedgkg]vneeegnosrxphish[uwrmezbsmqbxjpx]jgfoinwzlhyixzjzv +kriqecrnaeujvuzw[lruowheuwnintaqqxcl]kcopdidcqinihhmk +vxkblgxcmztnphdzf[ysjhxgovujrpagndi]ezgjwgowcdkfcstfhr[hpxrabjwpymyaolp]itcthqpgksvedadl[stfrippovsfrwglisp]eodicmiszqhwnuymlgn +jznqrbdgjcokdqdlser[xemhfhnwbftgxgjukrf]mhcovplrxcsixrh[xyswalpqqvgsvmqvx]kjeuyxksnmydfkakhq[zcaydzhceioawvrlsm]wzezpqlhvwcgzjzigtn +vedqtirgwrgutas[eegbxmhgykfrwrwy]pzslegjrbmdmeub +lespviexybwomljka[dxvrexedlclnaurw]wzevexsobirvepgpmt[rseoofjlimvxwro]cyojbkugwdzjlxsqd +fsdyxosfmlqfwoqpy[mwypxaxulrbjsfi]ghywyebrmgjsrshgc[lggfwxlpovrwthxtlln]zmtqqhkwabuhvtnabwh +smsgvpvsfaxhocsyz[hgbjpapisxsillo]qsgxbvoijxlwhxpt +fyfpxellnptlqfxvdn[hpopfkwhgcbjoze]sopowsrtqgbpysjfz +qenbpbnrikfrnwpq[nmkndzwogcgtzhm]zhuslfffixielmjaqpb[dtmldnpqizrcbxixto]wpspaoprebgbksq +vhjgpbgdoeoljigkqde[aqojnqwgpiredyffb]vmlvnnohhbwzouwi[rldlmezoquqcodxghov]bhwnyaxsnyyihhgv[gjjezirrmfvkpvfayb]uaxxuikjcwppslge +fnwyhfrnoxxjpubwe[rflutoqwauqbztk]tmbmyhpncgpkzcqvv[dgksjzbgbuzlozns]psdmkqjzxdwvllstru +vnrsujzctbuqnbu[glgsyfmfeuoloohqp]ybhziayoqxsbopf[vtwnbpqxhgsfguztg]xhgvtoqwouusyahedc[zcchxnllferklyt]avgtwloloznygrb +rojtxmpwxsledhm[xibuxgovbxiejlegyc]xihwoxmzghhwlsthiou[ywkngtjxrhhozglwo]zfncywcurhmsfxxqjbt +vxoojfqikhnbnrh[trdtiatykaontxlv]xenfwokorxaeweoz[itbylohijtfjgdtmkvc]butficisomglwjzaa +wkofaduihyxhiyrvjs[deskgjgenvxxxupntfl]ralmugesymrxreommk +ozsnpcdvkykxguzltcp[caargzwxildtwswp]capkmhbfpfmdegigg[sigilgehfnfxlza]trtpmbccrrkpggioz +pfuhqwjjgyzbbea[yexwnbudioaikfsqlca]vaobiurftgeglgrzl[thjpurqfzaezqxfajme]seuekovcvvtdmlixf[mknpvkntvdftjhhhfgh]dlgqajapwlgdjnwybp +jbtzwsypehgrmzeg[gwskjuqbwedzxfcehr]xpkfcuejevonsinxs[upnrxgjqhohlyeyp]dsyhrudzqsibolxnvw +skjjsxxumbobzsckqk[sqlnqpubrayffzs]hseibigmtjtcgbav[khvlknemnqiekxy]fkzvtfscvoatsfqrd +dozlslrkuemgbykifp[bzvnluuiqdffwtf]tignkmwpnqrnmefaqm +ppxwcouehvqfwoenqo[rzmtyyvedmojatvvq]efcstfsjslpqdzvhb[tvmkwnuxestqxfockv]oqskydohbmayshfcihw[pfyulawxqbaiehqvmwi]wluhmctgrkjxqtlmp +uvqfjimhzqboivo[buuulgcbqgfsbup]wqnbktwxwslvceegi +muiuadioyfirjks[xviqxaavhdxjkkccmrx]weauetgyttscsfwv[rzgaefcngzklpjqzgeh]jtnbnuuvbnbjhdqn[idjpczmrbomwipkv]vbgcjfvyvnxhdsmycx +hmdflkjbenjynzdmeqj[ybyntwgyyptizunn]ctijqxbybwarmfzpit +khhocslzxicmlxk[xssahaneujvceofaiyh]swrjwipkknbnrrrig +dvjvkhnqyifqzse[myleyunwsupcnfagq]tmtuvqikqxzdskqcgxp[lblzunblboznidegkla]eaqhztxpgjuijohkdru +mqcasrzjqmhwbhbuyc[wkfahpqjhtwuiybqae]yzfcavhtmzofqww[goqblpzkmfxynuzm]bysjxjeocperndv[uwpxvnpxqhfnaalchm]lyfynynkovtmfsi +wnczxavmjnfgogv[oyjxcsvrrgtpkponga]gzhjlzgxxjkoklgm[hsrwppehbugkcap]zayfyoqorpxefqenxc[apojyrhryhfnmksa]uwnuxprqfxnkzkhnbji +iylrycmvbhpowmdvwy[oepptahrmhsoiskeoq]vtqctnyinxvrvlpl +iauhsxbjgxiebvfhbw[mnjywcztqiajiqxx]iikcygxzeprjwkoniqj[tqycczkvsvlsjetec]mwrnosvszjhmuoiyzxw[klgtgkaxohfaogm]fsxjsgwondgzpdrbbcl +bfqtwsviccqwndca[juqvrcznrlghmsiz]yttbexwewvvoehurkrv[mkugsxdrbaktcqf]yrqebvyxlcqjwcewg +ytoteijopgxfmiokatn[oppmfhkktlewhlq]erycfxfafsiicbtx +xlwbkbenrohodfnmuv[zarnezgnivnmged]vyumskttvpderhzbimc[hvbbjegwdeeqtam]fopblbizbmbhzfsdnzm +rgmnnwzikyanthhp[nvnhsgdymtjeqzurz]mbqxtvwhpggnbcq[apeorjqexywhszrno]qaxdcaysefnpyviduz +vjaljdyyoihduumfo[bpufjkyqjvxoprdwrr]ccjbldnkbzezeznmkpu +yhbnzbxqrvzrguxcbss[unzjeicvhgqtwek]obuccrvnajbvkcmkzh[futhsovnghajatalva]humwbgtpqzjgordah[kvxmlpebzsitmnjfnz]olxhcyqkvfkqdxdc +gsojkejbnpgptcgeubr[lgjcwaotpdouravq]neezbmtkclvcvkqncw +qqdvpngddzjwase[rtgandojrzcpohlpknx]qdnxpiawdlklkscmpa[qtpzakubrncjzbpr]efpxwdvobcigtpu +boxlzukkqchmqrrpgk[ggylyipkjdmbjfp]dkckhhgapbgpmygpa[yfetxkcehafknkmk]acqmjcsvxzptstswuj[atrjixpyeqordilgj]eccoowxhivjiljegqm +exjgzzncnnehrto[qnhzvdfprbarmtdpp]rcdxdswituqgnsix +tokldrsfwqqhetyw[muqzhystnflncxm]pjpmtwcamluvvvdsu[mpfvycofrzebemw]mcyzcqfngdrjaioxzda +pqhnhcbjoqjvgqh[vqkgnojpmbawemi]lampvrpcpvxludprfuj +vbdpihaehliobsbciw[cpaudttavwxkfpg]aidtxeypckfsagubro[fpaiuhpggzpxsctw]danwtjnlhrbfipgfbq +beoecqatqkztrbevt[bdqoxnitxmdqunizj]lgquhovsnjuxqaml[vyfylkbhnsdjoezm]ediekdjfsnsodqep +cnaisicaronpqbihlv[ajfhzrpysjdkxqpql]dfznlmsbuozjlqvf +jbgsemiqgxmtwmdulu[ulbyoughrbpthdlvmvm]dyrxsdesjjwwfmvmkf[gogkkkefuecieipe]nimswajpymtzyleew +haavjxuwhbfxlhfx[rssbpwlffrpnsse]chremerememjcbfuv +losdtsrwrdvwzbjf[daaxdqsorbsgznm]miovihloamfmovzruxk[horqrumrdnjorfw]shihudanlgqfzjf[kqkwshgnrpwudohanr]yohqqtcywhqawfhi +trrbdodxpewxgcyryk[limhtndawxliixkkq]ivxmixrjddqlmounj[cfhqatncyqijnvjv]djqfccmuvdnsylo +yfdgkwopvrudzsww[gnyyumqxrftncsfuaaw]zfiekmyvpseaugfwss[etzbbabtbkdtgbwf]djmbswwpvfsowmqdlw[lpbkaarutdlovoptrke]ukztythdiepqgemm +huwfnhilneqaecp[hdcrdcipgcaxtbfouo]poacbxvuqwkcilkb[dnpryjlynwgzbrnbc]hxillsnqqraloociaqc[uoyktvkfxkdkdopnbk]qvjeuapououufksmwse +lfbrqypxgthlyxqzywe[pcxfduxttmzaxtr]gidsxacxodigyok[qyaamzuhjqqnpdsii]apgfypwqjpygzmdtpj +prkahitlcoynnubnri[rqthrhhudrvryoea]urkuwyabxskqbsyfgm[dyagznreglcdincwie]okvqdhlixssurnd +qrwefbcelgjgpzoe[aedkjvzurwcrhdimb]eaxqgpvkewmjynmek[nmfyhryoglbtdgq]dfnecedmtcrkfyq[omndbxvzczgnojpl]trcocwxxczcxrvjjce +pphzgbbfbqmhbysodv[znbyvvkjlacgjrwlnkr]iyjpdjsjryyqsoblbyf +lziqyyfhruzfpwy[upekwttdqzjxspfzcmw]ptdaapvzenixlab[wvsdrswafuftmysocc]ykzygszayfmgenk[mylrsdifhepnnsst]tqrbrvifghuesad +jwfyweiiqvjfkvp[gsmzrlbjdpgqtbjakw]oofharmppecdotcw[dencjxxfrzxbuku]ygflsusvcrcdznc[fmcercvqncnxcbbwcrn]lkxshvdqjairdnnpz +mfspfyoqeyalvzx[zwdzwlsmnktynntn]eeogyyanaydeykwd +gvwvweokjzagobku[ixdetnocslayahccde]juncfldivihwfpee[mcpxioooaydtjmojwm]satqvbxfkxhfdrgoin +yncjgygznetzrrh[uzkbwhtbtkrcxcveik]gehtfqltpixmsuami[nqhxycgquaihujx]ndtusluyzjwufzdh[ppvannvzrnncxpcfbyy]kgitvwtucjasvtk +feushnbxghbeqsu[utnmthhouoazgbym]jmplltesvrbrllei +ijwbtaksbikedfm[gjckpcivddahwkp]kubvhiqvktkkijchj[qocdkdejflyyzwukfrh]qlnixtictiubnfhvv[ygbwjbjxtvfevjug]dclcjonutlwyqaxx +vqtafpvexofwcfssx[zmlfsfqivipeumubau]moqspxvivckaesffn +hphwnfopanasosexay[ddmqqktxkrurcry]slvhqigvbwonriydzb[ynanjunpszocqrjqm]fkdtvygiiddygcrg[jgumgpiumyhktlhoeom]dkvwoureblktplcjmi +skxhzizzzfrfausiz[nakguftuobnmkoz]buzexokukfscgmmfru[jhpsafmtolwlhvkhs]hznyqntiienjmspy +ccxuwxzdxtfwbpie[shhongtetcwukjbre]nufocpasneteinfkk +apfhilvripbjswmig[tzmvefmwonqiqdyt]szdbbwkkgaqmjkhpuu +gmqjznmtepctxpcfnx[eezqztmqxceenmds]avqugeuarwprizij[uumhklvgcrkfozd]goypuraafiwdcvq[zueuogjqbnsqmjfmxbn]ahgjvoxojaumver +payebfjnonvscnr[nzubpmedfuvkiwqkycu]cvsjgdyfvzippxu[gmiawxppknjjmvm]spdngdktoclylmo +ruhhexcfvomrhibmoux[cjkryzqtfkckieyzuu]vkwptpezjrouirxq[sggqhkgstdzqikfnxk]zxfgbatfizeivfkjbl +qqizwnfaajabeuskjdu[szujizggsbdhvihk]wxjmzdiqugjylejfu[dfygnnvhbvghhyuzo]yeaepigfgdcxbav[schlmqwlcifeqjhixs]ifaxsbjyirgfmwkaott +erxreojjauvvlbsxomv[xaneipervgreexmp]itfaxjxrwueyrynk +lgzbkiqfbgvdnyt[milmskrelgdjggvtmsv]clolytrsgczyppvrhkf +ryvrtxkdydhujxapwjw[ohgtjdaeifxzuhoqc]yflsxucxibqkcpft +srtfcyyruyxzxum[ygeoeyfnlufgsjxjm]ifwimooynxbrsxmyk +rqbnowuwuernuxpim[zzumupyxvnbnngmc]uwurpinkjmkckxx +ikzheexqxrfttoy[uwegndkenfvosfpm]acomhjgdgbuelap +srookpxqmghokjoegi[lhpppxjenrjqiri]mjlixhnrirctrsupv +onuiajxptpjwixyvp[otlnjwravarqmepwyd]hmnvzsflzeyrlxgpwwh +jmpskqdlbuorcpwpqj[sxwomhbdyomudfaisda]nvzxtvytsrqqxbsug +lohoirsglnfzmslubqc[pxhygduybnlqemp]eulzazwozzqytmn[joeiaeuczyygjtg]tnowqyhlrtmumjyrkp[lidmrorxkpcajufzib]ixxyjcoocfdgzjbhhl +tmixfdhagahaqeers[ruioctblczdbnusokt]orpjrznwojfxnheoqbj[gbgyexwumyintxi]tznnvbemvedlpriyu[ibseuzmfqmroeeawur]tkggtpbcgdthcpo +psnbkiuzotsmeklinng[qhigmmuxrpjmhuhxt]urvnxarbhbsouap[chfgrdkbxmgqzdccv]lbopbgjsbykugbzfp +qcneczsyljovqwlnjz[mntyylfgsuvpjdp]osrpdqguiouevrdq +xvfraxzgsypwfmswwwu[oyrmndtdginkvlzdid]xgtwrddwmukzxypxl[mcjxgiimlmsnizirzt]gliezwdntsgoxznesl[vwypsvpvcaeyzivjo]zigujupypwjqljxaie +xayweakpavlylgjl[hxjyhvqwnyixcesj]yuhyulfybuhvqiinlso[eyopyetglenvqzqhnqr]mqcovyockdqdqvfer +sovuasutixukkuuxn[jlvxhosfgqjcxnlmxql]bekpnvhdbyhmmvdhplp[xohnfpbaeqpbfnfi]eobpufxrrjaajjd[snnfnhoikinfhioa]syhkocukumqrwcgw +vhgyxqcvafubikvakos[jfivvuhbnehuqbeyu]dwezavodqhdmujzc[naepoqzmbtiraxhskf]bwuozbexnzmpukgu[zyzfttszjkatnovj]sgkrklrsnjzduvvjans +yplxqjomjxguqxjjix[mvtzncrxfvzjofx]wlhvxxzsdcfptbse +ddqjeqgctjkvwge[cbgnejudebflhpm]ryzxhqqixwsoztz[hxszfpgrjuxxipt]zuvvwbmdvqbqihy[gjfkxykdstapfhu]bzprrjdyjlljxnxb +xbnilldcerusgpejs[pvldiyrckxtgoesbti]ljqvtntbhxrryxcka[gdqkfyumjhgbzzwlvfi]uekphsrzawxriyei +egwrxuedgpcppavzt[mbblqsizmrxdwdrio]dzozhiodhtlvmrjcygh[gdzijmqhitlbhfw]ewvkussgmsnietkiv +oraksmkemjiapbdvqxc[vvgximcdecwxmpbjsr]breycrlgdwgnbjy[oqqtlhrvdyqesttwieg]dksvmqwavamfdma[fndgywlwmsmaivduv]mfweojoshjwolwla +pqpeytynxunxdfyxrmr[krtrvrufaemrmit]kcgnivmpvqoagjmharc[pvkuwynulvvuqkif]mvbbgwnmngtralbe +nsacyqfpikkoqqxp[jdcdddcdcylpjiled]jstcntnjxszhichrkw[vzfusiwojvrjzhevjm]lywsheganczawtqb +rtcpdankaboogxhbqj[vfamnogaxasxdiiizk]whpyanngpggqutan +qlxjojmpesvehkggt[flysjbaoiorosmpzcl]wgpxurstlnopucd[ewkgadgmllrewtwse]icnqidtfsqjurnkw +oifarludgzqkwtdm[jvoeypeqpfivakqyj]dtcboyxnhejlitz +npkttburtggvbsfuiwo[wvklzpiffhreyxkz]uhuynxjezspazaudse +etaapuxqbavybsp[mndpkefjvjupccx]pdcnnncxtrzfvlnmq[ioehzamymeougocos]hcuxkuwhwvjvysbwdo +fjrsuygcrtpzjsw[rhfrgfnkhajlqtqdp]hftckgnarcgoyfkmimd[hkldanmovhazpcpwhl]qomxfqqhkcuqhibrl[tpbrlhcndgbxuuzdng]knqmgdkpbljyufzazki +zydstadkygzvjmxdhu[qtgaglwyzqncfbds]dqwbpmopxmdtkkcj[dcakbjdwzlglkpndtb]nijwetvoulkydqukzn +hbxhybosbnopyxpnnz[juewibpcgkchnerk]pvdtzqclnvdbmwjk[wmtpskdcqiiythces]kbhxnzcnjxhnkuxwft[yetvomdrmxarjwsumqv]pgumogczlkgoiyn +zaeaejxwpzbqtjiutt[eqjjobopoyuoxymtvb]glxzffwpiwoqcciyul +rqrvuzjvcgaancl[pmxugkapydtxezz]lihcobqbdqenjmxyn[aemdyhmkusmchckzqnp]tgiijsdtqtqomptveju[mvaiexukertbkyinjc]pjuulfqsxhbpdiy +jjygzflwfyeiecuztx[yrziwmbdidxrjsouxen]bqkyguqcejsvrkn[hzipqxzodrnsozfmta]xvtakmgzpstbsivyt[ieiucrjmzeupsprslje]iquppghgxqhosvjzc +dwprarljcykiecn[wvdjaraappnffzsih]difkjyzhcyzgzjl +shsrycjlblbrcpv[drktygzuxbooshwhute]fanflcwacerdevozor[feybgvfyookhlsoivd]ixzfmefkgvcdnxqvy +rgogoobzbggsbeynx[nlnbqvcwdyzkbaa]prjegdbkocptzducz[tjanhuiieffrdspjf]bhhziiqbzdlkdmj +yslioeknctqgcwk[szhjocwzxxkbdoykvjj]aowmmepratdcjkgwjhe +yrfhkqrnxzzyvrocav[rqyqhvtneezcivu]hunxsvslxgfzevsvvw[pyyclulboseqorxoihs]akjsixprdzbyqlbupi +tcapvmyxklqgewra[pwxrpoxdptxemahbrot]ncwuxwfzukwcatres[ftlzvkapguezyhnsgl]ermejyvoisweiqvi[wynjqudtjghztati]vhpdjconbhhejafgfu +qkqbjylknnexhcziot[lwjbulvorpdzrhddlm]mvvmstxnwigtstskoo +wncbdjbvzjvrrunb[riirhteyuokxshfmxed]sdcpacarelkhxkt +xxcromhxgxqeokih[xxcnkwhvsylkpfbsj]xipnqesaslmeqsnu[rmzahgumualwizqnf]mutxgygzbvgkimvab[jypnhvoztklxkxyzsr]qhuxxsuvigbloux +yenrilcccypxerlso[dttyspegodnpefcpg]mdhfzxgyoxozmgi +jndnuwbhvaciqduyfg[xoeqacufaixieedbtnz]mpkkivmhxwxujcn +majifpotxhylyshir[mhcapgzvvwadphfid]rjaoxsvqlqyvqgtxte +imhzefgngckhvgqcjr[zysfanhwbnqzysui]zgogpzkcgjeigcwpv[jtxumxvjpotihpmb]zuuueogbabahhwa +ijrqngygldyukndxhqw[xlcwaqfuzjigxddxjn]mcuyklxezeidilnl[atvcyujrcexfnknulm]txxgigzthrbbqna +dvhqjqbgudpghndlvu[drhjjaxeomuoxxnagyp]dbeymfmzzevjydlzk[gklvfdcdfmnfvfslpfn]kssctqoyxognwiem[aojhwzwnegpnydzywor]eyrhiouwbqfpeoto +xznkczuhsgldtilz[fhdcsnfixqbysff]ppbqiltpbrlhjliz +zkfgueqzataygeavus[nymgcgakmtuwnkidr]ypuhovawsbnmlmpo +lnjbdjnhhqeifmi[diompfqeocwmuqi]kdawxfqtkschlgnh[fsmxaerroipesmywqa]vqpxljxwpzudocn[sffzifosvfuytvdzb]fjqfwikuqzhzuthxzq +ecyyeabjhjrfbdqy[xpqhxzehjkjhotrdlk]ztrkutdijjkmgzkuci[hwdxdsprkacxjrjjtxw]fbhbrjzwubhgjdwvpjy[vppgvmthaqkgzrzva]xuhyvaytyufxrkgeb +tbeqtxhfqbbdrvwn[juqpksgrfsbsqdx]znceqzwqsfrhavmetys[khetxkkpwfmkmlvc]hazxybkgkzrmbtqshz[yavtnkwhxppnqwzwj]hgabdrxubvyvgniz +rwvvgwyfgincgkurooy[wxcmmmkqpmtghmmltt]kgtqowxiyjbepqnkiyu[iofgybnjrqtngltajvq]mxsbhbkhddqnfowxw[ptqpbwojwfhhqyv]ymflkhgfnlagbxddzr +lybbfxollocxnfxfeba[tvjolzzkenoxfxqrocd]vkgswdtqpilvbixss +yurvqideiuqwekwop[gxsoytqhoasfouiasm]fyhiugkvhkbcfcshkzb +rurapcltqwutrslalpe[wsqprvdmmtohamza]xmkzqeajamyurualky +buprncslromlgznqper[xjefyfgkufdkspph]wjncmqpgmnjzmjbqc[miovfouyxitayfs]gtrmwhvmgcliwegeg[owvnsvmazybubxfrp]cdjevcehzrminnc +uxhqucibxiemlbtg[dyshtfhtlbjreji]ilgubuujgmytfxeqzrh[zahfdfyzbhexldxg]yohfxkodjqfdzqe +kqcxiuftivavvdv[rbijqqjbhpdcrtpcy]dijrgcyuoqfzronrfps[knxiljzdtvauitad]hohafhoofjhhhppkr +vbanudfbhmhpqsdpdgw[ksrnxrccuenustesws]bgiuwlkckvdplqygpi[ivyzkermofckkcotkj]mhjspcpkcwsbisbve[mlmgilflysuxqmzwp]afixxyabstclpunrya +mnniaptautqeenvmog[wfqrhlcbcwqhwzj]ccouhkyhrvdcbilshrw +zankwrrkgkejsfiwcox[gcxocohqugmgpfoea]cfpphqzxdllapiaxu[ckfcklaedfbhgino]pwdqreudlymfoif[nkaiutnpwnsfrbzqyuc]mscstkuwovgypqtta +dhhvqxovlmkpzsg[loljkdtjkdhgawrpi]ggnnhvbpshpwoloac +wjepglephkicsoti[lvcfarizbzsudio]httbqobbfjoomntye[rrlwtyngtpvffaanlpw]moqdodrnstpwmhjrw[ujoowvjwddvlqqbbzbt]alyeqayozgbhtpsni +okuneqgdkcjggazki[ebqvcuzvuqlvptuoqf]wvcvzlzipmoamnvjt[dncwvnvagpitnxtjo]oadxpnnqonbrrarqn[ruogikvmdiporivvzm]vicubwgqcblvvop +iqwlvhjhfrfeayiclzb[mkafugqikswvpqehb]ezlojhjvdoyzwmggb[mncadipbeamkzbndk]kpewfgsurwlikle +ewpiriwkjrgicwzfxck[iazlrpnsiynlmfi]srfoarhvphakmcyke +faalgogxxzuylnk[zsgporpeqifzknzz]mjkbrrvswlbgdwhmlgd[mxfiiekevaaosozya]klhonreqfikygbmf[hhgfoolpnquxfxoazy]vcxscuxdbvevulug +curbpzpilaczuowrsi[wmyxdecknwrspllfhpl]quuvzoiqziuotvfl +kugdhavlhuperwafe[ecuvibachziwzefzn]oyhrdjgmqqauqhhg +kcbawjisdirrwzv[fugffzgwmricsypdz]bouoevvlaykmgve[glivzpgoripmcnqv]bsmuvtuxrrzjaxko +oyaxoumybizeabdg[quusffkxbmxajbni]lxxqjhqcajdkqszr[cpgzcteolyloguchf]zxowxsyvudncstwk +xmlnrjsanwjmizgawvk[wlyncljroxswzsmd]waxcvfcwftjxbqxpmvr[spiqjeqpfxanegjxf]sxzszkcgibvfkgtozy[nmhjzcaophbfpil]nrwfxurekvqndbzw +xunbkhekkwyvgcerevv[bgjzbkihvzlnnpptr]huqryhbrkspzxusu[dmrytcqghtbbhhzu]lasujmpjaobcnfj[ebofoyovhhzsprycn]belltiuhimwgwqek +ocgmydyjloxpbsyj[wuhymkumnwwcdprxc]ncmkmnedztlutaw +lyuydomeinqxrex[gukhcsjakylfwqodm]hdghwpfhnwjtmafqt[lqwtforyrybxbbh]fgyfkgvzyooifxa[kgxkzeuijywgdhuryra]dohlilkbkqzjsbx +zgckhhqwhgctoun[ajftizwahkaxzich]wacumictegcbysyn[zzxxwgjdzicxreegal]pwquqtaijwqpkistf[vbombdxhjxwlboqdbqh]hfyfujedxzoceqewhgt +rcpaadoewdfxoksbiuf[cmcgotvayrjllxgtm]pmkfrygwrzuobudsah[gonfdimjagiyayni]ctrukcwixqczltol +jrehwmakkkobozzwrn[beoievlwkmkusjzangv]djpjbtpjpdcjsmopzpw +zsgrycgmryfdzqyfj[yipsuqvzrujoaqga]khjrvsadupzwwoasmp[bdpwsunstwzgzawlu]wxaqnorkgypawanoso[iknpjxzhmqermgl]zcsakkbrkkaimtnya +uyuzptbpmmukyrpd[vmbrbmpgvxdxryzcpbb]ltybhrruutchwbuuicv +ddaeptwdykjibuffjh[ufzsfgmcffyxyyywdu]vrdexhgwtdlczpc +csivzntivihwomh[nprwknojctjnkov]uzridiquzokufgzgjs +gcpleovxfcyyeme[crpzfylaxfpuecz]zoomnthfoptieor[ycybuegqfkhlupplwb]qjmvwbggqxwgeuneph +vwqdvgzzotnnsydivip[ohjqzjuzxyncdbenf]suwfgrjkasvyhzbtfo[qfalzqxllbjohnzvgj]mtkkcwoapdjaysfyono[yqdgnieatutxldqyosk]debyxvqoatdeibyy +lhljheobdtmdowhx[lrxkzhxzdjmemintrq]jecllyatwkrhfxru +howoydpdchixptjqapd[nuwrazvltwkshpvlg]havqlubvtfkhsmxwxew +uwapzmqskzwiiqx[xtyqrsajsrljaajwedl]dgcalrxxdsfhqfdie[svghimwbcbmxqtqhjn]akqfoppjhaadsdbela +slbymelmqscfinxle[ahjtgvzldgftnkehsr]vaqtlbhritaotaxvhpg[chcyoduevjsyehz]jncoccdngssgteldzq +mmkzxzkatapuuwwv[odomzyzveadmmicfb]eiptpqypfvfroxu[bxfgwaezkjrbpim]hvfvtenhpyqiohxj +jetnikaiyuylckwz[vonvdfgbgfxrvjzluaj]zpmcyjvkwghaiuxic[irxghevzlcccxfcrf]xicbllnxpzlcmqbgm +chvpdcrevaqnstnw[sofvzfabefeacnniokj]qdasdxrscvlmwcchq[kcpxsnydjsoviwwy]bkdprrvzdinwsfxkien +cwoamgnaytsfeccbqb[vyysuocjjhfoixrtmpr]junwfwadfbyukyvnw[lcwtmcbwdkrqngvqi]vevlawxbwoqcibmtk +seboazoqdqpckthgk[psehbzatcusxwqa]tiwgrqjikjzwabuufp +ouwlbqhczqgbljktjy[bubtiannyvmvkekhwbg]xvrlrmkjwkhzjjlia +vatnmtxixznyvdvt[ftzepafpamiqpjulci]izhqwdhnqpyppuqiv[mjqocpfxdfcgpgmk]yirocnwnrzchhvrbfb +eehvjfqvnwplppeg[mntocrytmuzmuvc]zsfcohpjfqdrtfbbbh[bqhzekffwgpwsbxd]zlhxmhjluxrjmpwkyc[imisxjdmeqavdvztbd]tjlwasbwbrddpqpgwq +ygjdaucrxaqjcjj[zaunyucvccyhgomr]ifczoiwclbaryopmfa[ihkdhvovnvujtbasuip]mabqxvuzswimbitoy +shzlhbrvjjzpyxfqgus[ykurcdmtryyccnysxi]sypivgjjgkngrxs[rkavyufibjkqetgld]foqdqcpatgctaehxi[jpnwjyafgkdytef]apehakogeatmfyalzr +kithfcpkwdhgqjohr[vvpujusooxkdrmbcoo]tuzaiinsycjujjuw[fqdhhizbifrkpjxgyb]rddsmqvmitgdywh +gngbozbqsfrigmuq[euutspovzyvfbgp]gobfhihxxwpndpaggx +dctfsuzvpvttqpgppw[dnilcstcsxxkvwdsu]zqzgahpihqrhohqdtst[eoaatnenejvvuloknf]xwneniznbkjolnouj[gslnbvbmlwerbwvdti]jovdchklafrsncadr +mdgpetsnkaddebh[gypkuqwwtjrzrhi]eyfbmxbyafuenmjdfvs +nmkfscflwwiyxhzgzw[cixmvcvloqdyuikk]jprtrqwqtbrnksnxh[tngpiloomzgdmpryl]gwvmzbcftuthxvyqutu +zkpdrykxtfvqneh[pxvjsvutuauoeducg]iduhzedqopyfgxjwpl[tmzqjdffcpzytkg]zvwkvgwmfhbqklyvai[scusvxtyjacnqtkany]xqsylxxrbgvudrdxd +dbgodepvweaspcsam[vnqcsulaljbjrygsgv]gmfdwebiufbqkaofraq[unbumchixaeviclyqbn]ekpfqosiklnpdjrjq[nlcbhutxymbumqmwh]svtcirskdgbhfjr +wpvcqnrvyjvfkfpclz[wogcckufvzviggf]oulptksetgaaholu[dwwcwhkktrhgkahbs]sobrvezzrrzvlihicw +xlcqxbbegaulczmzw[xcllvvmlrdiamavgvh]fgipexbodvwutyt[pwhoyusimtkyswrc]mxtrsgpuxsjcqmb +euzbhyalpjhxfawzyj[kqcqpulvktfqwccr]etzsqjqzeosiarij[kinbhoflquwkkobs]jvcmusgezydgutda +lpxgexsvlfylfjva[wnzhqafvnbcbcoy]wevgfhsjrkdgvnbta[mvmabgghwicirugb]ctcyjxzknsnpxixkc +hkkbtbsnyzrlsuyhwov[iurtqidtzfwtfhiltt]wokyylscmppxsdqtnns[swtohjqkqnmzxon]mthgkxltaceszxm +jernxnsovguhkpljxce[twgyaawrcpjpnxp]rvjtstsecwlieaeblp[tihicijqmcrggggrjo]igcnuyrhtaooygb[ntscsypsxaeatyj]aslpawlvpctyjzwxhw +xoooyfocrwvsumzzywf[rdovvrfjqhtuiro]eudcowqfnmcvpkdpv[hdyyadaesuxiykkiztt]ykgxpvfilimofxfj[ittajdlxgptkzqt]djtaivnjndcktuvd +usxiyxinxwkgmdmjlq[quaspjeawvvlagjmla]sucqobcfnryoftyttwk[knzzgsqjkwlybeebxrg]juprtecqapdfbkk +jsbpwwkgsmydnreqkd[abmspggfxrehkgk]nzhjbpwxrvuwrsnilmj[qqtarhezcecijunbk]fzskmnquqoivtsaxym +mgekjguhkwyfdcse[ydcdycgmcbzvpkesg]yuzqagwvmncdcia +wrqntmycrllbddv[fzewvpbxklyccfkqsed]czcxxkwfeberluvi[iupovtrukptjstnkex]sukvpgublggqzbecwz[rabiytcgypowllw]dfitoowyhfxjteip +wlqzetmtxlrkydh[dbgzuittqekewyc]vsrigjcntogidwtft[hscoyacwvjejmwxxv]vpljhuinywgbjnynxhj +ydpusekwzovghcojdp[dqycroxflpnyqpnai]znbszhqqfkdbrwzrxr +uzfunassiuljodnjr[tzrbcvrfieeocdcn]bmsircirorbtgydp[wcxinsnngyykaaavhk]xxqbherleuhjskfyu[wfklhczmivpuooytgz]fzxxivrumhumdcdt +mshsdecfbmkjmbrx[fdhjzahrcoydrvqg]stkkbwrlhhnjzts +nmbyxmysrbuejutpzn[ruyrvzgagqgybiqsn]atkbnawkdkildlbg[trjlpfbjomgxvvmzowo]gbmfxqgecnzrwowcm +rtiylcxgfuqngjkyny[mgidqfnevlylaukbwts]vcejabirnbonrowlea[cancfhwbwdlklwo]ifsehqpalixvinbsr +ifyzslyhrydfxbsb[nigcfrqizdtzetpncxt]svvmxecfemwefpgduln +rtzslwquokcygmdws[wvblnifrxmomsmdwtx]scpjyfputxvatko[mffinnpsxezowdl]bsmsjqeowsoobewko +zllghkuucklrmwy[ylrocgxqrlkdkotl]gmmdzctugnusdsrwwhq[cllevhgqwlszrhlbv]prpeirpbwoapvocm[urvubddgwfmmkoyu]ygmtwdiwvuepkcw +hnqlptboqzzpksz[axumkjmbmyxfokki]oyassusfzvnzhlobbme[vbnbcjaiiuqptfyct]oagongosnahrlok +vgsfvfwepwufvvqbo[pmdxwkxldxhlqlqrgp]nmkpknxluiphfrfxm +qypkqkfcicanneyvvr[hrsgqfwjegdzfmyt]hmsppdjbdxxtagyhfkg[ranuabbxvhlszpmlmv]ajsbmdayixczrhy +oykuwlbsupkaaaioxnb[cemxnilkmxflpnwp]vuvzxrfcfhqvmzlzl[hnvnqhipzparrqm]rjzhvguxrwhwyzc +mdjjwbprbzhftjae[clpvjvsxatcbzsyybw]thsopmeuzvhcfppbha[hwbfzhbptymaaoywwiv]ybsfudfmveobwaqkul[argjxabjvcalkomgp]nogtearwoznoinj +ngsqrfixojvtgzmfx[dlttfdsvjeppwweu]ydwjjxycbpopceaj[anlhiebedcpahqihhd]gtsexwhwnpmpqvdxa[qflvviiybebmusv]epuouytlbtacnsnz +ouccxvpsqnmxezei[vmifqcpthebiklhid]tszxpvkgldobdjl +pauvqtezlhvjejl[sczynxdhjpivcogula]llemqpnanorgnkmjl[xxtooqiwqkcbvmp]anafyzhbzdtpcxcad +gngdmikcpsuduzdrd[fchropeunoqkngns]rfdquwdpxtlfxscvhzj +otnuxdwoeqotcogo[jxyhojuczdysbfvp]upffjmvriabbalmlqmx +xfjrywdooyrkvifzub[ygubulhifdmoytb]hjuvaxnchbmrptw[txcsgcehrbszmnzl]xlvcnwmeztfiyhlwtrj[twopxgslxaqihinrefq]tnbdtvwxxbichal +bepzmphvahjuibuvg[zuoplvyeupxvzoprs]qgkpflfygaoxuriy[lgugebpiqnkxxqhz]kqhkfkyiqigodfq[hvaktogguzjumlga]gglqsklyzznufpg +cnzflcqxgiepnsmpxt[hqbdhovnvyecljhzx]vawynjdylprjdky +pxhlvphiiyocalr[dfhohrjqchpblygac]oqdjtliamyneclgc[pzanjswflkxxwvnzm]qbbuqtxwodofarbbl[kiqrgquowfurmiqlqy]kppecttggvnsuzaarwo +dkzdgkqnfjkadwk[bjzvvzwnbuhkinvc]xhiswkplvojtzwwvyph[qroekqfwzfqeqcfns]kyijvgidcjeeenhgea +mqoqfigmgtagmxjt[qojoaaqyptscsfmd]zkpsvrsxzwvllxqpi +cdlfgkthideaizn[klvwdqakbyaunqfxt]egotktupevsisej[olkmccwoqyqzsnuv]szxkfqjshuwyqewmgm +caanbkvopjahzmqch[wylutkdesribnllzbac]fjpryexeaxbopdjhhu +avulisxpjwlldll[tueldewuwemaihrw]vjzctwcvzpyiihnlrzo[cjdkrvxhmsglzllbpl]gcsruqwlokbdtgucp[nxubgtwzjtwhtdvbjuq]dpghqlnwugoywuiqefv +rcfjxvabpkgxhlvzf[ftlsstmreroxhmuw]gcacbophluxzofii[vkkogukgydicpvdqbzv]dvalzsrgykitiqy +sufacmzxrfdwlivdngo[kthzrniwspkdawxz]rudbmasvirscdpkpr[pcielclbxsbfedr]pneagajkflznxdrkejk +qtvidydakxhrbrli[arccjldfmvtskqtot]uxldrdgmtilrhob[mfqcpjzuqeibckk]tjubrbrdjdakrdud +cbwxzgidmrnjqukyl[uhenxvxtomizedkxwt]pcpeskttqdttvibym[egwkoivkdehfrlzz]pjueedjamrhpsnuulj[ccamvzizqyunxwbojum]qguxpdkjsvkuxiskx +ecwvkjdmndzmmivxnsa[unghjtnrlreamcw]fhxvfvlthzqifvftbo +tfzpfvojlegclkt[kdwzmhrpxckfknvmdqu]gnpywcujxlgishx[mhxacejyvmcleasixmm]ggmuguvhesyqaijlv[fcyzsosernhgawagft]rmdvdnkuaworthwsoi +adztzinzrvazerolcl[vypxttybduwxgrd]mggcsuuzlwiilaav +qnamzrfomzqqhozg[zaoqvddnqodpztm]pqhditszsmuiakyelb[sfknkiilewablfnt]mdzzoowquvhayznyl +ovvwrhkbkeqeatbcke[wtzdbpzbnlkuhwqwfz]tupytpbukmuqytc[fpyravdsbihddaubymf]pjiotvegpewlpke +lubqiczycurwvqozz[khnsmjxfeogtewtodhj]xhqksdbozycjszipd[zeptjnsjluccoiuxm]bhvktxgvqjkufxhprr +zflhauqmcaiwnqn[jhyeagjfxbgnzkdr]hdwykmzypixrdykd[zkqqugefunjmuhf]ykufgfmmeaapnag +eqhnlafwpxhjtrif[ixkfnqexzmbmqencp]npxnxbzhuvwqnxn +kokxqtbaemcjzlrioa[ujvykzotvzlrnfg]couurswwzchjzbxq[ympswhhwlvpohjg]wxcufycbxuvmrqekgq[wyljlkzgavafrvjuesw]dmgjejauotkmwgw +mgxyddqzqmprxrdizf[clocszvenjingorxku]zsuqrmnlgyucrgboe[vpenwatmulopddv]expnuzinwtlihej +xqhirwwuirdapgmyk[snyixpqruifdiqekwiv]zogryeticrubznbumf[yisxpgzptlkrmeevgqj]qrebxwojumgwfnf +djlypifibwpydcxrd[swxgzdsqfgksqwxjxfk]kbpzzqheozbjjcdpor +uueutycrzzvuhvniu[nqhaoxpjrlvrtbahncz]tmxvdfxvmctcfzoqiux[gevrghyecnzmkrujmeg]rcyqojjmpxkpeulzl +quyrwpchownternlfj[qijougzkibnhwzvjk]lmrfvudpzxhshukhpn[jvvvelpjnyxpwvo]ztuckjcxyxjvqop +ueyerkamylcyhgszgme[kpqbsxegdljldwjdxgp]afoamkxjljqzpmyef +ryrrppctsvwsxjslb[sbmyepjknxewewrqfsa]gevwiiwpwstdkruplv[ilkxpskdrntqvofj]srpukrzanrqhkprnu[jlujnhxksrytsdazgyt]fcxyuaotwykaosgnvp +yhjojsuhfhujvfk[nhdemperlpgxpud]pdvcrmhvfeudrea +merahlzkjieamdkyky[yeygykydcucbambmtz]tbujyhneuvzacymtgrd +sgvvjpfdcsriacwuyy[rqhuwizydqorikmqqlo]ozsalwkmuodygrh +jfzfzodtrqrrwvlr[ukxwobjdyhtqrqr]qzmrpkkjzqibwekne +xbmixvpzovpzydwprwt[qnquthrvjmqtpzb]utnmpbzmurlbpfuaqu +fkfzgaotoffusnte[ajzqatzkpajlsge]hamnzapphynrppmzwm[teysbhjrdgatijve]aigpcjplbknziprba +jfprgbpaubcukcmp[kddnrlcjywdjcud]nwzsudlamqhzrwlkh[fuavvscfxpynlxexr]szgousvpbqawlkpcd +idlhdjsytmzcwcu[lgwbpjcyvpnecsqfhr]sjkxaancdmlpobiwjr[gzxmhvvugpuywst]oodlrjlodknfxde +bplasvzaijndpfkr[wkvndyztlfkelwckt]kjkbnawptptvful[fmlqcligysmrzes]ujvljnzkznjvkgmsvqq[ezpnsnwrujkrbcmggsj]eghksoebyyfnptgqjul +bjwqelavjebvqjroszz[jlfwuhjucugbvczdbil]xxuinqhddmsrpukke +tgbvekwixowohur[hctpawxelfhbtmwc]axirbbtolsqjclqo[xcxiycbryxmpimq]kutifmilczlxebzxwjn +dvxlbiymdfdrnnfp[nxrzuioymgfxqwxo]qhydikbrlhqldbq[heutjkmrstetknylg]grzklzcisupegmbg[mlvaswdotnzowpqw]inmxskvrovknbngkp +rpoicdzdnkcxqtqule[gcxezbuirojvwliv]bmnlgvtpiyfhkukpj[gtqavwzdzdmqufnce]nwnlyciquxxcwpte +ubleorakkrqlakyr[kqwacjjutlifarh]dgijscrhnsrsxqhogb +niodmrcgcjrihildfw[pmtshihgrssakbouvf]otoaadrggvnzmetmyds +jczcvqxamrdcpnjl[pitcvywsuryykynqxax]zmojzqezwxdnwrcuif +nbmlxeosjvvtihmwt[acformsggoqxslahuma]nmezephkdzghfvhiqq[epizeyqkmseenueefiu]alkiffsdvovxmejkunk[hiwyudbbuondtsqjm]wjioowmqljplehwe +hlcllqbyvenlzcfgz[tkddqsjxydctcrcuhq]lnqsaupwdmxeptzog +rrkevyquvdogauq[lxscinoclyrawtkvr]mbiscfistpoutkc +lwkkwxlifgwimrupndu[kglwcbuugjkujltz]rrgozebmyxigvxefa[hxbstqxfjnzvkco]rqpxaurnjtzymxkvtiv[fgbvzthgqifdqehisw]kwvdvfijmbimizl +yejkpafozbchconq[chghchxxcybtarwkel]ensiprnejdyegqiiu +gsclugkgowknjfkewxn[pgzgezavhgcfjpi]wttjlezzjwqyyzgzc +ndgluxoxlnekaomi[hrrjyflrxyetpub]kwpcbjgszdjimqfgat[ofdwoxrgxjrbxhgep]rdaebrkfchddavjeqap +vzlsrismjdiyfqzcieb[fylncgldcdlrqnbpw]hyrajwsfckxlkhcboe[rxqyolmmgairjktnk]xhrusylermeiiolade[ifiekphfwfzsnrb]szyunhntoeymkuhyvru +ekgeyjojapzhzaxfzhw[nmmzpmouaheahibz]skhvrmqbvgkbismmmw[lpohwytpsrtegazzkwg]cvyqhgsyodcdoyandpp[rntevuwuoyqnhkmrr]szsrcjzpstfyvlf +ioykyddusobfdscqkmy[pmuczfvmkjokvnoxrz]osyjyicdpcwzxvwfn[gimnsriontvxypcxnja]rgedrrsbgienkkwy +oktebiadpwprzrv[wgprjpksbgdyqidklkf]xhhjmhfbhpszdqu[rxjenkcvcswchak]fxqrycgufsqtbxx[pyxvqyqnctpzpggzrq]mmncxhloifiifjpnitw +xbqdzlpfxcznmczfqq[tpfsrcmbflynynshgt]whfhtgfqobzaolpx +hfbetzccpyqauunfsq[ihzoakqpjosfmeff]xvgsqfzcgxtranek[zbtxsvwatcplcseik]vaidkyuhjnsgptupyxq[vprljemlqmphnaau]vfgliasxcpdyayvfddk +jetotpxiincpkjxqmz[sfwjrlxbmpafwtjuy]rasahmylsaswogm +ipseqmdzbeeqjsnvo[qxgatjiqzhwulhgkjm]syofcufklnbeobppx[lbmkistwoiolecjh]qpznlrllrkhxrnyvf[zbhzvyjqzywdpvh]thlrfwmziexkhxgp +uqyiqoznpgsjaaftzq[bfmkexvilwsavbrnwo]pwdssrfyvkefanxnlfr +yijgsezauqoevphn[qboayuokxuaztxd]peepgblucrlstsln[rnifdfjhxdmtfse]qvymgyfdvcpezxdgmen[qyorafkexhajsha]knaylffgeufjxogyel +qlydmvzjoavamnvot[napvavoknajlvmdd]wbjkbdpjhuhxybgywu[umxthkfbtbevasmekcr]adnybcirbnsyplp +qshfqvkxfhgsysl[tzlddkjozqzcpcnx]xjkhcdozufunylwdzs[smgwthhegrzgufktc]myfufzjuvrafwalrnn[jhsmzagnqmhzscu]dbqonhtmhhdshdyatcn +tcdybubnklvamrjlxqo[naocexrxejgekonegma]hlejmizxmhxahxboitw[jteivhxwxftlyhl]kvhbakqlmukgslgvgx[aueqotadcogcmhqeeec]igrfisukejhgfmdvx +jowozfzspexprygzplp[acahqiqszrcdhsylwwa]ppdmkmcrzpzbflgeld[etwowmhcqhkjkkipk]gnilcosjuukihcwyne +ynmgkfpaiocmkybwkz[ztxveuhtztuioruvqbr]grhetxxldtoepqtm[yrucewbvzbphefuf]idcnnpztztemlywblpm[ltaesuehnzfrsflac]bbarkjzutumhskhf +mckdhqphoehsqgjzpzi[eiretkkiklgmfvohgvs]fsaipzocdnrwworpfj +hmdbweapvrpdkhqhr[xwpfkaaejitfikqgy]atylpiafldvqsunu[dwvoqhxryfpiegidm]dyvhcjqkgspgnpw[nkabxwemccqznbpdq]ripivpqpjrebswqspd +xdjfwlhvdtcxqvfzrlh[kcjkplfasydesgzkkh]ilfrxwwjtpmshhcy[gsobusiljqgosoih]dgtehabeomwepoaaahd[gikvtnebxclexmsc]nkcvdazorstiymosjv +fjjpjjjikuarjinig[ytnbvaleddhkesaoaut]eorhszwghtnmzbjipie[fuwkcamkegyilppagl]pipdvxwvkvvvanblh[ipiaupaojxfjukjgk]purmzuzammwgfyle +qclqkkcoimixsiou[psabxyezhvejtdodz]ejzppqfiokslbdzoyo +hrrdaecpdytoxkwdynw[vhgsgzqlqemkdkewg]yeqaoolmodchmigyxt[whflgmjarkpzbitpkl]jqjtyhnxkklkzoa +jxdsjmkuplrowpkta[uzwnxgrrcieqvoz]vtwwzqgvdeornoqxmuw +igfbnfbrrkfiyngqux[aajdqilzidsasrthcnc]xmkzmvqsexhkttcd +bmcwxzeodkxlxclq[zvmqvljaabeakiei]xzujkuxdmumimotsaps[xuhocncyjxiyavon]hslcfclmfhfxxwwrln[dfmghezypyqxtwo]wxaxiadxkpvuwdl +xifaalrmhugjejbl[ioovxgzfgpaqlyt]uayfrtjeutfeprmb[fknrvsrbeucxlyzauy]geowvgcfjnbglmrxp[ocnpvwnagqhgbcvoupp]inzfrbwlliwgcsqgzb +wccriqkjssvswvpgx[apoeqvsvtniwgbt]wfrmnudgajwhkcy +mbyargqesqkprhbtaqq[tpxvefsyzwxvshmict]dxpxmxcluamxmfq +jfxpcnpdgytwhkfb[kdrqmtogtlmxqmv]auuyjbertdteoho[tdendgogvoevpnevzdx]eicpvtgotdkcgwbd[ygcvethlzayahhialf]kytibwtgzhuvvsjw +wfdfxjuqfxjbnjpt[mmaupydmuixzfwebpjt]kssauqawybxkfmcu[juevujxyjrwzewzua]eladywlrkxglizgc +qtkmarqccnxwoqr[vzmovjwxsbhtnmjhqjh]zycttmgyujdefxxfs[tsmxkcuqircrdwtsz]uhqtftqwcxreyvlvff[kwsyvatwweenxdvqum]sjmbfsnprqixqzx +rantzkbrnpwuuvqbqn[qaudnwijvntnxlj]tfdbqbdepavxiewo +xwjmsobvbyejpyjkrz[ozkgsxhxiyuejjr]etkvofiicvcusmmlg[rmkhfcaxfbdltnpwk]swklpvfmxmlfhls[iexmcqatbamzyvxft]djvoysjwetzhocdd +iixngfiuncqysuzf[ehzeqdsqwwjrubb]udkdvfkdtxbddruub[hktknkxemrlnbxwz]qfejqmapclbzhhe +pmviizplesuakfc[woqzewypfpcaiotx]xatiburufdzajqrv[ydsakwhemrgnxgqyli]isubtdzpkcgsoas +xxsqvodorzrnrbzsvyu[apejbcvdjuyujpxewu]kfrcogbvnrkuykpgx +nkvsmhvlyyweggw[yhcjceblmlzpgig]smpwtbqsnklgxxbssz[aiivebyzjnbelkphux]wnaojsgmpoiaykznpj +xcllttmboowsgodsf[dfskztizatqovmat]gpzyyqjotpdkdemcjon +drhgljhvyonmqzkr[ohxhjhvlrpodxwy]mrrhedvtgdxjhjv[golpxgauowhwdoov]rdmuwnfurqwssgth[atspndhxuuhzadog]qgdswxcwwahqnpx +uvdajunzymasgjc[onqeemcifirbxli]mrmpwnqojidvwexxrjg[vbpwisdwqtiteawvdw]rpjzhfsfhrzukstel +owbdsotbsjvrwvdb[fclwyuadozjjeyvkz]uzfygewxtlgjhmfpyfy[qlnlpqspocvcpqsa]fannkpftifaoeszzu[pvwpbdancbljmucxql]tlzusxlphovfyfflj +mmtmuzzulxmgxsmf[djwlpuwrkdpcbvv]jomhrdgighcolvayu[vdxrekbfbxgdluj]mwkcqhjhlrehesmwft[pigmugayjtdhtpweyo]lemzwycbgzzhvin +eferdgkfaasmkyi[nopnmqjuuhhkaclf]twwodgunizovyvydh +baddrprmgewtmypxsp[yahwshbkzattrry]tjjmawkirxcxcpkbdr[kcptwlmozcgjszalueb]msxrkbrbcfnflgnqe[amwmeanfnbrpznz]jkkxzruebylcrqkvyvk +kjagsescwfjkqrykx[sefltugsdwkybwj]jmebeveaticpwddxbk[ktfnvedmpvqufsi]zxjysrfpzfhngjci[yifiorzwyumqotxoch]afedqtkmzpfwnacb +lelwtilhzhzslvzo[ehvnqsjxemjrcvbqyf]ovygwyyazlsulyzhjja +gluywzrxutecuauqi[vyllygndlfkbmgaoefq]cyucodjkxwauafwfxw +dflaghirjcyhylbcenw[dndkrtbxackpdcphny]pnhqmjxdzkjycmdo[fryelfouoaesejoq]tdhcacxuqwfspqevq +yjnumjjyewzjnakmnhv[ulycnyiyvszhifgscjr]xheytyiiyilswfhqywd[jxrndqsxmwcrpwrfu]jquhfnyxudasmomnpx +rspuvdkdzbrbajkj[dcfpcvzpbodrxtl]xbskonezgtixwjfsuq[gubkcjizpgfwqktcc]ddjzlszkolvwqsrnnc +moobncjrmmfonnmp[lpbevkcuzvqguwzbzb]pacppeefawsktrydyqd[wayxdzsvisprqutg]dfysmjhwsvnavpixfl[aphusnjjnvygqikzbz]qmvbpeopziujlsmgx +wfujisugotfsymh[juvkyhewsnpzualwau]ljyuwiidwytmvinw[qicxeddblcxrsdrp]khdooklzguadokmdbd +wdzzexnylrbsniulyv[nbehnwkwkrrkbwirh]ymyaqhrhmbuolmtbz +hsxsderrtdvolsms[yqxhutbtoodvausgm]eufwcczbwgvzxsti[gqewnssdahkfambauv]hrnsadgqtzcegnplnce[fwzpwvfptgbgaahdn]hlvjzdqpvjezifpbh +gtnyrilnfgmslzfju[qwahfyniqetvzpb]txlwtncptwapogp +xblzbbrwjoudimv[grtjaoaytdyffbl]jojuhhvrrgbymoptzi[rgpexwvtgbswbzp]ysyfhclvndltbnnzg +ggtkfikxhhzevnhpkoj[egndynfnwwogwdttwg]gmdytpspodusstki[zokrsgoycmxdzrni]jjtmaoztqkdpsnty[ishkqeyrmckkbcug]jkkfuvenjvphkmbtk +aprzrupkmqzdgncwuq[ototomaxhriosvx]zftevshbmxrjingy[vkrildlncmbvbfi]wsqygjuriitkbszg[ncmxdegpxcdvtgau]iauwjlqoidqpkzkeazx +klbfjwxkpqniguvq[wymwprcxjujljrexcg]mtjifypvknsiogypja[tfbqvlowzqxqefia]azvpxtyghflrgdo +xfiwnyfpxzaizzzhp[jsfakgounppfocql]gcgjvygypcgzvnu[qmwugdkvhxjknumcr]ftgvxsqochhihwnsb[acnafcpwduptldm]zcstejwdgasnvehwyot +repltebkzsojvhxy[chzhbjyllumckfluof]lhdibxgatvxzzhzflz +ilqmrorgodzrbfesczh[udnwlveyxsalbxf]pptfzbjvkxksoarpy[wffmfpwwxmuxfmrvmg]zatihmtjlhvjbzdwr +gjqtwvpdnhhqqqvop[hafmfvvzhqrnugo]xgrpicypdmzyjodfv[vtykgzaxumptsclyf]medyaqnemgrawbizrdz[ykkktuzmryicpimqgdk]wyxwdmdtrxcpdqhsrli +hjnariohxtbsthvcwj[jqplvjyvfwbbphien]yyogxtzdtzodxceve +tqajsqqmgynvntqf[wkovdsdotmgxjmmgmoz]kyffakcqgknonqj[hvuefibelljpsvaa]santzrmyhmmfgsac[xevdggsuztwdjllvmod]osdymicaxgknwafiyhf +xgangxswvkcjsek[jrvhyhmomvqblucr]mhakwjcqomofhbdt +vuuruhdlaefeyjtemtn[rkewcsrolbjkvgnjur]ajuzfefffkgdtzfmfwu[ysqkcwziamybbcghjb]vnyxgeftjtrxeokaqk +ytfkhfnkxsuuddh[uorumsswhfhyjhnoqe]mlmhytefajriiwzln[ivgrtejpggcetxry]gtwlsddrscrxepv +zhsugwnutzaxunnfbj[oenidjfrxbnbnevjwo]wnscklrurlxquzhuwf[fswcwqtoexgrdguawj]knactvqybzyjdjdkdkd[hwncacnowaliolgzmlh]xcqfyvhkoaxjyrxggg +vfcdutbbpmmhmpty[glvdyxliujvbdqr]jyavmvfrqjztetyn[rqngwyfxdxofvqwo]xqcpmtqhrkoctux +zfeyzggpwatzvvr[mwnxvrajqdtijeqm]kyprmauvxauaeuntay[ivwbqplblehbbhi]xfasnjwliydlrcyk[jmalyrxoozbrang]lksylhfvgbezkcf +trqdnrlvoqyqyvjt[ekkkwqklawagqqprz]zaojypuwvzdghwkye +bmnmbsogxhtpved[zffxeokudzgkusvk]qcuxjdhqclszjnxdhd[rsjdhjczxtrghlxwh]vpekhuzoamazdzgufb[bgtmhavdkyhtwlwcqmk]qucpatddwrtjztpxvi +hwqfyynrncmhcsmrlp[vlaqdzxwrpawflemknd]kmvyzqfvlouluxelul +gnzpgjfxtsaiknapn[rganasfzfnrvxir]ooatokkxjxhzxlpmb +mpedacmqtzqmwqyfz[dcofwyebgsvctomzomk]vpqmhpoitpubjorx[thmfofpuparhszqe]clvrtngjajielkxre[mfcjhfugpyymytri]moqcfkrpazshwvh +fxskejrgulaixah[cwshxkapatrgudllubb]vgykjzaukwxoyeucosg +mgfyakavdeymyzxwa[dsvhoxfiuxixxva]jsxfqsnjgroxbmpiilm[kxkakjvwgwflxnnu]denqicbsmzvgtcxm +zfqnynrdbdtqblxnww[nzbnvcjtsxrdmasqtn]yoganlahispbjdyxqx[tuqafqcjrxnybeksh]imhkfmqdjiyfoqp[oennqnvdpveoija]vljstbhqatpwvkbg +lpzjqfcipceweps[indnzphetquilkxnds]oxyivnjttcuectlyfy +tfhhmfeomcdyuql[ioclczzniueodbtpbrp]wuiujzhxjbgdlqbm[iciypydykxiyqies]ptvkrvkragnibssly +ybllxqqxzjlhskqi[ytsvahdhxgwnwql]pzfzcnbxiypkpytv +cchwtoevekjgyqqs[kizgrwqwbhebxlscmj]tjbuacerkadppftxdpn +nofeoaawaeoepwekxty[mgapdpmakihrfzlfvpf]huhzkicazfkvjhgdvsp[eqtuybajdgdthtz]opgdgjzkrfejgawxn[umbakkosxdtfwcfh]dhukvukdwsevvcmt +nhzmrmtfyhjpvbsi[jghcdhdrxermnhnrg]sasarolrztffxrvh[tafrflhiydopcqrx]hbrwebrzutugjnj[ejqrvlcpqxtiuqho]xjgvbnuvoxjdcpx +dkizkqalwbetbepak[detgokxgkgyhrqzzbqq]rmwrqwolneotsyvq[fpffqdefoxfczyfb]dxwsppdngvyskdpfnbc +ygwbidlvlgwncfy[ouryypomwfwmnka]axlhgqfgvrfsmbs[zavmkhmkjzvpzlxpkag]bfewyvdthrjzmmjs +jwyxcjasntveqmblff[mudhpflnaxhhrphuwy]yyvtbzbohccozqj +ckfocickdlijiur[fejgtsphnigervnza]owlznrkbwqhkskgebbx[alnbdcgnktmjlnhig]dpfomgwzkqrpmicih[vovjambzftywljbxrgj]ihljubxxgrxrqpn +pygdmdnnbvnjlkacjfz[xwefajgruywjhysd]soepimqfbbhekifv[frdrobvsbwwkcytfv]aszgyodinewnrfdhh[wztqipflzlrwmpxefga]bxviyixobyldmkln +qujnmepaefnkxgrrg[yxdnlyihixwasibuy]qtmnryswxwzkuqw[ozuwcixlzlbiacytv]oylpudpmjaqgwfqvsb[wljtqzfawkmrnkgkvla]kgdvfppcbpyazklfdk +ijkbhnjcxgsslwtkuca[pxpiyixylcuudtwbt]ooerzoxehuqynhzmhwn[ynmgxzstfawvqihdhoa]bdrhyquybjddpuroto[fhnnpsgnxlnoiiqcml]oaibnvvqupilprgcyiw +dfqizqapoxvqvqixvm[mgrrcrzvjkncxlmq]xqcxnymsyxbtfebdgy[hfdfaxiuiexfdhy]flyhvoppwzigjxlytu +qlakotkuqswwtqx[xnpcrmswyqolvyp]limmsdyvzescvvt[rrpvvituflyuhyhz]amdxfzneiggintiyzuv[cykruetmmqucsbwjrh]ymobjslroztxtla +aiufklgicgwxdlaefc[ofaqlmhnwrwhjlleyt]dixgrgkhhbyopqkzmt[zhqupdyazgumcagdids]mxijcialempjslotrgr[lmwxkdqqijndgoiv]upioecwmfnndajajbxw +oiwkroaymbjtugfvip[hyqrpfdrfjppatm]azycyfsttguvudeq[czujqevgflhvskaguy]llsuolaevinsabqpy[sivsqswxfxlanvod]sswhiwoaxhqsjnynidh +qipfjqqbxflvnxgv[cnxuwbvnxndkoxcxjl]atoznchumwauytpqmgk +doncjsebymuefbxj[itsfdedfjxzxgvj]wpxzcoaybnzzzxz[hfxwmqbaiyiajiorh]einnvliwbxhjzxx[rkeenlrteubkvgrpmms]qbrpoghwjttgawgstt +tyiexegppbtbxzovpb[yljnqybbavpwbwmvg]unbjhlrkpjrqbxrtpof[bvbfvhvgtawgpydlnn]phdnwsbwbljkqchww[galszmgwroduckhyyqa]wgfbqlipsvntmnspge +gmnkhnuwwojgyybh[ivxthnkhjaevliiberd]crpicsxuksahuebnk[vogumtrrqupdjhtvmi]pcezvomttzmdgtelfq +kwvkuklbkgbxoyqo[cckuhlseweoukudp]kuvdtzbjeoormufjn +ewqcguiyodbjoxu[qgqtmjabzxbzjua]twmhfdmuudjrqjpge[xexjbzjvrungbvvmry]yuazblohcojrddhfzg +irustuljdmhlqrettvb[dgsukspodhlhcqabx]auntsiybdcfgxjmsiqy[oqscrcekuibymdwfcy]dmxibunjfmqjoeajyi +ppvngsfdficcpbmbze[gcazeiyfowcmezww]wmphalytgunmpjqatau[qnhrljcdkikordx]yqrsgeczwcwjbqfhfw +iniqgrqelaihnllono[cydssebiyefnljxfdh]ljpqnievldmltrpp +jzjmjfifakcsixsg[zmgaofcvdvtziindqe]mzodtodhvkiluhuzf[gqjguyslrtqvcesa]gwzpfqfyfxnncsemb +gdnmdicwnjwgpjqdw[odoslhoqgocoumxf]vodkzgngmshtzwjpgbn[rrhzqlqeixvxjbaldp]xsvbscotkujitex +nnewsdtgggcgiawo[kmuweskiapswdskgosj]avjieesxujtqfwpuis[tvulfkzyslzakco]sjhbzevzvglgfreyc[wzxjjpsqmctkyoutau]isajcfzslakogyuevtj +brresmfifuolfyc[hkeljqzezcsvzrcue]zswubkhczxziqxlty +xzohgybxqdxdwxfbx[dqcorjuppxguxgps]gltuxzxhdjujuro +hmyrpjbmwmyzijkbljp[ipbngzbreqoqcisbi]ctdmsssqkgrjxozcx[egmuzsmsaiodyyt]ugjpwtglzvshohbj +snumfuurpriffdvj[ojmagqzaktihjmwriyv]rgnyhbobphsfqgh[azucllkylyxgrlom]vhtysupgjwbwndwrgfq +pxjdxiuhqmvwufld[ktpvbdokrtdpxrekaf]mamfsijuemlsyio +olcpnpmilbzxxvqsz[ervozeicgvqskuenz]gcxvfthottngwww +hphpdxpbsbmzshrwmwt[sapciwpwuradyvko]dnrhabfjqorseajgr[abhgtcdijsqfndmney]mmsvtcxmoobkkaeevz +rtvrohugqesutzky[sjsvmjhonskkqwhis]pqjtzpfnvwsigtme[ckthdaxpibfximcq]peoffhphnstzruuhze +cazrddymetaqdtlwn[tqrvhfevxilaptinubr]opnhppmmbfscporp +ctclntnozqwmiqz[qniikhszzxbcatctip]wpoexzkaxyealqhcg +suxvexjrakvhziolw[pxjlsfocisjmwzl]smoqdqjoczuyiac[ojpwtuddbldiaruiamd]upfrpxzwnthfytv[xvfejrchuditjal]bxzvjvhoigqunomnikp +vjuryymolbathzinp[xrcvcqvbklvqtjnpzh]wugebbnbnzzvdmpg[kzdlfbpqgvbiyqwitga]wztqfradlqinyzfzf[abgygmhhsksnvso]kntwamrohagtdrsm +ernvshbquyjfymdthx[jjshkcpnxftyopjayzm]yidkdkommeyieirf[zxxkwqqlsgxpcdwlgq]zpjrhkyjkdkxoufwlx +pnevxgcsnqcdezwf[mnftbwqkrfmwcgp]rkmeslzoffovqheq[vxdcnglifignqqx]xiofsoyrslgyfrxl +bjehvbcqagyczepreos[swecagoxtwhtmzsjxt]ihbrujlisjdftzpfll +bdczzogwjpcdwyq[jptlwjoskogbhfcdu]sbfatvcosbvikmvm[njvcfwokqbtynugffu]qwhsgaqfunpacmimzhp[mulicnvulazcycscjye]oycycatwylztksmrfh +idpyubomejrcwurt[idytppqynyqvdajevmk]mykbzkihnmfcnfg[ghfxtsrfkqppejwgen]rsalcongusjamgcltti +gutkiuskjqzvbau[vqhivilwddgfrckjc]gpkuhglnqnlzndpl[tywjgkqskbdlsvf]bkwvgkdcxvdlvplmza[yeqeuyzuoqbypnwg]wsqmblkggadabss +zgirdbsohsmusxbiqm[xnuiyfzmegcwzuvery]mzjixtxtbdruckher[ylfmvkslkcukfdp]vdwcmqmrsnedjnvsomy[cmmaoebsohfrnqu]bzgstdhoneuzfdxl +wimnreygvgbpvafqrn[froxfavuvgvwirr]avnmgyvkwfnwfgudiks +edgbqmwalgtiurhmmg[vjzrrmbtvyyhwliye]mpykphdsaunzjkpam[qdcecrxescwvlxmpi]gkfipuqdcpcqodcptya[pmdbisdhifodialab]wjucsoipfxzkkzwm +xmurhwryxntmdwwv[bveccegjmwnppgio]rbnnbsqzutgyoign +koftdywagyijtsi[amffypsbtekqlbvlli]avskrcxhiysqqgjja[ixrtkpjnrhljddqzt]ekluhurkjnhlzaudnrj +vqbrbgtnvazwyixug[yrmuvykapxyyqxus]ehhkvomrgnlsofbd[mgwdwrvjwhhuynogqv]nyjsgnomdxwabameuss +upixiwerfsjxjvecmo[lhlmklygfmbxljvptf]qnlxnzoekmyoggtsmtm[wqvqbaemhanfxldq]msobqxpmwqyauii[khuvobspvluvghjhcjm]ysvqvfsfyanmyrbuxnw +xeawztjrtohpimzkw[umvqxdfhsyyxsimzj]kyhlrkyxcnyupqmp +hqzlqinkcowqqzp[vhdaljgjjfqhlrjj]gmsyhpvpblkaxiox[vhbjqxseofvbvzbshv]ecirxnvxadesrbvn +puqpygmwhwskicogo[lbkrenbngbzoljzuoo]tndvmvztkssolnom +dbswyuxfrnypetkm[lyuajkvfqzwpuon]oorgrpkhwwgtpzxc[guszbthjnajqffsofme]vcqjstfdtrxcuscz +clhtmgyxqbrzeipksw[mwuhcxpahefneke]bssxlwoelrrgsqcicz[yyrkfjczqdsglltdjz]xscwwnkcwstkpxto +ajsijhedwsivzvngsr[eqorzqparxhrbesw]lyvxgqgqguifrpuj +sqtxgdsfkbhljmt[ndqljydrgqwwqjayc]lttwcrsejwxgxkuawgm[nefpbdmgtizfijyt]dcxacpeeyuzkemb[otnbznolvwiervj]hdcjffxyhtqdjmaipj +kvohguactjmqrluci[tefqrqmjpzpsazfoe]ptxqfezuvtxphvy +wmawphvozqxqtmq[qqtumumswsrpsnjug]wejsdbswswrjitmq +pdzwixvmkxpsxygxmp[zfxeglxxoxtkkmshin]hxjmzexyabkviollfnk[nfitohyddbdfqekaty]poexvcemyssklhllw +wyyiqymjavixnwcnxu[xnhhsqavbnggdqn]gymwgjatpsojwfj +iqdkuwpqylmwhfvm[bjgqryooacvjmxtrq]dqhwmcafwgedohws[ucnjhrhnvekrgjefzxq]opvzmoismjdmsezvle +ommglribbfvicgmugx[msedauwycskyoios]qrhxlnihnwmktihzp +laphdvdlixghsmjpsq[blbjmefxvnjnxmmc]hnzsqzhaenlzcvoq[ppyribixnyeucvjlv]fdogfvnymyznuuxa[pelyyutyolblxzp]fqgcltvxupdobson +apnimgsoqfmqlgmjsvm[rdpnruzylevyuir]wwfenkdjpmqnvyf +ltskflhfhupifhf[gwtcqaatnfjdgywo]kvguorbhzxfqrhxnij +kqaeviepbnrokflimj[zqzevrvhforlozy]orzvxhevxtzorkch +uhsjyhwppwarmrfed[nsfzcvrwjhfuwjta]nlthyhmaeghygqdaxdj[esqbskelpkfswkvwmr]stzggiejdzkhohumob[snlnvsgiktqewvpxhm]ahojfbcfgxqmmml +idlikoogcxqffrufcqi[vcuenzmwggmbsknfj]peoviabqngzwiqtvri +rigldzvrvmsmyakcjb[wwsutfoucqlgorxnu]bcuixkbifegcmltqibo[szoqsqlnduhgvhlza]pcvurfgchanmngh[glpfevaugptbhqqrd]vpndxitsihovocvong +jwfhrlvcglbtbdlix[vmhtfcvzlshpfcii]gosuawoykketkzdhw +bexfthnhhppzzutg[ewpudndaewfnwaht]wlnqstzsulregcwgmzw[atroqzyofendnnp]idtypgwyeatycgpde +ldhjuqeykeelckq[qrrabgedfafkzize]tfjpjpzsafansvygor[jpuzbjptblhydidkek]bbkncsznubtpoiahot +mqqxpkguxlmvyyk[vnxxtwxblmjdxjkhecj]shwgynlewfeegfwo[dgybavttexfiaod]ruobjihpitxxfwx[frpidegurggjllhq]kcfnatekrezeqoqnpqn +pfelcxohsnhpzjnrp[bmnzwycytvwquengc]weaysvdqdkhrprcpmw +llmwiwxeyezezpt[densmtrbqpiuwryg]pbgadfldspoahjimq[ugideashgoighvpiwid]pdvxaqoufmuvtrgs +ynviititdvccfewheh[phaubuotpzjwqfcrm]spytehersqqwhac +ktjvhepsakhdtvgoq[bnejcglklonqxmygyn]kbywvhkayojcufnwr[ipiujgjwknxzefdphq]zcmnmxqhuhjwqiue[dueiqqteiuvgyggtc]rbsyqjqegupwxbazttv +pgnoazapsklgvmejjr[hjzazneywdxkaki]gfwcgiyhuaovsye +qorimqvzoheryivfi[usbcrrdgseveupnqadf]bvedishdaepjjnrgftc +thxrgxhchpeczth[eneefpesxkgwuxpnyb]efgidnpfdesgcmkqllx[jglvknahzvxyegxxedi]cupoduyjkdpyajhirg +ltabaysmmffenou[fiqduygbghbczdsjcs]drfpocohdrhunajvmu +rklvlmyqqxbttuhuzos[bihsvfaluvhdwqwcz]gbrlkbxpivsdykcjx[qoudfwhqcnbrmru]npquvyoxliacxpr[txyzvzsszqedximgecr]srcqshisakuwljrulf +oiiruuqsdsjguri[qfzwehlhoinyhjv]jwayjxoutcbbsxquluz[kbgrvqmxzsukught]bgspboampsgsivvuwe[swvxxnjbmcpffrayd]txmyfolzjpxdvqzdtq +resryrrtzhhnpbdrw[hnirhiummudhyylnky]gmwqolwapineiokcl[iqptxfvtgabqyxex]npeatmzdsfknpajsub +aqjfwyrtqtrhnxdmfq[xacmscejzrlppqhlziu]bxvptkrvkahygexqsub[vrzjqbhlpywxzenkod]lqvsohrjrymprniyn +obdgtytdzpcbnelm[scsrytqyknxdmzugidh]fpbpxshhnyxedvvna[fgebgketwucucajqip]cdmbxelnfsomsguvxdu +yuluzhzwsfvngixjn[gjmdiyftbqimhxiv]gxjmpelluljxmuhz +icsqqjcnwckhskoc[rhanawaofgbzenhxtfl]vsvuwijhjnaurwlb +zbqzykdfeunfcwslv[fnqtxugkwojhjjqg]vetgfnapdhvbdaiya +uxpnaesrcrudsmuxvk[zmffkqaufmoxgoelq]jldwuldydprcfgod +lcaqgsbmhyfmfszya[brvxpxjvmtrdkdmfm]cphjfsilvnsdqmpxob +cwxycngzriigcet[xltlzayrmdowajvins]rbfmarruugyqhvegod[nbyobbfqprdigngp]nkrwqcyinzutnklqb[ajhqjuhqzahxzjbk]nfyrxcupuphkbxjqlai +xqwbcunarmghbsosq[jrmjtqqlogscgojnldm]bnzhiagvdwgwhuawz[toxpipinabgmkbwhtd]uxpgoorspsohkmd[dtadhrgzvfownrufn]xslrmvbosoeoeaewnfr +lllhkodepygrzesxp[zeohwydmclhucevd]hbnsvtijajahmkclbei[byxhckkvqixiwtg]ekezugmyyavcwxtilwt +jtjbuoavqyjhlaw[vbjakzkppzloxxfx]vibdluddkdsdexqnwl[ofqpidngtagumrk]kfoqunkkvyoassxlgg[ngbosgdywnmslnszsa]hxpciqkkafpdgfki +nenfymvefbgzvag[wiqscyftlldcvsnp]pchooarrvfpzhwvcjpl[wtitvzxuvfufwviff]opjkauasyyfyspzoufc[pelszbarccpqtxvawi]cmkfptidaetuqkwz +hitjejomylbutupmkeu[qdzbydybpabfnlkwkv]bdlbevsgqmwnbolnhfi[qeujppfhpzjbtafrgl]zvirtzxdzoojcwfohx[ftgmwthtcanqrxzks]bsafidxuxypaueoxg +gclocruwassudla[imoknvpznyxchnrvl]qgninncvnnwjovnm[jwqccerrryoiwsqf]chcucyiszjrnobxal +wqlihvvkfdyrhbqu[vizkatngyvpxuwhsfr]mrxbfaovpijyrmtjxw[mrkexdpmoaarqfj]kmnbalnjnbjcsdulczi[rkidvuivyaequway]jmyicruofboygakaozg +dvyalwumbdjeaocae[zonftyvegiqiquqac]osgmsdmqoclweiqi[xhgqrjylvorhpfkh]mmpkmrsideufseuyaj[ogtngcelyserepmqi]kjezmzobtremfefqz +ewovyikmmawzzrf[hcnunsbuuzhvduvyo]pdkiewvktjzzpqwvpdw +pwfklqtvnpsajdvtyoz[gntgytituioaybkpjqv]wteojggsgedrjqdi[xzvkngdojribistpis]xftjryqatcesygfzoa[zddmnkhceqxmznq]bssablulgiiovynaqrh +ztqjirnmogqbcfifh[vyeztcrzfxnegdyeed]redtifioqpfzykudrih +osawcjcmfchcpgyi[ffwhlengegnjvwqehkm]rvtkttwkeoefydz[cokaihziodpeurmbp]spjznidsrkpqhsoag[mautcyrrmxsnrlw]dastqkwpjbubonqagfx +jctsgqoqjqtodkhvvuu[ylovawrcpwpnzkfp]xtjdibtsmpbidvvdh[mmaecjrzneokajhkzc]wbwaapxadknspjujtp +izxxelepmvtrpcb[xwoxroumisiqgpqr]lvhyjhchdicledub +lqvelunldllnngme[lomutagiggypbbw]hdubyftczrctokdhvbl[ymxlvpbfiojaausmi]uqvhoaigwswemktiu[iipvkifnptbwuax]nidlqwimfttkbnmms +sewpymbrjgtmkqd[tldvdouashkzpbu]qjujogijyyqwbvzqe[xmhewesgbeyrqkbfj]heapyhfvnqovmlkz[sdffbynjptvodwocru]lwqkbkjseujzmqprv +oegfarvdcswdpnss[xgbroqaseklyoxl]wticmsitljjhgos +bfhlklvvprpfgxt[wczpqxciyyulsgf]fhlzqdaxyerlulakhbi[xgklnelwoygvyged]ynhbzkafydsmevse[dfcrqsfpouuvsycxi]otcdmymmlomedultqa +pvyddrxqxuxvzfqfl[nipfbquzzbmecwuu]pxzmehysojqnpna +vthwugdifklqusu[fmffwynjxyagyycbup]eaompujnjzaowbxmg +djekvgwpzkgwzwardaq[sjycmrggjjtzpzoq]zgagtgosiowypvz +bicemnivninwfubpi[enghcgyjwfuwqvfcrh]crycaojgzeqgyxdq[zxgbztjljhdhzpoy]ygxqydxramuikbawdoz +wdigyfqqrkjeseda[yjezqvkmaqfkcxgu]dwpaveednjywzth +vjeaiuwrhweqviyv[twssdwyckfswwqg]bujjzsuffbcddcqd +ouivgjbmmsmiezanss[mltubwnsjkijprjae]dxjbngvqbuzmtnxj[actzjkmbxwewlhmpz]aeweucknsntthwwvkmk +hqxgwpeaugpibuu[ftohsergcnnghmultwv]oobxyesnifpglsyumqx[wthgkfckhzdlzeh]tbvnqcewxwzutlf[dbsokgifbtstadxjlyv]hcagowbeupbbxvnnudp +fpgthpsgglztrnrjvs[rznddjrlsjtdrnufotn]nfoxdbhyvovsaratt +idauaxxyrjljwtqk[jtrvbiyczhqigjxfam]bsmzdrpeytyegsvitk +poxzegvwjgitaomcy[eatpylidmcjifnbyt]pxsatbkkqdylippyjd[nuwjwmoghmaptwgm]tarinkguhfewrxedty +whrppysnyuopewxlch[tqeujwwbfviqker]qvintkkgeyiysbl[zmhfxkhgptetdsq]jazfxamrhsjvlcwr[ybdhlaudcktfgpjajk]vnedwkbznnxoegxe +wmgrbjddretekijeqaq[wxoqrjnhathlpva]nqrxdfrjrvsaxzgn[voeyknzetkswzmonnh]qexvtsdihbxdwzeympo[mplyvliqtgoezpr]bsjrjqbvgcrxwnpdqs +txicytmsosvlzftbikp[hwjajoqvcmhmitvqnh]gndimhsqdssjugsp +scuaijeujwpdvdlzf[byroacgumqpoawl]lofgfiiquoftdrrxnhb[vowfcxvalicqrtpvkga]vdehstpbvncodihewhv[tqrtdbglbqthqfjyu]loycwsbaxhkfanhnp +qgexpbjlhcciuhouo[apvfnzznkuufvlo]njoupqjamycblyd[tbviqvflseyhhsmxz]lvpemusmcuajelt +jvrllpusmfmsnwy[yqlfrmtxpvwcllrfev]hpuqtteqblrjbnkx[puadngfdbecfuhuvrqb]myxzjgttaacbhzlpipf[gcjfzcrweoksbywfdc]mnchtfuqvmltrxakz +ywmkwcztiqykpmju[zmkryfneelvtwfnm]zhuiojbicjnfdmsdhi +jhgrwzznkirrskfzfbl[ftjkmxrdyljxzov]wcszeohqiseprjde[ngrtygnnwfandfuvr]lqcatjwzlsbuqnzyhw[hdhijvlmfotjdaaivaf]glgrbynrgpcxjihg +ujtcxpupjndfftyfay[wzspgaqtsinvgbd]oskncvkxhimahafzkp[tbtuibverwndjkyrbtb]vubbwzxvzotdhtvvx +dgjxjkogwuxxgavcit[shbqapwgyduxmjdzs]sqmxfuntsqibnshlszq +byysjubuacsviouubxd[idvdypsyblnsmvvv]llcmcxizvdvtmksphjf +bfphxfyrcoddphmhwh[xvbfcujmhltkfiqaejg]wxxbzpwusjrylub[vcxoevvppeirkcl]bmsyjsnoixvozodjpm +amhqkszrkzcvumwjbr[wgobbxkqavcfedi]blkqusznjzozcwyatzt +chzanckbvfhvxoikx[jeyndyycqesiujnj]midrrqwphhqptlbgy[dcelctfpcmitlbrdu]wmrripumgjowiedxpcu +rbpkmcggsbshhytszrb[rjftwgbycnmyxxockku]nrtwwneopxuypblr[hovauqqiboxesfrqqfx]ytyygtytusfdjwco +ytuvowkwojtdqfjtmj[ssrmnlgjawuaqqrdpv]ugahrlchntdmkwkygr[ojlgerllesmyzdbnvc]zaztsxmsddgciyz[jdimgvtyvojseeavk]qvyupywbpmhgoppfwru +eirfjumdodlaevcsigl[befivodoxdnhfmqwkxc]qjaeppumixfpezjf +lqkzkupjsinhxws[oibgvhxxpewuebro]qbweuxvitezbungy[lapasshrjxcjgdooj]hmxejqpigbcprqregtu[pqqqhbjetacltithm]zhectfbzhtyyvkyazu +ihfadsstuwooioj[dfqkggnfiplpdcsnmx]ylmhqzhlwtxaxhx[yyqzppjaxhmgnlll]orngviyezsyopwfxmhu[pucykxnzcwdwnjzruf]axfmqcflmrxdldubnca +rsaoluhtqbbhahhk[ursokfyrzqvmjsq]xlniovtwozkeahaydy[nyualslnfurebmbnv]ehgueldltahorrpbbyr +lviuzeeixehupjezj[gzwzktpbujzeyypbqyi]ecapnyxygcmgfhgmfav[qclblpzrkfredwm]wcdfuzpoxtmzkif[okgiecyymbnmziyyke]zflgxeqtxzeezvc +wzpeboftsvuwnxel[hmqswpadnffutphylpg]hbapzwwtxulrfaenb[hgsimoxqivllbthuavr]jpxhxohhxhlhlfemuz +xbojluzthxlygkyzkwr[hjnkqiofmyuospv]gaglxxtcdnnbfvjubea +uxtugntiubziynpzbju[onxffxfoxibzzzd]wineojjetzitpemflx[jlncrpyrujpoxluwyc]fxvfnhyqsiwndzoh[lkwwatmiesspwcqulnc]cbimtxmazbbzlvjf +bezefpkmcyawtdlbnmy[yxmpaexxuojocuutf]gybqtynhfakfryzyoot[rzddrwizmjilbaevypd]wjfzotxmdlvmjcklea +psehcauaffyyegx[pwkfxlhukfaavgq]pprwkzrtyyghtmsciep[rbobphjpqsmeuvgrjt]vlobomuxuflrqfwjo[nijmtbnuuzplcprb]snfbebpcogbvkwf +cwflkfoevdvovrmn[xfkkrwrohqcdsdyuomb]ohirkxwgudwyepwtvm[ootlpxttypewmdjq]snhujgngvmxwpmagis[fmbwhgzljomkrdcph]pvfendnvzctahabni +eoczaktxgrdpwordn[rbhnrlgckthgxxuzu]htgvsgazuzqpkjoejg +wwadqndhcahxivixrpr[byzxpjmhnwsplkf]zgwftzdjcyjhuefzynn[pvifqpqbtfpvxmhma]atwcwmmvncdisnmw +cjbhnctazhwdvcvza[ydnxbdfkufaflga]tyxejwcbirwrznjbf[wmrholfqzuzmywhlx]yuglypghwrwzmduczd +sucrzntdgccanozz[dbyodxkqvfamarbda]iwcomrnnifahrolyhj[lldsewtcmdwovjto]kxnjfljadgqmjmmr[jpceairekkatfdo]loulprskwdwpwupvlow +rmkxvrnxpnlpgxk[ymfqtqhsulsvevgy]mwlnvrwgovdeimq +cjytdtwgtpfaoqpo[ekwzzukvazymdgcjbax]qmhoxsmtmokxfyggfsl[ghoubcwbxpcflxaoiqr]mhzvuhnaesfygwphehq +fjfuuxzzuifgatypkx[pqxsrnqgcfmmojf]drmywevzjvfsdwoe +aaltjjojczwavnn[wsduayllqabakudvkzo]lnkpzrwwahybafhnmlt +trzcoixqxcnlfmu[kxdaqkezsbtcrsel]aimhkjueidtzheak +knsjvqpezxmhuhawprd[zfschikoyuarwrpvh]jnwcjfkahqerhof[eiezpktdgiogoghnyq]xumsccawinipdfbk +qdxlgihyxpurnyesn[uoqazfufeeorudagpbq]doynfpdydwxymmbnh +hhxsolxzfchrnjue[qibcadmwrkmkbeye]xydgasalivcqoag[oyblkffxdgogkbjkk]denthwhcbyimeeyyb +oomceudfrpdpinwaw[umnoeimbzecoaprmqr]vnswrzldpdlfoaaaxv[ysmxmvvxuzozxtkar]eatvxgtbqcoquhhzzn +mrgnhaqqyhhvdfoo[brbrzbaajkxnrbkpsx]qknvrvpfabkczng +xtvcrctmszksrojch[bqfzfdhhsfkolghur]dwqpjaqisitqmhpnkxb[omfmirdtvkdoehc]dgogacudqnrtshre[nudirbvfeacxjhb]igdfrdrqycnowffn +vrgmsmohxhgyybr[shaciuypkvkjaqoho]dlwfavdhohiruaef[iowdifdsyckgfaixzbi]rbkuyahekeohyxnyxmo +giaemyheoijyiqs[dditjewdytotrevtph]nrcosaxnrsfnglxyrbh +aqpquczuuqsqfmiynf[rytylbwxvhzymqtqal]olufblbfhnqfhbdpjc[njyewyvnezayxeqkooz]yawvjaofjaqcpsaqnlj +ynntsleqhquylfosn[esbohqcciuuyintjnn]krtinqbvgjtfvdttys[cahezzmqcfayrtijrl]jlquffpwepfjhij[gsryvmkutwbfvekc]xwuhwthwkpiprtpn +wcifpmwramdtgbyx[mnetsyvjbkzlemkkrj]ghtuuasxyhlhdiqi[oidnivyrbzficmrkxa]sshjteaabilnbbv +jpzlvsyhfjewjsp[zaukqnrnkxuyblu]itarroefggdtpkwknhm +nxdmkipobgdhcekuk[edajmdcmxhcxntroa]vgrzzrytukuxdetf +elfvvedwjbltwcnsbat[wlyogdvixiwmkxvshnm]cwhhqukydgvfwzkw[hendekbuynbsgeza]unurlefaaduvvpbi[uriiixudeogykwckty]tilfmprasfargwjoeaz +ehllosfwjnemfpzkjbh[paefpdhywomalbjjwco]jynaehuopnolwbg[cusfqbvxlvqtqbuxgyg]dnvunkjnzqnxcginfx +jfdeexfzxrfxleh[xqkthmkzmmfbesrfa]ddwxrlspxpefvpkhiz +fpexyleujiphzrejgu[rjjuimrbnfxihopoasz]xiovbrwkxkchdagu[rssesjbgdfwwomrpdxi]xurzdbytoxjkwyzl +wtudecnnxchnjhuz[ntnjpmwnwqpqqkcevi]xibzynwnkahwfizkxni +hxvhhsyrupdpvjymv[jgionvwaxuiemcdtvn]riesyfkfymxxite +ndpfqkkiqgvdiciv[qwegblwhxefkszrc]ddticzcfwxoylaheuam[kyqomblpykgrsofpbz]woykqlgorinilldl +lupajnaqxzgawmnb[zfmybtxebhkalxwfwyt]sknfwfxgdqpbnqebbt +qkttfgfwmqxgpbcgqvg[zkftxwwbappqdllajhi]ducnsepawowmjggv[osygsyvnhlhkrzahzoa]iygudcaycsrtbkohbrd +akdvrmxjbjaahjcfhz[nueiutbritxbampij]vjirxewhgmmwlora[uauyvvwvrfhbxituz]omfdcitqhjhentxgfu[fucgdtoxvryasxib]wyvdxqpofoszluslht +eorazrawyakawjfxdtw[bpyrfrsjhfualcoyfjc]gfgrienuzeifrfvw +mcfhxjmwxlcreeloqkj[xlhrkjackiehnqj]iubxmjyssnwjolapvs[tnxnpotyzdxhqamjfu]qakefkzqtcahednybux[tosvyefshtbgasbf]uimrnuvlevqylbpkq +emyfqgrtebopsxa[qwacgpmlcpoitzmdq]weqwomfyfqhxmkjalw +dgnbvzkwdnxzuduvdee[palmkulrnlnjdyeavyi]cjgsjpbxpairrderw[nnoxigqxpkjzjhfxgxx]xdyxrtslnpmmtpotla[undscmvmhuxzohsdg]ghxcwnjphcmvttna +uppsitifhxdcjbn[yiqjsnlktwkbfyho]dpftntebjwcyuih[rrqikyarnxteelpkc]qbjeplbraadbjxoicjn +mqjlmaekarsttdmnl[cwdajzaopmbrikcv]vfhztmfwqcwsbdnyebk[puetgqkczejvdjbfqc]hdkqfycmizzpuoxumm +maldhmhtlcsjqyzrb[zjbfpjpvdszrqkpzf]xspijlrjyzjputpz[mcjmewdtmgfqutbah]hebhshxtiedpjpjngu +hiqikcyyvddlcggnq[ehsopbptguatpmyb]wfayjslqiqivsbrhedh +zriahyyoezygvjmepy[dujudufydhkqlbc]ndalzjrjswnjujfm +silotorivixpdydnd[wtsojgrfgugwoyo]pfihyfhusblbdodtej[hfclibenimixyexhble]gaglopphfrhqxikvw +ddejnfspvmvffpfyozn[odqqmwgalivbswfio]rbbkjhvnszgvfjtgog[fgvufpphptnjcmraha]adsajvzndnajmilk[ukslffqfzyvxyxy]njzcfhdqyrzzctmnxn +ehdmevcrfoeejfedbnz[cidowzljgyawbjmtzun]mxyjuechgccpwlxj[ynbdkyqvibsfwekcjr]qjilshucvucbebxmeyu +wfyklfdesrxsopcnj[otmmdkdasnvomdhef]lpbexhubcjmfwlt[maeuvtcgzoxemnreol]qbwqszxalocdbfbtge[wbvswinrpyzjbfrsr]tinsrsxtrfkizkeu +grorjgszsijwlhxfrjv[hmjhqmbipfjguwkzebl]kgphtaonflqlgbyk[qxnjzdupbhhsevc]tyflwvcpxchibnttwsn[ukpfpknbyacpxmoxzmp]dxzkerytewihuptx +csyjgthhgyhnjuxxg[sjqffhahrjyoqxncjcj]owwprabojlpraeyk +ibcaffhxenjnmvrnog[shqpfncawueqmpyj]hawlfakyplonsim +ftaeqqsyebdeveutf[tnifrefjkddtblslzwd]cbdooorsorxwxugrp +ioigxerknwyrzoztkv[ffkgwjfeowgtoxnyt]zhkhaqrcdjsvxctdj[ebntbwbxzbbqrdasjz]solgzrowmzozovz +jfmlobddfxzipyzyaj[qghvghaxzmuhrpifyf]idrqkcfvatwsyom[wncyawwmennmgio]luzaexvwjhxbryah +pjcydgylusqdexbb[nsoyssffvolztzns]mntwrdacovyfxcqfn +tagdiyuylrtvuyu[exjzdpmovyftjpxgj]vnswkkhaoldjfkwd +atowdglgkmbnrvyt[uzgadzquqpggiapdznk]snpqanyoeufutazn +nltynylwgqezegky[rawbwledrpbduldc]isupsldtvjtahlwjgz[upmovvichcymgwuoqrc]gyjptxtuaqcfixjuanz[cxzbiosnqkeaxlkrxh]yglfdtzazlkxgmrlel +ezensxwulgqdgytdfo[ozlmpzteuyjqrxocn]crruxzecnvrcpjurn +ycflwfbhueatnpimmkm[tbcsifgtkkwtxosxau]vsnyspuvhhfozxgjbbp[adcyzxtdknieifc]hjkfmbmxkrnksewsqjn +gffllhgsmlpxkktcq[wjqwhqrwepermblfolw]wzgcjyrpisbwyhnz[yjvzaqjsmdgazjuep]gregropoulmnagcvx[gfjkkejnxmpfbtecy]ufbqwnifaugffsai +xfrmlrlrhxsownybek[ryhsyltyflhjbmltndc]agtvigglsugquzbc +rshzvotgovlabfxr[sbuytwdobnvpwcax]bynmysulnnjmhkf +cevbpuyyvlutjcuutl[pfwloktlqbxfcogrc]dflejqcyvpasjowhsj[nscuwnjsrzehqamogtw]scemydqevrcuvhwxpe +nsbvubuyjrzsalkdwz[fooatkopdyvkxjgfho]jwojdgxqtlzxgna[vmkwusptfjbgmhq]xkzpfgkklnxunma +jovdewpqyfouyzpegwg[eigxaawljopqauy]cjvieeexlyiovsugif[wtkkpylnxtqrepkjei]jrdmibhhcftoeauh +flpwanunpldmcnated[unzsihvveyitclcf]gqxlznjbnpmiojuunu[kxihijtbrbyhkzosvk]xoxdqctctmroxoppilv[equfcbnltdiwdmahu]sxfloedvbznwctnuqt +wtktlikeigdndpyw[dspimpajtzfzmfya]rmmuigyferofztnuir +thnfrvngjhjrwdatdc[vwmnddbpbakuapirel]qojpomziuupsfysyfng[gkgjyjoovotmjwwgvrq]xxfsycfupudisdbtk[hnieklknhbwcfka]qbanhtkdijnnfegs +mazcgrfwolhhbtman[jokgcthhpopluovccrg]eybriinzdwjyfjes +kwxxubruqgrsifrpuxe[pqjcuxzpykriher]rcjvrturrhxqhjndj[umqwgmhgidzakfnk]nzbbrgxxsmkxahvqzs[rnqcmdjyrldnzrr]nhztvrovbpifyxbcvti +kgojbczgybkjpoz[nyemqsvkokdfxiata]lrstpiuovispfmuoi[jifgmwihkzirfnblzqu]dixnvdkqejtatylghtd +owhhzrmvmuosrtiwaf[xvdujvnkkrunymvh]dihbvchdelxcqsmlxe +atcmrejivvyxxbsexp[cjlvkmfgfjslzeno]liavdjycjpirlux +snvgwihgkhrsgdzysbh[bbyzthwnbpquvtrmlc]cdwvzdogbisfoopk +lccrydahkgmzirmjzfv[rkkdtcqmlfkxmke]xkercumbulkzrlgxng[deksxliclevazssc]yhidzcmnbvgacmdv[ucxflzawmxnmpxa]hrfaesdlnukcblbqlm +jdajqnzqyhcomekhejp[tyrtsgspmlmrbkm]nyfcgbagjplztrigokr[ntzzerjwsgafymxw]ftckmtirxfdfcqpi[pulepgarnqxbvlqmvog]qashqfzwglljzexbnsv +kjvalulqegxybfhx[djfulullrbsebeknl]bcxpgathyauumxcrsmk +fihxcyovovcmukir[gucbridfutpdnto]abzjiaponkgoposvhw[vpqwcnzmovnwdwwo]zrkqlpnszeioesnhk +nyvobmkhkbenucug[dwpifbppiwftzokarg]vxxalauqmooacfmdox[intaxgcpfajzdwmcsk]brknzsnhuukxjuv[fkheyxevpuphuflvzkk]levqirhqhynkthsef +uwdcywcarjujlnh[qvtowczbkenlghcmara]kfhcbnrkorcoyhkww[mzzwrpwwkrnnfavjxk]hcjjzxeynegdpfwdw +xtgkbqtzbeptcxndjxl[jzmbcxsmcrtjtqi]wnhqmctldgxjbrtio[brnnosnckhalqzqsyyv]uhungebnygpsmpzmj +xrqpqqsqazzlqcdglgf[ziiwwokpqiinmqe]stagyposntgyxnh[ubxzaskwfzlfrmw]fimsoerydnghxlg +bdqtpixvllcdhgfqby[xurgfxznrblksso]wgfyjdmpjqirhiqvgg[pbgnckfbdinlepkb]mqbqboepuqheaop +xxlhstlmqypoyhb[czlhqkifhucxqanafx]jkaaxiwxrnneudczrtn +jhcmhtveqenmeczz[rcpnnuwvwiyfjxo]bvtashqfjcnbrqy[ebgihcdcimvgdwochq]pmallgnuofajusz +ltzknsdqzdmbpxipt[golssizcvkrcmquotrj]nqjkcgdagjqzvri[xzehrntfgcnmgrh]devpsfftuonmevocw +wgklxpmeoznyxtukh[nevjkmpvlbaulxjieh]wopqaknwlwjquxt[mxzczmngcaxharjipt]tuvwngrmylububv[ryewaqhshtogggdvc]xpkbqydbwshscjcw +uglrhqngbxqtqmdlyym[ihdwlwfqiwnigvyarcw]miyynkctggbwzfkq[rqycaudamvwoxju]mmnzentjyyddntnpgxf[qjryduwnivawjepknli]toodveiqtzjxjvq +tkgmnxgifkqzuut[csyogdborjrnygg]rpcbucosajyyyelju[bbujqtlveymlqesvg]wvyfimibeynzhsotymx[tqxldisulrhuckef]kgqjgtaluastnwev +qifwiunabpnzezlmhh[ffwsncvlqpulttkx]wlwdpgntblnoubom[fksogvukjlzupwetlef]cfszpnemoifasqw[ttmonrrbhknspuqx]htucxamhxsoigvt +putioshxpafnkcwdejm[dellcuoevwyyhvwurpv]zezpevhlmpzbevln[rigyoryyhoxwlbg]zkdzexpizgsumkuiuy[hycpaavxiqnlngrc]gknnfredhsmpofldn +eknxasjdtsksamfc[dhtgifeezlgfhlyvfdz]xfttcwzqucrtngdpcmf +uyiazdptoxzxbzo[bmuglholukatdbf]ascjhcllcatoapyvn[isqfrvbbkzsxixjuqrq]ncwzqqgudgwrtxvzfe[spqvftdlddlfglgg]zrqbukmufumytpc +czefxpifdsqjjkoxgj[klwshjzagbrgtpiht]xofokkhzlnjplefofcj[xodekgjbgraikdley]dgsrqzqxjxjqftn +ertbujoaanuvqskr[hsgeexqdgsqfkiunhpa]orgvxylmsdlzeyjzf[mdkgzwdnvtyoogulx]nbapgjckrfxeniiqotx +wgywdqnvxooqjsefac[qgpmwggewotnmloq]bqdvbzpvqwadroh[bvbsnhmdurzcubvsno]ndwqyjenerqdupuob +patbwuitsfeqvswby[htsntyfmofqldcbwgv]zolnndvkaimzdmevb[feyvwvkelmujnppg]tjajsdtevgjukkgrwr +hoznvyznwitnxlvu[kigfxgwcrdmfwgsqnf]lhiqoaqezmswakdcd[gxmjrmvoxkdfmgcpqnn]ditkwvolcazfuxzfroy[qqlbrrwfedrgtrgm]iysjaakrbnqicefqxsr +ufrkrtywkhfhfah[vufpfwhtxzbdqnraz]kklboeggazttzui +tplrraxhaaaoczdpg[vzbnososnioajien]dvdckrkfdetoofpi[bywkgphzoglisygthku]gxtnstjmffnepin[evccrlnwjthfxhhqzc]lisguwkfwswblzc +lyluhnglmfippljtwww[wnkwnwwsasqbrnlo]nilnannzjbpgbjs +iknqwrvlcztavivxmh[vtfyhjzauqbyjchjt]zxmasnczpxlusknrmtf[yvfnxlrwgfxkdlj]otlivjvbvilezalha +xbrzzccetyjzrlt[buwwhcatpcchdvhel]wosdwuuzpekifdhhvpy[twwoaezcowxvioqsrrd]uuygkhojhlcofza +wqeintsbeqzjpuvx[wqlcamjmpbtqqzjcy]czhyqcurqkfnnkoltja[lozjcddygpevnxebmqd]avwqdpfxcrcvmalaczo +aecvebozlythtcfzt[uisdkrrjeboxpuclbg]sjxcgygpeuirukx[zeoyaxgdyzfkprewiyc]rdlnzpbwgztivpdon[sfcqbpfgffkchksmfjp]yfgrlxiixyurxupuoij +vnglyokdpxlgphpw[bjnaqkjojazyryswr]bekdduuwrqabarzwzh +fcggyliuipcvnimphib[adkvjaembjcqbcc]envpiocijefswhv +pgraswoweceiftu[khhpmbjghxgmhsud]axqjkekmecwunefk[pvelpeorryjcstk]lruensapttjtyxnr +jomdrazkwryxuyc[qolcqhwdidalguboza]fcofbrgowezhbyqckrw[wurpvelnhdewfoita]swxwyfynaymvrhleuj[icdlergnbqmowlxjl]vxcwgvrvpdejoybt +axbedlkxkmbvwacv[uabrmhoepcgtsdmjjzy]iqqpitszpejeeophjmv +gmltcuvpeuofwteput[eyxdpnceufobjelir]hvajyjjzgkyrtgvrfs +sfyyzksaymsvykmr[xjewfmfhhbrmwzf]cbzjmltnzvcodwtytbz[ewgckbdvfnkkyxyj]dfcrjyoakdyggbsxm +wxjalqmicwmwkzakcy[mothnmmvgypeacecvz]hbjasxlsbbgxpfdptk +qtsgwqpihqjgmjadkjz[skpdhegagxxbmayy]eaojrccgpxovqpi[ixyljrfgswullqnbzdz]etvomvkwpzpxxcj +mbnifyngahvfhtfhql[azcbyxkvcnoatuo]scgddcntikvavaseu +uciiofzqjkhndnzx[hoyxdxfahorycpfcofk]epeazzccheaegyobu[sculkaizijfqcrpjl]nrvfdtpvgoqioomvmv[axmvmzytxnbfcsjf]fccriiwmdaveeyamwp +sxizvuhprsyyxgfqgqx[zwszjxransryibshzw]ikquiagnkoqexlsqypb[zpuqrhaqvkuvhiqk]pvuqiqxpjtsyqgcyr +svjudmyxlshxbbvawl[inswkufalzfwoumcv]hrobewddabqsiuej[ulhptknpxcwqxjxanjd]osfyeygptwfjmvrma[pnuynwtwuulsizw]srhurplerqabvouelhn +islwmbcjeljkceppiw[whvcrbqzgtcfbcuv]tcyzkgyzdaekgnzzmz[ddefwmnklcddlhow]npzbtwmzmhjtzljnr +lgdjrkugqewlqxvn[wtvrzflzauwcxkyp]qbswluceqlesdfwy[kbtmzcvoubbiqfc]honrvxwcqsgphvkt[djuuancygxacmka]knseftjiunzuxdi +miapzpluxnmdfvi[edlbwflzitzghywio]vizzhfxgilwpwhr[ochurvodstmhiypp]rycvogpcnysngytixb[mqnrhpbvojfefcicx]zxqxoinunlkjvetkvrv +spsecopdywuheqbnm[npwovcwlwooxqhyp]hkuizzsdvysvhvmlc +oqchahhsrywoeteaeg[ucowjiwrzkfhyebbco]efxdrribepcvduwjgf[nvyogembujkkmcm]kmfrlcaeawrvofxrim[izjebqewubrbvguzk]ngmugyprdvrbqskn +vwlikshqcpgxqvqshv[izqveivxdxgytqgdk]abnvmprwbvwmrwlkkp[iffpegqsxjwfyvixtwk]iseiapjkgnkcepr[gtfhysdedzxwrhcgt]ktaeihyqegeozdfuz +aieqqwhwfwxpldni[huyxdcvpglqqkeyeia]teztoyeycqohfli[uqvfjzbsvttphqxsy]afsxoqbqvtxtgriuzjm[psumrbbtxdxlwpk]qwpuwevhjellemzp +surpbndlvplunisu[alnojwsmgbtaomke]zjyikoebzazpwql[lkgsnxodocsrniokroa]mrcipdncevvazafvkb +dkszjaqhbkyxwvwj[wykmzcvppharrax]pvrqzqhabqtuhrj[qfxnormttaxsldn]kxjwkrjwvbiutgnfnw[mbspfflblosguqzt]nifozavfsfkngds +uwafdvptgkfikprb[xhmrwxqxnbkfpdz]efhnfwvovbvglrrt +kozevksryerpsrgmub[dbtinyialvlkgilue]pyqdyodlttsnrsmfvca +mgfmdcxibcgzhrfmm[mzvyabccrdzlaiij]arnetejwseofkwqvxi[fylixbrjhxdfhiewbnb]wvndnswxdnbcktp[tetomqdkfmcndddruy]biuxgrvctlbbrqmxjp +snjnfgbtgpkouxlpd[vapbqurlxyrduxqy]meyhgdsbvkdadsfozf +fgknedldithvaoxqpl[mihhhdrtpjmoridqamt]vfupazymsipoana[ngqkziyavxkyukp]qqysmfkyaxbuytr +fugbgojgdeavlmrut[zpukymkjkapibmhg]mmdesmcwbhlfugkdiz +lhhhlyioiiknkray[omilmxkodlmvzhkgbaf]cyftkgjpvjvdnortlj[ifljdtkgscmnmxsq]nxtettqnuaotfsh +whayrxopbtvnpobokn[jfbobalkbfjxcsn]jjucgwedwbcfrdginaf[atdoatealbqhiks]alzapbxuvmivqfgpg[qhzdwsbvcbtlpchem]pxxskedydgisthkatn +xzreuonsdqobzpxr[zamxighfvnaxqum]olbigclentyvugtuvg[ysrgcksohtkvcqmksqr]gnaqqezdmnfbbnir +gmmabzkwsehkwjnevvd[uuzdntitdazeykwek]aebpajrwpyknqgx[kczhcuveeawmdiwljzl]ugwigmilwkczrcqnfo[piezzmfwnfdhnlbranp]qhremthdwdegacvptfe +tcqhlxasqmbwzuiuirp[kfqoequocdsfwqt]ikhdkpkmeezfzfyyilf[lrorfowgsqkflwauhu]zshoiccvfwohudsmdcr[zohspdmqcdvgagdknr]zabaqgsmrwkrtcuyct +fzanofpykognmio[ladtxyissyfrssobo]xqpwrgdmglgqhwawqok +hynipihszohrqwaezga[iqtpgjpngbwhpailzg]wfgimkpjrjnkroueh +lpmrkesaqdojkqrp[dcgsayoowgpiwam]arphrffqpcdntlxsza[ogneaqyckrvdcvqxbm]xlogrojsovrzfzjtjbd[qjoiyyatxkwsrvldp]gffgmieinxlfzpiej +jaeayfunulncspts[stghconfjhkqkrxncwi]kcnaqhyukuirsaeebp[vynwfnoxxxbqztj]gddvegwjuryfnkgkpqq[jnhmbdpvsxreqhoek]pgpikslhvbnmbxbkbc +lajiqiaxcxgpvsbu[bfetstragmoosbw]hzurjpxhecnadwosn[dquibbrojgurqiqd]aceccsnyrnfmcsd[quqxmzleqvspvsemjpn]noxrndgdrkffsdvh +bytcvwxuavajevmde[nhmjatzolmbdfgogup]qpildujniqlnfbmuf[gxpgorlbxpqfsoreuey]hcfyjmkoywueuivrio +amvudustnspjqsbpjp[wdudhbvvlgzbbbwlafg]kwpyjvuerzyzmzft +vwpklmfpzssyoifbb[bwtpxodxedpdsvgu]azathmhdnqkhbmrdlxn +iwzncixpjxypnmykke[wlhvfjbumhmtachoab]wtftbolwhpwnropnzv[zhfcmkbwizknymev]twrumqadwvsaciwbwoi[evodjtvrucrzgtwio]fmmbddkwwpaziycik +dkodbaotlfdaphwzbcc[ldzeemqiovyqjgs]qxibabdusgaistkru[usglloxgycyynmp]aaocvclsocababbzxeg[liaacgfxytuqudp]jvvqsypuoduyhvraak +bwzsacxgqkbjycgfw[dbnligvrmqscasutn]rbgybqqsgjvlonkut diff --git a/2016/aoc7/src/main.rs b/2016/aoc7/src/main.rs new file mode 100644 index 0000000..254f23d --- /dev/null +++ b/2016/aoc7/src/main.rs @@ -0,0 +1,95 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +fn main() { + let lines = read_file(); + let mut ssl_count = 0; + for line in lines { + let mut in_squares = false; + let mut char_buffer = [' '; 3]; + + let mut abas = Vec::new(); + let mut babs = Vec::new(); + + let mut chars = line.chars(); + char_buffer[0] = chars.next().unwrap(); + char_buffer[1] = chars.next().unwrap(); + char_buffer[2] = chars.next().unwrap(); + if is_aba(char_buffer) { + if in_squares { + babs.push(char_buffer); + } else { + abas.push(char_buffer); + } + } + + for c in chars { + match c { + '[' => {in_squares = true;}, + ']' => {in_squares = false;}, + _ => {} + } + char_buffer[0] = char_buffer[1]; + char_buffer[1] = char_buffer[2]; + char_buffer[2] = c; + + if is_aba(char_buffer) { + if in_squares { + babs.push(char_buffer); + } else { + abas.push(char_buffer); + } + } + } + + //println!("ABA {:?}", abas); + //println!("BAB {:?}", babs); + + let mut is_ssl = false; + for aba in &abas { + for bab in &babs { + is_ssl = is_ssl || correspond(aba.clone(), bab.clone()); + } + } + + //println!("Is SSL? {}", is_ssl); + + if is_ssl { + ssl_count += 1; + } + } + println!("SSL_count: {}", ssl_count); +} + +fn read_file() -> Vec { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} + +fn is_abba(char_buffer: [char; 4]) -> bool { + char_buffer[0] != char_buffer[1] && + char_buffer[0] == char_buffer[3] && + char_buffer[1] == char_buffer[2] && + char_buffer[0] != ']' && + char_buffer[1] != ']' && + char_buffer[0] != '[' && + char_buffer[1] != '[' +} + +fn is_aba(char_buffer: [char; 3]) -> bool { + char_buffer[0] != char_buffer[1] && + char_buffer[0] == char_buffer[2] && + char_buffer[0] != ']' && + char_buffer[1] != ']' && + char_buffer[0] != '[' && + char_buffer[1] != '[' +} + +fn correspond(aba: [char; 3], bab: [char; 3]) -> bool { + //assumes both follow the aba pattern, so [0] == [2] + aba[0] == bab[1] && aba[1] == bab[0] +} diff --git a/2016/aoc7/test_input.txt b/2016/aoc7/test_input.txt new file mode 100644 index 0000000..a675097 --- /dev/null +++ b/2016/aoc7/test_input.txt @@ -0,0 +1,4 @@ +aba[bab]xyz +xyx[xyx]xyx +aaa[kek]eke +zazbz[bzb]cdb diff --git a/2016/aoc8/Cargo.lock b/2016/aoc8/Cargo.lock new file mode 100644 index 0000000..dd33856 --- /dev/null +++ b/2016/aoc8/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc8" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc8/Cargo.toml b/2016/aoc8/Cargo.toml new file mode 100644 index 0000000..c49deb6 --- /dev/null +++ b/2016/aoc8/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc8" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] +regex = "0.1" \ No newline at end of file diff --git a/2016/aoc8/input.txt b/2016/aoc8/input.txt new file mode 100644 index 0000000..d827762 --- /dev/null +++ b/2016/aoc8/input.txt @@ -0,0 +1,194 @@ +rect 1x1 +rotate row y=0 by 7 +rect 1x1 +rotate row y=0 by 5 +rect 1x1 +rotate row y=0 by 5 +rect 1x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 3 +rect 1x1 +rotate row y=0 by 5 +rect 1x1 +rotate row y=0 by 3 +rect 1x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 3 +rect 2x1 +rotate row y=0 by 7 +rect 6x1 +rotate row y=0 by 3 +rect 2x1 +rotate row y=0 by 2 +rect 1x2 +rotate row y=1 by 10 +rotate row y=0 by 3 +rotate column x=0 by 1 +rect 2x1 +rotate column x=20 by 1 +rotate column x=15 by 1 +rotate column x=5 by 1 +rotate row y=1 by 5 +rotate row y=0 by 2 +rect 1x2 +rotate row y=0 by 5 +rotate column x=0 by 1 +rect 4x1 +rotate row y=2 by 15 +rotate row y=0 by 5 +rotate column x=0 by 1 +rect 4x1 +rotate row y=2 by 5 +rotate row y=0 by 5 +rotate column x=0 by 1 +rect 4x1 +rotate row y=2 by 10 +rotate row y=0 by 10 +rotate column x=8 by 1 +rotate column x=5 by 1 +rotate column x=0 by 1 +rect 9x1 +rotate column x=27 by 1 +rotate row y=0 by 5 +rotate column x=0 by 1 +rect 4x1 +rotate column x=42 by 1 +rotate column x=40 by 1 +rotate column x=22 by 1 +rotate column x=17 by 1 +rotate column x=12 by 1 +rotate column x=7 by 1 +rotate column x=2 by 1 +rotate row y=3 by 10 +rotate row y=2 by 5 +rotate row y=1 by 3 +rotate row y=0 by 10 +rect 1x4 +rotate column x=37 by 2 +rotate row y=3 by 18 +rotate row y=2 by 30 +rotate row y=1 by 7 +rotate row y=0 by 2 +rotate column x=13 by 3 +rotate column x=12 by 1 +rotate column x=10 by 1 +rotate column x=7 by 1 +rotate column x=6 by 3 +rotate column x=5 by 1 +rotate column x=3 by 3 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 14x1 +rotate column x=38 by 3 +rotate row y=3 by 12 +rotate row y=2 by 10 +rotate row y=0 by 10 +rotate column x=7 by 1 +rotate column x=5 by 1 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 9x1 +rotate row y=4 by 20 +rotate row y=3 by 25 +rotate row y=2 by 10 +rotate row y=0 by 15 +rotate column x=12 by 1 +rotate column x=10 by 1 +rotate column x=8 by 3 +rotate column x=7 by 1 +rotate column x=5 by 1 +rotate column x=3 by 3 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 14x1 +rotate column x=34 by 1 +rotate row y=1 by 45 +rotate column x=47 by 1 +rotate column x=42 by 1 +rotate column x=19 by 1 +rotate column x=9 by 2 +rotate row y=4 by 7 +rotate row y=3 by 20 +rotate row y=0 by 7 +rotate column x=5 by 1 +rotate column x=3 by 1 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 6x1 +rotate row y=4 by 8 +rotate row y=3 by 5 +rotate row y=1 by 5 +rotate column x=5 by 1 +rotate column x=4 by 1 +rotate column x=3 by 2 +rotate column x=2 by 1 +rotate column x=1 by 3 +rotate column x=0 by 1 +rect 6x1 +rotate column x=36 by 3 +rotate column x=25 by 3 +rotate column x=18 by 3 +rotate column x=11 by 3 +rotate column x=3 by 4 +rotate row y=4 by 5 +rotate row y=3 by 5 +rotate row y=2 by 8 +rotate row y=1 by 8 +rotate row y=0 by 3 +rotate column x=3 by 4 +rotate column x=0 by 4 +rect 4x4 +rotate row y=4 by 10 +rotate row y=3 by 20 +rotate row y=1 by 10 +rotate row y=0 by 10 +rotate column x=8 by 1 +rotate column x=7 by 1 +rotate column x=6 by 1 +rotate column x=5 by 1 +rotate column x=3 by 1 +rotate column x=2 by 1 +rotate column x=1 by 1 +rotate column x=0 by 1 +rect 9x1 +rotate row y=0 by 40 +rotate column x=44 by 1 +rotate column x=35 by 5 +rotate column x=18 by 5 +rotate column x=15 by 3 +rotate column x=10 by 5 +rotate row y=5 by 15 +rotate row y=4 by 10 +rotate row y=3 by 40 +rotate row y=2 by 20 +rotate row y=1 by 45 +rotate row y=0 by 35 +rotate column x=48 by 1 +rotate column x=47 by 5 +rotate column x=46 by 5 +rotate column x=45 by 1 +rotate column x=43 by 1 +rotate column x=40 by 1 +rotate column x=38 by 2 +rotate column x=37 by 3 +rotate column x=36 by 2 +rotate column x=32 by 2 +rotate column x=31 by 2 +rotate column x=28 by 1 +rotate column x=23 by 3 +rotate column x=22 by 3 +rotate column x=21 by 5 +rotate column x=20 by 1 +rotate column x=18 by 1 +rotate column x=17 by 3 +rotate column x=13 by 1 +rotate column x=10 by 1 +rotate column x=8 by 1 +rotate column x=7 by 5 +rotate column x=6 by 5 +rotate column x=5 by 1 +rotate column x=3 by 5 +rotate column x=2 by 5 +rotate column x=1 by 5 diff --git a/2016/aoc8/src/main.rs b/2016/aoc8/src/main.rs new file mode 100644 index 0000000..cb783ae --- /dev/null +++ b/2016/aoc8/src/main.rs @@ -0,0 +1,117 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + + +struct Screen { + data: [[bool; 6]; 50] +} + +impl Screen { + fn new() -> Screen { + Screen { + data: [[false; 6]; 50] + } + } + + fn rect(&mut self, a: usize, b: usize) { + for x in 0..a { + for y in 0..b { + self.data[x][y] = true; + } + } + } + + fn rotate_row(&mut self, y: usize, b: usize) { + let mut row_copy = [false; 50]; + for x in 0..50 { + row_copy[x] = self.data[x][y]; + } + for x in 0..50 { + self.data[x][y] = row_copy[(x+50-b)%50]; + } + } + + fn rotate_col(&mut self, x: usize, b: usize) { + let mut col_copy = [false; 6]; + for y in 0..6 { + col_copy[y] = self.data[x][y]; + } + for y in 0..6 { + self.data[x][y] = col_copy[(y+6-b)%6]; + } + } + + fn print(&self) { + for y in 0..6 { + for x in 0..50 { + print!("{}", if self.data[x][y] {'#'} else {'.'}); + } + println!(""); + } + } + + fn count_on(&self) -> u32 { + let mut count = 0; + for y in 0..6 { + for x in 0..50 { + if self.data[x][y] { + count += 1; + } + } + } + count + } +} + + +fn main() { + let lines = read_file(); + let mut screen = Screen::new(); + for line in lines { + if line.starts_with("rect") { + //rect 3x4 + let re = Regex::new(r"rect (\d+)x(\d+)").unwrap(); + let cap = re.captures(line.as_ref()).unwrap(); + println!("{} parsed as RECT. A={}, B={}", + line, + cap.at(1).unwrap_or(""), cap.at(2).unwrap_or("")); + screen.rect(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap()); + + } + else if line.starts_with("rotate row") { + //rotate row y=0 by 4 + let re = Regex::new(r"rotate row y=(\d+) by (\d+)").unwrap(); + let cap = re.captures(line.as_ref()).unwrap(); + println!("{} parsed as ROTATE ROW. A={}, B={}", + line, + cap.at(1).unwrap_or(""), cap.at(2).unwrap_or("")); + screen.rotate_row(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap()); + } + else if line.starts_with("rotate column") { + //rotate column x=1 by 1 + let re = Regex::new(r"rotate column x=(\d+) by (\d+)").unwrap(); + let cap = re.captures(line.as_ref()).unwrap(); + println!("{} parsed as ROTATE COLUMN. A={}, B={}", + line, + cap.at(1).unwrap_or(""), cap.at(2).unwrap_or("")); + screen.rotate_col(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap()); + + } + + screen.print(); + } + + println!("On: {}", screen.count_on()); +} + +fn read_file() -> Vec { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} diff --git a/2016/aoc9/Cargo.lock b/2016/aoc9/Cargo.lock new file mode 100644 index 0000000..00bd2f7 --- /dev/null +++ b/2016/aoc9/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc9" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc9/Cargo.toml b/2016/aoc9/Cargo.toml new file mode 100644 index 0000000..de293f1 --- /dev/null +++ b/2016/aoc9/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc9" +version = "0.1.0" +authors = ["Justin Worthe "] + +[dependencies] +regex = "0.1" \ No newline at end of file diff --git a/2016/aoc9/input.txt b/2016/aoc9/input.txt new file mode 100644 index 0000000..6692559 --- /dev/null +++ b/2016/aoc9/input.txt @@ -0,0 +1 @@ +(6x6)AFPLBX(2x3)ZE(53x13)(4x7)ZGQO(2x4)NJ(1x8)M(24x11)(18x7)HMLOASMJNGZHMCEVEX(11x2)(6x6)TRDPQX(157x12)(60x12)(2x3)SB(7x1)FBSAUFK(4x1)NMZK(10x2)RLIIHFEKRY(10x6)GMDUIQDOZJ(71x8)(1x11)N(19x5)EHNAZSRTFYXOZNFTOOQ(6x4)XKARLK(13x1)IRATYZQMJXHAH(4x8)VFUJ(8x6)AOOEHHBF(27x6)(11x9)(5x15)KTTHB(5x6)AELEZ(17x10)AOGNMNTGDJDYEMMEH(7x8)BOIOHRF(6x2)ZKXONV(172x8)(6x5)(1x8)V(17x6)WEVFHKUDETBOZVKIO(2x14)ZI(75x9)(5x5)EXKDZ(4x4)BOGK(10x5)SXYSSOACJR(3x15)FHO(24x10)YBZPMZIPUCEIYNGYAUPVFOKB(43x3)(13x2)MERJWKSXBIEKP(2x4)CR(4x5)DFDQ(2x15)ZM(89x5)(43x6)(16x8)RIGCVPPOSBRJSJCB(2x9)XI(1x11)M(2x8)QT(8x6)(3x8)XVC(20x15)SBWQFWQWPQHXZXDWSXIR(4393x15)(25x5)TEAACSAHWYWPYJZEPDIHUMIPB(1026x1)(1x7)K(768x7)(388x3)(113x9)(70x11)(12x10)HDEPKSMDLHAX(2x5)RU(29x13)BIOENKVYNENIFNCSWNZIJGCZXBUVF(3x1)JRO(30x2)(11x9)NCTAXULXPBY(1x5)K(2x7)WQ(76x10)(13x7)UDCLRUKNLOAEL(17x10)(11x8)TLRICJOXJPO(26x13)HBPYKHNJRGJHSXUFGJAAHODUDG(177x13)(58x14)(17x15)MWIVHZEKJKLDWPYEN(7x5)MLNEAXO(1x2)F(10x2)GMUPKWMFFU(51x13)(2x12)TG(29x1)CJZOBLWTYDISRYKVWHJKRDDNHSABE(3x5)VDV(36x7)(7x2)JOQSKQM(10x4)SSQKRCQCYQ(3x3)HRU(7x6)(2x7)CG(271x13)(14x12)TPDOYGCYWKAOQU(223x5)(15x1)WKAGRMIPECLUUPH(68x2)(10x15)VRFPOQRGAW(5x6)MEVXZ(11x13)INACCUVBTIP(1x12)M(10x5)ECIALUKBGQ(29x5)LDVPFVNKSBWVZCJUOLIJZHYNOXLHZ(42x9)(11x14)HKDQCRYGEWD(3x5)DDV(10x8)KRRTDJEMKB(39x8)(13x8)IWLYAVYPLTFBF(14x8)PMPTEZESXEQSYM(13x12)SYBXETSKQLUYU(12x5)(7x3)(2x4)FH(69x10)(63x7)(6x4)RVKPXJ(46x1)(19x14)YCVJOBRSCSVKJJWUBJI(4x6)VUOI(5x15)WIFPK(237x15)(230x7)(51x15)(45x5)(9x11)BUZLRCBIY(2x5)ZZ(8x6)DNEOUHUT(5x2)QFOTV(164x11)(30x14)YOCHTVEXSZYELWOMGCXOISALUWCWTJ(8x15)QIINZKAI(1x1)F(88x5)(8x1)SIZRWUDB(49x7)AWSFCZFEGKBUKONNMQQSIGHMKQFAMUEBLTQFGEZLMUTNWXOCH(1x12)T(8x7)ZOTXRWXA(7x15)HGGWNTM(1484x6)(691x6)(53x6)(2x14)IB(39x3)ASFVSLNNXYBFSSOPECXZOEVPRIGJCTMLWCFSVTZ(72x4)(66x1)(38x7)(17x7)DXTENHWTOXYZMQFLF(2x2)OG(3x6)ATG(16x1)IBSUFIGHTLDMGRZE(9x5)DKNZYEYGJ(288x11)(165x9)(16x4)MDBGELYWXPUTRCEZ(14x14)PHSIPUMMXOMBWF(57x9)(13x13)WIVFVHXPHBTWO(4x6)XSWT(9x5)CPSCDHORP(1x2)M(3x8)JJE(12x4)ZADOSQULBZRT(34x10)EUJRPXWESNMXYDAUHFPLCLOYZCUKOSDPTZ(108x12)(10x13)CJVGTNJFUE(37x10)LDQKJRVQQKTVRBMNRIFDMZBJOQZKJSBZPWWLQ(24x5)FXOCHIJNODJUEGYPZYTIADPF(11x4)FUNCENOZTTS(237x7)(106x6)(9x6)SBSWNIMDC(58x11)(6x8)VJZVTK(5x2)QRAXJ(3x2)KAC(9x11)EWJHYTQXW(9x2)TSWWFYDYC(21x2)EXPZWOLLWOALTQGUZXTUS(117x2)(6x8)TLGPET(3x7)GBW(39x6)(32x10)VGSULYHYHHFVDEIQYAXVUGNDVDCDGANM(46x13)(14x6)VYXTECTXLBJFWZ(12x6)IFRBYZIXFTOC(2x14)HF(14x7)(8x10)AFPWFLXJ(726x6)(160x5)(45x13)(1x4)K(8x2)(2x14)WF(19x11)EDIZTWWQBGFLFXEWHFA(17x10)WIGPDKRTBSOJTFXKY(15x2)ADLZSCNVATBMRBV(34x12)IVGRGESBMMRDBWKCIDCLYWVXANHCWQQEQL(15x12)WGFAYDKOFYOZWHU(464x6)(42x14)(35x12)(5x12)TVUTT(2x13)RK(2x10)RC(3x1)LXD(20x1)(14x6)OJOAQUIEOIUVXE(152x6)(16x1)IIDXUSCZEOEHDVIP(98x6)(18x4)AFGQQZEGERPRXYXDTI(15x13)UPZDHXFYQRGBNBZ(45x10)GEJVEKLGJBCATXONOSOJWLLZESRRGSLNTRDKDKJKNAOYC(20x4)SHUJGLTDVLVMUBGUYCCQ(202x2)(29x4)(23x9)ZNKNMTBUBYEMBVCDGNHMZRB(123x6)(8x8)QCPLTVYD(2x5)YQ(13x3)XFKTLSHCQAPID(30x1)DRTIAMQDRSIQQIZKAXMVZDLCRHYVWS(41x11)SLVGMXLAUIETLVILQABUODBTBFZZHOSFRUJKLQPSE(21x8)(4x9)EXQY(6x13)QAFDCI(4x10)XYII(15x5)VZTRXIMIYNGDQKZ(75x4)(6x11)RFOKPH(2x15)ZH(10x15)ZDWQPCMXCQ(32x7)DJRJDFDSGKZBQZMNIKCOLHWSLYCQXEKH(1x14)H(27x2)(21x3)GCUQEXKSVPNXNOTUOZBWR(1828x7)(1107x13)(550x1)(177x11)(30x15)(1x13)T(3x1)MTN(9x14)EDQQAMGTE(39x4)(14x2)NPINNXFQEZICDQ(13x3)QYHEGLYNFPMMQ(88x13)(22x13)GLVPCEBDDABCPDHXXXZDTT(1x3)A(1x3)J(40x14)LPRDKSIGCUXWPZIPZKUGMNGLLGQHFDNXLHRNVPEM(14x7)TPYKUDKFRLVPPF(135x10)(10x7)GWRRITBPFN(5x5)ECPKJ(50x6)(4x10)DORU(1x12)S(9x3)YQFICKCXH(7x3)ZJFMLPD(2x9)HK(3x7)HWQ(39x6)NPYOZFXSQJMVHMGSMHMKBOQLXAUVSZZRUGFOIUL(122x13)(7x5)WQPCNYP(35x14)(21x4)UIBUUSAWFXCJOAAOQYWKD(3x3)VKI(17x11)YCWPDYLDDKIDATXKY(38x4)(4x2)FPPY(16x8)ETEICDHDZBPINNTA(2x4)RR(66x3)(59x15)(9x10)WLRKNQFPX(4x3)OCJF(8x1)QSOOLMPP(4x6)DKRV(8x5)PBRRNJTD(377x10)(88x7)(81x11)(17x8)RPFNVFZNWFZCEDXYR(3x3)DMM(6x1)ZOBJHV(1x10)S(26x3)MLOILGCEQPKNQPYBABPWRMGTCU(13x2)KNRNZAANDYZVG(2x15)UR(1x5)Y(242x12)(144x11)(8x6)HUOOXYEN(35x2)HGPTAFHSMKKPDMGARWVNYVCJWMZETRIJNXM(4x4)TJDP(28x5)UKOZMKRXJLSBZJRRVABSWSIEIDMC(40x14)HCTILCVYQXWNUZHZAZGCXKXRZDHFNTKISPMUOLAD(8x6)(3x9)NXB(44x15)(3x13)GZF(9x7)XCHQMMOXC(2x8)EO(8x12)GTHAWKXZ(3x4)TFJ(12x7)JOAKSXHVNNNX(157x14)(150x8)(11x13)(5x15)GVWWA(125x1)(14x12)OALPJNHTLRQGRJ(24x15)EEWRKUJFKQFVCFVVGRNXRNMO(23x12)SWMZOIWGOVLKIRKBHSIAYFY(16x6)VQBYRVNJQKQZUXYC(15x8)SRQFUMLAWWDVVCY(166x3)(8x4)ROOZHNPS(1x5)G(140x3)(5x11)NNJCA(122x8)(12x10)ACNODOEIPNFS(36x7)(2x3)HI(9x12)WVTUTLVXH(1x14)L(1x11)R(28x13)TFKQTKVMFXBNHUCUGXXBKSPBSYOI(2x8)RL(13x5)(8x5)BMGHNIWS(80x2)(4x5)CLIN(64x13)(12x7)PUIYXOSOYXRH(23x9)(1x14)J(1x10)L(3x12)BRJ(11x3)(5x12)LIYCT(446x9)(1x14)A(128x1)(86x9)(15x1)XKXMQLFUXTGSIUI(36x8)UUZAZBICEWZOHBKMLKFMOPRGDNIIXYZIRYBO(16x10)(3x1)DCZ(2x10)RG(15x1)TVCSLSBSQOEZORE(9x12)(4x5)FOWX(67x7)(27x3)(20x11)QHEAAUEGZRHVTYXMHWGD(27x14)(1x6)C(14x15)EHUGFRTEFCLPYB(223x13)(192x1)(27x13)(8x1)ECDZKCJY(8x12)HNTSWDYP(14x1)SMPGAHCDMTHRPF(43x6)(2x9)QY(3x1)NGD(7x11)QBFWGLX(3x4)JCI(1x10)L(31x2)(3x10)NIH(16x2)SFTKKDPDSTPUVOQA(46x3)(1x11)N(19x13)RGTNKUTACWUHOBKHPAF(2x9)JH(1x5)D(18x5)ELEQYVKHCZWCPDKGET(4430x14)(6x6)SGLJXG(1303x14)(8x3)PBGTOJDF(472x9)(1x14)U(299x2)(71x12)(2x14)UZ(13x11)(7x13)OYMYFOR(22x12)MLXGMMRGPSASXFVDRWWYGU(9x5)(3x14)NFY(96x1)(22x8)XALEFGLORBLTMHIWSARRDS(24x12)(17x14)QARJVLVCJVIJEJOLE(8x13)(3x8)HPO(16x14)UMCNXKMHFCKLLSTQ(96x11)(3x8)IYF(82x5)(3x1)OBQ(30x14)UJYENTNVNGKUFYSGTPROKDUVXVAAAP(18x14)OFJNLBOUNGILMQMTBO(7x2)UJJJZAX(3x2)JTL(2x10)YM(112x1)(83x7)(50x6)(4x11)TSPK(2x2)AU(6x15)XSSYWL(3x12)DCS(6x13)OIDFMJ(1x14)N(13x12)EEZZPERSDPKOT(17x7)SBEJBRDQAVFLLCNUW(3x11)ZGN(25x3)(18x15)CSVBGEAPPCXHRXBYIK(1x4)M(664x4)(337x14)(99x5)(12x11)QQXQUTFBUNIV(7x7)ALTZFYQ(15x4)VBFROTJMHRPGBJW(40x12)(23x8)UTBYEFQMPFIEXVVLZXVDWWJ(6x2)BMJTZF(4x3)NRUY(6x12)TKXPAM(62x6)(3x15)RQS(1x5)K(41x8)(12x9)NJRYDQRLHCNB(17x7)AEPPXIYSGQCVSPVMF(135x14)(72x7)(2x9)FB(4x10)OGAV(26x6)QXHCWFQUDQKXVJJGIZDZLTBIKY(3x10)CXD(9x5)IDBZUGYPE(14x2)KYYCJLAYHWQQVD(30x13)(7x11)YXUUJZQ(11x3)YRHZXTLPZJF(311x14)(49x6)(42x12)BLCUHNHXNFKMUKOHBMVPXMURVUESFYMANQKXIQEVOG(79x1)(73x8)(5x3)JGNSI(20x11)DVUPOLXLRCUFVJYHXWJV(15x2)OPIKHDJPHQPXYYX(9x10)FWYSCUOMU(164x1)(91x13)(6x13)UPDAGP(14x5)LIKFHUVDMDQAAK(31x13)FEJFKXKSSAJYNJAKXKRQPUZMHNTBTGI(7x7)OLHMUKA(4x7)EGNE(59x12)(4x7)JSRJ(4x7)JCES(15x6)QTFXSXGYBARIWUP(8x6)LQDBINXU(1x12)H(127x1)(12x5)RHGPFMZRPSFB(4x11)URMZ(93x2)(87x7)(75x9)(11x14)NXGIGQVUUMV(1x6)N(38x3)IUHTFEASJJFMMTHJFEQAAYMSIUUGNMTUUQSOCN(2x7)CN(1x8)B(894x11)(876x12)(587x11)(2x10)BQ(178x12)(96x3)(14x14)BLIWCROJXSLVTK(8x15)KIYKJSRQ(54x15)KTAQJDJHFWAVGGYOZUWYLIBCBQIXHICNALPOGMROGJLDFEAYDTVTNR(2x6)NS(11x1)JKXMXJTBIDP(29x4)(7x13)EBVJEZD(10x3)XRDYMAZSBY(10x10)OIRMTHQLNG(132x2)(31x11)YAGJSHBUQNJREUVAPLXJGSPVFNQVGBD(54x12)(1x12)Y(5x6)UPPMP(9x7)HAVOGCOLF(10x6)TUKIFLCHLV(2x1)YJ(2x11)JJ(19x9)(1x5)M(8x4)UEZWDQZC(45x4)(39x9)(6x9)UWXBMZ(2x12)JJ(3x2)KDB(7x7)FLZMQSC(196x9)(26x7)YUUQIHKCXYRRGSMXGLWMSSAIAP(1x2)W(3x5)XGY(115x5)(8x13)YUGCSANY(10x12)ZVBPLBCJQK(9x7)RGODHRSNC(54x13)KFVTGSWIAKERKDISXRYZDZJEPXSKGAVZKGIKWRSSOTYSYRPEBHOWRC(4x5)PSBS(21x10)(5x7)PKBSK(6x1)CISVQM(241x6)(39x5)(32x14)XIRRYTZBERAKPMGIMOLYNEODGWELVAJP(113x15)(5x10)USAHI(2x13)ZP(88x4)(12x9)WBDEFGCZAMPM(8x11)DZMSAIVZ(3x15)XCK(23x5)LUKNXCCEPEPKSODMGEZJDYY(11x12)CJTACNNPKPZ(61x12)(3x7)YRN(30x7)GCJRMCZOJFMKFZJAJTZOMYXNWIFVSE(11x3)(5x13)BZFIF(2x2)GO(2x15)EM(18x10)YIGMSZEGBPPIMGKUHO(4x14)FUKK(1851x10)(164x11)(117x3)(109x10)(56x15)(3x13)MSN(11x15)VPUOKCEWGFX(7x7)UKXWCWX(2x11)QB(3x13)QFE(12x13)(7x1)WTMANLW(21x5)SDTRPSRMRYUZKIZIMCYLO(33x11)(16x4)(4x8)ASQN(1x10)M(6x1)(1x5)F(1006x3)(21x13)(15x4)WHEZYMBJXTBYCZG(462x9)(227x1)(33x11)(2x10)VR(11x8)PLIFVKRPUWO(3x1)WFI(53x4)(5x11)GUHAR(9x6)OTBCHHMTJ(4x7)JJQH(5x8)TTUUW(4x6)GRAX(1x10)I(27x14)(12x9)TPXYVLAYHHUB(4x3)WNYV(81x3)(20x3)YXDCPPYIDNNAQJMWXFFM(5x8)FZLRN(5x7)BKMSG(12x4)ZVRYPOOSYOMA(11x3)UGUWOKXVITR(220x15)(8x7)IRFZJLCM(34x4)(8x7)KIQHQWLZ(8x1)RTGQVPLE(3x8)RVU(60x14)(3x12)UJP(8x14)NYDICRGG(23x8)CHISDWBISOZYDWRNEBRWDSJ(3x6)EJG(14x12)PIWNBDAEREATVW(73x9)(14x3)IEPNRGKUCCEERW(4x7)FCWC(3x14)EXU(29x1)CDLSEHSCOEUZKWARMGBPXCHYMVQFP(188x3)(7x6)YNYVYUC(43x10)(15x11)YHQHLIEPOVAHHJQ(15x1)(2x12)EC(2x5)KR(113x1)(8x8)ZJHMLYAU(74x12)(5x3)CQZMJ(4x2)QGWN(3x9)LAE(7x1)OCFJMDJ(29x8)FIWUGBREHYRACQYOVVQJBDFHDGMEQ(13x4)GRPUVTXRVSHVM(1x5)F(307x3)(225x10)(47x6)(17x13)VURYAUGWWOIHHQJDD(8x3)WPVVCPUT(5x5)BFBOB(59x1)(8x3)UWPCOMZH(3x13)NRQ(4x13)WUJV(12x5)FUSBMTPOWDTX(3x12)RXT(45x8)(16x6)MTVMZPSDFMLDYLLD(16x14)JUHUHFNBYHGFWLVG(50x2)(2x9)GR(4x6)URSQ(27x10)LAGGDJBKBLVLPJVVDEZCXEJLFBJ(67x14)(7x15)OMHMPKM(2x7)BH(9x14)LDAFCOKEL(25x12)(5x1)QMTQH(1x15)I(2x15)RV(5x1)KKFYZ(639x15)(295x4)(8x10)SLSXUAJJ(160x7)(5x14)ICLSB(86x3)(6x7)CUYULZ(24x14)RZUPMSJMKASMGYUKSAZQKMBC(23x7)NINZWUFKIZZNKOZUAQOROBG(9x15)YJKHZIZFP(2x7)HC(30x5)(8x2)OBZCEUCF(10x10)LNGPRAITSF(8x11)(2x14)NG(106x14)(24x9)ACQDRKVEOEDULYMLYBGOMSIJ(19x2)UBUHEYIJEGFMCZSTDDO(35x4)HFNTQACPTELDNRWVUVKNKPBVIJMZWAZEOKS(5x3)RSIAK(330x8)(179x6)(34x8)(13x1)CCRZOVJLZOBBO(3x14)WPC(1x6)L(15x13)VAVFETWJRRFZFPE(11x13)VKJLGKAOCUC(92x12)(20x10)MRTDKUJPLGPXMTVLRSUF(2x6)QZ(11x15)MHFLVOFUNDC(25x11)SONLCWNGCZFGMSXYJXSFPVGVY(3x2)QRI(136x15)(45x13)(6x4)QQSQCM(1x9)U(7x4)VIDEIXN(10x3)WFRKVWNLJM(50x7)(13x4)OYFDFFFLITCIR(16x6)CIRLRKXBHVHNUPFZ(3x15)GRD(11x3)FMDUOABWGPB(5x15)EWSOH(3x4)JYH(338x8)(331x5)(324x1)(194x3)(2x4)ZF(48x12)(3x9)JVP(4x2)BWLT(24x15)KPNIHTTPTNNAHSSSDLAKDDNT(6x3)SZJQKG(64x15)(19x14)RSMBLFUAZBGBCJPQDES(5x11)KLUTW(1x9)J(5x13)UYNTL(5x8)NVICZ(43x11)(20x6)HURCGFJBVQOKDECLQELO(3x4)XID(4x9)WOCX(38x5)(2x8)KV(25x2)(18x13)SEYOWGYPRRKBHNVVGI(72x14)(18x10)RXBCYLJENTUPCKCIDO(22x8)(5x5)ZPUYC(7x9)LXRWCDN(2x3)XD(7x4)DEKJLWL(1794x8)(1786x4)(297x10)(289x14)(162x10)(78x9)(1x9)T(28x11)WCIFRVQWPNOEEBPKGYPFCOTNMRAP(12x7)IYTEKBFTEZIX(4x6)ALRX(5x2)QSCXQ(72x4)(25x8)OHCTVXZIEWNMEZBVFKTLIMGQW(4x13)XEBD(6x13)UZZITD(12x13)QPGHTTJTMMFJ(103x9)(24x4)FOJJCXKNPHEGIRYIFBLDVUES(66x14)(15x14)AJEUHOVVHZVHGAV(5x9)CVIBX(15x8)WIHEKYSJZCLABUK(8x5)UYQLGBEY(3x14)QAR(690x4)(14x3)KRIBLTDDRJSFGY(4x9)MMCG(338x15)(15x4)(4x3)VIER(1x7)J(76x14)(8x6)VNTBZCVR(47x6)(24x3)HDWQXSRQWIFPKUSRADRBXAPD(11x8)GSSDBTQZINR(5x3)TWHSS(74x2)(5x3)DMUEM(4x2)FLBE(48x14)(10x8)YLSBTQPTJJ(2x10)ZP(8x7)JFXOKRXJ(5x11)WDHLN(82x2)(7x12)IEXUOMG(8x11)PVPIWSQY(36x7)NXNEYNWWPODZRJBIQFLDLZVSEDRPRWZUUXQS(7x11)WWTZGJK(59x11)(52x11)(17x14)QMXUKMPFATJEJQASH(22x6)WEXAZYBXEIIIWKEYRNINYH(246x5)(7x14)XMWZOQI(225x13)(9x6)(4x4)RMSV(35x9)(12x15)FSEJCGTVXEUT(1x7)L(5x5)IALLO(83x2)(5x5)HEUVE(26x8)BGAOGWCKQJVESARPQNTDIKKOKN(34x12)DGCKPWQBLZNXDLLYIWKRAOVPCXIIEWLSMN(75x6)(6x6)RHDULO(16x11)CRXVYYDZXJFFSPOR(5x14)OXTUY(24x4)UHCHXFDOONZXAZTTBFSINOEG(55x14)(12x12)ZKOOCWQTVQUS(19x10)WNHJGQATSCBTMLIVOYB(5x1)ZHQEA(710x7)(2x14)FD(170x9)(162x11)(11x10)MJTMRWMKRNT(28x10)(21x14)MJZQATVTRTWDEQNSZOXKK(59x15)(1x10)K(16x6)AVTYFAJYHSKETUYI(1x15)M(4x15)CDYM(7x15)TGWTHWL(29x11)HWMXLXCZVSSUPDBTIXDEGPNJJZNGX(2x6)KM(487x11)(3x14)UIF(84x4)(5x14)MDENR(66x12)(12x11)WQEVOLYPOSEK(30x5)LKBXTFFEOHNEJHOHKMMUKSDISVVQZE(5x10)PFZCP(197x12)(24x15)JLPYUIJVFQRWOACTFMQPLYHI(55x3)(14x1)KUTCZEZNWSISPL(8x7)YNZXWQMY(6x1)EZVHCC(6x3)AEVYOO(2x6)DE(68x6)(13x3)KRBXMIIHZERUV(3x2)TLR(35x4)LWCSHQCLMZAPMNSXKWCGVGDTKWUQAIWWLWU(17x11)FWYFWEMLVLQQGCJLJ(176x8)(4x2)ICOL(63x7)(37x14)SQVVGHBVLPVSLAYFZBLEGOKEHFSXSVEJOSRXO(2x2)IF(6x10)APYCKZ(73x15)(20x3)EARRAATGOHPONSTXOUVI(20x4)GBRNRAGYDCTGEODHJDUB(1x2)Z(1x15)R(3x4)QBQ(1x2)M(7x6)KJQAHCJ(24x6)UHLVTEERAYIUBGMUKOJFHRUJ(36x7)(30x2)(1x14)H(17x1)BSZIJHGVILXXURQDI(18x12)PSFBREKMLZRFFFRLZG(236x1)(52x7)(2x12)WK(16x10)CRNLMDQWZECYSFOT(3x10)ISI(6x13)FPJKZE(7x9)XOCUXIU(125x5)(105x5)LPOXYLAWSIIRQDNUWVHOLUDYOZSCFNCORKVFMSYIMMNCMNSOUGJHSBYKITYGFWUYHBJCQELUIMYXAFRFIAOSXSOIMGYEPJFPWQXSZYCDD(8x8)ILXIPPGD(7x13)TYZVRQS(14x12)(3x3)WXE(1x9)Q(40x10)(34x7)(2x2)AZ(10x15)UPJJICKDLA(5x6)CHXZV(153x7)(13x8)LCBGVTVMPVNMJ(30x8)(6x8)KXMWXG(6x1)DJRTOU(2x15)FW(79x10)(13x9)RIFNFQDLAWBSQ(3x2)ERQ(19x1)TTHLBYCOPMTXIIDSBXX(9x14)SBPSPMMCK(7x8)MKNEMLA(6x11)YPDDWG(220x9)(65x3)(2x6)LT(13x3)XFOPJCJBLRXYH(8x5)BKPDBCLE(6x2)UNKPOA(9x15)THYQVMZUG(50x15)(9x11)AAXOWDYIN(12x14)IWTCMNVXNJAX(10x4)JPSIYYKGVJ(86x8)(29x10)ORMIZOTUMSVKNEJDCQDQHESLAQKOF(8x14)SHFMBHHV(1x9)L(14x2)QQHGYTMVZAZRDK(5x7)COVRS(51x2)(11x2)ZDTVQIWFFND(5x8)RQTFS(1x9)B(5x9)SINCP(3x3)ACU diff --git a/2016/aoc9/src/main.rs b/2016/aoc9/src/main.rs new file mode 100644 index 0000000..622819c --- /dev/null +++ b/2016/aoc9/src/main.rs @@ -0,0 +1,143 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +#[derive(Debug, Clone, Copy)] +struct Marker { + take: usize, + repeat: usize +} +#[derive(Debug, Clone, Copy)] +enum Token { + Marker(usize, Marker), + Literal(usize) +} + +impl Token { + fn size(self) -> usize { + match self { + Token::Marker(x, _) => x, + Token::Literal(x) => x + } + } + + fn is_marker(self) -> bool { + match self { + Token::Marker(_, _) => true, + Token::Literal(_) => false + } + } + + fn unwrap_marker(self) -> Marker { + match self { + Token::Marker(_, marker) => marker, + Token::Literal(_) => panic!("Bad unwrap marker") + } + } +} + +fn main() { + let mut tokens = parse(read_file()); + tokens.reverse(); + let mut length: u64 = 0; + + while tokens.len() > 0 { + let next = tokens.pop().unwrap(); + + if next.is_marker() { + let marker = next.unwrap_marker(); + let mut used_take = 0; + + let mut tokens_to_repeat = Vec::new(); + while used_take < marker.take { + let next_token = tokens.pop().unwrap(); + if used_take + next_token.size() <= marker.take { + tokens_to_repeat.push(next_token); + } + else { + assert!(!next_token.is_marker()); + //assume splits only happen on literals + tokens_to_repeat.push(Token::Literal(marker.take - used_take)); + tokens.push(Token::Literal(next_token.size() - marker.take + used_take)); + } + used_take += next_token.size(); + } + + tokens_to_repeat.reverse(); + for _ in 0..marker.repeat { + for &token in &tokens_to_repeat { + tokens.push(token); + } + } + } else { + length += next.size() as u64; + } + } + println!("Length: {}", length); +} + +fn parse(text: String) -> Vec { + let mut tokens = Vec::new(); + let mut chars = text.chars(); + let mut current_char = chars.next(); + while current_char.is_some() { + let c = current_char.unwrap(); + if c == '(' { + let mut char_count = 1; + let mut take_str = String::new(); + let mut repeat_str = String::new(); + loop { + let n = chars.next().unwrap(); + char_count += 1; + if n == 'x' { break; } + take_str.push(n); + } + loop { + let n = chars.next().unwrap(); + char_count += 1; + if n == ')' { break; } + repeat_str.push(n); + } + + let take: usize = take_str.parse().expect(format!("Tried to parse take {}", take_str).as_ref()); + let repeat: usize = repeat_str.parse().expect(format!("Tried to parse repeat {}", repeat_str).as_ref()); + tokens.push(Token::Marker(char_count , Marker{take: take, repeat:repeat})); + } else { + assert!(c != '(' && c != ')'); + tokens.push(Token::Literal(1)); + } + + current_char = chars.next(); + } + collapse_literals(&mut tokens); + + tokens +} + +fn collapse_literals(tokens: &mut Vec) { + let mut i = 0; + while i < tokens.len()-1 { + match (tokens[i], tokens[i+1]) { + (Token::Literal(l1), Token::Literal(l2)) => { + tokens[i] = Token::Literal(l1+l2); + tokens.remove(i+1); + }, + _ => { + i += 1; + } + } + } +} + +fn read_file() -> String { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .next() + .unwrap() + .trim() + .to_string() + +// "(25x3)(3x3)ABC(2x3)XY(5x2)PQRSTX(18x9)(3x2)TWO(5x7)SEVEN".to_string() +} -- cgit v1.2.3